FHEM Forum

FHEM => Sonstiges => Thema gestartet von: huhu am 02 Januar 2019, 13:53:10

Titel: Audi Connect / Audi MMI in fhem?
Beitrag von: huhu 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
Titel: Antw:Audi Connect / Audi MMI in fhem?
Beitrag von: Gunther am 16 März 2019, 14:35:05
Ist hier schon jemand "weitergekommen"?
Titel: Antw:Audi Connect / Audi MMI in fhem?
Beitrag von: steffen83 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
Titel: Antw:Audi Connect / Audi MMI in fhem?
Beitrag von: jojoja 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
Titel: Antw:Audi Connect / Audi MMI in fhem?
Beitrag von: steffen83 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

Titel: Antw:Audi Connect / Audi MMI in fhem?
Beitrag von: jojoja 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ß!
Titel: Antw:Audi Connect / Audi MMI in fhem?
Beitrag von: steffen83 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 :-)
Titel: Antw:Audi Connect / Audi MMI in fhem?
Beitrag von: der-Lolo am 11 Dezember 2019, 08:34:41
zum mitlesen!
Titel: Antw:Audi Connect / Audi MMI in fhem?
Beitrag von: jojoja 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.
Titel: Antw:Audi Connect / Audi MMI in fhem?
Beitrag von: der-Lolo am 12 Dezember 2019, 21:25:42
Toll wäre wenn man z.b. von FHEM aus Navigationziele eingeben könnte...
Titel: Antw:Audi Connect / Audi MMI in fhem?
Beitrag von: huhu 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..