diff --git a/pyfritzhome/devicetypes/fritzhomedevicelightbulb.py b/pyfritzhome/devicetypes/fritzhomedevicelightbulb.py index 2dbe4aa..6b31010 100644 --- a/pyfritzhome/devicetypes/fritzhomedevicelightbulb.py +++ b/pyfritzhome/devicetypes/fritzhomedevicelightbulb.py @@ -1,4 +1,5 @@ """The light bulb device class.""" + # -*- coding: utf-8 -*- import logging @@ -20,6 +21,7 @@ class FritzhomeDeviceLightBulb(FritzhomeDeviceBase): color_temp = None color_mode = None supported_color_mode = None + fullcolorsupport: bool = False def _update_from_node(self, node): super()._update_from_node(node) @@ -58,6 +60,10 @@ def _update_lightbulb_from_node(self, node): "supported_modes" ) + self.fullcolorsupport = bool( + colorcontrol_element.attrib.get("fullcolorsupport") + ) + except ValueError: pass @@ -120,7 +126,7 @@ def set_color(self, hsv, duration=0, wait=False): def set_unmapped_color(self, hsv, duration=0, wait=False): """Set unmapped HSV color (Free color selection).""" - if self.has_color: + if self.has_color and self.fullcolorsupport: self._fritz.set_color(self.ain, hsv, duration, False, wait) def get_color_temps(self): diff --git a/pyfritzhome/fritzhome.py b/pyfritzhome/fritzhome.py index 43e1b51..da1972b 100644 --- a/pyfritzhome/fritzhome.py +++ b/pyfritzhome/fritzhome.py @@ -396,7 +396,7 @@ def set_color(self, ain, hsv, duration=0, mapped=True, wait=False): if mapped: self._aha_request("setcolor", ain=ain, param=params) else: - # undocumented API method for free color selection + # available since Fritz!OS 7.39 self._aha_request("setunmappedcolor", ain=ain, param=params) wait and self.wait_device_txbusy(ain) diff --git a/tests/test_fritzhomedevicelightbulb.py b/tests/test_fritzhomedevicelightbulb.py index e7ec5c6..f5a4ea5 100644 --- a/tests/test_fritzhomedevicelightbulb.py +++ b/tests/test_fritzhomedevicelightbulb.py @@ -38,6 +38,7 @@ def test_device_init(self): assert device.state # Lightbulb is switched on assert device.color_mode == "1" assert device.supported_color_mode == "5" + assert device.fullcolorsupport assert device.hue == 358 assert device.saturation == 180 assert device.color_temp is None @@ -66,6 +67,7 @@ def test_device_init_non_color_bulb(self): device = self.fritz.get_device_by_ain("12701 0072784-1") assert device.has_lightbulb assert device.has_level + assert not device.fullcolorsupport assert device.state # Lightbulb is switched on assert device.name == "Telekom White Dimmable Bulb" @@ -87,6 +89,7 @@ def test_device_init_color_temp_mode(self): assert device.state # Lightbulb is switched on assert device.color_mode == "4" assert device.supported_color_mode == "5" + assert device.fullcolorsupport assert device.hue is None assert device.saturation is None assert device.color_temp == 2800