Beiträge von Dachbeleger im Thema „Programmatischer Lesender - UND Schreibender Zugriff auf Kostal Plenticore - z.B. MinSoC Parameter verändern um Batterieladung zu optimieren“

    ob das Ding bei Dir unverändert zum Fliegen kommt

    An der Zeile "from Crypto.Cipher import AES #windows" habe ich mir fast die Zähne ausgebissen, noch den Quelltext von crypto kompilieren lassen und dann festgestellt, dass dann doch nicht alles bei war.

    Auf meinem Linux-Laptop hat stattdessen letztendlich folgende Alternative Zeile zum Erfolg geführt:

    from Cryptodome.Cipher import AES


    Super, dann funktionierte das Einloggen mit deinem Skript!


    Als kleine Verbesserung habe ich die base_url durch Angabe des Hostnamens statt der IP-Adresse verallgemeinert

    BASE_URL = "http://scb/api/v1"


    und von Port 80 auf Port 443 umgestellt, um die Zugangsdaten nicht direkt im Klartext zu übertragen

    BASE_URL = "https://scb/api/v1"

    Dabei kam es dann wie erwartet zum Zertifikatsfehler

    Der WR verschickt keine Zertifikate

    Klar, dass die Authentifizierung des Clients nicht mit einem Clientzertifikat, sondern mit dem spannenden Algorithmus stattfindet. Hier geht es um das Serverzertifikat, welches nicht nur selbst signiert, sondern auch bereits vor über 30 Jahren abgelaufen ist.

    Mein Versuch das Zertifikat in eine Datei zu speichern und das abgerufene Zertifikat gegen die Datei zu validieren klappte bei mir nicht. Stattdessen habe ich als nicht so saubere Lösung bei allen (!) HTTPS-Aufrufen die clientseitige Prüfung des erhaltenen Serverzertifikats mit verify=False deaktiviert, z.B. beim ersten Request

    response = requests.post(url, data=step1, headers=headers, verify=False)


    Nun bin ich für meinen Teil zufrieden. Mit der von deinem Programm erzeugten Session kann mein bash-Skript nun die Leistungswerte herunterladen

    wget --no-check-certificate --header='Content-Type:application/json' --header="Authorization:$(python3 getsession.py)" --post-data='{"begin":"2020-04-03"}' -O rohdaten/eschensued$(date +%Y%m%d%H%M).csv https://scb/api/v1/logdata/download

    und anschließend auf dem Server zum Import in meine Ertragsdatenbank laden.


    kruki, du hast mir sehr geholfen, habe vielen lieben Dank dafür!


    Frohe Ostern :)

    Klasse kruki, dein Skript enthält genau die mir fehlenden Berechnungen für finish und createSession :love::danke:

    Das werde ich morgen gleich mal ausprobieren. Von Python habe ich keine Ahnung, mal gucken wie man das unbekannte Zertifikat vom WR akzeptieren kann, wenn man die Base url von http auf https ändert. Für mein Shell-Skript mit wget hatte ich den Parameter schon gefunden. Als default für deine IP könntest du auch den hostname "scb" verwenden. Trotz dass ich meinen WR-Namen geändert habe und der geänderte Name in download-Log und der Weboberfläche auftaucht, bleibt der Hostname scb bei mir erhalten.