SOC Modul Porsche Taycan

Anfragen zum Erstellen von Modulen, Fragen zu Modulen
rowi
Beiträge: 64
Registriert: Fr Okt 09, 2020 4:52 pm

Re: SOC Modul Porsche Taycan

Beitrag von rowi »

Der Porsche-Server war die letzte Zeit auch etwas buggy, mag sein, dass es nicht an OpenWB lag…
paraglider
Beiträge: 4
Registriert: Do Jul 14, 2022 6:55 am

Re: SOC Modul Porsche Taycan

Beitrag von paraglider »

Hi,

nachdem ich nun stolzer Besitzer einer OpenWB 2+ bin lade ich meinen Taycan da drüber. Wechsel zwischen 1p und 3p (hin und zurück) funktioniert tadellos. Den SOC kann ich leider mit dem VAG/Porsche Modul nicht mehr auslesen. Es gibt einen Parsing-Fehler:

Code: Alles auswählen

Error from EVCC: 2022/07/14 21:25:25 invalid character '<' looking for beginning of value (LV0))
Schafft es jemand von Euch den SOC seines Taycans auszulesen - ich rede jetzt nicht von der EVCC Cloud-Lösung. Auf Cloud habe ich wenig Lust, u.a. habe ich mir deshalb eine OpenWB gekauft...
rowi
Beiträge: 64
Registriert: Fr Okt 09, 2020 4:52 pm

Re: SOC Modul Porsche Taycan

Beitrag von rowi »

Mit der OpenWB wirst du wohl über das Kabel keine Daten bekommen, sondern nur über das Internet von den Porsche-Servern.
paraglider
Beiträge: 4
Registriert: Do Jul 14, 2022 6:55 am

Re: SOC Modul Porsche Taycan

Beitrag von paraglider »

Mit der OpenWB wirst du wohl über das Kabel keine Daten bekommen, sondern nur über das Internet von den Porsche-Servern.
Ich habe mich doof ausgedrückt. Natürlich wäre das Auslesen des SOC per Ladekabel (so wie es der Porsche-Lader kann) die beste Lösung.

Mit Cloud meine ich, dass ich mich an die evcc Cloud anbinden muss. Was ich eher suche ist ein Weg, dass die OpenWB direkt den Porsche-Server abfrägt. Diese inoffizielle API funktioniert, wenn der Porsche Server keine Probleme hat, sehr zuverlässig.
rowi
Beiträge: 64
Registriert: Fr Okt 09, 2020 4:52 pm

Re: SOC Modul Porsche Taycan

Beitrag von rowi »

Hab's beim zweiten Lesen dann auch verstanden :D. Die Lösung über das Kabel wäre speziell beim Taycan aber tatsächlich super, denn die Mobilfunkanbindung ist wieder mal extrem schlecht. Die Porsche-App hat schon seit zwei Wochen keine Verbindung mehr zum Auto. Da könnte ich wieder auf die direkte (inoffizielle) API gehen und schauen, woran es liegt. Die geht schon, eine weitere Lösung wie evcc ist zwar prima aus Sicht von OpenWB, wo man viele EVs mit einer Lösung anbinden kann, aber die direkte Anbindung ist viel angenehmer, tatsächlich. So habe ich es aber auch verstanden, dass genau das gemacht werden sollte. Den Status kenne ich aber nicht, vielleicht braucht der OpenWB-Support immer noch Zugangsdaten von einem Freiwilligen?
derNeueDet
Beiträge: 4448
Registriert: Mi Nov 11, 2020 7:16 pm
Has thanked: 5 times
Been thanked: 27 times

Re: SOC Modul Porsche Taycan

Beitrag von derNeueDet »

Die inoffizielle Api wird auf der aktuellen 1.9 unter Stretch nicht laufen. In der Doku steht Python >3.6 die Raspbian Stretch hat nur Python 3.5 unter der Haube.

VG
Det
10kWp PV mit SMA Tripower 10000TL-10 (PE11 mit SDM72V2); 2,4kWp mit Solis 2.5 G6 (EE11 mit SDM120). OpenWB Standard+. EVU EM540 an einem Raspi mit Venus OS. BEV Mercedes EQA 300 (06/2024)
Dual01
Beiträge: 15
Registriert: So Feb 05, 2023 10:42 am
Wohnort: Rhein-Main-Gebiet
Been thanked: 1 time

Re: SOC Modul Porsche Taycan

Beitrag von Dual01 »

Ich habe die SOC-Abfrage des VAG-Porsche Moduls mit der Porsche-Connect-API zum Laufen gebracht. Dank an paraglider für den Tipp mit der Porsche-Connect-API. Voraussetzung ist wie bereits beschrieben eine Python-Version > 3.6. Da die OpenWB-Software auf dem RPI unter Buster läuft, habe ich eine Buster-Lite-Version (Linux Kernel 5.10.17-v7) installiert, die hat Python 3.7.3 an Bord.
Die Installation von OpenWB auf dem Raspi lief fehlerfrei.
Bei der Buster-Version sollten dann noch folgende Pakete installiert werden:
pip3:
sudo apt-get install python3-pip
dann:
sudo pip3 install –-upgrade requests

Anschließend wird die Porsche Connect-api installiert:
pip3 install pyporscheconnectapi

Jetzt sollte die Abfrage der Daten vom Taycan funktionieren.
Die Kontrolle der korrekten Installation kann jetzt mit den Zugangsdaten (email, PW, VIN) wie folgt durchgeführt werden:
porschecli -e "email-Adresse" -p "Passwort" emobility -v "WP0ZZZYxxxxxxxxxxxx"

Jetzt sollten die Daten vom Taycan ausgelesen werden und angezeigt werden. Falls nicht, dann ist an der Stelle eine Fehlersuche angesagt.

Ich habe Dank der verschiedenen Anwendungsbeispiele im Netz ein kleines Python-Programm geschrieben, welches die Login-Daten von OpenWB übernimmt, sich mit der Porsche Connect-Api einloggt und den SOC ausliest und wieder übergibt. Dazu wird im Home-Verzeichnis (/home/pi) eine Datei porsche_short.py kreiert.
sudo nano porsche_short.py
Dann den Code in die Datei reinkopieren und anschließend abspeichern:

Code: Alles auswählen

import asyncio
import sys
from sys import argv

from pyporscheconnectapi.connection import Connection
from pyporscheconnectapi.client import Client

email = argv[1]
password = argv[2]
vin = argv[3]

async def vehicles():
    conn = Connection(email, password)

    data = await conn.get(f"https://api.porsche.com/service-vehicle/se/sv_SE/vehicle-data/{vin}/stored")
    global batterysoc
    batterysoc = data['batteryLevel']['value']
    await conn.close()

loop = asyncio.get_event_loop()
loop.run_until_complete(vehicles())

sys.stdout.write(str(batterysoc))
sys.exit(0)


Anschließend muss die Shell des VAG-Porsche-Moduls (Datei main.sh) noch geändert werden.
cd /var/www/html/openWB/modules/soc_vag
sudo nano main.sh

dann folgende Zeile in der getAndWriteSoc()-Subroutine:
answer=$($MODULEDIR/../evcc-soc $fztype --user "$username" --password "$password" --vin "$vin" 2>&1)
gegen diese Zeile austauschen und die Datei abspeichern:
answer=$(python3 /home/pi/porsche_short.py "$username" "$password" "$vin")

und dabei auf die korrekte Anzahl der Leerzeichen zu Beginn der Zeile achten. Der Austausch bewirkt dass statt des veralteten EVCC-Moduls das obige Pythonprogramm aufgerufen wird, welches den SOC übergibt.
Die Zugangsdaten zum Taycan werden wie beim original VAG-Porsche-Modul in der entsprechenden Maske von OpenWB am Ladepunkt eingegeben. Das war es schon. Viel Vergnügen damit.
Zuletzt geändert von Dual01 am Mi Nov 15, 2023 6:45 pm, insgesamt 1-mal geändert.
Dual01
Beiträge: 15
Registriert: So Feb 05, 2023 10:42 am
Wohnort: Rhein-Main-Gebiet
Been thanked: 1 time

Re: SOC Modul Porsche Taycan

Beitrag von Dual01 »

Falls die Abfrage nicht mehr funktioniert, was bei mir heute der Fall war, muss ein Update der Porsche Connect-Api durchgeführt werden:
pip3 install pyporscheconnectapi -U

Dann sollte es wieder funktionieren.
Dual01
Beiträge: 15
Registriert: So Feb 05, 2023 10:42 am
Wohnort: Rhein-Main-Gebiet
Been thanked: 1 time

Re: SOC Modul Porsche Taycan

Beitrag von Dual01 »

Porsche hat wohl wieder mal den Zugriff zu den Daten geändert.
Anbei das aktualisierte Python-Programm zum Abruf des SOC des Taycans mit der pyporscheconnect api. Ich habe dazu Example2 von der Version 0.2.0 adaptiert.
Dual01
Beiträge: 15
Registriert: So Feb 05, 2023 10:42 am
Wohnort: Rhein-Main-Gebiet
Been thanked: 1 time

Re: SOC Modul Porsche Taycan

Beitrag von Dual01 »

Code: Alles auswählen

import sys
import asyncio
from pyporscheconnectapi.connection import Connection
from pyporscheconnectapi.client import Client
from sys import argv
import logging

# logging.basicConfig()
# logging.root.setLevel(logging.DEBUG)

email = argv[1]
password = argv[2]
vin1 = argv[3]

async def vehicles() -> None:
    conn = Connection(email, password)
    client = Client(conn)

    vehicles = await client.getVehicles()
    for vehicle in vehicles:
#        print(
#            f"VIN: {vehicle['vin']}, Model: {vehicle['modelName']}, Year: {vehicle['modelType']['year']}"
#        )
        mf = ["BATTERY_LEVEL", "LOCK_STATE_VEHICLE"]
        measurements = "mf=" + "&mf=".join(mf)
        data = await conn.get(
            f"https://api.ppa.porsche.com/app/connect/v1/vehicles/{vin1}?{measurements}"
        )
        global soc
        soc = (next((x for x in data["measurements"] if x["key"] == mf[0]), None))[
            "value"
        ]["percent"]

    await conn.close()


if __name__ == "__main__":
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    try:
        loop.run_until_complete(vehicles())
    except KeyboardInterrupt:
        pass

sys.stdout.write(str(soc))
sys.exit(0)

Antworten