Archiv der Kategorie: MQTT

Abgesetzter Wettersensor mit NB-IoT

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 ParametersLoRaWANNB-IoT
Bandwidth125 kHz180 kHz
Coverage165 dB164 dB
Battery Life15+ years10+ years
Peak Current32 mA120 mA
Sleep Current1 µA5 µA
Throughput50 Kbps60 Kbps
LatencyDevice Class Dependent<10 s
SecurityAES 128 bit3GPP (128 to 256 bit)
GeolocationYes (TDOA)Yes (In 3GPP Rel 14)
Cost EfficiencyHighMedium
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.

Telekom (D)https://www.telekom.de/netz/mobilfunk-netzausbau
Vodafone (D)https://www.vodafone.de/hilfe/netzabdeckung.html
Swisscom (CH)https://scmplc.begasoft.ch/plcapp/pages/gis/netzabdeckung.jsf?netztyp=lte
A1 (A)https://www.a1.net/hilfe-support/netzabdeckung/frontend/main.html

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.

Mobiler Zugriff über MQTT Dashboard App

Referenzen


2022-01-19/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.

Einfache LoRaWAN-Knoten für das IoT

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:Nodes-1

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.

Abbildung 57

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:

Abbildung 58

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.

Link zum eBook: https://www.amazon.de/dp/B07HDP62K3
Link zur Printausgabe: https://www.amazon.de/dp/3907857356

 

HiGrow-Sensor: Daten erfassen und versenden

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.

HiGrow Data

Mit einem MQTT Client können die abonnierten Mitteilungen visualisiert werden.

Screenshot_20180319-140609.png

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.

HiGrow Brounout

Verfolgt man die Diskussion (z.B. hier https://github.com/nkolban/esp32-snippets/issues/168) dann scheint ein hoher Strombedarf während der Initialisierungsphase ein (der?) Grund für das Verhalten zu sein.

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.

 

HiGrow-Sensor sorgt für das Wohl der Pflanzen

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.

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.

LoRa Node sendet Messwerte

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.

lora-node-tmp36

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.

lora_shield_ttn_tempc

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.

ttn4

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.

ttn5

 

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

Erste Anwendungen mit UDOO NEO

Nachdem die Benchmarks interessante Ergebnisse geliefert hatten, wollte ich erste Anwendungsprogramme ausprobieren.

Auf der Linux-Seite habe ich mit dem CPU-Clock experimentiert und auf der Arduino-Seite sollte der DHT11 Daten liefern, die später zum MQTT-Broker gesendet werden sollten. Zu diesem Zweck habe ich Mosquitto installiert.

Weiterlesen