Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a SoC module for Nissan Leaf till MY 2019 #1682

Open
wants to merge 30 commits into
base: master
Choose a base branch
from

Conversation

mekrapp
Copy link
Contributor

@mekrapp mekrapp commented Jun 19, 2024

Folder "leaf" added to folder "packages/modules/vehicles".
Empty module init.py added into folder leaf.
Based on examples from other cars within packages/modules/vehicles the module config.py was created and added.
Based on examples from other cars the module soc.py was created and added.
The function fetch_soc() within soc.py was derived from snaptec/openWB/blob/master/modules/soc_leaf/soc.py (V1.9)
The modules pycarwings2.py and responses.py have been taken over from snaptec/openWB/blob/master/modules/soc_leaf/ (V1.9)

I have already tested successfully the function fetch_soc() within soc.py together with pycarwings2.py and responses.py in combination with my Leaf MY2018 and a Windows PC.
The module config.py and the other parts within soc.py besides fetch-soc()) were not tested so far.
So the whole leaf package needs still to be tested in an openWB V2 environment.

Copy link
Contributor

@LKuemmel LKuemmel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hast du eine openWB mit software2 und einen Leaf zum testen? Dann kann ich deinen PR in einen Feature-Branch mergen, dann kannst du über das UI ein Update darauf machen.

packages/modules/vehicles/leaf/soc.py Outdated Show resolved Hide resolved
Comment on lines 1 to 13
# Copyright 2016 Jason Horne
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Es ist leider nicht möglich einen Teil der Software unter eine Lizenz zu stellen. pycarwings2 kann aber auch über pip installiert werden. Dazu in requirements.txt pycarwings2==2.14 ergänzen. Dann wird das Paket beim Starten installiert.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pycarwings2 ist in V1.9 wie in meinem soc-draft eingebunden. Siehe hier:
https://github.com/snaptec/openWB/blob/master/modules/soc_leaf/pycarwings2.py
Wenn es in V1.9 genutzt wird, dann muss dafür ja früher mal ein OK eingeholt worden sein. Oder?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wenn ich auf die Zusammenfassung https://de.wikipedia.org/wiki/Apache-Lizenz#Eigenschaften schaue, dann sehe ich auch kein Problem, pycarwings2 weiterhin zu nutzen.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ja, in 1.9 ist das so gewesen. In software2 verfolgen wir eine anderen Linie. Hier wird die komplette Software unter eine Lizenz gestellt.
Bitte probiere, pycarwings über pip zu installieren. Vielleicht hat sich damit auch gleich das Crypto.Cipher-Problem gelöst.
Die imports musst du dann wieder auf import pycarwings2 ändern.
In der requirements.txt pycarwings2==2.14 hinzufügen und dann mit sudo systemctl restart openwb2.service den Sercvice neu starten. Dann wird das Package installiert. Das siehst du dann auch im main.log.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Die Apache Lizenz ist nach meinem Verständnis ein Copy-Left und kein Copyright. Der beschriebene Lizenz-Umweg mag für Testzwecke gehen und für einige Nutzer von V2 ein möglicher Workaround sein. Das ist aber keine allgemeine Lösung für OpenWB V2 Nutzer mit einem älteren Leaf oder NV200. Mit dem vorgeschlagenen Workaround sind viele überfordert. Wie müsste eine Lösung aussehen, die man mit einem normalen Softwareupdate aufspielen kann?

Das Crypto.Cipher-Problem überschaue ich noch nicht. In der V1.9 ist Crypto.Cypher anscheinend noch enthalten. Sonst würde pycarwings2 dort ja nicht laufen.
Ich musste auf meinem PC mit Python 3.12 zusätzlich Pycryptodome mit "pip install pycryptodome" installieren, um Crypto.Cipher verfügbar zu haben. Inwieweit Crypto.Cipher bereits/noch auf der OpenWB mit V2 verfügbar ist, kann ich nicht sagen. Bitte prüfen.

Copy link
Contributor

@LKuemmel LKuemmel Jul 3, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Was für ein Workaround? Die requirements.txt ist der Standardweg, um nach einem Softwareupdate fehlende Python-Packages zu installieren. Der Endbenutzer muss dafür gar nichts tun.

pycryptodome ist nicht vorhanden. Aber ist das überhaupt erforderlich, wenn man pycarwings über den Paketmanager installiert?

EDIT: In der Alpha wurde es mit bimmer-connected installiert.

openwb@openwb-2:~ $ pip show pycryptodome
Name: pycryptodome
Version: 3.20.0
Summary: Cryptographic library for Python
Home-page: https://www.pycryptodome.org
Author: Helder Eijs
Author-email: [email protected]
License: BSD, Public Domain
Location: /home/openwb/.local/lib/python3.9/site-packages
Requires:
Required-by: bimmer-connected

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gut, die Crypto-Software ist also schon als Bibliothekspaket in V2.14 enthalten.

Ich hatte den (Um-)Weg über pip und requirements.txt nicht verstanden und angenommen, jeder V2.14 Anwender muss hier selbst einsteigen und pycarwings manuell installieren.

Jetzt fehlt nach wie vor noch eine Ausprobe des Leaf-Moduls im V2.14 Umfeld.
ddraeyer schlägt unten die Ausprobe eines V2.14 Abbildes auf einer VM mit Debian 11 vor.
Wäre das ausreichend? Oder muss der Test auf einer OpenWB mit RPi und V2.14 laufen?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hallo @mekrapp

Ausreichend ist es nicht. Sobald es jedoch als auf der VM als lauffähig gemeldet ist, werde ich sofort auf dem RasPi mit openWB 2.14 einen Test durchführen. Bitte jetzt auf der VM bis zur Lauffähigkeit entwickeln.

@mekrapp
Copy link
Contributor Author

mekrapp commented Jun 21, 2024

Hast du eine openWB mit software2 und einen Leaf zum testen? Dann kann ich deinen PR in einen Feature-Branch mergen, dann kannst du über das UI ein Update darauf machen.

Ich habe eine OpenWB Series 2+, jedoch noch mit V1.9.304N, weil es bislang noch kein SoC-Modul für meinen Leaf gab. Ich müsste also erst auf V2.0 umsteigen. Ich denke darüber nach und melde mich nochmals.

@ddraeyer
Copy link

Ich kann wieder helfen. Ich habe einen NISSAN Leaf 2.ZERO Edition (2018), einen RasPi mit openWB 1.9.275 und einen Test-RasPi mit openWB 2.14.

Ich werde mir die Files runterladen und in meiner openWB2 testen.

Bitte beachtet auch meine Thread https://forum.openwb.de/viewtopic.php?p=110908&hilit=myvehicle#p110908. Diese Aufgabe muss nämlich auch noch gelöst werden. Aber jetzt zuerst Schritt für Schritt. Ich hätte es übrigens in eine paar Tagen auch versucht mit der Zufügung von pycarwings2.py im vehicle-Folder. Das war also auch meine Idee. Ich war einfach nicht so schnell wie mekrapp.

@ddraeyer
Copy link

Hast du eine openWB mit software2 und einen Leaf zum testen? Dann kann ich deinen PR in einen Feature-Branch mergen, dann kannst du über das UI ein Update darauf machen.

Der Code ist auf dem RasPI mit openWB2 2.14 noch nicht lauffähig. In main.log war erkennbar, dass das SoC-Modul nicht geladen wurde. Ich musste in zwei Files
import pycarwings2
ersetzen durch
from modules.vehicles.leaf import pycarwings2

Jetzt werden jedoch in der main.log andere Fehler geworfen, die darauf deuten, dass ungültige oder unvollständige Methoden aufgerufen werden.

Es geht also nicht ohne Beschaffung eines RasPi für die Entwicklung und fürs Debuggen. Ich weiss nicht, ob openWB2 auch in einer VM auf dem Intel-PC lauffähig ist (Raspberry Pi Desktop for PC or Mac).

Hier noch Know How für den Entwicklungs-RasPi:

  1. User openwb mit einem Passwort ausstatten,
  2. Es ist hilfreich /var/www/html/openWB/modules/soc_leaf aus openWB 1.9 einzukopieren und manuell zu testen, ob
    sudo python2 /var/www/html/openWB/packages/modules/soc_leaf/soc.py <my_username> <my_password> 1 fehlerfrei durchläuft (die Zeile mit dem leeren User-Agent ist hier erforderlich).
    Vorgängig muss python2 installiert werden:
    sudo apt-get install python2
    sudo python2 get-pip.py
    sudo pip2 install requests
    pycarwings2.py ruft die Methode Crypto.Cipher auf. Das muss zuerst installiert werden:
    sudo pip2 uninstall crypto
    sudo pip2 uninstall pycrypto
    sudo pip2 install pycryptodome

Python3 kennt pycryptodome bereits.
Der Test wirft Fehler:
openwb@openWB:/var/www/html/openWB/packages/modules/vehicles/leaf $ sudo python3 soc.py <my_user> <my_password> 1
Traceback (most recent call last):
File "/var/www/html/openWB/packages/modules/vehicles/leaf/soc.py", line 7, in
from helpermodules.cli import run_using_positional_cli_args
ModuleNotFoundError: No module named 'helpermodules'

@mekrapp
Copy link
Contributor Author

mekrapp commented Jun 21, 2024

Zuerst einmal Danke an ddraeyer.

Bei dem Import war ich mir nicht sicher, ob es reicht, pycarwings2 einfach aus dem gleichen Ordner wie soc.py mit "import pycarwings2" zu laden. Über die Ordnerstruktur läuft es also. Auch gut. Das ändere ich ab. (ich hatte sogar schon einmal eine Version damit)

Bei dem geworfenen Fehler bin ich etwas verwundert, weil z.B. in BMW soc.py und in KIA soc.Py der gleiche Import
"from helpermodules.cli import run_using_positional_cli_args" steht. die Zeile habe ich 1:1 übernommen..
So wie ich die Fehlermeldung verstehe, findet er den Pfad "helpermodules" nicht.
Probiere bitte mal
from packages.helpermodules.cli import run_using_positional_cli_args

Wenn man in den Ordner helpermodules.cli schaut, dann gibt es dort ein py Modul "_run_using_positional_cli_args.py", also mit einem vorangestellten Unterstrich.
Vielleicht braucht man den Unterstrich auch im import-Befehl.

Außerdem gibt es weder den Import Befehl noch die Zeilen
def main(argv: List[str]):
run_using_positional_cli_args(leaf_update, argv)
im SoC Mustermodul auf https://github.com/openWB/core/blob/master/docs/samples/sample_vehicle/soc.py

Letztlich geht es hier darum, wie die ganzen Module zum User und Passwort für den Login in den Nissan Server kommen.

@mekrapp
Copy link
Contributor Author

mekrapp commented Jun 21, 2024

pycryptodome musste ich meinem Python 3 auf dem PC auch erst hinzufügen. Ohne das Paket gibt es kein Crypto.Cipher

mekrapp and others added 2 commits June 22, 2024 11:10
Ich habe Anzahl der Wartezyklen noch von 3 auf 9 erhöht, also insgesamt 3 Minuten Wartezeit. Bis dahin müsste der Nissan Server den Leaf in jedem Fall erreicht haben. Falls nicht, kehrt requestSoc() nach drei Minuten ohne Update des SoC auf dem Server zurück und das anschließende readSoc holt sich dann halt nur den alten SoC vom Server. In der Zeit haben die Funktionen von pycarwings2 und responses auch genug Zeit für Einträge ins Logging für eine evtl. notwendige Fehleranalyse.
@mekrapp
Copy link
Contributor Author

mekrapp commented Jun 22, 2024

Im Einstellungsbereich war ich bislang noch nicht und es gibt dort bislang auch kein vehicle.vue für den Leaf. Ich vermute mal, dass das erforderlich ist, um das komplette SoC-Package für den Leaf in einer OpenWB 2.14 Umgebung testen zu können. Ich hatte mich eh schon gefragt, wie das ganze SoC Package an die User-ID und das Passwort für den Nissan Server kommt.
@ddraeyer bist Du bitte so nett und legst ein vehicle.vue für den Leaf an. Da hast Du ggü. mir einen Wissensvorsprung.

@ddraeyer
Copy link

Im Einstellungsbereich war ich bislang noch nicht und es gibt dort bislang auch kein vehicle.vue für den Leaf. Ich vermute mal, dass das erforderlich ist, um das komplette SoC-Package für den Leaf in einer OpenWB 2.14 Umgebung testen zu können. Ich hatte mich eh schon gefragt, wie das ganze SoC Package an die User-ID und das Passwort für den Nissan Server kommt. @ddraeyer bist Du bitte so nett und legst ein vehicle.vue für den Leaf an. Da hast Du ggü. mir einen Wissensvorsprung.

Nein, zum Testen ist es noch nicht erforderlich. Unter Konfiguration | Fahrzeuge findet sich dann unter Leaf bei 'Einstellungen für SoC-Modul "Leaf"' eine rudimentäre XML-Struktur:
{
"user_id": null,
"password": null
}

Dort kann man seine Nissan-User-ID und sein zugehöriges Pw eintippen und speichern.

Prüfen kann man das vom Windows-PC aus, wenn man darauf MQTT Explorer installiert hat. Damit kann man sich den Mosquito von openWB2 anschnallen und in die Topics gucken.

Ich werde folglich erst zu einem späteren Zeitpunkt helfen, das ganz am Schluss noch erforderliche "beautifying" fürs GUI beizusteuern.

Den Namen "Leaf" sollten wir noch diskutieren. Bei meinen Experimenten nannte ich das vehicule "Nissan". Begründung: pycarwings2.py unterstützt nicht nur den Nissan Leaf sondern auch den NV200. Wie es mit dem Nissan Ariya steht, entzieht sich meiner Kenntnis. Aufs neutrale "Nissan" kam ich, weil ich mich an "Renault" orientierte. Im Forum gibt es eine Liste für die von openWB2 unterstützte Renault-Modelle. Mir schwebt vor, es für Nissan gleichartig zu handhaben.

Und für den Fall, dass der Ariya eine andere Bibliothek als pycarwings2 benötigen sollte, kannt dann diejenige Person, welche die Erweiterung an die Hand nimmt, einfach im GUI noch einen Parameter zufügen à la
{
"user_id": null,
"password": null,
"library": null
}

@ddraeyer
Copy link

Ich habe heute auf dem Windows-PC die Virtualisierungssoftware Oracle VirtualBox installiert. Darin kreierte ich eine VM mit "Raspberry Pi Desktop for PC and Mac" (x86, 32-bit). Ich schaffte es leider auf keine Art, die Dependency cryptography zu installieren. Die Installation von openWB2 lief nicht fehlerfrei durch. Es konnte kein Wheel für cryptography gebildet werden. Es wird angemeckert, dass das erforderliche rust 1.63.0 nicht installiert werden kann. Für i686 gibt es max. 1.48.0.

Fürs Testen führt somit kein Weg daran vorbei, einen RasPi >= 3B zu beschaffen.

Mit MQTT Explorer können ebenfalls Fehlermeldungen erkannt werden.

image

@MartinRinas
Copy link
Contributor

MartinRinas commented Jun 22, 2024

Für die Entwicklung kann man relativ gut eine debian12 (oder 11? Kann ich nochmal nachschauen) VM nutzen, die kommt dem Raspberry Pi Recht nahe. Nutze ich selbst auch.

Wobei gerade für die Validierung von Bibliotheken und Abhängigkeiten ein Raspberry Pi notwendig ist. Bin da selbst mal reingelaufen.

@mekrapp
Copy link
Contributor Author

mekrapp commented Jun 23, 2024

Ich würde auch erst einmal direkt auf dem Pi mit OpenWB2.14 weiterprobieren.
@ddraeyer konntest Du das Problem mit den helpermodules schon lösen?
Da klemmte es ja wohl schon beim Import.

@ddraeyer
Copy link

Ich würde auch erst einmal direkt auf dem Pi mit OpenWB2.14 weiterprobieren. @ddraeyer konntest Du das Problem mit den helpermodules schon lösen? Da klemmte es ja wohl schon beim Import.

Nein, habe ich nicht. Das war ja nur mein Versuch, soc.py einfach ab Kommandozeile aufzurufen. Das hat unter openWB 1.9 funktioniert und den Output in die soc.log geschrieben. soc.log wird unter 1.9 regelmässig gelesen und für die Anzeige im Browser-GUI genutzt. Unter 2.14 muss der Output ins Topic geschrieben werden (unter get|soc (siehe meinen Screenshot)). Ich weiss somit nicht, ob ein manueller Aufruf unter 2.14 auch machbar ist.

Aus meiner Sicht benötigt der Programmierer entweder einen RasPI, um selbst testen und debuggen zu können oder alternativ eine VM mit Debian 11 (bullseye).

@ddraeyer
Copy link

Ich habe eine VM mit Debian 11 (amd64) aufgebaut und darin erfolgreich openWB2 installiert. Nach der Einrichtung einer fixen IP-Adresse und der Nachinstallation von SSH und cURL in Debian (sudo apt-get install openssh-server curl) lief der Installationsbefehl curl -s https://raw.githubusercontent.com/openWB/core/master/openwb-install.sh | sudo bash wie Butter durch.

@mekrapp
Copy link
Contributor Author

mekrapp commented Jun 24, 2024

Das klingt sehr gut. Wie weit bist Du dabei gekommen? Nur die OpenWB V2.14 erfolgreich in der VM installiert oder auch schon das Modul SoC Modul für den Leaf erfolgreich getestet?

@ddraeyer
Copy link

Das klingt sehr gut. Wie weit bist Du dabei gekommen? Nur die OpenWB V2.14 erfolgreich in der VM installiert oder auch schon das Modul SoC Modul für den Leaf erfolgreich getestet?

In der VM wurde openWB 2.14 frisch installiert und kurz gestartet. Die Konfigurationsmasken im Browser-GUI sind fehlerfrei zugänglich. Die Files vom Pull Request sind noch nicht eingespielt worden. Es liefen somit noch keine Tests. Auch hat der User openwb noch kein Pw.

Ein ZIP-File der VM habe ich auf Google Drive gelegt. https://drive.google.com/file/d/1g4xyowe6OS0p3WwpZzGSUGkSDVAWnE9h/view?usp=drive_link
Sie kann runtergeladen werden und nach dem Unzippen in den Ordner der VMs von Oracle VirtualBox gelegt werden und dort gestartet werden.

Login / Pw: pi / qwertz12345 (pi gehört zur Gruppe sudo)
Nach dem Login kann die locale geändert werden von de-CH UTF-8 auf z.B. de-DE UTF-8. Weiter kann die Tastatur geändert werden von Schweiz | Deutsch auf z.B Deutschland | Deutsch.

Es ist eine fixe IP-Adresse konfiguriert. Sie kann geändert werden mit:
sudo nmtui
Danach:
sudo init 6

Damit wäre dann alles vorbereitet, um von Windows aus per PuTTY auf die gestartete VM zuzugreifen. Dann können die eigenen Tests beginnen. Wenn der User openwb mit einem Pw ausgestattet wurde, können die Files vom Pull Request per WinSCP auf die VM gelegt werden und zwar nach openwb@debian11:/var/www/html/openWB/packages/modules/vehicles/leaf.

Viel Erfolg beim Runterladen, Unzippen und anschliessenden Testen!

@LKuemmel
Copy link
Contributor

Bitte wie oben beschrieben die Datei pycarwings2.py entfernen und in requirements.txt pycarwings2==2.14 hinzufügen, dann wird die Bibliothek beim Start installiert.
Danach kann auch gerne ein PR für einen Feature-Branch gestellt werden, dann kann zum Testen der Feature-Branch im UI unter System -> Entwicklungszweig ausgewählt werden und die Änderungen aus dem PR müssen nicht händisch eingefügt werden. (Bei Bedarf bitte hier kurz Bescheid geben, dann erstelle ich einen neuen Branch.)

empty line at end of file removed accoring to warning from test run on Jul 15.
still a LF inside, that I can't delete. So I will replace  __init__.py by a really empty file to get flake 8 quiet
@mekrapp
Copy link
Contributor Author

mekrapp commented Aug 24, 2024

@LKuemmel
Ich habe mir heute den Check angeschaut und alle "Schönheitsfehler" bereinigt, die Flake8 in meinem SoC-Code für den Leaf angemeckert hat.
Im Check taucht jetzt eine Fehlermeldung in einem ganz anderen Code Bereich auf (packages/modules/common/simcount/_simcounter_store.py), mit dem mein SoC Code m.E. nichts zu tun hat. Vllt. hätte ich nicht jede Änderung an anderer Stelle in meinen Fork übernehmen sollen.
Kann ich zu dieser Check Meldung noch etwas beitragen?

@mekrapp
Copy link
Contributor Author

mekrapp commented Aug 24, 2024

Noch etwas zum Eintrag in requirements.txt:
Eigentlich gehören pycarwings2.py und responses.py zusammen. Beide haben das Copyright 2016 von Jason Horne und stehen unter der Apache Lizenz. M.E. müssen dann beide Module in requirements.txt eingetragen werden. Wie würde dann der Eintrag für responses.py aussehen?

@mekrapp
Copy link
Contributor Author

mekrapp commented Aug 24, 2024

Außerdem ist der Modulname "responses" doch recht allgemein und es besteht eine hohe Wahrscheinlichkeit, dass es an anderer Stelle bereits ein Modul oder gar Paket mit diesem Namen gibt. Es könnte deshalb Importprobleme auslösen, wenn dieses Modul an anderer Stelle als in ./vehicles/leaf liegt. Soll ich es umbenennen, z.B. in "pycarwings2_responses"? Den zugehörigen Import in pycarwings2 müsste ich dann entsprechend anpassen.

@mekrapp
Copy link
Contributor Author

mekrapp commented Aug 24, 2024

Zuletzt noch die Frage, wo ich die Module pycarwings2 und responses statt in .vehicles/leaf ablegen soll? In Fall eines Umzugs muss ich nämlich auch noch den Import von pycarwings2 innerhalb soc.py anpassen.
Bislang steht dort "from modules.vehicles.leaf import pycarwings2"

@LKuemmel
Copy link
Contributor

LKuemmel commented Aug 28, 2024

@LKuemmel Ich habe mir heute den Check angeschaut und alle "Schönheitsfehler" bereinigt, die Flake8 in meinem SoC-Code für den Leaf angemeckert hat. Im Check taucht jetzt eine Fehlermeldung in einem ganz anderen Code Bereich auf (packages/modules/common/simcount/_simcounter_store.py), mit dem mein SoC Code m.E. nichts zu tun hat. Vllt. hätte ich nicht jede Änderung an anderer Stelle in meinen Fork übernehmen sollen. Kann ich zu dieser Check Meldung noch etwas beitragen?

Das ist eine warning, der Test läuft trotzdem durch. Das Problem mit der configurable beheben wir, wenn die requirements.txt geändert ist.

@LKuemmel
Copy link
Contributor

Die anderen Fragen sollten sich erledigen, wenn Du pycarwings2 wie oben besprochen über die requirements.txt installierst. Bitte passe die requirements.txt in Deinen PR entsprechend an. Dann können die beiden Dateien aus dem PR entfallen und die Importe erfolgen direkt aus pycarwings2. (from pycarwings2 import pycarwings2bzwfrom pycarwings2 import responses)

@LKuemmel LKuemmel mentioned this pull request Aug 28, 2024
pycarwings2 added to load this library (for the SOC module of Nissan Leaf) during start
@mekrapp
Copy link
Contributor Author

mekrapp commented Aug 29, 2024

Ich habe in meinem branch in requirements.txt "pycarwings2==2.14" hinzugefügt.

@benderl
Copy link
Contributor

benderl commented Aug 30, 2024

Ich habe in meinem branch in requirements.txt "pycarwings2==2.14" hinzugefügt.

Dann bitte auch die Dateien pycarwings2.py und response.py aus diesem PR entfernen. Die werden jetzt aus dem installierten Paket verwendet.

mekrapp and others added 3 commits August 30, 2024 11:05
File deleted at this position as requested
File deleted at this position as requested
@mekrapp
Copy link
Contributor Author

mekrapp commented Aug 30, 2024

Ich habe in meinem branch in requirements.txt "pycarwings2==2.14" hinzugefügt.

Dann bitte auch die Dateien pycarwings2.py und response.py aus diesem PR entfernen. Die werden jetzt aus dem installierten Paket verwendet.

erledigt

@LKuemmel LKuemmel added this to the 2.1.6 Step 3 milestone Aug 30, 2024
@mekrapp
Copy link
Contributor Author

mekrapp commented Aug 31, 2024

@LKuemmel Danke für den Abschluss. Wo finde ich die beiden Module pycarwings2 und responses ab nun in Github?

@LKuemmel
Copy link
Contributor

LKuemmel commented Sep 3, 2024

Es wird das pycarwings2 Package aus dem Paketmanager genutzt: https://pypi.org/project/pycarwings2/
Auf GitHub hier gepflegt: https://github.com/filcole/pycarwings2

@mekrapp
Copy link
Contributor Author

mekrapp commented Sep 4, 2024

Das Paket ist dort seit 2-3 Jahren nicht mehr gepflegt worden und läuft definitiv nicht mehr. Im Mai hat Nissan die URL zu seiner API geändert. Das pycarwings2 von filcole enthält z.B. noch die alte URL. Ich habe damals das in V1.9 integrierte pycarwings2 Modul aktualisiert und in V1.9.304N einfließen lassen. Seither kann V1.9 den Leaf wieder auslesen.
Im Grundsatz begrüße ich, Software Module nur an einer Stelle zu pflegen und andere binden die Pakete nur noch in ihre Projekte ein. Das setzt aber voraus, dass die Module dort auch gepflegt werden. Da die neue URL seit Mai dort nicht eingepflegt ist, habe ich so meine Zweifel. Die Pakete von filcole und V1.9 differieren auch noch an anderer Stelle, z.B. die in diesem PR geänderte While-Schleife. Das muss vor einer Verwendung ebenfalls geprüft und angepasst werden.
Ich kann dort einen PR versuchen, wenn ich die Zeit dafür finde.

@mekrapp
Copy link
Contributor Author

mekrapp commented Sep 9, 2024

@LKuemmel ich habe mich inzwischen beim pycarwings2 Package von filcole umgeschaut. Es gibt dort seit 18. Mai einen PR, um die URL der Nissan API zu aktualisieren: filcole/pycarwings2#47
Der PR wurde geprüft und bestätigt. Aber nur filcole kann den merge durchführen. Leider reagiert er weder auf den PR noch die vielen pings an ihn. Damit ist das Package im jetztigen Zustand unbrauchbar.
Es gibt ein Nachfolge Package von remuslazar auf https://github.com/ev-freaks/pycarwings3
Ich schaue es mir bzgl. Tauglichketi für die OpenWB an.

@ddraeyer
Copy link

ddraeyer commented Sep 9, 2024

Ich habe mir die Comments der vergangenen 3 Wochen angeschaut. Ich habe noch nicht genau verstanden, ob es bereits etwas gibt, was ich auschecken könnte, um auf meiner VM mit Debian11 oder auf meinem Raspi mit openWB2 zu testen. Bitte meldet Euch, wenn ich Tests durchführen soll.

@mekrapp
Copy link
Contributor Author

mekrapp commented Sep 11, 2024

@ddraeyer Derzeit gibt es nichts zu testen.
@LKuemmel Der PR steckt in einer Sackgasse.
Das in OpenWB1.9 funktionierende pycarwings2 Paket soll aus Lizenzgründen nicht in V2.0 eingesetzt werden.
Das stattdessen zu importierende pycarwings2 Paket ist ungepflegt und funktioniert ohne Merge des dortigen PR #47 nicht.
Das Nachfolgepaket pycarwings3 ist nicht rückwärtskompatibel zu pycarwings2 und damit für OpenWB nicht 1:1 einsetzbar.

@LKuemmel LKuemmel removed this from the 2.1.6 Step 3 milestone Sep 17, 2024
@LKuemmel
Copy link
Contributor

Was genau meinst Du mit "ist nicht 1:1 einsetzbar"?

Das Beispiel https://github.com/ev-freaks/pycarwings3/blob/master/examples/get-leaf-info.py entspricht doch in etwa, was in der api.py ablaufen soll. Statt asnycio.run, kannst Du auch eine asyncio event loop benutzen, so wie hier:

soc, range = loop.run_until_complete(_fetch_soc(user_id, password, vin, vnum))

@mekrapp
Copy link
Contributor Author

mekrapp commented Oct 11, 2024

Bislang importiere ich in soc.py das Paket pycarwings2 und nutze in der Funktion fetch_soc() mehrere Funktionen aus pycarwings2 wie get_leaf(), get_latest_battery_status(), etc.
Fetch_soc() wird aufgerufen und liefert ca. 40 sec später den SoC Wert zurück. Fertig. Analog lief das auch schon in OpenWB V1.9.

In pycarwings3 gibt es zwar prinzipiell die gleichen Funktionen. Aber das läuft nun alles asynchron unter asyncio mit await ab. Ich habe keine Ahnung, welche Konsequenzen das für soc.py und darüber hinaus hat. Gibt es da evtl. Kollisionen mit anderen asynchronen Prozessen? Müssen potentiell neue Exceptions abgefangen werden? Gibt es in pycarwings2 vs. pycarwings3 Unterschiede bei den Übergabeparametern der einzelnen Funktionen? Zumindest rund ums Handling der base_URL meine ich Unterschiede gesehen zu haben. usw. usw. ...

Remus selbst schreibt: The library underwent significant changes, especially adopting asynchronous programming, which led to a break in backward compatibility with pycarwings2.

Mit einem einfachen "import pycarwings3" statt "import pycarwings2" ist es jedenfalls nicht getan. Und damit ist pycarwings3 für mich auch kein 1:1 Ersatz.

Außerdem ist pycarwings3 noch in einer jungen Phase (aktuell V0.7.7) und wird sicherlich noch einige Updates sehen. Ist das Paket in diesem Zustand schon in OpenWB willkommen?

@LKuemmel
Copy link
Contributor

Lieber das pycarwings3-Paket, das noch gepflegt wird, als das pycarwings2-paket, dass schon seit 2 Jahren keine Updates mehr enthält.
Für die async/await-Thematik kannst Du Dir das SoC-Modul von bmwbc anschauen, dort wird das auch verwendet: https://github.com/openWB/core/blob/master/packages/modules/vehicles/bmwbc/api.py Die Exceptions ändern sich nicht, zu Kollisionen führt das auch nicht, da das SoC-Modul in einem separaten Thread läuft.
Das Paket enthält ja auch noch ein Beispiel: Leaf-Beispiel https://github.com/ev-freaks/pycarwings3/blob/master/examples/get-leaf-info.py

Ich würde lieber auf das neue Paket setzen, das noch gepflegt wird, als auf ein altes, wo man dann hoffen muss, dass es keine allzu großen Änderungen von Nissan gibt, weil sonst die Abfrage auch nicht mehr funktioniert.

@mekrapp
Copy link
Contributor Author

mekrapp commented Oct 23, 2024

OK, ich schaue es mir an.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants