Ist mir bewusst und habe ich auch getan. Aber ist das nicht auch ChargeNow? Wollte nur verhindern, dass noch mehr (nutzloser) Plastikmüll fabriziert wird, nur weil man sie kostenlos bestellen kann.
Beiträge von marco79cgn
-
-
Im Handschuhfach des Smarts liegt bereits eine physische Ladekarte.
-
Anbei einige Fotos meines Autos, das ich am 21. April in Köln bekommen habe.
-
Die UserID nützt alleine recht wenig. Wie bereits beschrieben, sind alle Anfragen signiert. Ohne gültige Signatur kommt kein Ergebnis.
Folgende Header werden zwingend benötigt. Wie man an den Authorization Token kommt weiß ich. Beim Timestamp ist es nur wichtig, dass er maximal 30 Sekunden alt ist und neuer als jener vom vorigen Request. Was fehlt ist die Berechnung der Signatur (x-signature) und beim Nonce weiß ich nicht genau, ob man irgendwas schreiben kann. In jedem Fall muss es unique sein.
Code
Alles anzeigen-H 'Host: api.ecloudeu.com' \ -H 'X-ENV-TYPE: production' \ -H 'Accept: application/json;responseformat=3' \ -H 'Authorization: eyJhbGciO*******************' \ -H 'X-TIMESTAMP: 1682105292685' \ -H 'X-AGENT-TYPE: iOS' \ -H 'X-SIGNATURE: KIk09M7DO/LFn2lqr5hOpSUIWMc=' \ -H 'x-api-signature-version: 1.0' \ -H 'Accept-Language: de;q=1' \ -H 'PLATFORM: NON-CMA' \ -H 'X-APP-ID: SmartAPPEU' \ -H 'User-Agent: Hello smart/1.0.1 (iPhone; iOS 16.4.1; Scale/3.00)' \ -H 'X-CLIENT-ID: APPLE0000APP00IPHONE2***********1' \ -H 'X-OPERATOR-CODE: SMART' \ -H 'Connection: keep-alive' \ -H 'x-api-signature-nonce: 3090D1B4-398B-4A7C-9BD9-34CA992B4E6A' \ -H 'X-DEVICE-TYPE: mobile'
Sobald der Timestamp und bzw. oder der nonce geändert wird, stimmt die Signatur nicht mehr und muss neu berechnet werden. Dazu wird ein Secret benötigt, das mir nicht bekannt ist.
Der Knackpunkt ist also diese Berechnung. Ohne die gibt es kein Home Assistant oder sonstige Anbindungen. Ist natürlich alles non-public, also bekommt man von offizieller Seite keine Info.
-
-
Ich habe mich mal mit einem Proxy zwischen die iOS App gehängt und geschaut, welche api calls gemacht werden und was zurück kommt.
Vorneweg: die Kommunikation ist per Oauth abgesichert und jeder einzelne Request wird nicht nur mit einem Authorization Header versehen (JWT accessToken) sondern zusätzlich mit einem Timestamp, einer Nonce (Zufallswert) sowie einer Signatur. Die Signatur wird mit einem privaten Schlüssel generiert (der mir nicht bekannt ist). Dadurch wird sichergestellt, dass Requests nicht wiederholt abgeschickt werden können bzw. abgefangen und verändert werden.
Folgender api call liefert so ziemlich alle Daten, die teilweise auch in der App schon angezeigt werden, z.B. Standort des Autos (position), Reifendruck, Akkustand (chargeLevel) usw. Es sind aber auch Infos dabei, die die App (noch) nicht anzeigt, z.B. der Zustand der 12V Batterie.
Api Endpunkt:
https://api.ecloudeu.com/remote-control/vehicle/status/HESXA2C48N*******?latest=False&target=basic%2Cmore&userId=79****
(→ Im Header des Requests müssen sämtliche Parameter übergeben werden, ansonsten kommt nichts zurück)
Ergebnis:
Code
Alles anzeigen{ "code":"1000", "data":{ "result":{ "serviceResult":{ "error":null, "operationResult":1 }, "sessionId":"NS0912350000000**************" }, "vehicleStatus":{ "basicVehicleStatus":{ "usageMode":"0", "engineStatus":"engine_off", "position":{ "altitude":"49", "posCanBeTrusted":"true", "latitude":"18*******31", "carLocatorStatUploadEn":"true", "marsCoordinates":"false", "longitude":"24******8" }, "carMode":"0", "speed":"0.0", "speedValidity":"false", "direction":"0" }, "notification":{ "notifForEmgyCallStatus":"0", "reason":"1", "time":"1675172143", "parameters":"{\"key\":\"New VIN number\",\"stringVal\":\"HESXA2**********\"},{\"key\":\"Previous VIN number\",\"stringVal\":\"null\"}" }, "eg":{ "enableRunning":"false", "blocked":{ "status":"0" }, "panicStatus":"false" }, "parkTime":{ "status":"1682430830731" }, "configuration":{ "propulsionType":"4", "fuelType":"4", "vin":"HESXA**********" }, "updateTime":"1682431295000", "additionalVehicleStatus":{ "maintenanceStatus":{ "daysToService":"496", "engineHrsToService":"500", "odometer":"118.000", "brakeFluidLevelStatus":"3", "tyreTempDriverRear":"18.000", "mainBatteryStatus":{ "stateOfCharge":"1", "chargeLevel":"82.6", "energyLevel":"0", "stateOfHealth":"0", "powerLevel":"0", "voltage":"12.475" }, "tyreTempDriver":"17.000", "tyreTempPassengerRear":"17.000", "distanceToService":"29882", "tyreStatusPassengerRear":"258.124", "tyreStatusPassenger":"258.124", "tyreStatusDriverRear":"262.243", "serviceWarningStatus":"0", "tyreStatusDriver":"260.870", "tyreTempPassenger":"16.000", "washerFluidLevelStatus":"1" }, "electricVehicleStatus":{ "disChargeUAct":"0.0", "dcChargeSts":"0", "disChargeSts":"0", "chargeLevel":"74", "statusOfChargerConnection":"0", "chargeLidAcStatus":"2", "distanceToEmptyOnBattery100Soc":"403", "distanceToEmptyOnBatteryOnly":"276", "dcDcActvd":"0", "indPowerConsumption":"1000", "averPowerConsumption":"16.9", "dcDcConnectStatus":"0", "disChargeIAct":"0.0", "dcChargeIAct":"0.0", "chargerState":"0", "timeToTargetDisCharged":"2047", "chargeUAct":"0.0", "distanceToEmptyOnBattery20Soc":"81", "bookChargeSts":"0", "disChargeConnectStatus":"0", "chargeIAct":"0.000", "chargeLidDcAcStatus":"2", "timeToFullyCharged":"2047" }, "chargeHvSts":"2", "drivingBehaviourStatus":{ "gearAutoStatus":"0" }, "trailerStatus":{ "trailerFogLampSts":"0", "trailerTurningLampSts":"0", "trailerBreakLampSts":"0", "trailerReversingLampSts":"0", "trailerPosLampSts":"0" }, "runningStatus":{ "ahbc":"0", "goodbye":"0", "homeSafe":"0", "cornrgLi":"0", "frntFog":"0", "stopLi":"0", "tripMeter1":"86.3", "approach":"0", "tripMeter2":"16.4", "hiBeam":"0", "engineCoolantLevelStatus":"3", "loBeam":"0", "ltgShow":"0", "welcome":"0", "drl":"0", "ahl":"0", "trunIndrLe":"0", "trunIndrRi":"0", "dbl":"0", "afs":"0", "avgSpeed":"18", "reverseLi":"0", "hwl":"0", "reFog":"0", "flash":"0" }, "climateStatus":{ "drvHeatSts":"0", "winPosDriver":"0", "rrVentDetail":"0", "rlVentSts":"0", "passVentSts":"0", "interiorTemp":"23.200", "passVentDetail":"0", "sunroofPos":"101", "sunroofOpenStatus":"1", "rrHeatingDetail":"0", "winStatusPassenger":"2", "drvVentSts":"0", "fragActive":false, "winStatusDriver":"2", "winStatusPassengerRear":"2", "sunCurtainRearOpenStatus":"1", "preClimateActive":false, "rlHeatingDetail":"0", "winPosPassengerRear":"0", "rlVentDetail":"0", "curtainPos":"101", "curtainOpenStatus":"1", "climateOverHeatProActive":"false", "rrVentSts":"0", "rrHeatingSts":"0", "steerWhlHeatingSts":"0", "drvVentDetail":"0", "winPosPassenger":"0", "winPosDriverRear":"0", "exteriorTemp":"13.500", "rlHeatingSts":"0", "winStatusDriverRear":"2", "drvHeatDetail":"2", "passHeatingDetail":"2", "airBlowerActive":"false", "sunCurtainRearPos":"0", "passHeatingSts":"0" }, "drivingSafetyStatus":{ "doorLockStatusDriverRear":"1", "srsCrashStatus":"0", "doorOpenStatusPassengerRear":"0", "doorPosPassengerRear":"0", "doorOpenStatusDriver":"0", "seatBeltStatusPassenger":"false", "seatBeltStatusThPassengerRear":"false", "doorPosDriver":"0", "electricParkBrakeStatus":"3", "doorLockStatusDriver":"1", "seatBeltStatusThDriverRear":"false", "tankFlapStatus":"2", "seatBeltStatusPassengerRear":"false", "doorOpenStatusPassenger":"0", "doorPosPassenger":"0", "vehicleAlarm":{ "alrmTrgSrc":"0" }, "doorPosDriverRear":"0", "centralLockingStatus":"2", "seatBeltStatusDriver":"false", "doorLockStatusPassenger":"1", "seatBeltStatusMidRear":"false", "trunkLockStatus":"1", "seatBeltStatusDriverRear":"false", "engineHoodOpenStatus":"0", "doorOpenStatusDriverRear":"0", "doorLockStatusPassengerRear":"1", "trunkOpenStatus":"0" }, "pollutionStatus":{ "interiorPM25":"1", "interiorSecondPM25Level":"0", "interiorPM25Level":"0", "relHumSts":"80", "exteriorPM25Level":"0" } }, "temStatus":{ "swVersion":null, "serialNumber":null, "powerSource":null, "networkAccessStatus":{ "mobileNetwork":null, "simInfo":{ "iccId":null, "imsi":null, "msisdn":null } }, "mcuVersion":null, "mpuVersion":null, "backupBattery":{ "stateOfCharge":null, "stateOfHealth":null, "voltage":null }, "hwVersion":null, "powerMode":null, "sleepCycleNextWakeupTime":null, "imei":null, "state":null, "connectivityStatus":null } } }, "success":true, "hint":null, "httpStatus":"OK", "sessionId":"94864a**********************", "message":"operation succeed" }
-
-
Ich habe schon das Auto aber noch keine Rechnung.
Habe mich aber noch nirgendwo beschwert.
-
Nachtrag:
In den Bestell-Metadaten ist auch schon alles korrekt hinterlegt (json):"handoverDate": "21.04.2023",
"licensePlate": "K LF *** E",
"deliveryStatus": "HANDED_OVER",
"deliveryStatusDisplay": "Übergabe erfolgt",
"status": "HANDED_OVER",
"statusDisplay": "Übergabe erfolgt",
"modificationDate": "2023-04-21T13:35:58.034Z"
-
Update:
Koppeln des Smartphones (iPhone 14 Pro) mit dem Smart hat hervorragend geklappt. Aufschließen und auch Fahren mit dem digitalen Schlüssel klappte auf Anhieb.
Fußmatten gibt es bei Mercedes in Köln grundsätzlich immer dazu, genauso wie einen Erste Hilfe Kasten, ein Warndreieck und eine Warnweste.
Mein Verkäufer hat sich wahnsinnig viel Mühe gegeben und war auch super happy, endlich auch den ersten Brabus an den Mann gebracht zu haben.
Bei der Testfahrt habe ich jedoch das Problem festgestellt, dass permanent eine Anzeige bezüglich der Anhängerkupplung kommt. Ich besitze keine und plane auch keine Anschaffung. Kennt das Problem jemand von euch? Manchmal verschwindet die Meldung wieder von selbst, meistens muss man sie weg drücken.
ZitatBei Verwendung eines Anhängers sind einige Fahrassistenzfunktionen nicht verfügbar. Siehe Benutzerhandbuch für weitere Informationen.
Das Navi benötigt in der deutschen Sprachausgabe noch etwas Feinschliff, funktioniert aber schon ziemlich gut. „Nehmen Sie die rechts Spur“ etc.