gocomma r9设备控制的异步模块
pygocomma的Python项目详细描述
pygocomma
使用Asyncio(单线程事件循环)使用Python3控制GOComma R9设备。 使用你需要的设备ID和密钥的库。您可以使用任何those方法获取它们。
用法
importsysimportloggingfrompygocomma.r9importR9importasyncioimportbinasciifrompygocommaimport_LOGGERasyncdeftestFake(n):foriinrange(n):_LOGGER.debug("Counter is %d",i)awaitasyncio.sleep(1)asyncdefping_test(*args):a=R9((args[2],DEFAULT_PORT),args[3],args[4])rv=awaita.ping()ifrv:_LOGGER.info("Ping OK %s",binascii.hexlify(rv))else:_LOGGER.warning("Ping failed")awaita.destroy_connection()asyncdefask_last_test(*args):a=R9((args[2],DEFAULT_PORT),args[3],args[4])rv=awaita.ask_last()ifrv:_LOGGER.info("Ask last OK %s",rv)else:_LOGGER.warning("Ask last failed")awaita.destroy_connection()asyncdefdiscovery_test(*args):rv=awaitR9.discovery(int(args[2]))ifrv:_LOGGER.info("Discovery OK %s",rv)else:_LOGGER.warning("Discovery failed")asyncdefemit_test(*args):importremo=re.search('^[a-fA-F0-9]+$',args[5])ifmo:payload=binascii.unhexlify(args[5])else:payload=b64decode(args[5])a=R9((args[2],DEFAULT_PORT),args[3],args[4])rv=awaita.emit_ir(payload)ifrv:_LOGGER.info("Emit OK %s",binascii.hexlify(rv).decode('utf-8'))else:_LOGGER.warning("Emit failed")awaita.destroy_connection()asyncdeflearn_test(*args):a=R9((args[2],DEFAULT_PORT),args[3],args[4])rv=awaita.enter_learning_mode()ifrv:_LOGGER.info("Entered learning mode (%s): please press key",rv)rv=awaita.get_learned_key()ifrv:_LOGGER.info("Obtained %s",binascii.hexlify(rv).decode('utf-8'))else:_LOGGER.warning("No key pressed")rv=awaita.exit_learning_mode()ifrv:_LOGGER.info("Exit OK %s",rv)else:_LOGGER.warning("Exit failed")else:_LOGGER.warning("Enter learning failed")awaita.destroy_connection()_LOGGER.setLevel(logging.DEBUG)handler=logging.StreamHandler(sys.stderr)handler.setLevel(logging.DEBUG)formatter=logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')handler.setFormatter(formatter)_LOGGER.addHandler(handler)loop=asyncio.get_event_loop()try:asyncio.ensure_future(testFake(150))ifsys.argv[1]=="learn":loop.run_until_complete(learn_test(*sys.argv))elifsys.argv[1]=="discovery":loop.run_until_complete(discovery_test(*sys.argv))elifsys.argv[1]=="ping":loop.run_until_complete(ping_test(*sys.argv))elifsys.argv[1]=="asklast":loop.run_until_complete(ask_last_test(*sys.argv))elifsys.argv[1]=="pingst":foriinrange(int(sys.argv[5])):loop.run_until_complete(ping_test(*sys.argv))else:loop.run_until_complete(emit_test(*sys.argv))exceptBaseExceptionasex:_LOGGER.error("Test error %s",str(ex))traceback.print_exc()except:_LOGGER.error("Test error")traceback.print_exc()finally:loop.close()
贡献
欢迎拉取请求。
免责声明
在任何方面都不属于gocomma。
相关项目
- https://github.com/codetheweb/tuyapi节点.js
- https://github.com/sean6541/tuyaapi网络api的python api
- https://github.com/clach04/python-tuya/网络api的python api