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.

Files changed (260) hide show
  1. homeassistant/brands/eltako.json +5 -0
  2. homeassistant/brands/konnected.json +5 -0
  3. homeassistant/brands/level.json +5 -0
  4. homeassistant/components/accuweather/translations/id.json +9 -0
  5. homeassistant/components/airos/translations/id.json +36 -0
  6. homeassistant/components/aladdin_connect/config_flow.py +11 -0
  7. homeassistant/components/aladdin_connect/strings.json +2 -1
  8. homeassistant/components/aladdin_connect/translations/cs.json +1 -0
  9. homeassistant/components/aladdin_connect/translations/de.json +1 -0
  10. homeassistant/components/aladdin_connect/translations/en-GB.json +1 -0
  11. homeassistant/components/aladdin_connect/translations/en.json +1 -0
  12. homeassistant/components/aladdin_connect/translations/es.json +1 -0
  13. homeassistant/components/aladdin_connect/translations/et.json +1 -0
  14. homeassistant/components/aladdin_connect/translations/id.json +28 -1
  15. homeassistant/components/aladdin_connect/translations/lt.json +1 -0
  16. homeassistant/components/aladdin_connect/translations/pt.json +1 -0
  17. homeassistant/components/alexa_devices/translations/id.json +12 -0
  18. homeassistant/components/analytics/analytics.py +23 -12
  19. homeassistant/components/androidtv_remote/translations/id.json +7 -1
  20. homeassistant/components/anthropic/translations/id.json +2 -1
  21. homeassistant/components/aosmith/translations/id.json +9 -0
  22. homeassistant/components/apcupsd/translations/id.json +6 -0
  23. homeassistant/components/august/translations/id.json +25 -1
  24. homeassistant/components/bayesian/binary_sensor.py +7 -0
  25. homeassistant/components/bayesian/translations/id.json +62 -0
  26. homeassistant/components/broadlink/translations/zh-Hant.json +1 -1
  27. homeassistant/components/brother/translations/id.json +21 -0
  28. homeassistant/components/bsblan/translations/id.json +17 -2
  29. homeassistant/components/coinbase/translations/id.json +5 -0
  30. homeassistant/components/compit/translations/id.json +25 -0
  31. homeassistant/components/cync/translations/id.json +20 -0
  32. homeassistant/components/datadog/translations/id.json +28 -0
  33. homeassistant/components/droplet/translations/id.json +17 -0
  34. homeassistant/components/ecobee/strings.json +2 -2
  35. homeassistant/components/ecobee/translations/cs.json +2 -2
  36. homeassistant/components/ecobee/translations/de.json +3 -3
  37. homeassistant/components/ecobee/translations/el.json +1 -2
  38. homeassistant/components/ecobee/translations/en-GB.json +2 -2
  39. homeassistant/components/ecobee/translations/en.json +2 -2
  40. homeassistant/components/ecobee/translations/es.json +2 -2
  41. homeassistant/components/ecobee/translations/et.json +2 -2
  42. homeassistant/components/ecobee/translations/ga.json +1 -5
  43. homeassistant/components/ecobee/translations/hu.json +1 -5
  44. homeassistant/components/ecobee/translations/it.json +1 -5
  45. homeassistant/components/ecobee/translations/ja.json +1 -5
  46. homeassistant/components/ecobee/translations/lt.json +2 -2
  47. homeassistant/components/ecobee/translations/pt.json +2 -2
  48. homeassistant/components/ecobee/translations/ru.json +1 -5
  49. homeassistant/components/ecobee/translations/sk.json +1 -5
  50. homeassistant/components/ecobee/translations/sv.json +1 -5
  51. homeassistant/components/ecobee/translations/tr.json +1 -5
  52. homeassistant/components/ecobee/translations/zh-Hans.json +1 -5
  53. homeassistant/components/ecobee/translations/zh-Hant.json +1 -5
  54. homeassistant/components/ecowitt/manifest.json +1 -1
  55. homeassistant/components/eheimdigital/translations/id.json +7 -1
  56. homeassistant/components/ekeybionyx/translations/id.json +24 -0
  57. homeassistant/components/ekeybionyx/translations/lt.json +1 -0
  58. homeassistant/components/elevenlabs/translations/id.json +2 -1
  59. homeassistant/components/elkm1/translations/id.json +6 -0
  60. homeassistant/components/emoncms/translations/id.json +9 -0
  61. homeassistant/components/enphase_envoy/translations/id.json +1 -0
  62. homeassistant/components/esphome/analytics.py +11 -0
  63. homeassistant/components/fan/translations/id.json +3 -0
  64. homeassistant/components/flick_electric/translations/zh-Hant.json +2 -2
  65. homeassistant/components/frontend/manifest.json +1 -1
  66. homeassistant/components/google_generative_ai_conversation/translations/id.json +29 -1
  67. homeassistant/components/hassio/translations/id.json +29 -0
  68. homeassistant/components/holiday/translations/zh-Hant.json +2 -2
  69. homeassistant/components/homeassistant/translations/id.json +8 -0
  70. homeassistant/components/homeassistant_connect_zbt2/config_flow.py +6 -0
  71. homeassistant/components/homeassistant_connect_zbt2/translations/fr.json +14 -0
  72. homeassistant/components/homeassistant_connect_zbt2/translations/id.json +238 -0
  73. homeassistant/components/homeassistant_connect_zbt2/translations/lt.json +24 -8
  74. homeassistant/components/homeassistant_connect_zbt2/translations/ru.json +22 -4
  75. homeassistant/components/homeassistant_connect_zbt2/update.py +2 -1
  76. homeassistant/components/homeassistant_hardware/firmware_config_flow.py +13 -67
  77. homeassistant/components/homeassistant_hardware/manifest.json +1 -1
  78. homeassistant/components/homeassistant_hardware/translations/fr.json +10 -0
  79. homeassistant/components/homeassistant_hardware/translations/id.json +58 -0
  80. homeassistant/components/homeassistant_hardware/translations/lt.json +17 -0
  81. homeassistant/components/homeassistant_hardware/translations/ru.json +17 -0
  82. homeassistant/components/homeassistant_hardware/update.py +8 -3
  83. homeassistant/components/homeassistant_hardware/util.py +22 -5
  84. homeassistant/components/homeassistant_sky_connect/translations/fr.json +14 -0
  85. homeassistant/components/homeassistant_sky_connect/translations/id.json +98 -14
  86. homeassistant/components/homeassistant_sky_connect/translations/lt.json +24 -8
  87. homeassistant/components/homeassistant_sky_connect/translations/ru.json +24 -8
  88. homeassistant/components/homeassistant_sky_connect/update.py +2 -1
  89. homeassistant/components/homeassistant_yellow/config_flow.py +7 -1
  90. homeassistant/components/homeassistant_yellow/translations/fr.json +7 -0
  91. homeassistant/components/homeassistant_yellow/translations/id.json +50 -7
  92. homeassistant/components/homeassistant_yellow/translations/lt.json +12 -4
  93. homeassistant/components/homeassistant_yellow/translations/ru.json +6 -4
  94. homeassistant/components/homeassistant_yellow/update.py +2 -1
  95. homeassistant/components/homee/translations/id.json +14 -0
  96. homeassistant/components/husqvarna_automower/translations/id.json +18 -0
  97. homeassistant/components/husqvarna_automower_ble/translations/id.json +4 -0
  98. homeassistant/components/icloud/translations/id.json +3 -0
  99. homeassistant/components/imeon_inverter/translations/id.json +10 -0
  100. homeassistant/components/irm_kmi/translations/id.json +28 -0
  101. homeassistant/components/keenetic_ndms2/translations/id.json +2 -1
  102. homeassistant/components/knx/translations/id.json +3 -0
  103. homeassistant/components/konnected/translations/lt.json +6 -0
  104. homeassistant/components/konnected_esphome/__init__.py +1 -0
  105. homeassistant/components/konnected_esphome/manifest.json +6 -0
  106. homeassistant/components/letpot/number.py +2 -1
  107. homeassistant/components/letpot/strings.json +1 -2
  108. homeassistant/components/letpot/translations/bg.json +0 -5
  109. homeassistant/components/letpot/translations/cs.json +1 -2
  110. homeassistant/components/letpot/translations/de.json +1 -2
  111. homeassistant/components/letpot/translations/en-GB.json +1 -2
  112. homeassistant/components/letpot/translations/en.json +1 -2
  113. homeassistant/components/letpot/translations/es.json +1 -2
  114. homeassistant/components/letpot/translations/et.json +1 -2
  115. homeassistant/components/letpot/translations/fr.json +1 -2
  116. homeassistant/components/letpot/translations/ga.json +1 -2
  117. homeassistant/components/letpot/translations/id.json +10 -0
  118. homeassistant/components/letpot/translations/lt.json +1 -2
  119. homeassistant/components/letpot/translations/nl.json +0 -5
  120. homeassistant/components/letpot/translations/pt.json +1 -2
  121. homeassistant/components/letpot/translations/sk.json +1 -2
  122. homeassistant/components/letpot/translations/zh-Hans.json +1 -2
  123. homeassistant/components/letpot/translations/zh-Hant.json +1 -2
  124. homeassistant/components/lg_thinq/translations/id.json +5 -2
  125. homeassistant/components/libre_hardware_monitor/translations/id.json +19 -0
  126. homeassistant/components/lifx/translations/zh-Hant.json +1 -1
  127. homeassistant/components/light/translations/id.json +2 -1
  128. homeassistant/components/litterrobot/translations/id.json +15 -0
  129. homeassistant/components/mcp/translations/fr.json +20 -1
  130. homeassistant/components/mcp/translations/id.json +8 -1
  131. homeassistant/components/media_extractor/manifest.json +1 -1
  132. homeassistant/components/mqtt/translations/fr.json +2 -0
  133. homeassistant/components/mqtt/translations/id.json +6 -0
  134. homeassistant/components/mqtt/translations/lt.json +2 -0
  135. homeassistant/components/mqtt/translations/nl.json +9 -0
  136. homeassistant/components/mqtt/translations/ru.json +2 -0
  137. homeassistant/components/nasweb/translations/id.json +10 -0
  138. homeassistant/components/nederlandse_spoorwegen/translations/id.json +28 -0
  139. homeassistant/components/nightscout/translations/zh-Hant.json +1 -1
  140. homeassistant/components/niko_home_control/translations/id.json +7 -1
  141. homeassistant/components/ntfy/translations/id.json +11 -0
  142. homeassistant/components/ntfy/translations/zh-Hant.json +1 -1
  143. homeassistant/components/number/translations/fr.json +3 -0
  144. homeassistant/components/number/translations/lt.json +3 -0
  145. homeassistant/components/number/translations/ru.json +3 -0
  146. homeassistant/components/ollama/translations/id.json +18 -1
  147. homeassistant/components/open_router/translations/id.json +40 -0
  148. homeassistant/components/openai_conversation/translations/id.json +26 -1
  149. homeassistant/components/opower/translations/id.json +6 -0
  150. homeassistant/components/overkiz/translations/id.json +1 -0
  151. homeassistant/components/peco/translations/zh-Hant.json +1 -1
  152. homeassistant/components/pi_hole/__init__.py +9 -3
  153. homeassistant/components/playstation_network/translations/id.json +8 -0
  154. homeassistant/components/plex/translations/zh-Hant.json +1 -1
  155. homeassistant/components/pooldose/translations/id.json +49 -0
  156. homeassistant/components/portainer/__init__.py +5 -0
  157. homeassistant/components/portainer/translations/id.json +22 -0
  158. homeassistant/components/portainer/translations/ru.json +15 -0
  159. homeassistant/components/pyload/translations/id.json +6 -0
  160. homeassistant/components/qbittorrent/translations/cs.json +4 -4
  161. homeassistant/components/random/translations/fr.json +1 -0
  162. homeassistant/components/random/translations/lt.json +1 -0
  163. homeassistant/components/random/translations/ru.json +1 -0
  164. homeassistant/components/remote/translations/id.json +3 -0
  165. homeassistant/components/remote_calendar/translations/id.json +2 -1
  166. homeassistant/components/reolink/translations/es.json +4 -4
  167. homeassistant/components/roomba/translations/bg.json +1 -2
  168. homeassistant/components/roomba/translations/ca.json +2 -4
  169. homeassistant/components/roomba/translations/el.json +2 -4
  170. homeassistant/components/roomba/translations/en-GB.json +2 -2
  171. homeassistant/components/roomba/translations/en.json +2 -2
  172. homeassistant/components/roomba/translations/fi.json +2 -4
  173. homeassistant/components/roomba/translations/fr.json +2 -4
  174. homeassistant/components/roomba/translations/ga.json +2 -4
  175. homeassistant/components/roomba/translations/he.json +1 -5
  176. homeassistant/components/roomba/translations/hu.json +2 -4
  177. homeassistant/components/roomba/translations/id.json +2 -4
  178. homeassistant/components/roomba/translations/it.json +2 -4
  179. homeassistant/components/roomba/translations/ja.json +2 -4
  180. homeassistant/components/roomba/translations/ko.json +2 -4
  181. homeassistant/components/roomba/translations/lb.json +1 -5
  182. homeassistant/components/roomba/translations/lt.json +2 -2
  183. homeassistant/components/roomba/translations/nb.json +1 -5
  184. homeassistant/components/roomba/translations/nl.json +2 -4
  185. homeassistant/components/roomba/translations/pl.json +1 -5
  186. homeassistant/components/roomba/translations/pt-BR.json +1 -5
  187. homeassistant/components/roomba/translations/pt.json +2 -2
  188. homeassistant/components/roomba/translations/ro.json +1 -5
  189. homeassistant/components/roomba/translations/ru.json +2 -4
  190. homeassistant/components/roomba/translations/sk.json +2 -4
  191. homeassistant/components/roomba/translations/sv.json +2 -4
  192. homeassistant/components/roomba/translations/tr.json +2 -4
  193. homeassistant/components/roomba/translations/uk.json +1 -5
  194. homeassistant/components/roomba/translations/zh-Hans.json +2 -4
  195. homeassistant/components/roomba/translations/zh-Hant.json +2 -4
  196. homeassistant/components/route_b_smart_meter/translations/id.json +24 -0
  197. homeassistant/components/satel_integra/translations/id.json +85 -0
  198. homeassistant/components/scrape/translations/fr.json +2 -0
  199. homeassistant/components/scrape/translations/lt.json +2 -0
  200. homeassistant/components/scrape/translations/ru.json +2 -0
  201. homeassistant/components/sensor/translations/fr.json +3 -0
  202. homeassistant/components/sensor/translations/lt.json +3 -0
  203. homeassistant/components/sensor/translations/nl.json +3 -0
  204. homeassistant/components/sensor/translations/pl.json +3 -0
  205. homeassistant/components/sensor/translations/ru.json +3 -0
  206. homeassistant/components/sftp_storage/translations/id.json +14 -0
  207. homeassistant/components/shelly/translations/id.json +19 -0
  208. homeassistant/components/sleep_as_android/translations/id.json +31 -0
  209. homeassistant/components/sleepiq/translations/id.json +5 -0
  210. homeassistant/components/smartthings/translations/id.json +7 -0
  211. homeassistant/components/sonos/select.py +9 -13
  212. homeassistant/components/sonos/speaker.py +23 -0
  213. homeassistant/components/sonos/translations/id.json +10 -0
  214. homeassistant/components/sql/translations/fr.json +1 -0
  215. homeassistant/components/sql/translations/lt.json +1 -0
  216. homeassistant/components/sql/translations/ru.json +1 -0
  217. homeassistant/components/sql/translations/zh-Hant.json +4 -4
  218. homeassistant/components/switch/translations/id.json +3 -0
  219. homeassistant/components/switchbot/translations/id.json +12 -0
  220. homeassistant/components/switchbot_cloud/cover.py +3 -5
  221. homeassistant/components/switchbot_cloud/entity.py +1 -1
  222. homeassistant/components/switchbot_cloud/translations/id.json +27 -0
  223. homeassistant/components/telegram_bot/translations/id.json +5 -0
  224. homeassistant/components/template/translations/fr.json +1 -0
  225. homeassistant/components/template/translations/id.json +81 -0
  226. homeassistant/components/template/translations/lt.json +1 -0
  227. homeassistant/components/template/translations/ru.json +1 -0
  228. homeassistant/components/teslemetry/translations/id.json +33 -0
  229. homeassistant/components/togrill/translations/id.json +16 -0
  230. homeassistant/components/tolo/translations/id.json +2 -1
  231. homeassistant/components/traccar_server/translations/id.json +9 -1
  232. homeassistant/components/trafikverket_train/translations/zh-Hant.json +1 -1
  233. homeassistant/components/tuya/translations/id.json +32 -0
  234. homeassistant/components/unifiprotect/translations/id.json +3 -0
  235. homeassistant/components/update/translations/id.json +3 -0
  236. homeassistant/components/uptime_kuma/translations/id.json +40 -0
  237. homeassistant/components/uptimerobot/translations/id.json +6 -0
  238. homeassistant/components/vegehub/translations/id.json +4 -0
  239. homeassistant/components/victron_remote_monitoring/translations/id.json +25 -0
  240. homeassistant/components/volvo/translations/id.json +58 -0
  241. homeassistant/components/whirlpool/translations/id.json +1 -0
  242. homeassistant/components/wled/analytics.py +11 -0
  243. homeassistant/components/xiaomi_aqara/translations/zh-Hant.json +2 -2
  244. homeassistant/components/yolink/translations/id.json +9 -0
  245. homeassistant/components/zha/config_flow.py +3 -1
  246. homeassistant/components/zha/strings.json +16 -16
  247. homeassistant/components/zha/translations/lt.json +18 -1
  248. homeassistant/components/zha/translations/nl.json +6 -0
  249. homeassistant/components/zha/translations/pl.json +24 -5
  250. homeassistant/components/zha/translations/ru.json +3 -0
  251. homeassistant/const.py +1 -1
  252. homeassistant/generated/integrations.json +27 -4
  253. homeassistant/package_constraints.txt +1 -1
  254. {homeassistant-2025.10.0b5.dist-info → homeassistant-2025.10.0b6.dist-info}/METADATA +1 -1
  255. {homeassistant-2025.10.0b5.dist-info → homeassistant-2025.10.0b6.dist-info}/RECORD +260 -232
  256. {homeassistant-2025.10.0b5.dist-info → homeassistant-2025.10.0b6.dist-info}/WHEEL +0 -0
  257. {homeassistant-2025.10.0b5.dist-info → homeassistant-2025.10.0b6.dist-info}/entry_points.txt +0 -0
  258. {homeassistant-2025.10.0b5.dist-info → homeassistant-2025.10.0b6.dist-info}/licenses/LICENSE.md +0 -0
  259. {homeassistant-2025.10.0b5.dist-info → homeassistant-2025.10.0b6.dist-info}/licenses/homeassistant/backports/LICENSE.Python +0 -0
  260. {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
- bootloader_reset_type = None
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
- bootloader_reset_type=None,
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.async_step_prepare_thread_installation()
409
+ return await self.async_step_install_thread_firmware()
448
410
 
449
- async def async_step_prepare_thread_installation(
411
+ async def async_step_finish_thread_installation(
450
412
  self, user_input: dict[str, Any] | None = None
451
413
  ) -> ConfigFlowResult:
452
- """Prepare for Thread installation by stopping the OTBR addon if needed."""
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
 
@@ -6,7 +6,7 @@
6
6
  "documentation": "https://www.home-assistant.io/integrations/homeassistant_hardware",
7
7
  "integration_type": "system",
8
8
  "requirements": [
9
- "universal-silabs-flasher==0.0.32",
9
+ "universal-silabs-flasher==0.0.34",
10
10
  "ha-silabs-firmware-client==0.2.0"
11
11
  ]
12
12
  }
@@ -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 ApplicationType, FirmwareInfo, async_flash_silabs_firmware
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
- bootloader_reset_type: str | None = None
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
- bootloader_reset_type=self.bootloader_reset_type,
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 ApplicationType as FlasherApplicationType
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
- bootloader_reset_type: str | None = None,
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=bootloader_reset_type,
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"