موصل Python لأجهزة WiZ.
https://docs.pro.wizconnected.com/#introduction
pip install pywizlight
ملحوظة: يتطلب إصدار بايثون >=3.7
.
على نظام يستند إلى Fedora أو على جهاز CentOS/RHEL 8 الذي تم تمكين EPEL فيه، حيث يوجد pywizlight
في مجموعة Fedora Package Collection.
sudo dnf -y install python3-pywizlight
بالنسبة إلى NixOS وNix، يتوفر عادةً الإصدار الأخير من pywizlight
في القناة unstable
. قد تقوم الإصدارات المستقرة بشحن الإصدارات الأقدم من pywizlight
.
nix-env -iA nixos.python37Packages.pywizlight
سيث نيكل | ديفيد زورو | إدواردو إيبانيز | أنجاد سينغ | فابيان أفولتر | هنري روهس | ألبرتو بانو |
com.skitterrusty | ماتياس روث | durnezj | نويل | باتريك كيلي | إليس مايكل | جوجان رافيكومار |
شارلوت | آرني كوسكيلا | UH-60 | جي نيك كوستون |
للعثور على المصابيح عبر 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 ويجمع كل المصابيح الموجودة في الشبكة.
بالنسبة للإدخال/الإخراج غير المتزامن، يستخدم هذا المكون برنامج DatagramTransport غير المتزامن المدمج في Python، والذي يسمح بنقل UDP غير محظور تمامًا.
wizlight(ip)
: إنشاء مثيل لمصباح WiZ Light Bulb. تم إنشاؤها باستخدام عنوان IP addCancel Changeress للمبة.
تحتاج أولاً إلى جلب الحالة عن طريق استدعاء light.updateState()
. بعد ذلك يمكن جلب جميع الحالات من light.state
، وهو كائن PilotParser
.
يحصل 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 الخاص بالمصباح. يمكن استخدامه كمعرف فريد
sendUDPMessage(self, message, timeout = 60, send_interval = 0.5, max_send_datagrams = 100):
يرسل رسالة UDP إلى المصباح. نظرًا لأن UDP يمكن أن يفقد الحزم، وقد يكون الضوء الخاص بك على مسافة طويلة من جهاز التوجيه، فإننا نستمر في إرسال مخطط بيانات أمر UDP حتى يكون هناك استجابة من المصباح. في الاختبارات كان هذا أفضل بكثير من مجرد الإرسال مرة واحدة وانتظار المهلة. يمكنك تعيين مهلة العملية غير المتزامنة باستخدام timeout
، وضبط الفاصل الزمني للنوم بين عمليات إرسال UDP المستمرة باستخدام send_interval
والحد الأقصى لعدد الأصوات المستمرة للإرسال باستخدام max_send_datagrams
. لقد تم ترميزه بالفعل بقيمة أقل لـ setPilot
(ضبط حالة الضوء) مقابل getPilot
(جلب حالة الضوء) لتجنب وميض الضوء.
turn_off(self)
يطفئ الضوء
يقوم turn_on(PilotBuilder)
بتشغيل الضوء. يتطلب هذا كائن PilotBuilder
، والذي يمكن استخدامه لتعيين كافة المعلمات برمجيًا - rgb، ودرجة حرارة اللون، والسطوع، وما إلى ذلك. لضبط الضوء على وضع الإيقاع، قم بإنشاء 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}}