From e7ae6cb901604d3a7b45346d31a76e6309688f95 Mon Sep 17 00:00:00 2001 From: plakak Date: Fri, 6 Aug 2021 13:08:16 +0200 Subject: [PATCH 1/5] fix: linux battery capacity --- lib/battery.js | 15 +++++++++++---- lib/util.js | 2 +- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/lib/battery.js b/lib/battery.js index 7780633..4c28766 100644 --- a/lib/battery.js +++ b/lib/battery.js @@ -90,19 +90,26 @@ module.exports = function (callback) { } else if (fs.existsSync('/sys/class/power_supply/BAT0/uevent')) { battery_path = '/sys/class/power_supply/BAT0/'; } + + let acConnected = false; + if (fs.existsSync('/sys/class/power_supply/AC/online')) { + const file = fs.readFileSync('/sys/class/power_supply/AC/online'); + acConnected = file.toString().trim() === '1'; + } + if (battery_path) { fs.readFile(battery_path + 'uevent', function (error, stdout) { if (!error) { let lines = stdout.toString().split('\n'); result.isCharging = (util.getValue(lines, 'POWER_SUPPLY_STATUS', '=').toLowerCase() === 'charging'); - result.acConnected = result.isCharging; + result.acConnected = acConnected || result.isCharging; result.voltage = parseInt('0' + util.getValue(lines, 'POWER_SUPPLY_VOLTAGE_NOW', '='), 10) / 1000000.0; result.capacityUnit = result.voltage ? 'mWh' : 'mAh'; result.cycleCount = parseInt('0' + util.getValue(lines, 'POWER_SUPPLY_CYCLE_COUNT', '='), 10); - result.maxCapacity = Math.round(parseInt('0' + util.getValue(lines, 'POWER_SUPPLY_CHARGE_FULL', '='), 10) / 1000.0 / (result.voltage || 1)); - result.designedCapacity = Math.round(parseInt('0' + util.getValue(lines, 'POWER_SUPPLY_CHARGE_FULL_DESIGN', '='), 10) / 1000.0 / (result.voltage || 1)) | result.maxcapacity; - result.currentCapacity = Math.round(parseInt('0' + util.getValue(lines, 'POWER_SUPPLY_CHARGE_NOW', '='), 10) / 1000.0 / (result.voltage || 1)); + result.maxCapacity = Math.round(parseInt('0' + util.getValue(lines, 'POWER_SUPPLY_CHARGE_FULL', '='), 10) / 1000.0); + result.designedCapacity = Math.round(parseInt('0' + util.getValue(lines, 'POWER_SUPPLY_CHARGE_FULL_DESIGN', '='), 10) / 1000.0); + result.currentCapacity = Math.round(parseInt('0' + util.getValue(lines, 'POWER_SUPPLY_CHARGE_NOW', '='), 10) / 1000.0); if (!result.maxCapacity) { result.maxCapacity = parseInt('0' + util.getValue(lines, 'POWER_SUPPLY_ENERGY_FULL', '='), 10) / 1000.0; result.designedCapacity = parseInt('0' + util.getValue(lines, 'POWER_SUPPLY_ENERGY_FULL_DESIGN', '='), 10) / 1000.0 | result.maxCapacity; diff --git a/lib/util.js b/lib/util.js index 32936f3..5b51632 100644 --- a/lib/util.js +++ b/lib/util.js @@ -112,7 +112,7 @@ function getValue(lines, property, separator, trimmed) { if (trimmed) { line = line.trim(); } - if (line.startsWith(property)) { + if (line.match(property + separator)) { const parts = trimmed ? lines[i].trim().split(separator) : lines[i].split(separator); if (parts.length >= 2) { parts.shift(); From bac6261f5e652a0c55131f7f41f0860cb973dbf1 Mon Sep 17 00:00:00 2001 From: plakak Date: Fri, 6 Aug 2021 14:00:12 +0200 Subject: [PATCH 2/5] mAh to mWh --- lib/battery.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/battery.js b/lib/battery.js index 4c28766..184b2fc 100644 --- a/lib/battery.js +++ b/lib/battery.js @@ -107,9 +107,9 @@ module.exports = function (callback) { result.voltage = parseInt('0' + util.getValue(lines, 'POWER_SUPPLY_VOLTAGE_NOW', '='), 10) / 1000000.0; result.capacityUnit = result.voltage ? 'mWh' : 'mAh'; result.cycleCount = parseInt('0' + util.getValue(lines, 'POWER_SUPPLY_CYCLE_COUNT', '='), 10); - result.maxCapacity = Math.round(parseInt('0' + util.getValue(lines, 'POWER_SUPPLY_CHARGE_FULL', '='), 10) / 1000.0); - result.designedCapacity = Math.round(parseInt('0' + util.getValue(lines, 'POWER_SUPPLY_CHARGE_FULL_DESIGN', '='), 10) / 1000.0); - result.currentCapacity = Math.round(parseInt('0' + util.getValue(lines, 'POWER_SUPPLY_CHARGE_NOW', '='), 10) / 1000.0); + result.maxCapacity = Math.round(parseInt('0' + util.getValue(lines, 'POWER_SUPPLY_CHARGE_FULL', '='), 10) / 1000.0 * (result.voltage | 1)); + result.designedCapacity = Math.round(parseInt('0' + util.getValue(lines, 'POWER_SUPPLY_CHARGE_FULL_DESIGN', '='), 10) / 1000.0 * (result.voltage | 1)); + result.currentCapacity = Math.round(parseInt('0' + util.getValue(lines, 'POWER_SUPPLY_CHARGE_NOW', '='), 10) / 1000.0 * (result.voltage | 1)); if (!result.maxCapacity) { result.maxCapacity = parseInt('0' + util.getValue(lines, 'POWER_SUPPLY_ENERGY_FULL', '='), 10) / 1000.0; result.designedCapacity = parseInt('0' + util.getValue(lines, 'POWER_SUPPLY_ENERGY_FULL_DESIGN', '='), 10) / 1000.0 | result.maxCapacity; From 5eaeae785bff843b9809967283951b40c97c17e7 Mon Sep 17 00:00:00 2001 From: plakak Date: Fri, 6 Aug 2021 14:48:16 +0200 Subject: [PATCH 3/5] fix util --- lib/util.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/util.js b/lib/util.js index 5b51632..ce67f4b 100644 --- a/lib/util.js +++ b/lib/util.js @@ -112,7 +112,7 @@ function getValue(lines, property, separator, trimmed) { if (trimmed) { line = line.trim(); } - if (line.match(property + separator)) { + if (line.startsWith(property) && line.match(property + separator)) { const parts = trimmed ? lines[i].trim().split(separator) : lines[i].split(separator); if (parts.length >= 2) { parts.shift(); From f3688f70fd4e87043b14d460a2f6ad14ffb235e8 Mon Sep 17 00:00:00 2001 From: plakak Date: Fri, 6 Aug 2021 14:49:06 +0200 Subject: [PATCH 4/5] typo fix --- lib/battery.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/battery.js b/lib/battery.js index 184b2fc..bdbef3f 100644 --- a/lib/battery.js +++ b/lib/battery.js @@ -107,9 +107,9 @@ module.exports = function (callback) { result.voltage = parseInt('0' + util.getValue(lines, 'POWER_SUPPLY_VOLTAGE_NOW', '='), 10) / 1000000.0; result.capacityUnit = result.voltage ? 'mWh' : 'mAh'; result.cycleCount = parseInt('0' + util.getValue(lines, 'POWER_SUPPLY_CYCLE_COUNT', '='), 10); - result.maxCapacity = Math.round(parseInt('0' + util.getValue(lines, 'POWER_SUPPLY_CHARGE_FULL', '='), 10) / 1000.0 * (result.voltage | 1)); - result.designedCapacity = Math.round(parseInt('0' + util.getValue(lines, 'POWER_SUPPLY_CHARGE_FULL_DESIGN', '='), 10) / 1000.0 * (result.voltage | 1)); - result.currentCapacity = Math.round(parseInt('0' + util.getValue(lines, 'POWER_SUPPLY_CHARGE_NOW', '='), 10) / 1000.0 * (result.voltage | 1)); + result.maxCapacity = Math.round(parseInt('0' + util.getValue(lines, 'POWER_SUPPLY_CHARGE_FULL', '='), 10) / 1000.0 * (result.voltage || 1)); + result.designedCapacity = Math.round(parseInt('0' + util.getValue(lines, 'POWER_SUPPLY_CHARGE_FULL_DESIGN', '='), 10) / 1000.0 * (result.voltage || 1)); + result.currentCapacity = Math.round(parseInt('0' + util.getValue(lines, 'POWER_SUPPLY_CHARGE_NOW', '='), 10) / 1000.0 * (result.voltage || 1)); if (!result.maxCapacity) { result.maxCapacity = parseInt('0' + util.getValue(lines, 'POWER_SUPPLY_ENERGY_FULL', '='), 10) / 1000.0; result.designedCapacity = parseInt('0' + util.getValue(lines, 'POWER_SUPPLY_ENERGY_FULL_DESIGN', '='), 10) / 1000.0 | result.maxCapacity; From 2bab419ee2870ccb25744317c494c884742bf9a3 Mon Sep 17 00:00:00 2001 From: plakak Date: Fri, 6 Aug 2021 15:10:13 +0200 Subject: [PATCH 5/5] support for AC0 --- lib/battery.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/battery.js b/lib/battery.js index bdbef3f..a0aa83f 100644 --- a/lib/battery.js +++ b/lib/battery.js @@ -92,8 +92,15 @@ module.exports = function (callback) { } let acConnected = false; + let acPath = ''; if (fs.existsSync('/sys/class/power_supply/AC/online')) { - const file = fs.readFileSync('/sys/class/power_supply/AC/online'); + acPath = '/sys/class/power_supply/AC/online'; + } else if (fs.existsSync('/sys/class/power_supply/AC0/online')) { + acPath = '/sys/class/power_supply/AC0/online'; + } + + if (acPath) { + const file = fs.readFileSync(acPath); acConnected = file.toString().trim() === '1'; }