Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.

...

Hier ist der Code im JSON Format:

...

View file
nametunable white example with subflow

...

languagejson

...

.json

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.

Codeblock
languagejson
{
   "controls": {
   ...
           "0b715072-0065-c156-ffffefc088fafadd": {
            "
939ba2da073cfb7d
name"
, "d6afd3aeabbb473f" ]
: "Lichtsteuerung",
            
[ "a574f827b846868c
"type": "LightControllerV2",
            
"45a3489a146152d8"
"uuidAction": "0b715072-0065-c156-ffffefc088fafadd",
            
]
"room": "0a0d4412-03c2-0075-0f00000000000000",
        
]
    
}
"cat": "0a0d4412-03c2-004d-0d00000000000000",
   
{
         "
id
defaultRating": 
"9a9425665d4796fa"
1,
        
"type":
 
"change",
   
...
   
"z": "922bb42aec09c9e6",
         "
name
subControls": 
"Lightbulb,
{
from
 
Loxone",
         
"rules":
 
[
         ...
   
{
                 "
t
0b715072-0065-c156-ffffefc088fafadd/AI2":
"set",
 {
                    "
p
name": "
topic
Tradfri A1",
                    "
pt
type": "
msg
ColorPickerV2",
                    "
to
uuidAction": "
fromLoxone
0b715072-0065-c156-ffffefc088fafadd/AI2",
                    "
tot
defaultRating": 
"str"
0,
            
}
        "isFavorite": 
]
false,
         
"action": "",
           "
property
isSecured": 
""
false,
          
"from":
 
"",
         "
to
details": 
"",
{
        
"reg":
 
false,
         
"x":
 
470,
     
"pickerType": "
y
Lumitech"
:

 
340,
         
"wires":
 
[
         },
   
[
                 "
48f101cf816f294e
states": {
           
]
         
]
    
},
"color": "12df38ed-032f-9d40-ffff525a658b3902",
     
{
         
"id":
 
"06a0a469d683c2d3",
         "
type
sequence": "
tradfri-config
12df3a22-013f-52a9-ffffefc088fafadd",

     
"name":
 
"MyHome",
        
"gatewayHost":
 
"TRADFRI-Gateway-MAC-address.local",
         "
identity
sequenceColorIdx": "
my_tradfri_identity",
12df3a22-013f-52aa-ffffefc088fafadd"
     
"preSharedKey": "my_tradfri_psk"
        
},
     
{
  }
      
"id":
 
"1e51a4aa1ec3da6d",
         
"type": "loxone-miniserver", "host": "192.168.1.25", "port": "80", "enctype": "0", "active": true, "keepalive": "30000" }, { "id": "9f945d53947ae192", "type": "ui_group", "name": "Licht Arbeitszimmer", "tab": "348a8a2c8d17ee09", "order": 2, "disp": true, "width": "6", "collapse": false, "className": "" }, { "id": "348a8a2c8d17ee09", "type": "ui_tab", "name": "Home", "icon": "dashboard", "disabled": false, "hidden": false } ]

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.

...

},

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

View file
nameTest tunable white light bulb.json

Viel Spaß!