Archiv der Kategorie: MQTT

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

Eine Printausgabe folgt in Kürze.

Advertisements

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