Template sensor with unavailable sensor

Hi!

I have a template sensor that calculates the area cleaned since calling the emptying script for my vacuum. It works by subtracting the “milage” when emptying from total “milage”. My vacumm sometimes goes unavailable, and then I cannot read the total area cleaned and the sensor value is incorrect. I’ve tried to solve it from the tips in this thread LINK but it doesn’t work. Then my template sensor shows unknown.

Anyone knows what could be wrong? I’m open for better solutions as well if there are :slight_smile:

  - platform: template
    sensors: 
      dammsugare_nere_area_since_empty:
        entity_id:
          - input_number.dammsugare_nere_last_emptied_milage
          - sensor.dammsugare_nere_total_clean_area
        unit_of_measurement: "m²"
        value_template: >-
          {% set last = states.input_number.dammsugare_nere_last_emptied_milage.state|float %}
          {% set current = states.sensor.dammsugare_nere_total_clean_area.state| float %}
          {% if states.sensor.dammsugare_nere_total_clean_area.state | float > 10 %}
            {{ (current - last)|round(1) }}
          {% else %}
            {{ states.sensor.dammsugare_nere_area_since_empty.state }}  
          {% endif %}

You need to supply default values for your float filters to prevent errors. And you need an availability template to prevent the sate showing if any of the child sensors are unavailable or unknown.

You have also failed to use the recommended format for retrieving entity states.

https://www.home-assistant.io/docs/configuration/templating/#states

You are also using the depreciated entity_id option. This was removed many versions ago.

  - platform: template
    sensors: 
      dammsugare_nere_area_since_empty:
        unit_of_measurement: "m²"
        value_template: >-
          {% set last = states('input_number.dammsugare_nere_last_emptied_milage')|float(0) %}
          {% set current = states('sensor.dammsugare_nere_total_clean_area')|float(0) %}
          {% if states('sensor.dammsugare_nere_total_clean_area')|float(0) > 10 %}
            {{ (current - last)|round(1) }}
          {% else %}
            {{ states('sensor.dammsugare_nere_area_since_empty') }}  
          {% endif %}
        availability_template: >
          {{ states('input_number.dammsugare_nere_last_emptied_milage')|is_number and
             states('sensor.dammsugare_nere_total_clean_area')|is_number }}
1 Like