new endpoints 3
This commit is contained in:
135
apps/api/main.py
135
apps/api/main.py
@@ -1,71 +1,4 @@
|
|||||||
@app.get("/devices/{device_id}/layout")
|
|
||||||
async def get_device_layout(device_id: str):
|
|
||||||
"""Gibt die layout-spezifischen Informationen für ein einzelnes Gerät zurück."""
|
|
||||||
layout = load_layout()
|
|
||||||
for room in layout.get("rooms", []):
|
|
||||||
for device in room.get("devices", []):
|
|
||||||
if device.get("device_id") == device_id:
|
|
||||||
# Rückgabe: Layout-Infos + Raumname
|
|
||||||
return {
|
|
||||||
"device_id": device_id,
|
|
||||||
"room": room.get("name"),
|
|
||||||
"title": device.get("title"),
|
|
||||||
"icon": device.get("icon"),
|
|
||||||
"rank": device.get("rank"),
|
|
||||||
}
|
|
||||||
raise HTTPException(status_code=404, detail="Device layout not found")
|
|
||||||
|
|
||||||
@app.get("/devices/{device_id}/state")
|
|
||||||
async def get_device_state(device_id: str):
|
|
||||||
"""Gibt den aktuellen State für ein einzelnes Gerät zurück."""
|
|
||||||
state_path = Path(__file__).parent.parent.parent / "config" / "devices.yaml"
|
|
||||||
if not state_path.exists():
|
|
||||||
raise HTTPException(status_code=500, detail="State file not found")
|
|
||||||
with open(state_path, "r") as f:
|
|
||||||
config = yaml.safe_load(f)
|
|
||||||
states = config.get("states", {})
|
|
||||||
state = states.get(device_id)
|
|
||||||
if state is None:
|
|
||||||
raise HTTPException(status_code=404, detail="Device state not found")
|
|
||||||
return state
|
|
||||||
# --- Minimal-invasive: Einzelgerät-Layout-Endpunkt ---
|
|
||||||
from fastapi import Query
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# --- Minimal-invasive: Einzelgerät-Layout-Endpunkt ---
|
|
||||||
@app.get("/devices/{device_id}/layout")
|
|
||||||
async def get_device_layout(device_id: str):
|
|
||||||
"""Gibt die layout-spezifischen Informationen für ein einzelnes Gerät zurück."""
|
|
||||||
layout = load_layout()
|
|
||||||
for room in layout.get("rooms", []):
|
|
||||||
for device in room.get("devices", []):
|
|
||||||
if device.get("device_id") == device_id:
|
|
||||||
# Rückgabe: Layout-Infos + Raumname
|
|
||||||
return {
|
|
||||||
"device_id": device_id,
|
|
||||||
"room": room.get("name"),
|
|
||||||
"title": device.get("title"),
|
|
||||||
"icon": device.get("icon"),
|
|
||||||
"rank": device.get("rank"),
|
|
||||||
}
|
|
||||||
raise HTTPException(status_code=404, detail="Device layout not found")
|
|
||||||
|
|
||||||
# --- Minimal-invasive: Einzelgerät-State-Endpunkt ---
|
|
||||||
@app.get("/devices/{device_id}/state")
|
|
||||||
async def get_device_state(device_id: str):
|
|
||||||
"""Gibt den aktuellen State für ein einzelnes Gerät zurück."""
|
|
||||||
# States werden wie im Bulk-Endpoint geladen
|
|
||||||
state_path = Path(__file__).parent.parent.parent / "config" / "devices.yaml"
|
|
||||||
if not state_path.exists():
|
|
||||||
raise HTTPException(status_code=500, detail="State file not found")
|
|
||||||
with open(state_path, "r") as f:
|
|
||||||
config = yaml.safe_load(f)
|
|
||||||
states = config.get("states", {})
|
|
||||||
state = states.get(device_id)
|
|
||||||
if state is None:
|
|
||||||
raise HTTPException(status_code=404, detail="Device state not found")
|
|
||||||
return state
|
|
||||||
"""API main entry point.
|
"""API main entry point.
|
||||||
|
|
||||||
API-Analyse für HomeKit-Bridge Kompatibilität
|
API-Analyse für HomeKit-Bridge Kompatibilität
|
||||||
@@ -280,6 +213,74 @@ app.add_middleware(
|
|||||||
allow_headers=["*"],
|
allow_headers=["*"],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@app.get("/devices/{device_id}/layout")
|
||||||
|
async def get_device_layout(device_id: str):
|
||||||
|
"""Gibt die layout-spezifischen Informationen für ein einzelnes Gerät zurück."""
|
||||||
|
layout = load_layout()
|
||||||
|
for room in layout.get("rooms", []):
|
||||||
|
for device in room.get("devices", []):
|
||||||
|
if device.get("device_id") == device_id:
|
||||||
|
# Rückgabe: Layout-Infos + Raumname
|
||||||
|
return {
|
||||||
|
"device_id": device_id,
|
||||||
|
"room": room.get("name"),
|
||||||
|
"title": device.get("title"),
|
||||||
|
"icon": device.get("icon"),
|
||||||
|
"rank": device.get("rank"),
|
||||||
|
}
|
||||||
|
raise HTTPException(status_code=404, detail="Device layout not found")
|
||||||
|
|
||||||
|
@app.get("/devices/{device_id}/state")
|
||||||
|
async def get_device_state(device_id: str):
|
||||||
|
"""Gibt den aktuellen State für ein einzelnes Gerät zurück."""
|
||||||
|
state_path = Path(__file__).parent.parent.parent / "config" / "devices.yaml"
|
||||||
|
if not state_path.exists():
|
||||||
|
raise HTTPException(status_code=500, detail="State file not found")
|
||||||
|
with open(state_path, "r") as f:
|
||||||
|
config = yaml.safe_load(f)
|
||||||
|
states = config.get("states", {})
|
||||||
|
state = states.get(device_id)
|
||||||
|
if state is None:
|
||||||
|
raise HTTPException(status_code=404, detail="Device state not found")
|
||||||
|
return state
|
||||||
|
# --- Minimal-invasive: Einzelgerät-Layout-Endpunkt ---
|
||||||
|
from fastapi import Query
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# --- Minimal-invasive: Einzelgerät-Layout-Endpunkt ---
|
||||||
|
@app.get("/devices/{device_id}/layout")
|
||||||
|
async def get_device_layout(device_id: str):
|
||||||
|
"""Gibt die layout-spezifischen Informationen für ein einzelnes Gerät zurück."""
|
||||||
|
layout = load_layout()
|
||||||
|
for room in layout.get("rooms", []):
|
||||||
|
for device in room.get("devices", []):
|
||||||
|
if device.get("device_id") == device_id:
|
||||||
|
# Rückgabe: Layout-Infos + Raumname
|
||||||
|
return {
|
||||||
|
"device_id": device_id,
|
||||||
|
"room": room.get("name"),
|
||||||
|
"title": device.get("title"),
|
||||||
|
"icon": device.get("icon"),
|
||||||
|
"rank": device.get("rank"),
|
||||||
|
}
|
||||||
|
raise HTTPException(status_code=404, detail="Device layout not found")
|
||||||
|
|
||||||
|
# --- Minimal-invasive: Einzelgerät-State-Endpunkt ---
|
||||||
|
@app.get("/devices/{device_id}/state")
|
||||||
|
async def get_device_state(device_id: str):
|
||||||
|
"""Gibt den aktuellen State für ein einzelnes Gerät zurück."""
|
||||||
|
# States werden wie im Bulk-Endpoint geladen
|
||||||
|
state_path = Path(__file__).parent.parent.parent / "config" / "devices.yaml"
|
||||||
|
if not state_path.exists():
|
||||||
|
raise HTTPException(status_code=500, detail="State file not found")
|
||||||
|
with open(state_path, "r") as f:
|
||||||
|
config = yaml.safe_load(f)
|
||||||
|
states = config.get("states", {})
|
||||||
|
state = states.get(device_id)
|
||||||
|
if state is None:
|
||||||
|
raise HTTPException(status_code=404, detail="Device state not found")
|
||||||
|
return state
|
||||||
|
|
||||||
@app.on_event("startup")
|
@app.on_event("startup")
|
||||||
async def startup_event():
|
async def startup_event():
|
||||||
|
|||||||
Reference in New Issue
Block a user