Skip to content

Commit 3d279ba

Browse files
committed
Merge main
2 parents 3038778 + fecf8ae commit 3d279ba

File tree

3 files changed

+58
-23
lines changed

3 files changed

+58
-23
lines changed

custom_components/zha_toolkit/default.py

+16-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
1+
from __future__ import annotations
2+
13
import importlib
24
import logging
35
import sys
6+
from typing import TYPE_CHECKING
7+
8+
if TYPE_CHECKING:
9+
from types import ModuleType
410

511
LOGGER = logging.getLogger(__name__)
612

@@ -27,13 +33,18 @@ async def default(app, listener, ieee, cmd, data, service, params, event_data):
2733
module_name = cmd[0]
2834
cmd = cmd[1]
2935

30-
LOGGER.debug(
31-
f"Trying to import {package_name}.{module_name} to call {cmd}"
32-
)
33-
m = importlib.import_module(f".{module_name}", package=package_name)
36+
def _reload_command_module() -> ModuleType:
37+
LOGGER.debug(
38+
f"Trying to import {package_name}.{module_name} to call {cmd}"
39+
)
40+
m = importlib.import_module(f".{module_name}", package=package_name)
3441

35-
importlib.reload(m)
42+
importlib.reload(m)
43+
return m
3644

45+
m = await listener.hass.async_add_import_executor_job(
46+
_reload_command_module
47+
)
3748
# Get handler (cmd) in loaded module.
3849
handler = getattr(m, cmd)
3950
# Call the handler

custom_components/zha_toolkit/ota.py

+29-17
Original file line numberDiff line numberDiff line change
@@ -158,28 +158,40 @@ async def download_sonoff_ota(listener, ota_dir):
158158

159159
async def download_zigpy_ota(app, listener):
160160
LOGGER.debug("Zigpy download procedure starting")
161-
for _, (ota, _) in app.ota._listeners.items():
162-
if isinstance(ota, zigpy.ota.provider.FileStore):
163-
# Skip files provider
164-
continue
165-
await ota.refresh_firmware_list()
166-
for image_key, image in ota._cache.items():
167-
url = getattr(image, "url", None)
168-
LOGGER.debug("Try getting %r, %r, %r", image_key, url, image)
169-
try:
170-
img = await app.ota.get_ota_image(
171-
image_key.manufacturer_id, image_key.image_type, model=None
172-
)
173-
LOGGER.debug("Got image %r", getattr(img, "header", None))
174-
except Exception as e:
175-
LOGGER.error("%r while getting %r - %s", e, image_key, url)
161+
if hasattr(app, "ota") and hasattr(app.ota, "_listeners"):
162+
for _, (ota, _) in app.ota._listeners.items():
163+
if isinstance(ota, zigpy.ota.provider.FileStore):
164+
# Skip files provider
165+
continue
166+
await ota.refresh_firmware_list()
167+
for image_key, image in ota._cache.items():
168+
url = getattr(image, "url", None)
169+
LOGGER.error("Try getting %r, %r, %r", image_key, url, image)
170+
try:
171+
img = await app.ota.get_ota_image(
172+
image_key.manufacturer_id,
173+
image_key.image_type,
174+
model=None,
175+
)
176+
LOGGER.info("Got image %r", getattr(img, "header", None))
177+
except Exception as e:
178+
LOGGER.error("%r while getting %r - %s", e, image_key, url)
179+
else:
180+
LOGGER.warning(
181+
"Could not get ota object for download_zigpy_ota, try again"
182+
)
176183

177184

178185
async def ota_update_images(
179186
app, listener, ieee, cmd, data, service, params, event_data
180187
):
181-
for _, (ota, _) in app.ota._listeners.items():
182-
await ota.refresh_firmware_list()
188+
if hasattr(app, "ota") and hasattr(app.ota, "_listeners"):
189+
for _, (ota, _) in app.ota._listeners.items():
190+
await ota.refresh_firmware_list()
191+
else:
192+
LOGGER.warning(
193+
"Could not get ota object for ota_update_images, try again"
194+
)
183195

184196

185197
async def ota_notify(

custom_components/zha_toolkit/utils.py

+13-1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@
3434
# pylint: disable=ungrouped-imports
3535
from homeassistant.helpers.json import save_json
3636

37+
if parse_version(HA_VERSION) >= parse_version("2024.6"):
38+
from homeassistant.helpers import device_registry as dr
39+
from homeassistant.helpers import entity_registry as er
40+
3741
if typing.TYPE_CHECKING:
3842
VERSION_TIME: float = 0.0
3943
VERSION: str = "Unknown"
@@ -286,6 +290,8 @@ async def get_ieee(app, listener, ref):
286290
else get_hass(listener).helpers.entity_registry.async_get(
287291
get_hass(listener)
288292
)
293+
if not is_ha_ge("2024.6")
294+
else er.async_get(get_hass(listener))
289295
)
290296

291297
device_registry = (
@@ -297,6 +303,8 @@ async def get_ieee(app, listener, ref):
297303
else get_hass(listener).helpers.device_registry.async_get(
298304
get_hass(listener)
299305
)
306+
if not is_ha_ge("2024.6")
307+
else dr.async_get(get_hass(listener))
300308
)
301309
registry_device = device_registry.async_get(ref)
302310

@@ -356,7 +364,11 @@ def set_state(
356364
# entity_id, key, value, stateAttrs)
357365
if key is not None:
358366
stateAttrs[key] = value
359-
value = None
367+
if stateObj is not None:
368+
# Copy existing state, to update selected item
369+
value = stateObj.state
370+
else:
371+
value = None
360372

361373
# LOGGER.debug("entity:%s key:%s value:%s attrs:%s",
362374
# entity_id, key, value, stateAttrs)

0 commit comments

Comments
 (0)