Skip to end of metadata
Go to start of metadata

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:

<?xml version="1.0"?>
<Navigation id="0x2931d8">
    <item id="0x28dea0">
        <name>Informationen</name>
        <item id="0x28d900">
            <name>Temperaturen</name>
        </item>
        <item id="0x28d948">
            <name>Eing&#xE4;nge</name>
        </item>
        <item id="0x28d990">
            <name>Ausg&#xE4;nge</name>
        </item>
        <item id="0x28d9d8">
            <name>Ablaufzeiten</name>
        </item>
        <item id="0x290008">
            <name>Betriebsstunden</name>
        </item>
        <item id="0x28ff40">
            <name>Fehlerspeicher</name>
        </item>
        <item id="0x28fef8">
            <name>Abschaltungen</name>
        </item>
        <item id="0x28feb0">
            <name>Anlagenstatus</name>
        </item>
        <item id="0x28fe68">
            <name>W&#xE4;rmemenge </name>
        </item>
        <item id="0x28fe00">
            <name>GLT</name>
        </item>
    </item>
    <item id="0x293780">
        <name>Einstellungen</name>
        <item id="0x28be20">
            <name>Betriebsart</name>
        </item>
        <item id="0x28b4b8">
            <name>Temperaturen</name>
        </item>
        <item id="0x290498">
            <name>System Einstellung</name>
        </item>
    </item>
    <item id="0x293220">
        <name>Zugang: Benutzer</name>
    </item>
</Navigation>

Aus diesem XML kann man dann die Daten zu den einzelnen items anfordern, dazu wird die entsprechende ID verwendet:

ws.send('GET;0x28d900');

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:

ws.send('SET;0x28d900';<value>);

Die gesendet Daten müssen anschliessend noch gespeichert werden:

ws.send('SAVE;1);

Alternativ kann man die geänderten Werte auch verwerfen:

ws.send('SAVE;0);
  • No labels

5 Comments

  1. Vielen Dank für die Erläuterungen. Wäre es möglich den kompletten Code für die Abfrage des Webservers zu bekommen?


    Gibt es auch eine Variante welche unter Python läuft?


    Gruss

    Stefan

    1. Hi Stefan,

      hier findes du den gesamten code als GitHub Repo, ist ein NodeRed modul.

      Für Python hab ich momentan nichts , wäre mir aber auch wesentlich lieber als nodejs. Evtl. findst du in diesem HomeAssistant Form Thread etwas das dir weiter hilft

  2. Besten Dank, Habe heute eine Verbindung mit Phyton hinbekommen.  Library:  https://www.willmcgugan.com/blog/tech/post/announcing-lomond/


    ws = WebSocket("ws://192.168.0.xxx:8214",protocols=['Lux_WS'])


    Gruss

    Stefan


  3. Hoi Bouni


    Das Senden von "REFRESH" bewirkt bei mir nichts. Wie bist Du eingentlich darauf gekommen?


    Zu meiner Uberraschung durfte ich feststellen da ich bei mir die Daten nach upgrade auf die SW V3.82.5 auch das "alte" Interface für das Abholen der Daten noch funktioniert.


    Gruss

    Stefan

    1. Durch Reverse Engineering.

      Vielleicht haben sie das alte Webinterface aus Gründen wieder aktiviert !?