homeassistant 2025.10.0b5__py3-none-any.whl → 2025.10.0b6__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of homeassistant might be problematic. Click here for more details.
- homeassistant/brands/eltako.json +5 -0
- homeassistant/brands/konnected.json +5 -0
- homeassistant/brands/level.json +5 -0
- homeassistant/components/accuweather/translations/id.json +9 -0
- homeassistant/components/airos/translations/id.json +36 -0
- homeassistant/components/aladdin_connect/config_flow.py +11 -0
- homeassistant/components/aladdin_connect/strings.json +2 -1
- homeassistant/components/aladdin_connect/translations/cs.json +1 -0
- homeassistant/components/aladdin_connect/translations/de.json +1 -0
- homeassistant/components/aladdin_connect/translations/en-GB.json +1 -0
- homeassistant/components/aladdin_connect/translations/en.json +1 -0
- homeassistant/components/aladdin_connect/translations/es.json +1 -0
- homeassistant/components/aladdin_connect/translations/et.json +1 -0
- homeassistant/components/aladdin_connect/translations/id.json +28 -1
- homeassistant/components/aladdin_connect/translations/lt.json +1 -0
- homeassistant/components/aladdin_connect/translations/pt.json +1 -0
- homeassistant/components/alexa_devices/translations/id.json +12 -0
- homeassistant/components/analytics/analytics.py +23 -12
- homeassistant/components/androidtv_remote/translations/id.json +7 -1
- homeassistant/components/anthropic/translations/id.json +2 -1
- homeassistant/components/aosmith/translations/id.json +9 -0
- homeassistant/components/apcupsd/translations/id.json +6 -0
- homeassistant/components/august/translations/id.json +25 -1
- homeassistant/components/bayesian/binary_sensor.py +7 -0
- homeassistant/components/bayesian/translations/id.json +62 -0
- homeassistant/components/broadlink/translations/zh-Hant.json +1 -1
- homeassistant/components/brother/translations/id.json +21 -0
- homeassistant/components/bsblan/translations/id.json +17 -2
- homeassistant/components/coinbase/translations/id.json +5 -0
- homeassistant/components/compit/translations/id.json +25 -0
- homeassistant/components/cync/translations/id.json +20 -0
- homeassistant/components/datadog/translations/id.json +28 -0
- homeassistant/components/droplet/translations/id.json +17 -0
- homeassistant/components/ecobee/strings.json +2 -2
- homeassistant/components/ecobee/translations/cs.json +2 -2
- homeassistant/components/ecobee/translations/de.json +3 -3
- homeassistant/components/ecobee/translations/el.json +1 -2
- homeassistant/components/ecobee/translations/en-GB.json +2 -2
- homeassistant/components/ecobee/translations/en.json +2 -2
- homeassistant/components/ecobee/translations/es.json +2 -2
- homeassistant/components/ecobee/translations/et.json +2 -2
- homeassistant/components/ecobee/translations/ga.json +1 -5
- homeassistant/components/ecobee/translations/hu.json +1 -5
- homeassistant/components/ecobee/translations/it.json +1 -5
- homeassistant/components/ecobee/translations/ja.json +1 -5
- homeassistant/components/ecobee/translations/lt.json +2 -2
- homeassistant/components/ecobee/translations/pt.json +2 -2
- homeassistant/components/ecobee/translations/ru.json +1 -5
- homeassistant/components/ecobee/translations/sk.json +1 -5
- homeassistant/components/ecobee/translations/sv.json +1 -5
- homeassistant/components/ecobee/translations/tr.json +1 -5
- homeassistant/components/ecobee/translations/zh-Hans.json +1 -5
- homeassistant/components/ecobee/translations/zh-Hant.json +1 -5
- homeassistant/components/ecowitt/manifest.json +1 -1
- homeassistant/components/eheimdigital/translations/id.json +7 -1
- homeassistant/components/ekeybionyx/translations/id.json +24 -0
- homeassistant/components/ekeybionyx/translations/lt.json +1 -0
- homeassistant/components/elevenlabs/translations/id.json +2 -1
- homeassistant/components/elkm1/translations/id.json +6 -0
- homeassistant/components/emoncms/translations/id.json +9 -0
- homeassistant/components/enphase_envoy/translations/id.json +1 -0
- homeassistant/components/esphome/analytics.py +11 -0
- homeassistant/components/fan/translations/id.json +3 -0
- homeassistant/components/flick_electric/translations/zh-Hant.json +2 -2
- homeassistant/components/frontend/manifest.json +1 -1
- homeassistant/components/google_generative_ai_conversation/translations/id.json +29 -1
- homeassistant/components/hassio/translations/id.json +29 -0
- homeassistant/components/holiday/translations/zh-Hant.json +2 -2
- homeassistant/components/homeassistant/translations/id.json +8 -0
- homeassistant/components/homeassistant_connect_zbt2/config_flow.py +6 -0
- homeassistant/components/homeassistant_connect_zbt2/translations/fr.json +14 -0
- homeassistant/components/homeassistant_connect_zbt2/translations/id.json +238 -0
- homeassistant/components/homeassistant_connect_zbt2/translations/lt.json +24 -8
- homeassistant/components/homeassistant_connect_zbt2/translations/ru.json +22 -4
- homeassistant/components/homeassistant_connect_zbt2/update.py +2 -1
- homeassistant/components/homeassistant_hardware/firmware_config_flow.py +13 -67
- homeassistant/components/homeassistant_hardware/manifest.json +1 -1
- homeassistant/components/homeassistant_hardware/translations/fr.json +10 -0
- homeassistant/components/homeassistant_hardware/translations/id.json +58 -0
- homeassistant/components/homeassistant_hardware/translations/lt.json +17 -0
- homeassistant/components/homeassistant_hardware/translations/ru.json +17 -0
- homeassistant/components/homeassistant_hardware/update.py +8 -3
- homeassistant/components/homeassistant_hardware/util.py +22 -5
- homeassistant/components/homeassistant_sky_connect/translations/fr.json +14 -0
- homeassistant/components/homeassistant_sky_connect/translations/id.json +98 -14
- homeassistant/components/homeassistant_sky_connect/translations/lt.json +24 -8
- homeassistant/components/homeassistant_sky_connect/translations/ru.json +24 -8
- homeassistant/components/homeassistant_sky_connect/update.py +2 -1
- homeassistant/components/homeassistant_yellow/config_flow.py +7 -1
- homeassistant/components/homeassistant_yellow/translations/fr.json +7 -0
- homeassistant/components/homeassistant_yellow/translations/id.json +50 -7
- homeassistant/components/homeassistant_yellow/translations/lt.json +12 -4
- homeassistant/components/homeassistant_yellow/translations/ru.json +6 -4
- homeassistant/components/homeassistant_yellow/update.py +2 -1
- homeassistant/components/homee/translations/id.json +14 -0
- homeassistant/components/husqvarna_automower/translations/id.json +18 -0
- homeassistant/components/husqvarna_automower_ble/translations/id.json +4 -0
- homeassistant/components/icloud/translations/id.json +3 -0
- homeassistant/components/imeon_inverter/translations/id.json +10 -0
- homeassistant/components/irm_kmi/translations/id.json +28 -0
- homeassistant/components/keenetic_ndms2/translations/id.json +2 -1
- homeassistant/components/knx/translations/id.json +3 -0
- homeassistant/components/konnected/translations/lt.json +6 -0
- homeassistant/components/konnected_esphome/__init__.py +1 -0
- homeassistant/components/konnected_esphome/manifest.json +6 -0
- homeassistant/components/letpot/number.py +2 -1
- homeassistant/components/letpot/strings.json +1 -2
- homeassistant/components/letpot/translations/bg.json +0 -5
- homeassistant/components/letpot/translations/cs.json +1 -2
- homeassistant/components/letpot/translations/de.json +1 -2
- homeassistant/components/letpot/translations/en-GB.json +1 -2
- homeassistant/components/letpot/translations/en.json +1 -2
- homeassistant/components/letpot/translations/es.json +1 -2
- homeassistant/components/letpot/translations/et.json +1 -2
- homeassistant/components/letpot/translations/fr.json +1 -2
- homeassistant/components/letpot/translations/ga.json +1 -2
- homeassistant/components/letpot/translations/id.json +10 -0
- homeassistant/components/letpot/translations/lt.json +1 -2
- homeassistant/components/letpot/translations/nl.json +0 -5
- homeassistant/components/letpot/translations/pt.json +1 -2
- homeassistant/components/letpot/translations/sk.json +1 -2
- homeassistant/components/letpot/translations/zh-Hans.json +1 -2
- homeassistant/components/letpot/translations/zh-Hant.json +1 -2
- homeassistant/components/lg_thinq/translations/id.json +5 -2
- homeassistant/components/libre_hardware_monitor/translations/id.json +19 -0
- homeassistant/components/lifx/translations/zh-Hant.json +1 -1
- homeassistant/components/light/translations/id.json +2 -1
- homeassistant/components/litterrobot/translations/id.json +15 -0
- homeassistant/components/mcp/translations/fr.json +20 -1
- homeassistant/components/mcp/translations/id.json +8 -1
- homeassistant/components/media_extractor/manifest.json +1 -1
- homeassistant/components/mqtt/translations/fr.json +2 -0
- homeassistant/components/mqtt/translations/id.json +6 -0
- homeassistant/components/mqtt/translations/lt.json +2 -0
- homeassistant/components/mqtt/translations/nl.json +9 -0
- homeassistant/components/mqtt/translations/ru.json +2 -0
- homeassistant/components/nasweb/translations/id.json +10 -0
- homeassistant/components/nederlandse_spoorwegen/translations/id.json +28 -0
- homeassistant/components/nightscout/translations/zh-Hant.json +1 -1
- homeassistant/components/niko_home_control/translations/id.json +7 -1
- homeassistant/components/ntfy/translations/id.json +11 -0
- homeassistant/components/ntfy/translations/zh-Hant.json +1 -1
- homeassistant/components/number/translations/fr.json +3 -0
- homeassistant/components/number/translations/lt.json +3 -0
- homeassistant/components/number/translations/ru.json +3 -0
- homeassistant/components/ollama/translations/id.json +18 -1
- homeassistant/components/open_router/translations/id.json +40 -0
- homeassistant/components/openai_conversation/translations/id.json +26 -1
- homeassistant/components/opower/translations/id.json +6 -0
- homeassistant/components/overkiz/translations/id.json +1 -0
- homeassistant/components/peco/translations/zh-Hant.json +1 -1
- homeassistant/components/pi_hole/__init__.py +9 -3
- homeassistant/components/playstation_network/translations/id.json +8 -0
- homeassistant/components/plex/translations/zh-Hant.json +1 -1
- homeassistant/components/pooldose/translations/id.json +49 -0
- homeassistant/components/portainer/__init__.py +5 -0
- homeassistant/components/portainer/translations/id.json +22 -0
- homeassistant/components/portainer/translations/ru.json +15 -0
- homeassistant/components/pyload/translations/id.json +6 -0
- homeassistant/components/qbittorrent/translations/cs.json +4 -4
- homeassistant/components/random/translations/fr.json +1 -0
- homeassistant/components/random/translations/lt.json +1 -0
- homeassistant/components/random/translations/ru.json +1 -0
- homeassistant/components/remote/translations/id.json +3 -0
- homeassistant/components/remote_calendar/translations/id.json +2 -1
- homeassistant/components/reolink/translations/es.json +4 -4
- homeassistant/components/roomba/translations/bg.json +1 -2
- homeassistant/components/roomba/translations/ca.json +2 -4
- homeassistant/components/roomba/translations/el.json +2 -4
- homeassistant/components/roomba/translations/en-GB.json +2 -2
- homeassistant/components/roomba/translations/en.json +2 -2
- homeassistant/components/roomba/translations/fi.json +2 -4
- homeassistant/components/roomba/translations/fr.json +2 -4
- homeassistant/components/roomba/translations/ga.json +2 -4
- homeassistant/components/roomba/translations/he.json +1 -5
- homeassistant/components/roomba/translations/hu.json +2 -4
- homeassistant/components/roomba/translations/id.json +2 -4
- homeassistant/components/roomba/translations/it.json +2 -4
- homeassistant/components/roomba/translations/ja.json +2 -4
- homeassistant/components/roomba/translations/ko.json +2 -4
- homeassistant/components/roomba/translations/lb.json +1 -5
- homeassistant/components/roomba/translations/lt.json +2 -2
- homeassistant/components/roomba/translations/nb.json +1 -5
- homeassistant/components/roomba/translations/nl.json +2 -4
- homeassistant/components/roomba/translations/pl.json +1 -5
- homeassistant/components/roomba/translations/pt-BR.json +1 -5
- homeassistant/components/roomba/translations/pt.json +2 -2
- homeassistant/components/roomba/translations/ro.json +1 -5
- homeassistant/components/roomba/translations/ru.json +2 -4
- homeassistant/components/roomba/translations/sk.json +2 -4
- homeassistant/components/roomba/translations/sv.json +2 -4
- homeassistant/components/roomba/translations/tr.json +2 -4
- homeassistant/components/roomba/translations/uk.json +1 -5
- homeassistant/components/roomba/translations/zh-Hans.json +2 -4
- homeassistant/components/roomba/translations/zh-Hant.json +2 -4
- homeassistant/components/route_b_smart_meter/translations/id.json +24 -0
- homeassistant/components/satel_integra/translations/id.json +85 -0
- homeassistant/components/scrape/translations/fr.json +2 -0
- homeassistant/components/scrape/translations/lt.json +2 -0
- homeassistant/components/scrape/translations/ru.json +2 -0
- homeassistant/components/sensor/translations/fr.json +3 -0
- homeassistant/components/sensor/translations/lt.json +3 -0
- homeassistant/components/sensor/translations/nl.json +3 -0
- homeassistant/components/sensor/translations/pl.json +3 -0
- homeassistant/components/sensor/translations/ru.json +3 -0
- homeassistant/components/sftp_storage/translations/id.json +14 -0
- homeassistant/components/shelly/translations/id.json +19 -0
- homeassistant/components/sleep_as_android/translations/id.json +31 -0
- homeassistant/components/sleepiq/translations/id.json +5 -0
- homeassistant/components/smartthings/translations/id.json +7 -0
- homeassistant/components/sonos/select.py +9 -13
- homeassistant/components/sonos/speaker.py +23 -0
- homeassistant/components/sonos/translations/id.json +10 -0
- homeassistant/components/sql/translations/fr.json +1 -0
- homeassistant/components/sql/translations/lt.json +1 -0
- homeassistant/components/sql/translations/ru.json +1 -0
- homeassistant/components/sql/translations/zh-Hant.json +4 -4
- homeassistant/components/switch/translations/id.json +3 -0
- homeassistant/components/switchbot/translations/id.json +12 -0
- homeassistant/components/switchbot_cloud/cover.py +3 -5
- homeassistant/components/switchbot_cloud/entity.py +1 -1
- homeassistant/components/switchbot_cloud/translations/id.json +27 -0
- homeassistant/components/telegram_bot/translations/id.json +5 -0
- homeassistant/components/template/translations/fr.json +1 -0
- homeassistant/components/template/translations/id.json +81 -0
- homeassistant/components/template/translations/lt.json +1 -0
- homeassistant/components/template/translations/ru.json +1 -0
- homeassistant/components/teslemetry/translations/id.json +33 -0
- homeassistant/components/togrill/translations/id.json +16 -0
- homeassistant/components/tolo/translations/id.json +2 -1
- homeassistant/components/traccar_server/translations/id.json +9 -1
- homeassistant/components/trafikverket_train/translations/zh-Hant.json +1 -1
- homeassistant/components/tuya/translations/id.json +32 -0
- homeassistant/components/unifiprotect/translations/id.json +3 -0
- homeassistant/components/update/translations/id.json +3 -0
- homeassistant/components/uptime_kuma/translations/id.json +40 -0
- homeassistant/components/uptimerobot/translations/id.json +6 -0
- homeassistant/components/vegehub/translations/id.json +4 -0
- homeassistant/components/victron_remote_monitoring/translations/id.json +25 -0
- homeassistant/components/volvo/translations/id.json +58 -0
- homeassistant/components/whirlpool/translations/id.json +1 -0
- homeassistant/components/wled/analytics.py +11 -0
- homeassistant/components/xiaomi_aqara/translations/zh-Hant.json +2 -2
- homeassistant/components/yolink/translations/id.json +9 -0
- homeassistant/components/zha/config_flow.py +3 -1
- homeassistant/components/zha/strings.json +16 -16
- homeassistant/components/zha/translations/lt.json +18 -1
- homeassistant/components/zha/translations/nl.json +6 -0
- homeassistant/components/zha/translations/pl.json +24 -5
- homeassistant/components/zha/translations/ru.json +3 -0
- homeassistant/const.py +1 -1
- homeassistant/generated/integrations.json +27 -4
- homeassistant/package_constraints.txt +1 -1
- {homeassistant-2025.10.0b5.dist-info → homeassistant-2025.10.0b6.dist-info}/METADATA +1 -1
- {homeassistant-2025.10.0b5.dist-info → homeassistant-2025.10.0b6.dist-info}/RECORD +260 -232
- {homeassistant-2025.10.0b5.dist-info → homeassistant-2025.10.0b6.dist-info}/WHEEL +0 -0
- {homeassistant-2025.10.0b5.dist-info → homeassistant-2025.10.0b6.dist-info}/entry_points.txt +0 -0
- {homeassistant-2025.10.0b5.dist-info → homeassistant-2025.10.0b6.dist-info}/licenses/LICENSE.md +0 -0
- {homeassistant-2025.10.0b5.dist-info → homeassistant-2025.10.0b6.dist-info}/licenses/homeassistant/backports/LICENSE.Python +0 -0
- {homeassistant-2025.10.0b5.dist-info → homeassistant-2025.10.0b6.dist-info}/top_level.txt +0 -0
|
@@ -16,6 +16,7 @@ from homeassistant.components.homeassistant_hardware.update import (
|
|
|
16
16
|
from homeassistant.components.homeassistant_hardware.util import (
|
|
17
17
|
ApplicationType,
|
|
18
18
|
FirmwareInfo,
|
|
19
|
+
ResetTarget,
|
|
19
20
|
)
|
|
20
21
|
from homeassistant.components.update import UpdateDeviceClass
|
|
21
22
|
from homeassistant.config_entries import ConfigEntry
|
|
@@ -156,7 +157,7 @@ async def async_setup_entry(
|
|
|
156
157
|
class FirmwareUpdateEntity(BaseFirmwareUpdateEntity):
|
|
157
158
|
"""Connect ZBT-2 firmware update entity."""
|
|
158
159
|
|
|
159
|
-
|
|
160
|
+
bootloader_reset_methods = [ResetTarget.RTS_DTR, ResetTarget.BAUDRATE]
|
|
160
161
|
|
|
161
162
|
def __init__(
|
|
162
163
|
self,
|
|
@@ -39,6 +39,7 @@ from .util import (
|
|
|
39
39
|
FirmwareInfo,
|
|
40
40
|
OwningAddon,
|
|
41
41
|
OwningIntegration,
|
|
42
|
+
ResetTarget,
|
|
42
43
|
async_flash_silabs_firmware,
|
|
43
44
|
get_otbr_addon_manager,
|
|
44
45
|
guess_firmware_info,
|
|
@@ -79,6 +80,8 @@ class BaseFirmwareInstallFlow(ConfigEntryBaseFlow, ABC):
|
|
|
79
80
|
"""Base flow to install firmware."""
|
|
80
81
|
|
|
81
82
|
ZIGBEE_BAUDRATE = 115200 # Default, subclasses may override
|
|
83
|
+
BOOTLOADER_RESET_METHODS: list[ResetTarget] = [] # Default, subclasses may override
|
|
84
|
+
|
|
82
85
|
_picked_firmware_type: PickedFirmwareType
|
|
83
86
|
_zigbee_flow_strategy: ZigbeeFlowStrategy = ZigbeeFlowStrategy.RECOMMENDED
|
|
84
87
|
|
|
@@ -155,34 +158,6 @@ class BaseFirmwareInstallFlow(ConfigEntryBaseFlow, ABC):
|
|
|
155
158
|
description_placeholders=self._get_translation_placeholders(),
|
|
156
159
|
)
|
|
157
160
|
|
|
158
|
-
async def _probe_firmware_info(
|
|
159
|
-
self,
|
|
160
|
-
probe_methods: tuple[ApplicationType, ...] = (
|
|
161
|
-
# We probe in order of frequency: Zigbee, Thread, then multi-PAN
|
|
162
|
-
ApplicationType.GECKO_BOOTLOADER,
|
|
163
|
-
ApplicationType.EZSP,
|
|
164
|
-
ApplicationType.SPINEL,
|
|
165
|
-
ApplicationType.CPC,
|
|
166
|
-
),
|
|
167
|
-
) -> bool:
|
|
168
|
-
"""Probe the firmware currently on the device."""
|
|
169
|
-
assert self._device is not None
|
|
170
|
-
|
|
171
|
-
self._probed_firmware_info = await probe_silabs_firmware_info(
|
|
172
|
-
self._device,
|
|
173
|
-
probe_methods=probe_methods,
|
|
174
|
-
)
|
|
175
|
-
|
|
176
|
-
return (
|
|
177
|
-
self._probed_firmware_info is not None
|
|
178
|
-
and self._probed_firmware_info.firmware_type
|
|
179
|
-
in (
|
|
180
|
-
ApplicationType.EZSP,
|
|
181
|
-
ApplicationType.SPINEL,
|
|
182
|
-
ApplicationType.CPC,
|
|
183
|
-
)
|
|
184
|
-
)
|
|
185
|
-
|
|
186
161
|
async def _install_firmware_step(
|
|
187
162
|
self,
|
|
188
163
|
fw_update_url: str,
|
|
@@ -236,12 +211,6 @@ class BaseFirmwareInstallFlow(ConfigEntryBaseFlow, ABC):
|
|
|
236
211
|
expected_installed_firmware_type: ApplicationType,
|
|
237
212
|
) -> None:
|
|
238
213
|
"""Install firmware."""
|
|
239
|
-
if not await self._probe_firmware_info():
|
|
240
|
-
raise AbortFlow(
|
|
241
|
-
reason="unsupported_firmware",
|
|
242
|
-
description_placeholders=self._get_translation_placeholders(),
|
|
243
|
-
)
|
|
244
|
-
|
|
245
214
|
assert self._device is not None
|
|
246
215
|
|
|
247
216
|
# Keep track of the firmware we're working with, for error messages
|
|
@@ -250,6 +219,8 @@ class BaseFirmwareInstallFlow(ConfigEntryBaseFlow, ABC):
|
|
|
250
219
|
# Installing new firmware is only truly required if the wrong type is
|
|
251
220
|
# installed: upgrading to the latest release of the current firmware type
|
|
252
221
|
# isn't strictly necessary for functionality.
|
|
222
|
+
self._probed_firmware_info = await probe_silabs_firmware_info(self._device)
|
|
223
|
+
|
|
253
224
|
firmware_install_required = self._probed_firmware_info is None or (
|
|
254
225
|
self._probed_firmware_info.firmware_type != expected_installed_firmware_type
|
|
255
226
|
)
|
|
@@ -301,12 +272,12 @@ class BaseFirmwareInstallFlow(ConfigEntryBaseFlow, ABC):
|
|
|
301
272
|
# Otherwise, fail
|
|
302
273
|
raise AbortFlow(reason="firmware_download_failed") from err
|
|
303
274
|
|
|
304
|
-
await async_flash_silabs_firmware(
|
|
275
|
+
self._probed_firmware_info = await async_flash_silabs_firmware(
|
|
305
276
|
hass=self.hass,
|
|
306
277
|
device=self._device,
|
|
307
278
|
fw_data=fw_data,
|
|
308
279
|
expected_installed_firmware_type=expected_installed_firmware_type,
|
|
309
|
-
|
|
280
|
+
bootloader_reset_methods=self.BOOTLOADER_RESET_METHODS,
|
|
310
281
|
progress_callback=lambda offset, total: self.async_update_progress(
|
|
311
282
|
offset / total
|
|
312
283
|
),
|
|
@@ -314,15 +285,6 @@ class BaseFirmwareInstallFlow(ConfigEntryBaseFlow, ABC):
|
|
|
314
285
|
|
|
315
286
|
async def _configure_and_start_otbr_addon(self) -> None:
|
|
316
287
|
"""Configure and start the OTBR addon."""
|
|
317
|
-
|
|
318
|
-
# Before we start the addon, confirm that the correct firmware is running
|
|
319
|
-
# and populate `self._probed_firmware_info` with the correct information
|
|
320
|
-
if not await self._probe_firmware_info(probe_methods=(ApplicationType.SPINEL,)):
|
|
321
|
-
raise AbortFlow(
|
|
322
|
-
"unsupported_firmware",
|
|
323
|
-
description_placeholders=self._get_translation_placeholders(),
|
|
324
|
-
)
|
|
325
|
-
|
|
326
288
|
otbr_manager = get_otbr_addon_manager(self.hass)
|
|
327
289
|
addon_info = await self._async_get_addon_info(otbr_manager)
|
|
328
290
|
|
|
@@ -444,12 +406,12 @@ class BaseFirmwareInstallFlow(ConfigEntryBaseFlow, ABC):
|
|
|
444
406
|
if self._picked_firmware_type == PickedFirmwareType.ZIGBEE:
|
|
445
407
|
return await self.async_step_install_zigbee_firmware()
|
|
446
408
|
|
|
447
|
-
return await self.
|
|
409
|
+
return await self.async_step_install_thread_firmware()
|
|
448
410
|
|
|
449
|
-
async def
|
|
411
|
+
async def async_step_finish_thread_installation(
|
|
450
412
|
self, user_input: dict[str, Any] | None = None
|
|
451
413
|
) -> ConfigFlowResult:
|
|
452
|
-
"""
|
|
414
|
+
"""Finish Thread installation by starting the OTBR addon."""
|
|
453
415
|
if not is_hassio(self.hass):
|
|
454
416
|
return self.async_abort(
|
|
455
417
|
reason="not_hassio_thread",
|
|
@@ -459,22 +421,12 @@ class BaseFirmwareInstallFlow(ConfigEntryBaseFlow, ABC):
|
|
|
459
421
|
otbr_manager = get_otbr_addon_manager(self.hass)
|
|
460
422
|
addon_info = await self._async_get_addon_info(otbr_manager)
|
|
461
423
|
|
|
462
|
-
if addon_info.state == AddonState.RUNNING:
|
|
463
|
-
# Stop the addon before continuing to flash firmware
|
|
464
|
-
await otbr_manager.async_stop_addon()
|
|
465
|
-
|
|
466
|
-
return await self.async_step_install_thread_firmware()
|
|
467
|
-
|
|
468
|
-
async def async_step_finish_thread_installation(
|
|
469
|
-
self, user_input: dict[str, Any] | None = None
|
|
470
|
-
) -> ConfigFlowResult:
|
|
471
|
-
"""Finish Thread installation by starting the OTBR addon."""
|
|
472
|
-
otbr_manager = get_otbr_addon_manager(self.hass)
|
|
473
|
-
addon_info = await self._async_get_addon_info(otbr_manager)
|
|
474
|
-
|
|
475
424
|
if addon_info.state == AddonState.NOT_INSTALLED:
|
|
476
425
|
return await self.async_step_install_otbr_addon()
|
|
477
426
|
|
|
427
|
+
if addon_info.state == AddonState.RUNNING:
|
|
428
|
+
await otbr_manager.async_stop_addon()
|
|
429
|
+
|
|
478
430
|
return await self.async_step_start_otbr_addon()
|
|
479
431
|
|
|
480
432
|
async def async_step_pick_firmware_zigbee(
|
|
@@ -511,12 +463,6 @@ class BaseFirmwareInstallFlow(ConfigEntryBaseFlow, ABC):
|
|
|
511
463
|
assert self._device is not None
|
|
512
464
|
assert self._hardware_name is not None
|
|
513
465
|
|
|
514
|
-
if not await self._probe_firmware_info(probe_methods=(ApplicationType.EZSP,)):
|
|
515
|
-
return self.async_abort(
|
|
516
|
-
reason="unsupported_firmware",
|
|
517
|
-
description_placeholders=self._get_translation_placeholders(),
|
|
518
|
-
)
|
|
519
|
-
|
|
520
466
|
if self._zigbee_integration == ZigbeeIntegration.OTHER:
|
|
521
467
|
return self._async_flow_finished()
|
|
522
468
|
|
|
@@ -10,6 +10,10 @@
|
|
|
10
10
|
"unsupported_firmware": "Impossible de d\u00e9terminer le micrologiciel radio de votre {model}. Assurez-vous qu'aucune autre int\u00e9gration ou module compl\u00e9mentaire n'essaie actuellement de communiquer avec l'appareil. Si vous ex\u00e9cutez Home Assistant OS sur une machine virtuelle ou dans Docker, assurez-vous que les autorisations sont correctement d\u00e9finies pour l'appareil.",
|
|
11
11
|
"zha_still_using_stick": "Ce {model} est utilis\u00e9 par l'int\u00e9gration Zigbee Home Automation. Veuillez migrer votre r\u00e9seau Zigbee vers un autre adaptateur ou supprimer l'int\u00e9gration et r\u00e9essayer."
|
|
12
12
|
},
|
|
13
|
+
"progress": {
|
|
14
|
+
"install_otbr_addon": "Installation du module compl\u00e9mentaire",
|
|
15
|
+
"start_otbr_addon": "D\u00e9marrage du module compl\u00e9mentaire"
|
|
16
|
+
},
|
|
13
17
|
"step": {
|
|
14
18
|
"confirm_otbr": {
|
|
15
19
|
"description": "Votre {model} est d\u00e9sormais un OpenThread Border Router et appara\u00eetra dans l'int\u00e9gration Thread.",
|
|
@@ -19,6 +23,12 @@
|
|
|
19
23
|
"description": "Votre {model} est d\u00e9sormais un coordinateur Zigbee et sera affich\u00e9 comme d\u00e9couvert par l'int\u00e9gration Zigbee Home Automation.",
|
|
20
24
|
"title": "Configuration du Zigbee termin\u00e9e"
|
|
21
25
|
},
|
|
26
|
+
"install_thread_firmware": {
|
|
27
|
+
"title": "Mise \u00e0 jour de l'adaptateur"
|
|
28
|
+
},
|
|
29
|
+
"install_zigbee_firmware": {
|
|
30
|
+
"title": "Mise \u00e0 jour de l'adaptateur"
|
|
31
|
+
},
|
|
22
32
|
"otbr_failed": {
|
|
23
33
|
"description": "L\u2019installation du module compl\u00e9mentaire OpenThread Border Router a \u00e9chou\u00e9. Assurez-vous qu'aucun autre logiciel n'essaie de communiquer avec le {model}, que vous avez acc\u00e8s \u00e0 Internet et que vous pouvez installer d'autres modules compl\u00e9mentaires, puis r\u00e9essayez. V\u00e9rifiez les journaux du superviseur si le probl\u00e8me persiste.",
|
|
24
34
|
"title": "\u00c9chec de la configuration de OpenThread Border Router"
|
|
@@ -2,12 +2,19 @@
|
|
|
2
2
|
"firmware_picker": {
|
|
3
3
|
"options": {
|
|
4
4
|
"abort": {
|
|
5
|
+
"fw_download_failed": "Firmware {firmware_name} untuk {model} Anda gagal diunduh. Pastikan Home Assistant memiliki akses internet dan coba lagi.",
|
|
6
|
+
"fw_install_failed": "Firmware {firmware_name} gagal diinstal, periksa log Home Assistant untuk informasi lebih lanjut.",
|
|
5
7
|
"not_hassio_thread": "Addon OpenThread Border Router hanya dapat diinstal dengan Home Assistant OS. Jika Anda ingin menggunakan {model} sebagai router perbatasan Thread, silakan flash firmware secara manual menggunakan [web flasher] ({docs_web_flasher_url}) dan atur OpenThread Border Router untuk berkomunikasi dengannya.",
|
|
6
8
|
"otbr_addon_already_running": "Add-on OpenThread Border Router sudah berjalan, tidak dapat diinstal lagi.",
|
|
7
9
|
"otbr_still_using_stick": "{model} ini digunakan oleh add-on OpenThread Border Router. Jika Anda menggunakan jaringan Thread, pastikan Anda memiliki router perbatasan alternatif. Copot pengaya dan coba lagi.",
|
|
8
10
|
"unsupported_firmware": "Firmware radio pada {model} Anda tidak dapat dikenali. Pastikan tidak ada integrasi atau addon lain yang sedang mencoba berkomunikasi dengan perangkat. Jika Anda menjalankan Home Assistant OS di mesin virtual atau di Docker, pastikan izin telah diatur dengan benar untuk perangkat.",
|
|
9
11
|
"zha_still_using_stick": "{model} ini digunakan oleh integrasi Zigbee Home Automation. Migrasikan jaringan Zigbee Anda ke adaptor lain atau hapus integrasi dan coba lagi."
|
|
10
12
|
},
|
|
13
|
+
"progress": {
|
|
14
|
+
"install_firmware": "Menginstal firmware {firmware_name}.\n\nJangan lakukan perubahan apa pun pada perangkat keras atau perangkat lunak Anda hingga proses ini selesai.",
|
|
15
|
+
"install_otbr_addon": "Menginstal add-on",
|
|
16
|
+
"start_otbr_addon": "Memulai add-on"
|
|
17
|
+
},
|
|
11
18
|
"step": {
|
|
12
19
|
"confirm_otbr": {
|
|
13
20
|
"description": "{model} Anda sekarang menjadi OpenThread Border Router dan akan muncul di integrasi Thread.",
|
|
@@ -17,9 +24,60 @@
|
|
|
17
24
|
"description": "{model} Anda sekarang menjadi koordinator Zigbee dan akan ditampilkan sebagai ditemukan oleh integrasi Zigbee Home Automation.",
|
|
18
25
|
"title": "Penyiapan Zigbee selesai"
|
|
19
26
|
},
|
|
27
|
+
"install_otbr_addon": {
|
|
28
|
+
"title": "Mengonfigurasi Thread"
|
|
29
|
+
},
|
|
30
|
+
"install_thread_firmware": {
|
|
31
|
+
"title": "Memperbarui adaptor"
|
|
32
|
+
},
|
|
33
|
+
"install_zigbee_firmware": {
|
|
34
|
+
"title": "Memperbarui adaptor"
|
|
35
|
+
},
|
|
20
36
|
"otbr_failed": {
|
|
21
37
|
"description": "Instalasi add-on OpenThread Border Router tidak berhasil. Pastikan tidak ada perangkat lunak lain yang mencoba berkomunikasi dengan {model}, Anda memiliki akses ke internet dan dapat menginstal add-on lain, lalu coba lagi. Periksa log Supervisor jika masalah terus berlanjut.",
|
|
22
38
|
"title": "Gagal menyiapkan OpenThread Border Router"
|
|
39
|
+
},
|
|
40
|
+
"pick_firmware": {
|
|
41
|
+
"description": "Anda dapat menggunakan {model} untuk jaringan Zigbee atau Thread. Periksa jenis perangkat yang ingin ditambahkan ke Home Assistant. Anda selalu dapat mengubahnya nanti.",
|
|
42
|
+
"menu_option_descriptions": {
|
|
43
|
+
"pick_firmware_thread": "Sering digunakan untuk perangkat Matter lewat Thread.",
|
|
44
|
+
"pick_firmware_thread_migrate": "Ini akan memigrasikan Router Perbatasan Thread Anda ke adaptor yang baru.",
|
|
45
|
+
"pick_firmware_zigbee": "Protokol yang paling umum.",
|
|
46
|
+
"pick_firmware_zigbee_migrate": "Ini akan memindahkan jaringan Zigbee Anda ke adaptor yang baru."
|
|
47
|
+
},
|
|
48
|
+
"menu_options": {
|
|
49
|
+
"pick_firmware_thread": "Gunakan sebagai adaptor Thread",
|
|
50
|
+
"pick_firmware_thread_migrate": "Migrasikan Thread ke adaptor baru",
|
|
51
|
+
"pick_firmware_zigbee": "Gunakan sebagai adaptor Zigbee",
|
|
52
|
+
"pick_firmware_zigbee_migrate": "Migrasikan Zigbee ke adaptor baru"
|
|
53
|
+
},
|
|
54
|
+
"title": "Pilih protokol Anda"
|
|
55
|
+
},
|
|
56
|
+
"start_otbr_addon": {
|
|
57
|
+
"title": "Mengonfigurasi Thread"
|
|
58
|
+
},
|
|
59
|
+
"zigbee_installation_type": {
|
|
60
|
+
"description": "Pilih jenis instalasi untuk adaptor Zigbee.",
|
|
61
|
+
"menu_option_descriptions": {
|
|
62
|
+
"zigbee_intent_custom": "Instal dan konfigurasikan Zigbee secara manual, misalnya dengan Zigbee2MQTT.",
|
|
63
|
+
"zigbee_intent_recommended": "Instal dan konfigurasikan Zigbee secara otomatis."
|
|
64
|
+
},
|
|
65
|
+
"menu_options": {
|
|
66
|
+
"zigbee_intent_custom": "Khusus",
|
|
67
|
+
"zigbee_intent_recommended": "Instalasi yang disarankan"
|
|
68
|
+
},
|
|
69
|
+
"title": "Siapkan Zigbee"
|
|
70
|
+
},
|
|
71
|
+
"zigbee_integration": {
|
|
72
|
+
"menu_option_descriptions": {
|
|
73
|
+
"zigbee_integration_other": "Misalnya jika Anda ingin menggunakan adaptor dengan Zigbee2MQTT.",
|
|
74
|
+
"zigbee_integration_zha": "Gunakan Home Assistant untuk mengendalikan jaringan Zigbee Anda."
|
|
75
|
+
},
|
|
76
|
+
"menu_options": {
|
|
77
|
+
"zigbee_integration_other": "Lainnya",
|
|
78
|
+
"zigbee_integration_zha": "Zigbee Home Automation"
|
|
79
|
+
},
|
|
80
|
+
"title": "Pilih metode Zigbee"
|
|
23
81
|
}
|
|
24
82
|
}
|
|
25
83
|
}
|
|
@@ -10,6 +10,11 @@
|
|
|
10
10
|
"unsupported_firmware": "Nepavyko nustatyti j\u016bs\u0173 {model} radijo programin\u0117s \u012frangos. \u012esitikinkite, kad jokia kita integracija ar priedas \u0161iuo metu nebando susisiekti su \u012frenginiu. Jei naudojate Home Assistant OS virtualioje ma\u0161inoje arba Docker, \u012fsitikinkite, kad \u012frenginio leidimai nustatyti tinkamai.",
|
|
11
11
|
"zha_still_using_stick": "\u0160\u012f {model} naudoja Zigbee Home Automation integracija. Perkelkite \u201eZigbee\u201c tinkl\u0105 \u012f kit\u0105 adapter\u012f arba i\u0161trinkite integracij\u0105 ir bandykite dar kart\u0105."
|
|
12
12
|
},
|
|
13
|
+
"progress": {
|
|
14
|
+
"install_firmware": "Diegiama {firmware_name} programin\u0117 \u012franga. \n \n Kol tai nebus baigta, neatlikite joki\u0173 aparatin\u0117s ar programin\u0117s \u012frangos pakeitim\u0173.",
|
|
15
|
+
"install_otbr_addon": "Priedo diegimas",
|
|
16
|
+
"start_otbr_addon": "Pradedamas priedas"
|
|
17
|
+
},
|
|
13
18
|
"step": {
|
|
14
19
|
"confirm_otbr": {
|
|
15
20
|
"description": "J\u016bs\u0173 {model} dabar yra OpenThread Border Router ir bus rodomas Thread integracijoje.",
|
|
@@ -19,6 +24,15 @@
|
|
|
19
24
|
"description": "J\u016bs\u0173 {model} dabar yra Zigbee koordinatorius ir bus rodomas kaip aptiktas Zigbee nam\u0173 automatizavimo integracijos.",
|
|
20
25
|
"title": "Zigbee s\u0105ranka baigta"
|
|
21
26
|
},
|
|
27
|
+
"install_otbr_addon": {
|
|
28
|
+
"title": "Thread konfig\u016bravimas"
|
|
29
|
+
},
|
|
30
|
+
"install_thread_firmware": {
|
|
31
|
+
"title": "Adapterio atnaujinimas"
|
|
32
|
+
},
|
|
33
|
+
"install_zigbee_firmware": {
|
|
34
|
+
"title": "Adapterio atnaujinimas"
|
|
35
|
+
},
|
|
22
36
|
"otbr_failed": {
|
|
23
37
|
"description": "OpenThread Border Router priedo diegimas buvo nes\u0117kmingas. \u012esitikinkite, kad jokia kita programin\u0117 \u012franga nebando susisiekti su {model}, turite prieig\u0105 prie interneto ir galite \u012fdiegti kitus priedus, ir bandykite dar kart\u0105. Patikrinkite pri\u017ei\u016br\u0117tojo \u017eurnalus, jei problema i\u0161lieka.",
|
|
24
38
|
"title": "Nepavyko nustatyti OpenThread Border Router"
|
|
@@ -39,6 +53,9 @@
|
|
|
39
53
|
},
|
|
40
54
|
"title": "Pasirinkite savo protokol\u0105"
|
|
41
55
|
},
|
|
56
|
+
"start_otbr_addon": {
|
|
57
|
+
"title": "Thread konfig\u016bravimas"
|
|
58
|
+
},
|
|
42
59
|
"zigbee_installation_type": {
|
|
43
60
|
"description": "Pasirinkite Zigbee adapterio diegimo tip\u0105.",
|
|
44
61
|
"menu_option_descriptions": {
|
|
@@ -10,6 +10,11 @@
|
|
|
10
10
|
"unsupported_firmware": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0440\u0430\u0434\u0438\u043e \u043d\u0430 \u0432\u0430\u0448\u0435\u043c {model}. \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u043d\u0438\u043a\u0430\u043a\u0430\u044f \u0434\u0440\u0443\u0433\u0430\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0438\u043b\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0435 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u0432\u044f\u0437\u0430\u0442\u044c\u0441\u044f \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c. \u0415\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 Home Assistant OS \u0432 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u0438\u043b\u0438 \u0432 Docker, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u043f\u0440\u0430\u0432\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e.",
|
|
11
11
|
"zha_still_using_stick": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e {model} \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0435\u0439 \"Zigbee Home Automation\". \u041f\u0435\u0440\u0435\u043d\u0435\u0441\u0438\u0442\u0435 \u0441\u0432\u043e\u044e \u0441\u0435\u0442\u044c Zigbee \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443."
|
|
12
12
|
},
|
|
13
|
+
"progress": {
|
|
14
|
+
"install_firmware": "\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 {firmware_name}. \n \n\u041d\u0435 \u0432\u043d\u043e\u0441\u0438\u0442\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043b\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435, \u043f\u043e\u043a\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f.",
|
|
15
|
+
"install_otbr_addon": "\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f",
|
|
16
|
+
"start_otbr_addon": "\u0417\u0430\u043f\u0443\u0441\u043a \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f"
|
|
17
|
+
},
|
|
13
18
|
"step": {
|
|
14
19
|
"confirm_otbr": {
|
|
15
20
|
"description": "\u0422\u0435\u043f\u0435\u0440\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e {model} \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u043c \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u043c OpenThread \u0438 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0432 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 Thread.",
|
|
@@ -19,6 +24,15 @@
|
|
|
19
24
|
"description": "\u0422\u0435\u043f\u0435\u0440\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e {model} \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043e\u0440\u043e\u043c Zigbee \u0438 \u0431\u0443\u0434\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0435\u0439 Zigbee Home Automation.",
|
|
20
25
|
"title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Zigbee \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430"
|
|
21
26
|
},
|
|
27
|
+
"install_otbr_addon": {
|
|
28
|
+
"title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Thread"
|
|
29
|
+
},
|
|
30
|
+
"install_thread_firmware": {
|
|
31
|
+
"title": "\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430"
|
|
32
|
+
},
|
|
33
|
+
"install_zigbee_firmware": {
|
|
34
|
+
"title": "\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430"
|
|
35
|
+
},
|
|
22
36
|
"otbr_failed": {
|
|
23
37
|
"description": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \"OpenThread Border Router\". \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u043d\u0438\u043a\u0430\u043a\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c {model}, \u0447\u0442\u043e \u0443 \u0412\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0443 \u0438 \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0436\u0443\u0440\u043d\u0430\u043b\u044b Supervisor, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043d\u0435 \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0430.",
|
|
24
38
|
"title": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440 OpenThread"
|
|
@@ -39,6 +53,9 @@
|
|
|
39
53
|
},
|
|
40
54
|
"title": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b"
|
|
41
55
|
},
|
|
56
|
+
"start_otbr_addon": {
|
|
57
|
+
"title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Thread"
|
|
58
|
+
},
|
|
42
59
|
"zigbee_installation_type": {
|
|
43
60
|
"description": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0438\u043f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430 Zigbee.",
|
|
44
61
|
"menu_option_descriptions": {
|
|
@@ -22,7 +22,12 @@ from homeassistant.helpers.update_coordinator import CoordinatorEntity
|
|
|
22
22
|
|
|
23
23
|
from .coordinator import FirmwareUpdateCoordinator
|
|
24
24
|
from .helpers import async_register_firmware_info_callback
|
|
25
|
-
from .util import
|
|
25
|
+
from .util import (
|
|
26
|
+
ApplicationType,
|
|
27
|
+
FirmwareInfo,
|
|
28
|
+
ResetTarget,
|
|
29
|
+
async_flash_silabs_firmware,
|
|
30
|
+
)
|
|
26
31
|
|
|
27
32
|
_LOGGER = logging.getLogger(__name__)
|
|
28
33
|
|
|
@@ -81,7 +86,7 @@ class BaseFirmwareUpdateEntity(
|
|
|
81
86
|
|
|
82
87
|
# Subclasses provide the mapping between firmware types and entity descriptions
|
|
83
88
|
entity_description: FirmwareUpdateEntityDescription
|
|
84
|
-
|
|
89
|
+
bootloader_reset_methods: list[ResetTarget] = []
|
|
85
90
|
|
|
86
91
|
_attr_supported_features = (
|
|
87
92
|
UpdateEntityFeature.INSTALL | UpdateEntityFeature.PROGRESS
|
|
@@ -268,7 +273,7 @@ class BaseFirmwareUpdateEntity(
|
|
|
268
273
|
device=self._current_device,
|
|
269
274
|
fw_data=fw_data,
|
|
270
275
|
expected_installed_firmware_type=self.entity_description.expected_firmware_type,
|
|
271
|
-
|
|
276
|
+
bootloader_reset_methods=self.bootloader_reset_methods,
|
|
272
277
|
progress_callback=self._update_progress,
|
|
273
278
|
)
|
|
274
279
|
finally:
|
|
@@ -4,13 +4,16 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
import asyncio
|
|
6
6
|
from collections import defaultdict
|
|
7
|
-
from collections.abc import AsyncIterator, Callable, Iterable
|
|
7
|
+
from collections.abc import AsyncIterator, Callable, Iterable, Sequence
|
|
8
8
|
from contextlib import AsyncExitStack, asynccontextmanager
|
|
9
9
|
from dataclasses import dataclass
|
|
10
10
|
from enum import StrEnum
|
|
11
11
|
import logging
|
|
12
12
|
|
|
13
|
-
from universal_silabs_flasher.const import
|
|
13
|
+
from universal_silabs_flasher.const import (
|
|
14
|
+
ApplicationType as FlasherApplicationType,
|
|
15
|
+
ResetTarget as FlasherResetTarget,
|
|
16
|
+
)
|
|
14
17
|
from universal_silabs_flasher.firmware import parse_firmware_image
|
|
15
18
|
from universal_silabs_flasher.flasher import Flasher
|
|
16
19
|
|
|
@@ -42,9 +45,9 @@ class ApplicationType(StrEnum):
|
|
|
42
45
|
"""Application type running on a device."""
|
|
43
46
|
|
|
44
47
|
GECKO_BOOTLOADER = "bootloader"
|
|
45
|
-
CPC = "cpc"
|
|
46
48
|
EZSP = "ezsp"
|
|
47
49
|
SPINEL = "spinel"
|
|
50
|
+
CPC = "cpc"
|
|
48
51
|
ROUTER = "router"
|
|
49
52
|
|
|
50
53
|
@classmethod
|
|
@@ -59,6 +62,18 @@ class ApplicationType(StrEnum):
|
|
|
59
62
|
return FlasherApplicationType(self.value)
|
|
60
63
|
|
|
61
64
|
|
|
65
|
+
class ResetTarget(StrEnum):
|
|
66
|
+
"""Methods to reset a device into bootloader mode."""
|
|
67
|
+
|
|
68
|
+
RTS_DTR = "rts_dtr"
|
|
69
|
+
BAUDRATE = "baudrate"
|
|
70
|
+
YELLOW = "yellow"
|
|
71
|
+
|
|
72
|
+
def as_flasher_reset_target(self) -> FlasherResetTarget:
|
|
73
|
+
"""Convert the reset target enum into one compatible with USF."""
|
|
74
|
+
return FlasherResetTarget(self.value)
|
|
75
|
+
|
|
76
|
+
|
|
62
77
|
@singleton(OTBR_ADDON_MANAGER_DATA)
|
|
63
78
|
@callback
|
|
64
79
|
def get_otbr_addon_manager(hass: HomeAssistant) -> WaitingAddonManager:
|
|
@@ -342,7 +357,7 @@ async def async_flash_silabs_firmware(
|
|
|
342
357
|
device: str,
|
|
343
358
|
fw_data: bytes,
|
|
344
359
|
expected_installed_firmware_type: ApplicationType,
|
|
345
|
-
|
|
360
|
+
bootloader_reset_methods: Sequence[ResetTarget] = (),
|
|
346
361
|
progress_callback: Callable[[int, int], None] | None = None,
|
|
347
362
|
) -> FirmwareInfo:
|
|
348
363
|
"""Flash firmware to the SiLabs device."""
|
|
@@ -359,7 +374,9 @@ async def async_flash_silabs_firmware(
|
|
|
359
374
|
ApplicationType.SPINEL.as_flasher_application_type(),
|
|
360
375
|
ApplicationType.CPC.as_flasher_application_type(),
|
|
361
376
|
),
|
|
362
|
-
bootloader_reset=
|
|
377
|
+
bootloader_reset=tuple(
|
|
378
|
+
m.as_flasher_reset_target() for m in bootloader_reset_methods
|
|
379
|
+
),
|
|
363
380
|
)
|
|
364
381
|
|
|
365
382
|
async with AsyncExitStack() as stack:
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
"progress": {
|
|
21
21
|
"install_addon": "Veuillez patienter pendant que l'installation du module compl\u00e9mentaire {addon_name} se termine. Cela peut prendre plusieurs minutes.",
|
|
22
22
|
"install_firmware": "Veuillez patienter pendant l'installation du micrologiciel {firmware_name} sur votre {model}. Cette op\u00e9ration prendra quelques minutes. N'apportez aucune modification \u00e0 votre mat\u00e9riel ou logiciel avant la fin de l'installation.",
|
|
23
|
+
"install_otbr_addon": "Installation du module compl\u00e9mentaire",
|
|
23
24
|
"start_addon": "Veuillez patienter pendant que le d\u00e9marrage du module compl\u00e9mentaire {addon_name} se termine. Cela peut prendre quelques secondes."
|
|
24
25
|
},
|
|
25
26
|
"step": {
|
|
@@ -34,6 +35,12 @@
|
|
|
34
35
|
"install_otbr_addon": {
|
|
35
36
|
"title": "Installation du module compl\u00e9mentaire OpenThread Border Router"
|
|
36
37
|
},
|
|
38
|
+
"install_thread_firmware": {
|
|
39
|
+
"title": "Mise \u00e0 jour de l'adaptateur"
|
|
40
|
+
},
|
|
41
|
+
"install_zigbee_firmware": {
|
|
42
|
+
"title": "Mise \u00e0 jour de l'adaptateur"
|
|
43
|
+
},
|
|
37
44
|
"otbr_failed": {
|
|
38
45
|
"description": "L\u2019installation du module compl\u00e9mentaire OpenThread Border Router a \u00e9chou\u00e9. Assurez-vous qu'aucun autre logiciel n'essaie de communiquer avec le {model}, que vous avez acc\u00e8s \u00e0 Internet et que vous pouvez installer d'autres modules compl\u00e9mentaires, puis r\u00e9essayez. V\u00e9rifiez les journaux du superviseur si le probl\u00e8me persiste.",
|
|
39
46
|
"title": "\u00c9chec de la configuration de OpenThread Border Router"
|
|
@@ -79,6 +86,7 @@
|
|
|
79
86
|
"progress": {
|
|
80
87
|
"install_addon": "Veuillez patienter pendant que l'installation du module compl\u00e9mentaire {addon_name} se termine. Cela peut prendre plusieurs minutes.",
|
|
81
88
|
"install_firmware": "Veuillez patienter pendant l'installation du micrologiciel {firmware_name} sur votre {model}. Cette op\u00e9ration prendra quelques minutes. N'apportez aucune modification \u00e0 votre mat\u00e9riel ou logiciel avant la fin de l'installation.",
|
|
89
|
+
"install_otbr_addon": "Installation du module compl\u00e9mentaire",
|
|
82
90
|
"start_addon": "Veuillez patienter pendant que le d\u00e9marrage du module compl\u00e9mentaire {addon_name} se termine. Cela peut prendre quelques secondes."
|
|
83
91
|
},
|
|
84
92
|
"step": {
|
|
@@ -119,6 +127,12 @@
|
|
|
119
127
|
"install_otbr_addon": {
|
|
120
128
|
"title": "Installation du module compl\u00e9mentaire OpenThread Border Router"
|
|
121
129
|
},
|
|
130
|
+
"install_thread_firmware": {
|
|
131
|
+
"title": "Mise \u00e0 jour de l'adaptateur"
|
|
132
|
+
},
|
|
133
|
+
"install_zigbee_firmware": {
|
|
134
|
+
"title": "Mise \u00e0 jour de l'adaptateur"
|
|
135
|
+
},
|
|
122
136
|
"notify_channel_change": {
|
|
123
137
|
"description": "Un changement de canal Zigbee et Thread a \u00e9t\u00e9 lanc\u00e9 et se terminera dans {delay_minutes}\u00a0minutes.",
|
|
124
138
|
"title": "Changement de canal initi\u00e9"
|