Weather turns any RCWeb-capable display into a cinematic, signage-ready dashboard of the current weather for a configurable (or random) location, powered by the free Open-Meteo API. It cycles between several full-screen pages so the same display can show now, the hourly trend, the 7-day forecast, atmospheric details and sun & sky — all without anyone having to touch it.

The dashboard loops through five pages, each filling the screen:
The atmospheric backdrop adapts to the actual conditions: clear day with a sunny sky, clear night with a starfield, drifting clouds, animated rain or snow, fog haze, or stormy darkness for thunderstorms. A small QR code in the corner links to the weather-c companion app.
This is a classic RCWeb asymmetric viewer. The viewer owns all state — the active location, options (units, page list, page duration), the loaded data, and the current page index. It exposes a small public API on window.weather:
weather.setLocation({ name, country, latitude, longitude, timezone })
weather.setOptions({ tempUnit, windUnit, precipUnit, pageMs, pages })
weather.next()
weather.prev()
weather.goto(pageId | index)
weather.refresh()
weather.randomize()
weather.requestState(clientId)
Whenever the active page changes, the location changes, or fresh data arrives, the viewer pushes a snapshot to every weather-c client in the room with rc.sendFunctionCall("weather-c", "weatherControl.receiveState", snapshot). Newly joining controllers also call weather.requestState(rc.client) to ask for a fresh snapshot addressed back to them.
If no location has been configured, the viewer picks one of about twenty geographically diverse cities at random on first load (Tokyo, Reykjavik, Sydney, Cape Town, Cairo, Honolulu, Marrakesh, Helsinki, ...). The controller's Surprise me button can request a fresh random pick at any time.
Written in ES5 with XMLHttpRequest, vendor-prefixed CSS animations, plain Flexbox layout, no CSS Grid and no CSS custom properties, so it runs comfortably on older signage browsers as well as modern desktop and mobile browsers.
/weather/?r=<room>