From dcac704b3d6bc3c4ad2ccacb3d79fc67d900087f Mon Sep 17 00:00:00 2001 From: Russell Morris Date: Wed, 22 Jan 2020 21:10:13 -0600 Subject: 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 [rebase on top of master, rewrite commit message, adjust copyright, convert some ubus fields to boolean values] Signed-off-by: Jo-Philipp Wich --- .../luci-static/resources/preload/battstatus.js | 55 ++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100755 modules/luci-mod-battstatus/htdocs/luci-static/resources/preload/battstatus.js (limited to 'modules/luci-mod-battstatus/htdocs') diff --git a/modules/luci-mod-battstatus/htdocs/luci-static/resources/preload/battstatus.js b/modules/luci-mod-battstatus/htdocs/luci-static/resources/preload/battstatus.js new file mode 100755 index 0000000000..d895c36bbd --- /dev/null +++ b/modules/luci-mod-battstatus/htdocs/luci-static/resources/preload/battstatus.js @@ -0,0 +1,55 @@ +'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 = `${info.status}`; + } + + devices[dev] = info; + } + + for (var dev in devices) { + if (!devs.hasOwnProperty(dev)) { + ui.hideIndicator('battery-%s'.format(dev)); + delete devices[dev]; + } + } + }, this)); + } +}); -- cgit v1.2.3