Hourly ON/OFF Week Scheduler Dashboard - DEHN.IO v0.1

This allows users to set up a 24h scheduler for each day of the week in a quick and easy way.

It is a customization of robertsLando Temperature/ON-OFF Week Scheduler UI-Template Node-Red Dashboard, which is a customization of Peter Scargill Thermostat Weekend, so all credits goes to those two.

You should edit the backup & Restore File Nodes to point where you will save the setting and then create the file in that folder.

Fixed the 9 hour bug in the original from robertsLando and translated it to english.

scheduler

[{"id":"6a39232d.346a4c","type":"tab","label":"Control"},{"id":"834ea7b1.4f9608","type":"ui_template","z":"6a39232d.346a4c","group":"435eef42.79945","name":"css etc","order":1,"width":"0","height":"0","format":"<style>\n\n.filled { height: 48px !important;padding: 0 !important; margin: 0 !important;}\n.nr-dashboard-template { padding: 0; margin: 0;}\n.rounded { border-radius: 12px 12px 12px 12px;}\n.bigfont { font-size: 18px;}\n.smallfont { font-size: 12px;}\n.thedays { cursor:pointer; vertical-align:bottom; height:48px; }\n.the2px  { background-color: #000000; height:2px; }\n.theblocks {width:100%; height:0%; background-color:#000000; }\n.greybuttons { background-color:#000000 !important; width:48px; border: none;}\n.thetemps { cursor:pointer; font-size:70%; color:#000000 !important; }\n.smallheadings { color:white; font-size:80%; }\n\n</style>\n\n<script>\nvar current=1;\n\n$('.vibrate').on('click', function() {\n  navigator.vibrate(100);\n});\n\nfunction restore_bg(x) {\n            $(this).css(\"background-color\", x);\n    };\n\n$('.touched').on('mousedown', function() {\n    \n    var x= $(this).css(\"background-color\");\n    $(this).css(\"background-color\", \"yellow\");\n    \n    setTimeout(restore_bg.bind(this,x),50);\n    navigator.vibrate(80);\n    });\n    \n</script>","storeOutMessages":false,"fwdInMessages":true,"x":320,"y":100,"wires":[[]]},{"id":"7cd1a6d0.bc74c8","type":"inject","z":"6a39232d.346a4c","name":"","topic":"","payload":"","payloadType":"date","repeat":"1","crontab":"","once":true,"x":330,"y":420,"wires":[["c1994995.5e2338"]]},{"id":"c1994995.5e2338","type":"moment","z":"6a39232d.346a4c","name":"","topic":"","input":"payload","inputType":"msg","inTz":"UTC","adjAmount":"2","adjType":"hours","adjDir":"add","format":"lll","locale":"it_IT","output":"payload","outputType":"msg","outTz":"UTC","x":533,"y":420,"wires":[["9cb57129.a0987"]]},{"id":"9cb57129.a0987","type":"ui_text","z":"6a39232d.346a4c","group":"435eef42.79945","order":2,"width":0,"height":0,"name":"","label":"","format":"{{msg.payload}}","layout":"col-center","x":724,"y":420,"wires":[]},{"id":"5b57f489.177b7c","type":"ui_template","z":"6a39232d.346a4c","group":"435eef42.79945","name":"Settings page","order":3,"width":"6","height":"6","format":"<script>\n\nvar thedays_0=[\"SUNDAY\",\"MONDAY\",\"TUESDAY\",\"WEDNESDAY\",\"THURSDAY\",\"FRIDAY\",\"SATURDAY\"];\n\nvar ID_0 = \"DD\";\n\nvar last_0=29;\n\nfunction on_off(mm,val)\n{\nif (val==0) { $(mm).height(\"30%\"); $(mm).css('background-color', '#b30101'); } //red\nif (val==1) { $(mm).height(\"60%\"); $(mm).css('background-color', '#118b45'); } //green\n}\n\nfunction feedback(text)\n{\n$(\"#info\"+ID_0).text(text);\nvar tm=setTimeout(function(){ $(\"#info\"+ID_0).text(\"Ok\"); clearTimeout(tm);}, 3000);\n}\n\nfunction selec_0(val,sta)\n{\nvar w=\"#td\"+val+ID_0;\n if (sta) $(w).css('background-color','#000000'); else $(w).css('background-color','#000000');\n}\n\n\n    (function(scope){\n        scope.ID_0 = ID_0;\n        scope.send({payload: '29'})\n        scope.$watch('msg', function(msg) {\n            selec_0(last_0,0); last_0=msg.selector; selec_0(last_0,1);\n            for (var x=0; x<24; x++) \n                { \n                    var w=\"#t\"+x+ID_0; on_off(w,msg.timing[((msg.days-1)*24)+x]); \n                    var v=\"#v\"+x+ID_0; $(v).text(msg.timing[((msg.days-1)*24)+x] == 0 ? 'Off' : 'On')\n                } \n            for (var x=0; x<2; x++) { var w=\"#s\"+x+ID_0; $(w).text(msg.timing[168+x]); }\n             $(\"#d0\"+ID_0).text(thedays_0[msg.days-1]);\n             if ((last_0>4) &&(last_0<29))\n                 $(\"#current\"+ID_0).text(msg.timing[((msg.days-1)*24)+last_0-5]  == 0 ? 'Off' : 'On');\n             else\n                 $(\"#current\"+ID_0).text(\"-\");\n                 \n            if (msg.foryou!=\"\") { feedback(msg.foryou);  }\n            \n             \n        });\n \n    })(scope);\n      \n\n</script>\n<table width=\"100%\">\n    \n    <tr>\n        <td colspan=24><center><span class=\"smallheadings\" >Day</span></center></td>\n    </tr>\n   \n    <tr>\n        <td ng-click=\"send({payload: '29'})\" colspan=24><center><span id=\"{{ 'd0' + ID_0 }}\" style=\"cursor:pointer;color:white;font-size:120%\">MONDAY</span></center></td>\n    </tr>\n    \n    <tr style=\"height:2px\">\n        <td id=\"{{ 'td29' + ID_0 }}\" colspan=24 style=\"background-color:#9E9E9E;height:2px;\"></td>        \n    </tr>  \n\n    <tr>\n        <td ng-click=\"send({payload: '5'})\" class=\"thedays\"><span id=\"{{ 'v0' + ID_0 }}\" class=\"thetemps\"></span><div id=\"{{ 't0' + ID_0 }}\" class=\"theblocks\"></div></td>\n        <td ng-click=\"send({payload: '6'})\" class=\"thedays\"><span id=\"{{ 'v1' + ID_0 }}\" class=\"thetemps\"></span><div id=\"{{ 't1' + ID_0 }}\" class=\"theblocks\"></div></td>\n        <td ng-click=\"send({payload: '7'})\" class=\"thedays\"><span id=\"{{ 'v2' + ID_0 }}\" class=\"thetemps\"></span><div id=\"{{ 't2' + ID_0 }}\" class=\"theblocks\"></div></td>\n        <td ng-click=\"send({payload: '8'})\" class=\"thedays\"><span id=\"{{ 'v3' + ID_0 }}\" class=\"thetemps\"></span><div id=\"{{ 't3' + ID_0 }}\" class=\"theblocks\"></div></td>\n        <td ng-click=\"send({payload: '9'})\" class=\"thedays\"><span id=\"{{ 'v4' + ID_0 }}\" class=\"thetemps\"></span><div id=\"{{ 't4' + ID_0 }}\" class=\"theblocks\"></div></td>\n        <td ng-click=\"send({payload: '10'})\" class=\"thedays\"><span id=\"{{ 'v5' + ID_0 }}\" class=\"thetemps\"></span><div id=\"{{ 't5' + ID_0 }}\" class=\"theblocks\"></div></td>\n        <td ng-click=\"send({payload: '11'})\" class=\"thedays\"><span id=\"{{ 'v6' + ID_0 }}\" class=\"thetemps\"></span><div id=\"{{ 't6' + ID_0 }}\" class=\"theblocks\"></div></td>\n        <td ng-click=\"send({payload: '12'})\" class=\"thedays\"><span id=\"{{ 'v7' + ID_0 }}\" class=\"thetemps\"></span><div id=\"{{ 't7' + ID_0 }}\" class=\"theblocks\"></div></td>\n        <td ng-click=\"send({payload: '13'})\" class=\"thedays\"><span id=\"{{ 'v8' + ID_0 }}\" class=\"thetemps\"></span><div id=\"{{ 't8' + ID_0 }}\" class=\"theblocks\"></div></td>\n        <td ng-click=\"send({payload: '14'})\" class=\"thedays\"><span id=\"{{ 'v9' + ID_0 }}\" class=\"thetemps\"></span><div id=\"{{ 't9' + ID_0 }}\" class=\"theblocks\"></div></td>\n        <td ng-click=\"send({payload: '15'})\" class=\"thedays\"><span id=\"{{ 'v10' + ID_0 }}\" class=\"thetemps\"></span><div id=\"{{ 't10' + ID_0 }}\" class=\"theblocks\"></div></td>\n        <td ng-click=\"send({payload: '16'})\" class=\"thedays\"><span id=\"{{ 'v11' + ID_0 }}\" class=\"thetemps\"></span><div id=\"{{ 't11' + ID_0 }}\" class=\"theblocks\"></div></td>\n    </tr>  \n    \n    <tr style=\"height:2px\">\n        <td id=\"{{ 'td5' + ID_0 }}\" class=\"the2px\"></td>\n        <td id=\"{{ 'td6' + ID_0 }}\" class=\"the2px\"></td>\n        <td id=\"{{ 'td7' + ID_0 }}\" class=\"the2px\"></td>\n        <td id=\"{{ 'td8' + ID_0 }}\" class=\"the2px\"></td>\n        <td id=\"{{ 'td9' + ID_0 }}\" class=\"the2px\"></td>\n        <td id=\"{{ 'td10' + ID_0 }}\" class=\"the2px\"></td>\n        <td id=\"{{ 'td11' + ID_0 }}\" class=\"the2px\"></td>\n        <td id=\"{{ 'td12' + ID_0 }}\" class=\"the2px\"></td>\n        <td id=\"{{ 'td13' + ID_0 }}\" class=\"the2px\"></td>\n        <td id=\"{{ 'td14' + ID_0 }}\" class=\"the2px\"></td>\n        <td id=\"{{ 'td15' + ID_0 }}\" class=\"the2px\"></td>\n        <td id=\"{{ 'td16' + ID_0 }}\" class=\"the2px\"></td>\n    </tr>   \n    \n    <tr>\n        <td align=\"center\">0</td>\n        <td align=\"center\">1</td>\n        <td align=\"center\">2</td>\n        <td align=\"center\">3</td>\n        <td align=\"center\">4</td>\n        <td align=\"center\">5</td>\n        <td align=\"center\">6</td>\n        <td align=\"center\">7</td>\n        <td align=\"center\">8</td>\n        <td align=\"center\">9</td>\n        <td align=\"center\">10</td>\n        <td align=\"center\">11</td>\n    </tr> \n    \n    <tr>\n        <td ng-click=\"send({payload: '17'})\" class=\"thedays\"><span id=\"{{ 'v12' + ID_0 }}\" class=\"thetemps\"></span><div id=\"{{ 't12' + ID_0 }}\" class=\"theblocks\"></div></td>\n        <td ng-click=\"send({payload: '18'})\" class=\"thedays\"><span id=\"{{ 'v13' + ID_0 }}\" class=\"thetemps\"></span><div id=\"{{ 't13' + ID_0 }}\" class=\"theblocks\"></div></td>\n        <td ng-click=\"send({payload: '19'})\" class=\"thedays\"><span id=\"{{ 'v14' + ID_0 }}\" class=\"thetemps\"></span><div id=\"{{ 't14' + ID_0 }}\" class=\"theblocks\"></div></td>\n        <td ng-click=\"send({payload: '20'})\" class=\"thedays\"><span id=\"{{ 'v15' + ID_0 }}\" class=\"thetemps\"></span><div id=\"{{ 't15' + ID_0 }}\" class=\"theblocks\"></div></td>\n        <td ng-click=\"send({payload: '21'})\" class=\"thedays\"><span id=\"{{ 'v16' + ID_0 }}\" class=\"thetemps\"></span><div id=\"{{ 't16' + ID_0 }}\" class=\"theblocks\"></div></td>\n        <td ng-click=\"send({payload: '22'})\" class=\"thedays\"><span id=\"{{ 'v17' + ID_0 }}\" class=\"thetemps\"></span><div id=\"{{ 't17' + ID_0 }}\" class=\"theblocks\"></div></td>\n        <td ng-click=\"send({payload: '23'})\" class=\"thedays\"><span id=\"{{ 'v18' + ID_0 }}\" class=\"thetemps\"></span><div id=\"{{ 't18' + ID_0 }}\" class=\"theblocks\"></div></td>\n        <td ng-click=\"send({payload: '24'})\" class=\"thedays\"><span id=\"{{ 'v19' + ID_0 }}\" class=\"thetemps\"></span><div id=\"{{ 't19' + ID_0 }}\" class=\"theblocks\"></div></td>\n        <td ng-click=\"send({payload: '25'})\" class=\"thedays\"><span id=\"{{ 'v20' + ID_0 }}\" class=\"thetemps\"></span><div id=\"{{ 't20' + ID_0 }}\" class=\"theblocks\"></div></td>\n        <td ng-click=\"send({payload: '26'})\" class=\"thedays\"><span id=\"{{ 'v21' + ID_0 }}\" class=\"thetemps\"></span><div id=\"{{ 't21' + ID_0 }}\" class=\"theblocks\"></div></td>\n        <td ng-click=\"send({payload: '27'})\" class=\"thedays\"><span id=\"{{ 'v22' + ID_0 }}\" class=\"thetemps\"></span><div id=\"{{ 't22' + ID_0 }}\" class=\"theblocks\"></div></td>\n        <td ng-click=\"send({payload: '28'})\" class=\"thedays\"><span id=\"{{ 'v23' + ID_0 }}\" class=\"thetemps\"></span><div id=\"{{ 't23' + ID_0 }}\" class=\"theblocks\"></div></td>\n    </tr>  \n    \n    <tr style=\"height:2px\">\n        <td id=\"{{ 'td17' + ID_0 }}\" class=\"the2px\"></td>\n        <td id=\"{{ 'td18' + ID_0 }}\" class=\"the2px\"></td>\n        <td id=\"{{ 'td19' + ID_0 }}\" class=\"the2px\"></td>\n        <td id=\"{{ 'td20' + ID_0 }}\" class=\"the2px\"></td>\n        <td id=\"{{ 'td21' + ID_0 }}\" class=\"the2px\"></td>\n        <td id=\"{{ 'td22' + ID_0 }}\" class=\"the2px\"></td>\n        <td id=\"{{ 'td23' + ID_0 }}\" class=\"the2px\"></td>\n        <td id=\"{{ 'td24' + ID_0 }}\" class=\"the2px\"></td>\n        <td id=\"{{ 'td25' + ID_0 }}\" class=\"the2px\"></td>\n        <td id=\"{{ 'td26' + ID_0 }}\" class=\"the2px\"></td>\n        <td id=\"{{ 'td27' + ID_0 }}\" class=\"the2px\"></td>\n        <td id=\"{{ 'td28' + ID_0 }}\" class=\"the2px\"></td>\n    </tr>  \n    \n    <tr>\n        <td align=\"center\">12</td>\n        <td align=\"center\">13</td>\n        <td align=\"center\">14</td>\n        <td align=\"center\">15</td>\n        <td align=\"center\">16</td>\n        <td align=\"center\">17</td>\n        <td align=\"center\">18</td>\n        <td align=\"center\">19</td>\n        <td align=\"center\">20</td>\n        <td align=\"center\">21</td>\n        <td align=\"center\">22</td>\n        <td align=\"center\">23</td>\n    </tr> \n    \n    <tr height=\"20px\">\n        <td colspan=2 class=\"smallheadings\">Status:</td>\n\n        <td colspan=10 ><center><span id=\"{{ 'info' + ID_0 }}\" class=\"smallheadings\" ></span></center></td>\n\n    </tr>\n    \n    <tr height=\"10px\">\n        <td colspan=\"12\"></td>\n    </tr>\n\n    <tr style=\"height:48px\">\n        <td colspan=2>\n            <button class=\"vibrate filled touched smallfont rounded greybuttons\" ng-click=\"send({payload: 'd'})\"> \n               <ng-md-icon style=\"color: #fff;\" icon=\"keyboard_arrow_down\"></ng-md-icon>\n            </button> \n        </td>\n        \n        <td colspan=2><center><span id=\"{{ 'current' + ID_0 }}\" style=\"color:white;font-size:120%\">-</span></center></td>\n\n        <td colspan=2>\n            <button class=\"vibrate filled touched smallfont rounded greybuttons\" ng-click=\"send({payload: 'u'})\"> \n               <ng-md-icon style=\"color: #fff;\" icon=\"keyboard_arrow_up\"></ng-md-icon>\n            </button> \n        </td>\n\n        <td colspan=2>\n            <button class=\"vibrate filled touched smallfont rounded greybuttons\" ng-click=\"send({payload: 'r'})\"> \n               <ng-md-icon style=\"color: #fff;\" icon=\"content_copy\">\n                    <md-tooltip md-direction=\"bottom\">COPY</md-tooltip>\n                </ng-md-icon>\n            </button> \n        </td>\n\n\n        <td colspan=2>\n            <button class=\"vibrate filled touched smallfont rounded greybuttons\" ng-click=\"send({payload: 's'})\"> \n                 <ng-md-icon style=\"color: #fff;\" icon=\"save\">\n                    <md-tooltip md-direction=\"bottom\">SAVE</md-tooltip>\n                </ng-md-icon>\n            </button> \n        </td>\n\n        <td colspan=2>\n            <button class=\"vibrate filled touched smallfont rounded greybuttons\"  ng-click=\"send({payload: 'c'})\"> \n                 <ng-md-icon style=\"color: #fff;\" icon=\"cancel\">\n                    <md-tooltip md-direction=\"bottom\">CANCEL</md-tooltip>\n                </ng-md-icon>\n            </button> \n        </td>\n        <td colspan=1></td>\n    </tr>\n\n</table>","storeOutMessages":false,"fwdInMessages":false,"x":333,"y":136,"wires":[["fdfaa612.935dd8"]]},{"id":"fdfaa612.935dd8","type":"function","z":"6a39232d.346a4c","name":"Process controls","func":"if ( typeof context.days_0 == 'undefined' ) context.days_0=1;\nif ( typeof context.selector_0 == 'undefined' ) context.selector_0=29;\nif ( typeof context.saving_0 == 'undefined' ) context.saving_0=1;\nif ( typeof context.global.timing_0 == 'undefined' ) \n    {\n        context.global.timing_0=[\n                        1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,\n                        1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,\n                        1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,\n                        1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,\n                        1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,\n                        1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,\n                        1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,\n                        6,1\n                        ];\n        context.saving_0=1;                    \n    }\nvar timing_0=global.get(\"timing_0\");\n\nswitch (msg.payload)\n    {\n    case \"u\" :  if ((context.selector_0>4)&&(context.selector_0<29))\n                {\n                    timing_0[((context.days_0-1)*24)+context.selector_0-5] = 1; \n                    msg.foryou=\"ON\";\n                }\n                if (context.selector_0==29) { msg.foryou=\"Next day\"; context.days_0++; if (context.days_0>7) { context.days_0 = 1; } }\n                break;\n    case \"d\" :  if ((context.selector_0>4)&&(context.selector_0<29))\n                {\n                    timing_0[((context.days_0-1)*24)+context.selector_0-5] = 0; \n                    msg.foryou=\"OFF\";\n                }\n                if (context.selector_0==29) {  msg.foryou=\"Previous day\";  context.days_0--; if (context.days_0 < 1) { context.days_0 = 7;  } }\n                break;\n    case 'r' :  if ((context.selector_0>=5)&&(context.selector_0<28))\n                        {\n                         timing_0[((context.days_0-1)*24)+context.selector_0-4]=timing_0[((context.days_0-1)*24)+context.selector_0-5];   \n                         context.selector_0++;\n                         msg.foryou=\"Value copied to the next slot\";\n                        }\n                if ((context.selector_0==29)&&(context.days_0<7))\n                        {\n                         for (var a=0;a<24;a++)\n                            {\n                             timing_0[((context.days_0)*24)+a]=timing_0[((context.days_0-1)*24)+a];   \n                            }\n                         context.days_0++;\n                         msg.foryou=\"Copied settings to the next day\";\n                        }\n                        else if(context.days_0==7)\n                            msg.foryou=\"End of Week!\";\n                break;\n    case 's': context.saving_0=0;  msg.foryou=\"Saved Settings\"; break;\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n    case '10':\n    case '11':\n    case '12':\n    case '13':\n    case '14':\n    case '15':\n    case '16':\n    case '17':\n    case '18':\n    case '19':\n    case '20':\n    case '21':\n    case '22':\n    case '23':\n    case '24':\n    case '25':\n    case '26':\n    case '27':\n    case '28':\n    case '29': context.selector_0=parseInt(msg.payload);\n               if (msg.payload=='29') msg.foryou=\"Day Selected\";\n               else  msg.foryou=\"Hour Selected: \" + (parseInt(msg.payload)-5);\n    break;\n    case 'c' : msg.payload=\"anything\";  msg.foryou=\"Changes canceled\"; node.send([null,null,msg]);\n    }\n\nmsg.temperatures=context.temperatures_0;\nmsg.timing=timing_0;\nmsg.days=context.days_0;\nmsg.selector=context.selector_0;\n\nnode.send([msg,null,null]);\n\nif (context.saving_0===0) \n    { \n       msg.topic=\"\";\n        msg.timing=\"\";\n        msg.payload=JSON.stringify(timing_0);\n        node.send([null,msg,null]); \n        context.saving_0=1;\n    }\n    msg.foryou=\"\"","outputs":"3","noerr":0,"x":556,"y":188,"wires":[["a182d1f7.23481"],["1e9c3809.0666e8"],["40d3c8a5.b225d8"]]},{"id":"81b05643.1aa538","type":"inject","z":"6a39232d.346a4c","name":"Once only","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":true,"x":341,"y":236,"wires":[["fdfaa612.935dd8","52b0c651.9eab98"]]},{"id":"49afea79.d7f6c4","type":"inject","z":"6a39232d.346a4c","name":"Every minute","topic":"","payload":"","payloadType":"str","repeat":"60","crontab":"","once":true,"x":314,"y":357,"wires":[["280f8bec.7f3764"]]},{"id":"67c6b94c.1f9df8","type":"function","z":"6a39232d.346a4c","name":"on/off 1/0","func":"var timing=global.get(\"timing_0\");\nvar now = new Date(msg.time);\nmsg.payload=timing[(now.getDay()*24)+now.getHours()];\nreturn msg;\n\n","outputs":1,"noerr":0,"x":632,"y":356,"wires":[[]]},{"id":"1e9c3809.0666e8","type":"file","z":"6a39232d.346a4c","name":"backup","filename":"/root/schedulers/on_off_scheduler.log","appendNewline":true,"createDir":true,"overwriteFile":"true","x":745,"y":187,"wires":[]},{"id":"52b0c651.9eab98","type":"file in","z":"6a39232d.346a4c","name":"Restore","filename":"/root/schedulers/on_off_scheduler.log","format":"utf8","x":534,"y":266,"wires":[["4e78b7d0.8c31d8"]]},{"id":"4e78b7d0.8c31d8","type":"function","z":"6a39232d.346a4c","name":"Restore data from SD","func":"context.global.timing_0=JSON.parse(msg.payload);\nmsg.payload=\"\";\nreturn msg;","outputs":1,"noerr":0,"x":734,"y":266,"wires":[["1fb2d83e.616708"]]},{"id":"beee61ce.6713f","type":"link in","z":"6a39232d.346a4c","name":"restore","links":["40d3c8a5.b225d8"],"x":394.5,"y":287,"wires":[["52b0c651.9eab98"]]},{"id":"40d3c8a5.b225d8","type":"link out","z":"6a39232d.346a4c","name":"restore","links":["beee61ce.6713f"],"x":707.5,"y":224,"wires":[]},{"id":"827155fc.814208","type":"link in","z":"6a39232d.346a4c","name":"restoreSD","links":["1fb2d83e.616708"],"x":394,"y":188,"wires":[["fdfaa612.935dd8"]]},{"id":"1fb2d83e.616708","type":"link out","z":"6a39232d.346a4c","name":"restoreSD","links":["827155fc.814208"],"x":888,"y":266,"wires":[]},{"id":"a182d1f7.23481","type":"link out","z":"6a39232d.346a4c","name":"setSettings","links":["be3bae7d.3e983"],"x":708.5,"y":148,"wires":[]},{"id":"be3bae7d.3e983","type":"link in","z":"6a39232d.346a4c","name":"setSettings","links":["a182d1f7.23481"],"x":200.5,"y":136,"wires":[["5b57f489.177b7c"]]},{"id":"280f8bec.7f3764","type":"moment","z":"6a39232d.346a4c","name":"time","topic":"","input":"","inputType":"date","inTz":"UTC","adjAmount":"2","adjType":"hours","adjDir":"add","format":"","locale":"it_IT","output":"time","outputType":"msg","outTz":"UTC","x":479.5,"y":357,"wires":[["67c6b94c.1f9df8"]]},{"id":"435eef42.79945","type":"ui_group","z":"","name":"ON OFF scheduler","tab":"c60a4b37.c0c9c8","disp":false,"width":"6"},{"id":"c60a4b37.c0c9c8","type":"ui_tab","z":"","name":"Schedulers","icon":"dashboard","order":3}]
dehnio

Flow Info

created 1 month ago

Node Types

Core
  • file (x1)
  • file in (x1)
  • function (x3)
  • inject (x3)
Other
  • link in (x3)
  • link out (x3)
  • moment (x2)
  • tab (x1)
  • ui_group (x1)
  • ui_tab (x1)
  • ui_template (x2)
  • ui_text (x1)

Tags

  • ui
  • template
  • scheduler
  • dashboard
  • scargill
  • robertsLando
  • dehn.io
Copy this flow JSON to your clipboard and then import into Node-RED using the Import From > Clipboard (Ctrl-I) menu option