Integracja History Stats vs Counter - zliczanie ile razy coś się włączyło

Korzystam z integracji history stats która zliczania np. ile razy dzień włączyły się grzejnik.

- platform: history_stats
  name: Ile razy wlaczylo sie Ogrzewanie Grzejniki
  entity_id: switch.ogrzewanie_grzejniki
  state: 'on'
  type: count
  start: '{{ now().replace(hour=0, minute=0, second=0) }}'
  end: '{{ now() }}'

Zauważyłem, że każde ponowne uruchomieni bramki powoduje dodanie jednego włączenia do licznika.
Dzieje się tak tylko gdy switch.ogrzewanie_grzejniki jest włączony.

Czyli tak: switch.ogrzewanie_grzejniki włączony, history stats pokazuje, że dzisiaj uruchomiono grzejniki 2 razy, w między czasie “bawię” się bramką, uruchomiłem 3razy ponownie bramkę i na liczniku już widzę że grzejnik dzisiaj uruchomiły się 5 razy.
Jak to obejść ?

Domyślam się że problem jest w momencie inicjalizacji sensora podczas uruchamiania HA, sensor przyjmuje wartość “unknown”, następnie jest przywracana wartość sprzed restartu “on” co przez “history_stats” jest interpretowane jako zmiana stanu.
Czy ten switch jest stworzony przez template?

też tak to rozumiem

switch.ogrzewanie_grzejniki jest z Tasmoty:

Próbowałem w innym liczniku wykorzystać binary_sensor powstały tak:

- platform: template
  sensors:
   pralka:
       friendly_name: 'Pralka'
       icon_template: mdi:washing-machine
       value_template: "{{states('sensor.aqara_lazienka_pralka_power') | float(0) > 3 }}"

zrobiłem switch wykorzystując ten binary_sensor:

- platform: template
  switches:
     pralka_licznik:
        friendly_name: "Pralka Licznik"
        value_template: "{{ is_state('binary_sensor.pralka', 'on') }}"
        turn_on:
          service: switch.turn_on
        turn_off:
          service: switch.turn_off

ale za każdym razem efekt taki sam.
Przy takim działaniu history stats stosowanie tej integracji jako licznika chyba mija się sensem.

Zapewne musisz stworzyć licznik zmian z “off” na “on”, aby ignorować zmiany z “unknown”.

Ale abstrahując od tego - czy taka informacja ile razy się włączyło ogrzewanie jest miarodajna?
Czy nie lepiej policzyć jak długo było włączone ogrzewanie?
Ja mam zrobione dwa liczniki na wczoraj i dzisiaj - zerowane codziennie o 6 rano:

1 polubienie

@Tomasz myślę że to będzie rozwiązanie:

switchmode1 1
counter1 <enter-initial-counter-value-here>
rule1 on switch1#state=0 do Counter1 +1 endon
rule1 5
rule1 1
1 polubienie

wiesz jak ? :wink:
chyba za pomocą history stats się nie da…
chyba można platform: template, ma ktoś gotowca ?

pomysł @cezary.k ok ale nie wszędzie tasmota i wolałbym w yaml bo łatwiej na tym panować

Może z pomocnikiem:

1 polubienie

Proponowany przez @Cezary.K Counter będzie najprostszy.
Dodajesz Pomocnika typu Licznik z włączonym restore:


i automatyzację inkrementującą go po zmianie stanu z off na on:

alias: Zliczanie włączenia ogrzewania
description: ''
trigger:
  - platform: state
    entity_id: switch.piec
    from: 'off'
    to: 'on'
condition: []
action:
  - service: counter.increment
    target:
      entity_id: counter.licznik_ogrzewania
mode: single

nie sprawdzałem, ale powinno być odporne na restarty.

2 polubienia

Dziękuje pięknie, powyższa propozycja rozwiązała problem,
czyli restarty bramki nie dodają +1 do licznika :+1:

2 polubienia

Chciałbym dopytać jeszcze o history_stats.

Mam działający licznik czasu pracy pieca grzewczego, zadeklarowany tak:

- platform: history_stats
  name: "Czas pracy - piec grzewczy"
  entity_id: switch.lazienka_piec_grzewczy
  state: "on"
  type: time
  start: "{{ 0 }}"
  end: "{{ now() }}"

Czy jest możliwość zdefiniowania nieskończonego czasu pracy urządzenia?
Powyższe ustawienie usuwa czas przekraczający 5 dzień (tak jak jest ustawiona baza danych PostgreSQL).

Rejestracji historii nie ustawie na tak długi czas.

Czy poniższe ustawienie będzie działać dłużej niż czas ustawiony w historii?

end: "{{ now().replace(hour=0, minute=0, second=0) }}"
duration:
  days: 365
1 polubienie

purge_keep_days

Pamiętaj, że pamięć jest ograniczona. Taka zmiana ma poważne konsekwencje.

Nie mam zamiaru zwiększać długości rejestracji bazy danych (purge_keep_days).
Szukam sposób rejestracji czasu pracy encji, która będzie dłuższa niż czas ustawiony w historii.

Tak, aby po restarcie (wyłączeniu zasilania) czas się nie kasował.

Ta encja bierze dane z historii. Więc jak chcesz uzyskać dla niej dane, powyżej 5 dni, skoro ich nie ma w systemie?