Skip to content

Instantly share code, notes, and snippets.

@Budd1900
Last active April 26, 2024 18:47
Show Gist options
  • Save Budd1900/2839feda2c1fb429e8ffcfe678309ab5 to your computer and use it in GitHub Desktop.
Save Budd1900/2839feda2c1fb429e8ffcfe678309ab5 to your computer and use it in GitHub Desktop.
Easee Home - Interface for communication with wallbox "Easee Home"

This flow implement the cloud based API from easee to communicate with the car charger "Easee Home". The API is documented and can be find here: https://developer.easee.cloud/docs/get-started

The flow includes the importents commands:

  • charger state
  • ongoing charging session state
  • start/stop charging
  • dynamic current (can be used with photovoltaic systems) and some more

See comment "README" for start.

The flow uses . "node-red-dashboard" . "node-persist"

[{"id":"6edb4a2e.a63fe4","type":"tab","label":"Wallbox Kopie","disabled":false,"info":""},{"id":"1b617c81.a365c3","type":"http request","z":"6edb4a2e.a63fe4","name":"Ongoing Charging Session State","method":"GET","ret":"txt","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","authType":"basic","x":620,"y":1480,"wires":[["5ce4a0e8.36d25","8299aca7.2addd"]]},{"id":"344c1084.b7edd","type":"inject","z":"6edb4a2e.a63fe4","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":160,"y":1480,"wires":[["20344b2e.456a44"]]},{"id":"5ce4a0e8.36d25","type":"debug","z":"6edb4a2e.a63fe4","name":"Ongoing Charging Session State ReturnValue","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1000,"y":1440,"wires":[]},{"id":"513e5e73.dc764","type":"http request","z":"6edb4a2e.a63fe4","name":"Charger State","method":"GET","ret":"txt","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","authType":"basic","x":560,"y":1080,"wires":[["132f33ff.b3c26c","7a18dc3.d41d624","95775093.d666b"]]},{"id":"f839e9eb.cde918","type":"inject","z":"6edb4a2e.a63fe4","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"600","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":170,"y":1080,"wires":[["879a6bd8.1ec998"]]},{"id":"ee8f1c8f.23703","type":"http request","z":"6edb4a2e.a63fe4","name":"Start Charging","method":"POST","ret":"txt","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","authType":"basic","x":780,"y":1640,"wires":[["307e392c.bd8d56","70e22663.5fbf58","db1940a6.fd5c2"]]},{"id":"4b0672bc.1612fc","type":"inject","z":"6edb4a2e.a63fe4","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":160,"y":1620,"wires":[["cfd078a0.07eca8"]]},{"id":"307e392c.bd8d56","type":"debug","z":"6edb4a2e.a63fe4","name":"StartCharing ReturnValue","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1010,"y":1600,"wires":[]},{"id":"57b7705a.46558","type":"http request","z":"6edb4a2e.a63fe4","name":"Change Charger Settings","method":"POST","ret":"txt","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","authType":"basic","x":1190,"y":2200,"wires":[["9fa9f7f1.2170e8","d7d0f8a6.5cf238"]]},{"id":"9fa9f7f1.2170e8","type":"debug","z":"6edb4a2e.a63fe4","name":"ChargerSettings","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1500,"y":2160,"wires":[]},{"id":"ca0ff604.581b08","type":"inject","z":"6edb4a2e.a63fe4","name":"Set charging current for night","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":"","topic":"dynamicChargerCurrent","payload":"10","payloadType":"str","x":220,"y":2200,"wires":[["6af5c87f.3cd108"]]},{"id":"6af5c87f.3cd108","type":"join","z":"6edb4a2e.a63fe4","name":"Paaring","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"3","count":"","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"num","reduceFixup":"","x":760,"y":2200,"wires":[["7df294c3.619dfc"]]},{"id":"ff7fe6bf.0b9158","type":"comment","z":"6edb4a2e.a63fe4","name":"load-balancing for each phase","info":"different current value for each phase:\nhttps://developer.easee.cloud/docs/load-balancing\n","x":220,"y":3060,"wires":[]},{"id":"6f173df5.cb9c54","type":"comment","z":"6edb4a2e.a63fe4","name":"dynamicChargerCurrent","info":"","x":180,"y":2160,"wires":[]},{"id":"fc61bcd8.15fdb","type":"http request","z":"6edb4a2e.a63fe4","name":"Set Dynamic Circuit Current","method":"POST","ret":"txt","paytoqs":"ignore","url":"https://api.easee.cloud/api/sites/288317/circuits/{circuitId}/dynamicCurrent?q={{{query}}}&format=json","tls":"","persist":false,"proxy":"","authType":"bearer","x":680,"y":3060,"wires":[["192d6315.9e2a0d"]]},{"id":"192d6315.9e2a0d","type":"debug","z":"6edb4a2e.a63fe4","name":"","active":true,"tosidebar":true,"console":false,"complete":"payload","statusVal":"","statusType":"auto","x":970,"y":3060,"wires":[]},{"id":"f5615e20.66853","type":"join","z":"6edb4a2e.a63fe4","name":"Paaring","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"3","count":"","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"num","reduceFixup":"","x":460,"y":3060,"wires":[["fc61bcd8.15fdb"]]},{"id":"132f33ff.b3c26c","type":"json","z":"6edb4a2e.a63fe4","name":"","property":"payload","action":"","pretty":false,"x":730,"y":1080,"wires":[["c2e04c49.99c51","ab570d43.5cd1b","cd802873.779888","2bc12598.1813ea","8c329abc.5922b8","2cd15203.b782de","2766f79b.dcc718"]]},{"id":"c2e04c49.99c51","type":"change","z":"6edb4a2e.a63fe4","name":"Aktuelle Ladeleistung","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.totalPower","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1040,"y":1120,"wires":[["f787fd97.dcee3","c73639a5.296508"]]},{"id":"8299aca7.2addd","type":"json","z":"6edb4a2e.a63fe4","name":"","property":"payload","action":"","pretty":false,"x":870,"y":1480,"wires":[["3c3020f9.578ff","a539d7cc.878f48"]]},{"id":"3c3020f9.578ff","type":"change","z":"6edb4a2e.a63fe4","name":"sessionStart","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.sessionStart","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1090,"y":1480,"wires":[["926af8d4.9a4bd8"]]},{"id":"6e3a8da1.b882b4","type":"ui_slider","z":"6edb4a2e.a63fe4","name":"","label":"Maximaler Ladestrom [A]","tooltip":"Begrenzung der Ladeleistung pro Phase","group":"72608c23.2d7d94","order":4,"width":0,"height":0,"passthru":false,"outs":"end","topic":"dynamicChargerCurrent","min":"6","max":"32","step":1,"x":490,"y":2240,"wires":[["6af5c87f.3cd108"]]},{"id":"13777a83.e88605","type":"ui_button","z":"6edb4a2e.a63fe4","name":"","group":"72608c23.2d7d94","order":1,"width":4,"height":1,"passthru":false,"label":"Aufladen Starten","tooltip":"Freigabe Wallbox","color":"","bgcolor":"{{background}}","icon":"fa-power-off","payload":"","payloadType":"str","topic":"","x":190,"y":1660,"wires":[["edd94d11.627ee","cfd078a0.07eca8"]]},{"id":"19a466ca.b9ba29","type":"ui_button","z":"6edb4a2e.a63fe4","name":"refresh","group":"72608c23.2d7d94","order":3,"width":1,"height":1,"passthru":true,"label":"","tooltip":"","color":"","bgcolor":"","icon":"fa-refresh","payload":"","payloadType":"str","topic":"","x":840,"y":840,"wires":[["879a6bd8.1ec998","20344b2e.456a44","4fbae2d9.0a738c"]]},{"id":"ab570d43.5cd1b","type":"debug","z":"6edb4a2e.a63fe4","name":"ChargerState","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1010,"y":1080,"wires":[]},{"id":"af0a5e3c.43cf6","type":"http request","z":"6edb4a2e.a63fe4","name":"Change Charger Commands","method":"POST","ret":"txt","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","authType":"basic","x":1200,"y":2500,"wires":[["a9e13d5b.cef7","ffe9e8b1.b6e1f8"]]},{"id":"a9e13d5b.cef7","type":"debug","z":"6edb4a2e.a63fe4","name":"CableLockState","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1500,"y":2460,"wires":[]},{"id":"46f14880.ed6028","type":"join","z":"6edb4a2e.a63fe4","name":"Paaring","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"3","count":"","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"num","reduceFixup":"","x":760,"y":2500,"wires":[["d27a4f6c.705d"]]},{"id":"549bff77.c35e6","type":"ui_switch","z":"6edb4a2e.a63fe4","name":"","label":"Kabelverriegelung bei Nichtbenutzung","tooltip":"Kabel ohne Ladevorgang dennoch abschließen","group":"72608c23.2d7d94","order":10,"width":0,"height":0,"passthru":false,"decouple":"true","topic":"state","style":"","onvalue":"true","onvalueType":"bool","onicon":"","oncolor":"","offvalue":"false","offvalueType":"bool","officon":"","offcolor":"","x":450,"y":2540,"wires":[["46f14880.ed6028"]]},{"id":"a0b92166.06864","type":"comment","z":"6edb4a2e.a63fe4","name":"https://developer.easee.cloud/reference/post_api-chargers-id-commands-lock-state","info":"","x":370,"y":2460,"wires":[]},{"id":"cd802873.779888","type":"change","z":"6edb4a2e.a63fe4","name":"dynamicChargerCurrent","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.dynamicChargerCurrent","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1050,"y":1280,"wires":[["e007c71a.9de978"]]},{"id":"e007c71a.9de978","type":"link out","z":"6edb4a2e.a63fe4","name":"","links":["b00c113b.67c54","a092daec.c7a748","4d3437cf.3344a8"],"x":1215,"y":1280,"wires":[]},{"id":"b00c113b.67c54","type":"link in","z":"6edb4a2e.a63fe4","name":"","links":["e007c71a.9de978"],"x":95,"y":2240,"wires":[["6e3a8da1.b882b4"]]},{"id":"506cae01.7e336","type":"inject","z":"6edb4a2e.a63fe4","name":"On","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"state","payload":"true","payloadType":"bool","x":150,"y":2500,"wires":[["46f14880.ed6028"]]},{"id":"2bc12598.1813ea","type":"change","z":"6edb4a2e.a63fe4","name":"lockCablePermanently","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.lockCablePermanently","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1040,"y":1320,"wires":[["3396fa91.4302b6"]]},{"id":"3396fa91.4302b6","type":"link out","z":"6edb4a2e.a63fe4","name":"","links":["ffb2230.49e6ee"],"x":1215,"y":1320,"wires":[]},{"id":"ffb2230.49e6ee","type":"link in","z":"6edb4a2e.a63fe4","name":"","links":["3396fa91.4302b6"],"x":95,"y":2540,"wires":[["549bff77.c35e6"]]},{"id":"f787fd97.dcee3","type":"ui_text","z":"6edb4a2e.a63fe4","group":"72608c23.2d7d94","order":5,"width":0,"height":0,"name":"","label":"Aktuelle Ladeleistung","format":"{{msg.payload | number: 2}} KW","layout":"row-spread","x":1440,"y":1080,"wires":[]},{"id":"926af8d4.9a4bd8","type":"ui_text","z":"6edb4a2e.a63fe4","d":true,"group":"72608c23.2d7d94","order":6,"width":0,"height":0,"name":"","label":"SessionStart","format":"{{msg.payload}}","layout":"row-spread","x":1410,"y":1480,"wires":[]},{"id":"261e2c88.c017f4","type":"ui_ui_control","z":"6edb4a2e.a63fe4","name":"update if calling the webpage","events":"connect","x":200,"y":800,"wires":[["cecc638c.54b64"]]},{"id":"71cfd38c.04ebfc","type":"link in","z":"6edb4a2e.a63fe4","name":"","links":["1349cbbb.1d23d4","d6e41354.e4235"],"x":115,"y":1820,"wires":[["e3bda1a7.2cae9"]]},{"id":"6cf31676.d891f8","type":"ui_text","z":"6edb4a2e.a63fe4","group":"72608c23.2d7d94","order":7,"width":0,"height":0,"name":"","label":"Ladefreigabe","format":"{{msg.payload}}","layout":"row-spread","x":1750,"y":1740,"wires":[]},{"id":"79bd68c9.8989f8","type":"change","z":"6edb4a2e.a63fe4","name":"unlock with HMI","rules":[{"t":"set","p":"payload","pt":"msg","to":"Button","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1280,"y":1740,"wires":[["6cf31676.d891f8"]]},{"id":"c73639a5.296508","type":"ui_chart","z":"6edb4a2e.a63fe4","name":"","group":"a80bce66.cb5dc","order":11,"width":0,"height":0,"label":"Ladeleistung [KW]","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"step","nodata":"","dot":false,"ymin":"","ymax":"","removeOlder":"5","removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"useOldStyle":false,"outputs":1,"x":1430,"y":1120,"wires":[[]]},{"id":"16f66151.e3e82f","type":"ui_text","z":"6edb4a2e.a63fe4","group":"72608c23.2d7d94","order":8,"width":0,"height":0,"name":"","label":"Status","format":"{{msg.payload}}","layout":"row-spread","x":1390,"y":1160,"wires":[]},{"id":"8c329abc.5922b8","type":"change","z":"6edb4a2e.a63fe4","name":"chargerOpMode","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.chargerOpMode","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1020,"y":1160,"wires":[["dcd54a8c.4722f8","9765e2d4.b9f9d","c07a23e4.68d67"]]},{"id":"dcd54a8c.4722f8","type":"function","z":"6edb4a2e.a63fe4","name":"ToString","func":"//https://developer.easee.cloud/discuss/624ea91c8a961808d1172149\n\nlet values = {\"0\":\"Offline\",\n \"1\": \"Disconnected\",\n \"2\": \"AwaitingStart\", //Warten auf Genehmigung\n \"3\": \"Charging\",\n \"4\": \"Completed\", \n \"5\": \"Error\",\n \"6\": \"ReadyToCharge\"}\nlet chargeState = msg.payload.toString();\nif ( Object.keys(values).includes(chargeState)){\n msg.payload = values[chargeState];\n}\nelse{\n msg.payload = msg.payload.ChargeState;\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1260,"y":1160,"wires":[["16f66151.e3e82f"]]},{"id":"6ef8cd8a.b3d834","type":"comment","z":"6edb4a2e.a63fe4","name":"SmartCharing = blue Light","info":"SmartCharing aktiviert die blaue LED. Leuchtet nur bei angeschlossenem Auto.\n\nhttps://developer.easee.cloud/discuss/620bad99d6086900a848838c\n\n\n","x":190,"y":2300,"wires":[]},{"id":"8b03083.ce9c3f8","type":"http request","z":"6edb4a2e.a63fe4","name":"Change Charger Settings","method":"POST","ret":"txt","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","authType":"basic","x":1190,"y":2740,"wires":[["f23d0d28.f948f"]]},{"id":"f23d0d28.f948f","type":"debug","z":"6edb4a2e.a63fe4","name":"AccessControl","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1500,"y":2740,"wires":[]},{"id":"dd627050.00fec","type":"inject","z":"6edb4a2e.a63fe4","name":"NOT: Set to allow charging for any tag when offline (user must still present a tag).","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":"","topic":"allowOfflineTxForUnknownId","payload":"false","payloadType":"bool","x":400,"y":2740,"wires":[["6382689a.568258"]]},{"id":"6382689a.568258","type":"join","z":"6edb4a2e.a63fe4","name":"Paaring","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"3","count":"","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"num","reduceFixup":"","x":760,"y":2740,"wires":[["eb89e99.512ce18"]]},{"id":"401b97fe.b784e8","type":"comment","z":"6edb4a2e.a63fe4","name":"Zugang nur mit Berechtigung (auch wenn Wallbox offline)- https://developer.easee.cloud/docs/settings","info":"","x":450,"y":2700,"wires":[]},{"id":"502604e.321b7fc","type":"http request","z":"6edb4a2e.a63fe4","name":"Charger Config","method":"GET","ret":"txt","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","authType":"basic","x":1160,"y":2820,"wires":[["ffc5aba7.056488","37500bb2.8499d4"]]},{"id":"294548d9.8ff678","type":"inject","z":"6edb4a2e.a63fe4","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":180,"y":2820,"wires":[["299c4d86.90aa92"]]},{"id":"ffc5aba7.056488","type":"debug","z":"6edb4a2e.a63fe4","name":"ChargerConfig","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1500,"y":2820,"wires":[]},{"id":"12907589.0f6a9a","type":"comment","z":"6edb4a2e.a63fe4","name":"Einstellungen - Schreiben + Lesen","info":"","x":220,"y":2660,"wires":[]},{"id":"965aaef6.87b23","type":"link in","z":"6edb4a2e.a63fe4","name":"","links":["d7d0f8a6.5cf238","70e22663.5fbf58","ffe9e8b1.b6e1f8","7f7465ac.5a961c"],"x":95,"y":840,"wires":[["2a4db1c.5c0004e"]]},{"id":"d7d0f8a6.5cf238","type":"link out","z":"6edb4a2e.a63fe4","name":"","links":["965aaef6.87b23","16abd38d.0765fc"],"x":1435,"y":2200,"wires":[]},{"id":"70e22663.5fbf58","type":"link out","z":"6edb4a2e.a63fe4","name":"","links":["965aaef6.87b23","16abd38d.0765fc"],"x":915,"y":1640,"wires":[]},{"id":"ffe9e8b1.b6e1f8","type":"link out","z":"6edb4a2e.a63fe4","name":"","links":["965aaef6.87b23","16abd38d.0765fc"],"x":1435,"y":2500,"wires":[]},{"id":"2a4db1c.5c0004e","type":"delay","z":"6edb4a2e.a63fe4","name":"Update webpage","pauseType":"delay","timeout":"1","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":230,"y":840,"wires":[["cecc638c.54b64"]]},{"id":"9765e2d4.b9f9d","type":"change","z":"6edb4a2e.a63fe4","name":"Save state chargerOpMode","rules":[{"t":"move","p":"payload","pt":"msg","to":"chargerOpMode","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":1320,"y":1200,"wires":[[]]},{"id":"a50b7061.eefb6","type":"switch","z":"6edb4a2e.a63fe4","name":"authorization necessary?","property":"chargerOpMode","propertyType":"flow","rules":[{"t":"eq","v":"2","vt":"num"}],"checkall":"true","repair":false,"outputs":1,"x":1010,"y":1820,"wires":[["cfd078a0.07eca8","4f41ea15.a660d4"]]},{"id":"c07a23e4.68d67","type":"switch","z":"6edb4a2e.a63fe4","name":"Disconnected?","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"1","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":1360,"y":1580,"wires":[["9a32838f.108ba"]]},{"id":"edd94d11.627ee","type":"switch","z":"6edb4a2e.a63fe4","name":"authorization necessary?","property":"chargerOpMode","propertyType":"flow","rules":[{"t":"eq","v":"2","vt":"num"}],"checkall":"true","repair":false,"outputs":1,"x":1010,"y":1740,"wires":[["79bd68c9.8989f8","cfd078a0.07eca8"]]},{"id":"2cd15203.b782de","type":"change","z":"6edb4a2e.a63fe4","name":"reasonForNoCurrent","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.reasonForNoCurrent","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1040,"y":1240,"wires":[["b80134f2.5a9598"]]},{"id":"b80134f2.5a9598","type":"function","z":"6edb4a2e.a63fe4","name":"ToString","func":"//https://github.com/fondberg/easee_hass/blob/master/custom_components/easee/const.py\n//https://developer.easee.cloud/docs/enumerations\n\nlet values = {\n \"0\": \"RNC_OK\",\n \"1\": \"RNC_MAX_CIRCUIT_CURRENT_TOO_LOW\",\n \"2\": \"RNC_MAX_DYNAMIC_CIRCUIT_CURRENT_TOO_LOW\",\n \"3\": \"RNC_MAX_DYNAMIC_OFFLINE_FALLBACK_CURRENT_TOO_LOW\",\n \"4\": \"RNC_CIRCUIT_FUSE_TOO_LOW\",\n \"5\": \"RNC_WAITING_IN_QUEUE\",\n \"6\": \"RNC_WAITING_IN_FULLY\",\n \"7\": \"RNC_ILLEGAL_GRID_TYPE\",\n \"8\": \"RNC_NO_CURRENT_REQUEST_RECEIVED\",\n \"9\": \"RNC_NOT_CONNECTED_TO_MASTER\",\n \"10\": \"RNC_CURRENT_FROM_EQ_TOO_LOW\",\n \"11\": \"RNC_PHASE_NOT_CONNECTED\",\n \"25\": \"RNC_LIMITED_BY_CIRCUIT_FUSE\",\n \"26\": \"RNC_LIMITED_BY_CIRCUIT_MAX_LIMIT\",\n \"27\": \"RNC_LIMITED_BY_CIRCUIT_DYNAMIC_LIMIT\",\n \"28\": \"RNC_LIMITED_BY_EQUALIZER\",\n \"29\": \"RNC_LIMITED_BY_LOAD_BALANCING\",\n \"30\": \"RNC_LIMITED_BY_OFFLINE_SETTING\",\n \"50\": \"RNC_NOT_REQUESTING\",\n \"51\": \"RNC_MAX_CHARGER_CURRENT_TOO_LOW\",\n \"52\": \"RNC_MAX_DYNAMIC_CHARGER_CURRENT_TOO_LOW\",\n \"53\": \"RNC_CHARGER_DISABLED\",\n \"54\": \"RNC_PENDING_SCHEDULE\",\n \"55\": \"RNC_PENDING_AUTHORIZATION\",\n \"56\": \"RNC_CHARGER_IN_ERROR_STATE\",\n \"57\": \"RNC_ERRATIC_EV\",\n \"75\": \"RNC_LIMITED_BY_CABLE_RATING\",\n \"76\": \"RNC_LIMITED_BY_SCHEDULE\",\n \"77\": \"RNC_LIMITED_BY_CHARGER_MAX_LIMIT\",\n \"78\": \"RNC_LIMITED_BY_CHARGER_DYNAMIC_LIMIT\",\n \"79\": \"RNC_CAR_NOT_CHARGING\",\n \"80\": \"RNC_LIMITED_BY_LOCAL_ADJUSTMENT\",\n \"81\": \"RNC_LIMITED_BY_CAR\",\n \"100\": \"RNC_UNDEFINED\"}\n\nlet RNC = msg.payload.toString();\nif ( Object.keys(values).includes(RNC)){\n msg.payload = values[RNC];\n}\nelse{\n msg.payload = msg.payload.reasonForNoCurrent;\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1260,"y":1240,"wires":[["e566c6e3.886dd8"]]},{"id":"e566c6e3.886dd8","type":"ui_text","z":"6edb4a2e.a63fe4","group":"a80bce66.cb5dc","order":12,"width":0,"height":0,"name":"","label":"Reason no current","format":"{{msg.payload}}","layout":"col-center","x":1430,"y":1240,"wires":[]},{"id":"9a32838f.108ba","type":"change","z":"6edb4a2e.a63fe4","name":"(leer)","rules":[{"t":"set","p":"payload","pt":"msg","to":"-","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1530,"y":1580,"wires":[["6cf31676.d891f8"]]},{"id":"b9a5678e.289568","type":"comment","z":"6edb4a2e.a63fe4","name":"tbd","info":"","x":130,"y":3020,"wires":[]},{"id":"4fbae2d9.0a738c","type":"link out","z":"6edb4a2e.a63fe4","name":"","links":["aeb4cb9a.216ab8"],"x":1035,"y":840,"wires":[]},{"id":"e3757a2a.f19348","type":"comment","z":"6edb4a2e.a63fe4","name":"Update WLAN-devices","info":"","x":1120,"y":800,"wires":[]},{"id":"40e319d9.18cbc8","type":"http request","z":"6edb4a2e.a63fe4","name":"Start/Stop","method":"POST","ret":"txt","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","authType":"basic","x":800,"y":1980,"wires":[["9423886f.d750f8","7f7465ac.5a961c","e74c1222.4c34d"]]},{"id":"9423886f.d750f8","type":"debug","z":"6edb4a2e.a63fe4","name":"Start/Stop ReturnValue","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1060,"y":1940,"wires":[]},{"id":"7a78db5d.f5c874","type":"inject","z":"6edb4a2e.a63fe4","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":160,"y":1940,"wires":[["390c33a3.e34c4c"]]},{"id":"d1f25c7.7ae45a","type":"inject","z":"6edb4a2e.a63fe4","name":"set accessToken (once or if invalid)","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"eyJhbGciOiJIUzI1NiIsInRCI6IkpXVCJ9.eyJBY2NvdW50SWQiOjIxMTI2NywiVXNlcklkIjoxODExMDgsInVuaXF1ZV9uYW1lIjoiTW9yaXR6IEvDtnNsZXIiLCJyb2xlIjoiVXNlciIsIm5iZiI6MTY1ODkwMTQwNywiZXhwIjoxNjU4OTg3ODA3LCJpYXQiOjE2NTg5MDE0MDd9.KDs3-VbE2TeggFcn7RDJS1kBR0oVJp1dcdCIid9E2i4","payloadType":"str","x":240,"y":140,"wires":[["8c650413.94f1f8"]]},{"id":"61564a2d.01c7b4","type":"comment","z":"6edb4a2e.a63fe4","name":"Readme","info":"1) Mit Benutzernamen und PW Token generieren (https://developer.easee.cloud/reference/post_api-accounts-login)\n2) AccessToken und RefreshToken in NodeRed eintragen. flow ausführen\n3) ChargerID in NodeRed eintragen. flow ausführen\n4) Fertig\n\nOptional:\nEinstellungen - Schreiben + Lesen\n\nInfo:\ntoken handling - https://developer.easee.cloud/reference/post_api-accounts-refresh-token\n\n","x":130,"y":100,"wires":[]},{"id":"879a6bd8.1ec998","type":"function","z":"6edb4a2e.a63fe4","name":"Header + URL","func":"let token = flow.get('token');\nlet ChargerID = flow.get('ChargerID');\n\nmsg.headers = {\n 'Authorization': 'Bearer ' + token\n};\n\nmsg.url = 'https://api.easee.cloud/api/chargers/' + ChargerID + '/state'\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":360,"y":1080,"wires":[["513e5e73.dc764"]]},{"id":"7a18dc3.d41d624","type":"debug","z":"6edb4a2e.a63fe4","name":"ChargerStateReturnValue","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":790,"y":1020,"wires":[]},{"id":"cfd078a0.07eca8","type":"function","z":"6edb4a2e.a63fe4","name":"Header + URL","func":"let token = flow.get('token');\nlet ChargerID = flow.get('ChargerID');\n\nmsg.headers = {\n 'Authorization': 'Bearer ' + token\n};\n\nmsg.url = 'https://api.easee.cloud/api/chargers/' + ChargerID + '/commands/start_charging'\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":580,"y":1640,"wires":[["ee8f1c8f.23703"]]},{"id":"d8a24a21.cf1498","type":"inject","z":"6edb4a2e.a63fe4","name":"Refresh tokens (max 24h)","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"36000","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":220,"y":260,"wires":[["90ed0249.9c9f2"]]},{"id":"f5c979c5.80b868","type":"http request","z":"6edb4a2e.a63fe4","name":"","method":"POST","ret":"txt","paytoqs":"ignore","url":"https://api.easee.cloud/api/accounts/refresh_token","tls":"","persist":false,"proxy":"","authType":"basic","x":890,"y":260,"wires":[["f4b61483.70c3f8","969d6bde.190ce8","85b35329.406c3"]]},{"id":"40cd8adc.0c91d4","type":"function","z":"6edb4a2e.a63fe4","name":"Token -> Header","func":"let token = flow.get('token');\n\nmsg.headers = {\n 'Authorization': 'Bearer ' + token\n};\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":710,"y":260,"wires":[["f5c979c5.80b868"]]},{"id":"f4b61483.70c3f8","type":"debug","z":"6edb4a2e.a63fe4","name":"Output RefreshToken","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1120,"y":160,"wires":[]},{"id":"90ed0249.9c9f2","type":"function","z":"6edb4a2e.a63fe4","name":"set BODY PARAMS","func":"\nlet token = flow.get('token');\nlet refreshToken = flow.get('refreshToken');\n\nmsg.payload = {\n 'accessToken': token,\n 'refreshToken': refreshToken\n};\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":500,"y":260,"wires":[["40cd8adc.0c91d4"]]},{"id":"d27a4f6c.705d","type":"function","z":"6edb4a2e.a63fe4","name":"Token -> Header","func":"let token = flow.get('token');\nlet ChargerID = flow.get('ChargerID');\n\nmsg.headers = {\n 'Authorization': 'Bearer ' + token\n};\n\nmsg.url = 'https://api.easee.cloud/api/chargers/' + ChargerID + '/commands/lock_state?q={{{query}}}&format=json'\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":950,"y":2500,"wires":[["af0a5e3c.43cf6"]]},{"id":"eb89e99.512ce18","type":"function","z":"6edb4a2e.a63fe4","name":"Token -> Header","func":"let token = flow.get('token');\nlet ChargerID = flow.get('ChargerID');\n\nmsg.headers = {\n 'Authorization': 'Bearer ' + token\n};\n\nmsg.url = 'https://api.easee.cloud/api/chargers/' + ChargerID + '/settings?q={{{query}}}&format=json'\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":950,"y":2740,"wires":[["8b03083.ce9c3f8"]]},{"id":"95775093.d666b","type":"function","z":"6edb4a2e.a63fe4","name":"Empfangsuhrzeit speichern","func":"var dtLastRX = Date.now();\nflow.set(\"dtLastRX\", dtLastRX);\nmsg.payload = dtLastRX;\n\nreturn msg;\n\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1060,"y":1040,"wires":[["a0e3c676.b7a7a8"]]},{"id":"a0e3c676.b7a7a8","type":"ui_text","z":"6edb4a2e.a63fe4","group":"72608c23.2d7d94","order":13,"width":0,"height":0,"name":"","label":"Letzte Aktualisierung um","format":"{{msg.payload | date:\"dd.MM. HH:mm\"}} Uhr","layout":"row-spread","x":1450,"y":1040,"wires":[]},{"id":"e5d8dfa0.b2ce6","type":"ui_button","z":"6edb4a2e.a63fe4","name":"Start/Stop","group":"72608c23.2d7d94","order":2,"width":2,"height":1,"passthru":false,"label":"Start/Stop","tooltip":"Toggle","color":"","bgcolor":"{{background}}","icon":"","payload":"","payloadType":"str","topic":"","x":160,"y":1980,"wires":[["390c33a3.e34c4c"]]},{"id":"4f41ea15.a660d4","type":"change","z":"6edb4a2e.a63fe4","name":"Feigabe Handy (Anwesenheit im WLAN, nicht VPN)","rules":[{"t":"set","p":"topic","pt":"msg","to":"hostname","tot":"str"},{"t":"set","p":"payload","pt":"msg","to":"payload.hostname","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1390,"y":1820,"wires":[["6cf31676.d891f8"]]},{"id":"7f7465ac.5a961c","type":"link out","z":"6edb4a2e.a63fe4","name":"","links":["965aaef6.87b23","16abd38d.0765fc"],"x":975,"y":1980,"wires":[]},{"id":"e3bda1a7.2cae9","type":"switch","z":"6edb4a2e.a63fe4","name":"authorization with WifiDevices?","property":"EnableWifiDevices","propertyType":"flow","rules":[{"t":"true"}],"checkall":"true","repair":false,"outputs":1,"x":290,"y":1820,"wires":[["26805fbf.12162"]]},{"id":"1c335902.d97347","type":"ui_switch","z":"6edb4a2e.a63fe4","name":"WLAN Geräte","label":"Ladefreigabe über Geräte im WLAN erlauben","tooltip":"Ausgewählte Geräte starten den Ladevorgang automatisch wenn diese im WLAN eingeloggt sind","group":"72608c23.2d7d94","order":9,"width":0,"height":0,"passthru":true,"decouple":"false","topic":"EnableWifiDevices","style":"","onvalue":"true","onvalueType":"bool","onicon":"","oncolor":"","offvalue":"false","offvalueType":"bool","officon":"","offcolor":"","x":180,"y":1760,"wires":[["af8f10a0.53a07"]]},{"id":"af8f10a0.53a07","type":"change","z":"6edb4a2e.a63fe4","name":"set EnableWifiDevices","rules":[{"t":"set","p":"EnableWifiDevices","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":400,"y":1760,"wires":[[]]},{"id":"5bc063d1.9d269c","type":"change","z":"6edb4a2e.a63fe4","name":"refreshToken","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.refreshToken","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1370,"y":300,"wires":[["744d0aae.104564","a731ef77.42689"]]},{"id":"794f311a.87218","type":"debug","z":"6edb4a2e.a63fe4","name":"refreshToken","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1750,"y":300,"wires":[]},{"id":"744d0aae.104564","type":"change","z":"6edb4a2e.a63fe4","name":"save refreshToken","rules":[{"t":"set","p":"refreshToken","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1570,"y":300,"wires":[["794f311a.87218"]]},{"id":"f1b8e7f9.83fcb8","type":"change","z":"6edb4a2e.a63fe4","name":"accessToken","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.accessToken","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1370,"y":260,"wires":[["8c650413.94f1f8"]]},{"id":"8c650413.94f1f8","type":"change","z":"6edb4a2e.a63fe4","name":"save accessToken","rules":[{"t":"set","p":"token","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1570,"y":260,"wires":[["f292c51e.ab9da8"]]},{"id":"f292c51e.ab9da8","type":"debug","z":"6edb4a2e.a63fe4","name":"accessToken","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1750,"y":260,"wires":[]},{"id":"8ad847e8.d49af8","type":"inject","z":"6edb4a2e.a63fe4","name":"setze refreshToken (once or if invalid)","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"mgLYMSgMHBWbDf+eMK7MXIqkmkbZk0M5KKb5he1YI=","payloadType":"str","x":250,"y":180,"wires":[["744d0aae.104564"]]},{"id":"969d6bde.190ce8","type":"json","z":"6edb4a2e.a63fe4","name":"","property":"payload","action":"","pretty":false,"x":1070,"y":260,"wires":[["f1b8e7f9.83fcb8","5bc063d1.9d269c"]]},{"id":"a731ef77.42689","type":"function","z":"6edb4a2e.a63fe4","name":"Empfangsuhrzeit speichern","func":"var dtLastRX_Token = Date.now();\nflow.set(\"dtLastRX_Token\", dtLastRX_Token);\nmsg.payload = dtLastRX_Token;\n\nreturn msg;\n\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1480,"y":360,"wires":[["40786ce4.6968f4"]]},{"id":"40786ce4.6968f4","type":"ui_text","z":"6edb4a2e.a63fe4","group":"a80bce66.cb5dc","order":14,"width":0,"height":0,"name":"","label":"Letztes Token-Update","format":"{{msg.payload | date:\"dd.MM. HH:mm\"}} Uhr","layout":"row-spread","x":1740,"y":360,"wires":[]},{"id":"f4cf0827.1920f8","type":"inject","z":"6edb4a2e.a63fe4","name":"setze Charger ID","props":[{"p":"payload"}],"repeat":"","crontab":"","once":true,"onceDelay":0.1,"topic":"","payload":"EH2SEGQ5","payloadType":"str","x":190,"y":500,"wires":[["7e30ff95.91516"]]},{"id":"7e30ff95.91516","type":"change","z":"6edb4a2e.a63fe4","name":"","rules":[{"t":"set","p":"ChargerID","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":730,"y":500,"wires":[["c8b62084.ca6e8"]]},{"id":"c8b62084.ca6e8","type":"debug","z":"6edb4a2e.a63fe4","name":"saved ChargerID","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1630,"y":500,"wires":[]},{"id":"20344b2e.456a44","type":"function","z":"6edb4a2e.a63fe4","name":"Header + URL","func":"let token = flow.get('token');\nlet ChargerID = flow.get('ChargerID');\n\nmsg.headers = {\n 'Authorization': 'Bearer ' + token\n};\n\nmsg.url = 'https://api.easee.cloud/api/chargers/' + ChargerID + '/sessions/ongoing'\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":360,"y":1480,"wires":[["1b617c81.a365c3"]]},{"id":"390c33a3.e34c4c","type":"function","z":"6edb4a2e.a63fe4","name":"Header + URL","func":"let token = flow.get('token');\nlet ChargerID = flow.get('ChargerID');\n\nmsg.headers = {\n 'Authorization': 'Bearer ' + token\n};\n\nmsg.url = 'https://api.easee.cloud/api/chargers/' + ChargerID + '/commands/toggle_charging'\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":560,"y":1980,"wires":[["40e319d9.18cbc8"]]},{"id":"7df294c3.619dfc","type":"function","z":"6edb4a2e.a63fe4","name":"Header + URL","func":"let token = flow.get('token');\nlet ChargerID = flow.get('ChargerID');\n\nmsg.headers = {\n 'Authorization': 'Bearer ' + token\n};\n\nmsg.url = 'https://api.easee.cloud/api/chargers/' + ChargerID + '/settings?q={{{query}}}&format=json'\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":940,"y":2200,"wires":[["57b7705a.46558"]]},{"id":"a539d7cc.878f48","type":"change","z":"6edb4a2e.a63fe4","name":"sessionEnergy","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.sessionEnergy","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1100,"y":1520,"wires":[["2d4ce9eb.e24066"]]},{"id":"2d4ce9eb.e24066","type":"ui_text","z":"6edb4a2e.a63fe4","d":true,"group":"a80bce66.cb5dc","order":6,"width":0,"height":0,"name":"","label":"SessionEnergie","format":"{{msg.payload | number: 2}} KW/h","layout":"row-spread","x":1420,"y":1520,"wires":[]},{"id":"db1940a6.fd5c2","type":"function","z":"6edb4a2e.a63fe4","name":"Change BackgroundColour","func":"var nReturnValue = parseInt(msg.statusCode);\n\nif (nReturnValue < 400){\n //successful\n msg.background = \"rgb()\";\n}\nelse{\n //Error\n msg.background = \"rgb(219, 60, 48)\";\n //see msg.headers.x-amzn-remapped-www-authenticate;\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1020,"y":1680,"wires":[["13777a83.e88605"]]},{"id":"e74c1222.4c34d","type":"function","z":"6edb4a2e.a63fe4","name":"Change BackgroundColour","func":"var nReturnValue = parseInt(msg.statusCode);\n\nif (nReturnValue < 400){\n //successful\n msg.background = \"rgb()\";\n}\nelse{\n //Error\n msg.background = \"rgb(219, 60, 48)\";\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1080,"y":2020,"wires":[["e5d8dfa0.b2ce6"]]},{"id":"c78151f7.e0b97","type":"comment","z":"6edb4a2e.a63fe4","name":"Get currently used RFID key","info":"https://developer.easee.cloud/discuss/624e8cba912b4000894e0766\nYou can get the RFID key with the observations endpoint\nhttps://developer.easee.cloud/reference/get_api-chargers-id-observations-observationid-from-to\n\nTo get the RFID key use observationId 128. However, you will need to know when the user scanned the key.\n\n\nhttps://developer.easee.cloud/reference/get_api-chargers-id-observations-observationid-from-to\n\npossible values\nhttps://api.easee.cloud/api/resources/observation_properties\n\n\n\n\n","x":220,"y":3120,"wires":[]},{"id":"2d65c41c.23c96c","type":"ui_switch","z":"6edb4a2e.a63fe4","name":"","label":"SmartCharging","tooltip":"blaue LED","group":"a80bce66.cb5dc","order":10,"width":0,"height":0,"passthru":false,"decouple":"true","topic":"smartCharging","style":"","onvalue":"true","onvalueType":"bool","onicon":"","oncolor":"","offvalue":"false","offvalueType":"bool","officon":"","offcolor":"","x":460,"y":2340,"wires":[["6af5c87f.3cd108"]]},{"id":"2766f79b.dcc718","type":"change","z":"6edb4a2e.a63fe4","name":"smartCharging","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.smartCharging","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1020,"y":1360,"wires":[["95ad1198.b9d35"]]},{"id":"7eec0aea.5f8cb4","type":"link in","z":"6edb4a2e.a63fe4","name":"","links":["95ad1198.b9d35"],"x":95,"y":2340,"wires":[["2d65c41c.23c96c"]]},{"id":"95ad1198.b9d35","type":"link out","z":"6edb4a2e.a63fe4","name":"","links":["7eec0aea.5f8cb4"],"x":1215,"y":1360,"wires":[]},{"id":"299c4d86.90aa92","type":"function","z":"6edb4a2e.a63fe4","name":"Token -> Header","func":"let token = flow.get('token');\nlet ChargerID = flow.get('ChargerID');\n\nmsg.headers = {\n 'Authorization': 'Bearer ' + token\n};\n\nmsg.url = 'https://api.easee.cloud/api/chargers/' + ChargerID + '/config'\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":950,"y":2820,"wires":[["502604e.321b7fc"]]},{"id":"2141eb3b.c09074","type":"trigger","z":"6edb4a2e.a63fe4","name":"","op1":"","op2":"0","op1type":"pay","op2type":"str","duration":"4","extend":false,"overrideDelay":false,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":660,"y":880,"wires":[["19a466ca.b9ba29"]]},{"id":"cecc638c.54b64","type":"delay","z":"6edb4a2e.a63fe4","name":"bandwith limit","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"2","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":480,"y":840,"wires":[["2141eb3b.c09074","19a466ca.b9ba29"]]},{"id":"37500bb2.8499d4","type":"function","z":"6edb4a2e.a63fe4","name":"ErrorHandling","func":"var nReturnValue = parseInt(msg.statusCode);\nvar header = msg.headers;\n\nif (nReturnValue < 400){\n //successful\n msg.background = \"rgb()\";\n //see msg.headers['x-amzn-remapped-connection'];\n}\nelse{\n //Error\n msg.background = \"rgb(219, 60, 48)\";\n //see msg.headers['x-amzn-remapped-www-authenticate'];\n}\n\nmsg.payload = header;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1380,"y":2860,"wires":[[]]},{"id":"26805fbf.12162","type":"delay","z":"6edb4a2e.a63fe4","name":"prevent to mutch requestes if charger is not reachable","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"2","nbRateUnits":"5","rateUnits":"minute","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":660,"y":1820,"wires":[["a50b7061.eefb6"]]},{"id":"85b35329.406c3","type":"persist in","z":"6edb4a2e.a63fe4","name":"TokenPerist","storageNode":"10de4a4.ce150b6","x":1090,"y":340,"wires":[]},{"id":"8262f843.20e7d8","type":"persist out","z":"6edb4a2e.a63fe4","name":"TokenPerist","storageNode":"10de4a4.ce150b6","x":870,"y":340,"wires":[["969d6bde.190ce8","e39df746.3717e8"]]},{"id":"c2f2758a.84c7d8","type":"inject","z":"6edb4a2e.a63fe4","name":"Restore","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":670,"y":340,"wires":[["8262f843.20e7d8"]]},{"id":"e39df746.3717e8","type":"debug","z":"6edb4a2e.a63fe4","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1090,"y":420,"wires":[]},{"id":"72608c23.2d7d94","type":"ui_group","name":"Wallbox","tab":"498e482e.7d9758","order":1,"disp":false,"width":"7","collapse":false},{"id":"a80bce66.cb5dc","type":"ui_group","name":"Experte","tab":"498e482e.7d9758","order":2,"disp":true,"width":"7","collapse":true},{"id":"10de4a4.ce150b6","type":"persist-store","filename":"persistenceCar.json","interval":"600"},{"id":"498e482e.7d9758","type":"ui_tab","name":"Wallbox","icon":"mi-ev_station","order":14,"disabled":false,"hidden":false}]
@phuongpham
Copy link

Great I managed to install it now.
I also your flow required https://flows.nodered.org/node/node-red-contrib-persist
Can you please update the instruction to include those 2 required palette?

@tobiasnorbo
Copy link

Hi,

It looks very advanced - and more advanced that what I am used to. Am I right in understanding that much of what is in this flow is only necessary if you do not use the Home Assistant integration of easee?

I run Home Assistance and have a working flow where my car charges on excess solar energy from my PV system. This works great, but I have two issues:

  1. I have two chargers, so would like to see what other people with two chargers has done - especially on how to divide the solar energy between master and slave charger robot

  2. If anyone has been successful in implementing the equalizer function in Node Red. I do have the equalizer, but I don't really like how it works dividing the excess solar energy. My Node Red flow works much better for this. That is why I also want to make the same functionality from Node Red. Due to my PV system I already have CT clamps and know how the energy is used on the different phases. So my question to you is. Do you have some functionality, that I could look into for inspiration on this. Considering that my above assumption on not needing a lot of the API/Token refresh you do in this flow?

Thanks in advance.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment