| BrowseNode | Identifiant du nœud racine à explorer<br/>Il est possible de préciser le namespace index si celui par défaut n'est pas le bon. Dans ce cas, il faut le rajouter au début avec le séparateur « `,` »<br/>Il est possible de préciser le type d'identifiant de nœud en l'ajoutant au début avec un séparateur « `,` ». Dans ce cas, il faut également préciser le Namespace index.| Affiche l'arborescence complète des nœuds enfant de celui donné en paramètre. | `1;"DBOPCUA"."StructureBoolEntierReel"`<br/>`"DBOPCUA"."StructureBoolEntierReel"`<br/>`1, numeric, 1000` |
| ReadNode | Nom du nœud à lire<br/>Il est possible de préciser le namespace index si celui par défaut n'est pas le bon. Dans ce cas, il faut le rajouter au début avec le séparateur « `,` »<br/>Il est possible de préciser le type d'identifiant de nœud en l'ajoutant au début avec un séparateur « `,` ». Dans ce cas, il faut également préciser le Namespace index. | Renvoi la valeur du nœud. | `"DBOPCUA"."Reel"`<br/>`1;"DBOPCUA"."Reel"` |
### Propriétés
| Nom | Description | Exemple | Valeur par défaut |
| OpcuaURL | Adresse du server OPC-UA | `opc.tcp://172.16.3.38:4840` | |
| RequestTimeout | Durée du timeout des requêtes (souscription, intérrogation, ...).<br/>Spécifique à la session. | 5000 | 5000 |
| CreateDiagnosticAttributes| Definie si les attributs de diagnostique de la sesssion doivent être crées.<br/>Cela implique une souscription auprès du server OPC-UA pour ces attributs. | `false` ou `true`| `false` |
| SamplingIntervalForSubscriptionForDiagnostic | Intervalle d'échantillonnage des items pour les attributs de diagnostique. | 1000.0 | 1000.0 |
| RequestedPublishingIntervalForDiagnostic | Intervalle de publication pour la souscription des attributs de diagnostique. | 1000.0 | 1000.0 |
| DefaultOpcUaNamespace | Intervalle de publication pour la souscription des attributs de diagnostique. | 1 | 1 |
| DefaultOpcUaType | Type par défaut des identifiants. Il sera utilisé avec la commande ReadNode si le type n'est pas explicitement précisé.<br/>Les valeurs possibles sont : String, Numeric et Guid | Numeric | String |
## OpcUaSubscriber
### Attributs
Tous les attributs sont dynamiques et créés d'après les propriétés.
| AddAttributes | Identique à la propriété "OpcuaIdentifiers". | Ajoute des attributs sur le même principe que la propriété "OpcuaIdentifiers". | |
| AddAttributesByBrowsing | Identique à la propriété "OpcuaIdentifiersToBrowse". | Ajoute des attributs sur le même principe que la propriété "OpcuaIdentifiersToBrowse". | |
| BrowseAllNodes | Aucun | La commande est asynchrone, son exécution pouvant être longue. Parcours l'ensemble des nœuds disponibles sur le serveur et les affichent dans l’attribut "asyncReplyResult". | |
|ApplicationUri| L'URI de l'application cliente.<br/>Attention l'URI d'application doit être identique à celle présente dans le certificat dans le cas d'une connexion sécurisé par certificat.<br/>Dans le cas d'un certificat autosigné autogénéré par le device, la valeur de cette propriété sera utilisée pour l'URI d'application du certificat.|`urn:eclipse:milo:tango:client`|`urn:soleil:tango:opcua:client`|
|SecurityPolicy|Définit la politique de sécurité utilisée. Si la valeur est "None", la connexion n'utilisera pas un canal de communication sécurisé. Si un algorithme est spécifié la connexion sera réalisée avec authentification du serveur et chiffrement des échanges.<br/>Les valeurs recommandées par le serveur Panorama sont : Basic256Sha256, Aes128_Sha256_RsaOaep or Aes256_Sha256_RsaPss<br/>Les valeurs possibles sont définis dans l'énumération SecurityPolicy de Milo : https://github.com/eclipse/milo/blob/master/opc-ua-stack/stack-core/src/main/java/org/eclipse/milo/opcua/stack/core/security/SecurityPolicy.java<br/>Les algorithmes supportés sont définis par l'OPC Foundation : http://opcfoundation.org/UA/SecurityPolicy#None|`Basic256Sha256`|`None`|
|SecurityDir|Répertoire de l'emplacement du fichier keystore et du répertoire "pki", l’infrastructure de gestion de clés ou Public Key Infrastructure (PKI). Le répertoire "pki" contient les CA et le certificat du serveur OPC-UA.<br/>Le certificat du serveur est rejeté par défaut. On obtient un message "the trustAnchors parameter must be non-empty". Concrètement il est placé dans pki\rejected, il faut le déplacer dans pki\trusted\certs pour le valider.<br/>Ça semble être une pratique courante d'exiger une action manuelle pour valider le certificat auto-signé en le déplacer d'un répertoire rejected vers trusted|`/usr/Local/etc/opcua/security`|Windows: `%TEMP%/client/security`<br/>Linux: `/tmp/client/security`|
|SecurityKeystoreFilename|Nom du fichier keystore qui contient le certificat du client.<br/>Si SecurityPolicy est défini (autre que None), le certificat client sera chargé à partir de ce keystore. S'il n'existe pas un keystore sera généré automatiquement avec un certificat autosigné.|`tango-opcua.pfx`|`tango-opcua-client.pfx`|
|SecurityKeystorePassword|Mot de passe du keystore|`password`|Vide|
|SecurityKeystoreAlias|Alias du certificat client dans le keystore|`dev-el6-1`|`client-ai`|
### Propriétés
| Nom | Description | Exemple | Valeur par défaut |
| OpcuaNamespace | Index du namespace par défaut. Il sera utilisé partout ou le namespace index n'est par explicitement précisé. La valeur par défaut est 1. | 3 | 1
| OpcuaType | Type par défaut des identifiants. Il sera utilisé partout ou le type n'est par explicitement précisé. La valeur par défaut est String.<br/>Les valeurs possibles sont : String, Numeric et Guid | Numeric | String |
| OpcuaIdentifiers | Liste d'attributs à créer. Chaque ligne est composée des éléments ci-dessous, séparés par le caractère « `;` ».<br/><ul><li>Nom de l'attribut</li><li>Nœud utilisé pour la partie lecture</li><ul><li>Il est possible de préciser un NamespaceIndex pour chaque nœud en l'ajoutant au début avec un séparateur « `,` ».</li><li>Il est possible de préciser le type d'identifiant de nœud en l'ajoutant au début avec un séparateur « `,` ». Dans ce cas, il faut également préciser le namespace index.</li></ul><li>Optionnelement, un booléen (`true` ou `false`) qui indique si des évenements Tango doivent être générés à chaque évenement OPCUA reçu pour cet attribut.</li><li>Nœuds utilisés pour l'écriture.</li><ul><li>Il peut y en avoir plusieurs séparé par le caractère « `;` ».</li><li>Cela peut être le même que le nœud de lecture.</li><li>Il est possible de préciser un NamespaceIndex pour chaque nœud en l'ajoutant au début avec un séparateur « `,` ».</li><li>Il est possible de préciser le type d'identifiant de nœud en l'ajoutant au début avec un séparateur « `,` ». Dans ce cas, il faut également préciser le namespace index.</li></ul></ul><br/>S'il n'y a pas de nœuds en écriture, l'attribut sera en lecture seul.<br/>Une seule souscription est crée pour tous les attributs de la liste. | `reel;"DBOPCUA"."Reel";"DBOPCUA"."Reel";1,"DBOPCUA"."Reel"`<br/>`tableau;"DBOPCUA"."Tableau5Entiers"`<br/>`chaine;"DBOPCUA"."Chaine"`<br/>`NamespaceIndex=1`<br/>`axisPos3;:Robot:Applications:main:string:sAxisPos:sAxisPos[3]`| |
| RequestedPublishingInterval | Intervalle de publication pour les souscriptions | 1000.0 | 1000.0 |
| TangoEventActivatedForBrowsedAttributes | Indique si un évenement Tango sera envoyé au souscripteurs pour chaque évenement OPCUA reçu pour tous les attributs issus d'un browse.<br/>Peut prendre la valeur `true` ou `false`. | `false` | `false` |
# Description d'un nœud
Un nœud peut être décrit par trois paramètres :
* L'identifiant,
* Le NamespaceIndex,
* Le type d'identifiant.
Un namespaceIndex et un type d'identifiant par défaut sont définit par les propriété. Il est possible de définir un nœud de trois manières :
* Identifiant seul : le namespaceIndex et le type d'identifiant par défaut sont utilisés
* NamespaceIndex, Identifiant : le type d'identifiant par défaut est utilisés
* NamespaceIndex, Type d'identifiant, Identifiant : La description est complète.
# Evenements
Le device TangoOPCUA reçoit des évenements pour chaque changement de valeur d'un attribut OPCUA. En utilisant les propriété du device, il est possible de générer les évenements Tango équivalent.
# Déploiement
## Script d’exécution et librairies
Le device utilise la librairie OPCUA Milo. Actuellement, cette dépendance n'est pas présente dans les déploiements. Il faut la rajouter ainsi que les dépendances liées.