From ce42dfb3e92fa78a9ae1f519df7e41db0bbb794a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20B=C3=BCsgen?= Date: Sun, 19 May 2024 16:51:14 +0200 Subject: [PATCH] refactor: rename sleepasandroid to accelsender --- .../{sleepasandroid => accelsender}/ChangeLog | 0 apps/accelsender/README.md | 19 ++++++++++++ .../bluetooth.png | Bin apps/{sleepasandroid => accelsender}/boot.js | 24 ++++++++-------- apps/accelsender/boot.min.js | 1 + apps/accelsender/config.json | 4 +++ apps/accelsender/metadata.json | 27 ++++++++++++++++++ apps/android/boot.js | 4 +-- apps/sleepasandroid/README.md | 22 -------------- apps/sleepasandroid/boot.min.js | 1 - apps/sleepasandroid/config.json | 3 -- apps/sleepasandroid/metadata.json | 27 ------------------ 12 files changed, 65 insertions(+), 67 deletions(-) rename apps/{sleepasandroid => accelsender}/ChangeLog (100%) create mode 100644 apps/accelsender/README.md rename apps/{sleepasandroid => accelsender}/bluetooth.png (100%) rename apps/{sleepasandroid => accelsender}/boot.js (61%) create mode 100644 apps/accelsender/boot.min.js create mode 100644 apps/accelsender/config.json create mode 100644 apps/accelsender/metadata.json delete mode 100644 apps/sleepasandroid/README.md delete mode 100644 apps/sleepasandroid/boot.min.js delete mode 100644 apps/sleepasandroid/config.json delete mode 100644 apps/sleepasandroid/metadata.json diff --git a/apps/sleepasandroid/ChangeLog b/apps/accelsender/ChangeLog similarity index 100% rename from apps/sleepasandroid/ChangeLog rename to apps/accelsender/ChangeLog diff --git a/apps/accelsender/README.md b/apps/accelsender/README.md new file mode 100644 index 000000000..eb18bb88a --- /dev/null +++ b/apps/accelsender/README.md @@ -0,0 +1,19 @@ +# Accerleration Data Provider + +This app provides acceleration data via Bluetooth, which can be used in Gadgetbridge. + +## Usage + +This boot code runs in the background and has no user interface. +Currently this app is used to enable Sleep as Android tracking for your Banglejs using Gadgetbridge. + +**Please Note**: This app only listens to "accel" events and sends them to your phone using Bluetooth. + +## Creator + +[Another Stranger](https://github.com/anotherstranger) + +## Aknowledgements + +Special thanks to [José Rebelo](https://github.com/joserebelo) and [Rob Pilling](https://github.com/bobrippling) +for their Code Reviews and guidance. diff --git a/apps/sleepasandroid/bluetooth.png b/apps/accelsender/bluetooth.png similarity index 100% rename from apps/sleepasandroid/bluetooth.png rename to apps/accelsender/bluetooth.png diff --git a/apps/sleepasandroid/boot.js b/apps/accelsender/boot.js similarity index 61% rename from apps/sleepasandroid/boot.js rename to apps/accelsender/boot.js index 16fe417f4..f0aac414f 100644 --- a/apps/sleepasandroid/boot.js +++ b/apps/accelsender/boot.js @@ -12,13 +12,15 @@ } } - var max_acceleration = {x: 0, y: 0, z: 0, mag: 0}; + var max_acceleration = { x: 0, y: 0, z: 0, diff: 0, td: 0, mag: 0 }; + var hasData = false; /** * Updates the maximum acceleration if the current acceleration is greater. * @param {Object} accel - The current acceleration object with x, y, z, and mag properties. */ function updateAcceleration(accel) { + hasData = true; var current_max_raw = accel.mag; var max_raw = max_acceleration.mag; @@ -28,27 +30,25 @@ } /** - * Updates the Sleep as Android data and sends it to gadgetbridge. + * Updates the acceleration data and sends it to gadgetbridge. * Resets the maximum acceleration. - * Acceleration values in g are converted to m/s^2, as expected by Sleep as Android. + * Note: If your interval setting is too short, the last value gets sent again. */ - function sendSleepAsAndroidData() { - var accel = Bangle.getAccel(); - var health = Bangle.getHealthStatus(); + function sendAccelerationData() { + accel = hasData ? max_acceleration : Banlejs.getAccel(); var update_data = { - t: "sleep_as_android", accel: { - x: accel.x * 9.80665, y: accel.y * 9.80665, z: accel.z * 9.80665 - }, bpm: health.bpm + t: "accel", accel: accel }; gbSend(update_data); - max_acceleration = {x: 0, y: 0, z: 0, mag: 0}; + max_acceleration = { x: 0, y: 0, z: 0, mag: 0, diff: 0, td: 0 }; + hasData = false; } var config = require("Storage").readJSON("sleepasandroid.json") || {}; - if (config.enabled) { // Gadgetbridge needs to enable and disable tracking by writing {enabled: true} to "sleepasandroid.json" and reloading - setInterval(sendSleepAsAndroidData, 10000); // Sleep as Android wants a 10-second maximum + if (config.enabled) { // Gadgetbridge needs to enable and disable tracking by writing {enabled: true} to "accelsender.json" and reloading + setInterval(sendAccelerationData, config.interval); Bangle.on("accel", updateAcceleration); // Log all acceleration events } diff --git a/apps/accelsender/boot.min.js b/apps/accelsender/boot.min.js new file mode 100644 index 000000000..341dbee7a --- /dev/null +++ b/apps/accelsender/boot.min.js @@ -0,0 +1 @@ +(()=>{function a(A){try {Bluetooth.println('');Bluetooth.println(JSON.stringify(A))} catch (_) {console.error('Failed to send message via Bluetooth:',_)}}var b={x:0,y:0,z:0,diff:0,td:0,mag:0},c=!1,f=require('Storage').readJSON('sleepasandroid.json')||{};function d(B){c=!0;var C=B.mag,_c=b.mag;C>_c&&(b=B)}function e(){accel=c?b:Banlejs.getAccel();a({t:'accel',accel:accel});b={x:0,y:0,z:0,mag:0,diff:0,td:0};c=!1}f.enabled&&(setInterval(e,f.interval),Bangle.on('accel',d))})(); diff --git a/apps/accelsender/config.json b/apps/accelsender/config.json new file mode 100644 index 000000000..70590f2f2 --- /dev/null +++ b/apps/accelsender/config.json @@ -0,0 +1,4 @@ +{ + "enabled": false, + "interval": 10000 +} \ No newline at end of file diff --git a/apps/accelsender/metadata.json b/apps/accelsender/metadata.json new file mode 100644 index 000000000..b63f7485e --- /dev/null +++ b/apps/accelsender/metadata.json @@ -0,0 +1,27 @@ +{ + "id": "accelsender", + "name": "Acceleration Data Provider", + "shortName": "Accel Data Provider", + "version": "0.01", + "description": "This app sends accelerometer and heart rate data from your Bangle.js via Bluetooth.", + "icon": "bluetooth.png", + "type": "bootloader", + "tags": "accel", + "supports": [ + "BANGLEJS", + "BANGLEJS2" + ], + "readme": "README.md", + "storage": [ + { + "name": "accelsender.boot.js", + "url": "boot.min.js" + } + ], + "data": [ + { + "name": "accelsender.json", + "url": "config.json" + } + ] +} diff --git a/apps/android/boot.js b/apps/android/boot.js index 72225dff0..90c37b4a0 100644 --- a/apps/android/boot.js +++ b/apps/android/boot.js @@ -293,8 +293,8 @@ if (Array.isArray(event.d)) require("Storage").writeJSON("android.cards.json", event.d); }, - "sleepasandroid": function () { - require("Storage").writeJSON("sleepasandroid.json", {enabled: event.enable}); + "accelsender": function () { + require("Storage").writeJSON("accelsender.json", {enabled: event.enable, interval: event.interval}); load(); } }; diff --git a/apps/sleepasandroid/README.md b/apps/sleepasandroid/README.md deleted file mode 100644 index c2b85189b..000000000 --- a/apps/sleepasandroid/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# Sleep as Android Integration - -This app provides support for Sleep as Android using Gadgetbridge. - -## Usage - -This boot code runs in the background and has no user interface. -For this to work you have to enable Sleep as Android support in Gadgetbridge and -select your Banglejs device. - -**Please Note**: This app does not activate the HRM sensor. It only listens to HRM events. -You may want to adjust the HRM sampling rate in the Health APP. I recommend at least one sample -every 10 minutes. - -## Creator - -[Another Stranger](https://github.com/anotherstranger) - -## Aknowledgements - -Special thanks to [José Rebelo](https://github.com/joserebelo) and [Rob Pilling](https://github.com/bobrippling) -for their Code Reviews and guidance. diff --git a/apps/sleepasandroid/boot.min.js b/apps/sleepasandroid/boot.min.js deleted file mode 100644 index 1d54f01e0..000000000 --- a/apps/sleepasandroid/boot.min.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{function a(A){try {Bluetooth.println('');Bluetooth.println(JSON.stringify(A))} catch (_) {console.error('Failed to send message via Bluetooth:',_)}}var b={x:0,y:0,z:0,mag:0},e=require('Storage').readJSON('sleepasandroid.json')||{};function c(B){var C=B.mag,_c=b.mag;C>_c&&(b=B)}function d(){var _a=Bangle.getAccel(),_b=Bangle.getHealthStatus();a({t:'sleep_as_android',accel:{x:_a.x*9.80665,y:_a.y*9.80665,z:_a.z*9.80665},bpm:_b.bpm});b={x:0,y:0,z:0,mag:0}}e.enabled&&(setInterval(d,10000),Bangle.on('accel',c))})(); diff --git a/apps/sleepasandroid/config.json b/apps/sleepasandroid/config.json deleted file mode 100644 index c994fef1c..000000000 --- a/apps/sleepasandroid/config.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "enabled": false -} \ No newline at end of file diff --git a/apps/sleepasandroid/metadata.json b/apps/sleepasandroid/metadata.json deleted file mode 100644 index 944331d5c..000000000 --- a/apps/sleepasandroid/metadata.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": "sleepasandroid", - "name": "Sleep as Android data provider", - "shortName": "BLE Sleep as Android", - "version": "0.01", - "description": "This app sends accelerometer and heart rate data from your Bangle.js to the Sleep as Android app via Bluetooth (Gadgetbridge required), enabling advanced sleep tracking features.", - "icon": "bluetooth.png", - "type": "bootloader", - "tags": "hrm,health,ble,bluetooth", - "supports": [ - "BANGLEJS", - "BANGLEJS2" - ], - "readme": "README.md", - "storage": [ - { - "name": "sleepasandroid.boot.js", - "url": "boot.min.js" - } - ], - "data": [ - { - "name": "sleepasandroid.json", - "url": "config.json" - } - ] -}