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>
This commit is contained in:
parent
df3f629888
commit
dcac704b3d
4 changed files with 123 additions and 0 deletions
19
modules/luci-mod-battstatus/Makefile
Normal file
19
modules/luci-mod-battstatus/Makefile
Normal file
|
@ -0,0 +1,19 @@
|
|||
#
|
||||
# Copyright (C) 2020 Russell Morris <rmorris@rkmorris.us>
|
||||
#
|
||||
# This is free software, licensed under the Apache License, Version 2.0 .
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
LUCI_TITLE:=LuCI Battery Status
|
||||
LUCI_DESCRIPTION:=Provides a battery charge indicator in LuCI. Currently only supports the HooToo HT-TM05 travel router.
|
||||
|
||||
LUCI_DEPENDS:=+luci-base +libiwinfo-lua +rpcd-mod-iwinfo +libi2c +i2c-tools
|
||||
|
||||
PKG_LICENSE:=Apache-2.0
|
||||
|
||||
include ../../luci.mk
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
||||
|
|
@ -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 = `<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));
|
||||
}
|
||||
});
|
39
modules/luci-mod-battstatus/root/usr/libexec/rpcd/luci.battstatus
Executable file
39
modules/luci-mod-battstatus/root/usr/libexec/rpcd/luci.battstatus
Executable file
|
@ -0,0 +1,39 @@
|
|||
#!/bin/sh
|
||||
|
||||
. /usr/share/libubox/jshn.sh
|
||||
|
||||
case "$1" in
|
||||
list)
|
||||
printf '{ "getBatteryStatus": {} }'
|
||||
;;
|
||||
call)
|
||||
case "$2" in
|
||||
getBatteryStatus)
|
||||
json_init
|
||||
|
||||
eval $(/bin/ubus call system board 2>/dev/null | /usr/bin/jsonfilter -e 'MODEL=@.model')
|
||||
json_add_object "$MODEL"
|
||||
|
||||
if [ -f /usr/sbin/i2cset ] && [ -f /usr/sbin/i2cget ]; then
|
||||
json_add_boolean valid 1
|
||||
if [ $(i2cset -y 0 0x0a 0x0a 0x01 && i2cget -y 0 0x0a 0x0a) = 0x40 ]; then
|
||||
json_add_boolean charging 1
|
||||
else
|
||||
json_add_boolean charging 0
|
||||
fi
|
||||
json_add_int percentage $(i2cset -y 0 0x0a 0x0a 0x10 && i2cget -y 0 0x0a 0x0a | xargs printf %d)
|
||||
else
|
||||
json_add_boolean valid 0
|
||||
if [ ! -f /usr/sbin/i2cset ]; then
|
||||
json_add_string message "Need i2cset"
|
||||
else
|
||||
json_add_string message "Need i2cget"
|
||||
fi
|
||||
fi
|
||||
|
||||
json_close_object
|
||||
json_dump
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"luci-mod-battstatus": {
|
||||
"description": "Grant access to battery status",
|
||||
"read": {
|
||||
"ubus": {
|
||||
"luci.battstatus": [ "getBatteryStatus" ]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue