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 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). Für Mähroboter (lawn_mower) stattdessen "Mähen starten", "Pause" oder "Zur Ladestation" verwenden. 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 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). Für Mähroboter (lawn_mower) stattdessen "Mähen starten", "Pause" oder "Zur Ladestation" verwenden. 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 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). Für Mähroboter (lawn_mower) stattdessen "Mähen starten", "Pause" oder "Zur Ladestation" verwenden. 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 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). Für Mähroboter (lawn_mower) stattdessen "Mähen starten", "Pause" oder "Zur Ladestation" verwenden. 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 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). Für Mähroboter (lawn_mower) stattdessen "Mähen starten", "Pause" oder "Zur Ladestation" verwenden. 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 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). Für Mähroboter (lawn_mower) stattdessen "Mähen starten", "Pause" oder "Zur Ladestation" verwenden. 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 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 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 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 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 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 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