Zuletzt geändert am 17. Juli 2018 um 21:51

MQTT

Version vom 17. Juli 2018, 21:51 Uhr von Strange (Diskussion | Beiträge) (ACL (Access Control List))

http://mqtt.org/
MQTT ist folgendes:

  • Publish-Subscribe-Protokoll, der Client nimmt die Rolle des Publishers und Subscribers ein
  • Bidirektional und Push-basiert also Ereignisgetrieben
  • Baut auf TCP auf
  • Nachrichtenorientiert
  • Lose gekoppelt
  • Schlank

Also alles klar!?

Server/Broker

Eclipse Mosquitto

https://mosquitto.org/

Konfig: /etc/mosquitto/mosquitto.conf
Service: sudo service mosquitto restart

Username and Password Authentication

Initale Passwortdatei im Verzeichniss /etc/mosquitto erstellen

 mosquitto_passwd -c users.txt user1

Alle weiteren Benutzer auf diese Weise hinzufügen

 mosquitto_passwd -b users.txt user2 password

Falls ein Benutzer gelöscht werden soll

 mosquitto_passwd -D users.txt userx

Dann der mosquitto.config folgende Zeilen hinzufügen

 allow_anonymous false
 password_file /etc/mosquitto/passwords.txt

ACL (Access Control List)

Eine ACL-Datei im Verzeichnis /etc/mosquitto erstellne wie z.B. acl.txt
Diese Datei über die /etc/mosquitto/mosquitto.conf einbinden.

 acl_file /etc/mosquitto/acl.txt

Es gibt 3 Bereiche die man konfigurieren kann

  1. General Section
  2. User Specific Section
  3. Client or User ID

Hier wird nur der User-Bereich erklärt!

 user intern
 topic readwrite #      (oder kurz 'topic #')
user extern topic read # write extern/#

Der Benutzer intern darf alles lesen und schreiben während der Benutzer extern zwar alles lesen aber nur in extern/# schreiben darf.

Client

Kommandozeile

Wenn Mosquitto installiert ist, gibt es einen Commandozeilenclient.
Alle Topics abonnieren:
mosquitto_sub -h localhost -d -v -t "#"
Auf das Topic space/electrolab/switch2 die Nachricht "ON" schicken:
mosquitto_pub -h localhost -m "ON" -t space/electrolab/switch2 -d

Browser

Man kann MQTT auch aus dem Browser von einer Webseite aus nutzen.
Es gibt aber ein Problem. MQTT basiert auf TCP, die Sandbox des Browser lässt aber aus sicherheitsgründen keine TCP-Sockets zu. Die Lösung sind WebSockets. Die müssen erst im Mosquitto configuriert werden.

listener 1884
protocol websockets

Eclipse paho liefert dann die Client-Bibliothek und ein Beispiel
https://github.com/eclipse/paho.mqtt.javascript

UI

MQTT.fx

http://mqttfx.jensd.de/ Ein in Java mit der UI-Technologie JavaFX programmierter Client der auf allen Betriebssystemen laufen sollte.