Autor Thema: Audi Connect / Audi MMI in fhem?  (Gelesen 6829 mal)

Offline huhu

  • Full Member
  • ***
  • Beiträge: 106
Audi Connect / Audi MMI in fhem?
« am: 02 Januar 2019, 13:53:10 »
Hallo zusammen,

gibt es eine Audi Connect Implementierung in FHEM oder "arbeitet" zufällig jemand daran? Es gibt ein Python Script, aber leider reichen meine Kenntnisse nicht aus um das in FHEM zu übertragen.
https://github.com/davidgiga1993/AudiAPI

Viele Grüße

Offline Gunther

  • Hero Member
  • *****
  • Beiträge: 1557
  • Perl? Copy & Paste... ;-)
Antw:Audi Connect / Audi MMI in fhem?
« Antwort #1 am: 16 März 2019, 14:35:05 »
Ist hier schon jemand "weitergekommen"?
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

Offline steffen83

  • Full Member
  • ***
  • Beiträge: 358
Antw:Audi Connect / Audi MMI in fhem?
« Antwort #2 am: 10 September 2019, 20:07:40 »
Ich hatte es Mal versucht, kam aber überhaupt nicht weiter. Könnte nur die Seriennummer ist so anrufen. Rest habe ich nicht verstanden
Raspberry Pi 3 (Noobs, aktuelle Fhem und Pilight) | FHEMduino | HM-OCCU-SDK | HM-Sec-SCo | HM-Sec-SD-2 | HM-CC-RT-DN | HM-LC-Bl1PBU-FM

Offline jojoja

  • Full Member
  • ***
  • Beiträge: 100
Antw:Audi Connect / Audi MMI in fhem?
« Antwort #3 am: 10 Dezember 2019, 22:13:53 »
Abend zusammen,

bei meinen Spielereien ist vorerst mal das herausgekommen:
import json
import string

from audiapi.API import *
from audiapi.Services import *
from audiapi.Token import *

def main():
    api = API()
    logon_service = LogonService(api)
    if not logon_service.restore_token():
        # We need to login
        with open('credentials.json') as data_file:
            data = json.load(data_file)
        logon_service.login(data['user'], data['pass'])

    car_service = CarService(api)
    vehicles_response = car_service.get_vehicles()
    print("\nGet vehicle information")
    vehicle = vehicles_response.vehicles[0]
    print((str(vehicle)).replace("'", '"'))

    vehicle_data = car_service.get_vehicle_data(vehicle)
#    print(vehicle_data)

    print("\nGet battery informations")
    battery_service = RemoteBatteryChargeService(api, vehicle)
    stored_data = battery_service.get_status()
    print((str(stored_data)).replace("'", '"'))

#    mgmt_service = VehicleManagementService(api, vehicle)
#    mgmt_service.get_information()

    print("\nGet vehicle location")
    car_finder_service = CarFinderService(api, vehicle)
    vehicle_position = car_finder_service.find()
    print((str(vehicle_position)).replace("'", '"'))

    print("\nDecode Position")
    pos = json.loads((str(vehicle_position)).replace("'", '"'))
    try:
        print("Longitude: ", str(pos["findCarResponse"]["Position"]["carCoordinate"]["longitude"]))
        print("Latitude: ", str(pos["findCarResponse"]["Position"]["carCoordinate"]["latitude"]))
        print("->  ",str(int(pos["findCarResponse"]["Position"]["carCoordinate"]["latitude"])/1000000), ", ", str(int(pos["findCarResponse"]["Position"]["carCoordinate"]["longitude"])/1000000))
    except Exception as e:
        print(e)


if __name__ == '__main__':
    main()

Das ergibt bei mir dann ungefähr folgendes:
Get vehicle information
{"vin": "nö", "csid": "nö", "registered": "nö"}

Get battery informations
{"charger": {"settings": {"maxChargeCurrent": {"content": 32, "timestamp": "2019-04-05T12:07:11Z"}}, "status": {"chargingStatusData": {"externalPowerSupplyState": {"content": "unavailable", "timestamp": "2019-12-10T16:15:10Z"}, "chargingState": {"content": "off", "timestamp": "2019-12-10T16:15:10Z"}, "chargingReason": {"content": "invalid", "timestamp": "2019-12-10T16:15:10Z"}, "energyFlow": {"content": "off", "timestamp": "2019-12-10T16:15:10Z"}, "chargingMode": {"content": "invalid", "timestamp": "2019-12-10T16:15:10Z"}}, "batteryStatusData": {"remainingChargingTimeTargetSOC": {"content": "unsupported", "timestamp": "2019-12-10T16:15:07Z"}, "remainingChargingTime": {"content": 0, "timestamp": "2019-12-10T16:15:07Z"}, "stateOfCharge": {"content": 60, "timestamp": "2019-12-10T16:17:14Z"}}, "plugStatusData": {"plugState": {"content": "disconnected", "timestamp": "2019-12-10T16:15:10Z"}, "lockState": {"content": "unlocked", "timestamp": "2019-12-10T16:15:10Z"}}, "ledStatusData": {"ledState": {"content": "off", "timestamp": "2019-12-10T16:15:10Z"}, "ledColor": {"content": "none", "timestamp": "2019-12-10T16:15:10Z"}}, "cruisingRangeStatusData": {"engineTypeFirstEngine": {"content": "typeIsElectric", "timestamp": "2019-12-10T16:17:14Z"}, "primaryEngineRange": {"content": 22, "timestamp": "2019-12-10T16:17:14Z"}}}}}

Get vehicle location
{"findCarResponse": {"parkingTimeUTC": "2019-12-10T16:15:58Z", "Position": {"timestampCarCaptured": "2019-12-10T17:17:14", "timestampCarSentUTC": "2019-12-10T16:15:58Z", "timestampCarSent": "2019-12-10T17:17:14", "timestampTssReceived": "2019-12-10T16:17:14Z", "carCoordinate": {"latitude": nö, "longitude": nö}}}}

Decode Position
Longitude:  nö
Latitude:  nö
->   nö,  nö

Das ausgeklammerte mgmt_service hat bei mir nicht funktioniert, fehlende Berechtigungen... Und die hier einbezogenen Batterie Infos funktionieren vermutlich nur bei den e-trons :D
Ich guck die Tage mal weiter, aber vielleicht kann schon jemand etwas damit anfangen.

Viele Grüße
Johannes
FHEM 6.0 @ IntelNUC6CAYH;  Unifi USG, Switch, AP AC Pro; HM-MOD-UART;  Sonos Play 1 & 3, One, Beam; Philips Hue

Offline steffen83

  • Full Member
  • ***
  • Beiträge: 358
Antw:Audi Connect / Audi MMI in fhem?
« Antwort #4 am: 10 Dezember 2019, 22:21:42 »
Bin da leider Neuling drin, was soll ich genau da testen?
Helfe dann gern

Gesendet von meinem MI 8 mit Tapatalk

Raspberry Pi 3 (Noobs, aktuelle Fhem und Pilight) | FHEMduino | HM-OCCU-SDK | HM-Sec-SCo | HM-Sec-SD-2 | HM-CC-RT-DN | HM-LC-Bl1PBU-FM

Offline jojoja

  • Full Member
  • ***
  • Beiträge: 100
Antw:Audi Connect / Audi MMI in fhem?
« Antwort #5 am: 10 Dezember 2019, 22:45:52 »
Kurz:

git clone https://github.com/davidgiga1993/AudiAPI.git
cd AudiAPI
cp credentials.template.json credentials.json
nano credentials.json
nano testAudi.py

Im ersten nano müssen deine Zugangsdaten rein und im zweiten nano den Code von oben. Mit
python3 testAudi.py
sollte/könnte es dann durchlaufen :D kannst ja mal probieren, ob mgmt_service tut, vielleicht braucht man dafür eine SIM im Auto. Viel Spaß!
FHEM 6.0 @ IntelNUC6CAYH;  Unifi USG, Switch, AP AC Pro; HM-MOD-UART;  Sonos Play 1 & 3, One, Beam; Philips Hue

Offline steffen83

  • Full Member
  • ***
  • Beiträge: 358
Antw:Audi Connect / Audi MMI in fhem?
« Antwort #6 am: 11 Dezember 2019, 08:15:17 »
python3 testAudi.py

Get vehicle information
{"vin": "nö", "registered": "2018-02-09T18:39:18.556+01:00", "csid": "nö"}

Get battery informations
Traceback (most recent call last):
  File "testAudi.py", line 50, in <module>
    main()
  File "testAudi.py", line 28, in main
    stored_data = battery_service.get_status()
  File "/home/pi/AudiAPI/audiapi/Services.py", line 330, in get_status
    data = self._api.get(self.url('/vehicles/{vin}/charger'))
  File "/home/pi/AudiAPI/audiapi/API.py", line 50, in get
    return self.__handle_error(r.json())
  File "/home/pi/AudiAPI/audiapi/API.py", line 68, in __handle_error
    raise Exception('API error: ' + str(error) + '\n' + error_msg)
Exception: API error: {'description': 'The service: rbatterycharge_v1 for VIN: nöööööööööööööö could not be found.', 'errorCode': 'batterycharge.auth.forbidden'}

Wenn ich den Teil mit der Batterie rausnehme klappt es besser :-)

Get vehicle information
{"registered": "2018-02-09T18:39:18.556+01:00", "vin": "xxx", "csid": "xxx"}

Get vehicle location
{"findCarResponse": {"Position": {"timestampCarSentUTC": "2019-12-11T06:08:40Z", "carCoordinate": {"longitude": 7xxx, "latitude": 51xxx}, "timestampTssReceived": "2019-12-11T06:08:48Z", "timestampCarCaptured": "0002-11-28T00:00:00", "timestampCarSent": "0002-11-28T00:00:00"}, "parkingTimeUTC": "2019-12-11T06:08:40Z"}}

Decode Position
Longitude:  7xxx
Latitude:  51xxx
->   51.xxx ,  7.xxx

Was man jetzt testen muss, ob er auch die Standortdaten ausgibt, wenn das Auto sich bewegt :-)
« Letzte Änderung: 11 Dezember 2019, 08:24:05 von steffen83 »
Raspberry Pi 3 (Noobs, aktuelle Fhem und Pilight) | FHEMduino | HM-OCCU-SDK | HM-Sec-SCo | HM-Sec-SD-2 | HM-CC-RT-DN | HM-LC-Bl1PBU-FM

Offline der-Lolo

  • Hero Member
  • *****
  • Beiträge: 1749
Antw:Audi Connect / Audi MMI in fhem?
« Antwort #7 am: 11 Dezember 2019, 08:34:41 »
zum mitlesen!

Offline jojoja

  • Full Member
  • ***
  • Beiträge: 100
Antw:Audi Connect / Audi MMI in fhem?
« Antwort #8 am: 12 Dezember 2019, 20:20:23 »
Meine Erfahrung damit ist, dass das Auto von sich aus nur beim Abstellen sendet. Da in meiner Tiefgarage kein Empfang ist, steht es quasi immer beim letzten Halteort, also beim Einkaufen oder Arbeit. Über die App kann man aber ein manuelles Update anfragen.
FHEM 6.0 @ IntelNUC6CAYH;  Unifi USG, Switch, AP AC Pro; HM-MOD-UART;  Sonos Play 1 & 3, One, Beam; Philips Hue

Offline der-Lolo

  • Hero Member
  • *****
  • Beiträge: 1749
Antw:Audi Connect / Audi MMI in fhem?
« Antwort #9 am: 12 Dezember 2019, 21:25:42 »
Toll wäre wenn man z.b. von FHEM aus Navigationziele eingeben könnte...

Offline huhu

  • Full Member
  • ***
  • Beiträge: 106
Antw:Audi Connect / Audi MMI in fhem?
« Antwort #10 am: 07 Juni 2020, 22:57:42 »
Schande über mein Haupt, diesen Thread habe ich schon total vergessen.. Habe es gerade mal mit dem Code von jojoja probiert aber es endet in:

python3 testAudi.py
Traceback (most recent call last):
  File "testAudi.py", line 1, in <module>
    from audiapi.Services import *
  File "/home/pi/AudiAPI/audiapi/Services.py", line 66
    return super().url(part, **format_data, vin=self._vehicle.vin)
                                          ^
SyntaxError: invalid syntax

Ich verstehe es aber leider nicht wirklich..