Zum Inhalt springen

Benutzer:MathiasMahnke/Luftdaten: Unterschied zwischen den Versionen

Aus Opennet
Inhalt gelöscht Inhalt hinzugefügt
MathiasMahnke (Diskussion | Beiträge)
MathiasMahnke (Diskussion | Beiträge)
 
(135 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 11: Zeile 11:
* div. Kabelbinder
* div. Kabelbinder
* Fliegengitter od. ähnliches
* Fliegengitter od. ähnliches
* BME280 combined digital humidity, pressure and temperature sensor


ca. 35 EUR (2017)
ca. 35 EUR (2017), ca. 40 EUR (2020)


=== Installation ===
=== Installation ===


NodeMCU per USB Kabel verbinden, liefert Strom und Flash-Möglichkeit über USB-Serial.
CH34x USB Driver:
brew tap mengbo/ch340g-ch34g-ch34x-mac-os-x-driver https://github.com/mengbo/ch340g-ch34g-ch34x-mac-os-x-driver
brew cask install wch-ch34x-usb-serial-driver


CH34x USB Driver (Mac OS): <code>brew cask install wch-ch34x-usb-serial-driver</code>
Device (ggf. aufsteigende ID):
/dev/cu.wchusbserial1410


Device (ggf. aufsteigende ID): <code>/dev/cu.wchusbserial14110</code>
Arduino IDE:
brew cask install arduino
* Menü > Einstellungen > Additional Board Manager URLs (Zusätzliche Boardverwalter-URLs) = http://arduino.esp8266.com/stable/package_esp8266com_index.json
* Menü > Werkzeuge > Bord: Arduino.. > Boardverwalter > Suche = esp8266 + "Installieren"


Weiter per Flashing-Tool: http://firmware.sensor.community/airrohr/flashing-tool/
Luftdaten DE Firmware:

cd /tmp
[[Datei:Luftdaten Flasher2020.png|400px]]
wget https://www.madavi.de/sensor/update/data/latest_de.bin

~/Library/Arduino15/packages/esp8266/tools/esptool/0.4.9/esptool -vv -cd nodemcu \
Anschließend per WLAN "airRohr-<id>" verbinden. Die ID wurde zuvor im Flash-Tool angezeigt.
-cb 57600 -ca 0x00000 -cp /dev/cu.wchusbserial1410 -cf latest_de.bin

Zugriff auf die initiale Konfiguration: <code>http://192.168.4.1/</code> - 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 <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 ===

* 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 ===
=== Betrieb ===


* https://luftdaten.opennet-initiative.de
* http://rostock.maps.luftdaten.info/
* https://www.madavi.de/sensor/graph.php?sensor=esp8266-5478763-sds011 (ID = 5585)
* https://rostock.maps.sensor.community
* https://app.luftdaten.info
* https://www.madavi.de/sensor/graph.php?sensor=esp8266-5478763-dht (ID = 5586)
* https://opensensemap.org/explore/59b6e71dd67eb50011566706
* 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 ===
=== Bilder ===
Zeile 47: Zeile 74:
Kab17 LuftdatenSensor 2.jpg|Gehäuse für Außen
Kab17 LuftdatenSensor 2.jpg|Gehäuse für Außen
</gallery>
</gallery>

=== 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 ===
=== Sammelbestellung Sept. 2017 ===
Zeile 53: Zeile 211:
! Name
! Name
! Anzahl
! Anzahl
! Status
|-
|-
| Lars K
| Lars K
| 3
| 3
| Bezahlt
|-
|-
| Sascha S
| Sascha S
| 1
| 2
| Übergeben
|-
|-
| Mathias
| Mathias
| 2
| 2
| Bezahlt
|-
| Opennet
| 0-1
|-
|-
| Matthias M
| Matthias M
| 0-1
| 0
| Abgesagt
|-
|-
| Oyla
| Oyla
| 1
| 1
| Übergeben
|-
|-
| Andreas K
| Andreas K
| 1
| 1
| Übergeben
|-
|-
| Ingo J
| Ingo J
| 1
| 1
| Übergeben
|-
|-
| Felix W
| Felix W
| 2
| Übergeben
|-
| Dirk R
| 1
| 1
| Übergeben
|-
| Oliver F
| 1
| Bezahlt
|-
| Tom H
| 1
| Bezahlt
|-
! Summe
! 15
|-
|}
|}

{| class="wikitable"
! 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 ===

{| class="wikitable"
! 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 ===

* https://github.com/munin-monitoring/contrib/tree/master/plugins/luftdaten
* https://grafana.com/grafana/dashboards/3763
* https://github.com/opendata-stuttgart/airrohr-firmware-flasher

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

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

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