WiZ灯泡的python连接器(例如SLV Play)

pywizlight的Python项目详细描述


{1}$ Code Quality Check

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、节奏支持、性能优化

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java无法将自定义数据类型转换为字符串?   JavaLog4j和appender,这个Log4j定义正确吗?   用于换行的java Android Eclipse拆分   与某个方法关联的java启用/禁用JButton   java小部件列表视图加载视图   java国家/地区名称中的正则表达式   从Java调用Kotlin时,如何获取错误的行号?   java将视图传递给AsyncTask以访问findViewById   java SQL性能:多个绑定还是绑定到一个SQL变量以供重用?   BluetoothAdapter上的安卓 Java NullPointerException。isEnabled()   在clojure中取消引用java方法   JAVA网SocketException:IP_添加_成员身份失败(硬件筛选器不足?)   java从类对象的方法接收nullpointer异常   java使用for循环创建多个对象   java无法使用NTLM身份验证apache camel cxf   java Eclipse不喜欢@Override注释   java Spark SQL模拟红移(Oracle)“系统日期”或“当前日期”