Hallo zusammen,
Ich habe mich in den letzen Tagen nochmal intensiv mit der Steuerung des Dacia Spring über NodeRed, genauer mit dem Modul „node-red-contrib-renault-ze“ auseinandergesetzt.
In der aktuellen Version (1.3.2) des Paketes funktioniert bisher nur die Steuerung der Klimaanlage (an/aus). Positiv dabei ist auf jeden Fall, dass durch das Aktivieren der Klimaanlage das Fahrzeug aufgeweckt wird und auch nach einer längeren Ladepause mit dem Laden beginnt.
Wem das ausreicht, der kann den folgenden NodeRed-Flow benutzen:
original.jpeg
Code: Alles auswählen
[{"id":"68b8e9bd.83893","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"59626aad.9580fc","type":"inject","z":"68b8e9bd.83893","name":"","props":[{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"battery-status","payloadType":"str","x":260,"y":360,"wires":[["b8d6343e.5fccc"]]},{"id":"46cb231e.ef0a6c","type":"inject","z":"68b8e9bd.83893","name":"","props":[{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"cockpit","x":290,"y":320,"wires":[["b8d6343e.5fccc"]]},{"id":"6566300f.c3f59","type":"debug","z":"68b8e9bd.83893","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":750,"y":360,"wires":[]},{"id":"978748a3.b211d8","type":"function","z":"68b8e9bd.83893","name":"Auwecken mit Klima","func":"//Wenn Aufwecken angefordert, zunächst Klima einschalten\nif (msg.payload == \"aufwecken\")\n return [{\"topic\": \"set-hvac-state\", \"payload\": 21}];\n \n//Wenn Klima ein vom Auto bestätigt wird, wieder ausschalten\nif ((msg.topic == \"set-hvac-state\") && (msg.payload.data.attributes.action == \"start\"))\n return [{\"topic\": \"set-hvac-state\", \"payload\": null}];","outputs":1,"noerr":0,"initialize":"","finalize":"","x":520,"y":220,"wires":[["b8d6343e.5fccc"]]},{"id":"755b25a7.55762c","type":"inject","z":"68b8e9bd.83893","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"aufwecken","payloadType":"str","x":280,"y":220,"wires":[["978748a3.b211d8"]]},{"id":"b8d6343e.5fccc","type":"renault-ze","z":"68b8e9bd.83893","name":"Baby Dacia","x":570,"y":360,"wires":[["6566300f.c3f59","978748a3.b211d8"]]}]
Wer in der aktuellen Version (1.3.2) das Laden steuern möchte, muss die Datei ZEServices.js editieren. Diese Datei liegt im Verzeichnis des Nodes „node-red-contrib-renault-ze“. Bei mir läuft NodeRed auf einem RaspberryPi und die Datei liegt im Verzeichnis „~/.node-red/node_modules/node-red-contrib-renault-ze“
Zunächst sucht ihr die Funktion
Code: Alles auswählen
createPath(accountId, vin, version = 1) {
return "/commerce/v1/accounts/" + accountId + "/kamereon/kca/car-adapter/v" + version + "/cars/" + vin;
}
Unmittelbar dahinter fügt ihr eine neue Funktion ein:
Code: Alles auswählen
createPathDacia(accountId, vin, version = 1) {
return "/commerce/v1/accounts/" + accountId + "/kamereon/kcm/v1/vehicles/" + vin;
}
Danach sucht ihr nach der Funktion setChargeState und wandelt sie wie folgt ab:
Code: Alles auswählen
setChargeState(charging, accountId, vin, country) {
return __awaiter(this, void 0, void 0, function* () {
let data = {
"data": {
"type": "ChargePauseResume",
"attributes": {
"action": charging ? "resume" : "pause"
}
}
};
return this.postJSON(data, this.createPathDacia(accountId, vin) + "/charge/pause-resume", country);
}
Jetzt könnt ihr den folgenden Flow benutzten, der auch das Laden starten und beenden kann.
edit.jpeg
Code: Alles auswählen
[{"id":"69ff5346.3297d4","type":"inject","z":"68b8e9bd.83893","name":"","props":[{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"battery-status","payloadType":"str","x":320,"y":280,"wires":[["610850ca.56c028"]]},{"id":"9c34f8a.0291f88","type":"inject","z":"68b8e9bd.83893","name":"","props":[{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"cockpit","x":350,"y":240,"wires":[["610850ca.56c028"]]},{"id":"b2eac83e.9ddc68","type":"debug","z":"68b8e9bd.83893","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":750,"y":360,"wires":[]},{"id":"610850ca.56c028","type":"renault-ze","z":"68b8e9bd.83893","name":"Baby Dacia","x":570,"y":360,"wires":[["b2eac83e.9ddc68"]]},{"id":"b3e4a9d8.6f24d","type":"inject","z":"68b8e9bd.83893","name":"","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"set-charge-state","payload":"true","payloadType":"bool","x":300,"y":320,"wires":[["610850ca.56c028"]]},{"id":"c8c511f7.33db98","type":"inject","z":"68b8e9bd.83893","name":"","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"set-charge-state","payload":"false","payloadType":"bool","x":300,"y":360,"wires":[["610850ca.56c028"]]}]
Ich habe bei GitHub bereits einen Pull Request angelegt, damit die Funktion in der nächsten Version des Paketes implementiert werden kann. Sobald das erfolgt ist, stelle ich hier einen neuen Beitrag ein und erkläre die Funktion mit dem neuen Node.