Add android ir blaster driver
This commit is contained in:
parent
77f90317d0
commit
0cbb02f84c
32
eufy.py
32
eufy.py
|
@ -7,10 +7,30 @@ import os
|
||||||
from time import sleep
|
from time import sleep
|
||||||
|
|
||||||
|
|
||||||
def drive_ir(pulses):
|
|
||||||
|
def ir_debug(pulses):
|
||||||
# Debugging placeholder
|
# Debugging placeholder
|
||||||
print(','.join([str(x) for x in pulses]))
|
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:
|
class EufyRawIR:
|
||||||
""" Low level IR signal modulation """
|
""" Low level IR signal modulation """
|
||||||
|
@ -20,6 +40,9 @@ class EufyRawIR:
|
||||||
_IR_1 = (400, 1600)
|
_IR_1 = (400, 1600)
|
||||||
_IR_TRAILER = (400, 20000)
|
_IR_TRAILER = (400, 20000)
|
||||||
|
|
||||||
|
def __init__(self, driver=ir_debug):
|
||||||
|
self._driver = driver
|
||||||
|
|
||||||
def _modulate(self, message):
|
def _modulate(self, message):
|
||||||
signal = list(self._IR_PREAMBLE)
|
signal = list(self._IR_PREAMBLE)
|
||||||
for b in message:
|
for b in message:
|
||||||
|
@ -32,7 +55,7 @@ class EufyRawIR:
|
||||||
return 3*signal
|
return 3*signal
|
||||||
|
|
||||||
def sendRaw(self, message):
|
def sendRaw(self, message):
|
||||||
drive_ir(self._modulate(message))
|
self._driver(self._modulate(message))
|
||||||
|
|
||||||
|
|
||||||
class EufyIR(EufyRawIR):
|
class EufyIR(EufyRawIR):
|
||||||
|
@ -57,7 +80,8 @@ class EufyIR(EufyRawIR):
|
||||||
CANCEL_SCHEDULE = 0xdf
|
CANCEL_SCHEDULE = 0xdf
|
||||||
RETURN_BASE = 0xef
|
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')
|
self._schedule_file = os.path.expanduser('~/.eufy-schedule')
|
||||||
try:
|
try:
|
||||||
with open(os.path.expanduser(self._SCHEDULE_FILE), 'r') as f:
|
with open(os.path.expanduser(self._SCHEDULE_FILE), 'r') as f:
|
||||||
|
@ -160,7 +184,7 @@ class Eufy(Cmd):
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super(Eufy, self).__init__(*args, **kwargs)
|
super(Eufy, self).__init__(*args, **kwargs)
|
||||||
self.ir = EufyIR()
|
self.ir = EufyIR(default_driver)
|
||||||
|
|
||||||
@lexer
|
@lexer
|
||||||
def do_clean(self, mode='auto'):
|
def do_clean(self, mode='auto'):
|
||||||
|
|
Loading…
Reference in New Issue