diff --git a/homeassistant/components/knx/climate.py b/homeassistant/components/knx/climate.py index 879e1421bd4..0e0da4d5c0c 100644 --- a/homeassistant/components/knx/climate.py +++ b/homeassistant/components/knx/climate.py @@ -136,6 +136,9 @@ def _create_climate(xknx: XKNX, config: ConfigType) -> XknxClimate: ClimateSchema.CONF_FAN_SPEED_STATE_ADDRESS ), fan_speed_mode=config[ClimateSchema.CONF_FAN_SPEED_MODE], + group_address_humidity_state=config.get( + ClimateSchema.CONF_HUMIDITY_STATE_ADDRESS + ), ) @@ -397,6 +400,11 @@ class KNXClimate(KnxYamlEntity, ClimateEntity): await self._device.set_fan_speed(self._fan_modes_percentages[fan_mode_index]) + @property + def current_humidity(self) -> float | None: + """Return the current humidity.""" + return self._device.humidity.value + @property def extra_state_attributes(self) -> dict[str, Any] | None: """Return device specific state attributes.""" diff --git a/homeassistant/components/knx/manifest.json b/homeassistant/components/knx/manifest.json index a3b9f29e01d..df895282a2b 100644 --- a/homeassistant/components/knx/manifest.json +++ b/homeassistant/components/knx/manifest.json @@ -11,7 +11,7 @@ "loggers": ["xknx", "xknxproject"], "quality_scale": "platinum", "requirements": [ - "xknx==3.2.0", + "xknx==3.3.0", "xknxproject==3.8.1", "knx-frontend==2024.9.10.221729" ], diff --git a/homeassistant/components/knx/schema.py b/homeassistant/components/knx/schema.py index cc65a399da7..bf2fc55e5c9 100644 --- a/homeassistant/components/knx/schema.py +++ b/homeassistant/components/knx/schema.py @@ -347,6 +347,7 @@ class ClimateSchema(KNXPlatformSchema): CONF_FAN_MAX_STEP = "fan_max_step" CONF_FAN_SPEED_MODE = "fan_speed_mode" CONF_FAN_ZERO_MODE = "fan_zero_mode" + CONF_HUMIDITY_STATE_ADDRESS = "humidity_state_address" DEFAULT_NAME = "KNX Climate" DEFAULT_SETPOINT_SHIFT_MODE = "DPT6010" @@ -439,6 +440,7 @@ class ClimateSchema(KNXPlatformSchema): vol.Optional(CONF_FAN_ZERO_MODE, default=FAN_OFF): vol.Coerce( FanZeroMode ), + vol.Optional(CONF_HUMIDITY_STATE_ADDRESS): ga_list_validator, } ), ) diff --git a/requirements_all.txt b/requirements_all.txt index 21e9a4b3d76..b0c879d5d1f 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2995,7 +2995,7 @@ xbox-webapi==2.0.11 xiaomi-ble==0.32.0 # homeassistant.components.knx -xknx==3.2.0 +xknx==3.3.0 # homeassistant.components.knx xknxproject==3.8.1 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 8f1b8879cbe..9340a9d32f1 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -2381,7 +2381,7 @@ xbox-webapi==2.0.11 xiaomi-ble==0.32.0 # homeassistant.components.knx -xknx==3.2.0 +xknx==3.3.0 # homeassistant.components.knx xknxproject==3.8.1 diff --git a/tests/components/knx/test_climate.py b/tests/components/knx/test_climate.py index 487fab5d723..8fb348f1724 100644 --- a/tests/components/knx/test_climate.py +++ b/tests/components/knx/test_climate.py @@ -819,3 +819,34 @@ async def test_fan_speed_zero_mode_auto(hass: HomeAssistant, knx: KNXTestKit) -> ) await knx.assert_write("1/2/6", (0x0,)) knx.assert_state("climate.test", HVACMode.HEAT, fan_mode="auto") + + +async def test_climate_humidity(hass: HomeAssistant, knx: KNXTestKit) -> None: + """Test KNX climate humidity.""" + await knx.setup_integration( + { + ClimateSchema.PLATFORM: { + CONF_NAME: "test", + ClimateSchema.CONF_TEMPERATURE_ADDRESS: "1/2/3", + ClimateSchema.CONF_TARGET_TEMPERATURE_STATE_ADDRESS: "1/2/5", + ClimateSchema.CONF_HUMIDITY_STATE_ADDRESS: "1/2/16", + } + } + ) + + # read states state updater + await knx.assert_read("1/2/3") + await knx.assert_read("1/2/5") + + # StateUpdater initialize state + await knx.receive_response("1/2/5", RAW_FLOAT_22_0) + await knx.receive_response("1/2/3", RAW_FLOAT_21_0) + + # Query status + await knx.assert_read("1/2/16") + await knx.receive_response("1/2/16", (0x14, 0x74)) + knx.assert_state( + "climate.test", + HVACMode.HEAT, + current_humidity=45.6, + )