Zum Ende der Metadaten springen
Zum Anfang der Metadaten

Sie zeigen eine alte Version dieser Seite an. Zeigen Sie die aktuelle Version an.

Unterschiede anzeigen Seitenhistorie anzeigen

« Vorherige Version anzeigen Version 5 Nächste Version anzeigen »

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 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. 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:

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 Raspberry 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 /wiki/spaces/LOXBERRY/pages/1605271843 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.

Hier ist ein sogenannter Subflow für eine einzelne Leuchte:

Dieser Subflow wird dann in den eigentlichen Flow eingebunden und als eine Art “Template” genutzt:

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 (ähnlich einem Case-Statement in der Programmiersprache C) die instanceID der einzelnen Leuchte abfragen. 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.

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:

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:

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):

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

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.

{
   "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 URI 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.

Man braucht die URIs zum Glück nicht manuell eingeben, sondern hat 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:

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

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 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 gedacht, um per Trigger eine in der GUI hinterlegte Zusammenstellung von Werten senden zu können.

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:

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:

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 ein Flow für die Steuerung einer Lampe mit Weißspektrum über inject-Nodes erstellt:

Hier ist der JSON-Code dazu:

Viel Spaß!

  • Keine Stichwörter