Erarbeitung eines kanonischen Datenschemas für imkerliche Meßdaten

underway
high
improvement
#1

Einleitung

Um das Benutzerhandbuch Meßdaten an die Hiveeyes Plattform übermitteln runder zu kriegen, arbeiten wir endlich an einer Empfehlung, wie die kanonischen Feldnamen in die InfluxDB Datenbank übermittelt werden sollten.

Metadaten

Komplementär zu den Meßdaten haben wir bereits ein wenig zu den zu erhebenden Metadaten gesammelt.

Vorbild Beep

@marten.schoonman und @iconize vom Beep Projekt haben viel Aufwand betrieben, ein Datenschema für die imkerlichen Stockkarteneinträge zu erarbeiten. Die Meßdaten sind zwar deutlich weniger komplex und vielfältig, trotzdem wollen wir diesem Thema endlich höhere Aufmerksamkeit widmen.

Todo: Referenz/Link.

Ziel

Wenn man die Daten an die Plattform in diesem Format übermittelt oder einen entsprechenden Umsetzer benutzt, kommt man out-of-the-box in den Genuß der meisten Features, wie z.B. fertige Dashboards wie Standard Dashboard für imkerliche Daten / Default dashboard for beekeepers oder Designstudie: Stockübersicht & Bienenwetter (BeeKloppte). Bei Erarbeitung eines kanonischen Dashboards für imkerliche Daten kümmern wir uns darum, wie das zusammengeht.

Bestandsaufnahme

Wir greifen exemplarisch ein paar Teilnehmer heraus.

Open Hive

Die Fraktion rund um die BeeKloppten, die @clemens’ Open Hive Systeme verwendet, übermittelt folgende Feldnamen.

Open Hive field names
> show field keys from default_1_sensors
name: default_1_sensors
fieldKey      fieldType
--------      ---------
H1 Temp       float
H2 Temp       float
H3 Temp       float
H4 Temp       float
H5 Temp       float
Inside Humid  float
Inside Temp   float
Outside Humid float
Outside Temp  float
Voltage       float
Weight        float
> show field keys from default_2_sensors
name: default_2_sensors
fieldKey            fieldType
--------            ---------
Aussen-Feuchtigkeit float
Aussen-Temperatur   float
Gewicht             float
Spannung            float
> show field keys from default_5_sensors
name: default_5_sensors
fieldKey      fieldType
--------      ---------
Inside Temp   float
Outside Humid float
Outside Temp  float
Voltage       float
Weight        float

Misc

Feldnamen verschiedener Teilnehmer.

Miscellaneous field names

@einsiedlerkrebs übermittelt

> show field keys from vay55_42_sensors
name: vay55_42_sensors
fieldKey    fieldType
--------    ---------
humidity    float
node        float
temperature float
> show field keys from vay55_999_sensors
name: vay55_999_sensors
fieldKey fieldType
-------- ---------
hum1     float
hum2     float
temp1    float
temp2    float
temp3    float
temp4    float
wght1    float
> show field keys from vay55_2_sensors
name: vay55_2_sensors
fieldKey fieldType
-------- ---------
hum1     float
loops1   float
rssi1    float
temp1    float
temp2    float
temp3    float
temp4    float
temp5    float
temp6    float
temp7    float
temp8    float
wght1    float
wght2    float

@karsten übermittelt

> show field keys from cfb_hive1_sensors
name: cfb_hive1_sensors
fieldKey               fieldType
--------               ---------
airhumidity            float
airhumidity_outside    float
airtemperature         float
airtemperature_outside float
broodtemperature       float
entrytemperature       float
weight                 float

@Thias übermittelt

> show field keys from pdm_node_1_sensors
name: pdm_node_1_sensors
fieldKey      fieldType
--------      ---------
battery_level float
hum_in        float
temp_in       float
temp_out      float
weight        float
1 Like
Meßdaten an die Hiveeyes Plattform übermitteln
Konfiguration eines Grafana-Dashboards auf ein anderes übertragen
#2

Vorschlag

Blaupause

So wie sich bei Develop BOB on FiPy mittlerweile ein lowlevel Schema herausgebildet hat, welches die Hardwaretopologie reflektiert à la

{
  "humidity.0x77.i2c:0": 73.46,
  "pressure.0x77.i2c:0": 1021.17,
  "temperature.0x77.i2c:0": 22.67,
  "temperature.28ff641d8fc3944f.onewire:0": 23.5,
  "temperature.28ff641d8fdf18c1.onewire:0": 23.75,
  "weight": 42.42,
  "memfree": 2291968
}

könnte man das Ganze auch hier aufziehen, mit einer ähnlichen Konvention à la "{was}.{wo}".

Allgemeine Specs

Ich denke mal wir setzen (vorerst) einfach mal ein paar Dinge voraus. z.B. die Einheiten in Grad Celsius und Kilogramm, Bytes, usw.; Englischsprachige Labels; Nicht zu lang, aber auch nicht zu knapp.

Gerne hier noch mehr dazu sammeln.

Beispiele

Einfaches Beispiel I

{
  "humidity.outside": 33.46,
  "temperature.outside": 22.67,
  "temperature.inside": 23.5,
  "weight": 42.42,
  "memory.free": 2291968
}

Einfaches Beispiel II

{
  "humidity.outside": 33.46,
  "temperature.outside": 22.67,
  "temperature.inside:entry": 21.5,
  "temperature.inside:brood": 23.5,
  "weight": 42.42,
  "memory.used": 2950912
}

Beispiel mit Temperature Array

Klar, dass Open Hive Temperature Array hier mehr Daten rauswirft, die wir sinnvoll benennen sollten. Die Positionen/Orte der Sensoren sind ja sowas wie “Wabengasse 1”, “Wabengasse 2”, nicht? Auf Englisch hieße das wohl “honeycomb alley” oder auch “honeycomb lane”. “lane” wiederum fände ich ein schönes kompaktes Label für diesen Zweck.

{
  "humidity.outside": 33.46,
  "temperature.outside": 22.67,
  "temperature.inside": 23.5,
  "temperature.lane:1": 22.67,
  "temperature.lane:2": 22.67,
  "temperature.lane:3": 22.67,
  "temperature.lane:4": 22.67,
  "weight": 42.42
}

Beispiel mit vier Wägezellen

Manche haben ein Setup mit vier Wägezellen. Die Daten könnte man folgendermaßen übermitteln.

{
  "weight.corner:1": 10.605,
  "weight.corner:2": 10.605,
  "weight.corner:3": 10.605,
  "weight.corner:4": 10.605,
  "weight": 42.42
}
#3

Neben der Wabengasse könnten die aber auch mehrfach pro Magazin / horizontale Schicht sein, d.h. Wabengasse 1, Brutraum 1 und Wabengasse 1, Brutraum 2 oder Wabengasse 1, Honigraum 1 …

So weit ich weiß
hive body = Brutraum, BR
hive super = super = Honigraum, HR

1 Like
#4

D.h. wir wollen dort für die Variante “Wintertraubenverfolgung” an dieser Stelle zwei Dimensionen adressieren können?

Danke! Also vielleicht so?

"temperature.body:1": 22.67,
"temperature.body:2": 22.67,
"temperature.super:1": 22.67,
"temperature.super:2": 22.67,

Ist die “lane” Nomenklatur in Ordnung oder gibt es da was besseres aus dem Fachjargon?

#5

Vorschlag

Ausgehend von der per Terkin for MicroPython implementierten Telemetrienamenkonvention für Develop BOB on FiPy wäre ein vollständiges Mapping in folgender Form denkbar.

Sensor/Telemetry Database Grafana
temperature.0x77.i2c:0 temperature.inside Temperatur Innen
temperature.28ff641d8fc3944f.onewire:0 temperature.body:1 Temperatur Brutraum 1
temperature.28ff641d8fdf18c1.onewire:0 temperature.body:2 Temperatur Brutraum 2
temperature.28ff641d8fa1b2c3.onewire:0 temperature.super:1 Temperatur Honigraum 1
temperature.28ff641d8fd4e5f6.onewire:0 temperature.super:2 Temperatur Honigraum 2

Handhabung

Die einzelnen DS18X20 Sensoren wären entsprechend mit HR1, HR2, BR1, usw. beschriftet, damit man sie nach einer Entnahme wieder ordentlich reinhängen kann.

Ausblick

Dank den Arbeiten von @wtf an Implementing i18n support for Grafana dashboards kommt vielleicht auch hier schon bald die Unterstützung für Mehrsprachigkeit in der dritten Spalte.

#6

Da fehlt noch eine Ebene, wird nicht häufig vorkommen aber wir könnten pro Ebene mehrere Temperatursensoren haben.

Brutraum 1, Sensor in Wabengasse 1
Brutraum 1, Sensor in Wabengasse 1

Brutraum 2, Sensor in Wabengasse 1
Brutraum 2, Sensor in Wabengasse 2