hello,
for a long time, nearly since beginning of my HASSIO experiment i do have randomly an error message in log like this, but i had never time to think about…
Logger: homeassistant.helpers.event
Source: components/sensor/__init__.py:593
First occurred: 12:07:35 (3 occurrences)
Last logged: 13:28:11
Error while dispatching event for sensor.power_import to <Job track state_changed event {'sensor.power_export', 'sensor.emp1_power', 'sensor.power_import'} HassJobType.Callback <bound method TrackTemplateResultInfo._refresh of <TrackTemplateResultInfo {Template<template=({% if (states('sensor.power_export')|float(0)) > 0 and (states('sensor.emp1_power')|float(0) - states('sensor.power_export')|float(0)) < 0 %} {% elif (states('sensor.power_export')|float(0)) > 0 and (states('sensor.emp1_power')|float(0) - states('sensor.power_export')|float(0)) > 0 %} {{ ((states('sensor.emp1_power')|float(0)) - states('sensor.power_export')|float(0))|round(3) }} {% else %} {{ (states('sensor.power_import')|float(0) + states('sensor.emp1_power')|float(0))|round(3) }} {% endif %}) renders=1844614>: <RenderInfo Template<template=({% if (states('sensor.power_export')|float(0)) > 0 and (states('sensor.emp1_power')|float(0) - states('sensor.power_export')|float(0)) < 0 %} {% elif (states('sensor.power_export')|float(0)) > 0 and (states('sensor.emp1_power')|float(0) - states('sensor.power_export')|float(0)) > 0 %} {{ ((states('sensor.emp1_power')|float(0)) - states('sensor.power_export')|float(0))|round(3) }} {% else %} {{ (states('sensor.power_import')|float(0) + states('sensor.emp1_power')|float(0))|round(3) }} {% endif %}) renders=1844614> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.power_export', 'sensor.emp1_power'}) rate_limit=None has_time=False exception=None is_static=False>}>>>
Error while dispatching event for sensor.power_export to <Job track state_changed event {'sensor.power_export', 'sensor.emp1_power'} HassJobType.Callback <bound method TrackTemplateResultInfo._refresh of <TrackTemplateResultInfo {Template<template=({% if (states('sensor.power_export')|float(0)) > 0 and (states('sensor.emp1_power')|float(0) - states('sensor.power_export')|float(0)) < 0 %} {% elif (states('sensor.power_export')|float(0)) > 0 and (states('sensor.emp1_power')|float(0) - states('sensor.power_export')|float(0)) > 0 %} {{ ((states('sensor.emp1_power')|float(0)) - states('sensor.power_export')|float(0))|round(3) }} {% else %} {{ (states('sensor.power_import')|float(0) + states('sensor.emp1_power')|float(0))|round(3) }} {% endif %}) renders=1844902>: <RenderInfo Template<template=({% if (states('sensor.power_export')|float(0)) > 0 and (states('sensor.emp1_power')|float(0) - states('sensor.power_export')|float(0)) < 0 %} {% elif (states('sensor.power_export')|float(0)) > 0 and (states('sensor.emp1_power')|float(0) - states('sensor.power_export')|float(0)) > 0 %} {{ ((states('sensor.emp1_power')|float(0)) - states('sensor.power_export')|float(0))|round(3) }} {% else %} {{ (states('sensor.power_import')|float(0) + states('sensor.emp1_power')|float(0))|round(3) }} {% endif %}) renders=1844902> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.power_export', 'sensor.emp1_power'}) rate_limit=None has_time=False exception=None is_static=False>}>>>
Error while dispatching event for sensor.power_export to <Job track state_changed event {'sensor.power_export', 'sensor.emp1_power'} HassJobType.Callback <bound method TrackTemplateResultInfo._refresh of <TrackTemplateResultInfo {Template<template=({% if (states('sensor.power_export')|float(0)) > 0 and (states('sensor.emp1_power')|float(0) - states('sensor.power_export')|float(0)) < 0 %} {% elif (states('sensor.power_export')|float(0)) > 0 and (states('sensor.emp1_power')|float(0) - states('sensor.power_export')|float(0)) > 0 %} {{ ((states('sensor.emp1_power')|float(0)) - states('sensor.power_export')|float(0))|round(3) }} {% else %} {{ (states('sensor.power_import')|float(0) + states('sensor.emp1_power')|float(0))|round(3) }} {% endif %}) renders=1849644>: <RenderInfo Template<template=({% if (states('sensor.power_export')|float(0)) > 0 and (states('sensor.emp1_power')|float(0) - states('sensor.power_export')|float(0)) < 0 %} {% elif (states('sensor.power_export')|float(0)) > 0 and (states('sensor.emp1_power')|float(0) - states('sensor.power_export')|float(0)) > 0 %} {{ ((states('sensor.emp1_power')|float(0)) - states('sensor.power_export')|float(0))|round(3) }} {% else %} {{ (states('sensor.power_import')|float(0) + states('sensor.emp1_power')|float(0))|round(3) }} {% endif %}) renders=1849644> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.power_export', 'sensor.emp1_power'}) rate_limit=None has_time=False exception=None is_static=False>}>>>
....
ValueError: Sensor sensor.power_consumption has device class 'None', state class 'None' unit 'W' and suggested precision 'None' thus indicating it has a numeric value; however, it has the non-numeric value: '' (<class 'str'>)
i understand it must be something that template sensor is expecting numeric values, due to configuration variables set in template sensor or not. In my case is must be unit_of_measurement: 'W'
. As this happen randomly, i assume one of the states, or templatesensore state are not present or “null” in some cases, what bashes my template sensor calc…
i have read many post about that, but solution is mostly, simply to delete “unit_of_measurement: ‘W’” variable (or “state_class” what i do not have set) , but i do not unsterstand that configuration variables and wehat they are for, as described here Template - Home Assistant…
i understand that unit_of_measurement: 'W'
and others like state_class
are forcing sensor to except numeric values only… but what will happen when i will delete my unit_of_measurement: 'W'
?
it will not “just” prevent any error message only?
i have read something about history states, beeing then without unit… what would be anoing for me… i often take a look in my histories graphs…
but my most important question is: what happen with the calculation of the temp sensor(s)? i woul assume that all vaues will be not an numeric anymore? will it be then a string with ="", how can it be used for further calculation in other template sensors? so how the deleten of unit_of_measurement: 'W'
will solve the problem, without creating new props?
And what about the history states. They will not show a unit any longer? And will it affect influxdb measurements too? as i remember they depends mostly on a unit being devilvered by homeassistant recorder (or what ever is filling influx). im using influx integration in hassio on a rasp4…
and i´m using utility-meter
as well, will it have have any effect here too?
as this prob only happens in some special cases, wouldn´t it possible to expand the template sensor, to force a "non-numeric “result” like non-numeric value: ''
=> into a numeric = 0 instead (as i thought float(0) is doing)?
so before i simply delete the variable unit_of_measurement:
in my template sensor, i would like to understand what will be the effects? can somebody pls explain me? thank you in advance
br Frank
here a extract of my template sensors im using
## template sensor START
- platform: template
sensors:
# Template sensor for values of power import (active_power > 0)
power_import:
friendly_name: "Power Import"
unit_of_measurement: 'W'
value_template: >-
{% if (states('sensor.l1_power')|float(0) + states('sensor.l2_power')|float(0) + states('sensor.l3_power')|float(0)) > 0 %}
{{ (states('sensor.l1_power')|float(0) + states('sensor.l2_power')|float(0)+ states('sensor.l3_power')|float(0))|round(4) }}
{% else %}
{{ 0 }}
{% endif %}
availability_template: "{{
[ states('sensor.l1_power'),
states('sensor.l2_power'),
states('sensor.l3_power')
] | map('is_number') | min
}}"
# Template sensor for values of power export (active_power < 0)
power_export:
friendly_name: "Power Export"
unit_of_measurement: 'W'
value_template: >-
{% if (states('sensor.l1_power')|float(0)+ states('sensor.l2_power')|float(0)+ states('sensor.l3_power')|float(0)) < 0 %}
{{ ((states('sensor.l1_power')|float(0)+ states('sensor.l2_power')|float(0)+ states('sensor.l3_power')|float(0)) * -1)|round(4)}}
{% else %}
{{ 0 }}
{% endif %}
availability_template: "{{
[ states('sensor.l1_power'),
states('sensor.l2_power'),
states('sensor.l3_power')
] | map('is_number') | min
}}"
# Template sensor for values of power export (active_power < 0, but inverted for visualising)
power_export_negative:
friendly_name: "Power Export (negative)"
unit_of_measurement: 'W'
value_template: "{{ states('sensor.power_export')|float(0) * -1 }}"
# Template sensor for values of power consumption (negative trimmed, only positive values: realverbrauch des Hauses, aber ohne Exportüberschuss, also was bezahlt werden muss)
power_consumption:
friendly_name: "Power Consumption"
unit_of_measurement: 'W'
value_template: >-
{% if (states('sensor.power_export')|float(0)) > 0 and (states('sensor.emp1_power')|float(0) - states('sensor.power_export')|float(0)) < 0 %}
{% elif (states('sensor.power_export')|float(0)) > 0 and (states('sensor.emp1_power')|float(0) - states('sensor.power_export')|float(0)) > 0 %}
{{ ((states('sensor.emp1_power')|float(0)) - states('sensor.power_export')|float(0))|round(3) }}
{% else %}
{{ (states('sensor.power_import')|float(0) + states('sensor.emp1_power')|float(0))|round(3) }}
{% endif %}
# Template sensor for values of power consumption (real postive and negative; komplett 3Phasen gemessen; real)
power_consumption_real:
friendly_name: "Power Consumption (real)"
unit_of_measurement: 'W'
value_template: "{{ (states('sensor.l1_power')|float(0)+ states('sensor.l2_power')|float(0)+ states('sensor.l3_power')|float(0))|round(3) }}"