Benutzer:MathiasMahnke/Luftdaten

Aus Opennet
Wechseln zu: Navigation, Suche

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/

Luftdaten Flasher2020.png

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:

Luftdaten Sensor2020.png

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

Beispiele:

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

Image Renderer Plugin:

grafana-cli plugins install grafana-image-renderer
apt install libxdamage1 libxext6 libxi6 libxtst6 libnss3 libnss3 libcups2 libxss1 libxrandr2 libasound2 libatk1.0-0 libatk-bridge2.0-0 libpangocairo-1.0-0 libpango-1.0-0 libcairo2 libatspi2.0-0 libgtk3.0-cil libgdk3.0-cil libx11-xcb-dev

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)

http://www.zoll.de/DE/Fachthemen/Zoelle/Zollbefreiungen/Aussertarifliche-Zollbefreiung/Sendungen-mit-geringem-Wert/sendungen-mit-geringem-wert_node.html 22 EUR max.

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
  • Frieda23 BMP vs. BME (Sensemap)

Links

Meine Werkzeuge
Namensräume

Varianten
Aktionen
Start
Opennet
Kommunikation
Karten
Werkzeuge