From bfe818b11e3a15fefc1b76383a7e1b5e1f7827ff Mon Sep 17 00:00:00 2001 From: Sam Delmerico Date: Sat, 16 Jun 2018 00:20:30 -0400 Subject: battery widgets support multiple batteries Added support for the battery widgets to read multiple battery values from the acpi output. The total charge becomes average of all of the available batteries, the status is that of the highest battery. --- batteryarc-widget/batteryarc.lua | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) (limited to 'batteryarc-widget') diff --git a/batteryarc-widget/batteryarc.lua b/batteryarc-widget/batteryarc.lua index e1ab203..811eafe 100644 --- a/batteryarc-widget/batteryarc.lua +++ b/batteryarc-widget/batteryarc.lua @@ -38,11 +38,30 @@ local batteryarc = wibox.widget { -- mirror the widget, so that chart value increases clockwise local batteryarc_widget = wibox.container.mirror(batteryarc, { horizontal = true }) +local last_battery_check = os.time() + watch("acpi", 10, function(widget, stdout, stderr, exitreason, exitcode) local batteryType - local _, status, charge_str, time = string.match(stdout, '(.+): (%a+), (%d?%d%d)%%,? ?.*') - local charge = tonumber(charge_str) + + local battery_info = {} + for s in stdout:gmatch("[^\r\n]+") do + local _, status, charge_str, time = string.match(s, '(.+): (%a+), (%d?%d?%d)%%,? ?.*') + table.insert(battery_info, {status = status, charge = tonumber(charge_str)}) + end + + local charge = 0 + local status + for i, batt in ipairs(battery_info) do + if batt.charge >= charge then + status = batt.status -- use most charged battery status + -- this is arbitrary, and maybe another metric should be used + end + + charge = charge + batt.charge + end + charge = charge // #battery_info -- use average charge for battery icon + widget.value = charge / 100 if status == 'Charging' then mirrored_text_with_background.bg = beautiful.widget_green @@ -54,7 +73,8 @@ watch("acpi", 10, if charge < 15 then batteryarc.colors = { beautiful.widget_red } - if status ~= 'Charging' then + if status ~= 'Charging' and os.difftime(os.time(), last_battery_check) > 300 then + -- if 5 minutes have elapsed since the last warning show_battery_warning() end elseif charge > 15 and charge < 40 then @@ -110,4 +130,4 @@ function show_battery_warning() } end -return batteryarc_widget \ No newline at end of file +return batteryarc_widget -- cgit v1.2.3 From 3d38cdb866bc6360b1d00d6b8ebdc695fa41bb0d Mon Sep 17 00:00:00 2001 From: Sam Delmerico Date: Sat, 16 Jun 2018 00:39:14 -0400 Subject: forgot to include update for low battery frequency --- battery-widget/battery.lua | 2 ++ batteryarc-widget/batteryarc.lua | 2 ++ 2 files changed, 4 insertions(+) (limited to 'batteryarc-widget') diff --git a/battery-widget/battery.lua b/battery-widget/battery.lua index b8e70bb..4cbc314 100644 --- a/battery-widget/battery.lua +++ b/battery-widget/battery.lua @@ -95,6 +95,8 @@ watch("acpi", 10, batteryType = "battery-empty%s-symbolic" if status ~= 'Charging' and os.difftime(os.time(), last_battery_check) > 300 then -- if 5 minutes have elapsed since the last warning + last_battery_check = time() + show_battery_warning() end elseif (charge >= 15 and charge < 40) then batteryType = "battery-caution%s-symbolic" diff --git a/batteryarc-widget/batteryarc.lua b/batteryarc-widget/batteryarc.lua index 811eafe..48233f3 100644 --- a/batteryarc-widget/batteryarc.lua +++ b/batteryarc-widget/batteryarc.lua @@ -75,6 +75,8 @@ watch("acpi", 10, batteryarc.colors = { beautiful.widget_red } if status ~= 'Charging' and os.difftime(os.time(), last_battery_check) > 300 then -- if 5 minutes have elapsed since the last warning + last_battery_check = time() + show_battery_warning() end elseif charge > 15 and charge < 40 then -- cgit v1.2.3