
Hallo liebe Elektronik- und Mess-Enthusiasten,
ich habe in den letzten Monaten an einem Projekt gearbeitet, das zwei meiner Lieblingswelten verbindet: offene Firmware und Citizen-Science-Projekte. Herausgekommen ist die RadPro WiFi Bridge – eine Firmware für den ESP32-S3, die handelsübliche Geigerzähler mit der Rad Pro-Firmware ins WLAN bringt und ihre Messwerte per MQTT und verschiedene Online-Plattformen zugänglich macht. GitHub
Die Bridge hängt sich per USB an den Geigerzähler, holt sich im Hintergrund die Telemetrie (z. B. Zählrate und Dosisleistung) und schiebt diese Daten dann ins Netzwerk – inklusive netter Komfortfunktionen wie Web-Konfigurationsportal, MQTT (Home-Assistant-Integration), Anbindung verschiedener Online-Plattformen und einer Status-LED, die Dir ohne serielles Terminal verrät, was gerade los ist.
Warum überhaupt eine WiFi-Bridge für Rad Pro?
Geräte wie der Bosean FS-600 oder der FNIRSI GC-01 sind mit der offenen Rad-Pro-Firmware von Gissio schon ziemlich mächtig: sie zeigen Dir lokal Zählraten, Logs und diverse Diagnosedaten an. Aber sobald die Daten ins Internet oder in Deine Smarthome-Umgebung sollen, wird es schnell frickelig:
- USB-Kabel am PC anstecken
- passende virtuelle COM-Ports finden
- eigene Skripte schreiben, die im Hintergrund laufen und die Frames auswerten
Ich wollte stattdessen eine kleine Box, die man einfach zwischen Geigerzähler und Router hängt, und die sich um all das kümmert:
- Rad Pro per USB zuverlässig enumiert
- Messwerte zyklisch abfragt
- die Daten per MQTT und an Dienste wie OpenSenseMap, GMCMap und Radmon.org weitergibt
- sich komfortabel über ein Web-Portal konfigurieren lässt
Kurz gesagt: Einmal einrichten, in die Ecke legen und dann einfach laufen lassen.

Unterstützte Geigerzähler
Die Bridge ist auf Geräte ausgelegt, die mit der Rad-Pro-Firmware laufen und sich wie ein vendor-spezifisches CDC-Device am USB-Bus verhalten. Getestet habe ich bisher:
- Bosean FS-600
- FNIRSI GC-01
Geplant / noch nicht getestet:
- FS2011
- YT-203B
- Bosean FS-1000
- Bosean FS-5000
- JOY-IT JT-RAD01
- GQ GMC-800
Wenn Du eines dieser Geräte (oder einen anderen Rad-Pro-fähigen Zähler) besitzt und Lust hast zu testen oder Hardware zu leihen/sponsern, freue ich mich über Feedback im GitHub-Issue-Tracker.
Hardware-Basis: ESP32-S3 als Brücke
Als Herzstück verwende ich ein ESP32-S3 DevKitC-1 (N16R8). Der ESP32-S3 bringt praktischerweise:
- USB-OTG (für den Geigerzähler)
- einen separaten UART-USB (CP210x) für Spannungsversorgung und Debug-Ausgaben
- eine integrierte WS2812-RGB-LED (GPIO 48), die wir als Status-LED nutzen

Die Firmware nutzt:
- eine TinyUSB-Host-Implementierung mit einem eigenen CH34x-Shim, damit Rad Pro zuverlässig als CDC-Device auf dem OTG-Port auftaucht
- einen DeviceManager, der die Rad-Pro-Kommandos in eine Queue packt, Metadaten abfragt und dauerhaft Telemetrie-GET-Befehle ausführt
- eine LED-State-Machine, die Dir mit verschiedenen Farben und Blinkmustern den Zustand von Boot, WLAN, USB, MQTT und Web-Requests signalisiert
So musst Du im Normalfall keine serielle Konsole offen haben, sondern siehst am LED-„Sprachcode“ recht schnell, ob z. B. die WLAN-Credentials nicht stimmen oder der MQTT-Broker nicht erreichbar ist.
Firmware-Highlights im Überblick
Hier ein schneller Überblick, was die RadPro WiFi Bridge aktuell kann:
- USB-Host-Stack (TinyUSB + CH34x-Shim)
Sorgt dafür, dass die Rad-Pro-Geräte sauber als virtuelle serielle Schnittstelle am ESP32-S3 erscheinen. - DeviceManager-Kommandoschlange
Bootet das Rohr, liest Geräte-ID, Firmware-Version, Batteriestatus, etc. aus und pollt anschließend kontinuierlich Zählrate und Pulszählungen. - WLAN-Konfigurationsportal (WiFiManager-basiert)
Startet bei fehlenden oder ungültigen Zugangsdaten einen eigenen Access Point (<Gerätename> Setup) mit Captive-Portal und bietet die gleiche Oberfläche später auch unterhttp://<device-ip>/im Heimnetz an – inklusive „Neustart“-Button. - MQTT-Publisher mit Home-Assistant-Discovery
Jeder erfolgreiche Rad-Pro-Response landet auf MQTT-Topics wiestat/radpro/<deviceid>/<leaf>(Standard), retained und mit passenden Discovery-Payloads für Home Assistant. Die Entities tauchen dadurch automatisch auf. - Cloud-Publisher für OpenSenseMap, GMCMap und Radmon.org
Je Dienst gibt es im Web-Portal eine eigene Konfigurationsseite mit Ein/Aus-Toggle und Credential-Feldern. Ist ein Dienst deaktiviert oder unkonfiguriert, schickt die Bridge auch wirklich keine Requests dorthin. - Status-LED mit Basis-Modi und Fehlercodes
Verschiedene Grundzustände (Booting, WaitingForStart, WifiConnecting, WifiConnected, DeviceReady, Error) sind farbig kodiert; Fehler werden über wiederkehrende Rot/Orange-Sequenzen signalisiert (z. B. „WiFi-Auth fehlgeschlagen“, „MQTT-Broker nicht erreichbar“ usw.).
Installation: Web-Installer oder PlatformIO
Du hast zwei Wege, die Bridge auf Deinen ESP32-S3 zu flashen: per Browser oder klassisch mit PlatformIO.
Variante 1: Flashen im Browser (ESP Web Tools)
Der schnellste Einstieg läuft komplett im Browser:
- ESP32-S3 per USB mit dem Rechner verbinden.
- Die Web-Installer-Seite öffnen:
https://SunboX.github.io/radpro-wifi-bridge/web-install/ - Auf „Install“ klicken und im Dialog das passende serielles Device auswählen.
- Den Anweisungen folgen, bis der Flash-Vorgang abgeschlossen ist.
Das Ganze basiert auf ESP Web Tools – Du brauchst kein lokal installiertes Toolchain, nur einen aktuellen Browser mit WebSerial/WebUSB-Support.

Variante 2: Flashen mit PlatformIO
Wenn Du lieber klassisch arbeitest oder ohnehin schon eine Arduino/PlatformIO-Umgebung hast:
- PlatformIO installieren und das Projekt klonen:
https://github.com/SunboX/radpro-wifi-bridge - Projekt in VS Code/PlatformIO öffnen.
- Sicherstellen, dass die Standard-Umgebung auf das ESP32-S3 DevKitC-1 (N16R8) zeigt und die mitgelieferte
partitions.csvvorhanden ist (diese legt u. a. eine 6-MB-Anwendungspartition an). - Board mit USB-Kabel anschließen:
- CP210x-Port (nicht OTG Port!) → Debug-Log & Konsole (
Serial0, 115200 Baud) - USB-OTG-Port → für den Rad-Pro-Zähler freilassen
- CP210x-Port (nicht OTG Port!) → Debug-Log & Konsole (
- Flashen mit
platformio run --target upload
oderplatformio run --target upload --target monitor
(öffnet nach dem Upload automatisch den seriellen Monitor).
Erste Inbetriebnahme & Konfiguration
Nach dem Flashen sieht der typische Erststart so aus:
- Boot-Countdown beobachten
Auf dem UART-Port läuft ein Countdown („Starting in …“). Du kannst ihn mit dem Konsolenkommandostartsofort beenden oder- mit
delay <ms>(z. B.delay 15000) an Deine Bedürfnisse anpassen.
- WiFi-Setup über Captive-Portal
Beim allerersten Start – oder wenn die gespeicherten WLAN-Daten nicht mehr funktionieren – öffnet die Bridge einen eigenen Access Point (<Gerätename> Setup) mit Captive-Portal.- Mit dem Smartphone oder Laptop einloggen
- Browser starten, das Portal erscheint automatisch
- WLAN-Credentials eintragen und speichern
- Dauerhafte Web-Oberfläche im LAN
Wenn das Board erfolgreich im WLAN ist, erreichst Du das gleiche UI unterhttp://<device-ip>/
Hier kannst Du später jederzeit Einstellungen anpassen, ohne wieder ins Setup-WLAN wechseln zu müssen. - Cloud-Publisher & MQTT konfigurieren
Im Portal findest Du separate Seiten für:- MQTT (Broker-URL, Credentials, Topic-Template, Discovery-Optionen)
- OpenSenseMap (Box-ID, Token, Sensor-IDs)
- GMCMap (Account-ID, Device-ID)
- Radmon.org (Benutzername, „data-sending password“)
- Remote-Neustart & Diagnose
Über das Portal kannst Du die Bridge neu starten, und im Hintergrund werden SSID/IP/RSSI-Infos im seriellen Log ausgegeben. So lässt sich eine wackelige WLAN-Verbindung schnell erkennen.
Datenwege: MQTT, Home Assistant und Citizen-Science-Plattformen
Sobald WLAN und USB stehen, dreht sich alles um Telemetrie. Die Bridge fragt in festen Intervallen (readIntervalMs, minimal 500 ms) unter anderem tubeRate und tubePulseCount ab und verteilt die Daten dann auf verschiedene Kanäle.
MQTT & Home Assistant
- Die Messwerte landen standardmäßig auf Topics wie
stat/radpro/<deviceid>/<leaf> - Die Nachrichten sind retained, damit Home Assistant auch nach einem Neustart des Brokers noch den letzten Zustand kennt.
- Zusätzlich werden passende Discovery-Payloads erzeugt, sodass Home Assistant die Entities automatisch anlegt, sobald die Bridge einmal online war.
- Erfolgreiche Publishes quittiert die LED mit einem kurzen grünen Blink, Fehlversuche mit roten Blitzen und Log-Eintrag.
OpenSenseMap
Für OpenSenseMap kannst Du Box-ID, Token und Sensor-IDs hinterlegen. Ist die Funktion aktiviert, bündelt die Bridge Zählrate und Dosisleistung zu HTTPS-Requests, die alle paar Sekunden an die Plattform geschickt werden – so landen Deine Messwerte direkt auf einer offenen Karte.
GMCMap & Radmon.org
Beide Dienste werden ähnlich behandelt:
- GMCMap: Überträgt regelmäßig CPM- und µSv/h-Werte an das klassische
log2.asp-Interface. - Radmon.org: Sendet in konfigurierbaren Abständen CPM (und optional Dosisleistung) an Deinen Stationseintrag.
In beiden Fällen gilt: Ohne hinterlegte Credentials oder wenn der Dienst im Portal ausgeschaltet ist, erzeugt die Bridge keinen Traffic.
LED-Feedback: Wenn das Gerät „spricht“
Weil nicht immer ein serielles Terminal zur Hand ist, spielt die RGB-LED eine zentrale Rolle. Sie zeigt Dir:
- Grundzustand über eine feste Farbe / Blinkfrequenz
- z. B. Magenta für „Booting“, Gelb für „Warte auf Start“, Blau für „WLAN verbindet“, Cyan für „WLAN ok, USB noch nicht bereit“, Grün für „Messbetrieb aktiv“
- Fehler über wiederkehrende Rot/Orange-Sequenzen
- Anzahl der orangefarbenen Blinks nach einem roten Blink entspricht einem Fehlercode (z. B. „WLAN-Auth fehlgeschlagen“, „NVS-Speichern fehlgeschlagen“, „MQTT-Broker nicht erreichbar“, „USB-Handshake fehlt“ etc.)
So kannst Du auch ohne Konsole schnell grob einschätzen, ob gerade eher WLAN, MQTT, USB oder die Konfiguration zickt.
Hardware-Aufbau & Gehäuse
Wenn Du den ESP32-S3 noch nicht auf RadPro-Tauglichkeit vorbereitet hast oder ein passendes Gehäuse suchst, gibt es im Repository eine Assembly-Dokumentation mit Schritt-für-Schritt-Anleitung:
- welche Jumper am DevKit gesetzt werden müssen
- wie der FS-600 (oder ein ähnlicher Zähler) am USB-OTG-Port hängt
- Hinweise zu 3D-gedruckten Gehäusen und zur mechanischen Entlastung der Kabel
Den Link dazu findest Du direkt im README unter „Hardware Assembly“.
Roadmap – wohin die Reise gehen soll
Die aktuelle Version deckt bereits MQTT, OpenSenseMap, GMCMap und Radmon.org ab. Auf der Roadmap stehen aber noch weitere Wetter- und Citizen-Science-Plattformen, darunter:
- Safecast – große Citizen-Science-Community rund um bGeigie & Co.
- OpenRadiation – Projekt mit dokumentierter REST-API für Nutzerbeiträge
- uRADMonitor – weltweites Netz aus proprietären und DIY-Sensoren
- GammaSense – Initiative von Waag/RIVM, die mit eigenen APIs arbeitet
Außerdem ist geplant:
- flexiblere Reporting-Strategien (z. B. dynamische Intervalle, Batching)
- OTA-Updates, damit sich die Bridge später direkt über das Netz aktualisieren lässt
Fazit
Die RadPro WiFi Bridge ist mein Versuch, Rad-Pro-basierte Geigerzähler ohne großen Aufwand netzwerkfähig zu machen und sie sauber in Smarthome-Setups wie Home Assistant sowie in verschiedene Citizen-Science-Plattformen einzubinden.
Du bekommst:
- eine kleine, stromsparende WLAN-Bridge auf ESP32-S3-Basis
- ein Web-Portal für alle wichtigen Einstellungen
- MQTT-Integration inklusive Discovery
- Publisher für OpenSenseMap, GMCMap und Radmon.org
- und eine LED-„Sprache“, die Dir unterwegs schon viel über den Zustand der Bridge verrät
Wenn Du selbst mit Rad Pro experimentierst, einen FS-600 oder GC-01 im Regal stehen hast oder generell an vernetzter Strahlungsmessung interessiert bist, schau gerne ins Repository, probier die Firmware aus und gib Feedback – ich freue mich auf Deine Erfahrungen, Issues und Pull-Requests.
GitHub-Projekt mit allen Details und Anleitungen:
https://github.com/SunboX/radpro-wifi-bridge
Viel Spaß beim Messen, Hacken und Verknüpfen Deiner Geiger-Daten!