Benutzer:MathiasMahnke/Luftdaten
Inhaltsverzeichnis |
Materialliste
- CH340 NodeMcu V3 WIFI (Basis ESP8266)
- USB EU Wall Charger Plug 5V AC
- Flat Micro Usb Cable 2.0 Data Sync Cable (2 m)
- Dupont Cable 20cm 2.54mm 1pin 1p-1p Female to Female Jumper Wire (7 Stück)
- Laser PM2.5 sensor SDS011 / particle & dust sensor
- DHT22 digital temperature and humidity sensor module (Basis AM2302)
- HT Bogen DN 75 87° (2 Stück)
- PVC Schlauch 6 mm Innen / 9 mm Außen (ca. 20 cm)
- div. Kabelbinder
- Fliegengitter od. ähnliches
- BME280 combined digital humidity, pressure and temperature sensor
ca. 35 EUR (2017), ca. 40 EUR (2020)
Installation
NodeMCU per USB Kabel verbinden, liefert Strom und Flash-Möglichkeit über USB-Serial.
CH34x USB Driver (Mac OS): brew cask install wch-ch34x-usb-serial-driver
Device (ggf. aufsteigende ID): /dev/cu.wchusbserial14110
Weiter per Flashing-Tool: http://firmware.sensor.community/airrohr/flashing-tool/
Anschließend per WLAN "airRohr-<id>" verbinden. Die ID wurde zuvor im Flash-Tool angezeigt.
Zugriff auf die initiale Konfiguration: http://192.168.4.1/
- dort finale WLAN Einrichtung vornehmen.
Nun kann mittels Flash-Tool das Gerät im lokalen Netzwerk via IPv4 gefunden werden ("Im Netzwerk suchen"). Weitere Einrichtung dann via Webinterface unter http://<ipv4-adresse>
.
Anbindung an die grafische Auswertung via Webinterface Konfiguration > APIs:
Abruf nach ca. 2 Minuten unter https://luftdaten.opennet-initiative.de
Weitere Registrierung auf https://devices.sensor.community und https://opensensemap.org für die Sichtbarkeit in den zentralen Karten.
Verdrahtung
- DHT22 1 - 3V
- DHT22 2 - D7
- DHT22 4 - G
- SDS011 TX - D1
- SDS011 RX - D2
- SDS011 GND - G
- SDS011 5V - VU
- BME280 VIN - 3V
- BME280 GND - G
- BME280 SCL - D4
- BME280 SDA - D3
Betrieb
- https://luftdaten.opennet-initiative.de
- https://rostock.maps.sensor.community
- https://app.luftdaten.info
- https://opensensemap.org
Beispiele:
- https://api-rrd.madavi.de/grafana/d/q87EBfWGk/temperature-humidity-pressure?var-chipID=esp8266-5478763
- https://api-rrd.madavi.de/grafana/d/GUaL5aZMz/pm-sensors?var-chipID=esp8266-5478763
- https://opensensemap.org/explore/5fa7e9b667d8a1001b056958 (Kab)
- https://opensensemap.org/explore/5fa6e60b67d8a1001b969275 (Frieda23)
Bilder
API Server
PHP unter LEDE/OpenWrt installieren (ca. 1,6 MB im Flash):
opkg update opkg install php5 php5-cgi opkg install zoneinfo-core zoneinfo-europe
Falls in "php-cgi -m" sockets nicht enthalten ist:
opkg install php5-mod-sockets
Sowie dann sockets in /etc/php.ini aktivieren (andernfalls diesen Schritt überspringen):
extension=sockets.so
Webserver mit PHP Unterstützung, hierzu /etc/config/uhttpd erweitern:
config uhttpd 'main' ... list interpreter ".php=/usr/bin/php-cgi"
Zeitzone manuell in /etc/php.ini setzen:
[Date] date.timezone = Europe/Berlin
InfluxDB
Datenbanksystem zur Speicherung der Luftdaten Zeitserien installieren:
apt install influxdb influxdb-client
Vorbereitung der Luftdaten Datenbank:
# influx Connected to http://localhost:8086 version 1.6.4 InfluxDB shell version: 1.6.4 > CREATE USER luftdaten WITH PASSWORD '<password>' WITH ALL PRIVILEGES > CREATE DATABASE luftdaten > CREATE USER sensor WITH PASSWORD '<password>' > GRANT WRITE ON luftdaten TO sensor > EXIT
Erreichbarkeit des Dienstes via HTTP mit Anmeldung:
# vi /etc/influxdb/influxdb.conf [http] auth-enabled = true
Für den externen Zugriff ggf. Firewall Anpassung vornehmen (tcp/8086 für API).
Optional a) Umstellung auf HTTPS (Ordner und Dateirechte setzen, +xr/+x; TODO):
/etc/influxdb/influxdb.conf https-enabled = true https-certificate = "/var/lib/dehydrated/certs/luftdaten.opennet-initiative.de/cert.pem" https-private-key = "/var/lib/dehydrated/certs/luftdaten.opennet-initiative.de/privkey.pem" # influx -ssl (-unsafeSsl)
Optional b) Einbindung in HTTPS Webserver:
a2enmod substitute /etc/apache2/sites-enabled/<site>.conf <VirtualHost *:443> .. AddOutputFilterByType SUBSTITUTE application/javascript Substitute "s?this.port=e.port||8086?this.port='80/db'?ni" ProxyPass /db/ http://localhost:8086/ ProxyPassReverse /db/ http://localhost:8086/ </VirtualHost>
Senden der Daten vom Sensor:
(x) Senden an InfluxDB (x) HTTPS Server: luftdaten.opennet-initiative.de Pfad: /db/write?db=luftdaten Port: 443 Benutzer: sensor Password: <password> Messung: <Ort-Name>
Luftdaten Sensor einrichten und Kontrolle:
# influx Connected to http://localhost:8086 version 1.6.4 InfluxDB shell version: 1.6.4 > auth > use luftdaten Using database luftdaten > show measurements name: measurements name ---- <Ort-Name> > exit
Abruf der letzten Daten:
> SELECT * FROM "<Ort-Name>" LIMIT 100'
Umzug von Daten:
> SELECT * INTO "<Ort-Name-Neu>" FROM "<Ort-Name-Alt>" GROUP BY * > DROP MEASUREMENT "<Ort-Name-Alt>"
Grafana
Externe Paketquelle als Debian APT Repository hinzufügen:
# wget -q -O - https://packages.grafana.com/gpg.key | apt-key add - # echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list # apt update
Installation von Grafana und dauerhaftes Aktivieren des Server-Dienstes:
# apt install grafana # systemctl daemon-reload && systemctl enable grafana-server.service # systemctl start grafana-server && systemctl status grafana-server
Zugriff über http://<server-name>:3000 (admin/admin) - ggf. entsprechende Firewall-Anpassung vornehmen.
Weitere Konfiguration:
- InfluxDB Datasource anlegen, URL = https://localhost:8086/, DB = luftdaten (luftdaten/<password>), Messung = <Stadtteil-Name>
- Dashboard "3763" importieren und mit InfluxDB verbinden
Einbindung in HTTPS Webserver:
/etc/apache2/sites-enabled/<site>.conf <VirtualHost *:443> .. ProxyPass / http://localhost:3000/ </VirtualHost>
Anpassungen der Konfiguration:
/etc/grafana/grafana.in [server] domain = luftdaten.opennet-initiative.de root_url = https://luftdaten.opennet-initiative.de/ [auth.anonymous] enabled = true
Konfiguration des Dashboards auf Basis "3763": Benutzer:MathiasMahnke/Luftdaten/Grafana_Dashboard
Sammelbestellung Sept. 2017
Name | Anzahl | Status |
---|---|---|
Lars K | 3 | Bezahlt |
Sascha S | 2 | Übergeben |
Mathias | 2 | Bezahlt |
Matthias M | 0 | Abgesagt |
Oyla | 1 | Übergeben |
Andreas K | 1 | Übergeben |
Ingo J | 1 | Übergeben |
Felix W | 2 | Übergeben |
Dirk R | 1 | Übergeben |
Oliver F | 1 | Bezahlt |
Tom H | 1 | Bezahlt |
Summe | 15 |
Komponente | Anzahl | AMZN | Summe | ALI | Summe | Bestellt - Anzahl | Bestellt - Preis | Geliefert |
---|---|---|---|---|---|---|---|---|
CH340 | 13 | 7,49 | 104,86 | 2,27 | 31,78 | 8 + 7 | 19,50 + 17,47 | OK |
USB Charger | 13 | 6,00 | 84,00 | 0,74 | 10,36 | 15 | 11,10 | OK |
USB Cable | 13 | 1,62 | 22,68 | 1,11 | 15,54 | 15 | 19,66 | OK |
Jumper Wire | 7 | 3,99 | 27,93 | 0,77 | 5,39 | 7 | 6,10 | |
SDS011 | 13 | 41,99 | 587,86 | 14,85 | 207,9 | 2 + 3*2 + 2*2 | 29,66 + 3*29,66 + 2*29,82 (La) + 2*29,82 (La) + 14,91 (La) | OK - 8 (Ma) + 6 (La) |
DHT22 | 13 | 4,65 | 65,10 | 1,83 | 25,62 | 8 + 7 | 18,94 + 15,76 | |
BMP280 | 15 | 11,03 | ||||||
HT Bogen | 26 | 1,50 | 39 | 1 (Hornbach) | 26,00 | 28 | 25,9 | OK |
PVC Schlauch | 4 | 2,86 | 14,30 | 1,75 (Hornbach) | 8,75 | 5 | 4,75 | OK |
Summe | 945,73 | 331,34 | 148,86 + 3*29,66 + 30,65 + 2*29,82 + 2*29,82 + 14,91 |
26,85 EUR pro Person (Stand 2017/10/08)
TODO: Fliegengitter, Kabelbinder
Sammelbestellung Nov. 2020
Name | Anzahl | Status |
---|---|---|
Thomas S | 1 | Bezahlt |
Mathias | 1 | Bezahlt |
Summe | 2 |
Kosten aktuell bei ca. 40 EUR (Einkauf in Deutschland). Komponenten siehe 2017. Fliegengitter/Kabelbinder jeder selbst.
TODO
- Smartphone App