Minicom-Output bei Laufzeit filtern bzw. serielle Schnittstelle filtern
Geizhals » Forum » Linux-Support » Minicom-Output bei Laufzeit filtern bzw. serielle Schnittstelle filtern (9 Beiträge, 373 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
..
Re(2): Minicom-Output bei Laufzeit filtern bzw. serielle Schnittstelle filtern
17.06.2017, 12:58:12
dein Input ist ASCII-Text und du filterst mit ein und demselben pattern
entweder das minicom-Log
ODER den od-hexdump?

Minicom habe ich auf Hex-Anzeige umgestellt, damit filter ich immer dasselbe Format.

Sind deine Daten zeilenorierentiert oder ein Stream ohne Zeilensprünge?

Letzteres.

Poste mal ein paar Zeilen von beiden Quellen.

So sieht das Minicom-Capture aus:
3 03 00 0c f1 00 55 04 04 00 09 01 f2 00 55 f0 00 55 00 04 00 08 01 f3 00 55 01 04 00 0e 01 ed 00 55 02 03 00 0b f2 00 55 03 03 00 0c f1 00 55 04 04 00 09 01 f2 00 55 f0 00 55 00 04 00 08 01 f3 00 55 01 04 00 0e 01 ed 00 55 02 03 00 0b f2 00 55 03 03 00 0c f1 00 55 04 04 00 09 01 f2 00 55 f0 00 55 00 04 00 08 01 f3 00 55 01 04 00 0e 01 ed 00 55 02 03 00 0b f2 00 55 03 03 00 0c f1 00 55 04 04 00 09 01 f2 00 55 f0 00 55 00 04 00 08 01 f3 00 55 01 04 00 0e 01 ed 00 55 02 03 00 0b f2 00 55 03 03 00 0c f1 00 55 04 04 00 09 01 f2 00 55 f0 00 55 00 04 00 08 01 f3 00 55 01 04 00 0e 01 ed 00 55 02 03 00 0b f2 00 55 03 03 00 0c f1 00 55 04 04 00 09 01 f2 00 55 f0 00 55 00 04 00 08 01 f3 00 55 01 04 00 0e 01 ed 00 55 02 03 00 0b f2 00 55 03 03 00 0c f1 00 55 04 04 00 09 01 f2 00 55 f0 00 55 00 04 00 08 01 f3 00 55 01 04 00 0e 01 ed 00 55 02 03 00 0b f2 00 55 03 03 00 0c f1 00 55 04 04 00 09 01 f2 00 55 f0 00 55 00 04 00 08 01 f3 00 55 01 04 00 0e 01 ed 00 55 02 03 00 0b f2 00 55 03 03 00 0c f1 00 55 04 04 00 09 01 f2 00 55 f0 00 55 00 04 00 08 01 f3 00 55 01 04 00 0e 01 ed 00 55 02 03 00 0b f2 00 55 03 03 00 0c f1 00 55 04 04 00 09 01 f2 00 55 f0 00 55 00 04 00 08 01 f3 00 55 01 04 00 0e 01 ed 00 55 02 03 00 0b f2 00 55 03 03 00 0c f1 00 55 04 04 00 09 01 f2 00 55 f0 00 55 00 04 00 08 01 f3 00 55 01 04 00 0e 01 ed 00 55 02 03 00 0b f2 00 55 03 03 00 0c f1 00 55 04 04 00 09 01 f2 00 55 f0 00 55 00 04 00 08 01 f3 00 55 01 04 00 0e 01 ed 00 55 02 03 00 0b f2 00 55 03 03 00 0c f1 00 55 04 04 00 09 01 f2 00 55 f0 00 55 00 04 00 08 01 f3 00 55 01 04 00 0e 01 ed 00 55 02 03 00 0b f2 00 55 03 03 00 0c f1 00 55 04 04 00 09 01 f2 00 55 f0 00 55 00 04 00 08 01 f3 00 55 01 04 00 0e 01 ed 00 55 02 03 00 0b f2 00 55 03 03 00 0c f1 00 55 04 04 00 09 01 f2 00 55 f0 00 55 00 04 00 08 01 f3 00 55 01 04 00 0e 01 ed 00 55 02 03 00 0b f2 00 55 03 03 00 0c f1 00 55 04 04 00 09 01 f2 00 55 f0 00 55 00 04 00 08 01 f3 00 55 01 04 00 0e 01 ed 00 55 02 03 00 0b f2 00 55 03 03 00 0c f1 00 55 04 04 00 09 01 f2 00 55 f0 00 55 00 04 00 08


Und so sieht's direkt mit od in der Pipe gelesen aus:
00 55 01 04 00 0e 01 ed 00 55 02 03 00 0b f2 00
55 03 03 00 0c f1 00 20 01 f3 00 55 01 04 00 0e
01 ed 00 55 02 03 00 0b f2 00 55 03 03 00 0c f1
00 55 04 04 00 09 01 f2 00 55 f0 00 55 00 04 00
08 01 f3 00 55 01 04 00 0e 01 ed 00 55 02 03 00
0b f2 00 55 03 03 00 0c f1 00 55 04 04 00 09 01
f2 00 55 f0 00 55 00 04 00 08 01 f3 00 55 01 04
00 0e 01 ed 00 55 02 03 00 0b f2 00 55 03 03 32
04 c7 00 55 04 04 00 09 01 f2 00 55 f0 00 55 00
04 00 08 01 f3 00 55 01 04 00 0e 01 ed 00 55 02
03 00 0b f2 00 55 03 03 00 0c f1 00 55 04 04 00
09 01 f2 00 55 f0 00 55 00 04 00 08 01 f3 00 55
01 04 00 0e 01 ed 00 55 02 03 00 0b f2 00 55 03
03 00 0c f1 00 55 04 04 00 09 01 f2 00 55 f0 00
55 00 04 00 08 01 f3 00 55 01 04 00 0e 01 ed 00
55 02 03 00 0b f2 00 55 03 03 00 0c f1 00 55 04
04 00 09 01 f2 00 55 f0 00 55 00 04 00 08 01 f3
00 55 01 04 00 0e 01 ed 00 55 02 03 00 0b f2 00
55 03 03 00 0c f1 00 55 04 04 00 09 01 f2 00 55

(Sind natürlich unterschiedliche Schnipsel, Minicom ist von gestern Abend, od von gerade eben.)

Im ersten Schritt ersetze ich mit sed jedes Vorkommen von "00 55" durch "00\n55", weil jede Botschaft mit 00 endet und mit 55 beginnt. Anschliessend lösche ich nochmal alle Zeilenschaltungen, weil durch die Pipe-Ausgabe immer am Zeilenende automatisch Zeilenschaltungen gemacht werden, die ich nicht will/brauche. Danach nochmal das erste Kommando, dann habe ich jede Botschaft in einer separaten Zeile.
sed '/00 55/ s//00\n55/g' -u | sed -e :a -e '$!N;s/\n / /;ta' -e 'P;D' -u | sed '/00 55/ s//00\n55/g'

Danach filtere ich noch die Botschaften mit den Geräte-IDs weg, weil ich nur die "echten Botschaften" brauche. Zum Schluss setze ich vor jede Zeile noch den aktuellen Zeitstempel.
Alle sed-Kommandos laufen mit Option -u, damit der Stream sofort gefiltert wird. (Deshalb das wirre Konstrukt mit dem doppelten "s/00 55/00\n55/g".)

Ich habe gestern Abend begonnen mit Minicom ein Capture aufzuzeichnen und das gerade mit derselben sed-Pipe von oben gefiltert.
Das Ergebnis ist makellos, es scheinen keine Botschaften zu fehlen. (Eines der Geräte auf dem Bus überträgt jede Minute die akuelle Uhrzeit. Lese ich direkt in der Pipe mit od, fehlen immer wieder einzelne dieser Botschaften, mal alle paar Minuten, mal 1-2x pro Stunde. Im Minicom-Output sind seit gestern Abend alle Minuten drin.)


EDIT: Zu Kontrollzwecken habe ich natürlich auch schon ungefiltert aus der Pipe geschrieben und anschliessend mit Textverarbeitung "gefiltert". Auch da fehlen schon die Botschaften, d.h. das anschliessende sed ist unschuldig.

BMW 320d E90: Spritmonitor.de
Yamaha FZ6-S Fazer: Spritmonitor.de
17.06.2017, 13:12 Uhr - Editiert von TheTrumpeter, alte Version: hier
Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung