20221029 Installatie van Mosquitto MQTT server

Missie:

Installeer Mosquitto MQTT server op een Raspberry Pi 4.

Edit: 7 november 2022.

MQTT staat voor Message Queuing Telemetry Transport en is een netwerkberichtenprotocol dat vaak wordt gebruikt voor berichten tussen IoT-apparaten.
Om ervoor te zorgen dat onze Raspberry Pi het MQTT-protocol ondersteunt, gebruiken we een serversoftware genaamd Mosquitto.
Mosquitto is een berichtenserver die verschillende versies van het MQTT-protocol implementeert, waaronder de nieuwste 5.0-revisie.
Het is ook een relatief lichtgewicht software, waardoor Mosquitto de perfecte keuze is voor het omgaan met het MQTT-protocol op onze Raspberry Pi.
Het MQTT-protocol werkt door clients te laten fungeren als "publishers" en "subscribers", ofwel uitgevers en abonnees.
De "publishers" sturen de berichten door naar een server of brooker die als tussenpersoon fungeert.
"Subscribers" maken verbinding met de MQTT-server en lezen berichten die onder een specifiek "topic" of onderwerp worden uitgezonden.
Je kunt MQTT gebruiken voor meerdere sensoren die hun gegevens naar de MQTT-server van de Raspberry Pi sturen.
Deze gegevens kunnen vervolgens door client apparaten worden ontvangen.
Als je meer wil weten over het MQTT-protocol en waarom het uitstekend geschikt is voor IoT-apparaten zoals de Raspberry Pi, kijk dan eens op de officiële MQTT-website.

mqtt-broker-768x768.png

Stap 1 - Breng het besturingssysteem op de laatste stand.

Open een terminal venster en type de volgende commando’s:

						sudo apt update && sudo apt upgrade

Stap 2 - Mosquitto installeren.

Zodra het systeem klaar is met updaten, kunnen we nu de Mosquitto-software installeren.
Gelukkig voor ons is de Mosquitto MQTT-server beschikbaar als onderdeel van de Raspbian-repository, dus het installeren van de software is eenvoudig.
Voer de volgende opdracht in een terminal venster uit om Mosquitto server en clientsoftware te installeren.

						sudo apt install mosquitto mosquitto-clients

Met de clientsoftware kunnen we communiceren met en testen of onze MQTT-server correct werkt op onze Raspberry Pi. Tijdens het installatieproces zal de pakketbeheerder automatisch de Mosquitto-server configureren om te starten bij het opstarten.

Nu heb je de Mosquitto MQTT-server op je Rapberry Pi. We gaan nu controleren of het is geïnstalleerd en actief is met behulp van de onderstaande opdracht.

						sudo systemctl status mosquitto

Dit commando geeft de status van de Mosquitto service terug.
Je zult de volgende tekst moeten zien als de service correct is geïnstalleerd en correct draait.

						active (running)

Stap 3 - Mosquitto testen.

Onze volgende stap zal zijn om te testen of de service werkt zoals het behoort en nu optreedt als een MQTT-server op onze Raspberry Pi.
Om dit te doen, zullen we gebruik maken van de Mosquitto-client die we eerder in deze handleiding hebben geïnstalleerd.
Voor deze sectie moet je twee terminalsessies openen voor je Raspberry Pi (lokaal of via SSH).
Onze eerste taak is het opstarten van een client. De client luistert naar onze MQTT-server die op de Raspberry Pi draait.
Hiervoor kunnen we de Mosquitto-client voor clients gebruiken die we eerder hebben geïnstalleerd.
In ons onderstaande voorbeeld maken we verbinding met een localhost-verbinding en wachten we op berichten van de broker over het onderwerp mqtt/test.
We doen dat met onderstaande opdracht in het client venster.

						mosquitto_sub_sub -h localhost -t "mqtt/test"

Uitleg:
mosquitto_sub_sub Het commando betekent dat we gebruik maken van de subscriber modus.
-h Met dit argument kunt je de hostname opgeven waarmee je verbinding wil maken.
In ons geval gebruiken we de lokale MQTT-server die we op onze Raspberry Pi hebben geïnstalleerd.
-t Vervolgens gebruiken we dit argument om de Mosquitto-client te vertellen naar welk topic van de MQTT-server we moeten luisteren. In ons voorbeeld luisteren we naar een topic genaamd "mqtt/test".

Nu dat we een client hebben ingericht die naar berichten luistert, kunnen we proberen een bericht te sturen.
Hiervoor gebruiken we de publisher. Gebruik onderstaand commando in het tweede terminal venster dat je hebt gestart:

						mosquitto_pub -h localhost -t "mqtt/test" -m "Hello World"

Uitleg:
mosquitto_pub Het commando betekent dat we gebruik maken van de publisher modus.
-h Met dit argument kunt je de hostname opgeven waarmee je verbinding wil maken.
In ons geval gebruiken we de lokale MQTT-server die we op onze Raspberry Pi hebben geïnstalleerd.
-t Vervolgens gebruiken we dit argument om de Mosquitto-publisher te vertellen naar welk topic van de MQTT-server we het bericht moeten sturen.
In ons voorbeeld sturen we het bericht naar een topic genaamd "mqtt/test".
-m Vervolgens gebruiken we dit argument om de Mosquitto-publisher te vertellen welke message we naar de MQTT-server we moeten sturen. In ons voorbeeld sturen we het bericht genaamd "Hello World".

In het eerste terminal venster moet nu het volgende bericht verschijnen.

						"Hello World"

Conclusie.

Nu zou je nu een werkende MQTT-server moeten hebben geïnstalleerd op je Raspberry Pi.
Dit heb je bereikt door gebruik te maken van de gratis en open source software Mosquitto.
Je hebt ook een snelle test gedaan om te controleren of alles werkt zoals bedoeld is.
Als je dit naast een firewall zoals UFW gebruikt, zorg er dan voor dat poort 1883 geopend wordt.

Echter...

Mosquitto is geïnstalleerd zonder enige vorm van veiligheid.
Die gaan we toevoegen.

Stap 4 - Authenticatie toevoegen.

Onderstaand commando dient uitgevoerd te worden in een terminal venster, waarbij <USERNAME> vervangen dient te worden door de gebruikersnaam die je wilt gebruiken.

						sudo mosquitto_passwd -c /etc/mosquitto/passwd <USERNAME>
					

Stel je wil de gebruikersnaam admin gebruiken dan wordt je commando:

						sudo mosquitto_passwd -c /etc/mosquitto/passwd admin
					

Als je bovenstaand commando invoert, vraagt MQTT naar een wachtwoord.
Onthoud dit goed, we hebben het later nodig.
Ook creëert dit commando een bestand met de naam passwd in de /etc/mosquitto directory.
Daarna moeten we het configuratie bestand voor Moasquitto aanpassen met het onderstaande commando.

						sudo nano /etc/mosquitto/mosquitto.conf
					

Voeg de volgende regel toe, helemaal aan het begin van het bestand.
Helemaal aan het begin, anders werkt het niet.

						per_listener_settings true
					

Voeg de volgende regels aan het einde toe om Mosquitto te laten weten waar de gebruikersnaam en het wachtwoord bestand is gesitueerd.

						allow_anonymous false
						listener 1883
						password_file /etc/mosquitto/passwd
						
					

Het bestand zal dan de volgende inhoud hebben. Let op de locatie van de nieuwe inhoud.

						# Place your local configuration in /etc/mosquitto/conf.d/
						#
						# A full description of the configuration file is at
						# /usr/share/doc/mosquitto/examples/mosquitto.conf.example

						per_listener_settings true

						pid_file /run/mosquitto/mosquitto.pid

						persistence true
						persistence_location /var/lib/mosquitto/

						log_dest file /var/log/mosquitto/mosquitto.log

						include_dir /etc/mosquitto/conf.d
						allow_anonymous false 
						listener 1883  
						password_file /etc/mosquitto/passwd
						
					
MosquittoCfg.jpg

Als je tevreden bent met de inhoud, dan bewaar je het bestand met de volgende opdracht reeks: <Ctrl-X> gevolgd door <Y> en dan <Enter>.

Herstart Mosquitto om de wijzigingen werkzaam te maken.

						sudo systemctl restart mosquitto
					

Controleer de werking van Mosquitto.

						sudo systemctl status mosquitto
					

Als Mosquitto nu weer draait, onthoud dat je telkens je gebruikersnaam en wachtwoord opgeeft bij het gebruik van Mosquitto. Bijvoorbeeld:

						mosquitto_sub_sub -h localhost -t "mqtt/test" -u <USER> -P <PASSWORD>
					

Wil je nog gebruikers toevoegen of het wachtwoord van een bestaande gebruiker wijzigen, dan laat het -c argument weg:

						sudo mosquitto_passwd /etc/mosquitto/passwd admin
					
Back to top