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 |
---|---|
00-03 | Packet Typ |
04-07 | Ist bei einem Paket mit Variablen immer |
08-16 |
|
17-25 |
|
26-34 |
|
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 hatDIGITALPayload Länge 1 Byte ist entweder 0x01 oder 0x00ANALOGPayload Länge ist 8 Byte und ein Double Float LETEXTPayload Länge ist abhängig von der Länge des Strings und ein UTF8 formatierter String welcher mit 0x00 terminiert wirdT5Payload Länge ist immer 8 ByteWird dieser Wert als Double Float ausgelesen ergibt sich folgende werte für die jeweiligen Tasten eines T5 TastersNONE = 0
MIDDLE = 16400
LEFT_UPPER = 16368
LEFT_LOWER = 16416
RIGHT_UPPER = 16384
RIGHT_LOWER = 16432 SmartActuatorRGBWPayload Länge ist 8 ByteByte 1 gibt den rot wert von 0-100 anByte 2 gibt den grün wert von 0-100 anByte 3 gibt den blau wert von 0-100 anByte 4+5 gibt die fade time an in 0,1 Sekunden Schritten anByte 6+7 ?SmartActuatorSingleChannelByte 3 der Wert des ChannelsByte 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}`)
})