Skip to content
Rajko Zschiegner edited this page Jan 22, 2021 · 42 revisions

Change language: EN

nächste Seite: Pinouts NodeMCU v2, v3

API Luftdaten.info (aka dusti.api)

Die API nimmt die Sensordaten entgegen und dient als Basis für die grafische Darstellung auf http://maps.luftdaten.info/ . Zudem werden die Daten der "öffentlichen" Sensoren einmal täglich (gegen 8:00 Uhr) als CSV exportiert und unter http://archive.luftdaten.info/ zur Verfügung gestellt.

API Madavi.de

Die API nimmt ebenfalls die Sensordaten entgegen und speichert diese in ein CSV-Dateien (jeweils eine Datei pro Sensor und Tag). Desweiteren werden die Daten in einer RoundRobin-Datenbank abgelegt und via RRDTools grafisch aufbereitet. Das Dateiarchiv kann unter https://www.madavi.de/sensor/csvfiles.php abgerufen werden, die grafische Darstellung unter https://www.madavi.de/sensor/graph.php .

OpenSenseMap

Opensensemap ist eine freie Plattform für offene Sensordaten. Webseite sowie API sind quelloffen. Neben zahlreichen Projekten, welche Daten an diese Plattform liefern, kann auch der Feinstaubsensor seine Daten dorthin übertragen. Nutzer können dort ihre Werte anzeigen und als Graph aufbereiten lassen. Eine dort erzeugte "Box" hat eine eigene ID, diese ist auf der Konfigurationsseite des Feinstaubsensors einzutragen. Danach ist der API-Punkt in der Konfiguration zu aktivieren.

An eigene API senden

Die Daten können mit dieser Funktion auf einem Webserver gespeichert werden. Der Menüpunkt "An eigene API senden" auf der Konfigurationsseite des Feinstaubsensors muss entsprechend aktiviert und die Zieladresse mit Server, Pfad, Port sowie optional Benutzer und Passwort eingetragen werden. Zum Speichern und späteren Auswerten der Daten steht ein einfaches PHP-Script bereit:

https://github.com/opendata-stuttgart/madavi-api/blob/master/data_simple.php

Das speichert die gelieferten Daten in einer täglichen .csv-Datei ab. Die Daten werden im .json-Format und nicht im $_post-Format geliefert! Dieses Script kann auch Grundlage zur Speicherung in einer eigenen Datenbank verwendet werden (selbst programmieren).

Issue #69 gibt weitere Hinweise und Codebeispiele für PHP:
https://github.com/opendata-stuttgart/meta/issues/69#issuecomment-314222830

Noch ein Beispiel: ein Python Script als Systemd Service empfängt die Daten und sendet sie an Domoticz:
https://github.com/joba-1/airrohr2domoticz

Hinweis: Wenn eine HTTPS-Verschlüsselung genutzt werden soll, muss dies über Port 443 geschehen. Das auf dem Server verwendete SSL-Zertifikat darf max. 2048 Bit groß sein, da der Speicher der NodeMCU nicht mehr verkraftet. Dabei werden (u.a. aus Performancegründen) nur folgende SSL/TLS ciphers unterstützt: TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_256_CBC_SHA

InfluxDB

InfluxDB ist eine spezielle Datenbank für zeitbasierte Messungen oder Events. Ist ein eigener InfluxDB-Server vorhanden, können die Daten des Sensors auch direkt an diesen geschickt werden. Die Voreinstellungen müssen für eigene Anwendung entsprechend angepasst werden. (Server, Port, Pfad, Benutzer) Dabei muss beim Server lediglich die Adresse, ohne Zusätze wie HTTP oder HTTPS eingegeben werden, wobei letzteres eh nicht unterstützt wird.
Weitergehende Infos zu InfluxDB
https://www.influxdata.com/
(Für HTTPS gelten die gleichen Einschränkungen wie für "An eigene API senden")

Ausführlichere Beschreibung

API Sensor.Community (vormals Luftdaten.info)

Für die NodeMCU wird als ID die chipID genutzt. Für andere Systeme setzt sich X-Sensor aus einem Namen für das System (z.B. raspi für Raspberry) und einer eindeutigen ID zusammen (Raspberry: Serial in /proc/cpuinfo) zusammen.

Beispiel POST für SDS011:
Header

Content-Type: application/json  
X-Pin: 1  
X-Sensor: esp8266-12345678  

Data

{
  "software_version": "your_version", 
  "sensordatavalues":[
    {"value_type":"P1","value":"66.04"},
    {"value_type":"P2","value":"53.32"}
  ]
}  

Beispiel POST für DHT22:
Header

Content-Type: application/json  
X-Pin: 7  
X-Sensor: esp8266-12345678  

Data

{
  "software_version": "your_version", 
   "sensordatavalues":[
     {"value_type":"temperature","value":"22.30"},
     {"value_type":"humidity","value":"34.70"}
  ]
}  

Andere Sensoren:
BMP180: value_types: temperature, pressure; X-Pin: 3
BME280: value_types: temperature, humidity, pressure; X-Pin: 11
PMS1003 - PMS 7003: value_types: P1 (PM10), P2 (PM2.5); X-Pin: 1

Die Adresse des API-Endpunkts zum Abliefern der Daten ist https://api.sensor.community/v1/push-sensor-data/ (bzw. https://api-rrd.madavi.de/data.php fuer Madavi.de).

API Endpunkte für den Abruf von Daten

#####V1

https://data.sensor.community/static/v1/data.json - all measurements of the last 5 minutes for all sensors.

https://data.sensor.community/airrohr/v1/filter/{query} - all measurements of the last 5 minutes filtered by query
    type={sensor type} : comma-separated list of sensor types, e.g. SDS011,BME280
    area={lat,lon,distance} : all sensors within a max radius e.g. 52.5200,13.4050,10 (Berlin)
    box={lat1,lon1,lat2,lon2} : all sensors in a 'box' with the given coordinates e.g. 52.1,13.0,53.5,13.5
    country={country code} : comma-separated list of country codes. Example BE,DE,NL

https://data.sensor.community/airrohr/v1/sensor/{apiID}/ - all measurements of the last 5 minutes for one sensor.

#####V2

https://data.sensor.community/static/v2/data.json - average of all measurements per sensor of the last 5 minutes for all sensors.
https://data.sensor.community/static/v2/data.1h.json - average of all measurements per sensor of the last hour.
https://data.sensor.community/static/v2/data.24h.json - average of all measurements per sensor of the 24 hours.
https://api.luftdaten.info/static/v2/data.dust.min.json - same as data.json but dust sensors only .
https://api.luftdaten.info/static/v2/data.temp.min.json - same as data.json but temp./humidity/air pressure sensors only.

Seiten

Dokumentation

Protokolle

for more, see Protokolle

Clone this wiki locally