Advertisement
Guest User

NR Peter Scargill thermometer

a guest
Feb 25th, 2019
376
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 47.52 KB | None | 0 0
  1. [{"id":"4bc3d10a.26e19","type":"ui_template","z":"d2f37368.5b066","group":"8dff2b2d.fd0828","name":"css etc","order":10,"width":"0","height":"0","format":"<style>\n\n.cellGreen \n{\nbackground-color: #ffdddd !important;\n}\n\n .filled { \n height: 100% !important;\n\n padding: 0 !important;\n margin: 0 !important;\n }\n .nr-dashboard-template {\n padding: 0;\n margin: 0;\n }\n \n .rounded {\n border-radius: 12px 12px 12px 12px;\n}\n \n .bigfont {\n font-size: 18px;\n}\n\n .smallfont {\n font-size: 12px;\n}\n \n\n \n.zui-table {\n border: solid 1px #DDEEEE;\n border-collapse: collapse;\n border-spacing: 0;\n font: normal 10px Arial, sans-serif;\n outline: none;\n}\n.zui-table thead th {\n width: 100%;\n height:50%;\n background-color: #99bbff;\n border: solid 1px #DDEEEE;\n color: #336B6B;\n padding: 7px 3px 5px 3px;\n text-align: center;\n text-shadow: 1px 1px 1px #fff;\n font-size: 20px;\n}\n.zui-table tbody td {\n width: 100%;\n height:50%;\n border: solid 1px #333;\n color: #333;\n text-align: center;\n padding: 6px 3px 9px 3px;\n text-shadow: 1px 1px 1px #fff;\n font-size: 35px;\n}\n.zui-table-rounded {\n border: none;\n}\n.zui-table-rounded thead th {\n background-color: #77aaff;\n border: none;\n text-shadow: 1px 1px 1px #ccc;\n color: #333;\n}\n.zui-table-rounded thead th:first-child {\n border-radius: 10px 0 0 0;\n}\n.zui-table-rounded thead th:last-child {\n border-radius: 10px 10px 0px 0px;\n}\n.zui-table-rounded tbody td {\n border: none;\n border-top: solid 1px #957030;\n background-color: #aaddff;\n}\n.zui-table-rounded tbody tr:last-child td:first-child {\n border-radius: 10px 10px 0 0;\n}\n.zui-table-rounded tbody tr:last-child td:last-child {\n border-radius: 0 0 10px 10px;\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":true,"fwdInMessages":true,"templateScope":"local","x":600,"y":120,"wires":[[]]},{"id":"7c3995cb.42902c","type":"ui_template","z":"d2f37368.5b066","group":"8dff2b2d.fd0828","name":"Settings section","order":2,"width":"0","height":"0","format":"<style>\n.thedays { vertical-align:bottom; height:48px; }\n.the2px { background-color:black; height:2px; }\n.theblocks {width:100%; height:0%; background-color:green; }\n.greybuttons {width: 100%; background-color:white !important; width:48px; }\n.thetemps { font-size:70%; color:#cfcfcf !important; }\n.smallheadings { color:white; font-size:100%; }\n\n</style>\n\n<script>\nvar thedays = [\"SUNDAY\", \"MONDAY\", \"TUESDAY\", \"WEDNESDAY\", \"THURSDAY\", \"FRIDAY\", \"SATURDAY\"];\n\nvar last = 1;\n\nfunction bar(mm, val) {\n if (val == 14) {\n $(mm).height(\"12%\");\n $(mm).css('background-color', '#6666ff');\n } //blue\n if (val == 15) {\n $(mm).height(\"16%\");\n $(mm).css('background-color', '#5577ff');\n }\n if (val == 16) {\n $(mm).height(\"20%\");\n $(mm).css('background-color', '#5599ff');\n }\n if (val == 17) {\n $(mm).height(\"24%\");\n $(mm).css('background-color', '#55ccdd');\n } // cyan\n if (val == 18) {\n $(mm).height(\"28%\");\n $(mm).css('background-color', '#55ddaa');\n }\n if (val == 19) {\n $(mm).height(\"32%\");\n $(mm).css('background-color', '#55dd55');\n }\n if (val == 20) {\n $(mm).height(\"36%\");\n $(mm).css('background-color', '#55dd55');\n } // green\n if (val == 21) {\n $(mm).height(\"40%\");\n $(mm).css('background-color', '#55dd55');\n }\n if (val == 22) {\n $(mm).height(\"44%\");\n $(mm).css('background-color', '#aadd55');\n }\n if (val == 23) {\n $(mm).height(\"48%\");\n $(mm).css('background-color', '#dddd55');\n } // yellow\n if (val == 24) {\n $(mm).height(\"52%\");\n $(mm).css('background-color', '#ffaa55');\n }\n if (val == 25) {\n $(mm).height(\"56%\");\n $(mm).css('background-color', '#ff8855');\n }\n if (val == 26) {\n $(mm).height(\"60%\");\n $(mm).css('background-color', '#ff7777');\n } // red\n\n}\n\nfunction stat(text) {\n $(\"#info\").text(text);\n var tm = setTimeout(function() {\n $(\"#info\").text(\"OK\");\n clearTimeout(tm);\n }, 3000);\n}\n\nfunction selec(val, sta) {\n var w = \"#td\" + val;\n if (sta) $(w).css('background-color', 'magenta');\n else $(w).css('background-color', 'black');\n}\n\n(function(scope) {\n scope.$watch('msg', function(msg) {\n selec(last, 0);\n last = msg.selector;\n selec(last, 1);\n for (var x = 0; x < 24; x++) {\n var w = \"#t\" + x;\n bar(w, msg.timing[((msg.days - 1) * 24) + x]);\n var v = \"#v\" + x;\n $(v).text(msg.timing[((msg.days - 1) * 24) + x] + \"°C\")\n }\n for (var x = 0; x < 2; x++) {\n var w = \"#s\" + x;\n $(w).text(msg.timing[168 + x] + \"°C\");\n }\n $(\"#d0\").text(thedays[msg.days - 1]);\n if ((last > 4) && (last < 29))\n $(\"#current\").text(msg.timing[((msg.days - 1) * 24) + last - 5] + \"°C\");\n else\n $(\"#current\").text(\"-\");\n\n if (msg.foryou != \"\") {\n stat(msg.foryou);\n }\n\n\n });\n\n})(scope);\n\n</script>\n<table width=\"100%\">\n <tr style=\"height:2px\">\n <td colspan=12 style=\"background-color:black;height:5px;\"></td>\n </tr>\n\n <tr bgcolor=\"gray\">\n <td colspan=6>\n <center><span class=\"smallheadings\">Day</span></center>\n </td>\n <td colspan=3>\n <center><span class=\"smallheadings\">Frost</span></center>\n </td>\n <td colspan=3>\n <center><span class=\"smallheadings\">Away</span></center>\n </td>\n </tr>\n\n <tr bgcolor=\"gray\">\n <td ng-click=\"send({payload: '29'})\" colspan=6>\n <center><span id=\"d0\" style=\"font-size:120%\">MONDAY</span></center>\n </td>\n <td ng-click=\"send({payload: '1'})\" colspan=3>\n <center><span id=\"s0\" style=\"font-size:120%\">14</span></center>\n </td>\n <td ng-click=\"send({payload: '2'})\" colspan=3>\n <center><span id=\"s1\" style=\"font-size:120%\">20</span></center>\n </td>\n </tr>\n\n <tr style=\"height:2px\">\n <td id=\"td29\" colspan=6 style=\"background-color:black;height:2px;\"></td>\n <td id=\"td1\" colspan=3 style=\"background-color:black;height:2px;\"></td>\n <td id=\"td2\" colspan=3 style=\"background-color:black;height:2px;\"></td>\n </tr>\n\n <tr>\n <td ng-click=\"send({payload: '5'})\" class=\"thedays\"><span id=\"v0\" class=\"thetemps\"></span>\n <div id=\"t0\" class=\"theblocks\"></div>\n </td>\n <td ng-click=\"send({payload: '6'})\" class=\"thedays\"><span id=\"v1\" class=\"thetemps\"></span>\n <div id=\"t1\" class=\"theblocks\"></div>\n </td>\n <td ng-click=\"send({payload: '7'})\" class=\"thedays\"><span id=\"v2\" class=\"thetemps\"></span>\n <div id=\"t2\" class=\"theblocks\"></div>\n </td>\n <td ng-click=\"send({payload: '8'})\" class=\"thedays\"><span id=\"v3\" class=\"thetemps\"></span>\n <div id=\"t3\" class=\"theblocks\"></div>\n </td>\n <td ng-click=\"send({payload: '9'})\" class=\"thedays\"><span id=\"v4\" class=\"thetemps\"></span>\n <div id=\"t4\" class=\"theblocks\"></div>\n </td>\n <td ng-click=\"send({payload: '10'})\" class=\"thedays\"><span id=\"v5\" class=\"thetemps\"></span>\n <div id=\"t5\" class=\"theblocks\"></div>\n </td>\n <td ng-click=\"send({payload: '11'})\" class=\"thedays\"><span id=\"v6\" class=\"thetemps\"></span>\n <div id=\"t6\" class=\"theblocks\"></div>\n </td>\n <td ng-click=\"send({payload: '12'})\" class=\"thedays\"><span id=\"v7\" class=\"thetemps\"></span>\n <div id=\"t7\" class=\"theblocks\"></div>\n </td>\n <td ng-click=\"send({payload: '13'})\" class=\"thedays\"><span id=\"v8\" class=\"thetemps\"></span>\n <div id=\"t8\" class=\"theblocks\"></div>\n </td>\n <td ng-click=\"send({payload: '14'})\" class=\"thedays\"><span id=\"v9\" class=\"thetemps\"></span>\n <div id=\"t9\" class=\"theblocks\"></div>\n </td>\n <td ng-click=\"send({payload: '15'})\" class=\"thedays\"><span id=\"v10\" class=\"thetemps\"></span>\n <div id=\"t10\" class=\"theblocks\"></div>\n </td>\n <td ng-click=\"send({payload: '16'})\" class=\"thedays\"><span id=\"v11\" class=\"thetemps\"></span>\n <div id=\"t11\" class=\"theblocks\"></div>\n </td>\n </tr>\n\n <tr style=\"height:2px\">\n <td id=\"td5\" class=\"the2px\"></td>\n <td id=\"td6\" class=\"the2px\"></td>\n <td id=\"td7\" class=\"the2px\"></td>\n <td id=\"td8\" class=\"the2px\"></td>\n <td id=\"td9\" class=\"the2px\"></td>\n <td id=\"td10\" class=\"the2px\"></td>\n <td id=\"td11\" class=\"the2px\"></td>\n <td id=\"td12\" class=\"the2px\"></td>\n <td id=\"td13\" class=\"the2px\"></td>\n <td id=\"td14\" class=\"the2px\"></td>\n <td id=\"td15\" class=\"the2px\"></td>\n <td id=\"td16\" class=\"the2px\"></td>\n </tr>\n\n <tr>\n <td>0</td>\n <td>1</td>\n <td>2</td>\n <td>3</td>\n <td>4</td>\n <td>5</td>\n <td>6</td>\n <td>7</td>\n <td>8</td>\n <td>9</td>\n <td>10</td>\n <td>11</td>\n </tr>\n\n <tr>\n <td ng-click=\"send({payload: '17'})\" class=\"thedays\"><span id=\"v12\" class=\"thetemps\"></span>\n <div id=\"t12\" class=\"theblocks\"></div>\n </td>\n <td ng-click=\"send({payload: '18'})\" class=\"thedays\"><span id=\"v13\" class=\"thetemps\"></span>\n <div id=\"t13\" class=\"theblocks\"></div>\n </td>\n <td ng-click=\"send({payload: '19'})\" class=\"thedays\"><span id=\"v14\" class=\"thetemps\"></span>\n <div id=\"t14\" class=\"theblocks\"></div>\n </td>\n <td ng-click=\"send({payload: '20'})\" class=\"thedays\"><span id=\"v15\" class=\"thetemps\"></span>\n <div id=\"t15\" class=\"theblocks\"></div>\n </td>\n <td ng-click=\"send({payload: '21'})\" class=\"thedays\"><span id=\"v16\" class=\"thetemps\"></span>\n <div id=\"t16\" class=\"theblocks\"></div>\n </td>\n <td ng-click=\"send({payload: '22'})\" class=\"thedays\"><span id=\"v17\" class=\"thetemps\"></span>\n <div id=\"t17\" class=\"theblocks\"></div>\n </td>\n <td ng-click=\"send({payload: '23'})\" class=\"thedays\"><span id=\"v18\" class=\"thetemps\"></span>\n <div id=\"t18\" class=\"theblocks\"></div>\n </td>\n <td ng-click=\"send({payload: '24'})\" class=\"thedays\"><span id=\"v19\" class=\"thetemps\"></span>\n <div id=\"t19\" class=\"theblocks\"></div>\n </td>\n <td ng-click=\"send({payload: '25'})\" class=\"thedays\"><span id=\"v20\" class=\"thetemps\"></span>\n <div id=\"t20\" class=\"theblocks\"></div>\n </td>\n <td ng-click=\"send({payload: '26'})\" class=\"thedays\"><span id=\"v21\" class=\"thetemps\"></span>\n <div id=\"t21\" class=\"theblocks\"></div>\n </td>\n <td ng-click=\"send({payload: '27'})\" class=\"thedays\"><span id=\"v22\" class=\"thetemps\"></span>\n <div id=\"t22\" class=\"theblocks\"></div>\n </td>\n <td ng-click=\"send({payload: '28'})\" class=\"thedays\"><span id=\"v23\" class=\"thetemps\"></span>\n <div id=\"t23\" class=\"theblocks\"></div>\n </td>\n </tr>\n\n <tr style=\"height:2px\">\n <td id=\"td17\" class=\"the2px\"></td>\n <td id=\"td18\" class=\"the2px\"></td>\n <td id=\"td19\" class=\"the2px\"></td>\n <td id=\"td20\" class=\"the2px\"></td>\n <td id=\"td21\" class=\"the2px\"></td>\n <td id=\"td22\" class=\"the2px\"></td>\n <td id=\"td23\" class=\"the2px\"></td>\n <td id=\"td24\" class=\"the2px\"></td>\n <td id=\"td25\" class=\"the2px\"></td>\n <td id=\"td26\" class=\"the2px\"></td>\n <td id=\"td27\" class=\"the2px\"></td>\n <td id=\"td28\" class=\"the2px\"></td>\n </tr>\n\n <tr>\n <td>12</td>\n <td>13</td>\n <td>14</td>\n <td>15</td>\n <td>16</td>\n <td>17</td>\n <td>18</td>\n <td>19</td>\n <td>20</td>\n <td>21</td>\n <td>22</td>\n <td>23</td>\n </tr>\n\n <tr bgcolor=\"gray\" height=\"20px\">\n <td colspan=2><span class=\"smallheadings\">&nbsp;Status:</span></td>\n\n <td colspan=10>\n <center><span id=\"info\" class=\"smallheadings\">OK</span></center>\n </td>\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 <md-button style=\"width : 100%;\" class=\"vibrate filled touched smallfont rounded greybuttons\" ng-click=\"send({payload: 'd'})\">\n <img style=\"outline : none;\" ng-src=\"{{(msg.payload)?'/verejne/icons/actions/arrow-left-double-2.png':'/verejne/icons/actions/arrow-left-double-2.png'}}\" height=\"64px\" />\n </md-button>\n </td>\n\n <td colspan=2>\n <center><span id=\"current\" style=\"color:white;font-size:150%\">-</span></center>\n </td>\n\n <td colspan=2>\n <md-button style=\"width : 100%;\" class=\"vibrate filled touched smallfont rounded greybuttons\" ng-click=\"send({payload: 'u'})\">\n <img style=\"outline : none;\" ng-src=\"{{(msg.payload)?'/verejne/icons/actions/arrow-right-double-2.png':'/verejne/icons/actions/arrow-right-double-2.png'}}\" height=\"64\" />\n </md-button>\n </td>\n\n <td colspan=2>\n <md-button style=\"width : 100%;\" class=\"vibrate filled touched smallfont rounded greybuttons\" ng-click=\"send({payload: 'r'})\">\n <img style=\"outline : none;\" ng-src=\"{{(msg.payload)?'/verejne/icons/actions/edit-copy-4.png':'/verejne/icons/actions/edit-copy-4.png'}}\" height=\"48px\" />\n </md-button>\n </td>\n\n <td colspan=2>\n <md-button style=\"width : 100%;\" class=\"vibrate filled touched smallfont rounded greybuttons\" ng-click=\"send({payload: 's'})\">\n <img style=\"outline : none;\" ng-src=\"{{(msg.payload)?'/verejne/icons/actions/document-save-5.png':'/verejne/icons/actions/document-save-5.png'}}\" height=\"48px\" />\n </md-button>\n </td>\n\n <td colspan=2>\n <md-button style=\"width : 100%;\" class=\"vibrate filled touched smallfont rounded greybuttons\" ng-click=\"send({payload: 'c'})\">\n <img style=\"outline : none;\" ng-src=\"{{(msg.payload)?'/verejne/icons/actions/dialog-cancel-5.png':'/verejne/icons/actions/dialog-cancel-5.png'}}\" height=\"48px\" />\n </md-button>\n </td>\n <td colspan=1></td>\n </tr>\n\n</table>\n","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":780,"y":120,"wires":[["ee9213b2.e2071"]]},{"id":"ee9213b2.e2071","type":"function","z":"d2f37368.5b066","name":"Process controls","func":"if ( typeof context.days == 'undefined' ) context.days=1;\nif ( typeof context.selector == 'undefined' ) context.selector=1;\nif ( typeof context.saving == 'undefined' ) context.saving=0;\nif ( typeof context.global.incomingTemperature == 'undefined' ) context.global.incomingTemperature=0;\nif ( typeof context.global.incomingHumidity == 'undefined' ) context.global.incomingHumidity=0;\nif ( typeof context.global.hold == 'undefined' ) context.global.hold=0;\nif ( typeof context.global.away == 'undefined' ) context.global.away=0;\nif ( typeof context.global.manual == 'undefined' ) context.global.manual=0;\nif ( typeof context.global.setTemperature == 'undefined' ) context.global.setTemperature=0;\nif ( typeof context.global.manualTimer == 'undefined' ) context.global.manualTimer=0;\nif ( typeof context.global.timing == 'undefined' ) \n {\n context.global.timing=[\n 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,\n 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,\n 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,\n 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,\n 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,\n 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,\n 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,\n 8,14\n ];\n context.saving=0; \n msg.payload=\"anything\"; msg.foryou=\"Restoring\"; return([null,null,msg]);\n }\nvar timing=global.get(\"timing\");\n\nswitch (msg.payload)\n {\n case \"u\" : if ((context.selector>4)&&(context.selector<29))\n {\n timing[((context.days-1)*24)+context.selector-5]++; \n if (timing[((context.days-1)*24)+context.selector-5]>26) timing[((context.days-1)*24)+context.selector-5]=26;\n msg.foryou=\"Incremented temperature\";\n }\n if (context.selector==1) { if (timing[168+(context.selector-1)]<26) { timing[168+(context.selector-1)]++; msg.foryou=\"Incremented frost setting 1 degree\"; } else msg.foryou=\"Hit limit\"; }\n if (context.selector==2) { if (timing[168+(context.selector-1)]<26) { timing[168+(context.selector-1)]++; msg.foryou=\"Incremented away setting 1 degree\"; } else msg.foryou=\"Hit limit\"; }\n if (context.selector==29) { if (context.days<7) { context.days++; msg.foryou=\"Forward one day\";} else msg.foryou=\"End of days!!\"; }\n break;\n case \"d\" : if ((context.selector>4)&&(context.selector<29))\n {\n timing[((context.days-1)*24)+context.selector-5]--; \n if (timing[((context.days-1)*24)+context.selector-5]<14) timing[((context.days-1)*24)+context.selector-5]=14;\n msg.foryou=\"Decremented temperature\";\n }\n if (context.selector==1) { if (timing[168+(context.selector-1)]>8) { timing[168+(context.selector-1)]--; msg.foryou=\"Decremented frost setting 1 degree\"; } else msg.foryou=\"Hit limit\"; }\n if (context.selector==2) { if (timing[168+(context.selector-1)]>8) { timing[168+(context.selector-1)]--; msg.foryou=\"Decremented away setting 1 degree\"; } else msg.foryou=\"Hit limit\"; }\n if (context.selector==29) { if (context.days>1) { context.days--; msg.foryou=\"Backward one day\";} else msg.foryou=\"Beginning of days!!\"; }\n break;\n case 'r' : if ((context.selector>=5)&&(context.selector<28))\n {\n timing[((context.days-1)*24)+context.selector-4]=timing[((context.days-1)*24)+context.selector-5]; \n context.selector++;\n msg.foryou=\"Copied settings to the next hour slot\";\n }\n if ((context.selector==29)&&(context.days<7))\n {\n for (var a=0;a<24;a++)\n {\n timing[((context.days)*24)+a]=timing[((context.days-1)*24)+a]; \n }\n context.days++;\n msg.foryou=\"Copied a complete day's settings\";\n }\n break;\n case 's': context.saving=0; msg.foryou=\"Settings saved to disk\"; 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=parseInt(msg.payload);\n if (msg.payload=='1') msg.foryou=\"Frost temperature selection\"; \n else if (msg.payload=='2') msg.foryou=\"Away temperature selection\";\n else if (msg.payload=='29') msg.foryou=\"Day selection\";\n else msg.foryou=\"Selected hour period \" + (parseInt(msg.payload)-4);\n break;\n case 'c' : msg.payload=\"anything\"; msg.foryou=\"Changes cancelled\"; node.send([null,null,msg]);\n }\n\nmsg.temperatures=context.temperatures;\nmsg.timing=timing;\nmsg.days=context.days;\nmsg.selector=context.selector;\n\nnode.send([msg,null,null]);\n\nif (context.saving===0) \n { \n msg.topic=\"\";\n msg.timing=\"\";\n msg.payload=JSON.stringify(timing);\n node.send([null,msg,null]); \n context.saving=1;\n }\n msg.foryou=\"\"","outputs":"3","noerr":0,"x":710,"y":180,"wires":[["7c3995cb.42902c"],["caedff36.564e1"],["b4250be4.ba5818"]]},{"id":"dd02a09f.75dc7","type":"inject","z":"d2f37368.5b066","name":"Once only","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":true,"x":130,"y":220,"wires":[["ee9213b2.e2071","b4250be4.ba5818"]]},{"id":"8cffe97f.518768","type":"function","z":"d2f37368.5b066","name":"Process heat","func":"var timing=global.get(\"timing\");\nvar now = new Date();\nmsg.payload=timing[(now.getDay()*24)+now.getHours()];\nmsg.frost=timing[168];\nmsg.away=timing[169];\n\nmsg.temperature=global.get(\"incomingTemperature\");\nmsg.humidity=global.get(\"incomingHumidity\");\nmsg.set=msg.payload;\nif (global.get(\"manualTimer\")) global.set(\"manualTimer\",global.get(\"manualTimer\")-1);\nelse global.set(\"manual\",0);\nmsg.desired=msg.set;\nglobal.set(\"setTemperature\",msg.desired);\nmsg.desired+=global.get(\"manual\");\nif (global.get(\"frost\")) { msg.desired=global.get(\"timing\")[168]; global.set(\"frost\",global.get(\"frost\")-1); }\nif (global.get(\"away\")) { msg.desired=global.get(\"timing\")[169]; global.set(\"away\",global.get(\"away\")-1); }\nif (msg.desired>msg.temperature) msg.relay=1; else msg.relay=0;\n\nmsg.payload=global.get(\"incomingTemperature\");\n\nnode.status({fill:\"blue\",shape:\"dot\",text:\"Set point \" + msg.desired + \"c - Actual \" + msg.temperature +\"c\"});\n\nnode.send([msg,null]);\nmsg.payload=msg.relay;\nnode.send([null,msg]);\n\n\n\n\n","outputs":"2","noerr":0,"x":810,"y":500,"wires":[["576d80bb.d779","fa4dda7b.999ab8"],["905d52f6.348b6","7377409f.0bc0f"]]},{"id":"caedff36.564e1","type":"file","z":"d2f37368.5b066","name":"backup","filename":"/home/pi/petesstatlog.log","appendNewline":true,"createDir":true,"overwriteFile":"true","x":961.9999847412109,"y":220.99998474121094,"wires":[[]]},{"id":"b4250be4.ba5818","type":"file in","z":"d2f37368.5b066","name":"Restore","filename":"/home/pi/petesstatlog.log","format":"utf8","x":400,"y":220,"wires":[["27ef2cb3.27df24"]]},{"id":"27ef2cb3.27df24","type":"function","z":"d2f37368.5b066","name":"Restore data from SD","func":"context.global.timing=JSON.parse(msg.payload);\nmsg.payload=\"\";\nreturn msg;","outputs":1,"noerr":0,"x":720,"y":260,"wires":[["ee9213b2.e2071"]]},{"id":"8712bc2a.2a926","type":"inject","z":"d2f37368.5b066","name":"dummy temperature 20c","topic":"","payload":"20","payloadType":"str","repeat":"","crontab":"","once":true,"onceDelay":"","x":170,"y":120,"wires":[["696f7b51.0bf894"]]},{"id":"464713ce.2f5efc","type":"inject","z":"d2f37368.5b066","name":"dummy humidity 40%","topic":"","payload":"40","payloadType":"str","repeat":"","crontab":"","once":true,"onceDelay":"","x":160,"y":160,"wires":[["fc3a73a6.27def"]]},{"id":"696f7b51.0bf894","type":"function","z":"d2f37368.5b066","name":"Store temperature","func":"if ((Number(msg.payload)>0) && (Number(msg.payload)<100)) global.set(\"incomingTemperature\",msg.payload);","outputs":"0","noerr":0,"x":430,"y":60,"wires":[]},{"id":"fc3a73a6.27def","type":"function","z":"d2f37368.5b066","name":"Store humidity","func":"global.set(\"incomingHumidity\",msg.payload);","outputs":"0","noerr":0,"x":420,"y":100,"wires":[]},{"id":"bc502c52.4e8c3","type":"inject","z":"d2f37368.5b066","name":"Test \"Away\" 2 hours","topic":"","payload":"120","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":"","x":150,"y":280,"wires":[["ebdae83.fae1a18"]]},{"id":"f0b52361.ce03f","type":"inject","z":"d2f37368.5b066","name":"Test \"Away\" clear","topic":"","payload":"0","payloadType":"str","repeat":"","crontab":"","once":false,"x":140,"y":320,"wires":[["ebdae83.fae1a18"]]},{"id":"3aeda0ec.d6258","type":"inject","z":"d2f37368.5b066","name":"Test \"Frost\" 2 hours","topic":"","payload":"120","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":"","x":150,"y":360,"wires":[["bfb26aeb.e95488"]]},{"id":"f08b2c75.b70a8","type":"inject","z":"d2f37368.5b066","name":"Test \"Frost\" clear","topic":"","payload":"0","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":"","x":140,"y":400,"wires":[["bfb26aeb.e95488"]]},{"id":"bfb26aeb.e95488","type":"function","z":"d2f37368.5b066","name":"Store \"frost\"","func":"global.set(\"frost\",Number(msg.payload));\n\n","outputs":0,"noerr":0,"x":410,"y":360,"wires":[]},{"id":"ebdae83.fae1a18","type":"function","z":"d2f37368.5b066","name":"Store \"Away\"","func":"global.set(\"away\",Number(msg.payload));\n","outputs":0,"noerr":0,"x":410,"y":320,"wires":[]},{"id":"dee61edf.f41e4","type":"inject","z":"d2f37368.5b066","name":"sample forecast","topic":"","payload":"Dry, 2c with chance of snow","payloadType":"str","repeat":"","crontab":"","once":false,"x":140,"y":440,"wires":[["eb1d1468.c72848"]]},{"id":"1a247a4.f19d786","type":"inject","z":"d2f37368.5b066","name":"Sample forecast","topic":"","payload":"Wet, 12c, possibly rain tonight","payloadType":"str","repeat":"","crontab":"","once":false,"x":140,"y":480,"wires":[["eb1d1468.c72848"]]},{"id":"eb1d1468.c72848","type":"function","z":"d2f37368.5b066","name":"Store forecast","func":"global.set(\"forecast\",msg.payload);","outputs":"0","noerr":0,"x":420,"y":440,"wires":[]},{"id":"905d52f6.348b6","type":"function","z":"d2f37368.5b066","name":"Heating relay sonoff3","func":"msg.topic=\"sonoff3/toesp\";\nif (msg.payload==1)\n {\n node.status({fill:\"red\",shape:\"dot\",text:\"Relay ON\"});\n msg.payload=\"{out12:1}\"; \n }\nelse\n{\n node.status({fill:\"black\",shape:\"dot\",text:\"Relay OFF\"});\n msg.payload=\"{out12:0}\";\n}\nreturn (msg);","outputs":1,"noerr":0,"x":1000,"y":280,"wires":[["fec32686.021a98"]]},{"id":"85a481fe.44514","type":"function","z":"d2f37368.5b066","name":"Handle SET","func":"// here we set manual override controls - valid for 120 minutes after last change.\n\n\nif (global.get(\"away\")===0)\n{\n if (msg.payload==\"u\") { global.set(\"manualTimer\",120); if ((global.get(\"manual\") + global.get(\"setTemperature\"))<23) global.set(\"manual\",global.get(\"manual\")+1); }\n if (msg.payload==\"d\") { global.set(\"manualTimer\",120); if ((global.get(\"manual\") + global.get(\"setTemperature\"))>17) global.set(\"manual\",global.get(\"manual\")-1); }\n if (msg.payload==\"a\") { global.set(\"manualTimer\",0); global.set(\"manual\",0); context.set(\"both\",0); node.status({fill:\"red\",shape:\"dot\",text:\"auto\"}); }\n}\n\nmsg.desired=global.get(\"setTemperature\") + global.get(\"manual\");\n\nif (global.get(\"manual\")===0) msg.colour=\"#aaddff\"; else msg.colour=\"#aaffaa\";\n\nif (global.get(\"frost\")) { msg.desired=global.get(\"timing\")[168]; msg.colour=\"#ffbbbb\"; }\nif (global.get(\"away\")) { msg.desired=global.get(\"timing\")[169];msg.colour=\"#ffbbbb\"; }\n\nmsg.payload=msg.desired;\nreturn msg;","outputs":1,"noerr":0,"x":810,"y":440,"wires":[["fa4dda7b.999ab8","576d80bb.d779","59b5a5c.e53755c","7377409f.0bc0f"]]},{"id":"e59f238.31fdce","type":"ui_template","z":"d2f37368.5b066","group":"8dff2b2d.fd0828","name":"up","order":4,"width":"1","height":"1","format":" <md-button style=\"width: 95%; height:95% !important;\" class=\"vibrate filled touched smallfont rounded greybuttons\" ng-click=\"send({payload: 'u'})\"> \n <img style=\"outline : none;\" \n ng-src=\"{{(msg.payload)?'/verejne/icons/actions/arrow-right-2.png':'/verejne/icons/actions/arrow-right-2.png'}}\" \n height=\"64px\"\n />\n</md-button> ","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":550,"y":320,"wires":[["85a481fe.44514","9c5ecb78.879b98","e2239729.bd4968"]]},{"id":"c0fd5496.3fc7e8","type":"ui_template","z":"d2f37368.5b066","group":"8dff2b2d.fd0828","name":"down","order":3,"width":"1","height":"1","format":" <md-button style=\"width: 95%; height:95% !important;\" class=\"vibrate filled touched smallfont rounded greybuttons\" ng-click=\"send({payload: 'd'})\"> \n <img style=\"outline : none;\" \n ng-src=\"{{(msg.payload)?'/verejne/icons/actions/arrow-down-2.png':'/verejne/icons/actions/arrow-left-2.png'}}\" \n height=\"64px\"\n />\n</md-button> ","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":550,"y":380,"wires":[["85a481fe.44514","9c5ecb78.879b98","e2239729.bd4968"]]},{"id":"a409d2d5.b61c5","type":"function","z":"d2f37368.5b066","name":"Handle AWAY","func":"// here we set manual override controls - valid for 60 minutes after last change.\nif (msg.payload==\"u\") { global.set(\"away\",global.get(\"away\")+1); }\nif (msg.payload==\"uu\") { global.set(\"away\",global.get(\"away\")+24); }\nif (msg.payload==\"a\") { global.set(\"away\",0); }\nmsg.away=global.get(\"away\");\n\nif (global.get(\"away\")===0) msg.colour=\"#aaddff\"; else msg.colour=\"#aaffaa\";\n\nvar t=parseInt(msg.away);\nif (t>23) t=((t/24).toFixed(1))+\"d\"; else t=t+\"h\";\nmsg.away=t;\n \nmsg.payload=\"\";\nreturn msg;","outputs":1,"noerr":0,"x":820,"y":620,"wires":[["85a481fe.44514","7ced6ba4.1de224"]]},{"id":"9a133bfe.350c98","type":"ui_template","z":"d2f37368.5b066","group":"8dff2b2d.fd0828","name":"more","order":6,"width":"1","height":"1","format":" <md-button style=\"width: 95%; height:95% !important;\" class=\"vibrate filled touched smallfont rounded greybuttons\" ng-click=\"send({payload: 'u'})\"> \n <img style=\"outline : none;\" \n ng-src=\"{{(msg.payload)?'/verejne/icons/actions/arrow-right-2.png':'/verejne/icons/actions/arrow-right-2.png'}}\" \n height=\"64px\"\n />\n</md-button> ","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":550,"y":660,"wires":[["a409d2d5.b61c5","9c5ecb78.879b98"]]},{"id":"90e9cd5e.558ce","type":"ui_template","z":"d2f37368.5b066","group":"8dff2b2d.fd0828","name":"mmore","order":7,"width":"1","height":"1","format":" <md-button style=\"width: 95%; height:95% !important;\" class=\"vibrate filled touched smallfont rounded greybuttons\" ng-click=\"send({payload: 'uu'})\"> \n <img style=\"outline : none;\" \n ng-src=\"{{(msg.payload)?'/verejne/icons/actions/arrow-left-double-2.png':'/verejne/icons/actions/arrow-right-double-2.png'}}\" \n height=\"64px\"\n />\n</md-button> ","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":570,"y":700,"wires":[["a409d2d5.b61c5","9c5ecb78.879b98"]]},{"id":"576d80bb.d779","type":"ui_template","z":"d2f37368.5b066","group":"8dff2b2d.fd0828","name":"newergauge","order":1,"width":"1","height":"3","format":"<script type=\"text/javascript\" src=\"/verejne/gauge.min.js\"></script>\n\n<script>\n (function(scope){\n scope.$watch('msg', function(msg) {\n gauge.value=msg.payload;\n // if (msg.units!=\"\") gauge.units=msg.units;\n });\n })(scope);\n \n\n\n\n//var gauge = new RadialGauge({\nvar gauge = new LinearGauge({\n renderTo: 'canvas-id',\n width: 90,\n height: 300,\n borderRadius: 12,\n units: \"°C\",\n animationRule: 'elastic',\n valueBox: true,\n valueBoxWidth:5,\n title: \"Thermostat\",\n minValue: 10,\n maxValue: 30,\n majorTicks: [\n '10',\n '15',\n '20',\n '25',\n '30'\n ],\n minorTicks: 5,\n strokeTicks: true,\n highlights : [\n { from : 10, to : 15, color : '#8888ff' },\n { from : 15, to : 20, color : '#88ff88' },\n { from : 20, to : 25, color : '#ffff00' },\n { from : 25, to : 30, color : '#ff8888' }\n ],\n\n colorPlate: \"#fff\",\n borderShadowWidth: 0,\n borders: true,\n needleType: \"arrow\",\n valueInt: 2,\n valueDec:0,\n needleWidth: 2,\n fontTitleSize: 50,\n fontNumbersSize:50,\n fontUnitsSize:50,\n fontValueSize:50,\n needleCircleSize: 14,\n needleCircleOuter: true,\n needleCircleInner: false,\n animationDuration: 500,\n animationRule: \"linear\"\n}).draw();\n\ngauge.value = 18;\n\n</script>\n<canvas style=\"margin-left: auto; margin-right: auto; margin-top: auto; margin-bottom: auto; outline: none;\" ng-click=\"send({payload: ' '})\" id=\"canvas-id\">\n\n</canvas>","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":1090,"y":460,"wires":[["8cffe97f.518768","219dddf6.5344b2"]]},{"id":"fa4dda7b.999ab8","type":"ui_template","z":"d2f37368.5b066","group":"8dff2b2d.fd0828","name":"SET","order":5,"width":"1","height":"1","format":"<script>\n (function(scope){\n scope.$watch('msg', function(msg) {\n if (msg.desired!=\"\") $(\"#infor\").text(msg.desired+\"C\");\n if (msg.colour!=\"\") $(\"#infor\").css(\"background-color\",msg.colour);\n });\n \n })(scope);\n</script>\n<table ng-click=\"send({payload: 'a'})\" width=95% height=95% class=\"vibrate zui-table zui-table-rounded\">\n <thead>\n <tr>\n <th>SET</th>\n </tr>\n </thead>\n <tbody>\n <tr >\n <td id=\"infor\"></td>\n </tr>\n\n </tbody>\n</table>\n","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":1070,"y":400,"wires":[["85a481fe.44514","9c5ecb78.879b98"]]},{"id":"7ced6ba4.1de224","type":"ui_template","z":"d2f37368.5b066","group":"8dff2b2d.fd0828","name":"AWAY","order":8,"width":"1","height":"1","format":"<script>\n (function(scope){\n scope.$watch('msg', function(msg) {\n if (msg.away!=\"\") $(\"#awaytable\").text(msg.away);\n if (msg.colour!=\"\") $(\"#awaytable\").css(\"background-color\",msg.colour);\n });\n \n })(scope);\n</script>\n\n<table ng-click=\"send({payload: 'a'})\" width=95% height=95% class=\"vibrate zui-table zui-table-rounded\">\n <thead>\n <tr>\n <th>AWAY</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td id=\"awaytable\"></td>\n \n </tr>\n\n </tbody>\n</table>","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":1070,"y":520,"wires":[["a409d2d5.b61c5","9c5ecb78.879b98"]]},{"id":"5dc8e9b7.726d58","type":"ui_template","z":"d2f37368.5b066","group":"8dff2b2d.fd0828","name":"STATUS","order":9,"width":"3","height":"1","format":"<script>\n (function(scope){\n scope.$watch('msg', function(msg) {\n if (msg.topic!=\"\") $(\"#hdr1\").text(msg.topic);\n if (msg.payload!=\"\") $(\"#bod1\").text(msg.payload);\n if (msg.color!=\"\") $(\"#bod1\").css(\"background-color\",msg.color);\n });\n })(scope);\n</script>\n\n<table ng-click=\"send({payload: 'a'})\" width=98% height=100% class=\"zui-table zui-table-rounded\">\n <thead>\n <tr>\n <th id=\"hdr1\">></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td id=\"bod1\"></td>\n \n </tr>\n\n </tbody>\n</table>","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":1080,"y":580,"wires":[[]]},{"id":"47790a72.007be4","type":"function","z":"d2f37368.5b066","name":"show humidity","func":"function theNewDate()\n{\n var d = new Date(),\n minutes = d.getMinutes().toString().length == 1 ? '0'+d.getMinutes() : d.getMinutes();\n hours = d.getHours().toString().length == 1 ? '0'+d.getHours() : d.getHours();\n ampm = d.getHours() >= 12 ? 'pm' : 'am';\n months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];\n days = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'];\n var m= days[d.getDay()]+' '+months[d.getMonth()]+' '+d.getDate()+' '+d.getFullYear()+' '+hours+':'+minutes+ampm;\n return m;\n}\n\nmsg.topic=theNewDate();\nmsg.payload=\"Humidity: \" + global.get(\"incomingHumidity\") +\"%\" ;\nmsg.color=\"#99ffaa\";\nreturn msg;","outputs":1,"noerr":0,"x":840,"y":760,"wires":[["5dc8e9b7.726d58"]]},{"id":"9c5ecb78.879b98","type":"function","z":"d2f37368.5b066","name":"Showing settings","func":"msg.payload=\"Showing settings\";\nmsg.color=\"#ffccaa\";\nreturn msg;","outputs":1,"noerr":0,"x":810,"y":360,"wires":[["5dc8e9b7.726d58"]]},{"id":"219dddf6.5344b2","type":"function","z":"d2f37368.5b066","name":"Showing actual","func":"msg.payload=\"Showing actual\";\nmsg.color=\"#bbddff\";\nreturn msg;","outputs":1,"noerr":0,"x":840,"y":700,"wires":[["5dc8e9b7.726d58"]]},{"id":"fec32686.021a98","type":"mqtt out","z":"d2f37368.5b066","name":"mqtt","topic":"","qos":"","retain":"","broker":"1ddf88b4.b4d037","x":1210,"y":280,"wires":[]},{"id":"620bd77b.487b58","type":"mqtt in","z":"d2f37368.5b066","name":"","topic":"stat2/fromesp/auto_temperature","qos":"2","broker":"1ddf88b4.b4d037","x":150,"y":60,"wires":[["696f7b51.0bf894"]]},{"id":"986c0809.b10308","type":"inject","z":"d2f37368.5b066","name":"","topic":"stat2/toesp","payload":"{temp_type:0}","payloadType":"str","repeat":"","crontab":"","once":true,"onceDelay":0.1,"x":1770,"y":440,"wires":[["91377d37.8a118"]]},{"id":"84d1cefd.e8076","type":"inject","z":"d2f37368.5b066","name":"","topic":"stat2/toesp","payload":"{temperature_port:2}","payloadType":"str","repeat":"","crontab":"","once":true,"onceDelay":0.1,"x":1790,"y":400,"wires":[["91377d37.8a118"]]},{"id":"411c48bc.01e418","type":"inject","z":"d2f37368.5b066","name":"","topic":"","payload":"u","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":580,"wires":[["85a481fe.44514","9c5ecb78.879b98","e2239729.bd4968"]]},{"id":"509f2d2b.54f404","type":"inject","z":"d2f37368.5b066","name":"","topic":"","payload":"d","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":620,"wires":[["85a481fe.44514","9c5ecb78.879b98","e2239729.bd4968"]]},{"id":"3aa95057.19d0d","type":"inject","z":"d2f37368.5b066","name":"","topic":"","payload":"a","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":660,"wires":[["85a481fe.44514","9c5ecb78.879b98","e2239729.bd4968"]]},{"id":"30138cb5.1b7624","type":"mqtt in","z":"d2f37368.5b066","name":"","topic":"stat2/fromesp/trigger4","qos":"2","broker":"1ddf88b4.b4d037","x":140,"y":800,"wires":[["e08059d3.a2cc18"]]},{"id":"91377d37.8a118","type":"mqtt out","z":"d2f37368.5b066","name":"mqtt","topic":"","qos":"","retain":"","broker":"1ddf88b4.b4d037","x":1870,"y":540,"wires":[]},{"id":"6def239a.29162c","type":"inject","z":"d2f37368.5b066","name":"","topic":"stat2/toesp","payload":"{input45:45}","payloadType":"str","repeat":"","crontab":"","once":true,"onceDelay":0.1,"x":1770,"y":360,"wires":[["91377d37.8a118"]]},{"id":"811494fc.1853a8","type":"mqtt in","z":"d2f37368.5b066","name":"","topic":"stat2/fromesp/trigger5","qos":"2","broker":"1ddf88b4.b4d037","x":140,"y":860,"wires":[["e08059d3.a2cc18"]]},{"id":"8ebf6ac4.fa9888","type":"comment","z":"d2f37368.5b066","name":"qd display user stat","info":"","x":1490,"y":300,"wires":[]},{"id":"838cf918.ca74a8","type":"comment","z":"d2f37368.5b066","name":"globals","info":"Globals manual, manualTimer, setTemperature,\nincomingTemperature, incomingHumidity,\ntiming, frost and away\n","x":590,"y":40,"wires":[]},{"id":"68cb818.77ce28","type":"function","z":"d2f37368.5b066","name":"Init","func":"global.set(\"buttonA\",\"released\");\nglobal.set(\"buttonB\",\"released\");\nglobal.set(\"aWasPressed\",0);\nglobal.set(\"bWasPressed\",0);\nglobal.set(\"lastCommand\",\"\");\nmsg.topic=\"stat2/toesp\";\nmsg.payload=\"{qd_string:\\\"$S\\\"}\"\nreturn msg;","outputs":1,"noerr":0,"x":1630,"y":520,"wires":[["91377d37.8a118"]]},{"id":"c0a61a8b.8b8be8","type":"inject","z":"d2f37368.5b066","name":"Set up disp","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":true,"onceDelay":0.1,"x":1470,"y":520,"wires":[["68cb818.77ce28","57cbfa63.c64a44"]]},{"id":"a6e2d8c1.e95018","type":"function","z":"d2f37368.5b066","name":"Frame","func":"msg.topic=\"stat2/toesp\";\nmsg.payload=\"{qd_string:\\\"$E0,0,160,128\\\"}\"; node.send(msg);\nmsg.payload=\"{qd_string:\\\"$L1,72,159,72\\\"}\"; node.send(msg);\nmsg.payload=\"{qd_string:\\\"$L40,73,40,127\\\"}\"; node.send(msg);","outputs":1,"noerr":0,"x":1630,"y":580,"wires":[["91377d37.8a118","f1fd2715.e709d8"]]},{"id":"57cbfa63.c64a44","type":"delay","z":"d2f37368.5b066","name":"","pauseType":"delay","timeout":"700","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":1470,"y":580,"wires":[["a6e2d8c1.e95018"]]},{"id":"11bdbfc2.180e","type":"function","z":"d2f37368.5b066","name":"Fixed wording","func":"msg.topic=\"stat2/toesp\";\nmsg.payload=\"{qd_string:\\\"$F8$P4,10;$C64,64,255Actual\\\"}\"; node.send(msg);\nmsg.payload=\"{qd_string:\\\"$F8$P4,26;Room\\\"}\"; node.send(msg);\nmsg.payload=\"{qd_string:\\\"$F8$P4,42;Temp\\\"}\"; node.send(msg);\nmsg.payload=\"{qd_string:\\\"$F8$P140,48;$C255,255,0C\\\"}\"; node.send(msg);\nmsg.payload=\"{qd_string:\\\"$F8$P140,106;C$C255,255,255\\\"}\"; node.send(msg);\nmsg.payload=\"{qd_string:\\\"$F8$P43,78;Set\\\"}\"; node.send(msg);\n","outputs":1,"noerr":0,"x":1660,"y":640,"wires":[["91377d37.8a118"]]},{"id":"39d39900.122928","type":"function","z":"d2f37368.5b066","name":"temperature","func":"msg.topic=\"stat2/toesp\";\nmsg.payload=\"{qd_string:\\\"$F1$P70,2;\" + global.get(\"incomingTemperature\") + \"\\\"}\"; node.send(msg);\n","outputs":1,"noerr":0,"x":1650,"y":700,"wires":[["91377d37.8a118"]]},{"id":"59b5a5c.e53755c","type":"function","z":"d2f37368.5b066","name":"set temperature","func":"msg.topic=\"stat2/toesp\";\n\nmsg.payload=\"{qd_string:\\\"$F2$P104,92;\" + (Number(global.get(\"setTemperature\")) + Number(global.get(\"manual\"))) + \"\\\"}\"; node.send(msg);\n","outputs":1,"noerr":0,"x":1660,"y":740,"wires":[["91377d37.8a118","99320e11.33f05"]]},{"id":"7377409f.0bc0f","type":"function","z":"d2f37368.5b066","name":"status on off","func":"msg.topic=\"stat2/toesp\";\nif ( (global.get(\"incomingTemperature\") < (global.get(\"setTemperature\")+global.get(\"manual\") )) )\n msg.payload=\"{qd_string:\\\"$F8$P43,100;$C255,0,0;HEAT $C255,255,255\\\"}\";\nelse\n msg.payload=\"{qd_string:\\\"$F8$P43,100;$C0,128,255;STDBY$C255,255,255\\\"}\";\n node.send(msg);\n","outputs":1,"noerr":0,"x":1470,"y":440,"wires":[["91377d37.8a118"]]},{"id":"e2239729.bd4968","type":"timeout","z":"d2f37368.5b066","name":"My Timeout","outtopic":"","outsafe":"","outwarning":"","outunsafe":"1","warning":"15","timer":"30","repeat":false,"again":true,"x":690,"y":560,"wires":[["8cffe97f.518768","47790a72.007be4"]]},{"id":"99320e11.33f05","type":"function","z":"d2f37368.5b066","name":"Auto/manual","func":"msg.topic=\"stat2/toesp\";\nif (global.get(\"manual\"))\nmsg.payload=\"{qd_string:\\\"$F8$P100,78;$C255,128,0Manual$C255,255,255\\\"}\"; \nelse \nmsg.payload=\"{qd_string:\\\"$F8$P100,78;$C64,64,255Auto $C255,255,255\\\"}\";\nnode.send(msg);","outputs":1,"noerr":0,"x":1850,"y":740,"wires":[["91377d37.8a118"]]},{"id":"f1fd2715.e709d8","type":"delay","z":"d2f37368.5b066","name":"","pauseType":"delay","timeout":"200","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":1470,"y":640,"wires":[["11bdbfc2.180e","38e607f2.4092d8"]]},{"id":"31a7fcb3.a01bd4","type":"timeout","z":"d2f37368.5b066","name":"My Timeout","outtopic":"","outsafe":"1","outwarning":"","outunsafe":"1","warning":"15","timer":"30","repeat":false,"again":true,"x":1470,"y":760,"wires":[["39d39900.122928","59b5a5c.e53755c"]]},{"id":"38e607f2.4092d8","type":"delay","z":"d2f37368.5b066","name":"","pauseType":"delay","timeout":"500","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":1470,"y":700,"wires":[["31a7fcb3.a01bd4","39d39900.122928","59b5a5c.e53755c"]]},{"id":"e08059d3.a2cc18","type":"function","z":"d2f37368.5b066","name":"Button \"d\", \"u\" or both i.e. \"a\" for auto","func":"context.set(\"both\",context.get(\"both\") || 0);\ncontext.set(\"ba\",context.get(\"ba\") || 0);\ncontext.set(\"bb\",context.get(\"bb\") || 0);\n\nif (msg.topic==\"stat2/fromesp/trigger4\") if (msg.payload==\"0\") context.set(\"ba\",1);\nif (msg.topic==\"stat2/fromesp/trigger5\") if (msg.payload==\"0\") context.set(\"bb\",1);\n\nif (context.get(\"ba\")==1) context.set(\"both\",context.get(\"both\")|1); \nif (context.get(\"bb\")==1) context.set(\"both\",context.get(\"both\")|2);\n\nif (msg.topic==\"stat2/fromesp/trigger4\") if (msg.payload==\"1\") context.set(\"ba\",0);\nif (msg.topic==\"stat2/fromesp/trigger5\") if (msg.payload==\"1\") context.set(\"bb\",0);\n\nif ((context.get(\"ba\")===0) && (context.get(\"bb\")===0))\n{\n switch(context.get(\"both\"))\n {\n case 1 : msg.payload=\"d\"; context.set(\"both\",0); node.status({fill:\"red\",shape:\"dot\",text:msg.payload}); return msg;\n case 2 : msg.payload=\"u\"; context.set(\"both\",0); node.status({fill:\"red\",shape:\"dot\",text:msg.payload}); return msg;\n case 3 : msg.payload=\"a\"; context.set(\"both\",0); node.status({fill:\"red\",shape:\"dot\",text:msg.payload}); return msg;\n }\n \n}","outputs":1,"noerr":0,"x":470,"y":820,"wires":[["9c5ecb78.879b98","85a481fe.44514","e2239729.bd4968","8c1cedc4.c700d"]]},{"id":"4d0d692b.89a898","type":"comment","z":"d2f37368.5b066","name":"Set up stat2 board esp-go","info":"","x":1750,"y":300,"wires":[]},{"id":"23383d1e.477e22","type":"comment","z":"d2f37368.5b066","name":"2-button operation on stat2 qdtech esp-go","info":"","x":200,"y":760,"wires":[]},{"id":"8c1cedc4.c700d","type":"function","z":"d2f37368.5b066","name":"up-down graphic","func":" msg.topic=\"stat2/toesp\";\n \n setTimeout(function(){\n msg['payload'] = \"{qd_string:\\\"$F1$P11,75;$C0,0,0$G3S$C255,255,255\\\"}\";\n node.send(msg);\n msg['payload'] = \"{qd_string:\\\"$F1$P11,106;$C0,0,0$G3S$C255,255,255\\\"}\";\n node.send(msg);\n }, 300);\n \n\nif (msg.payload=='u')\n {\n msg.payload=\"{qd_string:\\\"$F1$P11,75;$C255,192,192$G3S$C255,255,255\\\"}\"; \n node.send(msg);\n }\nelse\nif (msg.payload=='d')\n {\n msg.payload=\"{qd_string:\\\"$F1$P11,106;$C192,192,255$G3P$C255,255,255\\\"}\"; \n node.send(msg);\n }","outputs":1,"noerr":0,"x":1490,"y":840,"wires":[["91377d37.8a118"]]},{"id":"20d45520.c0d08a","type":"function","z":"d2f37368.5b066","name":"Show Time","func":"var date = new Date();\n\nvar hour = date.getHours();\n hour = (hour < 10 ? \"0\" : \"\") + hour;\n\nvar min = date.getMinutes();\n min = (min < 10 ? \"0\" : \"\") + min;\n\nmsg.topic=\"stat2/toesp\";\nmsg.payload=\"{qd_string:\\\"$F9$P8,97;$C255,0,255;\" + hour + \":\" + min + \"$C255,255,255\\\"}\";\nreturn msg;","outputs":1,"noerr":0,"x":1610,"y":900,"wires":[["91377d37.8a118"]]},{"id":"13d6557f.29a13b","type":"inject","z":"d2f37368.5b066","name":"","topic":"","payload":"","payloadType":"date","repeat":"10","crontab":"","once":false,"onceDelay":0.1,"x":1430,"y":900,"wires":[["20d45520.c0d08a"]]},{"id":"8dff2b2d.fd0828","type":"ui_group","z":"","name":"Stat","tab":"d2a56c85.3868a","disp":false,"width":"4","collapse":false},{"id":"1ddf88b4.b4d037","type":"mqtt-broker","z":"","name":"","broker":"127.0.0.1","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"d2a56c85.3868a","type":"ui_tab","z":"","name":"Stat","icon":"dashboard","order":2,"disabled":false,"hidden":false}]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement