39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import List
|
|
|
|
from fastapi import APIRouter, HTTPException, Request
|
|
|
|
from app.ha.models import HaEntitySummary
|
|
from app.ha.reader import HaReader
|
|
from app.rules.recommender import Recommender
|
|
|
|
router = APIRouter(prefix="/v1", tags=["entities"])
|
|
|
|
|
|
def _state_ha_reader(request: Request) -> HaReader:
|
|
try:
|
|
return request.app.state.ha_reader
|
|
except AttributeError as exc:
|
|
raise HTTPException(status_code=503, detail="HA-Reader nicht initialisiert.") from exc
|
|
|
|
|
|
def _state_recommender(request: Request) -> Recommender:
|
|
try:
|
|
return request.app.state.recommender
|
|
except AttributeError as exc:
|
|
raise HTTPException(status_code=503, detail="Recommender nicht initialisiert.") from exc
|
|
|
|
|
|
@router.get(
|
|
"/entities",
|
|
summary="Home-Assistant-Entities auflisten",
|
|
description="Gibt eine kompakte Zusammenfassung aller erreichbaren HA-Entitäten zurück.",
|
|
response_model=List[HaEntitySummary],
|
|
)
|
|
def list_entities(request: Request) -> List[HaEntitySummary]:
|
|
ha_reader = _state_ha_reader(request)
|
|
recommender = _state_recommender(request)
|
|
entities = ha_reader.read_entities()
|
|
recommender.run(entities)
|
|
return entities |