Flatten so the repo root is the Arduino sketchbook; the project lives in
WeatherPredictor/. Add a collection index README at the root and move the
detailed project README into WeatherPredictor/.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Rework the 160x80 status screen: large predicted-weather icon in the
right window (scaled to fill), Wi-Fi/IP line at the bottom (or 'offline'),
colour-coded forecast category, and the trend arrow shown only when
rising/falling. Colours are built R/B-swapped for this BGR ST7735S panel.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Record each forecast change (Zambretti letter transition) with a
timestamp into a 24-entry ring buffer, persisted to LittleFS and
restored on boot. New /api/forecasts endpoint and a 'Forecast log'
panel in the web UI (newest first, category colour, timestamp).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add a City preset dropdown (Astana, Karaganda, Almaty, Bishkek,
Tashkent, Yekaterinburg, Omsk, Novosibirsk, Krasnoyarsk, Moscow,
Saint Petersburg) that fills altitude, coordinates and time zone from
average values. Manual entry and Custom remain; the matching preset is
auto-selected on load when coordinates match.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Time zone is now a UTC+/-HH dropdown (e.g. UTC+7) instead of raw
minutes. Barograph gains dual value axes (pressure left in hPa,
temperature right in C), start/end time labels and gridlines.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Dark dusk-indigo panel with brass/enamel accents, serif almanac
headings + monospace instrument readouts. Signature element: an
antique barometer dial with a live needle and a ghost 'set hand' at
the pressure 3h ago -- the trend made physical. Barograph, stat tiles
and settings kept quiet. Fully self-contained (no external fonts/CDNs).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Scan all samples for the newest one >=3h old instead of assuming
strictly increasing timestamps, so an NTP time correction no longer
breaks trend detection.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This LAN's router does not resolve external hostnames, so NTP uses
hard-coded Cloudflare/Google anycast IPs instead of names.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>