MachineLogMonitor – Textlogs von RS232, CAN und CAN-Trace-Dateien mehrere gefilterte Ansichten

OP #8100977
Lesenswert?
• ▲
▼

Hallo zusammen,

ich stelle hier MachineLogMonitor vor, ein Desktop-Tool zum Mitlesen von Textlogs, wie sie Mikrocontroller, Steuerungen und Maschinen über die serielle Schnittstelle oder über CAN ausgeben. Der Anlass: beim Inbetriebnehmen und Testen will ich denselben Logstrom gleichzeitig komplett, nur die Fehler und nur einen bestimmten Teil sehen.

Quellen (genau eine aktiv)

  • RS232: COM-Port oder pyserial-URL (z. B. socket://host:port), Baudrate und Timeout einstellbar. Zeilentrenner LF oder CRLF.
  • CAN: jedes Interface, das python-can kennt (PCAN, SocketCAN, Vector, udp_multicast, ...). Die Datenbytes der Frames mit einer eingestellten Arbitration-ID werden als Bytestrom behandelt und in Zeilen zerlegt.
  • CAN-Trace-Dateien: alles, was python-can lesen kann (.asc, .blf, ...), Wiedergabe mit 0,5x, 1x, 2x, 10x oder sofort, gleicher ID-Filter wie live.

Das Tool liest nur. Im Quell-Layer gibt es keinen einzigen send- oder write-Aufruf, ein Test erzwingt das. Auf CAN wird Listen-Only angefordert, wo der Treiber das kann.

Monitore mit und ohne Filter (der eigentliche Kern)

  • Alle empfangenen Zeilen landen in einem Ringpuffer (Standard 5000 Zeilen). Darüber liegen beliebig viele Monitor-Ansichten.
  • Monitor ohne Filter: zeigt den kompletten Strom.
  • Monitor mit Filter: zeigt nur Zeilen, die einen Substring enthalten, z. B. "ERROR", "Achse3" oder "main()". Der Filter lässt sich pro Monitor abschalten, ohne ihn zu löschen. Jeder Monitor zeigt Zähler "passend / gesamt".
  • Pause und Clear wirken nur auf die gewählte Ansicht. Der Puffer und die anderen Monitore laufen weiter. Nach dem Fortsetzen sind die zwischenzeitlich eingetroffenen Zeilen da, solange der Ringpuffer sie noch hält.
  • Zeilen werden anhand konfigurierbarer Substrings als DEBUG, INFO, WARN, ERROR eingefärbt.

Weiteres

  • Zeilentrennung passiert auf Byte-Ebene vor dem Dekodieren. UTF-8-Sequenzen, die über mehrere CAN-Frames verteilt ankommen, ergeben keine kaputten Zeilen; undekodierbare Bytes werden ersetzt statt verworfen.
  • Optionales Mitschreiben auf Platte: Rohstrom und/oder eine Datei je Monitor, Dateiname mit strftime-Platzhaltern. Das schreibt ein eigener Thread, die GUI blockiert nicht.
  • Konfiguration als JSON-Datei (--config). Fehlende Schlüssel werden ergänzt, eine kaputte Datei wird nie ungefragt überschrieben.

Geplant, aber noch nicht implementiert

  • Regex-Filter für die Monitore, zusätzlich zum heutigen Substring-Filter.
  • Automatische Baudratenerkennung für RS232. Heute muss die Baudrate von Hand eingestellt werden.

Beides steht auf der Liste, in Version 0.2.0 ist davon nichts drin.

Abgrenzung und Technik

Was es nicht ist: kein Terminal (HTerm, ScriptCommunicator), kein CAN-Analyzer. Es sendet nichts, macht keine Signaldekodierung. Nur Textlogs mitlesen, mehrere Sichten gleichzeitig.

Technik: Python >= 3.10, PySide6, python-can, pyserial. MIT-Lizenz. Entwickelt und getestet unter Windows. Linux sollte über pyserial/SocketCAN laufen, ist aber ungetestet.

Quellcode und Installation

Das Paket liegt auf PyPI: https://pypi.org/project/machine-log-monitor/

Nur den Quellcode anschauen, ohne etwas zu installieren: Unter https://pypi.org/project/machine-log-monitor/#files liegt das Quellpaket machine_log_monitor-0.2.0.tar.gz [Größe nach dem Upload eintragen, 0.1.1 hatte ca. 730 kB]. Darin steckt der komplette Python-Quellcode des Programms plus Tests (pytest), README, LICENSE und CHANGELOG. Einfach entpacken und lesen. Alternativ per pip herunterladen, ohne zu installieren:

1
pip download machine-log-monitor --no-deps --no-binary :all: -d .

Als Anwendung installieren (empfohlen pipx, eigene Umgebung, Kommando landet im PATH):

1
pipx install machine-log-monitor
2
machine-log-monitor

Oder klassisch mit pip, am besten in ein venv:

1
python -m venv venv
2
venv\Scripts\activate          (Linux: source venv/bin/activate)
3
pip install machine-log-monitor
4
machine-log-monitor

Update: pipx upgrade machine-log-monitor bzw. pip install -U machine-log-monitor

Entfernen: pipx uninstall machine-log-monitor bzw. pip uninstall machine-log-monitor

Das Entwicklungs-Repository ist privat; Doku und der Log-Generator für Tests ohne Hardware sind daher aktuell nicht öffentlich. Das Quellpaket enthält keine EXE und keinen vorkompilierten Code: nur den Python-Quelltext des Programms plus die Ressourcen der Oberfläche (Icons als SVG und PNG, zwei Schriften, deren Lizenztexte).

Stand

Version 0.2.0, veröffentlicht am 03.10.2026. Neu gegenüber 0.1.1: Das RS232-Portfeld listet die erkannten seriellen Ports mit Beschreibung (unter Linux auch die festen /dev/serial/by-id-Namen), ein konfigurierter, aber nicht vorhandener Port wird gemeldet statt still zu scheitern, die Seitenleiste lässt sich einklappen, das Fenster geht bis 560 × 400 herunter, und die Log-Datei-Seite zeigt genau die Dateien, die wirklich geschrieben werden. Ich nutze es im Alltag, Ecken gibt es sicher.

Über Rückmeldungen freue ich mich:

  • Wer liest heute Textlogs über RS232 oder CAN mit, und womit? Was müsste das Tool können, damit ihr es statt eures Terminals aufmacht?
  • Kritik, Wünsche und Bugs gern direkt hier in den Thread.

Monitors-Seite: mehrere Monitore mit und ohne Filter

Seite Data source: Auswahl und Einstellung der Quelle

Gesamtansicht

Angehängte Dateien:
OP #8103494
Lesenswert?
• ▲
▼

Hallo zusammen,

MachineLogMonitor 0.3.0 ist auf PyPI: https://pypi.org/project/machine-log-monitor/

Die beiden Punkte aus „Geplant“ im ersten Beitrag sind jetzt drin:

  • Regex-Filter: Pro Monitor kann der Filter ein regulärer Ausdruck sein, z. B. ERROR|WARN oder (?i)error. Ist das Muster ungültig, wird das Feld rot.
  • Baudratenerkennung für RS232: Das Tool hört nur zu, gesendet wird nichts. Es probiert die üblichen Raten von 1200 bis 921600 durch und nimmt die, bei der lesbarer Text ankommt. Das Gerät muss dafür in der Zeit etwas senden.

Außerdem:

  • Die Monitore in der geteilten Ansicht lassen sich in der Breite ziehen, und das Tool merkt sich die Breiten.
  • Ohne --config öffnet das Tool die zuletzt benutzte Konfiguration.
  • Beim Schließen fragt es nach, statt still zu speichern.
  • Das Fenster friert beim Tippen eines Filters mit vollem Puffer nicht mehr ein.

Wichtig für Python 3.10 und 3.11: Mit PySide6 6.12.0 kann der Prozess nach einigen tausend Zeilen abstürzen. 0.3.0 bleibt dort deshalb auf PySide6 6.11, ein Update lohnt sich also.

1
pipx upgrade machine-log-monitor

bzw.

1
pip install -U machine-log-monitor

Rückmeldungen zur Baudratenerkennung an echter Hardware sind besonders willkommen.

#8103499
Lesenswert?
• ▲
▼

Super Idee! Ich finde es klasse, dass man sich mit der Unterstützung von Chatty und Konsorten jetzt endlich in überschaubarer Zeit die Werkzeuge für Entwicklung und Diagnose bauen kann, die man früher immer haben wollte. Das macht echt schon einen guten Eindruck.

Antwort schreiben

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.