Einbinden der neuen Volvo on Call API mit HTTPMOD

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

Vorheriges Thema - Nächstes Thema

lynckmeister

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..



B.Stromberg

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....

lynckmeister

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 ;))

lynckmeister

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 ...

B.Stromberg

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?

B.Stromberg

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?

lynckmeister

#6
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"
  } ]
}


B.Stromberg

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?


lynckmeister

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...

B.Stromberg

#9
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


lynckmeister

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...


B.Stromberg

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?

lynckmeister

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

B.Stromberg

#13
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

lynckmeister

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..

lynckmeister

#15
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

B.Stromberg

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/  mit der Volvo ID und Passwort anmelden? Verstehe deinen 1. Post nicht so!

Auf 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.



lynckmeister

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

B.Stromberg

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

B.Stromberg

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?

lynckmeister

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" : { }
}


B.Stromberg

#21
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.







lynckmeister

#22
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




B.Stromberg

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

schnuddel

Hallo,

wird das hier noch weiter gepflegt?
Gibt es mittlerweile mehr Infos, die man auslesen kann?
Raspi, ZWave, HUE, Neato Botvac, Squeezebox

tobelix

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.

StefanStrobel

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

Burt_Gummer

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?


StefanStrobel

Ich lese nur die Batterieladung aus, aber das klappt unverändert.

Gruß
   Stefan

Burt_Gummer

#29
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.





Burt_Gummer

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


Burt_Gummer

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

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

Der Aufruf lautet /preclimatization/start

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

Pepe_Pb

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

matkoh

Hallo,

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

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

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

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

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

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

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

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

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

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

Matthias



Pepe_Pb

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

matkoh

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

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

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

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

Matthias

Pepe_Pb

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

Xcoder

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

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

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

Wie ist das bei euch?

Pepe_Pb

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


Xcoder

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