From 1aeb958dd4f8f333dc071f8ee4b47386b1d0df7c Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Mon, 14 Mar 2022 15:14:07 +0100 Subject: [PATCH 01/39] Create app.js --- apps/timer/app.js | 65 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 apps/timer/app.js diff --git a/apps/timer/app.js b/apps/timer/app.js new file mode 100644 index 000000000..26a9ef7c9 --- /dev/null +++ b/apps/timer/app.js @@ -0,0 +1,65 @@ +var mins = 7; +var counter; +var counterInterval; +var timers = [9, 7, 5, 3, 1]; + +function showMainMenu() { + const menu = { + '': { 'title': 'Timers' }, + }; + timers.forEach((timer,idx)=>{ + menu[timer] = function() { + startTimer(timer); + }; + }); + return E.showMenu(menu); +} + +function outOfTime() { + if (counterInterval) return; + E.showMessage("Out of Time", "My Timer"); + Bangle.buzz(); + // again, 3 secs later + setTimeout(outOfTime, 3000); +} + +function countDown() { + counter--; + // Out of time + if (counter<=0) { + clearInterval(counterInterval); + counterInterval = undefined; + setWatch(()=>{load();}, BTN1); // Bangle1: BTN2 + outOfTime(); + return; + } + + function sec2time(counter) { + let m = Math.floor(counter / 60); + let s = counter - m * 60; + if (s < 10) + return `${m}:0${s}`; + else + return `${m}:${s}`; + } + + g.clear(true); + g.drawImage(require("Storage").read("timer.png"),70,20); + g.setFontAlign(0,0); // center font + g.setFont("Vector",60); // vector font, 80px + // draw the current counter value + g.drawString(sec2time(counter),90,120); + // optional - this keeps the watch LCD lit up + // g.flip(); +} + +function startTimer(timer) { + counter = timer * 60; + // console.log(counter); + countDown(); + if (!counterInterval) + counterInterval = setInterval(countDown, 1000); +} + +showMainMenu(); +//startTimer(); From 6ca2a8ef946e59271986aad97e4937fe2183a130 Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Mon, 14 Mar 2022 15:22:16 +0100 Subject: [PATCH 02/39] Create app-icon.js --- apps/timer/app-icon.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/timer/app-icon.js diff --git a/apps/timer/app-icon.js b/apps/timer/app-icon.js new file mode 100644 index 000000000..d0fb2e0be --- /dev/null +++ b/apps/timer/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwxH+AH4A/AH4ALjAAWF/4v3AAWJACDCdF/4vf/1ms1l///h4FBAA4ugs0eFwNlF5IweEAUP/8eFxQvjLxYvhR4Ivtd4IvqSAjupMAsPF9TBEMBIugMIouqF4ZerGBYukGBIumGA4uoF96+2GEwuJGEooEoVCF84uFlUqGEwuHGE4uIGAwuijguFAAMcGEIgCjouHAAMdF8crF5MrF8SNISIwvfdgzyIeECPNFz2JACAv/F/UYACwv/F+4A/AH4AzA=")) From 95f814a532381a2d1fff0dd19ccf15f36204c6c9 Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Mon, 14 Mar 2022 15:24:46 +0100 Subject: [PATCH 03/39] Create metadata.json --- apps/timer/metadata.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 apps/timer/metadata.json diff --git a/apps/timer/metadata.json b/apps/timer/metadata.json new file mode 100644 index 000000000..e79702375 --- /dev/null +++ b/apps/timer/metadata.json @@ -0,0 +1,12 @@ +{ "id": "timer", + "name": "My Timer App", + "shortName":"My Timer", + "icon": "app.png", + "version":"0.01", + "description": "This is Peter´s awesome timer app", + "tags": "", + "storage": [ + {"name":"timer.app.js","url":"app.js"}, + {"name":"timer.img","url":"app-icon.js","evaluate":true} + ] +} From 2ad69dcd53cfd2a761d761f93952f4a304615244 Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Mon, 14 Mar 2022 15:37:36 +0100 Subject: [PATCH 04/39] Add files via upload --- apps/timer/app-icon.png | Bin 0 -> 1011 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/timer/app-icon.png diff --git a/apps/timer/app-icon.png b/apps/timer/app-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..cfd942ea013fdda73add2a8f06f63628f6f4d8eb GIT binary patch literal 1011 zcmV0rD z1-1BOqO}O(lTg8jLJ)2HRIT^}1<@B3tE;kzRZPKx4Rq6xZQYf&R3tTNv)N5%=J>F? z>1LBQGkb19$$nqv-aGf)@Au3-_s*R;&_omK8z!v5=nK!D1oOZx5;L~{?ROsxV-snB z=9Y*D5Euw+(|`kzr0`q47-!tV&62XK{W%u_)k^Kcf`xjV!?yV-@(KK zh{zs|23-hAWNFWi$I93ItdHx5lJJm5f^rSW-Akp)espC%?8YP=8U@-#JX0+c7R%R? z7kX#Cq7k5SK;T5RJX0zQ54$TE_*tVt_zRpmJca$2m^T z6P%p(xocC1A%%1@5&KS~LH{O>_|E}Ffa!T*wiI|4ipKGW)%4l{hI(2v7OOo=Ve>G)@A@8 zeO5NRj{75qdv4HWEWY3jJ=|}u+Tyh806;1)oyPTk0!h@}I_<@rosV~!X`6i3zXwVV z|A1Ur<(BXISor{|g;fWB`BUO;MfVHfkyUQr-|D%?PfSR=O-^eLd@2&1bKTE?!JBj& zD73hrr_xT!*UBPJonLs`h?#4j?n{f(7I zB728=TaK-~5e{kxzRwjC;zfT4HeGKO`X=_%l|KwXzI%kpzR`NRf)Q^=vbSwg!>7d}`nAR6rabR+0O$TyExi|toW z)1Mhx)1*K1Jh#oBTB?g&AEOcI95CDoV8r9T@jXPm`LzlCBKM9zgAuPX1e-Myw0|Wo z19V*ckd4N0pknq*0)p0rMNchQd^6(|93UDaomuc3cD6HSjS&u4f;m z*3Q6YrM4~Px4u}ei1|b#LHT?AF?F^^3}c7COoz(K)Izxi^w}CC;j=Qe_}}LTnn^yJ hSeHq@CYo69_!rhyA?h4K76AYN002ovPDHLkV1g(R?#}=K literal 0 HcmV?d00001 From bb9a952abd968097fb47bdaa58fa9990a94d557e Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Mon, 14 Mar 2022 15:51:04 +0100 Subject: [PATCH 05/39] Update metadata.json --- apps/timer/metadata.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/timer/metadata.json b/apps/timer/metadata.json index e79702375..d0431cd9e 100644 --- a/apps/timer/metadata.json +++ b/apps/timer/metadata.json @@ -1,6 +1,6 @@ { "id": "timer", - "name": "My Timer App", - "shortName":"My Timer", + "name": "Peter´s App", + "shortName":"Timer", "icon": "app.png", "version":"0.01", "description": "This is Peter´s awesome timer app", From b6f82d55e5625c0fbc07ef649c2553fb3855a18d Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Mon, 14 Mar 2022 15:52:04 +0100 Subject: [PATCH 06/39] Delete app-icon.png --- apps/timer/app-icon.png | Bin 1011 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 apps/timer/app-icon.png diff --git a/apps/timer/app-icon.png b/apps/timer/app-icon.png deleted file mode 100644 index cfd942ea013fdda73add2a8f06f63628f6f4d8eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1011 zcmV0rD z1-1BOqO}O(lTg8jLJ)2HRIT^}1<@B3tE;kzRZPKx4Rq6xZQYf&R3tTNv)N5%=J>F? z>1LBQGkb19$$nqv-aGf)@Au3-_s*R;&_omK8z!v5=nK!D1oOZx5;L~{?ROsxV-snB z=9Y*D5Euw+(|`kzr0`q47-!tV&62XK{W%u_)k^Kcf`xjV!?yV-@(KK zh{zs|23-hAWNFWi$I93ItdHx5lJJm5f^rSW-Akp)espC%?8YP=8U@-#JX0+c7R%R? z7kX#Cq7k5SK;T5RJX0zQ54$TE_*tVt_zRpmJca$2m^T z6P%p(xocC1A%%1@5&KS~LH{O>_|E}Ffa!T*wiI|4ipKGW)%4l{hI(2v7OOo=Ve>G)@A@8 zeO5NRj{75qdv4HWEWY3jJ=|}u+Tyh806;1)oyPTk0!h@}I_<@rosV~!X`6i3zXwVV z|A1Ur<(BXISor{|g;fWB`BUO;MfVHfkyUQr-|D%?PfSR=O-^eLd@2&1bKTE?!JBj& zD73hrr_xT!*UBPJonLs`h?#4j?n{f(7I zB728=TaK-~5e{kxzRwjC;zfT4HeGKO`X=_%l|KwXzI%kpzR`NRf)Q^=vbSwg!>7d}`nAR6rabR+0O$TyExi|toW z)1Mhx)1*K1Jh#oBTB?g&AEOcI95CDoV8r9T@jXPm`LzlCBKM9zgAuPX1e-Myw0|Wo z19V*ckd4N0pknq*0)p0rMNchQd^6(|93UDaomuc3cD6HSjS&u4f;m z*3Q6YrM4~Px4u}ei1|b#LHT?AF?F^^3}c7COoz(K)Izxi^w}CC;j=Qe_}}LTnn^yJ hSeHq@CYo69_!rhyA?h4K76AYN002ovPDHLkV1g(R?#}=K From 24d625ece1184e5e4fafb95038f5ce96c99eca83 Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Mon, 14 Mar 2022 16:03:18 +0100 Subject: [PATCH 07/39] Update metadata.json --- apps/timer/metadata.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/timer/metadata.json b/apps/timer/metadata.json index d0431cd9e..050e0c8ad 100644 --- a/apps/timer/metadata.json +++ b/apps/timer/metadata.json @@ -5,6 +5,7 @@ "version":"0.01", "description": "This is Peter´s awesome timer app", "tags": "", + "supports" : ["BANGLEJS2"], "storage": [ {"name":"timer.app.js","url":"app.js"}, {"name":"timer.img","url":"app-icon.js","evaluate":true} From d1a321050834fa1b760adac68e6dda2a90fdf273 Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Mon, 14 Mar 2022 16:23:27 +0100 Subject: [PATCH 08/39] Update metadata.json --- apps/timer/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/timer/metadata.json b/apps/timer/metadata.json index 050e0c8ad..b50b81e86 100644 --- a/apps/timer/metadata.json +++ b/apps/timer/metadata.json @@ -1,5 +1,5 @@ { "id": "timer", - "name": "Peter´s App", + "name": "Peter´s Timer", "shortName":"Timer", "icon": "app.png", "version":"0.01", From 443a5e1fc1209ac03c27789c23ea6bd2fa74bb2c Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Mon, 14 Mar 2022 16:37:03 +0100 Subject: [PATCH 09/39] Add files via upload --- apps/timer/app.png | Bin 0 -> 1011 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/timer/app.png diff --git a/apps/timer/app.png b/apps/timer/app.png new file mode 100644 index 0000000000000000000000000000000000000000..cfd942ea013fdda73add2a8f06f63628f6f4d8eb GIT binary patch literal 1011 zcmV0rD z1-1BOqO}O(lTg8jLJ)2HRIT^}1<@B3tE;kzRZPKx4Rq6xZQYf&R3tTNv)N5%=J>F? z>1LBQGkb19$$nqv-aGf)@Au3-_s*R;&_omK8z!v5=nK!D1oOZx5;L~{?ROsxV-snB z=9Y*D5Euw+(|`kzr0`q47-!tV&62XK{W%u_)k^Kcf`xjV!?yV-@(KK zh{zs|23-hAWNFWi$I93ItdHx5lJJm5f^rSW-Akp)espC%?8YP=8U@-#JX0+c7R%R? z7kX#Cq7k5SK;T5RJX0zQ54$TE_*tVt_zRpmJca$2m^T z6P%p(xocC1A%%1@5&KS~LH{O>_|E}Ffa!T*wiI|4ipKGW)%4l{hI(2v7OOo=Ve>G)@A@8 zeO5NRj{75qdv4HWEWY3jJ=|}u+Tyh806;1)oyPTk0!h@}I_<@rosV~!X`6i3zXwVV z|A1Ur<(BXISor{|g;fWB`BUO;MfVHfkyUQr-|D%?PfSR=O-^eLd@2&1bKTE?!JBj& zD73hrr_xT!*UBPJonLs`h?#4j?n{f(7I zB728=TaK-~5e{kxzRwjC;zfT4HeGKO`X=_%l|KwXzI%kpzR`NRf)Q^=vbSwg!>7d}`nAR6rabR+0O$TyExi|toW z)1Mhx)1*K1Jh#oBTB?g&AEOcI95CDoV8r9T@jXPm`LzlCBKM9zgAuPX1e-Myw0|Wo z19V*ckd4N0pknq*0)p0rMNchQd^6(|93UDaomuc3cD6HSjS&u4f;m z*3Q6YrM4~Px4u}ei1|b#LHT?AF?F^^3}c7COoz(K)Izxi^w}CC;j=Qe_}}LTnn^yJ hSeHq@CYo69_!rhyA?h4K76AYN002ovPDHLkV1g(R?#}=K literal 0 HcmV?d00001 From 895bae593942e757944f231874d86dab5734f8c8 Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Mon, 14 Mar 2022 17:10:54 +0100 Subject: [PATCH 10/39] Update app.js --- apps/timer/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/timer/app.js b/apps/timer/app.js index 26a9ef7c9..3603ef44f 100644 --- a/apps/timer/app.js +++ b/apps/timer/app.js @@ -44,7 +44,7 @@ function countDown() { } g.clear(true); - g.drawImage(require("Storage").read("timer.png"),70,20); + g.drawImage(require("Storage").read("timer.img"),70,20); g.setFontAlign(0,0); // center font g.setFont("Vector",60); // vector font, 80px // draw the current counter value From 6a29d8e792c3fec289b6e7bcc087ae2ffc639fdc Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Mon, 14 Mar 2022 17:22:08 +0100 Subject: [PATCH 11/39] Add files via upload --- apps/timer/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/timer/app.js b/apps/timer/app.js index 3603ef44f..e903f84b5 100644 --- a/apps/timer/app.js +++ b/apps/timer/app.js @@ -62,4 +62,4 @@ function startTimer(timer) { } showMainMenu(); -//startTimer(); +//startTimer(); \ No newline at end of file From f74a2437fea7a679d131a90150a598862c6281d4 Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Tue, 15 Mar 2022 08:22:23 +0100 Subject: [PATCH 12/39] Create widget.js --- widdaysleft/widget.js | 78 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 widdaysleft/widget.js diff --git a/widdaysleft/widget.js b/widdaysleft/widget.js new file mode 100644 index 000000000..1bc891690 --- /dev/null +++ b/widdaysleft/widget.js @@ -0,0 +1,78 @@ +const storage = require('Storage'); +let settings; +let height = 23; +let width = 34; + +var debug = 0; //1 = show debug info + +settings = storage.readJSON('daysleft.json',1); //read storage +if (!settings) print("no daysleft.json found"); +var i = 0; +const oneDay = 24 * 60 * 60 * 1000; // hours*minutes*seconds*milliseconds +const today = new Date(); //includes current time +const currentYear = today.getFullYear(); +const currentMonth = today.getMonth(); +const currentDay = today.getDate(); +const todayMorning = new Date (currentYear, currentMonth, currentDay, 0, 0, 0); //create date object with today, but 00:00:00 +do { + var target = settings[i]; + if (target) { + var dd = target.day, + mm = target.month-1, //-1 because month is zero-based + yy = target.year; + const targetDate = new Date(yy, mm, dd); //is 00:00 + i += 1; + } +} while (target && todayMorning >= targetDate); + +const diffDays = (target ? (targetDate - todayMorning) / oneDay : 0); //calculate day difference + +function drawWidget() { + if (debug == 1) g.drawRect(this.x,this.y,this.x+width,this.y+height); //draw rectangle around widget area + g.reset(); + + //define font size and string position + //small if number has more than 3 digits (positive number) + if (diffDays >= 1000) { + g.setFont("6x8", 1); + g.drawString(diffDays,this.x+10,this.y+7); + } + //large if number has 3 digits (positive number) + if (diffDays <= 999 && diffDays >= 100) { + g.setFont("6x8", 2); + g.drawString(diffDays,this.x,this.y+4); + } + //large if number has 2 digits (positive number) + if (diffDays <= 99 && diffDays >= 10) { + g.setFont("6x8", 2); + g.drawString(diffDays,this.x+6,this.y+4); + } + //large if number has 1 digit (positive number) + if (diffDays <= 9 && diffDays >= 0) { + g.setFont("6x8", 2); + g.drawString(diffDays,this.x+13,this.y+4); + } + //large if number has 1 digit (negative number) + if (diffDays <= -1 && diffDays >= -9) { + g.setFont("6x8", 2); + g.drawString(diffDays,this.x+5,this.y+4); + } + //large if number has 2 digits (negative number) + if (diffDays <= -10 && diffDays >= -99) { + g.setFont("6x8", 2); + g.drawString(diffDays,this.x,this.y+4); + } + //large if number has 3 digits or more (negative number) + if (diffDays <= -100) { + g.setFont("6x8", 1); + g.drawString(diffDays,this.x,this.y+7); + } +} + +//draw widget +WIDGETS["widdaysl"]={area:"tl",width:width,draw:drawWidget}; + +setTimeout(function() { + Bangle.loadWidgets(); + WIDGETS["widdaysl"].draw(WIDGETS["widdaysl"]); + }, todayMorning + oneDay - today + 1000); // update at next noon From 94e24f8b4e5b34a1f2e4efb5bcf6663a8be83ad3 Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Tue, 15 Mar 2022 08:23:01 +0100 Subject: [PATCH 13/39] Add files via upload --- widdaysleft/metadata.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 widdaysleft/metadata.json diff --git a/widdaysleft/metadata.json b/widdaysleft/metadata.json new file mode 100644 index 000000000..b3cff5eb8 --- /dev/null +++ b/widdaysleft/metadata.json @@ -0,0 +1,13 @@ +{ + "id": "widdaysleft", + "name": "Days Left", + "version": "0.01", + "description": "Read daysleft.json and show number of days left until first date, which lies in the future", + "icon": "widget.png", + "type": "widget", + "tags": "widget,tools", + "supports": ["BANGLEJS2"], + "storage": [ + {"name":"widdaysleft.wid.js","url":"widget.js"} + ] +} From bef491f29a63b7b68263860040fb72f25222f197 Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Tue, 15 Mar 2022 08:24:40 +0100 Subject: [PATCH 14/39] Delete widdaysleft directory --- widdaysleft/metadata.json | 13 ------- widdaysleft/widget.js | 78 --------------------------------------- 2 files changed, 91 deletions(-) delete mode 100644 widdaysleft/metadata.json delete mode 100644 widdaysleft/widget.js diff --git a/widdaysleft/metadata.json b/widdaysleft/metadata.json deleted file mode 100644 index b3cff5eb8..000000000 --- a/widdaysleft/metadata.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "id": "widdaysleft", - "name": "Days Left", - "version": "0.01", - "description": "Read daysleft.json and show number of days left until first date, which lies in the future", - "icon": "widget.png", - "type": "widget", - "tags": "widget,tools", - "supports": ["BANGLEJS2"], - "storage": [ - {"name":"widdaysleft.wid.js","url":"widget.js"} - ] -} diff --git a/widdaysleft/widget.js b/widdaysleft/widget.js deleted file mode 100644 index 1bc891690..000000000 --- a/widdaysleft/widget.js +++ /dev/null @@ -1,78 +0,0 @@ -const storage = require('Storage'); -let settings; -let height = 23; -let width = 34; - -var debug = 0; //1 = show debug info - -settings = storage.readJSON('daysleft.json',1); //read storage -if (!settings) print("no daysleft.json found"); -var i = 0; -const oneDay = 24 * 60 * 60 * 1000; // hours*minutes*seconds*milliseconds -const today = new Date(); //includes current time -const currentYear = today.getFullYear(); -const currentMonth = today.getMonth(); -const currentDay = today.getDate(); -const todayMorning = new Date (currentYear, currentMonth, currentDay, 0, 0, 0); //create date object with today, but 00:00:00 -do { - var target = settings[i]; - if (target) { - var dd = target.day, - mm = target.month-1, //-1 because month is zero-based - yy = target.year; - const targetDate = new Date(yy, mm, dd); //is 00:00 - i += 1; - } -} while (target && todayMorning >= targetDate); - -const diffDays = (target ? (targetDate - todayMorning) / oneDay : 0); //calculate day difference - -function drawWidget() { - if (debug == 1) g.drawRect(this.x,this.y,this.x+width,this.y+height); //draw rectangle around widget area - g.reset(); - - //define font size and string position - //small if number has more than 3 digits (positive number) - if (diffDays >= 1000) { - g.setFont("6x8", 1); - g.drawString(diffDays,this.x+10,this.y+7); - } - //large if number has 3 digits (positive number) - if (diffDays <= 999 && diffDays >= 100) { - g.setFont("6x8", 2); - g.drawString(diffDays,this.x,this.y+4); - } - //large if number has 2 digits (positive number) - if (diffDays <= 99 && diffDays >= 10) { - g.setFont("6x8", 2); - g.drawString(diffDays,this.x+6,this.y+4); - } - //large if number has 1 digit (positive number) - if (diffDays <= 9 && diffDays >= 0) { - g.setFont("6x8", 2); - g.drawString(diffDays,this.x+13,this.y+4); - } - //large if number has 1 digit (negative number) - if (diffDays <= -1 && diffDays >= -9) { - g.setFont("6x8", 2); - g.drawString(diffDays,this.x+5,this.y+4); - } - //large if number has 2 digits (negative number) - if (diffDays <= -10 && diffDays >= -99) { - g.setFont("6x8", 2); - g.drawString(diffDays,this.x,this.y+4); - } - //large if number has 3 digits or more (negative number) - if (diffDays <= -100) { - g.setFont("6x8", 1); - g.drawString(diffDays,this.x,this.y+7); - } -} - -//draw widget -WIDGETS["widdaysl"]={area:"tl",width:width,draw:drawWidget}; - -setTimeout(function() { - Bangle.loadWidgets(); - WIDGETS["widdaysl"].draw(WIDGETS["widdaysl"]); - }, todayMorning + oneDay - today + 1000); // update at next noon From 603c6d4d7dca1ed9123286535c3ad3a596e9ad01 Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Tue, 15 Mar 2022 08:25:21 +0100 Subject: [PATCH 15/39] Add files via upload --- apps/daysleft.json | 9 +++++ apps/metadata.json | 13 ++++++++ apps/widdaysl.wid.js | 78 +++++++++++++++++++++++++++++++++++++++++++ apps/widget.png | Bin 0 -> 1043 bytes 4 files changed, 100 insertions(+) create mode 100644 apps/daysleft.json create mode 100644 apps/metadata.json create mode 100644 apps/widdaysl.wid.js create mode 100644 apps/widget.png diff --git a/apps/daysleft.json b/apps/daysleft.json new file mode 100644 index 000000000..c2349db0b --- /dev/null +++ b/apps/daysleft.json @@ -0,0 +1,9 @@ +[ + { "day": 25, "month": 2, "year": 2022 }, // Urlaub Essen + { "day": 2, "month": 3, "year": 2022 }, // Aschermittwoch + { "day": 27, "month": 3, "year": 2022 }, // Sommerzeit + { "day": 16, "month": 4, "year": 2022 }, // Ostersamstag + { "day": 3, "month": 6, "year": 2022 }, // Kalamata + { "day": 17, "month": 7, "year": 2022 }, // Exerzitien + { "day": 31, "month":12, "year": 2022 } // Sylvester +] \ No newline at end of file diff --git a/apps/metadata.json b/apps/metadata.json new file mode 100644 index 000000000..b3cff5eb8 --- /dev/null +++ b/apps/metadata.json @@ -0,0 +1,13 @@ +{ + "id": "widdaysleft", + "name": "Days Left", + "version": "0.01", + "description": "Read daysleft.json and show number of days left until first date, which lies in the future", + "icon": "widget.png", + "type": "widget", + "tags": "widget,tools", + "supports": ["BANGLEJS2"], + "storage": [ + {"name":"widdaysleft.wid.js","url":"widget.js"} + ] +} diff --git a/apps/widdaysl.wid.js b/apps/widdaysl.wid.js new file mode 100644 index 000000000..0fc0e24b2 --- /dev/null +++ b/apps/widdaysl.wid.js @@ -0,0 +1,78 @@ +const storage = require('Storage'); +let settings; +let height = 23; +let width = 34; + +var debug = 0; //1 = show debug info + +settings = storage.readJSON('daysleft.json',1); //read storage +if (!settings) print("no daysleft.json found"); +var i = 0; +const oneDay = 24 * 60 * 60 * 1000; // hours*minutes*seconds*milliseconds +const today = new Date(); //includes current time +const currentYear = today.getFullYear(); +const currentMonth = today.getMonth(); +const currentDay = today.getDate(); +const todayMorning = new Date (currentYear, currentMonth, currentDay, 0, 0, 0); //create date object with today, but 00:00:00 +do { + var target = settings[i]; + if (target) { + var dd = target.day, + mm = target.month-1, //-1 because month is zero-based + yy = target.year; + const targetDate = new Date(yy, mm, dd); //is 00:00 + i += 1; + } +} while (target && todayMorning >= targetDate); + +const diffDays = (target ? (targetDate - todayMorning) / oneDay : 0); //calculate day difference + +function drawWidget() { + if (debug == 1) g.drawRect(this.x,this.y,this.x+width,this.y+height); //draw rectangle around widget area + g.reset(); + + //define font size and string position + //small if number has more than 3 digits (positive number) + if (diffDays >= 1000) { + g.setFont("6x8", 1); + g.drawString(diffDays,this.x+10,this.y+7); + } + //large if number has 3 digits (positive number) + if (diffDays <= 999 && diffDays >= 100) { + g.setFont("6x8", 2); + g.drawString(diffDays,this.x,this.y+4); + } + //large if number has 2 digits (positive number) + if (diffDays <= 99 && diffDays >= 10) { + g.setFont("6x8", 2); + g.drawString(diffDays,this.x+6,this.y+4); + } + //large if number has 1 digit (positive number) + if (diffDays <= 9 && diffDays >= 0) { + g.setFont("6x8", 2); + g.drawString(diffDays,this.x+13,this.y+4); + } + //large if number has 1 digit (negative number) + if (diffDays <= -1 && diffDays >= -9) { + g.setFont("6x8", 2); + g.drawString(diffDays,this.x+5,this.y+4); + } + //large if number has 2 digits (negative number) + if (diffDays <= -10 && diffDays >= -99) { + g.setFont("6x8", 2); + g.drawString(diffDays,this.x,this.y+4); + } + //large if number has 3 digits or more (negative number) + if (diffDays <= -100) { + g.setFont("6x8", 1); + g.drawString(diffDays,this.x,this.y+7); + } +} + +//draw widget +WIDGETS["widdaysl"]={area:"tl",width:width,draw:drawWidget}; + +setTimeout(function() { + Bangle.loadWidgets(); + WIDGETS["widdaysl"].draw(WIDGETS["widdaysl"]); + }, todayMorning + oneDay - today + 1000); // update at next noon \ No newline at end of file diff --git a/apps/widget.png b/apps/widget.png new file mode 100644 index 0000000000000000000000000000000000000000..70aa664e4951e9ad02b3840004e0edbb42aa0274 GIT binary patch literal 1043 zcmV+u1nm2XP)z#5?V?Eh00b*1C7%MvebBLgk__$G(3?!Vn;(l&?N_;PJ24OUI%z zu!N6+F2E^-7*f$FmyVJFz`5$UTT!DdI$ExVowL#}7wP%foJAdnsNXUFoPpmW$Pn9G1YM;w5l{%@%R3xH5sjf>T3 zHVYQL3TX}pr_UP%bxB|WKD}UIbC}Mys_2+nUTam6NlDB*m!1Ne!@-93E`+7HDyZnp zoUms#=3GW|AuNKrPA7Gp&itLLprg8x-7(zt223a1$kn*w&RSUxZntISd)HT>W?;Rk z8CY+M-pE#nF2)(2nByn6A73~|Q-elZOFjGdY~iVg+p(_kULz&AJz>T#-(te$XXv$k zs%fYh2t<}Rb@~#%@KQP!ipB^YUo&#i%O~fi%aZhJlne+VcyMbA07v(C zv3FbQII1W3(d7f+iYJm`Af8O72DDn}aMUw~?*lhOe>3v)bqraZ_ra1Y@XjlJ7*cZGx5(hI zn`<|9MknX#*xbm|k93wJ$2BQS1*}5Q-P*{({*H8P@=CBA(s?Pm0`WwWm);v^Wrm!3 zv6r1)sh=1jJ(lj5yi=!;O|!7e*^Fy848VtHT@3WK5nW6$HZ`B_*SowoR2roz^zz{z znwHo3P&CHb?`Ao7@dgPawOQ?QHgjZO<>x;rKE&Ovjl6rjpWz7)lYa#9hhx~R0%vO@ zk3G=JKz}=0k-u3~seKc#H@OT%s+vV%+%^lE8<31vG!-S}*Je>u16E<26i}U=s4)DR zVSCf8!PLOO_IkIG)E*M>IS{UBYHJe)`I%;DeNWyeJnNW8jT$v7#XpmfZd3Da;PC(e N002ovPDHLkV1n(i@o@kE literal 0 HcmV?d00001 From e39aaad4162bc62675d3b2563b7d712fbfb9d770 Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Tue, 15 Mar 2022 08:27:07 +0100 Subject: [PATCH 16/39] Delete daysleft.json --- apps/daysleft.json | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 apps/daysleft.json diff --git a/apps/daysleft.json b/apps/daysleft.json deleted file mode 100644 index c2349db0b..000000000 --- a/apps/daysleft.json +++ /dev/null @@ -1,9 +0,0 @@ -[ - { "day": 25, "month": 2, "year": 2022 }, // Urlaub Essen - { "day": 2, "month": 3, "year": 2022 }, // Aschermittwoch - { "day": 27, "month": 3, "year": 2022 }, // Sommerzeit - { "day": 16, "month": 4, "year": 2022 }, // Ostersamstag - { "day": 3, "month": 6, "year": 2022 }, // Kalamata - { "day": 17, "month": 7, "year": 2022 }, // Exerzitien - { "day": 31, "month":12, "year": 2022 } // Sylvester -] \ No newline at end of file From efdfac11f862b403a505c2e6e00e090a2dcff483 Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Tue, 15 Mar 2022 08:27:27 +0100 Subject: [PATCH 17/39] Delete metadata.json --- apps/metadata.json | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 apps/metadata.json diff --git a/apps/metadata.json b/apps/metadata.json deleted file mode 100644 index b3cff5eb8..000000000 --- a/apps/metadata.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "id": "widdaysleft", - "name": "Days Left", - "version": "0.01", - "description": "Read daysleft.json and show number of days left until first date, which lies in the future", - "icon": "widget.png", - "type": "widget", - "tags": "widget,tools", - "supports": ["BANGLEJS2"], - "storage": [ - {"name":"widdaysleft.wid.js","url":"widget.js"} - ] -} From 3235bf1772c6077f012a4598e5a6220cb72d0ae6 Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Tue, 15 Mar 2022 08:27:42 +0100 Subject: [PATCH 18/39] Delete widdaysl.wid.js --- apps/widdaysl.wid.js | 78 -------------------------------------------- 1 file changed, 78 deletions(-) delete mode 100644 apps/widdaysl.wid.js diff --git a/apps/widdaysl.wid.js b/apps/widdaysl.wid.js deleted file mode 100644 index 0fc0e24b2..000000000 --- a/apps/widdaysl.wid.js +++ /dev/null @@ -1,78 +0,0 @@ -const storage = require('Storage'); -let settings; -let height = 23; -let width = 34; - -var debug = 0; //1 = show debug info - -settings = storage.readJSON('daysleft.json',1); //read storage -if (!settings) print("no daysleft.json found"); -var i = 0; -const oneDay = 24 * 60 * 60 * 1000; // hours*minutes*seconds*milliseconds -const today = new Date(); //includes current time -const currentYear = today.getFullYear(); -const currentMonth = today.getMonth(); -const currentDay = today.getDate(); -const todayMorning = new Date (currentYear, currentMonth, currentDay, 0, 0, 0); //create date object with today, but 00:00:00 -do { - var target = settings[i]; - if (target) { - var dd = target.day, - mm = target.month-1, //-1 because month is zero-based - yy = target.year; - const targetDate = new Date(yy, mm, dd); //is 00:00 - i += 1; - } -} while (target && todayMorning >= targetDate); - -const diffDays = (target ? (targetDate - todayMorning) / oneDay : 0); //calculate day difference - -function drawWidget() { - if (debug == 1) g.drawRect(this.x,this.y,this.x+width,this.y+height); //draw rectangle around widget area - g.reset(); - - //define font size and string position - //small if number has more than 3 digits (positive number) - if (diffDays >= 1000) { - g.setFont("6x8", 1); - g.drawString(diffDays,this.x+10,this.y+7); - } - //large if number has 3 digits (positive number) - if (diffDays <= 999 && diffDays >= 100) { - g.setFont("6x8", 2); - g.drawString(diffDays,this.x,this.y+4); - } - //large if number has 2 digits (positive number) - if (diffDays <= 99 && diffDays >= 10) { - g.setFont("6x8", 2); - g.drawString(diffDays,this.x+6,this.y+4); - } - //large if number has 1 digit (positive number) - if (diffDays <= 9 && diffDays >= 0) { - g.setFont("6x8", 2); - g.drawString(diffDays,this.x+13,this.y+4); - } - //large if number has 1 digit (negative number) - if (diffDays <= -1 && diffDays >= -9) { - g.setFont("6x8", 2); - g.drawString(diffDays,this.x+5,this.y+4); - } - //large if number has 2 digits (negative number) - if (diffDays <= -10 && diffDays >= -99) { - g.setFont("6x8", 2); - g.drawString(diffDays,this.x,this.y+4); - } - //large if number has 3 digits or more (negative number) - if (diffDays <= -100) { - g.setFont("6x8", 1); - g.drawString(diffDays,this.x,this.y+7); - } -} - -//draw widget -WIDGETS["widdaysl"]={area:"tl",width:width,draw:drawWidget}; - -setTimeout(function() { - Bangle.loadWidgets(); - WIDGETS["widdaysl"].draw(WIDGETS["widdaysl"]); - }, todayMorning + oneDay - today + 1000); // update at next noon \ No newline at end of file From 7fce40bf45cd21893b21474a4321b4fcfa782fe7 Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Tue, 15 Mar 2022 08:28:04 +0100 Subject: [PATCH 19/39] Delete widget.png --- apps/widget.png | Bin 1043 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 apps/widget.png diff --git a/apps/widget.png b/apps/widget.png deleted file mode 100644 index 70aa664e4951e9ad02b3840004e0edbb42aa0274..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1043 zcmV+u1nm2XP)z#5?V?Eh00b*1C7%MvebBLgk__$G(3?!Vn;(l&?N_;PJ24OUI%z zu!N6+F2E^-7*f$FmyVJFz`5$UTT!DdI$ExVowL#}7wP%foJAdnsNXUFoPpmW$Pn9G1YM;w5l{%@%R3xH5sjf>T3 zHVYQL3TX}pr_UP%bxB|WKD}UIbC}Mys_2+nUTam6NlDB*m!1Ne!@-93E`+7HDyZnp zoUms#=3GW|AuNKrPA7Gp&itLLprg8x-7(zt223a1$kn*w&RSUxZntISd)HT>W?;Rk z8CY+M-pE#nF2)(2nByn6A73~|Q-elZOFjGdY~iVg+p(_kULz&AJz>T#-(te$XXv$k zs%fYh2t<}Rb@~#%@KQP!ipB^YUo&#i%O~fi%aZhJlne+VcyMbA07v(C zv3FbQII1W3(d7f+iYJm`Af8O72DDn}aMUw~?*lhOe>3v)bqraZ_ra1Y@XjlJ7*cZGx5(hI zn`<|9MknX#*xbm|k93wJ$2BQS1*}5Q-P*{({*H8P@=CBA(s?Pm0`WwWm);v^Wrm!3 zv6r1)sh=1jJ(lj5yi=!;O|!7e*^Fy848VtHT@3WK5nW6$HZ`B_*SowoR2roz^zz{z znwHo3P&CHb?`Ao7@dgPawOQ?QHgjZO<>x;rKE&Ovjl6rjpWz7)lYa#9hhx~R0%vO@ zk3G=JKz}=0k-u3~seKc#H@OT%s+vV%+%^lE8<31vG!-S}*Je>u16E<26i}U=s4)DR zVSCf8!PLOO_IkIG)E*M>IS{UBYHJe)`I%;DeNWyeJnNW8jT$v7#XpmfZd3Da;PC(e N002ovPDHLkV1n(i@o@kE From 87e2f95af3069764241f55c632fa2c43f7b6bc73 Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Tue, 15 Mar 2022 08:29:18 +0100 Subject: [PATCH 20/39] Create widget.js --- apps/widdaysleft/widget.js | 78 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 apps/widdaysleft/widget.js diff --git a/apps/widdaysleft/widget.js b/apps/widdaysleft/widget.js new file mode 100644 index 000000000..1bc891690 --- /dev/null +++ b/apps/widdaysleft/widget.js @@ -0,0 +1,78 @@ +const storage = require('Storage'); +let settings; +let height = 23; +let width = 34; + +var debug = 0; //1 = show debug info + +settings = storage.readJSON('daysleft.json',1); //read storage +if (!settings) print("no daysleft.json found"); +var i = 0; +const oneDay = 24 * 60 * 60 * 1000; // hours*minutes*seconds*milliseconds +const today = new Date(); //includes current time +const currentYear = today.getFullYear(); +const currentMonth = today.getMonth(); +const currentDay = today.getDate(); +const todayMorning = new Date (currentYear, currentMonth, currentDay, 0, 0, 0); //create date object with today, but 00:00:00 +do { + var target = settings[i]; + if (target) { + var dd = target.day, + mm = target.month-1, //-1 because month is zero-based + yy = target.year; + const targetDate = new Date(yy, mm, dd); //is 00:00 + i += 1; + } +} while (target && todayMorning >= targetDate); + +const diffDays = (target ? (targetDate - todayMorning) / oneDay : 0); //calculate day difference + +function drawWidget() { + if (debug == 1) g.drawRect(this.x,this.y,this.x+width,this.y+height); //draw rectangle around widget area + g.reset(); + + //define font size and string position + //small if number has more than 3 digits (positive number) + if (diffDays >= 1000) { + g.setFont("6x8", 1); + g.drawString(diffDays,this.x+10,this.y+7); + } + //large if number has 3 digits (positive number) + if (diffDays <= 999 && diffDays >= 100) { + g.setFont("6x8", 2); + g.drawString(diffDays,this.x,this.y+4); + } + //large if number has 2 digits (positive number) + if (diffDays <= 99 && diffDays >= 10) { + g.setFont("6x8", 2); + g.drawString(diffDays,this.x+6,this.y+4); + } + //large if number has 1 digit (positive number) + if (diffDays <= 9 && diffDays >= 0) { + g.setFont("6x8", 2); + g.drawString(diffDays,this.x+13,this.y+4); + } + //large if number has 1 digit (negative number) + if (diffDays <= -1 && diffDays >= -9) { + g.setFont("6x8", 2); + g.drawString(diffDays,this.x+5,this.y+4); + } + //large if number has 2 digits (negative number) + if (diffDays <= -10 && diffDays >= -99) { + g.setFont("6x8", 2); + g.drawString(diffDays,this.x,this.y+4); + } + //large if number has 3 digits or more (negative number) + if (diffDays <= -100) { + g.setFont("6x8", 1); + g.drawString(diffDays,this.x,this.y+7); + } +} + +//draw widget +WIDGETS["widdaysl"]={area:"tl",width:width,draw:drawWidget}; + +setTimeout(function() { + Bangle.loadWidgets(); + WIDGETS["widdaysl"].draw(WIDGETS["widdaysl"]); + }, todayMorning + oneDay - today + 1000); // update at next noon From b93d32cb4ab84ffa975f986d9f41bf589a2e9933 Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Tue, 15 Mar 2022 08:30:02 +0100 Subject: [PATCH 21/39] Add files via upload --- apps/widdaysleft/daysleft.json | 9 +++++++++ apps/widdaysleft/metadata.json | 13 +++++++++++++ apps/widdaysleft/widget.png | Bin 0 -> 1043 bytes 3 files changed, 22 insertions(+) create mode 100644 apps/widdaysleft/daysleft.json create mode 100644 apps/widdaysleft/metadata.json create mode 100644 apps/widdaysleft/widget.png diff --git a/apps/widdaysleft/daysleft.json b/apps/widdaysleft/daysleft.json new file mode 100644 index 000000000..c2349db0b --- /dev/null +++ b/apps/widdaysleft/daysleft.json @@ -0,0 +1,9 @@ +[ + { "day": 25, "month": 2, "year": 2022 }, // Urlaub Essen + { "day": 2, "month": 3, "year": 2022 }, // Aschermittwoch + { "day": 27, "month": 3, "year": 2022 }, // Sommerzeit + { "day": 16, "month": 4, "year": 2022 }, // Ostersamstag + { "day": 3, "month": 6, "year": 2022 }, // Kalamata + { "day": 17, "month": 7, "year": 2022 }, // Exerzitien + { "day": 31, "month":12, "year": 2022 } // Sylvester +] \ No newline at end of file diff --git a/apps/widdaysleft/metadata.json b/apps/widdaysleft/metadata.json new file mode 100644 index 000000000..b3cff5eb8 --- /dev/null +++ b/apps/widdaysleft/metadata.json @@ -0,0 +1,13 @@ +{ + "id": "widdaysleft", + "name": "Days Left", + "version": "0.01", + "description": "Read daysleft.json and show number of days left until first date, which lies in the future", + "icon": "widget.png", + "type": "widget", + "tags": "widget,tools", + "supports": ["BANGLEJS2"], + "storage": [ + {"name":"widdaysleft.wid.js","url":"widget.js"} + ] +} diff --git a/apps/widdaysleft/widget.png b/apps/widdaysleft/widget.png new file mode 100644 index 0000000000000000000000000000000000000000..70aa664e4951e9ad02b3840004e0edbb42aa0274 GIT binary patch literal 1043 zcmV+u1nm2XP)z#5?V?Eh00b*1C7%MvebBLgk__$G(3?!Vn;(l&?N_;PJ24OUI%z zu!N6+F2E^-7*f$FmyVJFz`5$UTT!DdI$ExVowL#}7wP%foJAdnsNXUFoPpmW$Pn9G1YM;w5l{%@%R3xH5sjf>T3 zHVYQL3TX}pr_UP%bxB|WKD}UIbC}Mys_2+nUTam6NlDB*m!1Ne!@-93E`+7HDyZnp zoUms#=3GW|AuNKrPA7Gp&itLLprg8x-7(zt223a1$kn*w&RSUxZntISd)HT>W?;Rk z8CY+M-pE#nF2)(2nByn6A73~|Q-elZOFjGdY~iVg+p(_kULz&AJz>T#-(te$XXv$k zs%fYh2t<}Rb@~#%@KQP!ipB^YUo&#i%O~fi%aZhJlne+VcyMbA07v(C zv3FbQII1W3(d7f+iYJm`Af8O72DDn}aMUw~?*lhOe>3v)bqraZ_ra1Y@XjlJ7*cZGx5(hI zn`<|9MknX#*xbm|k93wJ$2BQS1*}5Q-P*{({*H8P@=CBA(s?Pm0`WwWm);v^Wrm!3 zv6r1)sh=1jJ(lj5yi=!;O|!7e*^Fy848VtHT@3WK5nW6$HZ`B_*SowoR2roz^zz{z znwHo3P&CHb?`Ao7@dgPawOQ?QHgjZO<>x;rKE&Ovjl6rjpWz7)lYa#9hhx~R0%vO@ zk3G=JKz}=0k-u3~seKc#H@OT%s+vV%+%^lE8<31vG!-S}*Je>u16E<26i}U=s4)DR zVSCf8!PLOO_IkIG)E*M>IS{UBYHJe)`I%;DeNWyeJnNW8jT$v7#XpmfZd3Da;PC(e N002ovPDHLkV1n(i@o@kE literal 0 HcmV?d00001 From fe8aa5dea738f5804b701c40c70f28d0d99c5117 Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Tue, 15 Mar 2022 08:31:35 +0100 Subject: [PATCH 22/39] Update metadata.json --- apps/widdaysleft/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/widdaysleft/metadata.json b/apps/widdaysleft/metadata.json index b3cff5eb8..8fdcc2aca 100644 --- a/apps/widdaysleft/metadata.json +++ b/apps/widdaysleft/metadata.json @@ -8,6 +8,6 @@ "tags": "widget,tools", "supports": ["BANGLEJS2"], "storage": [ - {"name":"widdaysleft.wid.js","url":"widget.js"} + {"name":"widdaysleft.wid.js","url":"widget.js", "settings":"daysleft.json"} ] } From 6fde81d0e3f9259ab5ecdc747dcb43c4e423b57b Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Tue, 15 Mar 2022 08:32:40 +0100 Subject: [PATCH 23/39] Update metadata.json --- apps/widdaysleft/metadata.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/widdaysleft/metadata.json b/apps/widdaysleft/metadata.json index 8fdcc2aca..2573416a1 100644 --- a/apps/widdaysleft/metadata.json +++ b/apps/widdaysleft/metadata.json @@ -8,6 +8,7 @@ "tags": "widget,tools", "supports": ["BANGLEJS2"], "storage": [ - {"name":"widdaysleft.wid.js","url":"widget.js", "settings":"daysleft.json"} + {"name":"widdaysleft.wid.js","url":"widget.js"}, + {"settings":"daysleft.json"} ] } From 0248ce33d1c215a58804780473779819f5f2a138 Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Tue, 15 Mar 2022 08:35:24 +0100 Subject: [PATCH 24/39] Update metadata.json --- apps/widdaysleft/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/widdaysleft/metadata.json b/apps/widdaysleft/metadata.json index 2573416a1..76b0f967a 100644 --- a/apps/widdaysleft/metadata.json +++ b/apps/widdaysleft/metadata.json @@ -9,6 +9,6 @@ "supports": ["BANGLEJS2"], "storage": [ {"name":"widdaysleft.wid.js","url":"widget.js"}, - {"settings":"daysleft.json"} + {"name":"daysleft.json", "url":"daysleft.json"} ] } From 91f360aa3f59add862465439cd47058be129dd6c Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Tue, 15 Mar 2022 08:49:07 +0100 Subject: [PATCH 25/39] Update mylocation.app.js --- apps/mylocation/mylocation.app.js | 33 ++++++++++++++----------------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/apps/mylocation/mylocation.app.js b/apps/mylocation/mylocation.app.js index 27ab17ea5..b26abb5ec 100644 --- a/apps/mylocation/mylocation.app.js +++ b/apps/mylocation/mylocation.app.js @@ -6,38 +6,35 @@ let settings; // initialize with default settings... let s = { - 'lat': 51.5072, - 'lon': 0.1276, - 'location': "London" -}; + 'lat': 53.322659, + 'lon': 10.14107, + 'location': "Pattensen" +} function loadSettings() { - settings = require('Storage').readJSON(SETTINGS_FILE, 1) || {}; - for (const key in settings) { - s[key] = settings[key] - } + settings = require('Storage').readJSON(SETTINGS_FILE, 1) || s; } function save() { - settings = s; - require('Storage').write(SETTINGS_FILE, settings); + settings = s + require('Storage').write(SETTINGS_FILE, settings) } -const locations = ["London" ,"Newcastle","Edinburgh", "Paris" , "New York" , "Tokyo" , "Frankfurt", "Auckland", "???"]; -const lats = [ 51.5072 , 54.9783 , 55.9533 , 48.8566 , 40.7128 , 35.6762 , 50.1236 , -36.9 , 0.0 ]; -const lons = [ -0.1276 , -1.6178 , -3.1883 , 2.3522 , -74.0060 , 139.6503 , 8.6553 , 174.7832 , 0.0 ]; +const locations = ["Pattensen","Essen", "Kalamata", "???"]; +const lats = [ 53.322659, 51.46302, 37.04006, 0.0]; +const lons = [ 10.14107, 6.99891, 22.11535, 0.0]; function setFromGPS() { Bangle.on('GPS', (gps) => { //console.log("."); if (gps.fix === 0) return; //console.log("fix from GPS"); - s = {'lat': gps.lat, 'lon': gps.lon, 'location': '???' }; + s = {'lat': gps.lat, 'lon': gps.lon, 'location': '???' } Bangle.buzz(1500); // buzz on first position Bangle.setGPSPower(0); save(); - Bangle.setUI("updown", ()=>{ load(); }); + Bangle.setUI("updown", ()=>{ load() }); E.showPrompt("Location has been saved from the GPS fix",{ title:"Location Saved", buttons : {"OK":1} @@ -52,13 +49,13 @@ function setFromGPS() { } function showMainMenu() { - //console.log("showMainMenu"); + console.log("showMainMenu"); const mainmenu = { '': { 'title': 'My Location' }, '{ load(); }, 'City': { value: 0 | locations.indexOf(s.location), - min: 0, max: locations.length - 1, + min: 0, max: 6, format: v => locations[v], onchange: v => { if (v != 6) { @@ -70,7 +67,7 @@ function showMainMenu() { } }, 'Set From GPS': ()=>{ setFromGPS(); } - }; + } return E.showMenu(mainmenu); } From a0d5ec5d30688bc457dce009eb215b2e7d33d7e8 Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Tue, 15 Mar 2022 08:54:48 +0100 Subject: [PATCH 26/39] Update widget.js --- apps/widmp/widget.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/widmp/widget.js b/apps/widmp/widget.js index 6da572aab..966b5d7ea 100644 --- a/apps/widmp/widget.js +++ b/apps/widmp/widget.js @@ -2,7 +2,7 @@ WIDGETS["widmoon"] = { area: "tr", width: 24, draw: function() { const CenterX = this.x + 12, CenterY = this.y + 12, Radius = 11; var southernHemisphere = false; // when in southern hemisphere, use the "My Location" App - const simulate = false; // simulate one month in one minute + const simulate = true; // simulate one month in one minute const updateR = 1000; // update every x ms in simulation function moonPhase() { From 139029af0b047aba01ee3224e8d4fb06cd6784c2 Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Tue, 15 Mar 2022 09:03:27 +0100 Subject: [PATCH 27/39] Update widget.js --- apps/widmp/widget.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/widmp/widget.js b/apps/widmp/widget.js index 966b5d7ea..6da572aab 100644 --- a/apps/widmp/widget.js +++ b/apps/widmp/widget.js @@ -2,7 +2,7 @@ WIDGETS["widmoon"] = { area: "tr", width: 24, draw: function() { const CenterX = this.x + 12, CenterY = this.y + 12, Radius = 11; var southernHemisphere = false; // when in southern hemisphere, use the "My Location" App - const simulate = true; // simulate one month in one minute + const simulate = false; // simulate one month in one minute const updateR = 1000; // update every x ms in simulation function moonPhase() { From 39d256ff6f6dce5a406b8e17e33ed3398ff7a4b9 Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Tue, 15 Mar 2022 09:16:02 +0100 Subject: [PATCH 28/39] Create metadata.json --- apps/sunclock/metadata.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 apps/sunclock/metadata.json diff --git a/apps/sunclock/metadata.json b/apps/sunclock/metadata.json new file mode 100644 index 000000000..a0afcc786 --- /dev/null +++ b/apps/sunclock/metadata.json @@ -0,0 +1,15 @@ +{ + "id": "sunclock", + "name": "Sun Clock", + "version": "0.01", + "description": "A clock with sunset/sunrise, sun height/azimuth", + "icon": "app.png", + "type": "clock", + "tags": "clock", + "supports": ["BANGLEJS2"], + "allow_emulator": true, + "storage": [ + {"name":"sunclock.app.js","url":"app.js"}, + {"name":"sunclock.img","url":"app-icon.js","evaluate":true} + ] +} From b89b2dee50a35a59e80cbd32af3c651ea98be667 Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Tue, 15 Mar 2022 09:18:19 +0100 Subject: [PATCH 29/39] Create app-icon.js --- apps/sunclock/app-icon.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/sunclock/app-icon.js diff --git a/apps/sunclock/app-icon.js b/apps/sunclock/app-icon.js new file mode 100644 index 000000000..977aec98d --- /dev/null +++ b/apps/sunclock/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("kEgwhC/AC8N6APo7oPJBQndBQYPEhoaFAogZIEokO93u8AuGAAYOCCAgOLCBQOFAAIeNEBAPPBw4wHB5wuIGAwPthGIxwIC8UowUuB4eIwAPBxEk91CAgIGGwAhBBYeCAwMoA4ZwEBIIOCAxAA/ABwA=")) From a11f10d855c96b8fdd8cf12b71037310fa5844ee Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Tue, 15 Mar 2022 09:19:14 +0100 Subject: [PATCH 30/39] Add files via upload --- apps/sunclock/app.js | 79 ++++++++++++++++++++++++++++++++++++++++++ apps/sunclock/app.png | Bin 0 -> 776 bytes 2 files changed, 79 insertions(+) create mode 100644 apps/sunclock/app.js create mode 100644 apps/sunclock/app.png diff --git a/apps/sunclock/app.js b/apps/sunclock/app.js new file mode 100644 index 000000000..1401c2a98 --- /dev/null +++ b/apps/sunclock/app.js @@ -0,0 +1,79 @@ +/* sclock.app.js for Bangle2 +Peter Bernschneider 30.12.2021 +Update current latitude and longitude in My Location app +Update current Timezone in Settings app, menu item "System" +Update for summer time by incrementing Timezone += 1 */ +setting = require("Storage").readJSON("setting.json",1); +E.setTimeZone(setting.timezone); // timezone = 1 for MEZ, = 2 for MESZ +SunCalc = require("suncalc.js"); +loc = require('locale'); +const LOCATION_FILE = "mylocation.json"; +const xyCenter = g.getWidth() / 2 + 3; +const yposTime = 60; +const yposDate = 100; +const yposRS = 135; +const yposPos = 160; +var rise = "07:00"; +var set = "20:00"; +var pos = {altitude: 20, azimuth: 135}; +var noonpos = {altitude: 37, azimuth: 180}; +let idTimeout = null; + +function updatePos() { + coord = require("Storage").readJSON(LOCATION_FILE,1)|| {"lat":53.3,"lon":10.1,"location":"Pattensen"}; + pos = SunCalc.getPosition(Date.now(), coord.lat, coord.lon); + times = SunCalc.getTimes(Date.now(), coord.lat, coord.lon); + rise = times.sunrise.toString().split(" ")[4].substr(0,5); + set = times.sunset.toString().split(" ")[4].substr(0,5); + noonpos = SunCalc.getPosition(times.solarNoon, coord.lat, coord.lon); +} + +function drawSimpleClock() { + var d = new Date(); // get date + var da = d.toString().split(" "); + g.clear(); + Bangle.drawWidgets(); + g.reset(); // default draw styles + g.setFontAlign(0, 0); // drawSting centered + + var time = da[4].substr(0, 5); // draw time + + g.setFont("Vector",60); + g.drawString(time, xyCenter, yposTime, true); + + var date = [loc.dow(new Date(),1), loc.date(d,1)].join(" "); // draw Day, name of month, Date + g.setFont("Vector",24); + g.drawString(date, xyCenter, yposDate, true); + + g.setFont("Vector",25); + g.drawString(`${rise} ${set}`, xyCenter, yposRS, true); // draw riseset + g.drawImage(require("Storage").read("sunrise.img"), xyCenter-16, yposRS-16); + + g.setFont("Vector",21); + g.drawString(`H${pos.altitude}/${noonpos.altitude} Az${pos.azimuth}`, xyCenter, yposPos, true); // draw sun pos + + let t = d.getSeconds()*1000 + d.getMilliseconds(); + idTimeout = setTimeout(drawSimpleClock, 60000 - t); // time till next minute +} + +// special function to handle display switch on +Bangle.on('lcdPower', function(on){ + if (on) { + drawSimpleClock(); + } else { + if(idTimeout) { + clearTimeout(idTimeout); + } + } +}); + +g.clear(); // clean app screen +Bangle.loadWidgets(); +Bangle.drawWidgets(); + +setInterval(updatePos, 60*15E3); // refesh every 15 mins + +updatePos(); +drawSimpleClock(); // draw now + +setWatch(Bangle.showLauncher, BTN1, { repeat: false, edge: "falling" }); // Show launcher when button pressed \ No newline at end of file diff --git a/apps/sunclock/app.png b/apps/sunclock/app.png new file mode 100644 index 0000000000000000000000000000000000000000..72c5b10d53f98912d0bcea5c7eec61ee215bcbee GIT binary patch literal 776 zcmV+j1NZ!iP)Qc8qH1%iQMDNbXAnjaZ{>(!al!i$Z0Z&w|m zf_dPs-t+$6-+9lu@4XNu%KuELTx}1PtL>3!*duZvDT*i`uth2mDeF2AIz3AwuK zLuTT(Mt^~YL3E8=pj#-ES{rEak4m34Ff$0o}k4v ziR07X!_p>!PN8tZ=tzat4gh2aPG+6gfEvJMv3v%&LHyipahN$PZA%04RopHR%|QM} z%!bhk@{A~+|GH%Zdhz%CYV~Fr0$KPc6Q*-OcHq=^zSZIYX&{a39_XSfxu;#SA-c@{ksuJP9`+tOMJlo9bGI+ z2mOngJesKB=~NlgWPl1J-h?JDB-WGR=mR7HO{HbZ%fpFFK}|Yh!d4Fis$8B`rSv;f zNs5geDMXcka!h7~KvEe0`b(Ch_g38U%yWQwyQ`#kF{}FBY|(Bra{xl{Qiix26QXB1 z-sK;-C>9J?dmGvh>}2HLXDuV|TQJq3utZwy;7qE0@N=f)V|C5B>o1J*YMW|H`e(9k z4lk$g9a>6vElE4c_OS)GZEEaCDCx?Z%IwFc?xIBbTl@s$D(DmEAVu;30000 Date: Tue, 15 Mar 2022 09:22:07 +0100 Subject: [PATCH 31/39] Add files via upload --- modules/suncalc.js | 298 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 298 insertions(+) create mode 100644 modules/suncalc.js diff --git a/modules/suncalc.js b/modules/suncalc.js new file mode 100644 index 000000000..b1af0a0d9 --- /dev/null +++ b/modules/suncalc.js @@ -0,0 +1,298 @@ +/* Module suncalc.js + (c) 2011-2015, Vladimir Agafonkin + SunCalc is a JavaScript library for calculating sun/moon position and light phases. + https://github.com/mourner/suncalc + +PB: Usage: +E.setTimeZone(2); // 1 = MEZ, 2 = MESZ +SunCalc = require("suncalc.js"); +pos = SunCalc.getPosition(Date.now(), 53.3, 10.1); +times = SunCalc.getTimes(Date.now(), 53.3, 10.1); +rise = times.sunrise; // Date object +rise_str = rise.getHours() + ':' + rise.getMinutes(); //hh:mm +*/ +var exports={}; + +// shortcuts for easier to read formulas + +var PI = Math.PI, + sin = Math.sin, + cos = Math.cos, + tan = Math.tan, + asin = Math.asin, + atan = Math.atan2, + acos = Math.acos, + rad = PI / 180; + +// sun calculations are based on http://aa.quae.nl/en/reken/zonpositie.html formulas + +// date/time constants and conversions + +var dayMs = 1000 * 60 * 60 * 24, + J1970 = 2440588, + J2000 = 2451545; + +function toJulian(date) { return date.valueOf() / dayMs - 0.5 + J1970; } +function fromJulian(j) { return new Date((j + 0.5 - J1970) * dayMs); } // PB: onece removed + 0.5; included it again 4 Jan 2021 +function toDays(date) { return toJulian(date) - J2000; } + + +// general calculations for position + +var e = rad * 23.4397; // obliquity of the Earth + +function rightAscension(l, b) { return atan(sin(l) * cos(e) - tan(b) * sin(e), cos(l)); } +function declination(l, b) { return asin(sin(b) * cos(e) + cos(b) * sin(e) * sin(l)); } + +function azimuth(H, phi, dec) { return atan(sin(H), cos(H) * sin(phi) - tan(dec) * cos(phi)); } +function altitude(H, phi, dec) { return asin(sin(phi) * sin(dec) + cos(phi) * cos(dec) * cos(H)); } + +function siderealTime(d, lw) { return rad * (280.16 + 360.9856235 * d) - lw; } + +function astroRefraction(h) { + if (h < 0) // the following formula works for positive altitudes only. + h = 0; // if h = -0.08901179 a div/0 would occur. + + // formula 16.4 of "Astronomical Algorithms" 2nd edition by Jean Meeus (Willmann-Bell, Richmond) 1998. + // 1.02 / tan(h + 10.26 / (h + 5.10)) h in degrees, result in arc minutes -> converted to rad: + return 0.0002967 / Math.tan(h + 0.00312536 / (h + 0.08901179)); +} + +// general sun calculations + +function solarMeanAnomaly(d) { return rad * (357.5291 + 0.98560028 * d); } + +function eclipticLongitude(M) { + + var C = rad * (1.9148 * sin(M) + 0.02 * sin(2 * M) + 0.0003 * sin(3 * M)), // equation of center + P = rad * 102.9372; // perihelion of the Earth + + return M + C + P + PI; +} + +function sunCoords(d) { + + var M = solarMeanAnomaly(d), + L = eclipticLongitude(M); + + return { + dec: declination(L, 0), + ra: rightAscension(L, 0) + }; +} + +// calculates sun position for a given date and latitude/longitude + +exports.getPosition = function (date, lat, lng) { + + var lw = rad * -lng, + phi = rad * lat, + d = toDays(date), + + c = sunCoords(d), + H = siderealTime(d, lw) - c.ra; + + return { + azimuth: Math.round((azimuth(H, phi, c.dec) / rad + 180) % 360), // PB: converted to deg + altitude: Math.round( altitude(H, phi, c.dec) / rad) // PB: converted to deg + }; +}; + + +// sun times configuration (angle, morning name, evening name) + +var times = [ + [-0.833, 'sunrise', 'sunset' ] +]; + +// calculations for sun times +var J0 = 0.0009; + +function julianCycle(d, lw) { return Math.round(d - J0 - lw / (2 * PI)); } + +function approxTransit(Ht, lw, n) { return J0 + (Ht + lw) / (2 * PI) + n; } +function solarTransitJ(ds, M, L) { return J2000 + ds + 0.0053 * sin(M) - 0.0069 * sin(2 * L); } + +function hourAngle(h, phi, d) { return acos((sin(h) - sin(phi) * sin(d)) / (cos(phi) * cos(d))); } +function observerAngle(height) { return -2.076 * Math.sqrt(height) / 60; } + +// returns set time for the given sun altitude +function getSetJ(h, lw, phi, dec, n, M, L) { + + var w = hourAngle(h, phi, dec), + a = approxTransit(w, lw, n); + return solarTransitJ(a, M, L); +} + + +// calculates sun times for a given date, latitude/longitude, and, optionally, +// the observer height (in meters) relative to the horizon + +exports.getTimes = function (date, lat, lng, height) { + + height = height || 0; + + var lw = rad * -lng, + phi = rad * lat, + + dh = observerAngle(height), + + d = toDays(date), + n = julianCycle(d, lw), + ds = approxTransit(0, lw, n), + + M = solarMeanAnomaly(ds), + L = eclipticLongitude(M), + dec = declination(L, 0), + + Jnoon = solarTransitJ(ds, M, L), + + i, len, time, h0, Jset, Jrise; + + + var result = { + solarNoon: fromJulian(Jnoon), + nadir: fromJulian(Jnoon - 0.5) + }; + + for (i = 0, len = times.length; i < len; i += 1) { + time = times[i]; + h0 = (time[0] + dh) * rad; + + Jset = getSetJ(h0, lw, phi, dec, n, M, L); + Jrise = Jnoon - (Jset - Jnoon); + + result[time[1]] = fromJulian(Jrise); + result[time[2]] = fromJulian(Jset); + } + + return result; +}; + + +// moon calculations, based on http://aa.quae.nl/en/reken/hemelpositie.html formulas + +function moonCoords(d) { // geocentric ecliptic coordinates of the moon + + var L = rad * (218.316 + 13.176396 * d), // ecliptic longitude + M = rad * (134.963 + 13.064993 * d), // mean anomaly + F = rad * (93.272 + 13.229350 * d), // mean distance + + l = L + rad * 6.289 * sin(M), // longitude + b = rad * 5.128 * sin(F), // latitude + dt = 385001 - 20905 * cos(M); // distance to the moon in km + + return { + ra: rightAscension(l, b), + dec: declination(l, b), + dist: dt + }; +} + +getMoonPosition = function (date, lat, lng) { + + var lw = rad * -lng, + phi = rad * lat, + d = toDays(date), + + c = moonCoords(d), + H = siderealTime(d, lw) - c.ra, + h = altitude(H, phi, c.dec), + // formula 14.1 of "Astronomical Algorithms" 2nd edition by Jean Meeus (Willmann-Bell, Richmond) 1998. + pa = atan(sin(H), tan(phi) * cos(c.dec) - sin(c.dec) * cos(H)); + + h = h + astroRefraction(h); // altitude correction for refraction + + return { + azimuth: azimuth(H, phi, c.dec), + altitude: h, + distance: c.dist, + parallacticAngle: pa + }; +}; + + +// calculations for illumination parameters of the moon, +// based on http://idlastro.gsfc.nasa.gov/ftp/pro/astro/mphase.pro formulas and +// Chapter 48 of "Astronomical Algorithms" 2nd edition by Jean Meeus (Willmann-Bell, Richmond) 1998. + +getMoonIllumination = function (date) { + + var d = toDays(date || new Date()), + s = sunCoords(d), + m = moonCoords(d), + + sdist = 149598000, // distance from Earth to Sun in km + + phi = acos(sin(s.dec) * sin(m.dec) + cos(s.dec) * cos(m.dec) * cos(s.ra - m.ra)), + inc = atan(sdist * sin(phi), m.dist - sdist * cos(phi)), + angle = atan(cos(s.dec) * sin(s.ra - m.ra), sin(s.dec) * cos(m.dec) - + cos(s.dec) * sin(m.dec) * cos(s.ra - m.ra)); + + return { + fraction: (1 + cos(inc)) / 2, + phase: 0.5 + 0.5 * inc * (angle < 0 ? -1 : 1) / Math.PI, + angle: angle + }; +}; + + +function hoursLater(date, h) { + return new Date(date.valueOf() + h * dayMs / 24); +} + +// calculations for moon rise/set times are based on http://www.stargazing.net/kepler/moonrise.html article + +getMoonTimes = function (date, lat, lng, inUTC) { + var t = new Date(date); + if (inUTC) t.setUTCHours(0, 0, 0, 0); + else t.setHours(0, 0, 0, 0); + + var hc = 0.133 * rad, + h0 = SunCalc.getMoonPosition(t, lat, lng).altitude - hc, + h1, h2, rise, set, a, b, xe, ye, d, roots, x1, x2, dx; + + // go in 2-hour chunks, each time seeing if a 3-point quadratic curve crosses zero (which means rise or set) + for (var i = 1; i <= 24; i += 2) { + h1 = SunCalc.getMoonPosition(hoursLater(t, i), lat, lng).altitude - hc; + h2 = SunCalc.getMoonPosition(hoursLater(t, i + 1), lat, lng).altitude - hc; + + a = (h0 + h2) / 2 - h1; + b = (h2 - h0) / 2; + xe = -b / (2 * a); + ye = (a * xe + b) * xe + h1; + d = b * b - 4 * a * h1; + roots = 0; + + if (d >= 0) { + dx = Math.sqrt(d) / (Math.abs(a) * 2); + x1 = xe - dx; + x2 = xe + dx; + if (Math.abs(x1) <= 1) roots++; + if (Math.abs(x2) <= 1) roots++; + if (x1 < -1) x1 = x2; + } + + if (roots === 1) { + if (h0 < 0) rise = i + x1; + else set = i + x1; + + } else if (roots === 2) { + rise = i + (ye < 0 ? x2 : x1); + set = i + (ye < 0 ? x1 : x2); + } + + if (rise && set) break; + + h0 = h2; + } + + var result = {}; + + if (rise) result.rise = hoursLater(t, rise); + if (set) result.set = hoursLater(t, set); + + if (!rise && !set) result[ye > 0 ? 'alwaysUp' : 'alwaysDown'] = true; + + return result; +}; \ No newline at end of file From b23399c432a1fca69451dd4603d1c0a6e77f924d Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Tue, 15 Mar 2022 09:30:32 +0100 Subject: [PATCH 33/39] Update metadata.json --- apps/sunclock/metadata.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/sunclock/metadata.json b/apps/sunclock/metadata.json index a0afcc786..a39343992 100644 --- a/apps/sunclock/metadata.json +++ b/apps/sunclock/metadata.json @@ -10,6 +10,7 @@ "allow_emulator": true, "storage": [ {"name":"sunclock.app.js","url":"app.js"}, - {"name":"sunclock.img","url":"app-icon.js","evaluate":true} + {"name":"sunclock.img","url":"app-icon.js","evaluate":true}, + {"name":"suncalc.js","url":"suncalc.js"} ] } From 844fe160bb143780c234135a50607bca2b8536c8 Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Tue, 15 Mar 2022 09:31:13 +0100 Subject: [PATCH 34/39] Add files via upload --- apps/sunclock/suncalc.js | 298 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 298 insertions(+) create mode 100644 apps/sunclock/suncalc.js diff --git a/apps/sunclock/suncalc.js b/apps/sunclock/suncalc.js new file mode 100644 index 000000000..b1af0a0d9 --- /dev/null +++ b/apps/sunclock/suncalc.js @@ -0,0 +1,298 @@ +/* Module suncalc.js + (c) 2011-2015, Vladimir Agafonkin + SunCalc is a JavaScript library for calculating sun/moon position and light phases. + https://github.com/mourner/suncalc + +PB: Usage: +E.setTimeZone(2); // 1 = MEZ, 2 = MESZ +SunCalc = require("suncalc.js"); +pos = SunCalc.getPosition(Date.now(), 53.3, 10.1); +times = SunCalc.getTimes(Date.now(), 53.3, 10.1); +rise = times.sunrise; // Date object +rise_str = rise.getHours() + ':' + rise.getMinutes(); //hh:mm +*/ +var exports={}; + +// shortcuts for easier to read formulas + +var PI = Math.PI, + sin = Math.sin, + cos = Math.cos, + tan = Math.tan, + asin = Math.asin, + atan = Math.atan2, + acos = Math.acos, + rad = PI / 180; + +// sun calculations are based on http://aa.quae.nl/en/reken/zonpositie.html formulas + +// date/time constants and conversions + +var dayMs = 1000 * 60 * 60 * 24, + J1970 = 2440588, + J2000 = 2451545; + +function toJulian(date) { return date.valueOf() / dayMs - 0.5 + J1970; } +function fromJulian(j) { return new Date((j + 0.5 - J1970) * dayMs); } // PB: onece removed + 0.5; included it again 4 Jan 2021 +function toDays(date) { return toJulian(date) - J2000; } + + +// general calculations for position + +var e = rad * 23.4397; // obliquity of the Earth + +function rightAscension(l, b) { return atan(sin(l) * cos(e) - tan(b) * sin(e), cos(l)); } +function declination(l, b) { return asin(sin(b) * cos(e) + cos(b) * sin(e) * sin(l)); } + +function azimuth(H, phi, dec) { return atan(sin(H), cos(H) * sin(phi) - tan(dec) * cos(phi)); } +function altitude(H, phi, dec) { return asin(sin(phi) * sin(dec) + cos(phi) * cos(dec) * cos(H)); } + +function siderealTime(d, lw) { return rad * (280.16 + 360.9856235 * d) - lw; } + +function astroRefraction(h) { + if (h < 0) // the following formula works for positive altitudes only. + h = 0; // if h = -0.08901179 a div/0 would occur. + + // formula 16.4 of "Astronomical Algorithms" 2nd edition by Jean Meeus (Willmann-Bell, Richmond) 1998. + // 1.02 / tan(h + 10.26 / (h + 5.10)) h in degrees, result in arc minutes -> converted to rad: + return 0.0002967 / Math.tan(h + 0.00312536 / (h + 0.08901179)); +} + +// general sun calculations + +function solarMeanAnomaly(d) { return rad * (357.5291 + 0.98560028 * d); } + +function eclipticLongitude(M) { + + var C = rad * (1.9148 * sin(M) + 0.02 * sin(2 * M) + 0.0003 * sin(3 * M)), // equation of center + P = rad * 102.9372; // perihelion of the Earth + + return M + C + P + PI; +} + +function sunCoords(d) { + + var M = solarMeanAnomaly(d), + L = eclipticLongitude(M); + + return { + dec: declination(L, 0), + ra: rightAscension(L, 0) + }; +} + +// calculates sun position for a given date and latitude/longitude + +exports.getPosition = function (date, lat, lng) { + + var lw = rad * -lng, + phi = rad * lat, + d = toDays(date), + + c = sunCoords(d), + H = siderealTime(d, lw) - c.ra; + + return { + azimuth: Math.round((azimuth(H, phi, c.dec) / rad + 180) % 360), // PB: converted to deg + altitude: Math.round( altitude(H, phi, c.dec) / rad) // PB: converted to deg + }; +}; + + +// sun times configuration (angle, morning name, evening name) + +var times = [ + [-0.833, 'sunrise', 'sunset' ] +]; + +// calculations for sun times +var J0 = 0.0009; + +function julianCycle(d, lw) { return Math.round(d - J0 - lw / (2 * PI)); } + +function approxTransit(Ht, lw, n) { return J0 + (Ht + lw) / (2 * PI) + n; } +function solarTransitJ(ds, M, L) { return J2000 + ds + 0.0053 * sin(M) - 0.0069 * sin(2 * L); } + +function hourAngle(h, phi, d) { return acos((sin(h) - sin(phi) * sin(d)) / (cos(phi) * cos(d))); } +function observerAngle(height) { return -2.076 * Math.sqrt(height) / 60; } + +// returns set time for the given sun altitude +function getSetJ(h, lw, phi, dec, n, M, L) { + + var w = hourAngle(h, phi, dec), + a = approxTransit(w, lw, n); + return solarTransitJ(a, M, L); +} + + +// calculates sun times for a given date, latitude/longitude, and, optionally, +// the observer height (in meters) relative to the horizon + +exports.getTimes = function (date, lat, lng, height) { + + height = height || 0; + + var lw = rad * -lng, + phi = rad * lat, + + dh = observerAngle(height), + + d = toDays(date), + n = julianCycle(d, lw), + ds = approxTransit(0, lw, n), + + M = solarMeanAnomaly(ds), + L = eclipticLongitude(M), + dec = declination(L, 0), + + Jnoon = solarTransitJ(ds, M, L), + + i, len, time, h0, Jset, Jrise; + + + var result = { + solarNoon: fromJulian(Jnoon), + nadir: fromJulian(Jnoon - 0.5) + }; + + for (i = 0, len = times.length; i < len; i += 1) { + time = times[i]; + h0 = (time[0] + dh) * rad; + + Jset = getSetJ(h0, lw, phi, dec, n, M, L); + Jrise = Jnoon - (Jset - Jnoon); + + result[time[1]] = fromJulian(Jrise); + result[time[2]] = fromJulian(Jset); + } + + return result; +}; + + +// moon calculations, based on http://aa.quae.nl/en/reken/hemelpositie.html formulas + +function moonCoords(d) { // geocentric ecliptic coordinates of the moon + + var L = rad * (218.316 + 13.176396 * d), // ecliptic longitude + M = rad * (134.963 + 13.064993 * d), // mean anomaly + F = rad * (93.272 + 13.229350 * d), // mean distance + + l = L + rad * 6.289 * sin(M), // longitude + b = rad * 5.128 * sin(F), // latitude + dt = 385001 - 20905 * cos(M); // distance to the moon in km + + return { + ra: rightAscension(l, b), + dec: declination(l, b), + dist: dt + }; +} + +getMoonPosition = function (date, lat, lng) { + + var lw = rad * -lng, + phi = rad * lat, + d = toDays(date), + + c = moonCoords(d), + H = siderealTime(d, lw) - c.ra, + h = altitude(H, phi, c.dec), + // formula 14.1 of "Astronomical Algorithms" 2nd edition by Jean Meeus (Willmann-Bell, Richmond) 1998. + pa = atan(sin(H), tan(phi) * cos(c.dec) - sin(c.dec) * cos(H)); + + h = h + astroRefraction(h); // altitude correction for refraction + + return { + azimuth: azimuth(H, phi, c.dec), + altitude: h, + distance: c.dist, + parallacticAngle: pa + }; +}; + + +// calculations for illumination parameters of the moon, +// based on http://idlastro.gsfc.nasa.gov/ftp/pro/astro/mphase.pro formulas and +// Chapter 48 of "Astronomical Algorithms" 2nd edition by Jean Meeus (Willmann-Bell, Richmond) 1998. + +getMoonIllumination = function (date) { + + var d = toDays(date || new Date()), + s = sunCoords(d), + m = moonCoords(d), + + sdist = 149598000, // distance from Earth to Sun in km + + phi = acos(sin(s.dec) * sin(m.dec) + cos(s.dec) * cos(m.dec) * cos(s.ra - m.ra)), + inc = atan(sdist * sin(phi), m.dist - sdist * cos(phi)), + angle = atan(cos(s.dec) * sin(s.ra - m.ra), sin(s.dec) * cos(m.dec) - + cos(s.dec) * sin(m.dec) * cos(s.ra - m.ra)); + + return { + fraction: (1 + cos(inc)) / 2, + phase: 0.5 + 0.5 * inc * (angle < 0 ? -1 : 1) / Math.PI, + angle: angle + }; +}; + + +function hoursLater(date, h) { + return new Date(date.valueOf() + h * dayMs / 24); +} + +// calculations for moon rise/set times are based on http://www.stargazing.net/kepler/moonrise.html article + +getMoonTimes = function (date, lat, lng, inUTC) { + var t = new Date(date); + if (inUTC) t.setUTCHours(0, 0, 0, 0); + else t.setHours(0, 0, 0, 0); + + var hc = 0.133 * rad, + h0 = SunCalc.getMoonPosition(t, lat, lng).altitude - hc, + h1, h2, rise, set, a, b, xe, ye, d, roots, x1, x2, dx; + + // go in 2-hour chunks, each time seeing if a 3-point quadratic curve crosses zero (which means rise or set) + for (var i = 1; i <= 24; i += 2) { + h1 = SunCalc.getMoonPosition(hoursLater(t, i), lat, lng).altitude - hc; + h2 = SunCalc.getMoonPosition(hoursLater(t, i + 1), lat, lng).altitude - hc; + + a = (h0 + h2) / 2 - h1; + b = (h2 - h0) / 2; + xe = -b / (2 * a); + ye = (a * xe + b) * xe + h1; + d = b * b - 4 * a * h1; + roots = 0; + + if (d >= 0) { + dx = Math.sqrt(d) / (Math.abs(a) * 2); + x1 = xe - dx; + x2 = xe + dx; + if (Math.abs(x1) <= 1) roots++; + if (Math.abs(x2) <= 1) roots++; + if (x1 < -1) x1 = x2; + } + + if (roots === 1) { + if (h0 < 0) rise = i + x1; + else set = i + x1; + + } else if (roots === 2) { + rise = i + (ye < 0 ? x2 : x1); + set = i + (ye < 0 ? x1 : x2); + } + + if (rise && set) break; + + h0 = h2; + } + + var result = {}; + + if (rise) result.rise = hoursLater(t, rise); + if (set) result.set = hoursLater(t, set); + + if (!rise && !set) result[ye > 0 ? 'alwaysUp' : 'alwaysDown'] = true; + + return result; +}; \ No newline at end of file From 13145072a93c48d4ad7288818412174081da5cbb Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Tue, 15 Mar 2022 09:50:08 +0100 Subject: [PATCH 35/39] Create README.md --- apps/sunclock/README.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 apps/sunclock/README.md diff --git a/apps/sunclock/README.md b/apps/sunclock/README.md new file mode 100644 index 000000000..622a11ba3 --- /dev/null +++ b/apps/sunclock/README.md @@ -0,0 +1,6 @@ +# Sun Clock +Clock showing date/time, sunset/sunrise, sun height/azimuth + +![](screenshot_sunclock.png) + +Location set with mylocation app, time zone set with settings app. From d626b0a5284bfc377518fb0070911b73e739f5da Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Tue, 15 Mar 2022 09:51:45 +0100 Subject: [PATCH 36/39] Add files via upload --- apps/sunclock/screenshot_sunclock.png | Bin 0 -> 4079 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/sunclock/screenshot_sunclock.png diff --git a/apps/sunclock/screenshot_sunclock.png b/apps/sunclock/screenshot_sunclock.png new file mode 100644 index 0000000000000000000000000000000000000000..a24af2116245f45cec0b14c51f7b23945f5d1933 GIT binary patch literal 4079 zcmchai8s_=+{eE&W-OzAmJ9}23)!+nC~KH3k$ohZ?7Jeegdr8OhKy`6cE&dLtx;KG z&?vHmvCA%+ta;`+&;Rh;bMAegd+vGPbMCpH`#!H5d)F9w9>xO$0N}j-Z5=b3*8Fd0 zq^FJ5O^fz40r{IDwSlT3zFz>qQl_t?Wf5e*nL~bqQ$441{p^fPfHEQGYp18*oO|ge zu!WyQHGWs+luzDRSfRBC|Ma0UGQ@o?Bo@Aa8Nx*|vkvlCQVXR@~v z$3?dM2&-4bhN@|Uy@;|Pr5LLGFUy}+muLQUTBV!;@o)UQr+qTod|KR}G;$ISy4Kbs zo1nW4M8=sxGT}lmOv&S?6ooX;fb)m6E5=j+O@K3m;1l)sVw(;3EO&mU+|s=yOPi^@ zyau-V)7>7@WT-zO_gi!>*Pou_TxF0_O)8+F>-c&g5C{6x+`q#6c@7Za|99yupx|n^ z_*1o33BHM$`xnucwuNeReojz(iT%K70}MH_;#n@uIA_cH?=8YZfSOnRbgq#B;kE67 ze}YGw>NZXynhWo^&^15F#$%;0(hpI`eRMxN2T_wTa5UVW`Lh)(KJZ$?%SfgjCwMcx z?3(_BDF3Ee1DK%6OEXr%9w7w#2bE?*x#rVg*+5gUF{Yu7mCVq5dP;F&o`a6Jw%M-x zL<~3HAbr8gv~&}FLD)f|k=-;{yDytm2CGug6T^~G2SIWt6WX&<9J%VB_I#GpX~&Kc zB7W4)8N<`=oN(H@7E*a&sKfmd|=VgiA@=RwbkhLb9(r{%?J0&(Xwdx_19bIXfNLz;l z%`X;u(v;gXO+?g65R|K|@{5P2Jv>V>u{7KN*%=wIVdSMguDdS#OeH<);O-mRq4mq0 zclIYA0t8T+d+dL18fWq96Sa#{nOG4;*RhIV{-x)yE0-+xpT?QED3vh?8-R6d z@5F){^qyADxU1OVz#ef3NBzN4>Rxw<6YLF}7ydwSjsC5<5NbvUi7?tmB=aI)w zciwySx*;A9p~qBiIWkdV1k)}iKx~%Zk;UNJ>p`N_7+Vxc)u^gquVJX<#4tykRf&<) z!KD)sRtGMd%pbSilWUc*ZdO>qf%F{8v~)CY;!Gr>$9Bc3GwlXdUse0>izw+b62}Cw zh6cV{xy`PJPEfO2$MwC zL37hnwpyLi#8orj7DCtlW7G7cG7Pd_-ihkztWFFB2}mrSqZZXzm4Vp9KofUft2m}j&J=)gaSPD$de>BE8!pQ$ftw;AmoSI_iap@QnDc36 zOpX~bQC!|`-DkJ+(#E3y>?#3-wyYOr*AwB^cFbJ`L%oR_^LLL{Mp!~Ttrn(0&meu3 z%~G1k1Fz|1Q~Ygk<;V_CwN(Su*ohWI-G5eDi*~&wYg~Jgu@ze?^;N0@H`HxoW;BWz zEp+tvHvE(#`N#2|-#3yuQ#?0U3@{fctc~oH2Z)J}e-x#owYkBuaBCZX#OpE36~|sz zsCpTAI9%HW#3LtTkX0J2*WfM$9}f}Mg)>;HR(BM!=&C1R$nvfnK?F}DI@105v_;{E z<98yLRX&L^KO!rc0>khA-l@Ke!M%4}dHC6RMVmJ=M~p{j{TUKW@=(xrWI}UtSFCQ} zFE-@G?T88M_m2|S{Vx#-%VB?BpFT`|`h|0br9o8d&NTu7-{}=tX+ox;P7|q)q6vTB z^#KC4yf!FxFrvK{l~>S}38lF2RasHUku~r6CiKMBFB2Q3OWZc9h`326PgW7h+O=;v zpj^4_Vou@Kqq1b#(4SKTo3JB#3{JDrgU>3mLl6nUpslp1NBegGTP>=`&2wm__k92> z5qZ3y00`iBA7N}t{q9RpECmZ0sH!Q{GK^&;WW4&Y zR^qM|Ua+FYOogBO^%r2K9S--~VwJE}IR3Kq%Q$#>Wa*uyk zJ$l|GQ!2?@ayM6{+G!mebRp@~E>aw0C`fJ>0a3jkB}voysPy2z)iX zVqHef3;v9c#4JyFp}do2ItIkn2jqKg{$)38@esf}_N2Gp;wT2Q3uRU*S#I0@p7zVI zxmxFP->cScx9qydppPnG7ePC9FTq9fZ>KHXhWJ18+rsTdP52{*>cV=R@kG2q{mCg~ z3|IcWbP)cPj!V9Cd9`W}%&BlVUY&$xt9>6ZC=CgHqxT<*-IN+CL1a^x^OtqhyJVM> zx|@o?RShii_0W_A-?E6A|pc2&*RgED?1K~1!c z7inR1tpvuakc;^Cd%$6U|5*qH2~;jltofr@;`wSWfxC*Wj27wQ@|TlbjcFHl(>8bl zM&cA7ZY{?%q3J9A{^mQ$`8Ucas!inzShba^qz9qYJTo49W{Yezs$~9kzqfA9LNQ>8 zN8b{Awlwl_|EWl{OXRNRYOOas8q%yqCt}1xvXPLD>KQqaq1oLt z&m!^2Ig52(p_~|Rt|AIoHUtF;97y&0O*ho? zNA2tbht7e~0YL&2l}b4JBc_Lh`gHfXEsge?$x@YY!S5wyB|nFxR9YaaJFNSJ!u9XM z;0KDnOV@v^JH$&1;^y6 zhT)FAIx5qSVHo6=Mr;QaeTCeh(eR1SM`8T)TZZd~bG4YZ3Gwg{CE^^d_z`~=#J!-6 z2hjXt#;;oj;^-h-MrXXdMUr&e;n-u69b*sTsCZNpQLh?8HnAf4MOiWD&XKSs@BP6) zzhRQjKRHf}_zt~Dc{|*;g1bQ%{~w(ZI8*NN&b$QaaBtEKiemHDUiTWg@rl@3DvwFn z+u@w=qe14GJ-i^G+U|GyTaZ=`@PWf&J8}F1->B+Ii>uk7To$T6*z@T*4!|_@C7_!} zc-#+f9!q_XZqI9q`a>&$q|LBiu-BI?%coG|>IWP|yt&JO>37e3ARS32F}3~33*KBf zo}E=k?cxK*O_$LD*2{czKac`LeDfTbOvA@4XoyBDw8X1Crg;loQ*fLD;2K|65gT&d zS(xwjIS%jN8as|Df3V&a9_&UvI%8=LYwXM;bYck;YW7Vp?rxvF3wABBZ&8=9T$nZ* z5IJGQSWahcp0kZi37Y+V7-t9C)n2&}EtVFMe;WPoM{X029};fJ9!NXJ0kfjV%lofd zq641q`@gGub2iPf>?;sv8OKh+JgLt3UZk@npal*&$qG}$TJq+{;_ zV~lTV|Ms~{pnpT{v!ZL&P;5)nvn;7uW!4Ksqu;omv`K}%f@ihkTnKU;w(CFsC&B_Qy&3*cdb;vwh{x1qVH7b??svPJ>i6-FT z?Ax`=U*c)xwEloNEpQJGfN^8-_e`3T1yR=sEZ>cs)UX@ETwnnD2m#*Ja=>VsNQC zXHgKykh`*;Ir(=Q8?MfS?&-A;)%!Ky!Q3Sk^`?*h9(@}=VYw;pb9Rq31Gk<+@tb_5 zkLy`)xJ>eVY*spEG64n5emR)A#!|57gCD7sT0mcMxhnSq8yriPa>$XzWF9w?HYJMV z?$I?}nr!7XR~dzE;0y6XPql7|*g(Jx;23cR<4J-(hACTrQbgy3F zcJo;ja7+8MB^W{=(YL`av(J2UD(0JY4FUkFsSIQNdc=IP$Z&QDdg3FdA%L_Pp zi$5U0I8E{{d-z#|x36zF$~CZh{ZXc&?+oE&C?Ejp!&D=4>)w4Dq8yZG8h)^*AqQk` zga#lP#t&5U05Q4@+9#*;$bXsPa~9~Zy7^p426=3b7H?aRB1nWKwsBbr%D?g F^*<=JsV)Ej literal 0 HcmV?d00001 From 641aa7c90446abece2f2c185d53f7471f469952d Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Tue, 15 Mar 2022 09:54:54 +0100 Subject: [PATCH 37/39] Update README.md --- apps/sunclock/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/sunclock/README.md b/apps/sunclock/README.md index 622a11ba3..4076767d9 100644 --- a/apps/sunclock/README.md +++ b/apps/sunclock/README.md @@ -1,5 +1,5 @@ # Sun Clock -Clock showing date/time, sunset/sunrise, sun height/azimuth +Clock showing date/time, sunset/sunrise, H = current sun height/noon sun height, Az = sun azimuth ![](screenshot_sunclock.png) From f51c72e234ff522e8762aafa2a13654766381f4b Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Tue, 15 Mar 2022 10:43:10 +0100 Subject: [PATCH 38/39] Update app.js --- apps/sunclock/app.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/sunclock/app.js b/apps/sunclock/app.js index 1401c2a98..4609565a2 100644 --- a/apps/sunclock/app.js +++ b/apps/sunclock/app.js @@ -41,7 +41,7 @@ function drawSimpleClock() { g.setFont("Vector",60); g.drawString(time, xyCenter, yposTime, true); - var date = [loc.dow(new Date(),1), loc.date(d,1)].join(" "); // draw Day, name of month, Date + var date = [loc.dow(new Date(),1), loc.date(d,1)].join(" "); // draw day of week, date g.setFont("Vector",24); g.drawString(date, xyCenter, yposDate, true); @@ -71,9 +71,9 @@ g.clear(); // clean app screen Bangle.loadWidgets(); Bangle.drawWidgets(); -setInterval(updatePos, 60*15E3); // refesh every 15 mins +setInterval(updatePos, 60*5E3); // refesh every 5 mins updatePos(); drawSimpleClock(); // draw now -setWatch(Bangle.showLauncher, BTN1, { repeat: false, edge: "falling" }); // Show launcher when button pressed \ No newline at end of file +setWatch(Bangle.showLauncher, BTN1, { repeat: false, edge: "falling" }); // Show launcher when button pressed From eb0246dd32457b64733270d4567867e0d7464b4f Mon Sep 17 00:00:00 2001 From: Klaus-Peter Bernschneider Date: Wed, 16 Mar 2022 16:54:44 +0100 Subject: [PATCH 39/39] Changing back to official version as requested by Hilmar Strauch Changing back to official version as requested by Hilmar Strauch --- apps/mylocation/mylocation.app.js | 33 +++++++++++++++++-------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/apps/mylocation/mylocation.app.js b/apps/mylocation/mylocation.app.js index b26abb5ec..27ab17ea5 100644 --- a/apps/mylocation/mylocation.app.js +++ b/apps/mylocation/mylocation.app.js @@ -6,35 +6,38 @@ let settings; // initialize with default settings... let s = { - 'lat': 53.322659, - 'lon': 10.14107, - 'location': "Pattensen" -} + 'lat': 51.5072, + 'lon': 0.1276, + 'location': "London" +}; function loadSettings() { - settings = require('Storage').readJSON(SETTINGS_FILE, 1) || s; + settings = require('Storage').readJSON(SETTINGS_FILE, 1) || {}; + for (const key in settings) { + s[key] = settings[key] + } } function save() { - settings = s - require('Storage').write(SETTINGS_FILE, settings) + settings = s; + require('Storage').write(SETTINGS_FILE, settings); } -const locations = ["Pattensen","Essen", "Kalamata", "???"]; -const lats = [ 53.322659, 51.46302, 37.04006, 0.0]; -const lons = [ 10.14107, 6.99891, 22.11535, 0.0]; +const locations = ["London" ,"Newcastle","Edinburgh", "Paris" , "New York" , "Tokyo" , "Frankfurt", "Auckland", "???"]; +const lats = [ 51.5072 , 54.9783 , 55.9533 , 48.8566 , 40.7128 , 35.6762 , 50.1236 , -36.9 , 0.0 ]; +const lons = [ -0.1276 , -1.6178 , -3.1883 , 2.3522 , -74.0060 , 139.6503 , 8.6553 , 174.7832 , 0.0 ]; function setFromGPS() { Bangle.on('GPS', (gps) => { //console.log("."); if (gps.fix === 0) return; //console.log("fix from GPS"); - s = {'lat': gps.lat, 'lon': gps.lon, 'location': '???' } + s = {'lat': gps.lat, 'lon': gps.lon, 'location': '???' }; Bangle.buzz(1500); // buzz on first position Bangle.setGPSPower(0); save(); - Bangle.setUI("updown", ()=>{ load() }); + Bangle.setUI("updown", ()=>{ load(); }); E.showPrompt("Location has been saved from the GPS fix",{ title:"Location Saved", buttons : {"OK":1} @@ -49,13 +52,13 @@ function setFromGPS() { } function showMainMenu() { - console.log("showMainMenu"); + //console.log("showMainMenu"); const mainmenu = { '': { 'title': 'My Location' }, '{ load(); }, 'City': { value: 0 | locations.indexOf(s.location), - min: 0, max: 6, + min: 0, max: locations.length - 1, format: v => locations[v], onchange: v => { if (v != 6) { @@ -67,7 +70,7 @@ function showMainMenu() { } }, 'Set From GPS': ()=>{ setFromGPS(); } - } + }; return E.showMenu(mainmenu); }