socat ser2net

Oekel

New member
(Ich hoffe ich bin in der richtigen/bestMatch Forenkategorie)

Ich verzweifel so langsam an einer offensichtlich wirklich einfachen Aufgabe:

Etliche RaspberryPies (1,2,3B,4) bzw. ein beliebiges Linux als USB/Seriel Server + ser2net
Einige Docker-Images bzw. beliebige Linux Clients mit tcp native support oder socat
Vorweg:
Ganz falsch kann meine Konfiguration nicht sein, denn 1/3 Geräten funktioniert!
Server:
YAML:
# Find detailed documentation in ser2net.yaml(5)
# A fully featured configuration file is in
# /usr/share/doc/ser2net/examples/ser2net.yaml.gz
#
# If you find your configuration more useful than this very simple
# one, please submit it as a bugreport

define: &banner \r\nser2net port \p device \d [\B] (Debian GNU/Linux)\r\n\r\n

connection: &aeotecstick7
  accepter: tcp,4000
  enable: on
  options:
    banner: *banner
    kickolduser: true
    telnet-brk-on-sync: true
  connector: serialdev,
    /dev/serial/by-id/usb-Silicon_Labs_CP2102N_USB_to_UART_Bridge_Controller_5828e4a40755ed1186a193131d62bc44-if00-port0,
    115200n81,local

connection: &razberry7
  accepter: tcp,4001
  enable: on
  options:
    banner: *banner
    kickolduser: true
    telnet-brk-on-sync: true
  connector: serialdev,
    /dev/ttyAMA0,
    38400n81,local

connection: &ender3pro
  accepter: tcp,5000
  enable: on
  options:
    banner: *banner
    kickolduser: true
    telnet-brk-on-sync: true
  connector: serialdev,
    /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0,
    115200n81,local

Den aeotecstick7 kann ich mittels tcp://192.168.1.14:4000 (aus einem Docker-container "Z-Wave JS UI") erreichen und liefert auch korrekte Daten.
Der razberry7 hängt am echten seriellen Port und funktioniert NICHT tcp://192.168.1.14:4001 (aus einem Docker-container "Z-Wave JS UI")
Den 2. USB ender3pro versuche ich über:
socat -d -d pty,link=/dev/ender3pro,raw,echo=0,perm=0777 tcp:192.168.1.14:5000
ins Programm (OctoPrint unterstütz kein tcp-device) zu bringen. Doch auch hier scheinen keine vernünftigen Daten anzukommen, obwohl:
Über Telnet eine Verbindung möglich zu sein scheint:

root@ubuntudocker:/dev# telnet 192.168.1.14 5000
Trying 192.168.1.14...
Connected to 192.168.1.14.
Escape character is '^]'.
ser2net port tcp,5000 device serialdev, /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0, 115200n81,local xonxoff [] (Debian GNU/Linux)
ZD2?2??8>?v?ptart
echo: External Reset
Marlin 1.1.6.1
echo: Last Updated: 2018-11-28 | Author: (Ender-3 Pro)
echo:Compiled: Apr 26 2019
echo: Free Memory: 10078 PlannerBufferBytes: 1232
echo:TF init fail
echo:TF init fail

Nun frage ich mich wie man hier analytisch und systematisch Stück für Stück zum Ziel kommen kann?
Welche (erweiterten) Optionen/Parameter bietet mir ser2net, welche socat?

Gibt es bekannte Einschränkungen mit welchen Geräten es NICHT (niemals) funktionieren wird, oder sollte es persee mit allen Seriellen devices klappen?

Würde mich riesig über jede erdenkliche Hilfe freuen (insbesonders weil ser2net in so vielen Foren angeschnitten wird und nie allumfänglich auf Pitfalls und dergleichen eingegangen wird)

LG
 
Hi,

auch wenn ich mit Deinem Vorhaben nichts an der Mütze habe...
Welche (erweiterten) Optionen/Parameter bietet mir ser2net, welche socat?
"man"-pages lesen? Direkt auf dem System via man ser2net bzw. man socat oder direkt im Browsser:

- https://linux.die.net/man/8/ser2net
- https://linux.die.net/man/1/socat

Nun frage ich mich wie man hier analytisch und systematisch Stück für Stück zum Ziel kommen kann?
Ich würde in erster Linie mal das Logging hochschrauben und die Logs durchforsten (s. z.B. man socat - "CW-d -d -d -d", damit dürfte einiges zu sehen sein).
 
Zuletzt bearbeitet:
Ich würde in erster Linie mal das Logging hochschrauben und die Logs durchforsten (s. z.B. man socat - "CW-d -d -d -d", damit dürfte einiges zu sehen sein).

Leider nichts, was mich schlauer macht:

Bash:
sudo nano /etc/default/socat.conf
Code:
OPTIONS="pty,link=/dev/zwave,raw,user=oekel,group=dialout,mode=777 tcp:192.168.1.14:4001,keepalive,fork"

Bash:
root@ubuntudocker:~# sudo service socat restart

root@ubuntudocker:~# tail -f /var/log/socat.log
2024/03/01 21:58:01 socat[1255971] N forked off child process 1256035
2024/03/01 21:58:01 socat[1255971] I close(8)
2024/03/01 21:58:01 socat[1256035] I just born: child process 1256035
2024/03/01 21:58:01 socat[1256035] I close(4)
2024/03/01 21:58:01 socat[1256035] I close(3)
2024/03/01 21:58:01 socat[1256035] I resolved and opened all sock addresses
2024/03/01 21:58:01 socat[1256035] N starting data transfer loop with FDs [6,6] and [8,8]
2024/03/01 21:58:01 socat[1256025] N socket 2 (fd 8) is at EOF
2024/03/01 21:58:01 socat[1256035] I transferred 96 bytes from 8 to 6
2024/03/01 21:58:01 socat[1256025] I transferred 102 bytes from 6 to 8
2024/03/01 21:58:01 socat[1256025] I poll timed out (no data within 0.500000 seconds)
2024/03/01 21:58:01 socat[1256025] I close(6)
2024/03/01 21:58:01 socat[1256025] I unlink("/dev/zwave"): No such file or directory
2024/03/01 21:58:01 socat[1256025] I shutdown(8, 2)
2024/03/01 21:58:01 socat[1256025] I shutdown(8, 2): Transport endpoint is not connected
2024/03/01 21:58:01 socat[1256025] N exiting with status 0
2024/03/01 21:58:01 socat[1255971] N childdied(): handling signal 17
2024/03/01 21:58:01 socat[1255971] I childdied(signum=17)
2024/03/01 21:58:01 socat[1255971] I childdied(17): cannot identify child 1256025
2024/03/01 21:58:01 socat[1255971] I waitpid(): child 1256025 exited with status 0
2024/03/01 21:58:01 socat[1255971] I waitpid(-1, {}, WNOHANG): no child has exited
2024/03/01 21:58:01 socat[1255971] I childdied() finished
2024/03/01 21:58:01 socat[1255971] I socket(2, 1, 6) -> 8
2024/03/01 21:58:01 socat[1255971] N successfully connected from local address AF=2 192.168.1.111:35776


2024/03/01 21:58:01 socat[1255971] N forked off child process 1256038
2024/03/01 21:58:01 socat[1255971] I close(8)
2024/03/01 21:58:01 socat[1256038] I just born: child process 1256038
2024/03/01 21:58:01 socat[1256038] I close(4)
2024/03/01 21:58:01 socat[1256038] I close(3)
2024/03/01 21:58:01 socat[1256038] I resolved and opened all sock addresses
2024/03/01 21:58:01 socat[1256038] N starting data transfer loop with FDs [6,6] and [8,8]
2024/03/01 21:58:01 socat[1256035] N socket 2 (fd 8) is at EOF
2024/03/01 21:58:01 socat[1256038] I transferred 96 bytes from 8 to 6
2024/03/01 21:58:01 socat[1256035] I transferred 102 bytes from 6 to 8
2024/03/01 21:58:02 socat[1256035] I poll timed out (no data within 0.500000 seconds)
2024/03/01 21:58:02 socat[1256035] I close(6)
2024/03/01 21:58:02 socat[1256035] I unlink("/dev/zwave"): No such file or directory
2024/03/01 21:58:02 socat[1256035] I shutdown(8, 2)
2024/03/01 21:58:02 socat[1256035] I shutdown(8, 2): Transport endpoint is not connected
2024/03/01 21:58:02 socat[1256035] N exiting with status 0
2024/03/01 21:58:02 socat[1255971] N childdied(): handling signal 17
2024/03/01 21:58:02 socat[1255971] I childdied(signum=17)
2024/03/01 21:58:02 socat[1255971] I childdied(17): cannot identify child 1256035
2024/03/01 21:58:02 socat[1255971] I waitpid(): child 1256035 exited with status 0
2024/03/01 21:58:02 socat[1255971] I waitpid(-1, {}, WNOHANG): no child has exited
2024/03/01 21:58:02 socat[1255971] I childdied() finished
2024/03/01 21:58:02 socat[1255971] I socket(2, 1, 6) -> 8
2024/03/01 21:58:02 socat[1255971] N successfully connected from local address AF=2 192.168.1.111:35780

2024/03/01 21:58:02 socat[1255971] N forked off child process 1256052
2024/03/01 21:58:02 socat[1255971] I close(8)
2024/03/01 21:58:02 socat[1256052] I just born: child process 1256052
2024/03/01 21:58:02 socat[1256052] I close(4)
2024/03/01 21:58:02 socat[1256052] I close(3)
2024/03/01 21:58:02 socat[1256052] I resolved and opened all sock addresses
2024/03/01 21:58:02 socat[1256052] N starting data transfer loop with FDs [6,6] and [8,8]
2024/03/01 21:58:02 socat[1256038] N socket 2 (fd 8) is at EOF
2024/03/01 21:58:02 socat[1256052] I transferred 96 bytes from 8 to 6
2024/03/01 21:58:02 socat[1256038] I transferred 102 bytes from 6 to 8
2024/03/01 21:58:02 socat[1256038] I poll timed out (no data within 0.500000 seconds)
2024/03/01 21:58:02 socat[1256038] I close(6)
2024/03/01 21:58:02 socat[1256038] I unlink("/dev/zwave"): No such file or directory
2024/03/01 21:58:02 socat[1256038] I shutdown(8, 2)
2024/03/01 21:58:02 socat[1256038] I shutdown(8, 2): Transport endpoint is not connected
2024/03/01 21:58:02 socat[1256038] N exiting with status 0
2024/03/01 21:58:02 socat[1255971] N childdied(): handling signal 17
2024/03/01 21:58:02 socat[1255971] I childdied(signum=17)
2024/03/01 21:58:02 socat[1255971] I childdied(17): cannot identify child 1256038
2024/03/01 21:58:02 socat[1255971] I waitpid(): child 1256038 exited with status 0
2024/03/01 21:58:02 socat[1255971] I waitpid(-1, {}, WNOHANG): no child has exited
2024/03/01 21:58:02 socat[1255971] I childdied() finished
2024/03/01 21:58:02 socat[1255971] I socket(2, 1, 6) -> 8
2024/03/01 21:58:02 socat[1255971] N successfully connected from local address AF=2 192.168.1.111:35784
...

Also er loopt fröhlich die PIDs durch, was ja auch nicht richtig sein kann....
 
Nur der Vollständigkeithalber.
Ich habe es nun ohne socat hinbekommen (reines ser2net + direktes abgreifen des streams in den Endprogrammen)

Der Fehler lag in Zeilenumbrüchen meiner ser2net.yaml
Schrecklicherweise stand dieses Fehlverhalten nirgends in den Logs bzw. meine IDE hält Zeilenumbrüche für gültig in yaml

Hier nun nur noch schnell die funktionierende Konfiguration:
Code:
define: &banner \r\nser2net port \p device \d [\B] (Debian GNU/Linux)\r\n\r\n

connection: &aeotecstick7
  accepter: tcp,4000
  enable: on
  options:
    banner: *banner
    kickolduser: true
    telnet-brk-on-sync: true
  connector: serialdev,/dev/serial/by-id/usb-Silicon_Labs_CP2102N_USB_to_UART_Bridge_Controller_5828e4a40755ed1186a193131d62bc44-if00-port0,115200n81,local

connection: &razberry7
  accepter: tcp,4001
  enable: on
  options:
    banner: *banner
    kickolduser: true
    telnet-brk-on-sync: true
  connector: serialdev,/dev/ttyAMA0,115200n81,local

connection: &ender3pro
  accepter: tcp,5000
  enable: on
  options:
    banner: *banner
    kickolduser: true
    telnet-brk-on-sync: true
  connector: serialdev,/dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0,115200n81,local

Wenn sich die Programme verbunden haben, sollte es dann so aussehen:

Code:
root@zwave:~# lsof -i
COMMAND    PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
...
ser2net   3443  root    7u  IPv6  27543      0t0  TCP *:4000 (LISTEN)
ser2net   3443  root    8u  IPv6  27544      0t0  TCP *:4001 (LISTEN)
ser2net   3443  root    9u  IPv6  27545      0t0  TCP *:5000 (LISTEN)
ser2net   3443  root   10u  IPv6  27546      0t0  TCP 192.168.1.14:4000->192.168.5.203:48282 (ESTABLISHED)
ser2net   3443  root   12u  IPv6  27547      0t0  TCP 192.168.1.14:4001->172.17.0.2:40624 (ESTABLISHED)
ser2net   3443  root   14u  IPv6  29343      0t0  TCP 192.168.1.14:5000->192.168.1.111:39644 (ESTABLISHED)

LG
 

Zurzeit aktive Besucher

Keine Mitglieder online.

Letzte Anleitungen

Statistik des Forums

Themen
4.564
Beiträge
46.698
Mitglieder
4.193
Neuestes Mitglied
RoSch
Zurück
Oben