From 29d588e17dcad5a69d10eba6de43f04229718507 Mon Sep 17 00:00:00 2001 From: notEvil Date: Mon, 16 Jan 2023 15:50:15 +0100 Subject: [PATCH] - first commit --- apps/chargent/ChangeLog | 1 + apps/chargent/README.md | 13 +++++++++++++ apps/chargent/boot.js | 30 ++++++++++++++++++++++++++++++ apps/chargent/icon.png | Bin 0 -> 5032 bytes apps/chargent/metadata.json | 13 +++++++++++++ 5 files changed, 57 insertions(+) create mode 100644 apps/chargent/ChangeLog create mode 100644 apps/chargent/README.md create mode 100644 apps/chargent/boot.js create mode 100644 apps/chargent/icon.png create mode 100644 apps/chargent/metadata.json diff --git a/apps/chargent/ChangeLog b/apps/chargent/ChangeLog new file mode 100644 index 000000000..7f837e50e --- /dev/null +++ b/apps/chargent/ChangeLog @@ -0,0 +1 @@ +0.01: First version diff --git a/apps/chargent/README.md b/apps/chargent/README.md new file mode 100644 index 000000000..56bc763b4 --- /dev/null +++ b/apps/chargent/README.md @@ -0,0 +1,13 @@ +# Charge Gently + +Charging Li-ion batteries to their full capacity has a significant impact on their lifespan. If possible, it is good practice to charge more often, but only to a certain lower capacity. + +The first stage of charging Li-ion ends at ~80% capacity when the charge voltage reaches its peak*. When that happens, the watch will buzz twice every 30s to remind you to disconnect the watch. + +This app has no UI and no configuration. To disable the app, you have to uninstall it. + +Side notes +- Full capacity is reached after charge current drops to an insignificant level. This is quite some time after charge voltage reached its peak / `E.getBattery()` returns 100. +- This app starts buzzing some time after `E.getBattery()` returns 100 (~15min on my watch), and at least 5min after the peak to account for noise. + +\* according to https://batteryuniversity.com/article/bu-409-charging-lithium-ion assuming similar characteristics and readouts from pin `D30` approximate charge voltage \ No newline at end of file diff --git a/apps/chargent/boot.js b/apps/chargent/boot.js new file mode 100644 index 000000000..802c3f55a --- /dev/null +++ b/apps/chargent/boot.js @@ -0,0 +1,30 @@ +(() => { + var id; + Bangle.on('charging', (charging) => { + if (charging) { + if (!id) { + var max = 0; + var count = 0; + id = setInterval(() => { + var d30 = analogRead(D30); + if (max < d30) { + max = d30; + count = 0; + } else { + count++; + if (10 <= count) { // 10 * 30s == 5 min // TODO ? customizable + // TODO ? customizable + Bangle.buzz(500); + setTimeout(() => Bangle.buzz(500), 1000); + } + } + }, 30*1000); + } + } else { + if (id) { + clearInterval(id); + id = undefined; + } + } + }); +})(); diff --git a/apps/chargent/icon.png b/apps/chargent/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..dce0014cb8d42d05435a2a6e2dcb77daa5e6100c GIT binary patch literal 5032 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 X@}iIFV$(s;bWlWSw7eoXW#NASq-bMp literal 0 HcmV?d00001 diff --git a/apps/chargent/metadata.json b/apps/chargent/metadata.json new file mode 100644 index 000000000..e8c8afd71 --- /dev/null +++ b/apps/chargent/metadata.json @@ -0,0 +1,13 @@ +{ "id": "chargent", + "name": "Charge Gently", + "version": "0.01", + "description": "Reduces battery wear by buzzing when the first charge stage ended.", + "icon": "icon.png", + "type": "bootloader", + "tags": "battery", + "supports": ["BANGLEJS"], + "readme": "README.md", + "storage": [ + {"name": "chargent.boot.js", "url": "boot.js"} + ] +}