EVNotiPi

Auflistung von gewünschten Features, Ausschreibung zur Umsetzung
mattberlin
Beiträge: 237
Registriert: Mo Mai 10, 2021 10:07 pm
Has thanked: 24 times
Been thanked: 4 times

Re: EVNotiPi

Beitrag von mattberlin »

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?
floycion
Beiträge: 11
Registriert: Mo Nov 30, 2020 10:27 am

Re: EVNotiPi

Beitrag von floycion »

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

Code: Alles auswählen

client.subscribe("openWB/internal_chargepoint/0/get/charge_state")
client.subscribe("openWB/internal_chargepoint/0/get/plug_state")
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

Code: Alles auswählen

openWB/set/vehicle/0/get/soc
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

Code: Alles auswählen

if (int(msg.payload) == 0)
Kann so ja nicht klappen.

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
Jemand mit Python-Kenntnissen hat das bestimmt in einer Minute umgeschrieben, meine TurboPascal-Fragmente von vor 30 Jahren reichen dazu leider nicht... ;)
Steca Coolcept3 5503 / Hyundai Ioniq vFL / OpenWB series2 Standard+ software 2.1/ SDM630 / evSoc
Heavendenied
Beiträge: 692
Registriert: Do Feb 20, 2020 1:16 pm
Has thanked: 2 times
Been thanked: 8 times

Re: EVNotiPi

Beitrag von Heavendenied »

@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.
Gruß,
Jürgen
Heavendenied
Beiträge: 692
Registriert: Do Feb 20, 2020 1:16 pm
Has thanked: 2 times
Been thanked: 8 times

Re: EVNotiPi

Beitrag von Heavendenied »

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?
Dateianhänge
evSoc.7z
(3.09 KiB) 30-mal heruntergeladen
Gruß,
Jürgen
floycion
Beiträge: 11
Registriert: Mo Nov 30, 2020 10:27 am

Re: EVNotiPi

Beitrag von floycion »

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:

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
Grüße
Florian
Steca Coolcept3 5503 / Hyundai Ioniq vFL / OpenWB series2 Standard+ software 2.1/ SDM630 / evSoc
mattberlin
Beiträge: 237
Registriert: Mo Mai 10, 2021 10:07 pm
Has thanked: 24 times
Been thanked: 4 times

Re: EVNotiPi

Beitrag von mattberlin »

Jetzt muss ich nochmal blöd fragen:
Ist das so eine Kiste die via Mobilfunk den SoC der Karre in die Cloud schickt?
Heavendenied
Beiträge: 692
Registriert: Do Feb 20, 2020 1:16 pm
Has thanked: 2 times
Been thanked: 8 times

Re: EVNotiPi

Beitrag von Heavendenied »

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…
Gruß,
Jürgen
Heavendenied
Beiträge: 692
Registriert: Do Feb 20, 2020 1:16 pm
Has thanked: 2 times
Been thanked: 8 times

Re: EVNotiPi

Beitrag von Heavendenied »

@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:

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
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.
Dateianhänge
evSoc.7z
(3.06 KiB) 34-mal heruntergeladen
Gruß,
Jürgen
Heavendenied
Beiträge: 692
Registriert: Do Feb 20, 2020 1:16 pm
Has thanked: 2 times
Been thanked: 8 times

Re: EVNotiPi

Beitrag von Heavendenied »

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.
Dateianhänge
config.7z
(3.74 KiB) 42-mal heruntergeladen
Gruß,
Jürgen
MrSpoon
Beiträge: 67
Registriert: Sa Apr 25, 2020 10:00 am

Re: EVNotiPi

Beitrag von MrSpoon »

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.
Antworten