Improve ford-connect
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
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?
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.
Was hat ein RFID Token mit Ford zu tun?
nichts nur mit dem Auto an sich - zum identifizieren - keine Ahnung wo das in Zukunft hin sollte.
Was ist denn das konkrete Problem?
naja die Freischaltung der Wallbox - Aber eigentlich wird diese ja eh nur freigeschaltet wenn das Auto erkannt wurde oder?
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.
aber es ist auch nicht angeschlossen!
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
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?
Das hat nichts mit Ford zu tun- OT.
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: []
"plugStatus":{"value":false,"timeStamp":"05-26-2024 17:23:40"}
wie gesagt ist auch nicht verbunden
Fixed in master
weiß nicht ob das mit Ford oder der UI Konfiguration zutun hat.
Hier hab ich ihn Mach-E genannt.
Hier wird aber der Nickname angezeigt.
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.
Fixed in master
confirmed - Status wird jetzt als "A" angezeigt wenn nicht verbunden.
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.
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?
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?
Es gehört nicht hier hin. Mach bitte eine Diskussion auf.
weiß nicht ob das mit Ford oder der UI Konfiguration zutun hat.
Hier hab ich ihn Mach-E genannt.
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",
Das wäre ein Bug falls in der yaml ein anderer Title vergeben wäre
@andig ja, es ist ein Bug, Title ist ungleich nickName
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.
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.
Nightly nehmen…
done! kommt der authorization code der dann bei "evcc token" gebraucht wird automatisch (per mail) von Ford oder muss ich den dort "manuell" anfordern?
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.
Hier hab ich ihn Mach-E genannt.
Hier wird aber der Nickname angezeigt.