Module addon
Le module addon
permet de communiquer avec un logiciel externe. Il est conçu pour être utilisé avec des protocoles de communication moins courants ou des systèmes spécifiques. L'addon est un module Lua qui permet d'interagir avec le logiciel externe via des appels de fonction.
La communication avec l'addon se fait via gRPC, ce qui permet une communication sécurisée et efficace entre l'agent Alemca et le logiciel externe.
Configuration Addon
L'agent Alemca est configuré via un fichier de configuration. Pour déclarer un addon il faut ajouter la section suivante dans le fichier de configuration de l'agent Alemca :
Details de la configuration
- name : Nom de l'addon. Il doit être unique et ne pas contenir d'espaces ou de caractères spéciaux.
- addonType : Type de l'addon. Il doit correspondre au type de l'addon que vous utilisez (par exemple,
can
pour l'addon CAN). - address : Adresse de l'addon. Il doit être au format
IP:PORT
- timeout : Délai d'attente pour la connexion à l'addon, en secondes. Si la connexion prend plus de temps que ce délai, elle échouera.
- useTLS : Indique si la connexion doit utiliser TLS (true) ou non (false). Si vous utilisez TLS, assurez-vous que l'addon est configuré pour accepter les connexions TLS.
Exemple de configuration
Depuis le lua vous pouvez accéder aux l'addon de la manière suivante :
Chaque call est spécifique en fonction du type de l'addon. Par exemple, pour l'addon can, vous pouvez utiliser les appels suivants :
local can = require("can")
-- Fonction pour afficher les tables
function printRecusiveTable(t, indent)
indent = indent or 0
if t == nil then
print(string.rep(" ", indent) .. "nil")
return
end
for k, v in pairs(t) do
local prefix = string.rep(" ", indent)
if type(v) == "table" then
print(prefix .. k .. ":")
printRecusiveTable(v, indent + 2)
else
print(prefix .. k .. ": " .. tostring(v))
end
end
end
-- Connexion à l'addon can
local status, err = can.connect()
if not status then
printError("Error connecting to CAN addon: " .. err)
return
end
-- Retourne la version du DBC.
local resp, err = can.call("GetDBCVersion")
-- Retourne les données DBC analysées (liste de messages et signaux).
local resp, err = can.call("GetDBCData")
-- [{
-- "id" = 1,
-- "name" = 2,
-- "dlc" = 3,
-- "signals" = [
-- {
-- "name": 1,
-- "startBit": 2,
-- "length": 3,
-- "factor": 4,
-- "offset": 5,
-- "isSigned": 6,
-- "isIntel": 7,
-- }
-- ]
-- }]
-- Retourne un flux de messages CAN avec les valeurs de signaux décodées.
local resp = can.stream("SubscribeFrames")
-- {
-- "id": 1,
-- "name": 2,
-- "dlc": 3,
-- "signals": [
-- {
-- "name": 1,
-- "value": 2,
-- }
-- ]
-- }
for msg, err in resp do
if err then
print("Stream error:", err)
break
end
printRecusiveTable(msg)
end
-- Retourne les valeurs de signaux décodées à partir du dernier message CAN reçu.
local resp, err = can.call("GetCurrentSignalValues")
-- [{
-- "id": 1,
-- "name": 2,
-- "dlc": 3,
-- "signals": [
-- {
-- "name": 1,
-- "value": 2,
-- }
-- ]
-- }]
-- Déconnexion de l'addon can
local status, err = can.disconnect()
if not status then
printError("Error disconnecting from CAN addon: " .. err)
return
end
Champs Lua associés
addon.name
: Retourne le nom de l'instanceaddon
.addon.type
: Retourne le type du module (ici,can
).