Websockets Webinterface (ab FW 3.81)
In Arbeit
Seit Firmware Version 3.81 setzt die Luxtronik 2 für das Webinterface auf Websockets statt wie bisher auf ein Java Applet. Deshalb ist die herangehensweise zur Nutzung der Daten auch eine komplett andere.
Grundlagen
Die Grundlagen zu Websockets im Allgemeinen können bei Wikipedia nachgelesen werden.
Es ist wichtig zu wissen das (meines Wissens nach) von Loxone keine direkte Unterstützung von Websockets existiert, weshalb auf eine Gateway in Form von z.B. Node-RED zurückgegriffen werden muss.
Hier ist jedoch beschrieben wie das Protokoll aussieht,
Verbindung aufbauen und authentifizieren
Die Verbindung erfordert IP Adresse und Port der Luxtronik, die IP ist variabel, der Port ist immer 8214. Ausserdem muss immer das verwendete Protokoll mit angegeben werden, in diesem Fall Lux_WS.
Hier ein Beispiel in NodeJS:
const ws = new WebSocket('ws://192.168.1.10:8214', 'Lux_WS');
Nachdem die Verbindung aufgebaut ist, muss ein Authentifizierungsrequest gesendet werden, dieser erfordert das auf der Luxtronik unter Webserver angegebene Passwort (Standard 999999):
ws.send('LOGIN;999999');
Daten anfordern
Um Daten anzufordern, sendet man zuerst ein Refresh Kommando:
ws.send('REFRESH');
Dieses liefert die Struktur der Daten im XML Format zurück:
Aus diesem XML kann man dann die Daten zu den einzelnen items anfordern, dazu wird die entsprechende ID verwendet:
Wichtig ist zu wissen, dass sich die IDs ändern. 2 "REFRESH" Befehle ergeben für jedes Item eine andere ID!
Daten senden
Aus diesem XML kann man erkennen das bestimmte Werte veränderbar sind. Diese können mit den ebenfalls aus dem Datensatz ersichtlichen Werten gesendet werden, dazu wird die entsprechende ID verwendet:
Info: Für den Softwarestand V3.85.5 (r6309) einer Novelan WP ist der nachstehende Text zu senden.
<raw> ist durch den zugehörigen Wert zu ersetzen. Für den Softwarestand V3.85.5 (r6309) hat der Request ws.send('GET;0x293780'); die nachstehende Rückmeldung ergeben (nicht setzbare Items sind durch ... ausgeblendet).
Die gesendet Daten müssen anschliessend noch gespeichert werden:
Alternativ kann man die geänderten Werte auch verwerfen: