+#! /usr/bin/awk -f
+
+# When parsing 'upower --dump'
+/^Device:[ \t]+/ {
+ device["path"] = $2
+ next
+}
+
+# When parsing 'upower --monitor-detail'
+/^\[[0-9]+:[0-9]+:[0-9]+\.[0-9]+\][ \t]+device changed:[ \t]+/ {
+ device["path"] = $4
+ next
+}
+
+/ native-path:/ && device["path"] {
+ device["native_path"] = $2
+ next
+}
+
+# BEGIN battery
+/ battery/ && device["path"] {
+ device["is_battery"] = 1
+ next
+}
+
+/ state:/ && device["is_battery"] {
+ device["battery_state"] = $2
+ next
+}
+
+/ energy:/ && device["is_battery"] {
+ device["energy"] = $2
+ next
+}
+
+/ energy-full:/ && device["is_battery"] {
+ device["energy_full"] = $2
+ next
+}
+
+/ percentage:/ && device["is_battery"] {
+ device["battery_percentage"] = $2
+ sub("%$", "", device["battery_percentage"])
+ next
+}
+
+/^$/ && device["is_battery"] {
+ print("battery_state" , aggregate_battery_state())
+ print("battery_percentage", aggregate_battery_percentage())
+}
+# END battery
+
+# BEGIN line-power
+/ line-power/ && device["path"] {
+ device["is_line_power"] = 1
+ next
+}
+
+/ online:/ && device["is_line_power"] {
+ device["line_power_online"] = $2
+ next
+}
+
+/^$/ && device["is_line_power"] {
+ print("line_power", device["line_power_online"])
+}
+# END line-power
+
+/^$/ {
+ delete device
+ next
+}
+
+function aggregate_battery_percentage( bat, curr, full) {
+ _battery_energy[device["native_path"]] = device["energy"]
+ _battery_energy_full[device["native_path"]] = device["energy_full"]
+ for (bat in _battery_energy) {
+ curr = curr + _battery_energy[bat]
+ full = full + _battery_energy_full[bat]
+ }
+ return ((curr / full) * 100)
+}
+
+function aggregate_battery_state( curr, bat, new) {
+ _battery_state[device["native_path"]] = device["battery_state"]
+ curr = device["battery_state"]
+ for (bat in _battery_state) {
+ new = _battery_state[bat]
+ if (new == "discharging") {
+ curr = new
+ } else if (curr != "discharging" && new == "charging") {
+ curr = new
+ }
+ }
+ return curr
+}