evcc icon indicating copy to clipboard operation
evcc copied to clipboard

Improve ford-connect

Open andig opened this issue 1 year ago • 39 comments

Der erste Ansatz für ford-connect ist in wenigen Minuten im Nightly. Was noch fehlt:

  • [ ] Persistenz des Refresh Tokens da dieser leider abläuft
  • [ ] Beschreibung für evcc token <ford> um Code in Token zu verwandeln
  • [ ] Nutzung VIN, wie ist unklar

Originally posted by @andig in https://github.com/evcc-io/evcc/issues/13949#issuecomment-2132235143

andig avatar May 26 '24 14:05 andig

an die Vin bin ich auch noch nicht ran gekommen. Nur der Nickname kommt in frage im Augenblick. Oder man müsste die ID nutzen - da würde es dann auch nach einem umbenennen oder so keine Fehler geben. sollte man aber abfragen also zum token speichern oder?

Chris591 avatar May 26 '24 21:05 Chris591

Fahrzeug konnte ich über die UI einrichten - nur den RFID token kann man nicht einrichten. mal schauen ob es stabil und über Neustarts läuft.

Chris591 avatar May 27 '24 11:05 Chris591

Was hat ein RFID Token mit Ford zu tun?

andig avatar May 27 '24 11:05 andig

nichts nur mit dem Auto an sich - zum identifizieren - keine Ahnung wo das in Zukunft hin sollte.

Chris591 avatar May 27 '24 12:05 Chris591

Was ist denn das konkrete Problem?

andig avatar May 27 '24 13:05 andig

naja die Freischaltung der Wallbox - Aber eigentlich wird diese ja eh nur freigeschaltet wenn das Auto erkannt wurde oder?

Chris591 avatar May 27 '24 14:05 Chris591

ach eine Sache - der Status steht als Status: drinnen. ist aber für mich kein Problem nur ob es so sein sollte ist die Frage. Bild 27 05 24 um 16 20

Chris591 avatar May 27 '24 14:05 Chris591

aber es ist auch nicht angeschlossen!

Chris591 avatar May 27 '24 14:05 Chris591

naja die Freischaltung der Wallbox - Aber eigentlich wird diese ja eh nur freigeschaltet wenn das Auto erkannt wurde oder?

Ich verstehe nur Bahnhof. Bitte aussagekräfties Issue.

aber es ist auch nicht angeschlossen!

Bitte

evcc vehicle --log trace

andig avatar May 27 '24 14:05 andig

ich will das keiner die Wallbox ohne RFID nutzen kann - ist öffentlich zugänglich. deswegen hab ich dieses in der evcc.yaml unter vehicles

  identifiers:
    - aabbccdd # RFID token ID

Dies geht aber über die UI Konfiguration noch nicht oder? Aber die Wallbox sollte ja eh nicht freischalten wenn ein unbekanntes Auto angeschlossen ist oder hab ich da einen falsch Vorstellung?

Chris591 avatar May 27 '24 15:05 Chris591

Das hat nichts mit Ford zu tun- OT.

andig avatar May 27 '24 15:05 andig

sudo docker exec evcc evcc -l trace vehicle db:1
[main  ] INFO 2024/05/27 17:05:06 evcc 0.126.4 (5a4220b8)
[main  ] INFO 2024/05/27 17:05:06 using config file: /etc/evcc.yaml
[db    ] INFO 2024/05/27 17:05:06 using sqlite database: /root/.evcc/evcc.db
[db    ] TRACE 2024/05/27 17:05:06 SELECT count(*) FROM sqlite_master WHERE type='table' AND name="settings" -1 <nil>
[db    ] TRACE 2024/05/27 17:05:06 SELECT sql FROM sqlite_master WHERE type IN ("table","index") AND tbl_name = "settings" AND sql IS NOT NULL order by type = "table" desc 1 <nil>
[db    ] TRACE 2024/05/27 17:05:06 SELECT * FROM `settings` LIMIT 1 -1 <nil>
[db    ] TRACE 2024/05/27 17:05:06 SELECT * FROM `settings` 60 <nil>
[mqtt  ] INFO 2024/05/27 17:05:06 connecting evcc-852809414 at tcp://10.x.x.x:1883
[mqtt  ] DEBUG 2024/05/27 17:05:06 tcp://10.x.x.x:1883 connected
[db    ] TRACE 2024/05/27 17:05:06 SELECT count(*) FROM sqlite_master WHERE type='table' AND name="devices" -1 <nil>
[db    ] TRACE 2024/05/27 17:05:06 SELECT count(*) FROM sqlite_master WHERE type='table' AND name="device_details" -1 <nil>
[db    ] TRACE 2024/05/27 17:05:06 SELECT count(*) FROM sqlite_master WHERE type='table' AND name="configs" -1 <nil>
[db    ] TRACE 2024/05/27 17:05:06 SELECT sql FROM sqlite_master WHERE type IN ("table","index") AND tbl_name = "configs" AND sql IS NOT NULL order by type = "table" desc 1 <nil>
[db    ] TRACE 2024/05/27 17:05:06 SELECT * FROM `configs` LIMIT 1 -1 <nil>
[db    ] TRACE 2024/05/27 17:05:06 SELECT count(*) FROM sqlite_master WHERE type='table' AND name="config_details" -1 <nil>
[db    ] TRACE 2024/05/27 17:05:06 SELECT sql FROM sqlite_master WHERE type IN ("table","index") AND tbl_name = "config_details" AND sql IS NOT NULL order by type = "table" desc 2 <nil>
[db    ] TRACE 2024/05/27 17:05:06 SELECT * FROM `config_details` LIMIT 1 -1 <nil>
[db    ] TRACE 2024/05/27 17:05:06 SELECT count(*) FROM sqlite_master WHERE type = "table" AND tbl_name = "config_details" AND (sql LIKE "%CONSTRAINT ""fk_configs_details"" %" OR sql LIKE "%CONSTRAINT fk_configs_details %" OR sql LIKE "%CONSTRAINT `fk_configs_details`%" OR sql LIKE "%CONSTRAINT [fk_configs_details]%" OR sql LIKE "%CONSTRAINT 	fk_configs_details	%") -1 <nil>
[db    ] TRACE 2024/05/27 17:05:06 SELECT count(*) FROM sqlite_master WHERE type = "index" AND tbl_name = "config_details" AND name = "idx_unique" -1 <nil>
[db    ] TRACE 2024/05/27 17:05:06 SELECT count(*) FROM sqlite_master WHERE type = "table" AND tbl_name = "config_details" AND (sql LIKE "%CONSTRAINT ""fk_devices_details"" %" OR sql LIKE "%CONSTRAINT fk_devices_details %" OR sql LIKE "%CONSTRAINT `fk_devices_details`%" OR sql LIKE "%CONSTRAINT [fk_devices_details]%" OR sql LIKE "%CONSTRAINT 	fk_devices_details	%") -1 <nil>
[db    ] TRACE 2024/05/27 17:05:06 SELECT count(*) FROM sqlite_master WHERE type = "table" AND tbl_name = "config_details" AND (sql LIKE "%""device_id"" %" OR sql LIKE "%device_id %" OR sql LIKE "%`device_id`%" OR sql LIKE "%[device_id]%" OR sql LIKE "%	device_id	%") -1 <nil>
[db    ] TRACE 2024/05/27 17:05:06 SELECT * FROM `config_details` WHERE `config_details`.`config_id` = 1 8 <nil>
[db    ] TRACE 2024/05/27 17:05:06 SELECT * FROM `configs` WHERE `configs`.`class` = 3 ORDER BY id 1 <nil>
[ford  ] TRACE 2024/05/27 17:05:06 POST https://dah2vb2cprod.b2clogin.com/914d88b1-3523-4bf6-9be4-1b96b4f6f919/oauth2/v2.0/token?p=B2C_1A_signup_signin_common
[ford  ] TRACE 2024/05/27 17:05:07 grant_type=refresh_token&refresh_token=***
--
{"access_token":"***","id_token":"***","token_type":"Bearer","not_before":1716822307,"expires_in":1200,"expires_on":1716823507,"resource":"c1e4c1a0-2878-4e6f-a308-836b34474ea9","id_token_expires_in":1200,"profile_info":"***","scope":"https://dah2vb2cprod.onmicrosoft.com/fordconnect/access openid offline_access","refresh_token":"***","refresh_token_expires_in":7776000}
[ford  ] TRACE 2024/05/27 17:05:07 GET https://api.mps.ford.com/api/fordconnect/v3/vehicles
[ford  ] TRACE 2024/05/27 17:05:09 {"status":"SUCCESS","vehicles":[{"vehicleId":"***","make":"F","modelName":"Mustang Mach-E","modelYear":"2021","color":"LUCID RED TC/RED CARPET TC","nickName":"Mustang","modemEnabled":true,"vehicleAuthorizationIndicator":1,"serviceCompatible":true,"engineType":"BEV"}]}
[ford  ] TRACE 2024/05/27 17:05:09 GET https://api.mps.ford.com/api/fordconnect/v3/vehicles/***
[ford  ] TRACE 2024/05/27 17:05:12 {"status":"SUCCESS","vehicle":{"vehicleId":"***","make":"F","modelName":"Mustang Mach-E","modelYear":"2021","color":"LUCID RED TC/RED CARPET TC","nickName":"Mustang","modemEnabled":true,"lastUpdated":"05-26-2024 18:01:47","vehicleAuthorizationIndicator":1,"serviceCompatible":true,"engineType":"BEV","vehicleDetails":{"batteryChargeLevel":{"value":94.0,"distanceToEmpty":409.0,"timestamp":"05-26-2024 17:53:27"},"mileage":24350.3,"odometer":39188.0},"vehicleStatus":{"tirePressureWarning":false,"deepSleepInProgress":false,"firmwareUpgradeInProgress":false,"remoteStartStatus":{"status":"ENGINE_STOPPED","duration":0,"timeStamp":"05-14-2024 12:26:27"},"chargingStatus":{"value":"NotReady","timeStamp":"05-26-2024 17:23:40","chargeStartTime":"05-26-2024 12:31:00","chargeEndTime":"05-26-2024 15:34:00"},"plugStatus":{"value":false,"timeStamp":"05-26-2024 17:23:40"},"ignitionStatus":{"value":"OFF","timeStamp":"05-26-2024 17:53:27"},"doorStatus":[{"vehicleDoor":"REAR_LEFT","value":"CLOSED","vehicleOccupantRole":"PASSENGER","timeStamp":"05-26-2024 17:30:27"},{"vehicleDoor":"UNSPECIFIED_FRONT","value":"CLOSED","vehicleOccupantRole":"PASSENGER","timeStamp":"05-26-2024 17:30:27"},{"vehicleDoor":"REAR_RIGHT","value":"CLOSED","vehicleOccupantRole":"PASSENGER","timeStamp":"05-26-2024 17:30:27"},{"vehicleDoor":"TAILGATE","value":"CLOSED","vehicleOccupantRole":"PASSENGER","timeStamp":"05-26-2024 17:30:27"},{"vehicleDoor":"UNSPECIFIED_FRONT","value":"CLOSED","vehicleOccupantRole":"DRIVER","timeStamp":"05-26-2024 17:30:27"},{"vehicleDoor":"INNER_TAILGATE","value":"CLOSED","vehicleOccupantRole":"PASSENGER","timeStamp":"05-26-2024 17:30:27"},{"vehicleDoor":"HOOD_DOOR","value":"CLOSED","vehicleOccupantRole":"NOT_APPLICABLE","timeStamp":"05-26-2024 17:30:27"}],"lockStatus":{"value":"LOCKED","timeStamp":"05-26-2024 17:30:27"},"alarmStatus":{"value":"NOTSET","timeStamp":"05-26-2024 17:23:29"}},"vehicleLocation":{"speed":0.0,"direction":"EAST","timeStamp":"05-26-2024 17:23:40","longitude":"x.xxx","latitude":"y.yyy"},"vehicleCapabilities":{"remoteLock":"Available","remoteUnlock":"Available","remoteStart":"Available","remoteStop":"Available","boundaryAlerts":"Unavailable"}}}
Soc:           94%
Capacity:      91.0kWh
Charge status: 
Range:         409km
Odometer:      39188km
Position:      x.xxx,y.yyy
Features:      []

Chris591 avatar May 27 '24 15:05 Chris591

"plugStatus":{"value":false,"timeStamp":"05-26-2024 17:23:40"}

Chris591 avatar May 27 '24 15:05 Chris591

wie gesagt ist auch nicht verbunden

Chris591 avatar May 27 '24 15:05 Chris591

Fixed in master

andig avatar May 27 '24 17:05 andig

weiß nicht ob das mit Ford oder der UI Konfiguration zutun hat. Bild 27 05 24 um 22 27 Hier hab ich ihn Mach-E genannt. Bild 27 05 24 um 22 27 Hier wird aber der Nickname angezeigt.

Chris591 avatar May 27 '24 20:05 Chris591

leider hab ich im log nichts mehr sehen können - aber er war offline und hat geladen - als ich in die Konfiguration gegangen bin hat er nach kurzer alles angezeigt vom Auto aber am LP stand er immer noch als Offline und hat keinen SoC angezeigt. nach einem Neustart von EVCC lief alles wieder.

doch noch was gefunden: [main ] ERROR 2024/05/28 10:00:17 creating vehicle db:1 failed: cannot create vehicle type 'template': cannot create vehicle type 'ford-connect': cannot get vehicles: unexpected status: 429 (Too Many Requests) das war während dem starten von EVCC. Danach hat er es aber auch nicht wieder probiert - hab EVCC dann ca 80 Minuten später als ich es gesehen hab neugestartet - vorher in der Konfiguration nachgeschaut und da sah alles gut aus. nach dem Neustart läuft auch alles wieder wie es soll.

Chris591 avatar May 28 '24 09:05 Chris591

Fixed in master

confirmed - Status wird jetzt als "A" angezeigt wenn nicht verbunden.

Chris591 avatar May 28 '24 23:05 Chris591

der Error ist schon wieder da. [main ] ERROR 2024/05/29 10:00:17 creating vehicle db:1 failed: cannot create vehicle type 'template': cannot create vehicle type 'ford-connect': cannot get vehicles: unexpected status: 429 (Too Many Requests) das ist die Zeit wo der docker container ein update über Watchtower bekommt. restart des containers oder über die UI löst das Problem. Vielleicht hat hier einer eine Idee woran das liegen könnte.

Chris591 avatar May 29 '24 09:05 Chris591

wie kann ich den genau die tokens generieren das erste mal? irgendwie geht das bei mir nicht egal was ich bei evcc token danach eingebe?

djrepose avatar May 29 '24 18:05 djrepose

Hallo zusammen,

ich weiß nicht, ob das direkt hier hin gehört, aber wie komme ich an die Daten, die ich eintragen muss? Registriert bin ich bei "developer.ford.com/", aber wo bekomme ich die Client ID & Secret sowie die Tokens her?

Wondermusic avatar May 30 '24 06:05 Wondermusic

Es gehört nicht hier hin. Mach bitte eine Diskussion auf.

andig avatar May 30 '24 06:05 andig

weiß nicht ob das mit Ford oder der UI Konfiguration zutun hat. Bild 27 05 24 um 22 27 Hier hab ich ihn Mach-E genannt. Bild 27 05 24 um 22 27 Hier wird aber der Nickname angezeigt.

Ist bei mir auch so, EVCC nimmt hier die Bezeichnung aus der Ford API und nicht aus der evcc.yaml.

{ "status": "SUCCESS", "vehicle": { "vehicleId": "ff80....", "make": "F", "modelName": "Kuga - TD (CX482 EU)", "modelYear": "2020", "color": "Frozen White", "nickName": "Dennis",

Max112233445566 avatar May 30 '24 10:05 Max112233445566

Das wäre ein Bug falls in der yaml ein anderer Title vergeben wäre

andig avatar May 30 '24 11:05 andig

@andig ja, es ist ein Bug, Title ist ungleich nickName

Max112233445566 avatar May 30 '24 11:05 Max112233445566

Wahrscheinlich bin ich zu doof: Ich habe alle bekannten Infos im yaml eingetragen und erhalte das:

evcc token ev5 -c ./evcc.yaml -l debug
[main  ] INFO 2024/06/03 12:40:46 evcc 0.126.5
[main  ] INFO 2024/06/03 12:40:46 using config file: ./evcc.yaml
[main  ] FATAL 2024/06/03 12:40:46 1 error(s) decoding:

* '' has invalid keys: accesstoken, clientid, clientsecret, template

Eine Idee, was ich falsch mache? Mein Ziel ist es, den RefreshToken zu erzeugen.

miniluma avatar Jun 03 '24 10:06 miniluma

ich grabe mich auch gerade durch... Installiert habe ich 0.126.5 Bei Ford habe ich mich registriert, clientid und clientsecret habe ich also. Sobald ich eine Konfiguration mit "evcc configure" zu erstellen versuche komme ich bis zur Eingabe des access Token und des refresh Token. Die Hilfe verweist mich an der Stelle auf "https://docs.evcc.io/docs/devices/vehicles#ford-connect" Damit komme ich aber nicht weiter (ist noch nicht implementiert). Kommen die beiden Token von Ford oder evcc? Mit "evcc token" im cli komme ich nicht weiter, da lande ich auch bei "has invalid keys"... Ich habe gesehen für Tesla gibt es eine Seite tesla.evcc.io wo diese beiden Token generiert werden was mir aber maximal als Hinweis darauf dient, dass die beiden Token auch für Ford durch evcc erstellt werden.

hackfred64 avatar Jun 03 '24 13:06 hackfred64

Nightly nehmen…

andig avatar Jun 03 '24 14:06 andig

done! kommt der authorization code der dann bei "evcc token" gebraucht wird automatisch (per mail) von Ford oder muss ich den dort "manuell" anfordern?

hackfred64 avatar Jun 03 '24 14:06 hackfred64

Nightly nehmen…

Dann kommt [main ] FATAL 2024/06/03 16:17:05 oauth2: "invalid_grant" "AAD...: The provided JWE is not a valid 5 segment token.\r\nCorrelation ID: c3dff...\r\nTimestamp: 2024-06-03 14:17:05Z\r\n"

Der AccessToken war frisch.

miniluma avatar Jun 03 '24 14:06 miniluma