39 lines
1.3 KiB
Python
39 lines
1.3 KiB
Python
import logging
|
|
from typing import Dict, List, Optional
|
|
from app.models.device import Device, Group
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class StateManager:
|
|
def __init__(self):
|
|
# Храним устройства по MAC (уникальный ID)
|
|
self.devices: Dict[str, Device] = {}
|
|
# Группы (люстры) по их ID
|
|
self.groups: Dict[str, Group] = {}
|
|
|
|
def update_device(self, device_data: dict):
|
|
"""Обновляет или добавляет устройство в состояние."""
|
|
mac = device_data["mac"]
|
|
device = Device(
|
|
id=mac,
|
|
ip=device_data["ip"],
|
|
name=f"WiZ {mac[-4:]}", # Временное имя
|
|
room="Default",
|
|
)
|
|
self.devices[mac] = device
|
|
|
|
def get_group_ips(self, group_id: str) -> List[str]:
|
|
"""Возвращает список IP всех ламп, входящих в группу."""
|
|
group = self.groups.get(group_id)
|
|
if not group:
|
|
return []
|
|
|
|
return [
|
|
self.devices[d_id].ip for d_id in group.device_ids if d_id in self.devices
|
|
]
|
|
|
|
|
|
# Создаем синглтон для использования во всем приложении
|
|
state_manager = StateManager()
|