Skip to content

Commit 9bfb569

Browse files
authored
new SoC module Cupra (#2553)
* add cupra connect soc * add docu
1 parent 7f16bd7 commit 9bfb569

9 files changed

Lines changed: 452 additions & 0 deletions

File tree

docs/SoC-Cupra-settings-1.png

138 KB
Loading

docs/SoC-Cupra-settings-2.png

131 KB
Loading

docs/SoC-Cupra.md

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
# SoC-Modul Cupra
2+
3+
Das SoC-Modul Cupra gibt es in openWB 2.x.
4+
5+
## Konfiguration
6+
7+
Die Konfiguration erfolgt im Bereich Einstellungen - Konfiguration - Fahrzeuge:
8+
9+
![Allgemeine Konfiguration](SoC-Cupra-settings-1.png)
10+
11+
![Spezielle Konfiguration](SoC-Cupra-settings-2.png)
12+
13+
## Hinweise
14+
15+
Für nicht-Cupra Fahrzeuge (Audi, Skoda, VW, etc.) funktioniert das Modul nicht.
16+
17+
Erfolgreich getestet u.a. für folgende Fahrzeuge: Cupra Born.
18+
19+
**Wichtig für alle Fahrzeuge:**
20+
Es muss ein aktives Konto im Seat ID Portal vorhanden sein und die "My SEAT App" muss eingerichtet sein. Es muss explizit die "My SEAT App" eingerichtet werden und nicht die "My CUPRA App".
21+
22+
**WICHTIG:**
23+
Seat/Cupra ä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 Seat-Seite alle Einverständnisse gegeben wurden.
30+
31+
<https://seatid.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 Seat 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 Seat 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

docs/_Sidebar.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
* [Fahrzeuge](https://github.com/openWB/core/wiki/Fahrzeuge)
77
* [Manueller SoC](https://github.com/openWB/core/wiki/Manueller-SoC)
88
* [SoC BMW & Mini](https://github.com/openWB/core/wiki/SoC-BMW-Mini)
9+
* [SoC Cupra](https://github.com/openWB/core/wiki/SoC-Cupra)
910
* [SoC OVMS](https://github.com/openWB/core/wiki/SoC-OVMS)
1011
* [SoC VWId](https://github.com/openWB/core/wiki/SoC-VWId)
1112
* [WiCAN OBD2-Dongle mit manuellem SoC](https://github.com/openWB/core/wiki/WiCAN)

packages/modules/vehicles/cupra/__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.cupra import libcupra
7+
from modules.vehicles.cupra.config import Cupra
8+
from modules.vehicles.vwgroup.vwgroup import VwGroup
9+
10+
11+
class api(VwGroup):
12+
13+
def __init__(self, conf: Cupra, vehicle: int):
14+
super().__init__(conf, vehicle)
15+
16+
# async method, called from sync fetch_soc, required because libvwid/libskoda/libcupra expect async environment
17+
async def _fetch_soc(self) -> Union[int, float, str]:
18+
async with aiohttp.ClientSession() as self.session:
19+
cupra = libcupra.cupra(self.session)
20+
return await super().request_data(cupra)
21+
22+
23+
def fetch_soc(conf: Cupra, 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 CupraConfiguration:
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 Cupra:
20+
def __init__(self,
21+
name: str = "Cupra",
22+
type: str = "cupra",
23+
official: bool = False,
24+
configuration: CupraConfiguration = None) -> None:
25+
self.name = name
26+
self.type = type
27+
self.official = official
28+
self.configuration = configuration or CupraConfiguration()

0 commit comments

Comments
 (0)