Volvo MQTT Anbindung

Begonnen von AlphaKingOne, 29 Januar 2021, 19:38:37

Vorheriges Thema - Nächstes Thema

AlphaKingOne

Hallo zusammen.
Ich hatte nach eine Volvo Fhem Anbindung im netzt gesucht aber leider nichts gefunden.
Deswegen hatte ich mir dann selbst was zusammen gestellt was ich euch gerne Vorstellen möchte.
Da dies bestimmt den ein oder anderen interessieren könnte.
Ich möchte auch gleich erwähnen dass ich auch nicht ein richtiger Profi in dem Bereich bin. Ich weiß dass man einiges besser machen kann oder so auch nicht machen sollte.
Ich bin da auch für Kritik offen und der Beitrag kann dann auch anderen helfen.

Als Basis hab ich dieses Gitub Programm genommen.
https://github.com/molobrakos/volvooncall
Worin ich meine Schwierigkeiten bei der Installation hatte war eine gescheite Anleitung zu finden wie man eine Aktuelle Python Version installiert. Am Ende bin ich auf diese Seite gestoßen https://maker-tutorials.com/python3-pip-raspberry-pi-installieren und es hat wirklich ohne Probleme funktioniert. Also erst mal Python und Pip installiert.
Dann
cd ~
git clone https://github.com/molobrakos/volvooncall.git
cd volvooncall
python setup.py install      # oder python3


jetzt kann man schon mit dem Befehl voc testen ob es funktioniert.


Also in Normalfall führt man nano ~/.voc.conf aus und füllt die Datei folgendermaßen aus

mqtt_url: mqtt:@172.0.0.1
username: XXXXX@XXXX.de
password: XXXXXX


jetzt kann man das Ganze mit voc mqtt starten. Vorausgesetzt mosquitto ist schon installiert.

Jetzt komm ich zu einem Teil wo ich weiß dass es einfacher geht, aber ich und Linux rechte. Damit muss ich mich auch mal beschäftigen  ;D

Wenn man das ganze so einrichtet das man über User Fhem es ausführen kann ist das natürlich top. Ich wusste es nicht.

Deswegen hab ich dann sudo su eingegeben und dann nano ~/.voc.conf und dort die Config reingeschrieben.

Jetzt in Fhem
define Volvo_MQTT dummy
attr Volvo_MQTT setList active
define VOC_MQTT_Status notify
Volvo_MQTT:active "sudo voc mqtt"    # sudo wenn die Config unter root läuft


Jetzt kann der Befhel über den Dummy gestartet werden. Wenn jemand weiß wie man den Prozess aus Fhem wieder beendet kann er dies mir gern mitteilen.

define n_global_INITIALIZED notify
global:INITIALIZED\
set Volvo_MQTT active


Und so wird es beim Start von Fhem automatisch ausgeführt

define Volvo_Status MQTT_DEVICE
attr Volvo_Status DbLogInclude .*
attr Volvo_Status IODev myBroker
attr Volvo_Status event-on-change-reading .*
attr Volvo_Status icon hue_room_driveway
attr Volvo_Status room Volvo
attr Volvo_Status subscribeReading_Alle_Fenster volvo/KENZEICHEN/binary_sensor/any_window_open/state
attr Volvo_Status subscribeReading_Alle_Tueren volvo/KENZEICHEN/binary_sensor/any_door_open/state
attr Volvo_Status subscribeReading_Bremsfluessigkeit volvo/KENZEICHEN/binary_sensor/brake_fluid/state
attr Volvo_Status subscribeReading_Durchschnitsgeschwindigkeit volvo/KENZEICHEN/sensor/average_speed/state
attr Volvo_Status subscribeReading_Durchschnitsverbrauch volvo/KENZEICHEN/sensor/average_fuel_consumption/state
attr Volvo_Status subscribeReading_Geo owntracks/volvo/KENZEICHEN
attr Volvo_Status subscribeReading_KilometerZaehler_1 volvo/KENZEICHEN/sensor/trip_meter1/state
attr Volvo_Status subscribeReading_KilometerZaehler_2 volvo/KENZEICHEN/sensor/trip_meter2/state
attr Volvo_Status subscribeReading_Lampen volvo/KENZEICHEN/binary_sensor/bulb_failures/state
attr Volvo_Status subscribeReading_Motor_Status volvo/KENZEICHEN/binary_sensor/is_engine_running/state
attr Volvo_Status subscribeReading_ODO_Meter volvo/KENZEICHEN/sensor/odometer/state
attr Volvo_Status subscribeReading_Reichweite volvo/KENZEICHEN/sensor/distance_to_empty/state
attr Volvo_Status subscribeReading_Reifen_Hinten_Links volvo/KENZEICHEN/binary_sensor/tyre_pressure_rear_left_tyre_pressure/state
attr Volvo_Status subscribeReading_Reifen_Hinten_Rechts volvo/KENZEICHEN/binary_sensor/tyre_pressure_rear_right_tyre_pressure/state
attr Volvo_Status subscribeReading_Reifen_Vorne_Links volvo/KENZEICHEN/binary_sensor/tyre_pressure_front_left_tyre_pressure/state
attr Volvo_Status subscribeReading_Reifen_Vorne_Rechts volvo/KENZEICHEN/binary_sensor/tyre_pressure_front_right_tyre_pressure/state
attr Volvo_Status subscribeReading_Scheiben_wisch_Wasser volvo/KENZEICHEN/binary_sensor/washer_fluid_level/state
attr Volvo_Status subscribeReading_Service_Warnung volvo/KENZEICHEN/binary_sensor/service_warning_status/state
attr Volvo_Status subscribeReading_Standheizung volvo/KENZEICHEN/switch/heater/state
attr Volvo_Status subscribeReading_Tank_Inhalt volvo/KENZEICHEN/sensor/fuel_amount_level/state
attr Volvo_Status subscribeReading_Tank_Inhalt_Litter volvo/KENZEICHEN/sensor/fuel_amount/state



KENZEICHEN dann bitte durch eures ersetzen

Ich hab dies vorwiegend gemacht um über Alexa die Standheizung zu Starten da mir die App von Volvo zulange fürs Login braucht und ich kein Fan von vorprogrammierten Zeiten bin.

Was ich mir hier vom Forum noch wünschen würde, wäre eine Erkennung ob das Auto zuhause steht.

Zurzeit sieht das Reading so aus. {"_type": "location", "tid": "volvo", "t": "p", "lat": 59.10093144479297, "lon": 8.969945185546875, "acc": 1, "tst": 1611939589, "now": 1611944401, "tst_iso": "2021-01-29T16:59:49+00:00"}

Ich weiß die Formatierung müsste man noch ändern. Wie weiß ich aber nicht wie ich sie am besten darstellen sollte so dass sie in Fhem verarbeitet werden kann. Und ob man überhaupt in Fhem ein ,,Home Bereich" einrichten kann. Ich hätte da zwar eine Idee aber dazu müsste der Breiten und Längengrad in separate readings.  Und wenn jemand weiß ob und wie man die Außentemperatur noch mit loggen kann wäre das echt super.

Wie gesagt es ist keine Anleitung die man zu 100% übernehmen sollte. Aber es kann den ein oder anderem vielleicht weiterhelfen.
Raspberry B, B+, B v2 u. v3; DS18B20; MCP23017; CUL; ESP8266

Beta-User

Vermutlich ginge auch das Ding hier einfacher, wenn man MQTT2_DEVICE verwenden würde, dann kann auch die mosquitto-Installation entfallen und der System-Befehl in die readingList wandern.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

AlphaKingOne

hab das mit den Koordinate doch noch selbst hinbekommen.

erst beim Device ein userReadings G_Breite {(split ",",((split ":",(ReadingsVal("$name","Geo","")))[1]))[0]},\
G_Laenge  {(split ",",((split ":",(ReadingsVal("$name","Geo","")))[2]))[0]}


und dann hab ich noch ein Doif angelegt der dann sagt das dass Auto zuhause steht

define Volvo_Zuhause_D DOIF (
[Volvo_Status:G_Breite:d] lt 51.85091 and [Volvo_Status:G_Breite:d] gt 51.83959
and
[Volvo_Status:G_Laenge:d] lt 9.92052 and [Volvo_Status:G_Laenge:d] gt 9.91653)
(setreading Volvo_Status Zuhause Ja)
DOELSE
(setreading Volvo_Status Zuhause Nein)
Raspberry B, B+, B v2 u. v3; DS18B20; MCP23017; CUL; ESP8266

papa

Man kann die Daten auch mit FHEM-Bord-Mitteln abrufen. Dazu kann das HTTPMOD verwendet werden.
define VolvoOnCall HTTPMOD https://USERNAME:PASSWORD@vocapi.wirelesscar.net/customerapi/rest/v3.0/vehicles/VIN/status 300
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


Username und Password sollten klar sein. Die VIN ist die Fahrgestellnummer.
Für die aktuelle Position einfach diese URL nehmen - der Rest ist gleich.
define VolvoPosition HTTPMOD https://USERNAME:PASSWORD@vocapi.wirelesscar.net/customerapi/rest/v3.0/vehicles/VIN/position 300

Wenn jetzt Username und Password nicht im Klartext in der URL stehen würden, wäre das ganze noch besser.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

tweety-rt

Mit der Erklärung von @PAPA kann ich meinen Volvo auslesen. Allerdings sind die Timestamp zwei Stunden zurück. Diese ergeben sich wohl nicht aus der Uhrzeit im Volvo.
Kann mir jemand erklären, wie ich mit Post Kommandos senden kann? Laut API-Beschreibung kann man z.B. die Klimatisierung starten.
Habe die Beschreibung zu HTTPMOD gelesen aber nicht verstanden. Bei
https://USERNAME:PASSWORT@vocapi.wirelesscar.net/customerapi/rest/v3.0/vehicles/VIN/climatization-start bekomme ich eine Fehlermeldung.

papa

POST geht wie folgt - habe bisher nur Lock refolgreich hingekriegt
attr VolvoOnCall set01URL https://USERNAME:PASSWORD@vocapi.wirelesscar.net/customerapi/rest/v3.0/vehicles/VIN/lock
attr VolvoOnCall set01Name Lock
attr VolvoOnCall set01NoArg 1

Dann bit es
set VolvoOnCall Lock
Wenn die Ausführung erfolgreich ist, sind auch die Zeitstempel aktualisiert Diese sind übrigen in GMT und deshalb 2 Stunden zurück.
Weitere Infos zur API gibt es hier https://www.swedespeed.com/threads/getting-acclimated-with-voc-api-wow-so-much-potential.526450/post-6396946
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

B.Stromberg

Zitat von: AlphaKingOne am 29 Januar 2021, 19:38:37

Ich hab dies vorwiegend gemacht um über Alexa die Standheizung zu Starten da mir die App von Volvo zulange fürs Login braucht und ich kein Fan von vorprogrammierten Zeiten bin.


Moin!
Habe nun auch einen XC60 und bin auf diesen Thread gestoßen.

Funktioniert das denn bei dir mit Alexa?
Könntest du das dann bitte etwas genauer erläutern?

Danke!

B.Stromberg

Zitat von: papa am 25 August 2021, 23:00:08
Man kann die Daten auch mit FHEM-Bord-Mitteln abrufen. Dazu kann das HTTPMOD verwendet werden.

Wenn jetzt Username und Password nicht im Klartext in der URL stehen würden, wäre das ganze noch besser.

Ergänze das mal, weil Alpha schon länger hier nicht mehr online war.
Hast du Volvo on Call weiterverfolgt? Mit Alexa Aktivierung der SH und würdest mir ein wenig unter die Arme greifen?

Mir geht es eigentlich wirklich nur darum, die Standheizung mit Alexa ein und auszuschalten. (wobei da selbst "ein" reichen würde)
für meine Frau.

Das Alexa Device habe ich in FHEM schon am laufen.

B.Stromberg

Hmm.... scheint dann also closed Source oder ein großes Geheimnis zu sein...

Schade!

papa

Redest Du jetzt mir mir ? Lese nicht immer alles ....
Ich habe nur das, was oben beschrieben ist ausprobiert.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

dominik

Ich glaube die neuen Volvos verwenden nur mehr die neue API. Bei mir funktioniert die alte API auch nicht, hier ist der Link zur neuen:
https://developer.volvocars.com/volvo-api/connected-vehicle/

Leider kann man die noch nicht nutzen, zumindest bekommt man bei der Registrierung noch keine OAuth Infos um einen Token zu generieren. Man kann zumindest für 1h einen Demo Token generieren und diesen mit seinem Auto ausprobieren.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

B.Stromberg

@papa

Wie ich schon schrieb, bekomme ich Daten nach der Methode, die du gepostet hast.
Habe ein MY2018, noch kein Android in Car System.

Dachte das du evtl. auch einen Volvo hast und das mit der Standheizung und Alexa realisiert hast.

Der TE meldet sich ja nicht mehr, der dies realisieren wollte...

B.Stromberg

Zitat von: dominik am 09 Februar 2022, 22:43:44
Ich glaube die neuen Volvos verwenden nur mehr die neue API. Bei mir funktioniert die alte API auch nicht, hier ist der Link zur neuen:
https://developer.volvocars.com/volvo-api/connected-vehicle/

Leider kann man die noch nicht nutzen, zumindest bekommt man bei der Registrierung noch keine OAuth Infos um einen Token zu generieren. Man kann zumindest für 1h einen Demo Token generieren und diesen mit seinem Auto ausprobieren.

Habe noch ein Modelljahr 2018 und bekomme Daten nach der Methode von @papa

Geht jetzt "nur" noch darum, mit Alexa zu realisieren, dass ich die Standheizung per Sprachbefehl starten kann.

Xcoder

#13
Noch etwas erweitert um die Ladezeit auf den Strom Niedertarif anpassen zu können:

define VolvoChargeConfig HTTPMOD https://user%40mail.com:passwort@vocapi.wirelesscar.net/customerapi/rest/v3.0/vehicles/<VIN einsetzen>/chargeLocations/<Ladepunkt ID einsetzen> 30
attr VolvoChargeConfig enforceGoodReadingNames 1
attr VolvoChargeConfig extractAllJSON 1
attr VolvoChargeConfig readingEncode utf8
attr VolvoChargeConfig requestHeader02 Content-Type: application/json
attr VolvoChargeConfig requestHeader03 x-device-id: Device
attr VolvoChargeConfig requestHeader04 x-originator-type: App
attr VolvoChargeConfig requestHeader05 x-os-type: Android
attr VolvoChargeConfig requestHeader06 x-os-version: 22
attr VolvoChargeConfig room Volvo
attr VolvoChargeConfig set01Data {"status":"Accepted","plugInReminderEnabled":true,"delayCharging":{"enabled":false}}
attr VolvoChargeConfig set01Method PUT
attr VolvoChargeConfig set01Name Disable
attr VolvoChargeConfig set01NoArg 1
attr VolvoChargeConfig set01ParseResponse 1
attr VolvoChargeConfig set01URL https://user%40mail.com:passwort@vocapi.wirelesscar.net/customerapi/rest/v3.0/vehicles/<VIN einsetzen>/chargeLocations/<Ladepunkt ID einsetzen>
attr VolvoChargeConfig set02Data {"status":"Accepted","plugInReminderEnabled":true,"delayCharging":{"enabled":true,"startTime":"20:00","stopTime":"07:00"}}
attr VolvoChargeConfig set02Method PUT
attr VolvoChargeConfig set02Name EnableMoFr
attr VolvoChargeConfig set02NoArg 1
attr VolvoChargeConfig set02ParseResponse 1
attr VolvoChargeConfig set02URL https://user%40mail.com:passwort@vocapi.wirelesscar.net/customerapi/rest/v3.0/vehicles/<VIN einsetzen>/chargeLocations/<Ladepunkt ID einsetzen>
attr VolvoChargeConfig set03Data {"status":"Accepted","plugInReminderEnabled":true,"delayCharging":{"enabled":true,"startTime":"12:00","stopTime":"07:00"}}
attr VolvoChargeConfig set03Method PUT
attr VolvoChargeConfig set03Name EnableSa
attr VolvoChargeConfig set03NoArg 1
attr VolvoChargeConfig set03ParseResponse 1
attr VolvoChargeConfig set03URL https://user%40mail.com:passwort@vocapi.wirelesscar.net/customerapi/rest/v3.0/vehicles/<VIN einsetzen>/chargeLocations/<Ladepunkt ID einsetzen>
attr VolvoChargeConfig set04Data {"status":"Accepted","plugInReminderEnabled":true,"delayCharging":{"enabled":true,"startTime":"02:00","stopTime":"07:00"}}
attr VolvoChargeConfig set04Method PUT
attr VolvoChargeConfig set04Name EnableNight
attr VolvoChargeConfig set04NoArg 1
attr VolvoChargeConfig set04ParseResponse 1
attr VolvoChargeConfig set04URL https://user%40mail.com:passwort@vocapi.wirelesscar.net/customerapi/rest/v3.0/vehicles/<VIN einsetzen>/chargeLocations/<Ladepunkt ID einsetzen>
attr VolvoChargeConfig set05Data {}
attr VolvoChargeConfig set05Method POST
attr VolvoChargeConfig set05Name Lock
attr VolvoChargeConfig set05NoArg 1
attr VolvoChargeConfig set05ParseResponse 1
attr VolvoChargeConfig set05URL https://user%40mail.com:passwort@vocapi.wirelesscar.net/customerapi/rest/v3.0/vehicles/<VIN einsetzen>/lock
attr VolvoChargeConfig setHeader02 Content-Type: application/json
attr VolvoChargeConfig setHeader03 X-Device-Id: Device
attr VolvoChargeConfig setHeader04 X-OS-Type: Android
attr VolvoChargeConfig setHeader05 X-OS-Version: 22
attr VolvoChargeConfig setHeader06 X-Originator-Type: App
attr VolvoChargeConfig setHeader07 cache-control: no-cache
attr VolvoChargeConfig stateFormat {sprintf("Enabled: %d",ReadingsVal($name,"delayCharging_enabled",0))}


Die Ladepunkt ID findet man so:
curl --request GET --header 'Content-Type: application/json' --header 'X-Device-Id: Device' --header 'X-OS-Type: Android' --header 'X-OS-Version: 22' --header 'X-Originator-Type: App' --header 'cache-control: no-cache' --url 'https://user%40mail.com:passwort@vocapi.wirelesscar.net/customerapi/rest/v3.0/vehicles/<VIN einsetzen>/chargeLocations?status=Accepted'

Vorher muss man diesen Ladepunkt in der App einrichten.
Das %40 in der URL ist das @ Zeichen im Username/Mail-Addresse des VoC Accounts.

Credits an https://github.com/hollie/voc

lynckmeister

fallses noch jemand interessiert, ich habe die neue VOC API mit HTTPMOD zum laufen gebracht :

https://forum.fhem.de/index.php/topic,132209.0.html