TTS-/TTN-Daten an Kotori weiterleiten

Das wäre im Kontext der TTN-WAN Adressierung nicht soo schlimm, dann würden die Daten solcher Geräte halt standardmäßig auf einen Kanal konvergiert, der in unserem Fall mit Deinem Beispiel hiveeyes/default/eui/70b3d57ed005dac6 lauten würde.

Blöder ist der Ansatz eines generischen per-Device Adressierungsverfahrens, wie bei [Proposal] Add a generic device-based addressing scheme for "WAN" networks · Issue #133 · daq-tools/kotori · GitHub beschrieben, und das geht dann in der Tat über Kreuz mit der anvisierten TTN-Umsetzungskonvention, wenn man mit Geräte-IDs daherkommt, die UUIDs sind, z.B. 123e4567-e89b-12d3-a456-426614174000, was ja nicht unwahrscheinlich ist. Diese würden falsch umgesetzt werden.

Für das generische Verfahren müsste die Basisregel also eigentlich sein, dass Geräte-IDs opaque behandelt werden müssen. Die device Variable, z.B. aus /d/{device}/data.json, darf also niemals zerlegt werden.

Wir müssen also doch an irgendeiner Stelle vorsehen, elegant zwischen beiden Verfahren unterscheiden zu können – einmal mit, und einmal ohne TTN-WAN-spezifische Topic-Umsetzung.

1 Like

Der Patch [DA] Add per-device addressing (DA) to WAN topic/channel decoding strategy by amotl · Pull Request #136 · daq-tools/kotori · GitHub bringt diese Aspekte mit ein, und unterscheidet nun zwischen “generischer” Geräteadressierung, und einer sog. “dashed topology” Geräteadressierung, adressierbar per /d vs. /dt nach dem <realm>. Letztere Variante entspricht @Thias’ Wunschverfahren, davon wird die generische Variante jedoch nicht beeinträchtigt. [1]

Beide Varianten unterscheiden sich in der Handhabung des -. Die erste interessiert er nicht, die zweite versucht, sinnvoll damit umzugehen, indem sie die Adressierungsfragmente entsprechend auf die Kanaltopologie umzulegen versucht, wie es normalerweise ein MQTT Topic oder HTTP Pfad tut, der die Fragmente per / trennt.


  1. P.S.: Das Feature ist noch nicht released, und braucht noch Dokumentation. ↩︎

1 Like

Nur eine kleine usability-Bemerkung zu d vs. dt im Pfad, für Leute, die das nur sporadisch nutzen fällt der Unterschied in der URL vermutlich hat nicht auf. Ggf. ist das ja auch der Plan, fürs debuggen könnte etwas offensichtlicheres, z.B. dt vs. gd oder gleich dashed vs. generic hilfreich sein.

1 Like

Danke, Clemens. Ich könnte mir folgende Konvention vorstellen, die mit sprechenderen Namen arbeitet, und auf “device” vs. “channel” abzielt, um beide Verfahren zu unterscheiden.

# Address device
mqttkit-1/device/123e4567-e89b-12d3-a456-426614174000

# Address channel
mqttkit-1/channel/network-gateway-node

Variante 1 bliebe gleich. Variante 2 würde nochmal einen Tick generischer angelegt – nämlich als “by-channel Adressierung”. Wie genau eine Kanaladresse dekodiert wird (hier: “dashed-topology”), kann dann die jeweilige Implementierung/Konfiguration flexibel festlegen. Schön!

Zusätzlich zu den langen Varianten wären auch noch Abkürzungen /d vs. /c denkbar, die sich zumindest besser unterscheiden lassen als /d vs. /dt. Auch schön!

Beide Labels haben auch noch die gleiche Wortlänge von sechs Buchstaben, daher stehen die Komponenten in der Doku fluchtend-symmetrisch nebenuntereinander, wie im Beispiel oben zu sehen. Exzellent.

2 Likes

Da diese Benennungskonvention hier auf Anklang stieß, ist sie jetzt Teil des offiziellen Verfahrens, siehe SensorWAN “direct” addressing. Vielen Dank!

2 Likes

Halleluja. 3 1/2 years in the making. Vielen Dank für Eure Beiträge!

Patches

Dokumentation

Beispiel

Datenübertragung

Mit Mandantenfähigkeit, wie lange ersehnt.

wget https://github.com/daq-tools/kotori/raw/main/test/test_tts_ttn_full.json
cat test_tts_ttn_full.json | \
  http POST https://swarm.hiveeyes.org/api/hiveeyes/channel/testdrive-area42-loranode/data

Grafana Dashboard

Beispiel: LoRaWAN multi-tenant first transmission, mit test_tts_ttn_full.json.

Backlog

  • Bitte schickt mir ggf. Verbesserungsvorschläge zur Dokumentation und darüber hinaus, für optimale Benutzerfreundlichkeit. Merci!

  1. Zur Aufhübschung hab ich mich hier Deines Dashboards bedient, @Thias. Sag bitte Bescheid, wenn Dir das nicht recht ist. ↩︎

1 Like

Unabhängig zu den gerade erschlossenen Neuerungen rund um die Datenfernmeldung per HTTP webhook gäbe es natürlich weiterhin die Möglichkeit der Datenfernmeldung per MQTT.

Ich glaube bisher wurde das immer noch per Mosquitto Bridge Konfiguration realisiert, vielleicht könnte man das aber zukünftig auch im Kotori machen.

Was ich interessant und schade finde, ist jenes, das ich gerade auf der entsprechenden Dokumentationsseite zur Integration über MQTT entdeckt habe:

Auf Deutsch: Es gibt tatsächlich eine “echte” Mandantenfähigkeit per “tenant ID”, diese wiederum steht aber in der Open Source Version nicht zur Verfügung!?

Ich denke es wird Zeit, dass wir mal ein paar mehr Seitenblicke wagen, mit einem dieser beiden guten Stücke, die mittlerweile garantiert auch schon aus der Mauser raus sind.

OpenChirp: Open Source management framework for LoRaWAN networks
ChirpStack: Open Source LoRaWAN network server stack

Über Adding Webhook Templates | The Things Stack for LoRaWAN findet man schnell zum Repository GitHub - TheThingsNetwork/lorawan-webhook-templates, wo einige Vorlagen für die Fernmeldevariante über HTTP Webhooks gelistet sind.

Hier finden sich Beispiele von ein paar Kollegen.

It looks like it would only be a small box of YAML.


https://twitter.com/acloudguru/status/1344724013122260993

Ahja. Folgende Beispiele sind besser, weil sie zeigen, dass Felder/Variablen auch in den Host-Teil des base-url Konfigurationsattributs eingebaut werden können.

fields:
  - id: server_instance
    name: Server instance
    description: Server instance hosting your IoT platform
    secret: false
    default-value: gear.cloud.studio
base-url: https://{server_instance}/Services/Interfaces/TTNInterfaceService.svc

Hi Matthias,

Die Idee, CayenneLPP zu nutzen, ist keine schlechte – wir haben ja bei Integration des Cayenne Low Power Payload Protocol schließlich einiges dran geschafft und es lief im Großen und Ganzen recht gut, sofern ich mich richtig erinnere.

Beim Wälzen der Dokumentation von TTS/TTN bin ich jedoch gerade auf Device Repository | The Things Stack for LoRaWAN gestoßen, mit dem entsprechenden Repository bei GitHub - TheThingsNetwork/lorawan-devices: Device Repository for LoRaWAN devices.

Dort findet sich bei espeasy/packed-decode-uplink.js ein ansehnlicher Decoder von ESPEasy, der u.a. auch nativ die spezifischen Meßgrößen bzw. konkreten Gegebenheiten der BME-, BMP, INA219 - und auch HX711 Sensoren unterstützt.

Vielleicht ist das einen Blick wert, wenn es irgendeinen Mehrwert im Vergleich zum CayenneLPP Protokoll bietet?

Viele Grüße,
Andreas.

Ich habe den Webhook umgestellt und was soll ich sagen? Das funktioniert :slight_smile:
Als URL habe ich eingestellt:
https://swarm.hiveeyes.org/api/hiveeyes/channel/{/devID}/data

Meine Device IDs sind noch 4 teilig und Bindestrich-separiert alla
hiveeyes-thias-freiland-hive2.
hiveyes-” wird zuverlässig gefiltert und der Rest an den festen Realm angehängt. MQTT am Server gibt dann aus:
hiveeyes/channel/hiveeyes-thias-freiland-hive2/data.json {...} und die Daten landen in der gleichen Influx Series wie vorher.

Perfekto!

Werde beizeiten die Device IDs auf dreiteilig kürzen. Dazu muss ich allerdings auch einmal vor Ort sein, um die Einheit neu bei TTN joinen zu lassen.

2 Likes

Exzellent. So soll es sein, danke für die Rückmeldung. In Folge können wir den PutsReq Dienst jetzt also abschalten?

Backlog

  • Diesen Handreichungsschnipsel ordentlich an passender Stelle dokumentieren. Merci!

@Thias und ich hatten auch eine PutsReq-Instanz eingerichtet, damit Leute mit BOB-Kit Daten parallel an die Uni Bremen und an hiveeyes schicken können. Ich habe aber keinen Überblick ob das (noch) genutzt wird.

Scheinbar nicht, es kommen keine Anfragen mehr an. Der PutsReq Dienst wird also abgeschaltet.

1 Like

Absolut. Seit der Umstellung habe ich keine Probleme bemerkt. Und zur Not kann ich auch auf das Original putsreq.com zurückgreifen.

Da funkt doch noch etwas.

  • device_id: hiveeyes-jankr-hhduv-datscha01
  • decoded_payload: digital_out_0: 0, load_5: 60.022, voltage_0: 4.02

Also wohl doch erstmal nicht ;[.

Bist du das @Jan?

Die Anfragen kommen z.Zt. bei https://putsreq.hiveeyes.org/HVcfGHeC4jDM4SRQzFN7 an. Wir könnten Anfragen dorthin am Nginx per Lua identifizieren (nach device_id=hiveeyes-jankr-hhduv-datscha01) und entsprechend an die neue HTTP-basierte SensorWAN-by-channel Annahmeschnittstelle auf swarm.hiveeyes.org umleiten.

1 Like

Ich hab auch mal einen Sensor geschaltet, damit wir mitbekommen, wenn etwas kaputtgeht.

Besser wäre aber natürlich, @Jan würde es in der TTN Konsole umstellen, entweder wie Du es bei TTS-/TTN-Daten an Kotori weiterleiten - #113 by Andreas gemacht hast …

… oder vermutlich “direkter”, ohne {/devID} Platzhalter, sondern ausformuliert:

https://swarm.hiveeyes.org/api/hiveeyes/channel/jankr-hhduv-datscha01/data

Könntest Du das tun, @Jan?