I am doing first steps with a new format for template sensors - so far I have been using a legacy format.
There is a binary_sensor
which should react on two events:
- event_x: the sensor must be set to “ON”;
- event_y: the sensor must be set to “OFF”.
Also:
- There are 11 of these sensors; each of them is related to some object (iPhone 5s, iPad 666S etc).
- Each event has an “
entity_id
” as a part of it’s data; this ID points to some object (mentioned above). - Each sensor must react on an event with it’s object only.
With the legacy format I did this:
- Use 11 helpers “
input_boolean
” (for each object). - Each “
binary_sensor
” = a corresponding “input_boolean
”:
aaa_some_object_name:
value_template: >
{% set HELPER= "input_boolean.bbb_some_object_name" -%}
{{ states(HELPER) }}
- Each helper is toggled by an automation (11 automations) triggered by those events:
variables:
OBJECT: ### get a name from trigger.event.data.entity_id
HELPER: >-
{{ 'input_boolean.bbb_' + OBJECT}}
trigger:
- platform: event
event_type: event_x ### or event_y
action:
- service: homeassistant.turn_on ## or turn_off
data:
entity_id: >-
{{HELPER}}
It works fine.
Now I am trying to get rid of those automations & helpers (+ some educational purpose).
- trigger:
- platform: event
event_type: event_x
- platform: event
event_type: event_y
binary_sensor:
- name: aaa_some_object_name
state: >-
{% set DEVICE_TRACKER = "device_tracker.zzz_some_object_name" -%}
{%- if trigger.event.data.entity_id == DEVICE_TRACKER -%}
{%- set EVENT_TYPE = trigger.event.event_type -%}
{%- if EVENT_TYPE == "event_x" -%}
{{ "on" }}
{%- else -%}
{{ "off" }}
{%- endif -%}
{%- else -%}
{{ states("binary_sensor.aaa_some_object_name") }}
{%- endif %}
This part:
{%- if EVENT_TYPE == "event_x" -%}
{{ "on" }}
{%- else -%}
{{ "off" }}
{%- endif -%}
is to toggle the sensor dependingly on an event.
This part:
{%- if trigger.event.data.entity_id == DEVICE_TRACKER -%}
...
## handle event
...
{%- else -%}
{{ states("binary_sensor.aaa_some_object_name") }}
{%- endif %}
is to ignore the event for another sensor.
If I leave this section w/o assigning to the previous state - my sensor is toggled to OFF due to these rules.
I wonder am I doing it properly?
Or may be there is any other more elegant way?