Files
haos-blueprints/Zigbee/MQTT Generic Control.yaml

241 lines
6.8 KiB
YAML

# =============================================================================
# MQTT Generic Control Blueprint
# =============================================================================
# A flexible blueprint that triggers custom actions based on MQTT messages.
# Supports up to 8 different action IDs, each with its own callback.
#
# Features:
# - Listen to up to 4 MQTT topics simultaneously
# - Map up to 8 action IDs to custom callback actions
# - Works with any Zigbee2MQTT device that sends action payloads
# - Fully customizable actions for each trigger
#
# How It Works:
# - Listens for MQTT messages on configured topics
# - Extracts the `action` field from the JSON payload
# - Matches action against configured action IDs
# - Executes the corresponding callback action sequence
#
# Author: Alexei Dolgolyov (dolgolyov.alexei@gmail.com)
# =============================================================================
blueprint:
name: "Custom: MQTT Generic Control"
description: >
Triggered by MQTT messages. Supports up to 8 custom action IDs with optional callbacks.
domain: automation
input:
mqtt_group:
name: "MQTT"
collapsed: false
input:
mqtt_topic:
name: MQTT Topic 1
description: The MQTT topic to listen to
selector:
text: {}
mqtt_topic2:
name: MQTT Topic 2 (Optional)
description: >
Additional MQTT topic to listen to.
Leave as default placeholder if not using.
default: "blueprint/disabled/mqtt_generic_control_2"
selector:
text: {}
mqtt_topic3:
name: MQTT Topic 3 (Optional)
description: >
Additional MQTT topic to listen to.
Leave as default placeholder if not using.
default: "blueprint/disabled/mqtt_generic_control_3"
selector:
text: {}
mqtt_topic4:
name: MQTT Topic 4 (Optional)
description: >
Additional MQTT topic to listen to.
Leave as default placeholder if not using.
default: "blueprint/disabled/mqtt_generic_control_4"
selector:
text: {}
actions_group:
name: "Actions"
collapsed: false
input:
action_id_1:
name: Action ID 1
description: Value of `payload_json.action` that triggers callback 1
default: ""
selector:
text: {}
action_callback_1:
name: Action Callback 1
description: Actions to run when Action ID 1 is received
default: []
selector:
action: {}
action_id_2:
name: Action ID 2
default: ""
selector:
text: {}
action_callback_2:
name: Action Callback 2
default: []
selector:
action: {}
action_id_3:
name: Action ID 3
default: ""
selector:
text: {}
action_callback_3:
name: Action Callback 3
default: []
selector:
action: {}
action_id_4:
name: Action ID 4
default: ""
selector:
text: {}
action_callback_4:
name: Action Callback 4
default: []
selector:
action: {}
action_id_5:
name: Action ID 5
default: ""
selector:
text: {}
action_callback_5:
name: Action Callback 5
default: []
selector:
action: {}
action_id_6:
name: Action ID 6
default: ""
selector:
text: {}
action_callback_6:
name: Action Callback 6
default: []
selector:
action: {}
action_id_7:
name: Action ID 7
default: ""
selector:
text: {}
action_callback_7:
name: Action Callback 7
default: []
selector:
action: {}
action_id_8:
name: Action ID 8
default: ""
selector:
text: {}
action_callback_8:
name: Action Callback 8
default: []
selector:
action: {}
mode: restart
trigger:
- platform: mqtt
topic: !input mqtt_topic
- platform: mqtt
topic: !input mqtt_topic2
enabled: "{{ mqtt_topic2 != '' }}"
- platform: mqtt
topic: !input mqtt_topic3
enabled: "{{ mqtt_topic3 != '' }}"
- platform: mqtt
topic: !input mqtt_topic4
enabled: "{{ mqtt_topic4 != '' }}"
variables:
action_id: "{{ trigger.payload_json.action }}"
action_id_1: !input action_id_1
action_id_2: !input action_id_2
action_id_3: !input action_id_3
action_id_4: !input action_id_4
action_id_5: !input action_id_5
action_id_6: !input action_id_6
action_id_7: !input action_id_7
action_id_8: !input action_id_8
is_debug: false
action:
# Debug info (log if required)
- choose:
- conditions:
- condition: template
value_template: "{{ is_debug }}"
sequence:
- service: persistent_notification.create
data:
title: "Debug Info"
message: >
action = {{ action_id }},
1 = {{ action_id_1 }}
- choose:
- conditions:
- condition: template
value_template: "{{ action_id_1 != '' and action_id == action_id_1 }}"
sequence: !input action_callback_1
- conditions:
- condition: template
value_template: "{{ action_id_2 != '' and action_id == action_id_2 }}"
sequence: !input action_callback_2
- conditions:
- condition: template
value_template: "{{ action_id_3 != '' and action_id == action_id_3 }}"
sequence: !input action_callback_3
- conditions:
- condition: template
value_template: "{{ action_id_4 != '' and action_id == action_id_4 }}"
sequence: !input action_callback_4
- conditions:
- condition: template
value_template: "{{ action_id_5 != '' and action_id == action_id_5 }}"
sequence: !input action_callback_5
- conditions:
- condition: template
value_template: "{{ action_id_6 != '' and action_id == action_id_6 }}"
sequence: !input action_callback_6
- conditions:
- condition: template
value_template: "{{ action_id_7 != '' and action_id == action_id_7 }}"
sequence: !input action_callback_7
- conditions:
- condition: template
value_template: "{{ action_id_8 != '' and action_id == action_id_8 }}"
sequence: !input action_callback_8