Plugin-Daten
AutorChristian Fenzl
Logo
StatusSTABLE
Version0.1.3
Min. LB Version1.2.2
Release Downloadhttps://github.com/christianTF/LoxBerry-Plugin-TCP2UDP/archive/0.1.3.zip
BeschreibungDieses Plugin ermöglicht eine echte, bidirektionale Kommunikation des Miniservers mit TCP-Geräten via UDP
SprachenEN
Diskussionhttps://www.loxforum.com/forum/projektforen/loxberry/plugins/162980-tcp2udp-plugin-bidirektionale-tcp-kommunikation-mit-dem-miniserver

TCP2UDP

Version History...


Download

GitHub Repository: https://github.com/christianTF/LoxBerry-Plugin-TCP2UDP

Releases: https://github.com/christianTF/LoxBerry-Plugin-TCP2UDP/releases

Während der BETA-Phase ist das Plugin nur in Englisch.

Funktion des Plugins

Der Miniserver unterstützt keine bidirektionale Kommunikation mit externen Geräten - er kann zwar Befehle senden, aber die Antworten nicht auswerten. Er kann auch keine Verbindung offen halten, um aktiv mitzuhören, was die Gegenstelle sendet.

Dieses Manko löst das TCP2UDP-Plugin - die bidirektionale Kommunikation ist am einfachsten mit einem Bild erklärt:

Das Plugin unterstützt auch das reine „Mithören“. Nach dem Starten des Dienstes werden alle Meldungen vom externen Gerät per UDP an den Miniserver gesendet, auch wenn kein initialer Befehl vom Miniserver kam.

Konfigurationsoptionen

Alle Einstellungen werden sofort gespeichert. Damit diese auch wirksam werden, den Restart-Button drücken.

Der Restart-Button dient auch zum Beenden des Dienstes, wenn dieser nicht aktiv geschalten ist.

Hier sind die Einstellungen erklärt:

Einstellung PflichtBeschreibung
Erste Zeile
Gateway aktiv Aktiviert und deaktiviert diese Host-Verbindung.
Kurzer Name x Name des externen Geräts (zur Identifikation in Logfiles usw.)

Du solltest nur einige, wenige Zeichen verwenden, da dies auch in den Logdateien verwendet wird.
Hostname oder IP x Hostname oder IP des externen Geräts, mit dem zu verbinden möchtest.
Port x Port des externen Geräts
Nur bei Bedarf verbinden TCP-Verbindung zum externen Gerät nur bei Bedarf öffnen.

Aus … Die Verbindung wird sofort geöffnet, eingehende Nachriten sofort weitergeleitet.

Ein … Nur bei einem Eingangsbefehl wird die Verbindung geöffnet (und bleibt dann offen).
Zweite Zeile
Eingangsport am LoxBerryx Der Port, an dem das Plugin am LoxBerry auf eingehende Befehle für dieses Gerät hört
Miniserver x Der Miniserver, an den die Antworten per UDP gesendet werden
Miniserver UDP-Port x Der Miniserver-Port, an den die UDP-Nachrichten gesendet werden sollen
Prefix verwenden Aus … Die Antwort des externen Gerätes wird unverändert an den Miniserver gesendet (Standard)

Ein … Jeder UDP-Antwort wird der „Kurze Name“ des Geräts vorangestellt (Beispiel: Denon: Antwort)
Dritte Zeile
Befehlsende-Zeichen Default ist \r (= CR = Carriage Return). Dieser Trenner wird nur für das Initial- und Keep-Alive-Kommando genutzt. Befehle vom Miniserver müssen weiterhin diese Zeichen mitsenden (aus Kompatibilitätsgründen)

Bitte in der Dokumentation nachsehen, welchen Zeichen verwendet wird. In der Regel ist es \r oder \n, oder \r\n.
Initiales TCP-Kommando Bei jedem Verbindungsaufbau (und Reconnect) wird dieser Befehl (String) an das externe Gerät gesendet. Die Zeile wird mit \r\n abgeschlossen.
Keep-Alive Kommando Dieses Kommando wird regelmäßig an das Gerät versandt, um die Verbindung aufrecht zu erhalten. Es sollte ein Kommando gewählt werden, dass am Gerät keine echte Operation ausführt (z.B. Status abfragen). Die Zeile wird mit \r\n abgeschlossen.
Keep-Alive Zeit Das Keep-Alive-Kommando wird in diesem Zeitintervall (in Sekunden) an das Gerät gesendet. 0 oder leer deaktiviert das Keep-Alive.

Einrichtung in der Loxone Config Software

Virtuelle Ausgänge und Befehle Miniserver → LoxBerry → Externes Gerät erstellen

Virtuelle UDP-Eingänge und Befehle mit Befehlserkennung für die Antworten Externes Gerät → LoxBerry → Miniserver erstellen

Zum Testen kann in der Plugin-Verwaltung der Loglevel auf DEBUG gesetzt werden. Dabei werden alle ein- und ausgehenden Nachrichten im Protokoll festgehalten. Im Betrieb sollte der Loglevel wieder auf ERROR oder WARNING gestellt werden.

Keep-Alive Kommando und Keep-Alive Zeit

Für die Keep-Alive-Zeit schaut in der Geräte-Doku nach, ob dort eine Disconnect-Zeit angegeben ist. Verwendet für die Keep-Alive Zeit dann ein paar Sekunden weniger. Das Keep-Alive baut auch automatisch die Verbindung neu auf. Das Senden des Keep-Alives steht im Logfile. Wurde vom Gerät zuvor die TCP-Verbindung getrennt, wird diese neu aufgebaut. Durch diesen im Log sichtbaren Reconnect bei jedem Keep-Alive könnt ihr auch selbst ausprobieren und herausfinden, welche Zeit erforderlich ist, bis die Verbindung nicht mehr getrennt wird.

Für das Keep-Alive-Kommando verwendet irgendein Kommando, das selbst keinen Schaltbefehl auslöst, z.B. eine Abfrage des Power-Zustandes. Die Abfrage soll für das Gerät möglichst einfach sein, weil das kontinuierlich ausgeführt wird.

Roadmap

  • Beta-Test überstehen
  • Statusanzeige der Dienste
  • Buffering des Logfiles - Analyse/Ausschalten

Fragen stellen und Fehler melden

Spezielle Kommandos

Normalerweise werden alle vom Miniserver eingehenden Kommandos direkt an das externe Gerät weitergeleitet. 

Folgende eingehende Kommandos werden direkt vom TCP2UCP-Service ausgewertet und eignen sich zum Testen (z.B. mit Telnet):

Kommando Funktion
quitconn Beendet die aktuelle, eingehende Verbindung
quitdaemonBeendet das komplette Service für dieses externe Gerät

Fehlersuche / Debugging

Loglevel in der Plugin-Verwaltung auf Debug stellen.

Ausgabe der Meldungen an der Putty-Console:

pkill -f „tcp2udp-singlesocket.pl host=“

/opt/loxberry/bin/plugins/tcp2udp/tcp2udp-singlesocket.pl host=HOST1

HOST1 Ist dabei das erste Gerät, HOST2 das zweite usw.

Konfigurationsdatei

Die Konfigurationsdatei wird automatisch vom Webinterface angelegt und kann für Debugging-Zwecke eingesehen werden.

Schlüsselwort Standardwert Beschreibung
Section [Main]
ConfigVersion 1 Interne Versionsnummer, der ggf. für Änderungen an der Config nach Updates benötigt wird
refreshdelayms 150 Verzögerung der Übermittlung an den Miniserver in Millisekunden
hostkeys - Komma-separierte Liste der in den folgenden Sektionen konfigurierten Hosts
Section HOSTx ([HOST1], [HOST2], usw.)
activated True Aktiviert und deaktiviert diese Host-Verbindung
name (Pflichtfeld)Name des externen Geräts (zur Identifikation in Logfiles usw.)
hostname (Pflichtfeld)Hostname oder IP des externen Geräts
hostport (Pflichtfeld)Port des externen Geräts
hostprotocol tcp Derzeit nur tcp
hostondemand False TCP-Verbindung zum externen Gerät on demand öffnen. Bei False wird die Verbindung sofort geöffnet, bei True wird die Verbindung erst bei einem eingehenden Befehl geöffnet.
lbinport (Pflichtfeld)Der Port, an dem das Plugin am LoxBerry auf eingehende Befehle für dieses Gerät hört
returnms 1 Die Miniserver-Nummer, an die die UDP-Nachrichten gesendet werden
returnport (Pflichtfeld)Der Miniserver-Port, an den die UDP-Nachrichten gesendet werden sollen
returnprefix False False … Die Antwort des externen Gerätes wird unverändert an den Miniserver gesendet

True … Der UDP-Antwort wird der name des Geräts vorangestellt (Beispiel: Denon: Originalantwort)
hostinitialcommand Bei jedem Verbindungsaufbau (und Reconnect) wird dieser Befehl (String) an das externe Gerät gesendet. Die Zeile wird mit \r\n abgeschlossen.
hostkeepalivecommand Dieser Befehl (String) wird alle x Sekunden an das externe Gerät gesendet. Die Zeile wird mit \r\n abgeschlossen.
hostkeepalivetime Mit diesem Zeitintervall in Sekunden wird das Keep-Alive Kommando abgesetzt.