BBFbyOpus

This commit is contained in:
Artem Kokos
2026-04-01 22:51:24 +07:00
parent 732313a61c
commit b6b25fa2a1
11 changed files with 160 additions and 72 deletions

View File

@@ -1,3 +1,4 @@
import logging
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy import select
from app.core.state import state_manager, discovery_service
@@ -6,6 +7,8 @@ from app.models.device import GroupModel, GroupCreateSchema
from app.api.deps import verify_token, require_admin
from app.drivers.wiz import WizDriver
logger = logging.getLogger(__name__)
# Создаем роутер с защитой
router = APIRouter(dependencies=[Depends(verify_token)])
wiz = WizDriver()
@@ -36,6 +39,8 @@ async def create_group(data: GroupCreateSchema):
new_group = GroupModel(id=data.id, name=data.name, device_ids=data.macs)
session.add(new_group)
await session.commit()
# Обновляем атрибуты из БД, чтобы избежать DetachedInstanceError
await session.refresh(new_group)
state_manager.groups[data.id] = new_group
return {"status": "created", "group": data.name}
@@ -59,6 +64,22 @@ async def delete_group(group_id: str):
@router.post("/rescan", dependencies=[Depends(require_admin)])
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)
return {"status": "ok", "found": len(state_manager.devices)}
return {
"status": "ok",
"found": len(found_macs),
"removed_offline": len(offline_macs),
}