ser2net, socat: FHZ1300PC an OpenWRT Router, FHEM greift per LAN drauf zu

Begonnen von Torxgewinde, 02 Dezember 2021, 21:51:13

Vorheriges Thema - Nächstes Thema

Torxgewinde

Hallo,
Manchmal steht der FHEM Server nicht da wo ein FHZ1300PC guten Empfang hat. Hat man einen Linux Rechner (z.B. Raspberry-Pi oder OpenWRT Router mit USB Port) an einem funktechnisch besserem Ort stehen, kann man dort den FHZ einstöpseln und ihn per LAN ansprechen. Leider ist das FHZ-Device nicht in der Lage direkt auf das Gerät per LAN zuzugreifen, deswegen kann man einen virtuellen COM-Port (TTY) anlegen lassen. Hier meine Notizen dazu:

Um den FHZ1300PC (und vermutlich auch FHZ1000PC) an einem USB Port an einem OpenWRT Router per LAN mit FHEM anzusprechen braucht man folgendes:

OpenWRT Router: Erstmal die benötigte Software installieren:

$ opkg update && opkg install kmod-usb-serial-ftdi luci-app-ser2net ser2net


Die Konfiguration für ser2net kann man per Weboberfläche vornehmen, es sollte eine Konfig wie diese herauskommen. Die FHZ1300PC läuft mit 9600 Baud, 8N1:

$ cat /etc/config/ser2net

config ser2net 'global'
option enabled '1'

config controlport
option enabled '0'
option host 'localhost'
option port '2000'

config default
option speed '115200'
option databits '8'
option parity 'none'
option stopbits '1'
option rtscts 'false'
option local 'false'
option remctl 'true'

config proxy
option timeout '0'
option databits '8'
option parity 'none'
option stopbits '1'
option xonxoff 'false'
option enabled '1'
option protocol 'raw'
option device '/dev/ttyUSB0'
option port '7777'
option baudrate '9600'


Auf dem Rechner der FHEM ausführt kann man "socat" nutzen, da es ein TTY, also serielle Schnittstelle darstellen kann:

$ socat -d PTY,link=/dev/virtualcom0 TCP:<hostname oder IP>:7777

Nun kann man in FHEM das FHZ device anlegen mit:
defmod FHZ1300PC FHZ /dev/virtualcom0
attr FHZ1300PC model fhz1300


Falls es nicht klappt, einfach mal die Zugriffsrechte für "virtualcom0" checken. Testweise kann man die Rechte lax einstellen:
chmod 0777 /dev/virtualcom0

Da socat im Autostart (/etc/rc.local) vom Nutzer root ausgeführt wird, ist auch die /dev/virtualcom0 für den Nutzer "fhem" nicht direkt erreichbar. Die Option "user-late=<id>" setzt den Nutzer auf die gewünschte ID. Mit dem Befehle "id --user fhem" kann man die ID vom Nutzer "fhem" ermitteln und direkt nutzen. Zudem hatte ich bemerkt, dass FHEM blockiert wenn socat zwar /dev/virtualcom0 angelegt hat, aber die Gegenstelle mit ser2net nicht erreichbar ist. Um dies zu vermeiden wird vorab geprüft ob man auf den TCP-Port eine Verbindung aufbauen kann. Gelingt dies, wird direkt danach das eigentliche socat aufgerufen. Gelint dies nicht, oder wird socat aufgrund geschlossener  oder abgebrochener Verbindung beendet, dann wird ein paar Sekunden gewartet und socat versucht es erneut. Der Schalter "-ly" lenkt die Meldungen in das Syslog um, der Schalter "-d" erhöht jeweils die Details was alles geloggt wird. Das Ampersand am Ende lässt die While-Schleife im Hintergrund laufen, damit blockiert das Autostart-Script nicht.

while true; do
socat -ly /dev/null TCP:<hostname oder IP>:7777 && socat -d -d -ly -L /tmp/socat.lockfile PTY,link=/dev/virtualcom0,user-late=$(id --user fhem) TCP:<hostname oder IP>:7777
sleep 10
done &


Edit: Script für socat im Autostart ergänzt.

rudolfkoenig

Danke fuer die Beschreibung, und freut mich, dass das Geraet noch funktioniert, duerfte inzwischen ueber 15 Jahre alt sein.

Ich habe FHZ.pm leider nicht auf DevIo umgestellt, damit waere der zweite socat ueberfluessig.

yersinia

Danke für das Teilen deiner Erfahrung! :)

Bezgl ser2net und OpenWRT (und CUL) hatte ich auch mal einen Thread angefangen: CUL via ser2net und OpenWRT (>18.06.2) (und es läuft auch noch mit 21.02.1)

Interessant finde ich auch den Beitrag bezgl. ser2net ab v4 in der sich die config wesentlich ändert -> ser2net Version >= V4.0 Neuinstallation funktioniert nicht
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Torxgewinde

@Rudolfkoenig: Ja, FHZ Transmitter und die zugehörigen Sensoren/Aktoren sind echt alt, aber die funktionieren einfach immer noch - genau wie FHEM selbst. Das läuft einfach auf der kleinsten Hardware so nebenbei, ganz im Gegensatz zu so einigen anderen Automationslösungen. Ich mag einfach diese Übersichtlichkeit und den alten Kram zu verwenden bis er wirklich defekt oder technisch überholt ist und nicht einfach nur unmodern.

@yersinia: Ja, ich kann mir vorstellen, dass die UCI Syntax unverändert bleibt. Und falls nicht guckt man sich die neue YAML mal an, der ser2nat Autor hat ja auch einige tolle, neue Funktionen wie Verschlüsselung eingebaut, hat ja auch Vorteile :-)