Template wartość "0" gdy niedostępny

Używam poniższego czujnika szablonu.
Jest to czujnik, który odczytuje wartość z integracji Fronius pokazujący aktualny stan produkcji z paneli.
Integracja podaje wartości w ‘W’ ja potrzebuje w ‘kW’ gdy jest ciemno integracja zwraca wart ‘unavailable’,
która psuje moją kartę wykresu.
Jak mogę zapobiec wartości ‘unavailable’ i zamiast tego zapisać 0.0?

  - platform: template
    sensors:
      solarnet_power_photovoltaics_kw:
        friendly_name: "Power photovoltaics - kW"
        unit_of_measurement: 'kW'
        value_template: "{{ (states('sensor.solarnet_power_photovoltaics') | float * 0.001 ) | round(2) }}"
        icon_template: mdi:white-balance-sunny  

Nigdy tego nie używałem ale wewnątrz platform: template można użyć availability_template

HA

availability_template template (optional, default: true)
Defines a template to get the available state of the entity. If the template either 
fails to render or returns True, "1", "true", "yes", "on", "enable", 
or a non-zero number, the entity will be available. If the template returns any 
other value, the entity will be unavailable. If not configured, the entity will always 
be available. Note that the string comparison not case sensitive; 
"TrUe" and "yEs" are allowed.

Przykłady: https://community.home-assistant.io/t/availability-template-in-sensor-template/141866/1

Przede wszystkim musisz zmienić sposób zapisu tego sensora (legacy sensor configuration format - this format still works but is no longer recommended) na nowy format, doczytaj dokumentację Template - Home Assistant, wtedy możesz skorzystać z takiego przykladu:

template:
  - sensor:
      - name: solarnet_power_photovoltaics_kw
        state: >
          {% if is_state('sensor.solarnet_power_photovoltaics', 'unavailable') %}
            0
          {% else %}
            {{ (states('sensor.solarnet_power_photovoltaics') | float * 0.001 ) | round(2) }}
          {% endif %}

Edit:
Brakowało jednego otwarcia nawiasu (.

Dzięki za pomoc, ale coś nadal mu nie pasuje.

Logger: homeassistant.config
Source: config.py:807 
First occurred: 20:36:03 (1 occurrences) 
Last logged: 20:36:03

Invalid config for [template]: invalid template (TemplateSyntaxError: unexpected ')') for dictionary value @ data['sensor'][0]['state']. Got "{% if is_state('sensor.solarnet_power_photovoltaics', 'unavailable') %}\n 0\n{% else %}\n {{ states('sensor.solarnet_power_photovoltaics') | float * 0.001 ) | round(2) }}\n{% endif %} ". (See /config/template.yaml, line 38).

W pliku to wyglada tak:

- sensor:
    - name: solarnet_power_photovoltaics_kw
      state: >
        {% if is_state('sensor.solarnet_power_photovoltaics', 'unavailable') %}
          0
        {% else %}
          {{ states('sensor.solarnet_power_photovoltaics') | float * 0.001 ) | round(2) }}
        {% endif %}   

Brakuje nawiasu - @macek zedytował przecież przykład
ja bym jeszcze zamiast 0 dał 0.0

Nie zauważyłem tej edycji, teraz wszystko jest tak jak być powinno.
0.0 wygląda lepiej :slight_smile:

Dziękuje za pomoc.

Tu nie chodzi o wygląd 0 jest domyślnie traktowane jako integer, a 0.0 float, no i w 2 części template zwracasz dane zmiennoprzecinkowe.

Rozumiem,

A gdybym chciał żeby jeszcze na stan unknown też było 0.0 to tak

- sensor:
    - name: solarnet_power_photovoltaics_kw
      unit_of_measurement: 'kW'
      state: >
        {% if is_state('sensor.solarnet_power_photovoltaics', 'unavailable' , 'unknown') %}
          0.0
        {% else %}
          {{ (states('sensor.solarnet_power_photovoltaics') | float * 0.001 ) | round(2) }}
        {% endif %}  

Powinno zadziałać:

state: >
  {% if is_state('sensor.solarnet_power_photovoltaics', 'unavailable' ) %}
          0.0
  {% elif is_state('sensor.solarnet_power_photovoltaics', 'unknown') %}
         0.0
  {% else %}
       {{ (states('sensor.solarnet_power_photovoltaics') | float * 0.001 ) | round(2) }}
  {% endif %} 

[/quote]

{% if is_state('sensor.solarnet_power_photovoltaics', 'unavailable') or is_state('sensor.solarnet_power_photovoltaics', 'unknown') %}
1 polubienie