homeassistant/blueprints/automation/hm_pb_6_wm55_taster.yaml
martin d1922a1597 Fix: entity selector multiple+domain-Filter erfordert filter:-Schema
selector.entity.domain als Top-Level-Key funktioniert nicht zusammen mit
multiple: true - HA erwartet dafuer selector.entity.filter: [{domain: [...]}].
Dadurch wurde in der UI gar kein Auswahlfeld mehr gerendert.
2026-07-28 08:25:11 +00:00

574 lines
24 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

blueprint:
name: Homematic Wandtaster HM-PB-6-WM55 (CCU2)
description: >
Ordnet den 6 Tasten eines Homematic-Wandtasters HM-PB-6-WM55 (angebunden
über eine CCU2) jeweils eine oder mehrere Zielentitäten und eine Aktion
(Umschalten, Einschalten, Ausschalten) zu. Kurzer und langer Tastendruck
(PRESS_SHORT / PRESS_LONG) lösen dieselbe Aktion aus.
Pro Taste können mehrere Entitäten ausgewählt werden - die Aktion wird
dann auf jede davon einzeln angewendet. Erkennt automatisch die Domain
jeder Zielentität und ruft den passenden nativen Service auf -
"Einschalten"/"Ausschalten" bedeutet bei einem Schalter/Licht
turn_on/turn_off, bei einem Cover (z. B. Garagentor) open_cover/
close_cover, bei einem Ventil open_valve/close_valve und bei einem
Schloss lock/unlock. "Umschalten" funktioniert für all diese Domains
inklusive Schloss (dort anhand des aktuellen Zustands
gesperrt/entsperrt). Auch Mähroboter (Domain lawn_mower, z. B. Worx
Landroid über die Landroid-Cloud-Integration) werden unterstützt, dafür
gibt es die eigenen Aktionen "Mähen starten", "Pause" und
"Zur Ladestation" statt Ein/Aus/Umschalten.
Ungenutzte Tasten einfach leer lassen, dann passiert bei ihnen nichts.
Für jedes physische Taster-Gerät wird eine eigene Automatisierungs-Instanz
aus diesem Blueprint angelegt. Der Gerätename lässt sich über
Entwicklerwerkzeuge → Ereignisse (Event-Typ homematic.keypress) ablesen,
z. B.:
event_type: homematic.keypress, data: {name: "Taster Garage", param:
PRESS_SHORT, channel: 1}
domain: automation
input:
device_name:
name: Taster-Gerätename
description: >
Name des Homematic-Geräts, wie er im Event homematic.keypress unter
"name" steht (z. B. "Taster Garage"). Muss exakt übereinstimmen
zu finden über Entwicklerwerkzeuge → Ereignisse.
selector:
text:
button_1_entity:
name: Taste 1 Zielentität(en)
description: >
Eine oder mehrere Entitäten, die bei Taste 1 (channel 1)
angesteuert werden. Leer lassen für keine Aktion.
default: []
selector:
entity:
multiple: true
filter:
- domain:
- switch
- light
- cover
- fan
- input_boolean
- lock
- valve
- siren
- lawn_mower
button_1_action:
name: Taste 1 Aktion
description: >
Umschalten/Ein/Aus passen sich automatisch der Domain jeder
Zielentität an: Schalter/Licht/Lüfter/Sirene = ein/aus, Cover
(z. B. Garagentor) = öffnen/schließen, Ventil = öffnen/schließen,
Schloss = (ent)sperren. Praktisch für Wippen-Tastenpaare, z. B. eine
Taste "Einschalten" (öffnet das Tor) und eine zweite "Ausschalten"
(schließt es). Bei einem Mähroboter (lawn_mower) bedeutet
"Umschalten": steht er auf der Ladestation → Mähen starten, sonst
(mäht/pausiert/fährt zurück) → Zur Ladestation. Alternativ auch
direkt "Mähen starten", "Pause" oder "Zur Ladestation" als feste
Aktion für diese Taste wählbar.
default: toggle
selector:
select:
mode: dropdown
options:
- value: toggle
label: Umschalten
- value: turn_on
label: Einschalten
- value: turn_off
label: Ausschalten
- value: start_mowing
label: "Mähroboter: Mähen starten"
- value: pause
label: "Mähroboter: Pause"
- value: dock
label: "Mähroboter: Zur Ladestation"
button_2_entity:
name: Taste 2 Zielentität(en)
description: >
Eine oder mehrere Entitäten, die bei Taste 2 (channel 2)
angesteuert werden. Leer lassen für keine Aktion.
default: []
selector:
entity:
multiple: true
filter:
- domain:
- switch
- light
- cover
- fan
- input_boolean
- lock
- valve
- siren
- lawn_mower
button_2_action:
name: Taste 2 Aktion
description: >
Umschalten/Ein/Aus passen sich automatisch der Domain jeder
Zielentität an: Schalter/Licht/Lüfter/Sirene = ein/aus, Cover
(z. B. Garagentor) = öffnen/schließen, Ventil = öffnen/schließen,
Schloss = (ent)sperren. Praktisch für Wippen-Tastenpaare, z. B. eine
Taste "Einschalten" (öffnet das Tor) und eine zweite "Ausschalten"
(schließt es). Bei einem Mähroboter (lawn_mower) bedeutet
"Umschalten": steht er auf der Ladestation → Mähen starten, sonst
(mäht/pausiert/fährt zurück) → Zur Ladestation. Alternativ auch
direkt "Mähen starten", "Pause" oder "Zur Ladestation" als feste
Aktion für diese Taste wählbar.
default: toggle
selector:
select:
mode: dropdown
options:
- value: toggle
label: Umschalten
- value: turn_on
label: Einschalten
- value: turn_off
label: Ausschalten
- value: start_mowing
label: "Mähroboter: Mähen starten"
- value: pause
label: "Mähroboter: Pause"
- value: dock
label: "Mähroboter: Zur Ladestation"
button_3_entity:
name: Taste 3 Zielentität(en)
description: >
Eine oder mehrere Entitäten, die bei Taste 3 (channel 3)
angesteuert werden. Leer lassen für keine Aktion.
default: []
selector:
entity:
multiple: true
filter:
- domain:
- switch
- light
- cover
- fan
- input_boolean
- lock
- valve
- siren
- lawn_mower
button_3_action:
name: Taste 3 Aktion
description: >
Umschalten/Ein/Aus passen sich automatisch der Domain jeder
Zielentität an: Schalter/Licht/Lüfter/Sirene = ein/aus, Cover
(z. B. Garagentor) = öffnen/schließen, Ventil = öffnen/schließen,
Schloss = (ent)sperren. Praktisch für Wippen-Tastenpaare, z. B. eine
Taste "Einschalten" (öffnet das Tor) und eine zweite "Ausschalten"
(schließt es). Bei einem Mähroboter (lawn_mower) bedeutet
"Umschalten": steht er auf der Ladestation → Mähen starten, sonst
(mäht/pausiert/fährt zurück) → Zur Ladestation. Alternativ auch
direkt "Mähen starten", "Pause" oder "Zur Ladestation" als feste
Aktion für diese Taste wählbar.
default: toggle
selector:
select:
mode: dropdown
options:
- value: toggle
label: Umschalten
- value: turn_on
label: Einschalten
- value: turn_off
label: Ausschalten
- value: start_mowing
label: "Mähroboter: Mähen starten"
- value: pause
label: "Mähroboter: Pause"
- value: dock
label: "Mähroboter: Zur Ladestation"
button_4_entity:
name: Taste 4 Zielentität(en)
description: >
Eine oder mehrere Entitäten, die bei Taste 4 (channel 4)
angesteuert werden. Leer lassen für keine Aktion.
default: []
selector:
entity:
multiple: true
filter:
- domain:
- switch
- light
- cover
- fan
- input_boolean
- lock
- valve
- siren
- lawn_mower
button_4_action:
name: Taste 4 Aktion
description: >
Umschalten/Ein/Aus passen sich automatisch der Domain jeder
Zielentität an: Schalter/Licht/Lüfter/Sirene = ein/aus, Cover
(z. B. Garagentor) = öffnen/schließen, Ventil = öffnen/schließen,
Schloss = (ent)sperren. Praktisch für Wippen-Tastenpaare, z. B. eine
Taste "Einschalten" (öffnet das Tor) und eine zweite "Ausschalten"
(schließt es). Bei einem Mähroboter (lawn_mower) bedeutet
"Umschalten": steht er auf der Ladestation → Mähen starten, sonst
(mäht/pausiert/fährt zurück) → Zur Ladestation. Alternativ auch
direkt "Mähen starten", "Pause" oder "Zur Ladestation" als feste
Aktion für diese Taste wählbar.
default: toggle
selector:
select:
mode: dropdown
options:
- value: toggle
label: Umschalten
- value: turn_on
label: Einschalten
- value: turn_off
label: Ausschalten
- value: start_mowing
label: "Mähroboter: Mähen starten"
- value: pause
label: "Mähroboter: Pause"
- value: dock
label: "Mähroboter: Zur Ladestation"
button_5_entity:
name: Taste 5 Zielentität(en)
description: >
Eine oder mehrere Entitäten, die bei Taste 5 (channel 5)
angesteuert werden. Leer lassen für keine Aktion.
default: []
selector:
entity:
multiple: true
filter:
- domain:
- switch
- light
- cover
- fan
- input_boolean
- lock
- valve
- siren
- lawn_mower
button_5_action:
name: Taste 5 Aktion
description: >
Umschalten/Ein/Aus passen sich automatisch der Domain jeder
Zielentität an: Schalter/Licht/Lüfter/Sirene = ein/aus, Cover
(z. B. Garagentor) = öffnen/schließen, Ventil = öffnen/schließen,
Schloss = (ent)sperren. Praktisch für Wippen-Tastenpaare, z. B. eine
Taste "Einschalten" (öffnet das Tor) und eine zweite "Ausschalten"
(schließt es). Bei einem Mähroboter (lawn_mower) bedeutet
"Umschalten": steht er auf der Ladestation → Mähen starten, sonst
(mäht/pausiert/fährt zurück) → Zur Ladestation. Alternativ auch
direkt "Mähen starten", "Pause" oder "Zur Ladestation" als feste
Aktion für diese Taste wählbar.
default: toggle
selector:
select:
mode: dropdown
options:
- value: toggle
label: Umschalten
- value: turn_on
label: Einschalten
- value: turn_off
label: Ausschalten
- value: start_mowing
label: "Mähroboter: Mähen starten"
- value: pause
label: "Mähroboter: Pause"
- value: dock
label: "Mähroboter: Zur Ladestation"
button_6_entity:
name: Taste 6 Zielentität(en)
description: >
Eine oder mehrere Entitäten, die bei Taste 6 (channel 6)
angesteuert werden. Leer lassen für keine Aktion.
default: []
selector:
entity:
multiple: true
filter:
- domain:
- switch
- light
- cover
- fan
- input_boolean
- lock
- valve
- siren
- lawn_mower
button_6_action:
name: Taste 6 Aktion
description: >
Umschalten/Ein/Aus passen sich automatisch der Domain jeder
Zielentität an: Schalter/Licht/Lüfter/Sirene = ein/aus, Cover
(z. B. Garagentor) = öffnen/schließen, Ventil = öffnen/schließen,
Schloss = (ent)sperren. Praktisch für Wippen-Tastenpaare, z. B. eine
Taste "Einschalten" (öffnet das Tor) und eine zweite "Ausschalten"
(schließt es). Bei einem Mähroboter (lawn_mower) bedeutet
"Umschalten": steht er auf der Ladestation → Mähen starten, sonst
(mäht/pausiert/fährt zurück) → Zur Ladestation. Alternativ auch
direkt "Mähen starten", "Pause" oder "Zur Ladestation" als feste
Aktion für diese Taste wählbar.
default: toggle
selector:
select:
mode: dropdown
options:
- value: toggle
label: Umschalten
- value: turn_on
label: Einschalten
- value: turn_off
label: Ausschalten
- value: start_mowing
label: "Mähroboter: Mähen starten"
- value: pause
label: "Mähroboter: Pause"
- value: dock
label: "Mähroboter: Zur Ladestation"
variables:
channel: "{{ trigger.event.data.channel }}"
button_1_entity: !input button_1_entity
button_1_action: !input button_1_action
button_2_entity: !input button_2_entity
button_2_action: !input button_2_action
button_3_entity: !input button_3_entity
button_3_action: !input button_3_action
button_4_entity: !input button_4_entity
button_4_action: !input button_4_action
button_5_entity: !input button_5_entity
button_5_action: !input button_5_action
button_6_entity: !input button_6_entity
button_6_action: !input button_6_action
trigger:
- platform: event
event_type: homematic.keypress
event_data:
name: !input device_name
action:
- choose:
- conditions:
- condition: template
value_template: "{{ channel | int == 1 and button_1_entity | length > 0 }}"
sequence:
- repeat:
for_each: "{{ button_1_entity }}"
sequence:
- action: |-
{%- set domain = repeat.item.split('.')[0] -%}
{%- if button_1_action == 'turn_on' and domain == 'cover' -%}
cover.open_cover
{%- elif button_1_action == 'turn_off' and domain == 'cover' -%}
cover.close_cover
{%- elif button_1_action == 'turn_on' and domain == 'valve' -%}
valve.open_valve
{%- elif button_1_action == 'turn_off' and domain == 'valve' -%}
valve.close_valve
{%- elif button_1_action == 'turn_on' and domain == 'lock' -%}
lock.lock
{%- elif button_1_action == 'turn_off' and domain == 'lock' -%}
lock.unlock
{%- elif button_1_action == 'toggle' and domain == 'lock' -%}
lock.{{ 'unlock' if is_state(repeat.item, 'locked') else 'lock' }}
{%- elif button_1_action == 'toggle' and domain == 'lawn_mower' -%}
lawn_mower.{{ 'start_mowing' if is_state(repeat.item, 'docked') else 'dock' }}
{%- elif button_1_action in ['start_mowing', 'pause', 'dock'] -%}
lawn_mower.{{ button_1_action }}
{%- else -%}
homeassistant.{{ button_1_action }}
{%- endif -%}
target:
entity_id: "{{ repeat.item }}"
- conditions:
- condition: template
value_template: "{{ channel | int == 2 and button_2_entity | length > 0 }}"
sequence:
- repeat:
for_each: "{{ button_2_entity }}"
sequence:
- action: |-
{%- set domain = repeat.item.split('.')[0] -%}
{%- if button_2_action == 'turn_on' and domain == 'cover' -%}
cover.open_cover
{%- elif button_2_action == 'turn_off' and domain == 'cover' -%}
cover.close_cover
{%- elif button_2_action == 'turn_on' and domain == 'valve' -%}
valve.open_valve
{%- elif button_2_action == 'turn_off' and domain == 'valve' -%}
valve.close_valve
{%- elif button_2_action == 'turn_on' and domain == 'lock' -%}
lock.lock
{%- elif button_2_action == 'turn_off' and domain == 'lock' -%}
lock.unlock
{%- elif button_2_action == 'toggle' and domain == 'lock' -%}
lock.{{ 'unlock' if is_state(repeat.item, 'locked') else 'lock' }}
{%- elif button_2_action == 'toggle' and domain == 'lawn_mower' -%}
lawn_mower.{{ 'start_mowing' if is_state(repeat.item, 'docked') else 'dock' }}
{%- elif button_2_action in ['start_mowing', 'pause', 'dock'] -%}
lawn_mower.{{ button_2_action }}
{%- else -%}
homeassistant.{{ button_2_action }}
{%- endif -%}
target:
entity_id: "{{ repeat.item }}"
- conditions:
- condition: template
value_template: "{{ channel | int == 3 and button_3_entity | length > 0 }}"
sequence:
- repeat:
for_each: "{{ button_3_entity }}"
sequence:
- action: |-
{%- set domain = repeat.item.split('.')[0] -%}
{%- if button_3_action == 'turn_on' and domain == 'cover' -%}
cover.open_cover
{%- elif button_3_action == 'turn_off' and domain == 'cover' -%}
cover.close_cover
{%- elif button_3_action == 'turn_on' and domain == 'valve' -%}
valve.open_valve
{%- elif button_3_action == 'turn_off' and domain == 'valve' -%}
valve.close_valve
{%- elif button_3_action == 'turn_on' and domain == 'lock' -%}
lock.lock
{%- elif button_3_action == 'turn_off' and domain == 'lock' -%}
lock.unlock
{%- elif button_3_action == 'toggle' and domain == 'lock' -%}
lock.{{ 'unlock' if is_state(repeat.item, 'locked') else 'lock' }}
{%- elif button_3_action == 'toggle' and domain == 'lawn_mower' -%}
lawn_mower.{{ 'start_mowing' if is_state(repeat.item, 'docked') else 'dock' }}
{%- elif button_3_action in ['start_mowing', 'pause', 'dock'] -%}
lawn_mower.{{ button_3_action }}
{%- else -%}
homeassistant.{{ button_3_action }}
{%- endif -%}
target:
entity_id: "{{ repeat.item }}"
- conditions:
- condition: template
value_template: "{{ channel | int == 4 and button_4_entity | length > 0 }}"
sequence:
- repeat:
for_each: "{{ button_4_entity }}"
sequence:
- action: |-
{%- set domain = repeat.item.split('.')[0] -%}
{%- if button_4_action == 'turn_on' and domain == 'cover' -%}
cover.open_cover
{%- elif button_4_action == 'turn_off' and domain == 'cover' -%}
cover.close_cover
{%- elif button_4_action == 'turn_on' and domain == 'valve' -%}
valve.open_valve
{%- elif button_4_action == 'turn_off' and domain == 'valve' -%}
valve.close_valve
{%- elif button_4_action == 'turn_on' and domain == 'lock' -%}
lock.lock
{%- elif button_4_action == 'turn_off' and domain == 'lock' -%}
lock.unlock
{%- elif button_4_action == 'toggle' and domain == 'lock' -%}
lock.{{ 'unlock' if is_state(repeat.item, 'locked') else 'lock' }}
{%- elif button_4_action == 'toggle' and domain == 'lawn_mower' -%}
lawn_mower.{{ 'start_mowing' if is_state(repeat.item, 'docked') else 'dock' }}
{%- elif button_4_action in ['start_mowing', 'pause', 'dock'] -%}
lawn_mower.{{ button_4_action }}
{%- else -%}
homeassistant.{{ button_4_action }}
{%- endif -%}
target:
entity_id: "{{ repeat.item }}"
- conditions:
- condition: template
value_template: "{{ channel | int == 5 and button_5_entity | length > 0 }}"
sequence:
- repeat:
for_each: "{{ button_5_entity }}"
sequence:
- action: |-
{%- set domain = repeat.item.split('.')[0] -%}
{%- if button_5_action == 'turn_on' and domain == 'cover' -%}
cover.open_cover
{%- elif button_5_action == 'turn_off' and domain == 'cover' -%}
cover.close_cover
{%- elif button_5_action == 'turn_on' and domain == 'valve' -%}
valve.open_valve
{%- elif button_5_action == 'turn_off' and domain == 'valve' -%}
valve.close_valve
{%- elif button_5_action == 'turn_on' and domain == 'lock' -%}
lock.lock
{%- elif button_5_action == 'turn_off' and domain == 'lock' -%}
lock.unlock
{%- elif button_5_action == 'toggle' and domain == 'lock' -%}
lock.{{ 'unlock' if is_state(repeat.item, 'locked') else 'lock' }}
{%- elif button_5_action == 'toggle' and domain == 'lawn_mower' -%}
lawn_mower.{{ 'start_mowing' if is_state(repeat.item, 'docked') else 'dock' }}
{%- elif button_5_action in ['start_mowing', 'pause', 'dock'] -%}
lawn_mower.{{ button_5_action }}
{%- else -%}
homeassistant.{{ button_5_action }}
{%- endif -%}
target:
entity_id: "{{ repeat.item }}"
- conditions:
- condition: template
value_template: "{{ channel | int == 6 and button_6_entity | length > 0 }}"
sequence:
- repeat:
for_each: "{{ button_6_entity }}"
sequence:
- action: |-
{%- set domain = repeat.item.split('.')[0] -%}
{%- if button_6_action == 'turn_on' and domain == 'cover' -%}
cover.open_cover
{%- elif button_6_action == 'turn_off' and domain == 'cover' -%}
cover.close_cover
{%- elif button_6_action == 'turn_on' and domain == 'valve' -%}
valve.open_valve
{%- elif button_6_action == 'turn_off' and domain == 'valve' -%}
valve.close_valve
{%- elif button_6_action == 'turn_on' and domain == 'lock' -%}
lock.lock
{%- elif button_6_action == 'turn_off' and domain == 'lock' -%}
lock.unlock
{%- elif button_6_action == 'toggle' and domain == 'lock' -%}
lock.{{ 'unlock' if is_state(repeat.item, 'locked') else 'lock' }}
{%- elif button_6_action == 'toggle' and domain == 'lawn_mower' -%}
lawn_mower.{{ 'start_mowing' if is_state(repeat.item, 'docked') else 'dock' }}
{%- elif button_6_action in ['start_mowing', 'pause', 'dock'] -%}
lawn_mower.{{ button_6_action }}
{%- else -%}
homeassistant.{{ button_6_action }}
{%- endif -%}
target:
entity_id: "{{ repeat.item }}"
mode: single
max_exceeded: silent