Z2M / HA: Hue Lampen behalten Farbe nach "Breathe" Effekt (Alarm-Automation)

Moin zusammen,

ich drehe mich im Kreis und brauche mal einen Schubs in die richtige Richtung.

Mein Setup: Home Assistant, Zigbee2MQTT, verschiedene Lampen (z.b. Hue Play Bars mit denen ich gerade das Ganze teste, aber auch diverse Tradfri Lampen sollen später ebenfalls in mein Vorhaben integriert werden).

Das Ziel: Eine Notruf-Automation (meine Frau ist gehörlos und z.b. für die Türklingel etc. auf Lichtsignale angewiesen). Bestimmte Lampen (über ein HA-Label gebündelt) sollen für 15 Sekunden rot blinken (Z2M Effekt ⁠breathe⁠) und danach exakt in ihren vorherigen Zustand zurückkehren (entweder alte Farbe und an, oder eben aus).

Das Problem: Wenn ich nach dem Alarm den alten Zustand (z.B. “aus”) wiederherstelle, gehen die Lampen zwar aus – aber beim nächsten regulären Einschalten leuchten sie noch knallrot! Anders bei den Lampen die vorher eingeschaltet waren. Die werden nach dem Alarm wieder in ihren ursprünglichen Zustand gebracht (Farbe und Helligkeit). Es scheint also so, als könne ich die Farbe bei züchten ausgeschalten Lampen nicht zurückspeichern?!

Was ich schon (erfolglos) versucht habe:

Snapshot via ⁠scene.create⁠ und Restore (Lampen gehen aus, bleiben intern aber rot).

Z2M Effekt per ⁠effect: stop⁠ oder ⁠none⁠ beenden, bevor ausgeschaltet wird.

Vor / während dem Ausschalten einen Reset-Befehl mit ⁠kelvin: 2700⁠ senden (wird entweder von der Lampe ignoriert, weil sie ausgeht, oder blitzt ewig verzögert auf).

Wie zwingt ihr eure Lampen nach einem temporären Alarm-Effekt zurück in die Spur, ohne dass sie sich die Alarm-Farbe als letzten Status für das nächste Einschalten merken?

Danke für eure Ideen!

Bei uns blinken einige Lampen im Haus, wenn es an der Tür klingelt. Das lief lange mit “scene.create” problemlos. Irgendwann, vermutlich nach einem HA Update ging das nicht mehr. Die Ki (ja ich weiß die böse KI) hat mir das umgebaut und arbeitet mit Variablen. Seit dem läuft es wieder.

Als erstes arbeite mit ZigBee Gruppen, also in ZigBee2MQTT die jeweiligen Leuchtmittel gruppieren und nicht mit Labels oder Zonen.

Zum Thema hier mal ein Bsp:

Gruß Osorkon

Das mit der Türklingel habe ich auch schon eine längere Zeit laufen. Allerdings schicke ich dort an meine „Lichtsignal Gruppe“ (per Label markierte Effekt-Entitäten der Leuchtmittel von Z2M) den „breathe“ Befehl. Das funktioniert einwandfrei. Allerdings blinken die Lampen dann auch nur in warmweiss zu 100%. Für Spielereien mit unterschiedlichen Farbcodes war das System nicht gedacht.

Gibt es nicht eine Möglichkeit beim „breathe“ Befehl direkt die Farbe als payload mitzusenden, über mqtt?

Die Idee mit den Z2M Gruppen kam mir auch vorhin. Gruppen verwende ich bereits für die Räume in denen z.b. 3 Lampen zusammen gesteuert werden sollen, um den zigbee Traffic gering zu halten.

Für so eine Lichtsignal Gruppe könnte ich ja dann alle entsprechenden Leuchten in eine Gruppe packen. Und dann einfach ein „blinken“ manuell basteln in HA?

Du kannst doch einfach die Farbe wählen und dann mit X Wiederholungen An -Pause- Aus ausführen.
Dann hast Du doch Dein Blinken in gewünschter Farbe und Dauer.

Gruß Osorkon

Das habe ich auch probiert. Bei der Größe des Zigbee Meshs und der Anzahl an Lampen, die ich in meine Signalgruppe packe (pro Raum mindestens zwei), verschluckt sich das relativ schnell und ich bekomme ne “Lichter-Kotze” mit teils stark verzögert ausgeführten Befehlen. Das war bisher ziemlich unbefriedigend - ja, ich könnte noch mit den QoS Leveln für die MQTT Befehle spielen und vielleicht bisschen was rausholen.

In der Z2M Gruppe sah ich vorhin, dass man dort effect_color angeben kann. Super, hab mich gefreut, macht genau gar nichts. Steht wohl darin, weil ein Hue Stripe den ich testweise hinzugefügt habe, das wohl kann. Wenn ich das einzeln bei ihm in den Expose-Funktionen in Z2M angebe, also die effect-color festlege und dann den Effekt starte, läuft er in der Farbe ab. Danach bleibt aber auch die Leuchte in der Farbe stecken und geht nicht wieder auf den Ausgangszustand zurück. Bringt mich also auch nicht wirklich weiter, eine extra Option für die Effektfarbe zu haben. (das bekomme ich übrigens auch hin, wenn ich direkt in HA die Farbe anpasse und den Effekt starte - selbst bei den Lampen, die es laut Z2M nicht unterstützen - dann habe ich aber weiterhin das Problem, dass die Leuchten auf der Farbe stecken bleiben und ich sie nicht zuverlässig auf ihren Ursprung vor dem “Alarm” zurück bekomme. Dieses eine Puzzleteil fehlt mir (wenn z.B. scene.create zuverlässig arbeiten würde, wäre ich hier nicht am schreiben :smiley: ).

Trotzdem schon mal danke an euch alle, die hier mit am Brainstormen sind und Ideen einbringen. Das hilft und bringt teils neue Ansätze (z.b. die Z2M Gruppe)

Wie schon geschrieben, Leuchten in Gruppen packen und nur die Gruppen steuerten.
Keine Effekte verwenden, wenn nicht alle Gruppenmitglieder diese Effekte auch unterstützen, sondern einfach die jeweilige Farbe Wählen und dann einfach Den AN / Aus Befehl x mal wiederholen.

Zuvor ein Snapshot Szene der Gruppe erstellen und zum Schluss die Snapshot Szene aktivieren.

Funktioniert hier bei mir wunderbar sowohl mit ZigBee Leuchten wie auch mit Matter over Thread Leuchten.

Gruß Osorkon

Ich mache es genauso wie @Osorkon.
Da bei mir die blinkenden Lampen aber hauptsächlich als Lampen genutzt werden, lasse ich nach jedem abgeschlossene blinken die Lampe wieder kurz (500ms) in der normalen warmweiß Farbe aufleuchten, um beim nächsten einschalten nicht wieder die zuletzt blinkenden Farbe habe.

Ok, das klappt einigermaßen. Ab und an verschluckt er sich, dass bleibt er einfach nach dem ersten oder zweiten blinken stur auf der Farbe stehen. Aber das mit der Szene funktioniert nicht wirklich.

Wenn ich die Gruppe snapshote, speichert er sich ja einen durchschnittlichen Mix der Einstellungen der Gruppenmitglieder. Habe ich unterschiedliche Farben oder Helligkeiten in der Gruppe, nimmt er sich die dominante Farbe und den Durchschnitt der Helligkeit und bügelt ihn dann auf die Gruppe. Nun habe ich ja die Möglichkeit mit den group_entities die einzelnen Gruppenentitäten (sofern sie auch in HA registriert sind) anzeigen zu lassen. Ich habe mir das nun so gebastelt, dass der scene.create Service mir einen Snapshot von eben den group_entities macht. Das funktioniert auch grundsätzlich super, nur beim zurückspielen habe ich Probleme mit Leuchten, die von Beginn an ausgeschaltet waren.
Das heißt, die Leuchten in meiner Gruppe, die beim auslösen des Snapshot eingeschaltet waren, werden am Schluss wieder zuverlässig auf den Stand zurückgebracht. Die ausgeschaltet Leuchten haben dann, wenn ich sie wieder einschalte den Farbton meines “Alarms” und 100% Helligkeit (oder was auch immer ich beim blinken genutzt habe).

Hast du dafür einen Tipp oder eine Idee für mich? Kannst du mir mal den Code für deine Snapshot Erstellung und Wiederherstellung hier schicken?

So, ich habe nun ein wenig gebastelt und den (für mich) funktionierenden Weg gefunden, dass ich eine Gruppe an Leuchten in einer vorher auswählbaren Farbe blinken lasse (über Effekt “breathe”) und danach wieder auf ihre ursprünglichen Werte zurücksetze, inkl. Ein- oder Ausgeschaltet.
Ausgelegt ist das Skript für zwei Z2M Gruppen, die ich für Tag und Nachtmodus erstellt habe.

Das Skript kann das einfach in einer Automation ausgeführt werden und darin wird dann auch die Farbe festgelegt. In meinen Tests und dem aktuellen produktiven Einsatz z.B. für die Türklingel, läuft es bei mir einwandfrei. Ab und an blieb mal eine Leuchte noch eingeschaltet oder so, das war aber immer beim gleichen Hue Stripe - ich habe das Timing der Delays daher noch mal angepasst und erhoffe mir damit eine Verbesserung.

Der große Vorteil des Skripts: voll dynamisch, man arbeitet eigentlich nur an seinen Z2M Gruppe und es wird der Effekt “breathe” genutzt, was die Kommandos an das Zigbee Mesh gering hält (damit hatte ich immer Probleme, das dann einfach Leuchten nicht reagieren oder mit hoher Latenz arbeiten).

Hier das Skript, ihr könnt es gerne verwenden oder ergänzen (über eine Info würde ich mich dann riesig freuen):

alias: "Lichtsignal: Universal Lichtsignal"
description: >-
  Triggert ein Lichtsignal basierend auf Uhrzeit (Tag/Nacht) und einer
  übergebenen Farbe.
fields:
  signal_color:
    name: Signal-Farbe
    description: Wähle die Farbe für das Lichtsignal (rot, blau, orange, gruen, violett)
    required: true
    selector:
      select:
        options:
          - label: 🚨 Rot
            value: rot
          - label: 🌊 Blau
            value: blau
          - label: ☣️ Orange
            value: orange
          - label: 🌿 Grün
            value: gruen
          - label: 🔮 Violett
            value: violett
sequence:
  - variables:
      target_group: |-
        {% if now().hour >= 6 and now().hour < 20 %}
          light.lichtsignal_tag_z2m
        {% else %}
          light.lichtsignal_nacht_z2m
        {% endif %}
      rgb_code: |-
        {% set colors = {
          'rot': [255, 0, 0],
          'blau': [0, 0, 255],
          'orange': [255, 120, 0],
          'gruen': [0, 255, 0],
          'violett': [155, 0, 255]
        } %} {{ colors.get(signal_color, [255, 255, 255]) }}
  - data:
      scene_id: signal_alarm_snapshot_1
      snapshot_entities: "{{ state_attr(target_group, 'group_entities') }}"
    action: scene.create
  - action: light.turn_on
    target:
      entity_id: "{{ target_group }}"
    data: {}
  - delay:
      hours: 0
      minutes: 0
      seconds: 0
      milliseconds: 500
  - data:
      scene_id: signal_alarm_snapshot_2
      snapshot_entities: "{{ state_attr(target_group, 'group_entities') }}"
    action: scene.create
  - action: light.turn_on
    target:
      entity_id: "{{ target_group }}"
    data:
      rgb_color: "{{ rgb_code }}"
  - action: light.turn_on
    target:
      entity_id: "{{ target_group }}"
    data:
      effect: breathe
  - delay:
      hours: 0
      minutes: 0
      seconds: 16
      milliseconds: 0
  - target:
      entity_id: scene.signal_alarm_snapshot_2
    action: scene.turn_on
    data:
      transition: 1
  - delay:
      hours: 0
      minutes: 0
      seconds: 1
      milliseconds: 500
  - target:
      entity_id: scene.signal_alarm_snapshot_1
    action: scene.turn_on
    data:
      transition: 1
mode: single