snaptec / openWB

openWB - die modulare Wallbox
https://openwb.de
GNU General Public License v3.0
339 stars 204 forks source link

Update pycarwings2.py #2842

Closed mekrapp closed 5 months ago

mekrapp commented 5 months ago

Two changes

1st re line 75: Nissan changed the Base URL of its Carwings API. Since May 20, 2024 the old URL used by pycarwings2 in soc_leaf doesn't work anymore.

2nd re line 121: At least on a Windows 10 PC with Python 3.12 for test purpose, the additional parameter 'headers={"User-Agent": ""}' is needed to run pycarwings2.py successfully. The need for this parameter within OpenWB itself has tbc.

For more details see posts on https://forum.openwb.de/viewtopic.php?p=109761#p109761 ff

benderl commented 5 months ago

Wenn ich den Beitrag im Forum und Deine Beschreibung richtig gelesen habe, wurde diese Anpassung noch nicht auf einer openWB 1.9 mit Stretch getestet, sondern nur unter Windows mit Python 3.12? Dann diesen Test bitte noch nachholen.

mekrapp commented 5 months ago

Das würde ich zwar gerne machen, ich habe aber weder einen Pi (außer dem Pi in der OpenWB) noch sonstige Erfahrungen mit einem Pi. Ich müsste hier bei nahe null anfangen.

Die Änderung der URL auf die Nissan API ist in jedem Fall erforderlich. Die EVCC Kollegen hatten das gleiche Problem mit dem Verlust des Zugriffs auf die Nissan API, siehe https://github.com/evcc-io/evcc/issues/13941 Sie haben die neue URL https://gdcportalgw.its-mo.com/api_v230317_NE/gdc/ als Lösung gefunden.

Der Autor der My Leaf App (Tobias Kjeldsen) hat den Link am 22.05. in seinem Code ebenfalls angepasst, siehe Zeile 20 in https://github.com/Tobiaswk/carwingsflutter/blob/master/android/app/src/main/java/dk/kjeldsen/carwingsflutter/CarwingsSession.java . Er nutzt Carwings zwar auf der Java Plattform. Aber das ist bei einer Basis ULR nicht relevant.

Etwas anderes ist es mit dem zusätzlichen Parameter beim Aufbau der HTTPS Session. Es ist gut möglich, dass der nur auf einem PC oder nur mit einer neuen Python Version nötig ist (ich nutze 3.12). Der zusätzliche Parameter sollte also erst auf einem Pi probiert werden, was ich bislang aber nicht kann.

benderl commented 5 months ago

Bitte im Forum nach jemandem fragen, der die Anpassung testen und auch beurteilen kann, ob der Header notwendig ist.

mekrapp commented 5 months ago

Ich werde den Vorschlag mit dem Aufruf im Forum probieren.

Parallel schaue ich gerade, ob ich aus meinem Bekanntenkreis einen Pi ausleihen kann. Dort würde ich mein zum Hauptprogramm mutiertes SoC_Leaf.py zusammen mit responses.py und dem pycarwings2.py mit den hier genannten Änderungen testen (mal mit dem zusätzlichen Parameter im HTTPS-Aufbau, mal ohne)

ddraeyer commented 5 months ago

Ich habe mit zwei Versionen von modifizierten pycarwings2.py erfolgreich getestet. Variante 1: Nur API Endpoint URL modifiziert auf BASE_URL = "https://gdcportalgw.its-mo.com/api_v230317_NE/gdc/"

Variante 2: API Endpoint URL und User-Agent modifiziert auf BASE_URL = "https://gdcportalgw.its-mo.com/api_v230317_NE/gdc/" und req = Request('POST', url=BASE_URL + endpoint, data=params, headers={"User-Agent": ""}).prepare()

Umgebung: a) pi@openWBtest:~ $ cat /etc/os-release PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)" NAME="Raspbian GNU/Linux" VERSION_ID="9" VERSION="9 (stretch)" ID=raspbian ID_LIKE=debian HOME_URL="http://www.raspbian.org/" SUPPORT_URL="http://www.raspbian.org/RaspbianForums" BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

b) pi@openWBtest:~ $ cat /var/www/html/openWB/web/version 1.9.304.0

c) sudo python /var/www/html/openWB/modules/soc_leaf/soc.py $username $password $CHARGEPOINT läuft fehlerfrei durch.

d) Ein Auszug aus /var/www/html/openWB/ramdisk/soc.log schaut gut aus und weist keine Fehler auf: 2024-06-07 18:18:08,445 - requests.packages.urllib3.connectionpool - DEBUG - Starting new HTTPS connection (1): gdcportalgw.its-mo.com 2024-06-07 18:18:10,085 - root - DEBUG - LP1: Update soctimer to 11 2024-06-07 18:18:10,134 - requests.packages.urllib3.connectionpool - DEBUG - https://gdcportalgw.its-mo.com:443 "POST /api_v230317_NE/gdc/BatteryStatusRecordsRequest.php HTTP/1.1" 200 None 2024-06-07 18:18:10,138 - pycarwings2 - DEBUG - Response HTTP Status Code: 200 2024-06-07 18:18:10,139 - pycarwings2 - DEBUG - Response HTTP Response Body: {"status":200,"VoltLabel":{"HighVolt":"240","LowVolt":"120"},"BatteryStatusRecords":{"OperationResult":"START","OperationDateAndTime":"07.Jun 2024 18:13","BatteryStatus":{"BatteryChargingStatus":"NOT_CHARGING","BatteryCapacity":"240","BatteryRemainingAmount":"212","BatteryRemainingAmountWH":"31680","BatteryRemainingAmountkWH":"","SOC":{"Value":"88"}},"PluginState":"CONNECTED","CruisingRangeAcOn":"231000","CruisingRangeAcOff":"241000","TimeRequiredToFull":{"HourRequiredToFull":"6","MinutesRequiredToFull":"30"},"TimeRequiredToFull200":{"HourRequiredToFull":"4","MinutesRequiredToFull":"0"},"TimeRequiredToFull200_6kW":{"HourRequiredToFull":"2","MinutesRequiredToFull":"0"},"NotificationDateAndTime":"2024\/06\/07 16:13","TargetDate":"2024\/06\/07 16:13"}} 2024-06-07 18:18:10,147 - root - DEBUG - LP1: Battery status 88 2024-06-07 18:18:11,149 - root - DEBUG - LP1: Request SoC Update

mekrapp commented 5 months ago

Das ging schnell! Super, vielen Dank! Die zweite Änderung bzgl. "User-Agent" ist auf der OpenWB also nicht nötig. Eher ein Thema für eine andere Umgebung wie meinen PC und/oder meine Python Version. @benderl Wie machen wir weiter? Soll ich noch einen PR für nur die erste Änderung einstellen?

benderl commented 5 months ago

Bitte keinen neuen PR, damit die Beiträge hier auch erhalten bleiben. Füge Deinem Branch einfach noch einen zweiten Commit hinzu, der die Änderung am Haeder rückgängig macht.

mekrapp commented 5 months ago

Erledigt, jetzt steht in meinem Code nur noch das URL Update

mekrapp commented 5 months ago

Kann ich noch etwas tun? Den Failing check oben verstehe ich nicht.

benderl commented 5 months ago

Der Fehler ist unabhängig von Deinem PR. Sieht so aus, als wäre Python 3.5 nun endgültig End-Of-Life.

mekrapp commented 5 months ago

Super, vielen Dank für den Merge