Einbinden der neuen Volvo on Call API mit HTTPMOD

Begonnen von lynckmeister, 14 Februar 2023, 17:05:47

Vorheriges Thema - Nächstes Thema

Pepe_Pb

Sani, hast Du nacheinander (nicht mit einem Mal) die Befehle in der Eingabezeile des fhem abgesetzt?

setreading VolvoOnCall myAPP-KEY <APP-KEY>
setreading VolvoOnCall myVolvoID <VOLVO-ID>
setreading VolvoOnCall myVolvoPW <VOLVO-ID-PW>

danach ein reread auf VovoOnCall -dann muss es funzen

Sany

Hallo Pepe_Pb (und alle anderen...),

ich habe es nun geschafft, meinen Volvo auszulesen. Copy-Paste allein ging nicht, folgendes hat zum Erfolg geführt:

In Deiner DEF (Post https://forum.fhem.de/index.php?msg=1312431) ist diese eine Zeile:
Zitatattr VolvoOnCall requestHeader02 authorization: Basic aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
die aaaaa müssen gegen den Key vom ersten Post ausgetauscht werden, ist wohl ein öffentlicher Schlüssel??

Zitatsetreading VolvoOnCall myAPP-KEY <APP-KEY>
setreading VolvoOnCall myVolvoID <VOLVO-ID>
setreading VolvoOnCall myVolvoPW <VOLVO-ID-PW>
das kann man direkt an das RAW dranhängen. Ich habe das mehrfach getestet, geht.
Jetzt kommt der wichtige Part:
zuerst ein reread, was u.U. auch Fehler mitbringt?? -> egal
danach unbedingt
Zitatget VolvoOnCall Vehicles
aufrufen.
Dann checken, ob das Reading vehicles_01_id vorhanden ist und die Fahrgestellnummer (FIN) eingetragen ist. Erst dann können die anderen Werte abgerufen werden.

Also recht herzlichen Dank an alle, die zu dieser DEF beigetragen haben.

Nun gehts langsam weiter, da gibts ja noch interessante Dinge wie Reifendruckkontrolle und "Glühlampen" - Status....
.... es bleibt spannend.


Viele Grüße


Sany
fhem als LXC auf Proxmox auf einem minix Z100 , weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

Sany

hier gleich noch ein paar Erweiterungen für die VolvoOnCall DEF:

- Location
- Windows
- Doors
- Tyres
- Warnings


attr VolvoOnCall get10Header1 accept: application/json
attr VolvoOnCall get10Header2 vcc-api-key: %APPKEY%
attr VolvoOnCall get10Header3 authorization: Bearer %AC%
attr VolvoOnCall get10Name Location
attr VolvoOnCall get10Poll 1
attr VolvoOnCall get10URL https://api.volvocars.com/location/v1/vehicles/%VIN%/location

attr VolvoOnCall get11Header1 accept: application/json
attr VolvoOnCall get11Header2 vcc-api-key: %APPKEY%
attr VolvoOnCall get11Header3 authorization: Bearer %AC%
attr VolvoOnCall get11Name Windows
attr VolvoOnCall get11URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%VIN%/windows

attr VolvoOnCall get12Header1 accept: application/json
attr VolvoOnCall get12Header2 vcc-api-key: %APPKEY%
attr VolvoOnCall get12Header3 authorization: Bearer %AC%
attr VolvoOnCall get12Name Doors
attr VolvoOnCall get12URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%VIN%/doors

attr VolvoOnCall get13Header1 accept: application/json
attr VolvoOnCall get13Header2 vcc-api-key: %APPKEY%
attr VolvoOnCall get13Header3 authorization: Bearer %AC%
attr VolvoOnCall get13Name Tyres
attr VolvoOnCall get13URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%VIN%/tyres

attr VolvoOnCall get14Header1 accept: application/json
attr VolvoOnCall get14Header2 vcc-api-key: %APPKEY%
attr VolvoOnCall get14Header3 authorization: Bearer %AC%
attr VolvoOnCall get14Name Warnings
attr VolvoOnCall get14URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%VIN%/warnings

Location ist wie in der App: Update gibts nur nach dem Abstellen des Fahrzeugs. Ist vllt interessant um zu unterscheiden, ob das Auto "zu Hause" ist oder nicht.

Wie weiter oben schon beschrieben wurde: für zyklische Abfragen muss das
Zitatattr VolvoOnCall getXXPoll 1
entsprechend gesetzt werden. Im Beispiel ist es bei Location eingebaut.

Viel Spaß damit


Gruß



Sany
fhem als LXC auf Proxmox auf einem minix Z100 , weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

Sysperion

#48
Hallo,

hat jemand es zufällig auch auf einem Volvo EX30 probiert?

Ich kann zwar Daten auslesen, aber bei Akku Abruf kommt die Fehlermeldung "Car model is not supported".

Auch die Klima kann ich nicht starten oder stoppen, hier kommt die Fehlermeldung "Internal Server Error".

Hat jemand eine Idee, woran es liegen könnte?

Danke
lg
Sysperion

schnuddel

Hallo,

wie es aussieht, hat Volvo in der V2 der API den Batterieladezustand rausgenommen.
ZitatFuel - get battery charge level - The endpoint for getting battery charge level has been removed and the data is now returned in the new consolidated endpoint for fuel.

Wenn ich den Fuel-Level abfrage, erhalte ich allerdings nur Werte zum Benzinstand:
2024-09-23 12:39:13 HTTPMOD VolvoOnCall data_fuelAmount_value: 21.8
2024-09-23 12:39:13 HTTPMOD VolvoOnCall data_fuelAmount_timestamp: 2024-09-23T05:54:27.208Z
2024-09-23 12:39:13 HTTPMOD VolvoOnCall data_fuelAmount_unit: l

Über die Abfrage der Statistiken erhalte ich zumindest einen Wert für die erwartete Distanz, die ich mit Batterie zurücklegen kann:
2024-09-23 12:40:29 HTTPMOD VolvoOnCall data_distanceToEmptyBattery_value: 41
Gibt es ein anderes Reading, dass mir tatsächlich wieder den Batterieladezustand in Prozent angibt?

LG
schnuddel
Raspi, ZWave, HUE, Neato Botvac, Squeezebox

Pepe_Pb

Hast Du den SOC (State of Charge) abgefragt?
Ich habe einen XC60 Hybrid und er zeigt mir den Ladezustand in Prozent an:
data_batteryCapacityKWH 18.819
data_batteryChargeLevel_timestamp 2024-09-24T17:49:48Z
data_batteryChargeLevel_unit percentage
data_batteryChargeLevel_value 44.0
und die Reichweite (ich vermute über die statistic):
data_distanceToEmptyBattery_timestamp 2024-09-24T17:49:48.266Z
data_distanceToEmptyBattery_unit km
data_distanceToEmptyBattery_value 31
data_distanceToEmptyTank_timestamp 2024-09-24T17:51:34.954Z
data_distanceToEmptyTank_unit km
data_distanceToEmptyTank_value 530

schnuddel

Hallo Pepe_Pb,

das ist sehr komisch. Vorgestern bekam ich noch diese Fehlermeldung, wenn ich den SOC abgefragt habe:
Version 1 is removed. See https://developer.volvocars.com/apis/connected-vehicle/v2/overview/Heute läuft es wieder ohne Fehler.
Raspi, ZWave, HUE, Neato Botvac, Squeezebox

Sany

Hallo zusammen,

seit ca 2 Tagen bekomme ich keine Werte mehr von der Volvo Api. Status ist 401, also irgendwas "not Authorized".
Liegts an Volvo? Bei mir habe ich nichts geändert, deshalb die Frage, ob es nur bei mir so ist oder evtl. auch ihr keine Daten bekommt?


Gruß


Sany
fhem als LXC auf Proxmox auf einem minix Z100 , weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

Xcoder

Bei mir auch seit dem 14.10. tod. Mal schauen...

Sany

Ich habe jetzt mal auf der developer.volvocars.com nach dem Einloggen rechts bei "Test access tokens" dann unter my Volvo Car die Energy API ausgewählt und einen tokern erzeugen lassen. Den habe ich dann per setreading VolvoOnCall access_token eingefügt und eine Abfrage vom SOC gestartet: das geht. Bei anderen Abfragen (statistic, doors) kommt wieder als status 403 oder 401 (unauthorized).
Ich kann nicht sagen, ob da was geändert wurde seitens Volvo, aber evtl. sieht es so aus, als ob jede API ihren eigenen access_token braucht. Das wäre irgendwie doof. Ich steck da nicht tief genug in httpmod drin, um überhaupt zu sagen, dass man das mit einem Device abbilden kann, evtl. braucht man womöglich für jede API ein eigenes Device.
Mal sehen, wie lange das mit dem Token von der Website geht, da stand auch ein Verfallszeitpunkt.

unter https://developer.volvocars.com/apis/connected-vehicle/v2/release-notes/

stehen zwar jede Menge Sachen und Änderungen, nur leider kein Datum.
fhem als LXC auf Proxmox auf einem minix Z100 , weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

matkoh

Auch bei mir werden seit dem 14.10.24 keine Readings mehr aktualisiert.

Ich habe - wie Sany - ein neues Access Token erstellt (das nur ca. 30 Minuten gültig ist) und ebenfalls einen "VCC API key - Primary" und damit gem. https://developer.volvocars.com/apis/docs/getting-started/#your-first-api-request einen Abruf der Vehicles mit curl versucht. Das funktioniert auch und ebenfalls der lt. Anleitung folgende Abruf des Engine-Status mit der vorher übermittelten (und in FHEM eingestellten) VIN.

Ich habe dann im FHEM Device mit setreading myAPP-KEY und access_token entsprechend geändert. Aber es bleibt dabei, dass im FHEM-Device keine Abrufe funktionieren. Es werden keine Readings aktualisiert.

Matthias

Sany

Hallo zusammen,

ich habe (für mich) einen anderen Weg gefunden, die Daten von meinem Volvo zu bekommen und habe die Lösung mit HTTPMOD nicht mehr weiterverfolgt.

gucksu:
https://forum.fhem.de/index.php?topic=139639.0


Viele Grüße



Sany
fhem als LXC auf Proxmox auf einem minix Z100 , weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

marcellm

Hallo zusammen,

Volvo hat offensichtlich die Authentifizierung geändert.
Der Link von Sany auf Volvo2MQTT von Dielee hat mich auf die richtige Spur gebracht.
Es wird neuerdings ein "Refresh Token" benötigt, mit dessen Hilfe man einen neuen "Access Token" anfordern kann.

Ich habe das Python-Programm von Dielee mal auf die Authentifizierung zurückgestutzt, da ich mit dem HTTPMOD-Device weitermachen wollte.
Dieses Python-Programm habe ich angehängt. Es kann auf einem Linux-Rechner über die Kommandozeile per
python VOC_auth.pyausgeführt werden.
Man muss den Benutzernamen (Volvo-ID) und das Passwort eingeben.
Damit wird dann bei Volvo ein OTP (one-time-password) angefordert und an die hinterlegte Email-Adresse geschickt.
Dieses OTP muss dann eingegeben werden. Damit zieht sich das Programm die Tokens und legt diese in der Datei .tokens ab.
Den "Refresh Token" kann man dann kopieren und per "setreading" Befehl in das HTTPMOD-Device einfügen.
Ich habe das neue Reading sinnigerweise refresh_token genannt.
setreading VolvoOnCall refresh_token [hier bitte den refresh_token (ohne eckige Klammern) hineinkopieren, siehe unten]Weiterhin muss die Definition "DEF" vom HTTPMOD-Device nach
https://volvoid.eu.volvocars.com/as/token.oauth2 1750geändert werden.
Und das Attribut "requestData" muss nach
grant_type=refresh_token&refresh_token=%RT%geändert werden.
Durch die Attribute und deren Werte
  • replacementXXMode reading
  • replacementXXRegex %RT%
  • replacementXXValue refresh_token
wird beim Abruf der oben genannten URL der Platzhalter "%RT%" mit dem "refresh_token" ersetzt.
Das XX bitte durch die nächste freie Zahl ersetzen. Bei mir sind das replacement04Mode etc., aber ggf. sind diese Attribute schon belegt, dann einfach die nächsten freien verwenden.
Zuletzt muss noch sichergestellt werden, dass das neue zurückgelieferte "refresh_token" im korrekten Reading landet.
Hierfür bei den Attributen
  • readingXXXXJSON
  • readingXXXXName
jeweils den Wert refresh_token eintragen.
Das XXXX bitte durch eine freie Zahl ersetzen. Ich habe die 9998 gewählt, aber jedes andere freie Attribut kann genauso gut verwendet werden.
Damit funktioniert bei mir die regelmäßige Authentifizierung wieder und es lassen sich alle verfügbaren Werte abrufen.
Ich habe auch einen Auszug der List meines HTTPMOD-Devices angehangen.
Ich hoffe das hilft dem ein oder anderen weiter.

Frohes neues Jahr

Marcell

Pepe_Pb

#58
Ich bin immer wieder überrascht, über manche Nutzer hier, über welche unglaublichen Fähigkeiten sie verfügen, das gilt auch für den post von marcellm. Ich scheitere leider schon an der Ausführung des python programms.

Ich habe es mit einem Windows Rechner aus dem post von marcellm local gespeichert, dann mit FileZilla auf meinen Odroid unter opt gespeichert und dann bin ich mit Putty in opt gegangen und habe es wie folgt gestartet:

python VOC_auth.py

Leider kommt nur folgende Fehlermeldung:

Traceback (most recent call last):
  File "VOC_auth.py", line 7, in <module>
    import requests
ImportError: No module named requests

:-(
 

marcellm

Hallo Pepe_Pb,

sorry, für die späte Rückmeldung.
Die Fehlermeldung bedeutet, dass Python eine Bibliothek zum Ausführen fehlt.
Du kannst, wenn du dich per Putty auf den Odroid eingeloggt hast, mit diesem Befehl die notwendige Bibliothek nachinstallieren:
python -m pip install requestsAnschließend sollte das Python-Programm funktionieren.

Gruß

Marcell