Stabilize discovery lifecycle and rescan summary

This commit is contained in:
Artem Kokos
2026-05-16 10:59:31 +07:00
parent 15529961d6
commit 1ac66ec4ac
8 changed files with 604 additions and 124 deletions

View File

@@ -1,10 +1,12 @@
import logging
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy import select
from app.core.state import state_manager, discovery_service
from app.core.database import async_session
from app.models.device import GroupModel, GroupCreateSchema
from app.api.schemas import RescanResponse
from app.api.deps import verify_token, require_admin
from app.core.database import async_session
from app.core.state import state_manager, discovery_service
from app.models.device import GroupModel, GroupCreateSchema
from app.drivers.wiz import WizDriver
logger = logging.getLogger(__name__)
@@ -61,25 +63,14 @@ async def delete_group(group_id: str):
return {"status": "deleted", "id": group_id}
@router.post("/rescan", dependencies=[Depends(require_admin)])
@router.post(
"/rescan",
dependencies=[Depends(require_admin)],
response_model=RescanResponse,
)
async def rescan_network():
found_devices = await discovery_service.scan_network()
# MAC-адреса найденных ламп
found_macs = {dev["mac"] for dev in found_devices}
# Удаляем устройства, которые не ответили (оффлайн)
offline_macs = [mac for mac in state_manager.devices if mac not in found_macs]
for mac in offline_macs:
del state_manager.devices[mac]
logger.info(f"Устройство {mac} не ответило -- убрано из списка")
# Обновляем/добавляем найденные
for dev_data in found_devices:
state_manager.update_device(dev_data)
summary = await discovery_service.manual_refresh(state_manager)
return {
"status": "ok",
"found": len(found_macs),
"removed_offline": len(offline_macs),
**summary.to_dict(),
}