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.
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.
I have been using Kachelmannwetter’s information and following their weather forecast on YouTube for a long time.
Kachelmannwetter provides extensive weather and environmental data, as well as webcam recordings. Interested parties can also contribute weather data to complete the range of data on offer.
I have taken up the invitation and, as a new Citizen Scientist, I am now also making my SensorHub data available on the Meteologix platform.
The images below display the professional and amateur weather stations in my area. Additionally, the graph depicts the ambient temperature measured at a height of 2 meters over a 72-hour period.
Schon lange nutze ich die Informationen von Kachelmannwetter und verfolge die Wettervorhersage auf Youtube.
Neben der Bereitstellung umfangreicher Wetter- und Umweltdaten sowie Webcam-Aufnahmen können Interessenten Wetterdaten beisteuern und so das Angebot an Daten komplettieren.
Ich habe die Aufforderung aufgegriffen und stelle als neuer Citizen Scientist nun meine SensorHub Daten auch auf der Meteologix Plattform bereit.
In den folgenden Bildern sind die Profi- und Amateur-Wetterstationen meiner Gegend gezeigt. Abschließend ist der 72 h Verlauf der Umgebungstemperatur gemessen in 2 m Höhe gezeigt.
Profi Weather StationsAmateur Weather StationsSensorHub 72 h Weather Data
Im Norden Deutschlands wird man schnell feststellen, dass die Abdeckung mit Gateways für TTS mit der in den Ballungszentren in der Mitte und im Süden Deutschlands in keiner Weise vergleichbar ist.
Was bleibt?
Entweder folgt man dem LoRaWAN-Community-Gedanken und nimmt ein eigenes Gateway in Betrieb und unterstützt die Community in Schwerin oder Rostock oder nutzt mit NB-IoT eine LPWAN-Alternative.
LoRaWAN ist eine verbreitete und unter bestimmten Bedingungen auch für jeden zugängliche Möglichkeit zur Übermittlung von Daten eines IoT-Knotens. Aber, LoRaWAN ist eine Möglichkeit und es gibt weitere, wie NB-IoT, Sigfox, LTE-M, Weightless, Symphony Link u.a.
Von den verfügbaren Technologien setzen sich LoRaWAN und NB-IoT deutlich ab. In der geschilderten Situation ist es also angebracht, sich auch mit NB-IoT auseinander zu setzen, um die Funktionen und Unterschiede der beiden Technologien zu verstehen.
LPWAN-Technologie NB-IoT
NB-IoT dient dem Senden und Empfangen kleiner Datenmengen (einige zehn oder hundert Bytes pro Tag), die von IoT-Geräten mit geringer Zahl an generierten Daten stammen. NB-IoT ist wie LoRaWAN nachrichtenbasiert, jedoch mit einer viel schnelleren Modulationsrate, die viel mehr Daten verarbeiten kann als LoRa.
NB-IoT ist für einfache Geräte gedacht, die über ein lizenziertes Frequenzspektrum eine Verbindung zu einem Betreibernetzwerk herstellen müssen. Da NB-IoT-Geräte auf 4G (LTE)-Abdeckung angewiesen sind, profitieren sie von einer sehr guten Abdeckung und funktionieren in Innenräumen und in dichten städtischen Gebieten sehr gut. NB-IoT hat schnellere Reaktionszeiten als LoRaWAN und kann eine bessere Servicequalität garantieren.
Eine Gegenüberstellung der Hauptmerkmale beider LPWAN-Technologien zeigt die folgende Tabelle [1].
Technology Parameters
LoRaWAN
NB-IoT
Bandwidth
125 kHz
180 kHz
Coverage
165 dB
164 dB
Battery Life
15+ years
10+ years
Peak Current
32 mA
120 mA
Sleep Current
1 µA
5 µA
Throughput
50 Kbps
60 Kbps
Latency
Device Class Dependent
<10 s
Security
AES 128 bit
3GPP (128 to 256 bit)
Geolocation
Yes (TDOA)
Yes (In 3GPP Rel 14)
Cost Efficiency
High
Medium
LoRaWAN vs. NB-IoT [1]
Da NB-IoT auf 4G (LTE) angewiesen ist, ist der Anwender von NB-IoT auch an einen entsprechenden Provider gebunden, der die Netzabdeckung absichert. Für die deutsche Telekom und Vodafone sieht die Netzabdeckung für NB-IoT in Deutschland sehr gut aus, wenn es da auch noch Unterschiede gibt. Die folgende Abbildung zeigt die NB-IoT-Netzabdeckung der Telekom für Deutschland.
NB-IoT-Netzabdeckung der Telekom für Deutschland
Die NB-IoT-Abdeckung von Vodafone für Deutschland sieht ähnlich aus. Wenn Sie den angegebenen Links folgen, können Sie detaillierte Information für Ihre Umgebung erhalten.
Für die DACH-Region (D, A und CH) sind damit providerseitig alle Voraussetzungen für den Einsatz von NB-IoT gegeben. Roaming-Vereinbarungen, die beispielsweise von der Telekom mit zahlreichen Nachbarstaaten getroffen worden sind, ermöglichen einen länderübergreifenden Einsatz von NB-IoT.
Die für den NB-IoT-Zugriff erforderlichen SIM-Karten können von verschiedenen Anbietern bezogen werden. Ich verwende hier 1NCE (1nce.com) . Die 1NCE IoT Flat Rate ist ein Pre-Paid Modell für IoT Geräte.
Wettersensor mit NB-IoT
Für den Test von NB-IoT habe ich einen einfachen Wettersensor auf Basis einer M5Stack AtomDTU NB-IoT mit einem Atom Lite als Controller und einer M5Stack ENV.II Unit als Sensor aufgebaut.
Die ENV.II Unit umfasst einen SHT30 Sensor zur Messung von Temperatur und Luftfeuchtigkeit und einen BMP280 zur Messung von Temperatur und barometrischem Druck. Beide Komponenten werden über die Grove-Ports mit dem I2C-Bus miteinander verbunden.
Das über die Arduino IDE erstellte Anwendungsprogramm erfasst die Sensordaten und versendet diese über NB-IoT an einen MQTT-Broker. Die Basis für das Anwendungsprogramm ist auf GitHub unter der URL https://github.com/m5stack/ATOM_DTU_NB/tree/master/examples/MQTT.
Die Beschreibung der AT-Kommandos für das im AtomDTU NB-IoT eingesetzte SIMCom SIM7020 Modul finden Sie unter [2] und [3].
Ich verwendet hier den HiveMQ Public MQTT Broker und greife auf die Daten über einen Webclient zu.
Die Messwerte für Temperatur, relative Luftfeuchtigkeit und barometrischen Druck werden abgefragt und einer nach dem anderen im Minutentakt versendet (published).
Im Webclient habe ich den Topic atomdtu/# abonniert (subscribed) und sehe damit jede versendete Nachricht incl. deren Time Stamp.
Haben Sie keinen WLAN-Zugang ins Internet und zum MQTT-Broker, dann kann ein mobiler Zugriff vom Smartphone (hier über 4G) von einer MQTT Dashboard App aus erfolgen.
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.
Low Power Wide Area Network (LPWAN) steht als Oberbegriff für viele unterschiedliche Protokolle. Neben dem hier betrachteten LoRa stehen Sigfox, LTE-M, Weightless, Symphony Link und einige andere im Wettbewerb.
Im Gegensatz zu einigen anderen Protokollen ist der LoRa-Standard Open Source und nicht proprietär. Das ist ein Grund für das rasante Wachstum von LoRaWAN-Netzwerken über ganze Länder, beginnend in den Ballungszentren.
Im Kindle eBook mit dem Titel „Einfache LoRaWAN-Knoten für das IoT“ beschreibe ich, wie mit sehr einfachen Mitteln und zu niedrigen Kosten LoRaWAN-Sensorknoten ohne Lötarbeiten selbst entwickelt werden können, die ihre Daten dann an einen LoRaWAN-Server senden.
Im Bild sind die betreffenden LoRaWAN-Knoten zu sehen:
Vom LoRaWAN-Server sind die Daten abrufbar und in eine beliebige Anwendung integrierbar. The Things Network (TTN) stellt mit seinem dezentrale Open-Source-Netzwerk die erforderliche Infrastruktur bereit.
Die folgende Abbildung zeigt, wie durch eine Subscription des Topics elsys_nodes/devices/+/up/# alle zum LoRaWAN-Server hochgeladenen Messages von in der Application elsys_nodes registrierten Devices vom MQTT-Client MQTTlens empfangen werden.
Zum aktuellen Zeitpunkt, das war der 15.09.2018 11:38:39, betrug die Temperatur 19.4 °C bei einer relativen Luftfeuchtigkeit vom 71%. Die Batteriespannung lag bei 3.532 V.
Ein andere Möglichkeit der weiteren Verarbeitung der über mittelten Daten besteht darin, dass beispielsweise ein MQTT-Client auf einem Linux-Device, wie z.B. Raspberry Pi, diesen MQTT-Topic abonniert und daraus weitere Informationen respektive Aktionen ableitet. Das könnte dann z.B. eingebunden in eine Website so aussehen:
Wer bislang mit einem Arduino erste Erfahrungen sammeln konnte, der ist bestens auf diese zukunftsträchtige Aufgabenstellung vorbereitet und kann erste praktische Erfahrungen im Internet of Things sammeln.
Die Quelltexte zu den behandelten LoRaWAN-Knoten sind auf Github abgelegt.
Im Post HiGrow-Sensor sorgt für das Wohl der Pflanzen hatte ich auf den HiGrow-Sensor hingewiesen, der zur Überwachung der Umweltbedingungen in Pflanzennähe eingesetzt werden kann.
Im Programm HiGrowESP32MQTT.ino werden die Sensordaten des dort eingesetzten DHT11-Sensors zur Messung von Lufttemperatur und Luftfeuchte, sowie die kapazitiv gemessene Bodenfeuchte und die Helligkeit erfasst und entsprechenden Topics von MQTT-Messages zugeordnet. Zu Kontrollzwecken werden diese Daten auch seriell ausgegeben und können durch den internen Monitor der Arduino IDE verfolgt werden. Das Programm HiGrowESP32MQTT.ino steht auf Github zum Download zur Verfügung.
Mit einem MQTT Client können die abonnierten Mitteilungen visualisiert werden.
Bei meinen Test ist mir aufgefallen, dass recht häufig nach dem Programmstart der Brownout Detector getriggert wurde und einen entsprechenden Reset ausgelöst hat.
Der HiGrow-Sensor weist einen Batteriehalter für eine 18650-LiPo-Batterie auf. Bei meinen Tests war die Batterie nicht bestückt. Möglicherweise puffert eine bestückte Batterie dann diesen kurzzeitigen Strombedarf hinreichend.
Für das optimale Gedeihen von Pflanzen sind die Bedingungen wie Temperatur, Luft- und Bodenfeuchtigkeit, Licht u.a.m. verantwortlich.
Kommerzielle Systeme von Kärcher, Gardena, Parrot u.a. ermitteln solche Größen und steuern damit beispielsweise die Bewässerung oder stellen die ermittelten Daten einer App auf dem Smartphone zur Verfügung.
Mit dem HiGrow-Sensor kann der Maker das Thema selbst in die Hand nehmen. Der HiGrow-Sensor nutzt einen DHT11 zur Messung von Lufttemperatur und -Luftfeuchte. Die Feuchte des Bodens wird kapazitiv gemessen, da diese Variante weniger störungsanfällig als die resistive Methode ist. Außerdem wird die Helligkeit erfasst. Als CPU kommt eine ESP32-Wroom von Espressif zum Einsatz, der in der Arduino IDE programmiert werden kann. Softwareunterstützung findet man auf Github unter https://github.com/lucafabbri/HiGrow-Arduino-Esp. In den nächsten Tagen werde ich an dieser Stelle ein Programmbeispiel zeigen, welches die ermittelten Werte über MQTT an einen MQTT-Broker übermittelt und von da bezogen werden können.
Der HiGrow-Sensor wird von Banggood zum Preis von unter € 15 angeboten.
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:
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.
Als Grundlage für meine Experimente habe ich von Github das Dragino Programmbeispiel lora_shield_ttn.ino verwendet und mit einer Sensorerweiterung versehen. Zur Erfassung der Umgebungstemperatur habe ich einen Temperatursensor TMP36 mit A0, VCC und GND verbunden.
Auf die Angabe des Listings des Programms lora_shield_ttn_tempC.ino möchte ich an dieser Stelle aus Platzgründen verzichten und auf Github verweisen. Dort ist das Programm abgelegt und kann von da heruntergeladen werden. Damit sind alle Vorkehrungen für das Versenden der Sensordaten in das LoRaWAN getroffen und es ist nun am Gateway diese Daten auch zu empfangen. Der Consolen Output zeigt die Messages dieser LoRa Node.
Die vom TTN LoRa Server empfangenen Messages zeigen hier im Bild Temperaturwerte von 24,71 und 27,64 °C (letzteres nach Auflegen eines Fingers auf den TMP36).
Beim Auruf des TTN LoRa Servers ist etwas Geduld notwendig. Nur alle 10 Minuten wird eine Message vom Gateway gesendet. Historische Daten werden nicht angezeigt.
Vom TTN Lora Server werde die Daten via MQTT bereitgestellt und können da mit einem MQTT Viewer (hier habe ich MQTTlens verwendet) dargestellt bzw. über Subscribe in eine Anwendung gezogen werden.
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.
Ich 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.
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.
Mein MQTT Client abonniert durch die Angaben SONOFF/+/# alle gesendeten Sonoff-Mitteilungen. Zusätzlich sind alle Mitteilungen aus einem Netzwerk von Temperatursensoren abonniert (DHT11/+/#).
Gesendet wird von diesem MQTT-Client hier nur der Topic SONOFF/ESP8266-1878840/state mit 0 (Ausschalten) oder 1 (Einschalten) als Dateninhalt.
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.