Skip to content

Commit 6c89c59

Browse files
authored
SoC Skoda and VWId using VW Group (#2325)
* add vwgroup * add skoda * vwid use vwgroup * add wiki
1 parent 9b966a7 commit 6c89c59

12 files changed

Lines changed: 590 additions & 140 deletions

File tree

docs/SoC-Skoda-settings-1.PNG

25.9 KB
Loading

docs/SoC-Skoda-settings-2.PNG

24.4 KB
Loading

docs/SoC-Skoda.md

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
# SoC-Modul Skoda
2+
3+
Das SoC-Modul Skoda gibt es in openWB 2.x.
4+
5+
## Konfiguration
6+
7+
Die Konfiguration erfolgt im Bereich Einstellungen - Konfiguration - Fahrzeuge:
8+
9+
![Allgemeine Konfiguration](SoC-Skoda-settings-1.PNG)
10+
11+
![Spezielle Konfiguration](SoC-Skoda-settings-2.PNG)
12+
13+
## Hinweise
14+
15+
Für nicht-Skoda Fahrzeuge (Audi, VW, etc.) funktioniert das Modul nicht.
16+
17+
Erfolgreich getestet u.a. für folgende Fahrzeuge: Enyaq.
18+
19+
**Wichtig für alle Fahrzeuge:**
20+
Es muss ein aktives Konto im Skoda ID Portal vorhanden sein und die "MySkoda App" muss eingerichtet sein.
21+
22+
**WICHTIG:**
23+
Skoda ändert gelegentlich die Bedingungen für die Nutzung der Online-Services.
24+
25+
Diese müssen bestätigt werden. Wenn der SOC-Abruf plötzlich nicht mehr funktioniert, VOR dem Posten bitte Schritt 1 ausführen.
26+
27+
Bei Problemen zunächst bitte diese Schritte durchführen:
28+
29+
1. sicherstellen, dass auf dieser Skoda-Seite alle Einverständnisse gegeben wurden.
30+
31+
<https://skodaid.vwgroup.io/landing-page>
32+
33+
In einigen Fällen wurden die Einverständnisse gegeben und trotzdem funktionierte die Abfrage nicht.
34+
Hier hat folgendes Vorgehen geholfen: Im Skoda Konto das Land temporär umstellen, d.h.
35+
- auf ein anderes Land als das eigene ändern
36+
- sichern
37+
- zurück auf das eigene Land ändern
38+
- sichern.
39+
40+
2. Nach einem manuellen SOC-Abruf (Kreispfeil hinter dem SOC klicken) auf der Status - Seite EV-SOC Log und Debug log auf Fehler kontrollieren
41+
42+
3. Falls im Ev-Soc Log Fehler 303 (unknown redirect) gemeldet wird:
43+
- Ursache 1: Bestimmte Sonderzeichen im Passwort funktionieren nicht mit dem Modul. Bitte das Passwort auf eines ohne Sonderzeichen ändern und testen.
44+
- Ursache 2: Falsche Email, Passwort oder VIN eingegeben. Alle 3 löschen, speichern, neu eingeben, speichern und testen.
45+
46+
4. Falls eine Firewall im Spiel ist: Es gab einzelne Probleme beim Internet-Zugriff der openWB auf Python Archive und Fahrzeug-Server wenn IPV6 aktiv ist.
47+
48+
5. Nach Neustart bzw. Änderung der LP-Konfiguration werden im EV-Soc-Log Fehler ausgegeben (permission oder fehlende Datei).
49+
50+
Diese Fehler sind normal und können ignoriert werden. Leider wird im Debug Mode 0 keine Positiv-Meldung ausgegeben.
51+
Empfehlung:
52+
- In Einstellungen - System - Fehlersuche dies einstellen: Debug Level/Details
53+
- dann einen manuellen SOC-Abruf durchführen (im Dashboard auf Kreispfeil klicken).
54+
- danach sollte im EV-SOC-Log eine Zeile ähnlich dieser kommen:
55+
56+
`2023-02-12 11:57:14 INFO:soc_skoda:Lp1 SOC: 61%@2023-02-12T11:53:20`
57+
58+
Diese Zeile zeigt folgende Information:
59+
60+
`2023-02-12 11:57:14` *- Timestamp des SOC-Abrufs*
61+
62+
`INFO` *- Debug Level INFO*
63+
64+
`soc_skoda` *- SOC-Modul*
65+
66+
`Lp1` *- Ladepunkt*
67+
68+
`SOC: 61%` *- SOC Stand*
69+
70+
`@2025-02-12T11:53:20` *- Timestamp des Updates vom EV zum VW Cloud-Server*
71+
72+
6. Falls diese Schritte nicht zum Erfolg führen, das Problem im [Support Thema](https://forum.openwb.de/viewforum.php?f=12) mit Angabe relevanter Daten posten
73+
- oWB SW Version
74+
- oWB gekauft oder selbst installiert
75+
- wenn selbst installiert: welches OS(Stretch/Buster)
76+
- welches Fahrzeug
77+
- falls vorhanden Angaben über Firewall, VPN, etc., also Appliances, die den Internetzugang limitieren könnten
78+
- relevante Abschnitte der Logs, vor allem Fehlermeldungen, als CODE-blocks (</>).
79+
80+
Das SoC-Log mit evtl. Fehlermeldungen kann wie folgt eingesehen werden:
81+
82+
- Einstellungen - System - Fehlersuche

packages/modules/vehicles/skoda/__init__.py

Whitespace-only changes.
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#!/usr/bin/env python3
2+
3+
import aiohttp
4+
from asyncio import new_event_loop, set_event_loop
5+
from typing import Union
6+
from modules.vehicles.skoda import libskoda
7+
from modules.vehicles.skoda.config import Skoda
8+
from modules.vehicles.vwgroup.vwgroup import VwGroup
9+
10+
11+
class api(VwGroup):
12+
13+
def __init__(self, conf: Skoda, vehicle: int):
14+
super().__init__(conf, vehicle)
15+
16+
# async method, called from sync fetch_soc, required because libvwid/libskoda expect async environment
17+
async def _fetch_soc(self) -> Union[int, float, str]:
18+
async with aiohttp.ClientSession() as self.session:
19+
skoda = libskoda.skoda(self.session)
20+
return await super().request_data(skoda)
21+
22+
23+
def fetch_soc(conf: Skoda, vehicle: int) -> Union[int, float, str]:
24+
25+
# prepare and call async method
26+
loop = new_event_loop()
27+
set_event_loop(loop)
28+
29+
# get soc, range from server
30+
a = api(conf, vehicle)
31+
soc, range, soc_ts, soc_tsX = loop.run_until_complete(a._fetch_soc())
32+
33+
return soc, range, soc_ts, soc_tsX
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
from typing import Optional
2+
3+
4+
class SkodaConfiguration:
5+
def __init__(self,
6+
user_id: Optional[str] = None, # show in UI
7+
password: Optional[str] = None, # show in UI
8+
vin: Optional[str] = None, # show in UI
9+
refreshToken: Optional[str] = None, # DON'T show in UI!
10+
calculate_soc: bool = False # show in UI
11+
):
12+
self.user_id = user_id
13+
self.password = password
14+
self.vin = vin
15+
self.refreshToken = refreshToken
16+
self.calculate_soc = calculate_soc
17+
18+
19+
class Skoda:
20+
def __init__(self,
21+
name: str = "Skoda",
22+
type: str = "skoda",
23+
official: bool = False,
24+
configuration: SkodaConfiguration = None) -> None:
25+
self.name = name
26+
self.type = type
27+
self.official = official
28+
self.configuration = configuration or SkodaConfiguration()

0 commit comments

Comments
 (0)