Skip to content

Module opcua

Le module opcua permet de communiquer avec des serveurs OPC UA (Unified Architecture) pour lire et écrire des données industrielles.

Import

Pour importer le module en Lua :

local opcua = require("opcua1")

Configuration YAML

Le module opcua nécessite une configuration dans le fichier YAML de l'agent :

iot:
  modules:
    opcua:
      - name: opcua1                    # nom unique de l'instance
        endpoint: "opc.tcp://localhost:4840"  # URL du serveur OPC UA
        security_policy: "None"         # politique de sécurité (optionnel)
        security_mode: "None"           # mode de sécurité (optionnel)
        username: ""                    # nom d'utilisateur (optionnel)
        password: ""                    # mot de passe (optionnel)
        timeout: 30                     # timeout en secondes (optionnel, défaut: 30)

Détails de la configuration

  • name : Nom unique de l'instance du module. Utilisé pour l'import en Lua.
  • endpoint : URL complète du serveur OPC UA (format opc.tcp://host:port).
  • security_policy : Politique de sécurité à utiliser. Valeurs possibles :
  • None : Aucune sécurité (défaut)
  • Basic256Sha256 : Chiffrement Basic256Sha256
  • Autres politiques supportées par le serveur
  • security_mode : Mode de sécurité. Valeurs possibles :
  • None : Aucune signature ni chiffrement (défaut)
  • Sign : Messages signés
  • SignAndEncrypt : Messages signés et chiffrés
  • username : Nom d'utilisateur pour l'authentification (optionnel).
  • password : Mot de passe pour l'authentification (optionnel).
  • timeout : Délai d'attente pour les opérations, en secondes (défaut: 30).

API Lua

Liste des fonctions

Fonction Signature Lua Rôle Retour (succès) Retour (échec)
connect bool, err = opcua.connect() Connecte au serveur OPC UA. true, nil nil, "msg"
disconnect bool, err = opcua.disconnect() Ferme la connexion. true, nil nil, "msg"
read value, err = opcua.read(nodeId) Lit la valeur d'un noeud. string, nil nil, "msg"
write bool, err = opcua.write(nodeId, value) Écrit une valeur dans un noeud. true, nil nil, "msg"
Champs opcua.name, opcua.type Métadonnées du module.

opcua.connect()

Établit une connexion avec le serveur OPC UA.

  • Paramètres : Aucun
  • Retour :
  • true si la connexion est réussie.
  • nil et un message d'erreur en cas d'échec.
local opcua = require("opcua1")

local ok, err = opcua.connect()
if not ok then
    print("Erreur de connexion : " .. err)
    return
end

print("Connecté au serveur OPC UA")

opcua.disconnect()

Ferme la connexion avec le serveur OPC UA.

  • Paramètres : Aucun
  • Retour :
  • true si la déconnexion est réussie.
  • nil et un message d'erreur en cas d'échec.
local opcua = require("opcua1")

local ok, err = opcua.disconnect()
if not ok then
    print("Erreur de déconnexion : " .. err)
end

opcua.read(nodeId)

Lit la valeur d'un noeud OPC UA.

  • Paramètres :
  • nodeId (string) : Identifiant du noeud à lire (ex. ns=2;s=Temperature).

  • Retour :

  • La valeur du noeud (convertie en string).
  • nil et un message d'erreur en cas d'échec.
local opcua = require("opcua1")

opcua.connect()

-- Lecture d'un noeud par son NodeId
local value, err = opcua.read("ns=2;s=Temperature")
if not value then
    print("Erreur de lecture : " .. err)
else
    print("Température : " .. value)
end

opcua.disconnect()

opcua.write(nodeId, value)

Écrit une valeur dans un noeud OPC UA.

  • Paramètres :
  • nodeId (string) : Identifiant du noeud à écrire.
  • value (string) : Valeur à écrire.

  • Retour :

  • true si l'écriture est réussie.
  • nil et un message d'erreur en cas d'échec.
local opcua = require("opcua1")

opcua.connect()

-- Écriture d'une valeur
local ok, err = opcua.write("ns=2;s=Setpoint", "25.5")
if not ok then
    print("Erreur d'écriture : " .. err)
else
    print("Valeur écrite avec succès")
end

opcua.disconnect()

Exemple complet

local opcua = require("opcua1")
local json = require("json")
local alemca = require("alemca")

-- Connexion au serveur
local ok, err = opcua.connect()
if not ok then
    printError("Connexion OPC UA échouée : " .. err)
    return
end

-- Lecture de plusieurs noeuds
local nodes = {
    "ns=2;s=Temperature",
    "ns=2;s=Humidity",
    "ns=2;s=Pressure"
}

local data = {}
for _, nodeId in ipairs(nodes) do
    local value, err = opcua.read(nodeId)
    if value then
        data[nodeId] = tonumber(value) or value
    else
        printError("Erreur lecture " .. nodeId .. " : " .. err)
    end
end

-- Publication des données
alemca.publish(json.encode(data), "opcua_data")

-- Déconnexion
opcua.disconnect()

Formats de NodeId

Les NodeId OPC UA peuvent être spécifiés dans plusieurs formats :

Format Exemple Description
Numérique ns=0;i=2258 Identifiant numérique
String ns=2;s=Temperature Identifiant texte
GUID ns=1;g=09087e75-8e5e-499b-954f-f2a9603db28a Identifiant GUID
Opaque ns=1;b=M/RbKBsRVkePCePcx24oRA== Identifiant opaque (base64)

Champs Lua associés

  • opcua.name : Retourne le nom de l'instance du module.
  • opcua.type : Retourne le type du module ("opcua").