Restful with value_template if not working when comparing year

Hi, i have the folllowing configuration to calculate a value based on year.

rest:
  - resource: http://192.168.0.14/V?m=1&f=j
    scan_interval: 60
    sensor:
      - name: "szwp_jan_year_indicator"
        value_template: "{{ as_timestamp(value_json.tm) | timestamp_custom('%Y', True) | float }}"
      - name: "szwp_jan"
        value_template: >
          {%  if (now().year|float) == (states('sensor.szwp_jan_year_indicator')) %}         
          {{ (value_json.val[0] | replace(',','.') | float) +
          (value_json.val[1] | replace(',','.') | float) +
          (value_json.val[3] | replace(',','.') | float) +
          (value_json.val[4] | replace(',','.') | float) +
          (value_json.val[5] | replace(',','.') | float) +
          (value_json.val[6] | replace(',','.') | float) +
          (value_json.val[7] | replace(',','.') | float) +
          (value_json.val[8] | replace(',','.') | float) +
          (value_json.val[9] | replace(',','.') | float) +
          (value_json.val[10] | replace(',','.') | float) +
          (value_json.val[11] | replace(',','.') | float) +
          (value_json.val[12] | replace(',','.') | float) +
          (value_json.val[13] | replace(',','.') | float) +
          (value_json.val[14] | replace(',','.') | float) +
          (value_json.val[15] | replace(',','.') | float) +
          (value_json.val[16] | replace(',','.') | float) +
          (value_json.val[17] | replace(',','.') | float) +
          (value_json.val[18] | replace(',','.') | float) +
          (value_json.val[19] | replace(',','.') | float) +
          (value_json.val[20] | replace(',','.') | float) +
          (value_json.val[21] | replace(',','.') | float) +
          (value_json.val[22] | replace(',','.') | float) +
          (value_json.val[23] | replace(',','.') | float) +
          (value_json.val[24] | replace(',','.') | float) +
          (value_json.val[25] | replace(',','.') | float) +
          (value_json.val[26] | replace(',','.') | float) +
          (value_json.val[27] | replace(',','.') | float) +
          (value_json.val[28] | replace(',','.') | float) +
          (value_json.val[29] | replace(',','.') | float) +
          (value_json.val[30] | replace(',','.') | float) }}
          
          {%  else %} 0
          {% endif %}
        device_class: energy
        unit_of_measurement: "kWh"

When i compare

(now().year|float)

with

(states('sensor.szwp_jan_year_indicator'))

I got the following result:

(states('sensor.szwp_jan_year_indicator'))
Ergebnistyp: number
2022
{{ (now().year|float) }}
Ergebnistyp: number
2022

Any idea what i am doing wrong?
Best regards,
Martin

Welcome, Martin!

Check your code in Developer Tools —> Template. I bet you get sth like

Despite what the template tool says, states('sensor.szwp_jan_year_indicator') is a string, which you’re trying to compare with a number. You need:

{% if now().year|float(0) == states('sensor.szwp_jan_year_indicator')|float(0) %}

I’ve added the default values (the float(0)) that are needed to avoid warnings / errors.

Thanks Troon, its working now. The thing i do not understand is:

value_template: "{{ as_timestamp(value_json.tm) | timestamp_custom('%Y', True) | float }}"

should be already float, isnt it?

No. Sensor states are always stored as strings. You need to cast it to a float when you use it in a template.