diff --git a/eufy.py b/eufy.py index aa2a64d..fbf3b69 100755 --- a/eufy.py +++ b/eufy.py @@ -3,7 +3,7 @@ from cmd import Cmd from datetime import datetime, time from inspect import signature, Signature -from shlex import shlex +import os from time import sleep @@ -58,7 +58,12 @@ class EufyIR(EufyRawIR): RETURN_BASE = 0xef def __init__(self): - self._schedule = 0xff + self._schedule_file = os.path.expanduser('~/.eufy-schedule') + try: + with open(os.path.expanduser(self._SCHEDULE_FILE), 'r') as f: + self._schedule = int(f.read(5)) + except: + self._schedule = 0xff def _message(self, code): now = datetime.now() @@ -119,11 +124,17 @@ class EufyIR(EufyRawIR): self.send(self.SET_TIME) def setSchedule(self, t): - # FIXME: properly store schedule - self.send(self.SET_SCHEDULE, t) + self._schedule = t.hour * 4 + t.minute // 15 + with open(self._schedule_file, 'w') as f: + f.write(str(self._schedule)) + self.send(self.SET_SCHEDULE) def cancelSchedule(self): - # FIXME: properly store schedule + self._schedule = 0xff + try: + os.remove(self._schedule_file) + except: + pass self.send(self.CANCEL_SCHEDULE) def returnBase(self): @@ -132,11 +143,11 @@ class EufyIR(EufyRawIR): def lexer(f): def g(self, args): - argv = tuple(x.lower() for x in shlex(args)) + argv = tuple(x.lower() for x in args.split()) s = signature(f) - maxargs = len(s.parameters) - minargs = len([x for _,x in s.parameters.items() if x.default is not Signature.empty]) - if minargs <= len(argv) + 1 <= maxargs: + maxargs = len(s.parameters) - 1 + minargs = len([x for _,x in s.parameters.items() if x.default is Signature.empty]) - 1 + if minargs <= len(argv) <= maxargs: return f(self, *argv) else: self.stdout.write("*** Invalid arguments for {}\n".format(f.__name__[3:]))