Get rid of click. Use cmd and shlex instead.
This commit is contained in:
parent
8bf5da8ccc
commit
33250ee1cb
137
eufy.py
137
eufy.py
|
@ -1,7 +1,15 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
import click
|
import cmd
|
||||||
from datetime import datetime
|
from datetime import datetime, time
|
||||||
|
from inspect import getargspec
|
||||||
|
from shlex import shlex
|
||||||
|
from time import sleep
|
||||||
|
|
||||||
|
|
||||||
|
def drive_ir(pulses):
|
||||||
|
# Debugging placeholder
|
||||||
|
print(','.join([str(x) for x in pulses]))
|
||||||
|
|
||||||
|
|
||||||
class EufyRawIR:
|
class EufyRawIR:
|
||||||
|
@ -24,7 +32,7 @@ class EufyRawIR:
|
||||||
return 3*signal
|
return 3*signal
|
||||||
|
|
||||||
def sendRaw(self, message):
|
def sendRaw(self, message):
|
||||||
print(self._modulate(message))
|
drive_ir(self._modulate(message))
|
||||||
|
|
||||||
|
|
||||||
class EufyIR(EufyRawIR):
|
class EufyIR(EufyRawIR):
|
||||||
|
@ -122,47 +130,94 @@ class EufyIR(EufyRawIR):
|
||||||
self.send(self.RETURN_BASE)
|
self.send(self.RETURN_BASE)
|
||||||
|
|
||||||
|
|
||||||
@click.group()
|
def lexer(f):
|
||||||
def cli():
|
def g(self, args):
|
||||||
pass
|
argv = tuple(x.lower() for x in shlex(args))
|
||||||
|
s = getargspec(f)
|
||||||
|
maxargs = len(s.args or [])
|
||||||
|
minargs = maxargs - len(s.defaults or [])
|
||||||
|
if minargs <= len(argv) + 1 <= maxargs:
|
||||||
|
return f(self, *argv)
|
||||||
|
else:
|
||||||
|
self.stdout.write("*** Invalid arguments for {}\n".format(f.__name__[3:]))
|
||||||
|
return g
|
||||||
|
|
||||||
@cli.command()
|
|
||||||
@click.argument('mode', required=False,
|
|
||||||
type=click.Choice(['auto', 'spot', 'edge', 'room']))
|
|
||||||
def clean(mode):
|
|
||||||
eufy = EufyIR()
|
|
||||||
dict(
|
|
||||||
auto=eufy.cleanAuto,
|
|
||||||
spot=eufy.cleanSpot,
|
|
||||||
edge=eufy.cleanEdge,
|
|
||||||
room=eufy.cleanRoom
|
|
||||||
).get(mode, eufy.start)()
|
|
||||||
|
|
||||||
@cli.command()
|
class Eufy(cmd.Cmd):
|
||||||
@click.argument('mode', required=True,
|
|
||||||
type=click.Choice(['standard', 'boostiq', 'max']))
|
|
||||||
def power(mode):
|
|
||||||
eufy = EufyIR()
|
|
||||||
{
|
|
||||||
'standard': eufy.powerStandard,
|
|
||||||
'boostiq': eufy.powerBoostIQ,
|
|
||||||
'max': eufy.powerMax
|
|
||||||
}.get(mode)()
|
|
||||||
|
|
||||||
@cli.command()
|
prompt = 'eufy> '
|
||||||
@click.argument('mode', required=True,
|
|
||||||
type=click.Choice(['forward', 'backward', 'ccw', 'cw', 'left', 'right']))
|
def __init__(self, *args, **kwargs):
|
||||||
def move(mode):
|
super(Eufy, self).__init__(*args, **kwargs)
|
||||||
eufy = EufyIR()
|
self.ir = EufyIR()
|
||||||
dict(
|
|
||||||
forward=eufy.moveForward,
|
@lexer
|
||||||
backward=eufy.moveBackward,
|
def do_clean(self, mode='auto'):
|
||||||
ccw=eufy.moveCCW,
|
{
|
||||||
cw=eufy.moveCW,
|
'auto': self.ir.cleanAuto,
|
||||||
left=eufy.moveLeft,
|
'spot': self.ir.cleanSpot,
|
||||||
right=eufy.moveRight
|
'edge': self.ir.cleanEdge,
|
||||||
).get(mode)()
|
'room': self.ir.cleanRoom
|
||||||
|
}.get(mode)()
|
||||||
|
|
||||||
|
@lexer
|
||||||
|
def do_start(self):
|
||||||
|
self.ir.cleanAuto()
|
||||||
|
|
||||||
|
@lexer
|
||||||
|
def do_stop(self):
|
||||||
|
self.ir.stop()
|
||||||
|
|
||||||
|
@lexer
|
||||||
|
def do_power(self, mode):
|
||||||
|
{
|
||||||
|
'standard': self.ir.powerStandard,
|
||||||
|
'boostiq': self.ir.powerBoostIQ,
|
||||||
|
'max': self.ir.powerMax
|
||||||
|
}.get(mode)()
|
||||||
|
|
||||||
|
@lexer
|
||||||
|
def do_move(self, direction):
|
||||||
|
{
|
||||||
|
'forward': self.ir.moveForward,
|
||||||
|
'backward': self.ir.moveBackward,
|
||||||
|
'ccw': self.ir.moveCCW,
|
||||||
|
'cw': self.ir.moveCW,
|
||||||
|
'left': self.ir.moveCCW,
|
||||||
|
'right': self.ir.moveCW
|
||||||
|
}.get(direction)()
|
||||||
|
|
||||||
|
@lexer
|
||||||
|
def do_time(self):
|
||||||
|
self.ir.setTime()
|
||||||
|
|
||||||
|
@lexer
|
||||||
|
def do_schedule(self, t):
|
||||||
|
newtime = datetime.now()
|
||||||
|
newtime.strptime(t, "%H:%M")
|
||||||
|
self.ir.setSchedule(newtime.time())
|
||||||
|
|
||||||
|
@lexer
|
||||||
|
def do_base(self):
|
||||||
|
self.ir.returnBase()
|
||||||
|
|
||||||
|
@lexer
|
||||||
|
def do_pause(self, delay=1):
|
||||||
|
sleep(int(delay))
|
||||||
|
|
||||||
|
@lexer
|
||||||
|
def do_quit(self):
|
||||||
|
return True
|
||||||
|
|
||||||
|
@lexer
|
||||||
|
def do_EOF(self):
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
cli()
|
import sys
|
||||||
|
|
||||||
|
eufy = Eufy()
|
||||||
|
if len(sys.argv) > 1:
|
||||||
|
eufy.cmdqueue = ' '.join(sys.argv[1:]).split(',') + ['quit']
|
||||||
|
eufy.cmdloop()
|
||||||
|
|
Loading…
Reference in New Issue