KNXnet/IP-Treiber
Überblick
KNXnet/IP — tunnelt den in der Gebäudeautomation (Beleuchtung / Verschattung / HLK) standardisierten KNX-Bus über IP. Native Neuimplementierung 2026-07 — die frühere Delegation an Apache PLC4j knxnet-ip wurde entfernt (Überführung P2, 2026-07). Verwendet wird nun die Eigenimplementierung in plantpulse-plc-protocol (KnxNetIpClient UDP 3671 tunneling + KnxGroupAddress + KnxDpt).
| Punkt | Wert |
|---|---|
opc_type | KNXNET |
| Implementierungsklasse | plantpulse.driver.protocol.knxnet.KNXnetDriver |
| Bibliothek | Eigene native Implementierung (plantpulse-plc-protocol aus knx — UDP tunneling) |
| Vererbung | BaseProtocolDriver (nicht PLC4j) |
getProtocol() | "knxnet-ip" (alte PLC4X-Scheme-Notation beibehalten — Kompatibilität für Logs/Diagnose) |
| Standardport | 3671 (UDP) |
| Status | stabil (TUNNELING) |
| read | OK (GroupValueRead) |
| write | OK (GroupValueWrite — DPT-Suffix erforderlich) |
| Sicherheit | keine (KNX Secure nicht unterstützt) |
Der native Client unterstützt ausschließlich TUNNELING (Unicast). Multicast-ROUTING wird nicht unterstützt — bei Angabe von connection-type=routing erfolgt eine Warnmeldung im Log, anschließend wird mit Tunneling fortgefahren.
Klassenstruktur
BaseProtocolDriver
└── KNXnetDriver — connect() 에서 KnxNetIpClient(host, port) tunneling 세션 수립
Wire-Ablauf: CONNECT_REQUEST(0x0205) → RESPONSE(channelId) → TUNNELING_REQUEST(cEMI L_Data.req GroupValueRead) → ACK → vom Gateway gesendetes L_Data.ind GroupValueResponse (+ACK-Rückmeldung) → CONNECTIONSTATE-Heartbeat (30 s) → DISCONNECT. Bei einem Kommunikationsfehler während read wird der Socket invalidiert (connected=false), damit der Edge einen Neuaufbau der Verbindung auslöst.
OPC-Registrierungsoptionen
| Feld | Bedeutung | Standard |
|---|---|---|
opc_agent_ip | IP des KNX/IP-Gateways | 192.168.1.10 |
opc_agent_port | UDP-Port | 3671 (in der Regel fest) |
options.request-timeout | Antwort-Timeout (ms) | 2000 (identisch zum alten PLC4X-Standard) |
options.connection-type | nur tunneling unterstützt | tunneling |
Tag-plc_address-Format (bestehender Vertrag bleibt erhalten)
<main>/<middle>/<sub>[:<DPT>] 예) 1/0/5:DPT_Switch / 3/2/0:9.001 / 1/2/10
<main>/<sub>[:<DPT>] 2-level (main 0-31 / sub 0-2047)
Als DPT-Suffix sind sowohl PLC4X-Namen (DPT_Switch / DPT_Scaling / DPT_Value_Temp / DPT_Value_Length …) als auch Zahlen (1.001 / 5.001 / 9.001 / 14.056 …) zulässig.
| Notation | Bedeutung |
|---|---|
1/0/5:DPT_Switch | 1-Bit boolean (DPT 1.001) |
2/1/3:DPT_Scaling | 0..100 % (DPT 5.001) |
3/2/0:DPT_Value_Temp | 2-Byte-Float (DPT 9.001) |
3/2/0:9.001 | identisch (numerischer DPT) |
1/2/10 | DPT weggelassen — längenbasierte Unsigned-(RAW-)Interpretation |
Unterstützte Dekodierung: DPT1 bool / 5.001 %scale / 5.x u8 / 7.x u16 / 9.x 2-Byte-Float / 12·13.x u32 / 14.x float32 / 16.x string. Ohne DPT-Angabe erfolgt eine längenbasierte Unsigned-(RAW-)Interpretation — wenn exakte Werte benötigt werden, geben Sie den DPT gemäß ETS-Projekt explizit an.
Unterstützt / nicht unterstützt
- read: GroupValueRead → GroupValueResponse — OK.
- write: GroupValueWrite — OK. DPT-Suffix erforderlich — mit RAW ist keine Kodierung möglich; die Kodierung bestimmt der DPT (unabhängig von
data_type). - ROUTING (Multicast, 224.0.23.12): nicht unterstützt (nur TUNNELING).
- KNX Secure (IP / Data): nicht unterstützt.
- Automatisches Mapping per Import eines ETS-Projekts (
.knxproj): nicht unterstützt — Group Address direkt eingeben. (Die Optionenknxproj-file-path/knxproj-password/group-address-num-levelsdes alten Formulars werden in der nativen Implementierung ignoriert — entfernt.) - Direktanbindung an KNX TP/PL/RF: nicht unterstützt — setzt ein IP-Gateway voraus.
Hinweise
- KNX Standard ISO/IEC 14543-3.
- Code:
plantpulse-edge-driver/src/plantpulse/driver/protocol/knxnet/KNXnetDriver.java+ Paketknxinplantpulse-plc-protocol. - Betrieb: Beachten Sie die begrenzte Anzahl an Tunneling-Slots im Gateway (Gira / ABB / Siemens N146) — üblich sind 1 bis 5 gleichzeitige Verbindungen.