WiZ 장치용 Python 커넥터입니다.
https://docs.pro.wizconnected.com/#introduction
pip install pywizlight
참고: Python 버전 >=3.7
이 필요합니다.
Fedora 기반 시스템 또는 EPEL이 활성화된 CentOS/RHEL 8 시스템에서는 pywizlight
Fedora 패키지 컬렉션에 존재합니다.
sudo dnf -y install python3-pywizlight
NixOS 및 Nix의 경우 pywizlight
의 최신 릴리스는 일반적으로 unstable
채널에서 사용할 수 있습니다. 안정적인 릴리스에는 이전 버전의 pywizlight
제공될 수 있습니다.
nix-env -iA nixos.python37Packages.pywizlight
세스 니켈 | 데이비드 주로우 | 에두아르도 이바네즈 | 앙가드 싱 | 파비안 아폴터 | 헨리 루스 | 알베르토 파누 |
스케이팅 러스티 | 마티아스 로스 | 두르네즈 | 노엘 | 패트릭 켈리 | 엘리스 마이클 | 구간 라비쿠마르 |
샬럿 | 아르니 코스켈라 | UH-60 | J. 닉 코스턴 |
CLI를 통해 전구를 찾으려면 다음을 사용할 수 있습니다.
python -m pywizlight.cli discover
import asyncio
from pywizlight import wizlight , PilotBuilder , discovery
async def main ():
"""Sample code to work with bulbs."""
# Discover all bulbs in the network via broadcast datagram (UDP)
# function takes the discovery object and returns a list of wizlight objects.
bulbs = await discovery . discover_lights ( broadcast_space = "192.168.1.255" )
# Print the IP address of the bulb on index 0
print ( f"Bulb IP address: { bulbs [ 0 ]. ip } " )
# Iterate over all returned bulbs
for bulb in bulbs :
print ( bulb . __dict__ )
# Turn off all available bulbs
# await bulb.turn_off()
# Set up a standard light
light = wizlight ( "192.168.1.27" )
# Set up the light with a custom port
#light = wizlight("your bulb's IP address", port=12345)
# The following calls need to be done inside an asyncio coroutine
# to run them from normal synchronous code, you can wrap them with
# asyncio.run(..).
# Turn the light on into "rhythm mode"
await light . turn_on ( PilotBuilder ())
# Set bulb brightness
await light . turn_on ( PilotBuilder ( brightness = 255 ))
# Set bulb brightness (with async timeout)
timeout = 10
await asyncio . wait_for ( light . turn_on ( PilotBuilder ( brightness = 255 )), timeout )
# Set bulb to warm white
await light . turn_on ( PilotBuilder ( warm_white = 255 ))
# Set RGB values
# red to 0 = 0%, green to 128 = 50%, blue to 255 = 100%
await light . turn_on ( PilotBuilder ( rgb = ( 0 , 128 , 255 )))
# Get the current color temperature, RGB values
state = await light . updateState ()
print ( state . get_colortemp ())
red , green , blue = state . get_rgb ()
print ( f"red { red } , green { green } , blue { blue } " )
# Start a scene
await light . turn_on ( PilotBuilder ( scene = 4 )) # party
# Get the name of the current scene
state = await light . updateState ()
print ( state . get_scene ())
# Get the features of the bulb
bulb_type = await bulbs [ 0 ]. get_bulbtype ()
print ( bulb_type . features . brightness ) # returns True if brightness is supported
print ( bulb_type . features . color ) # returns True if color is supported
print ( bulb_type . features . color_tmp ) # returns True if color temperatures are supported
print ( bulb_type . features . effect ) # returns True if effects are supported
print ( bulb_type . kelvin_range . max ) # returns max kelvin in INT
print ( bulb_type . kelvin_range . min ) # returns min kelvin in INT
print ( bulb_type . name ) # returns the module name of the bulb
# Turn the light off
await light . turn_off ()
# Do operations on multiple lights in parallel
#bulb1 = wizlight("<your bulb1 ip>")
#bulb2 = wizlight("<your bulb2 ip>")
# --- DEPRECATED in 3.10 see [#140](https://github.com/sbidy/pywizlight/issues/140)
# await asyncio.gather(bulb1.turn_on(PilotBuilder(brightness = 255)),
# bulb2.turn_on(PilotBuilder(warm_white = 255)))
# --- For >3.10 await asyncio.gather() from another coroutine
# async def turn_bulbs_on(bulb1, bulb2):
# await asyncio.gather(bulb1.turn_on(PilotBuilder(warm_white=255)), bulb2.turn_on(PilotBuilder(warm_white=255)))
# def main:
# asyncio.run(async turn_bulbs_on(bulb1, bulb2))
loop = asyncio . get_event_loop ()
loop . run_until_complete ( main ())
wizlight
는 전구와 기본적인 상호 작용을 수행하는 명령줄 도구입니다.
$ wizlight
Usage: wizlight [OPTIONS] COMMAND [ARGS]...
Simple command-line tool to interact with Wizlight bulbs.
Options:
--version Show the version and exit.
--help Show this message and exit.
Commands:
discover Discover bulb in the local network.
off Turn the bulb off.
on Turn the bulb on.
set-state Set the current state of a given bulb.
state Get the current state from the given bulb.
$ wizlight discover --b 192.168.0.101
Search for bulbs in 192.168.0.101 ...
{'ip_address': '192.168.0.101', 'mac_address': 'a8bs4090193d'}
$ wizlight on --ip 192.168.0.101 --k 3000 --brightness 128
Turning on 192.168.0.101
$ wizlight off --ip 192.168.0.101
Turning off 192.168.0.101
$ wizlight state --ip 192.168.0.101
{'mac': 'a8bs4090193d', 'rssi': -57, 'src': '', 'state': False, 'sceneId': 0, 'temp': 3000, 'dimming': 50}
wizlight COMMAND --help
실행하여 사용법과 옵션을 확인하세요.
검색은 UDP 브로드캐스트 요청과 함께 작동하며 네트워크의 모든 전구를 수집합니다.
비동기 I/O의 경우 이 구성 요소는 완전히 비차단 UDP 전송을 허용하는 Python의 내장 asyncio DatagramTransport를 사용합니다.
wizlight(ip)
: WiZ 전구의 인스턴스를 생성합니다. 전구의 IP addCancelchangesress로 구성됩니다.
먼저 light.updateState()
호출하여 상태를 가져와야 합니다. 그 후 모든 상태는 PilotParser
객체인 light.state
에서 가져올 수 있습니다.
PilotParser.get_brightness()
밝기 0-255 값을 가져옵니다.
PilotParser.get_rgb()
전구의 rgbW 색상 상태를 가져옵니다.
PilotParser.get_colortemp()
전구의 색온도를 가져옵니다.
PilotParser.get_warm_white/get_cold_white()
현재 따뜻한/차가운 설정을 가져옵니다(원래 Philips Wiz 전구에서는 지원되지 않음)
PilotParser.get_scene()
현재 장면 이름을 가져옵니다.
PilotParser.get_state()
True/False를 반환합니다. 참 = 켜짐, 거짓 = 꺼짐
getBulbConfig(self)
전구의 하드웨어 구성을 반환합니다.
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 명령 데이터그램을 계속해서 보냅니다. 테스트에서는 한 번 보내고 시간 초과를 기다리는 것보다 훨씬 더 효과적이었습니다. timeout
사용하여 비동기 작업 제한 시간을 설정하고, send_interval
사용하여 연속 UDP 전송 사이의 대기 시간 간격을 설정하고, max_send_datagrams
사용하여 전송할 최대 연속 핑 수를 설정할 수 있습니다. 조명 깜박임을 방지하기 위해 이미 setPilot
(조명 상태 설정)과 getPilot
(조명 상태 가져오기)에 대해 더 낮은 값으로 하드코딩되어 있습니다.
turn_off(self)
불을 끈다
turn_on(PilotBuilder)
조명을 켭니다. 이는 RGB, 색온도, 밝기 등 모든 매개변수를 프로그래밍 방식으로 설정하는 데 사용할 수 있는 PilotBuilder
개체를 사용합니다. 조명을 리듬 모드로 설정하려면 빈 PilotBuilder
만듭니다.
get_power(self)
측정 기능이 있는 스마트 플러그의 현재 전력 소비를 반환합니다.
전구에 메시지 보내기: {"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}}