Einbinden der neuen Volvo on Call API mit HTTPMOD

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

Vorheriges Thema - Nächstes Thema

Burt_Gummer

Keiner eine Idee, woran das liegen könnte?
War quasi von heute auf morgen...


Burt_Gummer

Tja...
da hat Volvo wohl was geändert?

Mit Home Assistant und deren On Call App geht das Starten der Standheizung. (alte Log in ohne Api Key)

Der Aufruf lautet /preclimatization/start

Baue ich das so in FHEM ein geht es trotzdem nicht.
Auch die Geschichte mit dem "lock" nicht.
War auf die neue API gewechselt, die geht so nicht mehr. Daten werden ausgelesen aber POST geht nicht.

Pepe_Pb

#32
Hi,
ich habe es gestern installiert und mit einem XC60 Hybrid verknüpft, er hat die FahrzeugID ausgelesen und den Ladezustand angezeigt.
Leider am nächsten Tag: nur noch der Fehler: "Access denied due to invalid VCC-API-KEY. Make sure to provide a valid key for an active application."
Dann habe ich das Modul gelöscht, alles noch mal neu gemacht (incl. dem key auf der Developer Seite) und nun geht es wieder aber nur das Anzeigen des Ladestandes, was mir aber als Minimalanforderung reicht.

matkoh

Hallo,

zunächst einmal vielen Dank für diese Beschreibung. Ich habe seit kurzem einen Volvo XC40 Recharge und suchte nach einer Beschreibung, den in fhem einzubinden. Das ist mir jetzt gelungen.

Ich habe auf der Volvo Developer-Seite die Änderungen nachvollziehen können:

1. Die "CONNECTED VEHICLE API" gibt es jetzt in Version 2 https://developer.volvocars.com/apis/connected-vehicle/v2/overview/, die Version 1 ist deprecated und wird zum 30.04.2024 entfernt.

2. In der "ENERGY API" (immer noch Version 1) https://developer.volvocars.com/apis/energy/v1/overview/ kann SOC und weitere Informationen abgerufen werden.

3. In der "LOCATION API" (immer noch Version 1) https://developer.volvocars.com/apis/location/v1/overview/ kann der Standort des Fahrzeugs abgerufen werden (nach Beendigung der Fahrt).

Hier ist der Abruf des "EngineStatus" für Version 2:
attr VolvoOnCall get01Name EngineStatus
attr VolvoOnCall get01URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%VIN%/engine-status
attr VolvoOnCall get01Header1 accept: application/json
attr VolvoOnCall get01Header2 vcc-api-key: %APPKEY%
attr VolvoOnCall get01Header3 authorization: Bearer %AC%
attr VolvoOnCall get01Poll 1

Das Attribut get01Poll = 1 sorgt dafür, dass dieses Reading bei jedem Intervall des HTTPMOD abgerufen wird.

Hier der Abruf des "SOC":
attr VolvoOnCall get02Name SOC
attr VolvoOnCall get02URL https://api.volvocars.com/energy/v1/vehicles/%VIN%/recharge-status/battery-charge-level
attr VolvoOnCall get02Header1 accept: application/vnd.volvocars.api.energy.vehicledata.v1+json
attr VolvoOnCall get02Header2 vcc-api-key: %APPKEY%
attr VolvoOnCall get02Header3 authorization: Bearer %AC%
attr VolvoOnCall get02Poll 1

Man kann auch viele Informationen zum Auto abrufen mit:
attr VolvoOnCall get08Name VehicleDetails
attr VolvoOnCall get08URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%VIN%
attr VolvoOnCall get08Header1 accept: application/json
attr VolvoOnCall get08Header2 vcc-api-key: %APPKEY%
attr VolvoOnCall get08Header3 authorization: Bearer %AC%
attr VolvoOnCall get08Poll 1

Ich hoffe, das hilft dem ein oder anderen bei der Einbindung seines Volvo.

Matthias



Pepe_Pb

#34
Hi Matthias,
was eine gute Nachricht, dass sich jemand um das VolvoOnCall Modul kümmert - so schnell hatte ich nicht damit gerechnet.
Ich kann erste Erfolge verbuchen, man muss tatsächlich nur die alten Aufrufe durch Deine neuen tauschen und schon läufts :-)
Ist es denn auch möglich den Aufruf zu ändern,dass man die Klimaanlage einschalten kann (Climate start / stop)?
DANKESCHÖN FÜR DIE MÜHE!!!

matkoh

Ich habe nicht den Anspruch "mich um das Modul zu kümmern". Ich möchte nur meine Erkenntnisse weitergeben. Sofern ich Zeit habe und mein Know-How reicht, beantworte ich Fragen aber gerne.

Hier die neuen Attribute zum Ausschalten der Klimatisierung:
attr VolvoOnCall set01Name AC-OFF
attr VolvoOnCall set01URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%VIN%/commands/climatization-stop
attr VolvoOnCall set01Method POST
attr VolvoOnCall set01NoArg 1
attr VolvoOnCall set01Header1 content-type: application/json
attr VolvoOnCall set01Header2 vcc-api-key: %APPKEY%
attr VolvoOnCall set01Header3 authorization: Bearer %AC%
attr VolvoOnCall set01ParseResponse 1

Und zum Einschalten der Klimatisierung:
attr VolvoOnCall set02Name AC-ON
attr VolvoOnCall set02URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%VIN%/commands/climatization-start
attr VolvoOnCall set02Method POST
attr VolvoOnCall set02NoArg 1
attr VolvoOnCall set02Header1 content-type: application/json
attr VolvoOnCall set02Header2 vcc-api-key: %APPKEY%
attr VolvoOnCall set02Header3 authorization: Bearer %AC%
attr VolvoOnCall set02ParseResponse 1

Ich habe "set01ParseResponse" und "set02ParseResponse" ergänzt. Das wertet die Rückgabe des Befehls aus und ich hatte gehofft, dadurch zu sehen, ob die Klimatisierung läuft. Es wird zwar ein Reading "data_invokeStatus" erzeugt, aber nicht zeitnah aktualisiert, daher für mich momentan nutzlos.

Matthias

Pepe_Pb

#36
Funzt vom Feinsten (z.B. Klimaanlage ein und aus). Auf Basis Deiner Korrekturen habe ich weitere Aktionen hinbekommen wie Türen auf/zu, funzt!
DANKE noch mal!
Nach 5h spielen mit dem Modul: Unfassbar was man damit machen kann! Fahrzeugdaten, Statistiken, Motordaten auslesen wirklich interessant.

Xcoder

Funktionieren bei euch die Requests 100% zuverlässig? Ich habe die alte vocapi API ohne Pobleme in Fhem am laufen und wollte nun mal die neue API anschauen. Aber in 90% kommt bei mir nur ein 401 access denied:

                        "status": 401,
                        "error": { 
                            "message": "Access denied due to invalid VCC-API-KEY. Make sure to provide a valid key for an active application."
                        }
                    }
Dann kommt gelegentlich aber wieder eine korrekte Antwort... Da es ab und zu korrekt funktioniert, ist ja sicher mit meinem Login, meinem API Key alles OK. Ansonsten würde es ja nie gehen. Gerade mit dem Skript von lynkmeister probiert:

Zitat von: lynckmeister am 15 Februar 2023, 07:21:09alternativ kannst du auch mal folgendes script in eine datei deiner BASH ( zb vom Rasp) legen und 7....
5x mal nacheinander kommt ein 401 und dann wieder die korrekte Antwort mit der eigenen VIN. Was soll das? Timing scheint keine Rolle zu spielen.

Wie ist das bei euch?

Pepe_Pb

Das kann ich bestätigen, ab und zu werden die Befehle nicht sauber abgearbeitet. Ich habe aber noch keinen Zusammenhang feststellen können, woran es liegt. In den letzten Tagen hat es aber sehr zuverlässig funktioniert, ich teste es immer mit dem öffnen und schliessen der Zentralverriegelung.
Der Fehler ist aber unterschiedlich, manchmal führt Volvo den Befehl nicht aus (dann kommt auch keine Bestätigung) manchmal führt er den Befehl aus, es kommt aber keine Bestätigung und meistens funktioniert beides. Ich habe auch festgestellt, dass die Antwortzeit zwischen Aufruf und Ausführung am Auto sehr unterschiedlich ist.


Xcoder

Scheinnt jetzt wieder OK zu sein. Habe kein einziges 401 mehr erhalten.

Sany

Hallo zusammen,

versuche gerade meinen Volvo zu erreichen. Dazu habe ich das Beispiel aus Post#1 mit den Anpassungen wg v2 aus Post #33 erweitert. Die Vorbereitungen auf der Volvoseite (VCC API key etc) sind auch erledigt. Dort sehe ich auch, dass Abfragen ankommen (Requests today: 18 out of 10.000). Nur scheint das mit dem access-Token nicht zu klappen, weshalb dann z.B. SOC Abfragen als unauthorized abgewiesen werden.
Sehe gerade auf der Volvo-Seite:
ZitatThis API is available for:

    All car models between model year 2015 and 2022 (some endpoints have limited availability).
ich hoffe mal das geht auch für ein spätes 2023 Modell....

Könnte jemand, bei dem es funktioniert, mal die gesamte DEF posten? Ich denke das führt schneller ans Ziel, als meine Versuche zu reparieren....


Danke schon mal.

Bei Bedarf poste ich auch gerne meine DEF und den Output.


Gruß

Sany
fhem auf Zotac ZBox nano als LXC auf Proxmox, weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

Pepe_Pb

#42
Bei mir werden auch ab und zu die Abfragen abgewiesen, dann erneuere ich meine individuellen Autentifizierungsdaten, indem ich diese einfach oben in die fhem Eingabzeile kopiere und nach und nach absetze:

setreading VolvoOnCall myAPP-KEY blabliblubb
setreading VolvoOnCall myVolvoID peterbla@bliblubb.de
setreading VolvoOnCall myVolvoPW blablabli

Danach ein reread auf das VolvoOnCall und dann gehts bei mir wieder und dann ein save des fhem's damit es gesichert wird.


Pepe_Pb

######################  Volvo    ###################################################
#
define VolvoOnCall HTTPMOD https://volvoid.eu.volvocars.com/as/token.oauth2 2000
attr VolvoOnCall alias Volvo XC60
attr VolvoOnCall extractAllJSON 1
attr VolvoOnCall get01Header1 accept: application/json
attr VolvoOnCall get01Header2 vcc-api-key: %APPKEY%
attr VolvoOnCall get01Header3 authorization: Bearer %AC%
attr VolvoOnCall get01Name EngineStatus
attr VolvoOnCall get01Poll 1
attr VolvoOnCall get01URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%VIN%/engine-status
attr VolvoOnCall get02Header1 accept: application/vnd.volvocars.api.energy.vehicledata.v1+json
attr VolvoOnCall get02Header2 vcc-api-key: %APPKEY%
attr VolvoOnCall get02Header3 authorization: Bearer %AC%
attr VolvoOnCall get02Name SOC
attr VolvoOnCall get02Poll 1
attr VolvoOnCall get02URL https://api.volvocars.com/energy/v1/vehicles/%VIN%/recharge-status/battery-charge-level
attr VolvoOnCall get03Header1 accept: application/json
attr VolvoOnCall get03Header2 vcc-api-key: %APPKEY%
attr VolvoOnCall get03Header3 authorization: Bearer %AC%
attr VolvoOnCall get03Name Vehicles
attr VolvoOnCall get03URL https://api.volvocars.com/extended-vehicle/v1/vehicles
attr VolvoOnCall get04Header1 accept: application/json
attr VolvoOnCall get04Header2 vcc-api-key: %APPKEY%
attr VolvoOnCall get04Header3 authorization: Bearer %AC%
attr VolvoOnCall get04Name Odometer
attr VolvoOnCall get04Poll 1
attr VolvoOnCall get04URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%VIN%/odometer
attr VolvoOnCall get05Header1 accept: application/json
attr VolvoOnCall get05Header2 vcc-api-key: %APPKEY%
attr VolvoOnCall get05Header3 authorization: Bearer %AC%
attr VolvoOnCall get05Name Statistics
attr VolvoOnCall get05Poll 1
attr VolvoOnCall get05URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%VIN%/statistics
attr VolvoOnCall get08Header1 accept: application/json
attr VolvoOnCall get08Header2 vcc-api-key: %APPKEY%
attr VolvoOnCall get08Header3 authorization: Bearer %AC%
attr VolvoOnCall get08Name VehicleDetails
attr VolvoOnCall get08Poll 1
attr VolvoOnCall get08URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%VIN%
attr VolvoOnCall getHeader1 accept: application/vnd.volvocars.api.connected-vehicle.vehicledata.v1+json
attr VolvoOnCall getHeader2 vcc-api-key: %APPKEY%
attr VolvoOnCall getHeader3 authorization: Bearer %AC%
attr VolvoOnCall group EG
attr VolvoOnCall httpVersion 1.1
attr VolvoOnCall icon car
attr VolvoOnCall replacement01Mode reading
attr VolvoOnCall replacement01Regex %AC%
attr VolvoOnCall replacement01Value access_token
attr VolvoOnCall replacement02Mode reading
attr VolvoOnCall replacement02Regex %APPKEY%
attr VolvoOnCall replacement02Value myAPP-KEY
attr VolvoOnCall replacement03Mode reading
attr VolvoOnCall replacement03Regex %VolvoID%
attr VolvoOnCall replacement03Value myVolvoID
attr VolvoOnCall replacement04Mode reading
attr VolvoOnCall replacement04Regex %VolvoPW%
attr VolvoOnCall replacement04Value myVolvoPW
attr VolvoOnCall replacement05Mode reading
attr VolvoOnCall replacement05Regex %VIN%
attr VolvoOnCall replacement05Value vehicles_01_id
attr VolvoOnCall requestData username=%VolvoID%&password=%VolvoPW%&grant_type=password&scope=openid email profile care_by_volvo:financial_information:invoice:read care_by_volvo:financial_information:payment_method care_by_volvo:subscription:read customer:attributes customer:attributes:write order:attributes vehicle:attributes tsp_customer_api:all conve:brake_status conve:climatization_start_stop conve:command_accessibility conve:commands conve:diagnostics_engine_status conve:diagnostics_workshop conve:doors_status conve:engine_status conve:environment conve:fuel_status conve:honk_flash conve:lock conve:lock_status conve:navigation conve:odometer_status conve:trip_statistics conve:tyre_status conve:unlock conve:vehicle_relation conve:warnings conve:windows_status energy:battery_charge_level energy:charging_connection_status energy:charging_system_status energy:electric_range energy:estimated_charging_time energy:recharge_status vehicle:attributes
attr VolvoOnCall requestHeader01 content-type: application/x-www-form-urlencoded
attr VolvoOnCall requestHeader02 authorization: Basic aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
attr VolvoOnCall requestHeader03 user-agent: okhttp/4.10.0
attr VolvoOnCall room Home
attr VolvoOnCall set01Header1 content-type: application/json
attr VolvoOnCall set01Header2 vcc-api-key: %APPKEY%
attr VolvoOnCall set01Header3 authorization: Bearer %AC%
attr VolvoOnCall set01Method POST
attr VolvoOnCall set01Name AC-OFF
attr VolvoOnCall set01NoArg 1
attr VolvoOnCall set01ParseResponse 1
attr VolvoOnCall set01URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%VIN%/commands/climatization-stop
attr VolvoOnCall set02Header1 content-type: application/json
attr VolvoOnCall set02Header2 vcc-api-key: %APPKEY%
attr VolvoOnCall set02Header3 authorization: Bearer %AC%
attr VolvoOnCall set02Method POST
attr VolvoOnCall set02Name AC-ON
attr VolvoOnCall set02NoArg 1
attr VolvoOnCall set02ParseResponse 1
attr VolvoOnCall set02URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%VIN%/commands/climatization-start
attr VolvoOnCall set03Header1 content-type: application/json
attr VolvoOnCall set03Header2 vcc-api-key: %APPKEY%
attr VolvoOnCall set03Header3 authorization: Bearer %AC%
attr VolvoOnCall set03Method POST
attr VolvoOnCall set03Name DOOR-ON
attr VolvoOnCall set03NoArg 1
attr VolvoOnCall set03ParseResponse 1
attr VolvoOnCall set03URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%VIN%/commands/lock
attr VolvoOnCall set04Header1 content-type: application/json
attr VolvoOnCall set04Header2 vcc-api-key: %APPKEY%
attr VolvoOnCall set04Header3 authorization: Bearer %AC%
attr VolvoOnCall set04Method POST
attr VolvoOnCall set04Name DOOR-OFF
attr VolvoOnCall set04NoArg 1
attr VolvoOnCall set04ParseResponse 1
attr VolvoOnCall set04URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%VIN%/commands/unlock
attr VolvoOnCall sortby 09
attr VolvoOnCall stateFormat Ladestand Auto: [VolvoOnCall:data_batteryChargeLevel_value]% reicht für [VolvoOnCall:data_distanceToEmptyBattery_value]km elektrisch und [VolvoOnCall:data_distanceToEmptyTank_value]km mit Benzin
attr VolvoOnCall verbose 5
#

Sany

Hallo Pepe_Pb,

vielen Dank für die Def. Tja leider genau das selbe Ergebnis:
error: invalid_client
error_description: Full authentication is required to access this resource
error_message: Unauthorized
message: Resource not found
status_code: 404

Ich habe nochmals auf der Volvo-Seite das Procedere durchgemacht, neuen API-Key erhalten, und auch noch das Passwort zur Volvo-ID erneuert. Das Resultat ist immer gleich.

Gut, dann werde ich da tiefer einsteigen, das dauert aber, da die nächsten Tage leider schon ziemlich verplant sind.

Ich melde mich wieder....



Gruß



Sany
fhem auf Zotac ZBox nano als LXC auf Proxmox, weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....