Module Lua mqtt
Le module mqtt permet de connecter l'agent à un broker MQTT.
Import
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éfaut1883pour MQTT non chiffré et8883pour MQTT sur TLS si URI commençant parssl://.client_id(string) : Identifiant unique utilisé lors de la connexion. Recommandé de le baser surname.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éfaut0. -
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").