English Click this button for the international website

IoT server: Mosquitto en Node Red op Raspberry Pi

Het bouwen van je eigen lokale, private en veilige server voor ‘Internet of Things’ (IoT) is eenvoudig met Mosquitto, Node Red en een Raspberry Pi. Soms verdient deze route de voorkeur boven een cloud-gebaseerde IoT-oplossing. Omdat ‘de cloud’ ook maar gewoon iemand anders zijn computer is: je weet nooit zeker waar je gegevens uiteindelijk terecht komen of wanneer de aangeboden diensten veranderen of beëindigd worden.

In deze tutorial bouwen we een eenvoudige server/broker op een Raspberry Pi (alle modellen) met Mosquitto en Node Red.

Mosquitto MQTT broker

MQTT (Message Queue Telemetry Transport) is een lichtgewicht machine-naar-machine berichtenprotocol voor gebruik bovenop het TCP/IP protocol. Het is ontwikkeld om eenvoudige communicatie tussen “Internet of Things”-apparaten mogelijk te maken. Het wordt bijvoorbeeld gebruikt voor geo-tracking van wagenparken, home automation, sensornetwerken en het op grote schaal verzamelen van data door bijvoorbeeld nutsbedrijven.

Mosquitto is een populaire MQTT server (‘broker’) gesteund door een actieve community en is eenvoudig te installeren en configureren.

Node Red

Node-RED is een programmeertool ontwikkeld door IBM voor het aan elkaar knopen van apparaten, API’s en online diensten. Het biedt een browser-based editor die het makkelijk maakt om gegevensstromen te maken met een breed scala aan knooppunten en die met een enkele klik door de runtime kunnen worden uitgevoerd.

 

De Raspberry Pi voorbereiden

Download Raspbian Lite en schrijf de image naar een SD-kaartje. Steek het kaartje in de Raspberry Pi en start hem op. Log lokaal in op de Pi met gebruikersnaam ‘pi‘ en wachtwoord ‘raspberry‘.
Start de configuratietool ‘raspi-config’:
sudo raspi-config

Mosquitto en Node Red op Raspberry Pi: screenshot van raspi-config
Mosquitto en Node Red op Raspberry Pi: screenshot van raspi-config
  • Verander de gebruikersnaam en wachtwoord
  • Verander de hostname
  • Ga naar ‘interfacing options’ > ‘SSH’ en schakel SSH in
  • Schakel I2C en SPI in wanneer je GPIO-aansluitingen wilt gebruiken

Verlaat de configuratietool en herstart de Pi:
sudo reboot
Na het opstarten kun je op afstand inloggen met SSH en Raspbian updaten:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

 

De Mosquitto MQTT broker installeren

Download en installeer de benodigde pakketten:
sudo apt-get install mosquitto mosquitto-clients python-mosquitto

De Mosquitto MQTT broker is nu actief op TCP poort 1883 van de Raspberry Pi.

Wanneer je de Chrome browser gebruikt dan kun je de broker testen met de ‘MQTT Lens’ extensie voor Google Chrome.

Mosquitto en Node Red op Raspberry Pi: screenshot van de MQTT Lens Chrome extensie
Mosquitto en Node Red op Raspberry Pi: screenshot van de MQTT Lens Chrome extensie

MQTT beveiligen met wachtwoorden

In de standaard configuratie zal Moqsquitto anonieme gebruikers toestaan. We zullen nu de configuratie aanpassen zodat clients alleen met gebruikersnaam en wachtwoord verbinding kunnen maken. Gebruik het hulpprogramma mosquitto_passwd om het bestand met wachtwoorden /etc/mosquitto/passwd te genereren:

sudo mosquitto_passwd -c /etc/mosquitto/passwd jouwgebruikersnaam

Vervang ‘jouwgebruikersnaam’ door je nieuwe gebruikersnaam. Maak dan een nieuw (leeg) configuratiebestand aan waarin Mosquitto verteld word het bestand met wachtwoorden te gebruiken:

sudo nano /etc/mosquitto/conf.d/default.conf

Plaats in het bestand deze twee regels:

allow_anonymous false
password_file /etc/mosquitto/passwd

Sla het bestand op en herstart Mosquitto:

sudo systemctl restart mosquitto

Je kunt Mosquitto nu opnieuw testen met MQTT Lens. Deze applicatie zal niet met Mosquitto kunnen verbinden zonder je nieuwe gebruikersnaam en wachtwoord.

 

Node Red installeren

Installeer node.js, de run-time environment voor het server-side uitvoeren van JavaScript code:

sudo apt-get install nodejs

Installeer Node Red:

sudo apt-get install nodered

Laat Node Red automatisch starten wanneer de Pi opstart:

sudo systemctl enable nodered.service

Start Node Red:

sudo node-red

De browser-based GUI van Node Red is nu bereikbaar op http://<IP-adres van je Pi>:1880

Mosquitto en Node Red op Raspberry Pi: screenshot van de Node Red GUI
Mosquitto en Node Red op Raspberry Pi: screenshot van de Node Red GUI

Het Node Red dashboard installeren

De dashboard-extensie voor Node Red kun je installeren via de Node Red GUI of via de shell. Via de shell met deze commando’s in de Node-RED directory (in dit geval ~/.node-red):

sudo apt-get install npm
sudo npm i -g npm@2.x
sudo npm install node-red-dashboard
Het kan nodig zijn Node Red te herstarten.

Of via de Node Red GUI op deze manier:

  • Ga naar het menu (horizontale streepjes, rechts bovenaan)
  • Selecteer “Manage palette”
  • Selecteer de “Install” tab
  • Voer “node-red-dashboard” in in het zoekveld
  • Klik de “install” knop
  • Wanneer de installatie klaar is, klik de ‘done’ knop
  • Herlaad the Node Red GUI in de browser (druk F5)
  • Je ziet nu een nieuwe tab “dashboard” rechts in de GUI

Het dashboard is bereikbaar op http://<IP-adres van je Pi>:1880/ui

Mosquitto en Node Red op Raspberry Pi: screenshot van node-red-dashboard
Mosquitto en Node Red op Raspberry Pi: screenshot van node-red-dashboard

De Node Red editor beveiligen met een wachtwoord

De beveiligingsinstellingen voor Node Red kun je vinden in het bestand /home/pi/.node-red/settings.js:

Je moet het gedeelte adminAuth ‘uncommenten’  en de gebruikersnaam en het versleutelde wachtwoord veranderen.

Om een nieuw versleuteld wachtwoord te genereren kun je de tool ‘node-red-admin‘ installeren:
sudo npm install -g node-red-admin
En een versleuted wachtwoord genereren:
node-red-admin hash-pw

Wijzig dan het gedeelte adminAuth als volgt:

Vergeet niet je nieuwe gebruikersnaam en versleutelde wachtwoord in te voegen. Als je nu de Node Red editor probeert te laden dan zul je om een gebruikersnaam en wachtwoord gevraagd worden.

Mosquitto en Node Red op Raspberry Pi: screenshot van het Node Red GUI linlogscherm
Mosquitto en Node Red op Raspberry Pi: screenshot van het Node Red GUI linlogscherm

Deze blogpost is ook beschikbaar in het Engels.

Voeg een reactie toe

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *