IKEA Tradfri Geräte mit Tradfri Gateway in Loxone einbinden

Hier wird die Einbindung von IKEA Smart Home Produkten in den Loxone Miniserver unter Verwendung des IKEA Tradfri Gateways erläutert. Es gibt andere Möglichkeiten mit einem Philips Hue Gateway oder ZigBee USB-Sticks, die an anderen Stellen in dieser LoxWiki beschrieben sind.

Um die Lampen/Leuchtmittel, Rollos, Steckdosen, Sensoren mit Buttons und Fernbedienungen an Loxone anzubinden oder per IKEA Smart Home App zu steuern, ist ein Gateway erforderlich, welches zwischen TCP/IP und ZigBee übersetzt und die beiden Protokolle verbindet. Das Gateway von IKEA heisst einfach Tradfri Gateway und benötigt einen Ethernet-Anschluss, um an das LAN im Haus angebunden zu werden.

Als Reichweite im drahtlosen ZigBee Netz gibt IKEA 10m im Freien an und es lassen sich lt. IKEA 50 Geräte verbinden. Ich habe wenige Details gefunden, aber da die Zigbee Geräte automatisch als Repeater fungieren und ein Mesh-Netz aufgebaut wird, sollte es auch zu Hause gut funktionieren.

Als Protokoll verwendet das Gateway im LAN CoAP (Constrained Application Protocol), welches speziell für einfache IoT Geräte entwickelt wurde und an REST und die HTTP Kommunikation angelehnt ist. Das Gateway unterstützt nur die verschlüsselte Variante CoAPS (Secure), welche über DTLS/UDP läuft. Die verschlüsselte Kommunikation wird dabei nicht über Zertifikate ausgehandelt, sondern initial über einen Security Code, der auf der Unterseite des Gateway aufgedruckt ist. Mit diesen Code kann ein CoAP Client z.B. die IKEA Smart Home App bei der Einrichtung ein Password für einen gewünschten User anfordern (bei der App nicht sichtbar), der für die nachfolgende Kommunikation beibehalten wird.

Eine Steuerung über Cloud ist nicht vorhanden, das Gateway aktualisiert lediglich die eigene Firmware und die der angeschlossenen Geräte über die Cloud (derzeit AWS). Der Ansatz mit CoAP und ohne Cloud gefällt mir dabei sehr gut! Ein Remote Zugriff auf die Haussteuerung habe ich bereits über VPN und die Loxone App eingerichtet und das funktioniert sehr gut.

Für die Integration von IKEA Tradfri in Loxone gibt es mehrere Möglichkeiten, aber durch die fehlende Prozessorleistung beim Miniserver Gen. 1 wird für die Umsetzung von COAPS ein dediziertes weiteres Gerät benötigt. Nach etwas Suchen fiel die Wahl auf Node-Red. Diese Methode bietet den Vorteil einer event-basierten Kommunikation, die ohne ständiges Polling auskommt, einer einfach zu nutzenden GUI für schnelle Entwicklung und einer großen Community. Es gibt bereits eine von Patrik Mayer entwickelte node-red-contrib-loxone Bibliothek für die Anbindung an Loxone über die Websocket API, siehe hier im Loxforum. Die eigentliche Bibliothek findet sich in Node-RED hier.

Außerdem gibt es eine noch relativ neue Bibliothek node-red-contrib-ikea-tradfri für die Anbindung an das IKEA Tradfri Gateway von Michael de Wit, die hier zu finden ist. ACHTUNG: es gibt in Node-RED mehrere Bibliotheken für die Anbindung von IKEA Geräten und sogar mehrere für die Anbindung per Tradfri Gateway! Viele Anleitungen, diem man im Internet findet, beziehen sich auf USB-Sticks, wie Conbee oder die Philips Hue Bridge.

Im nachfolgenden Diagramm ist die Kommunikation untereinander exemplarisch dargestellt:

Kommunikation zwischen Loxone Miniserver, Node-RED und IKEA Tradfri Gateway

Nach der längeren Einleitung möchte ich nun zur Anleitung kommen. Zuerst die Liste der Komponenten, die man benötigt:

  • IKEA Lampen/Leuchtmittel, Rollos, Steckdosen, Sensoren mit den zugehörigen Buttons und Fernbedienungen

  • eine Hardware, auf der node-red läuft, z.B. einen Raspberry. Die Installation kann auch auf einem Loxberry erfolgen, ist allerdings derzeit noch nicht als Plugin realisiert.

Anleitungen für die Installation von node-red inkl. der node-red-contrib-loxone Bibliothek sind im Loxwiki zu finden. Analog wie dort beschrieben ist, installiert man noch die Bibliothek node-red-contrib-ikea-tradfri.

Bevor man mit eigener “Programmierung” in Node-RED beginnt, sollte man sich auf jeden Fall 1h Zeit nehmen und das Tutorial (Youtube Videos) anschauen!

Beispiele für die Nutzung von node-red-contrib-ikea-tradfri konnte ich leider keine finden. Neben der integrierten Hilfe in Node-RED, die zu jedem node eine detaillierte Hilfe enthält, möchte ich auf die Readme in Github verweisen, wo auch Fehler gemeldet werden können.

Ich habe mich erst seit seit einer Woche mit Node-RED beschäftigt, daher sind die vorgestellten Flows sicherlich noch verbesserungsfähig! Zunächst möchte ich die Einbindung von Lampen mit Weißspektrum vorstellen, da ich mir für das Arbeitszimmer einen Deckenstrahler mit 5 Spots, 2 Tradfi Sets mit je 3 Spots mit GU10 Sockel und Fernbedienung und ein Tradfri Gateway besorgt habe.

Gerade die Leuchtmittel mit Weißspektrum, auch tunable-white oder CCT genannt, haben mir gut gefallen und sind bei IKEA relativ günstig. Die Fernbedienung “Styrbar” ist auch recht praktisch, um das Licht direkt am Schreibtisch zu steuern. Da die Beleuchtung im ganzen Haus über Präsenzmelder und Loxone gesteuert wird, sollte die Kommunikation bidirektional sein, d.h. Änderungen über die Fernbedienung sollten an den Miniserver gemeldet werden und umgekehrt.

Die Umrechnungen waren dann doch etwas komplizierter, da IKEA intern Mireds für die Farbtemperatur vewendet, diese von der verwendeten Bibliothek in Node-Red in eine Skala von 0.0=warm bis 100.0=kalt umgerechnet werden und Loxone diese in Kelvin benötigt bzw. ausgibt. Bei der Leuchtstärke verwendet sowohl in der Bibliothek, als auch Loxone 0..100%, allerdings unterstützt die Bibliothek eine Nachkommastelle und IKEA verwendet intern 0..254.

Um keine Rückkoppelungen zu bekommen, habe ich Inputs von der jeweils anderen Seite für 5 Sekunden gesperrt. Die Umrechnungen sind in den beiden Funktions-Nodes enthalten und ein paar Nodes darum. Nachfolgend ist der sogenannte Subflow dargestellt, den ich für eine einzelne Leuchte erstellt habe. Das tolle an Node-RED ist, dass so ein Subflow in den eigentlichen Flow als eine Art “Template” eingebunden werden kann, so dass man sich um die Internas keine Gedanken machen muss und Anpassungen oder Erweiterungen sehr leicht einbinden kann. Nachfolgend ist der Subflow dargestellt:

Subflow - bidirektionale Kommunikation und Umsetzung zwischen Tradfri und Loxone

Nachfolgend ist ein Beispiel dargestellt, wo der hellgelbe Subflow in die Steuerung einer Lampe eingebunden ist:

Beispiel - Steuerung einer Lampe mit bidirektionaler Kommunikation zwischen Loxone und Tradfri

Hier ist der Code im JSON Format:

 

Am Beispiel des oben dargestellten Flows, möchte ich kurz die Funktionsweise erläutern. Oben links befindet sich ein tradfri-monitor Node, der die Events vom Tradfri Gateway in Messages umwandelt und für die Verarbeitung bereitstellt. Derzeit muss man manuell über ein Switch Node (ähnlich einem Case-Statement in der Programmiersprache C) anhand der instanceID die einzelne Leuchte auswählen. Jedes Gerät in der IKEA Tradfri Welt hat eine eigene interne ID. Diese kann man recht einfach mit dem abgebildeten Debug Node mitlesen und der jeweiligen Lampe zuordnen, da die Message neben der ID auch alle anderen Angaben, wie Name, Typ etc. enthält.

Unten links ist das Gegenstück für Loxone als control-in Node, wo man den Ausgang komfortabel über Drop-Downs und Raum, Kategorie und Ausgang wählen kann. Die beiden weiteren Switches fügen jeweils den Ursprung der Message, also von Loxone oder dem Tradfri Gateway hinzu. Die eigentliche Verarbeitung erfolgt im Subflow und am Ende wird eine Message an die andere Seite gesendet. Dafür ist für Loxone ein entsprechender control-out Node und für das Tradfri Gateway ein tradfri-light-control Node vorhanden. Bei letzterem kann man ähnlich wie bei Loxone, die spezifische Leuchte über Drop-Down Menüs auswählen.

In den Beispielen sind noch viele Debug Nodes enthalten und “warn” Ausgaben, die Zustände oder Werte ausgeben, die für die Funktion nicht benötigt und gelöscht werden können. Ich habe sie bewußt nicht gelöscht, um Einsteigern den Einstieg in Node-RED und das Mitlesen der Messages zu erleichtern.

Als nächstes richtet man die Objekte in der Loxone Config ein. Dafür richtet man zunächst einen virtuellen Ausgang und dann für jede Lampe einen virtuellen Ausgang Befehl:

Virtueller Ausgang und -Befehl

In den Eigenschaften der virtuellen Ausgangs Befehle werden nur die Bezeichnung, Raum und Kategorie benötigt, um den Ausgang in Node-Red im control-in Node wiederzufinden. Nachfolgend ist dies für einen Ausgang dargestellt:

Eigenschaften des virtuellen Ausgangs

Anmerkung: ich habe festgestellt, dass die Option “Als Digitalausgang verwenden” auch ausgewählt bleiben kann. Logisch gesehen passt der nicht zum Lumitech Ausgang der Lichtsteuerung, aber es reicht anscheinend aus, wenn er vorhanden ist.

Die Lichtsteuerung v1 oder v2 wird wie üblich erstellt. Für die IKEA Lampen richtet man jeweils einen Ausgang vom Typ Lumitech ein, der die Auswahl des Weißspektrums erlaubt (RGB würde auch passen, da sich die Typen in der GUI nicht unterscheiden):

Ausgänge des Bausteins Lichtsteuerung

Anmerkung: leider kann man bis heute (Stand 01/2022) in der Loxone App oder Webgui die Auswahl nicht auf das Weißspektrum beschränken, sondern hat zusätzlich die Auswahl der RGB Werte. Leider lassen die sich meines Wissens nicht in eine Farbtemperatur von 2700 … 6500 Kelvin umrechnen. Daher setzt der o.a. loxone-tradfri-translation Node in Node-RED die Farbe auf den Mittelwert von 4600 Kelvin und gibt ein Feedback zurück an Loxone. In der App sieht man dann nach Auswahl einer RGB Farbe wieder das Weißspektrum und die Auswahl genau in der Mitte.

Dann werden die Ausgänge mit dem Baustein für die Lichtsteuerung verdrahtet und die Config in den Miniserver geladen.

Baustein Lichtsteuerung mit Ausgängen

Für technisch Interessierte: die Ausgänge sind dann in der Strukturdatei enthalten, die man über http://username:password@miniserver-ip/dataLoxAPP3.json vom Miniserver ähnlich wie die Loxone App oder die Nodes aus der node-red-contrib-loxone Bibliothek es machen. Nachfolgend ist ein Auszug für den Baustein Lichtsteuerung und den ersten Ausgang verkürzt dargestellt.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 { "controls": { ... "0b715072-0065-c156-ffffefc088fafadd": { "name": "Lichtsteuerung", "type": "LightControllerV2", "uuidAction": "0b715072-0065-c156-ffffefc088fafadd", "room": "0a0d4412-03c2-0075-0f00000000000000", "cat": "0a0d4412-03c2-004d-0d00000000000000", "defaultRating": 1, ... "subControls": { ... "0b715072-0065-c156-ffffefc088fafadd/AI2": { "name": "Tradfri A1", "type": "ColorPickerV2", "uuidAction": "0b715072-0065-c156-ffffefc088fafadd/AI2", "defaultRating": 0, "isFavorite": false, "isSecured": false, "details": { "pickerType": "Lumitech" }, "states": { "color": "12df38ed-032f-9d40-ffff525a658b3902", "sequence": "12df3a22-013f-52a9-ffffefc088fafadd", "sequenceColorIdx": "12df3a22-013f-52aa-ffffefc088fafadd" } },

Über die URL http://username:password@miniserver-ip/jdev/sps/io/0b715072-0065-c156-ffffefc088fafadd/all könnte man den Status abfragen bzw. sendet ein Event-Handler Änderungen an die entsprechenden control-in Nodes, die für Loxone Ausgänge in Node-RED eingerichtet sind. Um eine Lampe in Loxone bzw. hier die Anzeige der Lampe in der GUI auf 61% Helligkeit und warmweiß zu setzen, wir intern die URL http://username:password@miniserver-ip/jdev/sps/io/0b715072-0065-c156-ffffefc088fafadd/AI2/temp(61,2700) verwendet.

Man braucht die URLs und UUIDs zum Glück nicht manuell eingeben, sondern hat sowohl für den control-in Node als auch control-out Node in Node-RED eine komfortable GUI, in der man den Raum, die Kategorie und Control auswählen kann, wie im Beispiel sehen kann:

control-in Node für die Ausgänge in Loxone

Nachfolgend ist die Auswahl für das zu steuernden Control (den Ausgang in Loxone) dargestellt:

Control Auswahl für control-in Node

Die Auswahl des Ausgangs für das Tradfri Gateway ist ebenfalls komfortabel über Drop-Downs möglich. Die Bezeichnungen werden hierbei automatisch ausgelesen und können über die IKEA Smart Home App festgelegt werden. Es empfiehlt sich bei vielen Lampen den Raum und Typ im Namen einzufügen, um die richtige Lampe einfacher finden zu können.

ACHTUNG: Im Node können Werte im tradfri-light-control Node hinterlegt werden, allerdings sollte man dies nicht machen, weil die Werte ansonsten mit den Werten aus der eingehenden Message gemischt werden. Der Node ist wohl auch dazu gedacht, um per Trigger eine in der GUI hinterlegte Zusammenstellung von Werten senden zu können.

tradfri-light-control Node

Anmerkung: Man kann im tradfri-light-control Node sogar angelegte Gruppen oder mehrere Spots auswählen. Das kann sehr praktisch sein, wenn man nicht jeden einzelnen Spot in Loxone anlegen möchte, sondern z.B. die Spots A1 bis A5 immer zusammen schalten möchte. Es reicht dann aus, in Loxone einen Ausgang z.B. mit der Bezeichnung ‘Spots A1-A5’ zu erstellen. Als Eingang für den oben näher beschriebenen loxone-tradfri-translation Node muss man dann einen der Spots wählen. Sofern die Spots A1 bis A5 alle mit den gleichen Fernbedienungen gekoppelt sind und man in der App nur die Gruppe steuert (die einzelnen Leuchten sind zunächst im Menu eingeklappt), funktioniert das in beide Richtungen gut und man hat in Loxone kein Gefummel mit 5 einzelnen Ausgängen.

In der Loxone App sieht das Ergebnis (mit 5 einzelnen Spots) so aus:

 

 

In der IKEA Home Smart App sieht es so aus:

Die Bibliothek für das Tradfri Gateway enthält einen tradfri-monitor Node, der Änderungen vom Tradfri Gateway per COAPS Protokoll Event empfängt und jeden Event in eine Node-RED Message umwandelt. Man hätte sicherlich die Bibliothek so programmieren können, dass eine Auswahl der jeweiligen Lampe ebenfalls komfortabel per GUI möglich ist, allerdings ist das derzeit nicht implementiert. Evtl. kommt das noch, denn die Bibliothek hat v0.6.0. Ich möchte daher noch kurz erläutern, wie man das jeweilige Gerät ermittelt. Zunächst baut man sich einen kleinen Event Sniffer, um die Events im Debug-Fenster mitlesen zu können:

Tradfri Event Sniffer

und sendet dann eine Änderung z.B. über die IKEA Smart Home App oder eine Fernbedienung. Im Debug Fenster sieht man die Events, von denen einer exemplarisch dargestellt ist:

Example for Tradfri Event

Es ist ganz interessant, was die Geräte so ausgeben. Die API von IKEA ist leider nicht offiziell veröffentlicht worden, aber zumindest in weiten Teilen entschlüsselt worden. Für Interessierte möchte ich auf die nachfolgende Doku verweisen: https://github.com/glenndehaan/ikea-tradfri-coap-docs und https://www.domoticz.com/wiki/Talk:IKEA_Tradfri_Gateway

Viele Details finden sich in dem Programmcode von node-red-contrib-ikea-tradfri Bibliothek und des dort verwendeten CoAP Clients von AlCalzone https://github.com/AlCalzone/node-coap-client#request---fire-off-a-one-time-request-to-a-coap-resource

Leider werden bei Benutzung der Fernbedienung keine spezifischen Events für die Fernbedienung selbst gesendet, sondern nur Events für gesteuerte Geräte. Für eine direkte Verwendung der IKEA Fernbedienung oder Buttons, wäre ein anderes Gateway notwendig, z.B. einen USB-Stick, der direkt Zigbee spricht und daher auf einer anderen Ebene ansetzt. Man bekommt allerdings einen Event von der Fernbedienung nach Drücken der An/Aus bzw. heller/dunkler Tasten. Der ist evtl. dafür gedacht, den Batteriestatus der Fernbedienung zu erhalten.

Für das erste Beispiel und die Einarbeitung in Node-RED habe ich noch einen sehr einfachen Flow für die Steuerung einer Lampe mit Weißspektrum über inject-Nodes erstellt:

Beispiel - Steuerung einer Tradfri Lampe mit Weißspektrum

Hier ist der JSON-Code dazu:

Es gibt derzeit noch einen kleinen Bug bzw. nicht unterstütztes Feature bei den IKEA Tradfri Lampen mit Weißspektrum: wenn man die Helligkeit und den Farbton gleichzeitig ändert, was bei der Steuerung über Loxone und Stimmungen/Szenen wahrscheinlich häufiger der Fall ist, dann sollte der Parameter “transitionTime” auf 0 gesetzt werden. Ansonsten wird mit dem ersten Befehl nur der Farbton gesetzt und mit dem erneuten Befehl erst die Helligkeit geändert. Für einen Test habe ich in dem o.a. Beispiel den parallelen Weg mit Verzögerung bereits programmiert, der nur noch aktiviert werden muss. Im Change Node Spot A1-A5 man noch die transitionTime erhöhen, um ein langsames Auf- und Abdimmen bzw. langsamen Wechsel der Farbtemperatur zu ermöglichen. Das sieht sehr gut aus, aber dann darf man die Szenen / Stimmungen nicht zu schnell wechseln.

Vorläufiges Fazit: Es macht echt Spaß mit Node-RED zu arbeiten und für diejenigen die Vorkenntnisse mit einer anderen Programmiersprache haben, ist die Einarbeitung sicherlich nicht so schwierig. Wer tiefer einsteigt und function Nodes erstellen möchte, benötigt Kenntnisse in Javascript, aber es gibt viele Bespiele im Internet dazu.

Das Ikea Tradfri Gateway ist ‘typisch IKEA’ - einfach, sehr günstig und funktionell. Mit der aktuellen Version läuft es bei mir stabil. Es gibt sicherlich noch ein paar Verbesserungsmöglichkeiten in der Bibliothek z.B. bei der Ansteuerung von Lampen mit Weißspektrum, aber insgesamt ist die Entwicklung durch die Community sehr beachtlich. Die IKEA Fernbedienung ist sehr praktisch am Bett oder Schreibtisch, um das Licht mal schnell ohne App und ohne zum Lichtschalter zu laufen anzupassen. Soweit läuft die bidirektionale Kommunikation recht gut und Node-RED läuft auf dem Raspberry PI 3, den ich als Loxberry installiert habe, ziemlich gut. Die GUI ist sehr flüssig und superschnell und die CPU Belastung durch Node-RED liegt derzeit bei weniger als 10%.

Viel Spaß!