Aller au contenu

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

Détails de la configuration

  • name (string, requis) : Identifiant de l'instance de module (doit être unique).
  • addonType (string, requis) : Type d'addon — utilisé pour déterminer le nom du service. Exemples : can, canbus, etc.
  • address (string, requis) : Adresse du service gRPC sous la forme host:port.
  • timeout (integer) : Timeout en secondes (défaut : 5).
  • useTLS (boolean) : Si true, la connexion gRPC utilise TLS (défaut : false).

Si addonType vaut can ou canbus, le loader mappe le nom de service vers canbus.CANService.

API Lua

Liste des fonctions

Fonction Signature Lua Rôle Retour (succès) Retour (échec)
connect bool, err = addon.connect() Ouvre la connexion gRPC. true, nil nil, "msg"
disconnect bool, err = addon.disconnect() Ferme la connexion gRPC. true, nil nil, "msg"
call resp, err = addon.call(method[, req]) Appel unary gRPC. table, nil nil, "msg"
stream iter, err = addon.stream(method[, req]) Ouvre un stream serveur. iterator, nil nil, "msg"
Champs addon.name, addon.type Métadonnées du module.

addon.connect()

Tente d'ouvrir la connexion gRPC vers le service distant.

  • Paramètres : Aucun
  • Retour :
  • true, nil en cas de succès.
  • nil, "<message d'erreur>" en cas d'échec.

addon.disconnect()

Ferme la connexion gRPC.

  • Paramètres : Aucun
  • Retour :
  • true, nil en cas de succès.
  • nil, "<message d'erreur>" en cas d'échec.

addon.call(methodName[, reqTable])

Effectue un appel unary vers la méthode gRPC spécifiée.

  • Paramètres :
  • methodName (string) : Nom de la méthode à appeler.
  • reqTable (table, optionnel) : Table Lua représentant le message d'entrée.
  • Retour :
  • La table Lua contenant la réponse du service.
  • nil, "<message d'erreur>" en cas d'échec.

Note : Le module doit être connecté avant d'appeler cette fonction.

addon.stream(methodName[, reqTable])

Ouvre un stream serveur (server-side streaming) vers la méthode gRPC spécifiée.

  • Paramètres :
  • methodName (string) : Nom de la méthode à appeler.
  • reqTable (table, optionnel) : Table Lua représentant le message d'entrée.
  • Retour :
  • Un itérateur Lua utilisable avec for msg, err in iterator do ... end.
  • nil, "<message d'erreur>" en cas d'échec.

Note : Le module doit être connecté avant d'appeler cette fonction.

  • Retour :
  • En cas de succès : true, nil.
  • En cas d'erreur : nil, message d'erreur.

addon.disconnect()

Ferme la connexion gRPC.

  • Paramètres : Aucun.

  • Retour :

  • En cas de succès : true, nil.
  • En cas d'erreur : nil, message d'erreur.

addon.call(methodName[, reqTable])

Effectue un appel unary vers la méthode spécifiée.

  • Paramètres :
  • methodName (string) : Nom de la méthode à appeler.
  • reqTable (table, optionnel) : Table Lua représentant le message d'entrée.

  • Retour :

  • En cas de succès : responseTable, nil.
  • En cas d'erreur : nil, message d'erreur.

addon.stream(methodName[, reqTable])

Ouvre un stream serveur (server-side streaming).

  • Paramètres :
  • methodName (string) : Nom de la méthode de streaming.
  • reqTable (table, optionnel) : Table Lua représentant le message d'entrée.

  • Retour :

  • En cas de succès : un itérateur Lua utilisable avec for msg, err in iterator do ... end.
  • En cas d'erreur : nil, message d'erreur.

Note : Si le module n'est pas connecté, call et stream renvoient une erreur indiquant qu'il faut appeler connect() d'abord.

Exemple complet

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 : Retourne le nom de l'instance du module.
  • addon.type : Retourne le type du module ("addon").