HA-008 HA-009: add discovery and history pipeline
Closes #17 Closes #18
This commit is contained in:
@@ -1,10 +1,13 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime
|
||||
from typing import List
|
||||
|
||||
from fastapi import APIRouter, Depends
|
||||
from fastapi import APIRouter, Depends, HTTPException, Query, status
|
||||
|
||||
from app.dependencies import get_ha_reader
|
||||
from app.ha.discovery import DiscoveredEntity
|
||||
from app.ha.history import EntityHistorySeries
|
||||
from app.ha.models import HaEntitySummary
|
||||
from app.ha.reader import HaReader
|
||||
|
||||
@@ -19,3 +22,43 @@ router = APIRouter(prefix="/v1", tags=["entities"])
|
||||
)
|
||||
def list_entities(ha_reader: HaReader = Depends(get_ha_reader)) -> List[HaEntitySummary]:
|
||||
return list(ha_reader.read_entities())
|
||||
|
||||
|
||||
@router.get(
|
||||
"/discovery",
|
||||
summary="Home-Assistant-Entities klassifizieren",
|
||||
description="Klassifiziert Entities nach Lernrelevanz, Kontextquelle und Aktor-Rolle.",
|
||||
response_model=List[DiscoveredEntity],
|
||||
)
|
||||
def discovery(
|
||||
domain: List[str] | None = Query(default=None),
|
||||
learnable: bool | None = None,
|
||||
ha_reader: HaReader = Depends(get_ha_reader),
|
||||
) -> List[DiscoveredEntity]:
|
||||
return list(
|
||||
ha_reader.discover(
|
||||
domains=set(domain) if domain else None,
|
||||
learnable=learnable,
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@router.get(
|
||||
"/history",
|
||||
summary="Numerische Home-Assistant-Historie lesen",
|
||||
description="Lädt und normalisiert numerische Zustände ausgewählter Entities.",
|
||||
response_model=List[EntityHistorySeries],
|
||||
)
|
||||
def history(
|
||||
entity_id: List[str] = Query(),
|
||||
start_time: datetime = Query(),
|
||||
end_time: datetime = Query(),
|
||||
ha_reader: HaReader = Depends(get_ha_reader),
|
||||
) -> List[EntityHistorySeries]:
|
||||
try:
|
||||
return list(ha_reader.read_history(entity_id, start_time, end_time))
|
||||
except ValueError as exc:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_422_UNPROCESSABLE_CONTENT,
|
||||
detail=str(exc),
|
||||
) from exc
|
||||
|
||||
Reference in New Issue
Block a user