diff options
Diffstat (limited to 'examples')
-rw-r--r-- | examples/battery | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/examples/battery b/examples/battery new file mode 100644 index 0000000..5665f3e --- /dev/null +++ b/examples/battery @@ -0,0 +1,111 @@ +# -*- python -*- + +# This is a small example that inverts the colours when the +# batteries capacity is low. + + +# Copyright © 2014 Mattias Andrée (maandree@member.fsf.org) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + + +# Invert the colours when the battery capacity is below this threshold. +threshold = 5 # percent + + +# Current status. +inverted = False + +def get_capacity(): + ''' + Get the current capacity and charging status + + @return (:bool, :float) Whether the battery is discharging and the capacity (in percents) + ''' + capacity, discharging = None, None + + # Get capacity. + #with open('/sys/class/power_supply/BAT1/capacity', 'r') as file: + # capacity = int(file.read().split('\n')[0]) + + # More accurate capacity. + charge_full, charge_now = None, None + with open('/sys/class/power_supply/BAT1/charge_full', 'r') as file: + charge_full = int(file.read().split('\n')[0]) + with open('/sys/class/power_supply/BAT1/charge_now', 'r') as file: + charge_now = int(file.read().split('\n')[0]) + capacity = charge_now * 100 / charge_full + + # Is the battery discharging? + with open('/sys/class/power_supply/BAT1/status', 'r') as file: + discharging = file.read().split('\n')[0] == 'Discharging' + + return (discharging, capacity) + + +# Lets wait only 30 seconds, instead of a minute before running again. +wait_period = 30 + +# Do not fade in or out. +fadeout_time = None +fadein_time = None + + +def periodically(year, month, day, hour, minute, second, weekday, fade): + ''' + :(int, int, int, int, int, int, int, float?)?→void Place holder for periodically invoked function + + Invoked periodically + + If you want to control at what to invoke this function next time + you can set the value of the global variable `wait_period` to the + number of seconds to wait before invoking this function again. + The value does not need to be an integer. + + @param year:int The year + @param month:int The month, 1 = January, 12 = December + @param day:int The day, minimum value is 1, probable maximum value is 31 (*) + @param hour:int The hour, minimum value is 0, maximum value is 23 + @param minute:int The minute, minimum value is 0, maximum value is 59 + @param second:int The second, minimum value is 0, probable maximum value is 60 (**) + @param weekday:int The weekday, 1 = Monday, 7 = Sunday + @param fade:float? Blueshift can use this function to fade into a state when it start + or exits. `fade` can either be negative, zero or positive or `None`, + but the magnitude of value cannot exceed 1. When Blueshift starts, + this function will be invoked multiple with the time parameters + of the time it is invoked and each time `fade` will increase towards + 1, starting at 0, when the value is 1, the settings should be applied + to 100 %. After this this function will be invoked once again with + `fade` being `None`. When Blueshift exits the same behaviour is used + except, `fade` decrease towards -1 but start slightly below 0, when + -1 is reached all settings should be normal. Then Blueshift will NOT + invoke this function with `fade` being `None`, instead it will by + itself revert all settings and quit. + + (*) Can be exceeded if the calendar system is changed, like in 1712-(02)Feb-30 + (**) See https://en.wikipedia.org/wiki/Leap_second + ''' + global inverted + + (discharging, capacity) = get_capacity() + should_invert = discharging and (capacity <= threshold) + + if should_invert ^ inverted: + inverted = should_invert + start_over() + if should_invert: + negative() + monitor_controller() + |