Created
February 17, 2020 13:57
-
-
Save brettbeeson/31926fac53a9a259d8e97e63b7b848cc to your computer and use it in GitHub Desktop.
Manage wakeup time on a pijuice using local times
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python3 | |
import datetime | |
import os | |
import time | |
from datetime import time | |
import dateutil.parser | |
from pijuice import PiJuice | |
import argparse | |
def pijuice_check_error(pyjuice_response): | |
if pyjuice_response['error'] != 'NO_ERROR': | |
raise RuntimeError("pijuice failed with code: {}".format(pyjuice_response['error'])) | |
def pijuice_get_data(f): | |
""" | |
Try a few times | |
""" | |
for i in range(0, 10): | |
r = f() | |
# pprint(r) | |
if r['error'] == 'NO_ERROR': | |
return r['data'] | |
else: | |
time.sleep(.1) | |
raise RuntimeError("pijuice failed with code: {}".format(f()['error'])) | |
argparser = argparse.ArgumentParser("Manage wakeup time using local times") | |
argparser.add_argument("command",choices=['enable','disable'],nargs='?',help="Or omit to get status only") | |
argparser.add_argument("wake", nargs="?", help="Set wakeup time to time (anything parsable, local timezone)") | |
args = argparser.parse_args() | |
sleeps = 0 | |
while not os.path.exists('/dev/i2c-1'): | |
time.sleep(0.1) | |
sleeps += 1 | |
if sleeps > 600: | |
raise Exception("pijuice-wakeup: No path to /dev/i2c-1") | |
pj = PiJuice() | |
if args.command == 'enable': | |
print("Enabling wakeup") | |
pj.rtcAlarm.SetWakeupEnabled(True) | |
elif args.command == 'disable': | |
print("Disabling wakeup") | |
pj.rtcAlarm.SetWakeupEnabled(False) | |
if args.wake: | |
wake_dt = dateutil.parser.parse(timestr=args.wake).replace(tzinfo=dateutil.tz.tzlocal()) | |
wake_dt_utc = wake_dt.astimezone(dateutil.tz.UTC) | |
print("Setting alarm to local: {} (UTC: {})".format(wake_dt, wake_dt_utc)) | |
wake_time_tz_utc_dict = {'second': wake_dt_utc.second, | |
'minute': wake_dt_utc.minute, | |
'hour': wake_dt_utc.hour, | |
'day': "EVERY_DAY"} | |
pijuice_check_error(pj.rtcAlarm.SetAlarm(wake_time_tz_utc_dict)) | |
check = pijuice_get_data(pj.rtcAlarm.GetAlarm) | |
if check['hour'] == "EVERY_HOUR": | |
hour_var = 0 | |
else: | |
hour_var = int(check['hour']) | |
wake_time_tz_utc = datetime.datetime(hour=hour_var, minute=int(check['minute']), | |
second=int(check['second']), year=2000, month=1, day=1).replace( | |
tzinfo=dateutil.tz.UTC) | |
wake_time_tz_local = wake_time_tz_utc.astimezone(dateutil.tz.tzlocal()) | |
wake_enabled = pijuice_get_data(pj.rtcAlarm.GetControlStatus)['alarm_wakeup_enabled'] | |
if args.command is None: | |
print("Wakeup enabled: {}".format(wake_enabled)) | |
if wake_enabled: | |
print("Wakeup time (local):{}".format(wake_time_tz_local)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment