battery-rate 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #!/usr/bin/env python
  2. import os
  3. import sys
  4. import pydbus
  5. import datetime
  6. from gi.repository import GLib
  7. def main(argv):
  8. loop = GLib.MainLoop()
  9. battery = pydbus.SystemBus().get(
  10. 'org.freedesktop.UPower',
  11. '/org/freedesktop/UPower/devices/battery_BAT0',
  12. )
  13. def battery_changed():
  14. """ screen backtick does not kill the backtick process whenever the screen terminates. """
  15. if os.getppid() == 1:
  16. loop.quit()
  17. """ 0: Unknown
  18. 1: Charging
  19. 2: Discharging
  20. 3: Empty
  21. 4: Fully charged
  22. 5: Pending charge
  23. 6: Pending discharge
  24. """
  25. if battery.State == 2:
  26. sys.stdout.write('%.1fW %s\n' % (
  27. battery.EnergyRate,
  28. (datetime.datetime.now() + datetime.timedelta(seconds = battery.TimeToEmpty)).strftime("%H:%M"),
  29. ))
  30. elif battery.State == 4:
  31. sys.stdout.write('full\n')
  32. else:
  33. sys.stdout.write('%d%% %s\n' % (
  34. battery.Percentage,
  35. (datetime.datetime.now() + datetime.timedelta(seconds = battery.TimeToFull)).strftime("%H:%M"),
  36. ))
  37. sys.stdout.flush()
  38. battery.onChanged = battery_changed
  39. battery.onPropertiesChanged = lambda interface, attr, l: battery_changed()
  40. loop.run()
  41. if __name__ == "__main__":
  42. sys.exit(main(sys.argv[1:]))