Liebe SmartHome for Dummies Gemeinde.

Die phpBB Forum Software gehört nicht wirklich zu den modernsten seiner Art.
Ich habe mich an einer Migration zu Discourse versucht und bin leider kläglich gescheitert.

Möchte aber trotzdem einen Neuanfang auf einer modernen Plattform starten.
Gerne möchte ich Euch animieren das neue Discourse Forum zu benutzen.
Bestehenden Usern bleibt es leider nicht erspart, sich auf der neuen Platform neu anzumelden.

Das Forum hier, bleibt selbstverständlich Online. Ich würde versuchen einiges händisch zu migrieren.
Da fallen mir die Rubriken "Template Sammlungen" oder "Best Practice Automatisierungen" ein.

SmartHome for Dummies Discourse Platform.

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

Die Unterkategorie Templates Sammlungen ist im Lesemodus.
Hier geht es im neuen Kleid weiter https://community-discourse.smarthome-f ... ammlung/12


Forumsregeln

Hier geht es im neuen Kleid weiter https://community-discourse.smarthome-f ... ammlung/12

Antworten
Benutzeravatar
Osorkon
Administrator
Beiträge: 2105
Registriert: Sa 17. Jul 2021, 16:53
3
Wohnort: Langenargen
Has thanked: 63 times
Been thanked: 580 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