Files
grossanzeige/deploy.sh
admin 0e4bb025ef OTA-Update per MQTT
Neues Kommando <PREFIX>/cmd/ota loest ota.update() aus: laedt die
Projektdateien per HTTP, erst als temporaere .ota-Dateien, und benennt
sie nur bei vollem Erfolg um. Schlaegt ein Download fehl, bleiben die
bisherigen Dateien unveraendert -- die Anzeige laeuft mit der alten
Version weiter (Grundsatz wie beim Rest von MQTT: eine fehlgeschlagene
OTA darf das Geraet nicht unbrauchbar machen).

Am Gerät bestätigt, inkl. echtem Reboot: leere/ungueltige Payload,
unbekanntes Kommando und nicht erreichbarer Server werden abgefangen,
die Poll-Schleife laeuft unbeeinflusst weiter. Ein echtes Update mit
allen Projektdateien kam sauber ueber main.py-Autostart wieder hoch.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017zTSXLK4w32PoCmFgSzp68
2026-09-04 17:34:58 +02:00

80 lines
2.2 KiB
Bash
Executable File

#!/bin/sh
# Die Projektdateien auf den XIAO ESP32-C3 kopieren.
#
# ./deploy.sh # alle Dateien kopieren
# ./deploy.sh /dev/cu.usbmodem1101 # anderen Port erzwingen
#
# Braucht mpremote: pip install mpremote
# Danach am REPL (mpremote repl, mit Ctrl-] wieder raus):
#
# import run_esp32
# run_esp32.main()
set -e
PORT="${1:-auto}"
# Alles, was auf dem Geraet gebraucht wird. run_display.py, show_coords.py,
# mount_mock.py und die Tests bleiben auf dem Mac -- sie brauchen argparse
# bzw. threading.
#
# probe.py kommt mit aufs Geraet: Seit die Anzeige am ESP32 haengt und nicht mehr
# am Mac, laesst sich die Geometrie nur noch von dort ausmessen. Es benutzt zwar
# sys.argv, aber nur in main() -- die Messfunktionen ruft man am REPL direkt auf:
# import probe, display
# d = display.open_display(); probe.pitch(d, 6); d.close()
#
# settings.json steht bewusst NICHT in dieser Liste: Das ist Laufzeitzustand auf
# dem Geraet (Helligkeiten, Schwelle -- spaeter per MQTT verstellt). Wuerde
# deploy.sh sie mitkopieren, waeren diese Einstellungen nach jedem Deployen weg.
# Fehlt die Datei, gelten die Vorgaben aus settings.DEFAULTS.
#
# main.py startet die Anzeige nach jedem Reset von selbst. Wer am Geraet
# arbeiten will, drueckt im Startfenster Ctrl-C (siehe main.py) -- oder loescht
# sie mit: mpremote rm :main.py
FILES="
ticks.py
migra.py
config.py
settings.py
transport.py
display.py
coords.py
lx200.py
mount_client.py
brightness.py
displayloop.py
wifi.py
mqtt.py
ota.py
run_esp32.py
probe.py
main.py
"
if [ ! -f wifi_config.py ]; then
echo "wifi_config.py fehlt." >&2
echo " cp wifi_config_example.py wifi_config.py und ausfuellen" >&2
exit 1
fi
# mqtt_config.py ist optional: Fehlt sie, laeuft die Anzeige ohne MQTT weiter.
EXTRA="wifi_config.py"
if [ -f mqtt_config.py ]; then
EXTRA="$EXTRA mqtt_config.py"
else
echo "Hinweis: mqtt_config.py fehlt -- laeuft ohne MQTT."
echo " cp mqtt_config_example.py mqtt_config.py und ausfuellen"
fi
for f in $FILES $EXTRA; do
echo "-> $f"
mpremote connect "$PORT" fs cp "$f" ":$f"
done
echo
echo "Fertig. Starten mit:"
echo " mpremote connect $PORT repl"
echo " >>> import run_esp32"
echo " >>> run_esp32.main()"