From 74438783335c11f1f4a50681d86758ff7207f08d Mon Sep 17 00:00:00 2001 From: tronikos Date: Fri, 14 Jun 2024 11:47:41 -0700 Subject: [PATCH 01/28] Make remaining time of timers available to LLMs (#118696) * Include speech_slots in IntentResponse.as_dict * Populate speech_slots only if available * fix typo * Add test * test all fields * Fix another test --------- Co-authored-by: Paulus Schoutsen --- homeassistant/helpers/intent.py | 2 ++ tests/helpers/test_llm.py | 41 +++++++++++++++++++++++++++++---- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/homeassistant/helpers/intent.py b/homeassistant/helpers/intent.py index d7c0f90e2f9..faf16ad572c 100644 --- a/homeassistant/helpers/intent.py +++ b/homeassistant/helpers/intent.py @@ -1362,6 +1362,8 @@ class IntentResponse: if self.reprompt: response_dict["reprompt"] = self.reprompt + if self.speech_slots: + response_dict["speech_slots"] = self.speech_slots response_data: dict[str, Any] = {} diff --git a/tests/helpers/test_llm.py b/tests/helpers/test_llm.py index 6ac17a2fe0e..b4a768c4429 100644 --- a/tests/helpers/test_llm.py +++ b/tests/helpers/test_llm.py @@ -149,8 +149,13 @@ async def test_assist_api( assert test_context.json_fragment # To reproduce an error case in tracing intent_response = intent.IntentResponse("*") - intent_response.matched_states = [State("light.matched", "on")] - intent_response.unmatched_states = [State("light.unmatched", "on")] + intent_response.async_set_states( + [State("light.matched", "on")], [State("light.unmatched", "on")] + ) + intent_response.async_set_speech("Some speech") + intent_response.async_set_card("Card title", "card content") + intent_response.async_set_speech_slots({"hello": 1}) + intent_response.async_set_reprompt("Do it again") tool_input = llm.ToolInput( tool_name="test_intent", tool_args={"area": "kitchen", "floor": "ground_floor"}, @@ -181,8 +186,22 @@ async def test_assist_api( "success": [], "targets": [], }, + "reprompt": { + "plain": { + "extra_data": None, + "reprompt": "Do it again", + }, + }, "response_type": "action_done", - "speech": {}, + "speech": { + "plain": { + "extra_data": None, + "speech": "Some speech", + }, + }, + "speech_slots": { + "hello": 1, + }, } # Call with a device/area/floor @@ -227,7 +246,21 @@ async def test_assist_api( "targets": [], }, "response_type": "action_done", - "speech": {}, + "reprompt": { + "plain": { + "extra_data": None, + "reprompt": "Do it again", + }, + }, + "speech": { + "plain": { + "extra_data": None, + "speech": "Some speech", + }, + }, + "speech_slots": { + "hello": 1, + }, } From 5cf0ee936dee4a79b60d085d4b3b344fcf45340a Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 10 Jun 2024 20:03:23 -0500 Subject: [PATCH 02/28] Bump uiprotect to 0.10.1 (#119327) Co-authored-by: Jan Bouwhuis --- homeassistant/components/unifiprotect/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/unifiprotect/manifest.json b/homeassistant/components/unifiprotect/manifest.json index 00a96483f70..dd04332daa7 100644 --- a/homeassistant/components/unifiprotect/manifest.json +++ b/homeassistant/components/unifiprotect/manifest.json @@ -40,7 +40,7 @@ "integration_type": "hub", "iot_class": "local_push", "loggers": ["uiprotect", "unifi_discovery"], - "requirements": ["uiprotect==0.4.1", "unifi-discovery==1.1.8"], + "requirements": ["uiprotect==0.10.1", "unifi-discovery==1.1.8"], "ssdp": [ { "manufacturer": "Ubiquiti Networks", diff --git a/requirements_all.txt b/requirements_all.txt index 34c2e2bfa46..46e26dffc6c 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2779,7 +2779,7 @@ twitchAPI==4.0.0 uasiren==0.0.1 # homeassistant.components.unifiprotect -uiprotect==0.4.1 +uiprotect==0.10.1 # homeassistant.components.landisgyr_heat_meter ultraheat-api==0.5.7 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 5a0dd8f939e..2ce1234545d 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -2153,7 +2153,7 @@ twitchAPI==4.0.0 uasiren==0.0.1 # homeassistant.components.unifiprotect -uiprotect==0.4.1 +uiprotect==0.10.1 # homeassistant.components.landisgyr_heat_meter ultraheat-api==0.5.7 From fb5de55c3e341885084652326f1dffc148d73856 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 10 Jun 2024 22:50:44 -0500 Subject: [PATCH 03/28] Bump uiprotect to 0.13.0 (#119344) --- homeassistant/components/unifiprotect/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/unifiprotect/manifest.json b/homeassistant/components/unifiprotect/manifest.json index dd04332daa7..8bbd3738222 100644 --- a/homeassistant/components/unifiprotect/manifest.json +++ b/homeassistant/components/unifiprotect/manifest.json @@ -40,7 +40,7 @@ "integration_type": "hub", "iot_class": "local_push", "loggers": ["uiprotect", "unifi_discovery"], - "requirements": ["uiprotect==0.10.1", "unifi-discovery==1.1.8"], + "requirements": ["uiprotect==0.13.0", "unifi-discovery==1.1.8"], "ssdp": [ { "manufacturer": "Ubiquiti Networks", diff --git a/requirements_all.txt b/requirements_all.txt index 46e26dffc6c..727f3561d44 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2779,7 +2779,7 @@ twitchAPI==4.0.0 uasiren==0.0.1 # homeassistant.components.unifiprotect -uiprotect==0.10.1 +uiprotect==0.13.0 # homeassistant.components.landisgyr_heat_meter ultraheat-api==0.5.7 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 2ce1234545d..5c567a13b6b 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -2153,7 +2153,7 @@ twitchAPI==4.0.0 uasiren==0.0.1 # homeassistant.components.unifiprotect -uiprotect==0.10.1 +uiprotect==0.13.0 # homeassistant.components.landisgyr_heat_meter ultraheat-api==0.5.7 From d602b7d19b9614692a9adccb964943e950464ec0 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 11 Jun 2024 13:59:28 -0500 Subject: [PATCH 04/28] Bump uiprotect to 1.0.0 (#119415) --- homeassistant/components/unifiprotect/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/unifiprotect/manifest.json b/homeassistant/components/unifiprotect/manifest.json index 8bbd3738222..b88eed6f39a 100644 --- a/homeassistant/components/unifiprotect/manifest.json +++ b/homeassistant/components/unifiprotect/manifest.json @@ -40,7 +40,7 @@ "integration_type": "hub", "iot_class": "local_push", "loggers": ["uiprotect", "unifi_discovery"], - "requirements": ["uiprotect==0.13.0", "unifi-discovery==1.1.8"], + "requirements": ["uiprotect==1.0.0", "unifi-discovery==1.1.8"], "ssdp": [ { "manufacturer": "Ubiquiti Networks", diff --git a/requirements_all.txt b/requirements_all.txt index 727f3561d44..e44b1fb414a 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2779,7 +2779,7 @@ twitchAPI==4.0.0 uasiren==0.0.1 # homeassistant.components.unifiprotect -uiprotect==0.13.0 +uiprotect==1.0.0 # homeassistant.components.landisgyr_heat_meter ultraheat-api==0.5.7 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 5c567a13b6b..7c69d112a46 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -2153,7 +2153,7 @@ twitchAPI==4.0.0 uasiren==0.0.1 # homeassistant.components.unifiprotect -uiprotect==0.13.0 +uiprotect==1.0.0 # homeassistant.components.landisgyr_heat_meter ultraheat-api==0.5.7 From 94d79440a02e4635302043172454bdcc420c994b Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 11 Jun 2024 13:58:05 -0500 Subject: [PATCH 05/28] Fix incorrect key name in unifiprotect options strings (#119417) --- homeassistant/components/unifiprotect/strings.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/unifiprotect/strings.json b/homeassistant/components/unifiprotect/strings.json index b83d514f836..bac7eaa5bf3 100644 --- a/homeassistant/components/unifiprotect/strings.json +++ b/homeassistant/components/unifiprotect/strings.json @@ -55,7 +55,7 @@ "all_updates": "Realtime metrics (WARNING: Greatly increases CPU usage)", "override_connection_host": "Override Connection Host", "max_media": "Max number of event to load for Media Browser (increases RAM usage)", - "allow_ea": "Allow Early Access versions of Protect (WARNING: Will mark your integration as unsupported)" + "allow_ea_channel": "Allow Early Access versions of Protect (WARNING: Will mark your integration as unsupported)" } } } From 8d547d4599d86ddbca3b9de992ae827990f3c2fc Mon Sep 17 00:00:00 2001 From: MJJ Date: Wed, 12 Jun 2024 00:01:11 +0200 Subject: [PATCH 06/28] Bump buieradar to 1.0.6 (#119433) --- homeassistant/components/buienradar/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/buienradar/manifest.json b/homeassistant/components/buienradar/manifest.json index 4885f45032c..5b08f5c631a 100644 --- a/homeassistant/components/buienradar/manifest.json +++ b/homeassistant/components/buienradar/manifest.json @@ -6,5 +6,5 @@ "documentation": "https://www.home-assistant.io/integrations/buienradar", "iot_class": "cloud_polling", "loggers": ["buienradar", "vincenty"], - "requirements": ["buienradar==1.0.5"] + "requirements": ["buienradar==1.0.6"] } diff --git a/requirements_all.txt b/requirements_all.txt index e44b1fb414a..25bcda28246 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -634,7 +634,7 @@ bthomehub5-devicelist==0.1.1 btsmarthub-devicelist==0.2.3 # homeassistant.components.buienradar -buienradar==1.0.5 +buienradar==1.0.6 # homeassistant.components.dhcp cached_ipaddress==0.3.0 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 7c69d112a46..5b39afa7492 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -536,7 +536,7 @@ brunt==1.2.0 bthome-ble==3.8.1 # homeassistant.components.buienradar -buienradar==1.0.5 +buienradar==1.0.6 # homeassistant.components.dhcp cached_ipaddress==0.3.0 From d5e9976b2c5c3a9e9b3b13a91d7e7dd663f72d7f Mon Sep 17 00:00:00 2001 From: Sebastian Goscik Date: Wed, 12 Jun 2024 00:20:00 +0100 Subject: [PATCH 07/28] Bump uiprotect to v1.0.1 (#119436) --- homeassistant/components/unifiprotect/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/unifiprotect/manifest.json b/homeassistant/components/unifiprotect/manifest.json index b88eed6f39a..5674fcb07a1 100644 --- a/homeassistant/components/unifiprotect/manifest.json +++ b/homeassistant/components/unifiprotect/manifest.json @@ -40,7 +40,7 @@ "integration_type": "hub", "iot_class": "local_push", "loggers": ["uiprotect", "unifi_discovery"], - "requirements": ["uiprotect==1.0.0", "unifi-discovery==1.1.8"], + "requirements": ["uiprotect==1.0.1", "unifi-discovery==1.1.8"], "ssdp": [ { "manufacturer": "Ubiquiti Networks", diff --git a/requirements_all.txt b/requirements_all.txt index 25bcda28246..90c9d695a4e 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2779,7 +2779,7 @@ twitchAPI==4.0.0 uasiren==0.0.1 # homeassistant.components.unifiprotect -uiprotect==1.0.0 +uiprotect==1.0.1 # homeassistant.components.landisgyr_heat_meter ultraheat-api==0.5.7 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 5b39afa7492..0c61200950c 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -2153,7 +2153,7 @@ twitchAPI==4.0.0 uasiren==0.0.1 # homeassistant.components.unifiprotect -uiprotect==1.0.0 +uiprotect==1.0.1 # homeassistant.components.landisgyr_heat_meter ultraheat-api==0.5.7 From 4e6e9f35b5e4887be4059d0706cd8487b2e982f2 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 12 Jun 2024 03:10:40 -0500 Subject: [PATCH 08/28] Bump uiprotect to 1.1.0 (#119449) --- homeassistant/components/unifiprotect/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/unifiprotect/manifest.json b/homeassistant/components/unifiprotect/manifest.json index 5674fcb07a1..5c1d252ce48 100644 --- a/homeassistant/components/unifiprotect/manifest.json +++ b/homeassistant/components/unifiprotect/manifest.json @@ -40,7 +40,7 @@ "integration_type": "hub", "iot_class": "local_push", "loggers": ["uiprotect", "unifi_discovery"], - "requirements": ["uiprotect==1.0.1", "unifi-discovery==1.1.8"], + "requirements": ["uiprotect==1.1.0", "unifi-discovery==1.1.8"], "ssdp": [ { "manufacturer": "Ubiquiti Networks", diff --git a/requirements_all.txt b/requirements_all.txt index 90c9d695a4e..7739abfd9a1 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2779,7 +2779,7 @@ twitchAPI==4.0.0 uasiren==0.0.1 # homeassistant.components.unifiprotect -uiprotect==1.0.1 +uiprotect==1.1.0 # homeassistant.components.landisgyr_heat_meter ultraheat-api==0.5.7 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 0c61200950c..1d19b501acd 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -2153,7 +2153,7 @@ twitchAPI==4.0.0 uasiren==0.0.1 # homeassistant.components.unifiprotect -uiprotect==1.0.1 +uiprotect==1.1.0 # homeassistant.components.landisgyr_heat_meter ultraheat-api==0.5.7 From f58882c878c216e2ba109ef5af21ecb9c917893c Mon Sep 17 00:00:00 2001 From: Joakim Plate Date: Wed, 12 Jun 2024 10:08:41 +0200 Subject: [PATCH 09/28] Add loggers to gardena bluetooth (#119460) --- homeassistant/components/gardena_bluetooth/manifest.json | 1 + 1 file changed, 1 insertion(+) diff --git a/homeassistant/components/gardena_bluetooth/manifest.json b/homeassistant/components/gardena_bluetooth/manifest.json index 1e3ef156d72..4812def7dde 100644 --- a/homeassistant/components/gardena_bluetooth/manifest.json +++ b/homeassistant/components/gardena_bluetooth/manifest.json @@ -13,5 +13,6 @@ "dependencies": ["bluetooth_adapters"], "documentation": "https://www.home-assistant.io/integrations/gardena_bluetooth", "iot_class": "local_polling", + "loggers": ["bleak", "bleak_esphome", "gardena_bluetooth"], "requirements": ["gardena-bluetooth==1.4.2"] } From 4eea448f9df27a89d9afd46310f88b276b0e30dc Mon Sep 17 00:00:00 2001 From: Erwin Douna Date: Wed, 12 Jun 2024 12:47:47 +0200 Subject: [PATCH 10/28] Revert Use integration fallback configuration for tado water heater fallback (#119466) --- homeassistant/components/tado/climate.py | 26 ++++++--- homeassistant/components/tado/helper.py | 31 ----------- homeassistant/components/tado/water_heater.py | 12 ++--- tests/components/tado/test_helper.py | 54 ------------------- 4 files changed, 25 insertions(+), 98 deletions(-) delete mode 100644 homeassistant/components/tado/helper.py delete mode 100644 tests/components/tado/test_helper.py diff --git a/homeassistant/components/tado/climate.py b/homeassistant/components/tado/climate.py index 487bc519a26..6d298a80e79 100644 --- a/homeassistant/components/tado/climate.py +++ b/homeassistant/components/tado/climate.py @@ -36,6 +36,8 @@ from .const import ( CONST_MODE_OFF, CONST_MODE_SMART_SCHEDULE, CONST_OVERLAY_MANUAL, + CONST_OVERLAY_TADO_DEFAULT, + CONST_OVERLAY_TADO_MODE, CONST_OVERLAY_TADO_OPTIONS, CONST_OVERLAY_TIMER, DATA, @@ -65,7 +67,6 @@ from .const import ( TYPE_HEATING, ) from .entity import TadoZoneEntity -from .helper import decide_overlay_mode _LOGGER = logging.getLogger(__name__) @@ -597,12 +598,23 @@ class TadoClimate(TadoZoneEntity, ClimateEntity): self._tado.reset_zone_overlay(self.zone_id) return - overlay_mode = decide_overlay_mode( - tado=self._tado, - duration=duration, - overlay_mode=overlay_mode, - zone_id=self.zone_id, - ) + # If user gave duration then overlay mode needs to be timer + if duration: + overlay_mode = CONST_OVERLAY_TIMER + # If no duration or timer set to fallback setting + if overlay_mode is None: + overlay_mode = ( + self._tado.fallback + if self._tado.fallback is not None + else CONST_OVERLAY_TADO_MODE + ) + # If default is Tado default then look it up + if overlay_mode == CONST_OVERLAY_TADO_DEFAULT: + overlay_mode = ( + self._tado_zone_data.default_overlay_termination_type + if self._tado_zone_data.default_overlay_termination_type is not None + else CONST_OVERLAY_TADO_MODE + ) # If we ended up with a timer but no duration, set a default duration if overlay_mode == CONST_OVERLAY_TIMER and duration is None: duration = ( diff --git a/homeassistant/components/tado/helper.py b/homeassistant/components/tado/helper.py deleted file mode 100644 index fee23aef64a..00000000000 --- a/homeassistant/components/tado/helper.py +++ /dev/null @@ -1,31 +0,0 @@ -"""Helper methods for Tado.""" - -from . import TadoConnector -from .const import ( - CONST_OVERLAY_TADO_DEFAULT, - CONST_OVERLAY_TADO_MODE, - CONST_OVERLAY_TIMER, -) - - -def decide_overlay_mode( - tado: TadoConnector, - duration: int | None, - zone_id: int, - overlay_mode: str | None = None, -) -> str: - """Return correct overlay mode based on the action and defaults.""" - # If user gave duration then overlay mode needs to be timer - if duration: - return CONST_OVERLAY_TIMER - # If no duration or timer set to fallback setting - if overlay_mode is None: - overlay_mode = tado.fallback or CONST_OVERLAY_TADO_MODE - # If default is Tado default then look it up - if overlay_mode == CONST_OVERLAY_TADO_DEFAULT: - overlay_mode = ( - tado.data["zone"][zone_id].default_overlay_termination_type - or CONST_OVERLAY_TADO_MODE - ) - - return overlay_mode diff --git a/homeassistant/components/tado/water_heater.py b/homeassistant/components/tado/water_heater.py index 9b449dd43cc..f1257f097eb 100644 --- a/homeassistant/components/tado/water_heater.py +++ b/homeassistant/components/tado/water_heater.py @@ -32,7 +32,6 @@ from .const import ( TYPE_HOT_WATER, ) from .entity import TadoZoneEntity -from .helper import decide_overlay_mode _LOGGER = logging.getLogger(__name__) @@ -278,11 +277,12 @@ class TadoWaterHeater(TadoZoneEntity, WaterHeaterEntity): self._tado.set_zone_off(self.zone_id, CONST_OVERLAY_MANUAL, TYPE_HOT_WATER) return - overlay_mode = decide_overlay_mode( - tado=self._tado, - duration=duration, - zone_id=self.zone_id, - ) + overlay_mode = CONST_OVERLAY_MANUAL + if duration: + overlay_mode = CONST_OVERLAY_TIMER + elif self._tado.fallback: + # Fallback to Smart Schedule at next Schedule switch if we have fallback enabled + overlay_mode = CONST_OVERLAY_TADO_MODE _LOGGER.debug( "Switching to %s for zone %s (%d) with temperature %s", diff --git a/tests/components/tado/test_helper.py b/tests/components/tado/test_helper.py deleted file mode 100644 index ff85dfce944..00000000000 --- a/tests/components/tado/test_helper.py +++ /dev/null @@ -1,54 +0,0 @@ -"""Helper method tests.""" - -from unittest.mock import patch - -from homeassistant.components.tado import TadoConnector -from homeassistant.components.tado.const import ( - CONST_OVERLAY_MANUAL, - CONST_OVERLAY_TADO_DEFAULT, - CONST_OVERLAY_TADO_MODE, - CONST_OVERLAY_TIMER, -) -from homeassistant.components.tado.helper import decide_overlay_mode -from homeassistant.core import HomeAssistant - - -def dummy_tado_connector(hass: HomeAssistant, fallback) -> TadoConnector: - """Return dummy tado connector.""" - return TadoConnector(hass, username="dummy", password="dummy", fallback=fallback) - - -async def test_overlay_mode_duration_set(hass: HomeAssistant) -> None: - """Test overlay method selection when duration is set.""" - tado = dummy_tado_connector(hass=hass, fallback=CONST_OVERLAY_TADO_MODE) - overlay_mode = decide_overlay_mode(tado=tado, duration="01:00:00", zone_id=1) - # Must select TIMER overlay - assert overlay_mode == CONST_OVERLAY_TIMER - - -async def test_overlay_mode_next_time_block_fallback(hass: HomeAssistant) -> None: - """Test overlay method selection when duration is not set.""" - integration_fallback = CONST_OVERLAY_TADO_MODE - tado = dummy_tado_connector(hass=hass, fallback=integration_fallback) - overlay_mode = decide_overlay_mode(tado=tado, duration=None, zone_id=1) - # Must fallback to integration wide setting - assert overlay_mode == integration_fallback - - -async def test_overlay_mode_tado_default_fallback(hass: HomeAssistant) -> None: - """Test overlay method selection when tado default is selected.""" - integration_fallback = CONST_OVERLAY_TADO_DEFAULT - zone_fallback = CONST_OVERLAY_MANUAL - tado = dummy_tado_connector(hass=hass, fallback=integration_fallback) - - class MockZoneData: - def __init__(self) -> None: - self.default_overlay_termination_type = zone_fallback - - zone_id = 1 - - zone_data = {"zone": {zone_id: MockZoneData()}} - with patch.dict(tado.data, zone_data): - overlay_mode = decide_overlay_mode(tado=tado, duration=None, zone_id=zone_id) - # Must fallback to zone setting - assert overlay_mode == zone_fallback From 7b809a8e55d6eccb9f06e29df8ccf3c2d426211d Mon Sep 17 00:00:00 2001 From: Jan-Philipp Benecke Date: Wed, 12 Jun 2024 18:08:44 +0200 Subject: [PATCH 11/28] Partially revert "Add more debug logging to Ping integration" (#119487) --- homeassistant/components/ping/helpers.py | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/homeassistant/components/ping/helpers.py b/homeassistant/components/ping/helpers.py index 7f1696d2ed9..82ebf4532da 100644 --- a/homeassistant/components/ping/helpers.py +++ b/homeassistant/components/ping/helpers.py @@ -9,7 +9,6 @@ from typing import TYPE_CHECKING, Any from icmplib import NameLookupError, async_ping from homeassistant.core import HomeAssistant -from homeassistant.helpers.update_coordinator import UpdateFailed from .const import ICMP_TIMEOUT, PING_TIMEOUT @@ -59,9 +58,10 @@ class PingDataICMPLib(PingData): timeout=ICMP_TIMEOUT, privileged=self._privileged, ) - except NameLookupError as err: + except NameLookupError: + _LOGGER.debug("Error resolving host: %s", self.ip_address) self.is_alive = False - raise UpdateFailed(f"Error resolving host: {self.ip_address}") from err + return _LOGGER.debug( "async_ping returned: reachable=%s sent=%i received=%s", @@ -152,17 +152,22 @@ class PingDataSubProcess(PingData): if TYPE_CHECKING: assert match is not None rtt_min, rtt_avg, rtt_max, rtt_mdev = match.groups() - except TimeoutError as err: + except TimeoutError: + _LOGGER.debug( + "Timed out running command: `%s`, after: %s", + " ".join(self._ping_cmd), + self._count + PING_TIMEOUT, + ) + if pinger: with suppress(TypeError): await pinger.kill() # type: ignore[func-returns-value] del pinger - raise UpdateFailed( - f"Timed out running command: `{self._ping_cmd}`, after: {self._count + PING_TIMEOUT}s" - ) from err + return None except AttributeError as err: - raise UpdateFailed from err + _LOGGER.debug("Error matching ping output: %s", err) + return None return {"min": rtt_min, "avg": rtt_avg, "max": rtt_max, "mdev": rtt_mdev} async def async_update(self) -> None: From 4c1d2e7ac86719fe525d3be98054a5b2f161ba08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ethem=20Cem=20=C3=96zkan?= Date: Sat, 15 Jun 2024 18:16:10 +0200 Subject: [PATCH 12/28] Revert "Revert Use integration fallback configuration for tado water fallback" (#119526) * Revert "Revert Use integration fallback configuration for tado water heater fallback (#119466)" This reverts commit ade936e6d5088c4a4d809111417fb3c7080825d5. * add decide method for duration * add repair issue to let users know * test module for repairs * Update strings.json Co-authored-by: Franck Nijhof * repair issue should not be persistent * use issue_registery fixture instead of mocking * fix comment * parameterize repair issue created test case --------- Co-authored-by: Franck Nijhof --- homeassistant/components/tado/climate.py | 41 +++------ homeassistant/components/tado/const.py | 2 + homeassistant/components/tado/helper.py | 51 +++++++++++ homeassistant/components/tado/repairs.py | 34 ++++++++ homeassistant/components/tado/strings.json | 4 + homeassistant/components/tado/water_heater.py | 26 ++++-- tests/components/tado/test_helper.py | 87 +++++++++++++++++++ tests/components/tado/test_repairs.py | 64 ++++++++++++++ 8 files changed, 274 insertions(+), 35 deletions(-) create mode 100644 homeassistant/components/tado/helper.py create mode 100644 homeassistant/components/tado/repairs.py create mode 100644 tests/components/tado/test_helper.py create mode 100644 tests/components/tado/test_repairs.py diff --git a/homeassistant/components/tado/climate.py b/homeassistant/components/tado/climate.py index 6d298a80e79..3cb5d7fbce9 100644 --- a/homeassistant/components/tado/climate.py +++ b/homeassistant/components/tado/climate.py @@ -36,10 +36,7 @@ from .const import ( CONST_MODE_OFF, CONST_MODE_SMART_SCHEDULE, CONST_OVERLAY_MANUAL, - CONST_OVERLAY_TADO_DEFAULT, - CONST_OVERLAY_TADO_MODE, CONST_OVERLAY_TADO_OPTIONS, - CONST_OVERLAY_TIMER, DATA, DOMAIN, HA_TERMINATION_DURATION, @@ -67,6 +64,7 @@ from .const import ( TYPE_HEATING, ) from .entity import TadoZoneEntity +from .helper import decide_duration, decide_overlay_mode _LOGGER = logging.getLogger(__name__) @@ -598,31 +596,18 @@ class TadoClimate(TadoZoneEntity, ClimateEntity): self._tado.reset_zone_overlay(self.zone_id) return - # If user gave duration then overlay mode needs to be timer - if duration: - overlay_mode = CONST_OVERLAY_TIMER - # If no duration or timer set to fallback setting - if overlay_mode is None: - overlay_mode = ( - self._tado.fallback - if self._tado.fallback is not None - else CONST_OVERLAY_TADO_MODE - ) - # If default is Tado default then look it up - if overlay_mode == CONST_OVERLAY_TADO_DEFAULT: - overlay_mode = ( - self._tado_zone_data.default_overlay_termination_type - if self._tado_zone_data.default_overlay_termination_type is not None - else CONST_OVERLAY_TADO_MODE - ) - # If we ended up with a timer but no duration, set a default duration - if overlay_mode == CONST_OVERLAY_TIMER and duration is None: - duration = ( - int(self._tado_zone_data.default_overlay_termination_duration) - if self._tado_zone_data.default_overlay_termination_duration is not None - else 3600 - ) - + overlay_mode = decide_overlay_mode( + tado=self._tado, + duration=duration, + overlay_mode=overlay_mode, + zone_id=self.zone_id, + ) + duration = decide_duration( + tado=self._tado, + duration=duration, + zone_id=self.zone_id, + overlay_mode=overlay_mode, + ) _LOGGER.debug( ( "Switching to %s for zone %s (%d) with temperature %s °C and duration" diff --git a/homeassistant/components/tado/const.py b/homeassistant/components/tado/const.py index c62352a6d95..be35bbb8e25 100644 --- a/homeassistant/components/tado/const.py +++ b/homeassistant/components/tado/const.py @@ -212,3 +212,5 @@ SERVICE_ADD_METER_READING = "add_meter_reading" CONF_CONFIG_ENTRY = "config_entry" CONF_READING = "reading" ATTR_MESSAGE = "message" + +WATER_HEATER_FALLBACK_REPAIR = "water_heater_fallback" diff --git a/homeassistant/components/tado/helper.py b/homeassistant/components/tado/helper.py new file mode 100644 index 00000000000..efcd3e7c4ea --- /dev/null +++ b/homeassistant/components/tado/helper.py @@ -0,0 +1,51 @@ +"""Helper methods for Tado.""" + +from . import TadoConnector +from .const import ( + CONST_OVERLAY_TADO_DEFAULT, + CONST_OVERLAY_TADO_MODE, + CONST_OVERLAY_TIMER, +) + + +def decide_overlay_mode( + tado: TadoConnector, + duration: int | None, + zone_id: int, + overlay_mode: str | None = None, +) -> str: + """Return correct overlay mode based on the action and defaults.""" + # If user gave duration then overlay mode needs to be timer + if duration: + return CONST_OVERLAY_TIMER + # If no duration or timer set to fallback setting + if overlay_mode is None: + overlay_mode = tado.fallback or CONST_OVERLAY_TADO_MODE + # If default is Tado default then look it up + if overlay_mode == CONST_OVERLAY_TADO_DEFAULT: + overlay_mode = ( + tado.data["zone"][zone_id].default_overlay_termination_type + or CONST_OVERLAY_TADO_MODE + ) + + return overlay_mode + + +def decide_duration( + tado: TadoConnector, + duration: int | None, + zone_id: int, + overlay_mode: str | None = None, +) -> None | int: + """Return correct duration based on the selected overlay mode/duration and tado config.""" + # If we ended up with a timer but no duration, set a default duration + # If we ended up with a timer but no duration, set a default duration + if overlay_mode == CONST_OVERLAY_TIMER and duration is None: + duration = ( + int(tado.data["zone"][zone_id].default_overlay_termination_duration) + if tado.data["zone"][zone_id].default_overlay_termination_duration + is not None + else 3600 + ) + + return duration diff --git a/homeassistant/components/tado/repairs.py b/homeassistant/components/tado/repairs.py new file mode 100644 index 00000000000..5ffc3c76bf7 --- /dev/null +++ b/homeassistant/components/tado/repairs.py @@ -0,0 +1,34 @@ +"""Repair implementations.""" + +from homeassistant.core import HomeAssistant +from homeassistant.helpers import issue_registry as ir + +from .const import ( + CONST_OVERLAY_MANUAL, + CONST_OVERLAY_TADO_DEFAULT, + DOMAIN, + WATER_HEATER_FALLBACK_REPAIR, +) + + +def manage_water_heater_fallback_issue( + hass: HomeAssistant, + water_heater_entities: list, + integration_overlay_fallback: str | None, +) -> None: + """Notify users about water heater respecting fallback setting.""" + if ( + integration_overlay_fallback + in [CONST_OVERLAY_TADO_DEFAULT, CONST_OVERLAY_MANUAL] + and len(water_heater_entities) > 0 + ): + for water_heater_entity in water_heater_entities: + ir.async_create_issue( + hass=hass, + domain=DOMAIN, + issue_id=f"{WATER_HEATER_FALLBACK_REPAIR}_{water_heater_entity.zone_name}", + is_fixable=False, + is_persistent=False, + severity=ir.IssueSeverity.WARNING, + translation_key=WATER_HEATER_FALLBACK_REPAIR, + ) diff --git a/homeassistant/components/tado/strings.json b/homeassistant/components/tado/strings.json index 51e36fe5355..d992befe112 100644 --- a/homeassistant/components/tado/strings.json +++ b/homeassistant/components/tado/strings.json @@ -165,6 +165,10 @@ "import_failed_invalid_auth": { "title": "Failed to import, invalid credentials", "description": "Failed to import the configuration for the Tado Device Tracker, due to invalid credentials. Please fix the YAML configuration and restart Home Assistant. Alternatively you can use the UI to configure Tado. Don't forget to delete the YAML configuration, once the import is successful." + }, + "water_heater_fallback": { + "title": "Tado Water Heater entities now support fallback options", + "description": "Due to added support for water heaters entities, these entities may use different overlay. Please configure integration entity and tado app water heater zone overlay options." } } } diff --git a/homeassistant/components/tado/water_heater.py b/homeassistant/components/tado/water_heater.py index f1257f097eb..a31b70a8f9a 100644 --- a/homeassistant/components/tado/water_heater.py +++ b/homeassistant/components/tado/water_heater.py @@ -32,6 +32,8 @@ from .const import ( TYPE_HOT_WATER, ) from .entity import TadoZoneEntity +from .helper import decide_duration, decide_overlay_mode +from .repairs import manage_water_heater_fallback_issue _LOGGER = logging.getLogger(__name__) @@ -79,6 +81,12 @@ async def async_setup_entry( async_add_entities(entities, True) + manage_water_heater_fallback_issue( + hass=hass, + water_heater_entities=entities, + integration_overlay_fallback=tado.fallback, + ) + def _generate_entities(tado: TadoConnector) -> list[WaterHeaterEntity]: """Create all water heater entities.""" @@ -277,13 +285,17 @@ class TadoWaterHeater(TadoZoneEntity, WaterHeaterEntity): self._tado.set_zone_off(self.zone_id, CONST_OVERLAY_MANUAL, TYPE_HOT_WATER) return - overlay_mode = CONST_OVERLAY_MANUAL - if duration: - overlay_mode = CONST_OVERLAY_TIMER - elif self._tado.fallback: - # Fallback to Smart Schedule at next Schedule switch if we have fallback enabled - overlay_mode = CONST_OVERLAY_TADO_MODE - + overlay_mode = decide_overlay_mode( + tado=self._tado, + duration=duration, + zone_id=self.zone_id, + ) + duration = decide_duration( + tado=self._tado, + duration=duration, + zone_id=self.zone_id, + overlay_mode=overlay_mode, + ) _LOGGER.debug( "Switching to %s for zone %s (%d) with temperature %s", self._current_tado_hvac_mode, diff --git a/tests/components/tado/test_helper.py b/tests/components/tado/test_helper.py new file mode 100644 index 00000000000..bdd7977f858 --- /dev/null +++ b/tests/components/tado/test_helper.py @@ -0,0 +1,87 @@ +"""Helper method tests.""" + +from unittest.mock import patch + +from homeassistant.components.tado import TadoConnector +from homeassistant.components.tado.const import ( + CONST_OVERLAY_MANUAL, + CONST_OVERLAY_TADO_DEFAULT, + CONST_OVERLAY_TADO_MODE, + CONST_OVERLAY_TIMER, +) +from homeassistant.components.tado.helper import decide_duration, decide_overlay_mode +from homeassistant.core import HomeAssistant + + +def dummy_tado_connector(hass: HomeAssistant, fallback) -> TadoConnector: + """Return dummy tado connector.""" + return TadoConnector(hass, username="dummy", password="dummy", fallback=fallback) + + +async def test_overlay_mode_duration_set(hass: HomeAssistant) -> None: + """Test overlay method selection when duration is set.""" + tado = dummy_tado_connector(hass=hass, fallback=CONST_OVERLAY_TADO_MODE) + overlay_mode = decide_overlay_mode(tado=tado, duration=3600, zone_id=1) + # Must select TIMER overlay + assert overlay_mode == CONST_OVERLAY_TIMER + + +async def test_overlay_mode_next_time_block_fallback(hass: HomeAssistant) -> None: + """Test overlay method selection when duration is not set.""" + integration_fallback = CONST_OVERLAY_TADO_MODE + tado = dummy_tado_connector(hass=hass, fallback=integration_fallback) + overlay_mode = decide_overlay_mode(tado=tado, duration=None, zone_id=1) + # Must fallback to integration wide setting + assert overlay_mode == integration_fallback + + +async def test_overlay_mode_tado_default_fallback(hass: HomeAssistant) -> None: + """Test overlay method selection when tado default is selected.""" + integration_fallback = CONST_OVERLAY_TADO_DEFAULT + zone_fallback = CONST_OVERLAY_MANUAL + tado = dummy_tado_connector(hass=hass, fallback=integration_fallback) + + class MockZoneData: + def __init__(self) -> None: + self.default_overlay_termination_type = zone_fallback + + zone_id = 1 + + zone_data = {"zone": {zone_id: MockZoneData()}} + with patch.dict(tado.data, zone_data): + overlay_mode = decide_overlay_mode(tado=tado, duration=None, zone_id=zone_id) + # Must fallback to zone setting + assert overlay_mode == zone_fallback + + +async def test_duration_enabled_without_tado_default(hass: HomeAssistant) -> None: + """Test duration decide method when overlay is timer and duration is set.""" + overlay = CONST_OVERLAY_TIMER + expected_duration = 600 + tado = dummy_tado_connector(hass=hass, fallback=CONST_OVERLAY_MANUAL) + duration = decide_duration( + tado=tado, duration=expected_duration, overlay_mode=overlay, zone_id=0 + ) + # Should return the same duration value + assert duration == expected_duration + + +async def test_duration_enabled_with_tado_default(hass: HomeAssistant) -> None: + """Test overlay method selection when ended up with timer overlay and None duration.""" + zone_fallback = CONST_OVERLAY_TIMER + expected_duration = 45000 + tado = dummy_tado_connector(hass=hass, fallback=zone_fallback) + + class MockZoneData: + def __init__(self) -> None: + self.default_overlay_termination_duration = expected_duration + + zone_id = 1 + + zone_data = {"zone": {zone_id: MockZoneData()}} + with patch.dict(tado.data, zone_data): + duration = decide_duration( + tado=tado, duration=None, zone_id=zone_id, overlay_mode=zone_fallback + ) + # Must fallback to zone timer setting + assert duration == expected_duration diff --git a/tests/components/tado/test_repairs.py b/tests/components/tado/test_repairs.py new file mode 100644 index 00000000000..2e055884272 --- /dev/null +++ b/tests/components/tado/test_repairs.py @@ -0,0 +1,64 @@ +"""Repair tests.""" + +import pytest + +from homeassistant.components.tado.const import ( + CONST_OVERLAY_MANUAL, + CONST_OVERLAY_TADO_DEFAULT, + CONST_OVERLAY_TADO_MODE, + DOMAIN, + WATER_HEATER_FALLBACK_REPAIR, +) +from homeassistant.components.tado.repairs import manage_water_heater_fallback_issue +from homeassistant.core import HomeAssistant +from homeassistant.helpers import issue_registry as ir + + +class MockWaterHeater: + """Mock Water heater entity.""" + + def __init__(self, zone_name) -> None: + """Init mock entity class.""" + self.zone_name = zone_name + + +async def test_manage_water_heater_fallback_issue_not_created( + hass: HomeAssistant, + issue_registry: ir.IssueRegistry, +) -> None: + """Test water heater fallback issue is not needed.""" + zone_name = "Hot Water" + expected_issue_id = f"{WATER_HEATER_FALLBACK_REPAIR}_{zone_name}" + water_heater_entities = [MockWaterHeater(zone_name)] + manage_water_heater_fallback_issue( + water_heater_entities=water_heater_entities, + integration_overlay_fallback=CONST_OVERLAY_TADO_MODE, + hass=hass, + ) + assert ( + issue_registry.async_get_issue(issue_id=expected_issue_id, domain=DOMAIN) + is None + ) + + +@pytest.mark.parametrize( + "integration_overlay_fallback", [CONST_OVERLAY_TADO_DEFAULT, CONST_OVERLAY_MANUAL] +) +async def test_manage_water_heater_fallback_issue_created( + hass: HomeAssistant, + issue_registry: ir.IssueRegistry, + integration_overlay_fallback: str, +) -> None: + """Test water heater fallback issue created cases.""" + zone_name = "Hot Water" + expected_issue_id = f"{WATER_HEATER_FALLBACK_REPAIR}_{zone_name}" + water_heater_entities = [MockWaterHeater(zone_name)] + manage_water_heater_fallback_issue( + water_heater_entities=water_heater_entities, + integration_overlay_fallback=integration_overlay_fallback, + hass=hass, + ) + assert ( + issue_registry.async_get_issue(issue_id=expected_issue_id, domain=DOMAIN) + is not None + ) From 78c2dc708c7104098933a77f3a11ddf6c4522e65 Mon Sep 17 00:00:00 2001 From: starkillerOG Date: Thu, 13 Jun 2024 09:30:53 +0200 Subject: [PATCH 13/28] Fix error for Reolink snapshot streams (#119572) --- homeassistant/components/reolink/camera.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/reolink/camera.py b/homeassistant/components/reolink/camera.py index a2c396e7ef5..4adac1a96d8 100644 --- a/homeassistant/components/reolink/camera.py +++ b/homeassistant/components/reolink/camera.py @@ -116,7 +116,6 @@ async def async_setup_entry( class ReolinkCamera(ReolinkChannelCoordinatorEntity, Camera): """An implementation of a Reolink IP camera.""" - _attr_supported_features: CameraEntityFeature = CameraEntityFeature.STREAM entity_description: ReolinkCameraEntityDescription def __init__( @@ -130,6 +129,9 @@ class ReolinkCamera(ReolinkChannelCoordinatorEntity, Camera): ReolinkChannelCoordinatorEntity.__init__(self, reolink_data, channel) Camera.__init__(self) + if "snapshots" not in entity_description.stream: + self._attr_supported_features = CameraEntityFeature.STREAM + if self._host.api.model in DUAL_LENS_MODELS: self._attr_translation_key = ( f"{entity_description.translation_key}_lens_{self._channel}" From 4e394597bd254fd77d19823796a8210f383d8795 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 13 Jun 2024 12:28:42 -0500 Subject: [PATCH 14/28] Bump uiprotect to 1.2.1 (#119620) * Bump uiprotect to 1.2.0 changelog: https://github.com/uilibs/uiprotect/compare/v1.1.0...v1.2.0 * bump --- homeassistant/components/unifiprotect/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/unifiprotect/manifest.json b/homeassistant/components/unifiprotect/manifest.json index 5c1d252ce48..f7b3a4bde70 100644 --- a/homeassistant/components/unifiprotect/manifest.json +++ b/homeassistant/components/unifiprotect/manifest.json @@ -40,7 +40,7 @@ "integration_type": "hub", "iot_class": "local_push", "loggers": ["uiprotect", "unifi_discovery"], - "requirements": ["uiprotect==1.1.0", "unifi-discovery==1.1.8"], + "requirements": ["uiprotect==1.2.1", "unifi-discovery==1.1.8"], "ssdp": [ { "manufacturer": "Ubiquiti Networks", diff --git a/requirements_all.txt b/requirements_all.txt index 7739abfd9a1..babf4526388 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2779,7 +2779,7 @@ twitchAPI==4.0.0 uasiren==0.0.1 # homeassistant.components.unifiprotect -uiprotect==1.1.0 +uiprotect==1.2.1 # homeassistant.components.landisgyr_heat_meter ultraheat-api==0.5.7 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 1d19b501acd..917b611c4e2 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -2153,7 +2153,7 @@ twitchAPI==4.0.0 uasiren==0.0.1 # homeassistant.components.unifiprotect -uiprotect==1.1.0 +uiprotect==1.2.1 # homeassistant.components.landisgyr_heat_meter ultraheat-api==0.5.7 From 78e13d138f84ce6ec69a5f672f0be1a713fe88aa Mon Sep 17 00:00:00 2001 From: Jan Bouwhuis Date: Fri, 14 Jun 2024 07:46:24 +0200 Subject: [PATCH 15/28] Fix group enabled platforms are preloaded if they have alternative states (#119621) --- homeassistant/components/group/manifest.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/homeassistant/components/group/manifest.json b/homeassistant/components/group/manifest.json index d86fc4ba622..a2045f370b1 100644 --- a/homeassistant/components/group/manifest.json +++ b/homeassistant/components/group/manifest.json @@ -4,7 +4,10 @@ "after_dependencies": [ "alarm_control_panel", "climate", + "cover", "device_tracker", + "lock", + "media_player", "person", "plant", "vacuum", From c77ed921dee13cd1f9ea0b1f2ec142792a258975 Mon Sep 17 00:00:00 2001 From: Paul Bottein Date: Thu, 13 Jun 2024 21:34:58 +0200 Subject: [PATCH 16/28] Update frontend to 20240610.1 (#119634) --- homeassistant/components/frontend/manifest.json | 2 +- homeassistant/package_constraints.txt | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/frontend/manifest.json b/homeassistant/components/frontend/manifest.json index d3d19375105..1b17601a2f6 100644 --- a/homeassistant/components/frontend/manifest.json +++ b/homeassistant/components/frontend/manifest.json @@ -20,5 +20,5 @@ "documentation": "https://www.home-assistant.io/integrations/frontend", "integration_type": "system", "quality_scale": "internal", - "requirements": ["home-assistant-frontend==20240610.0"] + "requirements": ["home-assistant-frontend==20240610.1"] } diff --git a/homeassistant/package_constraints.txt b/homeassistant/package_constraints.txt index c8c9419339d..94f030c6104 100644 --- a/homeassistant/package_constraints.txt +++ b/homeassistant/package_constraints.txt @@ -32,7 +32,7 @@ habluetooth==3.1.1 hass-nabucasa==0.81.1 hassil==1.7.1 home-assistant-bluetooth==1.12.0 -home-assistant-frontend==20240610.0 +home-assistant-frontend==20240610.1 home-assistant-intents==2024.6.5 httpx==0.27.0 ifaddr==0.2.0 diff --git a/requirements_all.txt b/requirements_all.txt index babf4526388..7a7ca7ebffc 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1087,7 +1087,7 @@ hole==0.8.0 holidays==0.50 # homeassistant.components.frontend -home-assistant-frontend==20240610.0 +home-assistant-frontend==20240610.1 # homeassistant.components.conversation home-assistant-intents==2024.6.5 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 917b611c4e2..a6bffadc391 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -889,7 +889,7 @@ hole==0.8.0 holidays==0.50 # homeassistant.components.frontend -home-assistant-frontend==20240610.0 +home-assistant-frontend==20240610.1 # homeassistant.components.conversation home-assistant-intents==2024.6.5 From 2b44cf898e9af6db1767bf3ce354f063621172cf Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 13 Jun 2024 16:31:39 -0500 Subject: [PATCH 17/28] Soften unifiprotect EA channel message (#119641) --- homeassistant/components/unifiprotect/__init__.py | 6 +++++- homeassistant/components/unifiprotect/strings.json | 2 +- tests/components/unifiprotect/test_repairs.py | 6 +++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/unifiprotect/__init__.py b/homeassistant/components/unifiprotect/__init__.py index 0f41011361d..00d6adf461c 100644 --- a/homeassistant/components/unifiprotect/__init__.py +++ b/homeassistant/components/unifiprotect/__init__.py @@ -54,6 +54,10 @@ SCAN_INTERVAL = timedelta(seconds=DEFAULT_SCAN_INTERVAL) CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN) +EARLY_ACCESS_URL = ( + "https://www.home-assistant.io/integrations/unifiprotect#software-support" +) + async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: """Set up the UniFi Protect.""" @@ -123,7 +127,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: "ea_channel_warning", is_fixable=True, is_persistent=True, - learn_more_url="https://www.home-assistant.io/integrations/unifiprotect#about-unifi-early-access", + learn_more_url=EARLY_ACCESS_URL, severity=IssueSeverity.WARNING, translation_key="ea_channel_warning", translation_placeholders={"version": str(nvr_info.version)}, diff --git a/homeassistant/components/unifiprotect/strings.json b/homeassistant/components/unifiprotect/strings.json index bac7eaa5bf3..54023a1768f 100644 --- a/homeassistant/components/unifiprotect/strings.json +++ b/homeassistant/components/unifiprotect/strings.json @@ -67,7 +67,7 @@ "step": { "start": { "title": "UniFi Protect Early Access enabled", - "description": "You are either running an Early Access version of UniFi Protect (v{version}) or opt-ed into a release channel that is not the Official Release Channel. [Home Assistant does not support Early Access versions](https://www.home-assistant.io/integrations/unifiprotect#about-unifi-early-access), so you should immediately switch to the Official Release Channel. Accidentally upgrading to an Early Access version can break your UniFi Protect integration.\n\nBy submitting this form, you have switched back to the Official Release Channel or agree to run an unsupported version of UniFi Protect, which may break your Home Assistant integration at any time." + "description": "You are either running an Early Access version of UniFi Protect (v{version}) or opt-ed into a release channel that is not the Official Release Channel.\n\nAs these Early Access releases may not be tested yet, using it may cause the UniFi Protect integration to behave unexpectedly. [Read more about Early Access and Home Assistant]({learn_more}).\n\nSubmit to dismiss this message." }, "confirm": { "title": "[%key:component::unifiprotect::issues::ea_channel_warning::fix_flow::step::start::title%]", diff --git a/tests/components/unifiprotect/test_repairs.py b/tests/components/unifiprotect/test_repairs.py index 7d76550f7c7..6b54f464b26 100644 --- a/tests/components/unifiprotect/test_repairs.py +++ b/tests/components/unifiprotect/test_repairs.py @@ -61,7 +61,7 @@ async def test_ea_warning_ignore( flow_id = data["flow_id"] assert data["description_placeholders"] == { - "learn_more": "https://www.home-assistant.io/integrations/unifiprotect#about-unifi-early-access", + "learn_more": "https://www.home-assistant.io/integrations/unifiprotect#software-support", "version": str(version), } assert data["step_id"] == "start" @@ -73,7 +73,7 @@ async def test_ea_warning_ignore( flow_id = data["flow_id"] assert data["description_placeholders"] == { - "learn_more": "https://www.home-assistant.io/integrations/unifiprotect#about-unifi-early-access", + "learn_more": "https://www.home-assistant.io/integrations/unifiprotect#software-support", "version": str(version), } assert data["step_id"] == "confirm" @@ -123,7 +123,7 @@ async def test_ea_warning_fix( flow_id = data["flow_id"] assert data["description_placeholders"] == { - "learn_more": "https://www.home-assistant.io/integrations/unifiprotect#about-unifi-early-access", + "learn_more": "https://www.home-assistant.io/integrations/unifiprotect#software-support", "version": str(version), } assert data["step_id"] == "start" From dfe25ff804258b170751d361c95e861e7ceb04d8 Mon Sep 17 00:00:00 2001 From: mletenay Date: Fri, 14 Jun 2024 08:29:32 +0200 Subject: [PATCH 18/28] Bump goodwe to 0.3.6 (#119646) --- homeassistant/components/goodwe/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/goodwe/manifest.json b/homeassistant/components/goodwe/manifest.json index 8506d1fd6af..41e0ed91f6a 100644 --- a/homeassistant/components/goodwe/manifest.json +++ b/homeassistant/components/goodwe/manifest.json @@ -6,5 +6,5 @@ "documentation": "https://www.home-assistant.io/integrations/goodwe", "iot_class": "local_polling", "loggers": ["goodwe"], - "requirements": ["goodwe==0.3.5"] + "requirements": ["goodwe==0.3.6"] } diff --git a/requirements_all.txt b/requirements_all.txt index 7a7ca7ebffc..6bac672f752 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -961,7 +961,7 @@ glances-api==0.8.0 goalzero==0.2.2 # homeassistant.components.goodwe -goodwe==0.3.5 +goodwe==0.3.6 # homeassistant.components.google_mail # homeassistant.components.google_tasks diff --git a/requirements_test_all.txt b/requirements_test_all.txt index a6bffadc391..10ab07e87c1 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -790,7 +790,7 @@ glances-api==0.8.0 goalzero==0.2.2 # homeassistant.components.goodwe -goodwe==0.3.5 +goodwe==0.3.6 # homeassistant.components.google_mail # homeassistant.components.google_tasks From ace7da2328879d6d3d3114a25b2eeb4214f024ab Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 13 Jun 2024 21:01:25 -0500 Subject: [PATCH 19/28] Bump uiprotect to 1.4.1 (#119653) --- homeassistant/components/unifiprotect/manifest.json | 2 +- homeassistant/components/unifiprotect/utils.py | 6 ++---- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/homeassistant/components/unifiprotect/manifest.json b/homeassistant/components/unifiprotect/manifest.json index f7b3a4bde70..57589c44f85 100644 --- a/homeassistant/components/unifiprotect/manifest.json +++ b/homeassistant/components/unifiprotect/manifest.json @@ -40,7 +40,7 @@ "integration_type": "hub", "iot_class": "local_push", "loggers": ["uiprotect", "unifi_discovery"], - "requirements": ["uiprotect==1.2.1", "unifi-discovery==1.1.8"], + "requirements": ["uiprotect==1.4.1", "unifi-discovery==1.1.8"], "ssdp": [ { "manufacturer": "Ubiquiti Networks", diff --git a/homeassistant/components/unifiprotect/utils.py b/homeassistant/components/unifiprotect/utils.py index 8a3028bcea7..cf917d894ac 100644 --- a/homeassistant/components/unifiprotect/utils.py +++ b/homeassistant/components/unifiprotect/utils.py @@ -89,10 +89,8 @@ def async_get_devices_by_type( bootstrap: Bootstrap, device_type: ModelType ) -> dict[str, ProtectAdoptableDeviceModel]: """Get devices by type.""" - - devices: dict[str, ProtectAdoptableDeviceModel] = getattr( - bootstrap, f"{device_type.value}s" - ) + devices: dict[str, ProtectAdoptableDeviceModel] + devices = getattr(bootstrap, device_type.devices_key) return devices diff --git a/requirements_all.txt b/requirements_all.txt index 6bac672f752..392517785cc 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2779,7 +2779,7 @@ twitchAPI==4.0.0 uasiren==0.0.1 # homeassistant.components.unifiprotect -uiprotect==1.2.1 +uiprotect==1.4.1 # homeassistant.components.landisgyr_heat_meter ultraheat-api==0.5.7 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 10ab07e87c1..eb294c1d870 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -2153,7 +2153,7 @@ twitchAPI==4.0.0 uasiren==0.0.1 # homeassistant.components.unifiprotect -uiprotect==1.2.1 +uiprotect==1.4.1 # homeassistant.components.landisgyr_heat_meter ultraheat-api==0.5.7 From 204e9a79c5d875c079ada11baebd969cd3abe69e Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 13 Jun 2024 23:34:55 -0500 Subject: [PATCH 20/28] Bump uiprotect to 1.6.0 (#119661) --- homeassistant/components/unifiprotect/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/unifiprotect/manifest.json b/homeassistant/components/unifiprotect/manifest.json index 57589c44f85..181f87b4469 100644 --- a/homeassistant/components/unifiprotect/manifest.json +++ b/homeassistant/components/unifiprotect/manifest.json @@ -40,7 +40,7 @@ "integration_type": "hub", "iot_class": "local_push", "loggers": ["uiprotect", "unifi_discovery"], - "requirements": ["uiprotect==1.4.1", "unifi-discovery==1.1.8"], + "requirements": ["uiprotect==1.6.0", "unifi-discovery==1.1.8"], "ssdp": [ { "manufacturer": "Ubiquiti Networks", diff --git a/requirements_all.txt b/requirements_all.txt index 392517785cc..6ed96bfcd24 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2779,7 +2779,7 @@ twitchAPI==4.0.0 uasiren==0.0.1 # homeassistant.components.unifiprotect -uiprotect==1.4.1 +uiprotect==1.6.0 # homeassistant.components.landisgyr_heat_meter ultraheat-api==0.5.7 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index eb294c1d870..df58740a646 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -2153,7 +2153,7 @@ twitchAPI==4.0.0 uasiren==0.0.1 # homeassistant.components.unifiprotect -uiprotect==1.4.1 +uiprotect==1.6.0 # homeassistant.components.landisgyr_heat_meter ultraheat-api==0.5.7 From 2d4176d581c3a60bf62e24a0cd12f1ae9afedec2 Mon Sep 17 00:00:00 2001 From: G Johansson Date: Fri, 14 Jun 2024 20:45:27 +0200 Subject: [PATCH 21/28] Fix alarm default code in concord232 (#119691) --- homeassistant/components/concord232/alarm_control_panel.py | 1 + 1 file changed, 1 insertion(+) diff --git a/homeassistant/components/concord232/alarm_control_panel.py b/homeassistant/components/concord232/alarm_control_panel.py index 2799481ccaa..0256f5aab37 100644 --- a/homeassistant/components/concord232/alarm_control_panel.py +++ b/homeassistant/components/concord232/alarm_control_panel.py @@ -86,6 +86,7 @@ class Concord232Alarm(AlarmControlPanelEntity): self._attr_name = name self._code = code + self._alarm_control_panel_option_default_code = code self._mode = mode self._url = url self._alarm = concord232_client.Client(self._url) From d7d7782a69e2a5b67c327c47929e5d7f62f19009 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Fri, 14 Jun 2024 10:56:26 -0500 Subject: [PATCH 22/28] Bump uiprotect to 1.7.1 (#119694) changelog: https://github.com/uilibs/uiprotect/compare/v1.6.0...v1.7.0 --- homeassistant/components/unifiprotect/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/unifiprotect/manifest.json b/homeassistant/components/unifiprotect/manifest.json index 181f87b4469..4a9822811ef 100644 --- a/homeassistant/components/unifiprotect/manifest.json +++ b/homeassistant/components/unifiprotect/manifest.json @@ -40,7 +40,7 @@ "integration_type": "hub", "iot_class": "local_push", "loggers": ["uiprotect", "unifi_discovery"], - "requirements": ["uiprotect==1.6.0", "unifi-discovery==1.1.8"], + "requirements": ["uiprotect==1.7.1", "unifi-discovery==1.1.8"], "ssdp": [ { "manufacturer": "Ubiquiti Networks", diff --git a/requirements_all.txt b/requirements_all.txt index 6ed96bfcd24..caa63055553 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2779,7 +2779,7 @@ twitchAPI==4.0.0 uasiren==0.0.1 # homeassistant.components.unifiprotect -uiprotect==1.6.0 +uiprotect==1.7.1 # homeassistant.components.landisgyr_heat_meter ultraheat-api==0.5.7 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index df58740a646..9e1e64d3393 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -2153,7 +2153,7 @@ twitchAPI==4.0.0 uasiren==0.0.1 # homeassistant.components.unifiprotect -uiprotect==1.6.0 +uiprotect==1.7.1 # homeassistant.components.landisgyr_heat_meter ultraheat-api==0.5.7 From 5ceb8537ebf0b0b2bdcab1110288ada4e4925dda Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Fri, 14 Jun 2024 13:43:40 -0500 Subject: [PATCH 23/28] Bump uiprotect to 1.7.2 (#119705) changelog: https://github.com/uilibs/uiprotect/compare/v1.7.1...v1.7.2 --- homeassistant/components/unifiprotect/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/unifiprotect/manifest.json b/homeassistant/components/unifiprotect/manifest.json index 4a9822811ef..ce512ca3f3c 100644 --- a/homeassistant/components/unifiprotect/manifest.json +++ b/homeassistant/components/unifiprotect/manifest.json @@ -40,7 +40,7 @@ "integration_type": "hub", "iot_class": "local_push", "loggers": ["uiprotect", "unifi_discovery"], - "requirements": ["uiprotect==1.7.1", "unifi-discovery==1.1.8"], + "requirements": ["uiprotect==1.7.2", "unifi-discovery==1.1.8"], "ssdp": [ { "manufacturer": "Ubiquiti Networks", diff --git a/requirements_all.txt b/requirements_all.txt index caa63055553..648986c6f21 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2779,7 +2779,7 @@ twitchAPI==4.0.0 uasiren==0.0.1 # homeassistant.components.unifiprotect -uiprotect==1.7.1 +uiprotect==1.7.2 # homeassistant.components.landisgyr_heat_meter ultraheat-api==0.5.7 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 9e1e64d3393..a924f5b5d27 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -2153,7 +2153,7 @@ twitchAPI==4.0.0 uasiren==0.0.1 # homeassistant.components.unifiprotect -uiprotect==1.7.1 +uiprotect==1.7.2 # homeassistant.components.landisgyr_heat_meter ultraheat-api==0.5.7 From dc0fc318b813795900e798053adfaecb0548a735 Mon Sep 17 00:00:00 2001 From: TheJulianJES Date: Fri, 14 Jun 2024 22:33:38 +0200 Subject: [PATCH 24/28] Bump ZHA dependencies (#119713) * Bump bellows to 0.39.1 * Bump zigpy to 0.64.1 --- homeassistant/components/zha/manifest.json | 4 ++-- requirements_all.txt | 4 ++-- requirements_test_all.txt | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/homeassistant/components/zha/manifest.json b/homeassistant/components/zha/manifest.json index 8caf296674c..12e427334e2 100644 --- a/homeassistant/components/zha/manifest.json +++ b/homeassistant/components/zha/manifest.json @@ -21,11 +21,11 @@ "universal_silabs_flasher" ], "requirements": [ - "bellows==0.39.0", + "bellows==0.39.1", "pyserial==3.5", "zha-quirks==0.0.116", "zigpy-deconz==0.23.1", - "zigpy==0.64.0", + "zigpy==0.64.1", "zigpy-xbee==0.20.1", "zigpy-zigate==0.12.0", "zigpy-znp==0.12.1", diff --git a/requirements_all.txt b/requirements_all.txt index 648986c6f21..289a4eead5d 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -547,7 +547,7 @@ beautifulsoup4==4.12.3 # beewi-smartclim==0.0.10 # homeassistant.components.zha -bellows==0.39.0 +bellows==0.39.1 # homeassistant.components.bmw_connected_drive bimmer-connected[china]==0.15.3 @@ -2981,7 +2981,7 @@ zigpy-zigate==0.12.0 zigpy-znp==0.12.1 # homeassistant.components.zha -zigpy==0.64.0 +zigpy==0.64.1 # homeassistant.components.zoneminder zm-py==0.5.4 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index a924f5b5d27..6bf487f7ef9 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -472,7 +472,7 @@ base36==0.1.1 beautifulsoup4==4.12.3 # homeassistant.components.zha -bellows==0.39.0 +bellows==0.39.1 # homeassistant.components.bmw_connected_drive bimmer-connected[china]==0.15.3 @@ -2322,7 +2322,7 @@ zigpy-zigate==0.12.0 zigpy-znp==0.12.1 # homeassistant.components.zha -zigpy==0.64.0 +zigpy==0.64.1 # homeassistant.components.zwave_js zwave-js-server-python==0.56.0 From 3a705fd66852b641806fedf92156d6fb71808023 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sat, 15 Jun 2024 14:05:18 +0200 Subject: [PATCH 25/28] Ensure UniFi Protect EA warning is not persistent (#119730) --- homeassistant/components/unifiprotect/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/unifiprotect/__init__.py b/homeassistant/components/unifiprotect/__init__.py index 00d6adf461c..05ae7936fb3 100644 --- a/homeassistant/components/unifiprotect/__init__.py +++ b/homeassistant/components/unifiprotect/__init__.py @@ -126,7 +126,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: DOMAIN, "ea_channel_warning", is_fixable=True, - is_persistent=True, + is_persistent=False, learn_more_url=EARLY_ACCESS_URL, severity=IssueSeverity.WARNING, translation_key="ea_channel_warning", From a4a831537666d40423b558c73594aca9ce39f1d2 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sat, 15 Jun 2024 14:04:42 +0200 Subject: [PATCH 26/28] Ensure workday issues are not persistent (#119732) --- homeassistant/components/workday/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/workday/__init__.py b/homeassistant/components/workday/__init__.py index f25cf41b992..60a0489ec5c 100644 --- a/homeassistant/components/workday/__init__.py +++ b/homeassistant/components/workday/__init__.py @@ -35,7 +35,7 @@ async def _async_validate_country_and_province( DOMAIN, "bad_country", is_fixable=True, - is_persistent=True, + is_persistent=False, severity=IssueSeverity.ERROR, translation_key="bad_country", translation_placeholders={"title": entry.title}, @@ -59,7 +59,7 @@ async def _async_validate_country_and_province( DOMAIN, "bad_province", is_fixable=True, - is_persistent=True, + is_persistent=False, severity=IssueSeverity.ERROR, translation_key="bad_province", translation_placeholders={ From 89ce8478de78315008dbc634edf4004e84f2a1c2 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sat, 15 Jun 2024 18:23:39 +0200 Subject: [PATCH 27/28] Bump version to 2024.6.3 --- homeassistant/const.py | 2 +- pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index 500a74140f2..cd340cd5079 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -24,7 +24,7 @@ if TYPE_CHECKING: APPLICATION_NAME: Final = "HomeAssistant" MAJOR_VERSION: Final = 2024 MINOR_VERSION: Final = 6 -PATCH_VERSION: Final = "2" +PATCH_VERSION: Final = "3" __short_version__: Final = f"{MAJOR_VERSION}.{MINOR_VERSION}" __version__: Final = f"{__short_version__}.{PATCH_VERSION}" REQUIRED_PYTHON_VER: Final[tuple[int, int, int]] = (3, 12, 0) diff --git a/pyproject.toml b/pyproject.toml index b71f80bbaf8..1ca2b5cb40e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "homeassistant" -version = "2024.6.2" +version = "2024.6.3" license = {text = "Apache-2.0"} description = "Open-source home automation platform running on Python 3." readme = "README.rst" From eba429dc54a76c3712991169394c911192f4f2b6 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Mon, 10 Jun 2024 08:08:52 +0200 Subject: [PATCH 28/28] Temporary pin CI to Python 3.12.3 (#119261) --- .github/workflows/builder.yml | 2 +- .github/workflows/ci.yaml | 4 ++-- .github/workflows/translations.yml | 2 +- .github/workflows/wheels.yml | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/builder.yml b/.github/workflows/builder.yml index b05397280c2..aeb05b1d112 100644 --- a/.github/workflows/builder.yml +++ b/.github/workflows/builder.yml @@ -10,7 +10,7 @@ on: env: BUILD_TYPE: core - DEFAULT_PYTHON: "3.12" + DEFAULT_PYTHON: "3.12.3" PIP_TIMEOUT: 60 UV_HTTP_TIMEOUT: 60 UV_SYSTEM_PYTHON: "true" diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 6cb8f8deec4..5a582586c89 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -37,8 +37,8 @@ env: UV_CACHE_VERSION: 1 MYPY_CACHE_VERSION: 8 HA_SHORT_VERSION: "2024.6" - DEFAULT_PYTHON: "3.12" - ALL_PYTHON_VERSIONS: "['3.12']" + DEFAULT_PYTHON: "3.12.3" + ALL_PYTHON_VERSIONS: "['3.12.3']" # 10.3 is the oldest supported version # - 10.3.32 is the version currently shipped with Synology (as of 17 Feb 2022) # 10.6 is the current long-term-support diff --git a/.github/workflows/translations.yml b/.github/workflows/translations.yml index f487292e79a..92c4c845e7d 100644 --- a/.github/workflows/translations.yml +++ b/.github/workflows/translations.yml @@ -10,7 +10,7 @@ on: - "**strings.json" env: - DEFAULT_PYTHON: "3.11" + DEFAULT_PYTHON: "3.12.3" jobs: upload: diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index fc169619325..13f5177bd7e 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -17,7 +17,7 @@ on: - "script/gen_requirements_all.py" env: - DEFAULT_PYTHON: "3.12" + DEFAULT_PYTHON: "3.12.3" concurrency: group: ${{ github.workflow }}-${{ github.ref_name}}