From fffece95f59d389164868201d5d5e950ef164a83 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 4 May 2023 04:50:12 -0500 Subject: [PATCH 1/8] Fix onvif setup when time set service is not functional (#92447) --- homeassistant/components/onvif/device.py | 137 ++++++++++++----------- 1 file changed, 73 insertions(+), 64 deletions(-) diff --git a/homeassistant/components/onvif/device.py b/homeassistant/components/onvif/device.py index 78e745645c5..2e0f1ca8c6f 100644 --- a/homeassistant/components/onvif/device.py +++ b/homeassistant/components/onvif/device.py @@ -12,7 +12,7 @@ from httpx import RequestError import onvif from onvif import ONVIFCamera from onvif.exceptions import ONVIFError -from zeep.exceptions import Fault, XMLParseError +from zeep.exceptions import Fault, TransportError, XMLParseError from homeassistant.config_entries import ConfigEntry from homeassistant.const import ( @@ -203,76 +203,85 @@ class ONVIFDevice: """Warns if device and system date not synced.""" LOGGER.debug("%s: Setting up the ONVIF device management service", self.name) device_mgmt = self.device.create_devicemgmt_service() + system_date = dt_util.utcnow() LOGGER.debug("%s: Retrieving current device date/time", self.name) try: - system_date = dt_util.utcnow() device_time = await device_mgmt.GetSystemDateAndTime() - if not device_time: - LOGGER.debug( - """Couldn't get device '%s' date/time. - GetSystemDateAndTime() return null/empty""", - self.name, - ) - return - - LOGGER.debug("%s: Device time: %s", self.name, device_time) - - tzone = dt_util.DEFAULT_TIME_ZONE - cdate = device_time.LocalDateTime - if device_time.UTCDateTime: - tzone = dt_util.UTC - cdate = device_time.UTCDateTime - elif device_time.TimeZone: - tzone = dt_util.get_time_zone(device_time.TimeZone.TZ) or tzone - - if cdate is None: - LOGGER.warning( - "%s: Could not retrieve date/time on this camera", self.name - ) - else: - cam_date = dt.datetime( - cdate.Date.Year, - cdate.Date.Month, - cdate.Date.Day, - cdate.Time.Hour, - cdate.Time.Minute, - cdate.Time.Second, - 0, - tzone, - ) - - cam_date_utc = cam_date.astimezone(dt_util.UTC) - - LOGGER.debug( - "%s: Device date/time: %s | System date/time: %s", - self.name, - cam_date_utc, - system_date, - ) - - dt_diff = cam_date - system_date - self._dt_diff_seconds = dt_diff.total_seconds() - - # It could be off either direction, so we need to check the absolute value - if abs(self._dt_diff_seconds) > 5: - LOGGER.warning( - ( - "The date/time on %s (UTC) is '%s', " - "which is different from the system '%s', " - "this could lead to authentication issues" - ), - self.name, - cam_date_utc, - system_date, - ) - if device_time.DateTimeType == "Manual": - # Set Date and Time ourselves if Date and Time is set manually in the camera. - await self.async_manually_set_date_and_time() except RequestError as err: LOGGER.warning( "Couldn't get device '%s' date/time. Error: %s", self.name, err ) + return + + if not device_time: + LOGGER.debug( + """Couldn't get device '%s' date/time. + GetSystemDateAndTime() return null/empty""", + self.name, + ) + return + + LOGGER.debug("%s: Device time: %s", self.name, device_time) + + tzone = dt_util.DEFAULT_TIME_ZONE + cdate = device_time.LocalDateTime + if device_time.UTCDateTime: + tzone = dt_util.UTC + cdate = device_time.UTCDateTime + elif device_time.TimeZone: + tzone = dt_util.get_time_zone(device_time.TimeZone.TZ) or tzone + + if cdate is None: + LOGGER.warning("%s: Could not retrieve date/time on this camera", self.name) + return + + cam_date = dt.datetime( + cdate.Date.Year, + cdate.Date.Month, + cdate.Date.Day, + cdate.Time.Hour, + cdate.Time.Minute, + cdate.Time.Second, + 0, + tzone, + ) + + cam_date_utc = cam_date.astimezone(dt_util.UTC) + + LOGGER.debug( + "%s: Device date/time: %s | System date/time: %s", + self.name, + cam_date_utc, + system_date, + ) + + dt_diff = cam_date - system_date + self._dt_diff_seconds = dt_diff.total_seconds() + + # It could be off either direction, so we need to check the absolute value + if abs(self._dt_diff_seconds) < 5: + return + + LOGGER.warning( + ( + "The date/time on %s (UTC) is '%s', " + "which is different from the system '%s', " + "this could lead to authentication issues" + ), + self.name, + cam_date_utc, + system_date, + ) + + if device_time.DateTimeType != "Manual": + return + + # Set Date and Time ourselves if Date and Time is set manually in the camera. + try: + await self.async_manually_set_date_and_time() + except (RequestError, TransportError): + LOGGER.warning("%s: Could not sync date/time on this camera", self.name) async def async_get_device_info(self) -> DeviceInfo: """Obtain information about this device.""" @@ -328,7 +337,7 @@ class ONVIFDevice: """Start the event handler.""" with suppress(*GET_CAPABILITIES_EXCEPTIONS, XMLParseError): onvif_capabilities = self.onvif_capabilities or {} - pull_point_support = onvif_capabilities.get("Events", {}).get( + pull_point_support = (onvif_capabilities.get("Events") or {}).get( "WSPullPointSupport" ) LOGGER.debug("%s: WSPullPointSupport: %s", self.name, pull_point_support) From 0cfa566ff631eb974b0c8a5d9e5239282e270102 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 4 May 2023 06:48:13 -0500 Subject: [PATCH 2/8] Fix onvif cameras with invalid encodings in device info (#92450) Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> --- homeassistant/components/onvif/device.py | 26 ++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/homeassistant/components/onvif/device.py b/homeassistant/components/onvif/device.py index 2e0f1ca8c6f..f93529ea612 100644 --- a/homeassistant/components/onvif/device.py +++ b/homeassistant/components/onvif/device.py @@ -12,7 +12,7 @@ from httpx import RequestError import onvif from onvif import ONVIFCamera from onvif.exceptions import ONVIFError -from zeep.exceptions import Fault, TransportError, XMLParseError +from zeep.exceptions import Fault, TransportError, XMLParseError, XMLSyntaxError from homeassistant.config_entries import ConfigEntry from homeassistant.const import ( @@ -286,7 +286,21 @@ class ONVIFDevice: async def async_get_device_info(self) -> DeviceInfo: """Obtain information about this device.""" device_mgmt = self.device.create_devicemgmt_service() - device_info = await device_mgmt.GetDeviceInformation() + manufacturer = None + model = None + firmware_version = None + serial_number = None + try: + device_info = await device_mgmt.GetDeviceInformation() + except (XMLParseError, XMLSyntaxError, TransportError) as ex: + # Some cameras have invalid UTF-8 in their device information (TransportError) + # and others have completely invalid XML (XMLParseError, XMLSyntaxError) + LOGGER.warning("%s: Failed to fetch device information: %s", self.name, ex) + else: + manufacturer = device_info.Manufacturer + model = device_info.Model + firmware_version = device_info.FirmwareVersion + serial_number = device_info.SerialNumber # Grab the last MAC address for backwards compatibility mac = None @@ -306,10 +320,10 @@ class ONVIFDevice: ) return DeviceInfo( - device_info.Manufacturer, - device_info.Model, - device_info.FirmwareVersion, - device_info.SerialNumber, + manufacturer, + model, + firmware_version, + serial_number, mac, ) From 89aec9d356b4017f6db5a7cd4069413f99eab40d Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Thu, 4 May 2023 04:21:58 -0600 Subject: [PATCH 3/8] Bump `aionotion` to 2023.05.0 (#92451) --- homeassistant/components/notion/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/notion/manifest.json b/homeassistant/components/notion/manifest.json index 7eb2ef6bba3..1c3ffc8607a 100644 --- a/homeassistant/components/notion/manifest.json +++ b/homeassistant/components/notion/manifest.json @@ -7,5 +7,5 @@ "integration_type": "hub", "iot_class": "cloud_polling", "loggers": ["aionotion"], - "requirements": ["aionotion==2023.04.2"] + "requirements": ["aionotion==2023.05.0"] } diff --git a/requirements_all.txt b/requirements_all.txt index 4b431dc87e9..e1124846d44 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -223,7 +223,7 @@ aionanoleaf==0.2.1 aionotify==0.2.0 # homeassistant.components.notion -aionotion==2023.04.2 +aionotion==2023.05.0 # homeassistant.components.oncue aiooncue==0.3.4 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 222be3a03ac..18691a914de 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -204,7 +204,7 @@ aiomusiccast==0.14.8 aionanoleaf==0.2.1 # homeassistant.components.notion -aionotion==2023.04.2 +aionotion==2023.05.0 # homeassistant.components.oncue aiooncue==0.3.4 From 3126ebe9d6488266febd1815d1ac8847066b083e Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 4 May 2023 07:55:47 -0500 Subject: [PATCH 4/8] Fix lifx light strips when color zones are not initially populated (#92487) fixes #92456 --- homeassistant/components/lifx/coordinator.py | 13 ++++-- homeassistant/components/lifx/light.py | 2 +- tests/components/lifx/test_light.py | 44 ++++++++++++++++++++ 3 files changed, 55 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/lifx/coordinator.py b/homeassistant/components/lifx/coordinator.py index 66cea18f119..f8964e78f63 100644 --- a/homeassistant/components/lifx/coordinator.py +++ b/homeassistant/components/lifx/coordinator.py @@ -205,13 +205,20 @@ class LIFXUpdateCoordinator(DataUpdateCoordinator[None]): methods, DEFAULT_ATTEMPTS, OVERALL_TIMEOUT ) + def get_number_of_zones(self) -> int: + """Return the number of zones. + + If the number of zones is not yet populated, return 0 + """ + return len(self.device.color_zones) if self.device.color_zones else 0 + @callback def _async_build_color_zones_update_requests(self) -> list[Callable]: """Build a color zones update request.""" device = self.device return [ partial(device.get_color_zones, start_index=zone) - for zone in range(0, len(device.color_zones), 8) + for zone in range(0, self.get_number_of_zones(), 8) ] async def _async_update_data(self) -> None: @@ -224,7 +231,7 @@ class LIFXUpdateCoordinator(DataUpdateCoordinator[None]): ): await self._async_populate_device_info() - num_zones = len(device.color_zones) if device.color_zones is not None else 0 + num_zones = self.get_number_of_zones() features = lifx_features(self.device) is_extended_multizone = features["extended_multizone"] is_legacy_multizone = not is_extended_multizone and features["multizone"] @@ -256,7 +263,7 @@ class LIFXUpdateCoordinator(DataUpdateCoordinator[None]): if is_extended_multizone or is_legacy_multizone: self.active_effect = FirmwareEffect[self.device.effect.get("effect", "OFF")] - if is_legacy_multizone and num_zones != len(device.color_zones): + if is_legacy_multizone and num_zones != self.get_number_of_zones(): # The number of zones has changed so we need # to update the zones again. This happens rarely. await self.async_get_color_zones() diff --git a/homeassistant/components/lifx/light.py b/homeassistant/components/lifx/light.py index dd4e50d8f16..227d279f07b 100644 --- a/homeassistant/components/lifx/light.py +++ b/homeassistant/components/lifx/light.py @@ -382,7 +382,7 @@ class LIFXMultiZone(LIFXColor): """Send a color change to the bulb.""" bulb = self.bulb color_zones = bulb.color_zones - num_zones = len(color_zones) + num_zones = self.coordinator.get_number_of_zones() # Zone brightness is not reported when powered off if not self.is_on and hsbk[HSBK_BRIGHTNESS] is None: diff --git a/tests/components/lifx/test_light.py b/tests/components/lifx/test_light.py index 42c540a74ef..fe68bd6547a 100644 --- a/tests/components/lifx/test_light.py +++ b/tests/components/lifx/test_light.py @@ -36,6 +36,7 @@ from homeassistant.components.light import ( ATTR_TRANSITION, ATTR_XY_COLOR, DOMAIN as LIGHT_DOMAIN, + SERVICE_TURN_ON, ColorMode, ) from homeassistant.const import ( @@ -1741,3 +1742,46 @@ async def test_set_hev_cycle_state_fails_for_color_bulb(hass: HomeAssistant) -> {ATTR_ENTITY_ID: entity_id, ATTR_POWER: True}, blocking=True, ) + + +async def test_light_strip_zones_not_populated_yet(hass: HomeAssistant) -> None: + """Test a light strip were zones are not populated initially.""" + already_migrated_config_entry = MockConfigEntry( + domain=DOMAIN, data={CONF_HOST: "127.0.0.1"}, unique_id=SERIAL + ) + already_migrated_config_entry.add_to_hass(hass) + bulb = _mocked_light_strip() + bulb.power_level = 65535 + bulb.color_zones = None + bulb.color = [65535, 65535, 65535, 65535] + with _patch_discovery(device=bulb), _patch_config_flow_try_connect( + device=bulb + ), _patch_device(device=bulb): + await async_setup_component(hass, lifx.DOMAIN, {lifx.DOMAIN: {}}) + await hass.async_block_till_done() + + entity_id = "light.my_bulb" + + state = hass.states.get(entity_id) + assert state.state == "on" + attributes = state.attributes + assert attributes[ATTR_BRIGHTNESS] == 255 + assert attributes[ATTR_COLOR_MODE] == ColorMode.HS + assert attributes[ATTR_SUPPORTED_COLOR_MODES] == [ + ColorMode.COLOR_TEMP, + ColorMode.HS, + ] + assert attributes[ATTR_HS_COLOR] == (360.0, 100.0) + assert attributes[ATTR_RGB_COLOR] == (255, 0, 0) + assert attributes[ATTR_XY_COLOR] == (0.701, 0.299) + + await hass.services.async_call( + LIGHT_DOMAIN, SERVICE_TURN_ON, {ATTR_ENTITY_ID: entity_id}, blocking=True + ) + assert bulb.set_power.calls[0][0][0] is True + bulb.set_power.reset_mock() + + async_fire_time_changed(hass, dt_util.utcnow() + timedelta(seconds=30)) + await hass.async_block_till_done() + state = hass.states.get(entity_id) + assert state.state == STATE_ON From a07fbdd61cc5c8efce7cc79aa636192fef39b624 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 4 May 2023 08:53:43 -0500 Subject: [PATCH 5/8] Bump bluetooth-auto-recovery 1.1.2 (#92495) Improve handling when getting the power state times out https://github.com/Bluetooth-Devices/bluetooth-auto-recovery/compare/v1.1.1...v1.1.2 --- homeassistant/components/bluetooth/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/bluetooth/manifest.json b/homeassistant/components/bluetooth/manifest.json index 84a86754ce6..fb4cc002598 100644 --- a/homeassistant/components/bluetooth/manifest.json +++ b/homeassistant/components/bluetooth/manifest.json @@ -18,7 +18,7 @@ "bleak==0.20.2", "bleak-retry-connector==3.0.2", "bluetooth-adapters==0.15.3", - "bluetooth-auto-recovery==1.1.1", + "bluetooth-auto-recovery==1.1.2", "bluetooth-data-tools==0.4.0", "dbus-fast==1.85.0" ] diff --git a/homeassistant/package_constraints.txt b/homeassistant/package_constraints.txt index 4d2419d30c3..4d861c9f39d 100644 --- a/homeassistant/package_constraints.txt +++ b/homeassistant/package_constraints.txt @@ -14,7 +14,7 @@ bcrypt==4.0.1 bleak-retry-connector==3.0.2 bleak==0.20.2 bluetooth-adapters==0.15.3 -bluetooth-auto-recovery==1.1.1 +bluetooth-auto-recovery==1.1.2 bluetooth-data-tools==0.4.0 certifi>=2021.5.30 ciso8601==2.3.0 diff --git a/requirements_all.txt b/requirements_all.txt index e1124846d44..883c055a7a8 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -465,7 +465,7 @@ bluemaestro-ble==0.2.3 bluetooth-adapters==0.15.3 # homeassistant.components.bluetooth -bluetooth-auto-recovery==1.1.1 +bluetooth-auto-recovery==1.1.2 # homeassistant.components.bluetooth # homeassistant.components.esphome diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 18691a914de..fa9d55d2992 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -385,7 +385,7 @@ bluemaestro-ble==0.2.3 bluetooth-adapters==0.15.3 # homeassistant.components.bluetooth -bluetooth-auto-recovery==1.1.1 +bluetooth-auto-recovery==1.1.2 # homeassistant.components.bluetooth # homeassistant.components.esphome From 4b4464a3deae5664e7649d74ae6e2a62da5b08f6 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Thu, 4 May 2023 15:53:28 +0200 Subject: [PATCH 6/8] Force migration of cloud settings to exposed_entities (#92499) --- homeassistant/components/cloud/alexa_config.py | 9 --------- homeassistant/components/cloud/google_config.py | 9 --------- tests/components/cloud/test_alexa_config.py | 2 +- tests/components/cloud/test_google_config.py | 2 +- 4 files changed, 2 insertions(+), 20 deletions(-) diff --git a/homeassistant/components/cloud/alexa_config.py b/homeassistant/components/cloud/alexa_config.py index bfdd2e560a5..4ba32c338b5 100644 --- a/homeassistant/components/cloud/alexa_config.py +++ b/homeassistant/components/cloud/alexa_config.py @@ -24,7 +24,6 @@ from homeassistant.components.binary_sensor import BinarySensorDeviceClass from homeassistant.components.homeassistant.exposed_entities import ( async_expose_entity, async_get_assistant_settings, - async_get_entity_settings, async_listen_entity_updates, async_should_expose, ) @@ -201,10 +200,6 @@ class CloudAlexaConfig(alexa_config.AbstractConfig): return for state in self.hass.states.async_all(): - with suppress(HomeAssistantError): - entity_settings = async_get_entity_settings(self.hass, state.entity_id) - if CLOUD_ALEXA in entity_settings: - continue async_expose_entity( self.hass, CLOUD_ALEXA, @@ -212,10 +207,6 @@ class CloudAlexaConfig(alexa_config.AbstractConfig): self._should_expose_legacy(state.entity_id), ) for entity_id in self._prefs.alexa_entity_configs: - with suppress(HomeAssistantError): - entity_settings = async_get_entity_settings(self.hass, entity_id) - if CLOUD_ALEXA in entity_settings: - continue async_expose_entity( self.hass, CLOUD_ALEXA, diff --git a/homeassistant/components/cloud/google_config.py b/homeassistant/components/cloud/google_config.py index dae1c00a33f..16848acc19d 100644 --- a/homeassistant/components/cloud/google_config.py +++ b/homeassistant/components/cloud/google_config.py @@ -1,6 +1,5 @@ """Google config for Cloud.""" import asyncio -from contextlib import suppress from http import HTTPStatus import logging from typing import Any @@ -178,10 +177,6 @@ class CloudGoogleConfig(AbstractConfig): for state in self.hass.states.async_all(): entity_id = state.entity_id - with suppress(HomeAssistantError): - entity_settings = async_get_entity_settings(self.hass, entity_id) - if CLOUD_GOOGLE in entity_settings: - continue async_expose_entity( self.hass, CLOUD_GOOGLE, @@ -197,10 +192,6 @@ class CloudGoogleConfig(AbstractConfig): _2fa_disabled, ) for entity_id in self._prefs.google_entity_configs: - with suppress(HomeAssistantError): - entity_settings = async_get_entity_settings(self.hass, entity_id) - if CLOUD_GOOGLE in entity_settings: - continue async_expose_entity( self.hass, CLOUD_GOOGLE, diff --git a/tests/components/cloud/test_alexa_config.py b/tests/components/cloud/test_alexa_config.py index 2a4be7e1645..3a7e5a0874e 100644 --- a/tests/components/cloud/test_alexa_config.py +++ b/tests/components/cloud/test_alexa_config.py @@ -628,7 +628,7 @@ async def test_alexa_config_migrate_expose_entity_prefs( "cloud.alexa": {"should_expose": True} } assert async_get_entity_settings(hass, entity_migrated.entity_id) == { - "cloud.alexa": {"should_expose": False} + "cloud.alexa": {"should_expose": True} } assert async_get_entity_settings(hass, entity_config.entity_id) == { "cloud.alexa": {"should_expose": False} diff --git a/tests/components/cloud/test_google_config.py b/tests/components/cloud/test_google_config.py index 0fa37ed9987..45bc56a1700 100644 --- a/tests/components/cloud/test_google_config.py +++ b/tests/components/cloud/test_google_config.py @@ -580,7 +580,7 @@ async def test_google_config_migrate_expose_entity_prefs( "cloud.google_assistant": {"should_expose": True} } assert async_get_entity_settings(hass, entity_migrated.entity_id) == { - "cloud.google_assistant": {"should_expose": False} + "cloud.google_assistant": {"should_expose": True} } assert async_get_entity_settings(hass, entity_no_2fa_exposed.entity_id) == { "cloud.google_assistant": {"disable_2fa": True, "should_expose": True} From 238c87055fe70c9ff94d8b4295e951c0d0365373 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Thu, 4 May 2023 16:22:48 +0200 Subject: [PATCH 7/8] Update frontend to 20230503.2 (#92508) --- 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 6489b150e79..41b363b6388 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==20230503.1"] + "requirements": ["home-assistant-frontend==20230503.2"] } diff --git a/homeassistant/package_constraints.txt b/homeassistant/package_constraints.txt index 4d861c9f39d..63b89bbe5de 100644 --- a/homeassistant/package_constraints.txt +++ b/homeassistant/package_constraints.txt @@ -25,7 +25,7 @@ ha-av==10.0.0 hass-nabucasa==0.66.2 hassil==1.0.6 home-assistant-bluetooth==1.10.0 -home-assistant-frontend==20230503.1 +home-assistant-frontend==20230503.2 home-assistant-intents==2023.4.26 httpx==0.24.0 ifaddr==0.1.7 diff --git a/requirements_all.txt b/requirements_all.txt index 883c055a7a8..2cdf860f642 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -911,7 +911,7 @@ hole==0.8.0 holidays==0.21.13 # homeassistant.components.frontend -home-assistant-frontend==20230503.1 +home-assistant-frontend==20230503.2 # homeassistant.components.conversation home-assistant-intents==2023.4.26 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index fa9d55d2992..048f57d1f3d 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -700,7 +700,7 @@ hole==0.8.0 holidays==0.21.13 # homeassistant.components.frontend -home-assistant-frontend==20230503.1 +home-assistant-frontend==20230503.2 # homeassistant.components.conversation home-assistant-intents==2023.4.26 From eda0731e605b2c27c84cc0f8c6cd6d068e3534c4 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 4 May 2023 10:23:58 -0400 Subject: [PATCH 8/8] Bumped version to 2023.5.1 --- 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 3eb31a1af78..badec5be56f 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -8,7 +8,7 @@ from .backports.enum import StrEnum APPLICATION_NAME: Final = "HomeAssistant" MAJOR_VERSION: Final = 2023 MINOR_VERSION: Final = 5 -PATCH_VERSION: Final = "0" +PATCH_VERSION: Final = "1" __short_version__: Final = f"{MAJOR_VERSION}.{MINOR_VERSION}" __version__: Final = f"{__short_version__}.{PATCH_VERSION}" REQUIRED_PYTHON_VER: Final[tuple[int, int, int]] = (3, 10, 0) diff --git a/pyproject.toml b/pyproject.toml index ae07e6d7672..d3c150305bd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "homeassistant" -version = "2023.5.0" +version = "2023.5.1" license = {text = "Apache-2.0"} description = "Open-source home automation platform running on Python 3." readme = "README.rst"