Formatieren / Umrechnen - Dezimalwert zu Zeitformat dd:hh:mm:ss

Eine Sammlung von Home Assistant Templates.
Bitte nur fertige Templates posten, ergänzt um eine Beschreibung und ggf. Screenshots.


Antworten
Benutzeravatar
Osorkon
Administrator
Beiträge: 1905
Registriert: Sa 17. Jul 2021, 16:53
2
Wohnort: Langenargen
Has thanked: 60 times
Been thanked: 516 times
Kontaktdaten:

Formatieren / Umrechnen - Dezimalwert zu Zeitformat dd:hh:mm:ss

Beitrag von Osorkon »

Wie erfolgt eigentlich die Umrechnung/Formatierung von einem Dezimalwert in Minuten oder Sekunden zu einem Zeitformat dd:hh:mm:ss
Also die Ausgabe von Tagen, Stunden, Minuten, Sekunden.

Anbei ein Bsp. für die Umrechnung von einem dezimalwert in Minuten.
Im Bsp. Template kommt der Dezimalwert von dem sensor.laufzeit_minuten.

Code: Alles auswählen

# Dezimalwert in Minuten
{% set m = states('sensor.laufzeit_minuten') | int(0) %}
{{ '%02d:%02d:%02d' % ((m/1440)|int, (m%360)/60 | int, (m%60)) }}

Das Ergebnis ist die Zeitangabe im Format dd:hh:mm

3226 min ergibt 02:05:46

Dabei erfolgt die Ausgabe immer im Format dd:hh:mm
Bsp. 00:00:59

Eine andere Möglichkeit wäre nur die Ausgabe der Zeit im Format
x Tage, x Stunden, x Minuten
Wobei die Formatierung nur eins von vielen Möglichkeiten darstellt.
Dabei werden Tage, Stunden, Minuten nur aufgeführt, wenn Wert > 0

Code: Alles auswählen

# Dezimalwert in Minuten
{% set m = states('sensor.laufzeit_minuten') | int(0) %}
{% set minuten = m % 60 %}
{% set stunden = ((m % 360) / 60) | int %}
{% set tage = (m / 1440) | int %}
{% if tage > 0 %}
  {%- if tage == 1 -%}
    1 Tag
  {%- else -%}
    {{ tage }} Tage
  {%- endif -%}
  {{ ', ' }}
{%- endif -%}
{%- if stunden > 0 -%}
  {%- if stunden == 1 -%}
    1 Stunde
  {%- else -%}
    {{ stunden }} Stunden
  {%- endif -%}
  {{ ', ' }}
{%- endif -%}
{%- if minuten > 0 -%}
  {%- if minuten == 1 -%}
    1 Minute
  {%- else -%}
    {{ minuten }} Minuten
  {%- endif -%}
{%- endif -%}

Der dezimalwert 1444 min ergibt dann:
1 Tag, 4 Minuten

Sollen ebenfalls Sekunden berücksichtigt werden, sprich der Dezimalwert wird in Sekunden angegeben, sehen die Templates dan so aus:

Code: Alles auswählen

# Dezimalwert in Sekunden
{% set s = states('sensor.laufzeit_sekunden') | int(0)  %}
sek: {{ '%02d:%02d:%02d:%02d' % ((s/86400)|int, (s%86400)/3600 | int, (s%60)/60 | int, (s%60)) }}

Code: Alles auswählen

# Dezimalwert in Sekunden
{% set s =  states('sensor.laufzeit_sekunden') | int(0) %}
{% set sekunden = s % 60 %}
{% set minuten = ((s % 3600) / 60) | int %}
{% set stunden = ((s % 86400) / 3600) | int %}
{% set tage = (s / 86400) | int %}
{%- if tage > 0 -%}
  {%- if tage == 1 -%}
    1 Tag
  {%- else -%}
    {{ tage }} Tage
  {%- endif -%}
  {{ ', ' }}
{%- endif -%}
{%- if stunden > 0 -%}
  {%- if stunden == 1 -%}
    1 Stunde
  {%- else -%}
    {{ stunden }} Stunden
  {%- endif -%}
  {{ ', ' }}
{%- endif -%}
{%- if minuten > 0 -%}
  {%- if minuten == 1 -%}
    1 Minute
  {%- else -%}
    {{ minuten }} Minuten
  {%- endif -%}
{%- endif -%}
  {{ ', ' }}
{%- if sekunden > 0 -%}
  {%- if sekunden == 1 -%}
    1 Sekunde
  {%- else -%}
    {{ sekunden }} Sekunden
  {%- endif -%}
{%- endif -%}

Gruß
Osorkon

Einer muss ja für Ordnung sorgen. :D
Antworten