Cannot test it but something like this looks a bit better
- alias: OMG Pilight Elro demultiplexer
id: 1a9a1234b34641c09824f583c33fd9f5
trigger:
platform: mqtt
topic: home/OpenMQTTGateway_ESP8266_RF/PilighttoMQTT
condition:
condition: template
value_template: "{{ trigger.payload_json.protocol=='elro_800_contac'}}"
action:
- service: mqtt.publish
data_template:
topic: >
{% set data = trigger.payload_json %}
{{ 'homeassistant/binary_sensor/{}{}{}/state'.format(data.protocol, data.message.systemcode, data.message.unitcode) }}
payload: 'ON'
- service: mqtt.publish
data_template:
topic: >
{% set data = trigger.payload_json %}
{{ 'homeassistant/binary_sensor/{}{}{}/config'.format(data.protocol, data.message.systemcode, data.message.unitcode) }}
payload: >
{% set data = trigger.payload_json %}
{% set name = data.protocol ~ data.message.systemcode ~data.message.unitcode %}
{% set state_topic = 'homeassistant/binary_sensor/{}{}{}/state'.format(data.protocol, data.message.systemcode, data.message.unitcode) %}
{"name":"{{name}}", "device_class": "motion", "state_topic": "state_topic"}
Details - in templating/Jinja docs.
Cannot comment on the algorithm improvements but it looks a bit repetitive… have you seen this?
HA configs are not the prettiest as YAML and its HA implementation is rather restrictive.