EVNotiPi
-
- Beiträge: 237
- Registriert: Mo Mai 10, 2021 10:07 pm
- Has thanked: 24 times
- Been thanked: 4 times
Re: EVNotiPi
Jetzt muss ich mal blöd fragen:
Wo bekommt denn das EVNotiPi den SoC her? Aus der Cloud vom Fahrzeughersteller oder von einem OBD-Interface?
Wo bekommt denn das EVNotiPi den SoC her? Aus der Cloud vom Fahrzeughersteller oder von einem OBD-Interface?
Re: EVNotiPi
Ich möchte das evSoc-Thema nochmal aufgreifen, auch wenn es eine Nische (openWB 2.x + Ioniq/Kona 2018 oder Outlander) bleiben wird. Heavendenied scheint Recht gehabt zu haben, die Sache scheint an den topics in der evSoc.py
bzw. der Verarbeitung der Werte hängen zu bleiben. evSoc stellt damit sicher, dass der ODBII-Dongle beim Einstecken geweckt, aber bei gestoppter Ladung wieder schlafen gelegt wird, um die 12V-Batterie nicht zu entladen.
Bei manuellem Aufruf der evSoc.py wird der SOC auf das in config.yaml definierte topic korrekt an die openWB übergeben.
Wo ich nicht weiter komme, ist, wie die Werte von charge_state und plugged_state mit dem code s.u. korrekt zu verarbeiten sind.
Ich habe den mqtt-Explorer bemüht, der "true" oder "false" ausgibt, in evSoc.py erfolgt die Fallunterscheidung aber nach einem Integer-Wert Kann so ja nicht klappen.
Jemand mit Python-Kenntnissen hat das bestimmt in einer Minute umgeschrieben, meine TurboPascal-Fragmente von vor 30 Jahren reichen dazu leider nicht...
Code: Alles auswählen
client.subscribe("openWB/internal_chargepoint/0/get/charge_state")
client.subscribe("openWB/internal_chargepoint/0/get/plug_state")
Bei manuellem Aufruf der evSoc.py wird der SOC auf das in config.yaml definierte topic
Code: Alles auswählen
openWB/set/vehicle/0/get/soc
Wo ich nicht weiter komme, ist, wie die Werte von charge_state und plugged_state mit dem code s.u. korrekt zu verarbeiten sind.
Ich habe den mqtt-Explorer bemüht, der "true" oder "false" ausgibt, in evSoc.py erfolgt die Fallunterscheidung aber nach einem Integer-Wert
Code: Alles auswählen
if (int(msg.payload) == 0)
Code: Alles auswählen
#################################### MQTT interface ########################################
def on_connect(client, userdata, flags, rc):
if (rc != 0):
log.info("MQTT connect failed with result code " + str(rc))
else:
log.info("MQTT subscribed")
client.subscribe("openWB/internal_chargepoint/0/get/charge_state")
client.subscribe("openWB/internal_chargepoint/0/get/plug_state")
def on_publish(client, userdata, mid):
print("published "+userdata)
def on_message(client, userdata, msg):
global charging
global pluggedEvent
if (msg.topic == "openWB/internal_chargepoint/0/get/charge_state"):
if (int(msg.payload) == 0): # Stopped
log.info("Charging stopped")
charging = False
else:
log.info("Charging started")
charging = True
if (msg.topic == "openWB/internal_chargepoint/0/get/plug_state"):
if (int(msg.payload) == 0): # Unplugged
log.info("Unplugged")
pluggedEvent = 0
else:
log.info("Plugged")
pluggedEvent = 6
Steca Coolcept3 5503 / Hyundai Ioniq vFL / OpenWB series2 Standard+ software 2.1/ SDM630 / evSoc
-
- Beiträge: 693
- Registriert: Do Feb 20, 2020 1:16 pm
- Has thanked: 2 times
- Been thanked: 9 times
Re: EVNotiPi
@mattberlin:
Der wird lokal über OBD ausgelesen. Für ein paar Fahrzeuge klappt das ganz gut (alter Ioniq, Kona, Mitsubishi Ev/Peugeot iOn etc) wenn man einen passenden (günstigen) OBD Dongle hat.
Im Zweifel einfach mal den Thread durchlesen.
@floycion:
Da ich mittlerweile auch auf openWB 2.x umsteigen musste hab ich bei mir nun alles angepasst udn es läuft auch. Ich kann heute Abend mal nachschauen und die geänderte evSoc.py hier einstellen.
Bei mir war aber danach am Ioniq die 12V Batterie leer. Ob das ein blöder Zufall war oder ob ich noch irgendwas and er Abfrage des chargestate falsch ist muss ich noch herausfinden.
Der wird lokal über OBD ausgelesen. Für ein paar Fahrzeuge klappt das ganz gut (alter Ioniq, Kona, Mitsubishi Ev/Peugeot iOn etc) wenn man einen passenden (günstigen) OBD Dongle hat.
Im Zweifel einfach mal den Thread durchlesen.
@floycion:
Da ich mittlerweile auch auf openWB 2.x umsteigen musste hab ich bei mir nun alles angepasst udn es läuft auch. Ich kann heute Abend mal nachschauen und die geänderte evSoc.py hier einstellen.
Bei mir war aber danach am Ioniq die 12V Batterie leer. Ob das ein blöder Zufall war oder ob ich noch irgendwas and er Abfrage des chargestate falsch ist muss ich noch herausfinden.
Gruß,
Jürgen
Jürgen
-
- Beiträge: 693
- Registriert: Do Feb 20, 2020 1:16 pm
- Has thanked: 2 times
- Been thanked: 9 times
Re: EVNotiPi
Also hier mal die evsoc.py die dann mit der openWb 2.1x funktioniert. Es muss ggfs. noch die chargepoint ID angepasst werden.
Und wie geschrieben hats bei mir damit einmal die 12V Batterie entleert. Beim zweiten Fahrzeug aber bisher keine Probleme damit... Das muss ich mir also in ner ruhigen Minute nochmal anschauen.
Update:
Heute morgen war die 12V Batterie ganz leer (letztes Mal ging Innenlicht etc noch, nur starten nicht mehr). Es scheint also noch ein Problem mit der angepassten evsoc.py zu geben.
Frage:
Wer versteht wie genau das funktioniert? Ich hatte es bisher so verstanden, dass nur der SOC abgefragt wird wenn das Auto angeschlossen ist und geladen wird. Aktuell scheint es aber so, dass es immer passiert sobald das Auto nur angeschlossen ist.
Am liebsten wäre mir eigentlich, wenn wirklich nur abgefragt wird, wenn wirklich angeschlossen ist und geladen wird.
Zusätzlich wäre es ganz nett, wenn man einmal pro Tag (am besten Abends weil da steht das Auto eigentlich immer in der Garage) auch nochmal der SOC abgefragt wird. Jemand eine Idee wie man das einbauen könnte?
Und wie geschrieben hats bei mir damit einmal die 12V Batterie entleert. Beim zweiten Fahrzeug aber bisher keine Probleme damit... Das muss ich mir also in ner ruhigen Minute nochmal anschauen.
Update:
Heute morgen war die 12V Batterie ganz leer (letztes Mal ging Innenlicht etc noch, nur starten nicht mehr). Es scheint also noch ein Problem mit der angepassten evsoc.py zu geben.
Frage:
Wer versteht wie genau das funktioniert? Ich hatte es bisher so verstanden, dass nur der SOC abgefragt wird wenn das Auto angeschlossen ist und geladen wird. Aktuell scheint es aber so, dass es immer passiert sobald das Auto nur angeschlossen ist.
Am liebsten wäre mir eigentlich, wenn wirklich nur abgefragt wird, wenn wirklich angeschlossen ist und geladen wird.
Zusätzlich wäre es ganz nett, wenn man einmal pro Tag (am besten Abends weil da steht das Auto eigentlich immer in der Garage) auch nochmal der SOC abgefragt wird. Jemand eine Idee wie man das einbauen könnte?
- Dateianhänge
-
- evSoc.7z
- (3.09 KiB) 31-mal heruntergeladen
Gruß,
Jürgen
Jürgen
Re: EVNotiPi
Hallo Jürgen,
merci für die Rückmeldung.
Die Auswertung des Lade-/Steckerzustands habe ich auch schon mit bool(msg.payload) == False getestet, weil ich dachte, da wird ein boolscher Wert abgerufen. Das Topic in der 1.9 hieß ja auch "openWB/lp/1/boolChargeStat".
Wenn ich dann aber die Ladung in der OpenWB stoppe, und/oder den Stecker abziehe, wird weiterhin
Charging started
Plugged
gepollt. Ich glaube, so wird der Dongle einfach nie schlafen gelegt. Irgendwie müssen chargestate und plugstate anders verarbeitet werden.
Auch string(msg.payload) == false hat nix gebracht.
Frage in den Äther:
Wie müssen folgende Zeilen angepasst werden, damit der Ladezustand (nicht SOC) abgefragt werden kann:
Grüße
Florian
merci für die Rückmeldung.
Die Auswertung des Lade-/Steckerzustands habe ich auch schon mit bool(msg.payload) == False getestet, weil ich dachte, da wird ein boolscher Wert abgerufen. Das Topic in der 1.9 hieß ja auch "openWB/lp/1/boolChargeStat".
Wenn ich dann aber die Ladung in der OpenWB stoppe, und/oder den Stecker abziehe, wird weiterhin
Charging started
Plugged
gepollt. Ich glaube, so wird der Dongle einfach nie schlafen gelegt. Irgendwie müssen chargestate und plugstate anders verarbeitet werden.
Auch string(msg.payload) == false hat nix gebracht.
Frage in den Äther:
Wie müssen folgende Zeilen angepasst werden, damit der Ladezustand (nicht SOC) abgefragt werden kann:
Code: Alles auswählen
if (msg.topic == "openWB/chargepoint/6/get/charge_state"):
if (bool(msg.payload) == False): # Stopped
log.info("Charging stopped")
charging = False
else:
log.info("Charging started")
charging = True
Florian
Steca Coolcept3 5503 / Hyundai Ioniq vFL / OpenWB series2 Standard+ software 2.1/ SDM630 / evSoc
-
- Beiträge: 237
- Registriert: Mo Mai 10, 2021 10:07 pm
- Has thanked: 24 times
- Been thanked: 4 times
Re: EVNotiPi
Jetzt muss ich nochmal blöd fragen:
Ist das so eine Kiste die via Mobilfunk den SoC der Karre in die Cloud schickt?
Ist das so eine Kiste die via Mobilfunk den SoC der Karre in die Cloud schickt?
-
- Beiträge: 693
- Registriert: Do Feb 20, 2020 1:16 pm
- Has thanked: 2 times
- Been thanked: 9 times
Re: EVNotiPi
Nein! Es ist ein OBD dongle in Verbindung mit einem Rasperry Pi der per Bluetooth angebunden wird und per MQTT lokal den SOC in die openWB schreibt.
Bitte thread einfach mal lesen.
@flycion:
Das war bei mir nicht so. Da hat sich der chargestate schon geändert.
Evtl hab ich morgen nochmal kurz Zeit zum testen…
Bitte thread einfach mal lesen.
@flycion:
Das war bei mir nicht so. Da hat sich der chargestate schon geändert.
Evtl hab ich morgen nochmal kurz Zeit zum testen…
Gruß,
Jürgen
Jürgen
-
- Beiträge: 693
- Registriert: Do Feb 20, 2020 1:16 pm
- Has thanked: 2 times
- Been thanked: 9 times
Re: EVNotiPi
@floycion:
Ich glaube jetzt hab ich die (eine) Lösung!
Meine Zeit wo ich mal was programmieren (musste) liegen 20 Jahre zurück, daher bitte um Entschuldigung, wenn das "falsch" oder "unschön" ist, aber zumindest bei mir scheint es so zu funktionieren:
Zur Erklärung:
Ich habe erstmal versucht rauszufinden, was da vom MQTT kommt und dabei fiel mir auf, dass da nicht einfach nur false kommt, sondern eben b'false'
Habe dann rausgefunden, dass dieses b vorne für byte steht. Man muss also erstmal konvertieren. Das mache ich jetzt wie oben zu sehen mit decode("utf-8").
Das hab ich mir erstmal auch wieder ausgeben lassen und gesehen, dass nun wirklich nur noch false zurück kommt. Da dies in dem fall (nach meinem Verständnis) gar nix mit bool zu tun hat, sondern einfach nur ein Text (also String ist) muss man entsprechend mit str() arbeiten.
Bitte mal testen.
Anbei nochmal die vollständige evsoc.py
(Bitte dran denken ggfs die Ladepunkt ID wieder anzupassen)
Wenn das soweit klappt würde ich die Tage mal versuchen die Variablen (z.b. die Ladepunkt ID) auch noch in die config.yaml auszulagern, damit man auch künftig wieder nur noch die anpassen muss und nicht in der evsoc.py "rumpfuschen" muss.
P.S.:
Die Funktionsweise hab ich jetzt auch etwas besser verstanden (glaube ich):
Beim Start wird auf jeden Fall einmal der SOC versucht abzurufen. Wenn plug_state und charge_state false sind wird dann nicht mehr abgerufen.
Ist plug_state hingegen true (bzw einfach nur nicht false) wird pluggedEvent auf 6 gesetzt.
Im Anschluss wird wieder versucht den SOC anzurufen. Klappt das gehts weiter, klappt es nicht wird pluggedEvent um 1 reduziert.
So ist pluggedEvent nach ein paar Durchläufen dann 0 oder kleiner 0 und es werden keine Abfragen mehr gemacht.
Beginnt nun die Ladung wird charging auf True gesetzt und somit startet der Abruf des SOC wieder der nun (weil die Steuergeräte ja an gehen) funktioniert.
Vielleicht kann das ja jemand noch kommentieren.
P.P.S:
Ich hab das auch im Logging nochmal nachverfolgt. Mit der alten Version war "angeblich" charging immer true und daher ging der Abruf weiter, obwohl der pluggedEvent Wert runter ging.
Mit der Version jetzt hört er dann auf mit den Abrufen, sobald pluggedEvent <=0 ist
Bin also wirklich guter Dinge, dass das nun so passt.
Ich glaube jetzt hab ich die (eine) Lösung!
Meine Zeit wo ich mal was programmieren (musste) liegen 20 Jahre zurück, daher bitte um Entschuldigung, wenn das "falsch" oder "unschön" ist, aber zumindest bei mir scheint es so zu funktionieren:
Code: Alles auswählen
def on_message(client, userdata, msg):
global charging
global pluggedEvent
if (msg.topic == "openWB/chargepoint/7/get/charge_state"):
if (str(msg.payload.decode("utf-8")) == 'false'): # Stopped
log.info("Charging stopped")
charging = False
else:
log.info("Charging started")
charging = True
if (msg.topic == "openWB/chargepoint/7/get/plug_state"):
if (str(msg.payload.decode("utf-8")) == 'false'): # Unplugged
log.info("Unplugged")
pluggedEvent = 0
else:
log.info("Plugged")
pluggedEvent = 6
Ich habe erstmal versucht rauszufinden, was da vom MQTT kommt und dabei fiel mir auf, dass da nicht einfach nur false kommt, sondern eben b'false'
Habe dann rausgefunden, dass dieses b vorne für byte steht. Man muss also erstmal konvertieren. Das mache ich jetzt wie oben zu sehen mit decode("utf-8").
Das hab ich mir erstmal auch wieder ausgeben lassen und gesehen, dass nun wirklich nur noch false zurück kommt. Da dies in dem fall (nach meinem Verständnis) gar nix mit bool zu tun hat, sondern einfach nur ein Text (also String ist) muss man entsprechend mit str() arbeiten.
Bitte mal testen.
Anbei nochmal die vollständige evsoc.py
(Bitte dran denken ggfs die Ladepunkt ID wieder anzupassen)
Wenn das soweit klappt würde ich die Tage mal versuchen die Variablen (z.b. die Ladepunkt ID) auch noch in die config.yaml auszulagern, damit man auch künftig wieder nur noch die anpassen muss und nicht in der evsoc.py "rumpfuschen" muss.
P.S.:
Die Funktionsweise hab ich jetzt auch etwas besser verstanden (glaube ich):
Beim Start wird auf jeden Fall einmal der SOC versucht abzurufen. Wenn plug_state und charge_state false sind wird dann nicht mehr abgerufen.
Ist plug_state hingegen true (bzw einfach nur nicht false) wird pluggedEvent auf 6 gesetzt.
Im Anschluss wird wieder versucht den SOC anzurufen. Klappt das gehts weiter, klappt es nicht wird pluggedEvent um 1 reduziert.
So ist pluggedEvent nach ein paar Durchläufen dann 0 oder kleiner 0 und es werden keine Abfragen mehr gemacht.
Beginnt nun die Ladung wird charging auf True gesetzt und somit startet der Abruf des SOC wieder der nun (weil die Steuergeräte ja an gehen) funktioniert.
Vielleicht kann das ja jemand noch kommentieren.
P.P.S:
Ich hab das auch im Logging nochmal nachverfolgt. Mit der alten Version war "angeblich" charging immer true und daher ging der Abruf weiter, obwohl der pluggedEvent Wert runter ging.
Mit der Version jetzt hört er dann auf mit den Abrufen, sobald pluggedEvent <=0 ist
Bin also wirklich guter Dinge, dass das nun so passt.
- Dateianhänge
-
- evSoc.7z
- (3.06 KiB) 34-mal heruntergeladen
Gruß,
Jürgen
Jürgen
-
- Beiträge: 693
- Registriert: Do Feb 20, 2020 1:16 pm
- Has thanked: 2 times
- Been thanked: 9 times
Re: EVNotiPi
Ich habe nun nochmal ein kleines "Update" gemacht.
Es können nun alle Parameter in der config.yaml gesetzt werden. Somit muss die evSoc.py nicht mehr angefasst werden.
Außerdem hab ich den Bereich true/false für den Status Plugged und Charging umgedreht, was meiner Ansicht nach den Vorteil hat, dass nicht dauerhaft gepolt wird, falls ein falscher oder kein Wert zurück kommt (somit sollten Situationen, wo deshalb die 12 V Batterie entladen wird vermieden werden).
Wer möchte gerne mal testen und Rückmeldung geben.
Es müssen einfach die beiden Dateien evSoc.py und config.yaml ersetzt werden.
Es können nun alle Parameter in der config.yaml gesetzt werden. Somit muss die evSoc.py nicht mehr angefasst werden.
Außerdem hab ich den Bereich true/false für den Status Plugged und Charging umgedreht, was meiner Ansicht nach den Vorteil hat, dass nicht dauerhaft gepolt wird, falls ein falscher oder kein Wert zurück kommt (somit sollten Situationen, wo deshalb die 12 V Batterie entladen wird vermieden werden).
Wer möchte gerne mal testen und Rückmeldung geben.
Es müssen einfach die beiden Dateien evSoc.py und config.yaml ersetzt werden.
- Dateianhänge
-
- config.7z
- (3.74 KiB) 43-mal heruntergeladen
Gruß,
Jürgen
Jürgen
Re: EVNotiPi
Gibt es das ganze vielleicht auch schon für den Ioniq 5?
Seit dem letzten Air-Update funktioniert die Abfrage über Bluelink wieder nicht und ab Februar müsste ich wohl auch schon dafür zahlen.
In der Garage daneben steht der Ioniq und da läuft das ganze über EVNotiPi einfach wunderbar.
Das hätte ich am liebsten für beide Autos.
Seit dem letzten Air-Update funktioniert die Abfrage über Bluelink wieder nicht und ab Februar müsste ich wohl auch schon dafür zahlen.
In der Garage daneben steht der Ioniq und da läuft das ganze über EVNotiPi einfach wunderbar.
Das hätte ich am liebsten für beide Autos.