Konektor Python untuk perangkat WiZ.
https://docs.pro.wizconnected.com/#introduction
pip install pywizlight
Catatan: Membutuhkan versi Python >=3.7
.
Pada sistem berbasis Fedora atau pada mesin CentOS/RHEL 8 yang mengaktifkan EPEL, karena pywizlight
hadir dalam Koleksi Paket Fedora.
sudo dnf -y install python3-pywizlight
Untuk NixOS dan Nix rilis terbaru pywizlight
biasanya tersedia di saluran unstable
. Rilis stabil mungkin mengirimkan pywizlight
versi lama.
nix-env -iA nixos.python37Packages.pywizlight
Seth Nikel | David Zurow | Eduardo Ibanez | Angad Singh | Fabian Mempengaruhi | Henry Ruhs | Alberto Panu |
skitterrusty | Matias Roth | tahan | Noëlle | Patrick Kelly | EllisMichael | Gughan Ravikumar |
Charlotte | Aarni Koskela | UH-60 | J.Nick Koston |
Untuk menemukan bohlam melalui cli Anda dapat menggunakan yang berikut ini:
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
adalah alat baris perintah untuk melakukan interaksi dasar dengan bohlam.
$ 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}
Jalankan wizlight COMMAND --help
untuk melihat penggunaan dan opsi.
Penemuan ini berfungsi dengan permintaan Siaran UDP dan mengumpulkan semua bohlam di jaringan.
Untuk I/O async, komponen ini menggunakan asyncio DatagramTransport bawaan Python, yang memungkinkan transport UDP yang sepenuhnya non-pemblokiran.
wizlight(ip)
: Membuat instance Bola Lampu WiZ. Dibangun dengan penambahan IPBatalkan perubahan bohlam.
Pertama, Anda perlu mengambil status dengan memanggil light.updateState()
. Setelah itu semua negara bagian dapat diambil dari light.state
, yang merupakan objek PilotParser
.
PilotParser.get_brightness()
mendapat nilai kecerahan 0-255
PilotParser.get_rgb()
mendapatkan status warna rgbW bohlam
PilotParser.get_colortemp()
mendapatkan suhu warna bohlam
PilotParser.get_warm_white/get_cold_white()
mendapatkan pengaturan hangat/dingin saat ini (tidak didukung oleh bohlam Philips Wiz asli)
PilotParser.get_scene()
mendapatkan nama adegan saat ini
PilotParser.get_state()
mengembalikan Benar/Salah. Benar = aktif, Salah = tidak aktif
getBulbConfig(self)
mengembalikan konfigurasi perangkat keras bohlam
updateState(self)
mendapatkan status bohlam saat ini dari lampu menggunakan sendUDPMessage
dan menyetelnya ke self.state
lightSwitch(self)
menghidupkan atau mematikan bola lampu seperti saklar
getMAC(self)
mengembalikan alamat MAC bohlam. Dapat digunakan sebagai ID unik
sendUDPMessage(self, message, timeout = 60, send_interval = 0.5, max_send_datagrams = 100):
mengirimkan pesan UDP ke bohlam. Karena UDP dapat kehilangan paket, dan lampu Anda mungkin berada jauh dari router, kami terus mengirimkan datagram perintah UDP hingga ada respons dari bohlam. Dalam pengujian, ini bekerja jauh lebih baik daripada hanya mengirim sekali dan menunggu batas waktu. Anda dapat mengatur batas waktu operasi async menggunakan timeout
, mengatur interval waktu untuk tidur antara pengiriman UDP berkelanjutan menggunakan send_interval
dan jumlah maksimum ping berkelanjutan untuk dikirim menggunakan max_send_datagrams
. Ini sudah di-hardcode ke nilai yang lebih rendah untuk setPilot
(mengatur status lampu) vs getPilot
(mengambil status lampu) untuk menghindari kedipan lampu.
turn_off(self)
mematikan lampu
turn_on(PilotBuilder)
menyalakan lampu. Ini membutuhkan objek PilotBuilder
, yang dapat digunakan untuk mengatur semua parameter secara terprogram - rgb, suhu warna, kecerahan, dll. Untuk mengatur cahaya ke mode ritme, buat PilotBuilder
kosong.
get_power(self)
mengembalikan konsumsi daya Smart Plug saat ini dengan Pengukuran.
Kirim pesan ke bohlam: {"method":"setPilot","params":{"r":255,"g":255,"b":255,"dimming":50}}
Respons: {"method":"setPilot","env":"pro","result":{"success":true}}
Dapatkan status bohlam: {"method":"getPilot","params":{}}
Respons:
mode warna khusus:
{'method': 'getPilot', 'env': 'pro', 'result': {'mac': 'a8bb50a4f94d', 'rssi': -60, 'src': '', 'state': True, 'sceneId': 0, 'temp': 5075, 'dimming': 47}}
modus pemandangan:
{'method': 'getPilot', 'env': 'pro', 'result': {'mac': 'a8bb50a4f94d', 'rssi': -65, 'src': '', 'state': True, 'sceneId': 12, 'speed': 100, 'temp': 4200, 'dimming': 47}}
mode ritme:
{'method': 'getPilot', 'env': 'pro', 'result': {'mac': 'a8bb50a4f94d', 'rssi': -63, 'src': '', 'state': True, 'sceneId': 14, 'speed': 100, 'dimming': 100, 'schdPsetId': 9}}