Bestellung : 'order2delivery' JSON Auswertung mit Python

Hallo zusammen,

ich bin neu hier im Forum und habe nach lesen einer Menge Beiträge einiges lernen dürfen. Danke dafür!

Zunächst zur mir, habe im Frühjahr 22 einen P2 AWD als Firmenwagen bestellt und bekomme demnach keine Mails über den Stand der Lieferung etc.
Dementsprechend war und bin ich interessiert an der Auswertung der deliver2order Daten bzgl. der Änderungen.

Um es mir persönlich und dem ein oder anderen hier im Forum leichter zu machen habe ich ein kleines Python Script geschrieben um verschiedene Versionen eines JSON Files bzgl unseres Bedarfs zu analysieren, vor allem alle Änderungen zu finden… und den aktuellen Status der Bestellung in ein paar Listenpunkten darzustellen.

Wer sich ein bisschen mit Python auskennt kann gleich mal mitmachen und das Script nutzen.
Voraussetzung : mindestens einmal - besser zwei Versionen _ der „order2delivery“ Daten lokal als JSON File abspeichern.
Bin gespannt ob jemand so ein Script nutzen möchte und Interesse besteht.

Das Script erzeugt zum Beispiel ein solches Listing:

Gruss
crisp_2

Das Script :
Edit 2022-09-22 : bump to 1.05

# Order2DeliveryDiff-1.05.py

from deepdiff import DeepDiff
import json
import tkinter as tk
from tkinter import filedialog

# generate open file dialog .. open most recent first
root = tk.Tk()
root.withdraw()

fn1 = filedialog.askopenfilename()
fn2 = filedialog.askopenfilename()

f1 = open(fn1)
f2 = open(fn2)

data1 = json.load(f1)
data2 = json.load(f2)
f1.close()
f2.close()

# do a deepDiff analysis with all elements ...
result = DeepDiff(data1,data2)

# if you would like to see dictonary of changes uncomment this line :
# print(result['values_changed'])

print ('-------- Files -------------------------------')
print('File 1 :' + fn1)
print('File 2 :' + fn2)
print()

print ('-------- Changed -----------------------------')
for i in result['values_changed']:
    print (i)

print ()
print ('-------- File R',data1['data']['order']['version'],' ------------------------------')
print ('upDated      :', data1['data']['order']['updated'])
print ()
print ('Order Number :', data1['data']['order']['orderNumber'])
print ('VIN          :', data1['data']['order']['manufacturing']['vehicleIdentificationNumber'])
print ('prodDate     :', data1['data']['order']['manufacturing']['manufacturingMonth'])
print ()
print ('EHD          :', data1['data']['order']['delivery']['customerEarliestPossibleHandoverDate'])
print ('AAD          :', data1['data']['order']['delivery']['carHasArrivedAtDealer'])
print ('EDD          :', data1['data']['order']['delivery']['estimatedDeliveryDate'])
print ('DBD          :', data1['data']['order']['delivery']['bookedDate'])
print ('-------------------------------------------------')
5 „Gefällt mir“

Prinzipiell ein sehr cooler Gedanke vor allem auch die Differenz zu ermitteln.
Wenn ich es richtig sehe muss man sich hierfür einloggen und händisch das Objekt in ne Datei Speichern, oder?

Ich habe mir das ganze so ähnlich auch schon für den HomeAssistent programmiert, welcher dann ständig das aktuelle Json Objekt von Polestar abgerufen hat, leider hatte ich noch keine Muße / Zeit mir den Auth Prozess anzusehen um dann immer den aktuellsten Datenbestand zu haben.
(So musste ich alle 4/5 Stunden den Brear Token in HA kopieren).
Wenn du hierzu eine Lösung hast, könnte ich auch mein HA Script bereitstellen.

1 „Gefällt mir“

Wenn ich es richtig sehe muss man sich hierfür einloggen und händisch das Objekt in ne Datei Speichern, oder?

Korrekt - das richtige „order“ Objekt in den verschiedenen „order2delivery“ Einträgen identifizieren, mit der rechten Maustaste auf der obersten „data“ Ebene anklicken und als Objekt in die Zwischenablage kopieren, mit einem beliebigen Texteditor und einfügen aus der Zwischenablage als „Revions-yy.json“ - oder beliebige andere Namen abspeichern. Im Prinzip so.

Nebenbei kann man damit die Historie des Ablaufs für sich abspeichern.

Sehr interessanter Ansatz!
Habe auch HA am Start :+1:, und auch mit JSON Auswertungen. Hatte mir aber in erster Linie für dieses Python Script kurz den Auth Prozess angesehen um es dann beim händischen Ansatz zu belassen. Habe also keine Lösung dafür; würde mich aber freuen wenn jemand dazu was beitragen kann.

Nach etwa 6 Wochen wieder mal ein Meta-Update und dann das:

Wenigstens mal deepdiff ausprobiert (hab dein script noch etwas angepasst)…
Aber ja, ein Update um des Updates willen, stark, Polestar :partying_face:

1 „Gefällt mir“

Nice ! Prima das du das Script nutzen konntest - und ja - bei mir war einmal das Gleiche - keine Änderung im Content nur das Update vom Revision Stand und dem Datum.

Genau diesen Fall konnte ich nicht glauben und habe für den sicheren Vergleich des kompletten JSON Objektes das Script geschrieben.

Gestern hatte ich ein Revision update mit neuem, früherem EDD. :grin:
Dank Script schnell identifiziert, das sonst eben nichts geändert wurde.

BTW - Fragen
Steht das AAD für „data.order.delivery.carHasArrivedAtDealer“ ?
EPH = „data.order.delivery.customerEarliestPossibleHandoverDate“ ?

1 „Gefällt mir“

Genau :slight_smile: (Hintergrund: bei mir wirds knapp wegen BAFA…)

Dafür lohnt es sich definitv, danke nochmals für die Initiative! :+1:

Update : im ersten Beitrag eingefügt, Script extrahiert weitere Informationen

Wegen der Frage von @donny - hier eine kurze Anleitung für Python mit VS Code und auch den Schnelleinstieg mit der deutlich einfacheren Thonny IDE.

Thonny geht super einfach : am Besten hier lesen :
Schnellstart Thonny IDE (extern)

  • die Module „deepdiff“, „tkinter“ und ggf „JSON“ installieren
  • sonst wie mit VS Code

Alternativ - natürlich geht auch VisualCode Studio - wer es schon hat.
Mit VS

  • Ordner anlegen nach belieben
  • Code aus dem ersten Beitrag als .py file speichern
  • VS öffnen
  • den Ordner mit VS öffnen
  • spätestens nun fragt VS ob der Python Language Support installiert werden soll → also installieren lassen, ggf Neustart
  • wenn der Code dann gestartet werden kann kommt unweigerlich …
    „ModuleNotFoundError: No module named ‚deepdiff‘“
  • im Terminalfenster (VS Code terminal ist ok) mit „pip3 install deepdiff“ das Modul installieren (je nach Linux / win / mac kann es auch pip statt pip3 sein)
  • jetzt sollte der Code laufen
  • zweimal nacheinander öffnet sich ein Filedialog für die zu vergleichenden Files
  • das Ergebnis erscheint im Terminal Fenster.

Viel Erfolg

1 „Gefällt mir“