Loxone Link

Wechseln zu: Navigation, Suche

Loxone Link[Bearbeiten]

Einführung[Bearbeiten]

Der Loxone Link ist ein auf dem CAN-Bus basierender Bus. Er verbindet den Miniserver mit den sog. Extentions des österreichischen Herstellers Loxone. Dieser Bus stellt quasi das Rückgrat des Heimautomationssystems dar.

Leider ist das Protokoll dieses Busses nicht offengelegt, sodass es einiger Analyse bedarf, um trotzdem an entsprechende Informationen zu kommen.

Ziel[Bearbeiten]

Ziel des Projektes ist, seine eigene Hardware direkt an den Loxone Link anschließen zu können ohne weitere Extentions zu benötigen. Auf der eigenen Hardware soll ein Mikrocontroller laufen, welcher mit dem Loxone Link bzw. dem Miniserver kommunizieren kann.

Setup des Versuchaufbaus[Bearbeiten]

[Miniserver Go]--CAN--[RS485-Extention]--RS485--[Relaiskarte]

Der Miniserver Go und die RS485 Extention stammen beide von Loxone. Der Miniserver Go ist mit dem LAN verbunden und über Loxone Link mit der RS485-Extention. An der RS485-Extention hängt per RS485 eine Relaiskarte, welche mit 8 Relais bestückt und einem ATMega32 bestückt ist.

Technische Details[Bearbeiten]

Um zu sehen was auf dem Bus passiert, ist es naheliegend dessen Komunikation abzuhören. Zuerst stellt sich jedoch die Frage nach der Baudrate. CAN kann je nach Länge mit unterschiedlichen Baudraten betrieben werden.

Da der Hersteller für diesen Bus eine maximale Länge von 500m angibt, ist es naheliegend im Internet zu suchen, welche Baudraten bei CAN-Bussen welche max. 500m lang sind üblich sind.

Laut RN-Wissen wird für 500m eine max. Datenraten von 125kbit/s angegeben.

Mit dieser Information kann man nun versuchen am Bus zu horchen und versuchen irgendwelche Daten abzugreifen.

Um dies zu bewerkstelligen, wurde ein EvaBoard-CAN von der Firma e-lab verwendet. (Natürlich können auch andere Board verwendet werden, dieses stand jedoch gerade zur Verfügung.)

Zum Anschluss an den Loxone Link wurden Link+ mit CAN-H und Link- mit CAN-L verbunden.

Als Software wurde das "can_spy_echo_example" aus der Atmel CAN-Lib verwendet.

Die Software wurde für den Test so modifiziert, das der UART fest auf die Baudrate 115200 Baud und der CAN-Bus fest auf 125kbit/s eingestellt ist.

Weiterhin wurden die Zeilen auskommentiert, in denen sich das Programm beendet, wenn die CAN-ID 0 empfangen wird. Zum Schluss wurde noch der Mode fest auf "Spy" einegstellt.

Nun muss nur noch die Software in den Controller des EvaBoards geflasht werden und es kann los gehen.

Nach einiger Zeit sieht man die ersten Telegramme. Wenn man es nicht auf den ersten Blick erkennt, wird man vielleicht beim zweiten Blick feststellen, das Seriennummern der Extentions gleich der CAN-ID sind.

Weiterhin wird man Daten wieder erkennen, die man als Befehl an seine RS485 Extention geschickt hat. Diese Daten scheinen jedoch nicht vollständig zu sein, wahrscheinlich muss man den Code für den CAN-Monitor von Atmel noch etwas anpassen um wirklich alle Daten zu sehen.

Zum weiteren Testen habe ich einen USBtin von Thomas Fischl besorgt. Zusammen mit dem in Java geschriebenen USBtinViewer lässt sich einfach nachvollziehen, was auf dem Bus los ist. Das Schöne ist, das man mit dem USBtinViewer auch Telegramme auf den Bus schicken kann.

In Verbindung mit dem Debugmonitor in Loxone Config lassen sich so Telegramme beobachten und deren Funktion analysieren

Protokollanalyse[Bearbeiten]

Allgemeines[Bearbeiten]

Auf dem Loxone Link scheint es mehrere Typen von Telegrammen zu geben. Dies sind im wesentlichen Telegramme zur Systemverwaltung und Telegramme zur Übertragung von Nutzdaten.

Alle CAN-Telegramme sind grundsätzlich erweiterte Telegramme und der Data Lenght Code (DLC) ist immer 8. Alle Extentions werden über Ihre Seriennummer angeprochen, welche immer 0x0xxxxxx ist. Es gibt allerdings auch Telegramme welche mit 0x1xxxxxx beginnen, wobei xxxxxxx der individuelle Teil der Seriennummer ist. Diese Telegramme sind wahrscheinlich Antworttelegramme.

Außerdem geistern auf dem BUS noch CAN-IDs herum, welche mit keiner Seriennummer übereinstimmen, vermutlich werden über diese IDs allgemein gültige Informationen übertragen.

Der Miniserver wird scheinbar auch nicht über seine Seriennummer angesprochen sondern er lauscht permanent am Bus, um die für sich relevanten Telegramme "herauszufiltern".

Relais Extention[Bearbeiten]

Die Relaisextention von Loxone besitzt 14 Relais. In vielen Fällen würden allerdings Transistorausgänge ausreichen, da man nicht für jede Anwendung immer ein Relais benötigt (Energie sparen) oder man sowieso ein Intallationsrelais zum entkoppeln zwischenschaltet, da ein kaputtes Koppelrelais billiger ist als eine Komplette Extention.

Relais - Byte Zuordnung
Relais Wertigkeit Byte
1 1 1
2 2 1
3 4 1
4 8 1
5 1 1
6 2 1
7 4 1
8 8 1
9 1 2
10 2 2
11 4 2
12 8 2
13 1 2
14 2 2

Für die Abbildung der Ausgangsstati und zum setzen der Relais werden also 4 Byte im CAN-Frame belegt. Es wird immer eine Bytefolgeübertragen, welche den Wert aller gesetzten Relais enthält. {0xe0,0x01,0x00,0x00,0xff,0x3f,0x00,0x00} an die ID 0x0xxxxxxx schaltet alle 14 Relais ein. Dabei scheinen die Datenfelder 1 und 2 eine Art Befehlskennung zu sein im Feld 5 stehen die Relais 1-8 und im Feld 6 die Relais 9-14, wobei das LSB das jeweils kleinste Relais ist.

Die Extention antwortet mit{0x60,0x00,0x44,0xce,0x3f,0xff,0x00,0x00} an die ID 0x0xxxxxxx zeigt an, das alle Relais eingeschalet sind (Felder 5 und 6). In den Feldern 3 und 4 wird scheinbar die CPU-Temperatur übertragen.


Durch senden von {0x08,0x3b,0,0,0,0,0,0} an die ID der Extention wird diese zum blinken gebracht um diese in der Verteilung identifizieren zu können.

Zusätzlich sendet die Exention scheinbar zyklich eine Alive Nachricht mit der Firmwareversion auf den Bus.

  • Extention sendet Alive -> Bus { 0x89, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 } mit eigener ID (die Felder 8-5 enthalten die FW-Version der Extention (705006))
  • Minierver sendet Alive -> Extention { 0x0f, 0x56, 0x8f, 0x21, 0xb0, 0x56, 0x8f, 0x21 } mit ID der 0x1xxxxxxx
  • Extention sendet Online -> Bus { 0x8f, 0x00, 0x00, 0x00, 0x6e, 0x95, 0x6b, 0x00 } mit eigener ID (die Felder 8-5 enthalten die FW-Version der Extention (705006))