BangleApps/apps/batchart/widget.js

124 lines
3.6 KiB
JavaScript
Raw Normal View History

2020-04-08 20:28:24 +00:00
(() => {
2020-05-11 18:48:50 +00:00
let recordingInterval = null;
2020-04-14 11:55:36 +00:00
const Storage = require("Storage");
2023-06-30 11:20:43 +00:00
2020-04-14 11:55:36 +00:00
const switchableConsumers = {
2020-04-09 06:19:38 +00:00
none: 0,
lcd: 1,
compass: 2,
bluetooth: 4,
gps: 8,
hrm: 16
2020-04-09 14:10:10 +00:00
};
2024-03-04 20:34:50 +00:00
//var batChartFile; // file for battery percentage recording
2020-04-09 06:19:38 +00:00
const recordingInterval10Min = 60 * 10 * 1000;
2024-03-04 20:34:50 +00:00
//const recordingInterval1Min = 60 * 1000; //For testing
//const recordingInterval10S = 10 * 1000; //For testing
2020-04-08 20:28:24 +00:00
var compassEventReceived = false;
var gpsEventReceived = false;
var hrmEventReceived = false;
2020-04-08 20:28:24 +00:00
function draw() {
2020-05-11 18:48:50 +00:00
// void
2020-04-08 20:28:24 +00:00
}
2020-05-11 18:48:50 +00:00
function batteryChartOnMag() {
compassEventReceived = true;
// Stop handling events when no longer necessarry
2020-05-11 18:48:50 +00:00
Bangle.removeListener("mag", batteryChartOnMag);
}
2020-05-11 18:48:50 +00:00
function batterChartOnGps() {
gpsEventReceived = true;
2020-05-11 18:48:50 +00:00
Bangle.removeListener("GPS", batterChartOnGps);
}
2020-05-11 18:48:50 +00:00
function batteryChartOnHrm() {
2020-04-14 16:04:02 +00:00
hrmEventReceived = true;
2020-05-11 18:48:50 +00:00
Bangle.removeListener("HRM", batteryChartOnHrm);
}
2020-04-09 06:19:38 +00:00
function getEnabledConsumersValue() {
2020-04-16 09:24:17 +00:00
// Wait for an event from each of the devices to see if they are switched on
2020-04-09 06:19:38 +00:00
var enabledConsumers = switchableConsumers.none;
2020-05-11 18:48:50 +00:00
Bangle.on('mag', batteryChartOnMag);
Bangle.on('GPS', batterChartOnGps);
Bangle.on('HRM', batteryChartOnHrm);
// Wait two seconds, that should be enough for each of the events to get raised once
2020-04-16 09:24:17 +00:00
setTimeout(() => {
2020-05-11 18:48:50 +00:00
Bangle.removeListener('mag', batteryChartOnMag);
Bangle.removeListener('GPS', batterChartOnGps);
Bangle.removeListener('HRM', batteryChartOnHrm);
}, 2000);
2020-04-09 06:19:38 +00:00
if (Bangle.isLCDOn())
enabledConsumers = enabledConsumers | switchableConsumers.lcd;
if (compassEventReceived)
enabledConsumers = enabledConsumers | switchableConsumers.compass;
if (gpsEventReceived)
enabledConsumers = enabledConsumers | switchableConsumers.gps;
if (hrmEventReceived)
enabledConsumers = enabledConsumers | switchableConsumers.hrm;
2020-04-28 09:30:44 +00:00
// Very coarse first approach to check if the BLE device is on.
if (NRF.getSecurityStatus().connected)
enabledConsumers = enabledConsumers | switchableConsumers.bluetooth;
2020-04-14 19:02:39 +00:00
// Reset the event registration vars
compassEventReceived = false;
gpsEventReceived = false;
hrmEventReceived = false;
return enabledConsumers.toString();
2020-04-08 20:28:24 +00:00
}
2020-04-09 14:10:10 +00:00
function logBatteryData() {
const previousWriteLogName = "bcprvday";
2020-04-14 16:33:56 +00:00
const previousWriteDay = parseInt(Storage.open(previousWriteLogName, "r").readLine());
2020-04-09 14:10:10 +00:00
const currentWriteDay = new Date().getDay();
const logFileName = "bclog" + currentWriteDay;
// Change log target on day change
2020-04-16 09:24:17 +00:00
if (!isNaN(previousWriteDay) && previousWriteDay != currentWriteDay) {
2020-04-09 14:10:10 +00:00
//Remove a log file containing data from a week ago
2020-04-14 15:46:59 +00:00
Storage.open(logFileName, "r").erase();
2020-04-14 16:33:56 +00:00
Storage.open(previousWriteLogName, "w").write(parseInt(currentWriteDay));
2020-04-09 14:10:10 +00:00
}
var bcLogFileA = Storage.open(logFileName, "a");
2020-04-09 14:10:10 +00:00
if (bcLogFileA) {
let logTime = getTime().toFixed(0);
let logPercent = E.getBattery();
let logTemperature = E.getTemperature();
let logConsumers = getEnabledConsumersValue();
2023-06-30 11:20:43 +00:00
let logString = [logTime, logPercent, logTemperature, logConsumers].join(",");
2023-06-30 11:20:43 +00:00
2020-04-14 19:20:09 +00:00
bcLogFileA.write(logString + "\n");
2020-04-09 14:10:10 +00:00
}
}
function reload() {
2020-05-11 18:48:50 +00:00
WIDGETS["batchart"].width = 0;
if (recordingInterval) {
clearInterval(recordingInterval);
recordingInterval = null;
}
2020-04-09 14:10:10 +00:00
recordingInterval = setInterval(logBatteryData, recordingInterval10Min);
2020-04-09 14:10:10 +00:00
}
2020-04-08 20:28:24 +00:00
// add the widget
WIDGETS["batchart"] = {
2020-05-11 18:48:50 +00:00
area: "tl", width: 0, draw: draw, reload: reload
2020-04-16 09:24:17 +00:00
};
2020-04-14 19:02:39 +00:00
2020-04-08 20:28:24 +00:00
reload();
2023-06-30 11:20:43 +00:00
})();