Benutzer:MathiasMahnke/Luftdaten: Unterschied zwischen den Versionen

Aus Opennet
Wechseln zu: Navigation, Suche
(Grafana)
(Grafana)
 
(22 dazwischenliegende Versionen von einem Benutzer werden nicht angezeigt)
Zeile 32: Zeile 32:
  
 
Nun kann mittels Flash-Tool das Gerät im lokalen Netzwerk via IPv4 gefunden werden ("Im Netzwerk suchen"). Weitere Einrichtung dann via Webinterface unter <code>http://<ipv4-adresse></code>.
 
Nun kann mittels Flash-Tool das Gerät im lokalen Netzwerk via IPv4 gefunden werden ("Im Netzwerk suchen"). Weitere Einrichtung dann via Webinterface unter <code>http://<ipv4-adresse></code>.
 +
 +
Anbindung an die grafische Auswertung via Webinterface Konfiguration > APIs:
 +
 +
[[Datei:Luftdaten Sensor2020.png|400px]]
 +
 +
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 ===
 
=== Verdrahtung ===
Zeile 57: Zeile 65:
 
* https://api-rrd.madavi.de/grafana/d/q87EBfWGk/temperature-humidity-pressure?var-chipID=esp8266-5478763
 
* 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://api-rrd.madavi.de/grafana/d/GUaL5aZMz/pm-sensors?var-chipID=esp8266-5478763
* https://opensensemap.org/explore/5fa7e9b667d8a1001b056958
+
* https://opensensemap.org/explore/5fa7e9b667d8a1001b056958 (Kab)
 +
* https://opensensemap.org/explore/5fa6e60b67d8a1001b969275 (Frieda23)
  
 
=== Bilder ===
 
=== Bilder ===
Zeile 98: Zeile 107:
 
   > CREATE USER luftdaten WITH PASSWORD '<password>' WITH ALL PRIVILEGES
 
   > CREATE USER luftdaten WITH PASSWORD '<password>' WITH ALL PRIVILEGES
 
   > CREATE DATABASE luftdaten
 
   > CREATE DATABASE luftdaten
 +
  > CREATE USER sensor WITH PASSWORD '<password>'
 +
  > GRANT WRITE ON luftdaten TO sensor
 
   > EXIT
 
   > EXIT
  
Zeile 105: Zeile 116:
 
   auth-enabled = true
 
   auth-enabled = true
  
Anschließend Luftdaten Sensor einrichten und Kontrolle:
+
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
 
  # influx
 
   Connected to http://localhost:8086 version 1.6.4
 
   Connected to http://localhost:8086 version 1.6.4
 
   InfluxDB shell version: 1.6.4
 
   InfluxDB shell version: 1.6.4
 +
  > auth
 
   > use luftdaten
 
   > use luftdaten
 
   Using database luftdaten
 
   Using database luftdaten
Zeile 115: Zeile 157:
 
   name
 
   name
 
   ----
 
   ----
   feinstaub
+
   <Ort-Name>
 
   > exit
 
   > exit
  
 
Abruf der letzten Daten:
 
Abruf der letzten Daten:
  # influx -execute 'SELECT * FROM "feinstaub" LIMIT 100' -database="luftdaten"
+
  > SELECT * FROM "<Ort-Name>" LIMIT 100'
  
Für den externen Zugriff ggf. Firewall Anpassung vornehmen (tcp/8086 für API).
+
Umzug von Daten:
 +
> SELECT * INTO "<Ort-Name-Neu>" FROM "<Ort-Name-Alt>" GROUP BY *
 +
> DROP MEASUREMENT "<Ort-Name-Alt>"
  
 
=== Grafana ===
 
=== Grafana ===
Zeile 127: Zeile 171:
 
Externe Paketquelle als Debian APT Repository hinzufügen:
 
Externe Paketquelle als Debian APT Repository hinzufügen:
 
  # wget -q -O - https://packages.grafana.com/gpg.key | apt-key add -
 
  # 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
+
  # echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
 
  # apt update  
 
  # apt update  
  
Zeile 138: Zeile 182:
  
 
Weitere Konfiguration:
 
Weitere Konfiguration:
* InfluxDB Datasource anlegen, URL = http://localhost:8086/, DB = luftdaten (luftdaten/<password>), Messung = <Stadtteil-Name>
+
* InfluxDB Datasource anlegen, URL = https://localhost:8086/, DB = luftdaten (luftdaten/<password>), Messung = <Stadtteil-Name>
 
* Dashboard "3763" importieren und mit InfluxDB verbinden
 
* 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 ===
 
=== Sammelbestellung Sept. 2017 ===
Zeile 338: Zeile 403:
 
=== TODO ===
 
=== TODO ===
  
* Luftdruck per BME280 -> Löten (ggf. via Sascha S, Dirk R, Ingo J)
 
 
* Smartphone App
 
* Smartphone App
* InfluxDB mit HTTPS?
+
* Frieda23 BMP vs. BME (Sensemap)
 +
 
 +
=== Links ===
 +
 
 
* https://github.com/munin-monitoring/contrib/tree/master/plugins/luftdaten
 
* https://github.com/munin-monitoring/contrib/tree/master/plugins/luftdaten
 
* https://grafana.com/grafana/dashboards/3763
 
* https://grafana.com/grafana/dashboards/3763
 
* https://github.com/opendata-stuttgart/airrohr-firmware-flasher
 
* https://github.com/opendata-stuttgart/airrohr-firmware-flasher

Aktuelle Version vom 27. Februar 2021, 21:21 Uhr

Inhaltsverzeichnis

[Bearbeiten] 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)

[Bearbeiten] 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.

[Bearbeiten] 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

[Bearbeiten] Betrieb

Beispiele:

[Bearbeiten] Bilder

[Bearbeiten] 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

[Bearbeiten] 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>"

[Bearbeiten] 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

[Bearbeiten] 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

[Bearbeiten] 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.

[Bearbeiten] TODO

  • Smartphone App
  • Frieda23 BMP vs. BME (Sensemap)

[Bearbeiten] Links

Meine Werkzeuge
Namensräume

Varianten
Aktionen
Start
Opennet
Kommunikation
Karten
Werkzeuge