[{"id":"191f1e5d7e472d20","type":"http request","z":"5a1cda5786c898fd","name":"Send refresh request","method":"POST","ret":"obj","paytoqs":"ignore","url":"https://api.netatmo.com/oauth2/token","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[{"keyType":"Content-Type","keyValue":"","valueType":"other","valueValue":"application/x-www-form-urlencoded"}],"x":680,"y":160,"wires":[["2b4df0cdf050f713"]]},{"id":"ccedfd70273a9db5","type":"inject","z":"5a1cda5786c898fd","name":"Start","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":true,"onceDelay":"1","topic":"","payload":"","payloadType":"date","x":110,"y":160,"wires":[["b0ba9ef54d60abb6"]]},{"id":"b0ba9ef54d60abb6","type":"change","z":"5a1cda5786c898fd","name":"Set param request refresh","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"grant_type\":\"refresh_token\",\"refresh_token\":$globalContext(\"NetatmoRefreshToken\"),\"client_id\":$globalContext(\"NetatmoClientId\"),\"client_secret\":$globalContext(\"NetatmoClientSecret\")}","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":380,"y":160,"wires":[["191f1e5d7e472d20"]]},{"id":"9fe966c0fb923537","type":"change","z":"5a1cda5786c898fd","name":"Store tokens & delay","rules":[{"t":"set","p":"NetatmoAccessToken","pt":"global","to":"payload.access_token","tot":"msg"},{"t":"set","p":"NetatmoRefreshToken","pt":"global","to":"payload.refresh_token","tot":"msg"},{"t":"set","p":"delay","pt":"msg","to":"payload.expires_in*1000-300000","tot":"jsonata"},{"t":"set","p":"status","pt":"msg","to":"OK","tot":"str"},{"t":"set","p":"NetatmoLastUpdateTime","pt":"global","to":"","tot":"date"}],"action":"","property":"","from":"","to":"","reg":false,"x":1100,"y":120,"wires":[["60c37222b025c8a6","023604870fd8606d"]]},{"id":"e450b6cd0c7c6b04","type":"change","z":"5a1cda5786c898fd","name":"Set Netatmo Creds & Tokens","rules":[{"t":"set","p":"NetatmoClientId","pt":"global","to":"","tot":"str"},{"t":"set","p":"NetatmoClientSecret","pt":"global","to":"","tot":"str"},{"t":"set","p":"NetatmoAccessToken","pt":"global","to":"","tot":"str"},{"t":"set","p":"NetatmoRefreshToken","pt":"global","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":380,"y":120,"wires":[[]]},{"id":"0e92e848ade1e4ed","type":"inject","z":"5a1cda5786c898fd","name":"Set first info","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":130,"y":120,"wires":[["e450b6cd0c7c6b04"]]},{"id":"7b5ce79635f8465f","type":"inject","z":"5a1cda5786c898fd","name":"Stop","props":[{"p":"reset","v":"1","vt":"num"},{"p":"status","v":"STOP","vt":"str"},{"p":"delay","v":"1","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":110,"y":240,"wires":[["60c37222b025c8a6","023604870fd8606d","f7a8604000ebba2c"]]},{"id":"2b4df0cdf050f713","type":"switch","z":"5a1cda5786c898fd","name":"All ok ?","property":"payload","propertyType":"msg","rules":[{"t":"hask","v":"access_token","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":900,"y":160,"wires":[["9fe966c0fb923537"],["561b21e613d40c2e"]],"outputLabels":["Response OK","Error"]},{"id":"561b21e613d40c2e","type":"change","z":"5a1cda5786c898fd","name":"Delay 1 hour on error","rules":[{"t":"set","p":"delay","pt":"msg","to":"3600000","tot":"num"},{"t":"set","p":"status","pt":"msg","to":"KO","tot":"str"},{"t":"set","p":"NetatmoLastUpdateTime","pt":"global","to":"","tot":"date"}],"action":"","property":"","from":"","to":"","reg":false,"x":1100,"y":220,"wires":[["60c37222b025c8a6","023604870fd8606d"]]},{"id":"60c37222b025c8a6","type":"delay","z":"5a1cda5786c898fd","name":"Refresh","pauseType":"delayv","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":400,"y":240,"wires":[["b0ba9ef54d60abb6"]]},{"id":"023604870fd8606d","type":"delay","z":"5a1cda5786c898fd","name":"","pauseType":"delay","timeout":"1","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"allowrate":false,"outputs":1,"x":400,"y":300,"wires":[["f7a8604000ebba2c"]]},{"id":"f7a8604000ebba2c","type":"function","z":"5a1cda5786c898fd","name":"Next refresh in...","func":"var d = new Date();\nvar n = d.getTime();\nvar start_time = global.get('NetatmoLastUpdateTime')||0;\nvar duration = msg.delay/1000;\nvar elapsed_time = Math.round((n - start_time)/1000);\n\nvar remains = new Date(null);\nremains.setSeconds(duration - elapsed_time); // specify value for SECONDS here\nvar remains_h = remains.toISOString().substr(11, 8);\nif (msg.status == \"STOP\") {\n node.status({});\n msg.remains = \"00:00:00\";\n msg.payload = 0;\n return [null, msg];\n}\nif (elapsed_time < duration) {\n node.status({fill:msg.status == \"OK\" ? \"blue\" : \"red\",shape:\"dot\", text:remains_h});\n msg.remains = remains_h;\n return [ msg, null ];\n}\n\n","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":400,"y":360,"wires":[["023604870fd8606d"],[]]},{"id":"cc7b7a5ce5796a36","type":"comment","z":"5a1cda5786c898fd","name":"Setup Credentials für Netatmo per Oauth2","info":"","x":200,"y":60,"wires":[]}]