Aller au contenu

Module Lua mqtt

Le module mqtt permet de connecter l’agent à un broker MQTT pour publier et souscrire à des topics. Il simplifie l’échange de messages entre l’agent et d’autres applications via le protocole MQTT (Publish/Subscribe).

Pour l’importer, utilisez la déclaration suivante :

local mqtt = require("mqtt")
-- remplacer mqtt par le name dans le fichier de configuration

Configuration

Le module mqtt requiert plusieurs paramètres pour établir et maintenir la connexion au broker. Cette configuration se définit dans le fichier YAML de l’agent.

Exemple complet de configuration :

iot:
  modules:
    mqtt:
      - name: mqtt1                # nom unique de l’instance
        broker: "tcp://mqtt.ex.com"  # URI du broker (tcp:// ou ssl://)
        port: 1883                   # port du broker (1883 par défaut)
        client_id: "agent-mqtt1"     # identifiant client MQTT
        username: "utilisateur"      # optionnel
        password: "motdepasse"       # optionnel
        keepalive: 60                # intervalle keep-alive en secondes

Détails de la configuration

  • name : Nom unique de l’instance du module. Doit être sans espaces ni caractères spéciaux.
  • broker : URI du broker MQTT. Exemples : tcp://localhost, ssl://mqtt.ex.com.
  • port : Port TCP du broker. Par défaut 1883 pour MQTT non chiffré et 8883 pour MQTT sur TLS si URI commençant par ssl://.
  • client_id : Identifiant unique utilisé lors de la connexion. Recommandé de le baser sur name.
  • username, password : Identifiants d’authentification, si le broker l’exige.
  • keepalive : Intervalle de ping MQTT en secondes. Garantit que la connexion reste active.

Fonctions Lua

mqtt.connect()

Établit la connexion au broker MQTT avec les paramètres configurés.

  • Retour :

  • true : connexion réussie.

  • nil, err : échec de la connexion, avec message d’erreur.
local mqtt = require("mqtt1")

local ok, err = mqtt.connect()
if not ok then
    print("Erreur de connexion MQTT : " .. err)
else
    print("Connecté au broker MQTT.")
end

mqtt.disconnect()

Ferme proprement la connexion au broker.

  • Retour :

  • true : déconnexion réussie.

local mqtt = require("mqtt1")

local ok, err = mqtt.disconnect()
if ok then
    print("Déconnecté du broker MQTT.")
end

mqtt.publish(topic, payload[, qos])

Publie un message sur le topic spécifié.

  • Paramètres :

  • topic (string) : nom du topic MQTT.

  • payload (string) : message à envoyer.
  • qos (integer, optionnel) : Quality of Service (0, 1 ou 2). Par défaut 0.

  • Retour :

  • true : publication réussie.

  • nil, err : échec, avec message d’erreur.
local mqtt = require("mqtt1")

local ok, err = mqtt.publish("capteurs/temp", "23.5", 1)
if not ok then
    print("Erreur de publication MQTT : " .. err)
else
    print("Message publié sur capteurs/temp.")
end

mqtt.subscribe(topic, callback[, qos])

Souscrit à un topic et définit un callback Lua pour traiter les messages reçus.

  • Paramètres :

  • topic (string) : nom du topic à souscrire.

  • callback (function) : fonction Lua prenant deux arguments (topic, payload).
  • qos (integer, optionnel) : Quality of Service. Par défaut 0.

  • Retour :

  • true : souscription réussie.

  • nil, err : échec, avec message d’erreur.
local mqtt = require("mqtt1")

local function onMessage(topic, payload)
    print("Reçu sur topic " .. topic .. " : " .. payload)
end

local ok, err = mqtt.subscribe("capteurs/temp", onMessage, 1)
if not ok then
    print("Erreur de souscription MQTT : " .. err)
else
    print("Souscrit au topic capteurs/temp.")
end

Champs Lua associés

  • mqtt.name : Retourne le nom de l’instance (mqtt1).
  • mqtt.type : Retourne le type du module ("mqtt").