Module Lua addon
Le module addon permet de se connecter dynamiquement à un service gRPC I²C (I2CService), d’appeler ses méthodes via réflexion et de récupérer les réponses sous forme de tables Lua.
Importation
Pour l’importer dans Lua :
Configuration
Exemple de configuration dans le fichier YAML de l’agent :
iot:
modules:
addon:
- name: addon_i2c
address: "localhost:50052" # adresse et port du serveur gRPC I²C
timeout: 5 # délai en secondes
useTLS: false # désactive TLS pour cet exemple
addonType: "i2c" # type de l’addon, ici I2C
Détails des options
name(string, requis) : Nom du module, utilisé dansrequire().address(string, requis) : Adresse du serveur gRPC (ex."host:port").timeout(number, optionnel) : Timeout global pour connexion et appels (secondes).useTLS(boolean, optionnel) : Active une connexion TLS sitrue.addonType(string, requis) : Doit être"i2c"pour ce module.
Fonctions Lua
Toutes les méthodes gRPC s’appellent via :
où methodName est le nom exact de la RPC définie dans le .proto, et requestTable une table Lua mappant les champs du message.
addon.connect()
Établit la connexion gRPC.
-
Retour :
-
true, nilsi succès nil, "<message d’erreur>"sinon
addon.disconnect()
Ferme la connexion gRPC.
-
Retour :
-
true, nilsi succès nil, "<message d’erreur>"sinon
addon.call("Scan", {}) → ScanResponse
Scanne le bus I²C et renvoie la liste des adresses détectées.
- Requête :
{} - Réponse :
local resp, err = addon.call("Scan", {})
if resp then
for _, addr in ipairs(resp.addresses) do
print(string.format("Device at 0x%02X", addr))
end
else
print("Scan failed:", err)
end
addon.call("ReadRegister", { address=…, register=…, length=… }) → ReadResponse
Lit une séquence d’octets depuis un registre d’un esclave I²C.
-
Requête :
-
address(uint32) : adresse 7 bits de l’esclave register(uint32) : pointeur du registre de lecturelength(uint32) : nombre d’octets à lire- Réponse :
local req = { address=0x20, register=0x01, length=4 }
local resp, err = addon.call("ReadRegister", req)
if resp then
local bytes = { string.byte(resp.data, 1, #resp.data) }
print("Register read:", table.concat(bytes, ", "))
else
print("ReadRegister failed:", err)
end
addon.call("WriteRegister", { address=…, register=…, data=… }) → WriteResponse
Écrit une séquence d’octets dans un registre d’un esclave I²C.
-
Requête :
-
address(uint32) : adresse 7 bits de l’esclave register(uint32) : pointeur du registre d’écrituredata(bytes) : chaîne Lua contenant les octets à envoyer- Réponse :
-- Prépare deux octets à écrire
local payload = string.char(0x12, 0x34)
local req = { address=0x20, register=0x02, data=payload }
local resp, err = addon.call("WriteRegister", req)
if resp and resp.success then
print("WriteRegister succeeded:", resp.message)
else
print("WriteRegister failed:", err or resp.message)
end
Champs Lua associés
addon.name: Nom de l’instance (champnamede la config YAML).addon.type: Type du module ("addon").