Wie kann man MQTT Mosquitto mit SSLPi verbinden ?
MQTT ist ein leichtgewichtiges Protokoll, welches für den Nachrichtenaustausch zwischen Sensoren und Aktoren verwendet werden kann. In diesem Beitrag stelle ich eine einfache Integration mit dem SSLPi dar. Auf eine tiefer gehende Konfiguration des MQTT Brokers wird hier nicht eingegangen.
Bei der Verwendung des MQ Telemetry Transport Protokoll (MQTT) gibt es 3 wichtige Bestandteile. Einen zentralen Broker, mindestens einen Subscriber/Aktor und mindestens einen Publisher/Sensor. Der Subscriber meldet sich beim Broker an und teilt ihm mit welche Nachrichten er haben möchte. Dabei gibt das Topic die Nachricht bzw. eine Klasse von Nachrichten an. Sendet ein Sensor nun eine Nachricht an dem Broker entscheidet dieser, welcher Subscriber diese erhalten soll und schickt sie an diesen weiter.
Auf dem Raspberry Pi wird der Mosquitto Broker und Client installiert. Das Modul „python-mosquitto“ wird nicht benötigt, den hierfür ist der SSLPi Server da.
So wird der Mosquitto MQTT Broker und Client auf dem Raspberry pi installiert:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install mosquitto mosquitto-clients
Nach der Installation läuft der MQTT Broker bereits.
Mit folgenden Befehlen kann man den Status, MQTT Broker stopen oder starten.
sudo service mosquitto status
sudo service mosquitto stop
sudo service mosquitto start
Für einen ersten Test öffne bitte eine zweite SSH Session auf dem Raspberry pi:
In der einen Session starten wir den Subscriber mit:
mosquitto_sub -d -h 127.0.0.1 -t test
In der zweiten Session werden wir einen Publisher aufrufen mit :
mosquitto_pub -h 127.0.0.1 -t test -m 'Hello World'
Wenn alles OK läuft sollte man die Nachricht ‘Hello World’ im Subscriber erhalten.
Nun kann man den Mosquitto MQTT Subscriber in den SSLPi Server integrieren.
Als erstes generiert man im Verzeichnis der SSLPi/app (Defaut Verzeichnis ist /home/pi/SSLPi/app) ein File mit:
sudo nano StartMQTTSub.sh
In diesem File kann man nun den Mosquitto Subscriber wie im oberen Test aufrufen. Hier der Code:
#!/bin/sh
echo start MQTT Subscriber
mosquitto_sub -h 127.0.0.1 -t test
res=$?
if [ $res = "0" ]; then
exit 0
else
echo "Error" 1>&2
exit 1
fi
Danach speichern mit Strg+O und Beenden mit Strg+X.
Anschließend muss man das File noch ausführbar machen mit
sudo chmod +x StartMQTTSub.sh
Als nächstes muss man dem SSLPi Server noch die Applikation, die den MQTT Subscriber aufruft, konfigurieren.
Mit
cd ..
wechselt man in das Verzeichnis in dem sich Konfigurationsdatei SSLPi.cfg befindet und mit
sudo nano SSLPi.cfg
wird die Konfiguration erweitert.
Am Ende Der Datei fügt man die folgenden Zeilen hinzu:
#Run Mosquitto Subscriber
17:MQTT;1;True;cd;1;0; /home/pi/SSLPi/app/
18:MQTT;2;False;./StartMQTTSub.sh;7;0
Wenn man nun den SSLPi Server neu startet kann der SLLPi TestClient oder der Android SSLPi Client mittels des Befehls „MQTT“ den Subscriber starten. Die Clients erhalten nun die Nachricht ‚Hello World‘ als Push Notification, sobald auf dem Raspberry pi der Publisher mit dem Befehl
mosquitto_pub -h 127.0.0.1 -t test -m 'Hello World'
aufgerufen wird.
Erwähnt sei an dieser Stelle, dass Mosquitto noch ein Vielzahl von weiteren Konfigurationsmöglichkeiten hat. Einen recht guten Einblick erhält man auf der Wiki Seite.