Aufruf mit -m - also NUR Mongo
Docs angepasst
This commit is contained in:
255
docs/Laerm_API.md
Normal file
255
docs/Laerm_API.md
Normal file
@@ -0,0 +1,255 @@
|
||||
# Lärm-API
|
||||
rxf 2023-11-29
|
||||
|
||||
Über diese API können Lärm-Daten für alle Sensoren direkt aus der Datenbank ausgelesen werden. Es existieren verschiedene Aufrufe.
|
||||
Im folgenden wird der HOST, auf dem das Programm läuft (der Docker-Container *noise*) als **\<host\>** dargestellt.
|
||||
|
||||
### Live - Messdaten
|
||||
#### Aufruf
|
||||
<https://\<host\>/api/getsensordata?sensorid=xxx&csv=true&span=xxx&datetime=xxxx&pretty>
|
||||
oder ohne Parameter
|
||||
<https://\<host\>/api/getsensordata>
|
||||
|
||||
#### Parameter
|
||||
Alle Parameter sind optional und werden mit sinnvollen Defaults belegt, wenn sie fehlen.
|
||||
|
||||
* ***sensorid:*** Nummer des Sensors, für den die Daten abgerufen werden sollen. Ist der Sensor nicht in der Datenbank, wird ein leeres Werte-Array zurückgegeben. Default = 1 (Sensor 1 existiert nicht, also wird bei fehlender Sensornummer ein leeres Array zurück gegeben)
|
||||
* ***span:*** Zeitspanne in Tagen, für die die Daten ausgegeben werden. Default = 1, max = 30.
|
||||
* ***datetime*** Zeitpunkt, ab dem die Ausgabe beginnen soll. Die Zeitangabe erfolgt im ISO8601-Format (also YYY-MM-HHThh:mmZ).
|
||||
* Ist dieser Wert angegeben, so gilt für die zu berechnende Zeitspanne:
|
||||
Startzeitpunkt = ***datetime***, Endzeitpunkt = ***datetime + span (Tage)***
|
||||
* Ist dieser Wert **nicht** angegeben, so berechnet sich die Zeitspanne zu:
|
||||
Startzeitpunkt = ***aktuelle Zeit - span (Tage)***, Endzeitpunkt = ***aktuelle Zeit***
|
||||
* ***csv:*** Ist ***csv=true*** angegeben, so werden die Daten als CSV-Datei ausgegeben. Ohne das ***csv*** werden die Daten als JSON ausgegeben. Wird bei JSON-Ausgabe noch der Parameter **pretty** angegeben, so werden die JSON-Daten in einem gut lesbaren Format ausgegeben.
|
||||
|
||||
|
||||
#### Ausgabe
|
||||
Das Ausgabe-Format ist entweder ein JSON-Dokument oder eine CSV-Datei.
|
||||
Das JSON-Dokument hat z.B. folgenden Aufbau:
|
||||
|
||||
```
|
||||
{
|
||||
"err": null,
|
||||
"options": {
|
||||
"sid": 37833,
|
||||
"indoor": 0,
|
||||
"span": 1,
|
||||
"start": "2023-11-28T14:21:21Z",
|
||||
"data": "live",
|
||||
"count": 73
|
||||
},
|
||||
"values": [
|
||||
{
|
||||
"datetime": "2023-11-29T10:55:56Z",
|
||||
"LA_min": 35.94,
|
||||
"LA_max": 47.12,
|
||||
"LAeq": 39.74,
|
||||
"E10tel_eq": 9418.895965228417
|
||||
},
|
||||
{
|
||||
"datetime": "2023-11-29T11:07:47Z",
|
||||
"LA_min": 36.45,
|
||||
"LA_max": 52,
|
||||
"LAeq": 41.53,
|
||||
"E10tel_eq": 14223.287871228213
|
||||
},
|
||||
...
|
||||
]
|
||||
}
|
||||
```
|
||||
und als CSV-Datei:
|
||||
|
||||
```
|
||||
datetime,LAeq,LAmax,LAmin,"10^(LAeq/10)"
|
||||
2020-08-10T09:37:29,52.5,68.75,39.58,177827.94100389228
|
||||
2020-08-10T09:39:59,44.84,67.48,39.21,30478.94989627983
|
||||
2020-08-10T09:42:31,51.68,64.79,39.58,147231.25024327193
|
||||
2020-08-10T09:45:02,44.43,56.95,39.46,27733.20104651838
|
||||
2020-08-10T09:47:32,50.15,64.87,38.95,103514.2166679343
|
||||
2020-08-10T09:50:03,47.17,58.74,39.78,52119.47111050811
|
||||
...
|
||||
2020-08-11T09:31:00,55.05,71.6,40.13,319889.51096913975
|
||||
2020-08-11T09:33:31,53.91,66.21,40.62,246036.76041476274
|
||||
```
|
||||
|
||||
### Auswertungen der Messdaten
|
||||
------------------
|
||||
#### Aufruf
|
||||
<https://\<host\>/api/getsensordata?sensorid=xxx&data=xxx&peak=70&csv=true&span=xxx&datetime=xxxx&pretty>
|
||||
|
||||
#### Parameter
|
||||
Die Parameter sind die gleichen wie oben und optional.
|
||||
Als zusätzlicher Parameter kommt hier ***data*** hinzu. Darüber wird ausgewählt, welche Auswertung verwendet werden soll.
|
||||
|
||||
Die Bedeutung der einzelnen Werte für ***data***:
|
||||
|
||||
* ***data=live***: Ergibt die identische Ausgabe wie oben, d.h. data=live kann auch weggelassen werden.
|
||||
* ***data=havg***: Ausgabe der Stunden-Mittelwerte. In der Augabe wird die Anzahl der Überschreitungen (als ***peakcount***) des Lärm-Pegels über einen bestimmten db-Wert (default = 70) angegeben. Mit dem Parameter ***peak=xxx*** kan dieser db-Wert eingestellt werden.
|
||||
* ***data=davg***: Ausgabe der Tages-Mittelwerte. Für die Spitzenwert-Überschreitungen (***peakcount***) gilt das Gleiche wie bei Stundenmittel.
|
||||
* ***data=daynight***: Ausgabe der Tages- und der Nacht-Mittelwerte. Die Tagesmittel werden von 6:00 bis 22:00 Uhr und die Nachtmittel von 22:00 bis 6:00 Uhr berechnet.
|
||||
* ***data=lden***: Ausgabe des LDEN-Mittelwertes. Hier wird der Tag weiter aufgeteilt: Tag (D) ist von 6:00 bit 18:00 Uhr, Abend (E) ist von 18:00 bis 22:00 Uhr und Nacht (N) geht von 22:00 bis 6:00 Uhr. Die einzelnen Mittelwerte werden noch unterschiedlich bewertet und daraus dann der gesamte Mittelwert (der LDEN) berechnet.
|
||||
|
||||
#### Ausgabe
|
||||
Hie sind die Augaben ebenfalls als JSON-Dokument oder als CSV-Datei (mit der Option ***csv=true***) abrufbar.
|
||||
|
||||
Stundenmittel (JSON):
|
||||
|
||||
```
|
||||
{
|
||||
"err": null,
|
||||
"options": {
|
||||
"sid": 37833,
|
||||
"indoor": 0,
|
||||
"span": 7,
|
||||
"start": "2023-11-22T14:30:08Z",
|
||||
"data": "havg",
|
||||
"peak": 70,
|
||||
"count": 168
|
||||
},
|
||||
"values": [
|
||||
{
|
||||
"peakcount": 0,
|
||||
"datetime": "2023-11-24T00:00:00Z",
|
||||
"n_AVG": 38.42796079826682
|
||||
},
|
||||
{
|
||||
"peakcount": 0,
|
||||
"datetime": "2023-11-24T01:00:00Z",
|
||||
"n_AVG": 37.946929500486355
|
||||
},
|
||||
....
|
||||
]
|
||||
}
|
||||
|
||||
```
|
||||
Stundenmittel (CSV):
|
||||
|
||||
```
|
||||
datetime,n_AVG,peakcount
|
||||
2020-07-11T22:00:00Z,42.760062147998624,0
|
||||
2020-07-11T23:00:00Z,40.712802683893074,0
|
||||
2020-07-12T00:00:00Z,40.71753006698157,1
|
||||
2020-07-12T01:00:00Z,39.25606411190053,0
|
||||
```
|
||||
|
||||
Tagesmittel (JSON):
|
||||
|
||||
```
|
||||
{
|
||||
"err": null,
|
||||
"options": {
|
||||
"sid": 37833,
|
||||
"indoor": 0,
|
||||
"span": 30,
|
||||
"start": "2023-10-30T00:00:00Z",
|
||||
"data": "davg",
|
||||
"peak": 70,
|
||||
"count": 30
|
||||
},
|
||||
"values": [
|
||||
{
|
||||
"datetime": "2023-11-24T00:00:00Z",
|
||||
"n_AVG": 43.21691983032072,
|
||||
"peakcount": 39
|
||||
},
|
||||
{
|
||||
"datetime": "2023-11-25T00:00:00Z",
|
||||
"n_AVG": null,
|
||||
"peakcount": 7
|
||||
},
|
||||
...
|
||||
]
|
||||
}
|
||||
```
|
||||
Tagesmittel (CSV):
|
||||
|
||||
```
|
||||
datetime,n_AVG,peakcount
|
||||
2020-07-11T00:00:00Z,41.698517715727675,0
|
||||
2020-07-12T00:00:00Z,47.33575272178947,32
|
||||
2020-07-13T00:00:00Z,54.63937702461399,94
|
||||
```
|
||||
|
||||
Tag-Nacht-Mittel (JSON)
|
||||
|
||||
```
|
||||
{
|
||||
"err": null,
|
||||
"options": {
|
||||
"sid": 37833,
|
||||
"indoor": 0,
|
||||
"span": 30,
|
||||
"start": "2023-10-30T00:00:00Z",
|
||||
"data": "daynight",
|
||||
"count": 30
|
||||
},
|
||||
"values": [
|
||||
{
|
||||
"datetime": "2023-11-24T00:00:00Z",
|
||||
"n_dayAVG": 43.900464786300105,
|
||||
"n_nightAVG": 40.851023645531406
|
||||
},
|
||||
{
|
||||
"datetime": "2023-11-25T00:00:00Z",
|
||||
"n_dayAVG": null,
|
||||
"n_nightAVG": null
|
||||
},
|
||||
...
|
||||
]
|
||||
}
|
||||
|
||||
```
|
||||
Tag-Nacht-Mittel (CSV)
|
||||
|
||||
```
|
||||
datetime,n_dayAVG,n_nightAVG
|
||||
2020-07-11T22:00:00Z,0,40.93231330612532
|
||||
2020-07-12T06:00:00Z,49.14770564689205,46.99391595352652
|
||||
2020-07-13T06:00:00Z,56.305828057753864,64.57989823641728
|
||||
2020-07-14T06:00:00Z,63.62474952627255,43.17808436755339
|
||||
...
|
||||
```
|
||||
|
||||
LDEN (JSON)
|
||||
|
||||
```
|
||||
{
|
||||
"err": null,
|
||||
"options": {
|
||||
"sid": 37833,
|
||||
"indoor": 0,
|
||||
"span": 30,
|
||||
"start": "2023-10-30T00:00:00Z",
|
||||
"data": "lden",
|
||||
"count": 30
|
||||
},
|
||||
"values": [
|
||||
{
|
||||
"datetime": "2023-11-24T00:00:00Z",
|
||||
"lden": null
|
||||
},
|
||||
{
|
||||
"datetime": "2023-11-25T00:00:00Z",
|
||||
"lden": null
|
||||
},
|
||||
...
|
||||
]
|
||||
}
|
||||
```
|
||||
LDEN (CSV)
|
||||
|
||||
```
|
||||
datetime,lden
|
||||
2020-07-11T22:00:00Z,46.161208717927906
|
||||
2020-07-12T06:00:00Z,53.79509744837196
|
||||
2020-07-13T06:00:00Z,69.9515379149476
|
||||
2020-07-14T06:00:00Z,62.02707812443635
|
||||
2020-07-15T07:00:00Z,56.98105132364213
|
||||
```
|
||||
#### Daten abspeichern
|
||||
Um die ausgelesenen Messdaten in eine Datei abzuspeichern, kann am Einfachsten das Programm **curl** verwendet werden. Sollen z.B. die aktuellen Daten des Sensors *37833* als JSON in die Datei **sensor_37833.json** gespeichert werden, so sieht der Aufruf folgendermaßen aus:
|
||||
|
||||
~~~~
|
||||
curl -o sensor_37833.json "https://<host>/api/getsensordata?sensorid=37833"
|
||||
~~~~
|
||||
Entprechendes gilt für die anderen Auswertungen.
|
||||
105
docs/Readme.md
105
docs/Readme.md
@@ -1,6 +1,105 @@
|
||||
# Installation der Container
|
||||
rxf 2023-10-25
|
||||
#### Dateien
|
||||
#### Aufrufe
|
||||
rxf 2023-11-30
|
||||
### Dateien
|
||||
#### Directory-Struktur
|
||||
Die Datei **noise.tgz** enthält die folgenden Dateien und Verzeichnisse:
|
||||
|
||||
~~~
|
||||
<LOCALDIR>
|
||||
|
|
||||
+- <d>noisesensors
|
||||
|
|
||||
+- <f>docker-compose.yml
|
||||
+- <d>log
|
||||
+- <d>data
|
||||
| +- <d>mongo
|
||||
| | +- <d>data
|
||||
| | +- <d>entries
|
||||
| | | +- <f>create.js
|
||||
| + <d>influx
|
||||
| | + <d>data
|
||||
|
||||
<f>: file, <d>: directory
|
||||
~~~
|
||||
|
||||
* **docker-compose.yml**
|
||||
enthält die Anweisungen für die Docker-Container. Dies kann so an das aktuelle Portainer-Stack angehängt werden.
|
||||
* **log**
|
||||
Ablage für die Logdateien der einzelnene Container (**noise.log**, **sensorapi.log** und **readin.log**) . Diese werden täglich komprimiert. Es werden Versionen für 7 Tage aufgehoben.
|
||||
* **data**
|
||||
hier darunter befinden sich alle Daten, sowohl die Datenbanken als auch Konfigurationen. Außerdem werden jeweils die laufend eingelesenen Daten als **actdata.json** abgelegt. Diese werden bei jedem neuen Einlesen wieder überschrieben.
|
||||
* **data/mongo**
|
||||
Verzeichnis für die Mongo-Datenbank
|
||||
* **data/mngo/data**
|
||||
hier befinden sich die eingelesenen Daten
|
||||
* **data/mongo/entries**
|
||||
hier liegt die Datei **create.js**, mit deren Hilfe bei ersten Start der Datenbank die Collections und die Indexe erzeugt werden.
|
||||
* **data/influx**
|
||||
Verzeichnis für die Influx-Datenbank
|
||||
* **data/influx/data**
|
||||
Hier dann die eingelesenen Daten
|
||||
|
||||
|
||||
### Aufrufe
|
||||
Entpacken des Tar-Files **noise.tgz** in einem beliebigen Verzeichnis (das Direktoty *noisesensors* wird angelegt). Der komplette Pfad zu dem Verzeichnis (also ab root) muss in der Environmentvariablen **LOCALDIR** hinterlegt werden.
|
||||
|
||||
Nun das *docker-compose.yml* in das Portainer-Stack einfügen. Zusätzlich folgende Environment-Variablen festlegen:
|
||||
|
||||
~~~
|
||||
DOCKER_INFLUXDB_INIT_USERNAME=<username>
|
||||
DOCKER_INFLUXDB_INIT_PASSWORD=<passwort>
|
||||
DOCKER_INFLUXTOKEN=<token>
|
||||
MONGO_ROOT_USERNAME=<username1>
|
||||
MONGO_ROOT_PASSWORD=<passwort1>
|
||||
LOCALDIR=<directory, in die das .tgz entpackt wurde>
|
||||
~~~
|
||||
\<username>, \<passwort>, \<username1>, \<passwort1> und \<token> sind anzupassen.
|
||||
|
||||
Danach einloggen in das Docker-Registry auf *citysensor.de*:
|
||||
|
||||
~~~
|
||||
docker login docker.citysensor.de
|
||||
~~~
|
||||
Einloggen mit Username und Passwort (siehe mail), anschließend kann das Portainer-Stack gestartet werden (die Container werden beim ersten mal automatisch von *docker.citysensor.de* herunter geholt).
|
||||
|
||||
Damit sollte dann Alles laufen. Das Programm holt alle 5min die neuesten Daten von *sensor.community* ab und speichert sie in der Influx- und in der Mongo-Datenbank.
|
||||
Das Logfile kann via **tail -f log/noise.log** im Verzeichnise **noisesensors** mitgeschrieben werden.
|
||||
|
||||
|
||||
### Container
|
||||
* **readin**
|
||||
Über diesen Container werden alle 5 min. die aktuellen Daten von *sensor.community* abgeholt und in den beiden Datenbanken gespeichert
|
||||
|
||||
* **logrotate**
|
||||
Mit Hilfe dieses Containers werde die Log-Files im Unterverzeichnis *log* täglich rotiert. Es werden 7 Versionen behalten, ältere gelöscht.
|
||||
|
||||
* **sensorapi**
|
||||
Über diesen Container werde die Daten aus der Mongo-Datenbank ausgelesen, aufbereitet und als JSON- oder CSV-Datei ausgegeben.
|
||||
|
||||
* **noise**
|
||||
Mit diesem Container wird die Grafik aufbereitet. Auch kann darüber die API (im Container *sensorapi*) angesprochen und die Daten abgerufen werden. (Für die Parameter der Anfrage siehe die extra Beschreibung **Laerm_API**). Dieser Container sollte von außen über einen Domainnamen erreichbar sein. Ansonsten hört er auf **Port 3003** auf HTTP-Anfragen.
|
||||
|
||||
* **mongodb**
|
||||
Die Mongo-Datenbank. Es gibt eine Datenbank namens **sensor_data**. Diese hat folgende Collections:
|
||||
* noise_sensors
|
||||
Hier weden die reinen Messwerte der einzelnen Sensoren (time, sensorid, Werte) gesammelt.
|
||||
* properties
|
||||
Hier liegen für alle Sensoren die Metadaten (wie Ortskoordinaten, Typ, Zeitpunkt der letzten Übertragung etc.)
|
||||
* statistics
|
||||
Dient nur Kontrolle, schreibt verschiedenen Statistikdaten wie Dauer des Einlesens, Dauer des Speicherns in den DBs etc.
|
||||
**Zugriff:**
|
||||
Am Besten über das Programm **MongoDB Compass**. Zugangsdaten entprechend der im Portainer hinterlegten.
|
||||
|
||||
* **influxdb**
|
||||
Die Influx-Datenbank. Hier werden in dem Bucket *sensor_data* die reinen Messwert der einzelnen Sensoren gespeichert.
|
||||
**Zugriff:**
|
||||
http://\<server>:8086
|
||||
Logindaten: Entsprechen der im Portainer hinterlegten.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user