Liczniki - wartości początkowe

Witam,

Mam taki kod w configuration.yaml:

    sensors:
      woda_dom:
        value_template: "{{ (states('sensor.water_meter_value_2')|float - states('sensor.water_meter_value')|float) | round(2) }}"
        unit_of_measurement: 'm³'
        icon_template: mdi:gauge

sensor.water_meter_value (zużycie wody na ogród) i sensor.water_meter_value2 (całkowite zużycie wody) z czytują wartości z liczników impulsowych wody a różnica która jest obliczana jak wyżej daje mi nową encję zużycia wody w domu. Problem polega na tym że sensor.water_meter_value i sensor.water_meter_value2 mają przypisane wartości początkowe liczników na serwerze supli. W momencie resetowania modemu przez mojego operatora który robi to codziennie o 4 rano HA traci dostęp do serwera przez co wyskakują mi duże skoki na wykresie. Podobno idzie na to jakoś zaradzić za pomocą template_availability lub w template_value ale niestety nie wiem jak.

@szopen, @macek jesteście w stanie pomóc w tym temacie?

Czy to operator resetuje o 4 rano czy o 4:12
auto_purge

@Raddii niestety nic nie przychodzi na myśl jak to obejść ale

jaką wartość ma ten sensor i ten drugi w momencie “problemu” (w momencie resetowania modemu)?

@krskrab operator resetuje. A może coś na zasadzie że jak HA traci połączenie z serwerem to żeby zapamiętał stan poprzedni? Albo żeby dla różnicy większej niż np 2m3 nie zmieniał wartości?

Skoro zostałem “wywołany do tablicy” to odpowiem, że nie wiem jak to rozwiązać, ale wydaje się, że problem leży w integracji, która zwraca wartość 0 zamiast niedostępności - więc na początek należałoby prześledzić stan encji źródłowych.

Bazując na dokumentacji

spróbowałbym jednak takiej konstrukcji
(zakładam, że jednak niedostępność jest poprawnie zaimplementowana, natomiast konstrukcja template, którą używasz ignoruje błędy, ta poniżej nie powinna obliczyć wartości jeśli nie ma dostepu do danch)

    sensors:
      woda_dom:
        value_template: "{{ (states.sensor.water_meter_value_2.state|float - states.sensor.water_meter_value.state|float) | round(2) }}"
        unit_of_measurement: 'm³'
        icon_template: mdi:gauge

możliwe, że brakuje spacji (usuwałem okrągłe nawiasy, przynajmniej te które raczej tu są zbędne)

To powinno się dać zrobić integracją

@Raddii nie uzyskałem odpowiedzi na zadane pytanie:

jaką wartość ma ten sensor i ten drugi w momencie “problemu” (w momencie resetowania modemu)?
Jeżeli te encje są również niedostępne to można to uwzględnić w sensorze woda_dom.

Template, które wrzuciłem powyżej właśnie powinno uwzględnić niedostępność encji.

Raczej myślałem o wykorzystaniu template_availability i/lub template_value jak w poście Availability_template in sensor template - Configuration - Home Assistant Community.
Do sprawdzenia czy

(states('sensor.water_meter_value_2')|float

nie zwróci zera w przypadku stanu unknown.

@macek nie pokazuje żadnego odczytu w trakcie restartu jak na zdjęciu

@szopen wrzuciłem Twoje template i wyskoczyło mi coś takiego:

czyli można założyć, że ma status unknown, spróbuj tak (nie sprawdzałem tego, do weryfikacji):

  value_template: >-
    {% set a = states('sensor.water_meter_value_2') %}
    {% set b = states('sensor.water_meter_value') %}
    {{ 'unknown' if a == 'unknown' or b == 'unknown' else (states('sensor.water_meter_value_2')|float - states('sensor.water_meter_value')|float) | round(2) }}

To nic innego jak sprawdzenie czy oba sensory mają statusy różne od unknown, jeżeli tak to dopiero jest obliczanie różnicy.

Może być błąd składni - edytowałem twój kawałek kodu, u siebie nie mam na czym przetestować
screenshot niewiele daje ( i akurat okolice linii 225 masz zasłonięte)

zaraz zaraz - masz zdublowane sensors:
czyli wklej bez pierwszej linijki (w końcu cytowałem twój kod)

Tak to ma wyglądać w całości?

tak ale musisz zachować odpowiednie wcięcia a widzę, że masz “przesunięcie” w lewo.

@szopen i @macek dzięki za pomoc. Jedna i druga encja działa teraz zostaje tylko poczekać do jutra czy przy restarcie zadziała. Jutro się odezwę. Pozdrawiam

Witam,

Niestety encja @macek i encja @szopen nie zadziałała prawidłowo.

Poniżej encja macierzysta:
1.4

  - platform: template
    sensors:
      woda_dom:
        value_template: "{{ (states('sensor.water_meter_value_2')|float - states('sensor.water_meter_value')|float) | round(2) }}"
        unit_of_measurement: 'm³'
        icon_template: mdi:gauge

Encja @macek:

1.3

  - platform: template
    sensors:
      woda_dom3:
        value_template: >-
          {% set a = states('sensor.water_meter_value_2') %}
          {% set b = states('sensor.water_meter_value') %}
          {{ 'unknown' if a == 'unknown' or b == 'unknown' else (states('sensor.water_meter_value_2')|float - states('sensor.water_meter_value')|float) | round(2) }}
        unit_of_measurement: 'm³'
        icon_template: mdi:gauge

Encja @szopen:

1.2png

  - platform: template
    sensors:
      woda_dom4:
        value_template: "{{ (states.sensor.water_meter_value_2.state|float - states.sensor.water_meter_value.state|float) | round(2) }}"
        unit_of_measurement: 'm³'
        icon_template: mdi:gauge

Niestety każda encja ma ten sam wykres w którym przez reset modemu załamuje się wykres :frowning:

To pokaż jak wygladają wykresy encji źrodłowych (sensor.water_meter_value i sensor.water_meter_value_2) w tym czasie, najlepiej na tym samym wykresie.

@macek proszę: