Skip to content

Module Lua mqtt

Le module mqtt permet de connecter l'agent à un broker MQTT.

Import

local mqtt = require("mqtt1")

Configuration YAML

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 (string, requis) : Nom unique de l'instance du module. Doit être sans espaces ni caractères spéciaux.
  • broker (string) : URI du broker MQTT. Exemples : tcp://localhost, ssl://mqtt.ex.com.
  • port (integer) : 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 (string) : Identifiant unique utilisé lors de la connexion. Recommandé de le baser sur name.
  • username (string, optionnel) : Identifiant d'authentification, si le broker l'exige.
  • password (string, optionnel) : Mot de passe d'authentification, si le broker l'exige.
  • keepalive (integer) : Intervalle de ping MQTT en secondes. Garantit que la connexion reste active (défaut : 60).

API Lua

Liste des fonctions

Fonction Signature Lua Rôle Retour (succès) Retour (échec)
connect bool, err = mqtt.connect() Connecte au broker MQTT. true, nil nil, "msg"
disconnect bool, err = mqtt.disconnect() Ferme la connexion. true, nil nil, "msg"
publish bool, err = mqtt.publish(topic, payload[, qos]) Publie un message. true, nil nil, "msg"
subscribe bool, err = mqtt.subscribe(topic[, qos]) Souscrit à un topic. true, nil nil, "msg"
recv topic, payload = mqtt.recv([timeout_ms]) Récupère le prochain message. string, string nil, nil
Champs mqtt.name, mqtt.type Métadonnées du module.

mqtt.connect()

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

  • Retour :
  • En cas de succès : true, nil.
  • En cas d'erreur : nil, 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 :
  • En cas de succès : true, nil.
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 :

  • En cas de succès : true, nil.
  • En cas d'erreur : nil, 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[, qos])

Souscrit à un topic. Les messages reçus sont stockés dans une file d'attente interne et peuvent être récupérés avec mqtt.recv().

  • Paramètres :

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

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

  • Retour :

  • true : souscription réussie.

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

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

mqtt.recv([timeout_ms])

Récupère le prochain message de la file d'attente des messages reçus.

  • Paramètres :

  • timeout_ms (integer, optionnel) : Délai d'attente en millisecondes. Par défaut 100ms.

  • Retour :

  • topic, payload : le topic et le contenu du message reçu.

  • nil, nil : aucun message disponible dans le délai imparti.
local mqtt = require("mqtt1")

mqtt.connect()
mqtt.subscribe("capteurs/temp", 1)

-- Boucle de réception des messages
while true do
    local topic, payload = mqtt.recv(1000) -- attendre 1 seconde
    if topic then
        print("Reçu sur topic " .. topic .. " : " .. payload)
    else
        print("Aucun message reçu")
    end
end

Champs Lua associés

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