Albergue para EasyHive

@Ron, Daria und Lukas von EasyHive bauen den neuen Datenlogger auf Basis eines Cortex-M0, machen Telemetrie per UDP über LTE Cat M1 ¹ und das Backend auf Basis von express – eine gute Gelegenheit sie mit dem Neuzugang Terkin for JavaScript zu unterstützen und andersherum ebenfalls danke für die Gelegenheit.

Die Designstudie: Stockübersicht & Bienenwetter (BeeKloppte) von @wtf freut sich bestimmt über weitere Teilnehmer. Herzlich willkommen!

Codeschnipsel zur Telemetriedatenübertragung

Die Telemetriedaten werden hier von Backend zu Backend übertragen, mindestens der Parameter “node” sollte also mit dem jeweiligen, über das UDP-Telemetriedatenpaket vermittelten Identifizierer belegt werden.

var terkin = require('./terkin');

var telemetry_node = new terkin.TelemetryNode(
    "https://swarm.hiveeyes.org/api",
    {
        "realm": "easyhive",
        "network": "testdrive",
        "gateway": "jena",
        "node": "cortex-m0-testbench",
    }
);

var data = {"temperature": 42.84, "humidity": 83.01};
telemetry_node.transmit(data);

Bei Fragen: fragen!

Viele Grüße und Freude beim Datenschaufeln aus Berlin nach Jena.


¹

Display

Wenn man beispielhaft Telemetriedaten erzeugt und überträgt per

echo '{"temperature": 42.42, "humidity": 84.84}' | mosquitto_pub -h swarm.hiveeyes.org -t easyhive/testdrive/foo/bar/data.json -l

sollten sie direkt z.B. im Grafana Instant Dashboard “easyhive-testdrive” zu sehen sein.

Die drop-in Konfiguration zu Kotori für einen selbst betriebenen Daten-Historian rund um InfluxDB und Grafana wäre für Euch die folgende.

root@elbanco:~# cat /etc/kotori/apps-available/easyhive.ini
; ------------------------------------------
; Name:     Easyhive
; Date:     June 2019 - ongoing
; About:    A monitoring platform collecting sensor 
;           data for the beekeeper community.
; Channel:  Transport: HTTP over TCP; Format: x-www-form-urlencoded
; Storage:  InfluxDB
; See also: https://easyhive.org/
;           https://getkotori.org/docs/applications/hiveeyes.html
; ------------------------------------------


; -----------------------------
; Data acquisition through MQTT
; -----------------------------
[easyhive]
enable      = true
type        = application
realm       = easyhive
mqtt_topics = easyhive/#
application = kotori.daq.application.mqttkit:mqttkit_application

# How often to log metrics
metrics_logger_interval = 60

# Enable automatic dashboard refresh interval taming
dashboard_refresh_taming = true


; --------------------------------------------------------------------
; Data acquisition through HTTP
; https://getkotori.org/docs/handbook/acquisition/protocol/http.html
; https://getkotori.org/docs/applications/forwarders/http-to-mqtt.html
; --------------------------------------------------------------------
[easyhive.http-acquisition]
enable          = true

type            = application
application     = kotori.io.protocol.forwarder:boot

realm           = easyhive
source          = http:/api/easyhive/{address:.*}/{slot:(data|event)} [POST]
target          = mqtt:/easyhive/{address}/{slot}.json


; ----------------------------------------------------------------------
; Data export
; https://getkotori.org/docs/handbook/export/
; https://getkotori.org/docs/applications/forwarders/http-to-influx.html
; ----------------------------------------------------------------------
[easyhive.data-export]
; See also:
enable          = true

type            = application
application     = kotori.io.protocol.forwarder:boot

realm           = easyhive
source          = http:/api/{realm:easyhive}/{network:.*}/{gateway:.*}/{node:.*}/{slot:(data|event)}.{suffix} [GET]
target          = influxdb:/{database}?measurement={measurement}
transform       = kotori.daq.intercom.strategies:WanBusStrategy.topology_to_storage,
                  kotori.io.protocol.influx:QueryTransformer.transform