From ff40b61747f8894710d85bf41e36e9f29282b74c Mon Sep 17 00:00:00 2001 From: CarlR9 <108166078+CarlR9@users.noreply.github.com> Date: Fri, 3 Feb 2023 11:16:05 +1300 Subject: [PATCH] Delete tempgraph directory --- tempgraph/ChangeLog | 2 - tempgraph/README.md | 36 ---- tempgraph/app.js | 395 ------------------------------------- tempgraph/metadata.json | 18 -- tempgraph/screenshot_1.png | Bin 3320 -> 0 bytes tempgraph/screenshot_2.png | Bin 4186 -> 0 bytes tempgraph/screenshot_3.png | Bin 3480 -> 0 bytes 7 files changed, 451 deletions(-) delete mode 100644 tempgraph/ChangeLog delete mode 100644 tempgraph/README.md delete mode 100644 tempgraph/app.js delete mode 100644 tempgraph/metadata.json delete mode 100644 tempgraph/screenshot_1.png delete mode 100644 tempgraph/screenshot_2.png delete mode 100644 tempgraph/screenshot_3.png diff --git a/tempgraph/ChangeLog b/tempgraph/ChangeLog deleted file mode 100644 index 58dd75a19..000000000 --- a/tempgraph/ChangeLog +++ /dev/null @@ -1,2 +0,0 @@ -0.01: 3/Feb/2023 Added 'Temperature Graph' app to depository. - diff --git a/tempgraph/README.md b/tempgraph/README.md deleted file mode 100644 index de4a0af59..000000000 --- a/tempgraph/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# Temperature Graph - -**Temperature Graph** (tempgraph) is a Bangle.js 2 app for recording graphs of the temperature for various time periods from 10 minutes to 7 days long. It samples the watch's temperature sensor 150 times while creating a graph, regardless of the time period selected. - -### Menu Options -* **Widgets** Toggles the watch's widgets on and off. With them off gives you a bigger graph when viewing it. - -* **Duration** Select the time period for drawing the graph, from 10 minutes to 7 days long. - -* **Draw Graph** Draws the graph. - * Tapping the screen toggles the graph between Celsius (red) and Fahrenheit (blue). - * Pressing the watch button takes you back to the menu. **Note:** While the graph can still be viewed after returning to the menu, you can't continue recording it if you had returned to the menu before the time period was up. The graph is saved in the watch though so it's still there the next time you start the app. - -* **Show Graph** Shows the last drawn graph. - * Tapping the screen toggles the graph between Celsius (red) and Fahrenheit (blue). - * Pressing the watch button takes you back to the menu. - -* **Save Graph** Sends a screengrab of the graph to the Espruino Web IDE from where you can save it as you would any image on a webpage. - -* **Save Data** Sends a CSV file of the graph's temperature data to the Espruino Web IDE where you can save it for further use. I suggest you use the Espruino Web IDE's Terminal Logger (selected in the IDE's Settings/General) to record the data as it's sent. This is the easiest way to save it as a text file. - -* **Show Temp** Shows the current temperature. - -### Screenshots -![](screenshot_1.png) -![](screenshot_2.png) -![](screenshot_3.png) - -### Note -Using the watch in a normal fashion can raise the temperature it's sensing to quite a few degrees above the surrounding temperature and it may take half an hour or so to drop to close to the surrounding temperature. After that it seems to give quite accurate readings, assuming the thermometer I've been comparing it to is itself reasonably accurate. So best to load the app then not touch the watch for half an hour before starting a recording. This is assuming you're not wearing the app and are just using it to record the temperature where you've put the watch. You could of course wear it and it'll still draw a graph, which might also be useful. - -### Creator -Carl Read ([mail](mailto:cread98@orcon.net.nz), [github](https://github.com/CarlR9)) - -#### License -[MIT License](LICENSE) diff --git a/tempgraph/app.js b/tempgraph/app.js deleted file mode 100644 index a0bb3016b..000000000 --- a/tempgraph/app.js +++ /dev/null @@ -1,395 +0,0 @@ -// Temperature Graph -// BangleJS Script - -Bangle.setBarometerPower(true,"tempgraph"); -Bangle.loadWidgets(); -var wids=WIDGETS; -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:3600}, - {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(); diff --git a/tempgraph/metadata.json b/tempgraph/metadata.json deleted file mode 100644 index f714c1eef..000000000 --- a/tempgraph/metadata.json +++ /dev/null @@ -1,18 +0,0 @@ -{ "id": "tempgraph", - "name": "Temperature Graph", - "shortName":"Temp Graph", - "version":"0.01", - "description": "An app for recording the temperature for time periods ranging from 10 minutes to 7 days.", - "icon": "app.png", - "type": "tool", - "tags": "temperature,tempgraph,graph", - "supports" : ["BANGLEJS2"], - "readme": "README.md", - "storage": [ - {"name":"tempgraph.app.js","url":"app.js"} - ], - "data": [ - {"name":"tempgraph.json"} - ], - "screenshots": [{"url":"screenshot_1.png"},{"url":"screenshot_2.png"},{"url":"screenshot_3.png"}] -} diff --git a/tempgraph/screenshot_1.png b/tempgraph/screenshot_1.png deleted file mode 100644 index 7395f289695fd5be8a03d97b8644f55cc29072db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3320 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 diff --git a/tempgraph/screenshot_2.png b/tempgraph/screenshot_2.png deleted file mode 100644 index 68d0ea236c6a513868c69eae8a5e51f995fad9f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4186 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 Di-xj=