Walker-Jones Weather About This Station
EN|DE
How It Works

Walker-Jones Weather is a personal weather station based in Schwendi, Baden-WΓΌrttemberg, Germany. It uses a Bresser 7-in-1 wireless sensor in the garden to measure temperature, humidity, wind speed and direction, rainfall, UV index, and light intensity β€” all transmitted wirelessly approximately every 12–18 seconds to a receiver indoors.

Rather than using a proprietary display console, the sensor's radio signal is intercepted by an RTL-SDR USB dongle connected to a Raspberry Pi 3B. Open-source software decodes the signal in real time and writes each reading to a MySQL database hosted on a remote cPanel web server. The dashboard, history, and forecast pages you see here are PHP pages running on that same web server β€” they query the database and render everything live.

The Pi itself plays no role in serving the website; it is purely a data collector. This keeps the web hosting reliable and independent of whatever happens to the Pi at home.

Data Pipeline
🌦
Bresser 7-in-1
Wireless sensor
868 MHz ISM band
β†’
πŸ“‘
RTL-SDR Dongle
USB software-defined
radio receiver
β†’
πŸ–₯
Raspberry Pi 3B
rtl_433 decodes signal,
writes to database
β†’
πŸ—„
MySQL Database
Hosted on cPanel
remote web server
β†’
🌐
PHP Dashboard
Live pages served
from web server
Hardware
🌦

Bresser 7-in-1 Sensor

A professional-grade outdoor sensor measuring temperature (Β°C), relative humidity (%), wind speed and direction, cumulative rainfall (mm), UV index, and light intensity (lux). Transmits wirelessly approximately every 12–18 seconds on the 868 MHz ISM band using OOK/PWM encoding.

πŸ“‘

RTL-SDR USB Dongle

A low-cost software-defined radio receiver originally designed for digital TV (DVB-T). Connected to the Raspberry Pi's USB port, it captures raw RF signals across a wide frequency range. The open-source rtl_433 software then automatically identifies and decodes the Bresser sensor's protocol.

πŸ–₯

Raspberry Pi 3B

A small single-board computer running continuously at home. It runs rtl_433 which listens for sensor broadcasts, decodes each reading, and inserts it as a row into the remote MySQL database via a network connection. The Pi does not serve any web content β€” it only collects and forwards data.

How the Numbers Are Calculated

Feels Like (Apparent Temperature)

The "feels like" figure uses the Australian Apparent Temperature formula, developed by the Australian Bureau of Meteorology. Unlike wind chill or heat index alone, it accounts for all three factors β€” air temperature, humidity, and wind speed β€” in a single equation valid across all weather conditions.

AT = T + 0.33 Γ— e βˆ’ 0.70 Γ— ws βˆ’ 4.00
e = (RH / 100) Γ— 6.105 Γ— exp(17.27 Γ— T / (237.7 + T))
T = air temp (Β°C) Β· RH = relative humidity (%) Β· ws = wind speed (m/s)

A high humidity raises the apparent temperature (muggy feeling); wind lowers it (wind chill). The βˆ’4.00 offset calibrates the scale to human comfort perception.

Dew Point

The dew point is the temperature at which air becomes saturated and water vapour begins to condense. It is calculated from air temperature and relative humidity using the Magnus formula:

Ξ³ = ln(RH / 100) + 17.625 Γ— T / (243.04 + T)
Td = 243.04 Γ— Ξ³ / (17.625 βˆ’ Ξ³)
T = air temp (Β°C) Β· RH = relative humidity (%)

A dew point above 16 Β°C begins to feel humid; above 21 Β°C is considered oppressive. When air temperature equals dew point, relative humidity is 100%.

Rainfall

The Bresser sensor stores a cumulative running total of rain in mm since the sensor was last reset. To calculate how much rain fell in any period, the dashboard sums only the positive deltas between consecutive readings:

period rain = Ξ£ max(0, rain_mm[i] βˆ’ rain_mm[iβˆ’1])

This is reset-proof: when the sensor's lifetime counter drops back to zero (battery change, reboot), the negative delta is ignored. The rate (mm/hr) is extrapolated from the difference between the two most recent consecutive readings.

Wind Speed

Wind speed is stored in the database in metres per second (m/s) as received from the sensor. All displayed values are converted to kilometres per hour (km/h) by multiplying by 3.6.

km/h = m/s Γ— 3.6

The Beaufort scale classification uses the raw m/s value against the standard WMO thresholds (Calm = < 0.3 m/s up to Near Gale = β‰₯ 13.9 m/s). Each reading stores both the average wind speed and the peak gust for that interval.

Historical Chart Buckets

To keep charts fast and readable regardless of how many readings are in the database, readings are grouped into time buckets and averaged before charting:

1 day span β†’ 5-minute buckets
2–7 day span β†’ 30-minute buckets
8+ day span β†’ 2-hour buckets

Temperature, humidity, wind, UV, and light are averaged within each bucket. Rainfall uses the maximum cumulative value per bucket (then delta'd) to avoid under-counting during heavy rain.

7-Day Forecast

Forecast data is fetched in real time from Open-Meteo, a free and open-source weather API with no key required. It provides hourly and daily forecasts from a blend of NWP models (ICON, GFS, ECMWF) interpolated to the station's exact coordinates (48.1897Β°N, 9.9497Β°E).

The station vs forecast comparison on the forecast page shows the difference between the last measured temperature from the sensor and the current hour's model output β€” a useful indicator of local micro-climate variation.

Built With Claude

This entire project was vibe coded β€” designed, written, and iterated entirely through conversation with Claude (Anthropic's AI assistant), with no boilerplate, no starter templates, and no framework. Every line of PHP, CSS, and JavaScript was generated through a natural back-and-forth: describe what you want, review it, refine it, repeat.

The development spanned multiple sessions, each building on the last β€” adding features, fixing edge cases, and steadily expanding from a basic live dashboard into a full multi-page weather application. The context grew long enough that one session hit Claude's context window limit and had to be summarised and resumed.

Codebase Stats

Across the files making up the complete application, the latest line counts roughly are:

index.php
history.php
forecast.php
about.php
dev.php
weather.css
lang.php Β· lang/en.php Β· lang/de.php
sw.js Β· pwa-update.js Β· receive.php Β· rain-helpers.php
+ manifest, offline, icons
Total: ~2,300+ lines of code

What Was Built Conversationally

Features added entirely through natural language prompts, with no manual coding:

βœ“ Temperature Β· Humidity Β· Wind Β· Rainfall
βœ“ Historical Charts
βœ“ 7-Day Outlook
βœ“ Feels Like (Apparent Temperature) Β· Dew Point
βœ“ Wind Speed Β· Beaufort
βœ“ β˜€ Light / ☾ Dark
βœ“ PWA / Add-to-Home-Screen
βœ“ CSV
βœ“ Rainfall (reset-proof)
βœ“ EN / DE
Questions & Contact
βœ‰

If you have questions about the station, the setup, or the calculations β€” or if you spotted something that doesn't look right β€” feel free to get in touch.

dev@walker-jones.eu