def test_from_knx(self): """Test from_knx function with normal operation.""" xknx = XKNX() remote_value = RemoteValueColorXYY(xknx) assert remote_value.from_knx( DPTArray( (0x99, 0x99, 0x99, 0x99, 0x66, 0x03))) == ((0.6, 0.6), 102)
def test_to_knx(self): """Test to_knx function with normal operation.""" xknx = XKNX() remote_value = RemoteValueColorXYY(xknx) assert remote_value.to_knx(((1, 0.9), 102)) == DPTArray( (0xFF, 0xFF, 0xE6, 0x66, 0x66, 0x03)) assert remote_value.to_knx(((1, 0), 102)) == DPTArray( (0xFF, 0xFF, 0x00, 0x00, 0x66, 0x03))
async def test_process(self): """Test process telegram.""" xknx = XKNX() remote_value = RemoteValueColorXYY(xknx, group_address=GroupAddress("1/2/3")) telegram = Telegram( destination_address=GroupAddress("1/2/3"), payload=GroupValueWrite(DPTArray((0xFF, 0xFF, 0x66, 0x66, 0xFA, 0x03))), ) await remote_value.process(telegram) assert remote_value.value == ((1, 0.4), 250)
async def test_to_process_error(self): """Test process errornous telegram.""" xknx = XKNX() remote_value = RemoteValueColorXYY(xknx, group_address=GroupAddress("1/2/3")) with pytest.raises(CouldNotParseTelegram): telegram = Telegram( destination_address=GroupAddress("1/2/3"), payload=GroupValueWrite(DPTBinary(1)), ) await remote_value.process(telegram) with pytest.raises(CouldNotParseTelegram): telegram = Telegram( destination_address=GroupAddress("1/2/3"), payload=GroupValueWrite(DPTArray((0x64, 0x65, 0x66, 0x67))), ) await remote_value.process(telegram)
async def test_set(self): """Test setting value.""" xknx = XKNX() remote_value = RemoteValueColorXYY(xknx, group_address=GroupAddress("1/2/3")) await remote_value.set(((1, 0.9), 102)) assert xknx.telegrams.qsize() == 1 telegram = xknx.telegrams.get_nowait() assert telegram == Telegram( destination_address=GroupAddress("1/2/3"), payload=GroupValueWrite(DPTArray((0xFF, 0xFF, 0xE6, 0x66, 0x66, 0x03))), ) await remote_value.set(((1, 0.9), 255)) assert xknx.telegrams.qsize() == 1 telegram = xknx.telegrams.get_nowait() assert telegram == Telegram( destination_address=GroupAddress("1/2/3"), payload=GroupValueWrite(DPTArray((0xFF, 0xFF, 0xE6, 0x66, 0xFF, 0x03))), )
async def test_to_process_error(self): """Test process errornous telegram.""" xknx = XKNX() remote_value = RemoteValueColorXYY(xknx, group_address=GroupAddress("1/2/3")) telegram = Telegram( destination_address=GroupAddress("1/2/3"), payload=GroupValueWrite(DPTBinary(1)), ) assert await remote_value.process(telegram) is False telegram = Telegram( destination_address=GroupAddress("1/2/3"), payload=GroupValueWrite(DPTArray((0x64, 0x65, 0x66, 0x67))), ) assert await remote_value.process(telegram) is False assert remote_value.value is None
def test_to_knx_error(self): """Test to_knx function with wrong parametern.""" xknx = XKNX() remote_value = RemoteValueColorXYY(xknx) with pytest.raises(ConversionError): remote_value.to_knx(((2, 1), 1)) with pytest.raises(ConversionError): remote_value.to_knx(((-1, 1), 2)) with pytest.raises(ConversionError): remote_value.to_knx(((0.3, 0.5), 256)) with pytest.raises(ConversionError): remote_value.to_knx((("0.4", 0), 102)) with pytest.raises(ConversionError): remote_value.to_knx(((1, 1), "102")) with pytest.raises(ConversionError): remote_value.to_knx(((1, ), 1))
def __init__( self, xknx: XKNX, name: str, group_address_switch: GroupAddressesType | None = None, group_address_switch_state: GroupAddressesType | None = None, group_address_brightness: GroupAddressesType | None = None, group_address_brightness_state: GroupAddressesType | None = None, group_address_color: GroupAddressesType | None = None, group_address_color_state: GroupAddressesType | None = None, group_address_rgbw: GroupAddressesType | None = None, group_address_rgbw_state: GroupAddressesType | None = None, group_address_xyy_color: GroupAddressesType | None = None, group_address_xyy_color_state: GroupAddressesType | None = None, group_address_tunable_white: GroupAddressesType | None = None, group_address_tunable_white_state: GroupAddressesType | None = None, group_address_color_temperature: GroupAddressesType | None = None, group_address_color_temperature_state: GroupAddressesType | None = None, group_address_switch_red: GroupAddressesType | None = None, group_address_switch_red_state: GroupAddressesType | None = None, group_address_brightness_red: GroupAddressesType | None = None, group_address_brightness_red_state: GroupAddressesType | None = None, group_address_switch_green: GroupAddressesType | None = None, group_address_switch_green_state: GroupAddressesType | None = None, group_address_brightness_green: GroupAddressesType | None = None, group_address_brightness_green_state: GroupAddressesType | None = None, group_address_switch_blue: GroupAddressesType | None = None, group_address_switch_blue_state: GroupAddressesType | None = None, group_address_brightness_blue: GroupAddressesType | None = None, group_address_brightness_blue_state: GroupAddressesType | None = None, group_address_switch_white: GroupAddressesType | None = None, group_address_switch_white_state: GroupAddressesType | None = None, group_address_brightness_white: GroupAddressesType | None = None, group_address_brightness_white_state: GroupAddressesType | None = None, min_kelvin: int | None = None, max_kelvin: int | None = None, device_updated_cb: DeviceCallbackType | None = None, ): """Initialize Light class.""" super().__init__(xknx, name, device_updated_cb) self.switch = RemoteValueSwitch( xknx, group_address_switch, group_address_switch_state, device_name=self.name, feature_name="State", after_update_cb=self.after_update, ) self.brightness = RemoteValueScaling( xknx, group_address_brightness, group_address_brightness_state, device_name=self.name, feature_name="Brightness", after_update_cb=self.after_update, range_from=0, range_to=255, ) self.color = RemoteValueColorRGB( xknx, group_address_color, group_address_color_state, device_name=self.name, after_update_cb=self.after_update, ) self.rgbw = RemoteValueColorRGBW( xknx, group_address_rgbw, group_address_rgbw_state, device_name=self.name, after_update_cb=self.after_update, ) self._xyy_color_valid: XYYColor | None = None self.xyy_color = RemoteValueColorXYY( xknx, group_address_xyy_color, group_address_xyy_color_state, device_name=self.name, after_update_cb=self._xyy_color_from_rv, ) self.tunable_white = RemoteValueScaling( xknx, group_address_tunable_white, group_address_tunable_white_state, device_name=self.name, feature_name="Tunable white", after_update_cb=self.after_update, range_from=0, range_to=255, ) self.color_temperature = RemoteValueDpt2ByteUnsigned( xknx, group_address_color_temperature, group_address_color_temperature_state, device_name=self.name, feature_name="Color temperature", after_update_cb=self.after_update, ) self.red = _SwitchAndBrightness( xknx, self.name, "red", group_address_switch_red, group_address_switch_red_state, group_address_brightness_red, group_address_brightness_red_state, self.after_update, ) self.green = _SwitchAndBrightness( xknx, self.name, "green", group_address_switch_green, group_address_switch_green_state, group_address_brightness_green, group_address_brightness_green_state, self.after_update, ) self.blue = _SwitchAndBrightness( xknx, self.name, "blue", group_address_switch_blue, group_address_switch_blue_state, group_address_brightness_blue, group_address_brightness_blue_state, self.after_update, ) self.white = _SwitchAndBrightness( xknx, self.name, "white", group_address_switch_white, group_address_switch_white_state, group_address_brightness_white, group_address_brightness_white_state, self.after_update, ) self.min_kelvin = min_kelvin self.max_kelvin = max_kelvin