diff --git a/apps/sleepasandroid/boot.js b/apps/sleepasandroid/boot.js index c7b48e0a0..edd17b90c 100644 --- a/apps/sleepasandroid/boot.js +++ b/apps/sleepasandroid/boot.js @@ -1,31 +1,52 @@ (() => { - eval(require("Storage").read("sleepasandroid.conf.js")); - var interval = null; - + /** + * Sends a message to the gadgetbridge via Bluetooth. + * @param {Object} message - The message to be sent. + */ function gbSend(message) { - // Helper function to send data to gadgetbridge - Bluetooth.println(""); - Bluetooth.println(JSON.stringify(message)); - } - - var config = new SleepAsAndroidConfig(); - - - function update_sleep_as_android() { - // send data to gadgetbridge - accel = Bangle.getAccel(); - health = Bangle.getHealthStatus(); - - update_data = {t: "sleep_as_android", "accel": {"x": accel.x, "y": accel.y, "z": accel.z}, "bpm": health.bpm}; - gbSend(update_data); - accel_data = []; - if (!config.getEnabled()) { - clearInterval(interval); + try { + Bluetooth.println(""); + Bluetooth.println(JSON.stringify(message)); + } catch (error) { + console.error("Failed to send message via Bluetooth:", error); } } - if (config.getEnabled()) { - interval = setInterval(update_sleep_as_android, 1000); + var max_acceleration = {x: 0, y: 0, z: 0, mag: 0}; + + /** + * 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) { + var current_max_raw = accel.mag; + var max_raw = max_acceleration.mag; + + if (current_max_raw > max_raw) { + max_acceleration = accel; + } } -})(); \ No newline at end of file + /** + * Updates the Sleep as Android 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. + */ + function sendSleepAsAndroidData() { + var accel = Bangle.getAccel(); + var health = Bangle.getHealthStatus(); + + 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 + }; + gbSend(update_data); + + max_acceleration = {x: 0, y: 0, z: 0, mag: 0}; + } + + setInterval(sendSleepAsAndroidData, 10000); // Sleep as Android wants a 10-second maximum + Bangle.on("accel", updateAcceleration); // Log all acceleration events + +})(); diff --git a/apps/sleepasandroid/boot.min.js b/apps/sleepasandroid/boot.min.js new file mode 100644 index 000000000..ae8662331 --- /dev/null +++ b/apps/sleepasandroid/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,mag:0};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}}setInterval(d,10000);Bangle.on('accel',c)})(); diff --git a/apps/sleepasandroid/config.js b/apps/sleepasandroid/config.js deleted file mode 100644 index 356b90176..000000000 --- a/apps/sleepasandroid/config.js +++ /dev/null @@ -1,34 +0,0 @@ -class SleepAsAndroidConfig { - //Simple class to store whether sleep as android is running - constructor() { - this.filename = "sleepasandroid.json"; - } - - getEnabled() { - //returns whether sleeptracking is enabled - var content = require("Storage").readJSON(this.filename); - if (content === undefined) { - this.setEnabled(false); - return this.getEnabled(); - } - return content.enabled; - } - - setEnabled(enabled) { - // set sleeptracking state - require("Storage").writeJSON(this.filename, {"enabled": enabled}); - } -} - -function startTracking() { - var config = new SleepAsAndroidConfig(); - config.setEnabled(true); -} - -function stopTracking() { - var config = new SleepAsAndroidConfig(); - config.setEnabled(false); -} - -// (() => {eval(require("Storage").read("sleepasandroid.conf.js"));stopTracking();})(); -// (() => {eval(require("Storage").read("sleepasandroid.conf.js"));startTracking();})(); \ No newline at end of file diff --git a/apps/sleepasandroid/metadata.json b/apps/sleepasandroid/metadata.json index 5eeeef642..08c5a2238 100644 --- a/apps/sleepasandroid/metadata.json +++ b/apps/sleepasandroid/metadata.json @@ -1,16 +1,21 @@ { "id": "sleepasandroid", - "name": "Send data to sleep as android", - "shortName": "BLE sleep as android", + "name": "Sleep as Android data provider", + "shortName": "BLE Sleep as Android", "version": "0.01", - "description": "Send sensordata to sleep as android.\n", + "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"], + "supports": [ + "BANGLEJS", + "BANGLEJS2" + ], "readme": "README.md", "storage": [ - {"name":"sleepasandroid.boot.js","url":"boot.js"}, - {"name":"sleepasandroid.conf.js","url":"config.js"} + { + "name": "sleepasandroid.boot.js", + "url": "boot.min.js" + } ] }