From 1cdcedc997db4286270eaa5c3b7782b57310f073 Mon Sep 17 00:00:00 2001 From: David Peer Date: Tue, 11 Jan 2022 17:41:02 +0100 Subject: [PATCH 1/7] Bugfix: If the weather module does not exist, an exception was thrown. Now its hidden in a function. --- apps/lcars/lcars.app.js | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 09998ccf5..39d01a687 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -1,10 +1,5 @@ const SETTINGS_FILE = "lcars.setting.json"; -const Storage = require("Storage"); -const weather = require('weather'); - - -// ...and overwrite them with any saved values -// This way saved values are preserved if a new version adds more settings +const locale = require('locale'); const storage = require('Storage') let settings = { alarm: -1, @@ -39,7 +34,7 @@ var disableInfoUpdate = true; // When gadgetbridge connects, step infos cannot b /* * Requirements and globals */ -const locale = require('locale'); + var bgLeft = { width : 27, height : 176, bpp : 3, @@ -124,7 +119,7 @@ function queueDraw() { function printData(key, y, c){ g.setFontAlign(-1,-1,0); var text = "ERR"; - var value = "NOT FOUND"; + var value = "ERR"; if(key == "Battery"){ text = "BAT"; @@ -136,7 +131,7 @@ function printData(key, y, c){ } else if(key == "Temp."){ text = "TEMP"; - value = Math.floor(E.getTemperature()) + "C"; + value = locale.temp(parseInt(E.getTemperature())); } else if(key == "HRM"){ text = "HRM"; @@ -148,12 +143,8 @@ function printData(key, y, c){ } else if (key == "Weather"){ text = "TEMP"; - const w = weather.get(); - if (!w) { - value = "ERR"; - } else { - value = require('locale').temp(w.temp-273.15); // applies conversion - } + var weather = getWeather(); + value = locale.temp(parseInt(weather.temp-273.15)); } g.setColor(c); @@ -429,6 +420,21 @@ function getSteps() { } +function getWeather(){ + let weather; + + try { + weather = require('weather'); + } catch(ex) { + return { + temp: 0.0 + }; + } + + return weather.get(); +} + + /* * Handle alarm */ From 5de8ca8184909f17b65900e1883204810b82c3e5 Mon Sep 17 00:00:00 2001 From: David Peer Date: Tue, 11 Jan 2022 18:10:05 +0100 Subject: [PATCH 2/7] Updated changelog, readme, screenshots etc. More consistent naming of datapoints. --- apps/lcars/ChangeLog | 4 ++-- apps/lcars/README.md | 36 +++++++++++++++------------- apps/lcars/lcars.app.js | 45 ++++++++++++++++------------------- apps/lcars/lcars.settings.js | 2 +- apps/lcars/screenshot.png | Bin 5259 -> 5547 bytes 5 files changed, 44 insertions(+), 43 deletions(-) diff --git a/apps/lcars/ChangeLog b/apps/lcars/ChangeLog index 45d7a8dd7..bcaddeb56 100644 --- a/apps/lcars/ChangeLog +++ b/apps/lcars/ChangeLog @@ -7,5 +7,5 @@ 0.07: Added settings to adjust data that is shown for each row. 0.08: Support for multiple screens. 24h graph for steps + HRM. Fullscreen Mode. 0.09: Tab anywhere to open the launcher. -0.10: Fix - Clock is unresponsive, if gadgetbridge connects. -0.11: Added getting the gadgetbridge weather \ No newline at end of file +0.10: Removed swipes to be compatible with the Pattern Launcher. Stability improvements. +0.11: Show the gadgetbridge weather temperature (settings). \ No newline at end of file diff --git a/apps/lcars/README.md b/apps/lcars/README.md index 4bf5218f6..510e5637c 100644 --- a/apps/lcars/README.md +++ b/apps/lcars/README.md @@ -4,20 +4,27 @@ A simple LCARS inspired clock. Note: To display the steps, the health app is required. If this app is not installed, the data will not be shown. To contribute you can open a PR at this [GitHub Repo]( https://github.com/peerdavid/BangleApps) +## Control + * Tap left / right to change between screens. + * Tap top / bottom to control the current screen. + ## Features * LCARS Style watch face. - * Full screen mode - widgets are still loaded. - * Supports multiple screens with different data. - * Tab anywhere to open the launcher. - * [Screen 1] Date + Time + Lock status. - * [Screen 1] Shows randomly images of real planets. - * [Screen 1] Shows different states such as (charging, out of battery, GPS on etc.) - * [Screen 1] Swipe up/down to activate an alarm. - * [Screen 1] Shows 3 customizable datapoints on the first screen. - * [Screen 1] The lower orange line indicates the battery level. - * [Screen 2] Display graphs for steps + hrm on the second screen. - * [Screen 2] Switch between day/month via swipe up/down. + * Full screen mode - widgets are still loaded but not shown. + * Tab on left/right to switch between different screens. + * Cusomizable data that is shown on screen 1 (steps, weather etc.) + * Shows random images of real planets. + * Tap on top/bottom of screen 1 to activate an alarm. + * The lower orange line indicates the battery level. + * Display graphs for steps + hrm on the second screen. +## Data that can be configured + * Steps - Steps loaded via the health module + * Battery - Current battery level in % + * VREF - Voltage of battery + * HRM - Last measured HRM + * Temp - Weather temperature loaded via the weather module + gadgetbridge + * CoreT - Temperature of device ## Multiple screens support Access different screens via swipe left/ right @@ -26,10 +33,7 @@ Access different screens via swipe left/ right ![](screenshot_2.png) -## Icons -
Icons made by Smashicons, Freepik from www.flaticon.com
- - ## Contributors -- Creator: [David Peer](https://github.com/peerdavid). +- Initial creation and improvements: [David Peer](https://github.com/peerdavid). - Improvements: [Adam Schmalhofer](https://github.com/adamschmalhofer). +- Improvements: [Jon Warrington](https://github.com/BartokW). diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 39d01a687..521f661e7 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -28,7 +28,7 @@ let cGrey = "#9E9E9E"; let lcarsViewPos = 0; let drag; let hrmValue = 0; -var plotWeek = false; +var plotMonth = false; var disableInfoUpdate = true; // When gadgetbridge connects, step infos cannot be loaded /* @@ -118,33 +118,30 @@ function queueDraw() { function printData(key, y, c){ g.setFontAlign(-1,-1,0); - var text = "ERR"; + key = key.toUpperCase() + var text = key; var value = "ERR"; - if(key == "Battery"){ - text = "BAT"; - value = E.getBattery() + "%"; - - } else if(key == "Steps"){ + if(key == "STEPS"){ text = "STEP"; value = getSteps(); - } else if(key == "Temp."){ - text = "TEMP"; - value = locale.temp(parseInt(E.getTemperature())); - - } else if(key == "HRM"){ - text = "HRM"; - value = hrmValue; + } else if(key == "BATTERY"){ + text = "BAT"; + value = E.getBattery() + "%"; } else if (key == "VREF"){ - text = "VREF"; value = E.getAnalogVRef().toFixed(2) + "V"; - } else if (key == "Weather"){ - text = "TEMP"; + } else if(key == "HRM"){ + value = hrmValue; + + } else if (key == "TEMP"){ var weather = getWeather(); value = locale.temp(parseInt(weather.temp-273.15)); + + } else if(key == "CORET"){ + value = locale.temp(parseInt(E.getTemperature())); } g.setColor(c); @@ -300,7 +297,7 @@ function drawPosition1(){ } // Plot HRM graph - if(plotWeek){ + if(plotMonth){ var data = new Uint16Array(32); var cnt = new Uint8Array(32); health.readDailySummaries(new Date(), h=>{ @@ -337,8 +334,8 @@ function drawPosition1(){ g.setFontAlign(1, 1, 0); g.setFontAntonioMedium(); g.setColor(cWhite); - g.drawString("WEEK HRM", 154, 27); - g.drawString("WEEK STEPS [K]", 154, 115); + g.drawString("M-HRM", 154, 27); + g.drawString("M-STEPS [K]", 154, 115); // Plot day } else { @@ -378,8 +375,8 @@ function drawPosition1(){ g.setFontAlign(1, 1, 0); g.setFontAntonioMedium(); g.setColor(cWhite); - g.drawString("DAY HRM", 154, 27); - g.drawString("DAY STEPS", 154, 115); + g.drawString("D-HRM", 154, 27); + g.drawString("D-STEPS", 154, 115); } } @@ -568,9 +565,9 @@ Bangle.on('touch', function(btn, e){ drawState(); return; } - } else if (lcarsViewPos == 1 && (is_upper || is_lower) && plotWeek != is_lower){ + } else if (lcarsViewPos == 1 && (is_upper || is_lower) && plotMonth != is_lower){ feedback(); - plotWeek = is_lower; + plotMonth = is_lower; draw(); return; } diff --git a/apps/lcars/lcars.settings.js b/apps/lcars/lcars.settings.js index a0e54f9b4..1dd6e8d73 100644 --- a/apps/lcars/lcars.settings.js +++ b/apps/lcars/lcars.settings.js @@ -18,7 +18,7 @@ storage.write(SETTINGS_FILE, settings) } - var data_options = ["Battery", "Steps", "Temp.", "HRM", "VREF", "Weather"]; + var data_options = ["Steps", "Battery", "VREF", "HRM", "Temp", "CoreT"]; E.showMenu({ '': { 'title': 'LCARS Clock' }, diff --git a/apps/lcars/screenshot.png b/apps/lcars/screenshot.png index 5d7603b45e6c7aadcc01aa0afdf13ff4d579eb93..5381492b242865bae924e11daf9a5cd40313188f 100644 GIT binary patch literal 5547 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 literal 5259 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 Date: Tue, 11 Jan 2022 18:11:49 +0100 Subject: [PATCH 3/7] Updated screenshot. --- apps/lcars/screenshot.png | Bin 5547 -> 5721 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/lcars/screenshot.png b/apps/lcars/screenshot.png index 5381492b242865bae924e11daf9a5cd40313188f..319062dcce36640c38e24378d97b7724ab3a9f74 100644 GIT binary patch literal 5721 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 From 755f44cf3f3896a3a646f96bea49ce48aa94b90d Mon Sep 17 00:00:00 2001 From: David Peer Date: Tue, 11 Jan 2022 18:20:53 +0100 Subject: [PATCH 4/7] Bugfix: Alarm not working. --- apps/lcars/ChangeLog | 3 ++- apps/lcars/lcars.app.js | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/apps/lcars/ChangeLog b/apps/lcars/ChangeLog index bcaddeb56..bb5270b70 100644 --- a/apps/lcars/ChangeLog +++ b/apps/lcars/ChangeLog @@ -8,4 +8,5 @@ 0.08: Support for multiple screens. 24h graph for steps + HRM. Fullscreen Mode. 0.09: Tab anywhere to open the launcher. 0.10: Removed swipes to be compatible with the Pattern Launcher. Stability improvements. -0.11: Show the gadgetbridge weather temperature (settings). \ No newline at end of file +0.11: Show the gadgetbridge weather temperature (settings). +0.12: Refactoring and stability improvements. \ No newline at end of file diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 521f661e7..c4e675873 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -470,7 +470,7 @@ function handleAlarm(){ .then(() => { // Update alarm state to disabled settings.alarm = -1; - Storage.writeJSON(SETTINGS_FILE, settings); + storage.writeJSON(SETTINGS_FILE, settings); }); } @@ -510,7 +510,7 @@ function increaseAlarm(){ settings.alarm = getCurrentTimeInMinutes() + 5; } - Storage.writeJSON(SETTINGS_FILE, settings); + storage.writeJSON(SETTINGS_FILE, settings); } @@ -521,7 +521,7 @@ function decreaseAlarm(){ settings.alarm = -1; } - Storage.writeJSON(SETTINGS_FILE, settings); + storage.writeJSON(SETTINGS_FILE, settings); } function feedback(){ From 1f06e6cfc578473c86214f76c5c43d9715b905a4 Mon Sep 17 00:00:00 2001 From: David Peer Date: Tue, 11 Jan 2022 21:24:23 +0100 Subject: [PATCH 5/7] Added humidity --- apps/lcars/README.md | 1 + apps/lcars/lcars.app.js | 28 +++++++++++++++++++--------- apps/lcars/lcars.settings.js | 10 +++++----- 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/apps/lcars/README.md b/apps/lcars/README.md index 510e5637c..46e134f78 100644 --- a/apps/lcars/README.md +++ b/apps/lcars/README.md @@ -24,6 +24,7 @@ To contribute you can open a PR at this [GitHub Repo]( https://github.com/peerda * VREF - Voltage of battery * HRM - Last measured HRM * Temp - Weather temperature loaded via the weather module + gadgetbridge + * Humidity - Humidity loaded via the weather module + gadgetbridge * CoreT - Temperature of device ## Multiple screens support diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index c4e675873..0005e9016 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -3,9 +3,9 @@ const locale = require('locale'); const storage = require('Storage') let settings = { alarm: -1, - dataRow1: "Battery", - dataRow2: "Steps", - dataRow3: "Temp." + dataRow1: "Steps", + dataRow2: "Temp", + dataRow3: "Battery" }; let saved_settings = storage.readJSON(SETTINGS_FILE, 1) || settings; for (const key in saved_settings) { @@ -140,6 +140,11 @@ function printData(key, y, c){ var weather = getWeather(); value = locale.temp(parseInt(weather.temp-273.15)); + } else if (key == "HUMIDITY"){ + text = "HUM"; + var weather = getWeather(); + value = parseInt(weather.hum) + "%"; + } else if(key == "CORET"){ value = locale.temp(parseInt(E.getTemperature())); } @@ -418,17 +423,22 @@ function getSteps() { function getWeather(){ - let weather; + var weather = { + temp: 0, + hum: 0, + txt: "", + wind: 0, + wdir: 0, + wrose: "" + }; try { - weather = require('weather'); + weather = require('weather').get(); } catch(ex) { - return { - temp: 0.0 - }; + // Return default } - return weather.get(); + return weather; } diff --git a/apps/lcars/lcars.settings.js b/apps/lcars/lcars.settings.js index 1dd6e8d73..ba630799a 100644 --- a/apps/lcars/lcars.settings.js +++ b/apps/lcars/lcars.settings.js @@ -7,7 +7,7 @@ alarm: -1, dataRow1: "Battery", dataRow2: "Steps", - dataRow3: "Temp." + dataRow3: "Temp" }; let saved_settings = storage.readJSON(SETTINGS_FILE, 1) || settings; for (const key in saved_settings) { @@ -18,14 +18,14 @@ storage.write(SETTINGS_FILE, settings) } - var data_options = ["Steps", "Battery", "VREF", "HRM", "Temp", "CoreT"]; + var data_options = ["Steps", "Battery", "VREF", "HRM", "Temp", "Humidity", "CoreT"]; E.showMenu({ '': { 'title': 'LCARS Clock' }, '< Back': back, 'Row 1': { value: 0 | data_options.indexOf(settings.dataRow1), - min: 0, max: 5, + min: 0, max: 6, format: v => data_options[v], onchange: v => { settings.dataRow1 = data_options[v]; @@ -34,7 +34,7 @@ }, 'Row 2': { value: 0 | data_options.indexOf(settings.dataRow2), - min: 0, max: 5, + min: 0, max: 6, format: v => data_options[v], onchange: v => { settings.dataRow2 = data_options[v]; @@ -43,7 +43,7 @@ }, 'Row 3': { value: 0 | data_options.indexOf(settings.dataRow3), - min: 0, max: 5, + min: 0, max: 6, format: v => data_options[v], onchange: v => { settings.dataRow3 = data_options[v]; From dfd04df0f3d6237559e8319957eca9c0c5021f39 Mon Sep 17 00:00:00 2001 From: David Peer Date: Wed, 12 Jan 2022 07:20:08 +0100 Subject: [PATCH 6/7] Fixed weather --- apps/lcars/lcars.app.js | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 0005e9016..2674d323f 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -138,7 +138,7 @@ function printData(key, y, c){ } else if (key == "TEMP"){ var weather = getWeather(); - value = locale.temp(parseInt(weather.temp-273.15)); + value = weather.temp; } else if (key == "HUMIDITY"){ text = "HUM"; @@ -423,14 +423,7 @@ function getSteps() { function getWeather(){ - var weather = { - temp: 0, - hum: 0, - txt: "", - wind: 0, - wdir: 0, - wrose: "" - }; + var weather; try { weather = require('weather').get(); @@ -438,6 +431,19 @@ function getWeather(){ // Return default } + if (weather === undefined){ + weather = { + temp: "-", + hum: "-", + txt: "-", + wind: "-", + wdir: "-", + wrose: "-" + }; + } else { + weather.temp = locale.temp(parseInt(weather.temp-273.15)) + } + return weather; } From 2e564e06913e10ff6f06b67477dc9d3104e92440 Mon Sep 17 00:00:00 2001 From: David Peer Date: Wed, 12 Jan 2022 07:20:52 +0100 Subject: [PATCH 7/7] Created V0.12 --- apps.json | 6 +++--- apps/lcars/ChangeLog | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps.json b/apps.json index b5929a56c..0a4a80a72 100644 --- a/apps.json +++ b/apps.json @@ -1357,7 +1357,7 @@ "shortName":"HR Alarm", "version":"0.01", "description": "This invisible widget vibrates whenever the heart rate gets close to the upper limit or goes over or under the configured limits", - "icon": "widget.png", + "icon": "widget.png", "type": "widget", "tags": "widget", "supports" : ["BANGLEJS2"], @@ -4514,7 +4514,7 @@ "name": "LCARS Clock", "shortName":"LCARS", "icon": "lcars.png", - "version":"0.11", + "version":"0.12", "readme": "README.md", "supports": ["BANGLEJS2"], "description": "Library Computer Access Retrieval System (LCARS) clock.", @@ -5184,7 +5184,7 @@ {"name":"mmind.app.js","url":"mmind.app.js"}, {"name":"mmind.img","url":"mmind.icon.js","evaluate":true} ] - }, + }, { "id": "presentor", "name": "Presentor", diff --git a/apps/lcars/ChangeLog b/apps/lcars/ChangeLog index bb5270b70..702ef58b9 100644 --- a/apps/lcars/ChangeLog +++ b/apps/lcars/ChangeLog @@ -9,4 +9,4 @@ 0.09: Tab anywhere to open the launcher. 0.10: Removed swipes to be compatible with the Pattern Launcher. Stability improvements. 0.11: Show the gadgetbridge weather temperature (settings). -0.12: Refactoring and stability improvements. \ No newline at end of file +0.12: Added humidity to data. \ No newline at end of file