KNXIO: Unterschied zwischen den Versionen

Aus FHEMWiki
Keine Bearbeitungszusammenfassung
Zeile 9: Zeile 9:
Das Modul [[KNXIO]] implementiert die Unterstützung für den Gebäudeautomations-Feldbus [https://de.wikipedia.org/wiki/KNX-Standard KNX] (eine Weiterentwicklung von EIB) innerhalb von FHEM.
Das Modul [[KNXIO]] implementiert die Unterstützung für den Gebäudeautomations-Feldbus [https://de.wikipedia.org/wiki/KNX-Standard KNX] (eine Weiterentwicklung von EIB) innerhalb von FHEM.


== Voraussetzungen ==
== Vorwort ==
KNX ist in FHEM nach dem 2-stufigen Modell implementiert. Das KNXIO-Modul unterstützt die Kommunikation mit einem KNX-Gateway, der "Aussenwelt", während das KNX-Modul die logische Schniitstelle zum Anwender ist.
KNX ist in FHEM nach dem 2-stufigen Modell implementiert. Das KNXIO-Modul unterstützt die Kommunikation mit einem KNX-Gateway, der "Aussenwelt", während das KNX-Modul die logische Schnitstelle zum Anwender ist.
 
Die Idee zu diesem Modul ist: ein Modul für (fast) alle möglichen Kommunikations-Varianten zu haben, das auch vernünftig wartbar ist. Dieses Modul soll langfristig die bisherigen Module TUL und KNXTUL ablösen.
 
{{Randnotiz|RNText=Dieser Beitrag ist noch in Arbeit, das KNXIO Modul ist dzt. im Beta Test, noch nicht via SVN verfügbar!}}


== Anwendung ==
== Anwendung ==
=== Define ===
=== Define ===
<syntaxhighlight lang="text">
<syntaxhighlight lang="text">
define <name> KNXIO <mode> <IP-Adresse/Hostname>:<Port> <Phy-Adresse> bzw.
define <name> KNXIO <[MHT]> <IP-Adresse/Hostname>:<Port> <Phy-Adresse> bzw.
define <name> KNXIO S <socket-path> <Phy-Adresse>
define <name> KNXIO S <socket-path> <Phy-Adresse>


Zeile 23: Zeile 27:


====== Mode: ======
====== Mode: ======
* '''H -Host Mode:''' Verbindung zu einem KNX-Gateway mit UDP Point-Point Protokoll. Dieser Modus wird auch von der ETS verwendet (KNXNET/IP). Das Protokoll ist sehr kritisch in Bezug auf Timing, Verzögerungen in FHEM (durch andere Module...) größer 1 Sekunde führen zu Verbindungsabbrüchen! Die Verbindung wird zwar unmittelbar wieder hergestellt, allerdings können einige Messages verloren gehen.  
* '''H -Host Mode:''' Verbindung zu einem KNX-Gateway mit UDP Point-Point Protokoll. Dieser Protokoll wird auch von der ETS verwendet (KNXNET/IP). Das Protokoll ist sehr kritisch in Bezug auf Timing, Verzögerungen in FHEM (durch andere Module...) größer 1 Sekunde führen zu Verbindungsabbrüchen! Die Verbindung wird zwar unmittelbar wieder hergestellt, allerdings können einige Messages verloren gehen.  
* '''M -Multicast mode:''' Verbindung zu knxd-Daemon oder KNX_Router mit multicast Protokoll. Dieser Modus wird auch von der ETS verwendet (KNXNET/Routing). Falls ein KNX_Gateway Multicast unterstützt, braucht man keine knxd Installation! Dieser Modus ist der Nachfolger des KNXTUL-Moduls.  
* '''M -Multicast mode:''' Verbindung zu knxd-Daemon oder KNX_Router mit multicast Protokoll. Dieses Protokoll wird auch von der ETS verwendet (KNXNET/Routing). Falls ein KNX_Gateway Multicast unterstützt, braucht man keine knxd Installation! Dieser Modus ist der Nachfolger des KNXTUL-Moduls.  
* '''T -TCP Mode:''' Verbindet mittels TCP-Protokoll mit knxd - default port: 6720. Dieser Modus ist der Nachfolger des TUL-Moduls.. Eine direkte Unterstützung von Seriellen/USB Gateways ist nicht implementiert!  
* '''T -TCP Mode:''' Verbindet mittels TCP-Protokoll mit knxd - default port: 6720. Dieser Modus ist der Nachfolger des TUL-Moduls.. Eine direkte Unterstützung von Seriellen/USB Gateways ist nicht implementiert! Falls ein Serielles / USB -Gatewaay verwendet wird ist die Empfehlung, das via knxd-daemon einzubinden und die Modes: M oder T zur Verbindung knxd->FHEM zu verwenden.
* '''S -Socket Mode:''' Verbindet mittels UNIX_Socket zum knxd - Funtionert nur wenn sowohl FHEM als auch knxd am selben System laufen! Default Socket-path: /var/run/knx (abhängig von installierter knxd Version! Getestet wurde mit knxd-Verion 0.14.30. (Funktioniert definitiv NICHT mit knxd Version 0.10.0)  
* '''S -Socket Mode:''' Verbindet mittels UNIX_Socket zum knxd - Funtionert nur wenn sowohl FHEM als auch knxd am selben System laufen! Default Socket-path: /var/run/knx (abhängig von installierter knxd Version! Getestet wurde mit knxd-Verion 0.14.30. (Funktioniert definitiv NICHT mit knxd Version 0.10.0)  
* '''X - Dummy Mode:''' tbd


=====IP-Adresse/Hostname:Port=====
=====IP-Adresse/Hostname:Port=====
Zeile 67: Zeile 72:
define <remoteDevice> KNXIO X # das ist ein dummy device,wird aber für die FHEM2FHEM definition benötigt
define <remoteDevice> KNXIO X # das ist ein dummy device,wird aber für die FHEM2FHEM definition benötigt


define myKNXIO_F2F FHEM2FHEM <ip-addr:port> RAW:<remoteDevice>
define <name_F2F> FHEM2FHEM <ip-addr:port> RAW:<remoteDevice>
attr myKNXIO_F2F keepaliveInterval 60
attr <name_F2F> keepaliveInterval 60
attr myKNXIO_F2F reportConnected 1
attr <name_F2F> reportConnected 1


</syntaxhighlight>'''Wichtig:''' <remoteDevice> muss in allen Definitionen '''der gleiche Name''' sein! <ip-addr:port> ist die Adresse von FHEM-B, port ist der port aus der telnet-Definition. Die bisherige KNXIO-Definition löschen! (Backup?)
</syntaxhighlight>'''Wichtig:''' <remoteDevice> muss in allen Definitionen '''der gleiche Name''' sein! <ip-addr:port> ist die Adresse von FHEM-B, port ist der port aus der telnet-Definition. Die bisherige KNXIO-Definition löschen! (Backup?)


===== Konfiguration FHEM-B: =====
===== Konfiguration FHEM-B: =====
Starten mit minmal (default) Konfiguration, am besten nach Neu-Installation und fhem-update.
Starten mit minimal (default) Konfiguration, am besten nach Neu-Installation und fhem-update.


Hier wird das KNXIO-Modul konfiguriert, das mit dem KNX Gateway kommuniziert.
Hier wird das KNXIO-Modul konfiguriert, das mit dem KNX Gateway kommuniziert.
Zeile 89: Zeile 94:


define <remoteDevice> KNXIO <mode> <GW-IP:GW-port> <phy-addr> # exakt gleiche Definition wie vorher in FHEM-A
define <remoteDevice> KNXIO <mode> <GW-IP:GW-port> <phy-addr> # exakt gleiche Definition wie vorher in FHEM-A
</syntaxhighlight>'''Wichtig:''' Nach der Definition: save und shutdown/restart auf beiden FHEMs! Danach sollte das FHEM2FHEM-device connected zeigen, das KNXIO-device auf FHEM-A disconnected!
</syntaxhighlight>'''Wichtig:''' Nach der Definition: save und shutdown/restart auf beiden FHEMs! Danach sollte das FHEM2FHEM-device connected zeigen, das KNXIO-device auf FHEM-A disconnected!
 
'''Keine weiteren Verbindungen''' zwischen den beiden FHEM machen, e.g: FHEM2FHEM im Log Modus, RFHEM, notifies., Telnet connections,...., -Das ergibt Chaos!


Es werden alle KNX-Messages von/nach FHEM-A nach FHEM-B umgeleitet!
Es werden alle KNX-Messages zwischen FHEM-A und FHEM-B ausgetauscht!


== Links ==
== Links ==
Info zum Thema KNXD Konfiguration (beim Author): [https://github.com/knxd/knxd/wiki KNXD Wiki]
Info zum Thema KNXD Konfiguration (beim Author): [https://github.com/knxd/knxd/wiki KNXD Wiki]
[[Kategorie:EIB/KNX]]
[[Kategorie:EIB/KNX]]

Version vom 16. Dezember 2021, 02:05 Uhr

KNXIO
Zweck / Funktion
Unterstützung des KNX Feldbus in FHEM
Allgemein
Typ Gerätemodul
Details
Dokumentation EN / DE
Support (Forum) KNX/EIB
Modulname 00_KNXIO.pm
Ersteller Erwin (Forum /Wiki)
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref!

Das Modul KNXIO implementiert die Unterstützung für den Gebäudeautomations-Feldbus KNX (eine Weiterentwicklung von EIB) innerhalb von FHEM.

Vorwort

KNX ist in FHEM nach dem 2-stufigen Modell implementiert. Das KNXIO-Modul unterstützt die Kommunikation mit einem KNX-Gateway, der "Aussenwelt", während das KNX-Modul die logische Schnitstelle zum Anwender ist.

Die Idee zu diesem Modul ist: ein Modul für (fast) alle möglichen Kommunikations-Varianten zu haben, das auch vernünftig wartbar ist. Dieses Modul soll langfristig die bisherigen Module TUL und KNXTUL ablösen.

Info green.pngDieser Beitrag ist noch in Arbeit, das KNXIO Modul ist dzt. im Beta Test, noch nicht via SVN verfügbar!


Anwendung

Define

define <name> KNXIO <[MHT]> <IP-Adresse/Hostname>:<Port> <Phy-Adresse> bzw.
define <name> KNXIO S <socket-path> <Phy-Adresse>

Wie in FHEM üblich, alles was hier zwischen <...> dargestellt ist, sind verpflichtende Angaben! Optionales wird zwischen [...] dargestellt.

Definitions-Felder im Detail

Mode:
  • H -Host Mode: Verbindung zu einem KNX-Gateway mit UDP Point-Point Protokoll. Dieser Protokoll wird auch von der ETS verwendet (KNXNET/IP). Das Protokoll ist sehr kritisch in Bezug auf Timing, Verzögerungen in FHEM (durch andere Module...) größer 1 Sekunde führen zu Verbindungsabbrüchen! Die Verbindung wird zwar unmittelbar wieder hergestellt, allerdings können einige Messages verloren gehen.
  • M -Multicast mode: Verbindung zu knxd-Daemon oder KNX_Router mit multicast Protokoll. Dieses Protokoll wird auch von der ETS verwendet (KNXNET/Routing). Falls ein KNX_Gateway Multicast unterstützt, braucht man keine knxd Installation! Dieser Modus ist der Nachfolger des KNXTUL-Moduls.
  • T -TCP Mode: Verbindet mittels TCP-Protokoll mit knxd - default port: 6720. Dieser Modus ist der Nachfolger des TUL-Moduls.. Eine direkte Unterstützung von Seriellen/USB Gateways ist nicht implementiert! Falls ein Serielles / USB -Gatewaay verwendet wird ist die Empfehlung, das via knxd-daemon einzubinden und die Modes: M oder T zur Verbindung knxd->FHEM zu verwenden.
  • S -Socket Mode: Verbindet mittels UNIX_Socket zum knxd - Funtionert nur wenn sowohl FHEM als auch knxd am selben System laufen! Default Socket-path: /var/run/knx (abhängig von installierter knxd Version! Getestet wurde mit knxd-Verion 0.14.30. (Funktioniert definitiv NICHT mit knxd Version 0.10.0)
  • X - Dummy Mode: tbd
IP-Adresse/Hostname:Port

Hostnamen sind unterstützt im Mode H und T.

Phy-Adresse

Das ist die Physikalische Adresse, die das KNX-Gateway bzw. knxd für Clients am LAN (also auch FHEM) bereitstellt. Der Wert sollte (bei Verwendung knxd) dem -E Parameter in der knxd-Konfiguration entsprechen.

Alle Parameter sind verpflichtend! Bitte sicherstellen, dass es nur einen Kommunikationspfad zwischen dem KNX-Gateway und FHEM gibt!

Definitions-Beispiele

define myKNXGW KNXIO H 192.168.1.201:3671 0.0.51
define myKNXGW KNXIO M 224.0.23.12:3671 0.0.51
define myKNXGW KNXIO S /var/run/knx 0.0.51
define myKNXGW KNXIO T 192.168.1.200:6720 0.0.51

Empfohlene Parameter für knxd Konfiguration:

KNXD_OPTS="-e 0.0.50 -E 0.0.51:8 -D -T -R -S -b ipt:192.168.xx.yy" # connect to a knx-GW with ip-addr
KNXD_OPTS="-e 0.0.50 -E 0.0.51:8 -D -T -R -S -single -b tpuarts:/dev/ttyxxx" # connect to a serial/USB KNX GW
KNXD_OPTS="-e 0.0.50 -E 0.0.51:8 -D -T -S -b ip:" # knxd acts as multicast client (conect to other knxd or KNX-Router with MC support)

Siehe auch commandref/KNXIO.

Attribute

  • disable - ident zum FHEM Standard - kein Senden / Empfangen möglich.
  • verbose - ident zum FHEM Standard - bestimmt welche/wieviele Meldungen ins Log geschrieben werden.

Bekannte Probleme

Timing Problem Mode H

Wie bereits erwähnt, dieser Mode stellt hohe Ansprüche an das Antwortzeitverhalten von FHEM. Jede empfangene und gesendete Message muss in weniger als 1 Sekunde bestätigt werden. Falls FHEM länger mit anderen Modulen beschäftigt ist, gibt das Probleme. Typische Module, die Probleme machen können, sind (u.A.): SVG,, Onewire, HTTPMOD,, usw...

Typische Meldungen im Log:

2021.12.13 00:00:06.506 4: KNXIO_TunnelRequestTO hit - attempt resend
2021.12.13 00:00:08.023 3: KNXIO_TunnelRequestTO hit - sending disconnect request
2021.12.15 13:12:09.045 3: KNXIO_Read: TunnelRequest received: duplicate message received (seqcntr=67) - ack it

Eine mögliche Lösung: Mittels apptime cmd: "apptime average function" jene Funktionen/Module herausfinden, die viel Zeit in FHEM beanspruchen... Evtl hilft auch, die Anzahl Events zu reduzieren (Stichwort: event-on-change-reading).

Falls das nicht funktioniert, gibts noch die Möglichkeit, für das KNXIO-Modul eine eigene FHEM Instanz zu installieren und mittels FHEM2FHEM mit der Hauptinstanz zu verbinden.. In diesem Beispiel auf zwei Raspberrys im selben LAN. Sinnvollerweise beginnt man mit der Konfiguration von FHEM-B.

Konfiguration FHEM-A (Hauptinstanz):

Das ist jenes FHEM, wo bisher das KNXIO Modul und alle KNX-Devices definiert sind.

define <remoteDevice> KNXIO X # das ist ein dummy device,wird aber für die FHEM2FHEM definition benötigt

define <name_F2F> FHEM2FHEM <ip-addr:port> RAW:<remoteDevice>
attr <name_F2F> keepaliveInterval 60
attr <name_F2F> reportConnected 1

Wichtig: <remoteDevice> muss in allen Definitionen der gleiche Name sein! <ip-addr:port> ist die Adresse von FHEM-B, port ist der port aus der telnet-Definition. Die bisherige KNXIO-Definition löschen! (Backup?)

Konfiguration FHEM-B:

Starten mit minimal (default) Konfiguration, am besten nach Neu-Installation und fhem-update.

Hier wird das KNXIO-Modul konfiguriert, das mit dem KNX Gateway kommuniziert.

Vorher braucht es aber noch einige Definitionen zur Kommunikation mit FHEM-A:

define telnetPort telnet <port> global # das kommuniziert mit FHEM-A
attr telnetPort allowfrom (127.0.0.1|192.168.x) # little bit of security, replace x with yr. local network...

define allowed_Tn allowed # little bit of security
attr allowed_Tn allowedDevices <remoteDevice>
attr allowed_Tn validFor telnetPort

attr autocreate disable 1 # we dont need/want KNX-devices on this FHEM

define <remoteDevice> KNXIO <mode> <GW-IP:GW-port> <phy-addr> # exakt gleiche Definition wie vorher in FHEM-A

Wichtig: Nach der Definition: save und shutdown/restart auf beiden FHEMs! Danach sollte das FHEM2FHEM-device connected zeigen, das KNXIO-device auf FHEM-A disconnected!

Keine weiteren Verbindungen zwischen den beiden FHEM machen, e.g: FHEM2FHEM im Log Modus, RFHEM, notifies., Telnet connections,...., -Das ergibt Chaos!

Es werden alle KNX-Messages zwischen FHEM-A und FHEM-B ausgetauscht!

Links

Info zum Thema KNXD Konfiguration (beim Author): KNXD Wiki