用于在局域网上使用asyncio与Yelight设备进行本地通信的API。
aioyeelight的Python项目详细描述
爱小米
aioxiaomi是一个Python3/asyncio库,用于在LAN上控制小米Yelight LED灯泡。在
安装
我们在PyPi所以
pip3 install aioxiaomi
或者 python3-m pip安装aioyeelight
加密密钥
此库使用MIHome二进制协议,如OpenMiHome所述 这意味着您必须获取在配置期间生成的envryption密钥。在
最简单的方法是给灯泡提供aioiotprov。在
如何使用
本质上,创建一个至少有两个方法的对象:
^{pr2}$然后使用start_yelight_discovery来搜索带有回调函数的灯泡,该回调函数将创建和.activate()任何新灯泡。 与灯泡连接后,它将向父对象注册。所有与灯泡通讯的方法 可以传递一个回调函数来响应bulb响应。回调应采用1个参数:
- the response message
签出main.py查看其工作原理。在
本质上,测试程序是这样的
tokenlist = { <mac>: <secret token>}
class bulbs():
""" A simple class with a register and unregister methods
"""
def __init__(self):
self.bulbs=[]
self.pending_bulbs = []
def register(self,bulb):
self.bulbs.append(bulb)
try:
self.pending_bulbs.remove(bulb)
except:
pass
def unregister(self,bulb):
idx=0
for x in list([ y.bulb_id for y in self.bulbs]):
if x == bulb.bulb_id:
del(self.bulbs[idx])
break
idx+=1
def new_bulb(self, info):
if "light" in info["name"] and info["mac"] in tokenlist:
newbulb = aiox.YeelightBulb(
aio.get_event_loop(),
tokenlist[info["mac"]],
info["address"],
info["mac"],
self,
)
found = False
for x in self.bulbs:
if x.bulb_id == newbulb.bulb_id:
found = True
break
if not found:
for x in self.pending_bulbs:
if x.bulb_id == newbulb.bulb_id:
found = True
break
if not found:
newbulb.activate()
else:
del(newbulb)
def readin():
"""Reading from stdin and displaying menu"""
selection = sys.stdin.readline().strip("\n")
DoSomething()
MyBulbs= bulbs()
loop = aio.get_event_loop()
zc, browser = aiox.start_yeelight_discovery(MyBulbs.new_bulb)
try:
loop.add_reader(sys.stdin,readin)
loop.run_forever()
except:
pass
finally:
browser.cancel()
loop.run_until_complete(zc.close())
MyBulbs.close()
loop.remove_reader(sys.stdin)
loop.close()
其他值得注意的事项:
- 在
使用aiozeroconf完成发现
在 - 在
每个连接每秒只允许一个命令。为了解决这个问题,我们可以启动多个与灯泡的连接。每个灯泡有4个连接的限制,但是考虑到每个灯泡每分钟只能有144个命令,在不开始使灯泡过载的情况下,只能处理2个连接。在激活之前使用.set_connection(x)来设置连接数
在 - 在
aioyeelight确保每个连接每秒最多有一个命令。为此,它保留了一个消息缓冲区,并调整发送速度(如果有多个连接,则使用循环)。因此,缓冲区会变得相当大。在
在 - 在
AoyeeLight会向灯泡发出“你好”的信息。这似乎是灯泡保持响应所必需的。在
在 - 在
我只有“彩色”型号,所以我不能测试其他类型的灯泡
在
- 项目
标签: