MQTT
Viele IoT Geräte bauen heute auf Cloud-Dienste auf, von denen Sie weder wissen, wer sie betreibt, wer die Daten noch bekommt und wie lange sie Bestand haben. Das gilt insbesondere wenn der Absatz der Geräte abnimmt und die Kosten unverändert bleiben. Sehr bald muss ein Anbieter sich dann umschauen und neue Geldquellen anbohren oder den Betrieb einstellen. Da ist mir eine "eigene Cloud" lieber und um das Rad nicht neu zu erfinden, gibt es mit MQTT eine Definition, wie Geräte miteinander kommunizieren können. Dann muss ich das Rad nicht neu erfinden.
MQTT ist übrigens keine Abkürzung für "Message Queue Telemetry Transport" und kann maximal auf "MQ Telemetry Transport" zurückgeführt werden, wobei MQ ein Produkt von IBM (https://www-03.ibm.com/software/products/de/ibm-mq). Die Anfänge von MQTT sind im Jahr 1999 zu suchen, wo IBM-Techniker zur Überwachung von Öl-Pipelines über Satelliten ein bandbreitenoptimiertes Protokoll mit grundlegenden QoS-Strategien entworfen haben.
Grundprinzip
MQTT ist erst mal nur ein Protokoll ohne über die Transportwege und die Inhalte etwas zu sagen.
MQTT ist ein offenes Nachrichtenprotokoll für Machine-to-Machine-Kommunikation
(M2M), das die Übertragung von Telemetrie-Daten in Form von Nachrichten zwischen
Geräten ermöglicht, trotz hoher Verzögerungen oder beschränkten Netzwerken.[1]
Entsprechende Geräte reichen von Sensoren und Aktoren, Mobiltelefonen,
Eingebetteten Systemen in Fahrzeugen oder Laptops bis zu voll entwickelten
Rechnern. Das Protokoll wurde von Andy Stanford-Clark von IBM und Arlen Nipper
von Cirrus Link Solutions entwickelt.
Quelle:
https://de.wikipedia.org/wiki/MQTT
In der Regel wird aber schon TCP/IP als Transport genutzt und damit stehen alle physikalischen Schichten (Ethernet, WiFi, LTE etc.) offen. Es sind aber auch ZigBee und andere Übertragungswege möglich. Das System besteht dabei aus drei Komponenten:
- Sensoren (Publisher)
Sensoren sind jede Art von Geräten, die Daten erfassen und irgendwo hin melden. Sensoren sind in der Regel nicht 24h aktiv und erreichbar. Sie sind entweder batteriegestützt eh die meiste Zeit im Schlafmode und wachen nur kurz auf um Daten zu senden oder Sie "verstecken" sich hinter NAT-Routern und können die Verbindung nur von ihrer Seite her aufbauen. Daher ist ein "Clearingpoint" erforderlich, an den Sie ihre Daten senden können und von dem andere Dienste die Daten auch wieder abrufen - Broker
Der Broker ist ein Service, der für alle möglichen Sensoren 24h erreichbar ist und deren Meldungen annimmt. Zudem antwortet er auch auf Anfragen von anderen Diensten, die die Werte wieder auslesen wollen - Konsument (Subscriber)
Die von Sensoren an den Broker gemeldeten Daten können von anderen Diensten wieder abgerufen werden
Die Übertragung erfolgt als TCP-Stream über die Standardports 1883/TCP oder 8883/TLS
- MQTT Version 3.1.1
http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718028 - http://mqtt.org/
Kaum jemand schreibt das aber komplett selbst, sondern es gibt verschiedene Libraries, auf die man aufsetzen kann:
- MQTT libraries
https://GitHub.com/mqtt/mqtt.GitHub.io/wiki/libraries - Kommunikation über MQTT
https://www.heise.de/developer/artikel/Kommunikation-ueber-MQTT-3238975.html - MQTT Essentials
Sehr gut gemachte Einführung- Part 1: Introducing MQTT https://www.hivemq.com/blog/mqtt-essentials-part-1-introducing-mqtt
- Part 2: Publish & Subscribe https://www.hivemq.com/blog/mqtt-essentials-part2-publish-subscribe
- Part 3: Client, Broker and Connection Establishment
https://www.hivemq.com/blog/mqtt-essentials-part-3-client-broker-connection-establishment
Beschreibt den Connect und die Antwort darauf - Part 4: MQTT Publish, Subscribe & Unsubscribe http://www.hivemq.com/mqtt-essentials-part-4-mqtt-publish-subscribe-unsubscribe/
- Part 5: MQTT Topics & Best Practices http://www.hivemq.com/mqtt-essentials-part-5-mqtt-topics-best-practices/
- Part 6: Quality of Service Levels http://www.hivemq.com/mqtt-essentials-part-6-mqtt-quality-of-service-levels/
- Part 7: Persistent Session and Queuing Messages http://www.hivemq.com/mqtt-essentials-part-7-persistent-session-queuing-messages/
- Part 8: Retained Messages http://www.hivemq.com/mqtt-essentials-part-8-retained-messages/
- Part 9: Last Will and Testament http://www.hivemq.com/mqtt-essentials-part-9-last-will-and-testament/
- Part 10: Keep Alive and Client Take-Over http://www.hivemq.com/mqtt-essentials-part-10-alive-client-take-over/
- Understanding MQTT QoS article
https://cedalo.com/blog/understanding-mqtt-qos - What is MQTT and How It Works
https://www.youtube.com/watch?v=EIxdz-2rhLs - MQTT Basics
https://www.youtube.com/watch?v=TDFp9C1f2U0 - Node Red MQTT on the Raspberry Pi
https://www.youtube.com/watch?v=WxUTYzxIDns - Really Understanding MQTT
https://blog.paessler.com/really-understanding-mqtt
What is MQTT? What you need to know
https://www.youtube.com/watch?v=QSwR-JMmNOo
What is MQTT? What you need to know
(Paessler)
https://www.youtube.com/watch?v=QSwR-JMmNOo
MQTT Broker
Die Spinne im Netz, an die sich alle Publisher wenden ist ein Dienst, der per TCP auf den Port 1883 (oder 8883/TLS) erreichbar sind. Wenn alle Nutzer mit DNS umgehen können, kann die IP-Adresse auch dynamisch sein. für den internen Gebrauch ist aber wohl eine statische direkt erreichbare IP-Adressen einfacher. Als Broker gibt es gleich wieder mehrere Lösungen und Betriebsarten.
MQTT im Eigenbetrieb
Sie können einen Broker natürlich einfach selbst lokal oder ihrer eigenen Cloud-Instanz installieren und betreiben. Es gibt eine ganze menge an Open Source-Lösungen
- Mosquito
https://mosquitto.org/
Bekannte OpenSource-Version - Node-RED
https://Node-RED.org/
und
https://flows.Node-RED.org/node/node-red-contrib-mqtt-broker
Ursprünglich von IBM entwickelt und mittlerweile auch quelloffen - RabbitMQ
https://www.rabbitmq.com/download.html
- hivemq
https://www.hivemq.com/
Kommerzieller Broker - Mosca MQTT broker as a module
http://www.mosca.io/
Kommt z.B. auch in Azure zum Einsatz ( https://azure.microsoft.com/de-de/resources/samples/iot-gateway-mqtt-http/ )
Einige der Systeme können Sie sogar auf dem ein oder anderen NAS-Devices oder RaspberryPi und Co installieren
- Mosquitto als Paket für Synology NAS
https://synocommunity.com/packages - Eclipe Mosquitto
https://GitHub.com/eclipse/mosquitto
Installing Mosquitto (MQTT) broker on Synology NAS
https://www.youtube.com/watch?v=b3A1RJdDf-w
Mosquitto für Windows
Auch wenn es den Eindruck hat, dass die ganzen IoT Geschickten eher bei Unix zu finden sind, so hat Open Source auch den Vorteil, dass der Code für verschiedene Ziele kompiliert werden kann. Mosquitto kann also sehr einfach auch unter Windows direkt installiert werden.
- Download Mosquitto
Den gibt es bei https://mosquitto.org/download/. Heute wird vermutlich jeder einfach die 64bit Version nutzen. - Installation Mosquitto
Das Setup ist einfach das Durchklicken des Installers. Da gibt es nichts zu beschreiben. Allerdings können Sie Mosquitto noch nicht starten.
Hier müssen wir also erst noch die entsprechenden DLLs besorgen - Beschaffen der OpenSSL Libraries
ACHTUNG: Anscheinend packt Mosquitto mittlerweile die Dateien mit aus. Prüfen Sie die vorhadenen Versionen
MQTT aus Port 8883 nutzt SSL und Mosquitto baut hier auf OpenSSL. Die DLLs sind aber nicht im Installationspaket enthalten. Also müssen sie die DLLs besorgen. Am einfachsten über den Download von Win64 OpenSSL v1.1.0i Light von http://slproweb.com/products/Win32OpenSSL.html. Nach der Installation finden sich die Dateien im Zielverzeichnis
Die beiden markierten Dateien kopieren wir in das Mosquitto Installationsverzeichnis. Danach könnten wir OpenSSL sogar wieder deinstallieren - Mosquitto und Firewall
Wenn Sie nun Mosquitto einfach als Anwender starten, dann die Windows Firewall den Zugriff verhindern.
Das umgehen Sie, indem Sie z.B. eine Firewall Regel addieren, um eingehend 1883/TCP und 8883/TCP zuzulassen. - Funktion testen
Die Funktion testen Sie am besten, indem Sie einen Subscriber und Publisher nutzen. Am Anfang haben Sie meist noch keine Endgeräte am Start. Das Mosquitto-Paket enthält aber die beiden Programme Mosquitto_pub.exe und mosquitto_sub.exe, auf die ich später noch eingehe - Mosquitto interaktiv starten
Nachdem Mosquitto installiert ist, würde ich das Programm erst einmal in einer CMD-Box interaktiv starten. So sehen Sie sofort etwaige Fehlermeldungen und auch die Aktivitäten auf dem Broker. Die Einrichtung von Mosqitto als Dienst kommt dann später.
REM Start des Mosquitto Servers mit "Verbose"-Ausgabe mosquitto.exe -v
Wenn Sie nicht schon vorher die Firewall geöffnet haben, wird Windows dann hier eine entsprechende Meldung anzeigen.
Der Service ist per Default auf Port 1883 erreichbar. Im Mosquitto-Verzeichnis gibt es noch die Konfigurationsdatei "mosquitto.conf", auf die ich hier aber im Rahmen der MSXFAQ nicht weiter eingehe.
Für eine Lab-Umgebung, bei der Sicherheit sekundäre ist, kann ich optional auch Websocket und anonyme Anfragen erlauben.
listener 1883 protocol mqtt socket_domain ipv4 allow_anonymous true listener 9001 protocol websockets socket_domain ipv4 allow_anonymous true
Nutzen Sie nie so eine schwache Konfiguration bei Systemen, die aus dem Internet erreichbar sind.
Daher würde ich hier Mosquitto auch interaktiv im "Verbose"-Mode starten und die Konfig-Datei angeben
.\mosquitto.exe -c .\mosquitto.conf -v
Wenn Sie den Mosquitto-Dienst starten, dann läut er automatische die "mosquitto.conf"-Konfigurationsdatei. Beim interaktiven Start aber nur mit Angabe der Konfigurationsdatei!
Dann können auch WebSockets für Abfragen und Ergänzungen genutzt werden.
- mosquitto.conf — the configuration file
for mosquitto
https://mosquitto.org/man/mosquitto-conf-5.html - Quick Guide to The Mosquitto.conf File
With Examples
http://www.steves-internet-guide.com/mossquitto-conf-file/ - How to Install Mosquitto MQTT Broker on
Windows
https://cedalo.com/blog/how-to-install-mosquitto-mqtt-broker-on-windows/
MQTT Broker auf NAS
Nicht jeder will dauerhaft einen Windows Server für die wenigen MQTT-Messages laufen lassen oder Raspi betreuen. Wenn Sie in ihrem LAN aber z.B. ein NAS-System betreiben (Synology, QNAP u.a.), dann prüfen Sie doch mal deren Tauglichkeit. Die größeren Systeme erlauben den Betrieb von Docker-Containern oder kompletten VMs. Ob das unterm Strich dann besser ist also ein Raspi sei dahin gestellt. Aber da die meisten NAS-Systeme ehr auf UNIX basieren, lassen sich vermutlich auch die nativen Broker einfach mal installieren.
Für ein Synology-NAS gibt es auf https://synocommunity.com/ diverse Pakete. Sie müssen im Synology Package Center dazu nur den Vertrauenslevel etwas erweitern und die URL http://packages.synocommunity.com/ als zusätzliche Quelle addieren. Das Package Center bekommt dann eine neue Karteikarte "Community", unter der dann viele andere Pakete. Eines davon ist Mosquitto.
Nach der Installation müssen Sie nur noch ein "Run" starten. Es gibt aber keine GUI zur Konfiguration. Die Einstellungen sind per SSh in der Datei /usr/local/mosquitto/var/mosquitto.conf vorzunehmen. Per Default lauscht diese Installation auf 1883/TCP ohne Verschlüsselung und ohne Authentifizierung. Für einen rein Test ist das OK. Aber selbst wenn der Server nur intern erreichbar wäre, könen über MQTT ja auch Aktionen ausgelöst werden. Hier ist es also ratsam über die Konfiguration für mehr Sicherheit zu sorgen.
- Syno community
https://synocommunity.com/ -
Mosquitto Broker with Websockets enabled on the Synology NAS
https://primalcortex.wordpress.com/2015/06/11/mosquitto-broker-with-websockets-enabled-on-the-synology-nas/
Installing Mosquitto (MQTT) broker on
Synology NAS
https://www.youtube.com/watch?v=b3A1RJdDf-w
Leider gibt es keine GUI zur Konfiguration. Sie müssen daher auf der Synology erst den SSH-Zugang öffnen und sich darauf verbinden. Im Verzeichnis: "/var/packages/mosquitto/scripts" liegen die Skripte. Unter "/usr/local/mosquitto/var/mosquitto.conf" finden Sie dann auch die Konfigurationsdatei.
Bei mir Luft der MQTT-Broker auf einem kleinen DS216j einfach mit und hat noch keine Aussetzer gehabt.
MQTT per Kommandozeile
Ehe ich mich nun an Sensoren mache, die vielleicht auf Basis des ESP8266, ESP32 oder anderen Geräten entwickelt werde, teste ich die Funktion direkt auf dem Computer mit den Tools von Mosquitto, die einen Subscriber und einen Publisher darstellen. Ich starte dazu in drei unterschiedlichen CMD-Boxen die folgenden Kommandozeilen:
REM Start eines Subscribers, der auf den Kanal "msxfaq/test" lauscht und die gemeldeten Daten ausgibt mosquitto_sub.exe -h 127.0.0.1 -v -t msxfaq/test REM Start eines Subscribers, der alle Meldungen lauscht und ausgibt mosquitto_sub.exe -h 127.0.0.1 -v -t #
Wenn nun noch nichts kommt, dann nutze ich ein zweites CMD-Fenster, um eine Meldung zu generieren.
REM Senden einer Message REM -h ist der Hostname REM -t ist das Topic REM -m ist die Message mosquitto_pub.exe -h 127.0.0.1 -t msxfaq/test -m "Hallo"
Entsprechend sehen Sie dann in den Fenstern die Aktion des Publishers, des Subscribers und die Verbose-Ausgabe von Mosquitto.
Die Information, die der Publisher an den Mosquitto-Server sendet, wird vom Subscriber gleich wieder angezeigt. Die Funktion ist damit schon mal gegeben.
- Using The Mosquitto_pub and
Mosquitto_sub MQTT Client Tools- Examples
http://www.steves-internet-guide.com/mosquitto_pub-sub-clients/
Mosquitto als Dienst
Auf Dauer wollen Sie Mosquitto nicht mit einem angemeldeten Benutzer laufen lassen. Da bietet sich die Installation als Dienst an. Bei Version 1.4 konnte schon beim Setup auch die Installation als Dienst ausgewählt werden. Ab Version 1.5 können Sie Mosquitto aber auch noch als Dienst installieren. Über folgende Kommandozeile können Sie Mosquitto als Dienst registrieren und wieder entfernen:
REM Installieren als Dienst C:\Program Files\mosquitto\mosquitto install REM Dienst starten net start mosquitto REM Dienst Stoppen net stop mosquitto REM Dienst wieder entfernen C:\Program Files\mosquitto\mosquitto uninstall
Achten Sie später bei einem Update, darauf, dass Sie den Dienst vorher beenden, damit die Dateien nicht gesperrt sind und so nicht überschreiben werden können.
- MQTT Broker unter Windows Server 2016
installieren
http://blue-pc.net/2018/03/22/mqtt-broker-unter-windows-server-2016-installieren/ - How to Install The Mosquitto MQTT Broker
on Windows
http://www.steves-internet-guide.com/install-mosquitto-broker/
Mosquitto interne Daten
Mosquitto generiert auch selbst einige Daten, die er standesgemäß per MQTT bereitstellt. Sie können also über einen Subscribe auf diese Werte sehr schnell schon Daten erhalten.
$SYS/broker/uptime $SYS/broker/load/messages/received/1min $SYS/broker/load/messages/sent/1min $SYS/broker/load/publish/received/1min $SYS/broker/load/publish/sent/1min $SYS/broker/load/bytes/received/1min $SYS/broker/load/bytes/sent/1min $SYS/broker/load/sockets/1min $SYS/broker/load/connections/1min $SYS/broker/load/messages/received/5min $SYS/broker/load/messages/sent/5min $SYS/broker/load/bytes/received/5min $SYS/broker/load/bytes/sent/5min $SYS/broker/load/messages/received/15min $SYS/broker/load/messages/sent/15min $SYS/broker/load/bytes/received/15min $SYS/broker/load/bytes/sent/15min $SYS/broker/messages/received $SYS/broker/messages/sent $SYS/broker/bytes/received $SYS/broker/bytes/sent
Der MQTT.fx-Client hat sogar einen eigenen Reiter dafür, der genau diese Daten direkt anzeigt. Sie müssen sich nur mit dem Mosquitto-Server verbinden und dann auf der Seite "Broker Status" einen Subscribe machen.
Alternativ können auch die Werte von Hive MQ erhalten.
MQTT Broker in der Cloud
Natürlich gibt es auch jede Menge Anbieter, die basierend auf der ein oder anderen OpenSource oder Eigenentwicklungen einen Cloud-Services bereit stellen. Fast alles haben auch eine "Free-Version" für geringe Datenmenge, die für erste Gehversuche sicher ausreicht. Aber letztlich müssen auch Cloud-Anbieter irgendwie ihre Kosten wieder verdienen und wenn dies nicht klappt, dann können Sie nur die Daten verkaufen, die Leistung weiter einschränken oder wieder verschwinden. Siehe auch Cloud - Abruptes Ende. Man muss als schon genau überlegen, bei welchem Cloud-Service Sie ihre IoT-Daten als Relay hinterlegen.
- Cloud MQTT
https://www.cloudmqtt.com/plans.html
Kostenfrei für bis zu 10 Connections und 10 kbit/s - Heroku
https://elements.heroku.com/Add-ons/cloudmqtt - ThinStudio
http://www.thingstud.io/ - Azure IoT und MQTT: Kommunikation mit
Ihrem IoT Hub mithilfe des Protokolls MQTT
https://docs.microsoft.com/de-de/azure/iot-hub/iot-hub-mqtt-support
MQTT Test-Systeme
Die Firma Hive betreibt einen öffentlichen MQTT-Server, zu dem jeder seine Daten senden und beliebige andere Daten empfangen kann. Das ganze erfolgt natürlich ohne eine Betriebsbereitschaft und auch die Gültigkeit der Daten ist natürlich nicht gesichert. Zumal man per Subscribe "*" quasi alle Kanäle bekommt und damit die Daten auch absichtlich "stören" kann. Das ist wirklich nur ein "Test-System". Aber was sollte jemanden hindern eine Information per MQTT durchaus "anonym" lesbar zu machen. Diese Vorsichtsmaßnahmen gelten für alle "Test-Broker" aber so können Sie ohne Kosten und Mühen erste Gehversuche mit MQTT Publisher oder Subscriber machen:
Broker | Server | TCP Ports | TLS Ports | Websocket |
---|---|---|---|---|
Mosquitto |
iot.eclipse.org |
1883 |
8883 |
n/a |
HiveMQ |
broker.hivemq.com |
1883 |
1883 |
8000 |
Mosquitto |
test.mosquitto.org |
1883 |
8883 / 8884 |
8080 / 8081 |
mosca |
test.mosca.io |
1883 |
1883 |
80 |
Es gibt sicher noch mehr Server aber für den Anfang ist das schon mal ausreichend.
MQTT Clients
Auf dieser Seite habe ich auch die Kommandozeilen von Mosquitto beschrieben. Das sind natürlich einfache Werkzeuge und für den praktischen Einsatz eher nicht passend. Sie müssen schon schauen, auf welcher Plattform Sie MQTT nutzen sollen um als Subscriber, die Werte von einem Broker abfragen und ggfls. darauf reagieren oder diese grafisch aufbereiten:
Client |
Beispiele |
---|---|
Browser |
|
Windows/Linux/MAC |
|
IOS |
|
Android |
Für Windows Anwender ist MQTTFC aber insbesondere auch MQTT-Explorer sehr einfach nutzbare Systeme. Gerade der MQTT-Explorer liefert die Topcs als Baumdiagramm und erlaubt sogar erste Grafiken. Hier am Beispiel eines Shelly PlugS, der seine Daten an einen lokalen MQTT-Server sendet
Allerdings kommt MQTT-Explorer wohl schnell an seine Grenzen, wenn Sie mit "#" alle Topics einen MQTT-Servers abbonieren.
- Weitere siehe u.a.
https://www.hivemq.com/blog/seven-best-mqtt-client-tools
Es gibt noch sehr viele kleine Apps, speziell für Smartphones, um als MQTT-Subscriber gewisse Daten abzuholen und die Entwicklung ist hier sehr dynamisch. - HomePoint: Espressif ESP32 Based
Smarthome screen for MQTT
https://GitHub.com/sieren/Homepoint
MQTT StatusClients auf ESP32 und M5Stack
MQTT mit PowerShell
Als Windows Admin und Consultant stellt sich mir natürlich immer die Frage, wie ich MQTT auch aus der PowerShell nutzen kann. Ich kann es mir schon interessant vorstellen gewisse Kennzahlen, die z.B. als Windows Performance Counter vorliegen, per MQTT-Publish an einen Broker weiter zu geben. Umgekehrt könnte es auch interessante Anwendungsfälle geben, MQTT-Werte per Subscribe abzufragen und z.B. in PRTG weiter zu verarbeiten.
Es ist in PowerShell selbst aber schon knifflig das MQTT-Protokoll auf Basis der System.net.sockets.tcpclient-Klasse selbst zu programmieren. MQTT ist zwar "Lightweight" aber durch die Verwendung von Bits und Bytes anstatt SOAP-URL und REST-APIs und JSON doch etwas schwerer zu lesen.
- PRTG Manual: MQTT Subscribe Custom
Sensor (Seit Aug 2020)
https://www.paessler.com/manuals/prtg/mqtt_subscribe_custom_sensor - TcpClient-Klasse
https://msdn.microsoft.com/de-de/library/system.net.sockets.tcpclient(v=vs.110).aspx - MQTT Control Packet format
ttp://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718018
Da aber z.B. der Subscriber die Verbindung aufrecht erhalten muss, damit er weitere Updates bekommt, hätte ich intensiver mit PS und Callback-Funktion arbeiten müssen. Daher habe ich mich doch lieber nach Libraries umgeschaut, die z.B. auf :NET basieren und per PowerShell anzusprechen sind. Ich bin fündig geworden und die Ergebnisse finden Sie auf einer eigenen Seite
MQTT und Websockets
Der Port 1883 ist für MQTT der Standardport aber oft gibt es zwischen Client und Serverauch Proxy-Server. Das Protokoll "HTTP" ist da doch deutlich einfacher zu handhaben. MQTT kann auch WebSockets nutzen. Wenn ich z.B. Mosquitto nutze, dann aktivieren folgende Zeilen in der mosquitto.conf neben dem Port 1883 auch noch Websockets.
port 1883 protocol mqtt listener 9001 protocol websockets
Ich muss Mosquitto dann unter Angabe der Konfigurationsdatei starten und sehe mit "-v" auch die Konfiguration
Auf meiner Synology habe ich auch Mosquitto über das Package Center aus dem Community-Zweig installiert. Wenn Sie mit "VI" als Editor nicht zurecht kommen, dann installieren Sie das Paket "SyncCli FileTools", damit Sie mit NANO arbeiten können. Aktiveiren Sie noch den SSH-Zugang
- Nano Editor auf Synology NAS installieren
https://think.unblog.ch/nano-auf-synology-nas-installieren/ - Wie kann ich mich über SSH mit
Root-Berechtigung bei DSM/SRM anmelden?
https://kb.synology.com/de-de/DSM/tutorial/How_to_login_to_DSM_with_root_permission_via_SSH_Telnet
Danach können Sie sich per SSH mit dem NAW verbinden und mit "SUDO NANO /var/packages/mosquitto/var/mosquitto.conf" die Konfiguration anpassen.
# /var/packages/mosquitto/var/mosquitto.conf listener 1883 protocol mqtt listener 9001 protocol websockets
Leider kann ich mit den beiden Hilfsprogrammen Mosquitto_sub.exe und mosquitto_pub.exe nicht per WebSockets senden. Es gibt aber einige Browser-Apps, die diese Funktion unterstützen, z.B.
- MQTT Client sample
https://mitsuruog.GitHub.io/what-mqtt/
Ich kann die Verbindung per Wireshark mitschneiden und sie sehne direkt die HTTP-Verbindung, die aber sehr schnell dann zu einem Binär-Datenstrom wechselt.
Ich hatte etwas erhofft, dass WebSockets mehr HTTP machen und ich einfach per PowerShell z.B. einen "Publish" absetzen kann.
MQTT over UDP
Nicht immer kann ein Sensor eine TCP-Verbindung aufrecht erhalten. Gerade wenn Energie kostbar ist (Solar, Batterie etc) und speziell WLAN viel Energie frisst ist jedes Paket teuer. Dafür eignet sich dann dann UDP. Ein Sensor kann aufwachen, seine Pakete senden und wieder einschlafen. Es gibt mehrere solcher Ansäze aber alle sind nicht "Native MQTT". MQTT funktioniert über TCP aber nicht über UDP. Dennoch gibt es Libraries, die UDP nutzen können. Dies ist aber keine MQTT-Spezifikation aber wird auch als "MQTT-SN", kurz für "MQTT für Sensor Networks" beschrieben.
Die Sensoren bzw. Clients senden ihre Pakete per UDP-Broadcast ins lokale Subnetz, in dem dann auch ein MQTT-SN-Gateway steht, diese UDP-Pakete empfängt und per klassischen MQTT an einen Broker weiter gibt. Der Sensor kommt daher mit einem minimalen Stack aus und muss nicht einmal einen MQTT-Server, DNS-Server o.ä. unterstützen, sondern seine z.B. aus der per DHCP erhaltenen IP-Adresse die Broadcastadresse ermitteln und das Paket senden.
MQTT-SN Specification -pdf
http://mqtt.org/new/wp-content/uploads/2009/06/MQTT-SN_spec_v1.2.pdf
- Introduction to MQTT-SN (MQTT for Sensor
Networks)
http://www.steves-internet-guide.com/mqtt-sn/ - Welcome to MQTT/UDP
https://mqtt-udp.readthedocs.io/en/latest/
MQTT mit ESP8266, Arduino, RasPi und Co
Natürlich ist das schlanke MQTT-Protokoll ideal für das Internet der Dinge (IoT) nutzbar und so verwundert es nicht, dass viele Seiten die Integration von MQTT in die gängigen Plattformen integrieren. Dazu zählen insbesondere die Arduino Plattform und natürlich der ESP8266.
- ESP8266 with DHT22 sending MQTT
http://lazyzero.de/elektronik/esp8266/dht_deepsleep/start
Mit Batterie-Messung - An Arduino library to ease the use of the ESP32 in IoT
projects
https://GitHub.com/merlinschumacher/Basecamp - ESP8266 network client (mqtt, restful) for Arduino
http://tuanpm.net/post/espduino
https://GitHub.com/tuanpmt/espduino - Tasmota-Firmware
SONOFF mit ESP8266 - MQTT - Basic ESP8266 MQTT example
http://www.s6z.de/cms/index.php/homeautomation-homecontrol/hardwareplattformen/esp8266/113-mqtt-basic-esp8266-mqtt-example - Async Web Server for ESP8266 and ESP32
https://GitHub.com/me-no-dev/ESPAsyncWebServer - Arduino Client for MQTT
https://GitHub.com/knolleary/pubsubclient - Arduino Yun MQTT Sensor Node
https://www.hackster.io/stefaanv/arduino-yun-mqtt-sensor-node-2ac2ce - Donnerwetter 2.0 – Gewitterwarnungen mit
MQTT und Twitter
https://www.heise.de/developer/artikel/Donnerwetter-2-0-Gewitterwarnungen-mit-MQTT-und-Twitter-3312871.html
Es gibt aber durchaus auch kommerzielle Firmen, die fertige Sensoren verkaufen oder Sensoren, die mit einer passenden Firmware auch zu einem MQTT-Sensor umgebaut werden können
-
SONOFF
mit ESP8266
Basiert intern auf dem EXP8266 und kann mit passender Firmware dann auch MQTT senden und verstehen. - Wago PLC MQTT Sensor Node
https://www.hackster.io/stefaanv/wago-plc-mqtt-sensor-node-d84b53 - MQTT Features
https://GitHub.com/arendst/Sonoff-Tasmota/wiki/MQTT-Features - MQTT Overview
https://GitHub.com/arendst/Sonoff-Tasmota/wiki/MQTT-Overview - Trådfri: ESP8266-Lampen-Gateway
https://www.heise.de/make/artikel/Ikea-Tradfri-Anleitung-fuer-ein-ESP8266-Lampen-Gateway-3598411.html
Öffentlichen MQTT-Server und Daten
Vielleicht muss man auch nicht alle Werte immer selbst ermitteln. Ich kann es mir durchaus vorstellen, dass diverse MQTT-Broker im Internet bestehen, die kostenfrei oder per Subscription bestimmte Daten bereit stellen. Da gibt es schon ganz viele Informationen, die z.B. Banken, Wetterdienste, Verkehrsbetrieb u.a. per MQTT bereitstellen könnten
- Wetterdaten
- Aktienkurse
- Zugabfahren, Ankunft, Verspätungen
- Verkehrsdichte
- Preise von Waren (z.B. Treibstoff)
- Strompreis zur Steuerung von Wärmepumpen
Es muss ja nicht immer eine REST-API sein, die per HTTP-Polling abgerufen wird. MQTT überzeugt durch das Subscriber-Modell, dass neue Daten sehr schnell an die Subscriber aktiv ausgeliefert werden können.
- Wie können Flugdaten von MQTT Servern empfangen und in
openHAB angezeigt werden?
http://blog.wenzlaff.de/?p=7289
tcp://test.mosquitto.org:1883/Anzahl/Flugzeuge/Hannover:state:default]"}
Weitere Links
- PowerShell mit MQTT
- LoRaWan
- MQTT
https://de.wikipedia.org/wiki/MQTT - MQTT: Protokoll für das Internet der Dinge
https://www.heise.de/developer/artikel/MQTT-Protokoll-fuer-das-Internet-der-Dinge-2168152.html - Installing and using MQTT Lens with Mosquitto
https://sivatechworld.wordpress.com/2015/08/01/installing-and-using-mqtt-lens-with-mosquitto/ - Mosquitto mqtt Message Broker auf der Synology
http://www.pflipsen.net/2016/01/13/mosquitto-mqtt-message-broker-auf-der-synology/ -
https://www.cloudmqtt.com/docs-php.html
Experimenting with MQTT and PHP
https://www.youtube.com/watch?v=jI-0b6XMM5E - MQTT + Node MCU ( Controlling appliances over Internet using
your SMART Phone)
https://www.youtube.com/watch?v=ekav8Le5a7U - Home Automation with Node.js and MQTT
https://www.youtube.com/watch?v=80DxfDmoZUI - MQTT-Based Sensor Network
https://www.hackster.io/stefaanv/mqtt-based-sensor-network-48ca17 - Trådfri: ESP8266-Lampen-Gateway
https://www.heise.de/make/artikel/Ikea-Tradfri-Anleitung-fuer-ein-ESP8266-Lampen-Gateway-3598411.html
IKEA Lampen mit ESP8266 über MQTT-Broker ansteuern - Der eigene IoT Cloud-Server
https://www.nebel.de/de/content/der-eigene-iot-cloud-server - light-duino: MQTT und DMX
http://log.munichmakerlab.de/post/136975240870/our-new-mqtt-dmx-controller-based-on-an
https://GitHub.com/munichmakerlab/light-duino - HobbyIoT NET: MQTT-SN Gateway operation
https://sites.google.com/view/hobbyiot/technology/mqtt-sn-gateway-operation-hobbyiot-net - Demo 14: How to use MQTT and Arduino ESP32 to build a simple
Smart home system
http://www.iotsharing.com/2017/05/how-to-use-mqtt-to-build-smart-home-arduino-esp32.html - Demo 30: How to use Arduino ESP32 MQTTS with MQTTS Mosquitto
broker (TLS/SSL)
http://www.iotsharing.com/2017/08/how-to-use-esp32-mqtts-with-mqtts-mosquitto-broker-tls-ssl.html - HTTP vs. MQTT: A tale of two IoT protocols
https://cloud.google.com/blog/products/iot-devices/http-vs-mqtt-a-tale-of-two-iot-protocols - From Oil Pipelines to the IoT: A Brief History of MQTT
https://blog.paessler.com/a-brief-history-of-mqtt - Understanding MQTT architecture: a deep dive
https://blog.paessler.com/understanding-mqtt-architecture - Everything you need to monitor MQTT and more
https://www.paessler.com/mqtt - Kommerzielle Pro-Version von Mosquitto ($)
https://cedalo.com/ - Blynk-Server (Nicht MQTT)
https://GitHub.com/blynkkk/blynk-server
Blynk is a platform with iOS and Android apps to control Arduino, ESP8266, Raspberry Pi and the likes over the Internet.