The DREAM Robotics weather station
- Robot Type: Weather station (a PC program with her own Arduino sensor)
Site: cursedprograms.github.io/AURA
The fleet's weather station. AURA knows what it's like outside, what it's like in every room a robot is in, and plots one against the other.
ARIA |
KIDA-01 |
KIDA-00 |
WHIP |
NORA |
MILA |
NIKA |
IDA |
ARM |
DREAM |
RIFT |
RITA |
TINA |
NINA |
FLORA |
- Outside: the current weather where you are, from Open-Meteo (open source, free, no API key): temperature, feels-like, humidity, wind, today's high and low, and the chance of rain. It's refreshed every 10 minutes.
- Her own sensor: an AHT10 temperature and humidity sensor on an Arduino over USB (
scripts/aura_sensor), the same sensor and code as MILA's. - The fleet: every robot that already reports temperature and humidity: MILA (
/status), NORA (/sensors), and anything else withtemp/humin its status. She finds them in RIFT's fleet list and asks them every minute, over WiFi, or over Bluetooth for a robot you list inBluetooth. A robot can also push its reading:POST /report. - The graph: inside against outside (outside dashed), temperature or humidity, over 6 hours, 24 hours or 7 days. One reading a minute per source is kept for 7 days in
data/history.csvand read back when she starts, so the graph carries on from last time (a gap where she was off). - Everything else Open-Meteo knows (the same free forecast call), in The details on her page:
- Barometer: sea-level and surface pressure, and the trend over 3 hours ("falling fast" is the classic storm sign).
- Wind: speed, gusts and direction, and today's strongest gust.
- Clouds: total, and low, middle and high separately. Visibility (under 1 km: fog).
- Dew point: how the air really feels (dry, comfortable, a bit humid, muggy, oppressive).
- Storm energy: CAPE and the lifted index (an earlier storm hint than the forecast code), and lightning potential where the model has it (Europe).
- Rain and snow in detail: rain, showers, snowfall, snow depth, today's total and hours of rain, and the freezing level.
- Sun: sunshine today, daylight and how much longer or shorter it is than yesterday, solar radiation, and UV under a clear sky.
- Ground: soil temperature (surface and 6 cm) and moisture, evaporation, and how much water plants lose today (ET₀).
- The coast (
/coaston her page): the nearest sea, found by herself (she looks right where you are first, then in rings of points 50 km apart until the marine model has real sea: a temperature, a tide and waves), or a coastal city you set inCoast. Tides (high and low, and a 48-hour chart: the modelled sea level, not for navigation), sea temperature, waves, swell and wind waves (height, period, direction), the ocean current, and a quick read of the surf. The nearest town comes from OpenStreetMap, once, and is remembered indata/coast.json. Ask her: "when is high tide?", "how's the surf?" - Her own rain guess: she starts from Open-Meteo's chance for the next few hours and moves it with what she senses: humidity rising (or falling) across every sensor in the fleet, air close to its dew point, the barometer falling fast, storm energy. Each sensor is averaged in, so the more of them report, the steadier it is and the surer she is (low, medium or high confidence). Indoor sensors only follow the outside air slowly, so they nudge her guess rather than make it. Ask her: "will it rain?"
- Every robot in its own colour: on the graph, each robot's line is the accent from its own
colour_scheme.xml(NORA yellow, MILA cyan, KIDA-01 pink...), and its readings are saved with the rest. - Which city: her page has a dropdown of cities. It starts at your internet connection's city, and picking another one shows that city's weather, but the graph's outside line always stays home. Save as my location makes a city home: it's written to
location.json(gitignored, and only there once you've saved one). Use my connection's city goes back. - Europe (
/europeon her page): what Open-Meteo only has for Europe: six pollens (alder, birch, grass, mugwort, olive, ragweed) now and over the next 24 hours, ammonia, and the lightning potential for the next 12 hours (central Europe), with the European air quality index and its parts. Outside Europe it says so, and you can look at any European city. - What's coming: the next 6 hours, hour by hour: when rain looks likely (60 % or more, or it's in the forecast) and when a thunderstorm is forecast. Air: air quality (US AQI, PM2.5) and pollen from Open-Meteo's free air-quality service, every 30 minutes (pollen is only measured in Europe). DREAM uses all of this to mention the weather now and then, the way a person would.
- The sky: sunrise, sunset and the UV index (Open-Meteo), and the moon's phase, worked out on the PC (no internet needed): how lit it is and the days to the next full moon.
- Obsessed with the weather: she has NINA's storyteller (Karpathy's 15M TinyStories model, NumPy only, no GPU) and every story is about the weather: she opens it with the real sky ("Today there was light rain and it was cold...") and the little model tells the rest. Tell me a weather story on her page, or
GET /story. Ask her anything and she brings it back to the weather. - Ask her:
GET /ask?q=...: the weather, a robot's readings ("how warm is it at MILA?"), the moon, sunrise and sunset, the barometer, wind, clouds and stargazing, mugginess, fog, thunderstorms, the garden ("should I water the plants?"), sunscreen, whether the days are getting longer, snow, or a story. DREAM asks her this way. - Brainfuck, like the fleet: she registers
talk:5017, so RIFT's conversations include her (/chirp?u=, beeped on the PC speaker in her light voice). When DREAM asks for the weather, DREAM beeps "wx?" (utterance 17) first and AURA beeps the sky back in one word: sun, cloud, rain, fog, snow, storm, hot or cold (18-25, RIFT'sFleet/talk_bf.json). Then DREAM says AURA's answer in words. - In her own words: "It's 27° and mostly clear outside, a 69% chance of rain today, so take an umbrella, 22° in here, MILA has the warmest spot at 25°."
The internet she uses comes through the fleet: everything on the "RIFT" WiFi shares the hub PC's connection (RIFT's README, "The fleet network").
- Flash
scripts/aura_sensor/aura_sensor.inoto an Arduino UNO or Nano, wired to an AHT10: VIN to 5V (or 3.3V), GND to GND, SDA to A4, SCL to A5. Plug it into the PC. - Run
run.bat. The first time, it sets upvenvand installsrequirements.txt. Her page is at http://127.0.0.1:5017/. - Or open
builds/aura.exe: her page in a window. It startsrun.batif she isn't running.
She finds her Arduino by herself: the port that answers WHO with I am AURA.
- Windows:
builds/aura.exe. Keep it inbuilds/. Source:scripts/web_controller(build.bat, Visual Studio 2022). - Android:
Android App/(packagecom.synthwomb.aura), her page full screen. FIND gets her address from RIFT's fleet list, or type it in. Install:AURA-debug-2026-11-05.apk. Build it withgradlew assembleDebug(JDK 17).
| Setting | Default | What it does |
|---|---|---|
Port |
5017 |
Her page and API |
RiftHost, RiftPort |
127.0.0.1, 5000 |
Where RIFT's fleet list is: she registers there and reads the robots from it |
Location |
empty | Latitude + Longitude (and a Name), or a City that Open-Meteo looks up. Empty: your internet connection's city. A city saved on her page (location.json) comes first |
Coast |
empty | A coastal city for the coast page. Empty: the nearest coast to her location |
Cities |
ten cities | The dropdown on her page (a city typed under "Another city..." is remembered by that browser) |
Units |
C |
C or F |
WeatherMinutes |
10 |
How often she asks Open-Meteo |
FleetSeconds |
60 |
How often she asks the robots |
BoardPort, BoardBaud |
auto, 9600 |
Her Arduino: found by itself, or a port like COM5 |
HistoryDays, SampleSeconds |
7, 60 |
How long readings are kept, and one per how many seconds per source |
Bluetooth |
{} |
Robots to read over Bluetooth instead of WiFi: {"NORA": "COM7"} (the port the paired robot got, or its address) |
BluetoothServer |
true |
Her own API over Bluetooth serial too (fleet_bt.py, RFCOMM channel 1), for controllers without WiFi |
FleetLadder |
false |
The fleet's WiFi ladder: her rung is after TINA (RIFT > DREAM > NINA > TINA > AURA > the controllers...). Off, like NINA's and DREAM's, she just registers with RIFT |
| Request | Answer |
|---|---|
GET /api/now |
Outside (with soon: rain and storms in the next 6 hours), the air, the moon, every room's latest reading, where she is, what she says, and any problems |
GET /api/history?hours=24 |
Every source's readings: [time, temp, hum] |
GET /ask?q=... |
Her answer in words, and her Brainfuck word for the sky (chirp=1: she beeps it too) |
GET /story |
A weather story (about 10 s) |
GET /chirp?u=n |
Beeps utterance n of RIFT's phrasebook, in her voice (RIFT's conversations) |
GET /status |
Like any robot's: temp, hum (hers), outside_temp, outside_hum, weather, says |
POST /report |
{"name": "KIDA01", "temp": 23.1, "hum": 45} from a robot that would rather push |
GET /ping |
AURA alive |
She registers with RIFT as weather with weather,climate,web:5017,talk:5017,ask:5017. RIFT's Ask & tell shows her temperature and humidity and, from Open-Meteo, outside.
Her Arduino, at 9600 baud: TEMP:21.4 and HUM:48.2 every 5 s, AHT_ERROR when the sensor doesn't answer. WHO answers I am AURA, READ measures now.
venv\Scripts\python.exe -m pytest tests
Readings in every robot's format, the history file, her sentences, the location and weather (no network), the moon, her Brainfuck word for the sky, her answers, and the API.
aura.py her server: weather, Arduino, fleet, history, page, API
config.json her settings
fleet_bt.py, fleet_ladder.py the fleet's Bluetooth link and WiFi ladder (master copies: RIFT/Fleet)
story.py the storyteller (NINA's, with weather openings); its model goes in models/
templates/, static/ her page (HTML, CSS, JS: the graph is a plain canvas)
scripts/aura_sensor/ the Arduino sketch (AHT10)
scripts/web_controller/ builds/aura.exe
Android App/ the Android app
tests/ pytest
index.html, site/ the GitHub Pages site
Her colours: the night sky (#070B14), her sky blue (#5EC8F2) and the sun's amber (#F2A65E).
Minds — DREAM companion · TINA engineer · NINA caretaker · RIFT fleet hub · LYCEA training school
Robots — NORA · MILA · WHIP · KIDA-00 · KIDA-01 · IDA · ARM · NIKA · ARIA · AURA weather
Remotes — RITA handheld remote