---
title: We Brought a Weather Bot to a Festival. It Died on Day Three.
description: "A weather bot for an off-grid festival mesh: what it told the camp, how it most likely died on day three, and the field-gear checklist."
image: https://willcurran.com/hubfs/will-curran-brand/festival-weather-bot-featured.png
---

[Skip to content](https://willcurran.com/blog/festival-weather-bot#main)

[Will Curran](https://willcurran.com/)

[Home](https://willcurran.com/) [Portfolio](https://willcurran.com/portfolio) [Press](https://willcurran.com/media) [Blog](https://willcurran.com/blog) [Favorites](https://willcurran.com/favorites) [Speaking](https://willcurran.com/speaking) [Consulting](https://willcurran.com/consult) 

[Hire Will](https://willcurran.com/hire)

[Writing](https://willcurran.com/blog) Field notes — We Brought a Weather Bot to a Festival. It Died on Day Three. [Subscribe](https://willcurran.com/blog/subscribe)

Field notes

# We Brought a Weather Bot to a Festival. It Died on Day Three.

I brought a weather bot to a four-day festival's off-grid mesh, and it died on day three. The software held up; the lesson is that field gear needs the same power and heat discipline as stage gear.

![](https://willcurran.com/hs-fs/hubfs/will-curran-brand/will-curran-avatar.jpg?width=44&height=44&name=will-curran-avatar.jpg)

Will Curran Jul 1, 2026 · 6 min read

<https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fwillcurran.com%2Fblog%2Ffestival-weather-bot>

On this page

![An abstract radio node with a rain-cloud bubble above it, a thermometer reading warm, and a signal line that pulses with reboot glitches before going flat, beside the title It died on day three.](https://willcurran.com/hs-fs/hubfs/will-curran-brand/festival-weather-bot-featured.png?width=1600&height=900&name=festival-weather-bot-featured.png)

In June I brought a weather bot to a four-day music festival in the woods. It posted conditions, forecasts and rain warnings to an off-grid community radio mesh. It reboot-cycled for two days, died for good late on day three, and never came back.

I spent sixteen years building an event company. The one weather question a crowd in a field actually has is simple: do I need to head back before the rain? This build was my attempt to answer it for people off the grid. The answering part worked. The hardware didn't, and the reason is a lesson I already knew from stage gear and failed to apply to my own.

## What the bot did for the camp

The setup rode in my truck: a small LoRa mesh radio node, a Raspberry Pi, a cellular and satellite router with GPS, satellite internet, all running off the vehicle's USB power. The bot followed the truck's GPS, so its forecasts were for wherever the truck was parked.

It posted a few kinds of message to the mesh:

- **Hourly conditions**, plus a morning forecast.
- **A rain warning about six hours out**. This was the one that mattered.
- **"Forecast changed"**, but only on real drift: a temperature shift of 8°F or more, gusts crossing 20 mph, or a rain chance moving 30 points. Anything smaller stayed quiet.
- **A daily dad joke**, because morale is infrastructure too.

Hazard alerts went to two channels, the weather channel and the main one, so the whole mesh saw them. The all-clear stayed on the weather channel only. That came from community feedback. The hourly jobs also ran a few minutes after the hour, to stay clear of the burst of traffic that hits the uplink right at the top of it.

That is the event-production part, and it's the part I trust. Say less, say it when it changes what people do, and never make the crowd decode a forecast.

## How it died

On days one and two the radio node kept rebooting. It came back each time, so the bot limped along. Late on day three it went down hard and stayed down.

My best explanation is a brownout made worse by heat. The node is an ESP32 board, and those reset themselves when the supply voltage dips. A radio transmit pulls a burst of current, and every weak point in my power chain made the dip deeper: vehicle USB power, a thin long cable, and a hot enclosure.

I want to be straight about the confidence here: medium-high, not confirmed. I never got a serial console on the board to see the reset reason, because once it died I had no way to reach the setup remotely. The watchdog didn't save me either. I had set it to log-only on purpose, worried a brief glitch could send a node I couldn't physically reach into a reboot loop. So it watched the node die.

![Four-day uptime timeline for the weather node. Days 1 and 2: up, with reboots. Day 3: up, then down late in the day and never recovered. Day 4: down all day, no alerts. Illustrative: the reboots on days 1-2 and the failure late on day 3 are real; the counts and times are not.](https://willcurran.com/hs-fs/hubfs/will-curran-brand/festival-weather-bot-uptime-timeline.png?width=1440&height=1024&name=festival-weather-bot-uptime-timeline.png)

## Two quieter bugs that ate reports

The node's death was loud. Two other failures were quiet, and each one cost reports on its own.

**DNS dropped during satellite handovers.** The resolver the bot depended on failed during those handovers and stayed dark for about 90 seconds, so every retry in that window failed together. Switching the bot's lookups to DNS-over-HTTPS to a public resolver fixed it.

**Log text corrupted the GPS.** One function returned the location, and the script captured its output. When the node's own GPS fix went stale, a fallback path in that function wrote a log line to the same output. The log text got glued onto the latitude, the weather lookup got garbage, and roughly every other hourly report was lost. The fix was one rule: a function whose output gets captured sends all its logging to the error stream, never to its output.

Both bugs share a trait. The bot looked like it was running. It just wasn't saying anything useful, and you couldn't tell a quiet hour from a broken one.

## The field-gear checklist

- **Real power.** A regulated 5V supply rated for at least 2A, a short thick cable, and a 470 to 1,000 µF bulk capacitor or an inline USB UPS to hold the rail up during transmit bursts.
- **Heat management.** Venting, shade and a heatsink, then a hot-weather burn-in test.
- **A spare.** A second node, pre-flashed and ready, so a swap takes 60 seconds.
- **A watchdog that acts.** Auto power-cycle turned on, not log-only.
- **A way back in.** Remote access set up and tested, with its own watchdog.

## Field gear is stage gear

Here is the part that stings. On a show, nobody would run a stage on a thin extension cord off a borrowed outlet, in a closed road case, in the sun, with no spare on the truck. Stage gear gets clean power, airflow, a backup, and a tech who can reach it. I knew all of that for sixteen years, and then I built a little box for a field full of people and treated it like a desk gadget.

The software got the attention. Most likely, a power cable and a hot box ended the service. If a crowd is relying on it, it's production gear, whatever it costs, and it needs the same power and heat discipline as the rig on stage.

## If you are about to try this

- **Budget the power before the features.** Measure the current spike on transmit and size the supply and cable for it.
- **Test it hot.** A bench test in air conditioning tells you nothing about a hot truck.
- **Decide how you recover before you leave.** A spare in the bag, a watchdog that power-cycles, and a tested way to reach it remotely.

## Build it yourself

What it does: a mobile weather station for an off-grid mesh that posts conditions, forecasts and rain warnings for wherever it is parked. The parts:

- **An ESP32 LoRa mesh node** on the channels your crowd already uses.
- **A Raspberry Pi** or similar small computer to run the scheduled jobs.
- **An internet uplink** for forecast data. Mine was satellite through a cellular and satellite router.
- **A GPS source**: the node's own fix, with the router's as a fallback.
- **Clean power**: a regulated 5V supply, a short thick cable, a bulk capacitor or small USB UPS.

How the pieces fit: the Pi runs a handful of scheduled jobs a few minutes after the hour. Each one reads the current location, fetches a forecast for that spot, decides whether anything is worth saying, and sends a short message through the node. "Forecast changed" fires only when the change crosses a threshold. A watchdog checks the node and can power-cycle it.

Give this to your AIBuild me a weather bot for an off-grid LoRa mesh that runs on a small computer next to a mesh node. It reads its location from the node's GPS, falling back to a second GPS source when the node's fix is more than 30 minutes old. On a schedule a few minutes after the hour, it posts current conditions; each morning, a short forecast. It looks about six hours ahead and, if rain is coming, posts one plain instruction, debounced so it doesn't repeat. It posts a "forecast changed" message only when the high or low moves 8°F or more, gusts cross 20 mph, or the rain chance moves 30 points. Hazard warnings go to the main channel and the weather channel; the all-clear goes to the weather channel only. Resolve DNS over HTTPS for the bot's fetches, with 12-second connect timeouts and several spaced retries. Any function whose output is captured must log only to stderr. Add a watchdog that can power-cycle the node, with a cooldown so it can't loop.

If you run comms or tech for an event and have a better answer for keeping small gear alive in the heat, I'd like to hear it. I'm easy to reach.

NoteWritten October 2026, about a festival in June 2026.

Filed under [Field notes](https://willcurran.com/blog/tag/field-notes)

![](https://willcurran.com/hs-fs/hubfs/will-curran-brand/will-curran-avatar.jpg?width=64&height=64&name=will-curran-avatar.jpg)

Will Curran

I spent sixteen years building one company, and I have been in the event industry since 2007. These days I write about the technology I actually use — trucks, radios, home infrastructure, and the tools that survive past the first invoice.

[All posts by Will →](https://willcurran.com/blog/author/will-curran)

Get the next one by email

One email per post. No digest, no sponsors.

[← Previous Beat-Synced Visuals for a Whole DJ Library](https://willcurran.com/blog/beat-synced-visuals) [Next → How I Rebuilt willcurran.com With Claude Design and Claude Code](https://willcurran.com/blog/how-i-rebuilt-my-website-with-ai)

## Related reading

[Field notes Walk the Room: What Live Events Taught Me About Checks That Lie 4 min read](https://willcurran.com/blog/walk-the-room) [Field notes Transforming My Rivian R1T into the Ultimate Overlanding Machine 19 min read](https://willcurran.com/blog/rivian-r1t-overlanding-build) [Field notes My Camping and Overlanding Packing List 6 min read](https://willcurran.com/blog/camping-overlanding-packing-list)

[Will Curran](https://willcurran.com/)

[LinkedIn — 29,339+ followers](https://www.linkedin.com/in/willcurran) [GitHub](https://github.com/rancur) [YouTube](https://www.youtube.com/channel/UCJgscc27l4fpkWx1SeK05xg/) [Spotify](https://open.spotify.com/user/rancur) [SoundCloud DJ mixes](https://www.soundcloud.com/thewillsee) [Twitch](https://www.twitch.tv/thewillsee) [Last.fm](https://www.last.fm/user/default) [Trakt — movies & TV](https://trakt.tv/users/willcurran) [Goodreads](https://www.goodreads.com/user/show/55302838-will-curran) [Will See Music](https://www.thewillsee.com) [Arizona Meshtastic](https://azmsh.net) [Electric Forest Meshtastic](https://efmesh.com)

© 2026 Will Curran — All rights reserved. [RSS](https://willcurran.com/blog/rss.xml) [Back to top](https://willcurran.com/blog/festival-weather-bot#main)

```json
{
  "@context" : "https://schema.org",
  "@type" : "BlogPosting",
  "author" : {
    "@type" : "Person",
    "name" : "Will Curran",
    "url" : "https://willcurran.com/blog/author/will-curran"
  },
  "dateModified" : "2026-10-21T21:53:45.919Z",
  "datePublished" : "2026-07-01T16:00:00.000Z",
  "headline" : "We Brought a Weather Bot to a Festival. It Died on Day Three.",
  "image" : [ "https://willcurran.com/hubfs/will-curran-brand/festival-weather-bot-featured.png" ],
  "mainEntityOfPage" : {
    "@id" : "https://willcurran.com/blog/festival-weather-bot",
    "@type" : "WebPage"
  },
  "publisher" : {
    "@type" : "Organization",
    "logo" : {
      "@type" : "ImageObject",
      "url" : "https://willcurran.com/hubfs/image-1.png"
    },
    "name" : "Will Curran LLC"
  }
}
```