Schlagwort-Archive: MQTT

MQTT Meshtastic

Nachdem der Meshtastic Public Broker in letzter Zeit keine zuverlässige Verbindung über MQTT sichergestellt hat, hat die MESH HESSEN Community die Initiative ergriffen und einen eigenen MQTT Broker aufgesetzt.

Die Community betreibt einen eigenen MQTT-Server, welcher sich krisensicher stationiert in einem historischen Bunker in Deutschland befindet.

Die Zugangsdaten sind:

Adresse: mqtt.meshhessen.de
Username: meshhessen
Passwort: meshhessen
Root topic: msh/EU_868

Ich habe den Broker ausprobiert und die folgenden Screenshots zeigen das über MQTT erweiterte Mesh-Netzwerk im Programm MeshSense.

Mein Heimnetz ohne MQTT-Anbindung
Durch MQTT erweitertes Heimnetz

Die über MQTT empfangenen Nodes zeigen sich im Android Client gemäss folgenden Screenshots.

Nodes über MQTT

Da die MQTT-Verbindung das Internet nutzt, ist eine solche Erweiterung bei Ausfall einer Komponente im Übertragungsweg dann nicht mehr funktional. Das gilt es unbedingt bei der Erstellung einer solchen Erweiterung zu beachten.


2025-05-11/CK

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

Einfache Wetterstation für € 20

sht31chip

Mit dem $ 9 C.H.I.P. und einem Grove SHT31 ($ 11.90) kann man schon für € 20 Temperatur und relative Luftfeuchtigkeit erfassen und in der Cloud visualisieren.

Vorbedingung ist die Installation der folgenden Pakete:

sudo apt-get install build-essential libi2c-dev i2c-tools python-dev libffi-dev

Drei sehr überschaubare Scripte übernehmen die Abfrage des Sensors und das Versenden der Daten.

Mit dem Python Script SHT31.py werden von dem über den I2C-Bus angeschlossene Sensor Temperatur und relative Luftfeuchtigkeit abgefragt und zwischengespeichert. Das Shell Script thingspeak.sh sendet die erhobenen Messwerte an den Thingspeak-Server, während das Shell Script mqtt.sh die gleichen Daten an einen MQTT Broker sendet. Mit dem Script weather.sh werden diese drei Scripte gekapselt und in die Crontab eingetragen.

# m h dom mon dow command
*/5 * * * * /home/weather.sh

Durch diesen Eintrag erfolgt ein Aufruf des Scripts weather.sh alle fünf Minuten.

Die Scripte stehen wieder in meinem CHIP Repository zum Download zur Verfügung. Hier können die Ergebnisse der Messungen verfolgt werden.

SONOFF über MQTT steuern

Im Blogbeitrag Sonoff Wifi Smart Switch mit NODEMCU Firmware hatte ich die vorbereitenden Arbeiten beschrieben, um den Sonoff Smart Switch mit einer eigenen Firmware auszustatten. Ziel ist, den Sonoff Smart Switch von einem MQTT Client aus zu steuern. Das kann ein beliebiges Linux-Device, wie ein Raspberry Pi o.ä. sein, oder ein MQTT Client auf dem Smartphone.

Das grundsätzliche Vorgehen zum Start eines Anwendungsprogramms (credentials.lua, init.lua, sonoff.lua) auf dem ESP8266/NodeMCU wird hier als bekannt vorausgesetzt. In meinem Buch zu NodeMCU ist das im Detail beschrieben.

MyMQTTIch verwende hier MyMQTT aus dem Google Play Store auf einem Android Smartphone. Es gibt Alternativen sowohl für Android als auch für iOS.

Um sich an den Datenaustausch über das MQTT-Protokoll heranzutasten, bietet sich die Verwendung eines freien Broker-Dienstes als Spielwiese an. Der CloudMQTT-Broker der schwedischen Firma 84codes AB ist eine solche Möglichkeit. CloudMQTT sind Mosquitto Server in der Cloud.

Zum Erstellen einer CloudMQTT-Instanz ist es erforderlich, unter http://www.cloudmqtt.com/ ein Konto einzurichten und sich für einen Kunden-Plan zu entscheiden. Als Testfeld nutze ich den freien Plan Cute Cat.
Die Anmeldung eines Kundenkontos erfolgt über eine eMail-Adresse, an die ein Link zur
Freischaltung verschickt wird. Nach dem Erzeugen einer CloudMQTT-Instanz werden die Informationen zur erzeugten Instanz angezeigt. Alle in der folgenden Abbildung gezeigten Daten werden vom System zugewiesen. Das trifft auch für den Usernamen und das Password zu.

cloudmqtt

Ist die brokerseitige Einrichtung abgeschlossen, dann kann der MQTT Client MyMQTT eingerichtet werden.Die folgenden Screenshots zeigen die von MyMQTT abonierten Mitteilungen (Subscribe), das Versenden von Mitteilungen zum Schalten des Sonoff Smart Switches und die Protokollierung auf dem Dashboard.
subscribe

Mein MQTT Client abonniert durch die Angaben SONOFF/+/# alle gesendeten Sonoff-Mitteilungen. Zusätzlich sind alle Mitteilungen aus einem Netzwerk von Temperatursensoren abonniert (DHT11/+/#).

 

 

 

 

Publish

 

Gesendet wird von diesem MQTT-Client hier nur der Topic SONOFF/ESP8266-1878840/state mit 0 (Ausschalten) oder 1 (Einschalten) als Dateninhalt.

 

 

 

dashboard

 

 

Im Dashboard können nun die abonnierten Mitteilungen verfolgt werden.

Der eingesetzte Sonoff Smart Switch meldet sich mit einer Client-ID in seinem Topic, die automatisch durch dessen Chip-ID erzeugt wird. Die Adressierung ist damit eindeutig.

Im wesentlichen kann der durch die versendeten Mitteilungen beeinflusste Schaltzustand verfolgt werden.

Gelegentlich wird dieser Vorgang durch eine periodische  gesendete Mitteilung eines Sensors für Temperatur und Luftfeuchtigkeit unterbrochen.

 

Weiterlesen