diff --git a/bridge/aria_bridge.py b/bridge/aria_bridge.py index 72b073f..41baf6f 100644 --- a/bridge/aria_bridge.py +++ b/bridge/aria_bridge.py @@ -1614,10 +1614,21 @@ class ARIABridge: except websockets.ConnectionClosed: logger.warning("[rvs] Verbindung verloren") + # Bei Reconnect wieder primary (wss://) versuchen — die + # Bedingungen die zum Fallback gefuehrt haben sind transient + # (z.B. Caddy noch nicht fertig mit ACME). + if using_fallback: + logger.info("[rvs] Reset auf primary URL fuer Reconnect-Versuch") + current_url = self.rvs_url + using_fallback = False except ConnectionRefusedError: logger.warning("[rvs] Nicht erreichbar") + if using_fallback: + current_url = self.rvs_url + using_fallback = False except (ssl.SSLError, OSError) as e: - # TLS-Fehler — Fallback auf ws:// versuchen + # TLS-Fehler — Fallback auf ws:// nur einmal pro Connect-Versuch, + # bei naechstem Reconnect wieder primary probieren. if not using_fallback and self.rvs_url_fallback: logger.warning("[rvs] TLS-Fehler: %s", e) logger.warning("[rvs] TLS gewollt aber nicht verfuegbar — Fallback auf ws://") @@ -1626,8 +1637,17 @@ class ARIABridge: retry_delay = 1 # Sofort versuchen else: logger.error("[rvs] SSL-Fehler (kein Fallback): %s", e) - except Exception: + # Auch hier: nach gescheitertem Fallback wieder primary probieren + current_url = self.rvs_url + using_fallback = False + except Exception as e: logger.exception("[rvs] WebSocket-Fehler") + # InvalidMessage (HTTP 400 von TLS-Endpoint bei ws-Connect) + # → wir kleben auf dem falschen Fallback, zurueck zu primary. + if using_fallback: + logger.warning("[rvs] Fallback liefert auch nichts — schalte zurueck auf primary") + current_url = self.rvs_url + using_fallback = False finally: self.ws_rvs = None