Skip to content

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 :

local addon = require("addon")

Configuration YAML

Exemple à placer dans la section iot.modules du fichier de configuration :

iot:
  modules:
    addon:
      - name: can
        addonType: can
        address: 127.0.0.1:50051
        timeout: 5
        useTLS: false

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 que connect().
  • call(methodName, reqTable) : effectue un appel unary vers methodName (string). reqTable est 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 comme for msg, err in iterator do ... endmsg est une table Lua pour chaque message reçu et err contient 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)