MQTT

MQTT = MQ Telemetry Transport en wordt gebruikt door apparaten die berichten versturen.

•Er is een MQTT-client die berichten kan versturen naar een MQTT-Broker. Deze client is dan de publisher
•Een MQTT-client kan ook berichten ontvangen van de MQTT-Broker, de client is dan subscriber

Een MQTT-client kan dus zowel een PUBLISHER als een SUBSCRIBER zijn. De MQTT-client als publisher, connect naar een broker en verstuurt een bericht in een topic. De MQTT-client als subscriber, connect naar een broker en wordt lid van topics waarin de client geïnteresseerd is. De MQTT-broker stuurt berichten vanuit het topic naar de subscribers van dat topic.

De MQTT-broker is dus verantwoordelijk voor het ontvangen en versturen van berichten. Een MQTT-broker kan ingesteld worden met client-authenticatie.

Quality of Service (QoS)

QoS is een level van 1,2 of 3.
QoS level 0 houdt in dat er geen garantie wordt gegeven door de broker dat het bericht daadwerkelijk is ontvangen door de broker. QoS 0 is ‘fire & forget‘.

QoS level 1 geeft aan dat het bericht tenminste bij één client is afgeleverd. De publisher wacht op een bevestiging van de broker. Zodra deze ontvangen is kan de publisher het bericht vergeten. Wordt het niet ontvangen binnen een time-out, dan stuurt de publisher het bericht nogmaals.

QoS level 2 geeft aan dat het bericht is ontvangen door de broker krijgt een bevestiging daarvan. Na verwerking door de broker wordt nog een bevestiging gestuurd naar de publisher dat het bericht verwerkt is. Zodoende ontstaat een ‘4-part-handshake’.

Retain

Retain geeft aan dat het bericht in het topic op de broker wordt bewaard en verstuurd wordt naar nieuwe subscribers op het moment dat deze zich aanmelden. Alleen het laatste retained bericht in een topic kan verstuurd worden, in een topic kan namelijk slechts één retained bericht bewaard blijven. Zonder retain zal een nieuwe subscriber alleen nieuwe berichten ontvangen.

Topics

Topics zijn UTF-8 strings om berichten te verzamelen/filteren voor aangesloten clients. Een subscriber meldt zich aan bij de broker om bepaalde topics te ontvangen. Topics hebben één of meer levels die gescheiden worden door een back-slah ‘\’. Topics zijn case sensitive! Bijvoorbeeld:

homeassistant/woonkamer/temperatuur

De broker accepteert elk willekeurig topic dat door een publisher wordt gestuurd.

Last Will & Testament

Een publisher kan een ‘Last Will & Testament’ bericht sturen naar de broker waarmee de broker de deelnemende subscriber clients kan informeren indien de connectie met de publisher wegvalt. Bijvoorbeeld:

    availability_topic: "tele/tasmota_sensor1/LWT"
    payload_available: "Online"
    payload_not_available: "Offline"

Hiermee ‘zien’ de clients dat sensor_1 offline is gegaan als bijvoorbeeld de batterij leeg raakt.

Subscription

Een subscription kan gedaan worden op een exacte topic of op een topic-wildcard. Er zijn twee wildcards mogelijk in een topic:

  • Single level: +
  • Multi-level #

Een voorbeeld voor een single-wildcard waarmee de temperatuur in alle ruimtes ontvangen worden:

homeassistant/+/temperatuur

Een voorbeeld voor een multi-levelwildcard om alle topics van de woonkamer te ontvangen:

homeassistant/woonkamer/#

MQTT Broker in Home Assistant

De installatie van Mosquitto gaat het eenvoudigs via een Add-on in de Supervisor optie in Home Assistant. Na de installatie volgt de configuratie waarin ook een gebruikersnaam en wachtwoord aangemaakt kan worden.

Binnen de Mosquitto integratie in Home Assistant kan getest worden of berichten-uitwisseling werkt:

MQTT Broker in Linux

Heb je niet de mogelijkheid om Mosquitto als add-on te installeren, dan kan het ook met apt geïnstalleerd worden:

$ sudo apt update
$ sudo apt install mosquitto
$ sudo systemctl enable --now mosquitto

Hiermee draait de MQTT broker met anonymous toegang en om dat uit te zetten zodat een username/password vereist is, wordt het bestand /etc/mosquitto/mosquitto.conf aangepast met extra regels:

allow_anonymous false
password_file /etc/mosquitto/passwordfile

Het password-bestand wordt alsvolgt aangemaakt waarbij voor de eerste user een password wordt gevraagd:

$ cd /etc/mosquitto
$ sudo mosquitto_passwd -c passwordfile mqtt_user1
...
$ sudo mosquitto_passwd -b passwordfile mqtt_user2 password
$ sudo systemctl restart mosquitto

MQTT Broker in Node-RED

In Node-RED kan een palette geïnstalleerd worden waarmee een MQTT Broker binnen Node-RED gebruikt kan worden.

Nodes binnen Node-RED kunnen hiermee gebruikt worden in flows.

MQTT Command Line Interface

Docker:
docker run hivemq/mqtt-cli <command>

Apple:
brew install hivemq/mqtt-cli/mqtt-cli

Windows:
download en execute zip file

Linux:
wget https://github.com/hivemq/mqtt-cli/releases/download/v4.14.0/mqtt-cli-4.14.0.deb
sudo apt install ./mqtt-cli-4.14.0.deb

Met de cli-tool kunnen berichten ge-published worden en kunnen aan topics worden deelgeneomen (subscriptions):

Publish: 
mqtt pub –t topic -m “message” –h hostname –u username -pw

Subscribe: 
mqtt sub –t topic –h hostname –u username -pw

Mqtt shell: 
mqtt sh

Test: 
mqtt test –h hostname –u username -pw

gebruik de optie -r om de retain-flag mee te geven.

MQTT in Kubernetes (HiveMQ)

https://www.hivemq.com/solutions/technology/kubernetes/

Meer informatie over MQTT

RF via MQTT: voorbeelden voor Home Assistant zijn hier te vinden.

Zigbee2MQTT: meer informatie hierover vind je op de site van Zigbee2MQTT.