Protokoll-Analyse BEKANT-Schreibtisch

2021-04-10

Seit dem Umzug besitze ich ja einen höhenverstellbaren Schreibtisch. Leider unterstützt das original mitgelieferte Bedienteil keine Höhen-Presets. Heißt bei jedem Verstellen muss man die optimale Steh- bzw. Sitz-Höhe immer wieder neu suchen. Idee war deshalb schon von Anfang an, das Bedienteil zu zerlegen und dieses Feature selbst nachzurüsten. Wie so oft bei Bastelprojekten staut sich über die Zeit einiges an, deshalb komme ich erst jetzt so langsam dazu. Schon zum Jahreswechsel stümperte ich an ein zusätzlich bestelltes Bedienteil zwei Relais an die Kontakte der früheren Folien-Tastatur und verpasste dem ganzen eine NodeMCU. Der Schreibtisch kann so nun über eine Web-Schnittstelle oder zwei der vier am Gehäuse angebrachten Taster bewegt werden.

Die gewünschte Funktion der einspeicherbaren Tisch-Höhen habe ich aber nach wie vor noch nicht implementiert. Seit Weihnachten ist allerdings auch ein Oszilloskop im Haushalt vorhanden - und heute bot sich die Gelegenheit, das Kommunikationsprotokoll mal näher anzusehen. Im Internet fand ich zum Kaufzeitpunkt schon Erfahrungsberichte von Leuten die schon dasselbe vorhatten. Es gibt sogar ein Projekt mit einer fertigen Platine welche man nur noch kaufen und einbauen muss. Keines der Projekte sieht eine Netzerkschnittstelle vor (ich hätte aber gerne ein Feedback in mein Monitoring-System) - und es wäre ja auch langweilig einfach ein fertiges Produkt anzuschaffen.

Analyse

  • Die drei Pins der allgemeinen Bus/Versorgungsleitung auf einen Pin-header überführen und labeln.
  • Alle ans Oszi hängen und die richtige Kombination durchpermutieren (was ist Ground, was könnte VCC und was Datensignal sein)
  • Ergebnis daraus war: Weiß = GND, Rot = VCC (24-35V), Blau = Datensignal
  • Mal mit dem Oszi bisschen mitschneiden was da so auf dem Datenbus abgeht (grün markiert: gefühlt zusammengehörende Datenpakete, später mehr dazu)

Oszi-Datenbus

Im Paketmanager gibt es ein Konsolentool um Screenshots (und theoretisch auch die Roh-Datenpunkte) ohne den Transfer via USB-Stick auf den Computer zu laden - das ist echt bequem:

$ lxi screenshot -p rigol-1000z -a 192.168.178.38

Das Protokoll dazu heißt LXI bzw. SCPI - ein Textdokument listet alle vorhandenen Befehle des Oszis.

PulseView

Anhand der Infos aus dem Netz wusste ich, dass das verwendete Protokoll LIN heißt. Da mein Oszi das allerdings nicht dekodieren kann, suchte ich nach anderen Möglichkeiten. Das Messmittel kann zum Beispiel Messreihen als CSV-Tabelle exportieren. Gesagt getan, die Datei vom Stick auf den PC gezogen und erstmal mit numpy visualisiert - damit kann man aber natürlich nicht soo viel anfangen. Im Netz stieß ich auf PulseView - ein open-Source Logik-Analysator für den PC und CSV-Import-Funktion.

Da sich das CSV-Format vom Oszi nicht so ganz mit dem von PulseView verträgt schnell ein Python-Skript zur Umwandlung gebastelt:

with open("input.csv", "r") as f:
    data = f.readlines()
outputText = "time,ch1,ch2"

time_offset = float(data[1].strip().split(",")[-2])
time_increm = float(data[1].strip().split(",")[-1])

for line in data[2:]:
    cols = line.strip().split(",")
    time = int(cols[0]) * time_increm + time_offset
    ch1 = float(cols[1])
    ch2 = float(cols[2])
    outputText += "{0},{1},{2}\n".format(time, ch1, ch2)
    
with open("ouptut.csv", "w") as f:
    f.write(outputText)

Jetzt die Daten in den Analysator kippen. Dabei beim Import den Spaltentyp “t,a,a” angeben - es ist ja zuerst die Zeit (time) und dann zwei Spalten mit analogen Werten. Das Python-Skript kümmert sich netterweise schon um die Umrechnung der Zeit. In der Software kann man dann nach dem Import links den Kanal von Analog über einen Schwellwert oder Schmitt-Trigger zu einem Digitalsignal wandeln lassen. Auf dieses lassen sich dann verschiedene Filter und Dekoder anwenden. Im gegebenen Fall eben ein LIN-Decoder. In PulseView sieht das Ergebnis dann wie folgt aus:

Pulseview

Eine ausführlichere Dokumentation des Kommunikationsprotokolles findet sich in einem weiteren GitHub-Repository

Weiter bin ich bis jetzt noch nicht gekommen, wollte das aber schonmal für später dokumentiert haben.

technikbastelkram

Fahrzeitanalysen

Ein Tunnel, ein Tunnel!