Suche Timer für Anzeige, wie lang ein Gerät ein Status hat

Hallo liebe Community.
Ich bin auf der Suche nach einem Timer. Dieser Timer soll mir anzeigen, wie lang ein Gerät den aktuellen Zustand aufweist.

Geht ein bestimmtes Gerät online, soll der Timer starten und die Zeit anzeigen. Geht es offline, soll auch hier wieder der Timer bei null starten und die Zeit anzeigen. Mir würden zur Anzeige die Std. und Min. reichen.

Aktuell habe ich einen Timer, der die gesamte Tagesonlinezeit anzeigt. Das ist schonmal sehr hilfreich. Allerdings zeigt dieser auch die Sekunden an, die ich eigentlich nicht brauche. Kann ich auch diesen Timer etwas “reduzieren” und die Sekunden in der Anzeige weglassen?

Bsp wie es aktuell aussieht:
hatime

Bsp wie es am liebsten aussehen sollte:
iobtime

Ergänzung:
So sieht der Sensor oben aktuell aus:

- platform: history_stats
  name: Whz-TV On Time Day
  entity_id: binary_sensor.whz_tv
  state: 'on'
  type: time
  unique_id: sensor.whz_tv_on_time_day
  start: "{{ now().replace(hour=0, minute=0, second=0) }}"
  end: "{{ now() }}"

Schau mal, vielleicht hilft dir diese Komponente aus dem HACS

1 „Gefällt mir“

Vielen Dank. Schaue ich mir gern an. Aktuell komme ich damit noch nicht ganz klar, aber ich versuch mich da mal reinzuarbeiten.

Ich nutze das bei einem Fenster mit folgendem Beispiel. Kannst Du auch gut mal in den Templates rein schreiben und testen.

{{ relative_time (as_local(states.binary_sensor.fenster_home_office_contact.last_changed)) }}
1 „Gefällt mir“

Cool, vielen Dank. Im Template funktioniert das schonmal nicht schlecht. Jetzt wäre noch eine Formatierung super. Aktuell steht dort z.B. 35 minutes. Wenn man das noch auf min kürzen kann…

Und nur damit ich das richtig verstehe. Damit dann einen eigenen Sensor anlegen und den kann ich dann nutzen, korrekt?

[Edit:]:
Hier kommt schon ein gute Ergebnis raus. Nur noch Kleinigkeiten stören, z.B. das Wort “und” zwischen Std und Min.

{% from 'relative_time_plus.jinja' import relative_time_plus %}
{{ relative_time_plus (as_local(states.MEIN_SENSOR.last_changed), parts=2, language='de', abbr=true) }}

Oder geht das auch über einen Helfer? Von welchem Typ muss der sein?

Update:
Vielen Dank. Das hat schonmal wirklich sehr geholfen.

Ich habe nun einen Helfer (Template) angelegt und kann mir diesen auf der Oberfläche anzeigen lassen. Wenn man nun zwischen der Zeitanzeige das “und” noch wegbekommt, wäre ich schon mega Happy.

Update 2
Ich bin einen kleinen Schritt weiter:

{% from 'relative_time_plus.jinja' import relative_time_plus %}
{{ relative_time_plus (as_local(states.binary_sensor.whz_tv.last_changed), parts=1, always_show=['hr'], language='de', abbr=true) }} {{ relative_time_plus (as_local(states.binary_sensor.whz_tv.last_changed), parts=1, always_show=['min'], language='de', abbr=true) }}

Das ergibt zumindest:

2 Std. 148 Min.

Da muss ich nun nur noch die Minuten irgendwie hinbekommen. Hat da jemand einen Tipp für mich?

:crayon:by HarryP: Zusammenführung Doppelpost (bitte “bearbeiten” Funktion nutzen)

Falls Interesse besteht:

Ich konnte es vermutlich lösen. Erste Tests sehen gut aus. Der Weg zur Lösung ist allerdings vollkommen anders. Ich habe einen anderen Thread gefunden, der mir den Anstoß dazu gab.

Hier der Code, den ich nun nutze:

{%- set up_time = as_timestamp(utcnow())-as_timestamp(states.binary_sensor.whz_tv.last_changed) %}
{%- macro phrase(name, plural_name, divisor, mod=None) %}
  {%- set value = ((up_time // divisor) % (mod if mod else divisor)) | int %}
  {%- set name = plural_name if value > 1 else name %}
{{- '{} {}'.format(value, name) if value | int > 0 else '' }}
{%- endmacro %}
{%- set values = [ 
    phrase('Std', 'Std', 60*60),
    phrase('Min', 'Min', 60), 
    ] | select('!=','') | list %}
{{ values[:-1] | join(', ') ~ ' ' ~ values[-1] if values | length > 1 else values | first }}

Hier der Thread dazu: