socat Ausgabe in Datei mit zeitstempel

  • Hallo,

    ich betreibe seit gestern eine kleine Wetterstation. Socat hört den Empfänger ab und schreibt die Daten in eine Textdatei. Das funktioniert auch sehr gut:

    Zitat

    sudo socat /dev/ttyUSB0,b9600 ->> /tmp/weather/1-weather.txt

    Jetzt möchte ich aber jedesmal wenn socat Daten bekommt und diese in die Textdatei weiterleitet den aktuellen Zeitspempel unmitelbar vor dem erhaltenen Datensatz einfügen.

    Wie funktioniert das? Gibt es ein Beispiel wie das schon jemand gemacht hat?


  • Jetzt möchte ich aber jedesmal wenn socat Daten bekommt und diese in die Textdatei weiterleitet den aktuellen Zeitspempel unmitelbar vor dem erhaltenen Datensatz einfügen.

    Wie funktioniert das? Gibt es ein Beispiel wie das schon jemand gemacht hat?

    Ich mach das z. B. so:

    socat als lauschender Server:

    Code
    socat -u -T 1 TCP4-LISTEN:55555,reuseaddr,fork OPEN:$HOME/socat_messages.txt,creat,append &
    Code
    ps -fC socat

    In die Datei "$HOME/socat_messages.txt" über den (als daemon) lauschenden socat-Server (TCP-Port 55555) schreiben, mit z. B. nc:

    Code
    echo -e "Datum:  `date`\r\n Hallo \r\n" | nc -n -w 1 127.0.0.1 55555
    Code
    cat ~/socat_messages.txt

    EDIT:

    Man kann mit socat auch direkt in eine Datei (d. h. ohne socat als Server) schreiben, wenn das über eine pipe an socat gegeben wird. Z. B.:

    Code
    echo -e "Datum:  `date`\r\n Hallo \r\n" | socat STDIN OPEN:socat_file.txt,creat,append

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

    Einmal editiert, zuletzt von rpi444 (8. Februar 2015 um 15:09)

  • Vielen dank für dein interesse :)

    Ich habe vor einer Woche erfahren das socat existiert. Ich habe es geschafft alles mal so einzurichten das alle 15 Minuten eine Textdatei erstellt und auf einen FTP server übertragen wird. Ich muss noch dazulernen, werde ich auch...

    Socat als Server? Habe keine Ahnung was du meinst.

    So rufe ich socat auf:

    Zitat

    sudo socat -T 900 -t 900 /dev/ttyUSB0,b9600 ->> /tmp/weather/1-1-weather.txt

    Wie kann ich diese vorgehensweise beibehalten und trotzdem vor jedem Messergebnis das von ttyUSB0 kommt den Zeitstempel davorsetzen?

    Meine Versuche mit

    Zitat

    echo -e "Datum: `date`\r\n Hallo \r\n" | sudo socat -T 160 -t 160 /dev/ttyUSB0,b9600 ->> /tmp/weather/1-3-weather.txt

    hatten nur dieses Ergebnis in der Textdatei:


  • Meine Versuche mit


    hatten nur dieses Ergebnis in der Textdatei:

    Dann versuch mal mit:

    Code
    echo -e "\nDatum: `date`" >>  /tmp/weather/1-3-weather.txt && sudo socat -T 160 -t 160 /dev/ttyUSB0,b9600 ->> /tmp/weather/1-3-weather.txt

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • Leider immer noch nicht das was ich mir wünsche.
    Der FTP Upload schreibt das upload Datum in den Dateinamen. So habe ich die ungefähre Uhrzeit, ich hätte aber gerne die exakte Uhrzeit.

    Socat läuft 15 Minuten lang und soll zu jedem Messwert die Zeit davor setzen an dem der Messwert von der Wetterstation empfangen wurde. Mit deiner Zeile wird aber der Zeitpunkt gesetzt an dem socat gestartet wurde....
    Ist es überhaupt möglich das mit socat alleine hinzukriegen?

  • Ich habe jetzt ein script zusammengebastelt das mir grundsätzlich genau die Ausgabe erzeugt die ich haben möchte.

    Code
    socat -T 900 -t 900 /dev/ttyUSB0,b9600 STDOUT |
    while read line
    do
    if [[ "${line%%;*}" == '$1' ]] ; then
            date=`date +"%s"`
    	data="|$date$line"  
    	echo $data ->> /tmp/weather/1-4-weather.txt
    fi
    done

    Ohne den Zeilen

    Code
    if [[ "${line%%;*}" == '$1' ]] ; then
    ....
    fi

    funktioniert es, es wird aber nach jeder Ausgabe noch eine Zeile eingefügt die da nicht hin gehört.

    Wenn ich diese Zeilen einfüge kommt diese Fehlermeldung und es wird nichts in die Textdatei geschrieben.

    Code
    [[: not found

    Könnt ihr mir sagen warum das so ist?

    Habs herausgefunden. Dieses Script tut genau das was ich möchte.

    Code
    socat -T 900 -t 900 /dev/ttyUSB0,b9600 STDOUT |
    while read line
    do
    if [ "$line" != "" ]; then
            date=`date +"%s"`
    	data="|$date$line"
    	echo $data >> /tmp/weather/1-1-weather.txt
    fi
    done

    Einmal editiert, zuletzt von Gurrru (9. Februar 2015 um 18:58)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!