Skip to content
Emil Tabakov edited this page Oct 18, 2017 · 42 revisions

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 auf einem lokalen Webserver wie einem Raspberry Pi im lokalen Netzwerk 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

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)
Weitergehende Infos zu InfluxDB
https://www.influxdata.com/

Ausführlichere Beschreibung

API 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: 7

Accessing the API data:

We have some 'API' endpoints to access the sensor data. The data is saved once per minute due to performance reasons:
http://api.luftdaten.info/static/v1/data.json - all measurements of the last 5 minutes for all sensors
http://api.luftdaten.info/v1/sensor/{apiID}/ - all measurements of the last 5 minutes for one sensor
http://api.luftdaten.info/v1/filter/{query} - all measurements of the last 5 minutes filtered by query

  • type={sensor type} : comma separated list of sensor types, i.e. 'SDS011,BME280'
  • area={lat,lon,distance} : all sensors within a max. radius
  • box={lat1,lon1,lat2,lon2} : all sensors in a 'box' with the given coordinates

http://api.luftdaten.info/static/v2/data.json - average of all measurements per sensor of the last 5 minutes for all sensors
http://api.luftdaten.info/static/v2/data.1h.json - average of all measurements per sensor of the last hour
http://api.luftdaten.info/static/v2/data.24h.json - average of all measurements per sensor of the 24 hours
http://api.luftdaten.info/static/v2/data.dust.min.json - same as data.json but dust sensors only
http://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