You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Imagine sensor.temperature goes unavailable (which is a regular thing for me). You expect function_1 not to trigger due to the state_active condition.
But in reality the state_trigger condition is being crashed by an exception:
because of
pyscript.trigger:270 state_trig_expr = f"any([{', '.join(state_trig)}])"
pyscript.trigger:277 state_trig_eval.parse(state_trig_expr, mode="eval")
As a workaround you can move state_active unavailability check to the state_trigger, thus lower code readability.
@state_trigger("sensor.temperature != 'unavailable' and float(sensor.temperature) > 10")deffunction_1(**kwargs):
pass
But imagine you want to turn off your server room air conditioning if the room temperature is low enough, the humidity is low enough, the server CPU temperature is low enough, drives' temperature is low enough. Each one of these entities can become unavailable and your code becomes a mess due to float conversions in state_trigger decorators. Instead of
@state_trigger(f"float({SERVER_ROOM_HUMIDITY}) <= 45"f" and float({SERVER_ROOM_TEMPERATURE}) <= 27.5"f" and float({SERVER_HDD_TEMP}) <= 50"f" and float({SERVER_TEMPERATURE}) <= 60",)deffunction_1(**kwargs):
pass
this becomes
@state_trigger(f"hass.states.get(f'{SERVER_ROOM_HUMIDITY}') is not None "f" and {SERVER_ROOM_HUMIDITY} not in ('unavailable', 'unknown', 'null', None, 'none', 'None') "f" and float({SERVER_ROOM_HUMIDITY}) <= 45 "f" and hass.states.get(f'{SERVER_ROOM_TEMPERATURE}') is not None "f" and {SERVER_ROOM_TEMPERATURE} not in ('unavailable', 'unknown', 'null', None, 'none', 'None') "f" and float({SERVER_ROOM_TEMPERATURE}) <= 27.5"f" and hass.states.get(f'{SERVER_HDD_TEMP}') is not None "f" and {SERVER_HDD_TEMP} not in ('unavailable', 'unknown', 'null', None, 'none', 'None') "f" and float({SERVER_HDD_TEMP}) <= 50"f" and hass.states.get(f'{SERVER_TEMPERATURE}') is not None "f" and {SERVER_TEMPERATURE} not in ('unavailable', 'unknown', 'null', None, 'none', 'None') "f" and float({SERVER_TEMPERATURE}) <= 60",)deffunction_1(**kwargs):
pass
This would be much better if state_trigger was being parsed only if the state_active condition is met.
The text was updated successfully, but these errors were encountered:
Imagine
sensor.temperature
goes unavailable (which is a regular thing for me). You expectfunction_1
not to trigger due to thestate_active
condition.But in reality the
state_trigger
condition is being crashed by an exception:because of
pyscript.trigger:270
state_trig_expr = f"any([{', '.join(state_trig)}])"
pyscript.trigger:277
state_trig_eval.parse(state_trig_expr, mode="eval")
As a workaround you can move
state_active
unavailability check to thestate_trigger
, thus lower code readability.But imagine you want to turn off your server room air conditioning if the room temperature is low enough, the humidity is low enough, the server CPU temperature is low enough, drives' temperature is low enough. Each one of these entities can become unavailable and your code becomes a mess due to float conversions in
state_trigger
decorators. Instead ofthis becomes
This would be much better if
state_trigger
was being parsed only if thestate_active
condition is met.The text was updated successfully, but these errors were encountered: