Moin zusammen,
dank der Vorarbeit von nikagersonlohman auf Github (https://github.com/openhab/openhab-addons/issues/13607) ist es mir gelungen die neue API für Modelle ab 21 erfolgreich einzubinden. Sie läuft nun für meinen XC90 und ich würde das gern hier mit allen Interessierten teilen :
Als erstes sollte man mal checken , ob der Login mit der Volvo-ID problemlos funktioniert: https://volvoid.eu.volvocars.com/VolvoLogin/login
Ich habe die Volvo-ID auf Email (und nicht auf Telefonnummer stehen)
Dann muss man sich einen Account machen auf : https://developer.volvocars.com/
Nachdem man da eingeloggt ist muss man sich für die API eine "App" anlegen. Zu der App gehört dann ein APP-Key (VCC API key - Primary) den man bei jeder Abfrage braucht ... Das geht unter Create Application : https://developer.volvocars.com/apis/docs/getting-started/
Das wars schon, jetzt gehts los mit der Konfig vom HTTPMOD. Dazu ein paar Erklärungen:
Es müssen zunächst die drei setreadings
* myAPP-KEY (VCC API key - Primary)
* myVolvoID und
* myVolvoPW
gefüllt werden...
Das Device ist so gebaut, dass es einmal in der Stunde sich ein neues Token holt. Es gibt auch ein Updatetoken, dass mehrere Tage gültig ist, aber damit hab ich noch nicht rumgespielt. Das Token läuft ab und das HTTPMOD holt eben ein Neues....
Das zurückkommende JSON wird automatisch geparsed und das Token wird unter Access_token als Reading angelegt.
In den URLs wird die Fahrzeug Ident Nummer (VIN) verwendet, die holt sich das Device aktuell nicht automatisch , nachdem also das Token geholt wurde muss manuell
get vehicles aufgerufen werden... dann wird die VIN in ein reading vehicles_01_id ausgelesen und ab dann für alle weiteren calls verwendet.
Dann läuft es von selbst... Aktuell habe ich nur
Klima an/aus (Standheizung!)
Batterieladestatus ( leier geht das bei meinem XC90 Hybrid nicht es kommt ein leeres {data}... ich habe bei Volvo developers angefragt, aber bislang keine Antwort... geht das bei euch??
Engine Status (an aus)
Ich habe noch weitere Endpunkte wie fuel etc ausprobiert, aber hier noch nicht drin... sollte aber hier leicht erweiterbar für jeden sein...
define VolvoOnCall HTTPMOD https://volvoid.eu.volvocars.com/as/token.oauth2 1750
setreading VolvoOnCall myAPP-KEY <APP-KEY>
setreading VolvoOnCall myVolvoID <VOLVO-ID>
setreading VolvoOnCall myVolvoPW <VOLVO-ID-PW>
attr VolvoOnCall extractAllJSON 1
attr VolvoOnCall get01Name EngineStatus
attr VolvoOnCall get01URL https://api.volvocars.com/connected-vehicle/v1/vehicles/%VIN%/engine-status
attr VolvoOnCall get02Name SOC
attr VolvoOnCall get02URL https://api.volvocars.com/connected-vehicle/v1/vehicles/%VIN%/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 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 httpVersion 1.1
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 aDRZZjBiOlU4WWtTYlZsNnh3c2c1WVFxWmZyZ1ZtSWFEcGhPc3kxUENhVXNpY1F0bzNUUjVrd2FKc2U0QVpkZ2ZJZmNMeXc=
attr VolvoOnCall requestHeader03 user-agent: okhttp/4.10.0
attr VolvoOnCall room aussen
attr VolvoOnCall set01Header1 content-type: application/vnd.volvocars.api.connected-vehicle.climatizationstop.v1+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 set01URL https://api.volvocars.com/connected-vehicle/v1/vehicles/%VIN%/commands/climatization-stop
attr VolvoOnCall set02Header1 content-type: application/vnd.volvocars.api.connected-vehicle.climatizationstart.v1+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 set02URL https://api.volvocars.com/connected-vehicle/v1/vehicles/%VIN%/commands/climatization-start
attr VolvoOnCall setHeader1 content-type: application/vnd.volvocars.api.connected-vehicle.climatizationstart.v1+json
attr VolvoOnCall setHeader2 vcc-api-key: %APPKEY%
attr VolvoOnCall setHeader3 authorization: Bearer %AC%
attr VolvoOnCall verbose 5
in der Request Data, ist der Scope definiert, hier müssen alle Calls von den Endpunkten rein, die man nutzen will..
Vielen Dank für deine Arbeit.
Dann versuche ich hier auch noch einmal mein Glück, du scheinst ja von der Materie Ahnung zu haben.
Hast du eine Steuerung der Standheizung über Alexa am laufen?
Habe es damals aufgegeben....
Alexa noch nicht, aber das ist jetzt zumindest mit einem Dummy vermutlich eine Kleinigkeit .. ich schau mir das mal in den nächsten Tagen an...
und Ahnung naja... also mit httpmod hab ich mein Bestes gegeben , gibt da sicher noch einiges zu verbessern ;))
so also eine einfachste Alexanbindung geht so :
attr VolvoOnCall alexaName Volvo
attr VolvoOnCall homebridgeMapping On=AC-ON,off=AC-OFF,cmdOn=AC-ON,cmdOff=AC-OFF
attr VolvoOnCall genericDeviceType switch
Jetzt kannst du Alexa, volvo an und Volvo aus sagen ;) Dann geht die Standheizung an und aus , funktioniert - für mich reicht das ...
Zitat von: lynckmeister am 14 Februar 2023, 21:43:00
so also eine einfachste Alexanbindung geht so :
attr VolvoOnCall alexaName Volvo
attr VolvoOnCall homebridgeMapping On=AC-ON,off=AC-OFF,cmdOn=AC-ON,cmdOff=AC-OFF
attr VolvoOnCall genericDeviceType switch
Jetzt kannst du Alexa, volvo an und Volvo aus sagen ;) Dann geht die Standheizung an und aus , funktioniert - für mich reicht das ...
Das wäre tatsächlich cool, wenn das so einfach wäre...
Mein Volvo ist MY2018.
Hier mal die RAW:
defmod VolvoOnCall HTTPMOD https://user:pass@vocapi.wirelesscar.net/customerapi/rest/v3.0/vehicles/FIN/status 300
attr VolvoOnCall alexaName Volvo
attr VolvoOnCall event-on-change-reading .*
attr VolvoOnCall extractAllJSON 1
attr VolvoOnCall genericDeviceType switch
attr VolvoOnCall homebridgeMapping On=AC-ON,off=AC-OFF,cmdOn=AC-ON,cmdOff=AC-OFF
attr VolvoOnCall requestHeader01 Content-Type: application/json
attr VolvoOnCall requestHeader02 x-device-id: Device
attr VolvoOnCall requestHeader03 x-originator-type: App
attr VolvoOnCall requestHeader04 x-os-type: Android
attr VolvoOnCall requestHeader05 x-os-version: 22
attr VolvoOnCall room Volvo
attr VolvoOnCall set01Name Lock
attr VolvoOnCall set01NoArg 1
attr VolvoOnCall set01URL https://user:pass@vocapi.wirelesscar.net/customerapi/rest/v3.0/vehicles/FIN/lock
setstate VolvoOnCall 2023-02-15 01:50:34 averageFuelConsumption 115
setstate VolvoOnCall 2023-02-15 01:50:34 averageFuelConsumptionTimestamp 2023-02-14T14:45:39+0000
setstate VolvoOnCall 2023-02-15 01:50:34 averageSpeed 55
setstate VolvoOnCall 2023-02-15 01:50:34 averageSpeedTimestamp 2023-02-14T14:45:39+0000
setstate VolvoOnCall 2023-02-15 01:50:34 brakeFluid Normal
setstate VolvoOnCall 2023-02-15 01:50:34 brakeFluidTimestamp 2023-02-14T14:45:39+0000
setstate VolvoOnCall 2023-02-15 01:50:34 bulbFailuresTimestamp 2023-02-14T14:45:39+0000
setstate VolvoOnCall 2023-02-15 01:50:34 carLocked 1
setstate VolvoOnCall 2023-02-15 01:50:34 carLockedTimestamp 2023-02-14T14:45:39+0000
setstate VolvoOnCall 2023-02-15 01:50:34 distanceToEmpty 80
setstate VolvoOnCall 2023-02-15 01:50:34 distanceToEmptyTimestamp 2023-02-14T14:45:39+0000
setstate VolvoOnCall 2023-02-15 01:50:34 doors_frontLeftDoorOpen 0
setstate VolvoOnCall 2023-02-15 01:50:34 doors_frontRightDoorOpen 0
setstate VolvoOnCall 2023-02-15 01:50:34 doors_hoodOpen 0
setstate VolvoOnCall 2023-02-15 01:50:34 doors_rearLeftDoorOpen 0
setstate VolvoOnCall 2023-02-15 01:50:34 doors_rearRightDoorOpen 0
setstate VolvoOnCall 2023-02-15 01:50:34 doors_tailgateOpen 0
setstate VolvoOnCall 2023-02-15 01:50:34 doors_timestamp 2023-02-14T14:45:39+0000
setstate VolvoOnCall 2023-02-15 01:50:34 engineRunning 0
setstate VolvoOnCall 2023-02-15 01:50:34 engineRunningTimestamp 2023-02-14T14:45:39+0000
setstate VolvoOnCall 2022-09-10 14:32:39 errorDescription An unknown error occured
setstate VolvoOnCall 2022-09-10 14:32:39 errorLabel UnknownError
setstate VolvoOnCall 2023-02-15 01:50:34 fuelAmount 11
setstate VolvoOnCall 2023-02-15 01:50:34 fuelAmountLevel 15
setstate VolvoOnCall 2023-02-15 01:50:34 fuelAmountLevelTimestamp 2023-02-14T14:45:39+0000
setstate VolvoOnCall 2023-02-15 01:50:34 fuelAmountTimestamp 2023-02-14T14:45:39+0000
setstate VolvoOnCall 2023-02-15 01:50:34 heater_seatSelection_frontDriverSide 0
setstate VolvoOnCall 2023-02-15 01:50:34 heater_seatSelection_frontPassengerSide 0
setstate VolvoOnCall 2023-02-15 01:50:34 heater_seatSelection_rearDriverSide 0
setstate VolvoOnCall 2023-02-15 01:50:34 heater_seatSelection_rearMid 0
setstate VolvoOnCall 2023-02-15 01:50:34 heater_seatSelection_rearPassengerSide 0
setstate VolvoOnCall 2023-02-15 01:50:34 heater_status off
setstate VolvoOnCall 2023-02-15 01:50:34 heater_timestamp 2023-02-14T13:07:18+0000
setstate VolvoOnCall 2023-02-15 01:50:34 odometer 67042221
setstate VolvoOnCall 2023-02-15 01:50:34 odometerTimestamp 2023-02-14T14:45:39+0000
setstate VolvoOnCall 2023-02-15 01:50:34 privacyPolicyEnabled 0
setstate VolvoOnCall 2023-02-15 01:50:34 privacyPolicyEnabledTimestamp 2022-03-12T13:41:18+0000
setstate VolvoOnCall 2023-02-15 01:50:34 serviceWarningStatus Normal
setstate VolvoOnCall 2023-02-15 01:50:34 serviceWarningStatusTimestamp 2023-02-14T14:45:39+0000
setstate VolvoOnCall 2023-02-15 01:50:34 timeFullyAccessibleUntil 2023-02-19T14:44:31+0000
setstate VolvoOnCall 2023-02-15 01:50:34 timePartiallyAccessibleUntil 2023-03-08T14:44:31+0000
setstate VolvoOnCall 2023-02-15 01:50:34 tripMeter1 513800
setstate VolvoOnCall 2023-02-15 01:50:34 tripMeter1Timestamp 2023-02-14T14:45:39+0000
setstate VolvoOnCall 2023-02-15 01:50:34 tripMeter2 12400
setstate VolvoOnCall 2023-02-15 01:50:34 tripMeter2Timestamp 2023-02-14T14:45:39+0000
setstate VolvoOnCall 2023-02-15 01:50:34 tyrePressure_frontLeftTyrePressure Normal
setstate VolvoOnCall 2023-02-15 01:50:34 tyrePressure_frontRightTyrePressure Normal
setstate VolvoOnCall 2023-02-15 01:50:34 tyrePressure_rearLeftTyrePressure Normal
setstate VolvoOnCall 2023-02-15 01:50:34 tyrePressure_rearRightTyrePressure Normal
setstate VolvoOnCall 2023-02-15 01:50:34 tyrePressure_timestamp 2023-02-14T14:45:39+0000
setstate VolvoOnCall 2023-02-15 01:50:34 washerFluidLevel Normal
setstate VolvoOnCall 2023-02-15 01:50:34 washerFluidLevelTimestamp 2023-02-14T14:45:39+0000
setstate VolvoOnCall 2023-02-15 01:50:34 windows_frontLeftWindowOpen 0
setstate VolvoOnCall 2023-02-15 01:50:34 windows_frontRightWindowOpen 0
setstate VolvoOnCall 2023-02-15 01:50:34 windows_rearLeftWindowOpen 0
setstate VolvoOnCall 2023-02-15 01:50:34 windows_rearRightWindowOpen 0
setstate VolvoOnCall 2023-02-15 01:50:34 windows_timestamp 2023-02-14T14:45:39+0000
Leider funktioniert das Ganze so nicht.
Alexa findet auch kein Device mit dem Namen Volvo.
Hast du eine Idee, wo da der Fehler sein könnte?
Habe das Ganze jetzt mal umgemodelt, so wie oben von lynckmeister beschrieben.
Hängt nun bei mir bei der Registrierung.
Einen App Key gibt es nicht.
Es gibt einen VCC API key - Primary sowie einen VCC API key - Secondary.
Beide funktionieren nicht, bekomme nur einen Verbindungsfehler.
Dann gibt es noch den Access Token...
Also doch etwas verwirrender, kannst du Licht ins Dunkel bringen?
Oh ja das war etwas unpräzise beschrieben, ich änder das : Du musst als App-Key den primary aus der angelegten APP nehmen. Der Access_Token wird beim reread automatisch erzeugt und im Device abgelegt!
paste mal das Log vom Hauptlog ( fhem-2023-2 oder so ) darin steht bei verbose 5 die Response vom Server und du kannst sehen was er zurückmeldet. Wenn du ein Problem mit der Authroisierung hast kommt der Fehler 404 glaub ich UNAUTHORIZED , oder es kommt auch ( wenn du einen ungültigen CALL hast UNKNOWN RESSOURCE) Check das mal und poste mal hier ...
Alexa musst du natürlich, nachdem du das eingetragen hast set <alexa-device> restart machen, anschliessend in der alexaapp oder auf alexa.amazon.com neue Geräte suchen... dann solltest du auch "volvo" oder wie der alexaname eben ist in deiner Liste auftauchen...
Dein Auto sollte jedenfalls von der API unterstützt werden..
alternativ kannst du auch mal folgendes script in eine datei deiner BASH ( zb vom Rasp) legen und 7
*Username
* PW
* App Key
eintragen
dann
ausführen:
#!/bin/bash
result=$(curl -s -X POST 'https://volvoid.eu.volvocars.com/as/token.oauth2' \
-H 'content-type: application/x-www-form-urlencoded' \
-H 'authorization: Basic aDRZZjBiOlU4WWtTYlZsNnh3c2c1WVFxWmZyZ1ZtSWFEcGhPc3kxUENhVXNpY1F0bzNUUjVrd2FKc2U0QVpkZ2ZJZmNMeXc=' \
-H 'user-agent: okhttp/4.10.0' \
-d 'username=<VOLVOID-USERNAME>&password=<VOLVO-ID-PASSWORD>&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')
result=$(sed -n 's/^.*token":"\(.*\)","refresh.*/\1/p' <<< "$result")
curl -s -X GET 'https://api.volvocars.com/extended-vehicle/v1/vehicles' \
-H 'accept: application/json' \
-H "authorization: Bearer $result" \
-H 'vcc-api-key: <VCC API key - Primary>'
echo $result >out.token
Damit habe ich das aufgebaut...
Wenn es funktioniert wird das neue Token in out.token abgelegt und du erhälst dein VIN gelistet:
{
"vehicles" : [ {
"timestamp" : 1635465600000,
"id" : "YV1LFxxxxxx7xxxxxxx9"
} ]
}
Zitat von: lynckmeister am 15 Februar 2023, 07:21:09
Oh ja das war etwas unpräzise beschrieben.....
Danke für deine Rückantwort :)
Volvo schien wohl gestern Abend Probleme zu haben?
Nun bekomme ich readings, u. a. aber auch dieses:
error_description
Full authentication is required to access this resource
2023-02-15 12:35:51
error_message
Unauthorized
2023-02-15 12:35:51
Muss ich bei den Dev Sachen meine App publishen?
Ist das der Fehler?
ja das ist ein Fehler ... du scheinst kein gültiges Token zu haben... wiegesagt... poste mal die Logs hier , was passiert wenn du ein reread machst ..,.(verbose 5 nicht vergessen)
Alternativ kannst du das Script in der Bash abfeuern und da die Rückmeldung mal reingeben...
Zitat von: lynckmeister am 15 Februar 2023, 12:45:02
ja das ist ein Fehler ... du scheinst kein gültiges Token zu haben... wiegesagt... poste mal die Logs hier , was passiert wenn du ein reread machst ..,.(verbose 5 nicht vergessen)
Alternativ kannst du das Script in der Bash abfeuern und da die Rückmeldung mal reingeben...
2023-02-15 12:52:53 HTTPMOD VolvoOnCall reread
2023-02-15 12:52:54 HTTPMOD VolvoOnCall error_description: Unexpected problem: Server error
2023-02-15 12:52:54 HTTPMOD VolvoOnCall error: server_error
Mehr Einträge sind nicht...
Verbose 5 habe ich so im Device:
attr VolvoOnCall verbose 5
Habe jetzt mal die Veröffentlichung beantragt
ZitatStatus:
Publication under review
Das veröffentlichen der App wird dir nichts nützen. Der Prozess soll auch bis zu 21 Tage dauern. Ich habe auch keine App veröffentlicht
Ich habe mir jetzt nochmal ein zweites Device angelegt und es damit auch probiert und es geht auf anhieb.
Was mir direkt auffällt bei dir ist deine URL : defmod VolvoOnCall HTTPMOD https://user:pass@vocapi.wirelesscar.net/customerapi/rest/v3.0/vehicles/FIN/status 300
Das hat nix mit der zu tun die ich oben beschrieben habe... auch stehen in deinem RAW noch jede Menge anderer Sachen drin, die mir unbekannt sind und womöglich aus der alten API kommen ? Wenn du die Dinge mischt, wird das wohl eher nix ...
Lege dir ein NEUES Device an und trage dort exakt das ein was ich beschrieben habe, dann läufts...
Zitat von: lynckmeister am 15 Februar 2023, 17:03:20
Das veröffentlichen der App wird dir nichts nützen.....
Lege dir ein NEUES Device an und trage dort exakt das ein was ich beschrieben habe, dann läufts...
Neues Device habe ich angelegt. Ja, habe vorher das alte VolvoOnCall hier genutzt und es waren noch Readings da.
Habe ich alles entfernt.
Fehler bleibt weiterhin
Sag mal
Kann es sein, dass es daran liegt, dass in meinem Passwort ein Sonderzeichen enthalten ist?
Ist das Zeichen %
Übermittelt das FHEM falsch?
Probiere es doch aus , kannst das PW ja leicht ändern ..
Ansonsten waren da nicht einfach zuviele Attribute sondern deine Basis URL war eine andere , die zeigte wo anders hin und du hattest Username und PW drin .. Liste nochmal dein device wie es jetzt aussieht
Zitat von: lynckmeister am 15 Februar 2023, 18:41:45
Liste nochmal dein device wie es jetzt aussieht
Internals:
BUSY 0
DEF https://volvoid.eu.volvocars.com/as/token.oauth2 0
FUUID 63ed109c-f33f-4afb-4718-b5a8b62e4931b45e
Interval 0
MainURL https://volvoid.eu.volvocars.com/as/token.oauth2
ModuleVersion 4.1.15 - 17.12.2022
NAME VolvoXC60
NOTIFYDEV global
NR 338
NTFY_ORDER 50-VolvoXC60
STATE ???
TYPE HTTPMOD
eventCount 3
value
CompiledRegexes:
HTTPCookieHash:
PF;:
Name PF
Options Path=/; Expires=Wed, 15-Feb-2023 17:14:13 GMT; Max-Age=300; Secure; HttpOnly; SameSite=None
Path
Value Tq2gSlmtbWCNo9fokzBbi0
HttpUtils:
NAME
addr https://api.volvocars.com:443
auth 0
buf
code 401
compress 1
conn
data
displayurl https://api.volvocars.com/connected-vehicle/v1/vehicles//engine-status
header accept: application/vnd.volvocars.api.connected-vehicle.vehicledata.v1+json
vcc-api-key: 450ec7446dc84c6eb4ce53xxxxxxxxxxx
authorization: Bearer
Cookie: PF=Tq2gSlmtbWCNo9fokzBbi0
host api.volvocars.com
httpheader HTTP/1.1 401 Unauthorized
content-length: 207
content-type: application/json;charset=UTF-8
date: Wed, 15 Feb 2023 17:10:54 GMT
server: vcc
cache-control: no-cache, no-store, max-age=0, must-revalidate
expires: 0
pragma: no-cache
vcc-api-operationid: cba41a39-e1ef-475d-bb33-af95031ebf26
x-content-type-options: nosniff
x-xss-protection: 1; mode=block
strict-transport-security: max-age=31536000 ; includeSubDomains
x-frame-options: DENY
request-context: appId=cid-v1:d08a6ac1-4942-4ce7-a466-f3dd07fd71d1
connection: close
httpversion 1.1
hu_blocking 0
hu_filecount 1
hu_port 443
hu_portSfx
ignoreredirects 1
loglevel 4
path /connected-vehicle/v1/vehicles//engine-status
protocol https
redirects 0
timeout 2
url https://api.volvocars.com/connected-vehicle/v1/vehicles//engine-status
sslargs:
QUEUE:
READINGS:
2023-02-15 18:09:13 error server_error
2023-02-15 18:10:54 error_description Full authentication is required to access this resource
2023-02-15 18:10:54 error_message Unauthorized
2023-02-15 18:04:28 myAPP-KEY 450ec7446dc84c6eb4ce53xxxxxxxxxxx
2023-02-15 18:04:28 myVolvoID VolvoXC60@mailadresse.de
2023-02-15 18:04:28 myVolvoPW Password0815%
2023-02-15 18:10:54 operationId cba41a39-e1ef-475d-bb33-af95031ebf26
2023-02-15 18:10:54 status 401
REQUEST:
context get
data
header accept: application/vnd.volvocars.api.connected-vehicle.vehicledata.v1+json
vcc-api-key: %APPKEY%
authorization: Bearer %AC%
ignoreredirects 0
num 01
retryCount 0
type get01
url https://api.volvocars.com/connected-vehicle/v1/vehicles/%VIN%/engine-status
value
defptr:
readingBase:
error reading
error_description get
error_message get
operationId get
status get
readingNum:
error unknown
error_description 01
error_message 01
operationId 01
status 01
readingOutdated:
requestReadings:
get01:
error_description get 01
error_message get 01
operationId get 01
status get 01
update:
error reading unknown
error_description reading unknown
Attributes:
extractAllJSON 1
get01Name EngineStatus
get01URL https://api.volvocars.com/connected-vehicle/v1/vehicles/%VIN%/engine-status
get02Name SOC
get02URL https://api.volvocars.com/connected-vehicle/v1/vehicles/%VIN%/battery-charge-level
get03Header1 accept: application/json
get03Header2 vcc-api-key: %APPKEY%
get03Header3 authorization: Bearer %AC%
get03Name Vehicles
get03URL https://api.volvocars.com/extended-vehicle/v1/vehicles
getHeader1 accept: application/vnd.volvocars.api.connected-vehicle.vehicledata.v1+json
getHeader2 vcc-api-key: %APPKEY%
getHeader3 authorization: Bearer %AC%
httpVersion 1.1
replacement01Mode reading
replacement01Regex %AC%
replacement01Value access_token
replacement02Mode reading
replacement02Regex %APPKEY%
replacement02Value myAPP-KEY
replacement03Mode reading
replacement03Regex %VolvoID%
replacement03Value myVolvoID
replacement04Mode reading
replacement04Regex %VolvoPW%
replacement04Value myVolvoPW
replacement05Mode reading
replacement05Regex %VIN%
replacement05Value vehicles_01_id
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
requestHeader01 content-type: application/x-www-form-urlencoded
requestHeader02 authorization: Basic aDRZZjBiOlU4WWtTYlZsNnh3c2c1WVFxWmZyZ1ZtSWFEcGhPc3kxUENhVXNpY1F0bzNUUjVrd2FKc2U0QVpkZ2ZJZmNMeXc=
requestHeader03 user-agent: okhttp/4.10.0
room Volvo
set01Header1 content-type: application/vnd.volvocars.api.connected-vehicle.climatizationstop.v1+json
set01Header2 vcc-api-key: %APPKEY%
set01Header3 authorization: Bearer %AC%
set01Method POST
set01Name AC-OFF
set01NoArg 1
set01URL https://api.volvocars.com/connected-vehicle/v1/vehicles/%VIN%/commands/climatization-stop
set02Header1 content-type: application/vnd.volvocars.api.connected-vehicle.climatizationstart.v1+json
set02Header2 vcc-api-key: %APPKEY%
set02Header3 authorization: Bearer %AC%
set02Method POST
set02Name AC-ON
set02NoArg 1
set02URL https://api.volvocars.com/connected-vehicle/v1/vehicles/%VIN%/commands/climatization-start
setHeader1 content-type: application/vnd.volvocars.api.connected-vehicle.climatizationstart.v1+json
setHeader2 vcc-api-key: %APPKEY%
setHeader3 authorization: Bearer %AC%
verbose 5
EDIT 19:10h
Nochmal eine Frage zum App Key.
Ich habe einen Github Account, dieser ist aber nicht identisch mit meiner Mail von Volvo.
Ist es überhaupt richtig, sich bei Volvo Dev mit Github anzumelden?
Oder muss das über CDSID erfolgen?
Oder egal?
Passwort habe ich geändert auf ohne "%"
Fehler bleibt
Wie kommst du denn auf Github? Das hat nix mit Github zu sondern mit VOlvo zu tun .. du musst deine VolvoID und das dazugehöriige PW nutzen, daher habe ich auch geschrieben , als ERSTES prüfen, ob du mit diesen Daten dich hier anmelden kannst: https://volvoid.eu.volvocars.com/VolvoLogin/login
wenn das geht nimm genau diese credentials und nutze sie für unser HTTPMOD-Device..
Dein Listing sieht gut aus - denk dran, bevor du irgendwas anderes wie Engine oder so machen kann , musst du ein reread machen damit erstmal das TOken und damit auch die Vehicle-ID kommt, die du für alles Weitere brauchst...
Ich sehe bei dir den Fehler 207 httpheader HTTP/1.1 401 Unauthorized - das heisst jetzt kommt kein Internal Error mehr...
Entweder es liegt daran, dass du falsche Credentials verwendest , oder dass du nicht ERST reread gemacht hast und versucht hast gleich den Enginestatus (oder sonst einen Endpoint) zu nutzen , obwohl du noch keinen Token hast
Zitat von: lynckmeister am 14 Februar 2023, 17:05:47
Als erstes sollte man mal checken , ob der Login mit der Volvo-ID problemlos funktioniert: https://volvoid.eu.volvocars.com/VolvoLogin/login
Ich habe die Volvo-ID auf Email (und nicht auf Telefonnummer stehen)
Check, funktioniert
Zitat von: lynckmeister am 14 Februar 2023, 17:05:47
Dann muss man sich einen Account machen auf : https://developer.volvocars.com/
Nachdem man da eingeloggt ist muss man sich für die API eine "App" anlegen. Zu der App gehört dann ein APP-Key (VCC API key - Primary) den man bei jeder Abfrage braucht ... Das geht unter Create Application : https://developer.volvocars.com/apis/docs/getting-started/
Konto anlagen, richtig?
Dort habe ich mich mit Github angemeldet.
Deshalb auch meine Frage, ob es CDSID sein soll? Weil da lande ich auf einmal bei Microsoft (meine Volvo ID ist meine Mailadresse, mit welche ich auch bei Outlook.com registriert bin)
Also, auf der Seite
https://developer.volvocars.com/ (https://developer.volvocars.com/) mit der Volvo ID und Passwort anmelden? Verstehe deinen 1. Post nicht so!
Auf https://developer.volvocars.com/ (https://developer.volvocars.com/) einen Account erstellen? So verstehe ich deinen 1. Post.
Um mich dort zu registrieren habe ich mein Github Konto genommen und verknüpft.
Fehler?
Deshalb meine Frage nach CDSID. Dann muss ich gucken, wie ich das hinbekomme.
Achso ja mit was du dich bei der Api Seite anmeldest ist egal , diese Anmeldedaten verwendest du nicht
Es geht um die Volvo Id , die du auch in der App verwendest :
Es sind die gleichen Daten die du hier nutzt :https://volvoid.eu.volvocars.com/VolvoLogin/login
Zitat von: lynckmeister am 15 Februar 2023, 20:08:51
Es sind die gleichen Daten die du hier nutzt :https://volvoid.eu.volvocars.com/VolvoLogin/login
Gut, das scheint nun auch zu funktionieren.
Ich habe über die GET nun bei vehicles_01_id meine FIN :)
Kann es aber sein, dass das nun alles auf dem Android Sensus fußt? Habe ja noch das "alte" Sensus ohne Android.
Gehe ich jetzt mit set auf AC-ON, sehe ich, wie folgendes gesendet wird:
HttpUtils:
NAME
addr https://api.volvocars.com:443
auth 0
buf
code 202
compress 1
conn
data
displayurl https://api.volvocars.com/connected-vehicle/v1/vehicles/meineFIN/commands/climatization-start
header content-type: application/vnd.volvocars.api.connected-vehicle.climatizationstart.v1+json
vcc-api-key: 1023b41c8c1d404a817b98269c12458a
authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IkpXVFNJR05FRENFUlQiLCJwaS5hdG0iOiJzIn0.eyJzY29wZSI6WyJvcGVuaWQiLCJlbWFpbCIsInByb2ZpbGUiLCJjYXJlX2J5X3ZvbHZvOmZpbmFuY2lhbF9pbmZvcm1hdGlvbjppbnZvaWNlOnJlYWQiLCJjYXJlX2J5X3ZvbHZvOmZpbmFuY2lhbF9pbmZvcm1hdGlvbjpwYXltZW50X21ldGhvZCIsImNhcmVfYnlfdm9sdm86c3Vic2NyaXB0aW9uOnJlYWQiLCJjdXN0b21lcjphdHRyaWJ1dGVzIiwiY3VzdG9tZXI6YXR0cmlidXRlczp3cml0ZSIsIm9yZGVyOmF0dHJpYnV0ZXMiLCJ2ZWhpY2xlOmF0dHJpYnV0ZXMiLCJ0c3BfY3VzdG9tZXJfYXBpOmFsbCIsImNvbnZlOmJyYWtlX3N0YXR1cyIsImNvbnZlOmNsaW1hdGl6YXRpb25fc3RhcnRfc3RvcCIsImNvbnZlOmNvbW1hbmRfYWNjZXNzaWJpbGl0eSIsImNvbnZlOmNvbW1hbmRzIiwiY29udmU6ZGlhZ25vc3RpY3NfZW5naW5lX3N0YXR1cyIsImNvbnZlOmRpYWdub3N0aWNzX3dvcmtzaG9wIiwiY29udmU6ZG9vcnNfc3RhdHVzIiwiY29udmU6ZW5naW5lX3N0YXR1cyIsImNvbnZlOmVudmlyb25tZW50IiwiY29udmU6ZnVlbF9zdGF0dXMiLCJjb252ZTpob25rX2ZsYXNoIiwiY29udmU6bG9jayIsImNvbnZlOmxvY2tfc3RhdHVzIiwiY29udmU6bmF2aWdhdGlvbiIsImNvbnZlOm9kb21ldGVyX3N0YXR1cyIsImNvbnZlOnRyaXBfc3RhdGlzdGljcyIsImNvbnZlOnR5cmVfc3RhdHVzIiwiY29udmU6dW5sb2NrIiwiY29udmU6dmVoaWNsZV9yZWxhdGlvbiIsImNvbnZlOndhcm5pbmdzIiwiY29udmU6d2luZG93c19zdGF0dXMiLCJlbmVyZ3k6YmF0dGVyeV9jaGFyZ2VfbGV2ZWwiLCJlbmVyZ3k6Y2hhcmdpbmdfY29ubmVjdGlvbl9zdGF0dXMiLCJlbmVyZ3k6Y2hhcmdpbmdfc3lzdGVtX3N0YXR1cyIsImVuZXJneTplbGVjdHJpY19yYW5nZSIsImVuZXJneTplc3RpbWF0ZWRfY2hhcmdpbmdfdGltZSIsImVuZXJneTpyZWNoYXJnZV9zdGF0dXMiXSwiY2xpZW50X2lkIjoiaDRZZjBiIiwiZ3JudGlkIjoiR09VR2Rqc2ZpaDBpVmlERGtGenlhSmRuSk5JQnk0dmEiLCJpc3MiOiJodHRwczovL3ZvbHZvaWQuZXUudm9sdm9jYXJzLmNvbSIsImF1ZCI6Img0WWYwYiIsIm1hcmtldCI6IkRFIiwiZmlyc3ROYW1lIjoiVGhvcnN0ZW4iLCJsYXN0TmFtZSI6IkhpdHplbWFubiIsInN1YiI6IjJlNmM5YThiLWYyNTMtNGE0Yi1hZjcwLTA0NTNiN2M1NjZjZCIsInNjb3BlcyI6WyJvcGVuaWQiLCJlbWFpbCIsInByb2ZpbGUiLCJjYXJlX2J5X3ZvbHZvOmZpbmFuY2lhbF9pbmZvcm1hdGlvbjppbnZvaWNlOnJlYWQiLCJjYXJlX2J5X3ZvbHZvOmZpbmFuY2lhbF9pbmZvcm1hdGlvbjpwYXltZW50X21ldGhvZCIsImNhcmVfYnlfdm9sdm86c3Vic2NyaXB0aW9uOnJlYWQiLCJjdXN0b21lcjphdHRyaWJ1dGVzIiwiY3VzdG9tZXI6YXR0cmlidXRlczp3cml0ZSIsIm9yZGVyOmF0dHJpYnV0ZXMiLCJ2ZWhpY2xlOmF0dHJpYnV0ZXMiLCJ0c3BfY3VzdG9tZXJfYXBpOmFsbCIsImNvbnZlOmJyYWtlX3N0YXR1cyIsImNvbnZlOmNsaW1hdGl6YXRpb25fc3RhcnRfc3RvcCIsImNvbnZlOmNvbW1hbmRfYWNjZXNzaWJpbGl0eSIsImNvbnZlOmNvbW1hbmRzIiwiY29udmU6ZGlhZ25vc3RpY3NfZW5naW5lX3N0YXR1cyIsImNvbnZlOmRpYWdub3N0aWNzX3dvcmtzaG9wIiwiY29udmU6ZG9vcnNfc3RhdHVzIiwiY29udmU6ZW5naW5lX3N0YXR1cyIsImNvbnZlOmVudmlyb25tZW50IiwiY29udmU6ZnVlbF9zdGF0dXMiLCJjb252ZTpob25rX2ZsYXNoIiwiY29udmU6bG9jayIsImNvbnZlOmxvY2tfc3RhdHVzIiwiY29udmU6bmF2aWdhdGlvbiIsImNvbnZlOm9kb21ldGVyX3N0YXR1cyIsImNvbnZlOnRyaXBfc3RhdGlzdGljcyIsImNvbnZlOnR5cmVfc3RhdHVzIiwiY29udmU6dW5sb2NrIiwiY29udmU6dmVoaWNsZV9yZWxhdGlvbiIsImNvbnZlOndhcm5pbmdzIiwiY29udmU6d2luZG93c19zdGF0dXMiLCJlbmVyZ3k6YmF0dGVyeV9jaGFyZ2VfbGV2ZWwiLCJlbmVyZ3k6Y2hhcmdpbmdfY29ubmVjdGlvbl9zdGF0dXMiLCJlbmVyZ3k6Y2hhcmdpbmdfc3lzdGVtX3N0YXR1cyIsImVuZXJneTplbGVjdHJpY19yYW5nZSIsImVuZXJneTplc3RpbWF0ZWRfY2hhcmdpbmdfdGltZSIsImVuZXJneTpyZWNoYXJnZV9zdGF0dXMiXSwiZW1haWwiOiJoaXR6ZW1hbm5AaGl0bWFrbGVyLmRlIiwiZXhwIjoxNjc2NDg5Njg3fQ.Tt5QUZr41gGNAwH9NbgLvuCNFD36wPc1ZTaM6DnB5JPXQMfUBKRHVqRRkRbCqOZYoHC9G5CKQFNwN43y4WEoXBojncF_3QBBcKrtYY4lAM2igOjr-8jthFl04W-JInJQYQtLzulomqaO-VfSrpqRtSraiJnbShfSC9Y2NR9mbfm5ZAjo8o8E8ObkBxMw2AfT3AH-aatuDLMntdRr6chlbkjBEFZSI5zzReNJ93e9cDdwlugtKxfzBr-3_y0YvTun__Bz9ZtWJ_gsRASmTLi8xTE5lqaLgvW6PydhJegYBBC76xsLMtDdE89TLFSvUZYjeU4SsURAv6jWmcnAnCrw9A
Cookie: PF=Mf55iShBby4PXqISafghBF
host api.volvocars.com
httpheader HTTP/1.1 202 Accepted
Standheizung startet aber nicht
Haaaaaaaaaaaaaaalt!
Kommando zurück...
Das hat nur ein bißchen gedauert :) Hat mit Set funktioniert, auch das Ausschalten.
Gleich versuche ich mein Glück mit Alexa.
Sag mal, ich habe aus der alten VolvoOnCall die Readings für Tankinhalt und Restkilometer ausgelesen.
Wie bekomme ich diese nun auch hier angezeigt?
an geht doch ;)
Am besten du schaust dir die Endpoints an :
https://developer.volvocars.com/apis/connected-vehicle/endpoints/fuel/#get-fuel-amount
nicht alle gehen. Damit sie gehen muss der jeweilige Endpoint im scope mit seinem Kürzel erscheinen, aber in Scope den ich hier gepostet habe, sind praktisch alle drin...
Bei den Gettern ( also nur Infos lesen ) brauchst du eigentlich nur einen Namen mit einer hochzählendenGet0x Nummer zuvergeben und eben die URL mit dem Endpoint aufrufen :
attr VolvoOnCall get04Name Fuel
attr VolvoOnCall get04URL https://api.volvocars.com/connected-vehicle/v1/vehicles/%VIN%/fuel
bei den Settern, also du sagt dem Auto Klima an / aus oder so , ist es etwas mehr weil sich der Datentyp in der Response ändeert:
Also musst die alle drei Header jeweils mitsetzen, ggfs ein POST und keine Argumente ... aber auch nicht schwer... Es kann Sein, dass halt der Contenttype ein anderer ist, aber das siehst du auf der Page endpoints von oben aus diesem Post...
attr VolvoOnCall set01URL https://api.volvocars.com/connected-vehicle/v1/vehicles/%VIN%/commands/climatization-stop
attr VolvoOnCall set02Header1 content-type: application/vnd.volvocars.api.connected-vehicle.climatizationstart.v1+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
Bitte sag mal ob bei dir was bei SOC kommt.. bei mir kommt dann nur ein leeres Data , zu sehen im Log:
2023.02.15 21:25:02 5: VolvoOnCall: Read callback: body
{
"status" : 200,
"operationId" : "335c7dc1-2c3b-4e05-b526-905029ad8fb4",
"data" : { }
}
Sieht bei mir ähnlich aus, oder?
2023-02-15 21:59:01 HTTPMOD VolvoXC60 status: 200
2023-02-15 21:59:01 HTTPMOD VolvoXC60 operationId: eca96e11-6f7a-4145-803d-4e505f045a38
Testen ist zum Teil etwas schwierig, wenn man sich nur auf die Volvo App verlässt. Die bekommt dann auch nicht immer mit, ob die Standheizung aus oder an ist.
Hat jetzt weniger mit FHEM oder Alexa zu tun als mit der App selber. Volvo halt ;)
Werde nun mal testen ob das frauentauglich ist, darum ging es mir eigentlich überhaupt.
Cool, der "Mist" hat mich nun knapp 1,5 Jahre gekostet und im Oktober soll der Volvo weg.....
Kurz vor Frühling klappt das mit der Alexa Steuerung ;D
EDIT:
Ähm, SOC kann bei mir nichts anzeigen. Ehrlich gesagt wusste ich bis vor 5 Minuten nicht mal was das ist *schäm*
State of Charge
Nun ja, mein XC60 ist gar kein Hybrid.
Habe diesen Code dann gelöscht:
attr VolvoXC60 get02Name SOC
attr VolvoXC60 get02URL https://api.volvocars.com/connected-vehicle/v1/vehicles/%VIN%/battery-charge-level
Der Access Token sollte jede Stunde erneuert werden?
EDIT 2:
Tjoah, der access / refresh Token wird nach einer Stunde nicht erneuert, dann kommt ein 401 und "Full authentication is required to access this resource"
Finde ehrlich gesagt auch in dem Code von Seite 1 nirgendwo eine Abfrage, die sich alle 60 Minuten wiederholt.
Aber gut, bin kein Programmierer.
Access Token wird zumindest bei mir nicht erneuert nach einer Std. und dann kommt der 401er :(
Mache ich manuell ein set reread, wird der neue access Token abgeholt, halt nur nicht automatisch..
Habe das nun so gelöst:
define VolvoApiRestart at +*00:29:00 set VolvoXC60 reread
So ok oder nicht gut?
Token hält nach Tests hier keine Stunde. Bereits nach 30 Minuten ist der ungültig. AT Befehl geändert auf 29 Min., läuft bisher stabil
Steht ja auch im Reading:
expires_in 1799
Das sind Sekunden, also aufgerundet 30 Minuten.
EDIT 3:
Soooo
Nachtschicht hat sich zumindest für mich gelohnt.
Habe es hinbekommen, dass mir Alexa über ein Notify nun auch bestätigt, wenn die SH läuf oder ausgeschaltet wird.
Mal sehen, wie stabil das Ganze nun läuft.
ja das hab ich mittlerweile auch gesehn, Das Token läuft nach rund 30 min ab. Du brauchst dafür kein at , sondern der HTTPMOD kann es selbst und zwar mit dem Sekundenwert hinter der URL im define:
DEF https://volvoid.eu.volvocars.com/as/token.oauth2 0
auf
DEF https://volvoid.eu.volvocars.com/as/token.oauth2 1750
dann macht er das selbst !
Was hast du mit der Alexa für die Bestätigung genau gemacht? Was wird jetzt bestätigt?
Hiermit kannst du das Auto übrigens abschliessen... entweder automatisch oder wenn's dunkel wird;)
attr VolvoOnCall set03Header1 content-type: application/vnd.volvocars.api.connected-vehicle.lock.v1+json
attr VolvoOnCall set03Header2 vcc-api-key: %APPKEY%
attr VolvoOnCall set03Header3 authorization: Bearer %AC%
attr VolvoOnCall set03Method POST
attr VolvoOnCall set03Name Lock
attr VolvoOnCall set03NoArg 1
attr VolvoOnCall set03URL https://api.volvocars.com/connected-vehicle/v1/vehicles/%VIN%/commands/lock
Ok, habe das "AT" wieder entfernt, mal gucken ob das auch so zuverlässig läuft.
Um Alexa eine Bestätigung sprechen zu lassen benötigst du das Modul echodevice (auch hier im Forum)
Da ich das Rad nicht neu erfinden wollte, nutze ich dazu die alte API von Volvo.
Damit visualisiere ich auch auf meiner Tablet UI den Tankinhalt und die Restkilometer.
Das Ganze pushe ich nun mit 60 Sekunden (vorher haben 300 gereicht) nur für die Bestätigung der Standheizung warte ich keine 5 Minuten. Läuft seit dieser Nacht und bisher hat Volvo nichts gesperrt.
In der alten VolvoOnCall api wird "heater_status" abgefragt. Ändert sich dieser macht Alexa die Ansage.
In der neuen Api das Ganze alle 60 Sekunden zu pushen wird wohl etwas knifflig wegen der häufigen Anfragen?
Schade, dass die kein event-on-change anbieten.
So wärst du am Tag schon bei 1440 Anfragen, würde dann die 10.000 im Monat sprengen, oder verstehe ich da was falsch?
Was müsste ich anstellen, dass ID, PASS und VIN "fest" in deinem Code integriert sind?
Wenn ich das mal wieder in ein paar Monaten starte, habe ich doch wieder alles vergessen, dass ich vorher ein get vehicles etc. und die set Befehle machen muss.
Hier der Code
defmod VolvoOnCall HTTPMOD https://"user:pass"@vocapi.wirelesscar.net/customerapi/rest/v3.0/vehicles/"VIN"/status 60
attr VolvoOnCall event-on-change-reading .*
attr VolvoOnCall extractAllJSON 1
attr VolvoOnCall requestHeader01 Content-Type: application/json
attr VolvoOnCall requestHeader02 x-device-id: Device
attr VolvoOnCall requestHeader03 x-originator-type: App
attr VolvoOnCall requestHeader04 x-os-type: Android
attr VolvoOnCall requestHeader05 x-os-version: 22
attr VolvoOnCall room Volvo
defmod Alexa_Standheizung notify VolvoOnCall:heater_status:.onOther { fhem "set ECHO_G091xxxxxxxxxxxx speak Standheizung eingeschaltet;;set ECHO_G2A1xxxxxxxxxxxxx speak Standheizung eingeschaltet" }
attr Alexa_Standheizung room Volvo
Hallo,
wird das hier noch weiter gepflegt?
Gibt es mittlerweile mehr Infos, die man auslesen kann?
Prinzipiell funktioniert das alles wie auf der Volvo Developer Seite dokumentiert. Wenn ich mir einen Test Access Token für mein Auto generiere, kann ich alles abrufen. Mit dem erzeugten Token mithilfe von attr VolvoOnCall requestHeader02 authorization: Basic aDRZZjBiOlU4WWtTYlZsNnh3c2c1WVFxWmZyZ1ZtSWFEcGhPc3kxUENhVXNpY1F0bzNUUjVrd2FKc2U0QVpkZ2ZJZmNMeXc=
kriege ich allerdings nicht alle Werte.
Ich vermute, dass dieses base64 codierte Client ID/Pw Paar nicht den nötigen Scope hat.
Man müsste eine eigene App publishen um ein eigene Credentials zu bekommen die den passenden/kompletten Scope umfassen.
Ich habe die HTTPMOD-Definition so umgebaut, dass der Session-Mechanismus verwendet wird um bei Bedarf automatisch ein Login zu machen und das Token abzuholen. Das steht dann im Internal sid.
Dadurch kann man das Intervall von HTTPMOD verwenden und Werte zyklisch Pollen. Ich hole so den Ladezustand alle 30 Minuten.
Ohne die anderen get/set-Befehle, die man natürlich wieder ergänzen kann, sieht das bei mir so aus:
defmod Volvo HTTPMOD none 1800
attr Volvo get02Name BatteryInfo
attr Volvo get02Poll 1
attr Volvo get02URL https://api.volvocars.com/connected-vehicle/v1/vehicles/%VIN%/battery-charge-level
attr Volvo getHeader1 accept: application/vnd.volvocars.api.connected-vehicle.vehicledata.v1+json
attr Volvo getHeader2 vcc-api-key: %APPKEY%
attr Volvo getHeader3 authorization: Bearer $sid
attr Volvo httpVersion 1.1
attr Volvo reAuthRegex Full authentication is required to access this resource|Not Acceptable
attr Volvo reading01JSON data_batteryChargeLevel_value
attr Volvo reading01Name BatteryLevel
attr Volvo reading02JSON vehicles_01_id
attr Volvo reading02Name VehicleId
attr Volvo replacement02Mode reading
attr Volvo replacement02Regex %APPKEY%
attr Volvo replacement02Value myAPP-KEY
attr Volvo replacement03Mode reading
attr Volvo replacement03Regex %VolvoID%
attr Volvo replacement03Value myVolvoID
attr Volvo replacement04Mode reading
attr Volvo replacement04Regex %VolvoPW%
attr Volvo replacement04Value myVolvoPW
attr Volvo replacement05Mode reading
attr Volvo replacement05Regex %VIN%
attr Volvo replacement05Value VehicleId
attr Volvo sid01Data 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 Volvo sid01Header01 content-type: application/x-www-form-urlencoded
attr Volvo sid01Header02 authorization: Basic aDRZZjBiOlU4WWtTYlZsNnh3c2c1WVFxWmZyZ1ZtSWFEcGhPc3kxUENhVXNpY1F0bzNUUjVrd2FKc2U0QVpkZ2ZJZmNMeXc=
attr Volvo sid01Header03 user-agent: okhttp/4.10.0
attr Volvo sid01IdJSON access_token
attr Volvo sid01URL https://volvoid.eu.volvocars.com/as/token.oauth2
attr Volvo sid02Header1 accept: application/json
attr Volvo sid02Header2 vcc-api-key: %APPKEY%
attr Volvo sid02Header3 authorization: Bearer $sid
attr Volvo sid02ParseResponse 1
attr Volvo sid02URL https://api.volvocars.com/extended-vehicle/v1/vehicles
attr Volvo stateFormat BatteryLevel
Gruß
Stefan
Hallo!
Habe das bei mir auch seit Anfang des Jahres am Laufen gehabt.
Aktuell funktioniert der Aufruf über FHEM nicht mehr.
Wurde da etwas geändert?
Api Key habe ich einen neuen erstellt, hat aber nichts gebracht.
Volvo wieder was verschlimmbessert?
Ich lese nur die Batterieladung aus, aber das klappt unverändert.
Gruß
Stefan
Zitat von: StefanStrobel am 02 November 2023, 21:44:02Ich lese nur die Batterieladung aus, aber das klappt unverändert.
Gruß
Stefan
Danke für die Rückmeldung.
Ist mir grade ein totales Rätsel.
header: HTTP/1.1 500 Internal Server Error
content-length: 182
content-type: application/json;charset=UTF-8
date: Thu, 02 Nov 2023 20:35:26 GMT
server: vcc
cache-control: no-cache, no-store, max-age=0, must-revalidate
expires: 0
pragma: no-cache
vcc-api-operationid: fc015274-d581-4462-9521-3bb2fe9bd7a9
x-content-type-options: nosniff
x-xss-protection: 0
strict-transport-security: max-age=31536000 ; includeSubDomains
x-frame-options: DENY
request-context: appId=cid-v1:d08a6ac1-4942-4ce7-a466-f3dd07fd71d1
connection: close, body length 182
2023.11.02 21:35:27 5: VolvoXC60: Read callback: body
{
"status" : 500,
"operationId" : "fc015274-d581-4462-9521-3bb2fe9bd7a9",
"error" : {
"message" : "INTERNAL_SERVER_ERROR",
"description" : "Internal Server Error"
}
}
Das bekomme ich, wenn ich das set AC-ON sende
Daten kommen aber rein. Auch der Access Token wird immer erneuert.
Status 200, also keine Fehler.
Wenn ich in mit der APP die AC starte, sehe ich das in den Readings bei FHEM.
Es wird nur der Befehl zum Starten nicht verarbeitet.
Keiner eine Idee, woran das liegen könnte?
War quasi von heute auf morgen...
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.
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.
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/ (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/ (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/ (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
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!!!
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
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.
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?
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.
Ist wohl nun auch bei Volvo erkannt worden:
https://github.com/volvo-cars/developer-portal-api-samples/issues/8#issuecomment-1911667230
Scheinnt jetzt wieder OK zu sein. Habe kein einziges 401 mehr erhalten.
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
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.
###################### 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
#
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
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
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) (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
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
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
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
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
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.
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
Bei mir auch seit dem 14.10. tod. Mal schauen...
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/ (https://developer.volvocars.com/apis/connected-vehicle/v2/release-notes/)
stehen zwar jede Menge Sachen und Änderungen, nur leider kein Datum.
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 (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
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 (https://forum.fhem.de/index.php?topic=139639.0)
Viele Grüße
Sany
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.py
ausgefü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 1750
geä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
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
:-(
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 requests
Anschließend sollte das Python-Programm funktionieren.
Gruß
Marcell
Zitat von: marcellm am 01 Januar 2025, 18:29:44Weiterhin muss die Definition "DEF" vom HTTPMOD-Device nach
Code Auswählen Erweitern
https://volvoid.eu.volvocars.com/as/token.oauth2 1750
geändert werden.
das kann nun auch ohne DEF auf token.oauth2 gemacht werden. HTTMOD had nun das Attribut enableTokens dafür.
Dann noch
attr VolvoStatusTest getHeader3 authorization: Bearer %%ACCESS_TOKEN%%
...
attr VolvoStatusTest reAuthRegex Full authentication is required to access this resource|Not Acceptable|Forbidden
...
attr VolvoStatusTest sid01Data grant_type=refresh_token&refresh_token=%%REFRESH_TOKEN%%
attr VolvoStatusTest sid01Header01 authorization: Basic %VolvoLogin%
attr VolvoStatusTest sid01URL https://volvoid.eu.volvocars.com/as/token.oauth2
Und aktuell geht es auch ohne OTP wenn man sich genau an den Flow gemäss https://developer.volvocars.com/apis/docs/authorisation/ hält. So könnte man das Login wieder automatisieren.
Hallo,
ich bin seinerzeit mit dem HTTPMOD-Modul gestartet, um die Daten meines Volvo XC40 Recharge abzurufen. Als das im letzten Jahr nicht mehr funktionierte, bin ich zu volvo2mqtt gewechselt.
Ich wollte nun weitere Daten einbinden und habe dabei erfahren, dass
- volvo2mqtt zwar noch funktioniert aber nicht mehr weiter entwickelt wird
- marcellm eine Möglichkeit gefunden hat, die neue Volvo-Authentifizierung mit dem HTTPMOD-Modul durchzuführen.
Also habe ich die RAW-Daten meines alten HTTPMOD-Geräts wieder importiert und gem. der Anleitung von marcellm geändert. Ich konnte danach die Daten abrufen, aber am nächsten Morgen wurden keine Readings mehr aktualisiert - weder automatisch noch manuell.
Dann habe ich ein neues Gerät VolvoOnCall erstellt und die diversen Hinweise in diesem Thread verwendet, um Attribute und Readings zu erstellen. Das Ergebnis ist grundsäztlich gleich. Nach der Erstellung funktioniert es ein paar Stunden, dann aber nicht mehr.
Ich vermute, ich habe eine notwendige Änderung vergessen oder falsch vorgenommen. Könnt Ihr mir einen Tipp geben, wo das Problem liegt?
Hier zunächst Auszüge aus dem List meines neuen Geräts:
Internals:
.Content-Type text/html
.JSONEnabled 1
.LASTSEND 1746614978.73469
.LastUpdate 1746614969.07745
.ReplacementEnabled 1
.TRIGGERTIME 1746616769.07745
.getList Fuel:noArg Location:noArg VehicleDetails:noArg Diagnostic:noArg RechargeStatus:noArg Statistics:noArg EngineStatus:noArg DoorStatus:noArg WindowStatus:noArg Odometer:noArg Vehicles:noArg ListCommands:noArg Brakes:noArg Tyres:noArg Warnings:noArg Engine_Diagnostic:noArg
.setList interval reread:noArg stop:noArg start:noArg clearCookies:noArg upgradeAttributes:noArg storeKeyValue LOCK:noArg UNLOCK AC-ON:noArg AC-OFF:noArg LOCK-Reduced-Guard:noArg
.updateRequestHash 1
BUSY 0
DEF https://volvoid.eu.volvocars.com/as/token.oauth2 1800
FUUID 681a59b7-f33f-dbcf-37f4-c1d9e6cd150b4dca
Interval 1800
LastAuthTry 2025-05-06 20:57:38
MainURL https://volvoid.eu.volvocars.com/as/token.oauth2
ModuleVersion 4.2.0 - 11.8.2023
NAME VolvoOnCall
NOTIFYDEV global
NR 1312
NTFY_ORDER 50-VolvoOnCall
STATE Batterie: 70.0% ~300km [total: 20869km]
<br>
@[VolvoOnCall:last_data_update]
TYPE HTTPMOD
eventCount 105
value
.attraggr:
.attreocr:
.*
.attrminint:
.readingParseList:
0101
0102
0103
0104
0105
0201
0202
0203
0204
0205
0206
0207
03
0501
0502
0503
0504
0601
0602
0603
0604
0605
0606
0607
0608
07
08
0801
0802
0901
0902
1001
1002
1003
1004
1005
11
1201
1202
1203
2101
2102
9998
9999
CompiledRegexes:
HTTPCookieHash:
...
HttpUtils:
NAME
addr https://api.volvocars.com:443
auth 0
buf
code 400
compress 1
conn
data
displayurl https://api.volvocars.com/connected-vehicle/v2/vehicles/%vin%/fuel
header accept: application/json
vcc-api-key: xxxxx
authorization: Bearer xxxxx
host api.volvocars.com
httpheader HTTP/1.1 400 Bad Request
Date: Wed, 07 May 2025 10:49:38 GMT
Content-Type: text/html
Content-Length: 1537
Connection: close
Cache-Control: no-store
X-Cache: CONFIG_NOCACHE
httpversion 1.1
hu_blocking 0
hu_filecount 1
hu_port 443
hu_portSfx
ignoreredirects 1
loglevel 4
path /connected-vehicle/v2/vehicles/%vin%/fuel
protocol https
redirects 0
timeout 2
url https://api.volvocars.com/connected-vehicle/v2/vehicles/%vin%/fuel
sslargs:
QUEUE:
READINGS:
...
2025-05-07 12:49:29 access_token xxxxx
2025-05-07 02:49:28 data_01_vin xxx
2025-05-07 12:49:29 expires_in 1799
2025-05-07 12:49:29 id_token xxxx
2025-05-06 20:52:52 myAPP-KEY xxxx
2025-05-06 20:53:16 myVolvoID xxxxx
2025-05-06 20:53:39 myVolvoPW xxxxx
2025-05-07 02:49:31 operationId xxxxx
2025-05-07 12:49:29 refresh_token xxxxx
2025-05-07 02:49:31 status 200
2025-05-06 21:04:10 statusCode 404
2025-05-07 12:49:29 token_type Bearer
Attributes:
enableTokens 0
event-on-change-reading .*
extractAllJSON 1
get01Header1 accept: application/json
get01Header2 vcc-api-key: %APPKEY%
get01Header3 authorization: Bearer %AC%
get01Name EngineStatus
get01Poll 1
get01URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%VIN%/engine-status
get03Header1 accept: application/json
get03Header2 vcc-api-key: %APPKEY%
get03Header3 authorization: Bearer %AC%
get03Name Vehicles
get03Poll 1
get03URL https://api.volvocars.com/connected-vehicle/v2/vehicles
get04Header1 accept: application/vnd.volvocars.api.energy.vehicledata.v1+json
get04Header2 vcc-api-key: %APPKEY%
get04Header3 authorization: Bearer %AC%
get04Name RechargeStatus
get04Poll 1
get04URL https://api.volvocars.com/energy/v1/vehicles/%VIN%/recharge-status
get05Header1 accept: application/json
get05Header2 vcc-api-key: %APPKEY%
get05Header3 authorization: Bearer %AC%
get05Name WindowStatus
get05Poll 1
get05URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%VIN%/windows
get06Header1 accept: application/json
get06Header2 vcc-api-key: %APPKEY%
get06Header3 authorization: Bearer %AC%
get06Name DoorStatus
get06Poll 1
get06URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%VIN%/doors
get07Header1 accept: application/json
get07Header2 vcc-api-key: %APPKEY%
get07Header3 authorization: Bearer %AC%
get07Name Odometer
get07Poll 1
get07URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%VIN%/odometer
get08Header1 accept: application/json
get08Header2 vcc-api-key: %APPKEY%
get08Header3 authorization: Bearer %AC%
get08Name VehicleDetails
get08Poll 1
get08URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%VIN%
get09Header1 accept: application/json
get09Header2 vcc-api-key: %APPKEY%
get09Header3 authorization: Bearer %AC%
get09Name Warnings
get09Poll 1
get09URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%VIN%/warnings
get10Header1 accept: application/json
get10Header2 vcc-api-key: %APPKEY%
get10Header3 authorization: Bearer %AC%
get10Name Statistics
get10Poll 1
get10URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%VIN%/statistics
get11Header1 accept: application/json
get11Header2 vcc-api-key: %APPKEY%
get11Header3 authorization: Bearer %AC%
get11Name Tyres
get11Poll 1
get11URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%VIN%/tyres
get12Header1 accept: application/json
get12Header2 vcc-api-key: %APPKEY%
get12Header3 authorization: Bearer %AC%
get12Name ListCommands
get12URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%VIN%/commands
get13Header1 accept: application/json
get13Header2 vcc-api-key: %APPKEY%
get13Header3 authorization: Bearer %AC%
get13Name Location
get13Poll 1
get13URL https://api.volvocars.com/location/v1/vehicles/%VIN%/location
get14Header1 accept: application/json
get14Header2 vcc-api-key: %APPKEY%
get14Header3 authorization: Bearer %AC%
get14Name Engine_Diagnostic
get14Poll 1
get14URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%vin%/engine
get15Header1 accept: application/json
get15Header2 vcc-api-key: %APPKEY%
get15Header3 authorization: Bearer %AC%
get15Name Diagnostic
get15Poll 1
get15URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%vin%/diagnostics
get16Header1 accept: application/json
get16Header2 vcc-api-key: %APPKEY%
get16Header3 authorization: Bearer %AC%
get16Name Brakes
get16Poll 1
get16URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%vin%/brakes
get17Header1 accept: application/json
get17Header2 vcc-api-key: %APPKEY%
get17Header3 authorization: Bearer %AC%
get17Name Fuel
get17Poll 1
get17URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%vin%/fuel
getHeader1 accept: application/vnd.volvocars.api.connected-vehicle.vehicledata.v1+json
getHeader2 vcc-api-key: %APPKEY%
getHeader3 authorization: Bearer %AC%
httpVersion 1.1
reading0101JSON data_frontLeftWindow_value
reading0101Name Fenster_vorne_links
reading0102JSON data_frontRightWindow_value
reading0102Name Fenster_vorne_rechts
reading0103JSON data_rearLeftWindow_value
reading0103Name Fenster_hinten_links
reading0104JSON data_rearRightWindow_value
reading0104Name Fenster_hinten_rechts
reading0105JSON data_sunroof_value
reading0105Name Panoramadach
reading0201JSON data_frontLeftDoor_value
reading0201Name Tür_vorne_links
reading0202JSON data_frontRightDoor_value
reading0202Name Tür_vorne_rechts
reading0203JSON data_rearLeftDoor_value
reading0203Name Tür_hinten_links
reading0204JSON data_rearRightDoor_value
reading0204Name Tür_hinten_rechts
reading0205JSON data_centralLock_value
reading0205Name Zentralverriegelung
reading0205OMap LOCKED:abgeschlossen,OPEN:offen
reading0206JSON data_hood_value
reading0206Name Motorhaube
reading0207JSON data_tailgate_value
reading0207Name Heckklappe
reading03JSON data_engineStatus_value
reading03Name Motor
reading03OMap STOPPED:aus,RUNNING:läuft
reading0501JSON data_frontLeft_value
reading0501Name Reifen_vorne_links
reading0501OMap WARNING:niedriger Luftdruck,NO_WARNING:Luftdruck in Ordnung
reading0502JSON data_frontRight_value
reading0502Name Reifen_vorne_rechts
reading0502OMap WARNING:niedriger Luftdruck,NO_WARNING:Luftdruck in Ordnung
reading0503JSON data_rearLeft_value
reading0503Name Reifen_hinten_links
reading0503OMap WARNING:niedriger Luftdruck,NO_WARNING:Luftdruck in Ordnung
reading0504JSON data_rearRight_value
reading0504Name Reifen_hinten_rechts
reading0504OMap WARNING:niedriger Luftdruck,NO_WARNING:Luftdruck in Ordnung
reading0601JSON data_averageFuelConsumption_value
reading0601Name Durchschnittsverbrauch_in_l/100km
reading0602JSON data_averageSpeed_value
reading0602Name Durchschnittsgeschwindigkeit_in_km/h
reading0603JSON data_tripMeterManual_value
reading0603Name Tageskilometerzähler(TM)
reading0604JSON data_tripMeterAutomatic_value
reading0604Name Tageskilometerzähler(TA)
reading0605JSON data_distanceToEmptyTank_value
reading0605Name Reichweite_Benzin_in_km
reading0606JSON data_distanceToEmptyBattery_value
reading0606Name Reichweite_Strom_in_km
reading0607JSON data_averageEnergyConsumption_value
reading0607Name durchschnittlicher_Verbrauch_in_kWh/100km
reading0608JSON data_averageSpeedAutomatic_value
reading0608Name Durchschnittsgeschwindigkeit_Automatik_in_km/h
reading07JSON data_odometer_value
reading07Name Kilometerstand
reading0801JSON data_batteryCapacityKWH
reading0801Name Batteriekapazität_in_kWh
reading0802JSON data_batteryChargeLevel_value
reading0802Name Akku_Ladestand_in_%
reading08JSON data_fuelAmount_value
reading08Name Tankinhalt_in_Litern
reading0901JSON data_oilLevelWarning_value
reading0901Name Motoröl
reading0901OMap WARNING:Füllstand niedrig,NO_WARNING:Füllstand in Ordnung
reading0902JSON data_engineCoolantLevelWarning_value
reading0902Name Kühlwasser
reading0902OMap WARNING:Füllstand niedrig,NO_WARNING:Füllstand in Ordnung
reading1001JSON data_serviceWarning_value
reading1001Name Service
reading1001OMap REGULAR_MAINTENANCE_ALMOST_TIME_FOR_SERVICE:Reguläre Wartung erforderlich - bitte Werkstatttermin vereinbaren,WARNING:Werkstattbesuch erforderlich,NO_WARNING:Werkstattbesuch noch nicht erforderlich
reading1002JSON data_engineHoursToService_value
reading1002Name Motor-Betriebsstunden_bis_zum_Service
reading1003JSON data_distanceToService_value
reading1003Name Kilometer_bis_zum_Service
reading1004JSON data_washerFluidLevelWarning_value
reading1004Name Waschwasser
reading1004OMap TOO_LOW:Füllstand niedrig,NO_WARNING:Füllstand in Ordnung
reading1005JSON data_timeToService_value
reading1005Name Monate_bis_zum_Service
reading11JSON data_brakeFluidLevelWarning_value
reading11Name Bremsflüssigkeit
reading11OMap WARNING:Füllstand niedrig,NO_WARNING:Füllstand in Ordnung
reading1201JSON data_brakeLightCenterWarning_value
reading1201Name Bremslicht_Mitte
reading1201OMap UNSPECIFIED:unbekannt, NO_WARNING:in Ordnung, FAILURE:Fehler
reading1202JSON data_brakeLightLeftWarning_value
reading1202Name Bremslicht_links
reading1202OMap UNSPECIFIED:unbekannt, NO_WARNING:in Ordnung, FAILURE:Fehler
reading1203JSON data_brakeLightRightWarning_value
reading1203Name Bremslicht_rechts
reading1203OMap UNSPECIFIED:unbekannt, NO_WARNING:in Ordnung, FAILURE:Fehler
reading2101JSON data_geometry_coordinates_1
reading2101Name Standort_Breite
reading2102JSON data_geometry_coordinates_0
reading2102Name Standort_Länge
reading9998JSON refresh_token
reading9998Name refresh_token
reading9999JSON access_token
reading9999Name access_token
replacement01Mode reading
replacement01Regex %AC%
replacement01Value access_token
replacement02Mode reading
replacement02Regex %APPKEY%
replacement02Value myAPP-KEY
replacement03Mode reading
replacement03Regex %VolvoID%
replacement03Value myVolvoID
replacement04Mode reading
replacement04Regex %VolvoPW%
replacement04Value myVolvoPW
replacement05Mode reading
replacement05Regex %VIN%
replacement05Value data_01_vin
replacement06Mode reading
replacement06Regex %RT%
replacement06Value refresh_token
requestData grant_type=refresh_token&refresh_token=%RT%
requestHeader01 content-type: application/x-www-form-urlencoded
requestHeader02 authorization: Basic aDRZZjBiOlU4WWtTYlZsNnh3c2c1WVFxWmZyZ1ZtSWFEcGhPc3kxUENhVXNpY1F0bzNUUjVrd2FKc2U0QVpkZ2ZJZmNMeXc=
requestHeader03 user-agent: okhttp/4.10.0
room Garage
set01Header1 content-type: application/json
set01Header2 vcc-api-key: %APPKEY%
set01Header3 authorization: Bearer %AC%
set01Method POST
set01Name AC-OFF
set01NoArg 1
set01ParseResponse 1
set01URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%VIN%/commands/climatization-stop
set02Header1 content-type: application/json
set02Header2 vcc-api-key: %APPKEY%
set02Header3 authorization: Bearer %AC%
set02Method POST
set02Name AC-ON
set02NoArg 1
set02ParseResponse 1
set02URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%VIN%/commands/climatization-start
set03Header1 content-type: application/json
set03Header2 vcc-api-key: %APPKEY%
set03Header3 authorization: Bearer %AC%
set03Method POST
set03Name LOCK
set03NoArg 1
set03ParseResponse 1
set03URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%VIN%/commands/lock
set04Header1 content-type: application/json
set04Header2 vcc-api-key: %APPKEY%
set04Header3 authorization: Bearer %AC%
set04Method POST
set04Name LOCK-Reduced-Guard
set04NoArg 1
set04ParseResponse 1
set04URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%VIN%/commands/lock-reduced-guard
set05Header1 content-type: application/json
set05Header2 vcc-api-key: %APPKEY%
set05Header3 authorization: Bearer %AC%
set05Method POST
set05Name UNLOCK
set05ParseResponse 1
set05TextArg {\"unlockDuration\":120}
set05URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%VIN%/commands/unlock
stateFormat Batterie: [$name:data_batteryChargeLevel_value]% ~[$name:data_distanceToEmptyBattery_value]km [total: [$name:data_odometer_value]km]
<br>
@[$name:last_data_update]
verbose 1
Ich habe mal versucht, einen Abruf mit verbose=5 zu machen und bekomme dann:
2025.05.07 13:37:54 5: VolvoOnCall: get called with Brakes
2025.05.07 13:37:54 5: VolvoOnCall: get found option Brakes in attribute get16Name
2025.05.07 13:37:54 4: VolvoOnCall: get will now request Brakes, no optional value
2025.05.07 13:37:54 5: VolvoOnCall: AddToQueue adds type get16 to URL https://api.volvocars.com/connected-vehicle/v2/vehicles/%vin%/brakes, no data, header accept: application/json
vcc-api-key: %APPKEY%
authorization: Bearer %AC%, retry 0, initial queue len: 0
2025.05.07 13:37:54 5: VolvoOnCall: HandleSendQueue called from AddToSendQueue, qlen = 1
2025.05.07 13:37:54 5: VolvoOnCall: Replace called for type get16, regex (?^:%AC%), mode reading, value access_token input: accept: application/json
vcc-api-key: %APPKEY%
authorization: Bearer %AC%
2025.05.07 13:37:54 5: VolvoOnCall: Replace: reading value is xxxxx
2025.05.07 13:37:54 5: VolvoOnCall: Replace: match for type get16, regex (?^:%AC%), mode reading, value access_token, input: accept: application/json
vcc-api-key: %APPKEY%
authorization: Bearer %AC%, result is accept: application/json
vcc-api-key: %APPKEY%
authorization: Bearer xxxxx
...
2025.05.07 13:37:54 5: VolvoOnCall: ReadCallback called from __ANON__
2025.05.07 13:37:54 4: VolvoOnCall: Read callback: request type was get16 retry 0,
header: HTTP/1.1 400 Bad Request
Date: Wed, 07 May 2025 11:37:54 GMT
Content-Type: text/html
Content-Length: 1537
Connection: close
Cache-Control: no-store
X-Cache: CONFIG_NOCACHE, body length 1537
2025.05.07 13:37:54 5: VolvoOnCall: Read callback: body
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<meta content='text/html; charset=utf-8' http-equiv='content-type' />
<style type='text/css'>
...
</style>
<title>Service unavailable</title>
</head>
<body>
<div id='content'>
<div id='message'>
<h2>Our services aren't available right now.</h2>
<p>We're working to restore all services as soon as possible. Please check back soon.</p> </div>
<div id='errorref'>
<span> </span>
</div>
</div>
</body>
</html>
Das MQTT-Gerät, das von volvo2mqtt befüllt wird, wird regelmäßig aktualisiert. Daher kann das kein allgemeines Problem sein.
Hat jemand eine Idee, wo der Fehler liegt?
Vielen Dank im voraus
Matthias
Hallo zusammen,
ich bin gerade dabei das für meinen neuen Volvo hinzubiegen. Um das zu vereinfachen, erweitere ich HTTPMOD noch ein wenig. Volvo benötigt jetzt PKCE und das soll HTTPMOD vereinfachen.
Ziel wäre dass man ein eigenes Volvo-Developer-Konto registriert, dafür eine App registriert und publiziert und darüber langfristig auf dem von Volvo vorgesehenen Weg das API für seinen eigenen Volvo auslesen kann.
Ich melde mich wenn das fertig ist.
Gruss
Stefan
Zitat von: StefanStrobel am 07 Mai 2025, 21:56:19Ziel wäre dass man ein eigenes Volvo-Developer-Konto registriert, dafür eine App registriert und publiziert und darüber langfristig auf dem von Volvo vorgesehenen Weg das API für seinen eigenen Volvo auslesen kann.
Mir fehlt da die Fantasie, wie das funktionieren soll.
Ich möchte die Daten aus der Volvo API mit fhem auslesen und auswerten.
Volvo möchte für eine published App eine "Redirect URI" haben, die öffentlich zugänglich ist und eine "Terms and Conditions URL", die ebenfalls öffentlich sein muss.
Ich werde mein fhem nicht im Internet zugänglich machen und fhem ist ja auch keine Webseite...
Hast Du einen Plan, wie das funktionieren könnte?
Matthias
Hallo zusammen,
ich habe jetzt in HTTPMOD ein paar Erweiterungen eingebaut, mit denen es bei mir ganz gut funktioniert.
Die Problematik ist folgende:
Für den offiziellen Weg muss man eine eigene Applikation bei Volvo registrieren und publizieren. Dabei benötigt man wie Matthias richtigerweise geschrieben hat eine Redirection URI, die im Internet erreichbar sein muss (oder localhost:9999) und eine Website mit Terms & Conditions, die jedoch nicht weiter geprüft wird.
Wenn man die eigene Applikation registriert, bekommt man von Volvo einen VCC API Key, der später für die Abfragen benötigt wird.
Nach dem "Publizieren" der Applikation (das ist auch nur ein Formular, das ausgefüllt werden muss) erhält man eine Client-ID und ein Client-Secret das später bei der Anmeldung benötigt wird.
Bis hierhin sind das nur administrative Vorbereitungen.
Dann kommt die eigentliche Anmeldung. Dafür muss ein Request mit der Client-ID und der Redirect-URI von oben, einem Scope (welche Daten man abfragen können möchte), und einer Code-Challenge an https://volvoid.eu.volvocars.com/as/authorization.oauth2 gesendet werden.
Das mit der Code-Challenge ist eine zusätzliche PKCE-Absicherung, bei der man vorab eine Code-Challenge und einen dazu passenden Code-Verifier erzeugen muss (das habe ich in HTTPMOD eingebaut).
Das Ergebnis dieses Requests ist eine Seite mit Java-Script, die Volvo-ID und Passwort abfragt und dann bestätigen lässt, dass man der Applikation den Zugriff auf die daten erlauben möchte. Leider habe ich es nicht hinbekommen, das einfach von HTTPMOD aus hinzuschicken. Ich denke dass Volvo genau so etwas verhindern möchte. Folglich muss das vom Benutzer im Browser gemacht werden. Um das zu erleichtern habe ich HTTPMOD so erweitert, dass man einen Request nach einem Set-Befehl als Link in Fhem anzeigen kann.
Wenn alles richtig war, dann kommt ein Redirect vom Volvo-Server an die oben registrierte URI zurück, in dem als Parameter ein Code gesendet wird, den man für den nächsten Schritt benötigt. Hier habe ich HTTPMOD so erweitert, dass man einen Request mit Parameter empfangen kann und er Code so in ein Reading geschrieben wird.
Im nächsten Schritt muss wieder ein Request an Volvo geschickt werden, um den Code gegen ein Access-Token und ein Refresh-Token auszutauschen.
Mit dem Access-Token kann man dann seine Daten wie üblich mit HTTPMOD abfragen. Wenn das nach ein par Minuten seine Gültigkeit verloren hat, dann kann man mit dem Refresh-Token ein neues Access-Token und ein neues Refresh-Token abholen. Das funktioniert bisher ganz gut.
Konkret verwende ich als Redirect-URI localhost:9999, da ich keinen extern erreichbaren Web-Server habe, der auf Port 8083 hört. Wenn man so etwas hat, könnte man diesen bei der Registrierung als Redirect-URI angeben und intern das DNS-A-Record mit der internen Fhem-Adresse überschreiben um so den Redirect dann doch an das interne Fhem weiterzugeben, ohne dass das extern erreichbar ist.
Bei mir kommt dann nach der Anmeldung der Redirect an localhost:9999, der natürlich nicht funktioniert. Dann ersetze ich in der Adresszeile im Browser den localhost:9999-Teil mit meiner internen Fhem-Adresse, z.B. fhem:8083/fhem/volvo/ und so landet der Code im richtigen Reading.
Dann starte ich den zweiten Set für den Austausch des Codes in die Tokens und ab dann läuft alles weitere automatisch.
Zur Vorbereitung setze ich die folgenden Readings einmalig manuell mit setreading:
VOLVO_CLIENT_ID
VOLVO_CLIENT_SECRET
VOLVO_VCC_API_KEY
VOLVO_VIN
Die Konfiguration sieht bei mir folgendermaßen aus:
define VolvoNeu HTTPMOD none 600
attr VolvoNeu enableCookies 0
attr VolvoNeu enableTokens 1
attr VolvoNeu get02Name EnergyState
attr VolvoNeu get02Poll 1
attr VolvoNeu get02URL https://api.volvocars.com/energy/v2/vehicles/%%VOLVO_VIN%%/state
attr VolvoNeu getHeader1 accept: application/json
attr VolvoNeu getHeader2 vcc-api-key: %%VOLVO_VCC_API_KEY%%
attr VolvoNeu getHeader3 authorization: Bearer %%ACCESS_TOKEN%%
attr VolvoNeu reAuthRegex Full authentication is required to access this resource|Not Acceptable|Access denied|AUTHENTICATION_ERROR
attr VolvoNeu reading02JSON batteryChargeLevel_value
attr VolvoNeu reading02Name ChargeLevel
attr VolvoNeu receiver volvo
attr VolvoNeu receiverReadings VOLVO_AUTH_CODE=code
attr VolvoNeu replacement02Regex %%VOLVO_VCC_API_KEY%%
attr VolvoNeu replacement02Value VOLVO_VCC_API_KEY
attr VolvoNeu replacement05Regex %%VOLVO_VIN%%
attr VolvoNeu replacement05Value VOLVO_VIN
attr VolvoNeu replacement06Regex %%VOLVO_CLIENT_ID%%
attr VolvoNeu replacement06Value VOLVO_CLIENT_ID
attr VolvoNeu replacement07Regex %%VOLVO_CLIENT_SECRET%%
attr VolvoNeu replacement07Value VOLVO_CLIENT_SECRET
attr VolvoNeu replacement08Regex %%VOLVO_AUTH_CODE%%
attr VolvoNeu replacement08Value VOLVO_AUTH_CODE
attr VolvoNeu replacementMode reading
attr VolvoNeu set01Name AuthorizeWithBrowser
attr VolvoNeu set01URL https://volvoid.eu.volvocars.com/as/authorization.oauth2?response_type=code&client_id=%%VOLVO_CLIENT_ID%%&redirect_uri=http://localhost:9999&scope=conve:fuel_status%20conve:brake_status%20conve:doors_status%20location:read%20exve:diagnostics_engine_status%20openid%20exve:brake_status%20exve:odometer_status%20conve:odometer_status%20exve:windows_status%20conve:engine_status%20conve:lock_status%20conve:windows_status%20exve:lock_status%20exve:engine_status%20exve:tyre_status%20exve:doors_status%20conve:tyre_status%20conve:connectivity_status%20energy:state:read%20energy:capability:read%20conve:battery_charge_level%20conve:diagnostics_engine_status%20exve:fuel_status&state=a1&code_challenge=%%NEW_CODE_CHALLENGE%%&code_challenge_method=S256
attr VolvoNeu set01AsLink 1
attr VolvoNeu set01NoArg 1
attr VolvoNeu set02Name ExchangeAuthCodeToToken
attr VolvoNeu set02URL https://volvoid.eu.volvocars.com/as/token.oauth2
attr VolvoNeu set02Data redirect_uri=http://localhost:9999&client_id=%%VOLVO_CLIENT_ID%%&client_secret=%%VOLVO_CLIENT_SECRET%%&grant_type=authorization_code&code=%%VOLVO_AUTH_CODE%%&code_verifier=%%CODE_VERIFIER%%
attr VolvoNeu set02NoArg 1
attr VolvoNeu sid01URL https://volvoid.eu.volvocars.com/as/token.oauth2
attr VolvoNeu sid01Header1 content-type: application/x-www-form-urlencoded
attr VolvoNeu sid01Data client_id=%%VOLVO_CLIENT_ID%%&client_secret=%%VOLVO_CLIENT_SECRET%%&grant_type=refresh_token&refresh_token=%%REFRESH_TOKEN%%
attr VolvoNeu stateFormat ChargeLevel
enableCookies ist dabei absichtlich auf 0, damit sich keine unnötigen Cookies ansammeln, die irgendwann den Request zu lange werden lassen.
die neuen Attribute sind:
set01AsLink - sorgt dafür dass der Set-Befehl noch keinen Request auslöst, sondern einen Link dafür anzeigt, den man im Browser anklicken muss. Mit etwas JavaScript könnte man das sicher noch verbessern.
receiver - erzeugt eine Art abgespeckten HTTPSRV innerhalb HTTPMOD zum Empfang des Codes
receiverReadings - definiert welcher Parameter dabei in welches Reading wandert.
das nötige neue HTTPMOD ist noch nicht eingecheckt. daher hänge ich es an.
Gruss
Stefan
Leider ist das Refresh Token von der Volvo API immer nur 7 Tage gültig und bisher habe ich noch keinen Weg gesehen, die Anmeldung vernünftig zu automatisieren.