Pierwsze kroki w Template - sensor szamba z atrybutami

Dzień dobry.

Tak mnie wzięło na zrobienie sensora z atrybutami dla szacunkowego zapełnienia szamba na podstawie odczytu zużycia wody z głównego wodomierza i napisałem takiego sensora:

  # Szambo
- platform: template
  sensors:
    szambo:
      friendly_name: "Szambo"
      unit_of_measurement: "m³"
      device_class: water
      attribute_templates:
        data_ostatniego_wywozu: "2022-12-30 12:00:00"
        stan_wodomierza_wywozu: "5"
        pojemnosc: "5"
      #  value_template: "{{ states('sensor.wodomierz') | float - state_attr('sensor.szambo','stan_wodomierza_wywozu') | float }}"
      value_template: "0"


Zastanawiam się gdzie tu błąd,

"{{states('sensor.wodomierz') | float - state_attr('sensor.szambo','stan_wodomierza_wywozu') | float }}"

skoro po zmianie:

  # Szambo
- platform: template
  sensors:
    szambo:
      friendly_name: "Szambo"
      unit_of_measurement: "m³"
      device_class: water
      attribute_templates:
        data_ostatniego_wywozu: "2022-12-30 12:00:00"
        stan_wodomierza_wywozu: "5"
        pojemnosc: "5"
      value_template: "{{ states('sensor.wodomierz') | float - state_attr('sensor.szambo','stan_wodomierza_wywozu') | float }}"
      # value_template: "0"

Wykrzaczają się atrybuty sensora


może spróbuj tak float (0) nie masz zdefiniowanego “default” i jak sensor sie tworzy a encja “wodomierza” jest w tym momencie “unavailable, unknown lub none” to generuje ci błąd.

('sensor.wodomierz') | float (0)

Poza tym (co nie ma wpływu na błąd) używasz old legacy format a możesz nowy dla template

Dziękuje za zwrócenie uwagi.
Obecnie:

#Szambo
template:
  - sensor:
      - name: "szambo"
        unit_of_measurement: "m³"
        device_class: "water"
        state: "{{ this.attributes.fekalia_m3 | default('0') }}"
        attributes:
          data_ostatniego_wywozu: "{{ this.attributes.data_ostatniego_wywozu | default(now().strftime('%d-%m-%Y %H:%m:%S')) }}"
          stan_wodomierza_wywozu: "{{ this.attributes.stan_wodomierza_wywozu | default('7.459') }}"
          stan_wodomierza: "{{ states.sensor.wodomierz.state | default('0') }}"
          pojemnosc_zbiornika: "{{ this.attributes.pojemnosc_zbiornika | default('3') }}"
          fekalia_m3: >
            {% set a1 = this.attributes.stan_wodomierza | float(0) -  this.attributes.stan_wodomierza_wywozu | float(0) %}
            {{ a1|round(3) | default('0') }}

I tu nasuwa się spostrzeżenie:
1. Po zmianie stanów w atrybutach sensora nie dokonują się przeliczenia pozostałych atrybutów, ani stanu. UPDATE: Zmienia się, nie zauważyłem, bo wodomierz w nocy ma poślizg z zmianą stanu sensora wodomierz.
2. Po restarcie HA, sensor się zeruje - do stanu pierwotnego utworzenia, to oznacza że nie jest przechowywana historia atrybutów sensora.

Co chce osiągnąć?
Zrobić (jeśli to możliwe), by przy restarcie HA nie zerował stanów atrybutów sensora HA a wczytał je z ich historii i co się z tym wiąże zapisywał ich historie:

  • dla atrybutów: pojemnosc_zbiornika, stan_wodomierza_wywozu, data_ostatniego_wywozu

Update: 2023-01-08 23:48
Nie mogę znaleźć informacji jak przy (restarcie HA) - tworzeniu sensora sprawdzić czy ma już historie i jeśli tak, jaki był stan przed “unavailable” czy “unknown”

  # Szambo wywyóz test
  - sensor:
      - name: "szambo_wywoz_test"
        unit_of_measurement: "m³"
        device_class: "water"
        state: >
          {% set a2 = states.sensor.szambo_wywoz_test.state %}
          {% if (a2 == 'unavailable' or a2 == 'unknown') %}
          {{0}}
          {% else %}
          {{ a2 | default('0') }}
          {% endif %}

Nie wiem czy o to konkretnie chodzi.

####################
## Templates ########
###################
- trigger:
    - platform: homeassistant
      event: start

    - platform: event
      event_type: event_template_reloaded

    - platform: state
      entity_id: binary_sensor.xyz
      from:
        - unknown
        - unavailable

    - platform: state
      entity_id: binary_sensor.xyz
      to:
        - unknown
        - unavailable