Skip to main content
  1. Posts/
  2. blog.dsinf.net/

Budowa stacji pogody z czujnikiem smogu i prezentacja danych

·579 words·3 mins
blog.dsinf.net elektronika grafana hardware influxdb luftdaten pomiary smog środowisko
Daniel Skowroński
Author
Daniel Skowroński

Co prawda zajęcie bardziej manualno-odtwórcze niż większość do tej pory opisywanych projektów, ale nadal bardzo satysfakcjonujące. Cel: zmontowanie (z gotowego kitu od Nettigo) stacji pogody (sensor temperatury, wilgotności i ciśnienia) wraz z czujnikiem smogu (NovaFitnes SDS011 z miniaturki) oraz postawienie infrastruktury do zbierania danych i ładnej prezentacji.

NovaFitnes SDS011
NovaFitnes SDS011

Post nie jest sponsorowany, ale Nettigo naprawdę zrobiło kawał dobrej roboty w usprawnianiu oryginalnego projektu od
Luftdaten.info, którego największym problemem jest znikoma dokumentacja w języku angielski (strona niemal wcale nie przetłumaczona z niemieckiego). Kit sprzedawany prawie ze wszystkim wygląda tak.

Co było potrzeba? Po pierwsze kit (~200zł) składający się z całej elektroniki (czujnik smogu SDS011, modem wifi z kontrolerem, płytka łącząca całość, grzałka i czujnik temperatury sprawdzający pracę grzałki, złącza, śruby, rurkę do czujnika i naprawdę długi płaski (co jest przydane do montażu za oknem) kabel USB). Do tego kilka części hydraulicznych, które osobiści kupiłem w Castoramie za około 25zł. Oraz opaski zaciskowe.

Ja do zestawu standardowego dołożyłem czujnik Bosch BME280. Dodaje to odczyt temperatury, wilgotności i ciśnienia z rozsądną precyzją. Do płytki od Nettigo można podłączyć urządzenia I2C na 3.3V oraz 5V i moduł GPS. Obsługiwana jest większość popularnych wśród hobbystów czujników i kilka wyświetlaczy.

Lista narzędzi opisana na stronie jest nieco nadmiarowa jeśli ma się trochę fantazji. Poza wkręcaniem śrubek potrzeba zasadniczo przepiłować rurkę 25mm i wykonać 4 otwory - 2 po 6mm, jeden 8mm oraz ostatni - 25mm. W około 2-3h zależnie od stopnia zaangażowania można te manipulacje wykonać Leathermanem (nóż, szydło, pilnik) i nożem do chleba. Poza tym rzecz jasna lutownica (jakakolwiek, bo mamy tylko elementy przewlekane).

Elektronika złożona, czas na testy
Elektronika złożona, czas na testy

Montaż elektroniki wraz z wgraniem oprogramowania i testami przed złożeniem obudowy trwa około godziny-półtorej. Potrzeba komputera (macOS/Windows/Linuks) którym wgramy firmware oraz ustawimy parametry WiFi. Zasada działania jak większość urządzeń IoT WiFi - bez konfigu wystawia swój AP, wpisujemy dane do naszej domowej sieci i działa.

Strona domowa czujnika
Strona domowa czujnika

Widok aktualnego pomiaru
Widok aktualnego pomiaru

Istotną cechą oprogramowania pokładowego jest obsługa wielu API (w tym OpenSenseMap) oraz generycznego wysyłania JSONa za pomocą HTTP POSTa i zapis do Influxa.

Strona konfiguracyjna
Strona konfiguracyjna

Pierwsze co przetestowałem to własne API. Przez kilka sekund miałem zamiar zbudować własny system wykresów, ale potem ujrzałem Influxa. Jednak API nie zostało porzucone - moja aplikacja do podglądu stanu wszechświata świetnie korzysta z danych w JSONie. Kod “zbieracza” danych powstał w php bo akurat takie CGI było najbardziej pod ręką. Jedna nieoczywistość - nie można wykorzystać zmiennej $_POST bo Content-Type to nie odmiana application/x-www-form-urlencoded tylko application/json. Trzeba wtedy odczytać php://input. Rzecz jasna skrypt poniżej wymaga dorobienia jakiejkolwiek autoryzacji - ale można wykorzystać HTTP Basic Auth.

<?php
 $current = fopen("current.json", "w") or die("fopen failed");
 $data=file_get_contents('php://input')."\n";
 fwrite($current, $data);
 fclose($current);

Ale co ze zbieraniem danych i robieniem ładnych wykresów? Od InfluxDB prosta i krótka droga do Grafany. Na Linuksie wystarczy zainstalować pakiet influxdb, influxdb-client oraz grafana. W samym influxdb trzeba stworzyć bazę, dodać użytkowników i granty. Poniżej przykładowy konfig dla admina, użytkownika zapisującego dane i grafany (read-only).

create database luftdaten
create user admin with password '...' with all privileges
create user luftdaten with password '...'
create user grafana with password '...'
grant all on luftdaten to luftdaten
grant read on luftdaten to grafana

W grafanie wystarczy dodać influxa jako źródło danych a potem wyklikać panele z wykresami.

Konfiguracja wykresu z przykładem zapytania do Influxa
Konfiguracja wykresu z przykładem zapytania do Influxa

I to wszystko! Całość u mnie zamknęła się w 6 godzinach - z aktualizacją mojego serwera i zmodyfikowaniem istniejącej aplikacji żeby korzystała z danych na żywo tuż za oknem.

Panel pomiarów z Grafany
Panel pomiarów z Grafany

Czujnik za oknem
Czujnik za oknem