NEWS
Test Adapter VW Connect für VW, ID, Audi, Seat, Skoda
-
@tombox Kommando zurück, Date.now() liefert den gewünschten Timestamp, aber die State sind noch nicht aktualisiert.
Ich würde gerne das Setzen aller Werte abwarten:Object.keys(body.address).forEach((key) => { this.setObjectNotExistsAsync(vin + ".position.address." + key, { type: "state", common: { name: key, role: "indicator", type: "mixed", write: false, read: true, }, native: {}, }) .then(() => { this.setState(vin + ".position.address." + key, body.address[key], true); }) .catch((error) => { this.log.error(error); }); // Hier sollen alle State schon gesetzt sein
Das habe ich daher versucht umzubauen auf
Object.keys(body.address).forEach((key) => { await this.setObjectNotExistsAsync(vin + ".position.address." + key, { type: "state", common: { name: key, role: "indicator", type: "mixed", write: false, read: true, }, native: {}, }); await this.setStateAsync(vin + ".position.address." + key, body.address[key], true); }); // Hier sollen alle State schon gesetzt sein
aber das geht nicht, weil der await nicht innerhalb eines foreach genutzt werden darf.
Wie könnte ichdas sonst anstellen? -
@sneak-l8 sagte in Test Adapter VW Connect für VW, ID, Audi, Seat, Skoda:
@tombox Kommando zurück, Date.now() liefert den gewünschten Timestamp, aber die State sind noch nicht aktualisiert.
Ich würde gerne das Setzen aller Werte abwarten:Object.keys(body.address).forEach((key) => { this.setObjectNotExistsAsync(vin + ".position.address." + key, { type: "state", common: { name: key, role: "indicator", type: "mixed", write: false, read: true, }, native: {}, }) .then(() => { this.setState(vin + ".position.address." + key, body.address[key], true); }) .catch((error) => { this.log.error(error); }); // Hier sollen alle State schon gesetzt sein
Das habe ich daher versucht umzubauen auf
Object.keys(body.address).forEach(async(key) => { await this.setObjectNotExistsAsync(vin + ".position.address." + key, { type: "state", common: { name: key, role: "indicator", type: "mixed", write: false, read: true, }, native: {}, }); await this.setStateAsync(vin + ".position.address." + key, body.address[key], true); }); // Hier sollen alle State schon gesetzt sein
aber das geht nicht, weil der await nicht innerhalb eines foreach genutzt werden darf.
Wie könnte ichdas sonst anstellen?Habe oben angepasst.
-
@lucky_esa Danke, das war's. Nicht das foreach war das Problem, sondern das fehlende async in der inline-Funktion. Jetzt klappt es.
Zumindest bei der ParkingAddress werden nun früher ermittelte states (für Zusatzinfos zu einer Adresse) nun auf "null" zurückgesetzt, wenn sie bei der aktuellen Adresse nicht mehr gültig sind.
Das werde ich jetzt versuchen, auf den Türstatus zu übertragen. -
@sneak-l8 foreach auf for (const variable of array) umstellen
-
Hey Leute,
Kann es sein, dass bei einem A3 E-Tron kaum Werte angezeigt werden ? Weder Batterie, Ölstand, Fenster oder Türstatus einfach garnichts.
Der Adapter ist Grün und auch verbunden, die Auto Stammdaten werden angezeigt.Den Data Plug von Audi hab ich auch einbauen lassen.
-
@tombox Danke für den Tipp. Hatten icht gleich verstanden, warum Du nach @Lucky_ESA noch mal schreibst. Aber jetzt hab ich verstanden, dass ich bei forEach() keinen await machen kann und somit die State assynchron aktualisiert werden.
Hab's jetzt auf for(const key in keys) umgebaut. Jetzt sieht es besser aus. Wenn es jetzt mit der Adresse stabil läuft, dann kümmere ich mich wieder um die Tür-Status. -
Aktuell lädt mein Vater seinen ID4 GTX an meiner Wallbox, weil solange kaum Sonne da, mein Strom nur rund die Hälfte kostet. Jetzt würde ich gerne natürlich, dass er den Strom trotzdem an mich bezahlen muss. Über den VW Connect Adapter würde ich gerne den Standort immer dann abfragen, wenn der ID4 beginnt zu laden. Wenn der Standort dann bei mir Zuhause ist, dann soll der Zähler meiner Open WB (MQTT Wert) aus meiner OpenWB gespeichert und am Ende des Ladevorgangs vom neuen Endwert subtrahiert werden. Nun meldet sich VW Connect leider mit: "Car is not enrolled anymore." Was kann ich da machen? Der GTX wird doch sicher auch unterstützt.
-
@dan11hh Also letztlich geht es nicht um Deine Automatisierung, sondern dass der vw-connect-Adapter Dir aufgrund der genannten Fehlermeldung keine Daten liefert.
Für mich klingt die Meldung, als gäbe es die Verknüpfung zwischen Deinem Account und dem Fahrzeug nicht mehr. Kommst Du an die Daten, wenn Du Dich mit den Anmeldedaten aus dem Adapter in der ID.App anmeldest? -
@sneak-l8 Ja, etwas viel Blupp war dabei. Ich hab jetzt die Instanz des Adapters gelöscht und erneut installiert leider noch die selbe Fehlermeldung. Ja. Die ID.APP funktioniert einwandfrei. Das ist etwas seltsam...
-
@dan11hh Gleiche UserId und Passwort im Adapter wie in der App? Zeigtm al noch Deine Konfiguration des Adapters.
-
@dan11hh
Was für eine openwb hast du denn? Wenn mit NFC oder Display kannst du ihm doch einen eigenen Code zuweisen und bequem danach steuern. Würde ich aktuell der Lösung über die VW Server vorziehen. -
das setzen des max. Ladelimits über den Adapter für einen Ladeort geht nicht, oder? Es gibt zwar den Wert (vw-connect.0.xyz.status.chargingProfiles.Home.targetSOC_pct) jedoch ist der mit einem Schloss versehen.
Hintergrund ist, dass ich einen Ladeort zu Hause definiert habe und es positiv ist, dass er dort das AC Kabel automatisch entsichert. Ich lade immer auf 80% und wenn im Winter doch mal die Sonne scheint, erhöhe ich das Ladelimit auf 90%, damit was über PV kommt ins Auto geht. Das ist über die App zum einen sau umständlich zu konfigurieren und man vergisst es auf 90% gestellt zu haben. Mit Sofortladen (11kw) lädt er dann unnötiger weise bis 90%.
Würde mir ein einfaches Blockly schreiben dass wenn Lademodus Sofortladen (habe auch eine openWB), dann Ladelimit am Ladeort zu Hause bei 80%, sonst 90%
-
@dan11hh
das ist vermutlich die einfachste Lösung oder du hast eine vis mit Button, der den Ladezähler startet.
Die openWB bietet einen Datenpunkt ChargedSince plugged: mqtt.0.openWB.lp.1.kWhChargedSincePluggedDas sollte doch für deine Zwecke nutzbar sein.
Du könntest auf dem Handy deines Vaters auch Pushover/ Telegram o.ä installieren. Nach dem Laden schickst du ihm direkt per Telegram die Info über den zu überweisenden Betrag per Push wenn die Ladung beendet ist . Vielleicht lässt sich ja nich ein 2D Barcode für die QR Überweisung generieren
//Edith habs nicht getestet, sollte aber gehen
<block xmlns="https://developers.google.com/blockly/xml" type="on" id="4PX=Ig1E4%qkf~=,l!gn" x="-1312.9251835080904" y="-537.4210442863654"> <field name="OID">mqtt.0.openWB.lp.1.boolPlugStat</field> <field name="CONDITION">lt</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="variables_set" id="@wco1.YJ9{6wKnom%G~{"> <field name="VAR" id="qyJ9`9]|Jb=j^PD9gzEJ">GeladenSeitSteck</field> <value name="VALUE"> <block type="get_value" id="1YNh]38ImBzCL.XBVwT."> <field name="ATTR">val</field> <field name="OID">mqtt.0.openWB.lp.1.kWhChargedSincePlugged</field> </block> </value> <next> <block type="controls_if" id="-+^BgZ}?SHgGsuI98_%S"> <value name="IF0"> <block type="logic_compare" id="[zmQ+2IRIl~YSBNoch-H"> <field name="OP">GT</field> <value name="A"> <block type="variables_get" id="*?%~.C)u=29!,8^[`4iq"> <field name="VAR" id="qyJ9`9]|Jb=j^PD9gzEJ">GeladenSeitSteck</field> </block> </value> <value name="B"> <block type="math_number" id="a/d|R2uDNzmdK)#MFD(K"> <field name="NUM">0</field> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="o;w_y7=AnQJJA6%*M-}W"> <field name="VAR" id="4T,-..amh!;{?_q.;o-3">PreiskWh</field> <value name="VALUE"> <block type="math_number" id="NK{Q1]FWC3~Qj3;WM2|i"> <field name="NUM">0.35</field> </block> </value> <next> <block type="variables_set" id="FOo;HfYXiD.0K_U[ooXV"> <field name="VAR" id="n%+HF1(y4Z@;bPs-SLq*">Ladepreis</field> <value name="VALUE"> <block type="math_rndfixed" id="+F*tAHNw6EpTOYouDerg"> <field name="n">2</field> <value name="x"> <shadow type="math_number" id="Y%2pGfrC|$0ON)Bfof?J"> <field name="NUM">3.1234</field> </shadow> <block type="math_arithmetic" id="BP1jX9~4D(Y6@O{d~yk~"> <field name="OP">MULTIPLY</field> <value name="A"> <shadow type="math_number" id="Jz7W+H:k#,ejkT3h*bIv"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="GC$3z2#i?^1;t:n!~.S["> <field name="VAR" id="qyJ9`9]|Jb=j^PD9gzEJ">GeladenSeitSteck</field> </block> </value> <value name="B"> <shadow type="math_number" id="V4Epv`LCM1v%tKYHPHm]"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="W9b?Lo#7r9;!O)i]`%yz"> <field name="VAR" id="4T,-..amh!;{?_q.;o-3">PreiskWh</field> </block> </value> </block> </value> </block> </value> <next> <block type="telegram" id="xjz}Ki*-8!itZJ,a~(!*"> <field name="INSTANCE"></field> <field name="LOG"></field> <field name="SILENT">FALSE</field> <field name="PARSEMODE">default</field> <field name="DISABLE_WEB_PAGE_PREVIEW">FALSE</field> <value name="MESSAGE"> <shadow type="text" id="OV?P$=SSIApi4j9b81$["> <field name="TEXT">text</field> </shadow> <block type="text_join" id="~Z.C6H+rtK?-N^cl)tJ@"> <mutation items="8"></mutation> <value name="ADD0"> <block type="text" id="UE8:/JNJTo)NpCU5FVeX"> <field name="TEXT">Auto ausgesteckt. Es wurden </field> </block> </value> <value name="ADD1"> <block type="variables_get" id="@n:EQHk8#v0F(t8nN~q."> <field name="VAR" id="qyJ9`9]|Jb=j^PD9gzEJ">GeladenSeitSteck</field> </block> </value> <value name="ADD2"> <block type="text" id="!:DJ#%+LECtww9bB9NsD"> <field name="TEXT"> kWh seit einstecken geladen. </field> </block> </value> <value name="ADD3"> <block type="text" id="Hzkh#YT*UATd6Na#rvIs"> <field name="TEXT">Bei einem kWh Preis von </field> </block> </value> <value name="ADD4"> <block type="variables_get" id="/t.(({+@X)r|XB+h:*V."> <field name="VAR" id="4T,-..amh!;{?_q.;o-3">PreiskWh</field> </block> </value> <value name="ADD5"> <block type="text" id="QI6Egv##dxW)7!WZXJ~g"> <field name="TEXT">€, macht das </field> </block> </value> <value name="ADD6"> <block type="variables_get" id="F)abY{~vSs|Vk:ZNA4`2"> <field name="VAR" id="n%+HF1(y4Z@;bPs-SLq*">Ladepreis</field> </block> </value> <value name="ADD7"> <block type="text" id="i(Q+JdWrXQw+9?=il.-H"> <field name="TEXT">€. Bitte bar entrichten oder überweisen.</field> </block> </value> </block> </value> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </statement> </block>
-
Hey Leute,
Kann es sein, dass bei einem A3 E-Tron kaum Werte angezeigt werden ? Weder Batterie, Ölstand, Fenster oder Türstatus einfach garnichts.
Der Adapter ist Grün und auch verbunden, die Auto Stammdaten werden angezeigt.Den Data Plug von Audi hab ich auch einbauen lassen.
Mach ich was falsch oder werden E Autos noch nicht unterstützt von der Schnittstelle ?
-
@smartysmart Kann es sein, dass Du die gleiche Frage schon vor zwei Tagen gestellt hast? Warum also noch mal?
-
@Sneak-L8 & @all Kommando zurück. Der VW Händler hat meinem Vater einen neuen Account (mit anderer Email Adresse) für den GTX eingerichtet, besser wäre es gewesen den bestehenden ID3 Account zu nutzen. Blöd und sorry für die Verwirrung. Jetzt mit dem neuen Account geht es.
@bommel_030
Hat Display, aber kein NFC. Das mit dem Code wusste ich gar nicht. Muss ich mal nachlesen...das heißt aber, dass ich wahrscheinlich auch immer einen Code eingeben muss und das will ich eigentlich nicht.@mading auch eine gute Idee. Allerdings ist ja das Problem, dass ich und meine Frau auch an den zwei Ladepunkten laden.
@all wie bekomme ich denn die Koordinaten des Standorts in eine Adresse umgesetzt? (ist jetzt auch etwas OT, sorry) Danke für die Hilfe! EDIT: Denkfehler. Muss ich ja gar nicht. Kann ja auch die Koordinaten überprüfen. Lässt sich da eine gewissen Ungenauigkeit hinterlegen? Also ich meine so 20m Abweichung? GPS ist ja nicht immer super genau.
-
@dan11hh Zum letzten Punkt, das kann die aktuelle Version bei github. Da gibt's parking.address.displayName
-
@mading auch eine gute Idee. Allerdings ist ja das Problem, dass ich und meine Frau auch an den zwei Ladepunkten laden.
kein Problem, setz dir ein bool in 0_Userdata dass du auf true über deine Vis setzt. Im Blockly machst du noch eine Abfrage ob es auf true gesetzt ist, dann wird es geschickt, sonst nicht. Wenn dein Vater lädt, setzt du es auf true. So wird nur dann die Info geschickt
-
Habt ihr zufällig auch seit gestern das LOG mit diesem Fehler voll?
Spielen da ggf. die API Server der VW Imperiums nicht mit, oder was muss man sich unter der Meldung vorstellen?
vw-connect.0 2023-01-20 15:47:42.826 error https://api.connect.skoda-auto.cz/api/v1/charging/FIN/status vw-connect.0 2023-01-20 15:47:42.826 error AxiosError: Request failed with status code 500 vw-connect.0 2023-01-20 15:47:42.826 error {"errorCode":"UNKNOWN","message":"Error happened {I/O error on GET request for \"https://cardata.apps.emea.vwapps.io/vehicles/FIN/charging/status\": Timeout waiting for connection from pool; nested exception is org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool}"}
-
@tombox Ich hab jetzt mal wieder einen Pull Request gemacht. Er räumt nach dem Lookup der Adresse zur Parkposition alle States auf, die von früheren Adress-Nachfragen bei OSM zwar vorhanden sind, aber bei der aktuellen Abfrage nicht mitgeliefert wurden.
So gibt es zwar weiterhin die States, aber im Channel parking.address sind nur Felder gefüllt, die auch zur aktuellen Parkposition gehören.Die Funktion dazu habe ich bei json2iob abgelegt und woltle nun das gleiche machen, für die Rückmeldung zu Türen udn Lichter.
Z.B.{"access":{"accessStatus":{"value":{"overallStatus":"safe","carCapturedTimestamp":"2023-01-20T17:18:38.313Z","doors":[{"name":"bonnet","status":["closed"]},{"name":"trunk","status":["closed","locked"]},{"name":"rearRight","status":["closed","locked"]},{"name":"rearLeft","status":["closed","locked"]},{"name":"frontRight","status":["closed","locked"]},{"name":"frontLeft","status":["closed","locked"]}],"windows":[{"name":"sunRoof","status":["unsupported"]},{"name":"roofCover","status":["unsupported"]},{"name":"sunRoofRear","status":["unsupported"]},{"name":"frontLeft","status":["closed"]},{"name":"frontRight","status":["closed"]},{"name":"rearLeft","status":["closed"]},{"name":"rearRight","status":["closed"]}],"doorLockStatus":"locked"}}}
Hier wird ja z.B. vw-connect.0.WVWZZZE1ZMPnnnnnn.status.accessStatus.doors01.status.closed und vw-connect.0.WVWZZZE1ZMPnnnnnn.status.accessStatus.doors01.status.open geschrieben, die als Array-Werte im Json zurückkommen.
Jetzt hab ich leidern icht ganz verstanden, wo die Auflösugn des Arrays und Umsetzung in Channel mit mehreren werten passiert.
Aber Du kennst die Stelle vermutlich besser.
Wenn Du nun vor der Verarbeitung des Arrays den aktuellen Timestamp mit Date.now() merkst und nach der Verarbeitung des Arrays cleanupOtherStatesInChannel(...) mit dem Channel des Arrays und dem gemerkten Timestamp aufrufst, dann sollten die "alten" Werte auhc dort gelöscht werden. Dann würde man den Status ablesen können, wenn der Wert ungleich null ist.
Könntest Du versuchen, die vorgenannten zwei Zeilen an der richtigen Stelle im json2iob eintragen? Ich hab es nicht recht hinbekommen, da ich nicht genau verstehe, wo die Array-Verarbeitung konkret einsetzt und endet ...