ha(H4): исправления по ревью — маскировка ключа в дампе, reload-repair, reconfigure сохраняет поля

- major: diagnostics больше не содержит полный lanip_key (esp_home —
  маска, entry_data redacted); ключ для ESPHome — через reconfigure/CLI;
  план §3 синхронизирован; дамп при незагруженной записи не падает
- reconfigure: сохраняет listen_port/keepalive_ms и текущие overrides/
  temp_step; превью-дефолты подхватывают значения записи
- repair fix-flow: подтверждение перезагружает запись (issue снимается
  только когда сессия вышла из key_error; иначе создаётся заново)
- key_issue_id helper, использование async_remove_issue (мёртвый код),
  CONF_EMAIL/PASSWORD в TO_REDACT, placeholders в fix_flow, тест
  плейсхолдеров ru
- тесты обновлены (47 components)
This commit is contained in:
2026-09-29 14:29:36 +03:00
parent dcbf9a6c7e
commit 43d3ff7dea
12 changed files with 160 additions and 80 deletions
+8 -1
View File
@@ -42,6 +42,10 @@ class FglairRuntime:
conversions: ConversionSet
def key_issue_id(dsn: str) -> str:
return f"key_mismatch_{dsn}"
def _writable_props(template: Template):
for info in template_info(template):
if info.kind != ValueKind.STRING:
@@ -56,6 +60,7 @@ class FglairCoordinator(DataUpdateCoordinator[FglairData]):
hass: HomeAssistant,
client: FglairClient,
conversions: ConversionSet,
entry_id: str,
) -> None:
super().__init__(
hass,
@@ -65,7 +70,8 @@ class FglairCoordinator(DataUpdateCoordinator[FglairData]):
)
self.client = client
self.conversions = conversions
self.key_issue_id = f"key_mismatch_{client.data[CONF_DSN]}"
self.entry_id = entry_id
self.key_issue_id = key_issue_id(client.data[CONF_DSN])
self._synced = False
self._sync_task: Optional[asyncio.Task] = None
self._unsubs = [
@@ -144,6 +150,7 @@ class FglairCoordinator(DataUpdateCoordinator[FglairData]):
or self.client.data[CONF_DSN],
"host": str(self.client.data.get(CONF_HOST, "?")),
},
data={"entry_id": self.entry_id},
)
else:
ir.async_delete_issue(self.hass, DOMAIN, self.key_issue_id)