From e36af376b5015652859e2e9323f1e4a2a2d72eef Mon Sep 17 00:00:00 2001 From: admin Date: Thu, 16 Oct 2025 18:06:15 +0000 Subject: [PATCH] tuya-ipc-terminal/run.sh aktualisiert --- tuya-ipc-terminal/run.sh | 54 +++++++++++++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 12 deletions(-) diff --git a/tuya-ipc-terminal/run.sh b/tuya-ipc-terminal/run.sh index 43eddc9..f77f8e1 100644 --- a/tuya-ipc-terminal/run.sh +++ b/tuya-ipc-terminal/run.sh @@ -11,39 +11,69 @@ if [[ -z "${TUYA_EMAIL}" || -z "${TUYA_PASSWORD}" ]]; then exit 1 fi -# --- Start: Authentifizierung beim Start --- +# --- START: Authentifizierung und Kamera-Sync --- bashio::log.info "Authentifizierung bei Tuya..." printf "%s\n%s\n%s\n" "${TUYA_REGION}" "${TUYA_EMAIL}" "${TUYA_PASSWORD}" | /tuya_auth_login.exp -# --- Ende: Authentifizierung beim Start --- +# --- NEU & WICHTIG: Kamera-Refresh mit Wiederholungslogik --- +bashio::log.info "Synchronisiere Kameraliste mit Tuya-Cloud..." +RETRIES=5 +SUCCESS=false +for i in $(seq 1 $RETRIES); do + bashio::log.info "Versuch ${i}/${RETRIES}, die Kameraliste abzurufen..." + + # Führe den Refresh-Befehl aus und prüfe den Exit-Code + if tuya-ipc-terminal cameras refresh; then + bashio::log.info "Kameraliste erfolgreich synchronisiert." + SUCCESS=true + break # Die Schleife bei Erfolg verlassen + fi + + # Nur wenn der Befehl fehlschlägt, eine Warnung ausgeben und warten + bashio::log.warning "Fehler bei der Synchronisierung der Kameras. Warte 10 Sekunden vor dem nächsten Versuch." + sleep 10 +done + +# Wenn nach allen Versuchen kein Erfolg erzielt wurde, Addon beenden +if [ "$SUCCESS" = false ]; then + bashio::log.fatal "Konnte Kameraliste nach ${RETRIES} Versuchen nicht abrufen. Addon wird beendet." + exit 1 +fi +# --- ENDE NEU & WICHTIG --- # Starte den RTSP-Server im Hintergrund bashio::log.info "Starte den Tuya RTSP-Server im Hintergrund..." tuya-ipc-terminal rtsp start --port 8554 & -# Speichere die Prozess-ID (PID) des RTSP-Servers RTSP_PID=$! +sleep 2 # Kurze Pause, um dem Prozess Zeit zum Starten zu geben bashio::log.info "RTSP-Server gestartet mit PID ${RTSP_PID}." +# Überprüfe, ob der Prozess wirklich gestartet wurde +if ! ps -p "${RTSP_PID}" > /dev/null; then + bashio::log.fatal "RTSP-Server konnte nicht gestartet werden oder ist sofort abgestürzt. Bitte prüfen Sie das Log." + exit 1 +fi -# --- Start: Watchdog-Schleife --- +# --- Start: Watchdog-Schleife zur Überwachung im Betrieb --- bashio::log.info "Starte den Watchdog zur Überwachung der Sitzung." while true; do - # Warte für 15 Minuten bevor der nächste Check durchgeführt wird - sleep 900 + sleep 900 # Warte 15 Minuten + # Prüfe zuerst, ob der Server-Prozess noch läuft + if ! ps -p "${RTSP_PID}" > /dev/null; then + bashio::log.error "Watchdog: RTSP-Server-Prozess nicht gefunden! Starte das Addon neu." + exit 1 + fi + + # Wenn der Prozess läuft, prüfe die Sitzung bashio::log.info "Watchdog: Überprüfe den Status der Tuya-Sitzung..." RESPONSE=$(tuya-ipc-terminal cameras refresh 2>&1) - # Prüfe auf Sitzungsfehler if echo "${RESPONSE}" | grep -q -E "401|USER_SESSION_LOSS|Not login"; then bashio::log.error "Watchdog: Abgelaufene Sitzung erkannt! Starte das Addon neu." - - # Beende den RTSP-Server-Prozess, damit das Addon sauber neu gestartet werden kann kill "${RTSP_PID}" - - # Das Beenden des Skripts (exit 1) veranlasst den Supervisor zum Neustart exit 1 else - bashio::log.info "Watchdog: Sitzung ist weiterhin gültig." + bashio::log.info "Watchdog: Sitzung ist gültig und RTSP-Server läuft." fi done