⚙️ Under the hood · Threlkeld Nature Watch

Data & How-To

Everything this site measures is open. Download the raw records below in JSON or CSV, then read exactly how the whole thing is built — the sensors in the garden, the code that moves the data, and how you could put your own version on your own patch.

Export

Take the data

Each feed below is pulled live from the same files the site itself reads. JSON is the raw record exactly as stored; CSV is flattened for spreadsheets. Nothing is paywalled and nothing is tracked — it's the valley's data.

Counts update live when the page loads. Some feeds (weather, river level) also stream over MQTT in real time — see the build guide below for the broker details if you'd rather subscribe to the live stream than download a snapshot.
How it works

From a sound in the garden to a line on a chart

Every feed follows the same shape: a sensor captures something, a small computer makes sense of it, a message bus carries it, and a static file lands where the website can read it. No cloud database, no server farm — just a couple of Raspberry Pis and a Home Assistant box doing steady work.

Capture
Sensors
Garden mic, ultrasonic bat detector, rooftop weather station, EA river gauge, ADS-B flight feed.
Interpret
Raspberry Pi
BirdNET-Pi identifies birdsong; a second Pi runs bat-call analysis. Each writes its own database.
Move
Node-RED + MQTT
Flows gather, tidy and publish each feed to an MQTT topic, and write static JSON snapshots.
Show
Static site
Plain HTML on GitHub Pages reads the JSON and the live MQTT stream. No backend.

A few principles hold it together: data is sourced as locally as possible; everything is backed up off-site nightly (databases, scripts and the flows themselves); and a watchdog keeps an eye on the feeds and sends a message if any of them fall quiet.

Build your own

Put one on your own patch

If you fancy doing this where you live, here's the honest route from nothing to a working bird page. You don't need all of it — the birdsong half stands alone and is the best place to start.

Start with birdsong

Get a Raspberry Pi (a 4 with 4GB is plenty) and a decent USB microphone, then install BirdNET-Pi. It listens continuously, identifies species from their calls using a neural network, and stores every detection in a small database with a confidence score. This alone is genuinely magical — within a day you'll have a list of what's singing in your garden.

Give it somewhere to send data

Run Home Assistant (a Pi or a small mini-PC works). Add the Node-RED add-on — this is where the wiring happens. Node-RED is a visual, drag-the-boxes tool; you don't have to be a programmer to get a long way with it.

Move the data with MQTT

MQTT is a lightweight message bus — one thing publishes, others subscribe. A Node-RED flow reads the BirdNET database every few minutes and publishes the latest detections to a topic. For a hobby setup the free public broker broker.hivemq.com is fine; for anything you care about, run your own (Mosquitto is the usual choice).

  • Publish a small JSON payload per feed (e.g. { "species": "...", "count": 12 })
  • Use retained messages so a fresh page load gets the last value immediately
  • Also write a static .json file — it's the reliable fallback when a retained message is slow to arrive

Put a page in front of it

A single HTML file can do the lot: fetch() the static JSON on load for instant data, then connect to MQTT over websockets for live updates. Host it free on GitHub Pages. No server, no database, no running costs — the page is just a reader of files the Pi produces.

Add more senses

Once the bird half works, the same pattern extends to everything else: an ultrasonic detector for bats, a weather station on the roof, your local river gauge from the Environment Agency's open flood-monitoring API, ADS-B for aircraft overhead. Each is just another sensor → Pi → MQTT → file → page.

Make it robust

The unglamorous part that matters most. Back up the databases and your scripts and flows somewhere off the Pi (a private Git repo works well, scrubbed of any keys). Add a watchdog that checks each feed is still arriving and messages you if one goes silent. A microSD card will fail eventually — plan for the day it does.

The parts list at Threlkeld

For reference, here's what's actually running here. None of it is exotic.

PartWhat it does
Raspberry Pi 4 (4GB)Runs BirdNET-Pi with a USB microphone in the garden
Second Pi + ultrasonic micRecords and classifies bat echolocation calls overnight
Rooftop weather stationTemperature, wind, pressure, humidity, rainfall
Home Assistant boxHosts Node-RED, MQTT plumbing and the watchdog
EA flood-monitoring APIRiver Glenderamackin level from a gauge ~500m away
ADS-B / FlightRadar24 feedAircraft passing overhead, logged and mapped
GitHub PagesHosts the static site — free, no backend
On the workbench

Coming next

Two things are planned for this page but not built yet — flagged honestly rather than promised.

Planned

Data digest by email

Subscribe to a daily or weekly dump of the valley's data, delivered to your inbox — built on the same system that already sends the weekly nature email.

Later

A proper API

Stable, documented endpoints you can query directly — so you can build your own things on top of Threlkeld's data, not just download snapshots.