Seit einigern Monaten bietet Ikea ein wachsendes Sortiment an smarter Beleuchtung mit den passenden Steuerelementen zu halbwegs günstigen Preisen an. Wie kann die Einbindung in unser Smart-Home aussehen?
Das sind zwar alles Zigbee-Sender und -Empfänger, normal funktionieren die aber nur mit der hauseigenen Zentrale und App.
Aber es gibt ja das wunderbare zigbee2mqtt, dass Zigbee-Geräte in MQTT einbinden kann. Alles was man dazu braucht, ist ein CC2531-kompatibler USB-Stick, den man für 10-15 € bei diversen Versendern ordern kann.
Es sollte die aktuelle „Koenkk”-Firmware aufgespielt sein, mindestens die Version vom Juni 2019 - einige Ikea-Produkte, u.a. die E1743-Dimmer, nutzen das Zigbee-Feature der Bindung an Gerätegruppen, das erst ab dieser Version unterstützt wird. Je nach Empfangssituation kann der Stick mit verschiedenen Antennenarten ausgestattet werden; rechts seht ihr die einfachste Version mit Print-Antenne.
Die zigbee2mqtt-Software kann direkt auf der Hardware des MQTT-Brokers betrieben werden, bei mir ist das ein Raspberry Pi 4 mit 2 GB Speicher und einer USB-SSD als Systemlaufwerk.
Die Installation ist auf der zigee2mqtt-Seite gut erklärt und funktioniert ohne Probleme. Ein installiertes und funktionsfähiges MQTT und Node-RED setze ich mal voraus, ansonsten seht euch den Smart-Home-Artikel an.
Auf der Node-RED-Seite ist das Plugin „Zigbee2MQTT Admin Panel” sehr hilfreich bei Pairing und Namensvergabe der Zigbee-Geräte.
MQTT-Messages
Der Grundaufbau der Message-Topics ist bei allen Geräten gleich:
<prefix>/<friendly_name>/<command>
Der Präfix wird in der zigbee2mqtt-Konfiguration vergeben, der Standardwert ist „zigbee2mqtt”.
Den friendly name legt man in der Gerätekonfiguration, z.B. im Zigbee2MQTT Admin Panel, pro Endgerät fest. Bei mir heißen sie Dimmer<n>, Lamp<n>, Plug<n> u.s.w., wobei <n> durchgezählt wird.
Die Set-Befehle haben als Kommmando „set” und als Payload den Namen und Wert des gesetzten Parameters als json-Struktur.
Die Get-Befehle haben als Kommmando „get” und als Payload den Namen des abgefragten Parameters mit leerem Wert als json-Struktur.
Typische Befehle sind:
Topic
zigbee2mqtt/Lamp1/set
zigbee2mqtt/Lamp1/set
zigbee2mqtt/Lamp1/get
zigbee2mqtt/Lamp1/get
Payload
{"state": "ON"}
{brightness": "128"}
{"state": ""}
{brightness": ""}
Aktion
Lampe einschalten
Halbe Hellgkeit
Status abfragen
Helligkeit abfragen
Wenn ein Gerät selbständig eine Message sendet, z.B. wenn eine Taste gedrückt wird, schickt sie dies an das Topic
<prefix>/<friendly_name>
Beispiel: Ein kurzer und ein langer Tastendruck auf den Ein-Taster eines E1743-Dimmers erzeugt folgende Messages:
Aktion
kurzer Druck auf Ein-Taste
langer Druck auf Ein-Taste
Taste loslassen
Topic
zigbee2mqtt/Dimmer2
zigbee2mqtt/Dimmer2
zigbee2mqtt/Dimmer2
Payload
{
"action":"on",
"click":"on",
"linkquality":63,
"update_available":false
}
{
"action":"brightness_move_up",
"action_rate":83,
"click":"brightness_up",
"linkquality":39,
"update_available":false
}
{
"action":"brightness_stop",
"click":"brightness_stop",
"linkquality":68,
"update_available":false
}
In der folgenden Tabelle findet ihr eine Übersicht über die bei mir eingesetzten Typen. Bei „Get” stehen bei „passiven” Geräten (wie LEDs) die per Get-Message abfragbaren und bei „aktiven” Geräten (wie Schalter/Dimmer) die per Action-Message gesendeten Parameter.
Gerät
LED warmweiß
Get
state: {"state": ""}
brightness: {"brightness": ""}
Set
state: ON, OFF, TOGGLE
brightness: 0...255
transition: Zeit in Sekunden
brightness_move: +- 0...255, stop
brightness_step: 0...255
effect: blink, breathe, ok, channel_change, finish_effect, stop_effect
Reset
6x kurz einschalten
LED mit Weiß-Spektrum
state: {„state”: „”}
brightness: {„brightness”: „”}
color_temp: {„color_temp”: „”}
state: ON, OFF, TOGGLE
brightness: 0…255
transition: Zeit in Sekunden
brightness_move: +- 0…255, stop
brightness_step: 0…255
color_temp: 150…500
effect: blink, breathe, ok, channel_change, finish_effect, stop_effect
6x kurz einschalten
LED mit Farb-Spektrum
state: {"state": ""}
brightness: {"brightness": ""}
color: {"x": "", "y": ""}
state: ON, OFF, TOGGLE
brightness: 0...255
transition: Zeit in Sekunden
brightness_move: +- 0...255, stop
brightness_step: 0...255
color: {"x": X, "y": Y}
{"r": R, "g": G, "b": B}
{"rgb": "R, G, B"}
{"hex": HEX}
effect: blink, breathe, ok, channel_change, finish_effect, stop_effect
6x kurz einschalten
Ein-/Aus-Schalter und Dimmer
action:
on, off, brightness_move_up, brightness_move_down, brightness_stop
action_rate: 0...255
click:
on, off, brighness_up, brightness_down, brightness_stop
linkquality: 0...255,
update_available: true, false
simulated_brightness.delta: 0...255
simulated_brightness.interval: 0...255
Pairing-Knopf (Rückseite) 4x kurz drücken
Die Informationen stammen auch aus eigenen Versuchen, zum größeren Teil aber von der Liste der von zigbee2mqtt unterstützen Geräte, die zur Zeit (Dezember 2020) 1147 Geräte von 184 Herstellern enthält.
In Node-Red kann man das Ein- und Ausschalten einer Ikea-Trådfri-Lampe mit einem Dashboard-Switch lösen, indem state „ON” oder „OFF” an das set-Topic der LED gesendet wird. Will man den wahren Status der Lampe am Schalter anzeigen, legt man den status-Eingang an den Schalter und stellt den Indicator auf „switch icon shows state of the input” sowie „Pass through” auf off.
Für die Helligkeit kann man einen Slider einsetzen, dessen Endwerte auf den Wertebereich der LED von 0 bis 255 gesetzt werden. Damit Schalter und Slider beim Start die richtige Stellung haben, wird eine Sekunde nach Start eine Status-Abfrage getriggert. Das ganze sieht dann so aus:
Hier könnt ihr den gesamten Flow herunterladen.
Um einen „echten” Taster mit der Lampe zu verbinden, werden die Topics des Tasters abonniert. Ein kleiner Subflow erledigt die Umformatierung der Messages und sendet sie zur Lampe.
Zur Vollständigkeit auch hier der simple Flow zum Herunterladen.
Innerhalb des Subflows schickt ein Switch-Node die Message je nach action-Parameter an verschiedene Ausgänge, hinter denen je ein Change-Node die Messages für die Lampe formatiert.
Hier auch dieser Subflow zum Herunterladen.
Die beiden letzten lassen sich natürlich mit dem ersten Flow kombinieren, so dass man dann die Lampe sowohl vom Node-RED-Dashboard als auch vom Dimmer aus steuern kann.
Durch die Nutzung von MQTT und Node-RED statt der proprietären Ikea-Steuersoftware sind wir jetzt auch in der Lage, beliebige andere Smart-Home-Endgeräte mit der Ikea-Hardware zu verbinden - auch systemübergreifend. Jede denkbare Mischung aus Zigbee-, WLAN-, Infrarot- oder Homegear-Geräten ist möglich, und über die Einbindung eine Fritzbox in Node-RED wären sogar DECT-Geräte erreichbar.