Fix HA websocket keepalive fallback
This commit is contained in:
12
app/main.py
12
app/main.py
@@ -100,7 +100,7 @@ async def lifespan(app: FastAPI) -> AsyncIterator[None]:
|
||||
app = FastAPI(
|
||||
title="SillyHome Next API",
|
||||
description="Lokales Smart-Home-Intelligenzsystem für Home Assistant.",
|
||||
version="0.7.7",
|
||||
version="0.7.8",
|
||||
lifespan=lifespan,
|
||||
)
|
||||
app.state.settings = load_settings()
|
||||
@@ -171,7 +171,7 @@ async def _ha_event_listener(app: FastAPI, client: HaClient) -> None:
|
||||
if ws_status is not None:
|
||||
ws_status.status = "connecting"
|
||||
try:
|
||||
async with websockets.connect(ws_url) as websocket:
|
||||
async with websockets.connect(ws_url, ping_interval=None) as websocket:
|
||||
auth_required_msg = await websocket.recv()
|
||||
auth_required_data = json.loads(auth_required_msg)
|
||||
if auth_required_data.get("type") != "auth_required":
|
||||
@@ -252,7 +252,13 @@ async def _fallback_prediction(app: FastAPI) -> None:
|
||||
Dies verhindert kompletten Ausfall der Vorhersagen bei Netzwerkproblemen.
|
||||
"""
|
||||
while True:
|
||||
await asyncio.sleep(app.state.settings.prediction_interval_seconds)
|
||||
ws_status = getattr(app.state, "ws_status", None)
|
||||
websocket_connected = ws_status is not None and ws_status.status == "connected"
|
||||
await asyncio.sleep(
|
||||
app.state.settings.prediction_interval_seconds
|
||||
if websocket_connected
|
||||
else min(5, app.state.settings.prediction_interval_seconds)
|
||||
)
|
||||
# Nur ausführen, wenn WebSocket nicht verbunden ist
|
||||
ws_status = getattr(app.state, "ws_status", None)
|
||||
if ws_status is None or ws_status.status != "connected":
|
||||
|
||||
Reference in New Issue
Block a user