Metainformationen zur Seite
Plugin-Daten | |
---|---|
Autor | Christian Fenzl |
Logo | |
Status | STABLE |
Version | 0.1.3 |
Min. LB Version | 1.2.2 |
Release Download | https://github.com/christianTF/LoxBerry-Plugin-TCP2UDP/archive/0.1.3.zip |
Beschreibung | Dieses Plugin ermöglicht eine echte, bidirektionale Kommunikation des Miniservers mit TCP-Geräten via UDP |
Sprachen | EN |
Diskussion | https://www.loxforum.com/forum/projektforen/loxberry/plugins/162980-tcp2udp-plugin-bidirektionale-tcp-kommunikation-mit-dem-miniserver |
TCP2UDP
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 | Pflicht | Beschreibung |
---|---|---|
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 LoxBerry | x | 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 |
quitdaemon | Beendet 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. |