diff --git a/eufy.py b/eufy.py index 39101f6..c6e64bc 100755 --- a/eufy.py +++ b/eufy.py @@ -7,10 +7,30 @@ import os from time import sleep -def drive_ir(pulses): + +def ir_debug(pulses): # Debugging placeholder print(','.join([str(x) for x in pulses])) +def ir_android(pulses): + plyer.irblaster.transmit(38000, pulses, 'microseconds') + +def ir_termux(pulses): + pattern = ','.join([str(x) for x in pulses]) + os.system('termux-infrared-transmit -f 38000 '+pattern) + +default_driver = ir_debug + +if 'ANDROID_ROOT' in os.environ: + if 'com.termux' in os.get('SHELL', ''): + default_driver = ir_termux + else: + try: + import plyer + default_driver = ir_android + except: + pass + class EufyRawIR: """ Low level IR signal modulation """ @@ -20,6 +40,9 @@ class EufyRawIR: _IR_1 = (400, 1600) _IR_TRAILER = (400, 20000) + def __init__(self, driver=ir_debug): + self._driver = driver + def _modulate(self, message): signal = list(self._IR_PREAMBLE) for b in message: @@ -32,7 +55,7 @@ class EufyRawIR: return 3*signal def sendRaw(self, message): - drive_ir(self._modulate(message)) + self._driver(self._modulate(message)) class EufyIR(EufyRawIR): @@ -57,7 +80,8 @@ class EufyIR(EufyRawIR): CANCEL_SCHEDULE = 0xdf RETURN_BASE = 0xef - def __init__(self): + def __init__(self, driver=ir_debug): + super(EufyIR, self).__init__(driver) self._schedule_file = os.path.expanduser('~/.eufy-schedule') try: with open(os.path.expanduser(self._SCHEDULE_FILE), 'r') as f: @@ -160,7 +184,7 @@ class Eufy(Cmd): def __init__(self, *args, **kwargs): super(Eufy, self).__init__(*args, **kwargs) - self.ir = EufyIR() + self.ir = EufyIR(default_driver) @lexer def do_clean(self, mode='auto'):