this page shows live events recorded from a nesting box located in Weinheim, Germany. BirdyIO is based on an ESP8266 µController for real-time analysis of event patterns recorded by two pulsed IR light barriers. Events are stored in a PostgreSQL backend. See here for further detail. The graphs depicted below are rendered from the live database using Grafana, from top to bottom:
Intraday course (y-axis) vs. date (x-axis), event frequency is color-coded
in/out events (bird is passing through nest opening in a connected action)
other events (bird is obstructing nest opening without passing)
AirStation dashboard (Grafana) showing daily aggregated data
Following an initial version, I wanted to learn and extend from this experience:
Ozone sensor employed so far was a Winsen MQ131 analog sensor, sampled via a voltage divider/ADC circuit. The sensor required extensive burn-in and base resistance calibration and appeared to be critically sensitive to moisture – far beyond what was charted in the MQ131 datasheet’s figure 4: Rs/Rs0 vs. Temperature plot for 3 distinct values of rH%. While I was able to derive a continuous correction function(rH%,T) by interpolating between the graphs provided by the datasheet, this eventually did not resolve the humidity issue. From analysis of environmental data collected so far, MQ131 “runaways” in O3 reading coincided nicely with early morning humidity values rH > 65%. Looks like we have to abandon this cheap thing and go for Winsen’s digital sensor: ZE25-O3. Fortunately, AliExpress was quick to deliver !
AirStation’s central library “myTaskSchedulder” is controlling the asynchronous scheduling of various data sampling tasks and pre/post processing requirements and has seen multiple updates and fixes inspired by the ongoing StratoExplorer project which equally benefits from the lib’s capabilities.
While O3 and particulate matter are already quite rare for privately operated sensors, I wanted to add this one more thing that would make it unique of it’s kind: γ/β radiation ambient dose rate, i.e. a Geiger-Mueller tube counter.
AirStation 2.0 specs after success lab testing:
CPU: ESP8266-NodeMCU v2.8 µ-controller with WiFi.
OTA software updates with AS2.0 remaining connected to domestic WiFi.
DNS device name broadcast
NTP time reference for myTaskScheduler
Web service endpoint, delivering AS2.0 JSON data.
AirStationDb python backend + Postgres database (both on Pi3B) polling/storing AS2.0 data
Each of the sensor value(s) stored with sample time, average, min/max, standard-deviation.
Grafana dashboard (backend) showing spot values and time course.
Implementation notes:
ESP8266 is ideally suited for WiFi based IoT applications thanks to multiple, configurable digital ports. However, simultaneously connecting that many digital applications to a single device is creating issues due to subtle limitations on the CPU’s pins, i.e. interrupt capability, logic levels, behavior during device boot and flashing.
Ozone: ZE25-O3 connected via (Software-)Serial (9600, 8N1). Sensor has two modes that can be selected via serial: i. periodic reports, ii. on-demand reports. The latter mode appears handy but has a documented issue with ESP8266 software-serial. That’s why we operate in (default) periodic mode and invest a bit in parsing queued messages from the serial buffer. Since we are anyhow running out of hardware-serials on ESP8266 (and wanted to keep Serial-0 for bench-diagnostics), sw-serial is a good choice, because it’s ESP8266 implementation is able to handle multiple connections (at low baud rate). With choosing periodic-mode, we can use RX on pin D6 and abandon host TX, thus releasing one interrupt-capable digital pin D5 for the radiation sensor count trigger. Digital O3 readout is in ppb units, conversion to µg/m³ applied taking into account temperature correction according to EU standards. Sampling every 10 minutes for 1 minute at 2s intervals.
Particulate Matter (PM): SDS011 connected via (Software-)Serial (9600, 8N1). Needs both RX/TX to read data from device and switch on/off fan and laser. Warm up time 30s, 2 minutes sampling at 2s intervals, triggered every 3 hours: commanded by myScheduler. Caution: From available pins D7/D8 use D7 for RX. D8 is pulled to GND, boot fails if HIGH. Humidity correction applied according to Zbyszek Kiliański.
Radiation: Interrupt controlled, Geiger-Mueller tube J321 identified as J305/M4011 compatible. Count-per-minute / dose [µS/h] conversion factor: 0.00655. Connected to ESP D5 with an ISR which handles event counting independently from any other tasks. Rate computation + statistics controlled via myTaskScheduler: every 10 minutes for 5 minutes of event data.
BME280 THP: Connected via standard I2C bus SCL/SCA (D1/D2). Continuous sampling every 2s on a 5 minutes sliding average.
Code sample showing basic AS2.0 design:
main.cpp:
[..]
#include <myWifi.h>
#include <AirStation.h>
#include <AirStation_cfg.h>
#include <SensorPM.h>
#include <SensorO3.h>
#include <SensorTHP.h>
#include <SensorRAD.h>
[..]
// myTaskScheduler is given a reference time: SysTime
// SysTime is initialized with reference to wifi's getTimestamp()
// (This works equally well myGPS lib, providing sat-based time)
//
auto wifi = myWifi(CBN_HOME);
auto st = new SysTime(std::bind(&myWifi::getTimestamp, wifi));
auto ts = new myTaskScheduler(st);
[..]
//
// SYSTEM SETUP
//
void setup() {
Serial.begin(28800);
Serial.println("AirStation - setup:");
// Tasks being registered with myTaskScheduler
// Custom task must inherit from a generic Task class
//
ts->addTask("THP", new SensorTHP)->setOnError(RECOVER);
ts->addTask("PM" , new SensorPM )->setOnError(RECOVER);
ts->addTask("O3" , new SensorO3 )->setOnError(RECOVER);
ts->addTask("RAD", new SensorRAD)->setOnError(RECOVER);
ts->setPrintLevel(DEBUG_LEVEL);
wifi.start();
// some configuration options for SysTime
st->setTimeformat(&formatAirStationTimestamp);
st->setSyncInterval(12*3600);
st->autoTimeformat(true);
st->setSyncMode(AUTO);
[..]
bool status = ts->resetTasks() && ts->testTasks();
Serial.printf("SETUP: %s\n", status ? "OK":"FAILED");
}
//
// MAIN LOOP
//
void loop() {
server.handleClient(); // handle webservice requests
ts->run(); // have myTaskSchedule do its scheduling business
st->checksync(); // check sync with time reference
}
Next steps:
Finally assembly caused unexpected harm to the O3 digital sensor: When the sensor was mounted into a short plastic tube connecting it with the atmosphere outside the box, solvent-containing plastic glue was used. While drying, intense hydrocarbon vapor however “blinded” the sensor beyond recovery – a fact that was clearly pointed out in the sensor’s data sheet: “Do not leave the module in a high concentration of organic gas for long time which will cause the sensor zero point to drift and recover slowly” – I told myself: r.t.f.m, next time I will study every tiny detail of hardware documentation ! A replacement sensor is on it’s way from China.
Edit 25.08.2022: The new sensor has arrived from China and was tested ok. But, getting stable O3 readings is a challenge ! Two reasons for this: 1) 4-sensors setup: It appears that AirStation – once booted – performs flawlessly to process data from all sensors. However, with co-existence of radiation and ozone sensors (and the increase in wiring and EMI), there is an issue with ESP8266 boot mode due to “floating” pins which require the RST button to be pressed to properly initiate boot. 2) The Winsen ZE25-O3 is not only very sensitive to gas concentration but also to any airflow impacting the cover membrane of the device. Isolating the chip in a tube connected to a hole in the AirStation box turned out to be a bad idea in “outdoor” conditions. Any air movement flowing alongside or into the opening is inducing pressure oscillations which are being magnified by the sensor. Therefore it is more appropriate to locate the sensor protected within the box and rely on “smooth” air exchange induced by regular runs of the PM sensor fan.
Edit 14.09.2022: Winsen ZE25-O3 sensor has been relocated inside the box and EMI issues have been fixed. AirStation now running on ALL sensors: temperature, humidity, pressure, particulate matter, ozone, ambient radiation. This has required a downtime on Sep 14 resulting in a gap in the data recordings.
Ausgangspunkt war ein bei Erstellung des Gebäudes im OG realisiertes Bad mit einem Grundriss von ca. 210 cm x 310 cm (Breite x Tiefe). In klassischer Anordnung war hier eine 170cm Badewanne in der Breite entlang der Giebelwand (1 Fenster) eingebaut, der Waschtisch zentral an der linken Längswand, an der rechten Längswand: WC und Duschkabine (80 x 90cm), wobei die Dusche in der rechten Raumecke neben der Tür verbaut wurde. Zu- und Ableitungen werden in einem Versorgungsschacht in der linken Raumecke an der Giebelwand geführt. In Konsequenz zu dieser Anordnung wurden Abwasserleitungen in Vorwandinstallationen geführt, insbes. die Ableitung der Dusche mit einer Gesamtlänge von über >500cm. Dieser Punkt war mit erheblichen Problemen beim Duschablauf verbunden.
Ziel war es den Raum durch Versatz einer nicht-tragenden Wand (rechte Längswand) auf eine nahezu quadratische Grundfläche (310 x 310 cm) und 2 Fenster zu vergrößern. Zuvor war in einem, den benachbarten Raum betreffenden, ersten Bauabschnitt bereits die neue Raumwand in Trockenbauweise aufgebaut worden, so daß nach Abriss der alten Bad-Innenwand der neue Raum mit 2 Fenstern nutzbar war. Nachfolgende Grundanforderungen waren danach zu realisieren:
In einem ersten Schritt wurde im Frühjahr 2021 mit mehreren, auf Sanitärplanung & Sanierung spezialisierten Firmen im Rhein-Neckar Raum Kontakt aufgenommen zur Durchsprache von Projektzielen und Ausführungsoptionen. Im Verlauf von 2-3 Monaten zeigte sich jedoch, dass die präsentierten Planungsideen einerseits nur zu Kompromissen bei der Erreichung der Ziele nutzbar waren, auf der anderen Seite gleichzeitig der Kostenrahmen bei Durchführung duch Generalunternehmer – auch bei einfacher Ausstattung – erheblich überzogen wurde. Nach dem ich mir selbst “die Karten gelegt” hatte bzgl. technischer Komplexität, den Möglichkeiten eigenständiger Planung und der Koordination der verschiedenen Gewerke, entschloss ich das Projekt in Eigenregie anzugehen. Grundstein hierfür war der Vorschlag eines befreundeten Junior-Architekten alternativ zu einer Anordnung der Sanitärobjekte entlang der Raumwände, eine zentrale “T”-Struktur für Waschtisch, WC und Dusche in Erwägung zu ziehen. Was zunächst bei mir für zahlreiche Falten auf der Stirn sorgte, zeigte sich bei näherem Spiel mit den Formen und Dimensionen als geniale Idee !
Auf der Suche nach einer 2D CAD Software wurde ich bei LibreCAD schnell fündig. Nach kurzer Lernkurve und unter Nutztung der im Internet frei erhältlichen technischen Zeichnungen von Geberit, Hans Grohe und Villeroy & Boch, konnte ich das System effizient für Bemaßung und Planung der Komponenten nutzen. Dabei zeigten sich vier entscheidende Teilprobleme:
um Zugang und Breite der WC/Duschnische zu maximieren, mussten die beiden Schenkel der “T”-Querwand eine möglicht geringe Gesamtbreite aufweisen. Der kritische Faktor hierbei war der Durchmesser und die Führung der WC-Abwasserleitung, welche in Richtung des Versorgungsschachtes zunächst innerhalb des “T”-Körpers geführt wurde, bevor sie bei notwendigem Gefälle innerhalb des Bestands-Estrichbodens (Isolierestrich, 10.5cm über Bodenplatte) weitergeführt werden konnte. Massgeblich waren hierfür: DN90 Rohr, min. 2.5% Gefälle im Estrich, Trockenbau mit 50mm Ständerwerk und doppelter Beplankung (2 x 12.5mm). Grundsätzlich zeigte sich, dass eine bodengleiche Dusche und WC-Entwässerung nur realisiert werden konnte, wenn hierfür die Gesamthöhe des Estrichs über Bodenplatte im Bereich der Dusche und Abwasserführung erhöht würde. Die Entscheidung fiel nach intensiver Planung zu Gunsten einer Raumstufe von 7.5cm Überhöhung im Bereich der Duschnische und nahezu mittig einer über’s Eck eingebauten Badewanne. Insgesamt konnte eine Aussenbreite der “T” Schenkel von lediglich 18cm realisiert werden ! Um die untersuchten Abhängigkeiten zu illustrieren, sei an dieser Stelle noch erwähnt, daß die Höhe der Raumstufe ebenso Abstimmung bedarf bzgl. des raumhohen Fliesenspiegels (120x60cm Grossformatfliesen, liegend) im Bereich der Dusche hin zur abgehängten Raumdecke.
Bei der Planung der Wanne zeigte sich rasch, daß ein Eckeinbau nahe des Versorgungsschachtes die ideale Lösung war. Um den Platz zwischen Wanne und Waschtischwand zu optimieren, bot sich der Einsatz einer Sechseck-Form an, welche letztendlich bei Villeroy & Boch 6-Eck Squaro (190 x 80 cm) gefunden wurde. Um den Platz zwischen Wanne und Wandecke möglicht ohne tote Winkel und “nasse Ecken” elegant zu nutzen, habe ich mich entschieden die Verkleidung des Versorgungsschachtes ebenfalls im 45° Winkel entlang der Badewannen-Längsseite auszuführen.
Nachdem die Lage der “T” Waschtischwand durch Anforderung der lichten Duschbreite gegeben war, musste kritisch bedacht werden, wie die Dimension des hängenden Waschtisches die Durchgangsbreite an der engsten Stelle zwischen der linken Ecke des Waschtisches und der Badewanne beeinflusst. Es erwies sich als ideal und optisch reizvoll die vertikale Mittelachse der Waschtischinstallation (Tischaufhängung, Unterputz-Armaturen, Steckdosen, Spiegel) um ca. 20cm nach rechts aus der Mitte der Waschtischwand zu versetzen.
Nach Ermittlung der Lage der Einrichtung, musste die Deckeninstallation bzgl. Anzahl und Symmetrie der Deckenausschnitte für Leuchtmittel und Lautsprecher geplant werden. Neben einem 30x30cm Niedervolt Farb-LED Panel mittig über der Badewanne kamen dimmbare 230V LED Spots IP44/65 von Paulmann zum Einsatz. Entscheidend ist an dieser Stelle die Abstimmung zwischen den erforderlichen Deckenöffnungen und der Lage des Trägerwerkes an der Grenze zwischen Deckenplatten.
Die Planungsphase wurde erleichtert durch mehrere Zwischengespräche mit den zu diesem Zeitpunkt bereits favorisierten Gewerken, v.a. der Sanitärinstallation, welche die kritischsten Abhängigkeiten in der Realisierung aufwies. An zweiter Stelle sei der Tockenbau (Wand + Deckenkonstruktionen) genannt, der bzgl. Platzbedarf und erforderlichen Abständen im Ständerwerk einige harte Einschränkungen vorgibt.
Waschtischwand, FrontalansichtTrockenbau T-Körper, Geberit Duofix (Magenta)Rohbau vor Putz & Fliesen
Ausführung
Nach Abschluss der “vorhersehbaren” Planung und Einholen der Angebote der Gewerke wurde der erforderliche Zeitaufwand in Arbeitsleistung und evtl. Trockenzeiten und Abhängigkeiten angefragt und in einer konsolidierten Projektplanung zusammengefasst, unter den beteiligten Partnern geteilt und mit Termin beauftragt. Es ergab sich eine Gesamtprojektdauer von ca. 5 Wochen, wobei ca. 1 Woche auf Trockenzeiten im Fliesenaufbau und im aufwändigen Sumpfkalkputzverfahren entfiel. Kritisch war die Bestellung der Sanitärkomponenten, da die Hersteller in Folge stockender Lieferketten Vorlaufzeiten von mehreren Wochen benötigten. Also stellten wir uns mal auf gut 5 Wochen Duschen bei Freunden und im Sportstudio ein 😉
Es grenzt zurückblickend vielleicht an ein Wunder, aber genauer betrachtet war es wohl ein Produkt guter Planung und Kommunikation sowie einem rundum professionellen und kollegialen Verhalten der beteiligten Gewerke: Die Arbeiten gingen ohne nennenswerte Überraschungen und Komplikationen voran und alle geplanten Arbeitszeiten konnten eingehalten bzw. sogar leicht unterboten werden. Gleiches galt erfreulicherweise auch für die Angebotspreise. Am Ende fehlte lediglich der Keramik-Waschtisch von V&B, der auf Grund von Produktionseinschränkungen erst 2 Wochen später geliefert und montiert werden konnte. No problem, wir erfreuten uns derweil schon intensiv an Wanne und Dusche !
Folgende Punkte sind mir als positive “Enabler” während der Ausführung noch in Erinnerung:
Enge Abstimmung zwischen Trockenbau (TB) und Sanitär nach Erstellung des “T”-Körper Grundaufbaus: Da vertikale Streben im TB zunächst noch nicht fixiert wurden, konnte die Führung des WC-Abwasserrohrs im “T” und danach abwärts in den Estrich so optimiert werden, daß das Gefälle, die korrekte Ausdehnung des Estrichaufbaus und Stabilität des TB gewährleistet waren.
Die Lage und Abhängigkeiten (Symmetrie !) der Komponenten (Steckdosen, Armaturen, Widerlager-Platten für Waschtischmontage) in der Waschtisch TB-Wand ist komplex und ist eng verbunden mit den möglichen Positionen für vertikale TB Träger. Hier zeigte sich, daß ein schnelles Reagieren (in der Praxis: Laptop mit LibreCAD im Einsatz direkt neben den Trockenbauern) auf konstruktiv notwendige Anpassungen des Ständerwerks sehr vorteilhaft war.
Verputzer und Fliesenleger sind wahre “Künstler” ihrer Zunft und die Arbeiten (mit Großformatfliesen oder Sumpfkalkputz) handwerklich “heikel”. Hier war es gut für eine ruhige und ungestörte Arbeitsatmosphäre zu sorgen, insbes. was den sauberen Abschluss der vorangehenden Arbeiten (z.B. Fliesen und Decke komplett, vor Putz) angeht.
Abschließend danke ich allen Gewerken für die gute Zusammenarbeit und ihre hervorragende Arbeit !
Fenster: Joan Miró: “Bleu II”, Kunstdruck-Postkarte, Passepartout
Badewanne: Paul Klee: “Fischbild”, Kopie auf Leinwand + Holzrahmen
WC: Kaća Bradonjić, Carlo Rovelli, “Space and Time (or not?) in Loop Quantum Gravity”, Kunstdruck, Passepartout
We use cookies on our website to give you the most relevant experience by remembering your preferences and repeat visits. By clicking “Accept All”, you consent to the use of ALL the cookies. However, you may visit "Cookie Settings" to provide a controlled consent.
This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Necessary cookies are absolutely essential for the website to function properly. These cookies ensure basic functionalities and security features of the website, anonymously.
Cookie
Duration
Description
cookielawinfo-checkbox-analytics
11 months
This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Analytics".
cookielawinfo-checkbox-functional
11 months
The cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Functional".
cookielawinfo-checkbox-necessary
11 months
This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary".
cookielawinfo-checkbox-others
11 months
This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Other.
cookielawinfo-checkbox-performance
11 months
This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Performance".
viewed_cookie_policy
11 months
The cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data.
Functional cookies help to perform certain functionalities like sharing the content of the website on social media platforms, collect feedbacks, and other third-party features.
Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.
Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics the number of visitors, bounce rate, traffic source, etc.
Advertisement cookies are used to provide visitors with relevant ads and marketing campaigns. These cookies track visitors across websites and collect information to provide customized ads.