diff --git a/tuya-ipc-terminal/run.sh b/tuya-ipc-terminal/run.sh index 307cd46..204f94c 100644 --- a/tuya-ipc-terminal/run.sh +++ b/tuya-ipc-terminal/run.sh @@ -1,30 +1,74 @@ #!/usr/bin/with-contenv bashio -bashio::log.info "--- START DES SUPER-DEBUG-SKRIPTS ---" - -bashio::log.info "Schritt A: Überprüfe und setze Berechtigungen für das Expect-Skript..." -chmod +x /tuya_auth_login.exp -bashio::log.info "Berechtigungen gesetzt. Hier ist der Verzeichnis-Inhalt von /:" -ls -l / -bashio::log.info "Berechtigungs-Check abgeschlossen." - # Konfiguration lesen readonly TUYA_EMAIL=$(bashio::config 'TUYA_EMAIL') readonly TUYA_PASSWORD=$(bashio::config 'TUYA_PASSWORD') readonly TUYA_REGION=$(bashio::config 'TUYA_REGION') -bashio::log.info "Schritt B: Konfiguration wurde gelesen." -bashio::log.info "Region: ${TUYA_REGION}, Email: ${TUYA_EMAIL}" +# Prüfen, ob Konfiguration vorhanden ist +if [[ -z "${TUYA_EMAIL}" || -z "${TUYA_PASSWORD}" ]]; then + bashio::log.fatal "Tuya-E-Mail und Passwort müssen konfiguriert sein." + exit 1 +fi -bashio::log.info "Schritt C: Starte den Authentifizierungsprozess..." +# --- 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 -EXIT_CODE=$? -bashio::log.warning "Authentifizierungsprozess wurde mit Exit-Code beendet: ${EXIT_CODE}" -bashio::log.info "Schritt D: Authentifizierungsprozess ist beendet." -bashio::log.info "Wenn das Log hier endet, ist der Authentifizierungsprozess abgestürzt." +# --- 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 + + bashio::log.warning "Fehler bei der Synchronisierung der Kameras. Warte 10 Sekunden vor dem nächsten Versuch." + sleep 10 +done -bashio::log.info "--- SUPER-DEBUG-SKRIPT BEENDET ---" -bashio::log.warning "Das Addon wird nun stoppen. Bitte kopieren Sie das gesamte Log." +if [ "$SUCCESS" = false ]; then + bashio::log.fatal "Konnte Kameraliste nach ${RETRIES} Versuchen nicht abrufen. Addon wird beendet." + exit 1 +fi -exit 0 +# Starte den RTSP-Server im Hintergrund +bashio::log.info "Starte den Tuya RTSP-Server im Hintergrund..." +tuya-ipc-terminal rtsp start --port 8554 & +RTSP_PID=$! +sleep 2 +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." + exit 1 +fi + +# --- Start: Watchdog-Schleife zur Überwachung im Betrieb --- +bashio::log.info "Starte den Watchdog zur Überwachung der Sitzung." +while true; do + sleep 900 # Warte 15 Minuten + + if ! ps -p "${RTSP_PID}" > /dev/null; then + bashio::log.error "Watchdog: RTSP-Server-Prozess nicht gefunden! Starte das Addon neu." + exit 1 + fi + + bashio::log.info "Watchdog: Überprüfe den Status der Tuya-Sitzung..." + RESPONSE=$(tuya-ipc-terminal cameras refresh 2>&1) + + if echo "${RESPONSE}" | grep -q -E "401|USER_SESSION_LOSS|Not login"; then + bashio::log.error "Watchdog: Abgelaufene Sitzung erkannt! Starte das Addon neu." + kill "${RTSP_PID}" + exit 1 + else + bashio::log.info "Watchdog: Sitzung ist gültig und RTSP-Server läuft." + fi +done