Seite 1 von 1
vzlogger Modul
Verfasst: Mo Sep 08, 2025 9:43 pm
von Faceted8435
Hallo,
ich bin etwas unzufrieden mit dem vzlogger Modul, da bei mir die Werte nicht in einer festen Zeile stehen. Keine Ahnung warum man nicht die Daten aus der wunderbare JSON Struktur geholt hat, sondern die einfach nach einer Zeile parst...
Ich würde gerne das Ändern und anpassen.
Gibt es dazu eine Möglichkeit, dass ich das Modul direkt auf meiner OpenWB Pro+ anpasse?
Oder muss ich mir eine VM mit openWB installieren?
Viele Grüße
Maik
Re: vzlogger Modul
Verfasst: Mo Sep 08, 2025 10:52 pm
von aiole
Dazu braucht es SSH-Zugriff, den du bei originaler Kaufbox bzw. Foren-Image nicht hast. Du kannst die sw2 aber direkt aus Github bauen.
Das ist allerdings nicht sonderlich praktikabel, da deine lokale Änderung mit jedem Update hops geht.
Besser auf Github einen Fork ziehen, diesen nach deinen Ideen anpassen und einen PR stellen. Das Team prüft diesen und hilft, wenn's klemmt. Wenn ok, kommt er für ALLE ins offizielle update.
Re: vzlogger Modul
Verfasst: Di Sep 09, 2025 5:56 am
von LutzB
Faceted8435 hat geschrieben: Mo Sep 08, 2025 9:43 pm
Hallo,
ich bin etwas unzufrieden mit dem vzlogger Modul, da bei mir die Werte nicht in einer festen Zeile stehen. Keine Ahnung warum man nicht die Daten aus der wunderbare JSON Struktur geholt hat, sondern die einfach nach einer Zeile parst...
Kann ich nachvollziehen. Das Modul wurde anscheinend damals einfach so aus der 1.9 portiert, ohne große Anpassungen machen zu müssen. Ist definitiv nicht robust gegenüber sich verändernder Strukturen im JSON.
Faceted8435 hat geschrieben: Mo Sep 08, 2025 9:43 pm
Ich würde gerne das Ändern und anpassen.
Gibt es dazu eine Möglichkeit, dass ich das Modul direkt auf meiner OpenWB Pro+ anpasse?
Oder muss ich mir eine VM mit openWB installieren?
Wie aiole schon geschrieben hat, kannst Du das so auf der Pro+ nicht einfach machen, da Du keinen SSH-Zugang hast. Du müsstest entweder einen eigenen Raspi oder VM für die Entwicklung verwenden. Es ginge auch noch, dass Du eine eigene SD-Karte mit SSH-Zugang erstellst und die dann in der Pro+ laufen lässt.
Ich habe mir das Modul gerade mal angesehen. So aufwändig dürften die notwendigen Anpassungen gar nicht sein. Das sollten wir auch ohne eigenen vzlogger hinbekommen. Etwas tricky wird nur das Upgrade einer bestehenden Konfiguration. Wenn jetzt eine Zeilennummer hinterlegt ist, muss daraus eine UUID ermittelt werden, die dann zum Parsen verwendet wird. Das Problem dabei ist, dass zu dem Zeitpunkt, wo die Upgrade-Methode aufgerufen wird, noch kein JSON vorliegt. Die Zeilen müssten also während der ersten Ausführung in UUIDs umgewandelt und dann die Konfiguration aktualisiert werden.
Wie sieht denn ein allgemeindes JSON von vzlogger aktuell aus? Ist die Reihenfolge der Daten in den Tupel immer gleich? Nach dem aktuell im Test vorhandenen Beispiel müsste das Parsen dann über den Pfad "data[x]tuples[1]" erfolgen, wobei "x" anhand der UUID zu bestimmen wäre.
Re: vzlogger Modul
Verfasst: Di Sep 09, 2025 4:09 pm
von Faceted8435
Hi Lutz,
danke für deine Antwort.
Ja, die Änderung sind überschaubar. Die Migration des schwierigere. Ich weiß gerade nicht, wie sicher man von der Zeilennummer auf die UUID bzw. denn Index des Elementes schließen kann.
Meine JSON sieht so aus:
Code: Alles auswählen
{
"version": "0.8.7",
"generator": "vzlogger",
"data": [
{
"uuid": "38d3d680-91d4-11e8-0059-e70a9475f5fe",
"last": 1757431965071,
"interval": -1,
"protocol": "sml",
"tuples": [ .. ]
},
{
"uuid": "704e7da0-5a14-11ea-91d4-cf6274a250eb",
"last": 1757431965071,
"interval": -1,
"protocol": "sml",
"tuples": [ .. ]
},
{
"uuid": "4ea85ee3-1f42-436e-866e-913cfe67c672",
"last": 1757431965071,
"interval": -1,
"protocol": "sml",
"tuples": [ .. ]
}
]
}
Und die Elemente in "tuples" variieren.
Meine Idee wäre in der Konfiguration die UUID oder den Index anzugeben (if digit => Index sonst UUID)
Wenn man die pare_line Funktion durch diese fetch_last_value ersetzt sollte das alles sein.
Code: Alles auswählen
def fetch_last_value(response: dict, target_id: str):
json_data = response.json()
if "data" not in json_data:
raise KeyError("Kein 'data'-Schlüssel in der Antwort gefunden")
data = json_data["data"]
# Prüfen, ob UUID eine Zahl ist
if target_id.isdigit():
index = int(target_id)
if index < 0 or index >= len(data):
raise IndexError(f"Index {index} liegt außerhalb des data-Arrays")
obj = data[index]
else:
obj = next((o for o in data if o.get("uuid") == target_id), None)
if obj is None:
raise ValueError(f"Kein Objekt mit UUID {target_id} gefunden")
tuples = obj.get("tuples", [])
if not tuples:
raise ValueError(f"Objekt ({target_id}) hat keine 'tuples'")
return tuples[-1][1]
Vielleicht kann man auch statt die alten Usecase zu migrieren einfach ein neues Modul vzlogger2 machen?
Ich habe die Funktion gegen mein vzlogger getestet. Mit der Anpassung in der Konfig habe ich mich noch nicht beschäftigt.
Ich müsste mir auch erst noch eine Test-Umgebung aufbauen. Dann könnte ich auch einen PR machen.
Viele Grüße
Maik
Re: vzlogger Modul
Verfasst: Di Sep 09, 2025 5:07 pm
von LutzB
Ist irgendwo dokumentiert, welche Daten in den "tuples" sind? In dem Modultest ist das ein eindimensionalen Array, Du verwendest jedoch "tuples[-1][1]" also zwei Ebenen.
Re: vzlogger Modul
Verfasst: Di Sep 09, 2025 5:28 pm
von derNeueDet
Das hab ich vor langer Zeit mal hier im Forum dokumentiert, wie das bei Vzlogger in JSON aussieht. Suchen hilft. Das lässt sich alles mit jq Filter Einträgen im JSON Modul ohne Programmierung ermitteln.
PS: schau mal da:
viewtopic.php?p=23808#p23808
VG
Det
Re: vzlogger Modul
Verfasst: Di Sep 09, 2025 7:49 pm
von Faceted8435
LutzB hat geschrieben: Di Sep 09, 2025 5:07 pm
Ist irgendwo dokumentiert, welche Daten in den "tuples" sind? In dem Modultest ist das ein eindimensionalen Array, Du verwendest jedoch "tuples[-1][1]" also zwei Ebenen.
Beim vzlogger bin ich jetzt auf keine offizielle Doku gestoßen.
Ein tuples Element ist wieder ein Array mit einem Zeitstempel im Unixtimestamp-Format in Millisekunden und dem Messwert:
Code: Alles auswählen
tuples": [
[
1757431666671,
-86
],
[
1757431668313,
-84
],
[
1757431669956,
-101
]
]
Entweder hat "tuples" mindestens ein Element oder ist nicht vorhanden.
Mit tuples[-1][1] möchte ich das letzte Element aus dem Array (den neuesten Messwert) haben und davon den zweiten Wert - den Messwert.
Viele Grüße
Maik
Re: vzlogger Modul
Verfasst: Di Sep 09, 2025 9:06 pm
von derNeueDet