WiZ灯泡的python连接器(例如SLV Play)
pywizlight的Python项目详细描述
{1}$
pywizlight公司
用于WiZ灯泡的python连接器。在
使用以下智能灯进行测试:
安装
pip install pywizlight
荣誉
感谢您@angadsingh做出如此令人难以置信的改进!!在
示例
frompywizlight.bulbimportwizlight,PilotBuilder,discovery# create/get the current thread's asyncio looploop=asyncio.get_event_loop()# setup a standard lightlight=wizlight("<your bulb ip")# setup the light with a custom portlight=wizlight("<your bulb ip",12345)#the following calls need to be done inside an asyncio coroutine#to run them fron normal synchronous code, you can wrap them with asyncio.run(..)#see test.py for examples# turn on the light into "rhythm mode"awaitlight.turn_on(PilotBuilder())# set bulb brightnessawaitlight.turn_on(PilotBuilder(brightness=255)# set bulb brightness (with async timeout)timeout_secs=10awaitasyncio.wait_for(light.turn_on(PilotBuilder(brightness=255)),wait_secs)# set bulb to warm whiteawaitlight.turn_on(PilotBuilder(warm_white=255)# set rbb values# red to 0 = 0%, green to 128 = 50%, blue to 255 = 100%awaitlight.turn_on(PilotBuilder(rgb=(0,128,255))# get the current color temperature, rgb valuesstate=awaitlight.updateState()print(state.get_colortemp())r,g,b=state.get_rgb()print("red %i green %i blue %i"%(r,g,b))# start a scene awaitlight.turn_on(PilotBuilder(scene=14))# party# get the name of the current scenestate=awaitlight.updateState()print(state.get_scene())# turns the light offawaitlight.turn_off()# do operations on multiple lights parallelybulb1=wizlight("<your bulb1 ip>")bulb2=wizlight("<your bulb2 ip>")awaitasyncio.gather(bulb1.turn_on(PilotBuilder(brightness=255),bulb2.turn_on(PilotBuilder(warm_white=255),loop=loop)# Discover all bulbs in the network via broadcast datagram (UDP)# function takes the discovery object and returns a list with wizlight objects.bulbs=awaitdiscovery.find_wizlights(discovery)# print the ip of the bulb on index 0print(bulbretrun[0].ip)# iterate over all returned bulbsforbulbinbulbs:awaitbulb.turn_off()
灯泡参数(UDP原始):
- sceneId-调用其中一个预定义场景(int从0到32)Wiki
- speed-以百分比设置颜色更改速度
- dimming-以百分比设置灯泡的调光器
- ^{str>温度设置
- r-红色范围0-255
- g-绿色范围0-255
- b-蓝色范围0-255
- c-冷白范围0-255
- w-暖白色范围0-255
- id-灯泡id
- state-当它打开或关闭时
- schdPsetId-房间的节奏id
异步I/O
对于异步I/O,此组件使用https://github.com/jsbronder/asyncio-dgram,它内部使用asyncio DatagramTransport,它允许完全无阻塞的UDP传输
班级
wizlight(ip)
创建WiZ灯泡的实例。具有灯泡ip的建造师
实例变量
首先需要通过调用light.updateState()
来获取状态
之后,所有状态都可以从light.state
获取,这是一个PilotParser
对象
PilotParser.get_brightness()
获取亮度值0-255
PilotParser.get_rgb()
获取灯泡的rgbW颜色状态
PilotParser.get_colortemp()
测量灯泡的色温
PilotParser.get_warm_white/get_cold_white()
获取当前的热/冷设置(不支持原始的Phillips Wiz灯泡)
PilotParser.get_scene()
获取当前场景名称
PilotParser.get_state()
返回true或false/true=on,false=off
方法
{cd12>返回硬件的配置
updateState(self)
使用sendUDPMessage
从灯光获取当前灯泡状态,并将其设置为self.state
lightSwitch(self)
像开关一样打开或关闭灯泡
getMAC(self)
返回灯泡的MAC地址。可以用作唯一ID
sendUDPMessage(self, message, timeout = 60, send_interval = 0.5, max_send_datagrams = 100):
向灯泡发送udp消息。由于UDP可能会丢失数据包,而且您的灯光可能离路由器很远,所以我们会不断地发送UDP命令数据报,直到有来自light的响应。在测试中,这比只发送一次并等待超时要好。可以使用timeout
设置异步操作超时,使用send_interval
连续UDP发送之间的睡眠时间间隔,以及使用max_send_datagrams
发送的最大连续ping数。它已经硬编码为setPilot
(设置灯光状态)与getPilot
(获取灯光状态)的较低值,以避免灯光闪烁。在
turn_off(self)
关灯
turn_on(PilotBuilder)
打开灯。这需要一个PilotBuilder
对象,它可以通过编程方式设置所有参数-rgb、色温、亮度等。要将灯光设置为节奏模式,请创建一个空的PilotBuilder
。在
Bulb方法(UDP本机):
- getSystemConfig-获取当前系统配置-无需参数
- syncPilot—由灯泡在心跳时发送
- getPilot-获取当前灯泡状态-不需要包含任何参数
- setPilot—用于通知灯泡更改颜色/温度/状态
- Pulse-用途不明
- Registration—用于向灯泡“注册”:这会通知构建者 如果你想让它给你发送心跳同步包。在
UDP请求示例
向灯泡发送信息:
{"method":"setPilot","params":{"r":255,"g":255,"b":255,"dimming":50}}
回复:{"method":"setPilot","env":"pro","result":{"success":true}}
获取灯泡状态:{"method":"getPilot","params":{}}
回应:
自定义颜色模式:
{'method': 'getPilot', 'env': 'pro', 'result': {'mac': 'a8bb50a4f94d', 'rssi': -60, 'src': '', 'state': True, 'sceneId': 0, 'temp': 5075, 'dimming': 47}}
场景模式:
{'method': 'getPilot', 'env': 'pro', 'result': {'mac': 'a8bb50a4f94d', 'rssi': -65, 'src': '', 'state': True, 'sceneId': 12, 'speed': 100, 'temp': 4200, 'dimming': 47}}
节奏模式:
{'method': 'getPilot', 'env': 'pro', 'result': {'mac': 'a8bb50a4f94d', 'rssi': -63, 'src': '', 'state': True, 'sceneId': 14, 'speed': 100, 'dimming': 100, 'schdPsetId': 9}}
贡献者
- @sbidy从零开始为整个python库提供完整的灯光控制
- @angadsingh用于实现异步和非阻塞UDP、节奏支持、性能优化
- 项目
标签: