
Ai Ways U5 SOC abgreifen
Zitat von joersch am 19. November 2022, 17:16 UhrOk, zweiter Versuch das zu posten... Mein Versuch von vorhin ist wohl irgendwie nicht im Forum angekommen... Code reinpasten ist echt Mist hier... Habs eben mal auf GitHub geschmissen: https://github.com/menkej/aiways-test
Wie gesagt: ich bin kein JS Spezi und die asynchrone Art ist sehr gewöhnungsbedürftig... Ich hatte erst Probleme Daten zwischen den Aufrufen hin und her zu bekommen und die Requests haben sich überholt. Daher die Nutzung von Werten im Objektbaum. Braucht also ioBroker zum Laufen. Ich kann das aber notfalls wieder auf plain node.js drehen... Versuch die Requests in die richtige Reihenfolge zu bekommen, war jetzt den Login erst auszuführen und dann mit await auf die nächsten Aufrufe zu warten. Geht sicher viel kompakter und schöner. Muss mich da erstmal noch weiter reinfuchsen.
Wie gesagt: Login funktioniert und ich bekomme die userdaten aus der App und ein Token zurück. Beim zweiten Request kommt dann nur ein "{"code":401,"message":"Invalid login status, please log in again","timestamp":1668718258217}" zurück. Logout läuft dann wieder, aber das scheint mir eh ein fire/forget Ding zu sein (und vermutlich überflüssig).
Ist aktuell, wie gesagt 1:1 basierend auf den Aufrufen aus dem Python Skript von @0815eddi. Hatte mich auch kurz an der NodeRed Version probiert, aber das ist mir irgendwie viel zu bunt... 😉
Vielleicht findet ihr ja den fehlenden Buchstaben. Ich bin mittlerweile Betriebsblind...
Grüße
Jörg
PS: bei meinem Mittschnitt der App-Kommunikation wurden andere APIs genutzt. Könnte daran liegen, dass sich hier im Laufe des Jahres etwas geändert hat, oder daran, dass ich die iOS App mitgeschnitten hatte... Aber das würde ich vertiefen, wenn es erstmal "irgendwie" läuft.
Ok, zweiter Versuch das zu posten... Mein Versuch von vorhin ist wohl irgendwie nicht im Forum angekommen... Code reinpasten ist echt Mist hier... Habs eben mal auf GitHub geschmissen: https://github.com/menkej/aiways-test
Wie gesagt: ich bin kein JS Spezi und die asynchrone Art ist sehr gewöhnungsbedürftig... Ich hatte erst Probleme Daten zwischen den Aufrufen hin und her zu bekommen und die Requests haben sich überholt. Daher die Nutzung von Werten im Objektbaum. Braucht also ioBroker zum Laufen. Ich kann das aber notfalls wieder auf plain node.js drehen... Versuch die Requests in die richtige Reihenfolge zu bekommen, war jetzt den Login erst auszuführen und dann mit await auf die nächsten Aufrufe zu warten. Geht sicher viel kompakter und schöner. Muss mich da erstmal noch weiter reinfuchsen.
Wie gesagt: Login funktioniert und ich bekomme die userdaten aus der App und ein Token zurück. Beim zweiten Request kommt dann nur ein "{"code":401,"message":"Invalid login status, please log in again","timestamp":1668718258217}" zurück. Logout läuft dann wieder, aber das scheint mir eh ein fire/forget Ding zu sein (und vermutlich überflüssig).
Ist aktuell, wie gesagt 1:1 basierend auf den Aufrufen aus dem Python Skript von @0815eddi. Hatte mich auch kurz an der NodeRed Version probiert, aber das ist mir irgendwie viel zu bunt... 😉
Vielleicht findet ihr ja den fehlenden Buchstaben. Ich bin mittlerweile Betriebsblind...
Grüße
Jörg
PS: bei meinem Mittschnitt der App-Kommunikation wurden andere APIs genutzt. Könnte daran liegen, dass sich hier im Laufe des Jahres etwas geändert hat, oder daran, dass ich die iOS App mitgeschnitten hatte... Aber das würde ich vertiefen, wenn es erstmal "irgendwie" läuft.
Zitat von DasMoritz am 20. November 2022, 10:38 UhrHallo StRo3,
das hier ist leider vollkommen der falsche Thread dafür, da es hier um das technische Abgreifen des State of Charge (SoC) geht, nicht um den Onboard-Lader, OTA-Funktionen oder Qualitätsprobleme.
Kann ein admin das Verschieben?
Hallo StRo3,
das hier ist leider vollkommen der falsche Thread dafür, da es hier um das technische Abgreifen des State of Charge (SoC) geht, nicht um den Onboard-Lader, OTA-Funktionen oder Qualitätsprobleme.
Kann ein admin das Verschieben?
Zitat von Jpsy am 20. November 2022, 11:07 UhrHallo @joersch,
mann, mann, mann, die Schwammintelligenz 😀 scheitert!
Ich hab jetzt gute 3 Stunden mit Deinem Code verbracht. Hab das Ganze lokal bei mir in Node RED in einem Function Node nachgebaut, weil das das einzige Node.js basierte System bei mir ist. Hab aber Deinen Code dabei weitgehend erhalten (abgesehen vom Umbau auf Promise-Chains statt Awaits - siehe unten).Und was soll ich sagen: Gleicher Fehler!
Der Login-Request geht durch, der getCondition-Request läuft mit einem 401 gegen die Wand.In exakt dem gleichen Node RED läuft bei mir auch die Aiways-API-Anbindung für Home Assistant. Ebenfalls in Node RED und per JS codiert. Und funktioniert.
Einziger Unterschied: Dort verwende ich nicht den Axios-HTTP-Client, sondern einen entsprechenden Node-RED-Node.
Also hab ich den Axios im Verdacht und hab dort mit Intercepts gearbeitet, um zu checken, was er alles in der Config sammelt, bevor er sendet. Das sieht aber alles perfekt aus. Ich finde keinen Fehler!
An dem Punkt muss ich jetzt leider aufgeben. Vielleicht probierst Du es mal noch mit einem anderen HTTP-Client.
Node.js hat ja auch einen originären Client an Bord: https://nodejs.org/en/knowledge/HTTP/clients/how-to-create-a-HTTP-request/Noch kurz zu Deiner Code-Struktur: Du hast ein Gemisch aus Thens und Awaits gebaut. Das geht besser mit Promise-Chains ( Promise.then().then().then() ). Promises sind aber zugegebenermaßen nicht ganz einfach zu verstehen. Insbesondere die Parameter von Thens lassen diverse Varianten zu, die man alle beherrschen muss.
Aber das ist im Moment ja nicht das Hauptproblem. Ich hab meinen Code mit korrektem Chaining aufgebaut, und komme trotzdem zum genau gleichen Fehler, wie Du.
A Woansinn is des!Herzliche Grüße
auch Jörg
Hallo @joersch,
mann, mann, mann, die Schwammintelligenz 😀 scheitert!
Ich hab jetzt gute 3 Stunden mit Deinem Code verbracht. Hab das Ganze lokal bei mir in Node RED in einem Function Node nachgebaut, weil das das einzige Node.js basierte System bei mir ist. Hab aber Deinen Code dabei weitgehend erhalten (abgesehen vom Umbau auf Promise-Chains statt Awaits - siehe unten).
Und was soll ich sagen: Gleicher Fehler!
Der Login-Request geht durch, der getCondition-Request läuft mit einem 401 gegen die Wand.
In exakt dem gleichen Node RED läuft bei mir auch die Aiways-API-Anbindung für Home Assistant. Ebenfalls in Node RED und per JS codiert. Und funktioniert.
Einziger Unterschied: Dort verwende ich nicht den Axios-HTTP-Client, sondern einen entsprechenden Node-RED-Node.
Also hab ich den Axios im Verdacht und hab dort mit Intercepts gearbeitet, um zu checken, was er alles in der Config sammelt, bevor er sendet. Das sieht aber alles perfekt aus. Ich finde keinen Fehler!
An dem Punkt muss ich jetzt leider aufgeben. Vielleicht probierst Du es mal noch mit einem anderen HTTP-Client.
Node.js hat ja auch einen originären Client an Bord: https://nodejs.org/en/knowledge/HTTP/clients/how-to-create-a-HTTP-request/
Noch kurz zu Deiner Code-Struktur: Du hast ein Gemisch aus Thens und Awaits gebaut. Das geht besser mit Promise-Chains ( Promise.then().then().then() ). Promises sind aber zugegebenermaßen nicht ganz einfach zu verstehen. Insbesondere die Parameter von Thens lassen diverse Varianten zu, die man alle beherrschen muss.
Aber das ist im Moment ja nicht das Hauptproblem. Ich hab meinen Code mit korrektem Chaining aufgebaut, und komme trotzdem zum genau gleichen Fehler, wie Du.
A Woansinn is des!
Herzliche Grüße
auch Jörg
Zitat von DasMoritz am 20. November 2022, 11:32 UhrMoin,
okay, da bin ich komplett "raus" @joersch und @jpsy. Ich lese fleißig mit und würde mich tierisch freuen wenn ihr das hin bekommen würdet.
Welche Daten werden eigentlich übermittelt bzw. sind auslesbar?
Moin,
okay, da bin ich komplett "raus" @joersch und @jpsy. Ich lese fleißig mit und würde mich tierisch freuen wenn ihr das hin bekommen würdet.
Welche Daten werden eigentlich übermittelt bzw. sind auslesbar?
Zitat von joersch am 20. November 2022, 14:13 UhrZitat von Jpsy am 20. November 2022, 11:07 UhrHallo @joersch,
mann, mann, mann, die Schwammintelligenz
scheitert!
Ich hab jetzt gute 3 Stunden mit Deinem Code verbracht. Hab das Ganze lokal bei mir in Node RED in einem Function Node nachgebaut, weil das das einzige Node.js basierte System bei mir ist. Hab aber Deinen Code dabei weitgehend erhalten (abgesehen vom Umbau auf Promise-Chains statt Awaits - siehe unten).Und was soll ich sagen: Gleicher Fehler!
[...]Also hab ich den Axios im Verdacht und hab dort mit Intercepts gearbeitet, um zu checken, was er alles in der Config sammelt, bevor er sendet. Das sieht aber alles perfekt aus. Ich finde keinen Fehler!
An dem Punkt muss ich jetzt leider aufgeben. Vielleicht probierst Du es mal noch mit einem anderen HTTP-Client.
Node.js hat ja auch einen originären Client an Bord: https://nodejs.org/en/knowledge/HTTP/clients/how-to-create-a-HTTP-request/Noch kurz zu Deiner Code-Struktur: Du hast ein Gemisch aus Thens und Awaits gebaut. Das geht besser mit Promise-Chains ( Promise.then().then().then() ). Promises sind aber zugegebenermaßen nicht ganz einfach zu verstehen. Insbesondere die Parameter von Thens lassen diverse Varianten zu, die man alle beherrschen muss.
Ok, du bist offensichtlich fit in JS. Wie gesagt: ich habe mich bisher dem eher verweigert. Bleibende Schäden aus den Javascript Anfängen und den Inkompatibilitäten in den 90ern... 😉 Muss mich da mal etwas mehr einlesen...
Ich hatte schon dieselbe Vermutung (Axios). Werde mir mal den Artikel anschauen und es neu bauen, falls mich der Lütte heute lässt... Kann doch so schwer nicht sein... Schade, dass Aiways mir eine Absage auf die Frage nach der API-Doku erteilt hat, aber da werde ich einfach mal penetrant weiter nerven. Kann für den Hersteller ja eigentlich nur die Beste Werbung sein, wenn es eine Integration in den Relevanten iot Systeme gibt...
Viele Dank auf jeden Fall fürs durschauen! Werde berichten, wie es weiter läuft. Und hoffentlich kommt der Wagen bald... 😉
Grüße
Jörg
Zitat von Jpsy am 20. November 2022, 11:07 UhrHallo @joersch,
mann, mann, mann, die Schwammintelligenz
scheitert!
Ich hab jetzt gute 3 Stunden mit Deinem Code verbracht. Hab das Ganze lokal bei mir in Node RED in einem Function Node nachgebaut, weil das das einzige Node.js basierte System bei mir ist. Hab aber Deinen Code dabei weitgehend erhalten (abgesehen vom Umbau auf Promise-Chains statt Awaits - siehe unten).Und was soll ich sagen: Gleicher Fehler!
[...]Also hab ich den Axios im Verdacht und hab dort mit Intercepts gearbeitet, um zu checken, was er alles in der Config sammelt, bevor er sendet. Das sieht aber alles perfekt aus. Ich finde keinen Fehler!
An dem Punkt muss ich jetzt leider aufgeben. Vielleicht probierst Du es mal noch mit einem anderen HTTP-Client.
Node.js hat ja auch einen originären Client an Bord: https://nodejs.org/en/knowledge/HTTP/clients/how-to-create-a-HTTP-request/Noch kurz zu Deiner Code-Struktur: Du hast ein Gemisch aus Thens und Awaits gebaut. Das geht besser mit Promise-Chains ( Promise.then().then().then() ). Promises sind aber zugegebenermaßen nicht ganz einfach zu verstehen. Insbesondere die Parameter von Thens lassen diverse Varianten zu, die man alle beherrschen muss.
Ok, du bist offensichtlich fit in JS. Wie gesagt: ich habe mich bisher dem eher verweigert. Bleibende Schäden aus den Javascript Anfängen und den Inkompatibilitäten in den 90ern... 😉 Muss mich da mal etwas mehr einlesen...
Ich hatte schon dieselbe Vermutung (Axios). Werde mir mal den Artikel anschauen und es neu bauen, falls mich der Lütte heute lässt... Kann doch so schwer nicht sein... Schade, dass Aiways mir eine Absage auf die Frage nach der API-Doku erteilt hat, aber da werde ich einfach mal penetrant weiter nerven. Kann für den Hersteller ja eigentlich nur die Beste Werbung sein, wenn es eine Integration in den Relevanten iot Systeme gibt...
Viele Dank auf jeden Fall fürs durschauen! Werde berichten, wie es weiter läuft. Und hoffentlich kommt der Wagen bald... 😉
Grüße
Jörg
Zitat von joersch am 20. November 2022, 14:14 UhrZitat von DasMoritz am 20. November 2022, 11:32 Uhrokay, da bin ich komplett "raus" @joersch und @jpsy. Ich lese fleißig mit und würde mich tierisch freuen wenn ihr das hin bekommen würdet.
Welche Daten werden eigentlich übermittelt bzw. sind auslesbar?
Eigentlich alles was du auch in der App sehen kannst...
Zitat von DasMoritz am 20. November 2022, 11:32 Uhrokay, da bin ich komplett "raus" @joersch und @jpsy. Ich lese fleißig mit und würde mich tierisch freuen wenn ihr das hin bekommen würdet.
Welche Daten werden eigentlich übermittelt bzw. sind auslesbar?
Eigentlich alles was du auch in der App sehen kannst...
Zitat von Jpsy am 20. November 2022, 17:16 Uhr@joersch:
HEUREKA!!!
Hab jetzt einen Proxy zur Analyse dazwischen gehauen und dann war der Fehler sonnenklar!
Ersetz in Deinen Axios-Calls malrequestHeaders: requestHeaders,
durch
headers: requestHeaders,
;D
@joersch:
HEUREKA!!!
Hab jetzt einen Proxy zur Analyse dazwischen gehauen und dann war der Fehler sonnenklar!
Ersetz in Deinen Axios-Calls mal
requestHeaders: requestHeaders,
durch
headers: requestHeaders,
;D
Zitat von Jpsy am 20. November 2022, 17:16 Uhr@dasmoritz
So sieht ein komplettes Antwortobjekt aus:"dataTime": "2022-11-20 15:18:25","dataTimeTS": 1668957505000,"northLat": "1","eastLon": "1","lat": "0.0","lon": "0.0","address": "","chargeSts": "3","socLow": "0","lastFlameoutTime": "0:52","vehicleSts": "2","lowSpdMuteSts": "1","doorLockSts": "2","trunkLockSts": "0","doorStsReserved": "0","doorOpenStsLf": "0","doorOpenStsRf": "0","doorOpenStsLb": "0","doorOpenStsRb": "0","frontHatchCoverOpenSts": "0","trunkDoorOpenSts": "0","chargingCoverOpenSts": "0","windowOpenStsLf": "0","windowOpenStsRf": "0","windowOpenStsLb": "0","windowOpenStsRb": "0","leftTurnLightOpenSts": "0","rightTurnLightOpenSts": "0","backFrogLightOpenSts": "0","highLightOpenSts": "0","lowLightOpenSts": "0","widthLightOpenSts": "0","brakeLightOpenSts": "0","reversingLightOpenSts": "0","dayRunningLightOpenSts": "0","autoLightOpenSts": "1","sunroofStsSts": "3","sunroofHorizontalOpen": "0","sunroofSunshadeOpen": "100","tirePressureStsLf": "0","tirePressureStsRf": "0","tirePressureStsLb": "0","tirePressureStsRb": "0","tirePressureLf": "222.750","tirePressureRf": "231.000","tirePressureLb": "222.750","tirePressureRb": "225.500","tireTempHighStsLf": "0","tireTempHighStsRf": "0","tireTempHighStsLb": "0","tireTempHighStsRb": "0","tireTempLf": "14","tireTempRf": "14","tireTempLb": "13","tireTempRb": "13","airconAcSts": "0","airconAutoSts": "0","airconWindMode": "3","airconWindVolume": "7","airconCycleSts": "1","airconTempDisLf": "20.00","airconTempDisRf": "20.00","airconSyncSts": "0","airconRunSts": "0","airconOutsideTemp": "7.50","airconInsideTemp": "22.5","safetyBeltStsDrv": "0","safetyBeltStsPass": "0","seatBeltStsBl": "0","seatBeltStsBm": "0","seatBeltStsBr": "0","seatHeatStsDrv": "0","seatHeatStsPass": "0","seatHeatStsSys": "0","chgConnStsDc": "1","chgConnStsAc": "1","keyLowPowerWarn": "0","drivingRange": "258","vehicleMileage": "25871.9","speed": "0.0","crashSts": "0","elecModeFlg": "0","powerMode": "2","steeringAngle": "3276.70","epbSts": "2","soc": "68","agpsSts": "0","btConnMac": "180338.......","btConnUserId": "0","wifiConnCount": "0","hasSkylight": "1","iccid": "898822.........","dataFlow": "0","authStatus": "0","senceSeason": 0,"senceSeasonText": "Close","carSenceSeasonText": "","bmsChgRemTime": "0","bmsPreThemalMode": "0","bcmRemoteControlSt": "0","active": false
@dasmoritz
So sieht ein komplettes Antwortobjekt aus:
Zitat von DraycD am 20. November 2022, 18:38 UhrWelche Variablen muss ich noch wo einfügen? - VIN, Login und Pass müssen doch auch noch rein?
Welche Variablen muss ich noch wo einfügen? - VIN, Login und Pass müssen doch auch noch rein?
Zitat von joersch am 20. November 2022, 18:57 UhrZitat von Jpsy am 20. November 2022, 17:16 Uhr@joersch:
HEUREKA!!!
Hab jetzt einen Proxy zur Analyse dazwischen gehauen und dann war der Fehler sonnenklar!
Ersetz in Deinen Axios-Calls malrequestHeaders: requestHeaders,
durch
headers: requestHeaders,
;D
Alter @jpsy, du bist der Geilste! Hat die Schlamm-Intelligenz ja doch gesiegt! 🙂
Ich glaub ich hab das jetzt auch mit den .then-Folgen gepeilt. Also räume ich jetzt mal auf und werfe den Ballast weg. Dann wäre Step 1, SOC in eine Variable im iOBroker geschafft. Dann fehlt mir noch ne Nacht oder so und einem ioBroker Adapter der das Ganze lesbar macht steht nicht mehr viel im Wege... Und bis dahin ist die Karre dann auch da, hoffe ich... Soll ja schon im Landeanflug sein.
Vielen Dank für die Schützenhilfe! Falls du mal am Steinhuder Meer vorbei kommst, geb ich gern ein Bier aus. 😉
Zitat von Jpsy am 20. November 2022, 17:16 Uhr@joersch:
HEUREKA!!!
Hab jetzt einen Proxy zur Analyse dazwischen gehauen und dann war der Fehler sonnenklar!
Ersetz in Deinen Axios-Calls malrequestHeaders: requestHeaders,
durch
headers: requestHeaders,
;D
Alter @jpsy, du bist der Geilste! Hat die Schlamm-Intelligenz ja doch gesiegt! 🙂
Ich glaub ich hab das jetzt auch mit den .then-Folgen gepeilt. Also räume ich jetzt mal auf und werfe den Ballast weg. Dann wäre Step 1, SOC in eine Variable im iOBroker geschafft. Dann fehlt mir noch ne Nacht oder so und einem ioBroker Adapter der das Ganze lesbar macht steht nicht mehr viel im Wege... Und bis dahin ist die Karre dann auch da, hoffe ich... Soll ja schon im Landeanflug sein.
Vielen Dank für die Schützenhilfe! Falls du mal am Steinhuder Meer vorbei kommst, geb ich gern ein Bier aus. 😉