luci/modules/luci-mod-battstatus/htdocs/luci-static/resources/preload/battstatus.js
Russell Morris dcac704b3d luci-app-battstatus: initial release
Introduce a new package luci-app-battstatus which queries battery charge
information using i2c commands and displays a charge indicator in the
upper right notification area.

So far this package has been tested to work with the HooToo HT-TM05
travel router but might be extended to cover further models in the
future.

Signed-off-by: Russell Morris <rmorris@rkmorris.us>
[rebase on top of master, rewrite commit message, adjust copyright,
 convert some ubus fields to boolean values]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2020-07-18 15:28:36 +02:00

55 lines
1.4 KiB
JavaScript
Executable file

'use strict';
'require ui';
'require rpc';
'require poll';
'require baseclass';
var callBatteryStatus = rpc.declare({
object: 'luci.battstatus',
method: 'getBatteryStatus',
expect: { '': {} }
});
var devices = {};
return baseclass.extend({
__init__: function() {
this.updateIndicator();
poll.add(L.bind(this.updateIndicator, this), 5);
},
updateIndicator: function() {
return callBatteryStatus().then(L.bind(function(devs) {
for (var dev in devs) {
var info = devs[dev];
if (info.valid) {
info.status = (info.charging ? _('Charging') : _('Not Charging')) + ": " + info.percentage + "%";
info.state = "active";
if (info.percentage <= 20)
info.color = "Red";
else if (info.percentage <= 30)
info.color = "GoldenRod";
} else {
info.status = info.message;
info.state = "inactive";
}
info.name = "battery-" + dev.replace(" ", "-");
ui.showIndicator(info.name, info.status, null, info.state);
if (typeof info.color != 'undefined') {
info.element = document.querySelector(`[data-indicator="${info.name}"]`);
info.element.innerHTML = `<span style="color:${info.color}">${info.status}</span>`;
}
devices[dev] = info;
}
for (var dev in devices) {
if (!devs.hasOwnProperty(dev)) {
ui.hideIndicator('battery-%s'.format(dev));
delete devices[dev];
}
}
}, this));
}
});