Daten über Intercommunication Schnittstelle senden

Die Loxone Intercommunication-Schnittstelle ermöglicht die Kommunikation zwischen mehreren Loxone Miniservers und dient dazu Steuerbefehle zwischen 2 oder mehreren Miniservers auszutauschen.

Standardmäßig hört der Miniserver auf UDP Port 61263 und Zahlen werden hier standardmäßig als Little Endian gesendet. Dies kann auch genutzt werden um von externen Programmen / Skripten Daten zu senden (zb von NodeJS / Python etc). Der folgende Abschnitt beschreibt diese Schnittstelle im unverschlüsselten Zustand. Um Variablen zu senden wird nur ein Paket benötigt.

Vorteile

Neue Eingänge können direkt über den in Loxone Config eingebauten Netzwerk Monitor gesucht werden und ohne großen Konfigurationsaufwand in Loxone eingebunden werden.

Daten müssen nicht zyklisch durch die Steuerung abgefragt werden sondern bekommt die Daten erst wenn sich diese ändern.

Aufbau eines IO UDP Pakets um Variablen zu senden im unverschlüsselten Zustand

Der Header besteht aus 38 Bytes und dann zusätzlich noch n-Bytes für den Variablen Inhalt welcher übertragen wird, dieser ist abhängig vom Daten Typ welcher gesendet wird

Der Miniserver wiederholt das UDP Packet alle x Sekunden (je nach dem was in der Loxone Config eingestellt wurde) wenn sich der Wert nicht ändert, ansonsten immer sofort bei Wertänderung.

Byte Offset
Beschreibung
Byte Offset
Beschreibung
00-03
Packet Typ 9e 00 00 00 definiert ein Paket welches Variablen von und zu einem Miniserver sendet
04-07
Ist bei einem Paket mit Variablen immer 00 00 00 00
08-16
Own ID welches in der Loxone Config definiert wurde und den Namen des sendenden Miniservers beinhaltet (UTF8 enkodiert und mit 0x00 terminiert)
17-25
Target ID welches in der Loxone Config definiert wurde und den Namen des zu empfangenden Miniservers beinhaltet (UTF8 enkodiert und mit 0x00 terminiert)
26-34
Packet ID definiert den namen des Packets, ein Variablen Name (UTF8 enkodiert und mit 0x00 terminiert)
35-36
Payload Länge in Bytes UINT16 LE
37
Variablen Typ UINT8
DIGITAL = 0x00 ANALOG = 0x01 TEXT = 0x02 T5 = 0x03 SmartActuatorRGBW = 0x04 SmartActuatorSingleChannel = 0x05 SmartActuatorTunableWhite = 0x06
Payload

Die Payload dessen Länge in Byte 35-36 definiert wurde je nach Typ anderen Inhalt hat

DIGITAL

Payload Länge 1 Byte ist entweder 0x01 oder 0x00

ANALOG

Payload Länge ist 8 Byte und ein Double Float LE

TEXT

Payload Länge ist abhängig von der Länge des Strings und ein UTF8 formatierter String welcher mit 0x00 terminiert wird

T5

Payload Länge ist immer 8 Byte

Wird dieser Wert als Double Float ausgelesen ergibt sich folgende werte für die jeweiligen Tasten eines T5 Tasters

NONE = 0 MIDDLE = 16400 LEFT_UPPER = 16368 LEFT_LOWER = 16416 RIGHT_UPPER = 16384 RIGHT_LOWER = 16432

SmartActuatorRGBW

Payload Länge ist 8 Byte

Byte 1 gibt den rot wert von 0-100 an

Byte 2 gibt den grün wert von 0-100 an

Byte 3 gibt den blau wert von 0-100 an

Byte 4+5 gibt die fade time an in 0,1 Sekunden Schritten an

Byte 6+7 ?

SmartActuatorSingleChannel

Byte 3 der Wert des Channels

Byte 4+5 gibt die fade time an in 0,1 Sekunden Schritten an

 

Unter NodeJS kann das Paket loxone-ici installiert werden um Daten zu senden bzw zu empfangen

import { LoxoneServer, DATA_TYPE } from "loxone-ici" //create a instance with an id which is able to receive data const server = new LoxoneServer({ ownId: "remote" }) //this will enable udp data to be received on port 61263 (default port for loxone miniservers) //this is also optional, there is no need to bind any port if you do not need to receive data server.bind(61263) //creates a remote system to send data to another miniserver const remote = server.createRemoteSystem({ remoteId: "server", address: "192.168.1.100", port: 61263 }) //creates new sendable outputs //creates a new output which is able to send numeric values const output = remote.createOutput("foo", DATA_TYPE.ANALOG) //creates a new output which is able to send bool values const cyclic = remote.createOutput("cyclic", DATA_TYPE.DIGITAL) //send output once and by default the output will be repeateadly sent every 10 seconds //as soon as set value has been called the output will be sent to the miniserver cyclic.setValue(true) //update the output every second let i = 0 setInterval(() => output.setValue(i++), 1000) //receive data from the loxone miniserver server.on("input", ({ packet }) => { let { value } = packet.payload if (typeof value === "object") value = JSON.stringify(value) console.log(`Receive packet id "${packet.packetId}" with type ${DATA_TYPE[packet.type]} and value ${value}`) })