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, nil
si succès nil, "<message d’erreur>"
sinon
addon.disconnect()
Ferme la connexion gRPC.
-
Retour :
-
true, nil
si 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 (champname
de la config YAML).addon.type
: Type du module ("addon"
).