all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* upower battery-status-function
@ 2016-10-31 20:59 Evgeny Zajcev
  0 siblings, 0 replies; only message in thread
From: Evgeny Zajcev @ 2016-10-31 20:59 UTC (permalink / raw)
  To: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 3177 bytes --]

Hello, here is very fast dbus based battery status function, implemented
using upower interface.  Could you please include it in battery.el ?

    (defcustom battery-upower-device "battery_BAT1"
      "*Upower battery device name."
      :type 'string
      :group 'battery)

    (defsubst battery-upower-prop (pname &optional device)
      (dbus-get-property
       :system
       "org.freedesktop.UPower"
       (concat "/org/freedesktop/UPower/devices/" (or device
battery-upower-device))
       "org.freedesktop.UPower"
       pname))

    (defun battery-upower ()
      "Get battery status from dbus Upower interface.
    This function works only in systems with `upowerd' daemon
    running.

    The following %-sequences are provided:
    %c Current capacity (mWh)
    %p Battery load percentage
    %r Current rate
    %B Battery status (verbose)
    %L AC line status (verbose)
    %s Remaining time (to charge or discharge) in seconds
    %m Remaining time (to charge or discharge) in minutes
    %h Remaining time (to charge or discharge) in hours
    %t Remaining time (to charge or discharge) in the form `h:min'"
      (let ((percents (battery-upower-prop "Percentage"))
            (time-to-empty (battery-upower-prop "TimeToEmpty"))
            (time-to-full (battery-upower-prop "TimeToFull"))
            (state (battery-upower-prop "State"))
            (online (battery-upower-prop "Online" "line_power_ACAD"))
            (energy (battery-upower-prop "Energy"))
            (energy-rate (battery-upower-prop "EnergyRate"))
            (battery-states '((0 . "unknown") (1 . "charging")
                              (2 . "discharging") (3 . "empty")
                              (4 . "fully-charged") (5 . "pending-charge")
                              (6 . "pending-discharge")))
            seconds minutes hours remaining-time)
        (cond ((and online time-to-full)
               (setq seconds time-to-full))
              ((and (not online) time-to-empty)
               (setq seconds time-to-empty)))
        (when seconds
          (setq minutes (/ seconds 60)
                hours (/ minutes 60)
                remaining-time
                (format "%d:%02d" (truncate hours)
                        (- (truncate minutes) (* 60 (truncate hours))))))
        (list (cons ?c (or (and energy
                                (number-to-string (round (* 1000 energy))))
                           "N/A"))
              (cons ?p (or (and percents (number-to-string (round
percents)))
                           "N/A"))
              (cons ?r (or (and energy-rate
                                (concat (number-to-string energy-rate) "
W"))
                           "N/A"))
              (cons ?B (or (and state (cdr (assoc state battery-states)))
                           "unknown"))
              (cons ?L (or (and online "on-line") "off-line"))
              (cons ?s (or (and seconds (number-to-string seconds)) "N/A"))
              (cons ?m (or (and minutes (number-to-string minutes)) "N/A"))
              (cons ?h (or (and hours (number-to-string hours)) "N/A"))
              (cons ?t (or remaining-time "N/A")))))


thanks

--
lg

[-- Attachment #2: Type: text/html, Size: 4517 bytes --]

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2016-10-31 20:59 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-10-31 20:59 upower battery-status-function Evgeny Zajcev

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.