socat - the guide to remote serial, PanelDue and Telnet(ish)

  • Disclaimer; I just know enough to be dangerous ... and went down this rabbit hole trying to use a PanelDue with an unsupported Duet3 prototype. Anyways, I'll list a few commands below that may or may not be useful to others trying to solve interesting problems in interesting ways..

    The first scenario was having the PanelDue attached to a USB to TTL adapter on the Raspberry Pi that was connected to the Duet. The Pi has both the SPI connection, and the (USB) serial connection. The easy solution would be to glue the two serial ports together. After realizing socat didn't care I had beforehand set baud rates with stty it worked just fine.

    /dev/USB0 is the (FTDI) USB to TTL, and /dev/ACM0 is the Duet (USB) serial port:
    socat /dev/ttyUSB0,raw,echo=0,b57600 /dev/ttyACM0,raw,echo=0,b115200
    pi@duet3:~ $ socat -lm /dev/ttyUSB0,raw,echo=0,b57600 EXEC:/opt/dsf/bin/CodeConsole,su=root,pty,stderr

    This got me thinking, we could forward the Duet's serial port to a TCP port, this should give access to the console even if DSF is not runnng.
    pi@duet3:~ $ socat /dev/ttyACM0,raw,echo=0,b115200 tcp-listen:23,reuseaddr
    pi@duet3:~ $ socat -lm -d -d TCP-LISTEN:23,fork EXEC:/opt/dsf/bin/CodeConsole,su=root,pty,stderr

    Having done that I realize I could then move the FTDI USB to TTL adapter and PanelDue to any machine on my network and bridge the serial port over TCP.
    pi@duet3:~ $ socat /dev/ttyACM0,raw,echo=0,b115200 tcp-listen:2323,reuseaddr
    bearer@remotemachine:~$ socat -d -d /dev/ttyUSB1,raw,echo=0,b57600 tcp:duet3.local:2323
    pi@duet3:~ $ socat -lm -d -d TCP-LISTEN:2323,fork EXEC:/opt/dsf/bin/CodeConsole,su=root,pty,stderr
    bearer@remotemachine:~$ socat -d -d /dev/ttyUSB1,raw,echo=0,b57600 tcp:duet3.local:2323

    The above was all tested and found working. There are probably some of you that have improvements to suggest and I welcome those. Especially on error handling and such. I've never been known to leave a rabbit hole untill all the rabbits have been "dealt" with, so in a future post I'll try to add some systemd stuff and try to have socat execute CodeConsole instead using the serial connection, as well as trying to have socat execute ssh to setup the far side all in one command (maybe).

  • @bearer socat is one of those hidden gems that you can find all sorts of uses for. You can even use it to monitor the unix socket the DuetControlServer creates...

    With the DuetControlServer running...

    mv /var/run/dsf/dcs.sock /var/run/dsf/dcs.sock.original
    socat -t100 -x -v UNIX-LISTEN:/var/run/dsf/dcs.sock,mode=777,reuseaddr,fork UNIX-CONNECT:/var/run/dsf/dcs.sock.original

  • The force is strong in this one! ☝

Log in to reply