// Temperature Graph // BangleJS Script Bangle.setBarometerPower(true,"tempgraph"); Bangle.loadWidgets(); var widsOn=true; var rm=null; var gt=null; var dg=null; var Layout=require("Layout"); var C=true; var temp,tempMode,readErrCnt,watchButton2; var graph=require("Storage").readJSON("tempgraph.json",true); if(graph==undefined) { graph=[]; } var timesData=[ // dur=duration, u=time units, d=divisions on graph, s=seconds per unit. {dur:10,u:"Mins",d:5,s:60}, {dur:20,u:"Mins",d:4,s:60}, {dur:30,u:"Mins",d:3,s:60}, {dur:40,u:"Mins",d:4,s:60}, {dur:1,u:"Hr",d:4,s:3600}, {dur:2,u:"Hrs",d:4,s:3600}, {dur:3,u:"Hrs",d:3,s:3600}, {dur:4,u:"Hrs",d:4,s:3600}, {dur:6,u:"Hrs",d:6,s:3600}, {dur:8,u:"Hrs",d:4,s:3600}, {dur:12,u:"Hrs",d:6,s:3600}, {dur:16,u:"Hrs",d:4,s:3600}, {dur:20,u:"Hrs",d:5,s:3600}, {dur:1,u:"Day",d:4,s:86400}, {dur:2,u:"Days",d:4,s:86400}, {dur:3,u:"Days",d:3,s:86400}, {dur:4,u:"Days",d:4,s:86400}, {dur:5,u:"Days",d:5,s:86400}, {dur:6,u:"Days",d:6,s:86400}, {dur:7,u:"Days",d:7,s:86400} ]; var times=[]; for(n=0;n{ temp=p.temperature; if(tempMode=="drawGraph"&&graph.length>0&&Math.abs(graph[graph.length-1].temp-temp)>10&&readErrCnt<2){ // A large change in temperature may be a reading error. ie. A 0C or less reading after // a 20C reading. So if this happens, the reading is repeated up to 2 times to hopefully // skip such errors. readErrCnt++; print("readErrCnt "+readErrCnt); return; } clearInterval(gt); readErrCnt=0; switch (tempMode){ case "showTemp": showT(); break; case "drawGraph": var date=new Date(); var dateStr=require("locale").date(date).trim(); var hrs=date.getHours(); var mins=date.getMinutes(); var secs=date.getSeconds(); graph.push({ temp:temp, date:dateStr, hrs:hrs, mins:mins, secs:secs }); if(graph.length==1){ graph[0].dur=durInd; } require("Storage").writeJSON("tempgraph.json", graph); if(graph.length==150){ clearInterval(dg); } drawG(); } }); } function getTemp(){ readErrCnt=0; gt = setInterval(getT,800); } function setButton(){ var watchButton=setWatch(function(){ clearInterval(gt); clearInterval(dg); clearWatch(watchButton); Bangle.removeListener("touch",screenTouch); openMenu(); },BTN); Bangle.on('touch',screenTouch); } function setButton2(){ watchButton2=setWatch(function(){ clearWatch(watchButton2); openMenu(); },BTN); } function zPad(n){ return n.toString().padStart(2,0); } function screenTouch(n,ev){ if(ev.y>23&&ev.y<152){ C=C==false; drawG(false); } } function drawG(){ function cf(t){ if(C){ return t; } return getF(t); } drawWids(); var top=1; var bar=21; var barBot=175-22; if(widsOn){ top=25; bar=bar+24; barBot=barBot-24; } var low=graph[0].temp; var hi=low; for(n=0;nt){ low=t; } if(hi10){ div=5; } if(C){ g.setColor(1,0,0); }else{ g.setColor(0,0,1); } var step=(barBot-bar)/((tempHi-tempLow)/div); for(n=0;nexit()}, ],lazy:true }); drawWids(); messageLO.render(); } function showT(){ tempLO.lab1.label=tempLO.lab3.label; tempLO.lab2.label=tempLO.lab4.label; tempLO.lab3.label=tempLO.lab5.label; tempLO.lab4.label=tempLO.lab6.label; tempLO.lab5.label=temp.toFixed(2)+"C"; tempLO.lab6.label=getF(temp).toFixed(2)+"F"; tempLO.render(); } function exit(){ clearWatch(watchButton2); openMenu(); } function showTemp(){ tempMode="showTemp"; setButton2(); tempLO=new Layout({ type:"v",c:[ {type:"h",c:[ {type:"txt",pad:5,col:"#f77",font:"6x8:2",label:" ",id:"lab1"}, {type:"txt",pad:5,col:"#77f",font:"6x8:2",label:" ",id:"lab2"} ]}, {type:"h",c:[ {type:"txt",pad:5,col:"#f77",font:"6x8:2",label:" ",id:"lab3"}, {type:"txt",pad:5,col:"#77f",font:"6x8:2",label:" ",id:"lab4"} ]}, {type:"h",c:[ {type:"txt",pad:5,col:"#f00",font:"6x8:2",label:" ",id:"lab5"}, {type:"txt",pad:5,col:"#00f",font:"6x8:2",label:" ",id:"lab6"} ]}, {type:"h",c:[ {type:"btn",pad:2,font:"6x8:2",label:"Temp",cb:l=>getTemp()}, {type:"btn",pad:2,font:"6x8:2",label:"Exit",cb:l=>exit()} ]} ] },{lazy:true}); tempLO.render(); getTemp(); } var menu={ "":{ "title":" Temp. Graph" }, "Widgets":{ value:widsOn, format:vis=>vis?"Hide":"Show", onchange:vis=>{ widsOn=vis; refreshMenu(); } }, "Duration":{ value:times.indexOf(duration), min:0,max:times.length-1,step:1,wrap:true, format:tim=>times[tim], onchange:(dur)=>{ duration=times[dur]; } }, "Draw Graph":function(){ E.showMenu(); drawGraph(); }, "Show Graph" : function(){ E.showMenu(); if(graph.length>0){ showGraph(); }else{ message("No graph to\nshow as no\ngraph has been\ndrawn yet."); } }, "Save Graph" : function(){ E.showMenu(); if(graph.length>0){ saveGraph(); }else{ message("No graph to\nsave as no\ngraph has been\ndrawn yet."); } }, "Save Data" : function(){ E.showMenu(); if(graph.length>0){ saveData(); }else{ message("No data to\nsave as no\ngraph has been\ndrawn yet."); } }, "Show Temp":function(){ E.showMenu(); showTemp(); } }; openMenu();