Archiv der Kategorie: JSON

Meshtastic – Erfassen, Versand und Visualisierung von Messwerten

Im Blogbeitrag „Meshtastic – Erfassung und Versand von Messwerten“ hatte ich die Erweiterung eines Meshtastic-Knotens mit Sensoren und den Versand der erfassten Messwerte betrachtet. Damit stehen die Messwerte im Meshtastic-Netzwerk zur Verfügung.

Sollen die erfassten Messwerte visualisiert oder anderweitig weiterverarbeitet werden, dann müssen sie außerhalb des Meshtastic-Netzwerks zur Verfügung gestellt werden. Ein mit einer MQTT-Schnittstelle ausgestatteter Meshtastic-Knoten kann die Verbindung ins Internet ermöglichen. Auf diese Weise lassen sich örtlich weit auseinanderliegende (lokale) Meshtastic-Netzwerke verbinden und/oder erfasste Daten zentral auswerten.

Der Off-Grid-Aspekt geht in diesem Fall allerdings verloren.

Bei den folgenden Betrachtungen gehe ich von dem in der Abbildung gezeigten Meshtastic-Netzwerk aus.

Meshtastic-Netzwerk

Mein Netzwerk besteht aus verbreiteten Meshtastic-Devices. Eine kommentierte Übersicht finden Sie unter Meshtastic Erfahrungen: Boards und Module.

Hervorzuheben sind hier der RAKwireless-Sensorknoten auf Basis eines Mikrocontrollers RAK4631 (nRF52840), der Messwerte über verschiedene Sensoren erfasst und diese im Meshtastic-Netzwerk zur Verfügung stellt, und der Heltec LoRa32 V3 Knoten auf Basis eines ESP32-S3, der eine WiFi-Schnittstelle zur Verbindung mit einem Router und über diesen mit dem Internet ermöglicht. Die anderen Meshtastic-Knoten (in der Abbildung nicht eingefärbt) empfangen die Nachrichten des Sensorknotens und dienen dem üblichen Nachrichtenaustausch.

Um den Meshtastic-Knoten autonom betreiben zu können, wird dieser über eine Solarzelle mit Batteriepufferung versorgt. Nachdem der ursprünglich vorgesehene Waveshare Solar Power Manager (B) nicht die erwarteten Ergebnisse gebracht hat, habe ich einen DFRobot Solar Power Manager 5 V eingesetzt (siehe Abbildung).

Speisung des Meshtastic-Knoten durch einen DFRobot Solar Power Manager 5 V

Der Ladezustand des eingesetzten NCR18650 Li-Ion-Akkus muss separat überwacht werden. Hierzu verwende ich einen INA219, der über den I2C-Bus mit dem Grove-Anschluss des RAK1920 Sensor Adapter Modul verbunden wird (siehe Abbildung).

Messung des Ladezustands des LiPo-Akkus mit einem INA219-Sensor

Der mit einem I2C-Interface ausgestattet SHTC3-Sensor zur Messung von Temperatur und relativer Feuchte kann über einen I2C-Hub (z.B. von M5Stack) mit dem Grove-Anschluss des RAK1920 Sensor Adapter Moduls verbunden werden.

Der Temperatursensor DS18B20 ist Bestandteil des im Blogbeitrag „Meshtastic – Erfassung und Versand von Messwerten“ beschriebenen externen Sensormoduls, welches über ein serielles Interface mit dem RAK1920 Sensor Adapter Modul verbunden wird.

Beide Mikrocontroller, der Meshtastic-Knoten und das externe Sensormodul, werden vom DFRobot Solar Power Manager 5 V über ein USB-A- zu 2x USB-C-Kabel mit Spannung versorgt.

Als MQTT-Broker verwende ich HiveMQ (https://broker.hivemq.com). Es ergibt sich damit die in der Abbildung gezeigte Zusammenstellung.

Vom Meshtastic-Gateway werden mit dem Token msh/2/json/LongFast verschiedene MQTT-Messages versendet (published). Ein MQTT-Client abonniert (subscribed) diese Tokens und kann damit die übermittelten Nachrichten weiterverarbeiten.

Ich habe auf dem PC den MQTT-Client MQTTX installiert und kann damit die empfangenen Messages anzeigen. Abgeleitet von den aktivierten Meshtastic-Modulen empfange ich vom Knoten 2692927950 (RAK1) die folgenden Messages:

Telemetry Message:

{
  "channel": 0,
  "from": 2692927950,
  "hop_start": 3,
  "hops_away": 0,
  "id": 587303572,
  "payload": {
    "barometric_pressure": 0,
    "current": -0.200000002980232,
    "gas_resistance": 0,
    "iaq": 0,
    "lux": 0,
    "radiation": 0,
    "relative_humidity": 29.2199993133545,
    "temperature": 24.4500007629395,
    "voltage": 4.19999980926514,
    "white_lux": 0,
    "wind_direction": 0,
    "wind_gust": 0,
    "wind_lull": 0,
    "wind_speed": 0
  },
  "rssi": -54,
  "sender": "!fa66367c",
  "snr": 6.75,
  "timestamp": 1740267577,
  "to": 4294967295,
  "type": "telemetry"
}

TextMessage:

{
  "channel": 0,
  "from": 2692927950,
  "hop_start": 3,
  "hops_away": 0,
  "id": 3687588499,
  "payload": {
    "text": "DS18B20 Temp =  24.8 °C\n"
  },
  "rssi": -54,
  "sender": "!fa66367c",
  "snr": 6.25,
  "timestamp": 1740267577,
  "to": 4294967295,
  "type": "text"
}

Position Message:

{
  "channel": 0,
  "from": 2692927950,
  "hop_start": 3,
  "hops_away": 0,
  "id": 1306258064,
  "payload": {
    "altitude": 423,
    "latitude_i": 471921490,
    "longitude_i": 88150580,
    "precision_bits": 32,
    "time": 1740266796
  },
  "rssi": -54,
  "sender": "!fa66367c",
  "snr": 5.75,
  "timestamp": 1740266796,
  "to": 4294967295,
  "type": "position"
}

In den drei Messages sind alle von den Sensoren erfassten Messwerte enthalten. Vom Sensor SHTC3 werden Temperatur (temperature) und rel. Luftfeuchtigkeit (relative_humidity) erfasst. Der Sensor INA219 erfasst den Ladezustand der Batterie mit Spannung (voltage) und Strom (current).

Der Temperaturmesswert des DS18B20 Sensors wird vom externen Sensormodul als Textstring übergeben und folglich auch als Textmessage (text) versendet.

Die Positionsdaten sind hier fest vorgegeben und werden in der Position Message (altitude, latitude_i, longitude_i) versendet.

Die MQTT-Messages enthalten weitere Daten, die bei Bedarf auch noch ausgewertet werden können.

Ich verwende zum Zugriff auf den MQTT-Broker und zur Visualisierung der erfassten Messwerte die IoT-Plattform Datacake. Datacake ist eine vielseitig einsetzbare Low-Code-IoT-Plattform, die keine Programmierkenntnisse und nur minimalen Zeitaufwand erfordert, um benutzerdefinierte IoT-Anwendungen für den Desktop oder Mobil Devices zu erstellen.

Die folgenden Abbildungen zeigen ein Dashboard für einen Desktop-PC und zwei Screenshots des Dashboards für ein Smartphone.

Dashboard für den Desktop
Dashboard für Smartphone-1
Dashboard für Smartphone-2

Die verwendete Software finden Sie unter https://github.com/ckuehnel/Meshtastic.

Über den öffentlichen Link können Sie
das Dashboard aufrufen.


Das Verhalten des Meshtastic-Knotens unter verschiedenen Umgebungsbedingungen beschreibe ich im Blogpost Solar-betriebener Meshtastic-Knoten.


2025-03-14/CK

SensorHub IoT Applications

RAKwireless‘ SensorHub is a modular ecosystem consisting of the main body and multiple pre-configured sensor probes. With pluggable, interchangeable probes and the option to add third-party sensors to the system, the Sensor Hub is a suitable and versatile solution platform for various IoT applications where environmental monitoring is needed outdoors.

The SensorHub can work battery-powered by non-rechargeable or solar-powered batteries or with an external power supply, depending on the application and deployment location.

For data transmission into Low-Power Wide-Area Network (LPWAN), LoRaWAN is available. Alternatively, NB-IoT can be used.

As a typical low-code system, it requires configuration with the WisToolBox app from a cell phone. WisToolBox also enables access to the measured values of all connected sensors, as the following screenshots show.

The eBook SensorHub IoT Applications will be available from Amazon from November 15, 2023. Pre-orders are already possible.

This eBook introduces the SensorHub system and its usage in industrial-grade IoT applications using LoRaWAN for communication.

The first image shows a SensorHub with a connected SensorProbe equipped with WisBlock sensors. This application is suitable for powering by batteries, too.

The second image shows a SensorHub Measuring Station built by RK900-09 Weather Station, RK520-02 Soil Moisture Sensor, and RAK9154 Solar Battery. These components build an autonomous working measuring station. The measuring station was installed to test the acquisition of the measuring values via the connected sensors on the one hand and its behavior regarding solar-buffered battery operation in the darker season on the other hand.

You can access the live data at https://app.datacake.de/dashboard/d/8f0da5ea-e1f5-4da8-b951-7c19c98e0de2 and the loading situation of the solar-buffered battery at https://app.datacake.de/dashboard/d/19f2e113-74b9-4950-81be-28f9df871ae0.

This new eBook shows how to create professional IoT applications with the RAKwireless SensorHub system.

I will publish additions and further applications here in this blog.

Your queries are welcome.


2023-11-08/CK

IoT-Projects for Makers with WisBlock from RAKwireless

The English version will be available from amazon.com on June 30, 2023. I hope that the readers will have as much fun working with the WisBlock modules as I had written this eBook.

The German version is already available as an eBook from amazon.de, and the printed version will follow in the next few days.


2023-06-28/CK

Arduino-Sensorknoten

Auf der Basis eines ESP8266-Mikrocontrollers von Espressif hatte ich gezeigt, dass man einen WiFi-tauglichen IoT-Knoten zu sehr geringen Kosten (es waren 15 US$) aufbauen kann [Building an IoT Node for less than 15 $: NodeMCU & ESP8266].

Dass WiFi auf Grund der geringen Reichweite und des doch recht hohen Stromverbrauchs für einen batteriebetriebenen IoT-Knoten allerdings nur unter bestimmten Bedingungen geeignet ist, war auch durch eigene Untersuchungen gezeigt worden [IoT Button (5th)].

Der hier betrachtete Sensorknoten soll deshalb neben der Anbindung verschiedener Sensoren auch unterschiedliche Kommunikationsmöglichkeiten (WiFi, LoRaWAN, BLE, GSM) aufweisen. Damit wird es möglich werden, einen konkreten IoT-Sensor baukastenartig zusammenstellen.

Sensorknoten

Der Beitrag „Arduino-Sensorknoten“ wird im Sammelwerk „Messen, Steuern, Regeln mit IBM-kompatiblen PCs“ des Weka-Verlags veröffentlicht.

ISBN 978-3824549009

Die Programmbeispiele werden auf Github abgelegt und stehen zum Donload zur Verfügung.

Der erste Teil des Beitrags ist in der Ausgabe 170 im Februar 2019 erschienen.

JSON-Daten im Shell-Script filtern

Das JSON-Format dient an vielen Stellen als lesbares Format zum Datenaustausch zwischen unterschiedlichen Anwendungsprogrammen. JSON-Dateien sind einfache Textdateien, die sich in jedem Texteditor öffnen lassen. Bei grösseren Dateien kann jedoch die Übersicht schnell verloren gehen.

Bei Anfragen an Webserver werden die Daten häufig im JSON-Format zur Verfügung gestellt. Es dient praktisch als Alternative zu XML.

Um nun in einem Shell-Script auf die Daten einfach zugreifen zu können, bietet sich der Einsatz eines JSON-Prozessors für die Kommandozeile an.

Unter Debian, und damit auch für den Raspberry Pi, steht das Paket jq zur Verfügung. Die Installation kann folgendermaßen vorgenommen werden:

sudo apt-get install jq

Zur Vertiefung zu Installation und Anwendung sei auf das Howto und die jq-Website verwiesen.