Zähler wird beim Neustart von HA auf einen älteren Wert gesetzt

Hallo in die Runde,

ich habe mir einen binery.sensor Helfer erstellt der immer dann auf on schaltet wenn der Lüfter sich dreht.
Das funktioniert auch. Sobald der Lüfter sich dreht zeigt er Status “on” an.
Dann habe ich mir einen Helfer vom Typ Verlaufsstatistik erstellt mit der Masseinheit “h”.
In den Optionen habe ich bei Start “{{ 0 }}” und bei Ende “{{ now() }}” eingetragen.
Es wird auch so die Laufzeit protokolliert.
Aber immer wenn Homeassistant neu startet stimmt der Gesamtwert nicht mehr.
Er setzt sich immer um einige Stunden zurück.

Hat einer eine Idee was da falsch läuft?

Ich kannte {{0}} bisher nicht - seit Beginn der Aufzeichnung. Danke

Ich versuche mich einmal in einer abenteuerlichen Erklärung (= geraten):

  • Helfer Verlaufsstatistik holt sich seine Daten aus den HA Recorder Rohdaten
  • HA Langzeitstatistik sind unabhängige aggregierte Werte (stündlich)
  • Jede? Nacht wird ein Recoder-DB Purge angestoßen, was alles entfernt was über 10 bzw. Deinen eingestellten Tagen geht → damit verrückt auch der Startpunkt {{0}}

Das einzige was in meine Theorie nicht paßt, sind die ungleichen Abstände.

Vielleicht wirft noch jemand anderes seine Theorie in den Ring :slight_smile:

Hallo Bacardi,
danke für deine Antwort. Ich bin schon seit Wochen an diesem Problem und finde einfach keine Lösung. Dabei möchte ich nur die gesamte Laufzeit vom Verdichter erfassen.

Folgender Gedanke ist ungetestet. Man müßte über eine Automatisation von Verdichter ON zu Off die Zeit dazwischen ermitteln und die einem Helfer hinzuaddieren (Verbrauchszähler?).

Hallo Bacardi,
da muss ich mich erst wohl noch weiter einlesen/informieren wie ich so etwas umsetzen kann. Vielen Dank

Ja, das solltest Du immer tun aber hier ein Vorschlag. Ob das der optimale Ansatz ist, muß ich noch mal durchdenken aber es ist ein funktionierender erster Wurf.

Du brauchst

  • Einen Helfer 1 input_number: zählt die Stunden und kannst den Verlauf per Diagramm anzeigen lassen. Er wird nie genullt außer Du machst es manuell oder erweiterst die Automatisation. Ach, beimn Anlegen mußt Du eine Maximalgrenze angeben. Nimm genügend Puffer.
  • Einen Helfer 2 input_datetime: speichert den Zeitpunkt des Starts des Verdichters (Aus → AN)
  • Eine Automatisation, die bei AN-AUS die Zeitdifferenz in Sekunden von Jetzt zu Helfer 2 in Helfer 1 speichert.

In der Automatisation zähle/speichere ich die Zeit, wo die Sofalampe an war. Das mußt Du für den Verdichter noch anpassen und auch den Helfern solltest Du richtige Namen geben.

alias: 1 test forum zaehler
description: ""
triggers:
  - entity_id:
      - light.sofateufel_lichtfarbe
    from: "off"
    to: "on"
    id: LichtANgeschaltet
    trigger: state
  - entity_id:
      - light.sofateufel_lichtfarbe
    from: "on"
    to: "off"
    id: LichtAUSgeschaltet
    trigger: state
conditions: []
actions:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - LichtANgeschaltet
        sequence:
          - data:
              datetime: "{{ now().isoformat() }}"
            action: input_datetime.set_datetime
            target:
              entity_id: input_datetime.1_forum_test_stundenzaehler
      - conditions:
          - condition: trigger
            id:
              - LichtAUSgeschaltet
        sequence:
          - variables:
              dauer_neu: >
                {% set start =
                as_datetime(states('input_datetime.1_forum_test_stundenzaehler'))
                %} {% set jetzt = now().replace(tzinfo=None, microsecond=0) %}
                {{ ((jetzt-start).total_seconds() / 3600) | round(4) }}
              dauer_alt: >
                {{ states('input_number.1_forum_test_stundenzaehler') | float(0)
                }}
          - target:
              entity_id: input_number.1_forum_test_stundenzaehler
            data:
              value: "{{ (dauer_alt + dauer_neu) | round(4) }}"
            action: input_number.set_value
mode: single

Versuche das einmal nachzubauen, zu verstehen und beobachte das Verhalten eine Woche…und dann schauen wir einmal

Helfer 1 wird im Gegensatz zum früheren Verbrauchszähler nie historische Werte vergessen, es sei denn Du setzt ihn zurück.

1 „Gefällt mir“

Hallo Barcadi,
danke für Deine Mühe. Das ist ja schon sehr gewaltig. Werde ich mal umsetzen. Ich habe schon Stunden damit verbracht mir Wissen über HA mittels Video`s beizubringen.
Da ich schon Ü70 bin, ist halt alles nicht mehr so einfach. Aber Übung macht den Meister.

Wow, mit Ü70 sich in HA reinfuchsen :clap:
Schau mal wie weit Du kommst und dann sehen wir weiter. Stück für Stück.

Hallo Barcadi, ich habe die Automation jetzt in meinem Testsystem nachgebaut. Dazu habe ich die 2 Helfer erstellt.
Für die Stunden = input_number.helfer1_stunden, Schrittweite = 1, ohne Maßeinheit.
Für die Zeit = input_datetime.helfer2_zeit,
Zum erfassen benutze ich eine Lampe = light.schranklicht

Hier mein angepasster Code

alias: 1 test forum zaehler
description: ""
triggers:
  - entity_id:
      - light.schranklicht
    from: "off"
    to: "on"
    id: LichtAngesachaltet
    trigger: state
  - entity_id:
      - light.schranklicht
    from: "on"
    to: "off"
    id: LichtAusgesachaltet
    trigger: state
conditions: []
actions:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - LichtAngesachaltet
        sequence:
          - data:
              datetime: "{{ now().isoformat() }}"
            action: input_datetime.set_datetime
            target:
              entity_id: input_datetime.helfer2_zeit
      - conditions:
          - condition: trigger
            id:
              - LichtAusgesachaltet
        sequence:
          - variables:
              dauer_neu: >
                {% set start =
                as_datetime(states('input_datetime.helfer2_zeit')) %} {% set
                jetzt = now().replace(tzinfo=None, microsecond=0) %} {{
                ((jetzt-start).total_seconds() / 3600) | round(4) }}
              dauer_alt: |
                {{ states('input_number.helfer1_stunden') | float(0) }}
          - target:
              entity_id: input_number.helfer1_stunden
            data:
              value: "{{ (dauer_alt + dauer_neu) | round(4) }}"
            action: input_number.set_value
mode: single

Wenn ich die Lampe einschalte und wieder ausschalte kommen auch Werte im helfer1_stunden an. Aber keine plausiblen Werte.
z.B. der Anfangswert ist 0,7247. Schalte ich die Lampe für 20 sec an ändert sich der Wert auf 0,7303. Ich denke das muss etwas mit der Umrechnung /3600 zu tun haben. Ich komme einfach nicht drauf. Hast du noch einen Tipp?

Eigentlich sieht doch alles gut aus.

3600 Sekunden = 1 Stunde

20 Sekunden = 20 / 3600 = 0,0056 Stunden
Plus 0,7247 Vorgängerwert
= 0,7303 Stunden

Du könntest auch anstelle von round(4) auch round(0) nehmen → dann gibt es keine Kommazahlen sondern gerundete → 0,7303 | round(0) → 1

In Deiner ersten Grafik hast Du auch Stunden als Maßeinheit, käme dem gleich.

EDIT:

Ich habe noch einmal über round(0) nachgedacht und finde das keine gute Idee mehr.

  • 0.51 | round(0) → 1 → Zwichensumme 1 h
  • 0,52 | round(0) → 1 → Zwischensumme 2 h obwohl eigentlich nur 1,03 h

Mann könnte aber Genauigkeit kombinieren mit h über einen 2. Helfer (Template sensor) und der obere Aut. Code bleibst so wie er ist. In dem neuen Template Sensor steht nichts anderes als

{{states('input_number.helfer1_stunden') | float | round(0)}}

Anlegen tust Du so einen Sensor über:
Einstellungen → Geräte und Dienste → Helfer → Helfer erstellen → Template → Sensor Template erstellen

Damit wird nur die Endsumme gerundet und nicht die Zwischenschritte.

Hallo Barcardi, ich habe jetzt alles seit einer Woche mit Deiner Hilfe am laufen.
Vielen Dank für Deine Unterstützung.

1 „Gefällt mir“