Hi-ho ihr Lieben,
ich wollte die Uptime meiner Fritz!Box in einer (Mushroom) Entity Card darstellen, aber da erscheint dann leider nur so etwas wie "Last month". Meh. :-( Ich hätte aber gerne so etwas wie "154d, 11h, 23m" oder ähnlich, also mit Anzahl der Tage, Stunden, Minuten.
In den Developer Tools sieht man, dass der State Wert der Uptime Entität ein Datum ist, also z.B. 2022-11-28T14:22:59+00:00.
Jetzt würde ich gerne in einer Card im entspr. Dashboard "schlicht" die Differenz von "heute" und diesem Datums-/Uhrzeit-Wert des Sensors ermitteln und anzeigen. Das geht doch bestimmt mit einer Template-Berechnung?! Und wie formatiert man dann das Ergebnis, so dass ich Tage/Stunden/Minuten sehe?
Habe mich ein bisschen schlau gemacht und bin jetzt mal bei dieser "Lösung" angekommen – bin mir aber noch nicht sicher, ob das so optimal ist und auf Dauer funktioniert. Vielleicht hat ja jemand noch sachdienliche Hinweise?!
{% set devUpUx = as_timestamp(states("sensor.fritz_box_7590_device_uptime")) %}
{{ (as_timestamp(now()) - devUpUx) | timestamp_custom("%dd %Hh %Mm %Ss") }}
Naaa, das hat ja nicht so dolle geklappt. Kaum war die Fritz!Box mehr als 31 Tagen online, zeigte der auf diese Weise (also mit diesem Format-String) erzeugte String leider 01d, also wieder nur einen Tag online an – dafür war aber die Monate-Zahl um eins erhöht worden.
Das scheint mir also alles Kappes zu sein, wie ich das angehe.
Nun bin ich in Simons Video zum Thema HA auf Intel NUC installieren ganz am Ende auf die Integration "Systemmonitor" gestoßen. Und wenn man sich da auch den last_boot Sensor einrichtet, zeigt der ja sehr nett (und vor allem korrekt) die vergangene Zeit seit dem letzten Booten an – wenn auch nicht ganz so, wie ich das gerne hätte, nämlich auch mit Stunden- und Minutenangabe.
Hat vielleicht doch noch jemand ne Idee, wie man sich also so einen errechneten Unix Timestamp, der eine Zeitspanne bezeichnet, mit Formatstrings korrekt zusammenbasten kann? 😳
Frohes Neues! 🍀
Ahhh, schlauer jetzt ich bin!
{% set devUpUx = as_timestamp(states("sensor.fritz_box_7590_device_uptime")) %}
{% set duration = as_timestamp(now()) - devUpUx %}
{% set seconds = duration % 60 %}
{% set minutes = (duration / 60)|int % 60 %}
{% set hours = (duration / 3600)|int %}
{% set days = (duration / 86400)|int %}
{% set adjustedhours = hours - 24*days %}
{{ '%0.02dd %0.02dh %0.02dm %0.02ds' | format(days, adjustedhours, minutes, seconds)}}
So geht es prima. 😊
Jetzt könnte ich nur noch lernen, wie/ob man sich irgendwo/irgendwie eine Funktion basteln kann, um diese ganzen Zeilen nicht jedesmal, wo man sie braucht für einen Zeitdauer-Wert, per copy/paste einfügen muss. 🤔
Sauber, besten Dank für die Rückmeldung 🙌 & Respekt fürs selbst herausfinden 💪
Die Macht ist stark in diesem hier 😁
Da habe ich auch noch einen Hinweis, falls hier mal jemand drüber stolpern sollte: Wenn man 2 Datumswerte voneinander abziehen will (oder z.B. mit now() die aktuelle Zeit davon abziehen will), muss man teilweise mit astimezone arbeiten:
{{
(as_datetime(states("input_datetime.nachste_startzeit_spulmaschine")).astimezone()
- now()).seconds | int }}
(Gibt die Vorlaufzeit in Sekunden aus)