#!/usr/bin/env bash # wartungsfenster.sh — wann die Box nach einem Update neu starten darf (zum Einbinden, seit 24.09.2026). # # autoupdate.sh bindet es ein (source). Das Fenster beginnt zur vollen Stunde des eingestellten Update-Beginns und # dauert drei Stunden: Standard So 04:30 → Sonntag 04:00–06:59 (so stand es bis 24.09. fest in autoupdate.sh). # Den Beginn stellt die Oberfläche ein (Einstellungen → Update-Zeitfenster); sie legt ihn in der Einstellungsdatei # ab und stellt den Timer um (backend/services/einstellungen.py, dort steht dieselbe Regel als Text für die Anzeige). # # Test-Schalter: MC_WARTUNGSFENSTER=" " statt der Datei, MC_FENSTER_JETZT=" " # (Zeit vortäuschen), MC_EINSTELLUNGEN (andere Datei). WARTUNG_EINSTELLUNGEN="${MC_EINSTELLUNGEN:-/srv/models/mc2-einstellungen.json}" WARTUNG_DAUER_MIN=180 WARTUNG_TAGE=(Montag Dienstag Mittwoch Donnerstag Freitag Samstag Sonntag) # Setzt FENSTER_TAG (1 = Montag … 7 = Sonntag) und FENSTER_STUNDE. Fehlt die Datei oder steht Unsinn darin: So 04:30. fenster_lesen() { local roh="${MC_WARTUNGSFENSTER:-}" tag uhr if [ -z "$roh" ] && [ -r "$WARTUNG_EINSTELLUNGEN" ] && command -v jq >/dev/null 2>&1; then roh="$(jq -r '"\(.update_fenster.tag // 7) \(.update_fenster.uhrzeit // "04:30")"' "$WARTUNG_EINSTELLUNGEN" \ 2>/dev/null)" fi tag="${roh%% *}" uhr="${roh#* }" if ! [[ "$tag" =~ ^[1-7]$ && "$uhr" =~ ^([01][0-9]|2[0-3]):[0-5][0-9]$ ]]; then tag=7 uhr="04:30" fi FENSTER_TAG="$tag" FENSTER_STUNDE="$((10#${uhr%%:*}))" } # Erfolg (0), wenn jetzt Neustart-Zeit ist. Rechnet in Minuten ab Montag 00:00, damit ein Fenster über Mitternacht # (Samstag 23:00 – Sonntag 01:59) und über das Wochenende hinaus (Sonntag 23:00 – Montag 01:59) stimmt. im_wartungsfenster() { fenster_lesen local jetzt="${MC_FENSTER_JETZT:-$(date '+%u %H:%M')}" tag uhr minute beginn tag="${jetzt%% *}" uhr="${jetzt#* }" minute=$(( (tag - 1) * 1440 + 10#${uhr%%:*} * 60 + 10#${uhr##*:} )) beginn=$(( (FENSTER_TAG - 1) * 1440 + FENSTER_STUNDE * 60 )) [ $(( (minute - beginn + 10080) % 10080 )) -lt "$WARTUNG_DAUER_MIN" ] } # Das Fenster in Worten, etwa „Sonntag 04:00–06:59“ oder „Samstag 23:00 – Sonntag 01:59“. fenster_text() { fenster_lesen local ende=$(( FENSTER_STUNDE * 60 + WARTUNG_DAUER_MIN - 1 )) tag_ende="$FENSTER_TAG" von bis if [ "$ende" -ge 1440 ]; then ende=$(( ende - 1440 )) tag_ende=$(( FENSTER_TAG % 7 + 1 )) fi von="$(printf '%02d:00' "$FENSTER_STUNDE")" bis="$(printf '%02d:%02d' $(( ende / 60 )) $(( ende % 60 )))" if [ "$tag_ende" = "$FENSTER_TAG" ]; then printf '%s %s–%s' "${WARTUNG_TAGE[FENSTER_TAG - 1]}" "$von" "$bis" else printf '%s %s – %s %s' "${WARTUNG_TAGE[FENSTER_TAG - 1]}" "$von" "${WARTUNG_TAGE[tag_ende - 1]}" "$bis" fi }