Module addon
Le module addon permet à l'agent Alemca d'appeler un service distant exposé via gRPC. Le module effectue des appels dynamiques.
Import
Pour importer le module dans Lua :
Configuration YAML
Exemple à placer dans la section iot.modules du fichier de configuration :
Champs disponibles :
- name (string) : identifiant de l'instance de module (doit être unique)
- addonType (string) : type d'addon — utilisé pour déterminer le nom du service. Exemples : can, canbus, etc.
- address (string) : adresse du service gRPC sous la forme host:port
- timeout (int) : timeout en secondes (champ présent dans la structure, utilisé par la configuration)
- useTLS (bool) : si true, la connexion gRPC utilise TLS
Assomptions raisonnables : si addonType vaut can ou canbus, le loader mappe le nom de service vers canbus.CANService (voir code).
API Lua
Le module Lua retourne une table avec les champs et fonctions suivants :
name: nom de l'instance (lecture seule)type: type du module (lecture seule)connect(): tente d'ouvrir la connexion gRPC. Retourne(true, nil)en cas de succès,(nil, errMsg)en cas d'erreur.disconnect(): ferme la connexion. Même contrat de retour queconnect().call(methodName, reqTable): effectue un appel unary versmethodName(string).reqTableest optionnel et doit être une table Lua représentant le message d'entrée. Retourne(responseTable, nil)ou(nil, errMsg).stream(methodName, reqTable): ouvre un stream serveur (server-side streaming). Retourne un itérateur Lua utilisable commefor msg, err in iterator do ... endoùmsgest une table Lua pour chaque message reçu eterrcontient l'erreur s'il y en a.
Comportements importants :
- Si le module n'est pas connecté, call et stream renvoient une erreur indiquant qu'il faut appeler connect() d'abord.
Exemples d'utilisation Lua
Connexion, appel unary et déconnexion :
local addon = require("addon") -- le nom dépend de l'enregistrement fait par le module
local ok, err = addon.connect()
if not ok then
print("connect error:", err)
return
end
local resp, err = addon.call("GetDBCVersion", {})
if not resp then
print("call error:", err)
else
-- traiter resp (table Lua)
print("response:", resp)
end
addon.disconnect()
Itération sur un stream serveur :
local it, err = addon.stream("SubscribeFrames", {})
if not it then
print("stream error:", err)
return
end
for msg, err in it do
if err then
print("stream recv error:", err)
break
end
-- msg est une table Lua contenant le message protobuf converti
print(msg)
end
Champs Lua associés
addon.name: nom de l'instance (lecture seule)addon.type: type du module (lecture seule)