# Datenverarbeitung

Diese Seite beschreibt den Datenfluss, von den Sensoren bis zum finalen Dashboard.

## Übersicht

[![connecting_peaks_datenfluss.png](https://wiki.oberlab.de/uploads/images/gallery/2023-10/scaled-1680-/VhShR1g8g2lgn1E6-connecting-peaks-datenfluss.png)](https://wiki.oberlab.de/uploads/images/gallery/2023-10/VhShR1g8g2lgn1E6-connecting-peaks-datenfluss.png)

## Datentransfer Sensor → TTN

Die Messwerte der einzelnen Counter werden über das [LoRa](https://wiki.oberlab.de/books/allgemeines-wissen/page/lora-ttn "LoRa & TTN") Funkprotokoll an das The Things Network (TTN) übermittelt.

Im Oberlab Account bei TTN ist die Applikation *oberlab-counter-sandbox* dafür eingerichtet worden. DeviceIDs für insgesamt 15 Geräte (5 jeweils für Schwaz/Geretsried/Miesbach) wurden angelegt. Die Liste ist unter /Projekte/connecting-peaks/Sensor\_Code/TTN\_EIDs.ods in der OberCloud abgelegt.

Der Payload Formatter setzt die 10 Bytes Daten in folgende felder um:

```javascript
data.wifi = (input.bytes[1] << 8) + input.bytes[0];
data.ble = (input.bytes[3] << 8) + input.bytes[2];
data.battery = (input.bytes[5] << 8) + input.bytes[4];
data.wifi_new = (input.bytes[7] << 8) + input.bytes[6];
data.ble_new = (input.bytes[9] << 8) + input.bytes[8];
```

Die fertigen Datenpakjete stehen anschließend am [MQTT](https://wiki.oberlab.de/books/allgemeines-wissen/page/mqtt "MQTT") Server von TTN zur Verfügung und können prinzipiell dort unter dem Topic `v3/oberlab-counter-sandbox@ttn/` abgegriffen werden.

## Ober-MQTT Server

Der zentrale MQTT Server vom Oberlab spiegelt die Sensordaten jedoch nochmal in's Oberlab, wo sie unter dem Topic `connecting_peaks/sandbox/` verfügbar sind.

## Ablage in der Datenbank

Die Abfrage vom MQTT Server und die Übermittlung in die Influx Datenbank erfolgt über den Dienst [Telegraf](https://wiki.oberlab.de/books/allgemeines-wissen/page/telegraf "Telegraf"). Folgender Teil der `telegraf.conf` ist dafür relevant (*wobei die Renames nicht vollständig sind - geht aber trotzdem…*):

```plaintext
[[inputs.mqtt_consumer]]
  ## Topics that will be subscribed to.
  topics = [
    "connecting_peaks/sandbox/#",
  ]
  data_format="json_v2"
  ## Enable extracting tag values from MQTT topics
  ## _ denotes an ignored entry in the topic path
  [[inputs.mqtt_consumer.topic_parsing]]
    topic = "connecting_peaks/sandbox/devices/+/+"
    measurement = "_/_/_/_/measurement"
    tags = "_/_/_/device/_"
  [[inputs.mqtt_consumer.json_v2]]
    [[inputs.mqtt_consumer.json_v2.object]]
        path = "[@this]"
        timestamp_key = "epoch"
        timestamp_format = "unix"
    [inputs.mqtt_consumer.json_v2.object.renames]
        battery = "uplink_message.decoded_payload.battery"
        ble = "uplink_message.decoded_payload.ble"
        wifi = "uplink_message.decoded_payload.wifi"
```

Die Daten werden in die [InfluxDB](https://wiki.oberlab.de/books/allgemeines-wissen/page/influxdb "InfluxDB") Datenbank *sandbox* abgelegt.

## Visualisierung in Grafana

[Grafana](https://wiki.oberlab.de/books/allgemeines-wissen/page/grafana "Grafana") dient der Anzeige der Daten aus der InfluxDB. Somit können nur Datensätze angezeigt werden, die die gesamte Übertragungskette LoRa→TTN→MQTT→MQTT→Telegraf→InfluxDB durchlaufen sind.

Es können verschiedene Dashboards erstellt werden, um unterschiedliche Darstellungen anzubieten.

Das Hauptdashboard ist unter [https://connectingpeaks.oberlab.de/d/FN8cHh8Vz/sandbox?orgId=1&amp;refresh=1m&amp;from=now-24h&amp;to=now](https://connectingpeaks.oberlab.de/d/FN8cHh8Vz/sandbox?orgId=1&refresh=1m&from=now-24h&to=now) öffentlich erreichbar.

Eine Vor-Selektierung der Sensoren kann in die URL eingebunden werden, z.B. für Schwaz: [https://connectingpeaks.oberlab.de/d/FN8cHh8Vz/sandbox?orgId=1&amp;refresh=1m&amp;var-Sensors=schwaz-pxc-01&amp;var-Sensors=schwaz-pxc-02&amp;var-Sensors=schwaz-pxc-03&amp;from=now-24h&amp;to=now](https://connectingpeaks.oberlab.de/d/FN8cHh8Vz/sandbox?orgId=1&refresh=1m&var-Sensors=schwaz-pxc-01&var-Sensors=schwaz-pxc-02&var-Sensors=schwaz-pxc-03&from=now-24h&to=now)

Folgende Messgrößen sind in den jeweiligen Graphen ersichtlich:

- WIFI: Anzahl der erfassten WiFi Geräte
- BLE: Anzahl der erfassten Bluetooth Geräte
- WIFI New: Anzahl der erfassten WiFi Geräte, die an diesem Tag noch nicht gezählt wurden
- BLE New: Anzahl der erfassten Bluetooth Geräte, die an diesem Tag noch nicht gezählt wurden
- WIFI new 24h: Gesamt Zahl der WiFi Geräte, die an dem Tag erfasst wurden
- BLE New 24h: Gesamt Zahl der Bluetooth Geräte, die an dem Tag erfasst wurden
- Voltage: Spannung der internen Batterie – Paxcounter läuft im Normalbetrieb solange die Spannung über 3.7V bleibt

Ein Punkt auf dem jeweiligen Graphen entspricht einer übertragenen Messung. Die Kurven der 3 Counter sind farblich unterschiedlich dargestellt.

## Projektspezifische Dienste

Die Dienste Telegraf, InfluxDB und Grafana laufen in einer projektspezifischen VM (*pconnectingpeaks*) auf dem Oberlab-Server. Damit ergibt sich eine logische Abgrenzung zu anderen Oberlab-Projekten.