Bardziej wypasione helpery

Zrobiłem sobie odczyt prędkości, używając licznika przejechanych kilometrów w helperze pochodnej. A czy dałoby się zrobić podobne helpery po innej zmiennej? Np spalanie na 100km, używając stanu baku i licznika kilometrów? Albo gromadzić dane spalania w zależności od prędkości?

W jaki sposób napływają dane do HA przez integrację Torque ?

Przez add-on FiatChamp.

W pomocniku Template
“Spalanie na 100 km”

          >-
          {% if states('sensor.licznik_kilometrow')|float > 0 and states('sensor.stan_baku')|float > 0 %}
            {% set przejechane_km = states('sensor.licznik_kilometrow')|float %}
            {% set zuzyte_paliwo = states('sensor.stan_baku')|float %}
            {% set poprzednie_przejechane_km = state_attr('sensor.licznik_kilometrow', 'last_valid_state')|float %}
            {% set poprzedni_stan_baku = state_attr('sensor.stan_baku', 'last_valid_state')|float %}            
            {% if poprzednie_przejechane_km is defined and poprzedni_stan_baku is defined %}
              {% set przejechane_od_poprzedniego_tankowania = przejechane_km - poprzednie_przejechane_km %}
              {% set zuzyte_paliwo_od_poprzedniego_tankowania = poprzedni_stan_baku - zuzyte_paliwo %}              
              {% if przejechane_od_poprzedniego_tankowania > 0 %}
                {{ (zuzyte_paliwo_od_poprzedniego_tankowania / przejechane_od_poprzedniego_tankowania) * 100 }}
              {% else %}
                0
              {% endif %}
            {% else %}
              0
            {% endif %}
          {% else %}
            0
          {% endif %}

Musisz sprawdzić jakie atrybuty ma sensor “licznik kilometrów”
Powinien mieć atrybut last_valid_state, jeśli go nie ma to musisz zmienić na np. w

customize.yaml

sensor.licznik_kilometrow 
  state_class: collecting

Obliczane są zmienne związane z zużytym paliwem oraz przejechanymi kilometrami od poprzedniego odczytu. Następnie, jeśli odległość od poprzedniego tankowania jest większa niż “0”, obliczane jest spalanie na 100 km .

:information_source:
Ten kod jest tylko jako przykład (może działać)
Oczywiście nazwa sensorów jest zmyślona (do podmiany)
/
Nie mam takich danych (encji) do sprawdzenia poprawności działania, więc jak się uporasz z kodem to daj znać czy działa.

1 Like

Atrybut last_valid_state nie istnieje, pewnie trzebabyłoby sięgać po prostu do poprzedniego data pointu, o ile to możliwe.

          {% if states('sensor.car_car_vehicleinfo_odometer_odometer_value')|float > 0 and states('sensor.car_car_vehicleinfo_fuel_fuelamountlevel')|float > 0 %}
            {% set przejechane_km = states('sensor.car_car_vehicleinfo_odometer_odometer_value')|float %}
            {% set zuzyte_paliwo = states('sensor.car_car_vehicleinfo_fuel_fuelamountlevel')|float %}
            {% set poprzednie_przejechane_km = state_attr('sensor.car_car_vehicleinfo_odometer_odometer_value', 'last_valid_state')|float %}
            {% set poprzedni_stan_baku = state_attr('sensor.car_car_vehicleinfo_fuel_fuelamountlevel', 'last_valid_state')|float %}            
            {% if poprzednie_przejechane_km is defined and poprzedni_stan_baku is defined %}
              {% set przejechane_od_poprzedniego_tankowania = przejechane_km - poprzednie_przejechane_km %}
              {% set zuzyte_paliwo_od_poprzedniego_tankowania = poprzedni_stan_baku - zuzyte_paliwo %}              
              {% if przejechane_od_poprzedniego_tankowania > 0 %}
                {{ (zuzyte_paliwo_od_poprzedniego_tankowania / przejechane_od_poprzedniego_tankowania) * 100 }}
              {% else %}
                0
              {% endif %}
            {% else %}
              0
            {% endif %}
          {% else %}
            0
          {% endif %}

Edit w customize.yaml dałem:

sensor.car_car_vehicleinfo_odometer_odometer_value
  state_class: collecting

Ale:

Configuration errors
Error loading /config/configuration.yaml: mapping values are not allowed here
in “/config/customize.yaml”, line 2, column 14

state_class: collecting
ScreenShot_20240118200206

Czyli, jeśli przypiszesz:

sensor.car_car_vehicleinfo_odometer_odometer_value:
   state_class: collecting

To po przeładowaniu HA i po otrzymaniu nowych odczytów, powinna pojawić się “poprzedni stan”
Przynajmniej ja tak to pojmuję :thinking:
/
Zapomniałem dodać
sensor.car_car_vehicleinfo_odometer_odometer_value: # Dwukropek

No, wpadłem na ten dwukropek, dzięki. Gdzie można poczytać więcej o tych stanach do cutomize?

Póki co wygląda to tak:

unit_of_measurement: km
device_class: distance
friendly_name: Car car_vehicleInfo_odometer_odometer_value
state_class: collecting

Tutaj:

nie piszą, że jest taki stan jak collecting…

Rzeczywiście z atrybutami i z customize wyszła kicha - Przepraszam
Kurcze nie mam jak to sprawdzić, jedynie co teraz przychodzi do głowy to:

{% set przejechane_km = states('sensor.car_car_vehicleinfo_odometer_odometer_value')|float %}
{% set zuzyte_paliwo = states('sensor.car_car_vehicleinfo_fuel_fuelamountlevel')|float %}

{% if przejechane_km > 0 and zuzyte_paliwo > 0 %}
    {% set poprzednie_przejechane_km = states('sensor.car_car_vehicleinfo_odometer_odometer_value')|float %}
    {% set poprzedni_stan_baku = states('sensor.car_car_vehicleinfo_fuel_fuelamountlevel')|float %}
    
    {% set przejechane_od_poprzedniego_tankowania = przejechane_km - poprzednie_przejechane_km %}
    {% set zuzyte_paliwo_od_poprzedniego_tankowania = poprzedni_stan_baku - zuzyte_paliwo %}
    
    {% if przejechane_od_poprzedniego_tankowania > 0 %}
        {{ (zuzyte_paliwo_od_poprzedniego_tankowania / przejechane_od_poprzedniego_tankowania) * 100 }}
    {% else %}
        0
    {% endif %}
{% else %}
    0
{% endif %}

Nie ma za co. Zmieniłem na powyższy kod, zobaczymy co z tego wyjdzie.