-
-
Notifications
You must be signed in to change notification settings - Fork 574
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Device support of the Xioami Philips Smart LED Ball Lamp #94
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -29,7 +29,7 @@ | |
"zhimi-humidifier-v1": AirHumidifier, | ||
"yunmi-waterpuri-v2": WaterPurifier, | ||
# It looks like philips devices cannot be discovered via mdns | ||
"philips-light-bulb": Ceil, | ||
"philips-light-bulb": PhilipsBulb, | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. undefined name 'PhilipsBulb' |
||
"philips-light-ceil": Ceil, | ||
"philips-light-sread1": PhilipsEyecare, | ||
"xiaomi-wifispeaker-v1": WifiSpeaker, # name needs to be checked | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
import logging | ||
from .device import Device | ||
from typing import Any, Dict | ||
from collections import defaultdict | ||
|
||
_LOGGER = logging.getLogger(__name__) | ||
|
||
|
||
class PhilipsBulbStatus: | ||
"""Container for status reports from Xiaomi Philips LED Ceiling Lamp""" | ||
|
||
def __init__(self, data: Dict[str, Any]) -> None: | ||
# ['power': 'on', 'bright': 85, 'cct': 9, 'snm': 0, 'dv': 0] | ||
self.data = data | ||
|
||
@property | ||
def power(self) -> str: | ||
return self.data["power"] | ||
|
||
@property | ||
def is_on(self) -> bool: | ||
return self.power == "on" | ||
|
||
@property | ||
def brightness(self) -> int: | ||
return self.data["bright"] | ||
|
||
@property | ||
def color_temperature(self) -> int: | ||
return self.data["cct"] | ||
|
||
@property | ||
def scene(self) -> int: | ||
return self.data["snm"] | ||
|
||
@property | ||
def delay_off_countdown(self) -> int: | ||
return self.data["dv"] | ||
|
||
def __str__(self) -> str: | ||
s = "<PhilipsBulbStatus power=%s, brightness=%s, " \ | ||
"color_temperature=%s, scene=%s, delay_off_countdown=%s>" % \ | ||
(self.power, self.brightness, | ||
self.color_temperature, self.scene, self.delay_off_countdown) | ||
return s | ||
|
||
|
||
class Bulb(Device): | ||
"""Main class representing Xiaomi Philips LED Ball Lamp.""" | ||
|
||
def on(self): | ||
"""Power on.""" | ||
return self.send("set_power", ["on"]) | ||
|
||
def off(self): | ||
"""Power off.""" | ||
return self.send("set_power", ["off"]) | ||
|
||
def set_brightness(self, level: int): | ||
"""Set brightness level.""" | ||
return self.send("set_bright", [level]) | ||
|
||
def set_color_temperature(self, level: int): | ||
"""Set Correlated Color Temperature.""" | ||
return self.send("set_cct", [level]) | ||
|
||
def delay_off(self, seconds: int): | ||
"""Set delay off seconds.""" | ||
return self.send("delay_off", [seconds]) | ||
|
||
def set_scene(self, num: int): | ||
"""Set scene number.""" | ||
return self.send("apply_fixed_scene", [num]) | ||
|
||
def status(self) -> PhilipsBulbStatus: | ||
"""Retrieve properties.""" | ||
properties = ['power', 'bright', 'cct', 'snm', 'dv', ] | ||
values = self.send( | ||
"get_prop", | ||
properties | ||
) | ||
|
||
properties_count = len(properties) | ||
values_count = len(values) | ||
if properties_count != values_count: | ||
_LOGGER.debug( | ||
"Count (%s) of requested properties does not match the " | ||
"count (%s) of received values.", | ||
properties_count, values_count) | ||
|
||
return CeilStatus(defaultdict(lambda: None, zip(properties, values))) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. undefined name 'CeilStatus' There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. undefined name 'CeilStatus' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
undefined name 'PhilipsBulb'