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 :
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ésSignAndEncrypt: 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 :
truesi la connexion est réussie.nilet 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 :
truesi la déconnexion est réussie.nilet 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).
nilet 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 :
truesi l'écriture est réussie.nilet 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").