用于BroadLink设备控制的异步模块
pybroadlink的Python项目详细描述
pybroadlink
使用Asyncio(单线程事件循环)使用Python3控制BroadLink设备。目前支持RM3智能遥控器。
用法
importsysimportloggingimporttracebackfrompybroadlink.broadlink_udpimportBroadlinkRM3importasyncioimportbinasciifrombase64importb64decodefrompybroadlinkimport_LOGGERasyncdeftestFake(n):foriinrange(n):_LOGGER.debug("Counter is %d",i)awaitasyncio.sleep(1)asyncdefdiscovery_test(*args):rv=awaitBroadlinkUDP.discovery(local_ip_address=args[2],timeout=int(args[3]))ifrv:_LOGGER.info("Discovery OK %s",rv)else:_LOGGER.warning("Discovery failed")asyncdefemit_test(*args):importremo=re.search('^[a-fA-F0-9]+$',args[4])ifmo:payload=binascii.unhexlify(args[4])else:payload=b64decode(args[4])a=BroadlinkRM3((args[2],PORT),args[3])rv=awaita.emit_ir(payload,retry=1)ifrv:_LOGGER.info("Emit OK %s",binascii.hexlify(rv[0]).decode('utf-8'))else:_LOGGER.warning("Emit failed")a.destroy_remote()asyncdeflearn_test(*args):a=BroadlinkRM3((args[2],PORT),args[3])rv=awaita.enter_learning_mode()ifrv:_LOGGER.info("Entered learning mode (%s): please press key",rv)rv=awaita.learn_ir_get(30)ifrv:_LOGGER.info("Obtained %s",binascii.hexlify(rv[0]).decode('utf-8'))else:_LOGGER.warning("No key pressed")else:_LOGGER.warning("Enter learning failed")a.destroy_remote()_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))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()
贡献
欢迎拉取请求。可能的改进领域:
- 其他BroadLink设备(交换机)。
免责声明
不属于BroadLink。