Skip to the content.

OTA Update Guide

The authoritative OTA documentation lives in docs/MANUAL.md, section 12 “Firmware updates” — this page is just a quick recipe.

Requirements

Steps

NONCE=$(curl -s http://<device-ip>/api/login_init | jq -r .nonce)
PASS_HASH=$(echo -n '<password>' | sha256sum | cut -d' ' -f1)
curl -s -c cookies.txt http://<device-ip>/api/login \
     -d "user=admin&pass=$PASS_HASH&nonce=$NONCE"

2. Stage the image

curl -s -b cookies.txt \
     -F "file=@simut_vX.Y.Z.bin" \
     "http://<device-ip>/api/restore?op=stage&commit=1"

Takes about 30 s for a ~1 MB image — do not power off. The response must report "v":0 and "committed":1 before apply will do anything.

3. Apply

curl -s -b cookies.txt -X POST http://<device-ip>/api/ota/apply

Answers 202 and the device reboots. If it answers 503 “Display in use”, retry after a few seconds.

4. Verify

Read the firmware version back from /api/status or from the display. Never infer success from timing or HTTP codes alone — the only proof of an installed update is the new version reporting itself.

What survives, what doesn’t

A config snapshot carries Wi-Fi credentials, users and sensor slots across the apply. The LittleFS filesystem — history, language packs, calibration — is REFORMATTED by the apply. Take a backup first (web file manager → Backup).

Network note

If uploads on port 80 stall on your network, some routers kill long port-80 flows; using an alternate HTTP port works around it.