Yocto-rs485 : manuel d'utilisation

Yocto-RS485 : Manuel d'utilisation

1. Introduction
1.1 Informations de sécurité
1.2 Conditions environnementales
2. Présentation
2.1 Les éléments communs
2.2 Les éléments spécifiques
2.3 Isolation électrique fonctionnelle
2.4 Accessoires optionnels
3. Premiers pas
3.1 Prérequis
3.2 Test de la connectivité USB
3.3 Localisation
3.4 Test du module
3.5 Configuration
4. Montage et connectique
4.1 Fixation
4.2 Connexions
4.3 Contraintes d'alimentation par USB
4.4 Compatibilité électromagnétique (EMI)
5. Le port série
5.1 Paramètres configurables
5.2 Protocole basé sur des lignes de textes
5.3 Protocole textuel délimité par STX et ETX
5.4 Protocole basé sur des trames binaires
5.5 Protocole MODBUS
5.6 Protocole Wiegand
5.7 Flux de données ASCII
5.8 Flux de données binaires
5.9 Analyseur de communication série
6. Mesures automatiques
6.1 Les jobs de communication
6.2 Les tâches
6.3 Les commandes
6.4 Les fonctions genericSensor
6.5 Exemple de configuration
7. Programmation, concepts généraux
7.1 Paradigme de programmation
7.2 Le module Yocto-RS485
7.3 Module
7.4 SerialPort
7.5 GenericSensor
7.6 DataLogger
7.7 Files
7.8 Quelle interface: Native, DLL ou Service?
7.9 Programmation, par où commencer?
8. Utilisation du Yocto-RS485 en ligne de commande
8.1 Installation
8.2 Utilisation: description générale
8.3 Contrôle de la fonction SerialPort
8.4 Contrôle de la partie module
8.5 Limitations
9. Utilisation du Yocto-RS485 en JavaScript / EcmaScript
9.1 Fonctions bloquantes et fonctions asynchrones en JavaScript
9.2 Utiliser la librairie Yoctopuce pour JavaScript / EcmaScript 2017
9.3 Contrôle de la fonction SerialPort
9.4 Contrôle de la partie module
9.5 Gestion des erreurs
10. Utilisation du Yocto-RS485 en PHP
10.1 Préparation
10.2 Contrôle de la fonction SerialPort
10.3 Contrôle de la partie module
10.4 API par callback HTTP et filtres NAT
10.5 Gestion des erreurs
11. Utilisation du Yocto-RS485 en C++
11.1 Contrôle de la fonction SerialPort
11.2 Contrôle de la partie module
11.3 Gestion des erreurs
11.4 Intégration de la librairie Yoctopuce en C++
12. Utilisation du Yocto-RS485 en Objective-C
12.1 Contrôle de la fonction SerialPort
12.2 Contrôle de la partie module
12.3 Gestion des erreurs
13. Utilisation du Yocto-RS485 en VisualBasic .NET
13.1 Installation
13.2 Utilisation l'API yoctopuce dans un projet Visual Basic
13.3 Contrôle de la fonction SerialPort
13.4 Contrôle de la partie module
13.5 Gestion des erreurs
14. Utilisation du Yocto-RS485 en C#
14.1 Installation
14.2 Utilisation l'API yoctopuce dans un projet Visual C#
14.3 Contrôle de la fonction SerialPort
14.4 Contrôle de la partie module
14.5 Gestion des erreurs
15. Utilisation du Yocto-RS485 avec Universal Windows Platform
15.1 Fonctions bloquantes et fonctions asynchrones
15.2 Installation
15.3 Utilisation l'API Yoctopuce dans un projet Visual Studio
15.4 Contrôle de la fonction SerialPort
15.5 Un exemple concret
15.6 Contrôle de la partie module
15.7 Gestion des erreurs
16. Utilisation du Yocto-RS485 en Delphi
16.1 Préparation
16.2 Contrôle de la fonction SerialPort
16.3 Contrôle de la partie module
16.4 Gestion des erreurs
17. Utilisation du Yocto-RS485 en Python
17.1 Fichiers sources
17.2 Librairie dynamique
17.3 Contrôle de la fonction SerialPort
17.4 Contrôle de la partie module
17.5 Gestion des erreurs
18. Utilisation du Yocto-RS485 en Java
18.1 Préparation
18.2 Contrôle de la fonction SerialPort
18.3 Contrôle de la partie module
18.4 Gestion des erreurs
19. Utilisation du Yocto-RS485 avec Android
19.1 Accès Natif et Virtual Hub.
19.2 Préparation
19.3 Compatibilité
19.4 Activer le port USB sous Android
19.5 Contrôle de la fonction SerialPort
19.6 Contrôle de la partie module
19.7 Gestion des erreurs
20. Utilisation du Yocto-RS485 avec LabVIEW
20.1 Architecture
20.2 Compatibilité
20.3 Installation
20.4 Présentation des VIs Yoctopuce
20.5 Fonctionnement et utilisation des VIs
20.6 Utilisation des objets Proxy
20.7 Gestion du datalogger
20.8 Énumération de fonctions
20.9 Un mot sur les performances
20.10 Un exemple complet de programme LabVIEW
20.11 Différences avec les autres API Yoctopuce
21. Utilisation avec des langages non supportés
21.1 Utilisation en ligne de commande
21.2 Assembly .NET
21.3 Virtual Hub et HTTP GET
21.4 Utilisation des librairies dynamiques
21.5 Port de la librairie haut niveau
22. Programmation avancée
22.1 Programmation par événements
22.2 L'enregistreur de données
22.3 Calibration des senseurs
23. Mise à jour du firmware
23.1 Le VirtualHub ou le YoctoHub
23.2 La librairie ligne de commandes
23.3 L'application Android Yocto-Firmware
23.4 La librairie de programmation
23.5 Le mode "mise à jour"
24. Référence de l'API de haut niveau
24.1 La classe YAPI
24.2 La classe YModule
24.3 La classe YSerialPort
24.4 La classe YFiles
24.5 La classe YGenericSensor
24.6 La classe YDataLogger
24.7 La classe YDataSet
24.8 La classe YMeasure
25. Problèmes courants
25.1 Par où commencer ?
25.2 Linux et USB
25.3 Plateformes ARM: HF et EL
25.4 Les exemples de programmation n'ont pas l'air de marcher
25.5 Module alimenté mais invisible pour l'OS
25.6 Another process named xxx is already using yAPI
25.7 Déconnexions, comportement erratique
25.8 RegisterHub d'un VirtualHub déconnecte le précédent
25.9 Commandes ignorées
25.10 Module endommagé
26. Caractéristiques
27. Index

1. Introduction

Le module Yocto-RS485 est un module USB de 56x20mm qui offre un port série au standard RS485 (transmission en mode différentiel, permettant une communication à plus de 1000m). Il supporte nativement divers protocoles série, y compris MODBUS. Il dispose d'une mémoire tampon permettant au besoin de communiquer de manière asynchrone. Le Yocto-RS485 peut aussi fonctionner comme analyseur de communications RS485. Contrairement aux adaptateurs USB/série les plus courants, il ne nécessite pas de drivers et surtout son utilisation n'utilise pas de port COM virtuel.

En plus d'offrir les communications série bas niveau, le Yocto-RS485 est capable d'interroger et d'analyser de manière autonome la sortie RS485 d'un appareil quelconque pour ensuite présenter les résultats à la manière d'un capteur Yoctopuce. En d'autre termes, le Yocto-RS485 est capable de transformer n'importe quel capteur équipé d'une sortie RS485 en l'équivalent software d'un capteur Yoctopuce, datalogger compris.

Une importante caractéristique du Yocto-RS485 est d'être un module isolé: la partie communication RS485 est électriquement isolée de la partie USB. Ceci lui permet par exemple d'être connecté à des dispositifs alimentés par le courant du secteur sans courir le risque de détruire votre ordinateur, même si l'appareil n'est pas sur la même phase.

Attention, le Yocto-RS485 n'est pas un adaptateur RS485 vers USB classique: il ne crée pas de port COM virtuel, il ne peut donc pas être utilisé avec une application conçue pour utilisé un port COM.


Le module Yocto-RS485

Le Yocto-RS485 n'est pas en lui-même un produit complet. C'est un composant destiné à être intégré dans une solution d'automatisation en laboratoire, ou pour le contrôle de procédés industriels, ou pour des applications similaires en milieu résidentiel ou commercial. Pour pouvoir l'utiliser, il faut au minimum l'installer à l'intérieur d'un boîtier de protection et le raccorder à un ordinateur de contrôle.

Yoctopuce vous remercie d'avoir fait l'acquisition de ce Yocto-RS485 et espère sincèrement qu'il vous donnera entière satisfaction. Les ingénieurs Yoctopuce se sont donné beaucoup de mal pour que votre Yocto-RS485 soit facile à installer n'importe où et soit facile à piloter depuis un maximum de langages de programmation. Néanmoins, si ce module venait à vous décevoir, ou si vous avez besoin d'informations supplémentaires, n'hésitez pas à contacter Yoctopuce:

Adresse e-mail:support@yoctopuce.com
Site Internet:www.yoctopuce.com
Adresse postale:Chemin des Journaliers, 1
Localité:1236 Cartigny
Pays:Suisse

1.1. Informations de sécurité

Le Yocto-RS485 est conçu pour respecter la norme de sécurité IEC 61010-1:2010. Il ne causera pas de danger majeur pour l'opérateur et la zone environnante, même en condition de premier défaut, pour autant qu'il soit intégré et utilisé conformément aux instructions contenues dans cette documentation, et en particulier dans cette section.

Boîtier de protection

Le Yocto-RS485 ne doit pas être utilisé sans boîtier de protection, en raison des composants électriques à nu. Pour une sécurité optimale, il devrait être mis dans un boîtier non métallique, non-inflammable, résistant à un choc de 5 J, par exemple en polycarbonate (LEXAN ou autre) d'indice de protection IK08 et classifié V-1 ou mieux selon la norme IEC 60695-11-10. L'utilisation d'un boîtier de qualité inférieure peut nécessiter des avertissements spécifiques pour l'utilisateur et/ou compromettre la conformité avec la norme de sécurité.

Entretien

Si un dégat est constaté sur le circuit électronique ou sur le boîtier, il doit être remplacé afin de ne pas compromettre la sécurité d'utilisation et d'éviter d'endommager d'autres parties du système par les surcharges éventuelles que pourrait causer un court-circuit.

Identification

Pour faciliter l'entretien du circuit et l'identification des risques lors de la maintenance, vous devriez coller l'étiquette autocollante synthétique identifiant le Yocto-RS485, fournie avec le circuit électronique, à proximité immédiate du module. Si le module est dans un boîtier dédié, l'étiquette devrait être collée sur la surface extérieur du boîtier. L'étiquette est résistante à l'humidité et au frottement usuel qui peut survenir durant un entretien normal.


L'étiquette d'identification est intégrée à l'étiquette de l'emballage.

Applications

La norme de sécurité vérifiée correspond aux instruments de laboratoire, pour le contrôle de procédés industriels, ou pour des applications similaires en milieu résidentiel ou commercial. Si vous comptez l'utiliser le Yocto-RS485 pour un autre type d'applications, vous devrez vérifier les critères de conformité en fonction de la norme applicable à votre application.

En particulier, le Yocto-RS485 n'est pas certifié pour utilisation dans un environnement médical, ni pour les applications critiques à la santé, ni pour toute autre application menaçant la vie humaine.

Environnement

Le Yocto-RS485 n'est pas certifié pour utilisation dans les zones dangereuses, ni pour les environnements explosifs. Les conditions environnementales assignées sont décrites ci-dessous.

Classe de protection III (IEC 61140)

Le module Yocto-RS485 a été conçu pour travailler uniquement avec des très basses tension de sécurité. Ne dépassez pas les tensions indiquées dans ce manuel, et ne raccordez en aucun cas sur le bornier du Yocto-RS485 un fil susceptible d'être connecté au réseau secteur.

1.2. Conditions environnementales

Les produits Yoctopuce sont conçus pour une utilisation intérieure dans un environnement usuel de bureau ou de laboratoire (degré de pollution 2 selon IEC 60664): la pollution de l'air doit être faible et essentiellement non conductrice. L'humidité relative prévue est de 10% à 90% RH, sans condensation. L'utilisation dans un environnement avec une pollution solide ou conductrice significative exige de protéger le module contre cette pollution par un boîtier certifié IP67 ou IP68. Les produits sont conçus pour une utilisation jusqu'à une altitude de 2000m.

Le fonctionnement de tous les modules Yoctopuce est garanti conforme à la documentation et aux spécifications de précision pour des conditions de température ambiante normales selon IEC61010-1, soit 5°C à 40°C. De plus, la plupart des modules peuvent aussi être utilisés sur une plage de température étendue, à laquelle quelques limitations peuvent s'appliquer selon les cas.

La plage de température de fonctionnement étendue du Yocto-RS485 est -30...85°C. Cette plage de température a été déterminée en fonction des recommandations officielles des fabricants des composants utilisés dans le Yocto-RS485, et par des tests de durée limitée (1h) dans les conditions extrêmes, en environnement controllé. Si vous envisagez d'utiliser le Yocto-RS485 dans des conditions de température extrêmes pour une période prolongée, il est recommandé de faire des tests extensifs avant la mise en production.

2. Présentation


1:Connecteur USB (micro-B) 5:DATA +
2:Yocto-Led 6:DATA -
3:Yocto-bouton 7:Masse
4:LEDs d'activité 8:Activation terminaison

2.1. Les éléments communs

Tous les Yocto-modules ont un certain nombre de fonctionnalités en commun.

Le connecteur USB

Les modules de Yoctopuce sont tous équipés d'une connectique USB 2.0 au format micro-B. Attention, le connecteur USB est simplement soudé en surface et peut être arraché si la prise USB venait à faire levier. Si les pistes sont restées en place, le connecteur peut être ressoudé à l'aide d'un bon fer et de flux. Alternativement, vous pouvez souder un fil USB directement dans les trous espacés de 1.27mm prévus à cet effet, prêt du connecteur.

Si vous utilisez une source de tension autre qu'un port USB hôte standard pour alimenter le module par le connecteur USB, vous devez respecter les caractéristiques assignées par le standard USB 2.0:

En cas de tension supérieure, le module risque fort d'être détruit. En cas de tension inférieure, le comportement n'est pas déterminé, mais il peut conduire à une corruption du firmware.

Le Yocto-bouton

Le Yocto-bouton a deux fonctions. Premièrement, il permet d'activer la Yocto-balise (voir la Yocto-led ci-dessous). Deuxièmement, si vous branchez un Yocto-module en maintenant ce bouton appuyé, il vous sera possible de reprogrammer son firmware avec une nouvelle version. Notez qu'il existe une méthode plus simple pour mettre à jour le firmware depuis l'interface utilisateur, mais cette méthode-là peut fonctionner même lorsque le firmware chargé sur le module est incomplet ou corrompu.

La Yocto-Led

En temps normal la Yocto-Led sert à indiquer le bon fonctionnement du module: elle émet alors une faible lumière bleue qui varie lentement mimant ainsi une respiration. La Yocto-Led cesse de respirer lorsque le module ne communique plus, par exemple si il est alimenté par un hub sans connexion avec un ordinateur allumé.

Lorsque vous appuyez sur le Yocto-bouton, la Led passe en mode Yocto-balise: elle se met alors à flasher plus vite et beaucoup plus fort, dans le but de permettre une localisation facile d'un module lorsqu'on en a plusieurs identiques. Il est en effet possible de déclencher la Yocto-balise par logiciel, tout comme il est possible de détecter par logiciel une Yocto-balise allumée.

La Yocto-Led a une troisième fonctionnalité moins plaisante: lorsque ce logiciel interne qui contrôle le module rencontre une erreur fatale, elle se met à flasher SOS en morse1. Si cela arrivait débranchez puis rebranchez le module. Si le problème venait à se reproduire vérifiez que le module contient bien la dernière version du firmware, et dans l'affirmative contactez le support Yoctopuce2.

La sonde de courant

Chaque Yocto-module est capable de mesurer sa propre consommation de courant sur le bus USB. La distribution du courant sur un bus USB étant relativement critique, cette fonctionnalité peut être d'un grand secours. La consommation de courant du module est consultable par logiciel uniquement.

Le numéro de série

Chaque Yocto-module a un numéro de série unique attribué en usine, pour les modules Yocto-RS485 ce numéro commence par RS485MK1. Le module peut être piloté par logiciel en utilisant ce numéro de série. Ce numéro de série ne peut pas être changé.

Le nom logique

Le nom logique est similaire au numéro de série, c'est une chaine de caractère sensée être unique qui permet référencer le module par logiciel. Cependant, contrairement au numéro de série, le nom logique peut être modifié à volonté. L'intérêt est de pouvoir fabriquer plusieurs exemplaires du même projet sans avoir à modifier le logiciel de pilotage. Il suffit de programmer les même noms logiques dans chaque exemplaire. Attention le comportement d'un projet devient imprévisible s'il contient plusieurs modules avec le même nom logique et que le logiciel de pilotage essaye d'accéder à l'un de ces module à l'aide de son nom logique. A leur sortie d'usine, les modules n'ont pas de nom logique assigné, c'est à vous de le définir.

2.2. Les éléments spécifiques

Le connecteur

Le module Yocto-RS485 dispose d'un port d'entrée/sortie série au RS485 sous forme d'un bornier avec les contacts DATA+, DATA- et la masse. Un câblage RS485 compte normalement ces trois fils, auxquels tous les appareils sont câblés en parallèle. Parfois la masse est omise du bus, mais c'est une faiblesse de conception qui ne fonctionne que lorsque les appareils ont tous une masse relativement proche. Le standard EIA/TIA-485 exige un fil de masse.

Le circuit de communication est un circuit de très basse tension de sécurité (TBTS). Il ne doit pas être connecté à des tensions supérieures à 20V, ni être mis en commun avec un circuit d'alimentation réseau. La résistance du Yocto-RS485 aux ondes de choc électromagnétique et aux tensions transitoires causées par la foudre n'a pas été testée. Donc si vous comptez l'utiliser avec des câbles de plus de 30m ou passant à l'extérieur, vous devrez effectuer ces tests par vous-même (cf. norme IEC 61000-4-5).

Les LEDs d'activité

Le Yocto-RS485 dispose de deux LEDs vertes reflétant l'activité du port RS485, une pour la réception et la deuxième pour l'émission.

L'interrupteur d'activation de terminaison

Pour optimiser la qualité de la transmission sur un bus RS485, il est recommandé de le terminer aux deux extrémités par une résistance de 120Ω entre D+ et D-. Afin d'éviter l'utilisation d'un composant externe, le Yocto-RS485 est doté d'une résistance intégrée qu'il est possible de connecter au bus simplement en positionnant ce micro-switch sur ON.

2.3. Isolation électrique fonctionnelle

Le Yocto-RS485 est conçu sous forme de deux circuits électriques bien distincts, séparés par une barrière d'isolation fonctionnelle. Cette isolation ne joue aucun rôle pour la sécurité, puisque les deux circuits du Yocto-RS485 travaillent en très basses tensions de sécurité (TBTS) et sont accessibles sans risque pour l'utilisateur à tout moment. L'isolation est simplement destinée à améliorer la fiabilité et le confort d'utilisation du Yocto-RS485, permettant aux deux circuits de travailler avec des références de terre différentes.

Bien qu'elle ne joue pas de rôle pour la sécurité, la barrière d'isolation a été conçue selon les règles qui s'appliqueraient pour une isolation supplémentaire sur un circuit secondaire. Ses caractéristiques sont les suivantes 3:

2.4. Accessoires optionnels

Les accessoires ci-dessous ne sont pas nécessaires à l'utilisation du module Yocto-RS485, mais pourraient vous être utiles selon l'utilisation que vous en faites. Il s'agit en général de produits courants que vous pouvez vous procurer chez vos fournisseurs habituels de matériel de bricolage. Pour vous éviter des recherches, ces produits sont en général aussi disponibles sur le shop de Yoctopuce.

Vis et entretoises

Pour fixer le module Yocto-RS485 à un support, vous pouvez placer des petites vis de 2.5mm avec une tête de 4.5mm au maximum dans les trous prévus ad-hoc. Il est conseillé de les visser dans des entretoises filetées, que vous pourrez fixer sur le support. Vous trouverez plus de détail à ce sujet dans le chapitre concernant le montage et la connectique.

Micro-hub USB

Si vous désirez placer plusieurs modules Yoctopuce dans un espace très restreint, vous pouvez les connecter ensemble à l'aide d'un micro-hub USB. Yoctopuce fabrique des hubs particulièrement petits précisément destinés à cet usage, dont la taille peut être réduite à 20mm par 36mm, et qui se montent en soudant directement les modules au hub via des connecteurs droits ou des câbles nappe. Pour plus de détails, consulter la fiche produit du micro-hub USB.

YoctoHub-Ethernet, YoctoHub-Wireless and YoctoHub-GSM

Vous pouvez ajouter une connectivité réseau à votre Yocto-RS485 grâce aux hubs YoctoHub-Ethernet, YoctoHub-Wireless et YoctoHub-GSM qui offrent respectivement une connectivité Ethernet, Wifi et GSM. Chacun de ces hubs peut piloter jusqu'à trois modules Yoctopuce et se comporte exactement comme un ordinateur normal qui ferait tourner un VirtualHub.

Connecteurs 1.27mm (ou 1.25mm)

Si vous désirez raccorder le module Yocto-RS485 à un Micro-hub USB ou a un YoctoHub en évitant l'encombrement d'un vrai cable USB, vous pouvez utiliser les 4 pads au pas 1.27mm juste derrière le connecteur USB. Vous avez alors deux possibilités.

Vous pouvez monter directement le module sur le hub à l'aide d'un jeu de vis et entretoises, et les connecter à l'aide de connecteurs board-to-board au pas 1.27mm. Pour éviter les court-circuits, soudez de préférence le connecteur femelle sur le hub et le connecteur mâle sur le Yocto-RS485.

Vous pouvez aussi utiliser un petit câble à 4 fils doté de connecteurs au pas 1.27mm (ou 1.25mm, la différence est négligeable pour 4 pins), ce qui vous permet de déporter le module d'une dizaine de centimètres. N'allongez pas trop la distance si vous utilisez ce genre de câble, car il n'est pas blindé et risque donc de provoquer des émissions électromagnétiques indésirables.

Boîtier

Votre Yocto-RS485 a été conçu pour pouvoir être installé tel quel dans votre projet. Néanmoins Yoctopuce commercialise des boîtiers spécialement conçus pour les modules Yoctopuce. Ces boîtiers sont munis de pattes de fixation amovibles et d'aimants de fixation. Vous trouverez plus d'informations à propos de ces boîtiers sur le site de Yoctopuce5. Le boîtier recommandé pour votre Yocto-RS485 est le modèle YoctoBox-Long-Thick-Black


Vous pouvez installer votre Yocto-RS485 dans un boîtier optionnel.

3. Premiers pas

Par design, tous les modules Yoctopuce se pilotent de la même façon, c'est pourquoi les documentations des modules de la gamme sont très semblables. Si vous avez déjà épluché la documentation d'un autre module Yoctopuce, vous pouvez directement sauter à la description de sa configuration.

3.1. Prérequis

Pour pouvoir profiter pleinement de votre module Yocto-RS485, vous devriez disposer des éléments suivants.

Un ordinateur

Les modules de Yoctopuce sont destinés à être pilotés par un ordinateur (ou éventuellement un microprocesseur embarqué). Vous écrirez vous-même le programme qui pilotera le module selon vos besoin, à l'aide des informations fournies dans ce manuel.

Yoctopuce fourni les librairies logicielles permettant de piloter ses modules pour les systèmes d'exploitation suivants: Windows, macOS, Linux et Android. Les modules Yoctopuce ne nécessitent pas l'installation de driver (ou pilote) spécifiques, car ils utilisent le driver HID6 fourni en standard dans tous les systèmes d'exploitation.

Les versions de Windows actuellement supportées sont Windows XP, Windows 2003, Windows Vista, Windows 7, Windows 8 et Windows 10. Les versions 32 bit et 64 bit sont supportées. La librairie de programmation est aussi disponible pour la Plateforme Windows Universelle (UWP) supportées par toutes les versions Windows 10, y compris Windows 10 IoT. Yoctopuce teste régulièrement le bon fonctionnement des modules sur Windows 7 et Windows 10.

Les versions de macOS actuellement supportées sont Mac OS X 10.9 (Maverick), 10.10 (Yosemite), 10.11 (El Capitan), macOS 10.12 (Sierra), macOS 10.13 (High Sierra) and macOS 10.14 (Mojave). Yoctopuce teste régulièrement le bon fonctionnement des modules sur macOS 10.14.

Les versions de Linux supportées sont les kernels 2.6, 3.x et 4.x. D'autre versions du kernel et même d'autres variantes d'Unix sont très susceptibles d'être utilisées sans problème, puisque le support de Linux est fait via l'API standard de la libusb, disponible aussi pour FreeBSD par exemple. Yoctopuce teste régulièrement le bon fonctionnement des modules sur un kernel Linux 4.15 (Ubuntu 18.04 LTS).

Les versions de Android actuellement supportées sont 3.1 et suivantes. De plus, il est nécessaire que la tablette ou le téléphone supporte le mode USB Host. Yoctopuce teste régulièrement le bon fonctionnement des modules avec Android 7.x sur un Samsung Galaxy A6 avec la librairie Java pour Android.

Un cable USB 2.0 de type A-micro B

Il existe trois tailles de connecteurs USB 2.0, la taille "normale" que vous utilisez probablement pour brancher votre imprimante. La taille mini encore très courante et enfin la taille micro, souvent utilisée pour raccorder les téléphones portables, pour autant qu'ils n'arborent pas une pomme. Les modules de Yoctopuce sont tous équipés d'une connectique au format micro-USB.


Les connecteurs USB 2.0 les plus courants: A, B, Mini B, Micro A, Micro B. 7

Pour connecter votre module Yocto-RS485 à un ordinateur, vous avez besoin d'un cable USB 2.0 de type A-micro B. Vous trouverez ce cable en vente à des prix très variables selon les sources, sous la dénomination USB A to micro B Data cable. Prenez garde à ne pas acheter par mégarde un simple câble de charge, qui ne fournirait que le courant mais sans les fils de données. Le bon câble est disponible sur le shop de Yoctopuce.


Vous devez raccorder votre module Yocto-RS485 à l'aide d'un cable USB 2.0 de type A - micro B

Si vous branchez un hub USB entre l'ordinateur et le module Yocto-RS485, prenez garde à ne pas dépasser les limites de courant imposées par USB, sous peine de faire face des comportements instables non prévisibles. Vous trouverez plus de détail à ce sujet dans le chapitre concernant le montage et la connectique.

3.2. Test de la connectivité USB

Arrivé à ce point, votre Yocto-RS485 devrait être branché à votre ordinateur, qui devrait l'avoir reconnu. Il est temps de le faire fonctionner.

Rendez-vous sur le site de Yoctopuce et téléchargez le programme Virtual Hub8, Il est disponible pour Windows, Linux et Mac OS X. En temps normal le programme Virtual Hub sert de couche d'abstraction pour les langages qui ne peuvent pas accéder aux couches matérielles de votre ordinateur. Mais il offre aussi une interface sommaire pour configurer vos modules et tester les fonctions de base, on accède à cette interface à l'aide d'un simple browser web 9. Lancez le Virtual Hub en ligne de commande, ouvrez votre browser préféré et tapez l'adresse http://127.0.0.1:4444. Vous devriez voir apparaître la liste des modules Yoctopuce raccordés à votre ordinateur.


Liste des modules telle qu'elle apparaît dans votre browser.

3.3. Localisation

Il est alors possible de localiser physiquement chacun des modules affichés en cliquant sur le bouton beacon, cela a pour effet de mettre la Yocto-Led du module correspondant en mode "balise", elle se met alors à clignoter ce qui permet de la localiser facilement. Cela a aussi pour effet d'afficher une petite pastille bleue à l'écran. Vous obtiendrez le même comportement en appuyant sur le Yocto-bouton d'un module.

3.4. Test du module

La première chose à vérifier est le bon fonctionnement de votre module: cliquez sur le numéro de série correspondant à votre module, et une fenêtre résumant les propriétés de votre Yocto-RS485.


Propriétés du module Yocto-RS485.

Cette fenêtre vous permet, entre autres, de jouer avec votre module pour en vérifier son fonctionnement: vous y trouverez un émulateur de terminal simplifié vous permettant de tester les communications à l'aide de votre module.

Dès l'ouverture de la fenêtre, les derniers 4KB de messages mémorisés par le module sont affichés. Tant que la communication continue, les messages sont automatiquement ajoutés en fin de liste. En tapant un mot-clé à côté de l'icône représentant une loupe, on peut limiter l'affichage aux messages dont le contenu inclut le mot-clé. Si nécessaire, on peut stopper temporairement le rafraichissement à l'aide du bouton pause. L'interface supporte sans problème l'affichage de centaines de messages. Lorsqu'on atteint plusieurs milliers de messages, le navigateur peut devenir un peu lent. Le bouton clear permet de vider la liste ainsi que la mémoire tampon du module.

Chaque message est précédé d'un timestamp, relatif au premier message, et de la direction de la transmission - envoi ou réception. Pour faciliter la lecture, l'une des direction est de plus surlignée. L'horodatage des messages est fait directement par le module d'interface, au moment même où le message est détecté. Il est donc relativement précis, avec une résolution d'une milliseconde.

Quel que soit le type de protocole de capture choisi, il est possible de basculer l'affichage du mode ASCII au mode hexadécimal à l'aide du bouton view hex / view ASCII. Mais attention, si la capture est effectuée dans l'un des mode textuels (Line-based ASCII protocol, STX/ETX-based ASCII protocol ou generic ASCII stream), tous les codes de contrôle non textuels seront automatiquement filtrés et n'apparaîtront donc pas dans la communication, même en mode hexadécimal. Utilisez donc l'un des modes binaires si vous avez besoin de voir les codes de contrôle.

Si vous devez étudier ou comparer une communication faite de nombreux messages, vous pouvez utiliser le bouton export pour exporter le contenu actuel de la conversation. La vue exportée comprend simultanément les codes hexadécimaux, avec 16 octets par ligne, et les codes ASCII textuels, formattés en respectant les sauts de ligne pour faciliter la lecture. Elle peut être sauvegardée dans un fichier HTML si nécessaire, à l'aide du bouton Save, pour être ensuite réouverte telle quelle à l'aide de n'importe quel navigateur.

3.5. Configuration

Si, dans la liste de modules, vous cliquez sur le bouton configure correspondant à votre module, la fenêtre de configuration apparaît.


Configuration du module Yocto-RS485.

Firmware

Le firmware du module peut être facilement mis à jour à l'aide de l'interface. Les firmwares destinés aux modules Yoctopuce se présentent sous la forme de fichiers .byn et peuvent être téléchargés depuis le site web de Yoctopuce.

Pour mettre à jour un firmware, cliquez simplement sur le bouton upgrade de la fenêtre de configuration et suivez les instructions. Si pour une raison ou une autre, la mise à jour venait à échouer, débranchez puis rebranchez le module. Recommencer la procédure devrait résoudre alors le problème. Si le module a été débranché alors qu'il était en cours de reprogrammation, il ne fonctionnera probablement plus et ne sera plus listé dans l'interface. Mais il sera toujours possible de le reprogrammer correctement en utilisant le programme Virtual Hub10 en ligne de commande 11.

Nom logique du module

Le nom logique est un nom choisi par vous, qui vous permettra d'accéder à votre module, de la même manière qu'un nom de fichier vous permet d'accéder à son contenu. Un nom logique doit faire au maximum 19 caractères, les caractères autorisés sont les caractères A..Z a..z 0..9 _ et -. Si vous donnez le même nom logique à deux modules raccordés au même ordinateur, et que vous tentez d'accéder à l'un des modules à l'aide de ce nom logique, le comportement est indéterminé: vous n'avez aucun moyen de savoir lequel des deux va répondre.

Luminosité

Ce paramètre vous permet d'agir sur l'intensité maximale des leds présentes sur le module. Ce qui vous permet, si nécessaire, de le rendre un peu plus discret tout en limitant sa consommation. Notez que ce paramètre agit sur toutes les leds de signalisation du module, y compris la Yocto-Led. Si vous branchez un module et que rien ne s'allume, cela veut peut être dire que sa luminosité a été réglée à zéro.

Nom logique des fonctions

Chaque module Yoctopuce a un numéro de série, et un nom logique. De manière analogue, chaque fonction présente sur chaque module Yoctopuce a un nom matériel et un nom logique, ce dernier pouvant être librement choisi par l'utilisateur. Utiliser des noms logiques pour les fonctions permet une plus grande flexibilité au niveau de la programmation des modules

Configuration du port série

Cette fenêtre vous permet de configurer le fonctionnement du port série en choisissant la vitesse, l'encodage, la parité, le nombre de stop bits etc..

Il est aussi possible de choisir le protocole que vous souhaitez utiliser sur la ligne série. Vous trouverez plus de détails à propos de ces différents protocoles au chapitre 5. Le port série.

4. Montage et connectique

Ce chapitre fournit des explications importantes pour utiliser votre module Yocto-RS485 en situation réelle. Prenez soin de le lire avant d'aller trop loin dans votre projet si vous voulez éviter les mauvaises surprises.

4.1. Fixation

Pendant la mise au point de votre projet vous pouvez vous contenter de laisser le module se promener au bout de son câble. Veillez simplement à ce qu'il ne soit pas en contact avec quoi que soit de conducteur (comme vos outils). Une fois votre projet pratiquement terminé il faudra penser à faire en sorte que vos modules ne puissent pas se promener à l'intérieur.


Exemples de montage sur un support.

Le module Yocto-RS485 dispose de trous de montage 2.5mm. Vous pouvez utiliser ces trous pour y passer des vis. Le diamètre de la tête de ces vis ne devra pas dépasser 4.5mm, sous peine d'endommager les circuits du module. Veillez à que la surface inférieure du module ne soit pas en contact avec le support. La méthode recommandée consiste à utiliser des entretoises, mais il en existe d'autres. Rien ne vous empêche de le fixer au pistolet à colle; ça ne sera pas très joli mais ça tiendra.

Si vous comptez visser votre module directement contre une paroi conductrice, un chassis métallique par exemple, intercalez une couche isolante entre les deux. Sinon vous aller à coup sûr provoquer un court-circuit: il y a des pads à nu sous votre module. Du simple ruban adhésif isolant devrait faire l'affaire.

4.2. Connexions

Le standard RS485 consiste à piloter les lignes DATA+ et DATA+ en mode différentiel, ce qui permet d'acheminer le signal sur de très longues distances, parfois plus de 1000 mètres. Le Yocto-RS485 communique en Half-Duplex: chaque périphérique parle tout a tour sur la ligne. Un câblage RS485 compte normalement trois fils, auxquels tous les appareils sont câblés en parallèle: DATA+, DATA- et la masse. Parfois la masse est omise du bus, mais c'est une faiblesse de conception qui ne fonctionne que lorsque les appareils ont tous une masse relativement proche. Le standard EIA/TIA-485 exige un fil de masse.

Le Yocto-RS485 est un module isolé: ne raccordez pas artificiellement la masse du bus RS485 à la masse du bus USB, vous perdriez le bénéfice de l'isolation qui protège votre ordinateur.


Raccordement direct à un périphérique RS485

La terminaison

Contrairement à une communication série classique qui ne fonctionne qu'en point à point, des périphériques RS485 peuvent être organisés en bus. Chaque extrémité du bus doit être terminée avec un résistance de 120Ω. Pour éviter l'emploi de composants externe, une telle résistance de terminaison est intégrée au Yocto-RS485. Elle peut être optionnellement activée à l'aide d'un micro-switch placé juste à coté du bornier.


Organisation en bus: attention à la terminaison.

4.3. Contraintes d'alimentation par USB

Bien que USB signifie Universal Serial BUS, les périphériques USB ne sont pas organisés physiquement en bus mais en arbre, avec des connections point-à-point. Cela a des conséquences en termes de distribution électrique: en simplifiant, chaque port USB doit alimenter électriquement tous les périphériques qui lui sont directement ou indirectement connectés. Et USB impose des limites.

En théorie, un port USB fournit 100mA, et peut lui fournir (à sa guise) jusqu'à 500mA si le périphérique les réclame explicitement. Dans le cas d'un hub non-alimenté, il a droit à 100mA pour lui-même et doit permettre à chacun de ses 4 ports d'utiliser 100mA au maximum. C'est tout, et c'est pas beaucoup. Cela veut dire en particulier qu'en théorie, brancher deux hub USB non-alimentés en cascade ne marche pas. Pour cascader des hubs USB, il faut utiliser des hubs USB alimentés, qui offriront 500mA sur chaque port.

En pratique, USB n'aurait pas eu le succès qu'il a si il était si contraignant. Il se trouve que par économie, les fabricants de hubs omettent presque toujours d'implémenter la limitation de courant sur les ports: ils se contentent de connecter l'alimentation de tous les ports directement à l'ordinateur, tout en se déclarant comme hub alimenté même lorsqu'ils ne le sont pas (afin de désactiver tous les contrôles de consommation dans le système d'exploitation). C'est assez malpropre, mais dans la mesure où les ports des ordinateurs sont eux en général protégés par une limitation de courant matérielle vers 2000mA, ça ne marche pas trop mal, et cela fait rarement des dégâts.

Ce que vous devez en retenir: si vous branchez des modules Yoctopuce via un ou des hubs non alimentés, vous n'aurez aucun garde-fou et dépendrez entièrement du soin qu'aura mis le fabricant de votre ordinateur pour fournir un maximum de courant sur les ports USB et signaler les excès avant qu'ils ne conduisent à des pannes ou des dégâts matériels. Si les modules sont sous-alimentés, ils pourraient avoir un comportement bizarre et produire des pannes ou des bugs peu reproductibles. Si vous voulez éviter tout risque, ne cascadez pas les hubs non-alimentés, et ne branchez pas de périphérique consommant plus de 100mA derrière un hub non-alimenté.

Pour vous faciliter le contrôle et la planification de la consommation totale de votre projet, tous les modules Yoctopuce sont équipés d'une sonde de courant qui indique (à 5mA près) la consommation du module sur le bus USB.

Notez enfin que le câble USB lui-même peut aussi représenter une cause de problème d'alimentation, en particulier si les fils sont trop fins ou si le câble est trop long 12. Les bons câbles utilisent en général des fils AWG 26 ou AWG 28 pour les fils de données et des fils AWG 24 pour les fils d'alimentation.

4.4. Compatibilité électromagnétique (EMI)

Les choix de connectique pour intégrer le Yocto-RS485 ont naturellement une incidence sur les émissions électromagnétiques du système, et donc sur la conformité avec les normes concernées.

Les mesures de référence que nous effectuons pour valider la conformité avec la norme IEC CISPR 11 sont faites sans aucun boîtier, mais en raccordant les modules par un câble USB blindé, conforme à la spécification USB 2.0: le blindage du câble est relié au blindage des deux connecteurs, et la résistance totale entre le blindage des deux connecteurs est inférieure 0.6Ω. Le câble utilisé fait 3m, de sorte à exposer un segment d'un mètre horizontal, un segment d'un mètre vertical et de garder le dernier mètre le plus proche de l'ordinateur hôte à l'intérieur d'un bloc de ferrite.

Si vous utilisez un câble non blindé ou incorrectement blindé, votre système fonctionnera sans problème mais vous risquez de n'être pas conforme à la norme. Dans le cadre de systèmes composés de plusieurs modules raccordés par des câbles au pas 1.27mm, ou de capteurs déportés, vous pourrez en général récupérer la conformité avec la norme d'émission en utilisant un boîtier métallique offrant une enveloppe de blindage externe.

Toujours par rapport aux normes de compatibilité électromagnétique, la longueur maximale supportée du câble USB est de 3m. En plus de pouvoir causer des problèmes de chute de tension, l'utilisation de câbles plus long aurait des incidences sur les test d'immunité électromagnétiques à effectuer pour respecter les normes.

5. Le port série

Contrairement aux adaptateurs de port série classiques, le port série du Yocto-RS485 n'est pas une simple passerelle vers un port COM virtuel. Il est basé sur une gestion active de la communication par le module, et offre une interface de programmation complète semblable à tous les modules Yoctopuce. En particulier,

Grâce à ces fonctions, il est possible par exemple d'utiliser le Yocto-RS485 pour effectuer des communications séries depuis une simple ligne de commande ou par des requêtes HTTP sur une interface REST, sans risquer de perdre des messages.

Le port RS484 du Yocto-RS485 se conforme aux niveaux électriques des standards ANSI/TIA/EIA-485-A-98 et ISO 8482:1987(E), et est protégé contre les ESD sur le bus RS485 à hauteur de ±15 kV.

5.1. Paramètres configurables

Le port série du Yocto-RS485 est capable de gérer les vitesses de communication de 110 bits/s à 250'000 Kbits/s. Il peut être configuré pour utiliser 7 ou 8 bits de données, avec ou sans parité (paire ou impaire), avec 1 ou 2 stop bits13.

Il est aussi possible de configurer dans le module la famille de protocoles qui sera utilisée sur le port série. Cela permet au module de faire une pré-analyse des données directement à la réception, et d'optimiser l'échange d'informations avec le code applicatif, en particulier pour signaler la réception de nouvelles données au moment le plus adéquat (c'est-à-dire lorsqu'un message complet est reçu). Les différentes familles de protocoles supportées sont détaillées dans les sections suivantes.

5.2. Protocole basé sur des lignes de textes

Appelée Line-based ASCII protocol dans l'interface de configuration, c'est une famille très courante dans les instruments de mesures. La machine hôte envoie des commandes de configuration sous forme de commandes terminées par un saut de ligne, et l'instrument envoie ses mesures et ses quittances sous forme de lignes de texte aussi. Parmi les machines utilisant ce genre de protocoles, on trouve:

Les fonctions de l'API les plus utiles dans ce mode de fonctionnement sont:

En mode ligne, si on enregistre un callback de notification de valeur, il sera appelé à chaque nouveau message envoyé ou reçu.

5.3. Protocole textuel délimité par STX et ETX

Sous le nom STX/ETX-based ASCII protocol dans l'interface de configuration, vous pourrez choisir ce type de protocole utilisé par certains instruments de mesures. Les messages textuels sont encadrés par les codes STX et ETX, et des codes binaires complémentaires peuvent être transmis en sus à l'extérieur des balises. Le module gardera uniquement les messages textuels, qui sont les plus faciles à décoder.

Les fonctions de l'API les plus utiles dans ce mode de fonctionnement sont:

En mode STX/ETX, si on enregistre un callback de notification de valeur, il sera appelé à chaque nouveau message envoyé ou reçu.

5.4. Protocole basé sur des trames binaires

Cette famille appelée en anglais Frame-based binary protocol dans l'interface de configuration correspond à tous les protocoles propriétaires qui fonctionnent par échange de messages binaires (non textuels). Le protocole MODBUS RTU en est un cas particulier qui est géré explicitement (voir ci-dessous), mais n'importe quel autre variante d'échange de trames binaires peut être ici utilisée. Le Yocto-RS485 est capable de séparer les différents messages reçus grâce à la mesure du délai entre la réception des octets successifs. Lorsque vous choisissez un protocole basé sur des trames binaires, vous pouvez spécifier l'espacement délimitant la séparation entre deux trames.

Notez que les trames binaires sont limitées à 256 octets. Au delà de cette limite, une nouvelle trame est créée pour la suite du message. L'horodatage de la trame permet d'identifier qu'il s'agit de la continuation de la trame précédente.

Si votre protocole binaire ne spécifie aucune contrainte sur l'espacement entre les trames et l'espacement entre les caractères d'une trame, utilisez plutôt la famille "Flux de données binaire" ci-dessous.

Les fonctions de l'API les plus utiles dans ce mode de fonctionnement sont:

En mode trame binaire, si on enregistre un callback de notification de valeur, il sera appelé à chaque nouvelle trame envoyée ou reçue.

5.5. Protocole MODBUS

Le protocole MODBUS est très utilisé dans le monde industriel et pour la surveillance des infrastructures techniques des bâtiments. Il existe en deux variantes: le mode MODBUS ASCII, où les messages sont échangés sous forme de lignes de codes hexadécimaux, et le mode MODBUS RTU, où les messages sont échangés directement sous forme de trames binaires. Pour dialoguer avec un équipement MODBUS, vous devez impérativement utiliser le même mode que configuré dans l'équipement. En principe, tous les appareils conformes au standard doivent supporter le mode MODBUS RTU.

Les messages MODBUS correspondent à des opérations relativement simples de lecture et écriture de registres binaires (appelés bits, ou "coils") et de mots de 16 bits. Il s'agit systématiquement d'un échange initié par l'hôte, et auquel l'appareil "esclave" répond. Le Yocto-RS485 gère de manière transparente le mode ASCII ou RTU, et calcule lui-même les octets de validations (LRC et CRC) spécifiés dans le protocole MODBUS. Les fonctions de l'API les plus utiles en mode MODBUS sont:

En mode MODBUS, si on enregistre un callback de notification de valeur, il sera appelé à chaque message envoyé ou reçu.

5.6. Protocole Wiegand

Le protocole Wiegand est utilisé principalement pour les systèmes de contrôle d'accès (cartes magnétiques, badges RFID). Il existe de nombreuses variantes, mais toutes reviennent à envoyer un séquence de quelques dizaines de bits identifiant un badge. Le Yocto-RS485 peut décoder les messages Wiegand de deux manières: soit envoyer la séquence de bits telle quelle, en ASCII (suite de zéro et de uns), soit rassembler les bits en octets afin de pouvoir être plus facilement interprétés. Pour que les octets soient correctement rassemblés, il suffit d'indiquer le nombre de bits de parité au début qui doivent être séparés au début du message.

Les fonctions de l'API les plus utiles dans ce mode de fonctionnement sont:

5.7. Flux de données ASCII

Appelé Generic ASCII stream dans l'interface de configuration, il s'agit de la variante la plus primitive de communication en format texte, similaire à un accès fichier. Comme le Yocto-RS485 dispose d'un tampon de lecture de 16KB, il est même possible de déplacer le pointeur de position de lecture librement à l'intérieur de cette fenêtre. Notez que le pointeur de position de lecture est propre à chaque application: si deux applications accèdent simultanément en lecture au port série à travers le réseau, l'avancement de la lecture du tampon faite par une application n'aura pas d'effet sur la disponibilité des données sur l'autre application.

Les fonctions de l'API les plus utiles pour travailler avec un flux de données ASCII sont:

En mode flux, si on enregistre un callback de notification de valeur, il sera appelé à chaque octet reçu.

5.8. Flux de données binaires

Appelé Generic byte stream dans l'interface de configuration, c'est le pendant binaire du flux de données ASCII. On y accède aussi comme à un fichier binaire, avec la possibilité de déplacer le pointeur de position de lecture librement à l'intérieur du tampon de lecture de 16KB. Le pointeur de position de lecture est propre à chaque application: si deux applications accèdent simultanément en lecture au port série à travers le réseau, l'avancement de la lecture du tampon faite par une application n'aura pas d'effet sur la disponibilité des données sur l'autre application.

Les fonctions de l'API les plus utiles pour lire travailler avec un flux de données binaire sont:

En mode flux, si on enregistre un callback de notification de valeur, il sera appelé à chaque octet reçu.

5.9. Analyseur de communication série

Le Yocto-RS485 peut être utilisé comme un analyseur de protocole série en le branchant sur le câble qui relie directement deux appareils communiquant par protocole série. Dans ce mode spécial, les signaux en émission du Yocto-RS485 ne sont pas câblés (garantissant un fonctionnement sans perturbation), et les lignes TD et RD à surveiller sont deux signaux en réception sur le Yocto-RS485. Celui-ci est alors capable de lire le trafic transitant dans les deux sens sur le câble série, en identifiant le sens de la communication.


Câblage pour utiliser le Yocto-RS485 en mode analyseur.

Si vous le désirez vous pouvez acheter sur le site de Yoctopuce un adaptateur prêt à l'emploi avec une fiche DB9 mâle et une prise DB9 femelle, sous la dénomination RS232-Snooping-Adapter14.

6. Mesures automatiques

En plus d'offrir un moyen d'effectuer des communications série à bas niveau, le Yocto-RS485 est capable de travailler à un niveau d'abstraction supérieur. Il peut interroger de manière autonome un appareil par le port série, et présenter les valeurs lues comme des mesures, à la manière de tous les capteurs Yoctopuce. Cela inclut la possibilité d'enregistrer les mesures sur la mémoire flash interne (enregistreur de données). Potentiellement, cela permet de transformer n'importe quel appareil doté d'une sortie série en un capteur Yoctopuce natif avec tous les avantages que cela présente en termes de facilité d'intégration logicielle.


Le Yocto-RS485 est capable d'envoyer et de recevoir automatiquement des données sur le port série.

6.1. Les jobs de communication

Le Yocto-RS485 dispose d'un système de fichiers sur lequel peuvent être stockés des jobs, qui sont en fait de simple fichiers texte au format JSON. Un job décrit des actions d'écriture et de lecture à effectuer sur le port série. Dans l'interface du VirtualHub, la fenêtre décrivant les propriétés du Yocto-RS485 permet de choisir quel job exécuter, tandis que la fenêtre de configuration permet de définir quel job doit être exécuté au démarrage du module. Le Yocto-RS485 n'exécute qu'un seul job à la fois, mais un job peut faire plusieurs choses en parallèle.

Structure d'un job

Un job est essentiellement un ensemble de tâches qui sont indépendantes les unes des autres. Chaque tâche peut envoyer des données sur le port série et/ou réagir à l'arrivée de données du port série.

Définition et gestion des jobs

Un job se définit à l'aide du VirtualHub, dans la fenêtre configuration du Yocto-RS485: cliquez simplement sur le bouton manage files et une fenêtre contenant la liste des jobs définis apparaîtra.


Fenêtre de gestion des jobs

Cette fenêtre permet de choisir quel job exécuter, d'éditer ou de supprimer des jobs. Elle permet aussi de définir un nouveau job, soit à l'aide d'une interface, soit en l'uploadant directement sur le système de fichiers du module. Pour créer un nouveau job, il suffit donc de cliquer sur le bouton define a new job ce qui aura pour effet d'ouvrir la fenêtre de creation d'un job.


Fenêtre de création d'un job.

Un job n'étant qu'un ensemble de tâches, cette fenêtre ne permet que de donner un nom au job et de gérer les tâches contenues dans le job.

Création d'un job par software

Bien qu'il n'y ait pas d'API explicite pour définir un job par software, un job n'est en fin de compte qu'un fichier texte placé sur le système de fichiers du Yocto-RS485. Pour configurer Yocto-RS485 par software, il suffi donc d'uploader le bon fichier sur le Yocto-RS485 à l'aide de la classe YFiles et de programmer son exécution à l'aide des fonctions selectJob() ou set_startupJob() de la classe YSerialPort. Le moyen le plus simple de créer un fichier job sans risque de faire d'erreur consiste à utiliser le VirtualHub pour configurer le job voulu sur un module Yocto-RS485, et ensuite à downloader le fichier correspondant.

6.2. Les tâches

Chaque tâche est une simple liste de commandes à exécuter séquentiellement: envoyer des données sur le port série, attendre, lire des données, etc. Il existe essentiellement deux types de tâches : les tâches réactives et les tâches périodiques.

Les tâches réactives

Une tâche réactives est déclenchée à l'initiative de l'appareil connecté au Yocto-RS485: la tâche est lancée automatiquement dès que des données correspondant à un pattern prédéfini apparaissent sur le port. Le plus souvent, la tâche consiste simplement à interpréter ces données et à les affecter à une ou plusieurs des fonctions genericSensor disponibles sur le Yocto-RS485. Les tâches réactives sont particulièrement utiles pour interfacer les appareils qui envoient un flot continu de mesures sur leur port série. Si le module détecte des données dont le pattern correspond à deux tâches différentes, ces deux tâches seront exécutées en parallèle.

Le VirtualHub permet de créer facilement un certain nombre de tâches réactives types telles que:

Mais il permet aussi de définir des tâches personnalisées en entrant directement les commandes constituant la tâche en question.


Interface de définition des tâches réactives

Les données lues peuvent être affectées à n'importe laquelle des fonctions genericSensor du Yocto-RS485. Du point de vue du développeur, l'appareil connecté au Yocto-RS485 via son port série apparaît comme un capteur Yoctopuce usuel. Toutes les fonctionnalités habituelles des capteurs Yoctopuce (callbacks, datalogger, moyennage etc.) sont alors disponibles sans effort supplémentaire.

Attention, le protocole série défini dans la configuration du Yocto-RS485 doit correspondre aux besoins du job: par exemple, vous ne pourrez pas détecter une transaction MODBUS si le Yocto-RS485 est configuré en mode line-based ASCII.

Les tâches périodiques

Une tâche périodique est une tâche qui est exécutée à intervalle régulier, à l'initiative du Yocto-RS485. Elles sont généralement utilisées pour envoyer des ordres à l'appareil connecté au Yocto-RS485. Ici encore, le VirtualHub permet de définir simplement un certain nombre de tâches usuelles:

Il est aussi possible de définir une tâche manuellement, commande par commande, ou de commencer par utiliser une tâche prédéfinie ci-dessus, puis de l'éditer ultérieurement pour ajouter des commandes.

Les données lues lors d'une tâche périodique peuvent aussi être affectées aux fonctions genericSensor du Yocto-RS485. Attention, le protocole série défini dans la configuration du Yocto-RS485 doit correspondre aux besoins du job: par exemple, vous ne pourrez pas détecter une transaction MODBUS si le Yocto-RS485 est configuré en mode line-based ASCII.


Interface de définition des tâches périodiques

Bien que les tâches périodiques soient conçues pour être exécutées à intervalle régulier, il est possible de définir une tâche "périodique" qui ne sera exécutée qu'une seule fois. L'exécution des taches périodiques se faisant dans l'ordre de leur définition, il est ainsi de possible définir un job contenant une première tâche, non répétitive, servant à configurer l'instrument et une seconde, répétitive, servant à l'interroger en boucle.

Il est possible de mixer tâches périodiques et tâches réactives dans un même job, mais il conviendra d'être particulièrement attentif à leurs conditions de déclenchement afin d'éviter qu'elles ne se perturbent les unes les autres. Le Yocto-RS485 attend toujours qu'une tâche périodique se termine avant de lancer la suivante, mais par contre les tâches réactives peuvent être déclenchées à tout moment, même parallèlement à une tâche périodique.

6.3. Les commandes

Les commandes qui peuvent être utilisées dans une tâche (périodique ou réactive) des modules Yoctopuce gérant une transmission série sont les suivantes:

EXPECT

La commande expect attend que des données correspondant à un certain pattern apparaissent sur la ligne série. Si le module est configuré en mode binaire, la correspondance se fera sur une représentation hexadécimale des données binaires.

La commande expect prend en argument une chaîne de caractères. Certaines expressions régulières sont supportées:

Des expressions spéciales permettent d'effectuer des décodages et d'affecter la valeur lue à l'un des genericSensor du module:

La représentation des nombres flottants étant limitée à 3 décimales dans les modules Yoctopuce, il est possible de convertir l'ordre de grandeur des nombres flottants lus par les expressions FLOAT, FLOAT16 et FLOAT32 en les préfixant d'un M pour retourner des millièmes, un U pour les millionièmes (U comme micro) et d'un N pour les milliardièmes (N comme nano). Ainsi, si l'on reconnait la valeur 1.3e-6 avec l'expression ($1:UFLOAT), la valeur affectée au genericSensor1 sera 1.3.

COMPUTE

La commande compute permet de faire des calcul intermédiaires. Par exemple le code suivant reconnaît un entier et le place dans une variable $t, puis utilise compute avec cette variable pour faire une conversion °C/°F et place le résultat dans le GenericSensor n°1.

expect ($t:WORD) compute $1 = 32 + ($t * 9) / 5

Vous pouvez utiliser des expression arithmétiques assez sophistiquées. Tous les opérateurs mathématiques usuels sont disponibles, avec l'ordre de précédence suivant:

**met à la puissance
~ + - notcomplément, plus/moins unaire, non logique
* / % //multiplie, divise, modulo et division entière
+ -ajoute, soustrait
>> <<décalage de bits à droite et à gauche
&ET bit-par-bit
| ^OU, XOR bit-par-bit
< <= >= >compare
== <> !=test d'égalité ou de différence
andET logique
orOU logique

Si vous le préférez, les symbols alternatifs suivants peuvent être utilisés:

div modpeuvent remplacer / et %
! && ||peuvent remplacer not, and, or

Les opérateurs de comparaison et les opérateurs logiques sont destinés à être utilisés avec l'opérateur d'évaluation conditionnelle:


compute "($temp &gt; 0 ? log($temp) : -9999)"

Les constantes et fonctions mathématiques classiques sont disponibles aussi:

pi eles constantes universelles
cos sin tanfonctions trigonométriques
acos asin atan atan2fonctions trigonométriques inverses
cosh sinh tanhfonctions hyperboliques
exp log log10 pow sqr sqrtpuissance et fonctions logarithmiques
ceil floor round frac fmodfonctions d'arrondi
fabs min max isnan isinffonctions de numération

Les calculs sont effectués avec des nombres à virgule flottante encodés sur 32 bits. Les opérations bit à bit (| & >> etc.) sont effectuées sur des entiers 32 bits.

ASSERT

La commande assert permet de vérifier si une condition est remplie avant de continuer l'exécution de la tâche. Elle accepte une expression arithmétique en argument, et stoppe l'exécution de la tâche si le résultat de l'expression est FAUX.

Comme pour la commande compute, si l'expression contient une erreur de syntaxe ou fait référence à une variable non définie, la tâche sera aussi arrêtée, avec un message d'erreurs dans les logs du module. Par contre, il est possible de vérifier si une variable a été définie sans générer de message d'erreur en utilisant la fonction spéciale isset(). assert !isset($init_done) writeline :RESET compute $init_done = 1

WAIT

La commande wait permet d'attendre un certain nombre de millisecondes avant de passer à la commande suivante.

LOG

La commande log permet d'afficher une chaîne de caractères dans les log du Yocto-RS485.

WRITE

La commande write permet d'envoyer une chaîne de caractères telle-quelle sur la ligne série. La chaîne est envoyée sans retour de chariot additionnel.

WRITELINE

La commande writeLine permet d'envoyer une chaîne de caractères sur la ligne série, suivie d'un saut de ligne (CR-LF).

WRITEHEX

La commande writeHex permet d'envoyer un message binaire sur la ligne série. Le paramètre est la représentation hexadécimale du message à envoyer (minuscules et majuscules sont supportées).

WRITEMODBUS

La commande writeModbus permet d'envoyer une commande MODBUS. Le paramètre est une représentation hexadécimale de la commande à envoyer, sans le checksum. Par exemple:

SETRTS

La commande setRTS, disponible uniquement sur le Yocto-Serial et le Yocto-RS232 et lorsque le contrôle de flux matériel est désactivé, permet de piloter manuellement l'état de la ligne de sortie RTS depuis une tâche.

SETSS

La commande setSS, disponible uniquement sur le Yocto-SPI lorsque le contrôle automatique des trames est désactivé, permet de piloter manuellement l'état de la ligne de sortie SS depuis une tâche.

SETPOWER

La commande setPower, disponible uniquement sur le Yocto-Serial et le Yocto-SPI, permet de commander automatiquement l'état de la sortie d'alimentation du module via une tâche, par exemple pour mettre en/hors tension un capteur externe.

Si, pour une raison ou une autre, une commande génère une erreur, vous trouverez une trace de cette erreur dans les logs du Yocto-RS485.

6.4. Les fonctions genericSensor

Le Yocto-RS485 dispose de 9 fonctions genericSensor, dont les valeurs peuvent être librement attribuées par les jobs qui s'exécutent sur le module. Ces fonctions genericSensor peuvent être directement accédées depuis l'API Yoctopuce à l'aide de la classe YGenericSensor. Elles peuvent aussi être configurées afin d'ajuster leur comportement à la nature des valeurs reportées.


Fenêtre de configuration d'un genericSensor.

Unité

Il est possible de définir dans quel système de mesure est spécifié le valeur stockée par le genericSensor.

Précision

Il est possible de définir avec quel précision doit être représenté la valeur reportée par le genericSensor.

Mapping

Il est possible d'appliquer automatiquement une transformation linéaire aux valeurs stockées dans un genericSensor. En effet certains appareils ne fournissent pas directement une grandeur physique sur leur sortie série. Imaginons un voltmètre qui transmettrait des valeurs entre 0 et 65535 pour des mesures entre 0 et 10V. Il est possible de demander à la fonction genericSensor de faire automatiquement la conversion inverse comme illustré ci-dessous.


Exemple de conversion linéaire.

Ce mécanisme peut aussi s'avérer très utile pour faire des conversions automatique, par exemple transformer des pieds en mètres.

6.5. Exemple de configuration

Voici un exemple de job pour interfacer un capteur du commerce.

Schneider Electric Zelio REG48 Temperature Controller

La famille de contrôleurs de température REG48 est dotée d'une interface MODBUS. Il est possible de lire la température mesurée dans le registre d'entrée correspondant, spécifié dans le manuel de programmation du contrôleur (chapitre "Data Address Map"). Dans le cas particulier, il s'agit du registre 41001.

Étape 1

Configurer le Yocto-RS485 en "MODBUS-RTU", avec la vitesse et la parité correspondant à la configuration de votre contrôleur REG48.

Étape 2

Créer un job contenant une seule tâche périodique, qui effectue une lecture du registre MODBUS d'entrée 41001.


Exemple de tâche pour lire la température sur un contrôleur MODBUS REG48

Étape 3

Configurer la fonction genericSensor1 avec unité='C et résolution=0.1. La valeur lue dans le registre est exprimée en dixièmes de degrés, il faut donc configurer le mapping pour effectuer une division par 10.


Configuration de la fonction genericSensor pour afficher la température mesurée par le REG48.

Étape 4

Lancer le job et vérifier qu'il fonctionne en faisant apparaître les fonctions de chaque module dans la page principale du VirtualHub. Si résultat ne correspond pas à ce qui était prévu, consulter les log du module.

7. Programmation, concepts généraux

L'API Yoctopuce a été pensée pour être à la fois simple à utiliser, et suffisamment générique pour que les concepts utilisés soient valables pour tous les modules de la gamme Yoctopuce et ce dans tous les langages de programmation disponibles. Ainsi, une fois que vous aurez compris comment piloter votre Yocto-RS485 dans votre langage de programmation favori, il est très probable qu'apprendre à utiliser un autre module, même dans un autre langage, ne vous prendra qu'un minimum de temps.

7.1. Paradigme de programmation

L'API Yoctopuce est une API orientée objet. Mais dans un souci de simplicité, seules les bases de la programmation objet ont été utilisées. Même si la programmation objet ne vous est pas familière, il est peu probable que cela vous soit un obstacle à l'utilisation des produits Yoctopuce. Notez que vous n'aurez jamais à allouer ou désallouer un objet lié à l'API Yoctopuce: cela est géré automatiquement.

Il existe une classe par type de fonctionnalité Yoctopuce. Le nom de ces classes commence toujours par un Y suivi du nom de la fonctionnalité, par exemple YTemperature, YRelay, YPressure, etc.. Il existe aussi une classe YModule, dédiée à la gestion des modules en temps que tels, et enfin il existe la classe statique YAPI, qui supervise le fonctionnement global de l'API et gère les communications à bas niveau.


Structure de l'API Yoctopuce.

La classe YSensor

A chaque fonctionnalité d'un module Yoctopuce, correspond une classe: YTemperature pour mesurer la température, YVoltage pour mesurer une tension, YRelay pour contrôler un relais, etc. Il existe cependant une classe spéciale qui peut faire plus: YSensor.

Cette classe YSensor est la classe parente de tous les senseurs Yoctopuce, elle permet de contrôler n'importe quel senseur, quel que soit son type, en donnant accès au fonctions communes à tous les senseurs. Cette classe permet de simplifier la programmation d'applications qui utilisent beaucoup de senseurs différents. Mieux encore, si vous programmez une application basée sur la classe YSensor elle sera compatible avec tous les senseurs Yoctopuce, y compris ceux qui n'existent pas encore.

Programmation

Dans l'API Yoctopuce, la priorité a été mise sur la facilité d'accès aux fonctionnalités des modules en offrant la possibilité de faire abstraction des modules qui les implémentent. Ainsi, il est parfaitement possible de travailler avec un ensemble de fonctionnalités sans jamais savoir exactement quel module les héberge au niveau matériel. Cela permet de considérablement simplifier la programmation de projets comprenant un nombre important de modules.

Du point de vue programmation, votre Yocto-RS485 se présente sous la forme d'un module hébergeant un certain nombre de fonctionnalités. Dans l'API , ces fonctionnalités se présentent sous la forme d'objets qui peuvent être retrouvés de manière indépendante, et ce de plusieurs manières.

Accès aux fonctionnalités d'un module

Accès par nom logique

Chacune des fonctionnalités peut se voir assigner un nom logique arbitraire et persistant: il restera stocké dans la mémoire flash du module, même si ce dernier est débranché. Un objet correspondant à une fonctionnalité Xxx munie d'un nom logique pourra ensuite être retrouvée directement à l'aide de ce nom logique et de la méthode YXxx.FindXxx. Notez cependant qu'un nom logique doit être unique parmi tous les modules connectés.

Accès par énumération

Vous pouvez énumérer toutes les fonctionnalités d'un même type sur l'ensemble des modules connectés à l'aide des fonctions classiques d'énumération FirstXxx et nextXxxx disponibles dans chacune des classes YXxx.

Accès par nom hardware

Chaque fonctionnalité d'un module dispose d'un nom hardware, assigné en usine qui ne peut être modifié. Les fonctionnalités d'un module peuvent aussi être retrouvées directement à l'aide de ce nom hardware et de la fonction YXxx.FindXxx de la classe correspondante.

Différence entre Find et First

Les méthodes YXxx.FindXxxx et YXxx.FirstXxxx ne fonctionnent pas exactement de la même manière. Si aucun module n'est disponible YXxx.FirstXxxx renvoie une valeur nulle. En revanche, même si aucun module ne correspond, YXxx.FindXxxx renverra objet valide, qui ne sera pas "online" mais qui pourra le devenir, si le module correspondant est connecté plus tard.

Manipulation des fonctionnalités

Une fois l'objet correspondant à une fonctionnalité retrouvé, ses méthodes sont disponibles de manière tout à fait classique. Notez que la plupart de ces sous-fonctions nécessitent que le module hébergeant la fonctionnalité soit branché pour pouvoir être manipulées. Ce qui n'est en général jamais garanti, puisqu'un module USB peut être débranché après le démarrage du programme de contrôle. La méthode isOnline(), disponible dans chaque classe, vous sera alors d'un grand secours.

Accès aux modules

Bien qu'il soit parfaitement possible de construire un projet en faisant abstraction de la répartition des fonctionnalités sur les différents modules, ces derniers peuvent être facilement retrouvés à l'aide de l'API. En fait, ils se manipulent d'une manière assez semblable aux fonctionnalités. Ils disposent d'un numéro de série affecté en usine qui permet de retrouver l'objet correspondant à l'aide de YModule.Find(). Les modules peuvent aussi se voir affecter un nom logique arbitraire qui permettra de les retrouver ensuite plus facilement. Et enfin la classe YModule comprend les méthodes d'énumération YModule.FirstModule() et nextModule() qui permettent de dresser la liste des modules connectés.

Interaction Function / Module

Du point de vue de l'API, les modules et leurs fonctionnalités sont donc fortement décorrélés à dessein. Mais l'API offre néanmoins la possibilité de passer de l'un à l'autre. Ainsi la méthode get_module(), disponible dans chaque classe de fonctionnalité, permet de retrouver l'objet correspondant au module hébergeant cette fonctionnalité. Inversement, la classe YModule dispose d'un certain nombre de méthodes permettant d'énumérer les fonctionnalités disponibles sur un module.

7.2. Le module Yocto-RS485

Le module Yocto-RS485 est une interface RS485 isolée, avec datalogger intégré.

module : Module

attributtypemodifiable ?
productName  Texte  lecture seule
serialNumber  Texte  lecture seule
logicalName  Texte  lecture seule
productId  Entier (hexadécimal)  lecture seule
productRelease  Entier (hexadécimal)  lecture seule
firmwareRelease  Texte  lecture seule
persistentSettings  Type énuméré  lecture seule
luminosity  0..100%  lecture seule
beacon  On/Off  lecture seule
upTime  Temps  lecture seule
usbCurrent  Courant consommé (en mA)  lecture seule
rebootCountdown  Nombre entier  lecture seule
userVar  Nombre entier  lecture seule

serialPort : SerialPort
attributtypemodifiable ?
logicalName  Texte  lecture seule
advertisedValue  Texte  lecture seule
rxCount  Nombre entier  lecture seule
txCount  Nombre entier  lecture seule
errCount  Nombre entier  lecture seule
rxMsgCount  Nombre entier  lecture seule
txMsgCount  Nombre entier  lecture seule
lastMsg  Texte  lecture seule
currentJob  Texte  lecture seule
startupJob  Texte  lecture seule
jobMaxTask  Nombre entier  lecture seule
jobMaxSize  Nombre entier  lecture seule
command  Texte  lecture seule
protocol  Type de protocole de communication  lecture seule
voltageLevel  Type énuméré  lecture seule
serialMode  Paramètres de transmission série  lecture seule

genericSensor1 : GenericSensor
genericSensor2 : GenericSensor
genericSensor3 : GenericSensor
genericSensor4 : GenericSensor
genericSensor5 : GenericSensor
genericSensor6 : GenericSensor
genericSensor7 : GenericSensor
genericSensor8 : GenericSensor
genericSensor9 : GenericSensor
attributtypemodifiable ?
logicalName  Texte  lecture seule
advertisedValue  Texte  lecture seule
unit  Texte  lecture seule
currentValue  Nombre (virgule fixe)  lecture seule
lowestValue  Nombre (virgule fixe)  lecture seule
highestValue  Nombre (virgule fixe)  lecture seule
currentRawValue  Nombre (virgule fixe)  lecture seule
logFrequency  Fréquence  lecture seule
reportFrequency  Fréquence  lecture seule
advMode  Type énuméré  lecture seule
calibrationParam  Paramètrs de calibration  lecture seule
resolution  Nombre (virgule fixe)  lecture seule
sensorState  Nombre entier  lecture seule
signalValue  Nombre (virgule fixe)  lecture seule
signalUnit  Texte  lecture seule
signalRange  Plage de valeurs  lecture seule
valueRange  Plage de valeurs  lecture seule
signalBias  Nombre (virgule fixe)  lecture seule
signalSampling  Type énuméré  lecture seule
enabled  Booléen  lecture seule

dataLogger : DataLogger
attributtypemodifiable ?
logicalName  Texte  lecture seule
advertisedValue  Texte  lecture seule
currentRunIndex  Nombre entier  lecture seule
timeUTC  Heure UTC  lecture seule
recording  Type énuméré  lecture seule
autoStart  On/Off  lecture seule
beaconDriven  On/Off  lecture seule
usage  0..100%  lecture seule
clearHistory  Booléen  lecture seule

files : Files
attributtypemodifiable ?
logicalName  Texte  lecture seule
advertisedValue  Texte  lecture seule
filesCount  Nombre entier  lecture seule
freeSpace  Nombre entier  lecture seule

7.3. Module

Interface de contrôle des paramètres généraux des modules Yoctopuce

La classe YModule est utilisable avec tous les modules USB de Yoctopuce. Elle permet de contrôler les paramètres généraux du module, et d'énumérer les fonctions fournies par chaque module.

productName

Chaîne de caractères contenant le nom commercial du module, préprogrammé en usine.

serialNumber

Chaine de caractères contenant le numéro de série, unique et préprogrammé en usine. Pour un module Yocto-RS485, ce numéro de série commence toujours par RS485MK1. Il peut servir comme point de départ pour accéder par programmation à un module particulier.

logicalName

Chaine de caractères contenant le nom logique du module, initialement vide. Cet attribut peut être changé au bon vouloir de l'utilisateur. Une fois initialisé à une valeur non vide, il peut servir de point de départ pour accéder à un module particulier. Si deux modules avec le même nom logique se trouvent sur le même montage, il n'y a pas moyen de déterminer lequel va répondre si l'on tente un accès par ce nom logique. Le nom logique du module est limité à 19 caractères parmi A..Z,a..z,0..9,_ et -.

productId

Identifiant USB du module, préprogrammé à la valeur 72 en usine.

productRelease

Numéro de révision du module hardware, préprogrammé en usine. La révision originale du retourne la valeur 1, la révision B retourne la valeur 2, etc.

firmwareRelease

Version du logiciel embarqué du module, elle change à chaque fois que le logiciel embarqué est mis à jour.

persistentSettings

Etat des réglages persistants du module: chargés depuis la mémoire non-volatile, modifiés par l'utilisateur ou sauvegardés dans la mémoire non volatile.

luminosity

Intensité lumineuse maximale des leds informatives (comme la Yocto-Led) présentes sur le module. C'est une valeur entière variant entre 0 (leds éteintes) et 100 (leds à l'intensité maximum). La valeur par défaut est 50. Pour changer l'intensité maximale des leds de signalisation du module, ou les éteindre complètement, il suffit donc de modifier cette valeur.

beacon

Etat de la balise de localisation du module.

upTime

Temps écoulé depuis la dernière mise sous tension du module.

usbCurrent

Courant consommé par le module sur le bus USB, en milli-ampères.

rebootCountdown

Compte à rebours pour déclencher un redémarrage spontané du module.

userVar

Attribut de type entier 32 bits à disposition de l'utilisateur.

7.4. SerialPort

Interface pour intéragir avec les ports série, disponibles par exemple dans le Yocto-RS232, le Yocto-RS485-V2 et le Yocto-Serial

La classe YSerialPort permet de piloter entièrement un module d'interface série Yoctopuce. Elle permet d'envoyer et de recevoir des données, et de configurer les paramètres de transmission (vitesse, nombre de bits, parité, contrôle de flux et protocole). Notez que les interfaces série Yoctopuce ne sont pas visibles comme des ports COM virtuels. Ils sont faits pour être utilisés comme tous les autres modules Yoctopuce.

logicalName

Chaîne de caractères contenant le nom logique du port série, initialement vide. Cet attribut peut être changé au bon vouloir de l'utilisateur. Un fois initialisé à une valeur non vide, il peut servir de point de départ pour accéder à directement au port série. Si deux ports série portent le même nom logique dans un projet, il n'y a pas moyen de déterminer lequel va répondre si l'on tente un accès par ce nom logique. Le nom logique du module est limité à 19 caractères parmi A..Z,a..z,0..9,_ et -.

advertisedValue

Courte chaîne de caractères résumant l'état actuel du port série, et qui sera publiée automatiquement jusqu'au hub parent. Pour un port série, la valeur publiée est une chaîne hexadécimale qui change à chaque caractère reçu. Elle est composée des 16 bits inférieur du compte de caractères reçus, et du code ASCII du dernier caractère reçu.

rxCount

Nombre d'octets reçus depuis la dernière mise à zéro.

txCount

Nombre d'octets transmis depuis la dernière mise à zéro.

errCount

Nombre d'erreurs de communication détectées depuis la dernière mise à zéro.

rxMsgCount

Nombre de messages reçus depuis la dernière mise à zéro.

txMsgCount

Nombre de messages transmis depuis la dernière mise à zéro.

lastMsg

Dernier message reçu (pour les protocoles de type Line, Frame et Modbus).

currentJob

Nom du fichier de tâches actif.

startupJob

Nom du fichier de tâches à exécuter au démarrage du module.

jobMaxTask

Nombre maximal de tâches dans un job supporté par le module.

jobMaxSize

Taille maximale d'un fichier job.

command

Attribut magique permettant d'envoyer des commandes au port série. Si une commande n'est pas interprétée comme attendue, consultez les logs du module.

protocol

Type de protocole utilisé sur la communication série.

voltageLevel

Niveau de voltage utilisé sur la ligne série.

serialMode

Taux de transfert, nombre de bits, parité et bits d'arrêt.

7.5. GenericSensor

Interface pour intéragir avec les capteurs de type GenericSensor, disponibles par exemple dans le Yocto-0-10V-Rx, le Yocto-4-20mA-Rx, le Yocto-RS485-V2 et le Yocto-milliVolt-Rx

La classe YGenericSensor permet de lire et de configurer les transducteurs de signaux Yoctopuce. Elle hérite de la classe YSensor toutes les fonctions de base des capteurs Yoctopuce: lecture de mesures, callbacks, enregistreur de données. De plus, elle permet de configurer une conversion automatique entre le signal mesuré et la grandeur physique représentée.

logicalName

Chaîne de caractères contenant le nom logique du capteur générique, initialement vide. Cet attribut peut être changé au bon vouloir de l'utilisateur. Un fois initialisé à une valeur non vide, il peut servir de point de départ pour accéder à directement au capteur générique. Si deux capteurs génériques portent le même nom logique dans un projet, il n'y a pas moyen de déterminer lequel va répondre si l'on tente un accès par ce nom logique. Le nom logique du module est limité à 19 caractères parmi A..Z,a..z,0..9,_ et -.

advertisedValue

Courte chaîne de caractères résumant l'état actuel du capteur générique, et qui sera publiée automatiquement jusqu'au hub parent. Pour un capteur générique, la valeur publiée est la valeur courante de la measure.

unit

Courte chaîne de catactères représentant l'unité dans laquelle la valeur mesurée est exprimée.

currentValue

Valeur actuelle de la measure, en l'unité spécifiée, sous forme de nombre à virgule.

lowestValue

Valeur minimale de la measure, en l'unité spécifiée, sous forme de nombre à virgule.

highestValue

Valeur maximale de la measure, en l'unité spécifiée, sous forme de nombre à virgule.

currentRawValue

Valeur brute mesurée par le capteur (sans arrondi ni calibration), sous forme de nombre à virgule.

logFrequency

Fréquence d'enregistrement des mesures dans le datalogger, ou "OFF" si les mesures ne doivent pas être stockées dans la mémoire de l'enregistreur de données.

reportFrequency

Fréquence de notification périodique des valeurs mesurées, ou "OFF" si les notifications périodiques de valeurs sont désactivées.

advMode

Mode de calcul de la valeur publiée jusqu'au hub parent (advertisedValue).

calibrationParam

Paramètres de calibration supplémentaires (par exemple pour compenser l'effet d'un boîtier), sous forme de tableau d'entiers 16 bit.

resolution

Résolution de la mesure (précision de la représentation, mais pas forcément de la mesure elle-même).

sensorState

Etat du capteur (zero lorsque qu'une mesure actuelle est disponible).

signalValue

Valeur actuelle du signal électrique mesuré par le capteur, sous forme de nombre à virgule.

signalUnit

Courte chaîne de catactères représentant l'unité du signal électrique utilisé par le capteur.

signalRange

Plage de valeurs électriques utilisées par le capteur.

valueRange

Plage de valeurs physiques mesurées par le capteur, utilisée pour la conversion du signal.

signalBias

Biais du signal électrique pour la correction du point zéro.

signalSampling

Méthode d'échantillonnage du signal à utiliser.

enabled

Activation/désactivation de la mesure.

7.6. DataLogger

Interface de contrôle de l'enregistreur de données, présent sur la plupart des capteurs Yoctopuce.

La plupart des capteurs Yoctopuce sont équipés d'une mémoire non-volatile. Elle permet de mémoriser les données mesurées d'une manière autonome, sans nécessiter le suivi permanent d'un ordinateur. La classe YDataLogger contrôle les paramètres globaux de cet enregistreur de données. Le contrôle de l'enregistrement (start / stop) et la récupération des données se fait au niveau des objets qui gèrent les senseurs.

logicalName

Chaîne de caractères contenant le nom logique de l'enregistreur de données, initialement vide. Cet attribut peut être changé au bon vouloir de l'utilisateur. Un fois initialisé à une valeur non vide, il peut servir de point de départ pour accéder à directement à l'enregistreur de données. Si deux enregistreurs de données portent le même nom logique dans un projet, il n'y a pas moyen de déterminer lequel va répondre si l'on tente un accès par ce nom logique. Le nom logique du module est limité à 19 caractères parmi A..Z,a..z,0..9,_ et -.

advertisedValue

Courte chaîne de caractères résumant l'état actuel de l'enregistreur de données, et qui sera publiée automatiquement jusqu'au hub parent. Pour un enregistreur de données, la valeur publiée est son état d'activation (ON ou OFF).

currentRunIndex

Numéro du Run actuel, correspondant au nombre de fois que le module a été mis sous tension avec la fonction d'enregistreur de données active.

timeUTC

Heure UTC courante, lorsque l'on désire associer une référence temporelle absolue aux données enregistrées. Cette heure doit être configurée explicitement par logiciel.

recording

Etat d'activité de l'enregistreur de données. L'enregistreur peut être activé ou désactivé à volonté par cet attribut, mais son état à la mise sous tension est déterminé par l'attribut persistent autoStart. Lorsque l'enregistreur est enclenché mais qu'il n'est pas encore prêt pour enregistrer, son état est PENDING.

autoStart

Activation automatique de l'enregistreur de données à la mise sous tension. Cet attribut permet d'activer systématiquement l'enregistreur à la mise sous tension, sans devoir l'activer par une commande logicielle. Attention si le module n'a pas de source de temps à sa disposition, il va attendre environ 8 sec avant de démarrer automatiquement l'enregistrement

beaconDriven

Permet de synchroniser l’état de la balise de localisation avec l’état de l'enregistreur de données. Quand cet attribut est activé il est possible de démarrer et arrêter l'enregistrement en utilisant le Yocto-bouton du module ou l’attribut beacon de la fonction YModule. De la même manière si l'attribut recording de la fonction datalogger est modifié, l’état de la balise de localisation est mis à jour. Note: quand cet attribut est activé balise de localisation du module clignote deux fois plus lentement.

usage

Pourcentage d'utilisation de la mémoire d'enregistrement.

clearHistory

Attribut qui peut être mis à vrai pour effacer l'historique des mesures.

7.7. Files

Interface pour intéragir avec les systèmes de fichier, disponibles par exemple dans le Yocto-Buzzer, le Yocto-Color-V2, le Yocto-RS485-V2 et le YoctoHub-Ethernet

La class YFiles permet d'accéder au système de fichier embarqué sur certains modules Yoctopuce. Le stockage de fichiers permet par exemple de personnaliser un service web (dans le cas d'un module connecté au réseau) ou pour d'ajouter un police de caractères (dans le cas d'un module d'affichage).

logicalName

Chaîne de caractères contenant le nom logique du système de fichier, initialement vide. Cet attribut peut être changé au bon vouloir de l'utilisateur. Un fois initialisé à une valeur non vide, il peut servir de point de départ pour accéder à directement au système de fichier. Si deux systèmes de fichier portent le même nom logique dans un projet, il n'y a pas moyen de déterminer lequel va répondre si l'on tente un accès par ce nom logique. Le nom logique du module est limité à 19 caractères parmi A..Z,a..z,0..9,_ et -.

advertisedValue

Courte chaîne de caractères résumant l'état actuel du système de fichier, et qui sera publiée automatiquement jusqu'au hub parent. Pour un système de fichier, la valeur publiée est le nombre de fichiers présents.

filesCount

Nombre de fichiers présents dans le système de fichier.

freeSpace

Espace disponible dans le système de fichiers pour charger des nouveaux fichiers, en octets.

7.8. Quelle interface: Native, DLL ou Service?

Il y existe plusieurs méthodes pour contrôler un module USB Yoctopuce depuis un programme.

Contrôle natif

Dans ce cas de figure le programme pilotant votre projet est directement compilé avec une librairie qui offre le contrôle des modules. C'est objectivement la solution la plus simple et la plus élégante pour l'utilisateur final. Il lui suffira de brancher le câble USB et de lancer votre programme pour que tout fonctionne. Malheureusement, cette technique n'est pas toujours disponible ou même possible.


L'application utilise la librairie native pour contrôler le module connecté en local

Contrôle natif par DLL

Ici l'essentiel du code permettant de contrôler les modules se trouve dans une DLL, et le programme est compilé avec une petite librairie permettant de contrôler cette DLL. C'est la manière la plus rapide pour coder le support des modules dans un language particulier. En effet la partie "utile" du code de contrôle se trouve dans la DLL qui est la même pour tous les langages, offrir le support pour un nouveau langage se limite à coder la petite librairie qui contrôle la DLL. Du point de de l'utilisateur final, il y a peu de différence: il faut simplement être sur que la DLL sera installée sur son ordinateur en même temps que le programme principal.


L'application utilise la DLL pour contrôler nativement le module connecté en local

Contrôle par un service

Certain langages ne permettent tout simplement pas d'accéder facilement au niveau matériel de la machine. C'est le cas de Javascript par exemple. Pour gérer ce cas Yoctopuce offre la solution sous la forme d'un petit service, appelé VirtualHub qui lui est capable d'accéder aux modules, et votre application n'a plus qu'à utiliser une librairie qui offrira toutes les fonctions nécessaires au contrôle des modules en passant par l'intermédiaire de ce VirtualHub. L'utilisateur final se verra obligé de lancer le VirtualHub avant de lancer le programme de contrôle du projet proprement dit, à moins qu'il ne décide d'installer le VirtualHub sous la forme d'un service/démon, auquel cas le VirtualHub se lancera automatiquement au démarrage de la machine..


L'application se connecte au service VirtualHub pour connecter le module.

En revanche la méthode de contrôle par un service offre un avantage non négligeable: l'application n'est pas n'obligé de tourner sur la machine où se trouvent les modules: elle peut parfaitement se trouver sur un autre machine qui se connectera au service pour piloter les module. De plus les librairie natives et DLL évoquées plus haut sont aussi capables de se connecter à distance à un ou plusieurs VirtualHub.


Lorsqu'on utilise un VirtualHub, l'application de contrôle n'a plus besoin d'être sur la même machine que le module.

Quel que soit langage de programmation choisi et le paradigme de contrôle utilisé; la programmation reste strictement identique. D'un langage à l'autre les fonctions ont exactement le même nom, prennent les mêmes paramètres. Les seules différences sont liées aux contraintes des langages eux-mêmes.

Language Natif  Natif avec .DLL/.so  VirtualHub 
C++
Objective-C -
Delphi -
Python -
VisualBasic .Net -
C# .Net -
C# UWP -
EcmaScript / JavaScript - -
PHP - -
Java -
Java pour Android -
Ligne de commande -
LabVIEW -

Méthode de support pour les différents langages.

Limitation des librairies Yoctopuce

Les librairies Natives et DLL ont une limitation technique. Sur une même machine, vous ne pouvez pas faire tourner en même temps plusieurs applications qui accèdent nativement aux modules Yoctopuce. Si vous désirez contrôler plusieurs projets depuis la même machine, codez vos applications pour qu'elle accèdent aux modules via un VirtualHub plutôt que nativement. Le changement de mode de fonctionnement est trivial: il suffit de changer un paramètre dans l'appel à yRegisterHub().

7.9. Programmation, par où commencer?

Arrivé à ce point du manuel, vous devriez connaître l'essentiel de la théorie à propos de votre Yocto-RS485. Il est temps de passer à la pratique. Il vous faut télécharger la librairie Yoctopuce pour votre language de programmation favori depuis le site web de Yoctopuce15. Puis sautez directement au chapitre correspondant au langage de programmation que vous avez choisi.

Tous les exemples décrits dans ce manuel sont présents dans les librairies de programmation. Dans certains langages, les librairies comprennent aussi quelques applications graphiques complètes avec leur code source.

Une fois que vous maîtriserez la programmation de base de votre module, vous pourrez vous intéresser au chapitre concernant la programmation avancée qui décrit certaines techniques qui vous permettront d'exploiter au mieux votre Yocto-RS485.

8. Utilisation du Yocto-RS485 en ligne de commande

Lorsque vous désirez effectuer une opération ponctuelle sur votre Yocto-RS485, comme la lecture d'une valeur, le changement d'un nom logique, etc.. vous pouvez bien sur utiliser le Virtual Hub, mais il existe une méthode encore plus simple, rapide et efficace: l'API en ligne de commande.

L'API en ligne de commande se présente sous la forme d'un ensemble d'exécutables, un par type de fonctionnalité offerte par l'ensemble des produits Yoctopuce. Ces exécutables sont fournis pré-compilés pour toutes les plateformes/OS officiellement supportés par Yoctopuce. Bien entendu, les sources de ces exécutables sont aussi fournies16.

8.1. Installation

Téléchargez l'API en ligne de commande17. Il n'y a pas de programme d'installation à lancer, copiez simplement les exécutables correspondant à votre plateforme/OS dans le répertoire de votre choix. Ajoutez éventuellement ce répertoire à votre variable environnement PATH pour avoir accès aux exécutables depuis n'importe où. C'est tout, il ne vous reste plus qu'à brancher votre Yocto-RS485, ouvrir un shell et commencer à travailler en tapant par exemple:

C:\>YSerialPort any modbusReadInputRegisters 2 1000 1

C:\>YSerialPort any modbusWriteBits 2 16 1
 

Sous Linux, pour utiliser l'API en ligne de commande, vous devez soit être root, soit définir une règle udev pour votre système. Vous trouverez plus de détails au chapitre Problèmes courants.

8.2. Utilisation: description générale

Tous les exécutables de l'API en ligne de commande fonctionnent sur le même principe: ils doivent être appelés de la manière suivante:


C:\>Executable [options] [cible] commande [paramètres]

Les [options] gèrent le fonctionnement global des commandes , elles permettent par exemple de piloter des modules à distance à travers le réseau, ou encore elles peuvent forcer les modules à sauver leur configuration après l'exécution de la commande.

La [cible] est le nom du module ou de la fonction auquel la commande va s'appliquer. Certaines commandes très génériques n'ont pas besoin de cible. Vous pouvez aussi utiliser les alias "any" ou "all", ou encore une liste de noms, séparés par des virgules, sans espace.

La commande est la commande que l'on souhaite exécuter. La quasi-totalité des fonctions disponibles dans les API de programmation classiques sont disponibles sous forme de commandes. Vous n'êtes pas obligé des respecter les minuscules/majuscules et les caractères soulignés dans le nom de la commande.

Les [paramètres] sont, assez logiquement, les paramètres dont la commande a besoin.

A tout moment les exécutables de l'API en ligne de commande sont capables de fournir une aide assez détaillée: Utilisez par exemple


C:\>executable /help

pour connaître la liste de commandes disponibles pour un exécutable particulier de l'API en ligne de commande, ou encore:


C:\>executable commande /help

Pour obtenir une description détaillée des paramètres d'une commande.

8.3. Contrôle de la fonction SerialPort

Pour contrôler la fonction SerialPort de votre Yocto-RS485, vous avez besoin de l'exécutable YSerialPort.

Vous pouvez par exemple lancer:

C:\>YSerialPort any modbusReadInputRegisters 2 1000 1

C:\>YSerialPort any modbusWriteBits 2 16 1
 

Cet exemple utilise la cible "any" pour signifier que l'on désire travailler sur la première fonction SerialPort trouvée parmi toutes celles disponibles sur les modules Yoctopuce accessibles au moment de l'exécution. Cela vous évite d'avoir à connaître le nom exact de votre fonction et celui de votre module.

Mais vous pouvez tout aussi bien utiliser des noms logiques que vous auriez préalablement configurés. Imaginons un module Yocto-RS485 avec le numéros de série RS485MK1-123456 que vous auriez appelé "MonModule" et dont vous auriez nommé la fonction serialPort "MaFonction", les cinq appels suivants seront strictement équivalents (pour autant que MaFonction ne soit définie qu'une fois, pour éviter toute ambiguïté).


C:\>YSerialPort RS485MK1-123456.serialPort describe

C:\>YSerialPort RS485MK1-123456.MaFonction describe

C:\>YSerialPort MonModule.serialPort describe

C:\>YSerialPort MonModule.MaFonction describe

C:\>YSerialPort MaFonction describe

Pour travailler sur toutes les fonctions SerialPort à la fois, utilisez la cible "all".


C:\>YSerialPort all describe

Pour plus de détails sur les possibilités de l'exécutableYSerialPort, utilisez:


C:\>YSerialPort /help

8.4. Contrôle de la partie module

Chaque module peut être contrôlé d'une manière similaire à l'aide de l'exécutable YModule. Par exemple, pour obtenir la liste de tous les modules connectés, utilisez:


C:\>YModule inventory

Vous pouvez aussi utiliser la commande suivante pour obtenir une liste encore plus détaillée des modules connectés:


C:\>YModule all describe

Chaque propriété xxx du module peut être obtenue grâce à une commande du type get_xxxx(), et les propriétés qui ne sont pas en lecture seule peuvent être modifiées à l'aide de la commande set_xxx(). Par exemple:


C:\>YModule RS485MK1-12346 set_logicalName MonPremierModule

C:\>YModule RS485MK1-12346 get_logicalName

Modifications des réglages du module

Lorsque que vous souhaitez modifier les réglages d'un module, il suffit d'utiliser la commande set_xxx correspondante, cependant cette modification n'a lieu que dans la mémoire vive du module: si le module redémarre, les modifications seront perdues. Pour qu'elle soient mémorisées de manière persistante, il est nécessaire de demander au module de sauvegarder sa configuration courante dans sa mémoire non volatile. Pour cela il faut utiliser la commande saveToFlash. Inversement il est possible de forcer le module à oublier ses réglages courants en utilisant la méthode revertFromFlash. Par exemple:


C:\>YModule RS485MK1-12346 set_logicalName MonPremierModule
C:\>YModule RS485MK1-12346 saveToFlash

Notez que vous pouvez faire la même chose en seule fois à l'aide de l'option -s


C:\>YModule -s  RS485MK1-12346 set_logicalName MonPremierModule

Attention, le nombre de cycles d'écriture de la mémoire non volatile du module est limité. Passé cette limite plus rien ne garantit que la sauvegarde des réglages se passera correctement. Cette limite, liée à la technologie employée par le micro-processeur du module se situe aux alentour de 100000 cycles. Pour résumer vous ne pouvez employer la commande saveToFlash que 100000 fois au cours de la vie du module. Veillez donc à ne pas appeler cette commande depuis l'intérieur d'une boucle.

8.5. Limitations

L'API en ligne de commande est sujette à la même limitation que les autres API: il ne peut y avoir q'une seule application à la fois qui accède aux modules de manière native. Par défaut l'API en ligne de commande fonctionne en natif.

Cette limitation peut aisément être contournée en utilisant un Virtual Hub: il suffit de faire tourner le VirtualHub18 sur la machine concernée et d'utiliser les executables de l'API en ligne de commande avec l'option -r par exemple, si vous utilisez:


C:\>YModule  inventory

Vous obtenez un inventaire des modules connectés par USB, en utilisant un accès natif. Si il y a déjà une autre commande en cours qui accède aux modules en natif, cela ne fonctionnera pas. Mais si vous lancez un virtual hub et que vous lancez votre commande sous la forme:


C:\>YModule -r 127.0.0.1 inventory

cela marchera parce que la commande ne sera plus exécutée nativement, mais à travers le Virtual Hub. Notez que le Virtual Hub compte comme une application native.

9. Utilisation du Yocto-RS485 en JavaScript / EcmaScript

EcmaScript est le nom officiel de la version standardisée du langage de programmation communément appelé JavaScript. Cette librairie de programmation Yoctopuce utilise les nouvelles fonctionnalités introduites dans la version EcmaScript 2017. La librairie porte ainsi le nom Librairie pour JavaScript / EcmaScript 2017, afin de la différentier de la précédente Librairie pour JavaScript qu'elle remplace.

Cette librairie permet d'accéder aux modules Yoctopuce depuis tous les environnements JavaScript modernes. Elle fonctionne aussi bien depuis un navigateur internet que dans un environnement Node.js. La librairie détecte automatiquement à l'initialisation si le contexte d'utilisation est un browser ou une machine virtuelle Node.js, et utilise les librairies systèmes les plus appropriées en conséquence.

Les communications asynchrones avec les modules sont gérées dans toute la librairie à l'aide d'objets Promise, en utilisant la nouvelle syntaxe EcmaScript 2017 async / await non bloquante pour la gestion des entrées/sorties asynchrones (voir ci-dessous). Cette syntaxe est désormais disponible sans autres dans la plupart des moteurs JavaScript: il n'est plus nécessaire de transpiler le code avec Babel ou jspm. Voici la version minimum requise de vos moteurs JavaScript préférés, tous disponibles au téléchargement:

Si vous avez besoin de la compatibilité avec des anciennes versions, vous pouvez toujours utiliser Babel pour transpiler votre code et la libriairie vers un standard antérieur de JavaScript, comme décrit un peu plus bas.

Nous ne recommendons plus l'utilisation de jspm 0.17 puisque cet outil est toujours en version Beta après 18 mois, et que solliciter l'utilisation d'un outil supplémentaire pour utiliser notre librairie ne se justifie plus dès lors que async / await sont standardisés.

9.1. Fonctions bloquantes et fonctions asynchrones en JavaScript

JavaScript a été conçu pour éviter toute situation de concurrence durant l'exécution. Il n'y a jamais qu'un seul thread en JavaScript. Cela signifie que si un programme effectue une attente active durant une communication réseau, par exemple pour lire un capteur, le programme entier se trouve bloqué. Dans un navigateur, cela peut se traduire par un blocage complet de l'interface utilisateur. C'est pourquoi l'utilisation de fonctions d'entrée/sortie bloquantes en JavaScript est sévèrement découragée de nos jours, et les API bloquantes se font toutes déclarer deprecated.

Plutôt que d'utiliser des threads parallèles, JavaScript utilise les opérations asynchrones pour gérer les attentes dans les entrées/sorties: lorsqu'une fonction potentiellement bloquante doit être appelée, l'opération est uniquement déclenchée mais le flot d'exécution est immédiatement terminé. La moteur JavaScript est alors libre pour exécuter d'autres tâches, comme la gestion de l'interface utilisateur par exemple. Lorsque l'opération bloquante se termine finalement, le système relance le code en appelant une fonction de callback, en passant en paramètre le résultat de l'opération, pour permettre de continuer la tâche originale.

Lorsqu'on les utilises avec des simples fonctions de callback, comme c'est fait quasi systématiquement dans les librairies Node.js, les opérations asynchrones ont la fâcheuse tendance de rentre le code illisible puisqu'elles découpent systématiquement le flot du code en petites fonctions de callback déconnectées les unes des autres. Heureusement, de nouvelles idées sont apparues récemment pour améliorer la situation. En particulier, l'utilisation d'objets Promise pour travailler avec les opérations asynchrones aide beaucoup. N'importe quelle fonction qui effectue une opération potentiellement longue peut retourner une promesse de se terminer, et cet objet Promise peut être utilisé par l'appelant pour chaîner d'autres opérations en un flot d'exécution. La classe Promise fait partie du standard EcmaScript 2015.

Les objets Promise sont utiles, mais ce qui les rend vraiment pratique est la nouvelle syntaxe async / await pour la gestion des appels asynchrones:

En clair, async et await permettent d'écrire du code EcmaScript avec tous les avantages des entrées/sorties asynchrones, mais sans interrompre le flot d'écriture du code. Cela revient quasiment à une exécution multi-tâche, mais en garantissant que le passage de contrôle d'une tâche à l'autre ne se produira que là où le mot-clé await apparaît.

Nous avons donc décidé d'écrire cette nouvelle librairie EcmaScript en utilisant les objets Promise et des fonctions async, pour vous permettre d'utiliser la notation await si pratique. Et pour ne pas devoir vous poser la question pour chaque méthode de savoir si elle est asynchrone ou pas, la convention est la suivante: toutes les méthodes publiques de la librairie EcmaScript sont async, c'est-à-dire qu'elles retournent un objet Promise, sauf:

9.2. Utiliser la librairie Yoctopuce pour JavaScript / EcmaScript 2017

JavaScript fait partie de ces langages qui ne vous permettront pas d'accéder directement aux couches matérielles de votre ordinateur. C'est pourquoi si vous désirez travailler avec des modules USB branchés par USB, vous devrez faire tourner la passerelle de Yoctopuce appelée VirtualHub sur la machine à laquelle sont branchés les modules.

Connectez vous sur le site de Yoctopuce et téléchargez les éléments suivants:

Décompressez les fichiers de la librairie dans un répertoire de votre choix, branchez vos modules et lancez le programme VirtualHub. Vous n'avez pas besoin d'installer de driver.

Utiliser la librairie Yoctopuce officielle pour node.js

Commencez par installer sur votre machine de développement la version actuelle de Node.js (7.6 ou plus récente), C'est très simple. Vous pouvez l'obtenir sur le site officiel: http://nodejs.org. Assurez vous de l'installer entièrement, y compris npm, et de l'ajouter à votre system path.

Vous pouvez ensuite prendre l'exemple de votre choix dans le répertoire example_nodejs (par exemple example_nodejs/Doc-Inventory). Allez dans ce répertoire. Vous y trouverez un fichier décrivant l'application (package.json) et le code source de l'application (demo.js). Pour charger automatiquement et configurer les librairies nécessaires à l'exemple, tapez simplement:


npm install

Une fois que c'est fait, vous pouvez directement lancer le code de l'application:


node demo.js

Utiliser une copie locale de la librairie Yoctopuce avec node.js

Si pour une raison ou une autre vous devez faire des modifications au code de la librairie, vous pouvez facilement configurer votre projet pour utiliser le code source de la librairie qui se trouve dans le répertoire lib/ plutôt que le package npm officiel. Pour cela, lancez simplement la commande suivante dans le répertoire de votre projet:


npm link ../../lib

Utiliser la librairie Yoctopuce dans un navigateur (HTML)

Pour les exemples HTML, c'est encore plus simple: il n'y a rien à installer. Chaque exemple est un simple fichier HTML que vous pouvez ouvrir directement avec un navigateur pour l'essayer. L'inclusion de la librairie Yoctopuce ne demande rien de plus qu'un simple tag HTML <script>.

Utiliser la librairie Yoctopuce avec des anciennes version de JavaScript

Si vous avez besoin d'utiliser cette librairie avec des moteurs JavaScript plus anciens, vous pouvez utiliser Babel21 pour transpiler votre code et la librairie dans une version antérieure du langage. Pour installer Babel avec les réglages usuels, tapez:


npm instal -g babel-cli
npm instal babel-preset-env

Normalement vous demanderez à Babel de poser les fichiers transpilés dans un autre répertoire, nommé comopat par exemple. Pour ce faire, utilisez par exemple les commandes suivantes:


babel --presets env demo.js --out-dir compat/
babel --presets env ../../lib --out-dir compat/

Bien que ces outils de transpilation soient basés sur node.js, ils fonctionnent en réalité pour traduire n'importe quel type de fichier JavaScript, y compris du code destiné à fonctionner dans un navigateur. La seule chose qui ne peut pas être faite aussi facilement est la transpilation de sciptes codés en dure à l'intérieur même d'une page HTML. Il vous faudra donc sortir ce code dans un fichier .js externe si il utiliser la syntaxe EcmaScript 2017, afin de le transpiler séparément avec Babel.

Babel dipose de nombreuses fonctionnalités intéressantes, comme un mode de surveillance qui traduite automatiquement au vol vos fichiers dès qu'il détecte qu'un fichier source a changé. Consultez les détails dans la documentation de Babel.

Compatibilité avec l'ancienne librairie JavaScript

Cette nouvelle librairie n'est pas compatible avec l'ancienne librairie JavaScript, car il n'existe pas de possibilité d'implémenter l'ancienne API bloquante sur la base d'une API asynchrone. Toutefois, les noms des méthodes sont les mêmes, et l'ancien code source synchrone peut facilement être rendu asynchrone simplement en ajoutant le mot-clé await devant les appels de méthode. Remplacez par exemple:


beaconState = module.get_beacon();

par


beaconState = await module.get_beacon();

Mis à part quelques exceptions, la plupart des méthodes redondantes XXX_async ont été supprimées, car elles auraient introduit de la confusion sur la manière correcte de gérer les appels asynchrones. Si toutefois vous avez besoin d'appeler un callback explicitement, il est très facile de faire appeler une fonction de callback à la résolution d'une méthode async, en utilisant l'objet Promise retourné. Par exemple, vous pouvez réécrire:


module.get_beacon_async(callback, myContext);

par


module.get_beacon().then(function(res) { callback(myContext, module, res); });

Si vous portez une application vers la nouvelle librairie, vous pourriez être amené à désirer des méthodes synchrones similaires à l'ancienne librairie (sans objet Promise), quitte à ce qu'elles retournent la dernière valeur reçue du capteur telle que stockée en cache, puisqu'il n'est pas possible de faire des communications bloquantes. Pour cela, la nouvelle librairie introduit un nouveau type de classes appelés proxys synchrones. Un proxy synchrone est un objet qui reflète la dernière value connue d'un objet d'interface, mais peut être accédé à l'aide de fonctions synchrones habituelles. Par exemple, plutôt que d'utiliser:


async function logInfo(module)
{
    console.log('Name: '+await module.get_logicalName());
    console.log('Beacon: '+await module.get_beacon());
}

...
logInfo(myModule);
...

on peut utiliser:


function logInfoProxy(moduleSyncProxy)
{
    console.log('Name: '+moduleProxy.get_logicalName());
    console.log('Beacon: '+moduleProxy.get_beacon());
}

logInfoSync(await myModule.get_syncProxy());

Ce dernier appel asynchrone peut aussi être formulé comme:


myModule.get_syncProxy().then(logInfoProxy);

9.3. Contrôle de la fonction SerialPort

Il suffit de quelques lignes de code pour piloter un Yocto-RS485. Voici le squelette d'un fragment de code JavaScript qui utilise la fonction SerialPort.


// En Node.js, on utilise la fonction require()
// En HTML, on utiliserait &lt;script src="..."&gt;
require('yoctolib-es2017/yocto_api.js');
require('yoctolib-es2017/yocto_serialport.js');

[...]
// On active l'accès aux modules locaux à travers le VirtualHub
await YAPI.RegisterHub('127.0.0.1');
[...]

// On récupère l'objet permettant d'intéragir avec le module
let serialport = YSerialPort.FindSerialPort("RS485MK1-123456.serialPort");

// Pour gérer le hot-plug, on vérifie que le module est là
if(await serialport.isOnline())
{
    // Utiliser serialport.get_serialMode()
    [...]
}

Voyons maintenant en détail ce que font ces quelques lignes.

Require de yocto_api et yocto_serialport

Ces deux imports permettent d'avoir accès aux fonctions permettant de gérer les modules Yoctopuce. yocto_api doit toujours être inclus, yocto_serialport est nécessaire pour gérer les modules contenant un port série, comme le Yocto-RS485. D'autres classes peuvent être utiles dans d'autres cas, comme YModule qui vous permet de faire une énumération de n'importe quel type de module Yoctopuce.

YAPI.RegisterHub

La méthode RegisterHub permet d'indiquer sur quelle machine se trouvent les modules Yoctopuce, ou plus exactement la machine sur laquelle tourne le programme VirtualHub. Dans notre cas l'adresse 127.0.0.1:4444 indique la machine locale, en utilisant le port 4444 (le port standard utilisé par Yoctopuce). Vous pouvez parfaitement changer cette adresse, et mettre l'adresse d'une autre machine sur laquelle tournerait un autre VirtualHub, ou d'un YoctoHub. Si l'hôte n'est pas joignable, la fonction déclanche une exception.

YSerialPort.FindSerialPort

La méthode FindSerialPort permet de retrouver un port série en fonction du numéro de série de son module hôte et de son nom de fonction. Mais vous pouvez tout aussi bien utiliser des noms logiques que vous auriez préalablement configurés. Imaginons un module Yocto-RS485 avec le numéros de série RS485MK1-123456 que vous auriez appelé "MonModule" et dont vous auriez nommé la fonction serialPort "MaFonction", les cinq appels suivants seront strictement équivalents (pour autant que MaFonction ne soit définie qu'une fois, pour éviter toute ambiguïté):


serialport = YSerialPort.FindSerialPort("RS485MK1-123456.serialPort")
serialport = YSerialPort.FindSerialPort("RS485MK1-123456.MaFonction")
serialport = YSerialPort.FindSerialPort("MonModule.serialPort")
serialport = YSerialPort.FindSerialPort("MonModule.MaFonction")
serialport = YSerialPort.FindSerialPort("MaFonction")

YSerialPort.FindSerialPort renvoie un objet que vous pouvez ensuite utiliser à loisir pour contrôler le port série.

isOnline

La méthode isOnline() de l'objet renvoyé par FindSerialPort permet de savoir si le module correspondant est présent et en état de marche.

modbusWrite* et modbusRead*

Les méthodes modbusWrite*() et modbusRead*()de l'objet renvoyé par YFindSerialPort.FindSerialPort permettent de communiquer en MODDUS sur la liaison RS485.

Un exemple concret, en Node.js

Ouvrez une fenêtre de commande (un terminal, un shell...) et allez dans le répertoire example_nodejs/Doc-GettingStarted-Yocto-RS485 de la librairie Yoctopuce pour JavaScript / EcmaScript 2017. Vous y trouverez un fichier nommé demo.js avec le code d'exemple ci-dessous, qui reprend les fonctions expliquées précédemment, mais cette fois utilisées avec le décorum nécessaire à en faire un petit programme d'exemple concret.

Si le Yocto-RS485 n'est pas branché sur la machine où fonctionne le navigateur internet, remplacez dans l'exemple l'adresse 127.0.0.1 par l'adresse IP de la machine où est branché le Yocto-RS485 et où vous avez lancé le VirtualHub.

"use strict";

require('yoctolib-es2017/yocto_api.js');
require('yoctolib-es2017/yocto_serialport.js');

let serialPort;
let target = {slave: 0, reg: 0};
let g_step = 1;
let rl;
async function startDemo() {
    const readline = YAPI._nodeRequire('readline');

    await YAPI.LogUnhandledPromiseRejections();
    await YAPI.DisableExceptions();

    // Setup the API to use the VirtualHub on local machine
    let errmsg = new YErrorMsg();
    if (await YAPI.RegisterHub('127.0.0.1', errmsg) != YAPI.SUCCESS) {
        console.log('Cannot contact VirtualHub on 127.0.0.1: ' + errmsg.msg);
        return;
    }

    // Select specified device, or use first available one
    let serial = process.argv[process.argv.length - 1];
    if (serial[8] != '-') {
        // by default use any connected module suitable for the demo
        let anyserial = YSerialPort.FirstSerialPort();
        if (anyserial) {
            let module = await anyserial.module();
            serial = await module.get_serialNumber();
        } else {
            console.log('No matching module connected, check cable !');
            return;
        }
    }
    console.log('Using device ' + serial);
    serialPort = YSerialPort.FirstSerialPort();
    rl = readline.createInterface({
        input: process.stdin,
        output: process.stdout
    });
    console.log('Please enter the MODBUS slave address (1...255)');
    console.log('Slave:');
    rl.on('line', handleInput);
}

async function handleInput(chunk) {
    var val = parseInt(chunk);
    switch (g_step) {
        case 1:
            if (val < 1 || val > 255) {
                console.log("invalid slave number");
            } else {
                target.slave = val;
                g_step++;
                console.log("Slave = " + target.slave);
                console.log("Please select a Coil No (>=1), Input Bit No (>=10001+),");
                console.log("       Register No (>=30001) or Input Register No (>=40001)");
                console.log("No: ");
            }
            break;
        case 2:
            if (val < 1 || val >= 50000 || (val % 10000) == 0) {
                console.log("invalid register number");
            } else {
                target.reg = val;
                await printModbusValue(target.slave, target.reg);
                g_step++;
                console.log("Press ENTER to read again, Q to quit:");
                if ((target.reg % 30000) < 10000) {
                    console.log(" or enter a new value:");
                }
            }
            break;
        case 3:
            if (chunk.charAt(0) == 'q' || chunk.charAt(0) == 'Q') {
                await YAPI.FreeAPI();
                rl.close();
                break;
            }
            if (chunk.charAt(0) != 'r' && chunk.charAt(0) != 'R' && (target.reg % 30000) < 10000) {
                if (target.reg >= 30001) {
                    await serialPort.modbusWriteRegister(target.slave, target.reg - 30001, val);
                } else {
                    await serialPort.modbusWriteBit(target.slave, target.reg - 1, val);
                }
            }
            await printModbusValue(target.slave, target.reg);
            console.log("Press R to read again, Q to quit");
            if ((target.reg % 30000) < 10000) {
                console.log(" or enter a new value");
            }
            console.log(": ");
            break;
        default:
            console.log('data: ' + chunk);
    }
}

async function printModbusValue(slave, reg) {
    var val;
    console.log("reg=" + reg + " slave=" + slave);
    if (reg >= 40001) {
        val = (await serialPort.modbusReadRegisters(slave, reg - 40001, 1))[0];
    } else if (reg >= 30001) {
        val = (await serialPort.modbusReadInputRegisters(slave, reg - 30001, 1))[0];
    } else if (reg >= 10001) {
        val = (await serialPort.modbusReadInputBits(slave, reg - 10001, 1))[0];
    } else {
        val = (await serialPort.modbusReadBits(slave, reg - 1, 1))[0];
    }
    console.log("Current value: " + val);
    return val;
}

startDemo();
 

Comme décrit au début de ce chapitre, vous devez avoir installé Node.js v7.6 ou suivant pour essayer ces exemples. Si vous l'avez fait, vous pouvez maintenant taper les deux commandes suivantes pour télécharger automatiquement les librairies dont cet exemple dépend:


npm install
Une fois terminé, vous pouvez lancer votre code d'exemple dans Node.js avec la commande suivante, en remplaçant les [...] par les arguments que vous voulez passer au programme:

node demo.js [...]

Le même exemple, mais dans un navigateur

Si vous voulez voir comment utiliser la librairie dans un navigateur plutôt que dans Node.js, changez de répertoire et allez dans example_html/Doc-GettingStarted-Yocto-RS485. Vous y trouverez un fichier html, avec une section JavaScript similaire au code précédent, mais avec quelques variantes pour permettre une interaction à travers la page HTML plutôt que sur la console JavaScript

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Hello World</title>
  <script src="../../lib/yocto_api.js"></script>
  <script src="../../lib/yocto_serialport.js"></script>
  <script>
    let serialPort;
    let slave;
    let reg;
    async function startDemo() {

      await YAPI.LogUnhandledPromiseRejections();
      await YAPI.DisableExceptions();

      // Setup the API to use the VirtualHub on local machine
      let errmsg = new YErrorMsg();
      if (await YAPI.RegisterHub('127.0.0.1', errmsg) != YAPI.SUCCESS) {
        alert('Cannot contact VirtualHub on 127.0.0.1: ' + errmsg.msg);
        return;
      }
      refresh();
    }
    async function refresh() {
      // Select specified device, or use first available one
      let serial = document.getElementById('serial').value;
      if (serial == '') {
        // by default use any connected module suitable for the demo
        let anyserial = YSerialPort.FirstSerialPort();
        if (anyserial) {
          let module = await anyserial.module();
          serial = await module.get_serialNumber();
          document.getElementById('serial').value = serial;
        }
      }
      serialPort = YSerialPort.FirstSerialPort();
      if (await serialPort.isOnline()) {
        // display motor status
        document.getElementById('msg').value = '';
        document.getElementById('main').style.display = '';
      } else {
        document.getElementById('msg').value = 'Module not connected';
      }
      setTimeout(refresh, 500);
    }


    function slavechanged() {
      slave = parseInt(document.getElementById('slaveinput').value);
      if (slave > 0) {
        document.getElementById('slaveinput').style.display = 'none';
        document.getElementById('slavevalue').innerHTML = slave;
        document.getElementById('regspan').style.display = '';
      }
    }


    async function regchanged() {
      reg = parseInt(document.getElementById('reginput').value);
      let res;
      if (reg > 0) {
        let value = await modbus_readvalue(slave, reg);
        document.getElementById('reginput').style.display = 'none';
        document.getElementById('regvalue').innerHTML = reg;
        document.getElementById('valuespan').style.display = '';
        document.getElementById('value').innerHTML = value;
      }
    }

    async function modbus_readvalue(slave, reg) {
      let val;
      if (reg >= 40001) {
        val = (await serialPort.modbusReadRegisters(slave, reg - 40001, 1))[0];
      } else if (reg >= 30001) {
        val = (await serialPort.modbusReadInputRegisters(slave, reg - 30001, 1))[0];
      } else if (reg >= 10001) {
        val = (await serialPort.modbusReadInputBits(slave, reg - 10001, 1))[0];
      } else {
        val = (await serialPort.modbusReadBits(slave, reg - 1, 1))[0];
      }
      console.log("Current value: " + val);
      return val;
    }

    startDemo();
  </script>
</head>
<body>
Module to use: <input id='serial'>
<input id='msg' style='color:red;border:none;' readonly><br>
<span id='main' style='display:none'>
  Please enter the MODBUS slave address (1...255)<br>
  slave:<input id='slaveinput' onchange='javascript:slavechanged()'>
  <span id='slavevalue'></span><br>
  <span id='regspan' style='display:none'>
  Please select a Coil No (>=1), Input Bit No (>=10001+)<br>
  Input Register No (>=30001) or Register No (>=40001)<br>
  No: <input id='reginput' onchange='javascript:regchanged()'>
  <span id='regvalue'></span><br>
</span>
<span id='valuespan' style='display:none'>
  CurrentValue: <span id='value'></span><br>
</span>
</body>
</html>
 

Aucune installation n'est nécessaire pout utiliser cet exemple, il suffit d'ouvrir la page HTML avec un navigateur web.

9.4. Contrôle de la partie module

Chaque module peut-être contrôlé d'une manière similaire, vous trouverez ci dessous un simple programme d'exemple affichant les principaux paramètres d'un module et permettant d'activer la balise de localisation.

"use strict";

require('yoctolib-es2017/yocto_api.js');

async function startDemo(args)
{
    await YAPI.LogUnhandledPromiseRejections();

    // Setup the API to use the VirtualHub on local machine
    let errmsg = new YErrorMsg();
    if(await YAPI.RegisterHub('127.0.0.1', errmsg) != YAPI.SUCCESS) {
        console.log('Cannot contact VirtualHub on 127.0.0.1: '+errmsg.msg);
        return;
    }

    // Select the relay to use
    let module = YModule.FindModule(args[0]);
    if(await module.isOnline()) {
        if(args.length > 1) {
            if(args[1] == 'ON') {
                await module.set_beacon(YModule.BEACON_ON);
            } else {
                await module.set_beacon(YModule.BEACON_OFF);
            }
        }
        console.log('serial:       '+await module.get_serialNumber());
        console.log('logical name: '+await module.get_logicalName());
        console.log('luminosity:   '+await module.get_luminosity()+'%');
        console.log('beacon:       '+(await module.get_beacon()==YModule.BEACON_ON?'ON':'OFF'));
        console.log('upTime:       '+parseInt(await module.get_upTime()/1000)+' sec');
        console.log('USB current:  '+await module.get_usbCurrent()+' mA');
        console.log('logs:');
        console.log(await module.get_lastLogs());
    } else {
        console.log("Module not connected (check identification and USB cable)\n");
    }
    await YAPI.FreeAPI();
}

if(process.argv.length < 2) {
    console.log("usage: node demo.js <serial or logicalname> [ ON | OFF ]");
} else {
    startDemo(process.argv.slice(2));
}
 

Chaque propriété xxx du module peut être lue grâce à une méthode du type get_xxxx(), et les propriétés qui se sont pas en lecture seule peuvent être modifiées à l'aide de la méthode set_xxx() Pour plus de détails concernant ces fonctions utilisées, reportez-vous aux chapitre API

Modifications des réglages du module

Lorsque que vous souhaitez modifier les réglages d'un module, il suffit d'appeler la fonction set_xxx() correspondante, cependant cette modification n'a lieu que dans la mémoire vive du module: si le module redémarre, les modifications seront perdues. Pour qu'elle soient mémorisées de manière persistante, il est nécessaire de demander au module de sauvegarder sa configuration courante dans sa mémoire non volatile. Pour cela il faut utiliser la méthode saveToFlash(). Inversement il est possible de forcer le module à oublier ses réglages courants en utilisant la méthode revertFromFlash(). Ce petit exemple ci-dessous vous permet changer le nom logique d'un module.

"use strict";

require('yoctolib-es2017/yocto_api.js');

async function startDemo(args)
{
    await YAPI.LogUnhandledPromiseRejections();

    // Setup the API to use the VirtualHub on local machine
    let errmsg = new YErrorMsg();
    if(await YAPI.RegisterHub('127.0.0.1', errmsg) != YAPI.SUCCESS) {
        console.log('Cannot contact VirtualHub on 127.0.0.1: '+errmsg.msg);
        return;
    }
   
    // Select the relay to use
    let module = YModule.FindModule(args[0]);
    if(await module.isOnline()) {
        if(args.length > 1) {
            let newname = args[1];
            if (!await YAPI.CheckLogicalName(newname)) {
                console.log("Invalid name (" + newname + ")");
                process.exit(1);
            }
            await module.set_logicalName(newname);
            await module.saveToFlash();
        }
        console.log('Current name: '+await module.get_logicalName());
    } else {
        console.log("Module not connected (check identification and USB cable)\n");
    }
    await YAPI.FreeAPI();
}

if(process.argv.length < 2) {
    console.log("usage: node demo.js <serial> [newLogicalName]");
} else {
    startDemo(process.argv.slice(2));
}
 

Attention, le nombre de cycle d'écriture de la mémoire non volatile du module est limité. Passé cette limite plus rien ne garantit de que la sauvegarde des réglages se passera correctement. Cette limite, liée à la technologie employé par le micro-processeur du module se situe aux alentour de 100000 cycles. Pour résumer vous ne pouvez employer la fonction saveToFlash() que 100000 fois au cours de la vie du module. Veillez donc à ne pas appeler cette fonction depuis l'intérieur d'une boucle.

Énumération des modules

Obtenir la liste des modules connectés se fait à l'aide de la fonction YModule.FirstModule() qui renvoie le premier module trouvé, il suffit ensuite d'appeler la fonction nextModule() de cet objet pour trouver les modules suivants, et ce tant que la réponse n'est pas un null. Ci-dessous un petit exemple listant les module connectés

"use strict";

require('yoctolib-es2017/yocto_api.js');

async function startDemo()
{
    await YAPI.LogUnhandledPromiseRejections();
    await YAPI.DisableExceptions();

    // Setup the API to use the VirtualHub on local machine
    let errmsg = new YErrorMsg();
    if (await YAPI.RegisterHub('127.0.0.1', errmsg) != YAPI.SUCCESS) {
        console.log('Cannot contact VirtualHub on 127.0.0.1');
        return;
    }
    refresh();
}

async function refresh()
{
    try {
        let errmsg = new YErrorMsg();
        await YAPI.UpdateDeviceList(errmsg);

        let module = YModule.FirstModule();
        while(module) {
            let line = await module.get_serialNumber();
            line += '(' + (await module.get_productName()) + ')';
            console.log(line);
            module = module.nextModule();
        }
        setTimeout(refresh, 500);
    } catch(e) {
        console.log(e);
    }
}

try {
    startDemo();
} catch(e) {
    console.log(e);
}
 

9.5. Gestion des erreurs

Lorsque vous implémentez un programme qui doit interagir avec des modules USB, vous ne pouvez pas faire abstraction de la gestion des erreurs. Il y aura forcément une occasion où un utilisateur aura débranché le périphérique, soit avant de lancer le programme, soit même en pleine opération. La librairie Yoctopuce est prévue pour vous aider à supporter ce genre de comportements, mais votre code doit néanmoins être fait pour se comporter au mieux pour interpréter les erreurs signalées par la librairie.

La manière la plus simple de contourner le problème est celle que nous avons employé pour les petits exemples précédents de ce chapitre: avant d'accéder à un module, on vérifie qu'il est en ligne avec la méthode isOnline() et on suppose ensuite qu'il va y rester pendant la fraction de seconde nécessaire à exécuter les lignes de code suivantes. Ce n'est pas parfait, mais ça peut suffire dans certains cas. Il faut toutefois être conscient qu'on ne peut pas totalement exclure une erreur se produisant après le isOnline(), qui pourrait faire planter le programme. La seule manière de l'éviter est d'implémenter une des deux techniques de gestion des erreurs décrites ci-dessous.

La méthode recommandée par la plupart des langages de programmation pour la gestion des erreurs imprévisibles est l'utilisation d'exceptions. C'est le comportement par défaut de la librairie Yoctopuce. Si une erreur se produit alors qu'on essaie d'accéder à un module, la librairie va lancer une exception. Dans ce cas, de trois choses l'une:

Comme cette dernière situation n'est pas la plus souhaitable, la librairie Yoctopuce offre une autre alternative pour la gestion des erreurs, permettant de faire un programme robuste sans devoir attraper les exceptions à chaque ligne de code. Il suffit d'appeler la fonction YAPI.DisableExceptions() pour commuter la librairie dans un mode où les exceptions de chaque fonction sont systématiquement remplacées par des valeurs de retour particulières, qui peuvent être testées par l'appelant lorsque c'est pertinent. Le nom de la valeur de retour en cas d'erreur pour chaque fonction est systématiquement documenté dans la référence de la librairie. Il suit toujours la même logique: une méthode get_state() retournera une valeur Y_STATE_INVALID, une méthode get_currentValue retournera une valeur Y_CURRENTVALUE_INVALID, etc. Dans tous les cas, la valeur retournée sera du type attendu, et ne sera pas un pointeur nul qui risquerait de faire crasher votre programme. Au pire, si vous affichez la valeur sans la tester, elle sera hors du cadre attendu pour la valeur retournée. Dans le cas de fonctions qui ne retournent à priori pas d'information, la valeur de retour sera YAPI_SUCCESS si tout va bien, et un code d'erreur différent en cas d'échec.

Quand vous travaillez sans les exceptions, il est possible d'obtenir un code d'erreur et un message expliquant l'origine de l'erreur en le demandant à l'objet qui a retourné une erreur à l'aide des méthodes errType() et errMessage(). Ce sont les même informations qui auraient été associées à l'exception si elles avaient été actives.

10. Utilisation du Yocto-RS485 en PHP

PHP est, tout comme Javascript, un langage assez atypique lorsqu'il s'agit de discuter avec du hardware. Néanmoins, utiliser PHP avec des modules Yoctopuce offre l'opportunité de construire très facilement des sites web capables d'interagir avec leur environnement physique, ce qui n'est pas donné à tous les serveurs web. Cette technique trouve une application directe dans la domotique: quelques modules Yoctopuce, un serveur PHP et vous pourrez interagir avec votre maison depuis n'importe ou dans le monde. Pour autant que vous ayez une connexion internet.

PHP fait lui aussi partie de ces langages qui ne vous permettront pas d'accéder directement aux couches matérielles de votre ordinateur. C'est pourquoi vous devrez faire tourner un hub virtuel sur la machine à laquelle sont branchés les modules

Pour démarrer vos essais en PHP, vous allez avoir besoin d'un serveur PHP 5.3 ou plus 22 de préférence en local sur votre machine. Si vous souhaiter utiliser celui qui se trouve chez votre provider internet, c'est possible, mais vous devrez probablement configurer votre routeur ADSL pour qu'il accepte et forwarde les requêtes TCP sur le port 4444.

10.1. Préparation

Connectez vous sur le site de Yoctopuce et téléchargez les éléments suivants:

Décompressez les fichiers de la librairie dans un répertoire de votre choix accessible à votre serveur web, branchez vos modules, lancez le programme VirtualHub, et vous pouvez commencer vos premiers test. Vous n'avez pas besoin d'installer de driver.

10.2. Contrôle de la fonction SerialPort

Il suffit de quelques lignes de code pour piloter un Yocto-RS485. Voici le squelette d'un fragment de code PHP qui utilise la fonction SerialPort.


include('yocto_api.php');
include('yocto_serialport.php');

[...]
// On active l'accès aux modules locaux à travers le VirtualHub
YAPI::RegisterHub('http://127.0.0.1:4444/',$errmsg);
[...]

// On récupère l'objet permettant d'intéragir avec le module
$serialport = YSerialPort::FindSerialPort("RS485MK1-123456.serialPort");

// Pour gérer le hot-plug, on vérifie que le module est là
if($serialport->isOnline())
{
    // Utiliser serialport->get_serialMode()
    [...]
}

Voyons maintenant en détail ce que font ces quelques lignes.

yocto_api.php et yocto_serialport.php

Ces deux includes PHP permettent d'avoir accès aux fonctions permettant de gérer les modules Yoctopuce. yocto_api.php doit toujours être inclus, yocto_serialport.php est nécessaire pour gérer les modules contenant un port série, comme le Yocto-RS485.

YAPI::RegisterHub

La fonction YAPI::RegisterHub permet d'indiquer sur quelle machine se trouve les modules Yoctopuce, ou plus exactemenent sur quelle machine tourne le programme VirtualHub. Dans notre cas l'adresse 127.0.0.1:4444 indique la machine locale, en utilisant le port 4444 (le port standard utilisé par Yoctopuce). Vous pouvez parfaitement changer cette adresse, et mettre l'adresse d'une autre machine sur laquelle tournerait un autre VirtualHub.

YSerialPort::FindSerialPort

La fonction YSerialPort::FindSerialPort permet de retrouver un port série en fonction du numéro de série de son module hôte et de son nom de fonction. Mais vous pouvez tout aussi bien utiliser des noms logiques que vous auriez préalablement configurés. Imaginons un module Yocto-RS485 avec le numéros de série RS485MK1-123456 que vous auriez appelé "MonModule" et dont vous auriez nommé la fonction serialPort "MaFonction", les cinq appels suivants seront strictement équivalents (pour autant que MaFonction ne soit définie qu'une fois, pour éviter toute ambiguïté):


$serialport = YSerialPort::FindSerialPort("RS485MK1-123456.serialPort");
$serialport = YSerialPort::FindSerialPort("RS485MK1-123456.MaFonction");
$serialport = YSerialPort::FindSerialPort("MonModule.serialPort");
$serialport = YSerialPort::FindSerialPort("MonModule.MaFonction");
$serialport = YSerialPort::FindSerialPort("MaFonction");

YSerialPort::FindSerialPort renvoie un objet que vous pouvez ensuite utiliser à loisir pour contrôler le port série.

isOnline

La méthode isOnline() de l'objet renvoyé par YSerialPort::FindSerialPort permet de savoir si le module correspondant est présent et en état de marche.

modbusWrite* et modbusRead*

Les méthodes modbusWrite*() et modbusRead*()de l'objet renvoyé par YFindSerialPort permettent de communiquer en MODDUS sur la liaison RS485.

Un exemple réel

Ouvrez votre éditeur de texte préféré25, recopiez le code ci dessous, sauvez-le dans un répertoire accessible par votre serveur web/PHP avec les fichiers de la librairie, et ouvrez-la page avec votre browser favori. Vous trouverez aussi ce code dans le répertoire Examples/Doc-GettingStarted-Yocto-RS485 de la librairie Yoctopuce.

Vous reconnaîtrez dans cet exemple l'utilisation des fonctions expliquées ci-dessus, cette fois utilisées avec le décorum nécessaire à en faire un petit programme d'exemple concret.

<HTML>
<HEAD>
    <TITLE>Hello World</TITLE>
</HEAD>
<BODY>
<FORM method='get'>
    <?php

    function readModBus($serialPort, $slave, $reg)
    {
        if($reg >= 40001) $res = $serialPort->modbusReadRegisters($slave, $reg - 40001, 1);
        else if($reg >= 30001) $res = $serialPort->modbusReadInputRegisters($slave, $reg - 30001, 1);
        else if($reg >= 10001) $res = $serialPort->modbusReadInputBits($slave, $reg - 10001, 1);
        else $res = $serialPort->modbusReadBits($slave, $reg - 1, 1);
        return $res[0];
    }

    include('yocto_api.php');
    include('yocto_serialport.php');

    // Use explicit error handling rather than exceptions
    YAPI::DisableExceptions();

    $address = '127.0.0.1';

    // Setup the API to use the VirtualHub on local machine,
    if(YAPI::RegisterHub($address, $errmsg) != YAPI::SUCCESS) {
        die("Cannot contact $address");
    }

    $serialPort = YSerialPort::FirstSerialPort();
    if($serialPort == null)
        die("No module found on $address (check USB cable)");

    $slave = "";
    if(isset($_GET["slave"])) $slave = $_GET["slave"];
    print('Please enter the MODBUS slave address (1...255)<br>');
    Print("slave:");
    if($slave == '') {
        Printf("<input name='slave'>");
    } else {
        print("<b>$slave</b><input name='slave' value='$slave' type='hidden'><br>");
        $reg = "";
        if(isset($_GET["reg"])) $reg = $_GET["reg"];
        print("Please select a Coil No (>=1), Input Bit No (>=10001+),<br>");
        print("       Input Register No (>=30001) or Register No (>=40001)<br>");
        Print("No:");
        if($reg == '') Printf("<input name='reg'>");
        else {
            print("<b>$reg</b><input name='reg' value='$reg' type='hidden'><br>");
            $reg = intVal($reg);
            $v = readModBus($serialPort, $slave, $reg);
            print("Current value: <b><span id='value'>$v</span></b><br>");

            if(($reg % 30000) < 10000) {
                printf(" Enter a new value: <input name='value'><br>");
                $value = '';
                if(isset($_GET["value"])) $value = $_GET["value"];
                if($value != '') {
                    if($reg >= 30001)
                        $serialPort->modbusWriteRegister($slave, $reg - 30001, intval($value));
                    else
                        $serialPort->modbusWriteBit($slave, $reg - 1, intval($value));
                    $v = readModBus($serialPort, $slave, $reg);
                    Print("<script>document.getElementById('value').innerHTML='$v'</SCRIPT>");
                }
            }
        }
    }
    YAPI::FreeAPI();
    ?>
    <input type='submit'>
</FORM>
</BODY>
</HTML>
 

10.3. Contrôle de la partie module

Chaque module peut-être contrôlé d'une manière similaire, vous trouverez ci dessous un simple programme d'exemple affichant les principaux paramètres d'un module et permettant d'activer la balise de localisation.

<HTML>
<HEAD>
 <TITLE>Module Control</TITLE>
</HEAD>
<BODY>
<FORM method='get'>
<?php
  include('yocto_api.php');

  // Use explicit error handling rather than exceptions
  YAPI::DisableExceptions();

  // Setup the API to use the VirtualHub on local machine
  if(YAPI::RegisterHub('http://127.0.0.1:4444/',$errmsg) != YAPI::SUCCESS) {
      die("Cannot contact VirtualHub on 127.0.0.1 : ".$errmsg);
  }

  @$serial = $_GET['serial'];
  if ($serial != '') {
      // Check if a specified module is available online
      $module = YModule::FindModule("$serial");
      if (!$module->isOnline()) {
          die("Module not connected (check serial and USB cable)");
      }
  } else {
      // or use any connected module suitable for the demo
      $module = YModule::FirstModule();
      if($module) { // skip VirtualHub
          $module = $module->nextModule();
      }
      if(is_null($module)) {
          die("No module connected (check USB cable)");
      } else {
          $serial = $module->get_serialnumber();
      }
  }
  Print("Module to use: <input name='serial' value='$serial'><br>");

  if (isset($_GET['beacon'])) {
      if ($_GET['beacon']=='ON')
          $module->set_beacon(Y_BEACON_ON);
      else
          $module->set_beacon(Y_BEACON_OFF);
  }
  printf('serial: %s<br>',$module->get_serialNumber());
  printf('logical name: %s<br>',$module->get_logicalName());
  printf('luminosity: %s<br>',$module->get_luminosity());
  print('beacon: ');
  if($module->get_beacon() == Y_BEACON_ON) {
      printf("<input type='radio' name='beacon' value='ON' checked>ON ");
      printf("<input type='radio' name='beacon' value='OFF'>OFF<br>");
  } else {
      printf("<input type='radio' name='beacon' value='ON'>ON ");
      printf("<input type='radio' name='beacon' value='OFF' checked>OFF<br>");
  }
  printf('upTime: %s sec<br>',intVal($module->get_upTime()/1000));
  printf('USB current: %smA<br>',$module->get_usbCurrent());
  printf('logs:<br><pre>%s</pre>',$module->get_lastLogs());
  YAPI::FreeAPI();
?>
<input type='submit' value='refresh'>
</FORM>
</BODY>
</HTML>
 

Chaque propriété xxx du module peut être lue grâce à une méthode du type get_xxxx(), et les propriétés qui se sont pas en lecture seule peuvent être modifiées à l'aide de la méthode set_xxx() Pour plus de détails concernant ces fonctions utilisées, reportez-vous aux chapitre API

Modifications des réglages du module

Lorsque que vous souhaitez modifier les réglages d'un module, il suffit d'appeler la fonction set_xxx() correspondante, cependant cette modification n'a lieu que dans la mémoire vive du module: si le module redémarre, les modifications seront perdues. Pour qu'elle soient mémorisées de manière persistante, il est nécessaire de demander au module de sauvegarder sa configuration courante dans sa mémoire non volatile. Pour cela il faut utiliser la méthode saveToFlash(). Inversement il est possible de forcer le module à oublier ses réglages courants en utilisant la méthode revertFromFlash(). Ce petit exemple ci-dessous vous permet changer le nom logique d'un module.

<HTML>
<HEAD>
 <TITLE>save settings</TITLE>
<BODY>
<FORM method='get'>
<?php
  include('yocto_api.php');

  // Use explicit error handling rather than exceptions
  YAPI::DisableExceptions();

  // Setup the API to use the VirtualHub on local machine
  if(YAPI::RegisterHub('http://127.0.0.1:4444/',$errmsg) != YAPI::SUCCESS) {
      die("Cannot contact VirtualHub on 127.0.0.1");
  }

  @$serial = $_GET['serial'];
  if ($serial != '') {
      // Check if a specified module is available online
      $module = YModule::FindModule("$serial");
      if (!$module->isOnline()) {
          die("Module not connected (check serial and USB cable)");
      }
  } else {
      // or use any connected module suitable for the demo
      $module = YModule::FirstModule();
      if($module) { // skip VirtualHub
          $module = $module->nextModule();
      }
      if(is_null($module)) {
          die("No module connected (check USB cable)");
      } else {
          $serial = $module->get_serialnumber();
      }
  }
  Print("Module to use: <input name='serial' value='$serial'><br>");

  if (isset($_GET['newname'])){
      $newname = $_GET['newname'];
      if (!yCheckLogicalName($newname))
          die('Invalid name');
      $module->set_logicalName($newname);
      $module->saveToFlash();
  }
  printf("Current name: %s<br>", $module->get_logicalName());
  print("New name: <input name='newname' value='' maxlength=19><br>");
  YAPI::FreeAPI();
?>
<input type='submit'>
</FORM>
</BODY>
</HTML>
 

Attention, le nombre de cycle d'écriture de la mémoire non volatile du module est limité. Passé cette limite plus rien ne garantit de que la sauvegarde des réglages se passera correctement. Cette limite, lié à la technologie employé par le micro-processeur du module se situe aux alentour de 100000 cycles. Pour résumer vous ne pouvez employer la fonction saveToFlash() que 100000 fois au cours de la vie du module. Veillez donc à ne pas appeler cette fonction depuis l'intérieur d'une boucle.

Enumération des modules

Obtenir la liste des modules connectés se fait à l'aide de la fonction yFirstModule() qui renvoie le premier module trouvé, il suffit ensuite d'appeler la fonction nextModule() de cet objet pour trouver les modules suivants, et ce tant que la réponse n'est pas un NULL. Ci-dessous un petit exemple listant les module connectés

<HTML>
<HEAD>
 <TITLE>inventory</TITLE>
</HEAD>
<BODY>
<H1>Device list</H1>
<TT>
<?php
    include('yocto_api.php');
    YAPI::RegisterHub("http://127.0.0.1:4444/");
    $module   = YModule::FirstModule();
    while (!is_null($module)) {
        printf("%s (%s)<br>", $module->get_serialNumber(),
               $module->get_productName());
        $module=$module->nextModule();
    }
    YAPI::FreeAPI();
?>
</TT>
</BODY>
</HTML>
 

10.4. API par callback HTTP et filtres NAT

La librairie PHP est capable de fonctionner dans un mode spécial appelé Yocto-API par callback HTTP. Ce mode permet de contrôler des modules Yoctopuce installés derrière un filtre NAT tel qu'un routeur DSL par exemple, et ce sans avoir à un ouvrir un port. L'application typique est le contrôle de modules Yoctopuce situés sur réseau privé depuis un site Web publique.

Le filtre NAT, avantages et inconvénients

Un routeur DSL qui effectue de la traduction d'adresse réseau (NAT) fonctionne un peu comme un petit central téléphonique privé: les postes internes peuvent s'appeler l'un l'autre ainsi que faire des appels vers l'extérieur, mais vu de l'extérieur, il n'existe qu'un numéro de téléphone officiel, attribué au central téléphonique lui-même. Les postes internes ne sont pas atteignables depuis l'extérieur.


Configuration DSL typique, les machines du LAN sont isolées de l'extérieur par le router DSL

Ce qui, transposé en terme de réseau, donne : les appareils connectés sur un réseau domestique peuvent communiquer entre eux en utilisant une adresse IP locale (du genre 192.168.xxx.yyy), et contacter des serveurs sur Internet par leur adresse publique, mais vu de l'extérieur, il n'y a qu'une seule adresse IP officielle, attribuée au routeur DSL exclusivement. Les différents appareils réseau ne sont pas directement atteignables depuis l'extérieur. C'est assez contraignant, mais c'est une protection relativement efficace contre les intrusions.


Les réponses aux requêtes venant des machines du LAN sont routées.


Mais les requêtes venant de l'extérieur sont bloquées.

Voir Internet sans être vu représente un avantage de sécurité énorme. Cependant, cela signifie qu'a priori, on ne peut pas simplement monter son propre serveur Web publique chez soi pour une installation domotique et offrir un accès depuis l'extérieur. Une solution à ce problème, préconisée par de nombreux vendeurs de domotique, consiste à donner une visibilité externe au serveur de domotique lui-même, en ouvrant un port et en ajoutant une règle de routage dans la configuration NAT du routeur DSL. Le problème de cette solution est qu'il expose le serveur de domotique aux attaques externes.

L'API par callback HTTP résoud ce problème sans qu'il soit nécessaire de modifier la configuration du routeur DSL. Le script de contrôle des modules est placé sur un site externe, et c'est le Virtual Hub qui est chargé de l'appeler à intervalle régulier.


L'API par callback HTTP utilise le VirtualHub, et c'est lui qui initie les requêtes.

Configuration

L'API callback se sert donc du Virtual Hub comme passerelle. Toutes les communications sont initiées par le Virtual Hub, ce sont donc des communication sortantes, et par conséquent parfaitement autorisée par le routeur DSL.

Il faut configurer le VirtualHub pour qu'il appelle le script PHP régulièrement. Pour cela il faut:

  1. Lancer un VirtualHub
  2. Accéder à son interface, généralement 127.0.0.1:4444
  3. Cliquer sur le bouton configure de la ligne correspondant au VirtualHub lui-même
  4. Cliquer sur le bouton edit de la section Outgoing callbacks


Cliquer sur le bouton "configure" de la première ligne


Cliquer sur le bouton "edit" de la section Outgoing callbacks.


Et choisir "Yocto-API callback".

Il suffit alors de définir l'URL du script PHP et, si nécessaire, le nom d'utilisateur et le mot de passe pour accéder à cette URL. Les méthodes d'authentification supportées sont basic et digest. La seconde est plus sûre que la première car elle permet de ne pas transférer le mot de passe sur le réseau.

Utilisation

Du point de vue du programmeur, la seule différence se trouve au niveau de l'appel à la fonction yRegisterHub; au lieu d'utiliser une adresse IP, il faut utiliser la chaîne callback (ou http://callback, qui est équivalent).


include("yocto_api.php");
yRegisterHub("callback");

La suite du code reste strictement identique. Sur l'interface du VirtualHub, il y a en bas de la fenêtre de configuration de l'API par callback HTTP un bouton qui permet de tester l'appel au script PHP.

Il est à noter que le script PHP qui contrôle les modules à distance via l'API par callback HTTP ne peut être appelé que par le VirtualHub. En effet, il a besoin des informations postées par le VirtualHub pour fonctionner. Pour coder un site Web qui contrôle des modules Yoctopuce de manière interactive, il faudra créer une interface utilisateur qui stockera dans un fichier ou une base de données les actions à effectuer sur les modules Yoctopuce. Ces actions seront ensuite lues puis exécutés par le script de contrôle.

Problèmes courants

Pour que l'API par callback HTTP fonctionne, l'option de PHP allow_url_fopen doit être activée. Certains hébergeurs de site web ne l'activent pas par défaut. Le problème se manifeste alors avec l'erreur suivante:

error: URL file-access is disabled in the server configuration

Pour activer cette option, il suffit de créer dans le même répertoire que le script PHP de contrôle un fichier .htaccess contenant la ligne suivante:
php_flag "allow_url_fopen" "On"
Selon la politique de sécurité de l'hébergeur, il n'est parfois pas possible d'autoriser cette option à la racine du site web, où même d'installer des scripts PHP recevant des données par un POST HTTP. Dans ce cas il suffit de placer le script PHP dans un sous-répertoire.

Limitations

Cette méthode de fonctionnement qui permet de passer les filtres NAT à moindre frais a malgré tout un prix. Les communications étant initiées par le Virtual Hub à intervalle plus ou moins régulier, le temps de réaction à un événement est nettement plus grand que si les modules Yoctopuce étaient pilotés en direct. Vous pouvez configurer le temps de réaction dans la fenêtre ad-hoc du Virtual Hub, mais il sera nécessairement de quelques secondes dans le meilleur des cas.

Le mode Yocto-API par callback HTTP n'est pour l'instant disponible qu'en PHP, EcmaScript (Node.JS) et Java.

10.5. Gestion des erreurs

Lorsque vous implémentez un programme qui doit interagir avec des modules USB, vous ne pouvez pas faire abstraction de la gestion des erreurs. Il y aura forcément une occasion où un utilisateur aura débranché le périphérique, soit avant de lancer le programme, soit même en pleine opération. La librairie Yoctopuce est prévue pour vous aider à supporter ce genre de comportements, mais votre code doit néanmoins être fait pour se comporter au mieux pour interpréter les erreurs signalées par la librairie.

La manière la plus simple de contourner le problème est celle que nous avons employé pour les petits exemples précédents de ce chapitre: avant d'accéder à un module, on vérifie qu'il est en ligne avec la méthode isOnline() et on suppose ensuite qu'il va y rester pendant la fraction de seconde nécessaire à exécuter les lignes de code suivantes. Ce n'est pas parfait, mais ça peut suffire dans certains cas. Il faut toutefois être conscient qu'on ne peut pas totalement exclure une erreur se produisant après le isOnline(), qui pourrait faire planter le programme. La seule manière de l'éviter est d'implémenter une des deux techniques de gestion des erreurs décrites ci-dessous.

La méthode recommandée par la plupart des langages de programmation pour la gestion des erreurs imprévisibles est l'utilisation d'exceptions. C'est le comportement par défaut de la librairie Yoctopuce. Si une erreur se produit alors qu'on essaie d'accéder à un module, la librairie va lancer une exception. Dans ce cas, de trois choses l'une:

Comme cette dernière situation n'est pas la plus souhaitable, la librairie Yoctopuce offre une autre alternative pour la gestion des erreurs, permettant de faire un programme robuste sans devoir attraper les exceptions à chaque ligne de code. Il suffit d'appeler la fonction YAPI.DisableExceptions() pour commuter la librairie dans un mode où les exceptions de chaque fonction sont systématiquement remplacées par des valeurs de retour particulières, qui peuvent être testées par l'appelant lorsque c'est pertinent. Le nom de la valeur de retour en cas d'erreur pour chaque fonction est systématiquement documenté dans la référence de la librairie. Il suit toujours la même logique: une méthode get_state() retournera une valeur Y_STATE_INVALID, une méthode get_currentValue retournera une valeur Y_CURRENTVALUE_INVALID, etc. Dans tous les cas, la valeur retournée sera du type attendu, et ne sera pas un pointeur nul qui risquerait de faire crasher votre programme. Au pire, si vous affichez la valeur sans la tester, elle sera hors du cadre attendu pour la valeur retournée. Dans le cas de fonctions qui ne retournent à priori pas d'information, la valeur de retour sera YAPI_SUCCESS si tout va bien, et un code d'erreur différent en cas d'échec.

Quand vous travaillez sans les exceptions, il est possible d'obtenir un code d'erreur et un message expliquant l'origine de l'erreur en le demandant à l'objet qui a retourné une erreur à l'aide des méthodes errType() et errMessage(). Ce sont les même informations qui auraient été associées à l'exception si elles avaient été actives.

11. Utilisation du Yocto-RS485 en C++

Le C++ n'est pas le langage le plus simple à maîtriser. Pourtant, si on prend soin à se limiter aux fonctionnalités essentielles, c'est un langage tout à fait utilisable pour des petits programmes vite faits, et qui a l'avantage d'être très portable d'un système d'exploitation à l'autre. Sous Windows, tous les exemples et les modèles de projet sont testés avec Microsoft Visual Studio 2010 Express, disponible gratuitement sur le site de Microsoft 26. Sous Mac OS X, tous les exemples et les modèles de projet sont testés avec XCode 4, disponible sur l'App Store. Par ailleurs, aussi bien sous Mac OS X que sous Linux, vous pouvez compiler les exemples en ligne de commande avec GCC en utilisant le GNUmakefile fourni. De même, sous Windows, un Makefile pour permet de compiler les exemples en ligne de commande, et en pleine connaissance des arguments de compilation et link.

Les librairies Yoctopuce27 pour C++ vous sont fournies au format source dans leur intégralité. Une partie de la librairie de bas-niveau est écrite en C pur sucre, mais vous n'aurez à priori pas besoin d'interagir directement avec elle: tout a été fait pour que l'interaction soit le plus simple possible depuis le C++. La librairie vous est fournie bien entendu aussi sous forme binaire, de sorte à pouvoir la linker directement si vous le préférez.

Vous allez rapidement vous rendre compte que l'API C++ defini beaucoup de fonctions qui retournent des objets. Vous ne devez jamais désallouer ces objets vous-même. Ils seront désalloués automatiquement par l'API à la fin de l'application.

Afin des les garder simples, tous les exemples fournis dans cette documentation sont des applications consoles. Il va de soit que que les fonctionnement des librairies est strictement identiques si vous les intégrez dans une application dotée d'une interface graphique. Vous trouverez dans la dernière section de ce chapitre toutes les informations nécessaires à la création d'un projet à neuf linké avec les librairies Yoctopuce.

11.1. Contrôle de la fonction SerialPort

Il suffit de quelques lignes de code pour piloter un Yocto-RS485. Voici le squelette d'un fragment de code C++ qui utilise la fonction SerialPort.


#include "yocto_api.h"
#include "yocto_serialport.h"

[...]
// On active la détection des modules sur USB
String errmsg;
YAPI::RegisterHub("usb", errmsg);
[...]

// On récupère l'objet permettant d'intéragir avec le module
YSerialPort *serialport;
serialport = YSerialPort::FindSerialPort("RS485MK1-123456.serialPort");

// Pour gérer le hot-plug, on vérifie que le module est là
if(serialport->isOnline())
{
    // Utiliser serialport->get_serialMode()
    [...]
}

Voyons maintenant en détail ce que font ces quelques lignes.

yocto_api.h et yocto_serialport.h

Ces deux fichiers inclus permettent d'avoir accès aux fonctions permettant de gérer les modules Yoctopuce. yocto_api.h doit toujours être utilisé, yocto_serialport.h est nécessaire pour gérer les modules contenant un port série, comme le Yocto-RS485.

YAPI::RegisterHub

La fonction YAPI::RegisterHub initialise l'API de Yoctopuce en indiquant où les modules doivent être recherchés. Utilisée avec le paramètre "usb", elle permet de travailler avec les modules connectés localement à la machine. Si l'initialisation se passe mal, cette fonction renverra une valeur différente de YAPI_SUCCESS, et retournera via le paramètre errmsg un explication du problème.

YSerialPort::FindSerialPort

La fonction YSerialPort::FindSerialPort permet de retrouver un port série en fonction du numéro de série de son module hôte et de son nom de fonction. Mais vous pouvez tout aussi bien utiliser des noms logiques que vous auriez préalablement configurés. Imaginons un module Yocto-RS485 avec le numéros de série RS485MK1-123456 que vous auriez appelé "MonModule" et dont vous auriez nommé la fonction serialPort "MaFonction", les cinq appels suivants seront strictement équivalents (pour autant que MaFonction ne soit définie qu'une fois, pour éviter toute ambiguïté):


YSerialPort *serialport = YSerialPort::FindSerialPort("RS485MK1-123456.serialPort");
YSerialPort *serialport = YSerialPort::FindSerialPort("RS485MK1-123456.MaFonction");
YSerialPort *serialport = YSerialPort::FindSerialPort("MonModule.serialPort");
YSerialPort *serialport = YSerialPort::FindSerialPort("MonModule.MaFonction");
YSerialPort *serialport = YSerialPort::FindSerialPort("MaFonction");

YSerialPort::FindSerialPort renvoie un objet que vous pouvez ensuite utiliser à loisir pour contrôler le port série.

isOnline

La méthode isOnline() de l'objet renvoyé par YSerialPort::FindSerialPort permet de savoir si le module correspondant est présent et en état de marche.

modbusWrite* et modbusRead*

Les méthodes modbusWrite*() et modbusRead*()de l'objet renvoyé par YFindSerialPort permettent de communiquer en MODDUS sur la liaison RS485.

Un exemple réel

Lancez votre environnement C++ et ouvrez le projet exemple correspondant, fourni dans le répertoire Examples/Doc-GettingStarted-Yocto-RS485 de la librairie Yoctopuce. Si vous préférez travailler avec votre éditeur de texte préféré, ouvrez le fichier main.cpp, vous taperez simplement make dans le répertoire de l'exemple pour le compiler.

Vous reconnaîtrez dans cet exemple l'utilisation des fonctions expliquées ci-dessus, cette fois utilisées avec le décorum nécessaire à en faire un petit programme d'exemple concret.

#include "yocto_api.h"
#include "yocto_serialport.h"
#include <iostream>
#include <stdlib.h>

using namespace std;

int main(int argc, const char * argv[])
{
  string errmsg;

  if (YAPI::RegisterHub("usb", errmsg) != YAPI::SUCCESS) {
    cerr << "RegisterHub error : " << errmsg << endl;
    return 1;
  }

  YSerialPort *serialPort;
  if (argc > 1 && string(argv[1]) != "any") {
    serialPort = YSerialPort::FindSerialPort(string(argv[1]));
  } else {
    serialPort = YSerialPort::FirstSerialPort();
    if (serialPort == NULL) {
      cerr << "No module connected (check USB cable)" << endl;
      return 1;
    }
  }
  if (!serialPort->isOnline()) {
    cout << "Module not connected (check identification and USB cable)" << endl;
    return 1;
  }

  int slave, reg, val;
  string cmd;
  do {
    cout << "Please enter the MODBUS slave address (1...255)" << endl;
    cout << "Slave: ";
    cin >> slave;
  } while(slave < 1 || slave > 255);
  do {
    cout << "Please select a Coil No (>=1), Input Bit No (>=10001+)," << endl;
    cout << "       Input Register No (>=30001) or Register No (>=40001)" << endl;
    cout << "No: " ;
    cin >> reg;
  } while(reg < 1 || reg >= 50000 || (reg % 10000) == 0);
  while(serialPort->isOnline()) {
    if(reg >= 40001) {
      val = serialPort->modbusReadRegisters(slave, reg - 40001, 1)[0];
    } else if(reg >= 30001) {
      val = serialPort->modbusReadInputRegisters(slave, reg - 30001, 1)[0];
    } else if(reg >= 10001) {
      val = serialPort->modbusReadInputBits(slave, reg - 10001, 1)[0];
    } else {
      val = serialPort->modbusReadBits(slave, reg - 1, 1)[0];
    }
    cout << "Current value: " << val << endl;
    cout << "Press R to read again, Q to quit";
    if((reg % 30000) < 10000) {
      cout << " or enter a new value";
    }
    cout << ": " << endl;
    cin >> cmd;
    if(cmd == "q" || cmd == "Q") break;
    if (cmd != "r" && cmd != "R" && (reg % 30000) < 10000) {
      val = atoi(cmd.c_str());
      if(reg >= 30001) {
        serialPort->modbusWriteRegister(slave, reg - 30001, val);
      } else {
        serialPort->modbusWriteBit(slave, reg - 1, val);
      }
    }
  }
  YAPI::FreeAPI();
  return 0;
}
 

11.2. Contrôle de la partie module

Chaque module peut-être contrôlé d'une manière similaire, vous trouverez ci dessous un simple programme d'exemple affichant les principaux paramètres d'un module et permettant d'activer la balise de localisation.

#include <iostream>
#include <stdlib.h>

#include "yocto_api.h"

using namespace std;

static void usage(const char *exe)
{
  cout << "usage: " << exe << " <serial or logical name> [ON/OFF]" << endl;
  exit(1);
}


int main(int argc, const char * argv[])
{
  string      errmsg;

  // Setup the API to use local USB devices
  if(YAPI::RegisterHub("usb", errmsg) != YAPI::SUCCESS) {
    cerr << "RegisterHub error: " << errmsg << endl;
    return 1;
  }

  if(argc < 2)
    usage(argv[0]);

  YModule *module = YModule::FindModule(argv[1]);  // use serial or logical name

  if (module->isOnline()) {
    if (argc > 2) {
      if (string(argv[2]) == "ON")
        module->set_beacon(Y_BEACON_ON);
      else
        module->set_beacon(Y_BEACON_OFF);
    }
    cout << "serial:       " << module->get_serialNumber() << endl;
    cout << "logical name: " << module->get_logicalName() << endl;
    cout << "luminosity:   " << module->get_luminosity() << endl;
    cout << "beacon:       ";
    if (module->get_beacon() == Y_BEACON_ON)
      cout << "ON" << endl;
    else
      cout << "OFF" << endl;
    cout << "upTime:       " << module->get_upTime() / 1000 << " sec" << endl;
    cout << "USB current:  " << module->get_usbCurrent() << " mA" << endl;
    cout << "Logs:" << endl << module->get_lastLogs() << endl;
  } else {
    cout << argv[1] << " not connected (check identification and USB cable)"
         << endl;
  }
  YAPI::FreeAPI();
  return 0;
}
 

Chaque propriété xxx du module peut être lue grâce à une méthode du type get_xxxx(), et les propriétés qui se sont pas en lecture seule peuvent être modifiées à l'aide de la méthode set_xxx() Pour plus de détails concernant ces fonctions utilisées, reportez-vous aux chapitre API

Modifications des réglages du module

Lorsque que vous souhaitez modifier les réglages d'un module, il suffit d'appeler la fonction set_xxx() correspondante, cependant cette modification n'a lieu que dans la mémoire vive du module: si le module redémarre, les modifications seront perdues. Pour qu'elle soient mémorisées de manière persistante, il est nécessaire de demander au module de sauvegarder sa configuration courante dans sa mémoire non volatile. Pour cela il faut utiliser la méthode saveToFlash(). Inversement il est possible de forcer le module à oublier ses réglages courants en utilisant la méthode revertFromFlash(). Ce petit exemple ci-dessous vous permet changer le nom logique d'un module.

#include <iostream>
#include <stdlib.h>

#include "yocto_api.h"

using namespace std;

static void usage(const char *exe)
{
  cerr << "usage: " << exe << " <serial> <newLogicalName>" << endl;
  exit(1);
}

int main(int argc, const char * argv[])
{
  string      errmsg;

  // Setup the API to use local USB devices
  if(YAPI::RegisterHub("usb", errmsg) != YAPI::SUCCESS) {
    cerr << "RegisterHub error: " << errmsg << endl;
    return 1;
  }

  if(argc < 2)
    usage(argv[0]);

  YModule *module = YModule::FindModule(argv[1]);  // use serial or logical name

  if (module->isOnline()) {
    if (argc >= 3) {
      string newname =  argv[2];
      if (!yCheckLogicalName(newname)) {
        cerr << "Invalid name (" << newname << ")" << endl;
        usage(argv[0]);
      }
      module->set_logicalName(newname);
      module->saveToFlash();
    }
    cout << "Current name: " << module->get_logicalName() << endl;
  } else {
    cout << argv[1] << " not connected (check identification and USB cable)"
         << endl;
  }
  YAPI::FreeAPI();
  return 0;
}
 

Attention, le nombre de cycles d'écriture de la mémoire non volatile du module est limité. Passé cette limite plus rien ne garantit que la sauvegarde des réglages se passera correctement. Cette limite, liée à la technologie employée par le micro-processeur du module se situe aux alentour de 100000 cycles. Pour résumer vous ne pouvez employer la fonction saveToFlash() que 100000 fois au cours de la vie du module. Veillez donc à ne pas appeler cette fonction depuis l'intérieur d'une boucle.

Enumeration des modules

Obtenir la liste des modules connectés se fait à l'aide de la fonction yFirstModule() qui renvoie le premier module trouvé, il suffit ensuite d'appeler la fonction nextModule() de cet objet pour trouver les modules suivants, et ce tant que la réponse n'est pas un NULL. Ci-dessous un petit exemple listant les module connectés

#include <iostream>

#include "yocto_api.h"

using namespace std;

int main(int argc, const char * argv[])
{
  string      errmsg;

  // Setup the API to use local USB devices
  if(YAPI::RegisterHub("usb", errmsg) != YAPI::SUCCESS) {
    cerr << "RegisterHub error: " << errmsg << endl;
    return 1;
  }

  cout << "Device list: " << endl;

  YModule *module = YModule::FirstModule();
  while (module != NULL) {
    cout << module->get_serialNumber() << " ";
    cout << module->get_productName()  << endl;
    module = module->nextModule();
  }
  YAPI::FreeAPI();
  return 0;
}
 

11.3. Gestion des erreurs

Lorsque vous implémentez un programme qui doit interagir avec des modules USB, vous ne pouvez pas faire abstraction de la gestion des erreurs. Il y aura forcément une occasion où un utilisateur aura débranché le périphérique, soit avant de lancer le programme, soit même en pleine opération. La librairie Yoctopuce est prévue pour vous aider à supporter ce genre de comportements, mais votre code doit néanmoins être fait pour se comporter au mieux pour interpréter les erreurs signalées par la librairie.

La manière la plus simple de contourner le problème est celle que nous avons employé pour les petits exemples précédents de ce chapitre: avant d'accéder à un module, on vérifie qu'il est en ligne avec la méthode isOnline() et on suppose ensuite qu'il va y rester pendant la fraction de seconde nécessaire à exécuter les lignes de code suivantes. Ce n'est pas parfait, mais ça peut suffire dans certains cas. Il faut toutefois être conscient qu'on ne peut pas totalement exclure une erreur se produisant après le isOnline(), qui pourrait faire planter le programme. La seule manière de l'éviter est d'implémenter une des deux techniques de gestion des erreurs décrites ci-dessous.

La méthode recommandée par la plupart des langages de programmation pour la gestion des erreurs imprévisibles est l'utilisation d'exceptions. C'est le comportement par défaut de la librairie Yoctopuce. Si une erreur se produit alors qu'on essaie d'accéder à un module, la librairie va lancer une exception. Dans ce cas, de trois choses l'une:

Comme cette dernière situation n'est pas la plus souhaitable, la librairie Yoctopuce offre une autre alternative pour la gestion des erreurs, permettant de faire un programme robuste sans devoir attraper les exceptions à chaque ligne de code. Il suffit d'appeler la fonction YAPI.DisableExceptions() pour commuter la librairie dans un mode où les exceptions de chaque fonction sont systématiquement remplacées par des valeurs de retour particulières, qui peuvent être testées par l'appelant lorsque c'est pertinent. Le nom de la valeur de retour en cas d'erreur pour chaque fonction est systématiquement documenté dans la référence de la librairie. Il suit toujours la même logique: une méthode get_state() retournera une valeur Y_STATE_INVALID, une méthode get_currentValue retournera une valeur Y_CURRENTVALUE_INVALID, etc. Dans tous les cas, la valeur retournée sera du type attendu, et ne sera pas un pointeur nul qui risquerait de faire crasher votre programme. Au pire, si vous affichez la valeur sans la tester, elle sera hors du cadre attendu pour la valeur retournée. Dans le cas de fonctions qui ne retournent à priori pas d'information, la valeur de retour sera YAPI_SUCCESS si tout va bien, et un code d'erreur différent en cas d'échec.

Quand vous travaillez sans les exceptions, il est possible d'obtenir un code d'erreur et un message expliquant l'origine de l'erreur en le demandant à l'objet qui a retourné une erreur à l'aide des méthodes errType() et errMessage(). Ce sont les même informations qui auraient été associées à l'exception si elles avaient été actives.

11.4. Intégration de la librairie Yoctopuce en C++

Selon vos besoins et vos préférences, vous pouvez être mené à intégrer de différentes manières la librairie à vos projets. Cette section explique comment implémenter les différentes options.

Intégration au format source (recommandé)

L'intégration de toutes les sources de la librairie dans vos projets a plusieurs avantages:

Pour intégrer le code source, le plus simple est d'inclure simplement le répertoire Sources de la librairie Yoctopuce à votre IncludePath, et d'ajouter tous les fichiers de ce répertoire (y compris le sous-répertoire yapi) à votre projet.

Pour que votre projet se construise ensuite correctement, il faudra linker avec votre projet les librairies systèmes requises, à savoir:

Intégration en librairie statique

L'intégration de de la librairie Yoctopuce sous forme de librairie statique permet une compilation rapide du programme en une seule commande. Elle ne requiert pas non plus l'installation d'une librairie dynamique spécifique à Yoctopuce sur le système final, tout est dans l'exécutable.

Pour utiliser la librairie statique, il faut la compiler à l'aide du shell script build.sh sous UNIX, ou build.bat sous Windows. Ce script qui se situe à la racine de la librairie, détecte l'OS et recompile toutes les librairies ainsi que les exemples correspondants.

Ensuite, pour intégrer la librairie statique Yoctopuce à votre projet, vous devez inclure le répertoire Sources de la librairie Yoctopuce à votre IncludePath, et ajouter le sous-répertoire de Binaries/... correspondant à votre système d'exploitation à votre LibPath.

Finalement, pour que votre projet se construise ensuite correctement, il faudra linker avec votre projet la librairie Yoctopuce et les librairies systèmes requises:

Attention, sous Linux, si vous voulez compiler en ligne de commande avec GCC, il est en général souhaitable de linker les librairies systèmes en dynamique et non en statique. Pour mélanger sur la même ligne de commande des librairies statiques et dynamiques, il faut passer les arguments suivants:

gcc (...) -Wl,-Bstatic -lyocto-static -Wl,-Bdynamic -lm -lpthread -lusb-1.0 -lstdc++

Intégration en librairie dynamique

L'intégration de la librairie Yoctopuce sous forme de librairie dynamique permet de produire un exécutable plus petit que les deux méthodes précédentes, et de mettre éventuellement à jour cette librairie si un correctif s'avérait nécessaire sans devoir recompiler le code source de l'application. Par contre, c'est un mode d'intégration qui exigera systématiquement de copier la librairie dynamique sur la machine cible ou l'application devra être lancée (yocto.dll sous Windows, libyocto.so.1.0.1 sous Mac OS X et Linux).

Pour utiliser la librairie dynamique, il faut la compiler à l'aide du shell script build.sh sous UNIX, ou build.bat sous Windows. Ce script qui se situe à la racine de la librairie, détecte l'OS et recompile toutes les librairies ainsi que les exemples correspondant.

Ensuite, pour intégrer la librairie dynamique Yoctopuce à votre projet, vous devez inclure le répertoire Sources de la librairie Yoctopuce à votre IncludePath, et ajouter le sous-répertoire de Binaries/... correspondant à votre système d'exploitation à votre LibPath.

Finalement, pour que votre projet se construise ensuite correctement, il faudra linker avec votre projet la librairie dynamique Yoctopuce et les librairies systèmes requises:

Avec GCC, la ligne de commande de compilation est simplement:

gcc (...) -lyocto -lm -lpthread -lusb-1.0 -lstdc++

12. Utilisation du Yocto-RS485 en Objective-C

Objective-C est le langage de prédilection pour programmer sous Mac OS X, en raison de son intégration avec le générateur d'interfaces Cocoa. Pour pouvoir utiliser la libraire Objective-C vous aurez impérativement besoin de XCode 4.2, qui est disponible gratuitement sous Lion. Si vous êtes encore sous Snow Leopard il vous faudra être enregistré comme développeur auprès d'Apple pour pourvoir télécharger XCode 4.2. La librairie Yoctopuce est compatible ARC. Il vous sera donc possible de coder vos projet soit en utilisant la traditionnelle méthode de retain / release, soit en activant l'Automatic Reference Counting.

Les librairies Yoctopuce28 pour Objective-C vous sont fournies au format source dans leur intégralité. Une partie de la librairie de bas-niveau est écrite en C pur sucre, mais vous n'aurez à priori pas besoin d'interagir directement avec elle: tout a été fait pour que l'interaction soit le plus simple possible depuis Objective-C.

Vous allez rapidement vous rendre compte que l'API Objective-C définit beaucoup de fonctions qui retournent des objets. Vous ne devez jamais désallouer ces objets vous-même. Ils seront désalloués automatiquement par l'API à la fin de l'application.

Afin des les garder simples, tous les exemples fournis dans cette documentation sont des applications consoles. Il va de soit que que les fonctionnement des librairies est strictement identiques si vous les intégrez dans une application dotée d'une interface graphique. Vous trouverez sur le blog de Yoctopuce un exemple détaillé29 avec des séquences vidéo montrant comment intégrer les fichiers de la librairie à vos projets.

12.1. Contrôle de la fonction SerialPort

Il suffit de quelques lignes de code pour piloter un Yocto-RS485. Voici le squelette d'un fragment de code Objective-C qui utilise la fonction SerialPort.


#import "yocto_api.h"
#import "yocto_serialport.h"

...
NSError *error;
[YAPI RegisterHub:@"usb": &error]
...
// On récupère l'objet représentant le module (ici connecté en local sur USB)
serialport = [YSerialPort FindSerialPort:@"RS485MK1-123456.serialPort"];

// Pour gérer le hot-plug, on vérifie que le module est là
if([serialport isOnline])
{
    // Utiliser [serialport get_serialMode]
    ...
}

Voyons maintenant en détail ce que font ces quelques lignes.

yocto_api.h et yocto_serialport.h

Ces deux fichiers importés permettent d'avoir accès aux fonctions permettant de gérer les modules Yoctopuce. yocto_api.h doit toujours être utilisé, yocto_serialport.h est nécessaire pour gérer les modules contenant un port série, comme le Yocto-RS485.

[YAPI RegisterHub]

La fonction [YAPI RegisterHub] initialise l'API de Yoctopuce en indiquant où les modules doivent être recherchés. Utilisée avec le paramètre @"usb", elle permet de travailler avec les modules connectés localement à la machine. Si l'initialisation se passe mal, cette fonction renverra une valeur différente de YAPI_SUCCESS, et retournera via le paramètre errmsg un explication du problème.

[SerialPort FindSerialPort]

La fonction [SerialPort FindSerialPort], permet de retrouver un port série en fonction du numéro de série de son module hôte et de son nom de fonction. Mais vous pouvez tout aussi bien utiliser des noms logiques que vous auriez préalablement configurés. Imaginons un module Yocto-RS485 avec le numéros de série RS485MK1-123456 que vous auriez appelé "MonModule" et dont vous auriez nommé la fonction serialPort "MaFonction", les cinq appels suivants seront strictement équivalents (pour autant que MaFonction ne soit définie qu'une fois, pour éviter toute ambiguïté):


YSerialPort *serialport = [YSerialPort FindSerialPort:@"RS485MK1-123456.serialPort"];
YSerialPort *serialport = [YSerialPort FindSerialPort:@"RS485MK1-123456.MaFonction"];
YSerialPort *serialport = [YSerialPort FindSerialPort:@"MonModule.serialPort"];
YSerialPort *serialport = [YSerialPort FindSerialPort:@"MonModule.MaFonction"];
YSerialPort *serialport = [YSerialPort FindSerialPort:@"MaFonction"];

[YSerialPort FindSerialPort] renvoie un objet que vous pouvez ensuite utiliser à loisir pour contrôler le port série.

isOnline

La méthode isOnline de l'objet renvoyé par [YSerialPort FindSerialPort] permet de savoir si le module correspondant est présent et en état de marche.

modbusWrite* et modbusRead*

Les méthodes modbusWrite*() et modbusRead*()de l'objet renvoyé par YFindSerialPort.FindSerialPort permettent de communiquer en MODDUS sur la liaison RS485.

Un exemple réel

Lancez Xcode 4.2 et ouvrez le projet exemple correspondant, fourni dans le répertoire Examples/Doc-GettingStarted-Yocto-RS485 de la librairie Yoctopuce.

Vous reconnaîtrez dans cet exemple l'utilisation des fonctions expliquées ci-dessus, cette fois utilisées avec le décorum nécessaire à en faire un petit programme d'exemple concret.

#import <Foundation/Foundation.h>
#import "yocto_api.h"
#import "yocto_serialport.h"

int main(int argc, const char * argv[])
{
  NSError *error;
  char cmd[50] = {0};

  @autoreleasepool {
    // Setup the API to use local USB devices
    if([YAPI RegisterHub:@"usb": &error] != YAPI_SUCCESS) {
      NSLog(@"RegisterHub error: %@", [error localizedDescription]);
      return 1;
    }

    YSerialPort *serialPort;
    if (argc > 1) {
      NSString     *target = [NSString stringWithUTF8String:argv[1]];
      serialPort = [YSerialPort FindSerialPort:target];
    } else {
      serialPort = [YSerialPort FirstSerialPort];
      if (serialPort == NULL) {
        NSLog(@"No module connected (check USB cable)");
        return 1;
      }
    }

    int slave, reg, val;
    do {
      NSLog(@"Please enter the MODBUS slave address (1...255)");
      NSLog(@"Slave: ");
      fgets(cmd, sizeof(cmd), stdin);
      slave = atoi(cmd);
    } while(slave < 1 || slave > 255);
    do {
      NSLog(@"Please select a Coil No (>=1), Input Bit No (>=10001+),");
      NSLog(@"       Register No (>=30001) or Input Register No (>=40001)");
      NSLog(@"No: ");
      fgets(cmd, sizeof(cmd), stdin);
      reg = atoi(cmd);
    } while(reg < 1 || reg >= 50000 || (reg % 10000) == 0);
    while(true) {
      if(reg >= 40001) {
        val = (int)[[[serialPort modbusReadRegisters:slave :reg - 40001 :1] objectAtIndex:0]
                    integerValue];
      } else if(reg >= 30001) {
        val = (int)[[[serialPort modbusReadInputRegisters:slave :reg - 30001 :1] objectAtIndex:0]
                    integerValue];
      } else if(reg >= 10001) {
        val = (int)[[[serialPort modbusReadInputBits:slave :reg - 10001 :1] objectAtIndex:0]
                    integerValue];
      } else {
        val = (int)[[[serialPort modbusReadBits:slave :reg - 1 :1] objectAtIndex:0] integerValue];
      }
      NSLog(@"Current value: %d" , val );
      NSLog(@"Press R to read again, Q to quit");
      if((reg % 30000) < 10000) {
        NSLog(@" or enter a new value");
      }
      NSLog(@": ");
      fgets(cmd, sizeof(cmd), stdin);
      if(cmd[0] == 'q' || cmd[0] == 'Q') break;
      if (cmd[0] != 'r' && cmd[0] != 'R' && (reg % 30000) < 10000) {
        val = atoi(cmd);
        if(reg >= 30001) {
          [serialPort modbusWriteRegister:slave :reg - 30001 :val];
        } else {
          [serialPort modbusWriteBit:slave :reg - 1 :val];
        }
      }
    }
    [YAPI FreeAPI];
  }
  return 0;
}
 

12.2. Contrôle de la partie module

Chaque module peut-être contrôlé d'une manière similaire, vous trouverez ci dessous un simple programme d'exemple affichant les principaux paramètres d'un module et permettant d'activer la balise de localisation.

#import <Foundation/Foundation.h>
#import "yocto_api.h"

static void usage(const char *exe)
{
  NSLog(@"usage: %s <serial or logical name> [ON/OFF]\n", exe);
  exit(1);
}


int main (int argc, const char * argv[])
{
  NSError *error;

  @autoreleasepool {
    // Setup the API to use local USB devices
    if([YAPI RegisterHub:@"usb": &error] != YAPI_SUCCESS) {
      NSLog(@"RegisterHub error: %@", [error localizedDescription]);
      return 1;
    }
    if(argc < 2)
      usage(argv[0]);
    NSString *serial_or_name = [NSString stringWithUTF8String:argv[1]];
    // use serial or logical name
    YModule *module = [YModule FindModule:serial_or_name];
    if ([module isOnline]) {
      if (argc > 2) {
        if (strcmp(argv[2], "ON") == 0)
          [module setBeacon:Y_BEACON_ON];
        else
          [module setBeacon:Y_BEACON_OFF];
      }
      NSLog(@"serial:       %@\n", [module serialNumber]);
      NSLog(@"logical name: %@\n", [module logicalName]);
      NSLog(@"luminosity:   %d\n", [module luminosity]);
      NSLog(@"beacon:       ");
      if ([module beacon] == Y_BEACON_ON)
        NSLog(@"ON\n");
      else
        NSLog(@"OFF\n");
      NSLog(@"upTime:       %ld sec\n", [module upTime] / 1000);
      NSLog(@"USB current:  %d mA\n",  [module usbCurrent]);
      NSLog(@"logs:  %@\n",  [module get_lastLogs]);
    } else {
      NSLog(@"%@ not connected (check identification and USB cable)\n",
            serial_or_name);
    }
    [YAPI FreeAPI];
  }
  return 0;
}
 

Chaque propriété xxx du module peut être lue grâce à une méthode du type get_xxxx, et les propriétés qui se sont pas en lecture seule peuvent être modifiées à l'aide de la méthode set_xxx: Pour plus de détails concernant ces fonctions utilisées, reportez-vous aux chapitre API

Modifications des réglages du module

Lorsque que vous souhaitez modifier les réglages d'un module, il suffit d'appeler la fonction set_xxx: correspondante, cependant cette modification n'a lieu que dans la mémoire vive du module: si le module redémarre, les modifications seront perdues. Pour qu'elle soient mémorisées de manière persistante, il est nécessaire de demander au module de sauvegarder sa configuration courante dans sa mémoire non volatile. Pour cela il faut utiliser la méthode saveToFlash. Inversement il est possible de forcer le module à oublier ses réglages courants en utilisant la méthode revertFromFlash. Ce petit exemple ci-dessous vous permet changer le nom logique d'un module.

#import <Foundation/Foundation.h>
#import "yocto_api.h"

static void usage(const char *exe)
{
  NSLog(@"usage: %s <serial> <newLogicalName>\n", exe);
  exit(1);
}


int main (int argc, const char * argv[])
{
  NSError *error;

  @autoreleasepool {
    // Setup the API to use local USB devices
    if([YAPI RegisterHub:@"usb" :&error] != YAPI_SUCCESS) {
      NSLog(@"RegisterHub error: %@", [error localizedDescription]);
      return 1;
    }

    if(argc < 2)
      usage(argv[0]);

    NSString *serial_or_name = [NSString stringWithUTF8String:argv[1]];
    // use serial or logical name
    YModule *module = [YModule FindModule:serial_or_name];

    if (module.isOnline) {
      if (argc >= 3) {
        NSString *newname =  [NSString stringWithUTF8String:argv[2]];
        if (![YAPI CheckLogicalName:newname]) {
          NSLog(@"Invalid name (%@)\n", newname);
          usage(argv[0]);
        }
        module.logicalName = newname;
        [module saveToFlash];
      }
      NSLog(@"Current name: %@\n", module.logicalName);
    } else {
      NSLog(@"%@ not connected (check identification and USB cable)\n",
            serial_or_name);
    }
    [YAPI FreeAPI];
  }
  return 0;
}
 

Attention, le nombre de cycles d'écriture de la mémoire non volatile du module est limité. Passé cette limite plus rien ne garantit que la sauvegarde des réglages se passera correctement. Cette limite, liée à la technologie employée par le micro-processeur du module se situe aux alentour de 100000 cycles. Pour résumer vous ne pouvez employer la fonction saveToFlash que 100000 fois au cours de la vie du module. Veillez donc à ne pas appeler cette fonction depuis l'intérieur d'une boucle.

Enumeration des modules

Obtenir la liste des modules connectés se fait à l'aide de la fonction yFirstModule() qui renvoie le premier module trouvé, il suffit ensuite d'appeler la fonction nextModule() de cet objet pour trouver les modules suivants, et ce tant que la réponse n'est pas un NULL. Ci-dessous un petit exemple listant les module connectés

#import <Foundation/Foundation.h>
#import "yocto_api.h"

int main (int argc, const char * argv[])
{
  NSError *error;

  @autoreleasepool {
    // Setup the API to use local USB devices
    if([YAPI RegisterHub:@"usb" :&error] != YAPI_SUCCESS) {
      NSLog(@"RegisterHub error: %@\n", [error localizedDescription]);
      return 1;
    }

    NSLog(@"Device list:\n");

    YModule *module = [YModule FirstModule];
    while (module != nil) {
      NSLog(@"%@ %@", module.serialNumber, module.productName);
      module = [module nextModule];
    }
    [YAPI FreeAPI];
  }
  return 0;
}
 

12.3. Gestion des erreurs

Lorsque vous implémentez un programme qui doit interagir avec des modules USB, vous ne pouvez pas faire abstraction de la gestion des erreurs. Il y aura forcément une occasion où un utilisateur aura débranché le périphérique, soit avant de lancer le programme, soit même en pleine opération. La librairie Yoctopuce est prévue pour vous aider à supporter ce genre de comportements, mais votre code doit néanmoins être fait pour se comporter au mieux pour interpréter les erreurs signalées par la librairie.

La manière la plus simple de contourner le problème est celle que nous avons employé pour les petits exemples précédents de ce chapitre: avant d'accéder à un module, on vérifie qu'il est en ligne avec la méthode isOnline() et on suppose ensuite qu'il va y rester pendant la fraction de seconde nécessaire à exécuter les lignes de code suivantes. Ce n'est pas parfait, mais ça peut suffire dans certains cas. Il faut toutefois être conscient qu'on ne peut pas totalement exclure une erreur se produisant après le isOnline(), qui pourrait faire planter le programme. La seule manière de l'éviter est d'implémenter une des deux techniques de gestion des erreurs décrites ci-dessous.

La méthode recommandée par la plupart des langages de programmation pour la gestion des erreurs imprévisibles est l'utilisation d'exceptions. C'est le comportement par défaut de la librairie Yoctopuce. Si une erreur se produit alors qu'on essaie d'accéder à un module, la librairie va lancer une exception. Dans ce cas, de trois choses l'une:

Comme cette dernière situation n'est pas la plus souhaitable, la librairie Yoctopuce offre une autre alternative pour la gestion des erreurs, permettant de faire un programme robuste sans devoir attraper les exceptions à chaque ligne de code. Il suffit d'appeler la fonction YAPI.DisableExceptions() pour commuter la librairie dans un mode où les exceptions de chaque fonction sont systématiquement remplacées par des valeurs de retour particulières, qui peuvent être testées par l'appelant lorsque c'est pertinent. Le nom de la valeur de retour en cas d'erreur pour chaque fonction est systématiquement documenté dans la référence de la librairie. Il suit toujours la même logique: une méthode get_state() retournera une valeur Y_STATE_INVALID, une méthode get_currentValue retournera une valeur Y_CURRENTVALUE_INVALID, etc. Dans tous les cas, la valeur retournée sera du type attendu, et ne sera pas un pointeur nul qui risquerait de faire crasher votre programme. Au pire, si vous affichez la valeur sans la tester, elle sera hors du cadre attendu pour la valeur retournée. Dans le cas de fonctions qui ne retournent à priori pas d'information, la valeur de retour sera YAPI_SUCCESS si tout va bien, et un code d'erreur différent en cas d'échec.

Quand vous travaillez sans les exceptions, il est possible d'obtenir un code d'erreur et un message expliquant l'origine de l'erreur en le demandant à l'objet qui a retourné une erreur à l'aide des méthodes errType() et errMessage(). Ce sont les même informations qui auraient été associées à l'exception si elles avaient été actives.

13. Utilisation du Yocto-RS485 en VisualBasic .NET

VisualBasic a longtemps été la porte d'entrée privilégiée vers le monde Microsoft. Nous nous devions donc d'offrir notre interface pour ce langage, même si la nouvelle tendance est le C#. Tous les exemples et les modèles de projet sont testés avec Microsoft Visual Basic 2010 Express, disponible gratuitement sur le site de Microsoft 30.

13.1. Installation

Téléchargez la librairie Yoctopuce pour Visual Basic depuis le site web de Yoctopuce31. Il n'y a pas de programme d'installation, copiez simplement de contenu du fichier zip dans le répertoire de votre choix. Vous avez besoin essentiellement du contenu du répertoire Sources. Les autres répertoires contiennent la documentation et quelques programmes d'exemple. Les projets d'exemple sont des projets Visual Basic 2010, si vous utilisez une version antérieure, il est possible que vous ayez à reconstruire la structure de ces projets.

13.2. Utilisation l'API yoctopuce dans un projet Visual Basic

La librairie Yoctopuce pour Visual Basic .NET se présente sous la forme d'une DLL et de fichiers sources en Visual Basic. La DLL n'est pas une DLL .NET mais une DLL classique, écrite en C, qui gère les communications à bas niveau avec les modules32. Les fichiers sources en Visual Basic gèrent la partie haut niveau de l'API. Vous avez donc besoin de cette DLL et des fichiers .vb du répertoire Sources pour créer un projet gérant des modules Yoctopuce.

Configuration d'un projet Visual Basic

Les indications ci-dessous sont fournies pour Visual Studio express 2010, mais la procédure est semblable pour les autres versions.

Commencez par créer votre projet, puis depuis le panneau Explorateur de solutions effectuez un clic droit sur votre projet, et choisissez Ajouter puis Elément existant.

Une fenêtre de sélection de fichiers apparaît: sélectionnez le fichier yocto_api.vb et les fichiers correspondant aux fonctions des modules Yoctopuce que votre projet va gérer. Dans le doute, vous pouvez aussi sélectionner tous les fichiers.

Vous avez alors le choix entre simplement ajouter ces fichiers à votre projet, ou les ajouter en tant que lien (le bouton Ajouter est en fait un menu déroulant). Dans le premier cas, Visual Studio va copier les fichiers choisis dans votre projet, dans le second Visual Studio va simplement garder un lien sur les fichiers originaux. Il est recommandé d'utiliser des liens, une éventuelle mise à jour de la librairie sera ainsi beaucoup plus facile.

Ensuite, ajoutez de la même manière la dll yapi.dll, qui se trouve dans le répertoire Sources/dll33. Puis depuis la fenêtre Explorateur de solutions, effectuez un clic droit sur la DLL, choisissez Propriété et dans le panneau Propriétés, mettez l'option Copier dans le répertoire de sortie à toujours copier. Vous êtes maintenant prêt à utiliser vos modules Yoctopuce depuis votre environnement Visual Studio.

Afin de les garder simples, tous les exemples fournis dans cette documentation sont des applications consoles. Il va de soit que que les fonctionnement des librairies est strictement identiques si vous les intégrez dans une application dotée d'une interface graphique.

13.3. Contrôle de la fonction SerialPort

Il suffit de quelques lignes de code pour piloter un Yocto-RS485. Voici le squelette d'un fragment de code VisualBasic .NET qui utilise la fonction SerialPort.


[...]
' On active la détection des modules sur USB
Dim errmsg As String
YAPI.RegisterHub("usb", errmsg)
[...]

' On récupère l'objet permettant d'intéragir avec le module
Dim serialport As YSerialPort
serialport = YSerialPort.FindSerialPort("RS485MK1-123456.serialPort")

' Pour gérer le hot-plug, on vérifie que le module est là
If (serialport.isOnline()) Then
    ' Utiliser serialport.get_serialMode()
    [...]
End If

[...]

Voyons maintenant en détail ce que font ces quelques lignes.

YAPI.RegisterHub

La fonction YAPI.RegisterHub initialise l'API de Yoctopuce en indiquant où les modules doivent être recherchés. Utilisée avec le paramètre "usb", elle permet de travailler avec les modules connectés localement à la machine. Si l'initialisation se passe mal, cette fonction renverra une valeur différente de YAPI_SUCCESS, et retournera via le paramètre errmsg un explication du problème.

YSerialPort.FindSerialPort

La fonction YSerialPort.FindSerialPort permet de retrouver un port série en fonction du numéro de série de son module hôte et de son nom de fonction. Mais vous pouvez tout aussi bien utiliser des noms logiques que vous auriez préalablement configurés. Imaginons un module Yocto-RS485 avec le numéros de série RS485MK1-123456 que vous auriez appelé "MonModule" et dont vous auriez nommé la fonction serialPort "MaFonction", les cinq appels suivants seront strictement équivalents (pour autant que MaFonction ne soit définie qu'une fois, pour éviter toute ambiguïté):


serialport = YSerialPort.FindSerialPort("RS485MK1-123456.serialPort")
serialport = YSerialPort.FindSerialPort("RS485MK1-123456.MaFonction")
serialport = YSerialPort.FindSerialPort("MonModule.serialPort")
serialport = YSerialPort.FindSerialPort("MonModule.MaFonction")
serialport = YSerialPort.FindSerialPort("MaFonction")

YSerialPort.FindSerialPort renvoie un objet que vous pouvez ensuite utiliser à loisir pour contrôler le port série.

isOnline

La méthode isOnline() de l'objet renvoyé par YSerialPort.FindSerialPort permet de savoir si le module correspondant est présent et en état de marche.

modbusWrite* et modbusRead*

Les méthodes modbusWrite*() et modbusRead*()de l'objet renvoyé par YFindSerialPort permettent de communiquer en MODDUS sur la liaison RS485.

Un exemple réel

Lancez Microsoft VisualBasic et ouvrez le projet exemple correspondant, fourni dans le répertoire Examples/Doc-GettingStarted-Yocto-RS485 de la librairie Yoctopuce.

Vous reconnaîtrez dans cet exemple l'utilisation des fonctions expliquées ci-dessus, cette fois utilisées avec le décorum nécessaire à en faire un petit programme d'exemple concret.

Imports System.IO
Imports System.Environment

Module Module1

  Sub Main()

    Dim argv() As String = System.Environment.GetCommandLineArgs()
    Dim serialPort As YSerialPort
    Dim errmsg = ""
    Dim cmd As String
    Dim slave, reg, val As Integer

    REM Setup the API to use local USB devices. You can
    REM use an IP address instead of 'usb' if the device
    REM is connected to a network.

    If (YAPI.RegisterHub("usb", errmsg) <> YAPI.SUCCESS) Then
      Console.WriteLine("yInitAPI failed: " + errmsg)
      End
    End If

    If (argv.Length > 1 And argv(1) <> "any") Then
      serialPort = YSerialPort.FindSerialPort(argv(1))
    Else
      serialPort = YSerialPort.FirstSerialPort()
      If serialPort Is Nothing Then
        Console.WriteLine("No module connected (check USB cable)")
        End
      End If
    End If

    Console.WriteLine("Please enter the MODBUS slave address (1...255)")
    Console.WriteLine("Slave: ")
    slave = Convert.ToInt32(Console.ReadLine())

    Console.WriteLine("Please select a Coil No (>=1), Input Bit No (>=10001+),")
    Console.WriteLine("       Input Register No (>=30001) or Register No (>=40001)")
    Console.WriteLine("No: ")
    reg = Convert.ToInt32(Console.ReadLine())
    While (serialPort.isOnline())
      If reg >= 40001 Then
        val = serialPort.modbusReadRegisters(slave, reg - 40001, 1)(0)
      ElseIf (reg >= 30001) Then
        val = serialPort.modbusReadInputRegisters(slave, reg - 30001, 1)(0)
      ElseIf (reg >= 10001) Then
        val = serialPort.modbusReadInputBits(slave, reg - 10001, 1)(0)
      Else
        val = serialPort.modbusReadBits(slave, reg - 1, 1)(0)
      End If
      Console.WriteLine("Current value: " + Convert.ToString(val))
      Console.WriteLine("Press ENTER to read again, Q to quit")
      If ((reg Mod 30000) < 10000) Then Console.WriteLine(" or enter a new value")

      cmd = Console.ReadLine()
      If cmd = "q" Or cmd = "Q" Then End

      If (cmd <> "" And (reg Mod 30000) < 10000) Then
        val = Convert.ToInt32(cmd)
        If reg >= 30001 Then
          serialPort.modbusWriteRegister(slave, reg - 30001, val)
        Else
          serialPort.modbusWriteBit(slave, reg - 1, val)
        End If
      End If
    End While
    YAPI.FreeAPI()
  End Sub

End Module
 

13.4. Contrôle de la partie module

Chaque module peut-être contrôlé d'une manière similaire, vous trouverez ci dessous un simple programme d'exemple affichant les principaux paramètres d'un module et permettant d'activer la balise de localisation.


Imports System.IO
Imports System.Environment

Module Module1

  Sub usage()
    Console.WriteLine("usage: demo <serial or logical name> [ON/OFF]")
    End
  End Sub

  Sub Main()
    Dim argv() As String = System.Environment.GetCommandLineArgs()
    Dim errmsg As String = ""
    Dim m As ymodule

    If (YAPI.RegisterHub("usb", errmsg) <> YAPI_SUCCESS) Then
      Console.WriteLine("RegisterHub error:" + errmsg)
      End
    End If

    If argv.Length < 2 Then usage()

    m = YModule.FindModule(argv(1)) REM use serial or logical name
    If (m.isOnline()) Then
      If argv.Length > 2 Then
        If argv(2) = "ON" Then m.set_beacon(Y_BEACON_ON)
        If argv(2) = "OFF" Then m.set_beacon(Y_BEACON_OFF)
      End If
      Console.WriteLine("serial:       " + m.get_serialNumber())
      Console.WriteLine("logical name: " + m.get_logicalName())
      Console.WriteLine("luminosity:   " + Str(m.get_luminosity()))
      Console.Write("beacon:       ")
      If (m.get_beacon() = Y_BEACON_ON) Then
        Console.WriteLine("ON")
      Else
        Console.WriteLine("OFF")
      End If
      Console.WriteLine("upTime:       " + Str(m.get_upTime() / 1000) + " sec")
      Console.WriteLine("USB current:  " + Str(m.get_usbCurrent()) + " mA")
      Console.WriteLine("Logs:")
      Console.WriteLine(m.get_lastLogs())
    Else
      Console.WriteLine(argv(1) + " not connected (check identification and USB cable)")
    End If
    YAPI.FreeAPI()
  End Sub

End Module
 

Chaque propriété xxx du module peut être lue grâce à une méthode du type get_xxxx(), et les propriétés qui se sont pas en lecture seule peuvent être modifiées à l'aide de la méthode set_xxx() Pour plus de détails concernant ces fonctions utilisées, reportez-vous aux chapitre API

Modifications des réglages du module

Lorsque que vous souhaitez modifier les réglages d'un module, il suffit d'appeler la fonction set_xxx() correspondante, cependant cette modification n'a lieu que dans la mémoire vive du module: si le module redémarre, les modifications seront perdues. Pour qu'elle soient mémorisées de manière persistante, il est nécessaire de demander au module de sauvegarder sa configuration courante dans sa mémoire non volatile. Pour cela il faut utiliser la méthode saveToFlash(). Inversement il est possible de forcer le module à oublier ses réglages courants en utilisant la méthode revertFromFlash(). Ce petit exemple ci-dessous vous permet changer le nom logique d'un module.

Module Module1


  Sub usage()

    Console.WriteLine("usage: demo <serial or logical name> <new logical name>")
    End
  End Sub

  Sub Main()
    Dim argv() As String = System.Environment.GetCommandLineArgs()
    Dim errmsg As String = ""
    Dim newname As String
    Dim m As YModule

    If (argv.Length <> 3) Then usage()

    REM Setup the API to use local USB devices
    If YAPI.RegisterHub("usb", errmsg) <> YAPI_SUCCESS Then
      Console.WriteLine("RegisterHub error: " + errmsg)
      End
    End If

    m = YModule.FindModule(argv(1)) REM use serial or logical name
    If m.isOnline() Then
      newname = argv(2)
      If (Not YAPI.CheckLogicalName(newname)) Then
        Console.WriteLine("Invalid name (" + newname + ")")
        End
      End If
      m.set_logicalName(newname)
      m.saveToFlash() REM do not forget this
      Console.Write("Module: serial= " + m.get_serialNumber)
      Console.Write(" / name= " + m.get_logicalName())
    Else
      Console.Write("not connected (check identification and USB cable")
    End If
    YAPI.FreeAPI()

  End Sub

End Module
 

Attention, le nombre de cycles d'écriture de la mémoire non volatile du module est limité. Passé cette limite plus rien ne garantit que la sauvegarde des réglages se passera correctement. Cette limite, liée à la technologie employée par le micro-processeur du module se situe aux alentour de 100000 cycles. Pour résumer vous ne pouvez employer la fonction saveToFlash() que 100000 fois au cours de la vie du module. Veillez donc à ne pas appeler cette fonction depuis l'intérieur d'une boucle.

Enumeration des modules

Obtenir la liste des modules connectés se fait à l'aide de la fonction yFirstModule() qui renvoie le premier module trouvé, il suffit ensuite d'appeler la fonction nextModule() de cet objet pour trouver les modules suivants, et ce tant que la réponse n'est pas un Nothing. Ci-dessous un petit exemple listant les module connectés

Module Module1

  Sub Main()
    Dim M As ymodule
    Dim errmsg As String = ""

    REM Setup the API to use local USB devices
    If YAPI.RegisterHub("usb", errmsg) <> YAPI_SUCCESS Then
      Console.WriteLine("RegisterHub error: " + errmsg)
      End
    End If

    Console.WriteLine("Device list")
    M = YModule.FirstModule()
    While M IsNot Nothing
      Console.WriteLine(M.get_serialNumber() + " (" + M.get_productName() + ")")
      M = M.nextModule()
    End While
    YAPI.FreeAPI()
  End Sub

End Module
 

13.5. Gestion des erreurs

Lorsque vous implémentez un programme qui doit interagir avec des modules USB, vous ne pouvez pas faire abstraction de la gestion des erreurs. Il y aura forcément une occasion où un utilisateur aura débranché le périphérique, soit avant de lancer le programme, soit même en pleine opération. La librairie Yoctopuce est prévue pour vous aider à supporter ce genre de comportements, mais votre code doit néanmoins être fait pour se comporter au mieux pour interpréter les erreurs signalées par la librairie.

La manière la plus simple de contourner le problème est celle que nous avons employé pour les petits exemples précédents de ce chapitre: avant d'accéder à un module, on vérifie qu'il est en ligne avec la méthode isOnline() et on suppose ensuite qu'il va y rester pendant la fraction de seconde nécessaire à exécuter les lignes de code suivantes. Ce n'est pas parfait, mais ça peut suffire dans certains cas. Il faut toutefois être conscient qu'on ne peut pas totalement exclure une erreur se produisant après le isOnline(), qui pourrait faire planter le programme. La seule manière de l'éviter est d'implémenter une des deux techniques de gestion des erreurs décrites ci-dessous.

La méthode recommandée par la plupart des langages de programmation pour la gestion des erreurs imprévisibles est l'utilisation d'exceptions. C'est le comportement par défaut de la librairie Yoctopuce. Si une erreur se produit alors qu'on essaie d'accéder à un module, la librairie va lancer une exception. Dans ce cas, de trois choses l'une:

Comme cette dernière situation n'est pas la plus souhaitable, la librairie Yoctopuce offre une autre alternative pour la gestion des erreurs, permettant de faire un programme robuste sans devoir attraper les exceptions à chaque ligne de code. Il suffit d'appeler la fonction YAPI.DisableExceptions() pour commuter la librairie dans un mode où les exceptions de chaque fonction sont systématiquement remplacées par des valeurs de retour particulières, qui peuvent être testées par l'appelant lorsque c'est pertinent. Le nom de la valeur de retour en cas d'erreur pour chaque fonction est systématiquement documenté dans la référence de la librairie. Il suit toujours la même logique: une méthode get_state() retournera une valeur Y_STATE_INVALID, une méthode get_currentValue retournera une valeur Y_CURRENTVALUE_INVALID, etc. Dans tous les cas, la valeur retournée sera du type attendu, et ne sera pas un pointeur nul qui risquerait de faire crasher votre programme. Au pire, si vous affichez la valeur sans la tester, elle sera hors du cadre attendu pour la valeur retournée. Dans le cas de fonctions qui ne retournent à priori pas d'information, la valeur de retour sera YAPI_SUCCESS si tout va bien, et un code d'erreur différent en cas d'échec.

Quand vous travaillez sans les exceptions, il est possible d'obtenir un code d'erreur et un message expliquant l'origine de l'erreur en le demandant à l'objet qui a retourné une erreur à l'aide des méthodes errType() et errMessage(). Ce sont les même informations qui auraient été associées à l'exception si elles avaient été actives.

14. Utilisation du Yocto-RS485 en C#

C# (prononcez C-Sharp) est un langage orienté objet promu par Microsoft qui n'est pas sans rappeller Java. Tout comme Visual Basic et Delphi, il permet de créer des applications Windows relativement facilement. Tous les exemples et les modèles de projet sont testés avec Microsoft C# 2010 Express, disponible gratuitement sur le site de Microsoft 34.

Notre librairie est aussi compatible avec Mono, la version open source de C# qui fonctionne sous Linux et MacOS. Vous trouverez sur notre site web différents articles qui décrivent comment indiquer à Mono comment accéder à notre librairie.

14.1. Installation

Téléchargez la librairie Yoctopuce pour Visual C# depuis le site web de Yoctopuce35. Il n'y a pas de programme d'installation, copiez simplement de contenu du fichier zip dans le répertoire de votre choix. Vous avez besoin essentiellement du contenu du répertoire Sources. Les autres répertoires contiennent la documentation et quelques programmes d'exemple. Les projets d'exemple sont des projets Visual C# 2010, si vous utilisez une version antérieure, il est possible que vous ayez à reconstruire la structure de ces projets.

14.2. Utilisation l'API yoctopuce dans un projet Visual C#

La librairie Yoctopuce pour Visual C# .NET se présente sous la forme d'une DLL et de fichiers sources en Visual C#. La DLL n'est pas une DLL .NET mais une DLL classique, écrite en C, qui gère les communications à bas niveau avec les modules36. Les fichiers sources en Visual C# gèrent la partie haut niveau de l'API. Vous avez donc besoin de cette DLL et des fichiers .cs du répertoire Sources pour créer un projet gérant des modules Yoctopuce.

Configuration d'un projet Visual C#

Les indications ci-dessous sont fournies pour Visual Studio express 2010, mais la procédure est semblable pour les autres versions.

Commencez par créer votre projet, puis depuis le panneau Explorateur de solutions effectuez un clic droit sur votre projet, et choisissez Ajouter puis Elément existant.

Une fenêtre de sélection de fichiers apparaît: sélectionnez le fichier yocto_api.cs et les fichiers correspondant aux fonctions des modules Yoctopuce que votre projet va gérer. Dans le doute, vous pouvez aussi sélectionner tous les fichiers.

Vous avez alors le choix entre simplement ajouter ces fichiers à votre projet, ou les ajouter en tant que lien (le bouton Ajouter est en fait un menu déroulant). Dans le premier cas, Visual Studio va copier les fichiers choisis dans votre projet, dans le second Visual Studio va simplement garder un lien sur les fichiers originaux. Il est recommandé d'utiliser des liens, une éventuelle mise à jour de la librairie sera ainsi beaucoup plus facile.

Ensuite, ajoutez de la même manière la dll yapi.dll, qui se trouve dans le répertoire Sources/dll37. Puis depuis la fenêtre Explorateur de solutions, effectuez un clic droit sur la DLL, choisissez Propriété et dans le panneau Propriétés, mettez l'option Copier dans le répertoire de sortie à toujours copier. Vous êtes maintenant prêt à utiliser vos modules Yoctopuce depuis votre environnement Visual Studio.

Afin de les garder simples, tous les exemples fournis dans cette documentation sont des applications consoles. Il va de soit que que les fonctionnement des librairies est strictement identiques si vous les intégrez dans une application dotée d'une interface graphique.

14.3. Contrôle de la fonction SerialPort

Il suffit de quelques lignes de code pour piloter un Yocto-RS485. Voici le squelette d'un fragment de code C# qui utilise la fonction SerialPort.


[...]
// On active la détection des modules sur USB
string errmsg = "";
YAPI.RegisterHub("usb", errmsg);
[...]

// On récupère l'objet permettant d'intéragir avec le module
YSerialPort serialport = YSerialPort.FindSerialPort("RS485MK1-123456.serialPort");

// Pour gérer le hot-plug, on vérifie que le module est là
if (serialport.isOnline())
{
    // Utiliser serialport.get_serialMode()
    [...]
}

Voyons maintenant en détail ce que font ces quelques lignes.

YAPI.RegisterHub

La fonction YAPI.RegisterHub initialise l'API de Yoctopuce en indiquant où les modules doivent être recherchés. Utilisée avec le paramètre "usb", elle permet de travailler avec les modules connectés localement à la machine. Si l'initialisation se passe mal, cette fonction renverra une valeur différente de YAPI.SUCCESS, et retournera via le paramètre errmsg une explication du problème.

YSerialPort.FindSerialPort

La fonction YSerialPort.FindSerialPort permet de retrouver un port série en fonction du numéro de série de son module hôte et de son nom de fonction. Mais vous pouvez tout aussi bien utiliser des noms logiques que vous auriez préalablement configurés. Imaginons un module Yocto-RS485 avec le numéros de série RS485MK1-123456 que vous auriez appelé "MonModule" et dont vous auriez nommé la fonction serialPort "MaFonction", les cinq appels suivants seront strictement équivalents (pour autant que MaFonction ne soit définie qu'une fois, pour éviter toute ambiguïté):


serialport = YSerialPort.FindSerialPort("RS485MK1-123456.serialPort");
serialport = YSerialPort.FindSerialPort("RS485MK1-123456.MaFonction");
serialport = YSerialPort.FindSerialPort("MonModule.serialPort");
serialport = YSerialPort.FindSerialPort("MonModule.MaFonction");
serialport = YSerialPort.FindSerialPort("MaFonction");

YSerialPort.FindSerialPort renvoie un objet que vous pouvez ensuite utiliser à loisir pour contrôler le port série.

isOnline

La méthode isOnline() de l'objet renvoyé par YSerialPort.FindSerialPort permet de savoir si le module correspondant est présent et en état de marche.

modbusWrite* et modbusRead*

Les méthodes modbusWrite*() et modbusRead*()de l'objet renvoyé par YFindSerialPort.FindSerialPort permettent de communiquer en MODDUS sur la liaison RS485.

Un exemple réel

Lancez Visual C# et ouvrez le projet exemple correspondant, fourni dans le répertoire Examples/Doc-GettingStarted-Yocto-RS485 de la librairie Yoctopuce.

Vous reconnaîtrez dans cet exemple l'utilisation des fonctions expliquées ci-dessus, cette fois utilisées avec le décorum nécessaire à en faire un petit programme d'exemple concret.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
  class Program
  {

    static void Main(string[] args)
    {
      string errmsg = "";

      if (YAPI.RegisterHub("usb", ref errmsg) != YAPI.SUCCESS) {
        Console.WriteLine("RegisterHub error: " + errmsg);
        Environment.Exit(1);
      }

      YSerialPort serialPort;
      if (args.Length > 0 && args[0] != "any") {
        serialPort = YSerialPort.FindSerialPort(args[0]);
      } else {
        serialPort = YSerialPort.FirstSerialPort();
        if (serialPort == null) {
          Console.WriteLine("No module connected (check USB cable)");
          Environment.Exit(1);
        }
      }
      int slave, reg, val;
      String cmd;
      do {
        Console.WriteLine("Please enter the MODBUS slave address (1...255)");
        Console.Write("Slave: ");
        slave = Convert.ToInt32(Console.ReadLine());
      } while (slave < 1 || slave > 255);
      do {
        Console.WriteLine("Please select a Coil No (>=1), Input Bit No (>=10001+),");
        Console.WriteLine("       Input Register No (>=30001) or Register No (>=40001)");
        Console.Write("No: ");
        reg = Convert.ToInt32(Console.ReadLine());
      } while (reg < 1 || reg >= 50000 || (reg % 10000) == 0);
      while (true) {
        if (reg >= 40001) {
          val = serialPort.modbusReadRegisters(slave, reg - 40001, 1)[0];
        } else if (reg >= 30001) {
          val = serialPort.modbusReadInputRegisters(slave, reg - 30001, 1)[0];
        } else if (reg >= 10001) {
          val = serialPort.modbusReadInputBits(slave, reg - 10001, 1)[0];
        } else {
          val = serialPort.modbusReadBits(slave, reg - 1, 1)[0];
        }
        Console.WriteLine("Current value: " + val.ToString());
        Console.Write("Press ENTER to read again, Q to quit");
        if ((reg % 30000) < 10000) {
          Console.Write(" or enter a new value");
        }
        Console.Write(": ");
        cmd = Console.ReadLine();
        if (cmd == "q" || cmd == "Q") break;
        if (cmd != "" && (reg % 30000) < 10000) {
          val = Convert.ToInt32(cmd);
          if (reg >= 30001) {
            serialPort.modbusWriteRegister(slave, reg - 30001, val);
          } else {
            serialPort.modbusWriteBit(slave, reg - 1, val);
          }
        }
      }
      YAPI.FreeAPI();
    }
  }
}
 

14.4. Contrôle de la partie module

Chaque module peut-être contrôlé d'une manière similaire, vous trouverez ci-dessous un simple programme d'exemple affichant les principaux paramètres d'un module et permettant d'activer la balise de localisation.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace ConsoleApplication1
{
  class Program
  {
    static void usage()
    {
      string execname = System.AppDomain.CurrentDomain.FriendlyName;
      Console.WriteLine("Usage:");
      Console.WriteLine(execname + " <serial or logical name> [ON/OFF]");
      System.Threading.Thread.Sleep(2500);
      Environment.Exit(0);
    }

    static void Main(string[] args)
    {
      YModule m;
      string errmsg = "";

      if (YAPI.RegisterHub("usb", ref errmsg) !=  YAPI.SUCCESS) {
        Console.WriteLine("RegisterHub error: " + errmsg);
        Environment.Exit(0);
      }


      if (args.Length < 1)  usage();

      m = YModule.FindModule(args[0]); // use serial or logical name

      if (m.isOnline()) {
        if (args.Length >= 2) {
          if (args[1].ToUpper() == "ON") {
            m.set_beacon(YModule.BEACON_ON);
          }
          if (args[1].ToUpper() == "OFF") {
            m.set_beacon(YModule.BEACON_OFF);
          }
        }

        Console.WriteLine("serial:       " + m.get_serialNumber());
        Console.WriteLine("logical name: " + m.get_logicalName());
        Console.WriteLine("luminosity:   " + m.get_luminosity().ToString());
        Console.Write("beacon:       ");
        if (m.get_beacon() == YModule.BEACON_ON)
          Console.WriteLine("ON");
        else
          Console.WriteLine("OFF");
        Console.WriteLine("upTime:       " + (m.get_upTime() / 1000 ).ToString() + " sec");
        Console.WriteLine("USB current:  " + m.get_usbCurrent().ToString() + " mA");
        Console.WriteLine("Logs:\r\n" + m.get_lastLogs());

      } else {
        Console.WriteLine(args[0] + " not connected (check identification and USB cable)");
      }
      YAPI.FreeAPI();
    }
  }
}
 

Chaque propriété xxx du module peut être lue grâce à une méthode du type YModule.get_xxxx(), et les propriétés qui se sont pas en lecture seule peuvent être modifiées à l'aide de la méthode YModule.set_xxx() Pour plus de détails concernant ces fonctions utilisées, reportez-vous aux chapitre API

Modifications des réglages du module

Lorsque que vous souhaitez modifier les réglages d'un module, il suffit d'appeler la fonction YModule.set_xxx() correspondante, cependant cette modification n'a lieu que dans la mémoire vive du module: si le module redémarre, les modifications seront perdues. Pour qu'elle soient mémorisées de manière persistante, il est nécessaire de demander au module de sauvegarder sa configuration courante dans sa mémoire non volatile. Pour cela il faut utiliser la méthode YModule.saveToFlash(). Inversement il est possible de forcer le module à oublier ses réglages courants en utilisant la méthode YModule.revertFromFlash(). Ce petit exemple ci-dessous vous permet changer le nom logique d'un module.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
  class Program
  {
    static void usage()
    {
      string execname = System.AppDomain.CurrentDomain.FriendlyName;
      Console.WriteLine("Usage:");
      Console.WriteLine("usage: demo <serial or logical name> <new logical name>");
      System.Threading.Thread.Sleep(2500);
      Environment.Exit(0);
    }

    static void Main(string[] args)
    {
      YModule m;
      string errmsg = "";
      string newname;

      if (args.Length != 2) usage();

      if (YAPI.RegisterHub("usb", ref errmsg) !=  YAPI.SUCCESS) {
        Console.WriteLine("RegisterHub error: " + errmsg);
        Environment.Exit(0);
      }

      m = YModule.FindModule(args[0]); // use serial or logical name

      if (m.isOnline()) {
        newname = args[1];
        if (!YAPI.CheckLogicalName(newname)) {
          Console.WriteLine("Invalid name (" + newname + ")");
          Environment.Exit(0);
        }

        m.set_logicalName(newname);
        m.saveToFlash(); // do not forget this

        Console.Write("Module: serial= " + m.get_serialNumber());
        Console.WriteLine(" / name= " + m.get_logicalName());
      } else {
        Console.Write("not connected (check identification and USB cable");
      }
      YAPI.FreeAPI();
    }
  }
}
 

Attention, le nombre de cycles d'écriture de la mémoire non volatile du module est limité. Passé cette limite plus rien ne garantit que la sauvegarde des réglages se passera correctement. Cette limite, liée à la technologie employée par le micro-processeur du module se situe aux alentour de 100000 cycles. Pour résumer vous ne pouvez employer la fonction YModule.saveToFlash() que 100000 fois au cours de la vie du module. Veillez donc à ne pas appeler cette fonction depuis l'intérieur d'une boucle.

Enumeration des modules

Obtenir la liste des modules connectés se fait à l'aide de la fonction YModule.yFirstModule() qui renvoie le premier module trouvé, il suffit ensuite d'appeler la méthode nextModule() de cet objet pour trouver les modules suivants, et ce tant que la réponse n'est pas un null. Ci-dessous un petit exemple listant les module connectés

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
  class Program
  {
    static void Main(string[] args)
    {
      YModule m;
      string errmsg = "";

      if (YAPI.RegisterHub("usb", ref errmsg) !=  YAPI.SUCCESS) {
        Console.WriteLine("RegisterHub error: " + errmsg);
        Environment.Exit(0);
      }

      Console.WriteLine("Device list");
      m = YModule.FirstModule();
      while (m != null) {
        Console.WriteLine(m.get_serialNumber() + " (" + m.get_productName() + ")");
        m = m.nextModule();
      }
      YAPI.FreeAPI();
    }
  }
}
 

14.5. Gestion des erreurs

Lorsque vous implémentez un programme qui doit interagir avec des modules USB, vous ne pouvez pas faire abstraction de la gestion des erreurs. Il y aura forcément une occasion où un utilisateur aura débranché le périphérique, soit avant de lancer le programme, soit même en pleine opération. La librairie Yoctopuce est prévue pour vous aider à supporter ce genre de comportements, mais votre code doit néanmoins être fait pour se comporter au mieux pour interpréter les erreurs signalées par la librairie.

La manière la plus simple de contourner le problème est celle que nous avons employé pour les petits exemples précédents de ce chapitre: avant d'accéder à un module, on vérifie qu'il est en ligne avec la méthode isOnline() et on suppose ensuite qu'il va y rester pendant la fraction de seconde nécessaire à exécuter les lignes de code suivantes. Ce n'est pas parfait, mais ça peut suffire dans certains cas. Il faut toutefois être conscient qu'on ne peut pas totalement exclure une erreur se produisant après le isOnline(), qui pourrait faire planter le programme. La seule manière de l'éviter est d'implémenter une des deux techniques de gestion des erreurs décrites ci-dessous.

La méthode recommandée par la plupart des langages de programmation pour la gestion des erreurs imprévisibles est l'utilisation d'exceptions. C'est le comportement par défaut de la librairie Yoctopuce. Si une erreur se produit alors qu'on essaie d'accéder à un module, la librairie va lancer une exception. Dans ce cas, de trois choses l'une:

Comme cette dernière situation n'est pas la plus souhaitable, la librairie Yoctopuce offre une autre alternative pour la gestion des erreurs, permettant de faire un programme robuste sans devoir attraper les exceptions à chaque ligne de code. Il suffit d'appeler la fonction YAPI.DisableExceptions() pour commuter la librairie dans un mode où les exceptions de chaque fonction sont systématiquement remplacées par des valeurs de retour particulières, qui peuvent être testées par l'appelant lorsque c'est pertinent. Le nom de la valeur de retour en cas d'erreur pour chaque fonction est systématiquement documenté dans la référence de la librairie. Il suit toujours la même logique: une méthode get_state() retournera une valeur Y_STATE_INVALID, une méthode get_currentValue retournera une valeur Y_CURRENTVALUE_INVALID, etc. Dans tous les cas, la valeur retournée sera du type attendu, et ne sera pas un pointeur nul qui risquerait de faire crasher votre programme. Au pire, si vous affichez la valeur sans la tester, elle sera hors du cadre attendu pour la valeur retournée. Dans le cas de fonctions qui ne retournent à priori pas d'information, la valeur de retour sera YAPI_SUCCESS si tout va bien, et un code d'erreur différent en cas d'échec.

Quand vous travaillez sans les exceptions, il est possible d'obtenir un code d'erreur et un message expliquant l'origine de l'erreur en le demandant à l'objet qui a retourné une erreur à l'aide des méthodes errType() et errMessage(). Ce sont les même informations qui auraient été associées à l'exception si elles avaient été actives.

15. Utilisation du Yocto-RS485 avec Universal Windows Platform

Universal Windows Platform, abrégé UWP, est n'est pas un langage à proprememt parler mais une plate-forme logicielle créée par Micorosft. Cette platform permet d'executer un nouveau type d'applications : les application universelle Windows. Ces applicaiton peuvent fonctionner sur toutes les machines qui fonctione sous Windows 10. Cela comprend les PCs, les tablettes, les smartphones, la XBox One, mais aussi Windows IoT Core.

La librairie Yoctopuce UWP permet d'utiliser les modules Yoctopuce dans une application universelle Winodws et est entièrement écrite C#. Elle peut être ajoutée a un projet Visual Studio 201738.

15.1. Fonctions bloquantes et fonctions asynchrones

La librairie Universal Windows Platform n'utilise pas l'API win32 mais uniquement l'API Windows Runtime qui est disponible sur toutes les versions de Windows 10 et pour n'importe quelle architecture. Grâce à cela la librairie UWP peut être utilisé sur toutes les versions de Windows 10, y compris Windows 10 IoT Core.

Cependant, l'utilisation des nouvelles API UWP n'est pas sans conséquence: l'API Windows Runtime pour accéder aux ports USB est asynchrone, et par conséquent la librairie Yoctopuce doit aussi être asynchrone. Concrètement les méthodes asynchrones ne retournent pas directement le résultat mais un objet Task ou Task<> et le résultat peut être obtenu plus tard. Fort heureusement, le langage C# version 6 supporte les mots-clefs async et await qui simplifie beaucoup l'utilisation de ces fonctions. Il est ainsi possible d'utiliser les fonctions asynchrones de la même manière que les fonctions traditionnelles pour autant que les deux règles suivantes soient respectées:

Exemple:

async Task<int> MyFunction(int  val)
{
    // do some long computation
    ...

    return result;
}

int res = await MyFunction(1234);

Notre librairie suit ces deux règles et peut donc d’utiliser la notation await.

Pour ne pas devoir vous poser la question pour chaque méthode de savoir si elle est asynchrone ou pas, la convention est la suivante: toutes les méthodes publiques de la librairie UWP sont asyncrones, c'est-à-dire qui faut les appeler en ajoutant le mot clef await, sauf:

15.2. Installation

Téléchargez la librairie Yoctopuce pour Universal Windows Platform depuis le site web de Yoctopuce 39. Il n'y a pas de programme d'installation, copiez simplement de contenu du fichier zip dans le répertoire de votre choix. Vous avez besoin essentiellement du contenu du répertoire Sources. Les autres répertoires contiennent la documentation et quelques programmes d'exemple. Les projets d'exemple sont des projets Visual Studio 2017 qui est disponible sur le site de Microsoft 40.

15.3. Utilisation l'API Yoctopuce dans un projet Visual Studio

Commencez par créer votre projet , puis depuis le panneau Explorateur de solutions effectuez un clic droit sur votre projet, et choisissez Ajouter puis Élément existant .

Une fenêtre de sélection de fichiers apparaît: sélectionnez tous les fichiers du répertoire Sources de la librairie.

Vous avez alors le choix entre simplement ajouter ces fichiers à votre projet, ou les ajouter en tant que lien (le bouton Ajouter est en fait un menu déroulant). Dans le premier cas, Visual Studio va copier les fichiers choisis dans votre projet, dans le second Visual Studio va simplement garder un lien sur les fichiers originaux. Il est recommandé d'utiliser des liens, une éventuelle mise à jour de la librairie sera ainsi beaucoup plus facile.

Le fichier Package.appxmanifest

Par défaut, une application Universal Windows n'a pas le droit d’accéder aux ports USB. Si l'on désire accéder à un périphérique USB, il faut impérativement le déclarer dans le fichier Package.appxmanifest.

Malheureusement, la fenêtre d'édition de ce fichier ne permet pas cette opération et il faut modifier le fichier Package.appxmanifest à la main. Dans le panneau "Solutions Explorer", faites un clic droit sur le fichier Package.appxmanifest et sélectionner "View Code".

Dans ce fichier XML, il faut rajouter un nœud DeviceCapability dans le nœud Capabilities. Ce nœud doit avoir un attribut "Name" qui vaut "humaninterfacedevice".

A l’intérieur de ce nœud, il faut déclarer tous les modules qui peuvent être utilisés. Concrètement, pour chaque module, il faut ajouter un nœud "Device" avec un attribut "Id" dont la valeur est une chaîne de caractères "vidpid:USB_VENDORID USB_DEVICE_ID". Le USB_VENDORID de Yoctopuce est 24e0 et le USB_DEVICE_ID de chaque module Yoctopuce peut être trouvé dans la documentation dans la section "Caractéristiques". Pour finir, le nœud "Device" doit contenir un nœud "Function" avec l'attribut "Type" dont la valeur est "usage:ff00 0001".

Pour le Yocto-RS485 voici ce qu'il faut ajouter dans le nœud "Capabilities":


  <DeviceCapability Name="humaninterfacedevice">
      <!-- Yocto-RS485 -->
      <Device Id="vidpid:24e0 0048">
        <Function Type="usage:ff00 0001" />
      </Device>
    </DeviceCapability>

Malheureusement, il n'est pas possible d'écrire un règle qui autorise tous les modules Yoctopuce, par conséquent il faut impérativement ajouter chaque module que l'on désire utiliser.

15.4. Contrôle de la fonction SerialPort

Il suffit de quelques lignes de code pour piloter un Yocto-RS485. Voici le squelette d'un fragment de code c# qui utilise la fonction SerialPort.


[...]
// On active la détection des modules sur USB
await YAPI.RegisterHub("usb");
[...]

// On récupère l'objet permettant d'intéragir avec le module
YSerialPort serialport = YSerialPort.FindSerialPort("RS485MK1-123456.serialPort");

// Pour gérer le hot-plug, on vérifie que le module est là
if (await serialport.isOnline())
{
        // Use serialport.get_serialMode()
    ...
}

[...]

Voyons maintenant en détail ce que font ces quelques lignes.

YAPI.RegisterHub

La fonction YAPI.RegisterHub initialise l'API de Yoctopuce en indiquant où les modules doivent être recherchés. Le paramètre est l'adresse du virtual hub capable de voir les modules. Si l'on passe la chaîne de caractère "usb", l'API va travailler avec les modules connectés localement à la machine. Si l'initialisation se passe mal, une exception sera générée.

YSerialPort.FindSerialPort

La fonction YSerialPort.FindSerialPort permet de retrouver un port série en fonction du numéro de série de son module hôte et de son nom de fonction. Mais vous pouvez tout aussi bien utiliser des noms logiques que vous auriez préalablement configurés. Imaginons un module Yocto-RS485 avec le numéros de série RS485MK1-123456 que vous auriez appelé "MonModule" et dont vous auriez nommé la fonction serialPort "MaFonction", les cinq appels suivants seront strictement équivalents (pour autant que MaFonction ne soit définie qu'une fois, pour éviter toute ambiguïté):


serialport = YSerialPort.FindSerialPort("RS485MK1-123456.serialPort");
serialport = YSerialPort.FindSerialPort("RS485MK1-123456.MaFonction");
serialport = YSerialPort.FindSerialPort("MonModule.serialPort");
serialport = YSerialPort.FindSerialPort("MonModule.MaFonction");
serialport = YSerialPort.FindSerialPort("MaFonction");

YSerialPort.FindSerialPort renvoie un objet que vous pouvez ensuite utiliser à loisir pour contrôler le port série.

isOnline

La méthode isOnline() de l'objet renvoyé par YSerialPort.FindSerialPort permet de savoir si le module correspondant est présent et en état de marche.

modbusWrite* et modbusRead*

Les méthodes modbusWrite*() et modbusRead*()de l'objet renvoyé par YFindSerialPort.FindSerialPort permettent de communiquer en MODDUS sur la liaison RS485.

15.5. Un exemple concret

Lancez Visual Studio et ouvrez le projet correspondant, fourni dans le répertoire Examples/Doc-GettingStarted-Yocto-RS485 de la librairie Yoctopuce.

Le projets Visual Studio contient de nombreux fichiers dont la plupart ne sont pas liés à l'utilisation de la librairie Yoctopuce. Pour simplifier la lecture du code nous avons regroupé tout le code qui utilise la librairie dans la classe Demo qui se trouve dans le fichier demo.cs. Les propriétés de cette classe correspondent aux différentes champs qui sont affichés à l'écran, et la méthode Run() contient le code qui est exécuté quand le bouton "Start" est pressé.

Vous reconnaîtrez dans cet exemple l'utilisation des fonctions expliquées ci-dessus, cette fois utilisées avec le décorum nécessaire à en faire un petit programme d'exemple concret.

using System;
using System.Diagnostics;
using System.Threading.Tasks;
using Windows.UI.Xaml.Controls;
using com.yoctopuce.YoctoAPI;

namespace Demo
{
  public class Demo : DemoBase
  {
    public string HubURL { get; set; }
    public string Target { get; set; }
    public string Slave { get; set; }
    public string Register { get; set; }
    public string Value { get; set; }

    public override async Task<int> Run()
    {
      try {
        int slave = Convert.ToInt32(Slave);
        if (slave < 1 || slave > 255) {
          WriteLine("Invalid MODBUS slave address");
          return -1;
        }

        int reg = Convert.ToInt32(Register);
        if (reg < 1 || reg >= 50000 || (reg % 10000) == 0) {
          WriteLine("Invalid MODBUS Register");
          return -1;
        }

        await YAPI.RegisterHub(HubURL);

        YSerialPort serialPort;
        if (Target.ToLower() == "any") {
          serialPort = YSerialPort.FirstSerialPort();
          if (serialPort == null) {
            WriteLine("No module connected (check USB cable) ");
            return -1;
          }
          YModule ymod = await serialPort.get_module();
          WriteLine("Using: " + await ymod.get_serialNumber());
        } else {
          serialPort = YSerialPort.FindSerialPort(Target + ".serialPort");
        }

        int val;
        if (reg >= 40001) {
          val = (await serialPort.modbusReadRegisters(slave, reg - 40001, 1))[0];
        } else if (reg >= 30001) {
          val = (await serialPort.modbusReadInputRegisters(slave, reg - 30001, 1))[0];
        } else if (reg >= 10001) {
          val = (await serialPort.modbusReadInputBits(slave, reg - 10001, 1))[0];
        } else {
          val = (await serialPort.modbusReadBits(slave, reg - 1, 1))[0];
        }

        WriteLine("Current value: " + val.ToString());

        if (Value != "" && (reg % 30000) < 10000) {
          val = Convert.ToInt32(Value);
          if (reg >= 30001) {
            await serialPort.modbusWriteRegister(slave, reg - 30001, val);
          } else {
            await serialPort.modbusWriteBit(slave, reg - 1, val);
          }
        }
      } catch (YAPI_Exception ex) {
        WriteLine("error: " + ex.Message);
      }

      YAPI.FreeAPI();
      return 0;
    }
  }
}

15.6. Contrôle de la partie module

Chaque module peut-être contrôlé d'une manière similaire, vous trouverez ci-dessous un simple programme d'exemple affichant les principaux paramètres d'un module et permettant d'activer la balise de localisation.

using System;
using System.Diagnostics;
using System.Threading.Tasks;
using Windows.UI.Xaml.Controls;
using com.yoctopuce.YoctoAPI;

namespace Demo
{
  public class Demo : DemoBase
  {

    public string HubURL { get; set; }
    public string Target { get; set; }
    public bool Beacon { get; set; }

    public override async Task<int> Run()
    {
      YModule m;
      string errmsg = "";

      if (await YAPI.RegisterHub(HubURL) != YAPI.SUCCESS) {
        WriteLine("RegisterHub error: " + errmsg);
        return -1;
      }
      m = YModule.FindModule(Target + ".module"); // use serial or logical name
      if (await m.isOnline()) {
        if (Beacon) {
          await m.set_beacon(YModule.BEACON_ON);
        } else {
          await m.set_beacon(YModule.BEACON_OFF);
        }

        WriteLine("serial: " + await m.get_serialNumber());
        WriteLine("logical name: " + await m.get_logicalName());
        WriteLine("luminosity: " + await m.get_luminosity());
        Write("beacon: ");
        if (await m.get_beacon() == YModule.BEACON_ON)
          WriteLine("ON");
        else
          WriteLine("OFF");
        WriteLine("upTime: " + (await m.get_upTime() / 1000) + " sec");
        WriteLine("USB current: " + await m.get_usbCurrent() + " mA");
        WriteLine("Logs:\r\n" + await m.get_lastLogs());
      } else {
        WriteLine(Target + " not connected  on" + HubURL +
                  "(check identification and USB cable)");
      }
      YAPI.FreeAPI();
      return 0;
    }
  }
}

Chaque propriété xxx du module peut être lue grâce à une méthode du type YModule.get_xxxx(), et les propriétés qui se sont pas en lecture seule peuvent être modifiées à l'aide de la méthode YModule.set_xxx() Pour plus de détails concernant ces fonctions utilisées, reportez-vous aux chapitre API

Modifications des réglages du module

Lorsque que vous souhaitez modifier les réglages d'un module, il suffit d'appeler la fonction YModule.set_xxx() correspondante, cependant cette modification n'a lieu que dans la mémoire vive du module: si le module redémarre, les modifications seront perdues. Pour qu'elle soient mémorisées de manière persistante, il est nécessaire de demander au module de sauvegarder sa configuration courante dans sa mémoire non volatile. Pour cela il faut utiliser la méthode YModule.saveToFlash(). Inversement il est possible de forcer le module à oublier ses réglages courants en utilisant la méthode YModule.revertFromFlash(). Ce petit exemple ci-dessous vous permet changer le nom logique d'un module.

using System;
using System.Diagnostics;
using System.Threading.Tasks;
using Windows.UI.Xaml.Controls;
using com.yoctopuce.YoctoAPI;

namespace Demo
{
  public class Demo : DemoBase
  {

    public string HubURL { get; set; }
    public string Target { get; set; }
    public string LogicalName { get; set; }

    public override async Task<int> Run()
    {
      try {
        YModule m;

        await YAPI.RegisterHub(HubURL);

        m = YModule.FindModule(Target); // use serial or logical name
        if (await m.isOnline()) {
          if (!YAPI.CheckLogicalName(LogicalName)) {
            WriteLine("Invalid name (" + LogicalName + ")");
            return -1;
          }

          await m.set_logicalName(LogicalName);
          await m.saveToFlash(); // do not forget this
          Write("Module: serial= " + await m.get_serialNumber());
          WriteLine(" / name= " + await m.get_logicalName());
        } else {
          Write("not connected (check identification and USB cable");
        }
      } catch (YAPI_Exception ex) {
        WriteLine("RegisterHub error: " + ex.Message);
      }
      YAPI.FreeAPI();
      return 0;
    }
  }
}

Attention, le nombre de cycles d'écriture de la mémoire non volatile du module est limité. Passé cette limite plus rien ne garantit que la sauvegarde des réglages se passera correctement. Cette limite, liée à la technologie employée par le micro-processeur du module se situe aux alentour de 100000 cycles. Pour résumer vous ne pouvez employer la fonction YModule.saveToFlash() que 100000 fois au cours de la vie du module. Veillez donc à ne pas appeler cette fonction depuis l'intérieur d'une boucle.

Enumeration des modules

Obtenir la liste des modules connectés se fait à l'aide de la fonction YModule.yFirstModule() qui renvoie le premier module trouvé, il suffit ensuite d'appeler la méthode nextModule() de cet objet pour trouver les modules suivants, et ce tant que la réponse n'est pas un null. Ci-dessous un petit exemple listant les module connectés

using System;
using System.Diagnostics;
using System.Threading.Tasks;
using Windows.UI.Xaml.Controls;
using com.yoctopuce.YoctoAPI;

namespace Demo
{
  public class Demo : DemoBase
  {
    public string HubURL { get; set; }

    public override async Task<int> Run()
    {
      YModule m;
      try {
        await YAPI.RegisterHub(HubURL);

        WriteLine("Device list");
        m = YModule.FirstModule();
        while (m != null) {
          WriteLine(await m.get_serialNumber()
                    + " (" + await m.get_productName() + ")");
          m = m.nextModule();
        }
      } catch (YAPI_Exception ex) {
        WriteLine("Error:" + ex.Message);
      }
      YAPI.FreeAPI();
      return 0;
    }
  }
}

15.7. Gestion des erreurs

Lorsque vous implémentez un programme qui doit interagir avec des modules USB, vous ne pouvez pas faire abstraction de la gestion des erreurs. Il y aura forcément une occasion où un utilisateur aura débranché le périphérique, soit avant de lancer le programme, soit même en pleine opération. La librairie Yoctopuce est prévue pour vous aider à supporter ce genre de comportements, mais votre code doit néanmoins être fait pour se comporter au mieux pour interpréter les erreurs signalées par la librairie.

La manière la plus simple de contourner le problème est celle que nous avons employé pour les petits exemples précédents de ce chapitre: avant d'accéder à un module, on vérifie qu'il est en ligne avec la méthode isOnline() et on suppose ensuite qu'il va y rester pendant la fraction de seconde nécessaire à exécuter les lignes de code suivantes. Ce n'est pas parfait, mais ça peut suffire dans certains cas. Il faut toutefois être conscient qu'on ne peut pas totalement exclure une erreur se produisant après le isOnline(), qui pourrait faire planter le programme.

Dans la librairie Universal Windows Platform, le traitement d'erreur est implémenté au moyen d'exceptions. Vous devrez donc intercepter et traiter correctement ces exceptions si vous souhaitez avoir un projet fiable qui ne crashera pas des que vous débrancherez un module.

Les exceptions lancées de la librairie sont toujours de type YAPI_Exception, ce qui permet facilement de les séparer des autres exceptions dans un bloc try{...} catch{...}.

Exemple:


try {
        ....
} catch (YAPI_Exception ex) {
        Debug.WriteLine("Exception from Yoctopuce lib:" + ex.Message);
} catch (Exception ex) {
        Debug.WriteLine("Other exceptions :" + ex.Message);
}

16. Utilisation du Yocto-RS485 en Delphi

Delphi est l'héritier de Turbo-Pascal. A l'origine, Delphi était produit par Borland, mais c'est maintenant Embarcadero qui l'édite. Sa force réside dans sa facilité d'utilisation, il permet à quiconque ayant des notions de Pascal de programmer une application Windows en deux temps trois mouvements. Son seul défaut est d'être payant41.

Les librairies pour Delphi sont fournies non pas sous forme de composants VCL, mais directement sous forme de fichiers source. Ces fichiers sont compatibles avec la plupart des version de Delphi 42.

Afin des les garder simples, tous les exemples fournis dans cette documentation sont des applications consoles. Il va de soit que le fonctionnement des librairies est strictement identique avec des applications VCL.

Vous allez rapidement vous rendre compte que l'API Delphi défini beaucoup de fonctions qui retournent des objets. Vous ne devez jamais désallouer ces objets vous-même. Ils seront désalloués automatiquement par l'API à la fin de l'application.

16.1. Préparation

Connectez-vous sur le site de Yoctopuce et téléchargez la la librairie Yoctopuce pour Delphi43. Décompressez le tout dans le répertoire de votre choix, et ajoutez le sous-répertoire sources de l'archive dans la liste des répertoires des librairies de Delphi44.

Par défaut la librairie Yoctopuce pour Delphi utilise une DLL yapi.dll, toutes les applications que vous créerez avec Delphi devront avoir accès à cette DLL. Le plus simple est de faire en sorte qu'elle soit présente dans le même répertoire que l'exécutable de votre application.

16.2. Contrôle de la fonction SerialPort

Il suffit de quelques lignes de code pour piloter un Yocto-RS485. Voici le squelette d'un fragment de code Delphi qui utilise la fonction SerialPort.


uses yocto_api, yocto_serialport;

var errmsg: string;
    serialport: TYSerialPort;

[...]
// On active la détection des modules sur USB
yRegisterHub('usb',errmsg)
[...]

// On récupère l'objet permettant d'intéragir avec le module
serialport = yFindSerialPort("RS485MK1-123456.serialPort")

// Pour gérer le hot-plug, on vérifie que le module est là
if serialport.isOnline() then
    begin
        // use serialport.get_serialMode()
        [...]
    end;
[...]

Voyons maintenant en détail ce que font ces quelques lignes.

yocto_api et yocto_serialport

Ces deux unités permettent d'avoir accès aux fonctions permettant de gérer les modules Yoctopuce. yocto_api doit toujours être utilisé, yocto_serialport est nécessaire pour gérer les modules contenant un port série, comme le Yocto-RS485.

yRegisterHub

La fonction yRegisterHub initialise l'API de Yoctopuce en indiquant où les modules doivent être recherchés. Utilisée avec le paramètre 'usb', elle permet de travailler avec les modules connectés localement à la machine. Si l'initialisation se passe mal, cette fonction renverra une valeur différente de YAPI_SUCCESS, et retournera via le paramètre errmsg un explication du problème.

yFindSerialPort

La fonction yFindSerialPort permet de retrouver un port série en fonction du numéro de série de son module hôte et de son nom de fonction. Mais vous pouvez tout aussi bien utiliser des noms logiques que vous auriez préalablement configurés. Imaginons un module Yocto-RS485 avec le numéros de série RS485MK1-123456 que vous auriez appelé "MonModule" et dont vous auriez nommé la fonction serialPort "MaFonction", les cinq appels suivants seront strictement équivalents (pour autant que MaFonction ne soit définie qu'une fois, pour éviter toute ambiguïté):


serialport := yFindSerialPort("RS485MK1-123456.serialPort");
serialport := yFindSerialPort("RS485MK1-123456.MaFonction");
serialport := yFindSerialPort("MonModule.serialPort");
serialport := yFindSerialPort("MonModule.MaFonction");
serialport := yFindSerialPort("MaFonction");

yFindSerialPort renvoie un objet que vous pouvez ensuite utiliser à loisir pour contrôler le port série.

isOnline

La méthode isOnline() de l'objet renvoyé par yFindSerialPort permet de savoir si le module correspondant est présent et en état de marche.

modbusWrite* et modbusRead*

Les méthodes modbusWrite*() et modbusRead*()de l'objet renvoyé par YFindSerialPort permettent de communiquer en MODDUS sur la liaison RS485.

Un exemple réel

Lancez votre environnement Delphi, copiez la DLL yapi.dll dans un répertoire et créez une nouvelle application console dans ce même répertoire, et copiez-coller le code ci dessous.

Vous reconnaîtrez dans cet exemple l'utilisation des fonctions expliquées ci-dessus, cette fois utilisées avec le décorum nécessaire à en faire un petit programme d'exemple concret.

program helloworld;
{$APPTYPE CONSOLE}
uses
  SysUtils,
  Windows,
  yocto_api,
  yocto_serialport;

var
 errmsg,line  : string;
 serialPort : TYserialport;
 slave,reg: integer;
 res : TLongIntArray;
 cmd :string;
 val : integer;
begin

  // Setup the API to use local USB devices. You can
  // use an IP address instead of 'usb' if the device
  // is connected to a network.
  if (YRegisterHub('usb', errmsg) <> YAPI_SUCCESS)  then
    begin
      writeln('RegisterHub error: ' + errmsg);
      halt;
    end;

  if (paramcount>1) then
       serialPort := YFindSerialPort(paramstr(1))
    else
     begin
       serialPort := YFirstSerialPort();
       if  (serialPort=nil) then
         begin
           writeln('No module connected (check cable)');
           halt;
         end;
     end;

  writeln('Please enter the MODBUS slave address (1...255)');
  repeat
   ReadLn(slave);
  until (slave>0) and (slave<256);

  writeln('Please select a Coil No (>=1), Input Bit No (>=10001+),');
  writeln('Input Register No (>=30001) or Register No (>=40001)');
  writeln('No: ');
  repeat
  ReadLn(reg);
  until (reg >=1) and  (reg<50000) and ((reg mod 10000)<> 0);

  while (true)  do
   begin
    if (reg>=40001) then res := serialPort.modbusReadRegisters(slave, reg-40001, 1)
    else if (reg>=30001) then res := serialPort.modbusReadInputRegisters(slave, reg-30001, 1)
    else if (reg>=10001) then res := serialPort.modbusReadInputBits(slave, reg-10001, 1)
    else res := serialPort.modbusReadBits(slave, reg-1, 1);
    val := res[0];
    writeln('Current value: '+inttostr(val));
    write('Press ENTER to read again, Q to quit');
    if((reg mod 30000) < 10000) then write (' or enter a new value');
    write(': ');
    readLn(cmd);
    if (cmd ='q') or  (cmd ='Q') then halt;
    if  (cmd<>'') and ((reg mod 30000) < 10000) then
     begin
         val := strtoint(cmd);
         if(reg >= 30001) then serialPort.modbusWriteRegister(slave, reg-30001, val)
                          else    serialPort.modbusWriteBit(slave, reg-1, val);
     end;
   end;
  yFreeAPI();

end.
 

16.3. Contrôle de la partie module

Chaque module peut-être contrôlé d'une manière similaire, vous trouverez ci dessous un simple programme d'exemple affichant les principaux paramètres d'un module et permettant d'activer la balise de localisation.

program modulecontrol;
{$APPTYPE CONSOLE}
uses
  SysUtils,
  yocto_api;

const
  serial = 'RS485MK1-123456'; // use serial number or logical name

procedure refresh(module:Tymodule) ;
  begin
    if (module.isOnline())  then
     begin
       Writeln('');
       Writeln('Serial       : ' + module.get_serialNumber());
       Writeln('Logical name : ' + module.get_logicalName());
       Writeln('Luminosity   : ' + intToStr(module.get_luminosity()));
       Write('Beacon    :');
       if  (module.get_beacon()=Y_BEACON_ON) then Writeln('on')
                                             else Writeln('off');
       Writeln('uptime       : ' + intToStr(module.get_upTime() div 1000)+'s');
       Writeln('USB current  : ' + intToStr(module.get_usbCurrent())+'mA');
       Writeln('Logs         : ');
       Writeln(module.get_lastlogs());
       Writeln('');
       Writeln('r : refresh / b:beacon ON / space : beacon off');
     end
    else Writeln('Module not connected (check identification and USB cable)');
  end;


procedure beacon(module:Tymodule;state:integer);
  begin
    module.set_beacon(state);
    refresh(module);
  end;

var
  module : TYModule;
  c      : char;
  errmsg : string;

begin
  // Setup the API to use local USB devices
  if yRegisterHub('usb', errmsg)<>YAPI_SUCCESS then
  begin
    Write('RegisterHub error: '+errmsg);
    exit;
  end;

  module := yFindModule(serial);
  refresh(module);

  repeat
    read(c);
    case c of
     'r': refresh(module);
     'b': beacon(module,Y_BEACON_ON);
     ' ': beacon(module,Y_BEACON_OFF);
    end;
  until  c = 'x';
  yFreeAPI();
end.

Chaque propriété xxx du module peut être lue grâce à une méthode du type get_xxxx(), et les propriétés qui se sont pas en lecture seule peuvent être modifiées à l'aide de la méthode set_xxx() Pour plus de détails concernant ces fonctions utilisées, reportez-vous aux chapitre API

Modifications des réglages du module

Lorsque que vous souhaitez modifier les réglages d'un module, il suffit d'appeler la fonction set_xxx() correspondante, cependant cette modification n'a lieu que dans la mémoire vive du module: si le module redémarre, les modifications seront perdues. Pour qu'elle soient mémorisées de manière persistante, il est nécessaire de demander au module de sauvegarder sa configuration courante dans sa mémoire non volatile. Pour cela il faut utiliser la méthode saveToFlash(). Inversement il est possible de forcer le module à oublier ses réglages courants en utilisant la méthode revertFromFlash(). Ce petit exemple ci-dessous vous permet changer le nom logique d'un module.

program savesettings;
{$APPTYPE CONSOLE}
uses
  SysUtils,
  yocto_api;

const
  serial = 'RS485MK1-123456'; // use serial number or logical name

var
  module  : TYModule;
  errmsg  : string;
  newname : string;

begin
  // Setup the API to use local USB devices
  if yRegisterHub('usb', errmsg)<>YAPI_SUCCESS then
  begin
    Write('RegisterHub error: '+errmsg);
    exit;
  end;

  module := yFindModule(serial);
  if (not(module.isOnline)) then
   begin
     writeln('Module not connected (check identification and USB cable)');
     exit;
   end;

  Writeln('Current logical name : '+module.get_logicalName());
  Write('Enter new name : ');
  Readln(newname);
  if (not(yCheckLogicalName(newname))) then
   begin
     Writeln('invalid logical name');
     exit;
   end;
  module.set_logicalName(newname);
  module.saveToFlash();
  yFreeAPI();
  Writeln('logical name is now : '+module.get_logicalName());
end.
 

Attention, le nombre de cycles d'écriture de la mémoire non volatile du module est limité. Passé cette limite plus rien ne garantit que la sauvegarde des réglages se passera correctement. Cette limite, liée à la technologie employée par le micro-processeur du module se situe aux alentour de 100000 cycles. Pour résumer vous ne pouvez employer la fonction saveToFlash() que 100000 fois au cours de la vie du module. Veillez donc à ne pas appeler cette fonction depuis l'intérieur d'une boucle.

Énumération des modules

Obtenir la liste des modules connectés se fait à l'aide de la fonction yFirstModule() qui renvoie le premier module trouvé, il suffit ensuite d'appeler la fonction nextModule() de cet objet pour trouver les modules suivants, et ce tant que la réponse n'est pas un nil. Ci-dessous un petit exemple listant les module connectés

program inventory;
{$APPTYPE CONSOLE}
uses
  SysUtils,
  yocto_api;

var
  module : TYModule;
  errmsg : string;

begin
  // Setup the API to use local USB devices
  if yRegisterHub('usb', errmsg)<>YAPI_SUCCESS then
  begin
    Write('RegisterHub error: '+errmsg);
    exit;
  end;

  Writeln('Device list');

  module := yFirstModule();
  while module<>nil  do
   begin
     Writeln( module.get_serialNumber()+' ('+module.get_productName()+')');
     module := module.nextModule();
   end;
  yFreeAPI();

end.

16.4. Gestion des erreurs

Lorsque vous implémentez un programme qui doit interagir avec des modules USB, vous ne pouvez pas faire abstraction de la gestion des erreurs. Il y aura forcément une occasion où un utilisateur aura débranché le périphérique, soit avant de lancer le programme, soit même en pleine opération. La librairie Yoctopuce est prévue pour vous aider à supporter ce genre de comportements, mais votre code doit néanmoins être fait pour se comporter au mieux pour interpréter les erreurs signalées par la librairie.

La manière la plus simple de contourner le problème est celle que nous avons employé pour les petits exemples précédents de ce chapitre: avant d'accéder à un module, on vérifie qu'il est en ligne avec la méthode isOnline() et on suppose ensuite qu'il va y rester pendant la fraction de seconde nécessaire à exécuter les lignes de code suivantes. Ce n'est pas parfait, mais ça peut suffire dans certains cas. Il faut toutefois être conscient qu'on ne peut pas totalement exclure une erreur se produisant après le isOnline(), qui pourrait faire planter le programme. La seule manière de l'éviter est d'implémenter une des deux techniques de gestion des erreurs décrites ci-dessous.

La méthode recommandée par la plupart des langages de programmation pour la gestion des erreurs imprévisibles est l'utilisation d'exceptions. C'est le comportement par défaut de la librairie Yoctopuce. Si une erreur se produit alors qu'on essaie d'accéder à un module, la librairie va lancer une exception. Dans ce cas, de trois choses l'une:

Comme cette dernière situation n'est pas la plus souhaitable, la librairie Yoctopuce offre une autre alternative pour la gestion des erreurs, permettant de faire un programme robuste sans devoir attraper les exceptions à chaque ligne de code. Il suffit d'appeler la fonction YAPI.DisableExceptions() pour commuter la librairie dans un mode où les exceptions de chaque fonction sont systématiquement remplacées par des valeurs de retour particulières, qui peuvent être testées par l'appelant lorsque c'est pertinent. Le nom de la valeur de retour en cas d'erreur pour chaque fonction est systématiquement documenté dans la référence de la librairie. Il suit toujours la même logique: une méthode get_state() retournera une valeur Y_STATE_INVALID, une méthode get_currentValue retournera une valeur Y_CURRENTVALUE_INVALID, etc. Dans tous les cas, la valeur retournée sera du type attendu, et ne sera pas un pointeur nul qui risquerait de faire crasher votre programme. Au pire, si vous affichez la valeur sans la tester, elle sera hors du cadre attendu pour la valeur retournée. Dans le cas de fonctions qui ne retournent à priori pas d'information, la valeur de retour sera YAPI_SUCCESS si tout va bien, et un code d'erreur différent en cas d'échec.

Quand vous travaillez sans les exceptions, il est possible d'obtenir un code d'erreur et un message expliquant l'origine de l'erreur en le demandant à l'objet qui a retourné une erreur à l'aide des méthodes errType() et errMessage(). Ce sont les même informations qui auraient été associées à l'exception si elles avaient été actives.

17. Utilisation du Yocto-RS485 en Python

Python est un langage interprété orienté objet développé par Guido van Rossum. Il offre l'avantage d'être gratuit et d'être disponible pour la plupart de plate-formes tant Windows qu'Unix. C'est un language idéal pour écrire des petits scripts sur un coin de table. La librairie Yoctopuce est compatible avec Python 2.6+ et 3+. Elle fonctionne sous Windows, Max OS X et Linux tant Intel qu'ARM. La librairie a été testée avec Python 2.6 et Python 3.2. Les interpréteurs Python sont disponibles sur le site de Python 45.

17.1. Fichiers sources

Les classes de la librairie Yoctopuce46 pour Python que vous utiliserez vous sont fournies au format source. Copiez tout le contenu du répertoire Sources dans le répertoire de votre choix et ajoutez ce répertoire à la variable d'environnement PYTHONPATH. Si vous utilisez un IDE pour programmer en Python, référez-vous à sa documentation afin le configurer de manière à ce qu'il retrouve automatiquement les fichiers sources de l'API.

17.2. Librairie dynamique

Une partie de la librairie de bas-niveau est écrite en C, mais vous n'aurez a priori pas besoin d'interagir directement avec elle: cette partie est fournie sous forme de DLL sous Windows, de fichier .so sous Unix et de fichier .dylib sous Mac OS X. Tout a été fait pour que l'interaction avec cette librairie se fasse aussi simplement que possible depuis Python: les différentes versions de la librairie dynamique correspondant aux différents systèmes d'exploitation et architectures sont stockées dans le répertoire cdll. L'API va charger automatiquement le bon fichier lors de son initialisation. Vous n'aurez donc pas à vous en soucier.

Si un jour vous deviez vouloir recompiler la librairie dynamique, vous trouverez tout son code source dans la librairie Yoctopuce pour le C++.

Afin de les garder simples, tous les exemples fournis dans cette documentation sont des applications consoles. Il va de soit que que le fonctionnement des librairies est strictement identiques si vous les intégrez dans une application dotée d'une interface graphique.

17.3. Contrôle de la fonction SerialPort

Il suffit de quelques lignes de code pour piloter un Yocto-RS485. Voici le squelette d'un fragment de code Python qui utilise la fonction SerialPort.


[...]
# On active la détection des modules sur USB
errmsg=YRefParam()
YAPI.RegisterHub("usb",errmsg)
[...]

# On récupère l'objet permettant d'intéragir avec le module
serialport = YSerialPort.FindSerialPort("RS485MK1-123456.serialPort")

# Pour gérer le hot-plug, on vérifie que le module est là
if serialport.isOnline():
    # use serialport.get_serialMode()
    [...]
   
[...]  

Voyons maintenant en détail ce que font ces quelques lignes.

YAPI.RegisterHub

La fonction YAPI.RegisterHub initialise l'API de Yoctopuce en indiquant où les modules doivent être recherchés. Utilisée avec le paramètre "usb", elle permet de travailler avec les modules connectés localement à la machine. Si l'initialisation se passe mal, cette fonction renverra une valeur différente de YAPI.SUCCESS, et retournera via l'objet errmsg une explication du problème.

YSerialPort.FindSerialPort

La fonction YSerialPort.FindSerialPort permet de retrouver un port série en fonction du numéro de série de son module hôte et de son nom de fonction. Mais vous pouvez tout aussi bien utiliser des noms logiques que vous auriez préalablement configurés. Imaginons un module Yocto-RS485 avec le numéros de série RS485MK1-123456 que vous auriez appelé "MonModule" et dont vous auriez nommé la fonction serialPort "MaFonction", les cinq appels suivants seront strictement équivalents (pour autant que MaFonction ne soit définie qu'une fois, pour éviter toute ambiguïté):


serialport = YSerialPort.FindSerialPort("RS485MK1-123456.serialPort")
serialport = YSerialPort.FindSerialPort("RS485MK1-123456.MaFonction")
serialport = YSerialPort.FindSerialPort("MonModule.serialPort")
serialport = YSerialPort.FindSerialPort("MonModule.MaFonction")
serialport = YSerialPort.FindSerialPort("MaFonction")

YSerialPort.FindSerialPort renvoie un objet que vous pouvez ensuite utiliser à loisir pour contrôler le port série.

isOnline

La méthode isOnline() de l'objet renvoyé par YSerialPort.FindSerialPort permet de savoir si le module correspondant est présent et en état de marche.

modbusWrite* et modbusRead*

Les méthodes modbusWrite*() et modbusRead*()de l'objet renvoyé par YFindSerialPort.FindSerialPort permettent de communiquer en MODDUS sur la liaison RS485.

Un exemple réel

Lancez votre interpréteur Python et ouvrez le script correspondant, fourni dans le répertoire Examples/Doc-GettingStarted-Yocto-RS485 de la librairie Yoctopuce.

Vous reconnaîtrez dans cet exemple l'utilisation des fonctions expliquées ci-dessus, cette fois utilisées avec le décorum nécessaire à en faire un petit programme d'exemple concret.

#!/usr/bin/python
# -*- coding: utf-8 -*-
import os, sys

from yocto_api import *
from yocto_serialport import *

# Setup the API to use local USB devices. You can
# use an IP address instead of 'usb' if the device
# is connected to a network.

errmsg = YRefParam()
if YAPI.RegisterHub("usb", errmsg) != YAPI.SUCCESS:
    sys.exit("init error" + errmsg.value)

if len(sys.argv) > 1:
    serialPort = YSerialPort.FindSerialPort(sys.argv[1])
else:
    serialPort = YSerialPort.FirstSerialPort()
    if serialPort is None:
        sys.exit('No module connected (check cable)')

print("Please enter the MODBUS slave address (1...255)")
slave = 0
while (slave < 1) or (slave > 255):
    slave = int(input("slave: "))  # use raw_input in python 2.x

reg = 0
while (reg < 1) or (reg >= 50000) or (reg % 10000) == 0:
    print("Please select a Coil No (>=1), Input Bit No (>=10001+),")
    print("Input Register No (>=30001) or Register No (>=40001)")
    reg = int(input("No: "))  # use raw_input in python 2.x

while serialPort.isOnline():
    if reg >= 40001:
        val = serialPort.modbusReadRegisters(slave, reg - 40001, 1)[0]
    elif reg >= 30001:
        val = serialPort.modbusReadInputRegisters(slave, reg - 30001, 1)[0]
    elif reg >= 10001:
        val = serialPort.modbusReadInputBits(slave, reg - 10001, 1)[0]
    else:
        val = serialPort.modbusReadBits(slave, reg - 1, 1)[0]

    print("Current value: " + str(val))
    print("Press ENTER to read again, Q to quit")
    if (reg % 30000) < 10000:
        print(" or enter a new value")

    cmd = input(": ")  # use raw_input in python 2.x
    if (cmd == "q") or (cmd == "Q"):
        sys.exit()

    if cmd != "" and ((reg % 30000) < 10000):
        val = int(cmd)
        if reg >= 30001:
            serialPort.modbusWriteRegister(slave, reg - 30001, val)
        else:
            serialPort.modbusWriteBit(slave, reg - 1, val)
YAPI.FreeAPI()

17.4. Contrôle de la partie module

Chaque module peut-être contrôlé d'une manière similaire, vous trouverez ci-dessous un simple programme d'exemple affichant les principaux paramètres d'un module et permettant d'activer la balise de localisation.

#!/usr/bin/python
# -*- coding: utf-8 -*-
import os, sys

from yocto_api import *


def usage():
    sys.exit("usage: demo <serial or logical name> [ON/OFF]")


errmsg = YRefParam()
if YAPI.RegisterHub("usb", errmsg) != YAPI.SUCCESS:
    sys.exit("RegisterHub error: " + str(errmsg))

if len(sys.argv) < 2:
    usage()

m = YModule.FindModule(sys.argv[1])  # # use serial or logical name

if m.isOnline():
    if len(sys.argv) > 2:
        if sys.argv[2].upper() == "ON":
            m.set_beacon(YModule.BEACON_ON)
        if sys.argv[2].upper() == "OFF":
            m.set_beacon(YModule.BEACON_OFF)

    print("serial:       " + m.get_serialNumber())
    print("logical name: " + m.get_logicalName())
    print("luminosity:   " + str(m.get_luminosity()))
    if m.get_beacon() == YModule.BEACON_ON:
        print("beacon:       ON")
    else:
        print("beacon:       OFF")
    print("upTime:       " + str(m.get_upTime() / 1000) + " sec")
    print("USB current:  " + str(m.get_usbCurrent()) + " mA")
    print("logs:\n" + m.get_lastLogs())
else:
    print(sys.argv[1] + " not connected (check identification and USB cable)")
YAPI.FreeAPI()
 

Chaque propriété xxx du module peut être lue grâce à une méthode du type YModule.get_xxxx(), et les propriétés qui se sont pas en lecture seule peuvent être modifiées à l'aide de la méthode YModule.set_xxx() Pour plus de détails concernant ces fonctions utilisées, reportez-vous aux chapitre API

Modifications des réglages du module

Lorsque que vous souhaitez modifier les réglages d'un module, il suffit d'appeler la fonction YModule.set_xxx() correspondante, cependant cette modification n'a lieu que dans la mémoire vive du module: si le module redémarre, les modifications seront perdues. Pour qu'elle soient mémorisées de manière persistante, il est nécessaire de demander au module de sauvegarder sa configuration courante dans sa mémoire non volatile. Pour cela il faut utiliser la méthode YModule.saveToFlash(). Inversement il est possible de forcer le module à oublier ses réglages courants en utilisant la méthode YModule.revertFromFlash(). Ce petit exemple ci-dessous vous permet changer le nom logique d'un module.

#!/usr/bin/python
# -*- coding: utf-8 -*-
import os, sys

from yocto_api import *


def usage():
    sys.exit("usage: demo <serial or logical name> <new logical name>")


if len(sys.argv) != 3:
    usage()

errmsg = YRefParam()
if YAPI.RegisterHub("usb", errmsg) != YAPI.SUCCESS:
    sys.exit("RegisterHub error: " + str(errmsg))

m = YModule.FindModule(sys.argv[1])  # use serial or logical name
if m.isOnline():
    newname = sys.argv[2]
    if not YAPI.CheckLogicalName(newname):
        sys.exit("Invalid name (" + newname + ")")
    m.set_logicalName(newname)
    m.saveToFlash()  # do not forget this
    print("Module: serial= " + m.get_serialNumber() + " / name= " + m.get_logicalName())
else:
    sys.exit("not connected (check identification and USB cable")
YAPI.FreeAPI()

Attention, le nombre de cycles d'écriture de la mémoire non volatile du module est limité. Passé cette limite plus rien ne garantit que la sauvegarde des réglages se passera correctement. Cette limite, liée à la technologie employée par le micro-processeur du module se situe aux alentour de 100000 cycles. Pour résumer vous ne pouvez employer la fonction YModule.saveToFlash() que 100000 fois au cours de la vie du module. Veillez donc à ne pas appeler cette fonction depuis l'intérieur d'une boucle.

Enumeration des modules

Obtenir la liste des modules connectés se fait à l'aide de la fonction YModule.yFirstModule() qui renvoie le premier module trouvé, il suffit ensuite d'appeler la mehode nextModule() de cet objet pour trouver les modules suivants, et ce tant que la réponse n'est pas un null. Ci-dessous un petit exemple listant les module connectés

#!/usr/bin/python
# -*- coding: utf-8 -*-
import os, sys


from yocto_api import *

errmsg = YRefParam()

# Setup the API to use local USB devices
if YAPI.RegisterHub("usb", errmsg) != YAPI.SUCCESS:
    sys.exit("init error" + str(errmsg))

print('Device list')

module = YModule.FirstModule()
while module is not None:
    print(module.get_serialNumber() + ' (' + module.get_productName() + ')')
    module = module.nextModule()
YAPI.FreeAPI()

17.5. Gestion des erreurs

Lorsque vous implémentez un programme qui doit interagir avec des modules USB, vous ne pouvez pas faire abstraction de la gestion des erreurs. Il y aura forcément une occasion où un utilisateur aura débranché le périphérique, soit avant de lancer le programme, soit même en pleine opération. La librairie Yoctopuce est prévue pour vous aider à supporter ce genre de comportements, mais votre code doit néanmoins être fait pour se comporter au mieux pour interpréter les erreurs signalées par la librairie.

La manière la plus simple de contourner le problème est celle que nous avons employé pour les petits exemples précédents de ce chapitre: avant d'accéder à un module, on vérifie qu'il est en ligne avec la méthode isOnline() et on suppose ensuite qu'il va y rester pendant la fraction de seconde nécessaire à exécuter les lignes de code suivantes. Ce n'est pas parfait, mais ça peut suffire dans certains cas. Il faut toutefois être conscient qu'on ne peut pas totalement exclure une erreur se produisant après le isOnline(), qui pourrait faire planter le programme. La seule manière de l'éviter est d'implémenter une des deux techniques de gestion des erreurs décrites ci-dessous.

La méthode recommandée par la plupart des langages de programmation pour la gestion des erreurs imprévisibles est l'utilisation d'exceptions. C'est le comportement par défaut de la librairie Yoctopuce. Si une erreur se produit alors qu'on essaie d'accéder à un module, la librairie va lancer une exception. Dans ce cas, de trois choses l'une:

Comme cette dernière situation n'est pas la plus souhaitable, la librairie Yoctopuce offre une autre alternative pour la gestion des erreurs, permettant de faire un programme robuste sans devoir attraper les exceptions à chaque ligne de code. Il suffit d'appeler la fonction YAPI.DisableExceptions() pour commuter la librairie dans un mode où les exceptions de chaque fonction sont systématiquement remplacées par des valeurs de retour particulières, qui peuvent être testées par l'appelant lorsque c'est pertinent. Le nom de la valeur de retour en cas d'erreur pour chaque fonction est systématiquement documenté dans la référence de la librairie. Il suit toujours la même logique: une méthode get_state() retournera une valeur Y_STATE_INVALID, une méthode get_currentValue retournera une valeur Y_CURRENTVALUE_INVALID, etc. Dans tous les cas, la valeur retournée sera du type attendu, et ne sera pas un pointeur nul qui risquerait de faire crasher votre programme. Au pire, si vous affichez la valeur sans la tester, elle sera hors du cadre attendu pour la valeur retournée. Dans le cas de fonctions qui ne retournent à priori pas d'information, la valeur de retour sera YAPI_SUCCESS si tout va bien, et un code d'erreur différent en cas d'échec.

Quand vous travaillez sans les exceptions, il est possible d'obtenir un code d'erreur et un message expliquant l'origine de l'erreur en le demandant à l'objet qui a retourné une erreur à l'aide des méthodes errType() et errMessage(). Ce sont les même informations qui auraient été associées à l'exception si elles avaient été actives.

18. Utilisation du Yocto-RS485 en Java

Java est un langage orienté objet développé par Sun Microsystem. Son principal avantage est la portabilité, mais cette portabilité a un coût. Java fait une telle abstraction des couches matérielles qu'il est très difficile d'interagir directement avec elles. C'est pourquoi l'API java standard de Yoctopuce ne fonctionne pas en natif: elle doit passer par l'intermédiaire d'un VirtualHub pour pouvoir communiquer avec les modules Yoctopuce.

18.1. Préparation

Connectez vous sur le site de Yoctopuce et téléchargez les éléments suivants:

La librairie est disponible en fichier sources, mais elle aussi disponible sous la forme d'un fichier jar. Branchez vos modules, Décompressez les fichiers de la librairie dans un répertoire de votre choix. Lancez le programme VirtualHub, et vous pouvez commencer vos premiers test. Vous n'avez pas besoin d'installer de driver.

Afin de les garder simples, tous les exemples fournis dans cette documentation sont des applications consoles. Il va de soit que que le fonctionnement des librairies est strictement identiques si vous les intégrez dans une application dotée d'une interface graphique.

18.2. Contrôle de la fonction SerialPort

Il suffit de quelques lignes de code pour piloter un Yocto-RS485. Voici le squelette d'un fragment de code Java qui utilise la fonction SerialPort.


[...]
// On active l'accès aux modules locaux à travers le VirtualHub
YAPI.RegisterHub("127.0.0.1");
[...]

// On récupère l'objet permettant d'intéragir avec le module
serialport = YSerialPort.FindSerialPort("RS485MK1-123456.serialPort");

// Pour gérer le hot-plug, on vérifie que le module est là
if (serialport.isOnline())
{
    // Utiliser serialport.get_serialMode()
    [...]
}
   
[...]

Voyons maintenant en détail ce que font ces quelques lignes.

YAPI.RegisterHub

La fonction YAPI.RegisterHub initialise l'API de Yoctopuce en indiquant où les modules doivent être recherchés. Le paramètre est l'adresse du virtual hub capable de voir les modules. Si l'initialisation se passe mal, une exception sera générée.

YSerialPort.FindSerialPort

La fonction YSerialPort.FindSerialPort permet de retrouver un port série en fonction du numéro de série de son module hôte et de son nom de fonction. Mais vous pouvez tout aussi bien utiliser des noms logiques que vous auriez préalablement configurés. Imaginons un module Yocto-RS485 avec le numéros de série RS485MK1-123456 que vous auriez appelé "MonModule" et dont vous auriez nommé la fonction serialPort "MaFonction", les cinq appels suivants seront strictement équivalents (pour autant que MaFonction ne soit définie qu'une fois, pour éviter toute ambiguïté):


serialport = YSerialPort.FindSerialPort("RS485MK1-123456.serialPort")
serialport = YSerialPort.FindSerialPort("RS485MK1-123456.MaFonction")
serialport = YSerialPort.FindSerialPort("MonModule.serialPort")
serialport = YSerialPort.FindSerialPort("MonModule.MaFonction")
serialport = YSerialPort.FindSerialPort("MaFonction")

YSerialPort.FindSerialPort renvoie un objet que vous pouvez ensuite utiliser à loisir pour contrôler le port série.

isOnline

La méthode isOnline() de l'objet renvoyé par YSerialPort.FindSerialPort permet de savoir si le module correspondant est présent et en état de marche.

modbusWrite* et modbusRead*

Les méthodes modbusWrite*() et modbusRead*()de l'objet renvoyé par YFindSerialPort.FindSerialPort permettent de communiquer en MODDUS sur la liaison RS485.

Un exemple réel

Lancez votre environnement java et ouvrez le projet correspondant, fourni dans le répertoire Examples/Doc-GettingStarted-Yocto-RS485 de la librairie Yoctopuce.

Vous reconnaîtrez dans cet exemple l'utilisation des fonctions expliquées ci-dessus, cette fois utilisées avec le décorum nécessaire à en faire un petit programme d'exemple concret.

import com.yoctopuce.YoctoAPI.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Demo {

    public static void main(String[] args)   {
        try {
            // setup the API to use local VirtualHub
            YAPI.RegisterHub("127.0.0.1");
        } catch (YAPI_Exception ex) {
            System.out.println("Cannot contact VirtualHub on 127.0.0.1 (" + ex.getLocalizedMessage() + ")");
            System.out.println("Ensure that the VirtualHub application is running");
            System.exit(1);
        }

        YSerialPort serialPort;
        if (args.length > 0) {
            serialPort = YSerialPort.FindSerialPort(args[0]);
        } else {
            serialPort = YSerialPort.FirstSerialPort();
            if (serialPort == null) {
                System.out.println("No module connected (check USB cable)");
                System.exit(1);
            }
        }

        int slave, reg, val;
        String cmd;

        InputStreamReader inputStreamReader = new InputStreamReader(System.in);
        BufferedReader console = new BufferedReader(inputStreamReader);
        try {
            do {
                System.out.println("Please enter the MODBUS slave address (1...255)");
                System.out.print("Slave: ");
                slave = Integer.parseInt(console.readLine());
            } while(slave < 1 || slave > 255);
            do {
                System.out.println("Please select a Coil No (>=1), Input Bit No (>=10001+),");
                System.out.println("       Input Register No (>=30001) or Register No (>=40001)");
                System.out.print("No: ");
                reg = Integer.parseInt(console.readLine());
            } while(reg < 1 || reg >= 50000 || (reg % 10000) == 0);
            while(true) {
                if(reg >= 40001) {
                    val = serialPort.modbusReadRegisters(slave, reg-40001, 1).get(0);
                } else if(reg >= 30001) {
                    val = serialPort.modbusReadInputRegisters(slave, reg-30001, 1).get(0);
                } else if(reg >= 10001) {
                    val = serialPort.modbusReadInputBits(slave, reg-10001, 1).get(0);
                } else {
                    val = serialPort.modbusReadBits(slave, reg-1, 1).get(0);
                }
                System.out.println("Current value: "+Integer.toString(val));
                System.out.print("Press ENTER to read again, Q to quit");
                if((reg % 30000) < 10000) {
                    System.out.print(" or enter a new value");
                }
                System.out.print(": ");
                cmd = console.readLine();
                if(cmd.equals("q") || cmd.equals("Q")) break;
                if(!cmd.equals("") && (reg % 30000) < 10000) {
                    val = Integer.parseInt(cmd);
                    if(reg >= 30001) {
                        serialPort.modbusWriteRegister(slave, reg-30001, val);
                    } else {
                        serialPort.modbusWriteBit(slave, reg-1, val);
                    }
                }
            }
        } catch(Exception ex) {
            ex.printStackTrace();
        }

        YAPI.FreeAPI();
    }
}
 

18.3. Contrôle de la partie module

Chaque module peut-être contrôlé d'une manière similaire, vous trouverez ci-dessous un simple programme d'exemple affichant les principaux paramètres d'un module et permettant d'activer la balise de localisation.


import com.yoctopuce.YoctoAPI.*;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Demo {

    public static void main(String[] args)
    {
        try {
            // setup the API to use local VirtualHub
            YAPI.RegisterHub("127.0.0.1");
        } catch (YAPI_Exception ex) {
            System.out.println("Cannot contact VirtualHub on 127.0.0.1 (" + ex.getLocalizedMessage() + ")");
            System.out.println("Ensure that the VirtualHub application is running");
            System.exit(1);
        }
        System.out.println("usage: demo [serial or logical name] [ON/OFF]");

        YModule module;
        if (args.length == 0) {
            module = YModule.FirstModule();
            if (module == null) {
                System.out.println("No module connected (check USB cable)");
                System.exit(1);
            }
        } else {
            module = YModule.FindModule(args[0]);  // use serial or logical name
        }

        try {
            if (args.length > 1) {
                if (args[1].equalsIgnoreCase("ON")) {
                    module.setBeacon(YModule.BEACON_ON);
                } else {
                    module.setBeacon(YModule.BEACON_OFF);
                }
            }
            System.out.println("serial:       " + module.get_serialNumber());
            System.out.println("logical name: " + module.get_logicalName());
            System.out.println("luminosity:   " + module.get_luminosity());
            if (module.get_beacon() == YModule.BEACON_ON) {
                System.out.println("beacon:       ON");
            } else {
                System.out.println("beacon:       OFF");
            }
            System.out.println("upTime:       " + module.get_upTime() / 1000 + " sec");
            System.out.println("USB current:  " + module.get_usbCurrent() + " mA");
            System.out.println("logs:\n" + module.get_lastLogs());
        } catch (YAPI_Exception ex) {
            System.out.println(args[1] + " not connected (check identification and USB cable)");
        }
        YAPI.FreeAPI();
    }
}
 

Chaque propriété xxx du module peut être lue grâce à une méthode du type YModule.get_xxxx(), et les propriétés qui se sont pas en lecture seule peuvent être modifiées à l'aide de la méthode YModule.set_xxx() Pour plus de détails concernant ces fonctions utilisées, reportez-vous aux chapitre API

Modifications des réglages du module

Lorsque que vous souhaitez modifier les réglages d'un module, il suffit d'appeler la fonction YModule.set_xxx() correspondante, cependant cette modification n'a lieu que dans la mémoire vive du module: si le module redémarre, les modifications seront perdues. Pour qu'elle soient mémorisées de manière persistante, il est nécessaire de demander au module de sauvegarder sa configuration courante dans sa mémoire non volatile. Pour cela il faut utiliser la méthode YModule.saveToFlash(). Inversement il est possible de forcer le module à oublier ses réglages courants en utilisant la méthode YModule.revertFromFlash(). Ce petit exemple ci-dessous vous permet changer le nom logique d'un module.

import com.yoctopuce.YoctoAPI.*;

public class Demo {

    public static void main(String[] args)
    {
        try {
            // setup the API to use local VirtualHub
            YAPI.RegisterHub("127.0.0.1");
        } catch (YAPI_Exception ex) {
            System.out.println("Cannot contact VirtualHub on 127.0.0.1 (" + ex.getLocalizedMessage() + ")");
            System.out.println("Ensure that the VirtualHub application is running");
            System.exit(1);
        }

        if (args.length != 2) {
            System.out.println("usage: demo <serial or logical name> <new logical name>");
            System.exit(1);
        }

        YModule m;
        String newname;

        m = YModule.FindModule(args[0]); // use serial or logical name

        try {
            newname = args[1];
            if (!YAPI.CheckLogicalName(newname))
                {
                    System.out.println("Invalid name (" + newname + ")");
                    System.exit(1);
                }

            m.set_logicalName(newname);
            m.saveToFlash(); // do not forget this

            System.out.println("Module: serial= " + m.get_serialNumber());
            System.out.println(" / name= " + m.get_logicalName());
        } catch (YAPI_Exception ex) {
            System.out.println("Module " + args[0] + "not connected (check identification and USB cable)");
            System.out.println(ex.getMessage());
            System.exit(1);
        }

        YAPI.FreeAPI();
    }
}
 

Attention, le nombre de cycles d'écriture de la mémoire non volatile du module est limité. Passé cette limite plus rien ne garantit que la sauvegarde des réglages se passera correctement. Cette limite, liée à la technologie employée par le micro-processeur du module se situe aux alentour de 100000 cycles. Pour résumer vous ne pouvez employer la fonction YModule.saveToFlash() que 100000 fois au cours de la vie du module. Veillez donc à ne pas appeler cette fonction depuis l'intérieur d'une boucle.

Enumeration des modules

Obtenir la liste des modules connectés se fait à l'aide de la fonction YModule.yFirstModule() qui renvoie le premier module trouvé, il suffit ensuite d'appeler la mehode nextModule() de cet objet pour trouver les modules suivants, et ce tant que la réponse n'est pas un null. Ci-dessous un petit exemple listant les module connectés

import com.yoctopuce.YoctoAPI.*;

public class Demo {

    public static void main(String[] args)
    {
        try {
            // setup the API to use local VirtualHub
            YAPI.RegisterHub("127.0.0.1");
        } catch (YAPI_Exception ex) {
            System.out.println("Cannot contact VirtualHub on 127.0.0.1 (" + ex.getLocalizedMessage() + ")");
            System.out.println("Ensure that the VirtualHub application is running");
            System.exit(1);
        }

        System.out.println("Device list");
        YModule module = YModule.FirstModule();
        while (module != null) {
            try {
                System.out.println(module.get_serialNumber() + " (" + module.get_productName() + ")");
            } catch (YAPI_Exception ex) {
                break;
            }
            module = module.nextModule();
        }
        YAPI.FreeAPI();
    }
}
 

18.4. Gestion des erreurs

Lorsque vous implémentez un programme qui doit interagir avec des modules USB, vous ne pouvez pas faire abstraction de la gestion des erreurs. Il y aura forcément une occasion où un utilisateur aura débranché le périphérique, soit avant de lancer le programme, soit même en pleine opération. La librairie Yoctopuce est prévue pour vous aider à supporter ce genre de comportements, mais votre code doit néanmoins être fait pour se comporter au mieux pour interpréter les erreurs signalées par la librairie.

La manière la plus simple de contourner le problème est celle que nous avons employé pour les petits exemples précédents de ce chapitre: avant d'accéder à un module, on vérifie qu'il est en ligne avec la méthode isOnline() et on suppose ensuite qu'il va y rester pendant la fraction de seconde nécessaire à exécuter les lignes de code suivantes. Ce n'est pas parfait, mais ça peut suffire dans certains cas. Il faut toutefois être conscient qu'on ne peut pas totalement exclure une erreur se produisant après le isOnline(), qui pourrait faire planter le programme.

Dans l'API java, le traitement d'erreur est implémenté au moyen d'exceptions. Vous devrez donc intercepter et traiter correctement ces exceptions si vous souhaitez avoir un projet fiable qui ne crashera pas des que vous débrancherez un module.

19. Utilisation du Yocto-RS485 avec Android

A vrai dire, Android n'est pas un langage de programmation, c'est un système d'exploitation développé par Google pour les appareils portables tels que smart phones et tablettes. Mais il se trouve que sous Android tout est programmé avec le même langage de programmation: Java. En revanche les paradigmes de programmation et les possibilités d'accès au hardware sont légèrement différentes par rapport au Java classique, ce qui justifie un chapitre à part sur la programmation Android.

19.1. Accès Natif et Virtual Hub.

Contrairement à l'API Java classique, l'API Java pour Android accède aux modules USB de manière native. En revanche, comme il n'existe pas de VirtualHub tournant sous Android, il n'est pas possible de prendre le contrôle à distance de modules Yoctopuce pilotés par une machine sous Android. Bien sûr, l'API Java pour Android reste parfaitement capable de se connecter à un VirtualHub tournant sur un autre OS.

19.2. Préparation

Connectez-vous sur le site de Yoctopuce et téléchargez la librairie de programmation pour Java pour Android49. La librairie est disponible en fichiers sources, mais elle aussi disponible sous la forme d'un fichier jar. Branchez vos modules, décompressez les fichiers de la librairie dans le répertoire de votre choix. Et configurez votre environnement de programmation Android pour qu'il puisse les trouver.

Afin de les garder simples, tous les exemples fournis dans cette documentation sont des fragments d'application Android. Vous devrez les intégrer dans vos propres applications Android pour les faire fonctionner. En revanche vous pourrez trouver des applications complètes dans les exemples fournis avec la librairie Java pour Android.

19.3. Compatibilité

Dans un monde idéal, il suffirait d'avoir un téléphone sous Android pour pouvoir faire fonctionner des modules Yoctopuce. Malheureusement, la réalité est légèrement différente, un appareil tournant sous Android doit répondre à un certain nombre d'exigences pour pouvoir faire fonctionner des modules USB Yoctopuce en natif.

Android 4.x

Android 4.0 (api 14) et suivants sont officiellement supportés. Théoriquement le support USB host fonctionne depuis Android 3.1. Mais sachez que Yoctopuce ne teste régulièrement l'API Java pour Android qu'à partir de Android 4.

Support USB host

Il faut bien sûr que votre machine dispose non seulement d'un port USB, mais il faut aussi que ce port soit capable de tourner en mode host. En mode host, la machine prend littéralement le contrôle des périphériques qui lui sont raccordés. Les ports USB d'un ordinateur bureau, par exemple, fonctionnent mode host. Le pendant du mode host est le mode device. Les clefs USB par exemple fonctionnent en mode device: elles ne peuvent qu'être contrôlées par un host. Certains ports USB sont capables de fonctionner dans les deux modes, ils s'agit de ports OTG (On The Go). Il se trouve que beaucoup d'appareils portables ne fonctionnent qu'en mode "device": ils sont conçus pour être branchés à chargeur ou un ordinateur de bureau, rien de plus. Il est donc fortement recommandé de lire attentivement les spécifications techniques d'un produit fonctionnant sous Android avant d'espérer le voir fonctionner avec des modules Yoctopuce.

Disposer d'une version correcte d'Android et de ports USB fonctionnant en mode host ne suffit malheureusement pas pour garantir un bon fonctionnement avec des modules Yoctopuce sous Android. En effet certains constructeurs configurent leur image Android afin que les périphériques autres que clavier et mass storage soit ignorés, et cette configuration est difficilement détectable. En l'état actuel des choses, le meilleur moyen de savoir avec certitude si un matériel Android spécifique fonctionne avec les modules Yoctopuce consiste à essayer.

Matériel supporté

La librairie est testée et validée sur les machines suivantes:

Si votre machine Android n'est pas capable de faire fonctionner nativement des modules Yoctopuce, il vous reste tout de même la possibilité de contrôler à distance des modules pilotés par un VirtualHub sur un autre OS ou un YoctoHub50.

19.4. Activer le port USB sous Android

Par défaut Android n’autorise pas une application à accéder aux périphériques connectés au port USB. Pour que votre application puisse interagir avec un module Yoctopuce branché directement sur votre tablette sur un port USB quelques étapes supplémentaires sont nécessaires. Si vous comptez uniquement interagir avec des modules connectés sur une autre machine par IP, vous pouvez ignorer cette section.

Il faut déclarer dans son AndroidManifest.xml l'utilisation de la fonctionnalité "USB Host" en ajoutant le tag <uses-feature android:name="android.hardware.usb.host" /> dans la section manifest.


<manifest ...>
    ...
    <uses-feature android:name="android.hardware.usb.host" />;
    ...
</manifest>

Lors du premier accès à un module Yoctopuce, Android va ouvrir une fenêtre pour informer l'utilisateur que l'application va accéder module connecté. L'utilisateur peut refuser ou autoriser l’accès au périphérique. Si l'utilisateur accepte, l'application pourra accéder au périphérique connecté jusqu'à la prochaine déconnexion du périphérique. Pour que la librairie Yoctopuce puisse gérer correctement ces autorisations, il faut lui fournir un pointeur sur le contexte de l'application en appelant la méthode EnableUSBHost de la classe YAPI avant le premier accès USB. Cette fonction prend en argument un objet de la classe android.content.Context (ou d'une sous-classe). Comme la classe Activity est une sous-classe de Context, le plus simple est de d'appeler YAPI.EnableUSBHost(this); dans la méthode onCreate de votre application. Si l'objet passé en paramètre n'est pas du bon type, une exception YAPI_Exception sera générée.


...
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    try {
                // Pass the application Context to the Yoctopuce Library
        YAPI.EnableUSBHost(this);
        } catch (YAPI_Exception e) {
                Log.e("Yocto",e.getLocalizedMessage());
        }
}
...

Lancement automatique

Il est possible d'enregistrer son application comme application par défaut pour un module USB, dans ce cas des qu'un module sera connecté au système, l'application sera lancée automatiquement. Il faut ajouter <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"/> dans la section <intent-filter> de l'activité principale. La section <activity> doit contenir un pointeur sur un fichier xml qui contient la liste des modules USB qui peuvent lancer l'application.


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    ...
    <uses-feature android:name="android.hardware.usb.host" />
    ...
    <application ... >
        <activity
            android:name=".MainActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <meta-data
                android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
                android:resource="@xml/device_filter" />
        </activity>
    </application>

</manifest>

Le fichier XML qui contient la liste des modules qui peuvent lancer l'application doit être sauvé dans le répertoire res/xml. Ce fichier contient une liste de vendorId et deviceID USB en décimal. L'exemple suivant lance l'application dès qu'un Yocto-Relay ou un Yocto-PowerRelay est connecté. Vous pouvez trouver le vendorId et deviceId des modules Yoctopuce dans la section caractéristiques de la documentation.


<?xml version="1.0" encoding="utf-8"?>

<resources>
    <usb-device vendor-id="9440" product-id="12" />
    <usb-device vendor-id="9440" product-id="13" />
</resources>

19.5. Contrôle de la fonction SerialPort

Il suffit de quelques lignes de code pour piloter un Yocto-RS485. Voici le squelette d'un fragment de code Java qui utilise la fonction SerialPort.


[...]
// On active la détection des modules sur USB
YAPI.EnableUSBHost(this);
YAPI.RegisterHub("usb");
[...]
// On récupère l'objet permettant de communiquer avec le module
serialport = YSerialPort.FindSerialPort("RS485MK1-123456.serialPort");

// Pour gérer le hot-plug, on vérifie que le module est là
if (serialport.isOnline())
{
    // Utilisez serialport.get_serialMode()
    [...]
}

[...]

Voyons maintenant en détail ce que font ces quelques lignes.

YAPI.EnableUSBHost

La fonction YAPI.EnableUSBHost initialise l'API avec le Context de l'application courante. Cette fonction prend en argument un objet de la classe android.content.Context (ou d'une sous-classe). Si vous comptez uniquement vous connecter à d'autres machines par IP vous cette fonction est factultative.

YAPI.RegisterHub

La fonction YAPI.RegisterHub initialise l'API de Yoctopuce en indiquant où les modules doivent être recherchés. Le paramètre est l'adresse du virtual hub capable de voir les modules. Si l'on passe la chaine de caractère "usb", l'API va travailler avec les modules connectés localement à la machine. Si l'initialisation se passe mal, une exception sera générée.

YSerialPort.FindSerialPort

La fonction YSerialPort.FindSerialPort permet de retrouver un port série en fonction du numéro de série de son module hôte et de son nom de fonction. Mais vous pouvez tout aussi bien utiliser des noms logiques que vous auriez préalablement configurés. Imaginons un module Yocto-RS485 avec le numéros de série RS485MK1-123456 que vous auriez appelé "MonModule" et dont vous auriez nommé la fonction serialPort "MaFonction", les cinq appels suivants seront strictement équivalents (pour autant que MaFonction ne soit définie qu'une fois, pour éviter toute ambiguïté):


serialport = YSerialPort.FindSerialPort("RS485MK1-123456.serialPort")
serialport = YSerialPort.FindSerialPort("RS485MK1-123456.MaFonction")
serialport = YSerialPort.FindSerialPort("MonModule.serialPort")
serialport = YSerialPort.FindSerialPort("MonModule.MaFonction")
serialport = YSerialPort.FindSerialPort("MaFonction")

YSerialPort.FindSerialPort renvoie un objet que vous pouvez ensuite utiliser à loisir pour contrôler le port série.

isOnline

La méthode isOnline() de l'objet renvoyé par YSerialPort.FindSerialPort permet de savoir si le module correspondant est présent et en état de marche.

modbusWrite* et modbusRead*

Les méthodes modbusWrite*() et modbusRead*()de l'objet renvoyé par YFindSerialPort.FindSerialPort permettent de communiquer en MODDUS sur la liaison RS485.

Un exemple réel

Lancez votre environnement java et ouvrez le projet correspondant, fourni dans le répertoire Examples/Doc-Examples de la librairie Yoctopuce.

Vous reconnaîtrez dans cet exemple l'utilisation des fonctions expliquées ci-dessus, cette fois utilisées avec le décorum nécessaire à en faire un petit programme d'exemple concret.

package com.yoctopuce.doc_examples;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;

import com.yoctopuce.YoctoAPI.YAPI;
import com.yoctopuce.YoctoAPI.YAPI_Exception;
import com.yoctopuce.YoctoAPI.YModule;
import com.yoctopuce.YoctoAPI.YSerialPort;

public class GettingStarted_Yocto_RS485 extends Activity implements OnItemSelectedListener
{

    private ArrayAdapter<String> aa;
    private YModule module = null;
    private TextView resultTextView;
    private EditText valueEditText;
    private EditText registerEditText;
    private EditText slaveEditText;
    private Spinner my_spin;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.gettingstarted_yocto_rs485);
        my_spin = (Spinner) findViewById(R.id.spinner1);
        my_spin.setOnItemSelectedListener(this);
        aa = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item);
        aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        my_spin.setAdapter(aa);
        slaveEditText = (EditText) findViewById(R.id.slavefield);
        registerEditText = (EditText) findViewById(R.id.registerfield);
        valueEditText = (EditText) findViewById(R.id.valuefield);
        resultTextView = (TextView) findViewById(R.id.resultvalue);
    }

    @Override
    protected void onStart()
    {
        super.onStart();

        try {
            aa.clear();
            YAPI.EnableUSBHost(this);
            YAPI.RegisterHub("usb");
            YSerialPort r = YSerialPort.FirstSerialPort();
            while (r != null) {
                String hwid = r.get_hardwareId();
                aa.add(hwid);
                r = r.nextSerialPort();
            }
        } catch (YAPI_Exception e) {
            e.printStackTrace();
        }
        // refresh Spinner with detected relay
        aa.notifyDataSetChanged();
    }

    @Override
    protected void onStop()
    {
        super.onStop();
        YAPI.FreeAPI();
    }

    private int _doModbus(String hwid, String slavefield, String registerfield, String cmdfield)
    {
        int slave;
        int reg;
        try {
            slave = Integer.parseInt(slavefield);
            reg = Integer.parseInt(registerfield);
        } catch (NumberFormatException ex) {
            Toast.makeText(this,ex.toString(),Toast.LENGTH_LONG).show();
            return 0;
        }
        try {
            YSerialPort serialPort = YSerialPort.FindSerialPort(hwid);
            // send new value to modbus device
            if(!cmdfield.equals("") && (reg % 30000) < 10000) {
                int cmd = Integer.parseInt(cmdfield);
                if(reg >= 30001) {
                    serialPort.modbusWriteRegister(slave, reg-30001, cmd);
                } else {
                    serialPort.modbusWriteBit(slave, reg-1, cmd);
                }
            }
            // read it again

            int val;
            if(reg >= 40001) {
                val = serialPort.modbusReadRegisters(slave, reg-40001, 1).get(0);
            } else if(reg >= 30001) {
                val = serialPort.modbusReadInputRegisters(slave, reg-30001, 1).get(0);
            } else if(reg >= 10001) {
                val = serialPort.modbusReadInputBits(slave, reg-10001, 1).get(0);
            } else {
                val = serialPort.modbusReadBits(slave, reg-1, 1).get(0);
            }
            return val;
        } catch (YAPI_Exception e) {
            e.printStackTrace();
        }
        return 0;
    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
    {
        resultTextView.setText("");
    }

    @Override
    public void onNothingSelected(AdapterView<?> arg0)
    {
    }

    public void refreshInfo(View view)
    {
        Object selectedItem = my_spin.getSelectedItem();
        if (selectedItem!=null) {
            String hwid = selectedItem.toString();
            int val = _doModbus(hwid, slaveEditText.getText().toString(),
                    registerEditText.getText().toString(), valueEditText.getText().toString());
            resultTextView.setText(Integer.toString(val));
        }
    }


}
 

19.6. Contrôle de la partie module

Chaque module peut-être contrôlé d'une manière similaire, vous trouverez ci-dessous un simple programme d'exemple affichant les principaux paramètres d'un module et permettant d'activer la balise de localisation.

package com.yoctopuce.doc_examples;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Switch;
import android.widget.TextView;

import com.yoctopuce.YoctoAPI.YAPI;
import com.yoctopuce.YoctoAPI.YAPI_Exception;
import com.yoctopuce.YoctoAPI.YModule;

public class ModuleControl extends Activity implements OnItemSelectedListener
{

    private ArrayAdapter<String> aa;
    private YModule module = null;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.modulecontrol);
        Spinner my_spin = (Spinner) findViewById(R.id.spinner1);
        my_spin.setOnItemSelectedListener(this);
        aa = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item);
        aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        my_spin.setAdapter(aa);
    }

    @Override
    protected void onStart()
    {
        super.onStart();

        try {
            aa.clear();
            YAPI.EnableUSBHost(this);
            YAPI.RegisterHub("usb");
            YModule r = YModule.FirstModule();
            while (r != null) {
                String hwid = r.get_hardwareId();
                aa.add(hwid);
                r = r.nextModule();
            }
        } catch (YAPI_Exception e) {
            e.printStackTrace();
        }
        // refresh Spinner with detected relay
        aa.notifyDataSetChanged();
    }

    @Override
    protected void onStop()
    {
        super.onStop();
        YAPI.FreeAPI();
    }

    private void DisplayModuleInfo()
    {
        TextView field;
        if (module == null)
            return;
        try {
            field = (TextView) findViewById(R.id.serialfield);
            field.setText(module.getSerialNumber());
            field = (TextView) findViewById(R.id.logicalnamefield);
            field.setText(module.getLogicalName());
            field = (TextView) findViewById(R.id.luminosityfield);
            field.setText(String.format("%d%%", module.getLuminosity()));
            field = (TextView) findViewById(R.id.uptimefield);
            field.setText(module.getUpTime() / 1000 + " sec");
            field = (TextView) findViewById(R.id.usbcurrentfield);
            field.setText(module.getUsbCurrent() + " mA");
            Switch sw = (Switch) findViewById(R.id.beaconswitch);
            sw.setChecked(module.getBeacon() == YModule.BEACON_ON);
            field = (TextView) findViewById(R.id.logs);
            field.setText(module.get_lastLogs());

        } catch (YAPI_Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
    {
        String hwid = parent.getItemAtPosition(pos).toString();
        module = YModule.FindModule(hwid);
        DisplayModuleInfo();
    }

    @Override
    public void onNothingSelected(AdapterView<?> arg0)
    {
    }

    public void refreshInfo(View view)
    {
        DisplayModuleInfo();
    }

    public void toggleBeacon(View view)
    {
        if (module == null)
            return;
        boolean on = ((Switch) view).isChecked();

        try {
            if (on) {
                module.setBeacon(YModule.BEACON_ON);
            } else {
                module.setBeacon(YModule.BEACON_OFF);
            }
        } catch (YAPI_Exception e) {
            e.printStackTrace();
        }
    }
}
 

Chaque propriété xxx du module peut être lue grâce à une méthode du type YModule.get_xxxx(), et les propriétés qui se sont pas en lecture seule peuvent être modifiées à l'aide de la méthode YModule.set_xxx() Pour plus de détails concernant ces fonctions utilisées, reportez-vous aux chapitre API

Modifications des réglages du module

Lorsque que vous souhaitez modifier les réglages d'un module, il suffit d'appeler la fonction YModule.set_xxx() correspondante, cependant cette modification n'a lieu que dans la mémoire vive du module: si le module redémarre, les modifications seront perdues. Pour qu'elle soient mémorisées de manière persistante, il est nécessaire de demander au module de sauvegarder sa configuration courante dans sa mémoire non volatile. Pour cela il faut utiliser la méthode YModule.saveToFlash(). Inversement il est possible de forcer le module à oublier ses réglages courants en utilisant la méthode YModule.revertFromFlash(). Ce petit exemple ci-dessous vous permet changer le nom logique d'un module.

package com.yoctopuce.doc_examples;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import com.yoctopuce.YoctoAPI.YAPI;
import com.yoctopuce.YoctoAPI.YAPI_Exception;
import com.yoctopuce.YoctoAPI.YModule;

public class SaveSettings extends Activity implements OnItemSelectedListener
{

    private ArrayAdapter<String> aa;
    private YModule module = null;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.savesettings);
        Spinner my_spin = (Spinner) findViewById(R.id.spinner1);
        my_spin.setOnItemSelectedListener(this);
        aa = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item);
        aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        my_spin.setAdapter(aa);
    }

    @Override
    protected void onStart()
    {
        super.onStart();

        try {
            aa.clear();
            YAPI.EnableUSBHost(this);
            YAPI.RegisterHub("usb");
            YModule r = YModule.FirstModule();
            while (r != null) {
                String hwid = r.get_hardwareId();
                aa.add(hwid);
                r = r.nextModule();
            }
        } catch (YAPI_Exception e) {
            e.printStackTrace();
        }
        // refresh Spinner with detected relay
        aa.notifyDataSetChanged();
    }

    @Override
    protected void onStop()
    {
        super.onStop();
        YAPI.FreeAPI();
    }

    private void DisplayModuleInfo()
    {
        TextView field;
        if (module == null)
            return;
        try {
            YAPI.UpdateDeviceList();// fixme
            field = (TextView) findViewById(R.id.logicalnamefield);
            field.setText(module.getLogicalName());
        } catch (YAPI_Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
    {
        String hwid = parent.getItemAtPosition(pos).toString();
        module = YModule.FindModule(hwid);
        DisplayModuleInfo();
    }

    @Override
    public void onNothingSelected(AdapterView<?> arg0)
    {
    }

    public void saveName(View view)
    {
        if (module == null)
            return;

        EditText edit = (EditText) findViewById(R.id.newname);
        String newname = edit.getText().toString();
        try {
            if (!YAPI.CheckLogicalName(newname)) {
                Toast.makeText(getApplicationContext(), "Invalid name (" + newname + ")", Toast.LENGTH_LONG).show();
                return;
            }
            module.set_logicalName(newname);
            module.saveToFlash(); // do not forget this
            edit.setText("");
        } catch (YAPI_Exception ex) {
            ex.printStackTrace();
        }
        DisplayModuleInfo();
    }

}
 

Attention, le nombre de cycles d'écriture de la mémoire non volatile du module est limité. Passé cette limite plus rien ne garantit que la sauvegarde des réglages se passera correctement. Cette limite, liée à la technologie employée par le micro-processeur du module se situe aux alentour de 100000 cycles. Pour résumer vous ne pouvez employer la fonction YModule.saveToFlash() que 100000 fois au cours de la vie du module. Veillez donc à ne pas appeler cette fonction depuis l'intérieur d'une boucle.

Enumeration des modules

Obtenir la liste des modules connectés se fait à l'aide de la fonction YModule.yFirstModule() qui renvoie le premier module trouvé, il suffit ensuite d'appeler la mehode nextModule() de cet objet pour trouver les modules suivants, et ce tant que la réponse n'est pas un null. Ci-dessous un petit exemple listant les module connectés

package com.yoctopuce.doc_examples;

import android.app.Activity;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.yoctopuce.YoctoAPI.YAPI;
import com.yoctopuce.YoctoAPI.YAPI_Exception;
import com.yoctopuce.YoctoAPI.YModule;

public class Inventory extends Activity
{

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.inventory);
    }

    public void refreshInventory(View view)
    {
        LinearLayout layout = (LinearLayout) findViewById(R.id.inventoryList);
        layout.removeAllViews();

        try {
            YAPI.UpdateDeviceList();
            YModule module = YModule.FirstModule();
            while (module != null) {
                String line = module.get_serialNumber() + " (" + module.get_productName() + ")";
                TextView tx = new TextView(this);
                tx.setText(line);
                tx.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);
                layout.addView(tx);
                module = module.nextModule();
            }
        } catch (YAPI_Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void onStart()
    {
        super.onStart();
        try {
            YAPI.EnableUSBHost(this);
            YAPI.RegisterHub("usb");
        } catch (YAPI_Exception e) {
            e.printStackTrace();
        }
        refreshInventory(null);
    }

    @Override
    protected void onStop()
    {
        super.onStop();
        YAPI.FreeAPI();
    }

}
 

19.7. Gestion des erreurs

Lorsque vous implémentez un programme qui doit interagir avec des modules USB, vous ne pouvez pas faire abstraction de la gestion des erreurs. Il y aura forcément une occasion où un utilisateur aura débranché le périphérique, soit avant de lancer le programme, soit même en pleine opération. La librairie Yoctopuce est prévue pour vous aider à supporter ce genre de comportements, mais votre code doit néanmoins être fait pour se comporter au mieux pour interpréter les erreurs signalées par la librairie.

La manière la plus simple de contourner le problème est celle que nous avons employé pour les petits exemples précédents de ce chapitre: avant d'accéder à un module, on vérifie qu'il est en ligne avec la méthode isOnline() et on suppose ensuite qu'il va y rester pendant la fraction de seconde nécessaire à exécuter les lignes de code suivantes. Ce n'est pas parfait, mais ça peut suffire dans certains cas. Il faut toutefois être conscient qu'on ne peut pas totalement exclure une erreur se produisant après le isOnline(), qui pourrait faire planter le programme.

Dans l'API java pour Android, le traitement d'erreur est implémenté au moyen d'exceptions. Vous devrez donc intercepter et traiter correctement ces exceptions si vous souhaitez avoir un projet fiable qui ne crashera pas des que vous débrancherez un module.

20. Utilisation du Yocto-RS485 avec LabVIEW

LabVIEW est édité par National Instruments depuis 1986. C'est un environnement de développement graphique: plutôt que d'écrire des lignes de code, l'utilisateur dessine son programme, un peu comme un organigramme. LabVIEW est surtout pensé pour interfacer des instruments de mesures d'où le nom Virtual Instruments (VI) des programmes LabVIEW. Avec la programmation visuelle, dessiner des algorithmes complexes devient très vite fastidieux, c'est pourquoi la librairie Yoctopuce pour LabVIEW a été pensée pour être aussi simple de possible à utiliser. Autrement dit, LabVIEW étant un environnement extrêmement différent des autres langages supportés par l'API Yoctopuce, vous rencontrerez des différences majeures entre l'API LabVIEW et les autres API.

20.1. Architecture

La librairie LabVIEW est basée sur la librairie Yoctopuce DotNetProxy contenue dans la DLL DotNetProxyLibrary.dll. C'est en fait cette librairie DotNetProxy qui se charge du gros du travail en s'appuyant sur la librairie Yoctopuce C# qui, elle, utilise l'API bas niveau codée dans yapi.dll (32bits) et amd64\yapi.dll (64bits).


Architecture de l'API Yoctopuce pour LabVIEW

Vos applications LabVIEW utilisant l'API Yoctopuce devront donc impérativement être distribuées avec les DLL DotNetProxyLibrary.dll, yapi.dll et amd64\yapi.dll

Si besoin est, vous trouverez les sources de l'API bas niveau dans la librairie C# et les sources de DotNetProxyLibrary.dll dans la librairie DotNetProxy.

20.2. Compatibilité

Firmwares

Pour que la librairie Yoctopuce pour LabVIEW fonctionne convenablement avec vos modules Yoctopuce, ces derniers doivent avoir au moins le firmware 37120

LabVIEW pour Linux et MacOS

Au moment de l'écriture de ce manuel, l'API Yoctopuce pour LabVIEW n'a été testée que sous Windows. Il y a donc de fortes chances pour qu'elle ne fonctionne tout simplement pas avec les versions Linux et MacOS de LabVIEW.

LabVIEW NXG

La librairie Yoctopuce pour LabVIEW faisant appel à de nombreuses techniques qui ne sont pas encore disponibles dans la nouvelle génération de LabVIEW, elle n'est absolument pas compatible avec LabVIEW NXG.

A propos de DotNetProxyLibrary.dll

Afin d'être compatible avec un maximum de version de Windows, y compris Windows XP, la librairie DotNetProxyLibrary.dll est compilée en .NET 3.5, qui est disponible par défaut sur toutes les versions de Windows depuis XP.

20.3. Installation

Téléchargez la librairie pour LabVIEW depuis le site web de Yoctopuce51. Il s'agit d'un fichier ZIP dans lequel vous trouverez un répertoire par version de LabVIEW. Chacun de ses répertoires contient deux sous-répertoires. Le premier contient des exemples de programmation pour chaque produit Yoctopuce; le second, nommé VIs, contient tous les VI de l'API et les DLL nécessaires.

Suivant la configuration de Windows et la méthode utilisée pour la copier, la DLL DotNetProxyLibrary.dll peut se faire bloquer par Windows parce que ce dernier aura détecté qu'elle provient d'une autre machine. Un cas typique est la décompression de l'archive de la librairie avec l'explorateur de fichier de Windows. Si la DLL est bloquée, LabVIEW ne pourra pas la charger, ce qui entrainera une erreur 1386 lors de l'exécution de n'importe quel VI de la librairie Yoctopuce.

Il y a deux manières de corriger le problème. La plus simple consiste à utiliser l'explorateur de fichier de Windows pour afficher les propriétés de la DLL et la débloquer. Mais cette manipulation devra être répété à chaque fois qu'une nouvelle version de la DLL sera copiée sur votre système.


Débloquer la DLL DotNetProxyLibrary.dll.

La seconde méthode consiste à créer dans le même répertoire que l'exécutable labview.exe un fichier XML nommé labview.exe.config et contenant le code suivant :


<?xml version ="1.0"?>
<configuration>
 <runtime>
 <loadFromRemoteSources enabled="true" />
 </runtime>
</configuration>

Veillez à choisir le bon répertoire en fonction de la version de LabVIEW que vous utilisez (32 bits vs 64 bits). Vous trouverez plus d'information à propos de ce fichier sur le site web de National Instrument52.

Pour installer l'API Yoctopuce pour LabVIEW vous avez plusieurs méthodes à votre disposition.

Méthode 1 : Installation "à l'emporter"

La manière la plus simple pour installer la librairie Yoctopuce consiste à copier le contenu du répertoire VIs où bon vous semble, et à utiliser les VIs dans LabVIEW avec une simple opération de Drag and Drop.

Pour pouvoir utiliser les exemples fournis avec l'API, vous aurez avantage à ajouter le répertoire des VIs Yoctopuce dans la liste des répertoires où LabVIEW doit chercher les VIs qu'il n'a pas trouvé. Cette liste est accessible via le menu Tools > Options > Paths > VI Search Path.


Configuration du "VI Search Path"

Méthode 2 : Installeur fourni avec la librairie

Dans chaque répertoire LabVIEW200xx de la librairie, vous trouverez un VI appelé "Install.vi". Ouvrez simplement celui qui correspond à votre version de LabVIEW.


L'installeur fourni avec la librairie

Cet installeur offre trois options d'installation:

Install: Keep VI and documentation files where they are.

Avec cette option, les VI sont conservés à l'endroit où la librairie à été décompressée. Vous aurez donc à faire en sorte qu'ils ne soit pas effacés tant que vous en aurez besoin. Voici ce que fait exactement l'installeur quand cette option est choisie:

Install: Copy VI and documentation files into LabVIEW's vi.lib folder

Dans ce cas, tous les fichiers nécessaires au bon fonctionnement de la librairie sont copiés dans le répertoire d'installation de LabVIEW. Vous pourrez donc effacer les fichiers originaux une fois l'installation terminée. Notez cependant que les exemples de programmation ne sont pas copiés. Voici ce que fait l'installeur exactement:

Uninstall Yoctopuce Library

Cette option supprime la Librairie Yoctopuce de votre installation LabVIEW:

Dans tous les cas, si le fichier labview.ini a besoin d'être modifié, une copie de backup est automatiquement réalisée avant.

L'installeur reconnait les répertoires contenant la librairie Yoctopuce en testant l'existence du fichier YRegisterHub.vi.

Une fois l'installation terminée, vous trouverez une palette Yoctopuce dans le menu Fonction/Suppléments.

Méthode 3 Installation manuelle dans la palette LabVIEW

Les étapes pour installer manuellement les VIs directement dans la Palette LabView sont un peu plus complexes, vous trouverez la procédure complète sur le site de National Instruments53, mais voici un résumé:

  1. Créez un répertoire Yoctopuce\API dans le répertoire C:\Program Files\National Instruments\LabVIEW xxxx\vi.lib, et copiez tous les VIs et les DLL du répertoire VIs dedans.
  2. Créez un répertoire Yoctopuce dans le répertoire C:\Program Files\National Instruments\LabVIEW xxxx\menus\Categories
  3. Lancez LabVIEW, et choisissez l'option Tools>Advanced>Edit Palette Set

    Trois fenêtres vont apparaître:

    • "Edit Controls and Functions Palette Set"
    • "Functions"
    • "Controls"
    .

    Dans la fenêtre Function, vous trouverez une icône Yoctopuce. Double-cliquez dessus, ce qui fera apparaitre une fenêtre "Yoctopuce" vide.

  4. Dans la fenêtre Yoctopuce, faites un Clic Droit>Insert>Vi(s)..

    ce qui fera apparaître un sélecteur de fichier. Placer le sélecteur dans le répertoire vi.lib\Yoctopuce\API que vous avez créé au point 1 et cliquez sur Current Folder

    Tous les VIs Yoctopuce vont apparaitre dans la fenêtre Yoctopuce. Par défaut, ils sont triés dans l'ordre alphabétique, mais vous pouvez les arranger comme bon vous semble en les glissant avec la souris. Pour que la palette soit bien utilisable, nous vous suggérons de réorganiser les icônes sur 8 colonnes.
  5. Dans la fenêtre "Edit Controls and Functions Palette Set", cliquez sur le bouton "Save Changes", la fenêtre va vous indiquer qu'elle a créé un fichier dir.mnu dans votre répertoire Documents.

    Copiez ce fichier dans le répertoire "menus\Categories\Yoctopuce" que vous avez créé au point 2.
  6. Redémarrez LabVIEW, la palette de LabVIEW contient maintenant une sous-palette Yoctopuce et avec tous les VIs de l'API

20.4. Présentation des VIs Yoctopuce

La librairie Yoctopuce pour LabVIEW comprend un VI par classe de l'API Yoctopuce, plus quelques VI spéciaux. Tous les VIs disposent des connecteurs traditionnels Error IN et Error Out.

YRegisterHub

Le VI YRegisterHub permet d'initialiser l'API. Ce VI doit impérativement être appelé une fois avant de faire quoi que ce soit qui soit en relation avec des modules Yoctopuce


Le VI YRegisterHub

Le VI YRegisterHub prend un paramètre url qui peut être soit:

Dans le cas d'une adresse IP, le VI YRegisterHub va essayer de contacter cette adresse et génèrera une erreur s'il n'y arrive pas, à moins que le paramètre async ne soit mis à TRUE. Si async est mis à TRUE, aucune erreur ne sera générée, et les modules Yoctopuce correspondant à cette adresse IP seront automatiquement mis à disposition dès que la machine concernée sera joignable.

Si tout s'est bien passé, la sortie successful contiendra la valeur TRUE. Dans le cas contraire elle contiendra la valeur FALSE et la sortie error msg contiendra une chaîne de caractères contenant une description de l'erreur

Vous pouvez utiliser plusieurs VI YRegisterHub avec des urls différentes si vous le souhaitez. En revanche, sur la même machine, il ne peut y avoir qu'un seul processus qui accède aux modules Yoctopuce locaux directement par USB (url mis à "usb"). Cette limitation peut facilement être contournée en faisant tourner le logiciel VirtualHub sur la machine locale et en utilisant l'url "127.0.0.1".

YFreeAPI

Le VI YFreeAPI permet de libérer les ressources allouée par l'API Yoctopuce.


Le VI YFreeAPI

Le VI YFreeAPI doit être appelé une fois que votre code en a fini avec l'API Yoctopuce, faute de quoi l'accès direct par USB (url mis à "usb") pourrait rester bloqué une fois l'exécution de votre VI terminé, et ce tant que LabVIEW n'aura pas été complètement fermé.

Structure des VI correspondant à une classe

Les autres VIs correspondent à une fonction/classe de l'API Yoctopuce, ils ont tous la même structure:


Structure de la plupart des VIs de l'API.

Vous trouverez la liste des fonctions disponibles sur votre Yocto-RS485 au chapitre Programmation, concepts généraux.

Si la fonction recherchée (paramètre name) n'est pas accessible, cela ne génèrera pas d'erreur mais la sortie is online contiendra FALSE et toutes les sorties contiendront les valeurs "N/A" quand c'est possible. Si la fonction recherchée devient disponible plus tard dans la vie de votre programme, is online passera à TRUE.

Si le paramètre name contient une chaîne vide, le VI ciblera la première fonction disponible du même type qu'il trouvera. Si aucune fonction n'est disponible, is online contiendra FALSE.

Le VI YModule

Le module YModule permet d'interfacer la partie "module" de chaque module Yoctopuce. Il permet de piloter la balise du module et de connaître le numéro de série d'un module.


Le VI YModule

L'entrée name fonctionne de manière légèrement différente des autres VIs. S'il est appelé avec le paramètre name correspondant à un nom de fonction, le VI YModule trouvera la fonction Module du module hébergeant la fonction. Il est donc possible de trouver facilement le numéro de série du module d'une fonction quelconque. Cela permet de construire le nom d'autres fonctions qui se trouveraient sur le même module. L'exemple ci dessous trouve la première fonction YHumidity disponible et construit le nom de la fonction YTemperature qui se trouve sur le même module. Les exemples fournis avec l'API Yoctopuce font un usage extensif de cette technique.


Utilisation du VI YModule pour retrouver les fonctions hébergés sur le même module

Les VI senseurs

Tous les VI correspondant à des senseurs Yoctopuce ont exactement la même géométrie. Les deux sorties permettent de récupérer la valeur mesurée par le capteur correspondant ainsi que l'unité utilisée.


Les VI senseurs ont tous exactement la même géométrie

Le paramètre d'entrée update freq est une chaîne de caractères qui permet de configurer la façon dont la valeur de sortie est mis à jour:

La fréquence de mise à jour du VI est un paramètre géré par le module Yoctopuce physique. Si plusieurs VI essayent de changer la fréquence d'un même capteur, la configuration retenue sera celle du dernier appel. Par contre, il est tout à fait possible de configurer des fréquences différentes pour des capteurs du même module Yoctopuce.


Changement de la fréquence de mise à jour du même module

La fréquence de mise à jour du VI est complètement indépendante de la fréquence d'échantillonnage du capteur qui n'est généralement pas modifiable. Il est inutile et contre-productif de définir une fréquence de mise à jour supérieure à la fréquence d'échantillonnage du capteur.

20.5. Fonctionnement et utilisation des VIs

Voici un exemple parmi les plus simples de VI utilisant l'API Yoctopuce.


Exemple minimal d'utilisation de l'API Yoctopuce pour LabVIEW

Cet exemple s'appuie sur le VI YSensor qui est un VI générique qui permet d'interfacer n'importe quelle fonction senseur d'un module Yoctopuce. Vous pouvez remplacer ce VI par n'importe quel autre de l'API Yoctopuce, ils ont tous la même géométrie et fonctionnent tous de la même manière. Cet exemple se contente de faire trois choses:

  1. Il initialise l'API en mode natif ("usb") avec le VI YRegisterHub
  2. Il affiche la valeur du premier capteur Yoctopuce qu'il trouve à l'aide du VI YSensor
  3. Il libère l'API grâce au VI YFreeAPI

Cet exemple cherche automatiquement un senseur disponible, si un tel senseur est trouvé on pourra connaitre son nom via la sortie hardware name et la sortie isOnline sera à TRUE. Si aucun senseur n'est disponible, le VI ne génèrera pas d'erreur mais émulera un senseur fantôme qui sera "offline". Par contre si plus tard, dans la vie de l'application, un senseur devient disponible parce qu'il à été branché, isOnline passera à TRUE et le hardware name contiendra le nom du capteur. On peut donc facilement ajouter quelques indicateurs à l'exemple précédent pour savoir comment se passe l'exécution.


Utilisation des sorties hardware name et isOnline

Les VIs de l'API Yoctopuce ne sont qu'une porte d'entrée sur la mécanique interne de la librairie Yoctopuce. Cette mécanique fonctionne indépendamment des VIs Yoctopuce. En effet, la plupart des communications avec les modules électroniques sont gérées automatiquement en arrière plan. C'est pourquoi vous n'avez pas forcément besoin de prendre de précaution particulière pour utiliser les VI Yoctopuce, vous pouvez par exemple les utiliser dans une boucle non temporisée sans que cela pose de problème particulier à l'API.


Les VIs Yoctopuce peuvent être utilisés dans une boucle non temporisée

Notez que le VI YRegisterHub n'est pas dans la boucle. Le VI YRegisterHub sert à l'initialiser l'API, donc à moins que vous n'ayez plusieurs url à enregistrer, il n'est pas souhaitable de l'appeler plusieurs fois.

Lorsque que le paramètre name est initialisé à une chaîne vide, les VI Yoctopuce recherchent automatiquement la fonction avec laquelle ils peuvent travailler, ce qui est très pratique lorsqu'on sait qu'il n'y a qu'une seule fonction du même type disponible que qu'on ne souhaite pas se soucier de gérer som nom. Si le paramètre name contient un nom matériel ou un nom logique, le VI cherchera la fonction correspondante, si il ne la trouve pas il émulera une fonction qui sera offline en attendant que la vraie fonction devienne disponible.


Utilisation de noms pour identifier les fonctions à utiliser

Gestion des erreurs

L'API Yoctopuce pour LabVIEW est codée pour gérer les erreurs d'une manière aussi gracieuse que possible: par exemple si vous utilisez un VI pour accéder à une fonction qui n'existe pas, sa sortie isOnline sera à FALSE, les autres sorties seront affecté à NaN et les entrées n'auront pas d'effet. Les erreurs fatales sont propagée à travers le canal traditionnel error in, error out.

Cependant, le VI YRegisterHub gère les erreurs de connexion de manière un peu différente. Afin de les rendre plus faciles à gérer, les erreurs de connexions sont signalées à l'aide de sorties Success et error msg. Si un problème apparait lors de l'appel au VI YRegisterHub, success contiendra FALSE et error msg contiendra une description de l'erreur.


Gestion des erreurs

Le message d'erreur le plus courant est "Another process is already using yAPI". Il signifie qu'une autre application, LabVIEW ou autre, utilise déjà l'API en module USB natif. En effet, pour des raison techniques, l'API USB native ne peut être utilisée que par une seule application à la fois sur la même machine. Cette limitation peut être facilement contourné en utilisant le mode réseau.

20.6. Utilisation des objets Proxy

L'API Yoctopuce contient des centaines de méthodes, fonctions et propriétés. Il n'était ni possible, ni souhaitable de créer un VI pour chacune d'entre elles. C'est pourquoi il y a un VI par classe qui expose les deux propriétés que Yoctopuce a jugé les plus utiles, mais cela ne veut pas dire que les autres ne sont pas accessibles.

Chaque VI correspondant à une classe dispose de deux connecteurs create ref et optional ref qui permettent d'obtenir une référence sur l'objet Proxy de l'API .NET Proxy sur laquelle est construite la librairie LabVIEW.


Les connecteurs pour obtenir une référence sur l'objet Proxy correspondant au VI

Pour obtenir cette référence, il suffit de mettre optional ref à TRUE. Attention, il est impératif de fermer toute référence créée de cette manière, sous peine de saturer rapidement la mémoire de l'ordinateur.

Voici un exemple qui utilise cette technique pour modifier la luminosité des LEDs d'un module Yoctopuce



Contrôle de la luminosité des LEDs d'un module

Notez que chaque référence permet d'obtenir aussi bien des propriétés (noeud property) que des méthodes (noeud invoke). Par convention, les propriétés sont optimisées pour générer un minimum de communication avec les modules, c'est pourquoi il est recommandé de les utiliser plutôt les méthodes get_xxx et set_xxx correspondantes qui pourraient sembler équivalentes mais qui ne sont pas optimisées. Les propriétés permettent aussi récupérer les différentes constantes de l'API, qui sont préfixées avec le caractère "_". Pour des raisons techniques, les méthodes get_xxx et set_xxx ne sont pas toutes disponibles sous forme de propriétés.



Noeuds Property et Invoke: Utilisation de propriétés, méthodes et constantes

Vous trouverez la description de toutes les propriétés, fonctions et méthodes disponibles dans la documentation de l'API .NET Proxy.

Utilisation en réseau

Sur une même machine, il ne peut y avoir qu'un seul processus qui accède aux modules Yoctopuce locaux directement par USB (url mis à "usb"). Par contre, plusieurs processus peuvent se connecter en parallèle à des YoctoHubs57 ou à une machine sur laquelle tourne le logiciel VirtualHub58, y compris la machine locale. Si vous utilisez l'adresse réseau locale de votre machine (127.0.0.1) et qu'un VirtualHub tourne dessus, vous pourrez ainsi contourner la limitation qui empêche l'utilisation en parallèle de l'API native USB.


Utilisation en mode réseau

Il n'y a pas non plus de limitation sur le nombre d'interfaces réseau auxquels l'API peut se connecter en parallèle. Autrement dit, il est tout à fait possible de faire des appels multiples au VI YRegisterHub. C'est le seul cas où il y a un intérêt à appeler le VI YRegisterHub plusieurs fois au cours de la vie de l'application.


Les connexions réseau multiples sont possibles

Par défaut, le VI YRegisterHub essaye se connecter sur l'adresse donnée en paramètre et génère une erreur (success=FALSE) s'il n'y arrive pas parce que personne ne répond. Mais si le paramètre async est initialisé à TRUE, aucune erreur ne sera générée en cas d'erreur de connexion, mais si la connexion devient possible plus tard dans la vie de l'application, les modules correspondants seront automatiquement accessibles.


Connexion asynchrone

20.7. Gestion du datalogger

Quasiment tous les senseurs Yoctopuce disposent d'un enregistreur de données qui permet de stocker les mesures des senseurs dans la mémoire non volatile du module. La configuration de l'enregistreur de données peut être réalisée avec le VirtualHub, mais aussi à l'aide d'un peu de code LabVIEW

Enregistrement

Pour ce faire, il faut configurer la fréquence d'enregistrement en utilisant la propriété "LogFrequency" que l'on atteint avec une référence sur l'objet Proxy du senseur utilisé, puis il faut mettre en marche l'enregistreur grâce au VI YDataLogger. Noter qu'à la manière du VI YModule, le VI YDataLogger correspondant à un module peut être obtenu avec son propre nom, mais aussi avec le nom de n'importe laquelle des fonctions présentes sur le même module.


Enclenchement de l'enregistrement de données dans le datalogger

Lecture

La récupération des données de l'enregistreur se fait l'aide du VI YDataLoggerContents.


Le VI YDataLoggerContents

Extraire les données de l'enregistreur d'un module Yoctopuce est un processus lent qui peut prendre plusieurs dizaines de secondes. C'est pourquoi le VI qui permet cette opération a été conçu pour fonctionner de manière itérative.

Dans un premier temps le VI doit être appelé avec un nom de senseur, une date de début et une date de fin (timestamp UNIX en UTC). Le couple (0,0) permet d'obtenir la totalité du contenu de l'enregistreur. Ce premier appel permet d'obtenir un résumé du contenu du datalogger et un contexte.

Dans un deuxième temps, il faut rappeler le VI YDataLoggerContents en boucle avec le paramètre contexte, jusqu'à ce que la sortie progress atteigne la valeur 100. A ce moment la sortie data représente le contenu de l'enregistreur


Récupération du contenu de l'engistreur de données

Les résultats et le résumé sont rendus sous la forme d'un tableau de structures qui contiennent les champs suivants:

Notez que si la fréquence d'enregistrement est supérieure à 1 Hz, l'enregistreur ne mémorise que des valeurs instantanées, dans ce cas averageValue, minValue, et maxValue auront la même valeur.

20.8. Énumération de fonctions

Chaque VI correspondant à un objet de l'API .NET Proxy permet de faire une énumération de toutes les fonctions de la même classe via la méthode getSimilarfunctions() de l'objet Proxy correspondant. Ainsi il est ainsi aisé de faire un inventaire de tous les modules connectés, de tous les capteurs connectés, de tous les relais connectés, etc....


Récupération de la liste de tous les modules connectés

20.9. Un mot sur les performances

L'API Yoctopuce pour LabVIEW été optimisée de manière à ce que les tous les VIs et les propriétés de objets Proxy génèrent un minimum de communication avec les modules Yoctopuce. Ainsi vous pouvez les utiliser dans des boucles sans prendre de précaution particulière: vous n'êtes pas obligés de ralentir les boucles avec un timer.


Ces deux boucles génèrent peu de communications USB et n'ont pas besoin d'être ralenties

En revanche, presque toutes les méthodes des objets Proxy disponibles vont générer une communication avec les modules Yoctopuce à chaque fois qu'elles seront appelées, il conviendra donc d'éviter de les appeler trop souvent inutilement.


Cette boucle, qui utilise une méthode, doit être ralentie

20.10. Un exemple complet de programme LabVIEW

Voici un exemple qui utilise un Yocto-RS485 pour interfacer un contrôleur ZELIO REG48PUN1RHU dans LabVIEW. Après un appel à RegisterHub, le VI YSerialPort trouve le premier port série disponible, puis obtient une référence sur l'objet YSerialPortProxy correspondant. Si le port est "online", l'application configure le port série et lis les registres PS et SV grâce à la méthode modbusReadInputRegisters puis les affiche. A chaque fois que les boutons "+" / "-" sont cliqués, l'application incrémente / décrémente la valeur de SV et mets à jour le contrôleur à l'aide de la méthode ModbusWriteRegister. Une fois l'application terminée, la référence sur l'objet YSerialPortProxy est fermée et l'API est libérée à l'aide de du du VI YFreeAPI.


Utilisation d'un contrôleur ZELIO REG48PUN1RHU avec un Yocto-RS485 dans LabVIEW.

Si vous lisez cette documentation sur un écran, vous pouvez zoomer sur l'image ci-dessus. Vous pourrez aussi retrouver cet exemple dans la librairie Yoctopuce pour LabVIEW

20.11. Différences avec les autres API Yoctopuce

Yoctopuce fait tout son possible pour maintenir une forte cohérence entre les différentes librairies de programmation. Cependant, LabVIEW étant un environnement clairement à part, il en résulte des différences importantes avec les autres librairies.

Ces différences ont aussi été introduites pour rendre l'utilisation des modules aussi facile et intuitive que possible en nécessitant un minimum de code LabVIEW.

YFreeAPI

Contrairement aux autres langages, il est indispensable de libérer l'API native en appelant le VI YFreeApi lorsque votre code n'a plus besoin d'utiliser l'API. Si cet appel est omis, l'API native risque de rester bloquée pour les autres applications tant que LabVIEW ne sera pas complètement fermé.

Propriétés

Contrairement aux classes des autres API, les classes disponibles dans LabVIEW implémentent des propriétés. Par convention, ces propriétés sont optimisées pour générer un minimum de communication avec les modules tout en se rafraichissant automatiquement. En revanche, les méthodes de type get_xxx et set_xxx génèrent systématiquement des communications avec les modules Yoctopuce et doivent être appelées à bon escient.

Callback vs Propriétés

Il n'y a pas de callbacks dans l'API Yoctopuce pour LabVIEW, les VIs se rafraichissenti automatiquement: ils sont basés sur les propriétés des objets de l'API .NET Proxy.

21. Utilisation avec des langages non supportés

Les modules Yoctopuce peuvent être contrôlés depuis la plupart des langages de programmation courants. De nouveaux langages sont ajoutés régulièrement en fonction de l'intérêt exprimé par les utilisateurs de produits Yoctopuce. Cependant, certains langages ne sont pas et ne seront jamais supportés par Yoctopuce, les raisons peuvent être diverses: compilateurs plus disponibles, environnements inadaptés, etc...

Il existe cependant des méthodes alternatives pour accéder à des modules Yoctopuce depuis un langage de programmation non supporté.

21.1. Utilisation en ligne de commande

Le moyen le plus simple pour contrôler des modules Yoctopuce depuis un langage non supporté consiste à utiliser l'API en ligne de commande à travers des appels système. L'API en ligne de commande se présente en effet sous la forme d'un ensemble de petits exécutables qu'il est facile d'appeler et dont la sortie est facile à analyser. La plupart des langages de programmation permettant d'effectuer des appels système, cela permet de résoudre le problème en quelques lignes.

Cependant, si l'API en ligne de commande est la solution la plus facile, ce n'est pas la plus rapide ni la plus efficace. A chaque appel, l'exécutable devra initialiser sa propre API et faire l'inventaire des modules USB connectés. Il faut compter environ une seconde par appel.

21.2. Assembly .NET

Un Assembly .NET permet de partager un ensemble de classes précompilées pour offrir un service, en annonçant des points d'entrées qui peuvent être utilisés par des applications tierces. Dans notre cas, c'est toute la librairie Yoctopuce qui est disponible dans l'Assembly .NET, de sorte à pouvoir être utilisée dans n'importe quel environnement qui supporte le chargement dynamique d'Assembly .NET.

La librairie Yoctopuce sous forme d'Assembly .NET ne contient pas uniquement la librairie Yoctopuce standard pour C#, car cela n'aurait pas permis une utilisation optimale dans tous les environnements. En effet, on ne peut pas attendre forcément des applications hôtes d'offrir un système de threads ou de callbacks, pourtant très utiles pour la gestion du plug-and-play et des capteurs à taux de rafraîchissements élevé. De même, on ne peut pas attendre des applications externes un comportement transparent dans le cas où un appel de fonction dans l'Assembly cause un délai en raison de communication réseau.

Nous y avons donc ajouté une surcouche, appelée librairie .NET Proxy. Cette surcouche offre une interface très similaire à la librairie standard mais un peu simplifiée, car elle gère en interne tous les mécanismes de callbacks. A la place, cette librairie offre des objets miroirs, appelés Proxys, qui publient par le biais de Propriétés les principaux attributs des fonctions Yoctopuce tels que la mesure courante, les paramètres de configuration, l'état, etc.


Architecture de l'Assembly .NET

Les propriétés des objets Proxys sont automatiquement mises à jour en tâche de fond par le mécanisme de callbacks, sans que l'application hôte n'ait à s'en soucier. Celle-ci peut donc à tout moment et sans aucun risque de latence afficher la valeur de toutes les propriétés des objets Proxys Yoctopuce.

Notez bien que la librairie de communication de bas niveau yapi.dll n'est pas inclue dans l'Assembly .NET. Il faut donc bien penser à la garder toujours avec DotNetProxyLibrary.dll. La version 32 bits doit être dans le même répertoire que DotNetProxyLibrary.dll, tandis que la version 64 bits doit être dans un sous-répertoire nommé amd64.

Exemple d'utilisation avec MATLAB

Voici comment charger notre Assembly .NET Proxy dans MATLAB et lire la valeur du premier capteur branché par USB trouvé sur la machine :


NET.addAssembly("C:/Yoctopuce/DotNetProxyLibrary.dll");
import YoctoProxyAPI.*

errmsg = YAPIProxy.RegisterHub("usb");
sensor = YSensorProxy.FindSensor("");
measure = sprintf('%.3f %s', sensor.CurrentValue, sensor.Unit);

Exemple d'utilisation en PowerShell

Les commandes en PowerShell sont un peu plus étranges, mais on reconnaît le même schéma :


Add-Type -Path "C:/Yoctopuce/DotNetProxyLibrary.dll"

$errmsg = [YoctoProxyAPI.YAPIProxy]::RegisterHub("usb")
$sensor = [YoctoProxyAPI.YSensorProxy]::FindSensor("")
$measure = "{0:n3} {1}" -f $sensor.CurrentValue, $sensor.Unit

Particularités de la librairie .NET Proxy

Par rapport aux librairies Yoctopuce classiques, on notera en particulier les différences suivantes.

Pas de méthode FirstModule/nextModule

Pour obtenir un objet se référant au premier module trouvé, on appelle un YModuleProxy.FindModule(""). Si aucun module n'est connecté, cette méthode retournera un objet avec la propriété module.IsOnline à False. Dès le branchement d'un module, la propriété passera à True et l'identifiant matériel du module sera mis à jour.

Pour énumérer les modules, on peut appeler la méthode module.GetSimilarFunctions() qui retourne un tableau de chaînes de caractères contenant les identifiants de tous les module trouvés.

Pas de fonctions de callback

Les fonctions de callback sont implémentées en interne et mettent à jour les propriétés des objets. Vous pouvez donc simplement faire du polling sur les propriétés, sans pénalité significative de performance. Prenez garde au fait que si vous utilisez l'une des méthodes qui désactive les callbacks, le rafraichissement automatique des propriétés des objets en sera altéré.

Une nouvelle méthode YAPIProxy.GetLog permet de récupérer les logs de diagnostiques de bas niveau sans recourir à l'utilisation de callbacks.

Types énumérés

Pour maximiser la compatibilité avec les applications hôte, la librairie .NET Proxy n'utilise pas de véritables types énumérés .NET, mais des simples entiers. Pour chaque type énuméré, la librairie publie des constantes entières nommées correspondant aux valeurs possibles. Contrairement aux librairies Yoctopuce classiques, les valeurs utiles commencent toujours à 1, la valeur 0 étant réservée pour signifier une valeur invalide, par exemple lorsque le module est débranché.

Valeurs numériques invalides

Pour toutes les grandeurs numériques, plutôt qu'une constante arbitraire, la valeur invalide retournée en cas d'erreur est NaN. Il faut donc utiliser la fonction isNaN() pour détecter cette valeur.

Utilisation de l'Assembly .NET sans la librairie Proxy

Si pour une raison ou une autre vous ne désirez pas utiliser la librairie Proxy, et que votre environnement le permet, vous pouvez utiliser l'API C# standard puisqu'elle se trouve dans l'Assembly, sous le namespace YoctoLib. Attention toutefois à ne pas mélanger les deux utilisations: soit vous passez par la librairie Proxy, soit vous utilisez directement la version YoctoLib, mais pas les deux !

Compatibilité

Pour que la librairie .NET Proxy fonctionne correctement avec vos modules Yoctopuce, ces derniers doivent avoir au moins le firmware 37120.

Afin d'être compatible avec un maximum de version de Windows, y compris Windows XP, la librairie DotNetProxyLibrary.dll est compilée en .NET 3.5, qui est disponible par défaut sur toutes les versions de Windows depuis XP. A ce jour nous n'avons pas trouvé d'environnement hormis Windows qui supporte le chargement d'Assemblys, donc seules les dll de bas niveau pour Windows sont distribuées avec l'Assembly.

21.3. Virtual Hub et HTTP GET

Le Virtual Hub est disponible pour presque toutes les plateformes actuelles, il sert généralement de passerelle pour permettre l'accès aux modules Yoctopuce depuis des langages qui interdisent l'accès direct aux couches matérielles d'un ordinateur (Javascript, PHP, Java...).

Il se trouve que le Virtual Hub est en fait un petit serveur Web qui est capable de router des requêtes HTTP vers les modules Yoctopuce. Ce qui signifie que si vous pouvez faire une requête HTTP depuis votre langage de programmation, vous pouvez contrôler des modules Yoctopuce, même si ce langage n'est pas officiellement supporté.

Interface REST

A bas niveau, les modules sont pilotés à l'aide d'une API REST. Ainsi pour contrôler un module, il suffit de faire les requêtes HTTP appropriées sur le Virtual Hub. Par défaut le port HTTP du Virtual Hub est 4444.

Un des gros avantages de cette technique est que les tests préliminaires sont très faciles à mettre en œuvre, il suffit d'un Virtual Hub et d'un simple browser Web. Ainsi, si vous copiez l'URL suivante dans votre browser favori, alors que le Virtual Hub est en train de tourner, vous obtiendrez la liste des modules présents.


http://127.0.0.1:4444/api/services/whitePages.txt

Remarquez que le résultat est présenté sous forme texte, mais en demandant whitePages.xml vous auriez obtenu le résultat en XML. De même, whitePages.json aurait permis d'obtenir le résultat en JSON. L'extension html vous permet même d'afficher une interface sommaire vous permettant de changer les valeurs en direct. Toute l'API REST est disponible dans ces différents formats.

Contrôle d'un module par l'interface REST

Chaque module Yoctopuce a sa propre interface REST disponible sous différentes formes. Imaginons un Yocto-RS485 avec le numéro de de série RS485MK1-12345 et le nom logique monModule. l'URL suivante permettra de connaître l'état du module.


http://127.0.0.1:4444/bySerial/RS485MK1-12345/api/module.txt

Il est bien entendu possible d'utiliser le nom logique des modules plutôt que leur numéro de série.


http://127.0.0.1:4444/byName/monModule/api/module.txt

Vous pouvez retrouver la valeur d'une des propriétés d'un module, il suffit d'ajouter le nom de la propriété en dessous de module. Par exemple, si vous souhaitez connaître la luminosité des LEDs de signalisation, il vous suffit de faire la requête suivante:


http://127.0.0.1:4444/bySerial/RS485MK1-12345/api/module/luminosity

Pour modifier la valeur d'une propriété, il vous suffit de modifier l'attribut correspondant. Ainsi, pour modifier la luminosité il vous suffit de faire la requête suivante:


http://127.0.0.1:4444/bySerial/RS485MK1-12345/api/module?luminosity=100

Contrôle des différentes fonctions du module par l'interface REST

Les fonctionnalités des modules se manipulent de la même manière. Pour connaître l'état de la fonction serialPort, il suffit de construire l'URL suivante.


http://127.0.0.1:4444/bySerial/RS485MK1-12345/api/serialPort.txt

En revanche, si vous pouvez utiliser le nom logique du module en lieu et place de son numéro de série, vous ne pouvez pas utiliser les noms logiques des fonctions, seuls les noms hardware sont autorisés pour les fonctions.

Vous pouvez retrouver un attribut d'une fonction d'un module d'une manière assez similaire à celle utilisée avec les modules, par exemple:


http://127.0.0.1:4444/bySerial/RS485MK1-12345/api/serialPort/logicalName

Assez logiquement, les attributs peuvent être modifiés de la même manière.


http://127.0.0.1:4444/bySerial/RS485MK1-12345/api/serialPort?logicalName=maFonction

Vous trouverez la liste des attributs disponibles pour votre Yocto-RS485 au début du chapitre Programmation, concepts généraux.

Accès aux données enregistrées sur le datalogger par l'interface REST

Cette section s'applique uniquement aux modules dotés d'un enregistreur de donnée.

La version résumée des données enregistrées dans le datalogger peut être obtenue au format JSON à l'aide de l'URL suivante:


http://127.0.0.1:4444/bySerial/RS485MK1-12345/dataLogger.json

Le détail de chaque mesure pour un chaque tranche d'enregistrement peut être obtenu en ajoutant à l'URL l'identifiant de la fonction désirée et l'heure de départ de la tranche:


http://127.0.0.1:4444/bySerial/RS485MK1-12345/dataLogger.json?id=serialPort&utc=1389801080

21.4. Utilisation des librairies dynamiques

L'API Yoctopuce bas niveau est disponible sous différents formats de librairie dynamiques écrites en C, dont les sources sont disponibles avec l'API C++. Utiliser une de ces librairies bas niveau vous permettra de vous passer du Virtual Hub.

FilenamePlateforme
libyapi.dylibMax OS X
libyapi-amd64.soLinux Intel (64 bits)
libyapi-armel.soLinux ARM EL (32 bits)
libyapi-armhf.soLinux ARM HL (32 bits)
libyapi-aarch64.soLinux ARM (64 bits)
libyapi-i386.soLinux Intel (32 bits)
yapi64.dllWindows (64 bits)
yapi.dllWindows (32 bits)

Ces librairies dynamiques contiennent toutes les fonctionnalités nécessaires pour reconstruire entièrement toute l'API haut niveau dans n'importe quel langage capable d'intégrer ces librairies. Ce chapitre se limite cependant à décrire une utilisation de base des modules.

Contrôle d'un module

Les trois fonctions essentielles de l'API bas niveau sont les suivantes:


int yapiInitAPI(int connection_type, char *errmsg);
int yapiUpdateDeviceList(int forceupdate, char *errmsg);
int yapiHTTPRequest(char *device, char *request, char* buffer,int buffsize,int *fullsize, char *errmsg);

La fonction yapiInitAPI permet d'initialiser l'API et doit être appelée une fois en début du programme. Pour une connection de type USB, le paramètre connection_type doit prendre la valeur 1. errmsg est un pointeur sur un buffer de 255 caractères destiné à récupérer un éventuel message d'erreur. Ce pointeur peut être aussi mis à NULL. La fonction retourne un entier négatif en cas d'erreur, ou zéro dans le cas contraire.

La fonction yapiUpdateDeviceList gère l'inventaire des modules Yoctopuce connectés, elle doit être appelée au moins une fois. Pour pouvoir gérer le hot plug, et détecter d'éventuels nouveaux modules connectés, cette fonction devra être apellée à intervalles réguliers. Le paramètre forceupdate devra être à la valeur 1 pour forcer un scan matériel. Le paramètre errmsg devra pointer sur un buffer de 255 caractères pour récupérer un éventuel message d'erreur. Ce pointeur peut aussi être à null.Cette fonction retourne un entier négatif en cas d'erreur, ou zéro dans le cas contraire.

Enfin, la fonction yapiHTTPRequest permet d'envoyer des requêtes HTTP à l'API REST du module. Le paramètre device devra contenir le numéro de série ou le nom logique du module que vous cherchez à atteindre. Le paramètre request doit contenir la requête HTTP complète (y compris les sauts de ligne terminaux). buffer doit pointer sur un buffer de caractères suffisamment grand pour contenir la réponse. buffsize doit contenir la taille du buffer. fullsize est un pointeur sur un entier qui sera affecté à la taille effective de la réponse. Le paramètre errmsg devra pointer sur un buffer de 255 caractères pour récupérer un éventuel message d'erreur. Ce pointeur peut aussi être à null. Cette fonction retourne un entier négatif en cas d'erreur, ou zéro dans le cas contraire.

Le format des requêtes est le même que celui décrit dans la section Virtual Hub et HTTP GET. Toutes les chaînes de caractères utilisées par l'API sont des chaînes constituées de caractères 8 bits: l'Unicode et l'UTF8 ne sont pas supportés.

Le résultat retourné dans la variable buffer respecte le protocole HTTP, il inclut donc un header HTTP . Ce header se termine par deux lignes vides, c'est-à-dire une séquence de quatre caractères ASCII 13, 10, 13, 10.

Voici un programme d'exemple écrit en pascal qui utilise la DLL yapi.dll pour lire puis changer la luminosité d'un module.


// Dll functions import
function  yapiInitAPI(mode:integer;
                      errmsg : pansichar):integer;cdecl;
                      external 'yapi.dll' name 'yapiInitAPI';
function  yapiUpdateDeviceList(force:integer;errmsg : pansichar):integer;cdecl;
                      external 'yapi.dll' name 'yapiUpdateDeviceList';
function  yapiHTTPRequest(device:pansichar;url:pansichar; buffer:pansichar;
                      buffsize:integer;var fullsize:integer;
                      errmsg : pansichar):integer;cdecl;
                      external 'yapi.dll' name 'yapiHTTPRequest';

var
 errmsgBuffer  : array [0..256] of ansichar;
 dataBuffer    : array [0..1024] of ansichar;
 errmsg,data   : pansichar;
 fullsize,p    : integer;

const
  serial      = 'RS485MK1-12345';
  getValue = 'GET /api/module/luminosity HTTP/1.1'#13#10#13#10;
  setValue = 'GET /api/module?luminosity=100 HTTP/1.1'#13#10#13#10;

begin
  errmsg  :=  @errmsgBuffer;
  data    :=  @dataBuffer;
  // API  initialization
  if(yapiInitAPI(1,errmsg)<0) then
   begin
    writeln(errmsg);
    halt;
  end;

  // forces a device inventory
  if( yapiUpdateDeviceList(1,errmsg)<0) then
    begin
     writeln(errmsg);
     halt;
   end;

  // requests the  module luminosity
  if (yapiHTTPRequest(serial,getValue,data,sizeof(dataBuffer),fullsize,errmsg)<0) then
   begin
     writeln(errmsg);
     halt;
   end;

  // searches for the HTTP header end
  p := pos(#13#10#13#10,data);

  // displays the response minus the HTTP header
  writeln(copy(data,p+4,length(data)-p-3));

  // change the luminosity
  if (yapiHTTPRequest(serial,setValue,data,sizeof(dataBuffer),fullsize,errmsg)<0) then
   begin
     writeln(errmsg);
     halt;
   end;

end.

Inventaire des modules

Pour procéder à l'inventaire des modules Yoctopuce, deux fonctions de la librairie dynamique sont nécessaires


 int yapiGetAllDevices(int *buffer,int maxsize,int *neededsize,char *errmsg);
 int yapiGetDeviceInfo(int devdesc,yDeviceSt *infos, char *errmsg);

La fonction yapiGetAllDevices permet d'obtenir la liste des modules connectés sous la forme d'une liste de handles. buffer pointe sur un tableau d'entiers 32 bits qui contiendra les handles retournés. Maxsize est la taille en bytes du buffer. neededsize contiendra au retour la taille nécessaire pour stocker tous les handles. Cela permet d'en déduire le nombre de module connectés, ou si le buffer passé en entrée est trop petit. Le paramètre errmsg devra pointer sur un buffer de 255 caractères pour récupérer un éventuel message d'erreur. Ce pointeur peut aussi être à null. Cette fonction retourne un entier négatif en cas d'erreur, ou zéro dans le cas contraire.

La fonction yapiGetDeviceInfo permet de récupérer les informations relatives à un module à partir de son handle. devdesc est un entier 32bit qui représente le module, et qui a été obtenu grâce à yapiGetAllDevices. infos pointe sur une structure de données dans laquelle sera stocké le résultat. Le format de cette structure est le suivant:

Nom TypeTaille (bytes)Description
vendorid int4ID USB de Yoctopuce
deviceid int4ID USB du module
devrelease int4Version du module
nbinbterfaces int4Nombre d'interfaces USB utilisée par le module
manufacturer char[]20Yoctopuce (null terminé)
productname char[]28Modèle (null terminé)
serial char[]20Numéro de série (null terminé)
logicalname char[]20Nom logique (null terminé)
firmware char[]22Version du firmware (null terminé)
beacon byte1Etat de la balise de localisation (0/1)

Le paramètre errmsg devra pointer sur un buffer de 255 caractères pour récupérer un éventuel message d'erreur.

Voici un programme d'exemple écrit en pascal qui utilise la DLL yapi.dll pour lister les modules connectés.


// device description structure
type yDeviceSt = packed record
   vendorid        : word;
   deviceid        : word;
   devrelease      : word;
   nbinbterfaces   : word;
   manufacturer    : array [0..19] of ansichar;
   productname     : array [0..27] of ansichar;
   serial          : array [0..19] of ansichar;
   logicalname     : array [0..19] of ansichar;
   firmware        : array [0..21] of ansichar;
   beacon          : byte;
 end;

// Dll function import
function  yapiInitAPI(mode:integer;
                      errmsg : pansichar):integer;cdecl;
                      external 'yapi.dll' name 'yapiInitAPI';

function  yapiUpdateDeviceList(force:integer;errmsg : pansichar):integer;cdecl;
                      external 'yapi.dll' name 'yapiUpdateDeviceList';

function  yapiGetAllDevices( buffer:pointer;
                             maxsize:integer;
                             var neededsize:integer;
                             errmsg : pansichar):integer; cdecl;
                             external 'yapi.dll' name 'yapiGetAllDevices';

function  apiGetDeviceInfo(d:integer; var infos:yDeviceSt;
                             errmsg : pansichar):integer;  cdecl;
                             external 'yapi.dll' name 'yapiGetDeviceInfo';


var
 errmsgBuffer  : array [0..256] of ansichar;
 dataBuffer    : array [0..127] of integer;   // max of 128 USB devices
 errmsg,data   : pansichar;
 neededsize,i  : integer;
 devinfos      : yDeviceSt;

begin
  errmsg  :=  @errmsgBuffer;

  // API  initialisation
  if(yapiInitAPI(1,errmsg)<0) then
   begin
    writeln(errmsg);
    halt;
  end;

   // forces a device inventory
  if( yapiUpdateDeviceList(1,errmsg)<0) then
    begin
     writeln(errmsg);
     halt;
   end;

  // loads all device handles into dataBuffer
  if yapiGetAllDevices(@dataBuffer,sizeof(dataBuffer),neededsize,errmsg)<0 then
    begin
     writeln(errmsg);
     halt;
    end;

  // gets device info from each handle
  for i:=0 to  neededsize div sizeof(integer)-1 do
   begin
     if (apiGetDeviceInfo(dataBuffer[i], devinfos, errmsg)<0) then
       begin
         writeln(errmsg);
         halt;
       end;
     writeln(pansichar(@devinfos.serial)+' ('+pansichar(@devinfos.productname)+')');
   end;

end.

VB6 et yapi.dll

Chaque point d'entrée de la DLL yapi.dll est disponible en deux versions, une classique C-decl, et un seconde compatible avec Visual Basic 6 préfixée avec vb6_.

21.5. Port de la librairie haut niveau

Toutes les sources de l'API Yoctopuce étant fournies dans leur intégralité, vous pouvez parfaitement entreprendre le port complet de l'API dans le langage de votre choix. Sachez cependant qu'une grande partie du code source de l'API est généré automatiquement.

Ainsi, il n'est pas nécessaire de porter la totalité de l'API, il suffit de porter le fichier yocto_api et un de ceux correspondant à une fonctionnalité, par exemple yocto_relay. Moyennant un peu de travail supplémentaire, Yoctopuce sera alors en mesure de générer tous les autres fichiers. C'est pourquoi il est fortement recommandé de contacter le support Yoctopuce avant d'entreprendre le port de la librairie Yoctopuce dans un autre langage. Un travail collaboratif sera profitable aux deux parties.

22. Programmation avancée

Les chapitres précédents vous ont présenté dans chaque language disponible les fonctions de programmation de base utilisables avec votre module Yocto-RS485. Ce chapitre présente de façon plus générale une utilisation plus avancée de votre module. Les exemples sont donnés dans le language le plus populaire auprès des clients de Yoctopuce, à savoir C#. Néanmoins, vous trouverez dans les librairies de programmation pour chaque language des exemples complets illustrant les concepts présentés ici.

Afin de rester le plus concis possible, les exemples donnés dans ce chapitre ne font aucune gestion d'erreur. Ne les copiez pas tels-quels dans une application de production.

22.1. Programmation par événements

Les méthodes de gestion des modules Yoctopuce qui vous ont été présentées dans les chapitres précédents sont des fonctions de polling, qui consistent à demander en permanence à l'API si quelque chose a changé. Facile à appréhender, cette technique de programmation est n'est pas la plus efficace ni la plus réactive. C'est pourquoi l'API de programmation Yoctopuce propose aussi un modèle de programmation par événements. Cette technique consiste à demander à l'API de signaler elle-même les changements importants dès qu'ils sont détectés. A chaque fois qu'un paramètre clé change, l'API appelle une fonction de callback que vous avez prédéfinie.

Détecter l'arrivée et le départ des modules

La gestion du hot-plug est importante lorsque l'on travaille avec des modules USB, car tôt ou tard vous serez amené à brancher et débrancher un module après le lancement de votre programme. L'API a été conçue pour gérer l'arrivée et le départ inopinés des modules de manière transparente, mais votre application doit en général en tenir compte si elle veut éviter de prétendre utiliser un module qui a été débranché.

La programmation par événements est particulièrement utile pour détecter les branchements/débranchements de modules. Il est en effet plus simple de se faire signaler les branchements, que de devoir lister en permanence les modules branchés pour en déduire ceux qui sont arrivés et ceux qui sont partis. Pour pouvoir être prévenu dès qu'un module arrive, vous avez besoin de trois morceaux de code.

Le callback

Le callback est la fonction qui sera appelée à chaque fois qu'un nouveau module Yoctopuce sera branché. Elle prend en paramètre le module concerné.


 static void deviceArrival(YModule m)
 {
     Console.WriteLine("Nouveau module  : " + m.get_serialNumber());
 }

L'initialisation

Vous devez ensuite signaler à l'API qu'il faut appeler votre callback quand un nouveau module est branché.


  YAPI.RegisterDeviceArrivalCallback(deviceArrival);

Notez que si des modules sont déjà branchés lorsque le callback est enregistré, le callback sera appelé pour chacun de ces modules déjà branchés.

Déclenchement des callbacks

Un problème classique de la programmation par callbacks est que ces callbacks peuvent être appelés n'importe quand, y compris à des moments où le programme principal n'est pas prêt à les recevoir, ce qui peut avoir des effets de bords indésirables comme des dead-locks et autres conditions de course. C'est pourquoi dans l'API Yoctopuce, les callbacks d'arrivée/départs de modules ne sont appelés que pendant l'exécution de la fonction UpdateDeviceList(). Il vous suffit d'appeler UpdateDeviceList() à intervalle régulier depuis un timer ou un thread spécifique pour controller précisément quand les appels à ces callbacks auront lieu:


// boucle d'attente gérant les callback
while (true)
{  
    // callback d'arrivée / départ de modules
    YAPI.UpdateDeviceList(ref errmsg);
    // attente non active gérant les autres callbacks
    YAPI.Sleep(500, ref errmsg);
}

De manière similaire, il est possible d'avoir un callback quand un module est débranché. Vous trouverez un exemple concret démontrant toutes ces techniques dans la librairie de programmation Yoctopuce de chaque langage. L'exemple se trouve dans le répertoire Examples/Prog-EventBased.

Attention: dans la plupart des langages, les callbacks doivent être des procédures globales, et non pas des méthodes. Si vous souhaitez que le callback appelle une méthode d'un objet, définissez votre callback sous la forme d'une procédure globale qui ensuite appellera votre méthode.

Détecter le changement de valeur d'un senseur

L'API Yoctopuce fournit aussi un système de callback permettant d'être prévenu automatiquement de la valeur d'un senseur, soit lorsqu'il a changé de manière significative, ou soit à intervalle fixe. Le code nécessaire à cet effet est assez similaire au code utilisé pour détecter l'arrivée d'un module.

Cette technique est très utile en particulier si vous voulez détecter des changements de valeur très rapides (de l'ordre de quelques millisecondes), car elle est beaucoup plus efficace (en terme de traffic sur USB) qu'une lecture répétée de la valeur et permet donc des meilleures performances.

L'appel des callbacks

Afin de permettre un meilleur contrôle du contexte d'appel, les callbacks de changement de valeurs et les callback périodiques ne sont appelés que pendant l'exécution des fonctions YAPI.Sleep() et YAPI.HandleEvents(). Vous devez donc appeler une de ces fonctions à intervalle régulier, soit depuis un timer soit depuis un thread parallèle.


while (true)
{
  // boucle d'attente permettant de déclencher les callbacks
  YAPI.Sleep(500, ref errmsg);
}

Dans les environnements de programmation où seul le thread d'interface a le droit d'interagir avec l'utilisateur, il est souvent approprié d'appeler YAPI.HandleEvents() depuis ce thread.

Le callback de changement de valeur

Ce type de callback est appelé lorsque un capteur générique change de manière significative. Il prend en paramètre la fonction concernée et la nouvelle valeur, sous forme d'une chaîne de caractères59.


static void valueChangeCallback(YGenericSensor fct, string value)
{
  Console.WriteLine(fct.get_hardwareId() + "=" + value);
}

Dans la plupart des langages, les callbacks doivent être des procédures globales, et non pas des méthodes. Si vous souhaitez que le callback appelle une méthode d'un objet, définissez votre callback sous la forme d'une procédure globale qui ensuite appellera votre méthode. Si vous avez besoin de garder la référence sur votre objet, vous pouvez la stocker directement dans l'objet YGenericSensor à l'aide de la fonction set_userData. Il vous sera ainsi possible de la récupérer dans la procédure globale de callback en appelant get_userData.

Mise en place du callback de changement de valeur

Le callback est mis en place pour une fonction GenericSensor donnée à l'aide de la méthode registerValueCallback. L'exemple suivant met en place un callback pour la première fonction GenericSensor disponible.


YGenericSensor f = YGenericSensor.FirstGenericSensor();
f.registerValueCallback(valueChangeCallback);

Vous remarquerez que chaque fonction d'un module peut ainsi avoir un callback différent. Par ailleurs, si vous prenez goût aux callback de changement de valeur, sachez qu'il ne sont pas limités aux senseurs, et que vous pouvez les utiliser avec tous les modules Yoctopuce (par exemple pour être notifié en cas de commutation d'un relais).

Le callback périodique

Ce type de callback est automatiquement appelé à intervalle réguliers. La fréquence d'appel peut être configurée individuellement pour chaque senseur, avec des fréquences pouvant aller de cent fois par seconde à une fois par heure. Le callback prend en paramètre la fonction concernée et la valeur mesurée, sous forme d'un objet YMeasure. Contrairement au callback de changement de valeur qui ne contient que la nouvelle valeur instantanée, l'objet YMeasure peut donner la valeur minimale, moyenne et maximale observée depuis le dernier appel du callback périodique. De plus, il contient aussi l'indication de l'heure exacte qui correspond à la mesure, de sorte à pouvoir l'interpréter correctement même en différé.


static void periodicCallback(YGenericSensor fct, YMeasure measure)
{
  Console.WriteLine(fct.get_hardwareId() + "=" +
                    measure.get_averageValue());
}

Mise en place du callback périodique

Le callback est mis en place pour une fonction GenericSensor donnée à l'aide de la méthode registerTimedReportCallback. Pour que le callback périodique soit appelé, il faut aussi spécifier la fréquence d'appel à l'aide de la méthode set_reportFrequency (sinon le callback périodique est désactivé par défaut). La fréquence est spécifié sous forme textuelle (comme pour l'enregistreur de données), en spécifiant le nombre d'occurrences par seconde (/s), par minute (/m) ou par heure (/h). La fréquence maximale est 100 fois par seconde (i.e. "100/s"), et fréquence minimale est 1 fois par heure (i.e. "1/h"). Lorsque la fréquence supérieure ou égale à 1/s, la mesure représente une valeur instantanée. Lorsque la fréquence est inférieure, la mesure comporte des valeurs minimale, moyenne et maximale distinctes sur la base d'un échantillonnage effectué automatiquement par le module.

L'exemple suivant met en place un callback périodique 4 fois par minute pour la première fonction GenericSensor disponible.


YGenericSensor f = YGenericSensor.FirstGenericSensor();
f.set_reportFrequency("4/m");
f.registerTimedReportCallback(periodicCallback);

Comme pour les callback de changement valeur, chaque fonction d'un module peut avoir un callback périodique différent.

Fonction callback générique

Parfois, il est souhaitable d'utiliser la même fonction de callback pour différents types de senseurs (par exemple pour une application de mesure générique). Ceci est possible en définissant le callback pour un objet de classe YSensor plutôt que YGenericSensor. Ainsi, la même fonction callback pourra être utilisée avec toutes les sous-classes de YSensor (et en particulier avec YGenericSensor). A l'intérieur du callback, on peut utiliser la méthode get_unit() pour obtenir l'unité physique du capteur si nécessaire pour l'affichage.

Un exemple concret

Vous trouverez un exemple concret démontrant toutes ces techniques dans la librairie de programmation Yoctopuce de chaque langage. L'exemple se trouve dans le répertoire Examples/Prog-EventBased.

22.2. L'enregistreur de données

Votre Yocto-RS485 est équipé d'un enregistreur de données, aussi appelé datalogger, capable d'enregistrer en continu les mesures effectuées par le module. La fréquence d'enregistrement maximale est de cent fois par secondes (i.e. "100/s"), et la fréquence minimale est de une fois par heure (i.e. "1/h"). Lorsque la fréquence supérieure ou égale à 1/s, la mesure représente une valeur instantanée. Lorsque la fréquence est inférieure, l'enregistreur stocke non seulement une valeur moyenne, mais aussi les valeurs minimale et maximale observées durant la période, sur la base d'un échantillonnage effectué par le module.

Notez qu'il est inutile et contre-productive de programmer une fréquence d'enregistrement plus élevée que la fréquence native d'échantillonnage du capteur concerné.

La mémoire flash de l'enregistreur de données permet d'enregistrer environ 500'000 mesures instantanées, ou 125'000 mesures moyennées. Lorsque la mémoire du datalogger est saturée, les mesures les plus anciennes sont automatiquement effacées.

Prenez garde à ne pas laisser le datalogger fonctionner inutilement à haute vitesse: le nombre d'effacements possibles d'une mémoire flash est limité (typiquement 100'000 cycles d'écriture/effacement). A la vitesse maximale, l'enregistreur peut consommer plus de 100 cycles par jour ! Notez aussi qu'il se sert à rien d'enregistrer des valeurs plus rapidement que la fréquence de mesure du capteur lui-même.

Démarrage/arrêt du datalogger

Le datalogger peut être démarré à l'aide de la méthode set_recording().


YDataLogger l = YDataLogger.FirstDataLogger();
l.set_recording(YDataLogger.RECORDING_ON);

Il est possible de faire démarrer automatiquement l'enregistrement des données dès la mise sous tension du module.


YDataLogger l = YDataLogger.FirstDataLogger();
l.set_autoStart(YDataLogger.AUTOSTART_ON);
l.get_module().saveToFlash();  // il faut sauver le réglage!

Remarque: les modules Yoctopuce n'ont pas besoin d'une connection USB active pour fonctionner: ils commencent à fonctionner dès qu'ils sont alimentés. Le Yocto-RS485 peut enregistrer des données sans être forcément raccordé à un ordinateur: il suffit d'activer le démarrage automatique du datalogger et d'alimenter le module avec un simple chargeur USB.

Effacement de la mémoire

La mémoire du datalogger peut être effacée à l'aide de la fonction forgetAllDataStreams(). Attention l'effacement est irréversible.


YDataLogger logger = YDataLogger.FirstDataLogger();
logger.forgetAllDataStreams();

Choix de la fréquence d'enregistrement

La fréquence d'enregistrement se configure individuellement pour chaque capteur, à l'aide de la méthode set_logFrequency(). La fréquence est spécifié sous forme textuelle (comme pour les callback périodiques), en spécifiant le nombre d'occurrences par seconde (/s), par minute (/m) ou par heure (/h). La valeur par défaut est "1/s".

L'exemple suivant configure la fréquence d'enregistrement à 15 mesures par minute pour le premier capteur trouvé, quel que soit son type:


YSensor sensor = YSensor.FirstSensor();
sensor.set_logFrequency("15/m");

Pour économiser la mémoire flash, il est possible de désactiver l'enregistrement des mesures pour une fonction donnée. Pour ce faire, il suffit d'utiliser la valeur "OFF":


sensor.set_logFrequency("OFF");

Limitation: Le Yocto-RS485 ne peut pas utiliser des fréquences différentes pour les notifications périodiques et pour l'enregistrement dans le datalogger. Il est possible de désactiver l'une ou l'autre de ces fonctionnalités indépendamment, mais si les deux sont activées, elles fonctionnent nécessairement à la même fréquence.

Récupération des données

Pour récupérer les données enregistrées dans la mémoire flash du Yocto-RS485, il faut appeler la méthode get_recordedData() de la fonction désirée, en spécifiant l'intervalle de temps qui nous intéresse. L'intervalle de temps est donnée à l'aide du timestamp UNIX de début et de fin. Il est aussi possible de spécifier 0 pour ne pas donner de limite de début ou de fin.

La fonction get_recordedData() ne retourne pas directement un tableau de valeurs mesurées, car selon la quantité de données, leur chargement pourrait potentiellement prendre trop de temps et entraver la réactivité de l'application. A la place, cette fonction retourne un objet YDataSet qui permet d'obtenir immédiatement une vue d'ensemble des données (résumé), puis d'en charger progressivement le détail lorsque c'est souhaitable.

Voici les principales méthodes pour accéder aux données enregistrées:

  1. dataset = sensor.get_recordedData(0,0): on choisit l'intervalle de temps désiré
  2. dataset.loadMore(): pour charger les données progressivement
  3. dataset.get_summary(): retourne une mesure unique résumant tout l'intervalle de temps
  4. dataset.get_preview(): retourne un tableau de mesures représentant une version condensée de l'ensemble des mesures sur l'intervalle de temps choisi (réduction d'un facteur 200 environ)
  5. dataset.get_measures(): retourne un tableau contenant toutes les mesures de l'intervalle choisi (grandit au fur et à mesure de leur chargement avec loadMore)

Les mesures sont des objets YMeasure 60. On peut en y lire la valeur minimale, moyenne et maximale à l'aide des méthodes get_minValue(), get_averageValue() et get_maxValue() respectivement. Voici un petit exemple qui illustre ces fonctions:


// On veut récupérer toutes les données du datalogger
YDataSet dataset = sensor.get_recordedData(0, 0);

// Le 1er appel à loadMore() charge le résumé des données
dataset.loadMore();
YMeasure summary = dataset.get_summary();
string timeFmt = "dd MMM yyyy hh:mm:ss,fff";
string logFmt = "from {0} to {1} : average={2:0.00}{3}";
Console.WriteLine(String.Format(logFmt,
    summary.get_startTimeUTC_asDateTime().ToString(timeFmt),
    summary.get_endTimeUTC_asDateTime().ToString(timeFmt),
    summary.get_averageValue(), sensor.get_unit()));

// Les appels suivants à loadMore() chargent les mesures
Console.WriteLine("loading details");
int progress;
do {
    Console.Write(".");
    progress = dataset.loadMore();
} while(progress < 100);

// Ca y est, toutes les mesures sont là
List<YMeasure> details = dataset.get_measures();
foreach (YMeasure m in details) {
    Console.WriteLine(String.Format(logFmt,
        m.get_startTimeUTC_asDateTime().ToString(timeFmt),
        m.get_endTimeUTC_asDateTime().ToString(timeFmt),
        m.get_averageValue(), sensor.get_unit()));
}

Vous trouverez un exemple complet démontrant cette séquence dans la librairie de programmation Yoctopuce de chaque langage. L'exemple se trouve dans le répertoire Examples/Prog-DataLogger.

Horodatage

Le Yocto-RS485 n'ayant pas de batterie, il n'est pas capable de deviner tout seul l'heure qu'il est au moment de sa mise sous tension. Néanmoins, le Yocto-RS485 va automatiquement essayer de se mettre à l'heure de l'hôte auquel il est connecté afin de pouvoir correctement dater les mesures du datalogger:

Si aucune de ces conditions n'est remplie (par exemple si le module est simplement connecté à un chargeur USB), le Yocto-RS485 fera de son mieux pour donner une date vraisemblable aux mesures, en repartant de l'heure des dernières mesures enregistrées. Ainsi, vous pouvez "mettre à l'heure" un Yocto-RS485 "autonome" en le branchant sur un téléphone Android, lançant un enregistrement de données puis en le re-branchant tout seul sur un chargeur USB. Soyez toutefois conscients que, sans source de temps externe, l'horloge du Yocto-RS485 peut dériver petit à petit (en principe jusqu'à 2%).

22.3. Calibration des senseurs

Votre module Yocto-RS485 est équipé d'un capteur numérique calibré en usine. Les valeurs qu'il renvoie sont censées être raisonnablement justes dans la majorité des cas. Il existe cependant des situations où des conditions extérieures peuvent avoir une influence sur les mesures.

L'API Yoctopuce offre le moyen de re-calibrer les valeurs mesurées par votre Yocto-RS485. Il ne n'agit pas de modifier les réglages hardware du module, mais plutôt d'effectuer une transformation a posteriori des mesures effectuées par le capteur. Cette transformation est pilotée par des paramètres qui seront stockés dans la mémoire flash du module, la rendant ainsi spécifique à chaque module. Cette re-calibration est donc entièrement software et reste parfaitement réversible.

Avant de décider de vous lancer dans la re-calibration de votre module Yocto-RS485, assurez vous d'avoir bien compris les phénomènes qui influent sur les mesures de votre module, et que la différence en les valeurs vraies et les valeurs lues ne résultent pas d'une mauvaise utilisation ou d'un positionnement inadéquat.

Les modules Yoctopuce supportent deux types de calibration. D'une part une interpolation linéaire basée sur 1 à 5 points de référence, qui peut être effectuée directement à l'intérieur du Yocto-RS485. D'autre part l'API supporte une calibration arbitraire externe, implémentée à l'aide de callbacks.

Interpolation linéaire 1 à 5 points

Ces transformations sont effectuées directement dans le Yocto-RS485 ce qui signifie que vous n'avez qu'à enregistrer les points de calibration dans la mémoire flash du module, et tous les calculs de correction seront effectués de manière totalement transparente: La fonction get_currentValue() renverra la valeur corrigée, alors que la fonction get_currentRawValue() continuera de renvoyer la valeur avant correction.

Les points de calibration sont simplement des couples (Valeur_lue, Valeur_corrigée). Voyons l'influence du nombre de points de corrections sur les corrections.

Correction 1 point

La correction par 1 point ne fait qu'ajouter un décalage aux mesures. Par exemple, si vous fournissez le point de calibration (a,b), toutes les valeurs mesurées seront corrigées en leur ajoutant b-a, de sorte à ce que quand la valeur lue sur le capteur est a, la fonction genericSensor1 retournera b.


Correction de mesures avec 1 point de calibration, ici (5,10)

La mise en pratique est des plus simples: il suffit d'appeler la méthode calibrateFromPoints() de la fonction que l'on désire corriger. Le code suivant applique la correction illustrée sur le graphique ci-dessus à la première fonction genericSensor1 trouvée. Notez l'appel à la méthode saveToFlash du module hébergeant la fonction, de manière à ce que le module n'oublie pas la calibration dès qu'il sera débranché.


Double[] ValuesBefore = {5};
Double[] ValuesAfter  = {10};
YGenericSensor f = YGenericSensor.FirstGenericSensor();
f.calibrateFromPoints(ValuesBefore, ValuesAfter);
f.get_module().saveToFlash();

Correction 2 points

La correction 2 points permet d'effectuer à la fois un décalage et une multiplication par un facteur donné entre deux points. Si vous fournissez les deux points (a,b) et (c,d), le résultat de la fonction sera multiplié par (d-b)/(c-a) dans l'intervalle [a,c] et décalé, de sorte à ce que quand la valeur lue par le senseur est a ou c, la fonction genericSensor1 retournera b ou respectivement d. A l'extérieur de l'intervalle [a,c], les valeurs seront simplement décalées de sorte à préserver la continuité des mesures: une augmentation de 1 sur la valeur lue par le senseur induira une augmentation de 1 sur la valeur retournée.


Correction de mesures avec 2 points de calibrations (10,5) et (25,10).

Le code permettant de programmer cette calibration est très similaire au code précédent


Double[] ValuesBefore = {10,25};
Double[] ValuesAfter  = {5,10};
YGenericSensor f = YGenericSensor.FirstGenericSensor();
f.calibrateFromPoints(ValuesBefore, ValuesAfter);
f.get_module().saveToFlash();

Notez que les valeurs avant correction doivent être triées dans un ordre strictement croissant, sinon elles seront purement et simplement ignorées.

Correction de 3 à 5 points

Les corrections de 3 à 5 points ne sont qu'une généralisation de la méthode à deux points, permettant de ainsi de créer jusqu' 4 intervalles de correction pour plus de précision. Ces intervalles ne peuvent pas être disjoints.


Exemple de correction avec 3 points de calibrations.

Retour à la normale

Pour annuler les effets d'une calibration sur une fonction, il suffit d'appeler la méthode calibrateFromPoints() avec deux tableaux vides


Double[] ValuesBefore = {};
Double[] ValuesAfter  = {};
YGenericSensor f = YGenericSensor.FirstGenericSensor();
f.calibrateFromPoints(ValuesBefore, ValuesAfter);
f.get_module().saveToFlash();

Vous trouverez dans le répertoire Examples\Prog-Calibration des librairies Delphi, VB et C# une application permettant d'expérimenter les effets de la calibration 1 à 5 points.

Limitations

En raison des limitations de stockage et de traitement des valeurs flottantes dans le module Yoctopuce, les valeurs des valeurs lues et des valeur corrigées doivent respecter certaines contraintes numériques:

Interpolation arbitraire

Il est aussi possible de calculer l'interpolation à la place du module, pour calculer une interpolation par spline par exemple. Il suffit pour cela d'enregistrer un callback dans l'API. Ce callback devra préciser le nombre de points de correction auquel il s'attend.


public static double CustomInterpolation3Points(double rawValue, int calibType,
                  int[] parameters, double[] beforeValues, double[] afterValues)
  {  double result;
     // la valeur a corriger est rawValue
     // les points de calibrations sont dans beforeValues et afterValues
     result = ....    // interpolation de votre choix
     return result;
   }
YAPI.RegisterCalibrationHandler(3, CustomInterpolation3Points);

Notez que ces callbacks d'interpolation sont globaux, et non pas spécifiques à chaque fonction. Ainsi à chaque fois que quelqu'un demandera une valeur à un module qui disposera dans sa mémoire flash du bon nombre de points de calibration, le callback correspondant sera appelé pour corriger la valeur avant de la renvoyer, permettant ainsi de corriger les mesures de manière totalement transparente.

23. Mise à jour du firmware

Il existe plusieurs moyens de mettre à jour le firmware des modules Yoctopuce.

23.1. Le VirtualHub ou le YoctoHub

Il est possible de mettre à jour un module directement depuis l'interface web du VirutalHub ou du YoctoHub. Il suffit d'accéder à la fenêtre de configuration du module que à mettre à jour et de cliquer sur le bouton "upgrade". Le VirtualHub démarre un assistant qui vous guidera durant la procédure de mise à jour.

Si pour une raison ou une autre, la mise à jour venait à échouer et que le module de fonctionnait plus, débranchez puis rebranchez le module en maintenant sur le Yocto-bouton appuyé. Le module va démarrer en mode "mise à jour" et sera listé en dessous des modules connectés.

23.2. La librairie ligne de commandes

Tous les outils en lignes de commandes ont la possibilité de mettre à jour les modules Yoctopuce grâce à la commande downloadAndUpdate. Le mécanisme de sélection des modules fonctionne comme pour une commande traditionnelle. La [cible] est le nom du module qui va être mis à jour. Vous pouvez aussi utiliser les alias "any" ou "all", ou encore une liste de noms, séparés par des virgules, sans espace.


C:\>Executable [options] [cible] commande [paramètres]

L'exemple suivant met à jour tous les modules Yoctopuce connectés en USB.


C:\>YModule all downloadAndUpdate
ok: Yocto-PowerRelay RELAYHI1-266C8(rev=15430) is up to date.
ok: 0 / 0 hubs in 0.000000s.
ok: 0 / 0 shields in 0.000000s.
ok: 1 / 1 devices in 0.130000s 0.130000s per device.
ok: All devices are now up to date.
C:\>

23.3. L'application Android Yocto-Firmware

Il est possible de mettre à jour le firmware de vos modules depuis votre téléphone ou tablette Android avec l'application Yocto-Firmware. Cette application liste tous les modules Yoctopuce branchés en USB et vérifie si un firmware plus récent est disponible sur www.yoctopuce.com. Si un firmware plus récent est disponible, il est possible de mettre à jour le module. L'application se charge de télécharger et d'installer le nouveau firmware en préservant les paramètres du module.

Attention, pendant la mise à jour du firmware, le module redémarre plusieurs fois. Android interprète le reboot d'un périphérique USB comme une déconnexion et reconnexion du périphérique USB, et demande à nouveau l'autorisation d'utiliser le port USB. L'utilisateur est obligé de cliquer sur OK pour que la procédure de mise à jour se termine correctement.

23.4. La librairie de programmation

Si vous avez besoin d'intégrer la mise à jour de firmware dans votre application, les librairies proposent une API pour mettre à jour vos modules.61

Sauvegarder et restaurer les paramètres

La méthode get_allSettings() retourne un buffer binaire qui permet de sauvegarder les paramètres persistants d'un module. Cette fonction est très utile pour sauvegarder la configuration réseau d'un YoctoHub par exemple.


YWireless wireless = YWireless.FindWireless("reference");
YModule m = wireless.get_module();
byte[] default_config =  m.get_allSettings();
saveFile("default.bin", default_config);
...

Ces paramètres peuvent être appliqués sur d'autres modules à l'aide de la méthode set_allSettings().


byte[] default_config = loadFile("default.bin");
YModule m = YModule.FirstModule();
while (m != null) {
  if (m.get_productName() == "YoctoHub-Wireless") {
    m.set_allSettings(default_config);
  }
  m = m.next();
}

Chercher le bon firmware

La première étape pour mettre à jour un module Yoctopuce est de trouver quel firmware il faut utiliser, c'est le travail de la méthode checkFirmware(path, onlynew) de l'objet YModule. Cette méthode vérifie que le firmware passé en argument (path) est compatible avec le module. Si le paramètre onlynew est vrai, cette méthode vérifie si le firmware est plus récent que la version qui est actuellement utilisée par le module. Quand le fichier n'est pas compatible (ou si le fichier est plus vieux que la version installée), cette méthode retourne une chaîne vide. Si au contraire le fichier est valide, la méthode retourne le chemin d'accès d'un fichier.

Le code suivant vérifie si le fichier c:\tmp\METEOMK1.17328.byn est compatible avec le module stocké dans la variable m.


YModule m = YModule.FirstModule();
...
...
string path = "c:\\tmp\METEOMK1.17328.byn";
string newfirm = m.checkFirmware(path, false);
if (newfirm != "") {
  Console.WriteLine("firmware " + newfirm + " is compatible");
}
...

Il est possible de passer un répertoire en argument (au lieu d'un fichier). Dans ce cas la méthode va parcourir récursivement tous les fichiers du répertoire et retourner le firmware compatible le plus récent. Le code suivant vérifie s'il existe un firmware plus récent dans le répertoire c:\tmp\.


YModule m = YModule.FirstModule();
...
...
string path = "c:\\tmp";
string newfirm = m.checkFirmware(path, true);
if (newfirm != "") {
  Console.WriteLine("firmware " + newfirm + " is compatible and newer");
}
...

Il est aussi possible de passer la chaîne "www.yoctopuce.com" en argument pour vérifier s'il existe un firmware plus récent publié sur le site web de Yoctopuce. Dans ce cas, la méthode retournera l'URL du firmware. Vous pourrez soit utiliser cette URL pour télécharger le firmware sur votre disque, soit utiliser cette URL lors de la mise à jour du firmware (voir ci-dessous). Bien évidemment, cette possibilité ne fonctionne que si votre machine est reliée à Internet.


YModule m = YModule.FirstModule();
...
...
string url = m.checkFirmware("www.yoctopuce.com", true);
if (url != "") {
  Console.WriteLine("new firmware is available at " + url );
}
...

Mettre à jour le firmware

La mise à jour du firmware peut prendre plusieurs minutes, c'est pourquoi le processus de mise à jour est exécuté par la librairie en arrière plan et est contrôlé par le code utilisateur à l'aide de la classe YFirmwareUdpate.

Pour mettre à jour un module Yoctopuce, il faut obtenir une instance de la classe YFirmwareUpdate à l'aide de la méthode updateFirmware d'un objet YModule. Le seul paramètre de cette méthode est le path du firmware à installer. Cette méthode ne démarre pas immédiatement la mise à jour, mais retourne un objet YFirmwareUpdate configuré pour mettre à jour le module.


string newfirm = m.checkFirmware("www.yoctopuce.com", true);
.....
YFirmwareUpdate fw_update = m.updateFirmware(newfirm);

La méthode startUpdate() démarre la mise à jour en arrière plan. Ce processus en arrière plan se charge automatiquement de:

  1. sauvegarder des paramètres du module,
  2. redémarrer le module en mode "mise à jour"
  3. mettre à jour le firmware
  4. démarrer le module avec la nouvelle version du firmware
  5. restaurer les paramètres

Les méthodes get_progress() et get_progressMessage() permettent de suivre la progression de la mise à jour. get_progress()retourne la progression sous forme de pourcentage (100 = mise à jour terminée). get_progressMessage() retourne une chaîne de caractères décrivant l'opération en cours (effacement, écriture, reboot,...). Si la méthode get_progress() retourne une valeur négative, c'est que le processus de mise à jour à échoué. Dans ce cas la méthode get_progressMessage() retourne le message d'erreur.

Le code suivant démarre la mise à jour et affiche la progression sur la sortie standard.


YFirmwareUpdate fw_update = m.updateFirmware(newfirm);
....
int status = fw_update.startUpdate();
while (status < 100 && status >= 0) {
  int newstatus = fw_update.get_progress();
  if (newstatus != status) {
    Console.WriteLine(status + "% "
      + fw_update.get_progressMessage());
  }
  YAPI.Sleep(500, ref errmsg);
  status = newstatus;
}

if (status < 0) {
  Console.WriteLine("Firmware Update failed: "
    + fw_update.get_progressMessage());
} else {
  Console.WriteLine("Firmware Updated Successfully!");
}

Particularité d'Android

Il est possible de mettre à jour un firmware d'un module en utilisant la librairie Android. Mais pour les modules branchés en USB, Android va demander à l'utilisateur d'autoriser l'application à accéder au port USB.

Pendant la mise à jour du firmware, le module redémarre plusieurs fois. Android interprète le reboot d'un périphérique USB comme une déconnexion et reconnexion du port USB, et interdit tout accès USB tant que l'utilisateur n'a pas fermé le pop-up. L'utilisateur est obligé de cliquer sur OK pour que la procédure de mise à jour puisse continuer correctement. Il n'est pas possible de mettre à jour un module branché en USB à un appareil Android sans que l'utilisateur ne soit obligé d'interagir avec l'appareil.

23.5. Le mode "mise à jour"

Si vous désirez effacer tous les paramètres du module ou que votre module ne démarre plus correctement, il est possible d'installer un firmware depuis le mode "mise à jour".

Pour forcer le module à fonctionner dans le mode "mis à jour", débranchez-le, attendez quelques secondes, et rebranchez-le en maintenant le Yocto-Bouton appuyé. Cela a pour effet de faire démarrer le module en mode "mise à jour". Ce mode de fonctionnement est protégé contre les corruptions et est toujours accessible.

Dans ce mode, le module n'est plus détecté par les objets YModules. Pour obtenir la liste des modules connectés en mode "mise à jour", il faut utiliser la fonction YAPI.GetAllBootLoaders(). Cette fonction retourne un tableau de chaînes de caractères avec le numéro de série des modules en le mode "mise à jour".


List<string> allBootLoader = YAPI.GetAllBootLoaders();

La procédure de mise à jour est identique au cas standard (voir section précédente), mais il faut instancier manuellement l'objet YFirmwareUpdate au lieu d'appeler module.updateFirmware(). Le constructeur prend en argument trois paramètres: le numéro de série du module, le path du firmware à installer, et un tableau de bytes avec les paramètres à restaurer à la fin de la mise à jour (ou null pour restaurer les paramètres d'origine).


YFirmwareUpdateupdate fw_update;
fw_update = new YFirmwareUpdate(allBootLoader[0], newfirm, null);
int status = fw_update.startUpdate();
.....

24. Référence de l'API de haut niveau

Ce chapitre résume les fonctions de l'API de haut niveau pour commander votre Yocto-RS485. La syntaxe et les types précis peuvent varier d'un langage à l'autre mais, sauf avis contraire toutes sont disponibles dans chaque language. Pour une information plus précise sur les types des arguments et des valeurs de retour dans un langage donné, veuillez vous référer au fichier de définition pour ce langage (yocto_api.* ainsi que les autres fichiers yocto_* définissant les interfaces des fonctions).

Dans les langages qui supportent les exceptions, toutes ces fonctions vont par défaut générer des exceptions en cas d'erreur plutôt que de retourner la valeur d'erreur documentée pour chaque fonction, afin de faciliter le déboguage. Il est toutefois possible de désactiver l'utilisation d'exceptions à l'aide de la fonction yDisableExceptions(), si l'on préfère travailler avec des valeurs de retour d'erreur.

Ce chapitre ne reprend pas en détail les concepts de programmation décrits plus tôt, afin d'offrir une référence plus concise. En cas de doute, n'hésitez pas à retourner au chapitre décrivant en détail de chaque attribut configurable.

24.1. La classe YAPI

Fonctions générales

Ces quelques fonctions générales permettent l'initialisation et la configuration de la librairie Yoctopuce. Dans la plupart des cas, un appel à yRegisterHub() suffira en tout et pour tout. Ensuite, vous pourrez appeler la fonction globale yFind...() ou yFirst...() correspondant à votre module pour pouvoir interagir avec lui.

Pour utiliser les fonctions décrites ici, vous devez inclure:

java
import com.yoctopuce.YoctoAPI.YAPI;
dnp
import YoctoProxyAPI.YAPIProxy
cp
#include "yocto_api_proxy.h"
ml
import YoctoProxyAPI.YAPIProxy"
js
<script type='text/javascript' src='yocto_api.js'></script>
cpp
#include "yocto_api.h"
m
#import "yocto_api.h"
pas
uses yocto_api;
vb
yocto_api.vb
cs
yocto_api.cs
uwp
import com.yoctopuce.YoctoAPI.YModule;
py
from yocto_api import *
php
require_once('yocto_api.php');
es
in HTML: <script src="../../lib/yocto_api.js"></script>
in node.js: require('yoctolib-es2017/yocto_api.js');
vi
YModule.vi
Fonction globales
YAPI.CheckLogicalName(name)

Vérifie si un nom donné est valide comme nom logique pour un module ou une fonction.

YAPI.ClearHTTPCallbackCacheDir(bool_removeFiles)

Désactive le cache de callback HTTP.

YAPI.DisableExceptions()

Désactive l'utilisation d'exceptions pour la gestion des erreurs.

YAPI.EnableExceptions()

Réactive l'utilisation d'exceptions pour la gestion des erreurs.

YAPI.EnableUSBHost(osContext)

Cette fonction est utilisée uniquement sous Android.

YAPI.FreeAPI()

Attends que toutes les communications en cours avec les modules Yoctopuce soient terminées puis libère les ressources utilisées par la librairie Yoctopuce.

YAPI.GetAPIVersion()

Retourne la version de la librairie Yoctopuce utilisée.

YAPI.GetCacheValidity()

Retourne la durée de validité des données chargée par la libraire.

YAPI.GetDeviceListValidity()

Retourne le délai entre chaque énumération forcée des YoctoHubs utilisés.

YAPI.GetDllArchitecture()

Retourne l'architecture du binaire de la librairie de communication Yoctopuce utilisée.

YAPI.GetDllPath()

Retourne l'emplacement sur le disque des librairies Yoctopuce utilisées.

YAPI.GetLog(lastLogLine)

Récupère les messages de logs de la librairie de communication Yoctopuce.

YAPI.GetNetworkTimeout()

Retourne le délai de connexion réseau pour yRegisterHub() et yUpdateDeviceList().

YAPI.GetTickCount()

Retourne la valeur du compteur monotone de temps (en millisecondes).

YAPI.HandleEvents(errmsg)

Maintient la communication de la librairie avec les modules Yoctopuce.

YAPI.InitAPI(mode, errmsg)

Initialise la librairie de programmation de Yoctopuce explicitement.

YAPI.PreregisterHub(url, errmsg)

Alternative plus tolerante à yRegisterHub().

YAPI.RegisterDeviceArrivalCallback(arrivalCallback)

Enregistre une fonction de callback qui sera appelée à chaque fois qu'un module est branché.

YAPI.RegisterDeviceRemovalCallback(removalCallback)

Enregistre une fonction de callback qui sera appelée à chaque fois qu'un module est débranché.

YAPI.RegisterHub(url, errmsg)

Configure la librairie Yoctopuce pour utiliser les modules connectés sur une machine donnée.

YAPI.RegisterHubDiscoveryCallback(hubDiscoveryCallback)

Enregistre une fonction de callback qui est appelée chaque fois qu'un hub réseau s'annonce avec un message SSDP.

YAPI.RegisterHubWebsocketCallback(ws, errmsg, authpwd)

Variante de la fonction yRegisterHub() destinée à initialiser l'API Yoctopuce sur une session Websocket existante, dans le cadre d'un callback WebSocket entrant.

YAPI.RegisterLogFunction(logfun)

Enregistre une fonction de callback qui sera appellée à chaque fois que l'API a quelque chose à dire.

YAPI.SelectArchitecture(arch)

Sélectionne manuellement l'architecture de la libraire dynamique à utiliser pour accéder à USB.

YAPI.SetCacheValidity(cacheValidityMs)

Change la durée de validité des données chargées par la librairie.

YAPI.SetDelegate(object)

(Objective-C uniquement) Enregistre un objet délégué qui doit se conformer au protocole YDeviceHotPlug.

YAPI.SetDeviceListValidity(deviceListValidity)

Change le délai entre chaque énumération forcée des YoctoHub utilisés.

YAPI.SetHTTPCallbackCacheDir(str_directory)

Active le cache du callback HTTP.

YAPI.SetNetworkTimeout(networkMsTimeout)

Change le délai de connexion réseau pour yRegisterHub() et yUpdateDeviceList().

YAPI.SetTimeout(callback, ms_timeout, args)

Appelle le callback spécifié après un temps d'attente spécifié.

YAPI.SetUSBPacketAckMs(pktAckDelay)

Active la quittance des paquets USB reçus par la librairie Yoctopuce.

YAPI.Sleep(ms_duration, errmsg)

Effectue une pause dans l'exécution du programme pour une durée spécifiée.

YAPI.TestHub(url, mstimeout, errmsg)

Test si un hub est joignable.

YAPI.TriggerHubDiscovery(errmsg)

Relance une détection des hubs réseau.

YAPI.UnregisterHub(url)

Configure la librairie Yoctopuce pour ne plus utiliser les modules connectés sur une machine préalablement enregistrer avec RegisterHub.

YAPI.UpdateDeviceList(errmsg)

Force une mise-à-jour de la liste des modules Yoctopuce connectés.

YAPI.UpdateDeviceList_async(callback, context)

Force une mise-à-jour de la liste des modules Yoctopuce connectés.

YAPI.CheckLogicalName()
YAPI.CheckLogicalName()
yCheckLogicalName()yCheckLogicalName()[YAPI CheckLogicalName: ]yCheckLogicalName()yCheckLogicalName()YAPI.CheckLogicalName()YAPI.CheckLogicalName()YAPI.CheckLogicalName()YAPI.CheckLogicalName()yCheckLogicalName()YAPI.CheckLogicalName()

Vérifie si un nom donné est valide comme nom logique pour un module ou une fonction.

js
function yCheckLogicalName(name)
cpp
bool yCheckLogicalName(string name)
m
+(BOOL) CheckLogicalName:(NSString *) name
pas
boolean yCheckLogicalName(name: string): boolean
vb
function yCheckLogicalName(ByVal name As String) As Boolean
cs
static bool CheckLogicalName(string name)
java
boolean CheckLogicalName(String name)
uwp
bool CheckLogicalName(string name)
py
CheckLogicalName(name)
php
function yCheckLogicalName($name)
es
async CheckLogicalName(name)

Un nom logique valide est formé de 19 caractères au maximum, choisis parmi A..Z, a..z, 0..9, _ et -. Lorsqu'on configure un nom logique avec une chaîne incorrecte, les caractères invalides sont ignorés.

Paramètres :

nameune chaîne de caractères contenant le nom vérifier.

Retourne :

true si le nom est valide, false dans le cas contraire.

YAPI.ClearHTTPCallbackCacheDir()
YAPI.ClearHTTPCallbackCacheDir()
yClearHTTPCallbackCacheDir()

Désactive le cache de callback HTTP.

php
function yClearHTTPCallbackCacheDir($bool_removeFiles)

Cette méthode désctive la cache de callback HTTP, et permet également d'en effacer le contenu.

Paramètres :

bool_removeFilesVrai pour effacer le contenu du répertoire de cache.

Retourne :

nothing.

YAPI.DisableExceptions()
YAPI.DisableExceptions()
yDisableExceptions()yDisableExceptions()[YAPI DisableExceptions]yDisableExceptions()yDisableExceptions()YAPI.DisableExceptions()YAPI.DisableExceptions()YAPI.DisableExceptions()yDisableExceptions()YAPI.DisableExceptions()

Désactive l'utilisation d'exceptions pour la gestion des erreurs.

js
function yDisableExceptions()
cpp
void yDisableExceptions()
m
+(void) DisableExceptions
pas
yDisableExceptions()
vb
procedure yDisableExceptions()
cs
static void DisableExceptions()
uwp
void DisableExceptions()
py
DisableExceptions()
php
function yDisableExceptions()
es
async DisableExceptions()

Lorsque les exceptions sont désactivées, chaque fonction retourne une valeur d'erreur spécifique selon son type, documentée dans ce manuel de référence.

YAPI.EnableExceptions()
YAPI.EnableExceptions()
yEnableExceptions()yEnableExceptions()[YAPI EnableExceptions]yEnableExceptions()yEnableExceptions()YAPI.EnableExceptions()YAPI.EnableExceptions()YAPI.EnableExceptions()yEnableExceptions()YAPI.EnableExceptions()

Réactive l'utilisation d'exceptions pour la gestion des erreurs.

js
function yEnableExceptions()
cpp
void yEnableExceptions()
m
+(void) EnableExceptions
pas
yEnableExceptions()
vb
procedure yEnableExceptions()
cs
static void EnableExceptions()
uwp
void EnableExceptions()
py
EnableExceptions()
php
function yEnableExceptions()
es
async EnableExceptions()

Attention, lorsque les exceptions sont activées, tout appel à une fonction de la librairie qui échoue déclenche une exception. Dans le cas où celle-ci n'est pas interceptée correctement par le code appelant, soit le debugger se lance, soit le programme de l'utilisateur est immédiatement stoppé (crash).

YAPI.EnableUSBHost()
YAPI.EnableUSBHost()
YAPI.EnableUSBHost()

Cette fonction est utilisée uniquement sous Android.

java
void EnableUSBHost(Object osContext)

Avant d'appeler yRegisterHub("usb") il faut activer le port USB host du systeme. Cette fonction prend en argument un objet de la classe android.content.Context (ou d'une sous-classe). Il n'est pas nécessaire d'appeler cette fonction pour accéder au modules à travers le réseau.

Paramètres :

En cas d'erreur, déclenche une exception
osContextun objet de classe android.content.Context (ou une sous-classe)

YAPI.FreeAPI()
YAPI.FreeAPI()
yFreeAPI()yFreeAPI()[YAPI FreeAPI]yFreeAPI()yFreeAPI()YAPI.FreeAPI()YAPI.FreeAPI()YAPI.FreeAPI()YAPI.FreeAPI()yFreeAPI()YAPI.FreeAPI()YAPI.FreeAPI()YAPI.FreeAPI()

Attends que toutes les communications en cours avec les modules Yoctopuce soient terminées puis libère les ressources utilisées par la librairie Yoctopuce.

js
function yFreeAPI()
cpp
void yFreeAPI()
m
+(void) FreeAPI
pas
yFreeAPI()
vb
procedure yFreeAPI()
cs
static void FreeAPI()
java
void FreeAPI()
uwp
void FreeAPI()
py
FreeAPI()
php
function yFreeAPI()
es
async FreeAPI()
dnp
static void FreeAPI()
cp
static void FreeAPI()

Du point de vue du système d'exploitation, il n'est en général pas nécessaire d'appeler cette fonction puisque que l'OS libèrera automatiquement les ressources allouées dès que le programme sera terminé. Cependant il existe deux situations où vous auriez un intérêt à l'appeler: - Vous désirez libérer tous les blocs de mémoire alloués dynamiquement dans le but d'identifier une source de blocs perdus par exemple. - Votre code envoie des commandes aux modules juste avant de se terminer. Les commandes étant envoyées de manière asynchrone, sans cet appel le programme risquerait de se terminer avant que toutes les commandes n'aient eu le temps de partir. Vous ne devez plus appeler aucune fonction de la librairie après avoir appelé yFreeAPI(), sous peine de crash.

YAPI.GetAPIVersion()
YAPI.GetAPIVersion()
yGetAPIVersion()yGetAPIVersion()[YAPI GetAPIVersion]yGetAPIVersion()yGetAPIVersion()YAPI.GetAPIVersion()YAPI.GetAPIVersion()YAPI.GetAPIVersion()YAPI.GetAPIVersion()yGetAPIVersion()YAPI.GetAPIVersion()YAPI.GetAPIVersion()YAPI.GetAPIVersion()

Retourne la version de la librairie Yoctopuce utilisée.

js
function yGetAPIVersion()
cpp
string yGetAPIVersion()
m
+(NSString*) GetAPIVersion
pas
string yGetAPIVersion(): string
vb
function yGetAPIVersion() As String
cs
static String GetAPIVersion()
java
static String GetAPIVersion()
uwp
static string GetAPIVersion()
py
GetAPIVersion()
php
function yGetAPIVersion()
es
async GetAPIVersion()
dnp
static string GetAPIVersion()
cp
static string GetAPIVersion()

La version est retournée sous forme d'une chaîne de caractères au format "Majeure.Mineure.NoBuild", par exemple "1.01.5535". Pour les langages utilisant une DLL externe (par exemple C#, VisualBasic ou Delphi), la chaîne contient en outre la version de la DLL au même format, par exemple "1.01.5535 (1.01.5439)".

Si vous désirez vérifier dans votre code que la version de la librairie est compatible avec celle que vous avez utilisé durant le développement, vérifiez que le numéro majeur soit strictement égal et que le numéro mineur soit égal ou supérieur. Le numéro de build n'est pas significatif par rapport à la compatibilité de la librairie.

Retourne :

une chaîne de caractères décrivant la version de la librairie.

YAPI.GetCacheValidity()
YAPI.GetCacheValidity()
yGetCacheValidity()[YAPI GetCacheValidity]yGetCacheValidity()yGetCacheValidity()YAPI.GetCacheValidity()YAPI.GetCacheValidity()YAPI.GetCacheValidity()YAPI.GetCacheValidity()yGetCacheValidity()YAPI.GetCacheValidity()

Retourne la durée de validité des données chargée par la libraire.

cpp
static u64 yGetCacheValidity()
m
+(u64) GetCacheValidity
pas
u64 yGetCacheValidity(): u64
vb
function yGetCacheValidity() As Long
cs
ulong GetCacheValidity()
java
long GetCacheValidity()
uwp
async Task<ulong> GetCacheValidity()
py
GetCacheValidity()
php
function yGetCacheValidity()
es
async GetCacheValidity()

Cette méthode retourne la durée de mise en cache de tous les attributs des fonctions du module. Note: Cette fonction doit être appelée après yInitAPI.

Retourne :

un entier correspondant à la durée de validité attribuée aux les paramètres chargés, en millisecondes.

YAPI.GetDeviceListValidity()
YAPI.GetDeviceListValidity()
yGetDeviceListValidity()[YAPI GetDeviceListValidity]yGetDeviceListValidity()yGetDeviceListValidity()YAPI.GetDeviceListValidity()YAPI.GetDeviceListValidity()YAPI.GetDeviceListValidity()YAPI.GetDeviceListValidity()yGetDeviceListValidity()YAPI.GetDeviceListValidity()

Retourne le délai entre chaque énumération forcée des YoctoHubs utilisés.

cpp
static int yGetDeviceListValidity()
m
+(int) GetDeviceListValidity
pas
LongInt yGetDeviceListValidity(): LongInt
vb
function yGetDeviceListValidity() As Integer
cs
int GetDeviceListValidity()
java
int GetDeviceListValidity()
uwp
async Task<int> GetDeviceListValidity()
py
GetDeviceListValidity()
php
function yGetDeviceListValidity()
es
async GetDeviceListValidity()

Note: Cette fonction doit être appelée après yInitAPI.

Retourne :

le nombre de secondes entre chaque énumération.

YAPI.GetDllArchitecture()
YAPI.GetDllArchitecture()
YAPI.GetDllArchitecture()

Retourne l'architecture du binaire de la librairie de communication Yoctopuce utilisée.

dnp
static string GetDllArchitecture()

Pour Windows, l'architecture peut être "Win32" ou "Win64". Pour les machines ARM, l'architecture est "Armhf32" ou "Aarch64". Pour les autres machines Linux, l'architecture est "Linux32" ou "Linux64". Pour MacOS, l'architecture est "MacOs32" ou "MacOs64".

Retourne :

une chaîne de caractères décrivant l'architecture du binaire de la librairie de communication Yoctopuce utilisée.

YAPI.GetDllPath()
YAPI.GetDllPath()
YAPI.GetDllPath()

Retourne l'emplacement sur le disque des librairies Yoctopuce utilisées.

dnp
static string GetDllPath()

Pour les architectures qui demandent l'utilisation de plusieurs DLLs, et en particulier dans le cadre de l'utilisation de la librairie sous forme de .NET Assembly, la chaîne retournée est au format suivant: "DotNetProxy=/...; yapi=/...;", où le premier path correspond à l'emplacement de la DLL .NET Assembly, et le deuxïème path correspond à la librairie de communication de bas niveau.

Retourne :

une chaîne de caractères décrivant l'emplacement de la DLL.

YAPI.GetLog()
YAPI.GetLog()
YAPI.GetLog()YAPI.GetLog()

Récupère les messages de logs de la librairie de communication Yoctopuce.

dnp
static string GetLog(string lastLogLine)
cp
static string GetLog( string)

Cette méthode permet de récupérer progressivement les messages de logs, ligne par ligne. La méthode doit être appelée en boucle, jusqu'à ce qu'elle retourne une chaîne vide. Prenez garde à sortir de votre boucle dès qu'une chaîne vide est retournée, car si vous repassez une chaîne vide dans le paramètre lastLogLine lors de l'appel suivant, la fonction recommencera à énumérer les messages depuis le plus vieux message disponible.

Paramètres :

lastLogLineLors du premier appel, passez une chaîne vide. Pour les appels suivants, passez le dernier message retourné par GetLog().

Retourne :

une chaîne de caractères contenant le message de log qui suit immédiatement celui passé en argument, si une telle ligne existe. Si ce n'est pas le cas, lorsque tous les messages ont été retournés, retourne une chaîne vide.

YAPI.GetNetworkTimeout()
YAPI.GetNetworkTimeout()
yGetNetworkTimeout()[YAPI GetNetworkTimeout]yGetNetworkTimeout()yGetNetworkTimeout()YAPI.GetNetworkTimeout()YAPI.GetNetworkTimeout()YAPI.GetNetworkTimeout()YAPI.GetNetworkTimeout()yGetNetworkTimeout()YAPI.GetNetworkTimeout()YAPI.GetNetworkTimeout()YAPI.GetNetworkTimeout()

Retourne le délai de connexion réseau pour yRegisterHub() et yUpdateDeviceList().

cpp
static int yGetNetworkTimeout()
m
+(int) GetNetworkTimeout
pas
LongInt yGetNetworkTimeout(): LongInt
vb
function yGetNetworkTimeout() As Integer
cs
int GetNetworkTimeout()
java
int GetNetworkTimeout()
uwp
async Task<int> GetNetworkTimeout()
py
GetNetworkTimeout()
php
function yGetNetworkTimeout()
es
async GetNetworkTimeout()
dnp
static int GetNetworkTimeout()
cp
static int GetNetworkTimeout()

Ce délai n'affecte que les YoctoHubs et VirtualHub qui sont accessibles par réseau. Par défaut, ce délai est de 20000 millisecondes, mais en fonction de votre réseau il peut être souhaitable de changer ce délai, par exemple, si votre infrastructure réseau utilise une connexion GSM.

Retourne :

le délai de connexion réseau en millisecondes.

YAPI.GetTickCount()
YAPI.GetTickCount()
yGetTickCount()yGetTickCount()[YAPI GetTickCount]yGetTickCount()yGetTickCount()YAPI.GetTickCount()YAPI.GetTickCount()YAPI.GetTickCount()YAPI.GetTickCount()yGetTickCount()YAPI.GetTickCount()

Retourne la valeur du compteur monotone de temps (en millisecondes).

js
function yGetTickCount()
cpp
u64 yGetTickCount()
m
+(u64) GetTickCount
pas
u64 yGetTickCount(): u64
vb
function yGetTickCount() As Long
cs
static ulong GetTickCount()
java
static long GetTickCount()
uwp
static ulong GetTickCount()
py
GetTickCount()
php
function yGetTickCount()
es
GetTickCount()

Ce compteur peut être utilisé pour calculer des délais en rapport avec les modules Yoctopuce, dont la base de temps est aussi la milliseconde.

Retourne :

un long entier contenant la valeur du compteur de millisecondes.

YAPI.HandleEvents()
YAPI.HandleEvents()
yHandleEvents()yHandleEvents()[YAPI HandleEvents: ]yHandleEvents()yHandleEvents()YAPI.HandleEvents()YAPI.HandleEvents()YAPI.HandleEvents()YAPI.HandleEvents()yHandleEvents()YAPI.HandleEvents()

Maintient la communication de la librairie avec les modules Yoctopuce.

js
function yHandleEvents(errmsg)
cpp
YRETCODE yHandleEvents(string errmsg)
m
+(YRETCODE) HandleEvents:(NSError**) errmsg
pas
integer yHandleEvents(var errmsg: string): integer
vb
function yHandleEvents(ByRef errmsg As String) As YRETCODE
cs
static YRETCODE HandleEvents(ref string errmsg)
java
int HandleEvents()
uwp
async Task<int> HandleEvents()
py
HandleEvents(errmsg=None)
php
function yHandleEvents(&$errmsg)
es
async HandleEvents(errmsg)

Si votre programme inclut des longues boucles d'attente, vous pouvez y inclure un appel à cette fonction pour que la librairie prenne en charge les informations mise en attente par les modules sur les canaux de communication. Ce n'est pas strictement indispensable mais cela peut améliorer la réactivité des la librairie pour les commandes suivantes.

Cette fonction peut signaler une erreur au cas à la communication avec un module Yoctopuce ne se passerait pas comme attendu.

Paramètres :

errmsgune chaîne de caractères passée par référence, dans laquelle sera stocké un éventuel message d'erreur.

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

YAPI.InitAPI()
YAPI.InitAPI()
yInitAPI()yInitAPI()[YAPI InitAPI: ]yInitAPI()yInitAPI()YAPI.InitAPI()YAPI.InitAPI()YAPI.InitAPI()YAPI.InitAPI()yInitAPI()YAPI.InitAPI()

Initialise la librairie de programmation de Yoctopuce explicitement.

js
function yInitAPI(mode, errmsg)
cpp
YRETCODE yInitAPI(int mode, string errmsg)
m
+(YRETCODE) InitAPI:(int) mode :(NSError**) errmsg
pas
integer yInitAPI(mode: integer, var errmsg: string): integer
vb
function yInitAPI(ByVal mode As Integer, ByRef errmsg As String) As Integer
cs
static int InitAPI(int mode, ref string errmsg)
java
int InitAPI(int mode)
uwp
async Task<int> InitAPI(int mode)
py
InitAPI(mode, errmsg=None)
php
function yInitAPI($mode, &$errmsg)
es
async InitAPI(mode, errmsg)

Il n'est pas indispensable d'appeler yInitAPI(), la librairie sera automatiquement initialisée de toute manière au premier appel à yRegisterHub().

Lorsque cette fonctin est utilisée avec comme mode la valeur Y_DETECT_NONE, il faut explicitement appeler yRegisterHub() pour indiquer à la librairie sur quel VirtualHub les modules sont connectés, avant d'essayer d'y accéder.

Paramètres :

modeun entier spécifiant le type de détection automatique de modules à utiliser. Les valeurs possibles sont Y_DETECT_NONE, Y_DETECT_USB, Y_DETECT_NET et Y_DETECT_ALL.
errmsgune chaîne de caractères passée par référence, dans laquelle sera stocké un éventuel message d'erreur.

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

YAPI.PreregisterHub()
YAPI.PreregisterHub()
yPreregisterHub()yPreregisterHub()[YAPI PreregisterHub: ]yPreregisterHub()yPreregisterHub()YAPI.PreregisterHub()YAPI.PreregisterHub()YAPI.PreregisterHub()YAPI.PreregisterHub()yPreregisterHub()YAPI.PreregisterHub()YAPI.PreregisterHub()YAPI.PreregisterHub()

Alternative plus tolerante à yRegisterHub().

js
function yPreregisterHub(url, errmsg)
cpp
YRETCODE yPreregisterHub(string url, string errmsg)
m
+(YRETCODE) PreregisterHub:(NSString *) url :(NSError**) errmsg
pas
integer yPreregisterHub(url: string, var errmsg: string): integer
vb
function yPreregisterHub(ByVal url As String,
  ByRef errmsg As String) As Integer
cs
static int PreregisterHub(string url, ref string errmsg)
java
int PreregisterHub(String url)
uwp
async Task<int> PreregisterHub(string url)
py
PreregisterHub(url, errmsg=None)
php
function yPreregisterHub($url, &$errmsg)
es
async PreregisterHub(url, errmsg)
dnp
static string PreregisterHub(string url)
cp
static string PreregisterHub( string)

Cette fonction a le même but et la même paramètres que la fonction yRegisterHub(), mais contrairement à celle-ci yPreregisterHub() ne déclanche pas d'erreur si le hub choisi n'est pas joignable au moment de l'appel. Il est ainsi possible d'enregistrer un hub réseau indépendemment de la connectivité, afin de tenter de ne le contacter que lorsqu'on cherche réellement un module.

Paramètres :

urlune chaîne de caractères contenant "usb","callback", ou l'URL racine du VirtualHub à utiliser.
errmsgune chaîne de caractères passée par référence, dans laquelle sera stocké un éventuel message d'erreur.

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

YAPI.RegisterDeviceArrivalCallback()
YAPI.RegisterDeviceArrivalCallback()
yRegisterDeviceArrivalCallback()yRegisterDeviceArrivalCallback()[YAPI RegisterDeviceArrivalCallback: ]yRegisterDeviceArrivalCallback()yRegisterDeviceArrivalCallback()YAPI.RegisterDeviceArrivalCallback()YAPI.RegisterDeviceArrivalCallback()YAPI.RegisterDeviceArrivalCallback()YAPI.RegisterDeviceArrivalCallback()yRegisterDeviceArrivalCallback()YAPI.RegisterDeviceArrivalCallback()

Enregistre une fonction de callback qui sera appelée à chaque fois qu'un module est branché.

js
function yRegisterDeviceArrivalCallback(arrivalCallback)
cpp
void yRegisterDeviceArrivalCallback(yDeviceUpdateCallback arrivalCallback)
m
+(void) RegisterDeviceArrivalCallback:(yDeviceUpdateCallback) arrivalCallback
pas
yRegisterDeviceArrivalCallback(arrivalCallback: yDeviceUpdateFunc)
vb
procedure yRegisterDeviceArrivalCallback(ByVal arrivalCallback As yDeviceUpdateFunc)
cs
static void RegisterDeviceArrivalCallback(yDeviceUpdateFunc arrivalCallback)
java
void RegisterDeviceArrivalCallback(DeviceArrivalCallback arrivalCallback)
uwp
void RegisterDeviceArrivalCallback(DeviceUpdateHandler arrivalCallback)
py
RegisterDeviceArrivalCallback(arrivalCallback)
php
function yRegisterDeviceArrivalCallback($arrivalCallback)
es
async RegisterDeviceArrivalCallback(arrivalCallback)

Le callback sera appelé pendant l'éxecution de la fonction yUpdateDeviceList, que vous devrez appeler régulièrement.

Paramètres :

pour supprimer un callback déja enregistré.
arrivalCallbackune procédure qui prend un YModule en paramètre, ou null

YAPI.RegisterDeviceRemovalCallback()
YAPI.RegisterDeviceRemovalCallback()
yRegisterDeviceRemovalCallback()yRegisterDeviceRemovalCallback()[YAPI RegisterDeviceRemovalCallback: ]yRegisterDeviceRemovalCallback()yRegisterDeviceRemovalCallback()YAPI.RegisterDeviceRemovalCallback()YAPI.RegisterDeviceRemovalCallback()YAPI.RegisterDeviceRemovalCallback()YAPI.RegisterDeviceRemovalCallback()yRegisterDeviceRemovalCallback()YAPI.RegisterDeviceRemovalCallback()

Enregistre une fonction de callback qui sera appelée à chaque fois qu'un module est débranché.

js
function yRegisterDeviceRemovalCallback(removalCallback)
cpp
void yRegisterDeviceRemovalCallback(yDeviceUpdateCallback removalCallback)
m
+(void) RegisterDeviceRemovalCallback:(yDeviceUpdateCallback) removalCallback
pas
yRegisterDeviceRemovalCallback(removalCallback: yDeviceUpdateFunc)
vb
procedure yRegisterDeviceRemovalCallback(ByVal removalCallback As yDeviceUpdateFunc)
cs
static void RegisterDeviceRemovalCallback(yDeviceUpdateFunc removalCallback)
java
void RegisterDeviceRemovalCallback(DeviceRemovalCallback removalCallback)
uwp
void RegisterDeviceRemovalCallback(DeviceUpdateHandler removalCallback)
py
RegisterDeviceRemovalCallback(removalCallback)
php
function yRegisterDeviceRemovalCallback($removalCallback)
es
async RegisterDeviceRemovalCallback(removalCallback)

Le callback sera appelé pendant l'éxecution de la fonction yUpdateDeviceList, que vous devrez appeler régulièrement.

Paramètres :

pour supprimer un callback déja enregistré.
removalCallbackune procédure qui prend un YModule en paramètre, ou null

YAPI.RegisterHub()
YAPI.RegisterHub()
yRegisterHub()yRegisterHub()[YAPI RegisterHub: ]yRegisterHub()yRegisterHub()YAPI.RegisterHub()YAPI.RegisterHub()YAPI.RegisterHub()YAPI.RegisterHub()yRegisterHub()YAPI.RegisterHub()YAPI.RegisterHub()YAPI.RegisterHub()

Configure la librairie Yoctopuce pour utiliser les modules connectés sur une machine donnée.

js
function yRegisterHub(url, errmsg)
cpp
YRETCODE yRegisterHub(string url, string errmsg)
m
+(YRETCODE) RegisterHub:(NSString *) url :(NSError**) errmsg
pas
integer yRegisterHub(url: string, var errmsg: string): integer
vb
function yRegisterHub(ByVal url As String,
  ByRef errmsg As String) As Integer
cs
static int RegisterHub(string url, ref string errmsg)
java
int RegisterHub(String url)
uwp
async Task<int> RegisterHub(string url)
py
RegisterHub(url, errmsg=None)
php
function yRegisterHub($url, &$errmsg)
es
async RegisterHub(url, errmsg)
dnp
static string RegisterHub(string url)
cp
static string RegisterHub( string)

Le premier paramètre détermine le fonctionnement de l'API, il peut prendre les valeurs suivantes:

usb: Si vous utilisez le mot-clé usb, l'API utilise les modules Yoctopuce connectés directement par USB. Certains languages comme PHP, Javascript et Java ne permettent pas un accès direct aux couches matérielles, usb ne marchera donc pas avec ces languages. Dans ce cas, utilisez un VirtualHub ou un YoctoHub réseau (voir ci-dessous).

x.x.x.x ou hostname: L'API utilise les modules connectés à la machine dont l'adresse IP est x.x.x.x, ou dont le nom d'hôte DNS est hostname. Cette machine peut être un ordinateur classique faisant tourner un VirtualHub, ou un YoctoHub avec réseau (YoctoHub-Ethernet / YoctoHub-Wireless). Si vous désirez utiliser le VirtualHub tournant sur votre machine locale, utilisez l'adresse IP 127.0.0.1.

callback Le mot-clé callback permet de faire fonctionnner l'API dans un mode appélé "callback HTTP". C'est un mode spécial permettant, entre autres, de prendre le contrôle de modules Yoctopuce à travers un filtre NAT par l'intermédiaire d'un VirtualHub ou d'un Hub Yoctopuce. Il vous suffit de configuer le hub pour qu'il appelle votre script à intervalle régulier. Ce mode de fonctionnement n'est disponible actuellement qu'en PHP et en Node.JS.

Attention, seule une application peut fonctionner à la fois sur une machine donnée en accès direct à USB, sinon il y aurait un conflit d'accès aux modules. Cela signifie en particulier que vous devez stopper le VirtualHub avant de lancer une application utilisant l'accès direct à USB. Cette limitation peut être contournée en passant par un VirtualHub plutôt que d'utiliser directement USB.

Si vous désirez vous connecter à un Hub, virtuel ou non, sur lequel le controle d'accès a été activé, vous devez donner le paramètre url sous la forme:

http://nom:mot_de_passe@adresse:port

Vous pouvez appeller RegisterHub plusieurs fois pour vous connecter à plusieurs machines différentes.

Paramètres :

urlune chaîne de caractères contenant "usb","callback", ou l'URL racine du VirtualHub à utiliser.
errmsgune chaîne de caractères passée par référence, dans laquelle sera stocké un éventuel message d'erreur.

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

YAPI.RegisterHubDiscoveryCallback()
YAPI.RegisterHubDiscoveryCallback()
yRegisterHubDiscoveryCallback()[YAPI RegisterHubDiscoveryCallback: ]yRegisterHubDiscoveryCallback()yRegisterHubDiscoveryCallback()YAPI.RegisterHubDiscoveryCallback()YAPI.RegisterHubDiscoveryCallback()YAPI.RegisterHubDiscoveryCallback()YAPI.RegisterHubDiscoveryCallback()YAPI.RegisterHubDiscoveryCallback()

Enregistre une fonction de callback qui est appelée chaque fois qu'un hub réseau s'annonce avec un message SSDP.

cpp
void yRegisterHubDiscoveryCallback(YHubDiscoveryCallback hubDiscoveryCallback)
m
+(void) RegisterHubDiscoveryCallback: (YHubDiscoveryCallback) hubDiscoveryCallback
pas
yRegisterHubDiscoveryCallback(hubDiscoveryCallback: YHubDiscoveryCallback)
vb
procedure yRegisterHubDiscoveryCallback(ByVal hubDiscoveryCallback As YHubDiscoveryCallback)
cs
static void RegisterHubDiscoveryCallback(YHubDiscoveryCallback hubDiscoveryCallback)
java
void RegisterHubDiscoveryCallback(HubDiscoveryCallback hubDiscoveryCallback)
uwp
async Task RegisterHubDiscoveryCallback(HubDiscoveryHandler hubDiscoveryCallback)
py
RegisterHubDiscoveryCallback(hubDiscoveryCallback)
es
async RegisterHubDiscoveryCallback(hubDiscoveryCallback)

la fonction de callback reçois deux chaînes de caractères en paramètre La première chaîne contient le numéro de série du hub réseau et la deuxième chaîne contient l'URL du hub. L'URL peut être passée directement en argument à la fonction yRegisterHub. Le callback sera appelé pendant l'exécution de la fonction yUpdateDeviceList, que vous devrez appeler régulièrement.

Paramètres :

utilisez null.
hubDiscoveryCallbackune procédure qui prend deux chaîne de caractères en paramètre, le numéro de série et l'URL du hub découvert. Pour supprimer un callback déjà enregistré,

YAPI.RegisterHubWebsocketCallback()
YAPI.RegisterHubWebsocketCallback()

Variante de la fonction yRegisterHub() destinée à initialiser l'API Yoctopuce sur une session Websocket existante, dans le cadre d'un callback WebSocket entrant.

Paramètres :

wsl'objet WebSocket lié à au callback WebSocket entrant.
errmsgune chaîne de caractères passée par référence, dans laquelle sera stocké un éventuel message d'erreur.
authpwdle mot de passe optionnel, nécessaire seulement si une authentification WebSocket est configurée sur le hub appelant.

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

YAPI.RegisterLogFunction()
YAPI.RegisterLogFunction()
yRegisterLogFunction()[YAPI RegisterLogFunction: ]yRegisterLogFunction()yRegisterLogFunction()YAPI.RegisterLogFunction()YAPI.RegisterLogFunction()YAPI.RegisterLogFunction()YAPI.RegisterLogFunction()YAPI.RegisterLogFunction()

Enregistre une fonction de callback qui sera appellée à chaque fois que l'API a quelque chose à dire.

cpp
void yRegisterLogFunction(yLogFunction logfun)
m
+(void) RegisterLogFunction:(yLogCallback) logfun
pas
yRegisterLogFunction(logfun: yLogFunc)
vb
procedure yRegisterLogFunction(ByVal logfun As yLogFunc)
cs
static void RegisterLogFunction(yLogFunc logfun)
java
void RegisterLogFunction(LogCallback logfun)
uwp
void RegisterLogFunction(LogHandler logfun)
py
RegisterLogFunction(logfun)
es
async RegisterLogFunction(logfun)

Utile pour débugger le fonctionnement de l'API.

Paramètres :

ou null pour supprimer un callback déja enregistré.
logfunune procedure qui prend une chaîne de caractère en paramètre,

YAPI.SelectArchitecture()
YAPI.SelectArchitecture()
YAPI.SelectArchitecture()

Sélectionne manuellement l'architecture de la libraire dynamique à utiliser pour accéder à USB.

py
SelectArchitecture(arch)

Par défaut, la libraire Python détecte automatiquement la version de la libraire dynamique à utiliser pour accéder au port USB. Sous Linux ARM il n'est pas possible de détecter de manière fiable si il s'agit d'une installation Soft float (armel) ou Hard float (armhf). Dans ce cas, il est donc recommendé d'appeler SelectArchitecture() avant tout autre appel à la librairie pour forcer l'utilisation d'une architecture spécifiée.

Paramètres :

archune chaîne de caractère spécifiant l'architecture à utiliser. Les valeurs possibles sont "armhf","armel", "aarch64","i386","x86_64", "32bit", "64bit"

Retourne :

rien.

En cas d'erreur, déclenche une exception.

YAPI.SetCacheValidity()
YAPI.SetCacheValidity()
ySetCacheValidity()[YAPI SetCacheValidity: ]ySetCacheValidity()ySetCacheValidity()YAPI.SetCacheValidity()YAPI.SetCacheValidity()YAPI.SetCacheValidity()YAPI.SetCacheValidity()ySetCacheValidity()YAPI.SetCacheValidity()

Change la durée de validité des données chargées par la librairie.

cpp
static void ySetCacheValidity(u64 cacheValidityMs)
m
+(void) SetCacheValidity: (u64) cacheValidityMs
pas
ySetCacheValidity(cacheValidityMs: u64)
vb
procedure ySetCacheValidity(ByVal cacheValidityMs As Long)
cs
void SetCacheValidity(ulong cacheValidityMs)
java
void SetCacheValidity(long cacheValidityMs)
uwp
async Task SetCacheValidity(ulong cacheValidityMs)
py
SetCacheValidity(cacheValidityMs)
php
function ySetCacheValidity($cacheValidityMs)
es
async SetCacheValidity(cacheValidityMs)

Par défaut, lorsqu'on accède à un module, tous les attributs des fonctions du module sont automatiquement mises en cache pour la durée standard (5 ms). Cette méthode peut être utilisée pour changer cette durée, par exemple dans le but de réduire le trafic réseau ou USB. Ce paramètre n'affecte pas les callbacks de changement de valeur Note: Cette fonction doit être appelée après yInitAPI.

Paramètres :

cacheValidityMsun entier correspondant à la durée de validité attribuée aux les paramètres chargés, en millisecondes.

YAPI.SetDelegate()
YAPI.SetDelegate()
[YAPI SetDelegate: ]

(Objective-C uniquement) Enregistre un objet délégué qui doit se conformer au protocole YDeviceHotPlug.

m
+(void) SetDelegate:(id) object

Les méthodes yDeviceArrival et yDeviceRemoval seront appelées pendant l’exécution de la fonction yUpdateDeviceList, que vous devrez appeler régulièrement.

Paramètres :

pour supprimer un objet déja enregistré.
objectun objet qui soit se conformer au protocole YAPIDelegate, ou nil

YAPI.SetDeviceListValidity()
YAPI.SetDeviceListValidity()
ySetDeviceListValidity()[YAPI SetDeviceListValidity: ]ySetDeviceListValidity()ySetDeviceListValidity()YAPI.SetDeviceListValidity()YAPI.SetDeviceListValidity()YAPI.SetDeviceListValidity()YAPI.SetDeviceListValidity()ySetDeviceListValidity()YAPI.SetDeviceListValidity()

Change le délai entre chaque énumération forcée des YoctoHub utilisés.

cpp
static void ySetDeviceListValidity(int deviceListValidity)
m
+(void) SetDeviceListValidity: (int) deviceListValidity
pas
ySetDeviceListValidity(deviceListValidity: LongInt)
vb
procedure ySetDeviceListValidity(ByVal deviceListValidity As Integer)
cs
void SetDeviceListValidity(int deviceListValidity)
java
void SetDeviceListValidity(int deviceListValidity)
uwp
async Task SetDeviceListValidity(int deviceListValidity)
py
SetDeviceListValidity(deviceListValidity)
php
function ySetDeviceListValidity($deviceListValidity)
es
async SetDeviceListValidity(deviceListValidity)

Par défaut la librairie effectue une énumération complète toute les 10 secondes. Pour réduire le trafic réseau, il est possible d'augmenter ce délai. C'est particulièrement utile lors un YoctoHub est connecté à un réseau GSM où le trafic est facturé. Ce paramètre n'affecte pas les modules connectés par USB, ni le fonctionnement des callback de connexion/déconnexion de module. Note: Cette fonction doit être appelée après yInitAPI.

Paramètres :

deviceListValiditynombre de secondes entre chaque énumération.

YAPI.SetHTTPCallbackCacheDir()
YAPI.SetHTTPCallbackCacheDir()
ySetHTTPCallbackCacheDir()

Active le cache du callback HTTP.

php
function ySetHTTPCallbackCacheDir($str_directory)

Le cache du callback HTTP permet de réduire de 50 à 70 % la quantité de données transmise au script PHP. Pour activer le cache, la méthode ySetHTTPCallbackCacheDir() doit être appelée avant premier appel à yRegisterHub(). Cette méthode prend en paramètre le path du répertoire dans lequel seront stockés les données entre chaque callback. Ce répertoire doit exister et le script PHP doit y avoir les droits d'écriture. Il est recommandé d'utiliser un répertoire qui n'est pas accessible depuis le serveur Web, car la librairie va y stocker des données provenant des modules Yoctopuce.

Note : Cette fonctionnalité est supportée par les YoctoHub et VirtualHub depuis la version 27750

Paramètres :

str_directoryle path du répertoire utilisé comme cache.

Retourne :

nothing.

On failure, throws an exception.

YAPI.SetNetworkTimeout()
YAPI.SetNetworkTimeout()
ySetNetworkTimeout()[YAPI SetNetworkTimeout: ]ySetNetworkTimeout()ySetNetworkTimeout()YAPI.SetNetworkTimeout()YAPI.SetNetworkTimeout()YAPI.SetNetworkTimeout()YAPI.SetNetworkTimeout()ySetNetworkTimeout()YAPI.SetNetworkTimeout()YAPI.SetNetworkTimeout()YAPI.SetNetworkTimeout()

Change le délai de connexion réseau pour yRegisterHub() et yUpdateDeviceList().

cpp
static void ySetNetworkTimeout(int networkMsTimeout)
m
+(void) SetNetworkTimeout: (int) networkMsTimeout
pas
ySetNetworkTimeout(networkMsTimeout: LongInt)
vb
procedure ySetNetworkTimeout(ByVal networkMsTimeout As Integer)
cs
void SetNetworkTimeout(int networkMsTimeout)
java
void SetNetworkTimeout(int networkMsTimeout)
uwp
async Task SetNetworkTimeout(int networkMsTimeout)
py
SetNetworkTimeout(networkMsTimeout)
php
function ySetNetworkTimeout($networkMsTimeout)
es
async SetNetworkTimeout(networkMsTimeout)
dnp
static void SetNetworkTimeout(int networkMsTimeout)
cp
static void SetNetworkTimeout(int networkMsTimeout)

Ce délai n'affecte que les YoctoHubs et VirtualHub qui sont accessibles par réseau. Par défaut ce délai est de 20000 millisecondes, mais en fonction de votre réseau il peut être souhaitable de changer ce délai, par exemple si votre infrastructure réseau utilise une connexion GSM.

Paramètres :

networkMsTimeoutle délais de connexion réseau en millisecondes.

YAPI.SetTimeout()
YAPI.SetTimeout()
ySetTimeout()YAPI.SetTimeout()

Appelle le callback spécifié après un temps d'attente spécifié.

js
function ySetTimeout(callback, ms_timeout, args)
es
SetTimeout(callback, ms_timeout, args)

Cette fonction se comporte plus ou moins comme la fonction Javascript setTimeout, mais durant le temps d'attente, elle va appeler yHandleEvents et yUpdateDeviceList périodiquement pour maintenir l'API à jour avec les modules connectés.

Paramètres :

callbackla fonction à appeler lorsque le temps d'attente est écoulé. Sous Microsoft Internet Explorer, le callback doit être spécifié sous forme d'une string à évaluer.
ms_timeoutun entier correspondant à la durée de l'attente, en millisecondes
argsdes arguments supplémentaires peuvent être fournis, pour être passés à la fonction de callback si nécessaire.

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

YAPI.SetUSBPacketAckMs()
YAPI.SetUSBPacketAckMs()
YAPI.SetUSBPacketAckMs()

Active la quittance des paquets USB reçus par la librairie Yoctopuce.

java
void SetUSBPacketAckMs(int pktAckDelay)

Cette fonction permet à la librairie de fonctionner même sur les téléphones Android qui perdent des paquets USB. Par défaut, la quittance est désactivée, car elle double le nombre de paquets échangés et donc ralentit sensiblement le fonctionnement de L'API. La quittance des paquets USB ne doit donc être activée que sur des tablette ou des téléphones qui posent problème. Un délais de 50 millisecondes est en général suffisant. En cas de doute contacter le support Yoctopuce. Pour désactiver la quittance des paquets USB, appeler cette fonction avec la valeur 0. Note : Cette fonctionnalité est disponible uniquement sous Android.

Paramètres :

le dernier paquet USB.
pktAckDelaynombre de ms avant que le module ne renvoie

YAPI.Sleep()
YAPI.Sleep()
ySleep()ySleep()[YAPI Sleep: ]ySleep()ySleep()YAPI.Sleep()YAPI.Sleep()YAPI.Sleep()YAPI.Sleep()ySleep()YAPI.Sleep()

Effectue une pause dans l'exécution du programme pour une durée spécifiée.

js
function ySleep(ms_duration, errmsg)
cpp
YRETCODE ySleep(unsigned ms_duration, string errmsg)
m
+(YRETCODE) Sleep:(unsigned) ms_duration :(NSError **) errmsg
pas
integer ySleep(ms_duration: integer, var errmsg: string): integer
vb
function ySleep(ByVal ms_duration As Integer,
  ByRef errmsg As String) As Integer
cs
static int Sleep(int ms_duration, ref string errmsg)
java
int Sleep(long ms_duration)
uwp
async Task<int> Sleep(ulong ms_duration)
py
Sleep(ms_duration, errmsg=None)
php
function ySleep($ms_duration, &$errmsg)
es
async Sleep(ms_duration, errmsg)

L'attente est passive, c'est-à-dire qu'elle n'occupe pas significativement le processeur, de sorte à le laisser disponible pour les autres processus fonctionnant sur la machine. Durant l'attente, la librairie va néanmoins continuer à lire périodiquement les informations en provenance des modules Yoctopuce en appelant la fonction yHandleEvents() afin de se maintenir à jour.

Cette fonction peut signaler une erreur au cas à la communication avec un module Yoctopuce ne se passerait pas comme attendu.

Paramètres :

ms_durationun entier correspondant à la durée de la pause, en millisecondes
errmsgune chaîne de caractères passée par référence, dans laquelle sera stocké un éventuel message d'erreur.

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

YAPI.TestHub()
YAPI.TestHub()
yTestHub()[YAPI TestHub: ]yTestHub()yTestHub()YAPI.TestHub()YAPI.TestHub()YAPI.TestHub()YAPI.TestHub()yTestHub()YAPI.TestHub()YAPI.TestHub()YAPI.TestHub()

Test si un hub est joignable.

cpp
YRETCODE yTestHub(string url, int mstimeout, string errmsg)
m
+(YRETCODE) TestHub: (NSString*) url
  : (int) mstimeout
  : (NSError**) errmsg
pas
integer yTestHub(url: string,
  mstimeout: integer,
  var errmsg: string): integer
vb
function yTestHub(ByVal url As String,
  ByVal mstimeout As Integer,
  ByRef errmsg As String) As Integer
cs
static int TestHub(string url, int mstimeout, ref string errmsg)
java
int TestHub(String url, int mstimeout)
uwp
async Task<int> TestHub(string url, uint mstimeout)
py
TestHub(url, mstimeout, errmsg=None)
php
function yTestHub($url, $mstimeout, &$errmsg)
es
async TestHub(url, mstimeout, errmsg)
dnp
static string TestHub(string url, int mstimeout)
cp
static string TestHub( string, int mstimeout)

Cette méthode n'enregistre pas le hub, elle ne fait que de vérifier que le hub est joignable. Le paramètre url suit les mêmes conventions que la méthode yRegisterHub. Cette méthode est utile pour vérifier les paramètres d'authentification d'un hub. Il est possible de forcer la méthode à rendre la main après mstimeout millisecondes.

Paramètres :

urlune chaîne de caractères contenant "usb","callback", ou l'URL racine du VirtualHub à utiliser.
mstimeoutle nombre de millisecondes disponible pour tester la connexion.
errmsgune chaîne de caractères passée par référence, dans laquelle sera stocké un éventuel message d'erreur.

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur retourne un code d'erreur négatif.

YAPI.TriggerHubDiscovery()
YAPI.TriggerHubDiscovery()
yTriggerHubDiscovery()[YAPI TriggerHubDiscovery: ]yTriggerHubDiscovery()yTriggerHubDiscovery()YAPI.TriggerHubDiscovery()YAPI.TriggerHubDiscovery()YAPI.TriggerHubDiscovery()YAPI.TriggerHubDiscovery()YAPI.TriggerHubDiscovery()

Relance une détection des hubs réseau.

cpp
YRETCODE yTriggerHubDiscovery(string errmsg)
m
+(YRETCODE) TriggerHubDiscovery: (NSError**) errmsg
pas
integer yTriggerHubDiscovery(var errmsg: string): integer
vb
function yTriggerHubDiscovery(ByRef errmsg As String) As Integer
cs
static int TriggerHubDiscovery(ref string errmsg)
java
int TriggerHubDiscovery()
uwp
Task<int> TriggerHubDiscovery()
py
TriggerHubDiscovery(errmsg=None)
es
async TriggerHubDiscovery(errmsg)

Si une fonction de callback est enregistrée avec yRegisterHubDiscoveryCallback elle sera appelée à chaque hub réseau qui répondra à la détection SSDP.

Paramètres :

errmsgune chaîne de caractères passée par référence, dans laquelle sera stocké un éventuel message d'erreur.

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur. En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

YAPI.UnregisterHub()
YAPI.UnregisterHub()
yUnregisterHub()yUnregisterHub()[YAPI UnregisterHub: ]yUnregisterHub()yUnregisterHub()YAPI.UnregisterHub()YAPI.UnregisterHub()YAPI.UnregisterHub()YAPI.UnregisterHub()yUnregisterHub()YAPI.UnregisterHub()

Configure la librairie Yoctopuce pour ne plus utiliser les modules connectés sur une machine préalablement enregistrer avec RegisterHub.

js
function yUnregisterHub(url)
cpp
void yUnregisterHub(string url)
m
+(void) UnregisterHub:(NSString *) url
pas
yUnregisterHub(url: string)
vb
procedure yUnregisterHub(ByVal url As String)
cs
static void UnregisterHub(string url)
java
void UnregisterHub(String url)
uwp
async Task UnregisterHub(string url)
py
UnregisterHub(url)
php
function yUnregisterHub($url)
es
async UnregisterHub(url)

Paramètres :

l'URL racine du VirtualHub à ne plus utiliser.
urlune chaîne de caractères contenant "usb" ou

YAPI.UpdateDeviceList()
YAPI.UpdateDeviceList()
yUpdateDeviceList()yUpdateDeviceList()[YAPI UpdateDeviceList: ]yUpdateDeviceList()yUpdateDeviceList()YAPI.UpdateDeviceList()YAPI.UpdateDeviceList()YAPI.UpdateDeviceList()YAPI.UpdateDeviceList()yUpdateDeviceList()YAPI.UpdateDeviceList()

Force une mise-à-jour de la liste des modules Yoctopuce connectés.

js
function yUpdateDeviceList(errmsg)
cpp
YRETCODE yUpdateDeviceList(string errmsg)
m
+(YRETCODE) UpdateDeviceList:(NSError**) errmsg
pas
integer yUpdateDeviceList(var errmsg: string): integer
vb
function yUpdateDeviceList(ByRef errmsg As String) As YRETCODE
cs
static YRETCODE UpdateDeviceList(ref string errmsg)
java
int UpdateDeviceList()
uwp
async Task<int> UpdateDeviceList()
py
UpdateDeviceList(errmsg=None)
php
function yUpdateDeviceList(&$errmsg)
es
async UpdateDeviceList(errmsg)

La librairie va vérifier sur les machines ou ports USB précédemment enregistrés en utilisant la fonction yRegisterHub si un module a été connecté ou déconnecté, et le cas échéant appeler les fonctions de callback définies par l'utilisateur.

Cette fonction peut être appelée aussi souvent que désiré, afin de rendre l'application réactive aux évènements de hot-plug. Néanmoins la détection des modules étant un processus assez lourd, il est recommandé de ne pas appeler UpdateDeviceList plus d'une fois toutes les deux secondes.

Paramètres :

errmsgune chaîne de caractères passée par référence, dans laquelle sera stocké un éventuel message d'erreur.

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

YAPI.UpdateDeviceList_async()
YAPI.UpdateDeviceList_async()
yUpdateDeviceList_async()

Force une mise-à-jour de la liste des modules Yoctopuce connectés.

js
function yUpdateDeviceList_async(callback, context)

La librairie va vérifier sur les machines ou ports USB précédemment enregistrés en utilisant la fonction yRegisterHub si un module a été connecté ou déconnecté, et le cas échéant appeler les fonctions de callback définies par l'utilisateur.

Cette fonction peut être appelée aussi souvent que désiré, afin de rendre l'application réactive aux événements de hot-plug.

Cette version asynchrone n'existe qu'en Javascript. Elle utilise une fonction de callback plutôt qu'une simple valeur de retour, pour éviter de bloquer la VM Javascript de Firefox, qui n'implémente pas le passage de contrôle entre threads durant les appels d'entrée/sortie bloquants.

Paramètres :

callbackfonction de callback qui sera appelée dès que le résultat sera connu. La fonction callback reçoit deux arguments: le contexte fourni par l'appelant et le code de retour (YAPI_SUCCESS si l'opération se déroule sans erreur).
contextcontexte fourni par l'appelant, et qui sera passé tel-quel à la fonction de callback

Retourne :

rien du tout : le résultat sera passé en paramètre à la fonction de callback.

24.2. La classe YModule

Interface de contrôle des paramètres généraux des modules Yoctopuce

La classe YModule est utilisable avec tous les modules USB de Yoctopuce. Elle permet de contrôler les paramètres généraux du module, et d'énumérer les fonctions fournies par chaque module.

Pour utiliser les fonctions décrites ici, vous devez inclure:

js
<script type='text/javascript' src='yocto_api.js'></script>
cpp
#include "yocto_api.h"
m
#import "yocto_api.h"
pas
uses yocto_api;
vb
yocto_api.vb
cs
yocto_api.cs
java
import com.yoctopuce.YoctoAPI.YModule;
uwp
import com.yoctopuce.YoctoAPI.YModule;
py
from yocto_api import *
php
require_once('yocto_api.php');
es
in HTML: <script src="../../lib/yocto_api.js"></script>
in node.js: require('yoctolib-es2017/yocto_api.js');
dnp
import YoctoProxyAPI.YModuleProxy
cp
#include "yocto_module_proxy.h"
vi
YModule.vi
ml
import YoctoProxyAPI.YModuleProxy"
Fonction globales
YModule.FindModule(func)

Permet de retrouver un module d'après son numéro de série ou son nom logique.

YModule.FindModuleInContext(yctx, func)

Permet de retrouver un module d'après un identifiant donné dans un Context YAPI.

YModule.FirstModule()

Commence l'énumération des modules accessibles par la librairie.

Propriétés des objets YModuleProxy
module→Beacon [modifiable]

état de la balise de localisation.

module→FirmwareRelease [lecture seule]

Version du logiciel embarqué du module.

module→FunctionId [lecture seule]

Identifiant matériel de la nième fonction du module.

module→HardwareId [lecture seule]

Identifiant unique du module.

module→IsOnline [lecture seule]

Vérifie si le module est joignable.

module→LogicalName [modifiable]

Nom logique du module.

module→Luminosity [modifiable]

Luminosité des leds informatives du module (valeur entre 0 et 100).

module→ProductId [lecture seule]

Identifiant USB du module, préprogrammé en usine.

module→ProductName [lecture seule]

Nom commercial du module, préprogrammé en usine.

module→ProductRelease [lecture seule]

Numéro uméro de révision du module hardware, préprogrammé en usine.

module→SerialNumber [lecture seule]

Numéro de série du module, préprogrammé en usine.

Méthodes des objets YModule
module→checkFirmware(path, onlynew)

Teste si le fichier byn est valide pour le module.

module→clearCache()

Invalide le cache.

module→describe()

Retourne un court texte décrivant le module.

module→download(pathname)

Télécharge le fichier choisi du module et retourne son contenu.

module→functionBaseType(functionIndex)

Retourne le type de base de la nième fonction du module.

module→functionCount()

Retourne le nombre de fonctions (sans compter l'interface "module") existant sur le module.

module→functionId(functionIndex)

Retourne l'identifiant matériel de la nième fonction du module.

module→functionName(functionIndex)

Retourne le nom logique de la nième fonction du module.

module→functionType(functionIndex)

Retourne le type de la nième fonction du module.

module→functionValue(functionIndex)

Retourne la valeur publiée par la nième fonction du module.

module→get_allSettings()

Retourne tous les paramètres de configuration du module.

module→get_beacon()

Retourne l'état de la balise de localisation.

module→get_errorMessage()

Retourne le message correspondant à la dernière erreur survenue lors de l'utilisation de l'objet module.

module→get_errorType()

Retourne le code d'erreur correspondant à la dernière erreur survenue lors de l'utilisation de l'objet module.

module→get_firmwareRelease()

Retourne la version du logiciel embarqué du module.

module→get_functionIds(funType)

Retourne les identifiants matériels des fonctions correspondant au type passé en argument.

module→get_hardwareId()

Retourne l'identifiant unique du module.

module→get_icon2d()

Retourne l'icône du module.

module→get_lastLogs()

Retourne une chaine de charactère contenant les derniers logs du module.

module→get_logicalName()

Retourne le nom logique du module.

module→get_luminosity()

Retourne la luminosité des leds informatives du module (valeur entre 0 et 100).

module→get_parentHub()

Retourne le numéro de série du YoctoHub sur lequel est connecté le module.

module→get_persistentSettings()

Retourne l'état courant des réglages persistents du module.

module→get_productId()

Retourne l'identifiant USB du module, préprogrammé en usine.

module→get_productName()

Retourne le nom commercial du module, préprogrammé en usine.

module→get_productRelease()

Retourne le numéro uméro de révision du module hardware, préprogrammé en usine.

module→get_rebootCountdown()

Retourne le nombre de secondes restantes avant un redémarrage du module, ou zéro si aucun redémarrage n'a été agendé.

module→get_serialNumber()

Retourne le numéro de série du module, préprogrammé en usine.

module→get_subDevices()

Retourne la liste des modules branchés au module courant.

module→get_upTime()

Retourne le numbre de millisecondes écoulées depuis la mise sous tension du module

module→get_url()

Retourne l'URL utilisée pour accéder au module.

module→get_usbCurrent()

Retourne le courant consommé par le module sur le bus USB, en milliampères.

module→get_userData()

Retourne le contenu de l'attribut userData, précédemment stocké à l'aide de la méthode set_userData.

module→get_userVar()

Retourne la valeur entière précédemment stockée dans cet attribut.

module→hasFunction(funcId)

Teste la présence d'une fonction pour le module courant.

module→isOnline()

Vérifie si le module est joignable, sans déclencher d'erreur.

module→isOnline_async(callback, context)

Vérifie si le module est joignable, sans déclencher d'erreur.

module→load(msValidity)

Met en cache les valeurs courantes du module, avec une durée de validité spécifiée.

module→load_async(msValidity, callback, context)

Met en cache les valeurs courantes du module, avec une durée de validité spécifiée.

module→log(text)

Ajoute un message arbitraire dans les logs du module.

module→nextModule()

Continue l'énumération des modules commencée à l'aide de yFirstModule().

module→reboot(secBeforeReboot)

Agende un simple redémarrage du module dans un nombre donné de secondes.

module→registerBeaconCallback(callback)

Enregistre une fonction de callback qui sera appelée à chaque changement d'état de la balise de localisation du module.

module→registerConfigChangeCallback(callback)

Enregistre une fonction de callback qui sera appelée à chaque fois qu'un réglage persistant d'un module est modifié (par exemple changement d'unité de mesure, etc.)

module→registerLogCallback(callback)

Enregistre une fonction de callback qui sera appelée à chaque fois le module émet un message de log.

module→revertFromFlash()

Recharge les réglages stockés dans le mémoire non volatile du module, comme à la mise sous tension du module.

module→saveToFlash()

Sauve les réglages courants dans la mémoire non volatile du module.

module→set_allSettings(settings)

Rétablit tous les paramètres du module.

module→set_allSettingsAndFiles(settings)

Rétablit tous les paramètres de configuration et fichiers sur un module.

module→set_beacon(newval)

Allume ou éteint la balise de localisation du module.

module→set_logicalName(newval)

Change le nom logique du module.

module→set_luminosity(newval)

Modifie la luminosité des leds informatives du module.

module→set_userData(data)

Enregistre un contexte libre dans l'attribut userData de la fonction, afin de le retrouver plus tard à l'aide de la méthode get_userData.

module→set_userVar(newval)

Stocke une valeur 32 bits dans la mémoire volatile du module.

module→triggerConfigChangeCallback()

Force le déclanchement d'un callback de changement de configuration, afin de vérifier si ils sont disponibles ou pas.

module→triggerFirmwareUpdate(secBeforeReboot)

Agende un redémarrage du module en mode spécial de reprogrammation du logiciel embarqué.

module→updateFirmware(path)

Prepare une mise à jour de firmware du module.

module→updateFirmwareEx(path, force)

Prepare une mise à jour de firmware du module.

module→wait_async(callback, context)

Attend que toutes les commandes asynchrones en cours d'exécution sur le module soient terminées, et appelle le callback passé en paramètre.

YModule.FindModule()
YModule.FindModule()
yFindModule()yFindModule()[YModule FindModule: ]yFindModule()yFindModule()YModule.FindModule()YModule.FindModule()YModule.FindModule()YModule.FindModule()yFindModule()YModule.FindModule()YModule.FindModule()YModule.FindModule()

Permet de retrouver un module d'après son numéro de série ou son nom logique.

js
function yFindModule(func)
cpp
YModule* yFindModule(string func)
m
+(YModule*) FindModule: (NSString*) func
pas
TYModule yFindModule(func: string): TYModule
vb
function yFindModule(ByVal func As String) As YModule
cs
static YModule FindModule(string func)
java
static YModule FindModule(String func)
uwp
static YModule FindModule(string func)
py
FindModule(func)
php
function yFindModule($func)
es
static FindModule(func)
dnp
static YModuleProxy FindModule(string func)
cp
static YModuleProxy * FindModule(string func)

Cette fonction n'exige pas que le module soit en ligne au moment ou elle est appelée, l'objet retourné sera néanmoins valide. Utiliser la méthode YModule.isOnline() pour tester si le module est utilisable à un moment donné. En cas d'ambiguïté lorsqu'on fait une recherche par nom logique, aucune erreur ne sera notifiée: la première instance trouvée sera renvoyée. La recherche se fait d'abord par nom matériel, puis par nom logique.

Si un appel à la méthode is_online() de cet objet renvoie FAUX alors que vous êtes sûr que le module est bien branché, vérifiez que vous n'avez pas oublié d'appeler registerHub() à l'initialisation de de l'application.

Paramètres :

funcune chaîne de caractères contenant soit le numéro de série, soit le nom logique du module désiré

Retourne :

un objet de classe YModule qui permet ensuite de contrôler le module ou d'obtenir de plus amples informations sur le module.

YModule.FindModuleInContext()
YModule.FindModuleInContext()
YModule.FindModuleInContext()YModule.FindModuleInContext()YModule.FindModuleInContext()

Permet de retrouver un module d'après un identifiant donné dans un Context YAPI.

java
static YModule FindModuleInContext(YAPIContext yctx, String func)
uwp
static YModule FindModuleInContext(YAPIContext yctx, string func)
es
static FindModuleInContext(yctx, func)

L'identifiant peut être spécifié sous plusieurs formes:

Cette fonction n'exige pas que le module soit en ligne au moment ou elle est appelée, l'objet retourné sera néanmoins valide. Utiliser la méthode YModule.isOnline() pour tester si le module est utilisable à un moment donné. En cas d'ambiguïté lorsqu'on fait une recherche par nom logique, aucune erreur ne sera notifiée: la première instance trouvée sera renvoyée. La recherche se fait d'abord par nom matériel, puis par nom logique.

Paramètres :

yctxun contexte YAPI
funcune chaîne de caractères qui référence le module sans ambiguïté, par exemple MyDevice.module.

Retourne :

un objet de classe YModule qui permet ensuite de contrôler le module.

YModule.FirstModule()
YModule.FirstModule()
yFirstModule()yFirstModule()[YModule FirstModule]yFirstModule()yFirstModule()YModule.FirstModule()YModule.FirstModule()YModule.FirstModule()YModule.FirstModule()yFirstModule()YModule.FirstModule()

Commence l'énumération des modules accessibles par la librairie.

js
function yFirstModule()
cpp
YModule * yFirstModule()
m
+(YModule*) FirstModule
pas
TYModule yFirstModule(): TYModule
vb
function yFirstModule() As YModule
cs
static YModule FirstModule()
java
static YModule FirstModule()
uwp
static YModule FirstModule()
py
FirstModule()
php
function yFirstModule()
es
static FirstModule()

Utiliser la fonction YModule.nextModule() pour itérer sur les autres modules.

Retourne :

un pointeur sur un objet YModule, correspondant au premier module accessible en ligne, ou null si aucun module n'a été trouvé.

module→Beaconmodule.Beacon

état de la balise de localisation.

dnp
int Beacon

Valeurs possibles:

Y_BEACON_INVALID = 0
Y_BEACON_OFF = 1
Y_BEACON_ON = 2

Modifiable. Allume ou éteint la balise de localisation du module.

module→FirmwareReleasemodule.FirmwareRelease

Version du logiciel embarqué du module.

dnp
string FirmwareRelease

module→FunctionIdmodule.FunctionId

Identifiant matériel de la nième fonction du module.

dnp
string FunctionId

@param functionIndex : l'index de la fonction pour laquelle l'information est désirée, en commençant à 0 pour la première fonction.

module→HardwareIdmodule.HardwareId

Identifiant unique du module.

dnp
string HardwareId

L'identifiant unique est composé du numéro de série du module suivi de la chaîne ".module".

module→IsOnlinemodule.IsOnline

Vérifie si le module est joignable.

dnp
bool IsOnline

Si les valeurs des attributs du module en cache sont valides au moment de l'appel, le module est considéré joignable. Cette fonction ne cause en aucun cas d'exception, quelle que soit l'erreur qui pourrait se produire lors de la vérification de joignabilité.

module→LogicalNamemodule.LogicalName

Nom logique du module.

dnp
string LogicalName

Modifiable. Change le nom logique du module. Vous pouvez utiliser yCheckLogicalName() pour vérifier si votre paramètre est valide. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

module→Luminositymodule.Luminosity

Luminosité des leds informatives du module (valeur entre 0 et 100).

dnp
int Luminosity

Modifiable. Modifie la luminosité des leds informatives du module. Le paramêtre est une valeur entre 0 et 100. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

module→ProductIdmodule.ProductId

Identifiant USB du module, préprogrammé en usine.

dnp
int ProductId

module→ProductNamemodule.ProductName

Nom commercial du module, préprogrammé en usine.

dnp
string ProductName

module→ProductReleasemodule.ProductRelease

Numéro uméro de révision du module hardware, préprogrammé en usine.

dnp
int ProductRelease

La révision originale du retourne la valeur 1, la révision B retourne la valeur 2, etc.

module→SerialNumbermodule.SerialNumber

Numéro de série du module, préprogrammé en usine.

dnp
string SerialNumber

module→checkFirmware()module.checkFirmware()module→checkFirmware()[module checkFirmware: ]module.checkFirmware()module.checkFirmware()module.checkFirmware()module.checkFirmware()module.checkFirmware()module.checkFirmware()module→checkFirmware()module.checkFirmware()module.checkFirmware()module.checkFirmware()YModule checkFirmware

Teste si le fichier byn est valide pour le module.

js
function checkFirmware(path, onlynew)
cpp
string checkFirmware(string path, bool onlynew)
m
-(NSString*) checkFirmware: (NSString*) path
  : (bool) onlynew
pas
string checkFirmware(path: string, onlynew: boolean): string
vb
function checkFirmware(ByVal path As String, ByVal onlynew As Boolean) As String
cs
string checkFirmware(string path, bool onlynew)
java
String checkFirmware(String path, boolean onlynew)
uwp
async Task<string> checkFirmware(string path, bool onlynew)
py
checkFirmware(path, onlynew)
php
function checkFirmware($path, $onlynew)
es
async checkFirmware(path, onlynew)
dnp
string checkFirmware(string path, bool onlynew)
cp
string checkFirmware(string path, bool onlynew)
cmd
YModule target checkFirmware path onlynew

Cette méthode est utile pour vérifier si il est nécessaire de mettre à jour le module avec un nouveau firmware. Il est possible de passer un répertoire qui contiens plusieurs fichier .byn. Dans ce cas cette methode retourne le path du fichier .byn compatible le plus récent. Si le parametre onlynew est vrais, les firmwares équivalents ou plus anciens que le firmware actuellement installé sont ignorés.

Paramètres :

pathle path d'un fichier .byn ou d'un répertoire contenant plusieurs fichier .byn
onlynewretourne uniquement les fichiers strictement plus récents

Retourne :

le path du fichier .byn à utiliser, ou une chaîne vide si aucun firmware plus récent n'est disponible En cas d'erreur, déclenche une exception ou retourne une chaine de caractère qui comment par "error:".

module→clearCache()module.clearCache()module→clearCache()[module clearCache]module.clearCache()module.clearCache()module.clearCache()module.clearCache()module.clearCache()module→clearCache()module.clearCache()

Invalide le cache.

js
function clearCache()
cpp
void clearCache()
m
-(void) clearCache
pas
clearCache()
vb
procedure clearCache()
cs
void clearCache()
java
void clearCache()
py
clearCache()
php
function clearCache()
es
async clearCache()

Invalide le cache des valeurs courantes du module. Force le prochain appel à une méthode get_xxx() ou loadxxx() pour charger les les données depuis le module.

module→describe()module.describe()module→describe()[module describe]module.describe()module.describe()module.describe()module.describe()module.describe()module→describe()module.describe()

Retourne un court texte décrivant le module.

js
function describe()
cpp
string describe()
m
-(NSString*) describe
pas
string describe(): string
vb
function describe() As String
cs
string describe()
java
String describe()
py
describe()
php
function describe()
es
async describe()

Ce texte peut contenir soit le nom logique du module, soit son numéro de série.

Retourne :

une chaîne de caractères décrivant le module

module→download()module.download()module→download()[module download: ]module.download()module.download()module.download()module.download()module.download()module.download()module→download()module.download()module.download()module.download()YModule download

Télécharge le fichier choisi du module et retourne son contenu.

js
function download(pathname)
cpp
string download(string pathname)
m
-(NSMutableData*) download: (NSString*) pathname
pas
TByteArray download(pathname: string): TByteArray
vb
function download(ByVal pathname As String) As Byte
cs
byte[] download(string pathname)
java
byte[] download(String pathname)
uwp
async Task<byte[]> download(string pathname)
py
download(pathname)
php
function download($pathname)
es
async download(pathname)
dnp
byte[] download(string pathname)
cp
string download(string pathname)
cmd
YModule target download pathname

Paramètres :

pathnamenom complet du fichier

Retourne :

le contenu du fichier chargé

En cas d'erreur, déclenche une exception ou retourne YAPI_INVALID_STRING.

module→functionBaseType()module.functionBaseType()module→functionBaseType()module.functionBaseType()module.functionBaseType()module.functionBaseType()module.functionBaseType()module.functionBaseType()module→functionBaseType()module.functionBaseType()

Retourne le type de base de la nième fonction du module.

js
function functionBaseType(functionIndex)
cpp
string functionBaseType(int functionIndex)
pas
string functionBaseType(functionIndex: integer): string
vb
function functionBaseType(ByVal functionIndex As Integer) As String
cs
string functionBaseType(int functionIndex)
java
String functionBaseType(int functionIndex)
py
functionBaseType(functionIndex)
php
function functionBaseType($functionIndex)
es
async functionBaseType(functionIndex)

Par exemple, le type de base de toutes les fonctions de mesure est "Sensor".

Paramètres :

functionIndexl'index de la fonction pour laquelle l'information est désirée, en commençant à 0 pour la première fonction.

Retourne :

une chaîne de caractères correspondant au type de base de la fonction

En cas d'erreur, déclenche une exception ou retourne un chaîne vide.

module→functionCount()module.functionCount()module→functionCount()[module functionCount]module.functionCount()module.functionCount()module.functionCount()module.functionCount()module.functionCount()module→functionCount()module.functionCount()

Retourne le nombre de fonctions (sans compter l'interface "module") existant sur le module.

js
function functionCount()
cpp
int functionCount()
m
-(int) functionCount
pas
integer functionCount(): integer
vb
function functionCount() As Integer
cs
int functionCount()
java
int functionCount()
py
functionCount()
php
function functionCount()
es
async functionCount()

Retourne :

le nombre de fonctions sur le module

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

module→functionId()module.functionId()module→functionId()[module functionId: ]module.functionId()module.functionId()module.functionId()module.functionId()module.functionId()module→functionId()module.functionId()

Retourne l'identifiant matériel de la nième fonction du module.

js
function functionId(functionIndex)
cpp
string functionId(int functionIndex)
m
-(NSString*) functionId: (int) functionIndex
pas
string functionId(functionIndex: integer): string
vb
function functionId(ByVal functionIndex As Integer) As String
cs
string functionId(int functionIndex)
java
String functionId(int functionIndex)
py
functionId(functionIndex)
php
function functionId($functionIndex)
es
async functionId(functionIndex)

Paramètres :

functionIndexl'index de la fonction pour laquelle l'information est désirée, en commençant à 0 pour la première fonction.

Retourne :

une chaîne de caractères correspondant à l'identifiant matériel unique de la fonction désirée

En cas d'erreur, déclenche une exception ou retourne un chaîne vide.

module→functionName()module.functionName()module→functionName()[module functionName: ]module.functionName()module.functionName()module.functionName()module.functionName()module.functionName()module→functionName()module.functionName()

Retourne le nom logique de la nième fonction du module.

js
function functionName(functionIndex)
cpp
string functionName(int functionIndex)
m
-(NSString*) functionName: (int) functionIndex
pas
string functionName(functionIndex: integer): string
vb
function functionName(ByVal functionIndex As Integer) As String
cs
string functionName(int functionIndex)
java
String functionName(int functionIndex)
py
functionName(functionIndex)
php
function functionName($functionIndex)
es
async functionName(functionIndex)

Paramètres :

functionIndexl'index de la fonction pour laquelle l'information est désirée, en commençant à 0 pour la première fonction.

Retourne :

une chaîne de caractères correspondant au nom logique de la fonction désirée

En cas d'erreur, déclenche une exception ou retourne un chaîne vide.

module→functionType()module.functionType()module→functionType()module.functionType()module.functionType()module.functionType()module.functionType()module.functionType()module→functionType()module.functionType()

Retourne le type de la nième fonction du module.

js
function functionType(functionIndex)
cpp
string functionType(int functionIndex)
pas
string functionType(functionIndex: integer): string
vb
function functionType(ByVal functionIndex As Integer) As String
cs
string functionType(int functionIndex)
java
String functionType(int functionIndex)
py
functionType(functionIndex)
php
function functionType($functionIndex)
es
async functionType(functionIndex)

Paramètres :

functionIndexl'index de la fonction pour laquelle l'information est désirée, en commençant à 0 pour la première fonction.

Retourne :

une chaîne de caractères correspondant au type de la fonction

En cas d'erreur, déclenche une exception ou retourne un chaîne vide.

module→functionValue()module.functionValue()module→functionValue()[module functionValue: ]module.functionValue()module.functionValue()module.functionValue()module.functionValue()module.functionValue()module→functionValue()module.functionValue()

Retourne la valeur publiée par la nième fonction du module.

js
function functionValue(functionIndex)
cpp
string functionValue(int functionIndex)
m
-(NSString*) functionValue: (int) functionIndex
pas
string functionValue(functionIndex: integer): string
vb
function functionValue(ByVal functionIndex As Integer) As String
cs
string functionValue(int functionIndex)
java
String functionValue(int functionIndex)
py
functionValue(functionIndex)
php
function functionValue($functionIndex)
es
async functionValue(functionIndex)

Paramètres :

functionIndexl'index de la fonction pour laquelle l'information est désirée, en commençant à 0 pour la première fonction.

Retourne :

une chaîne de caractères correspondant à la valeur publiée par la fonction désirée

En cas d'erreur, déclenche une exception ou retourne un chaîne vide.

module→get_allSettings()
module→allSettings()
module.get_allSettings()module→get_allSettings()[module allSettings]module.get_allSettings()module.get_allSettings()module.get_allSettings()module.get_allSettings()module.get_allSettings()module.get_allSettings()module→get_allSettings()module.get_allSettings()module.get_allSettings()module.get_allSettings()YModule get_allSettings

Retourne tous les paramètres de configuration du module.

js
function get_allSettings()
cpp
string get_allSettings()
m
-(NSMutableData*) allSettings
pas
TByteArray get_allSettings(): TByteArray
vb
function get_allSettings() As Byte
cs
byte[] get_allSettings()
java
byte[] get_allSettings()
uwp
async Task<byte[]> get_allSettings()
py
get_allSettings()
php
function get_allSettings()
es
async get_allSettings()
dnp
byte[] get_allSettings()
cp
string get_allSettings()
cmd
YModule target get_allSettings

Utile pour sauvgarder les noms logiques, les calibrations et fichies uploadés d'un module.

Retourne :

un objet binaire avec tous les paramètres

En cas d'erreur, déclenche une exception ou retourne un objet binaire de taille 0.

module→get_beacon()
module→beacon()
module.get_beacon()module→get_beacon()[module beacon]module.get_beacon()module.get_beacon()module.get_beacon()module.get_beacon()module.get_beacon()module.get_beacon()module→get_beacon()module.get_beacon()module.get_beacon()module.get_beacon()YModule get_beacon

Retourne l'état de la balise de localisation.

js
function get_beacon()
cpp
Y_BEACON_enum get_beacon()
m
-(Y_BEACON_enum) beacon
pas
Integer get_beacon(): Integer
vb
function get_beacon() As Integer
cs
int get_beacon()
java
int get_beacon()
uwp
async Task<int> get_beacon()
py
get_beacon()
php
function get_beacon()
es
async get_beacon()
dnp
int get_beacon()
cp
int get_beacon()
cmd
YModule target get_beacon

Retourne :

soit Y_BEACON_OFF, soit Y_BEACON_ON, selon l'état de la balise de localisation

En cas d'erreur, déclenche une exception ou retourne Y_BEACON_INVALID.

module→get_errorMessage()
module→errorMessage()
module.get_errorMessage()module→get_errorMessage()[module errorMessage]module.get_errorMessage()module.get_errorMessage()module.get_errorMessage()module.get_errorMessage()module.get_errorMessage()module→get_errorMessage()module.get_errorMessage()

Retourne le message correspondant à la dernière erreur survenue lors de l'utilisation de l'objet module.

js
function get_errorMessage()
cpp
string get_errorMessage()
m
-(NSString*) errorMessage
pas
string get_errorMessage(): string
vb
function get_errorMessage() As String
cs
string get_errorMessage()
java
String get_errorMessage()
py
get_errorMessage()
php
function get_errorMessage()
es
get_errorMessage()

Cette méthode est principalement utile lorsque la librairie Yoctopuce est utilisée en désactivant la gestion des exceptions.

Retourne :

une chaîne de caractères correspondant au message de la dernière erreur qui s'est produit lors de l'utilisation du module

module→get_errorType()
module→errorType()
module.get_errorType()module→get_errorType()[module errorType]module.get_errorType()module.get_errorType()module.get_errorType()module.get_errorType()module.get_errorType()module→get_errorType()module.get_errorType()

Retourne le code d'erreur correspondant à la dernière erreur survenue lors de l'utilisation de l'objet module.

js
function get_errorType()
cpp
YRETCODE get_errorType()
m
-(YRETCODE) errorType
pas
YRETCODE get_errorType(): YRETCODE
vb
function get_errorType() As YRETCODE
cs
YRETCODE get_errorType()
java
int get_errorType()
py
get_errorType()
php
function get_errorType()
es
get_errorType()

Cette méthode est principalement utile lorsque la librairie Yoctopuce est utilisée en désactivant la gestion des exceptions.

Retourne :

un nombre correspondant au code de la dernière erreur qui s'est produit lors de l'utilisation du module

module→get_firmwareRelease()
module→firmwareRelease()
module.get_firmwareRelease()module→get_firmwareRelease()[module firmwareRelease]module.get_firmwareRelease()module.get_firmwareRelease()module.get_firmwareRelease()module.get_firmwareRelease()module.get_firmwareRelease()module.get_firmwareRelease()module→get_firmwareRelease()module.get_firmwareRelease()module.get_firmwareRelease()module.get_firmwareRelease()YModule get_firmwareRelease

Retourne la version du logiciel embarqué du module.

js
function get_firmwareRelease()
cpp
string get_firmwareRelease()
m
-(NSString*) firmwareRelease
pas
string get_firmwareRelease(): string
vb
function get_firmwareRelease() As String
cs
string get_firmwareRelease()
java
String get_firmwareRelease()
uwp
async Task<string> get_firmwareRelease()
py
get_firmwareRelease()
php
function get_firmwareRelease()
es
async get_firmwareRelease()
dnp
string get_firmwareRelease()
cp
string get_firmwareRelease()
cmd
YModule target get_firmwareRelease

Retourne :

une chaîne de caractères représentant la version du logiciel embarqué du module

En cas d'erreur, déclenche une exception ou retourne Y_FIRMWARERELEASE_INVALID.

module→get_functionIds()
module→functionIds()
module.get_functionIds()module→get_functionIds()[module functionIds: ]module.get_functionIds()module.get_functionIds()module.get_functionIds()module.get_functionIds()module.get_functionIds()module.get_functionIds()module→get_functionIds()module.get_functionIds()module.get_functionIds()module.get_functionIds()YModule get_functionIds

Retourne les identifiants matériels des fonctions correspondant au type passé en argument.

js
function get_functionIds(funType)
cpp
vector<string> get_functionIds(string funType)
m
-(NSMutableArray*) functionIds: (NSString*) funType
pas
TStringArray get_functionIds(funType: string): TStringArray
vb
function get_functionIds(ByVal funType As String) As List
cs
List<string> get_functionIds(string funType)
java
ArrayList<String> get_functionIds(String funType)
uwp
async Task<List<string>> get_functionIds(string funType)
py
get_functionIds(funType)
php
function get_functionIds($funType)
es
async get_functionIds(funType)
dnp
string[] get_functionIds(string funType)
cp
vector<string> get_functionIds(string funType)
cmd
YModule target get_functionIds funType

Paramètres :

funTypeLe type de fonction (Relay, LightSensor, Voltage,...)

Retourne :

un tableau de chaînes de caractère.

module→get_hardwareId()
module→hardwareId()
module.get_hardwareId()module→get_hardwareId()[module hardwareId]module.get_hardwareId()module.get_hardwareId()module.get_hardwareId()module.get_hardwareId()module→get_hardwareId()module.get_hardwareId()module.get_hardwareId()module.get_hardwareId()module.get_hardwareId()module.get_hardwareId()YModule get_hardwareId

Retourne l'identifiant unique du module.

js
function get_hardwareId()
cpp
string get_hardwareId()
m
-(NSString*) hardwareId
vb
function get_hardwareId() As String
cs
string get_hardwareId()
java
String get_hardwareId()
py
get_hardwareId()
php
function get_hardwareId()
es
async get_hardwareId()
dnp
string get_hardwareId()
cp
string get_hardwareId()
pas
string get_hardwareId(): string
uwp
async Task<string> get_hardwareId()
cmd
YModule target get_hardwareId

L'identifiant unique est composé du numéro de série du module suivi de la chaîne ".module".

Retourne :

une chaîne de caractères identifiant la fonction

module→get_icon2d()
module→icon2d()
module.get_icon2d()module→get_icon2d()[module icon2d]module.get_icon2d()module.get_icon2d()module.get_icon2d()module.get_icon2d()module.get_icon2d()module.get_icon2d()module→get_icon2d()module.get_icon2d()module.get_icon2d()module.get_icon2d()YModule get_icon2d

Retourne l'icône du module.

js
function get_icon2d()
cpp
string get_icon2d()
m
-(NSMutableData*) icon2d
pas
TByteArray get_icon2d(): TByteArray
vb
function get_icon2d() As Byte
cs
byte[] get_icon2d()
java
byte[] get_icon2d()
uwp
async Task<byte[]> get_icon2d()
py
get_icon2d()
php
function get_icon2d()
es
async get_icon2d()
dnp
byte[] get_icon2d()
cp
string get_icon2d()
cmd
YModule target get_icon2d

L'icone est au format PNG et a une taille maximale de 1536 octets.

Retourne :

un buffer binaire contenant l'icone, au format png. En cas d'erreur, déclenche une exception ou retourne YAPI_INVALID_STRING.

module→get_lastLogs()
module→lastLogs()
module.get_lastLogs()module→get_lastLogs()[module lastLogs]module.get_lastLogs()module.get_lastLogs()module.get_lastLogs()module.get_lastLogs()module.get_lastLogs()module.get_lastLogs()module→get_lastLogs()module.get_lastLogs()module.get_lastLogs()module.get_lastLogs()YModule get_lastLogs

Retourne une chaine de charactère contenant les derniers logs du module.

js
function get_lastLogs()
cpp
string get_lastLogs()
m
-(NSString*) lastLogs
pas
string get_lastLogs(): string
vb
function get_lastLogs() As String
cs
string get_lastLogs()
java
String get_lastLogs()
uwp
async Task<string> get_lastLogs()
py
get_lastLogs()
php
function get_lastLogs()
es
async get_lastLogs()
dnp
string get_lastLogs()
cp
string get_lastLogs()
cmd
YModule target get_lastLogs

Cette méthode retourne les derniers logs qui sont encore stocké dans le module.

Retourne :

une chaîne de caractère contenant les derniers logs du module. En cas d'erreur, déclenche une exception ou retourne YAPI_INVALID_STRING.

module→get_logicalName()
module→logicalName()
module.get_logicalName()module→get_logicalName()[module logicalName]module.get_logicalName()module.get_logicalName()module.get_logicalName()module.get_logicalName()module.get_logicalName()module.get_logicalName()module→get_logicalName()module.get_logicalName()module.get_logicalName()module.get_logicalName()YModule get_logicalName

Retourne le nom logique du module.

js
function get_logicalName()
cpp
string get_logicalName()
m
-(NSString*) logicalName
pas
string get_logicalName(): string
vb
function get_logicalName() As String
cs
string get_logicalName()
java
String get_logicalName()
uwp
async Task<string> get_logicalName()
py
get_logicalName()
php
function get_logicalName()
es
async get_logicalName()
dnp
string get_logicalName()
cp
string get_logicalName()
cmd
YModule target get_logicalName

Retourne :

une chaîne de caractères représentant le nom logique du module

En cas d'erreur, déclenche une exception ou retourne Y_LOGICALNAME_INVALID.

module→get_luminosity()
module→luminosity()
module.get_luminosity()module→get_luminosity()[module luminosity]module.get_luminosity()module.get_luminosity()module.get_luminosity()module.get_luminosity()module.get_luminosity()module.get_luminosity()module→get_luminosity()module.get_luminosity()module.get_luminosity()module.get_luminosity()YModule get_luminosity

Retourne la luminosité des leds informatives du module (valeur entre 0 et 100).

js
function get_luminosity()
cpp
int get_luminosity()
m
-(int) luminosity
pas
LongInt get_luminosity(): LongInt
vb
function get_luminosity() As Integer
cs
int get_luminosity()
java
int get_luminosity()
uwp
async Task<int> get_luminosity()
py
get_luminosity()
php
function get_luminosity()
es
async get_luminosity()
dnp
int get_luminosity()
cp
int get_luminosity()
cmd
YModule target get_luminosity

Retourne :

un entier représentant la luminosité des leds informatives du module (valeur entre 0 et 100)

En cas d'erreur, déclenche une exception ou retourne Y_LUMINOSITY_INVALID.

module→get_parentHub()
module→parentHub()
module.get_parentHub()module→get_parentHub()[module parentHub]module.get_parentHub()module.get_parentHub()module.get_parentHub()module.get_parentHub()module.get_parentHub()module.get_parentHub()module→get_parentHub()module.get_parentHub()module.get_parentHub()module.get_parentHub()YModule get_parentHub

Retourne le numéro de série du YoctoHub sur lequel est connecté le module.

js
function get_parentHub()
cpp
string get_parentHub()
m
-(NSString*) parentHub
pas
string get_parentHub(): string
vb
function get_parentHub() As String
cs
string get_parentHub()
java
String get_parentHub()
uwp
async Task<string> get_parentHub()
py
get_parentHub()
php
function get_parentHub()
es
async get_parentHub()
dnp
string get_parentHub()
cp
string get_parentHub()
cmd
YModule target get_parentHub

Si le module est connecté par USB, ou si le module est le YoctoHub racine, une chaîne vide est retournée.

Retourne :

une chaîne de caractères contenant le numéro de série du YoctoHub, ou une chaîne vide.

module→get_persistentSettings()
module→persistentSettings()
module.get_persistentSettings()module→get_persistentSettings()[module persistentSettings]module.get_persistentSettings()module.get_persistentSettings()module.get_persistentSettings()module.get_persistentSettings()module.get_persistentSettings()module.get_persistentSettings()module→get_persistentSettings()module.get_persistentSettings()module.get_persistentSettings()module.get_persistentSettings()YModule get_persistentSettings

Retourne l'état courant des réglages persistents du module.

js
function get_persistentSettings()
cpp
Y_PERSISTENTSETTINGS_enum get_persistentSettings()
m
-(Y_PERSISTENTSETTINGS_enum) persistentSettings
pas
Integer get_persistentSettings(): Integer
vb
function get_persistentSettings() As Integer
cs
int get_persistentSettings()
java
int get_persistentSettings()
uwp
async Task<int> get_persistentSettings()
py
get_persistentSettings()
php
function get_persistentSettings()
es
async get_persistentSettings()
dnp
int get_persistentSettings()
cp
int get_persistentSettings()
cmd
YModule target get_persistentSettings

Retourne :

une valeur parmi Y_PERSISTENTSETTINGS_LOADED, Y_PERSISTENTSETTINGS_SAVED et Y_PERSISTENTSETTINGS_MODIFIED représentant l'état courant des réglages persistents du module

En cas d'erreur, déclenche une exception ou retourne Y_PERSISTENTSETTINGS_INVALID.

module→get_productId()
module→productId()
module.get_productId()module→get_productId()[module productId]module.get_productId()module.get_productId()module.get_productId()module.get_productId()module.get_productId()module.get_productId()module→get_productId()module.get_productId()module.get_productId()module.get_productId()YModule get_productId

Retourne l'identifiant USB du module, préprogrammé en usine.

js
function get_productId()
cpp
int get_productId()
m
-(int) productId
pas
LongInt get_productId(): LongInt
vb
function get_productId() As Integer
cs
int get_productId()
java
int get_productId()
uwp
async Task<int> get_productId()
py
get_productId()
php
function get_productId()
es
async get_productId()
dnp
int get_productId()
cp
int get_productId()
cmd
YModule target get_productId

Retourne :

un entier représentant l'identifiant USB du module, préprogrammé en usine

En cas d'erreur, déclenche une exception ou retourne Y_PRODUCTID_INVALID.

module→get_productName()
module→productName()
module.get_productName()module→get_productName()[module productName]module.get_productName()module.get_productName()module.get_productName()module.get_productName()module.get_productName()module.get_productName()module→get_productName()module.get_productName()module.get_productName()module.get_productName()YModule get_productName

Retourne le nom commercial du module, préprogrammé en usine.

js
function get_productName()
cpp
string get_productName()
m
-(NSString*) productName
pas
string get_productName(): string
vb
function get_productName() As String
cs
string get_productName()
java
String get_productName()
uwp
async Task<string> get_productName()
py
get_productName()
php
function get_productName()
es
async get_productName()
dnp
string get_productName()
cp
string get_productName()
cmd
YModule target get_productName

Retourne :

une chaîne de caractères représentant le nom commercial du module, préprogrammé en usine

En cas d'erreur, déclenche une exception ou retourne Y_PRODUCTNAME_INVALID.

module→get_productRelease()
module→productRelease()
module.get_productRelease()module→get_productRelease()[module productRelease]module.get_productRelease()module.get_productRelease()module.get_productRelease()module.get_productRelease()module.get_productRelease()module.get_productRelease()module→get_productRelease()module.get_productRelease()module.get_productRelease()module.get_productRelease()YModule get_productRelease

Retourne le numéro uméro de révision du module hardware, préprogrammé en usine.

js
function get_productRelease()
cpp
int get_productRelease()
m
-(int) productRelease
pas
LongInt get_productRelease(): LongInt
vb
function get_productRelease() As Integer
cs
int get_productRelease()
java
int get_productRelease()
uwp
async Task<int> get_productRelease()
py
get_productRelease()
php
function get_productRelease()
es
async get_productRelease()
dnp
int get_productRelease()
cp
int get_productRelease()
cmd
YModule target get_productRelease

La révision originale du retourne la valeur 1, la révision B retourne la valeur 2, etc.

Retourne :

un entier représentant le numéro uméro de révision du module hardware, préprogrammé en usine

En cas d'erreur, déclenche une exception ou retourne Y_PRODUCTRELEASE_INVALID.

module→get_rebootCountdown()
module→rebootCountdown()
module.get_rebootCountdown()module→get_rebootCountdown()[module rebootCountdown]module.get_rebootCountdown()module.get_rebootCountdown()module.get_rebootCountdown()module.get_rebootCountdown()module.get_rebootCountdown()module.get_rebootCountdown()module→get_rebootCountdown()module.get_rebootCountdown()module.get_rebootCountdown()module.get_rebootCountdown()YModule get_rebootCountdown

Retourne le nombre de secondes restantes avant un redémarrage du module, ou zéro si aucun redémarrage n'a été agendé.

js
function get_rebootCountdown()
cpp
int get_rebootCountdown()
m
-(int) rebootCountdown
pas
LongInt get_rebootCountdown(): LongInt
vb
function get_rebootCountdown() As Integer
cs
int get_rebootCountdown()
java
int get_rebootCountdown()
uwp
async Task<int> get_rebootCountdown()
py
get_rebootCountdown()
php
function get_rebootCountdown()
es
async get_rebootCountdown()
dnp
int get_rebootCountdown()
cp
int get_rebootCountdown()
cmd
YModule target get_rebootCountdown

Retourne :

un entier représentant le nombre de secondes restantes avant un redémarrage du module, ou zéro si aucun redémarrage n'a été agendé

En cas d'erreur, déclenche une exception ou retourne Y_REBOOTCOUNTDOWN_INVALID.

module→get_serialNumber()
module→serialNumber()
module.get_serialNumber()module→get_serialNumber()[module serialNumber]module.get_serialNumber()module.get_serialNumber()module.get_serialNumber()module.get_serialNumber()module.get_serialNumber()module.get_serialNumber()module→get_serialNumber()module.get_serialNumber()module.get_serialNumber()module.get_serialNumber()YModule get_serialNumber

Retourne le numéro de série du module, préprogrammé en usine.

js
function get_serialNumber()
cpp
string get_serialNumber()
m
-(NSString*) serialNumber
pas
string get_serialNumber(): string
vb
function get_serialNumber() As String
cs
string get_serialNumber()
java
String get_serialNumber()
uwp
async Task<string> get_serialNumber()
py
get_serialNumber()
php
function get_serialNumber()
es
async get_serialNumber()
dnp
string get_serialNumber()
cp
string get_serialNumber()
cmd
YModule target get_serialNumber

Retourne :

une chaîne de caractères représentant le numéro de série du module, préprogrammé en usine

En cas d'erreur, déclenche une exception ou retourne Y_SERIALNUMBER_INVALID.

module→get_subDevices()
module→subDevices()
module.get_subDevices()module→get_subDevices()[module subDevices]module.get_subDevices()module.get_subDevices()module.get_subDevices()module.get_subDevices()module.get_subDevices()module.get_subDevices()module→get_subDevices()module.get_subDevices()module.get_subDevices()module.get_subDevices()YModule get_subDevices

Retourne la liste des modules branchés au module courant.

js
function get_subDevices()
cpp
vector<string> get_subDevices()
m
-(NSMutableArray*) subDevices
pas
TStringArray get_subDevices(): TStringArray
vb
function get_subDevices() As List
cs
List<string> get_subDevices()
java
ArrayList<String> get_subDevices()
uwp
async Task<List<string>> get_subDevices()
py
get_subDevices()
php
function get_subDevices()
es
async get_subDevices()
dnp
string[] get_subDevices()
cp
vector<string> get_subDevices()
cmd
YModule target get_subDevices

Cette fonction n'est pertinente que lorsqu'elle appelée pour un YoctoHub ou pour le VirtualHub. Dans le cas contraire, un tableau vide est retourné.

Retourne :

un tableau de chaînes de caractères contenant les numéros de série des sous-modules connectés au module

module→get_upTime()
module→upTime()
module.get_upTime()module→get_upTime()[module upTime]module.get_upTime()module.get_upTime()module.get_upTime()module.get_upTime()module.get_upTime()module.get_upTime()module→get_upTime()module.get_upTime()module.get_upTime()module.get_upTime()YModule get_upTime

Retourne le numbre de millisecondes écoulées depuis la mise sous tension du module

js
function get_upTime()
cpp
s64 get_upTime()
m
-(s64) upTime
pas
int64 get_upTime(): int64
vb
function get_upTime() As Long
cs
long get_upTime()
java
long get_upTime()
uwp
async Task<long> get_upTime()
py
get_upTime()
php
function get_upTime()
es
async get_upTime()
dnp
long get_upTime()
cp
s64 get_upTime()
cmd
YModule target get_upTime

Retourne :

un entier représentant le numbre de millisecondes écoulées depuis la mise sous tension du module

En cas d'erreur, déclenche une exception ou retourne Y_UPTIME_INVALID.

module→get_url()
module→url()
module.get_url()module→get_url()[module url]module.get_url()module.get_url()module.get_url()module.get_url()module.get_url()module.get_url()module→get_url()module.get_url()module.get_url()module.get_url()YModule get_url

Retourne l'URL utilisée pour accéder au module.

js
function get_url()
cpp
string get_url()
m
-(NSString*) url
pas
string get_url(): string
vb
function get_url() As String
cs
string get_url()
java
String get_url()
uwp
async Task<string> get_url()
py
get_url()
php
function get_url()
es
async get_url()
dnp
string get_url()
cp
string get_url()
cmd
YModule target get_url

Si le module est connecté par USB la chaîne de caractère 'usb' est retournée.

Retourne :

une chaîne de caractère contenant l'URL du module.

module→get_usbCurrent()
module→usbCurrent()
module.get_usbCurrent()module→get_usbCurrent()[module usbCurrent]module.get_usbCurrent()module.get_usbCurrent()module.get_usbCurrent()module.get_usbCurrent()module.get_usbCurrent()module.get_usbCurrent()module→get_usbCurrent()module.get_usbCurrent()module.get_usbCurrent()module.get_usbCurrent()YModule get_usbCurrent

Retourne le courant consommé par le module sur le bus USB, en milliampères.

js
function get_usbCurrent()
cpp
int get_usbCurrent()
m
-(int) usbCurrent
pas
LongInt get_usbCurrent(): LongInt
vb
function get_usbCurrent() As Integer
cs
int get_usbCurrent()
java
int get_usbCurrent()
uwp
async Task<int> get_usbCurrent()
py
get_usbCurrent()
php
function get_usbCurrent()
es
async get_usbCurrent()
dnp
int get_usbCurrent()
cp
int get_usbCurrent()
cmd
YModule target get_usbCurrent

Retourne :

un entier représentant le courant consommé par le module sur le bus USB, en milliampères

En cas d'erreur, déclenche une exception ou retourne Y_USBCURRENT_INVALID.

module→get_userData()
module→userData()
module.get_userData()module→get_userData()[module userData]module.get_userData()module.get_userData()module.get_userData()module.get_userData()module.get_userData()module→get_userData()module.get_userData()

Retourne le contenu de l'attribut userData, précédemment stocké à l'aide de la méthode set_userData.

js
function get_userData()
cpp
void * get_userData()
m
-(id) userData
pas
Tobject get_userData(): Tobject
vb
function get_userData() As Object
cs
object get_userData()
java
Object get_userData()
py
get_userData()
php
function get_userData()
es
async get_userData()

Cet attribut n'es pas utilisé directement par l'API. Il est à la disposition de l'appelant pour stocker un contexte.

Retourne :

l'objet stocké précédemment par l'appelant.

module→get_userVar()
module→userVar()
module.get_userVar()module→get_userVar()[module userVar]module.get_userVar()module.get_userVar()module.get_userVar()module.get_userVar()module.get_userVar()module.get_userVar()module→get_userVar()module.get_userVar()module.get_userVar()module.get_userVar()YModule get_userVar

Retourne la valeur entière précédemment stockée dans cet attribut.

js
function get_userVar()
cpp
int get_userVar()
m
-(int) userVar
pas
LongInt get_userVar(): LongInt
vb
function get_userVar() As Integer
cs
int get_userVar()
java
int get_userVar()
uwp
async Task<int> get_userVar()
py
get_userVar()
php
function get_userVar()
es
async get_userVar()
dnp
int get_userVar()
cp
int get_userVar()
cmd
YModule target get_userVar

Au démarrage du module (ou après un redémarrage), la valeur est toujours zéro.

Retourne :

un entier représentant la valeur entière précédemment stockée dans cet attribut

En cas d'erreur, déclenche une exception ou retourne Y_USERVAR_INVALID.

module→hasFunction()module.hasFunction()module→hasFunction()[module hasFunction: ]module.hasFunction()module.hasFunction()module.hasFunction()module.hasFunction()module.hasFunction()module.hasFunction()module→hasFunction()module.hasFunction()module.hasFunction()module.hasFunction()YModule hasFunction

Teste la présence d'une fonction pour le module courant.

js
function hasFunction(funcId)
cpp
bool hasFunction(string funcId)
m
-(bool) hasFunction: (NSString*) funcId
pas
boolean hasFunction(funcId: string): boolean
vb
function hasFunction(ByVal funcId As String) As Boolean
cs
bool hasFunction(string funcId)
java
boolean hasFunction(String funcId)
uwp
async Task<bool> hasFunction(string funcId)
py
hasFunction(funcId)
php
function hasFunction($funcId)
es
async hasFunction(funcId)
dnp
bool hasFunction(string funcId)
cp
bool hasFunction(string funcId)
cmd
YModule target hasFunction funcId

La méthode prend en paramètre l'identifiant de la fonction (relay1, voltage2,...) et retourne un booléen.

Paramètres :

funcIdidentifiant matériel de la fonction

Retourne :

vrai si le module inclut la fonction demandée

module→isOnline()module.isOnline()module→isOnline()[module isOnline]module.isOnline()module.isOnline()module.isOnline()module.isOnline()module.isOnline()module→isOnline()module.isOnline()module.isOnline()module.isOnline()

Vérifie si le module est joignable, sans déclencher d'erreur.

js
function isOnline()
cpp
bool isOnline()
m
-(BOOL) isOnline
pas
boolean isOnline(): boolean
vb
function isOnline() As Boolean
cs
bool isOnline()
java
boolean isOnline()
py
isOnline()
php
function isOnline()
es
async isOnline()
dnp
bool isOnline()
cp
bool isOnline()

Si les valeurs des attributs du module en cache sont valides au moment de l'appel, le module est considéré joignable. Cette fonction ne cause en aucun cas d'exception, quelle que soit l'erreur qui pourrait se produire lors de la vérification de joignabilité.

Retourne :

true si le module est joignable, false sinon

module→isOnline_async()module.isOnline_async()

Vérifie si le module est joignable, sans déclencher d'erreur.

js
function isOnline_async(callback, context)

Si les valeurs des attributs du module en cache sont valides au moment de l'appel, le module est considéré joignable. Cette fonction ne cause en aucun cas d'exception, quelle que soit l'erreur qui pourrait se produire lors de la vérification de joignabilité.

Cette version asynchrone n'existe qu'en Javascript. Elle utilise une fonction de callback plutôt qu'une simple valeur de retour, pour éviter de bloquer la VM Javascript de Firefox, qui n'implémente pas le passage de contrôle entre threads durant les appels d'entrée/sortie bloquants.

Paramètres :

callbackfonction de callback qui sera appelée dès que le résultat sera connu. La fonction callback reçoit trois arguments: le contexte fourni par l'appelant, l'objet module concerné et le résultat booléen
contextcontexte fourni par l'appelant, et qui sera passé tel-quel à la fonction de callback

Retourne :

rien du tout : le résultat sera passé en paramètre à la fonction de callback.

module→load()module.load()module→load()[module load: ]module.load()module.load()module.load()module.load()module.load()module→load()module.load()

Met en cache les valeurs courantes du module, avec une durée de validité spécifiée.

js
function load(msValidity)
cpp
YRETCODE load(int msValidity)
m
-(YRETCODE) load: (u64) msValidity
pas
YRETCODE load(msValidity: u64): YRETCODE
vb
function load(ByVal msValidity As Long) As YRETCODE
cs
YRETCODE load(ulong msValidity)
java
int load(long msValidity)
py
load(msValidity)
php
function load($msValidity)
es
async load(msValidity)

Par défaut, lorsqu'on accède à un module, tous les attributs des fonctions du module sont automatiquement mises en cache pour la durée standard (5 ms). Cette méthode peut être utilisée pour marquer occasionnellement les données cachées comme valides pour une plus longue période, par exemple dans le but de réduire le trafic réseau.

Paramètres :

msValidityun entier correspondant à la durée de validité attribuée aux les paramètres chargés, en millisecondes

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

module→load_async()module.load_async()

Met en cache les valeurs courantes du module, avec une durée de validité spécifiée.

js
function load_async(msValidity, callback, context)

Par défaut, lorsqu'on accède à un module, tous les attributs des fonctions du module sont automatiquement mises en cache pour la durée standard (5 ms). Cette méthode peut être utilisée pour marquer occasionnellement les données cachées comme valides pour une plus longue période, par exemple dans le but de réduire le trafic réseau.

Cette version asynchrone n'existe qu'en Javascript. Elle utilise une fonction de callback plutôt qu'une simple valeur de retour, pour éviter de bloquer la VM Javascript de Firefox, qui n'implémente pas le passage de contrôle entre threads durant les appels d'entrée/sortie bloquants.

Paramètres :

msValidityun entier correspondant à la durée de validité attribuée aux les paramètres chargés, en millisecondes
callbackfonction de callback qui sera appelée dès que le résultat sera connu. La fonction callback reçoit trois arguments: le contexte fourni par l'appelant, l'objet module concerné et le code d'erreur (ou YAPI_SUCCESS)
contextcontexte fourni par l'appelant, et qui sera passé tel-quel à la fonction de callback

Retourne :

rien du tout : le résultat sera passé en paramètre à la fonction de callback.

module→log()module.log()module→log()[module log: ]module.log()module.log()module.log()module.log()module.log()module.log()module→log()module.log()module.log()module.log()YModule log

Ajoute un message arbitraire dans les logs du module.

js
function log(text)
cpp
int log(string text)
m
-(int) log: (NSString*) text
pas
LongInt log(text: string): LongInt
vb
function log(ByVal text As String) As Integer
cs
int log(string text)
java
int log(String text)
uwp
async Task<int> log(string text)
py
log(text)
php
function log($text)
es
async log(text)
dnp
int log(string text)
cp
int log(string text)
cmd
YModule target log text

Cette fonction est utile en particulier pour tracer l'exécution de callbacks HTTP. Si un saut de ligne est désiré après le message, il doit être inclus dans la chaîne de caractère.

Paramètres :

textle message à ajouter aux logs du module.

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

module→nextModule()module.nextModule()module→nextModule()[module nextModule]module.nextModule()module.nextModule()module.nextModule()module.nextModule()module.nextModule()module.nextModule()module→nextModule()module.nextModule()

Continue l'énumération des modules commencée à l'aide de yFirstModule().

js
function nextModule()
cpp
YModule * nextModule()
m
-(YModule*) nextModule
pas
TYModule nextModule(): TYModule
vb
function nextModule() As YModule
cs
YModule nextModule()
java
YModule nextModule()
uwp
YModule nextModule()
py
nextModule()
php
function nextModule()
es
nextModule()

Attention, vous ne pouvez faire aucune supposition sur l'ordre dans lequel les modules sont retournés. Si vous souhaitez retrouver un module spécifique, utilisez Module.findModule() avec un hardwareID ou un nom logique.

Retourne :

un pointeur sur un objet YModule accessible en ligne, ou null lorsque l'énumération est terminée.

module→reboot()module.reboot()module→reboot()[module reboot: ]module.reboot()module.reboot()module.reboot()module.reboot()module.reboot()module.reboot()module→reboot()module.reboot()module.reboot()module.reboot()YModule reboot

Agende un simple redémarrage du module dans un nombre donné de secondes.

js
function reboot(secBeforeReboot)
cpp
int reboot(int secBeforeReboot)
m
-(int) reboot: (int) secBeforeReboot
pas
LongInt reboot(secBeforeReboot: LongInt): LongInt
vb
function reboot(ByVal secBeforeReboot As Integer) As Integer
cs
int reboot(int secBeforeReboot)
java
int reboot(int secBeforeReboot)
uwp
async Task<int> reboot(int secBeforeReboot)
py
reboot(secBeforeReboot)
php
function reboot($secBeforeReboot)
es
async reboot(secBeforeReboot)
dnp
int reboot(int secBeforeReboot)
cp
int reboot(int secBeforeReboot)
cmd
YModule target reboot secBeforeReboot

Paramètres :

secBeforeRebootnombre de secondes avant de redémarrer

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

module→registerBeaconCallback()module.registerBeaconCallback()module→registerBeaconCallback()[module registerBeaconCallback: ]module.registerBeaconCallback()module.registerBeaconCallback()module.registerBeaconCallback()module.registerBeaconCallback()module.registerBeaconCallback()module.registerBeaconCallback()module→registerBeaconCallback()module.registerBeaconCallback()

Enregistre une fonction de callback qui sera appelée à chaque changement d'état de la balise de localisation du module.

js
function registerBeaconCallback(callback)
cpp
int registerBeaconCallback(YModuleBeaconCallback callback)
m
-(int) registerBeaconCallback: (YModuleBeaconCallback) callback
pas
LongInt registerBeaconCallback(callback: TYModuleBeaconCallback): LongInt
vb
function registerBeaconCallback(ByVal callback As YModuleBeaconCallback) As Integer
cs
int registerBeaconCallback(BeaconCallback callback)
java
int registerBeaconCallback(BeaconCallback callback)
uwp
async Task<int> registerBeaconCallback(BeaconCallback callback)
py
registerBeaconCallback(callback)
php
function registerBeaconCallback($callback)
es
async registerBeaconCallback(callback)

La fonction de callback doit accepter deux arguments: l’objet YModule dont la balise a changé, et un entier représentant l'état de la balise de localisation.

Paramètres :

pour supprimer un callback déjà enregistré.
callbackla fonction de callback à rappeler, ou null

module→registerConfigChangeCallback()module.registerConfigChangeCallback()module→registerConfigChangeCallback()[module registerConfigChangeCallback: ]module.registerConfigChangeCallback()module.registerConfigChangeCallback()module.registerConfigChangeCallback()module.registerConfigChangeCallback()module.registerConfigChangeCallback()module.registerConfigChangeCallback()module→registerConfigChangeCallback()module.registerConfigChangeCallback()

Enregistre une fonction de callback qui sera appelée à chaque fois qu'un réglage persistant d'un module est modifié (par exemple changement d'unité de mesure, etc.)

js
function registerConfigChangeCallback(callback)
cpp
int registerConfigChangeCallback(YModuleConfigChangeCallback callback)
m
-(int) registerConfigChangeCallback: (YModuleConfigChangeCallback) callback
pas
LongInt registerConfigChangeCallback(callback: TYModuleConfigChangeCallback): LongInt
vb
function registerConfigChangeCallback(ByVal callback As YModuleConfigChangeCallback) As Integer
cs
int registerConfigChangeCallback(ConfigChangeCallback callback)
java
int registerConfigChangeCallback(ConfigChangeCallback callback)
uwp
async Task<int> registerConfigChangeCallback(ConfigChangeCallback callback)
py
registerConfigChangeCallback(callback)
php
function registerConfigChangeCallback($callback)
es
async registerConfigChangeCallback(callback)

Paramètres :

pour supprimer un callback déja enregistré.
callbackune procédure qui prend un YModule en paramètre, ou null

module→registerLogCallback()module.registerLogCallback()module→registerLogCallback()[module registerLogCallback: ]module.registerLogCallback()module.registerLogCallback()module.registerLogCallback()module.registerLogCallback()module.registerLogCallback()module.registerLogCallback()module→registerLogCallback()module.registerLogCallback()

Enregistre une fonction de callback qui sera appelée à chaque fois le module émet un message de log.

js
function registerLogCallback(callback)
cpp
int registerLogCallback(YModuleLogCallback callback)
m
-(int) registerLogCallback: (YModuleLogCallback) callback
pas
LongInt registerLogCallback(callback: TYModuleLogCallback): LongInt
vb
function registerLogCallback(ByVal callback As YModuleLogCallback) As Integer
cs
int registerLogCallback(LogCallback callback)
java
int registerLogCallback(LogCallback callback)
uwp
async Task<int> registerLogCallback(LogCallback callback)
py
registerLogCallback(callback)
php
function registerLogCallback($callback)
es
async registerLogCallback(callback)

Utile pour débugger le fonctionnement d'un module Yoctopuce.

Paramètres :

On failure, throws an exception or returns a negative error code.
callbackla fonction de callback à rappeler, ou un pointeur nul. La fonction de callback doit accepter deux arguments: l'objet module qui a produit un log, un chaîne de caractère qui contiens le log

module→revertFromFlash()module.revertFromFlash()module→revertFromFlash()[module revertFromFlash]module.revertFromFlash()module.revertFromFlash()module.revertFromFlash()module.revertFromFlash()module.revertFromFlash()module.revertFromFlash()module→revertFromFlash()module.revertFromFlash()module.revertFromFlash()module.revertFromFlash()YModule revertFromFlash

Recharge les réglages stockés dans le mémoire non volatile du module, comme à la mise sous tension du module.

js
function revertFromFlash()
cpp
int revertFromFlash()
m
-(int) revertFromFlash
pas
LongInt revertFromFlash(): LongInt
vb
function revertFromFlash() As Integer
cs
int revertFromFlash()
java
int revertFromFlash()
uwp
async Task<int> revertFromFlash()
py
revertFromFlash()
php
function revertFromFlash()
es
async revertFromFlash()
dnp
int revertFromFlash()
cp
int revertFromFlash()
cmd
YModule target revertFromFlash

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

module→saveToFlash()module.saveToFlash()module→saveToFlash()[module saveToFlash]module.saveToFlash()module.saveToFlash()module.saveToFlash()module.saveToFlash()module.saveToFlash()module.saveToFlash()module→saveToFlash()module.saveToFlash()module.saveToFlash()module.saveToFlash()YModule saveToFlash

Sauve les réglages courants dans la mémoire non volatile du module.

js
function saveToFlash()
cpp
int saveToFlash()
m
-(int) saveToFlash
pas
LongInt saveToFlash(): LongInt
vb
function saveToFlash() As Integer
cs
int saveToFlash()
java
int saveToFlash()
uwp
async Task<int> saveToFlash()
py
saveToFlash()
php
function saveToFlash()
es
async saveToFlash()
dnp
int saveToFlash()
cp
int saveToFlash()
cmd
YModule target saveToFlash

Attention le nombre total de sauvegardes possibles durant la vie du module est limité (environ 100000 cycles). N'appelez pas cette fonction dans une boucle.

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

module→set_allSettings()
module→setAllSettings()
module.set_allSettings()module→set_allSettings()[module setAllSettings: ]module.set_allSettings()module.set_allSettings()module.set_allSettings()module.set_allSettings()module.set_allSettings()module.set_allSettings()module→set_allSettings()module.set_allSettings()module.set_allSettings()module.set_allSettings()YModule set_allSettings

Rétablit tous les paramètres du module.

js
function set_allSettings(settings)
cpp
int set_allSettings(string settings)
m
-(int) setAllSettings: (NSData*) settings
pas
LongInt set_allSettings(settings: TByteArray): LongInt
vb
procedure set_allSettings(ByVal settings As Byte()
cs
int set_allSettings(byte[] settings)
java
int set_allSettings(byte[] settings)
uwp
async Task<int> set_allSettings(byte[] settings)
py
set_allSettings(settings)
php
function set_allSettings($settings)
es
async set_allSettings(settings)
dnp
int set_allSettings(byte[] settings)
cp
int set_allSettings(string settings)
cmd
YModule target set_allSettings settings

Utile pour restorer les noms logiques et les calibrations du module depuis une sauvgarde. N'oubliez pas d'appeler la méthode saveToFlash() du module si les réglages doivent être préservés.

Paramètres :

settingsun objet binaire avec touts les paramètres

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

module→set_allSettingsAndFiles()
module→setAllSettingsAndFiles()
module.set_allSettingsAndFiles()module→set_allSettingsAndFiles()[module setAllSettingsAndFiles: ]module.set_allSettingsAndFiles()module.set_allSettingsAndFiles()module.set_allSettingsAndFiles()module.set_allSettingsAndFiles()module.set_allSettingsAndFiles()module.set_allSettingsAndFiles()module→set_allSettingsAndFiles()module.set_allSettingsAndFiles()module.set_allSettingsAndFiles()module.set_allSettingsAndFiles()YModule set_allSettingsAndFiles

Rétablit tous les paramètres de configuration et fichiers sur un module.

js
function set_allSettingsAndFiles(settings)
cpp
int set_allSettingsAndFiles(string settings)
m
-(int) setAllSettingsAndFiles: (NSData*) settings
pas
LongInt set_allSettingsAndFiles(settings: TByteArray): LongInt
vb
procedure set_allSettingsAndFiles(ByVal settings As Byte()
cs
int set_allSettingsAndFiles(byte[] settings)
java
int set_allSettingsAndFiles(byte[] settings)
uwp
async Task<int> set_allSettingsAndFiles(byte[] settings)
py
set_allSettingsAndFiles(settings)
php
function set_allSettingsAndFiles($settings)
es
async set_allSettingsAndFiles(settings)
dnp
int set_allSettingsAndFiles(byte[] settings)
cp
int set_allSettingsAndFiles(string settings)
cmd
YModule target set_allSettingsAndFiles settings

Cette méthode est utile pour récupérer les noms logiques, les calibrations, les fichiers uploadés, etc. du module depuis une sauvgarde. N'oubliez pas d'appeler la méthode saveToFlash() du module si les réglages doivent être préservés.

Paramètres :

settingsun buffer binaire avec touts les paramètres

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

module→set_beacon()
module→setBeacon()
module.set_beacon()module→set_beacon()[module setBeacon: ]module.set_beacon()module.set_beacon()module.set_beacon()module.set_beacon()module.set_beacon()module.set_beacon()module→set_beacon()module.set_beacon()module.set_beacon()module.set_beacon()YModule set_beacon

Allume ou éteint la balise de localisation du module.

js
function set_beacon(newval)
cpp
int set_beacon(Y_BEACON_enum newval)
m
-(int) setBeacon: (Y_BEACON_enum) newval
pas
integer set_beacon(newval: Integer): integer
vb
function set_beacon(ByVal newval As Integer) As Integer
cs
int set_beacon(int newval)
java
int set_beacon(int newval)
uwp
async Task<int> set_beacon(int newval)
py
set_beacon(newval)
php
function set_beacon($newval)
es
async set_beacon(newval)
dnp
int set_beacon(int newval)
cp
int set_beacon(int newval)
cmd
YModule target set_beacon newval

Paramètres :

newvalsoit Y_BEACON_OFF, soit Y_BEACON_ON

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

module→set_logicalName()
module→setLogicalName()
module.set_logicalName()module→set_logicalName()[module setLogicalName: ]module.set_logicalName()module.set_logicalName()module.set_logicalName()module.set_logicalName()module.set_logicalName()module.set_logicalName()module→set_logicalName()module.set_logicalName()module.set_logicalName()module.set_logicalName()YModule set_logicalName

Change le nom logique du module.

js
function set_logicalName(newval)
cpp
int set_logicalName(string newval)
m
-(int) setLogicalName: (NSString*) newval
pas
integer set_logicalName(newval: string): integer
vb
function set_logicalName(ByVal newval As String) As Integer
cs
int set_logicalName(string newval)
java
int set_logicalName(String newval)
uwp
async Task<int> set_logicalName(string newval)
py
set_logicalName(newval)
php
function set_logicalName($newval)
es
async set_logicalName(newval)
dnp
int set_logicalName(string newval)
cp
int set_logicalName(string newval)
cmd
YModule target set_logicalName newval

Vous pouvez utiliser yCheckLogicalName() pour vérifier si votre paramètre est valide. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Paramètres :

newvalune chaîne de caractères

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

module→set_luminosity()
module→setLuminosity()
module.set_luminosity()module→set_luminosity()[module setLuminosity: ]module.set_luminosity()module.set_luminosity()module.set_luminosity()module.set_luminosity()module.set_luminosity()module.set_luminosity()module→set_luminosity()module.set_luminosity()module.set_luminosity()module.set_luminosity()YModule set_luminosity

Modifie la luminosité des leds informatives du module.

js
function set_luminosity(newval)
cpp
int set_luminosity(int newval)
m
-(int) setLuminosity: (int) newval
pas
integer set_luminosity(newval: LongInt): integer
vb
function set_luminosity(ByVal newval As Integer) As Integer
cs
int set_luminosity(int newval)
java
int set_luminosity(int newval)
uwp
async Task<int> set_luminosity(int newval)
py
set_luminosity(newval)
php
function set_luminosity($newval)
es
async set_luminosity(newval)
dnp
int set_luminosity(int newval)
cp
int set_luminosity(int newval)
cmd
YModule target set_luminosity newval

Le paramêtre est une valeur entre 0 et 100. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Paramètres :

newvalun entier représentant la luminosité des leds informatives du module

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

module→set_userData()
module→setUserData()
module.set_userData()module→set_userData()[module setUserData: ]module.set_userData()module.set_userData()module.set_userData()module.set_userData()module.set_userData()module→set_userData()module.set_userData()

Enregistre un contexte libre dans l'attribut userData de la fonction, afin de le retrouver plus tard à l'aide de la méthode get_userData.

js
function set_userData(data)
cpp
void set_userData(void * data)
m
-(void) setUserData: (id) data
pas
set_userData(data: Tobject)
vb
procedure set_userData(ByVal data As Object)
cs
void set_userData(object data)
java
void set_userData(Object data)
py
set_userData(data)
php
function set_userData($data)
es
async set_userData(data)

Cet attribut n'es pas utilisé directement par l'API. Il est à la disposition de l'appelant pour stocker un contexte.

Paramètres :

dataobjet quelconque à mémoriser

module→set_userVar()
module→setUserVar()
module.set_userVar()module→set_userVar()[module setUserVar: ]module.set_userVar()module.set_userVar()module.set_userVar()module.set_userVar()module.set_userVar()module.set_userVar()module→set_userVar()module.set_userVar()module.set_userVar()module.set_userVar()YModule set_userVar

Stocke une valeur 32 bits dans la mémoire volatile du module.

js
function set_userVar(newval)
cpp
int set_userVar(int newval)
m
-(int) setUserVar: (int) newval
pas
integer set_userVar(newval: LongInt): integer
vb
function set_userVar(ByVal newval As Integer) As Integer
cs
int set_userVar(int newval)
java
int set_userVar(int newval)
uwp
async Task<int> set_userVar(int newval)
py
set_userVar(newval)
php
function set_userVar($newval)
es
async set_userVar(newval)
dnp
int set_userVar(int newval)
cp
int set_userVar(int newval)
cmd
YModule target set_userVar newval

Cet attribut est à la disposition du programmeur pour y stocker par exemple une variable d'état. Au démarrage du module (ou après un redémarrage), la valeur est toujours zéro.

Paramètres :

newvalun entier

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

module→triggerConfigChangeCallback()module.triggerConfigChangeCallback()module→triggerConfigChangeCallback()[module triggerConfigChangeCallback]module.triggerConfigChangeCallback()module.triggerConfigChangeCallback()module.triggerConfigChangeCallback()module.triggerConfigChangeCallback()module.triggerConfigChangeCallback()module.triggerConfigChangeCallback()module→triggerConfigChangeCallback()module.triggerConfigChangeCallback()module.triggerConfigChangeCallback()module.triggerConfigChangeCallback()YModule triggerConfigChangeCallback

Force le déclanchement d'un callback de changement de configuration, afin de vérifier si ils sont disponibles ou pas.

js
function triggerConfigChangeCallback()
cpp
int triggerConfigChangeCallback()
m
-(int) triggerConfigChangeCallback
pas
LongInt triggerConfigChangeCallback(): LongInt
vb
function triggerConfigChangeCallback() As Integer
cs
int triggerConfigChangeCallback()
java
int triggerConfigChangeCallback()
uwp
async Task<int> triggerConfigChangeCallback()
py
triggerConfigChangeCallback()
php
function triggerConfigChangeCallback()
es
async triggerConfigChangeCallback()
dnp
int triggerConfigChangeCallback()
cp
int triggerConfigChangeCallback()
cmd
YModule target triggerConfigChangeCallback

module→triggerFirmwareUpdate()module.triggerFirmwareUpdate()module→triggerFirmwareUpdate()[module triggerFirmwareUpdate: ]module.triggerFirmwareUpdate()module.triggerFirmwareUpdate()module.triggerFirmwareUpdate()module.triggerFirmwareUpdate()module.triggerFirmwareUpdate()module.triggerFirmwareUpdate()module→triggerFirmwareUpdate()module.triggerFirmwareUpdate()module.triggerFirmwareUpdate()module.triggerFirmwareUpdate()YModule triggerFirmwareUpdate

Agende un redémarrage du module en mode spécial de reprogrammation du logiciel embarqué.

js
function triggerFirmwareUpdate(secBeforeReboot)
cpp
int triggerFirmwareUpdate(int secBeforeReboot)
m
-(int) triggerFirmwareUpdate: (int) secBeforeReboot
pas
LongInt triggerFirmwareUpdate(secBeforeReboot: LongInt): LongInt
vb
function triggerFirmwareUpdate(ByVal secBeforeReboot As Integer) As Integer
cs
int triggerFirmwareUpdate(int secBeforeReboot)
java
int triggerFirmwareUpdate(int secBeforeReboot)
uwp
async Task<int> triggerFirmwareUpdate(int secBeforeReboot)
py
triggerFirmwareUpdate(secBeforeReboot)
php
function triggerFirmwareUpdate($secBeforeReboot)
es
async triggerFirmwareUpdate(secBeforeReboot)
dnp
int triggerFirmwareUpdate(int secBeforeReboot)
cp
int triggerFirmwareUpdate(int secBeforeReboot)
cmd
YModule target triggerFirmwareUpdate secBeforeReboot

Paramètres :

secBeforeRebootnombre de secondes avant de redémarrer

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

module→updateFirmware()module.updateFirmware()module→updateFirmware()[module updateFirmware: ]module.updateFirmware()module.updateFirmware()module.updateFirmware()module.updateFirmware()module.updateFirmware()module.updateFirmware()module→updateFirmware()module.updateFirmware()module.updateFirmware()module.updateFirmware()YModule updateFirmware

Prepare une mise à jour de firmware du module.

js
function updateFirmware(path)
cpp
YFirmwareUpdate updateFirmware(string path)
m
-(YFirmwareUpdate*) updateFirmware: (NSString*) path
pas
TYFirmwareUpdate updateFirmware(path: string): TYFirmwareUpdate
vb
function updateFirmware(ByVal path As String) As YFirmwareUpdate
cs
YFirmwareUpdate updateFirmware(string path)
java
YFirmwareUpdate updateFirmware(String path)
uwp
async Task<YFirmwareUpdate> updateFirmware(string path)
py
updateFirmware(path)
php
function updateFirmware($path)
es
async updateFirmware(path)
dnp
YFirmwareUpdateProxy updateFirmware(string path)
cp
YFirmwareUpdateProxy* updateFirmware(string path)
cmd
YModule target updateFirmware path

Cette méthode retourne un object YFirmwareUpdate qui est utilisé pour mettre à jour le firmware du module.

Paramètres :

pathle path du fichier .byn à utiliser

Retourne :

un object YFirmwareUpdate ou NULL en cas d'erreur

module→updateFirmwareEx()module.updateFirmwareEx()module→updateFirmwareEx()[module updateFirmwareEx: ]module.updateFirmwareEx()module.updateFirmwareEx()module.updateFirmwareEx()module.updateFirmwareEx()module.updateFirmwareEx()module.updateFirmwareEx()module→updateFirmwareEx()module.updateFirmwareEx()module.updateFirmwareEx()module.updateFirmwareEx()YModule updateFirmwareEx

Prepare une mise à jour de firmware du module.

js
function updateFirmwareEx(path, force)
cpp
YFirmwareUpdate updateFirmwareEx(string path, bool force)
m
-(YFirmwareUpdate*) updateFirmwareEx: (NSString*) path
  : (bool) force
pas
TYFirmwareUpdate updateFirmwareEx(path: string, force: boolean): TYFirmwareUpdate
vb
function updateFirmwareEx(ByVal path As String,
  ByVal force As Boolean) As YFirmwareUpdate
cs
YFirmwareUpdate updateFirmwareEx(string path, bool force)
java
YFirmwareUpdate updateFirmwareEx(String path, boolean force)
uwp
async Task<YFirmwareUpdate> updateFirmwareEx(string path, bool force)
py
updateFirmwareEx(path, force)
php
function updateFirmwareEx($path, $force)
es
async updateFirmwareEx(path, force)
dnp
YFirmwareUpdateProxy updateFirmwareEx(string path, bool force)
cp
YFirmwareUpdateProxy* updateFirmwareEx(string path,
  bool force)
cmd
YModule target updateFirmwareEx path force

Cette méthode retourne un object YFirmwareUpdate qui est utilisé pour mettre à jour le firmware du module.

Paramètres :

pathle path du fichier .byn à utiliser
forcevrai pour forceer la mise à jour même si un prérequis ne semble pas satisfait

Retourne :

un object YFirmwareUpdate ou NULL en cas d'erreur

module→wait_async()module.wait_async()module.wait_async()

Attend que toutes les commandes asynchrones en cours d'exécution sur le module soient terminées, et appelle le callback passé en paramètre.

js
function wait_async(callback, context)
es
wait_async(callback, context)

La fonction callback peut donc librement utiliser des fonctions synchrones ou asynchrones, sans risquer de bloquer la machine virtuelle Javascript.

Paramètres :

callbackfonction de callback qui sera appelée dès que toutes les commandes en cours d'exécution sur le module seront terminées La fonction callback reçoit deux arguments: le contexte fourni par l'appelant et l'objet fonction concerné.
contextcontexte fourni par l'appelant, et qui sera passé tel-quel à la fonction de callback

Retourne :

rien du tout.

24.3. La classe YSerialPort

Interface pour intéragir avec les ports série, disponibles par exemple dans le Yocto-RS232, le Yocto-RS485-V2 et le Yocto-Serial

La classe YSerialPort permet de piloter entièrement un module d'interface série Yoctopuce. Elle permet d'envoyer et de recevoir des données, et de configurer les paramètres de transmission (vitesse, nombre de bits, parité, contrôle de flux et protocole). Notez que les interfaces série Yoctopuce ne sont pas visibles comme des ports COM virtuels. Ils sont faits pour être utilisés comme tous les autres modules Yoctopuce.

Pour utiliser les fonctions décrites ici, vous devez inclure:

js
<script type='text/javascript' src='yocto_serialport.js'></script>
cpp
#include "yocto_serialport.h"
m
#import "yocto_serialport.h"
pas
uses yocto_serialport;
vb
yocto_serialport.vb
cs
yocto_serialport.cs
java
import com.yoctopuce.YoctoAPI.YSerialPort;
uwp
import com.yoctopuce.YoctoAPI.YSerialPort;
py
from yocto_serialport import *
php
require_once('yocto_serialport.php');
es
in HTML: <script src="../../lib/yocto_serialport.js"></script>
in node.js: require('yoctolib-es2017/yocto_serialport.js');
dnp
import YoctoProxyAPI.YSerialPortProxy
cp
#include "yocto_serialport_proxy.h"
vi
YSerialPort.vi
ml
import YoctoProxyAPI.YSerialPortProxy
Fonction globales
YSerialPort.FindSerialPort(func)

Permet de retrouver un port série d'après un identifiant donné.

YSerialPort.FindSerialPortInContext(yctx, func)

Permet de retrouver un port série d'après un identifiant donné dans un Context YAPI.

YSerialPort.FirstSerialPort()

Commence l'énumération des ports série accessibles par la librairie.

YSerialPort.FirstSerialPortInContext(yctx)

Commence l'énumération des ports série accessibles par la librairie.

YSerialPort.GetSimilarFunctions()

Enumère toutes les fonctions de type SerialPort disponibles sur les modules actuellement joignables par la librairie, et retourne leurs identifiants matériels uniques (hardwareId).

Propriétés des objets YSerialPortProxy
serialport→AdvertisedValue [lecture seule]

Courte chaîne de caractères représentant l'état courant de la fonction.

serialport→FriendlyName [lecture seule]

Identifiant global de la fonction au format NOM_MODULE.NOM_FONCTION.

serialport→FunctionId [lecture seule]

Identifiant matériel du port série, sans référence au module.

serialport→HardwareId [lecture seule]

Identifiant matériel unique de la fonction au format SERIAL.FUNCTIONID.

serialport→IsOnline [lecture seule]

Vérifie si le module hébergeant la fonction est joignable, sans déclencher d'erreur.

serialport→JobMaxSize [lecture seule]

Taille maximale d'un fichier job.

serialport→JobMaxTask [lecture seule]

Nombre maximal de tâches dans un job supporté par le module.

serialport→LogicalName [modifiable]

Nom logique de la fonction.

serialport→Protocol [modifiable]

Type de protocole utilisé sur la communication série, sous forme d'une chaîne de caractères.

serialport→SerialMode [modifiable]

S paramètres de communication du port, sous forme d'une chaîne de caractères du type "9600,8N1".

serialport→SerialNumber [lecture seule]

Numéro de série du module, préprogrammé en usine.

serialport→StartupJob [modifiable]

Nom du fichier de tâches à exécuter au démarrage du module.

serialport→VoltageLevel [modifiable]

Niveau de tension utilisé par le module sur le port série.

Méthodes des objets YSerialPort
serialport→clearCache()

Invalide le cache.

serialport→describe()

Retourne un court texte décrivant de manière non-ambigüe l'instance du port série au format TYPE(NAME)=SERIAL.FUNCTIONID.

serialport→get_CTS()

Lit l'état de la ligne CTS.

serialport→get_advertisedValue()

Retourne la valeur courante du port série (pas plus de 6 caractères).

serialport→get_currentJob()

Retourne le nom du fichier de tâches actif en ce moment.

serialport→get_errCount()

Retourne le nombre d'erreurs de communication détectées depuis la dernière mise à zéro.

serialport→get_errorMessage()

Retourne le message correspondant à la dernière erreur survenue lors de l'utilisation du port série.

serialport→get_errorType()

Retourne le code d'erreur correspondant à la dernière erreur survenue lors de l'utilisation du port série.

serialport→get_friendlyName()

Retourne un identifiant global du port série au format NOM_MODULE.NOM_FONCTION.

serialport→get_functionDescriptor()

Retourne un identifiant unique de type YFUN_DESCR correspondant à la fonction.

serialport→get_functionId()

Retourne l'identifiant matériel du port série, sans référence au module.

serialport→get_hardwareId()

Retourne l'identifiant matériel unique du port série au format SERIAL.FUNCTIONID.

serialport→get_jobMaxSize()

Retourne la taille maximale d'un fichier job.

serialport→get_jobMaxTask()

Retourne le nombre maximal de tâches dans un job supporté par le module.

serialport→get_lastMsg()

Retourne le dernier message reçu (pour les protocoles de type Line, Frame et Modbus).

serialport→get_logicalName()

Retourne le nom logique du port série.

serialport→get_module()

Retourne l'objet YModule correspondant au module Yoctopuce qui héberge la fonction.

serialport→get_module_async(callback, context)

Retourne l'objet YModule correspondant au module Yoctopuce qui héberge la fonction.

serialport→get_protocol()

Retourne le type de protocole utilisé sur la communication série, sous forme d'une chaîne de caractères.

serialport→get_rxCount()

Retourne le nombre d'octets reçus depuis la dernière mise à zéro.

serialport→get_rxMsgCount()

Retourne le nombre de messages reçus depuis la dernière mise à zéro.

serialport→get_serialMode()

Retourne les paramètres de communication du port, sous forme d'une chaîne de caractères du type "9600,8N1".

serialport→get_serialNumber()

Retourne le numéro de série du module, préprogrammé en usine.

serialport→get_startupJob()

Retourne le nom du fichier de tâches à exécuter au démarrage du module.

serialport→get_txCount()

Retourne le nombre d'octets transmis depuis la dernière mise à zéro.

serialport→get_txMsgCount()

Retourne le nombre de messages envoyés depuis la dernière mise à zéro.

serialport→get_userData()

Retourne le contenu de l'attribut userData, précédemment stocké à l'aide de la méthode set_userData.

serialport→get_voltageLevel()

Retourne le niveau de tension utilisé par le module sur le port série.

serialport→isOnline()

Vérifie si le module hébergeant le port série est joignable, sans déclencher d'erreur.

serialport→isOnline_async(callback, context)

Vérifie si le module hébergeant le port série est joignable, sans déclencher d'erreur.

serialport→isReadOnly()

Test si la fonction est en lecture seule.

serialport→load(msValidity)

Met en cache les valeurs courantes du port série, avec une durée de validité spécifiée.

serialport→loadAttribute(attrName)

Retourne la valeur actuelle d'un attribut spécifique de la fonction, sous forme de texte, le plus rapidement possible mais sans passer par le cache.

serialport→load_async(msValidity, callback, context)

Met en cache les valeurs courantes du port série, avec une durée de validité spécifiée.

serialport→modbusReadBits(slaveNo, pduAddr, nBits)

Lit un ou plusieurs bits contigus depuis un périphérique MODBUS.

serialport→modbusReadInputBits(slaveNo, pduAddr, nBits)

Lit un ou plusieurs bits contigus depuis un périphérique MODBUS.

serialport→modbusReadInputRegisters(slaveNo, pduAddr, nWords)

Lit un ou plusieurs registres d'entrée (registre enlecture seule) depuis un périphérique MODBUS.

serialport→modbusReadRegisters(slaveNo, pduAddr, nWords)

Lit un ou plusieurs registres interne depuis un périphérique MODBUS.

serialport→modbusWriteAndReadRegisters(slaveNo, pduWriteAddr, values, pduReadAddr, nReadWords)

Modifie l'état de plusieurs bits (ou relais) contigus sur un périphérique MODBUS.

serialport→modbusWriteBit(slaveNo, pduAddr, value)

Modifie l'état d'un seul bit (ou relais) sur un périphérique MODBUS.

serialport→modbusWriteBits(slaveNo, pduAddr, bits)

Modifie l'état de plusieurs bits (ou relais) contigus sur un périphérique MODBUS.

serialport→modbusWriteRegister(slaveNo, pduAddr, value)

Modifie la valeur d'un registre interne 16 bits sur un périphérique MODBUS.

serialport→modbusWriteRegisters(slaveNo, pduAddr, values)

Modifie l'état de plusieurs registres internes 16 bits contigus sur un périphérique MODBUS.

serialport→muteValueCallbacks()

Désactive l'envoi de chaque changement de la valeur publiée au hub parent.

serialport→nextSerialPort()

Continue l'énumération des ports série commencée à l'aide de yFirstSerialPort() Attention, vous ne pouvez faire aucune supposition sur l'ordre dans lequel les ports série sont retournés.

serialport→queryHex(hexString, maxWait)

Envoie un message binaire sur le port série, et lit la réponse reçue.

serialport→queryLine(query, maxWait)

Envoie un message sous forme de ligne de texte sur le port série, et lit la réponse reçue.

serialport→queryMODBUS(slaveNo, pduBytes)

Envoie un message à un périphérique MODBUS esclave connecté au port série, et lit la réponse reçue.

serialport→readArray(nChars)

Lit le contenu du tampon de réception sous forme de liste d'octets, à partir de la position courante dans le flux de donnée.

serialport→readBin(nChars)

Lit le contenu du tampon de réception sous forme d'objet binaire, à partir de la position courante dans le flux de donnée.

serialport→readByte()

Lit le prochain byte dans le tampon de réception, à partir de la position courante dans le flux de donnée.

serialport→readHex(nBytes)

Lit le contenu du tampon de réception sous forme hexadécimale, à partir de la position courante dans le flux de donnée.

serialport→readLine()

Lit la prochaine ligne (ou le prochain message) du tampon de réception, à partir de la position courante dans le flux de donnée.

serialport→readMessages(pattern, maxWait)

Cherche les messages entrants dans le tampon de réception correspondant à un format donné, à partir de la position courante.

serialport→readStr(nChars)

Lit le contenu du tampon de réception sous forme de string, à partir de la position courante dans le flux de donnée.

serialport→read_avail()

Retourne le nombre de bytes prêts à être lus dans le tampon de réception, depuis la position courante dans le flux de donnée utilisé par l'objet d'API.

serialport→read_seek(absPos)

Change le pointeur de position courante dans le flux de donnée à la valeur spécifiée.

serialport→read_tell()

Retourne la valeur actuelle du pointeur de position courante dans le flux de donnée utilisé par l'objet d'API.

serialport→registerValueCallback(callback)

Enregistre la fonction de callback qui est appelée à chaque changement de la valeur publiée.

serialport→reset()

Remet à zéro tous les compteurs et efface les tampons.

serialport→selectJob(jobfile)

Charge et execute le fichier de tâche spécifié.

serialport→set_RTS(val)

Change manuellement l'état de la ligne RTS.

serialport→set_currentJob(newval)

Sélectionne un fichier de tâches pour exécution immédiate.

serialport→set_logicalName(newval)

Modifie le nom logique du port série.

serialport→set_protocol(newval)

Modifie le type de protocol utilisé sur la communication série.

serialport→set_serialMode(newval)

Modifie les paramètres de communication du port, sous forme d'une chaîne de caractères du type "9600,8N1".

serialport→set_startupJob(newval)

Modifie le nom du job à exécuter au démarrage du module.

serialport→set_userData(data)

Enregistre un contexte libre dans l'attribut userData de la fonction, afin de le retrouver plus tard à l'aide de la méthode get_userData.

serialport→set_voltageLevel(newval)

Modifie le niveau de tension utilisé par le module sur le port série.

serialport→snoopMessages(maxWait)

Récupère les messages dans la mémoire tampon du module série (dans les deux directions), à partir de la position courante.

serialport→unmuteValueCallbacks()

Réactive l'envoi de chaque changement de la valeur publiée au hub parent.

serialport→uploadJob(jobfile, jsonDef)

Sauvegarde une définition de tâche (au format JSON) dans un fichier.

serialport→wait_async(callback, context)

Attend que toutes les commandes asynchrones en cours d'exécution sur le module soient terminées, et appelle le callback passé en paramètre.

serialport→writeArray(byteList)

Envoie une séquence d'octets (fournie sous forme d'une liste) sur le port série.

serialport→writeBin(buff)

Envoie un objet binaire tel quel sur le port série.

serialport→writeByte(code)

Envoie un unique byte sur le port série.

serialport→writeHex(hexString)

Envoie une séquence d'octets (fournie sous forme de chaîne hexadécimale) sur le port série.

serialport→writeLine(text)

Envoie une chaîne de caractères sur le port série, suivie d'un saut de ligne (CR LF).

serialport→writeMODBUS(hexString)

Envoie une commande MODBUS (fournie sous forme de chaîne hexadécimale) sur le port série.

serialport→writeStr(text)

Envoie une chaîne de caractères telle quelle sur le port série.

serialport→writeStxEtx(text)

Envoie une chaîne de caractères sur le port série, précédée d'un code STX et suivie d'un code ETX.

YSerialPort.FindSerialPort()
YSerialPort.FindSerialPort()
yFindSerialPort()yFindSerialPort()[YSerialPort FindSerialPort: ]yFindSerialPort()yFindSerialPort()YSerialPort.FindSerialPort()YSerialPort.FindSerialPort()YSerialPort.FindSerialPort()YSerialPort.FindSerialPort()yFindSerialPort()YSerialPort.FindSerialPort()YSerialPort.FindSerialPort()YSerialPort.FindSerialPort()

Permet de retrouver un port série d'après un identifiant donné.

js
function yFindSerialPort(func)
cpp
YSerialPort* yFindSerialPort(string func)
m
+(YSerialPort*) FindSerialPort: (NSString*) func
pas
TYSerialPort yFindSerialPort(func: string): TYSerialPort
vb
function yFindSerialPort(ByVal func As String) As YSerialPort
cs
static YSerialPort FindSerialPort(string func)
java
static YSerialPort FindSerialPort(String func)
uwp
static YSerialPort FindSerialPort(string func)
py
FindSerialPort(func)
php
function yFindSerialPort($func)
es
static FindSerialPort(func)
dnp
static YSerialPortProxy FindSerialPort(string func)
cp
static YSerialPortProxy * FindSerialPort(string func)

L'identifiant peut être spécifié sous plusieurs formes:

Cette fonction n'exige pas que le port série soit en ligne au moment ou elle est appelée, l'objet retourné sera néanmoins valide. Utiliser la méthode YSerialPort.isOnline() pour tester si le port série est utilisable à un moment donné. En cas d'ambiguïté lorsqu'on fait une recherche par nom logique, aucune erreur ne sera notifiée: la première instance trouvée sera renvoyée. La recherche se fait d'abord par nom matériel, puis par nom logique.

Si un appel à la méthode is_online() de cet objet renvoie FAUX alors que vous êtes sûr que le module correspondant est bien branché, vérifiez que vous n'avez pas oublié d'appeler registerHub() à l'initialisation de de l'application.

Paramètres :

funcune chaîne de caractères qui référence le port série sans ambiguïté, par exemple RS232MK1.serialPort.

Retourne :

un objet de classe YSerialPort qui permet ensuite de contrôler le port série.

YSerialPort.FindSerialPortInContext()
YSerialPort.FindSerialPortInContext()
YSerialPort.FindSerialPortInContext()YSerialPort.FindSerialPortInContext()YSerialPort.FindSerialPortInContext()

Permet de retrouver un port série d'après un identifiant donné dans un Context YAPI.

java
static YSerialPort FindSerialPortInContext(YAPIContext yctx,
  String func)
uwp
static YSerialPort FindSerialPortInContext(YAPIContext yctx,
  string func)
es
static FindSerialPortInContext(yctx, func)

L'identifiant peut être spécifié sous plusieurs formes:

Cette fonction n'exige pas que le port série soit en ligne au moment ou elle est appelée, l'objet retourné sera néanmoins valide. Utiliser la méthode YSerialPort.isOnline() pour tester si le port série est utilisable à un moment donné. En cas d'ambiguïté lorsqu'on fait une recherche par nom logique, aucune erreur ne sera notifiée: la première instance trouvée sera renvoyée. La recherche se fait d'abord par nom matériel, puis par nom logique.

Paramètres :

yctxun contexte YAPI
funcune chaîne de caractères qui référence le port série sans ambiguïté, par exemple RS232MK1.serialPort.

Retourne :

un objet de classe YSerialPort qui permet ensuite de contrôler le port série.

YSerialPort.FirstSerialPort()
YSerialPort.FirstSerialPort()
yFirstSerialPort()yFirstSerialPort()[YSerialPort FirstSerialPort]yFirstSerialPort()yFirstSerialPort()YSerialPort.FirstSerialPort()YSerialPort.FirstSerialPort()YSerialPort.FirstSerialPort()YSerialPort.FirstSerialPort()yFirstSerialPort()YSerialPort.FirstSerialPort()

Commence l'énumération des ports série accessibles par la librairie.

js
function yFirstSerialPort()
cpp
YSerialPort * yFirstSerialPort()
m
+(YSerialPort*) FirstSerialPort
pas
TYSerialPort yFirstSerialPort(): TYSerialPort
vb
function yFirstSerialPort() As YSerialPort
cs
static YSerialPort FirstSerialPort()
java
static YSerialPort FirstSerialPort()
uwp
static YSerialPort FirstSerialPort()
py
FirstSerialPort()
php
function yFirstSerialPort()
es
static FirstSerialPort()

Utiliser la fonction YSerialPort.nextSerialPort() pour itérer sur les autres ports série.

Retourne :

un pointeur sur un objet YSerialPort, correspondant au premier port série accessible en ligne, ou null si il n'y a pas de ports série disponibles.

YSerialPort.FirstSerialPortInContext()
YSerialPort.FirstSerialPortInContext()
YSerialPort.FirstSerialPortInContext()YSerialPort.FirstSerialPortInContext()YSerialPort.FirstSerialPortInContext()

Commence l'énumération des ports série accessibles par la librairie.

java
static YSerialPort FirstSerialPortInContext(YAPIContext yctx)
uwp
static YSerialPort FirstSerialPortInContext(YAPIContext yctx)
es
static FirstSerialPortInContext(yctx)

Utiliser la fonction YSerialPort.nextSerialPort() pour itérer sur les autres ports série.

Paramètres :

yctxun contexte YAPI.

Retourne :

un pointeur sur un objet YSerialPort, correspondant au premier port série accessible en ligne, ou null si il n'y a pas de ports série disponibles.

YSerialPort.GetSimilarFunctions()
YSerialPort.GetSimilarFunctions()
YSerialPort.GetSimilarFunctions()YSerialPort.GetSimilarFunctions()

Enumère toutes les fonctions de type SerialPort disponibles sur les modules actuellement joignables par la librairie, et retourne leurs identifiants matériels uniques (hardwareId).

dnp
static new string[] GetSimilarFunctions()
cp
static vector<string> GetSimilarFunctions()

Chaque chaîne retournée peut être passée en argument à la méthode YSerialPort.FindSerialPort pour obtenir une objet permettant d'intéragir avec le module correspondant.

Retourne :

un tableau de chaînes de caractères, contenant les identifiants matériels de chaque fonction disponible trouvée.

serialport→AdvertisedValueserialport.AdvertisedValue

Courte chaîne de caractères représentant l'état courant de la fonction.

dnp
string AdvertisedValue

serialport→FriendlyNameserialport.FriendlyName

Identifiant global de la fonction au format NOM_MODULE.NOM_FONCTION.

dnp
string FriendlyName

Le chaîne retournée utilise soit les noms logiques du module et de la fonction si ils sont définis, soit respectivement le numéro de série du module et l'identifant matériel de la fonction (par exemple: MyCustomName.relay1)

serialport→FunctionIdserialport.FunctionId

Identifiant matériel du port série, sans référence au module.

dnp
string FunctionId

Par example relay1.

serialport→HardwareIdserialport.HardwareId

Identifiant matériel unique de la fonction au format SERIAL.FUNCTIONID.

dnp
string HardwareId

L'identifiant unique est composé du numéro de série du module et de l'identifiant matériel de la fonction (par example RELAYLO1-123456.relay1).

serialport→IsOnlineserialport.IsOnline

Vérifie si le module hébergeant la fonction est joignable, sans déclencher d'erreur.

dnp
bool IsOnline

Si les valeurs des attributs en cache de la fonction sont valides au moment de l'appel, le module est considéré joignable. Cette fonction ne cause en aucun cas d'exception, quelle que soit l'erreur qui pourrait se produire lors de la vérification de joignabilité.

serialport→JobMaxSizeserialport.JobMaxSize

Taille maximale d'un fichier job.

dnp
int JobMaxSize

serialport→JobMaxTaskserialport.JobMaxTask

Nombre maximal de tâches dans un job supporté par le module.

dnp
int JobMaxTask

serialport→LogicalNameserialport.LogicalName

Nom logique de la fonction.

dnp
string LogicalName

Modifiable. Vous pouvez utiliser yCheckLogicalName() pour vérifier si votre paramètre est valide. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

serialport→Protocolserialport.Protocol

Type de protocole utilisé sur la communication série, sous forme d'une chaîne de caractères.

dnp
string Protocol

Les valeurs possibles sont "Line" pour des messages ASCII séparés par des retours de ligne, "StxEtx" pour des messages ASCII séparés délimités par les codes STX/ETX, "Frame:[timeout]ms" pour des messages binaires séparés par une temporisation, "Modbus-ASCII" pour des messages MODBUS en mode ASCII, "Modbus-RTU" pour des messages MODBUS en mode RTU, "Wiegand-ASCII" pour des messages Wiegand en mode ASCII, "Wiegand-26","Wiegand-34", etc pour des messages Wiegand en mode octet, "Char" pour un flux ASCII continu ou "Byte" pour un flux binaire continue.

Modifiable. Modifie le type de protocol utilisé sur la communication série. Les valeurs possibles sont "Line" pour des messages ASCII séparés par des retours de ligne, "StxEtx" pour des messages ASCII séparés délimités par les codes STX/ETX, "Frame:[timeout]ms" pour des messages binaires séparés par une temporisation, "Modbus-ASCII" pour des messages MODBUS en mode ASCII, "Modbus-RTU" pour des messages MODBUS en mode RTU, "Wiegand-ASCII" pour des messages Wiegand en mode ASCII, "Wiegand-26","Wiegand-34", etc pour des messages Wiegand en mode octet, "Char" pour un flux ASCII continu ou "Byte" pour un flux binaire continue. Le suffixe "/[wait]ms" peut être ajouté pour réduire la cadence d'émission de sorte à ce qu'il y ait au minimum le nombre spécifié de millisecondes d'intervalle entre l'envoi de chaque byte. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

serialport→SerialModeserialport.SerialMode

S paramètres de communication du port, sous forme d'une chaîne de caractères du type "9600,8N1".

dnp
string SerialMode

La chaîne contient le taux de transfert, le nombre de bits de données, la parité parité et le nombre de bits d'arrêt. Un suffixe supplémentaire optionnel est inclus si une option de contrôle de flux est active: "CtsRts" pour le contrôle de flux matériel, "XOnXOff" pour le contrôle de flux logique et "Simplex" pour l'utilisation du signal RTS pour l'acquisition d'un bus partagé (tel qu'utilisé pour certains adaptateurs RS485 par exemple).

Modifiable. La chaîne contient le taux de transfert, le nombre de bits de données, la parité parité et le nombre de bits d'arrêt. Un suffixe supplémentaire optionnel peut être inclus pour activer une option de contrôle de flux: "CtsRts" pour le contrôle de flux matériel, "XOnXOff" pour le contrôle de flux logique et "Simplex" pour l'utilisation du signal RTS pour l'acquisition d'un bus partagé (tel qu'utilisé pour certains adaptateurs RS485 par exemple). N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

serialport→SerialNumberserialport.SerialNumber

Numéro de série du module, préprogrammé en usine.

dnp
string SerialNumber

serialport→StartupJobserialport.StartupJob

Nom du fichier de tâches à exécuter au démarrage du module.

dnp
string StartupJob

Modifiable. Modifie le nom du job à exécuter au démarrage du module. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

serialport→VoltageLevelserialport.VoltageLevel

Niveau de tension utilisé par le module sur le port série.

dnp
int VoltageLevel

Valeurs possibles:

Y_VOLTAGELEVEL_INVALID = 0
Y_VOLTAGELEVEL_OFF = 1
Y_VOLTAGELEVEL_TTL3V = 2
Y_VOLTAGELEVEL_TTL3VR = 3
Y_VOLTAGELEVEL_TTL5V = 4
Y_VOLTAGELEVEL_TTL5VR = 5
Y_VOLTAGELEVEL_RS232 = 6
Y_VOLTAGELEVEL_RS485 = 7
Y_VOLTAGELEVEL_TTL1V8 = 8

Modifiable. Les valeurs valides dépendent du modèle de module Yoctopuce hébergeant le port série. Consultez la documentation de votre module pour savoir quelles valeurs sont supportées. Affecter une valeur invalide n'aura aucun effet. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

serialport→clearCache()serialport.clearCache()serialport→clearCache()[serialport clearCache]serialport.clearCache()serialport.clearCache()serialport.clearCache()serialport.clearCache()serialport.clearCache()serialport→clearCache()serialport.clearCache()

Invalide le cache.

js
function clearCache()
cpp
void clearCache()
m
-(void) clearCache
pas
clearCache()
vb
procedure clearCache()
cs
void clearCache()
java
void clearCache()
py
clearCache()
php
function clearCache()
es
async clearCache()

Invalide le cache des valeurs courantes du port série. Force le prochain appel à une méthode get_xxx() ou loadxxx() pour charger les les données depuis le module.

serialport→describe()serialport.describe()serialport→describe()[serialport describe]serialport.describe()serialport.describe()serialport.describe()serialport.describe()serialport.describe()serialport→describe()serialport.describe()

Retourne un court texte décrivant de manière non-ambigüe l'instance du port série au format TYPE(NAME)=SERIAL.FUNCTIONID.

js
function describe()
cpp
string describe()
m
-(NSString*) describe
pas
string describe(): string
vb
function describe() As String
cs
string describe()
java
String describe()
py
describe()
php
function describe()
es
async describe()

Plus précisément, TYPE correspond au type de fonction, NAME correspond au nom utilsé lors du premier accès a la fonction, SERIAL correspond au numéro de série du module si le module est connecté, ou "unresolved" sinon, et FUNCTIONID correspond à l'identifiant matériel de la fonction si le module est connecté. Par exemple, La methode va retourner Relay(MyCustomName.relay1)=RELAYLO1-123456.relay1 si le module est déjà connecté ou Relay(BadCustomeName.relay1)=unresolved si le module n'est pas déjà connecté. Cette methode ne declenche aucune transaction USB ou TCP et peut donc être utilisé dans un debuggeur.

Retourne :

une chaîne de caractères décrivant le port série (ex: Relay(MyCustomName.relay1)=RELAYLO1-123456.relay1)

serialport→get_CTS()
serialport→CTS()
serialport.get_CTS()serialport→get_CTS()[serialport CTS]serialport.get_CTS()serialport.get_CTS()serialport.get_CTS()serialport.get_CTS()serialport.get_CTS()serialport.get_CTS()serialport→get_CTS()serialport.get_CTS()serialport.get_CTS()serialport.get_CTS()YSerialPort get_CTS

Lit l'état de la ligne CTS.

js
function get_CTS()
cpp
int get_CTS()
m
-(int) CTS
pas
LongInt get_CTS(): LongInt
vb
function get_CTS() As Integer
cs
int get_CTS()
java
int get_CTS()
uwp
async Task<int> get_CTS()
py
get_CTS()
php
function get_CTS()
es
async get_CTS()
dnp
int get_CTS()
cp
int get_CTS()
cmd
YSerialPort target get_CTS

La ligne CTS est habituellement pilotée par le signal RTS du périphérique série connecté.

Retourne :

1 si le CTS est signalé (niveau haut), 0 si le CTS n'est pas actif (niveau bas).

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

serialport→get_advertisedValue()
serialport→advertisedValue()
serialport.get_advertisedValue()serialport→get_advertisedValue()[serialport advertisedValue]serialport.get_advertisedValue()serialport.get_advertisedValue()serialport.get_advertisedValue()serialport.get_advertisedValue()serialport.get_advertisedValue()serialport.get_advertisedValue()serialport→get_advertisedValue()serialport.get_advertisedValue()serialport.get_advertisedValue()serialport.get_advertisedValue()YSerialPort get_advertisedValue

Retourne la valeur courante du port série (pas plus de 6 caractères).

js
function get_advertisedValue()
cpp
string get_advertisedValue()
m
-(NSString*) advertisedValue
pas
string get_advertisedValue(): string
vb
function get_advertisedValue() As String
cs
string get_advertisedValue()
java
String get_advertisedValue()
uwp
async Task<string> get_advertisedValue()
py
get_advertisedValue()
php
function get_advertisedValue()
es
async get_advertisedValue()
dnp
string get_advertisedValue()
cp
string get_advertisedValue()
cmd
YSerialPort target get_advertisedValue

Retourne :

une chaîne de caractères représentant la valeur courante du port série (pas plus de 6 caractères).

En cas d'erreur, déclenche une exception ou retourne Y_ADVERTISEDVALUE_INVALID.

serialport→get_currentJob()
serialport→currentJob()
serialport.get_currentJob()serialport→get_currentJob()[serialport currentJob]serialport.get_currentJob()serialport.get_currentJob()serialport.get_currentJob()serialport.get_currentJob()serialport.get_currentJob()serialport.get_currentJob()serialport→get_currentJob()serialport.get_currentJob()serialport.get_currentJob()serialport.get_currentJob()YSerialPort get_currentJob

Retourne le nom du fichier de tâches actif en ce moment.

js
function get_currentJob()
cpp
string get_currentJob()
m
-(NSString*) currentJob
pas
string get_currentJob(): string
vb
function get_currentJob() As String
cs
string get_currentJob()
java
String get_currentJob()
uwp
async Task<string> get_currentJob()
py
get_currentJob()
php
function get_currentJob()
es
async get_currentJob()
dnp
string get_currentJob()
cp
string get_currentJob()
cmd
YSerialPort target get_currentJob

Retourne :

une chaîne de caractères représentant le nom du fichier de tâches actif en ce moment

En cas d'erreur, déclenche une exception ou retourne Y_CURRENTJOB_INVALID.

serialport→get_errCount()
serialport→errCount()
serialport.get_errCount()serialport→get_errCount()[serialport errCount]serialport.get_errCount()serialport.get_errCount()serialport.get_errCount()serialport.get_errCount()serialport.get_errCount()serialport.get_errCount()serialport→get_errCount()serialport.get_errCount()serialport.get_errCount()serialport.get_errCount()YSerialPort get_errCount

Retourne le nombre d'erreurs de communication détectées depuis la dernière mise à zéro.

js
function get_errCount()
cpp
int get_errCount()
m
-(int) errCount
pas
LongInt get_errCount(): LongInt
vb
function get_errCount() As Integer
cs
int get_errCount()
java
int get_errCount()
uwp
async Task<int> get_errCount()
py
get_errCount()
php
function get_errCount()
es
async get_errCount()
dnp
int get_errCount()
cp
int get_errCount()
cmd
YSerialPort target get_errCount

Retourne :

un entier représentant le nombre d'erreurs de communication détectées depuis la dernière mise à zéro

En cas d'erreur, déclenche une exception ou retourne Y_ERRCOUNT_INVALID.

serialport→get_errorMessage()
serialport→errorMessage()
serialport.get_errorMessage()serialport→get_errorMessage()[serialport errorMessage]serialport.get_errorMessage()serialport.get_errorMessage()serialport.get_errorMessage()serialport.get_errorMessage()serialport.get_errorMessage()serialport→get_errorMessage()serialport.get_errorMessage()

Retourne le message correspondant à la dernière erreur survenue lors de l'utilisation du port série.

js
function get_errorMessage()
cpp
string get_errorMessage()
m
-(NSString*) errorMessage
pas
string get_errorMessage(): string
vb
function get_errorMessage() As String
cs
string get_errorMessage()
java
String get_errorMessage()
py
get_errorMessage()
php
function get_errorMessage()
es
get_errorMessage()

Cette méthode est principalement utile lorsque la librairie Yoctopuce est utilisée en désactivant la gestion des exceptions.

Retourne :

une chaîne de caractères correspondant au message de la dernière erreur qui s'est produit lors de l'utilisation du port série.

serialport→get_errorType()
serialport→errorType()
serialport.get_errorType()serialport→get_errorType()[serialport errorType]serialport.get_errorType()serialport.get_errorType()serialport.get_errorType()serialport.get_errorType()serialport.get_errorType()serialport→get_errorType()serialport.get_errorType()

Retourne le code d'erreur correspondant à la dernière erreur survenue lors de l'utilisation du port série.

js
function get_errorType()
cpp
YRETCODE get_errorType()
m
-(YRETCODE) errorType
pas
YRETCODE get_errorType(): YRETCODE
vb
function get_errorType() As YRETCODE
cs
YRETCODE get_errorType()
java
int get_errorType()
py
get_errorType()
php
function get_errorType()
es
get_errorType()

Cette méthode est principalement utile lorsque la librairie Yoctopuce est utilisée en désactivant la gestion des exceptions.

Retourne :

un nombre correspondant au code de la dernière erreur qui s'est produit lors de l'utilisation du port série.

serialport→get_friendlyName()
serialport→friendlyName()
serialport.get_friendlyName()serialport→get_friendlyName()[serialport friendlyName]serialport.get_friendlyName()serialport.get_friendlyName()serialport.get_friendlyName()serialport→get_friendlyName()serialport.get_friendlyName()serialport.get_friendlyName()serialport.get_friendlyName()

Retourne un identifiant global du port série au format NOM_MODULE.NOM_FONCTION.

js
function get_friendlyName()
cpp
string get_friendlyName()
m
-(NSString*) friendlyName
cs
string get_friendlyName()
java
String get_friendlyName()
py
get_friendlyName()
php
function get_friendlyName()
es
async get_friendlyName()
dnp
string get_friendlyName()
cp
string get_friendlyName()

Le chaîne retournée utilise soit les noms logiques du module et du port série si ils sont définis, soit respectivement le numéro de série du module et l'identifant matériel du port série (par exemple: MyCustomName.relay1)

Retourne :

une chaîne de caractères identifiant le port série en utilisant les noms logiques (ex: MyCustomName.relay1)

En cas d'erreur, déclenche une exception ou retourne Y_FRIENDLYNAME_INVALID.

serialport→get_functionDescriptor()
serialport→functionDescriptor()
serialport.get_functionDescriptor()serialport→get_functionDescriptor()[serialport functionDescriptor]serialport.get_functionDescriptor()serialport.get_functionDescriptor()serialport.get_functionDescriptor()serialport.get_functionDescriptor()serialport.get_functionDescriptor()serialport→get_functionDescriptor()serialport.get_functionDescriptor()

Retourne un identifiant unique de type YFUN_DESCR correspondant à la fonction.

js
function get_functionDescriptor()
cpp
YFUN_DESCR get_functionDescriptor()
m
-(YFUN_DESCR) functionDescriptor
pas
YFUN_DESCR get_functionDescriptor(): YFUN_DESCR
vb
function get_functionDescriptor() As YFUN_DESCR
cs
YFUN_DESCR get_functionDescriptor()
java
String get_functionDescriptor()
py
get_functionDescriptor()
php
function get_functionDescriptor()
es
async get_functionDescriptor()

Cet identifiant peut être utilisé pour tester si deux instance de YFunction référencent physiquement la même fonction sur le même module.

Retourne :

un identifiant de type YFUN_DESCR.

Si la fonction n'a jamais été contactée, la valeur retournée sera Y_FUNCTIONDESCRIPTOR_INVALID

serialport→get_functionId()
serialport→functionId()
serialport.get_functionId()serialport→get_functionId()[serialport functionId]serialport.get_functionId()serialport.get_functionId()serialport.get_functionId()serialport.get_functionId()serialport→get_functionId()serialport.get_functionId()serialport.get_functionId()serialport.get_functionId()

Retourne l'identifiant matériel du port série, sans référence au module.

js
function get_functionId()
cpp
string get_functionId()
m
-(NSString*) functionId
vb
function get_functionId() As String
cs
string get_functionId()
java
String get_functionId()
py
get_functionId()
php
function get_functionId()
es
async get_functionId()
dnp
string get_functionId()
cp
string get_functionId()

Par example relay1.

Retourne :

une chaîne de caractères identifiant le port série (ex: relay1)

En cas d'erreur, déclenche une exception ou retourne Y_FUNCTIONID_INVALID.

serialport→get_hardwareId()
serialport→hardwareId()
serialport.get_hardwareId()serialport→get_hardwareId()[serialport hardwareId]serialport.get_hardwareId()serialport.get_hardwareId()serialport.get_hardwareId()serialport.get_hardwareId()serialport→get_hardwareId()serialport.get_hardwareId()serialport.get_hardwareId()serialport.get_hardwareId()

Retourne l'identifiant matériel unique du port série au format SERIAL.FUNCTIONID.

js
function get_hardwareId()
cpp
string get_hardwareId()
m
-(NSString*) hardwareId
vb
function get_hardwareId() As String
cs
string get_hardwareId()
java
String get_hardwareId()
py
get_hardwareId()
php
function get_hardwareId()
es
async get_hardwareId()
dnp
string get_hardwareId()
cp
string get_hardwareId()

L'identifiant unique est composé du numéro de série du module et de l'identifiant matériel du port série (par example RELAYLO1-123456.relay1).

Retourne :

une chaîne de caractères identifiant le port série (ex: RELAYLO1-123456.relay1)

En cas d'erreur, déclenche une exception ou retourne Y_HARDWAREID_INVALID.

serialport→get_jobMaxSize()
serialport→jobMaxSize()
serialport.get_jobMaxSize()serialport→get_jobMaxSize()[serialport jobMaxSize]serialport.get_jobMaxSize()serialport.get_jobMaxSize()serialport.get_jobMaxSize()serialport.get_jobMaxSize()serialport.get_jobMaxSize()serialport.get_jobMaxSize()serialport→get_jobMaxSize()serialport.get_jobMaxSize()serialport.get_jobMaxSize()serialport.get_jobMaxSize()YSerialPort get_jobMaxSize

Retourne la taille maximale d'un fichier job.

js
function get_jobMaxSize()
cpp
int get_jobMaxSize()
m
-(int) jobMaxSize
pas
LongInt get_jobMaxSize(): LongInt
vb
function get_jobMaxSize() As Integer
cs
int get_jobMaxSize()
java
int get_jobMaxSize()
uwp
async Task<int> get_jobMaxSize()
py
get_jobMaxSize()
php
function get_jobMaxSize()
es
async get_jobMaxSize()
dnp
int get_jobMaxSize()
cp
int get_jobMaxSize()
cmd
YSerialPort target get_jobMaxSize

Retourne :

un entier représentant la taille maximale d'un fichier job

En cas d'erreur, déclenche une exception ou retourne Y_JOBMAXSIZE_INVALID.

serialport→get_jobMaxTask()
serialport→jobMaxTask()
serialport.get_jobMaxTask()serialport→get_jobMaxTask()[serialport jobMaxTask]serialport.get_jobMaxTask()serialport.get_jobMaxTask()serialport.get_jobMaxTask()serialport.get_jobMaxTask()serialport.get_jobMaxTask()serialport.get_jobMaxTask()serialport→get_jobMaxTask()serialport.get_jobMaxTask()serialport.get_jobMaxTask()serialport.get_jobMaxTask()YSerialPort get_jobMaxTask

Retourne le nombre maximal de tâches dans un job supporté par le module.

js
function get_jobMaxTask()
cpp
int get_jobMaxTask()
m
-(int) jobMaxTask
pas
LongInt get_jobMaxTask(): LongInt
vb
function get_jobMaxTask() As Integer
cs
int get_jobMaxTask()
java
int get_jobMaxTask()
uwp
async Task<int> get_jobMaxTask()
py
get_jobMaxTask()
php
function get_jobMaxTask()
es
async get_jobMaxTask()
dnp
int get_jobMaxTask()
cp
int get_jobMaxTask()
cmd
YSerialPort target get_jobMaxTask

Retourne :

un entier représentant le nombre maximal de tâches dans un job supporté par le module

En cas d'erreur, déclenche une exception ou retourne Y_JOBMAXTASK_INVALID.

serialport→get_lastMsg()
serialport→lastMsg()
serialport.get_lastMsg()serialport→get_lastMsg()[serialport lastMsg]serialport.get_lastMsg()serialport.get_lastMsg()serialport.get_lastMsg()serialport.get_lastMsg()serialport.get_lastMsg()serialport.get_lastMsg()serialport→get_lastMsg()serialport.get_lastMsg()serialport.get_lastMsg()serialport.get_lastMsg()YSerialPort get_lastMsg

Retourne le dernier message reçu (pour les protocoles de type Line, Frame et Modbus).

js
function get_lastMsg()
cpp
string get_lastMsg()
m
-(NSString*) lastMsg
pas
string get_lastMsg(): string
vb
function get_lastMsg() As String
cs
string get_lastMsg()
java
String get_lastMsg()
uwp
async Task<string> get_lastMsg()
py
get_lastMsg()
php
function get_lastMsg()
es
async get_lastMsg()
dnp
string get_lastMsg()
cp
string get_lastMsg()
cmd
YSerialPort target get_lastMsg

Retourne :

une chaîne de caractères représentant le dernier message reçu (pour les protocoles de type Line, Frame et Modbus)

En cas d'erreur, déclenche une exception ou retourne Y_LASTMSG_INVALID.

serialport→get_logicalName()
serialport→logicalName()
serialport.get_logicalName()serialport→get_logicalName()[serialport logicalName]serialport.get_logicalName()serialport.get_logicalName()serialport.get_logicalName()serialport.get_logicalName()serialport.get_logicalName()serialport.get_logicalName()serialport→get_logicalName()serialport.get_logicalName()serialport.get_logicalName()serialport.get_logicalName()YSerialPort get_logicalName

Retourne le nom logique du port série.

js
function get_logicalName()
cpp
string get_logicalName()
m
-(NSString*) logicalName
pas
string get_logicalName(): string
vb
function get_logicalName() As String
cs
string get_logicalName()
java
String get_logicalName()
uwp
async Task<string> get_logicalName()
py
get_logicalName()
php
function get_logicalName()
es
async get_logicalName()
dnp
string get_logicalName()
cp
string get_logicalName()
cmd
YSerialPort target get_logicalName

Retourne :

une chaîne de caractères représentant le nom logique du port série.

En cas d'erreur, déclenche une exception ou retourne Y_LOGICALNAME_INVALID.

serialport→get_module()
serialport→module()
serialport.get_module()serialport→get_module()[serialport module]serialport.get_module()serialport.get_module()serialport.get_module()serialport.get_module()serialport.get_module()serialport→get_module()serialport.get_module()serialport.get_module()serialport.get_module()

Retourne l'objet YModule correspondant au module Yoctopuce qui héberge la fonction.

js
function get_module()
cpp
YModule * get_module()
m
-(YModule*) module
pas
TYModule get_module(): TYModule
vb
function get_module() As YModule
cs
YModule get_module()
java
YModule get_module()
py
get_module()
php
function get_module()
es
async get_module()
dnp
YModuleProxy get_module()
cp
YModuleProxy * get_module()

Si la fonction ne peut être trouvée sur aucun module, l'instance de YModule retournée ne sera pas joignable.

Retourne :

une instance de YModule

serialport→get_module_async()
serialport→module_async()
serialport.get_module_async()

Retourne l'objet YModule correspondant au module Yoctopuce qui héberge la fonction.

js
function get_module_async(callback, context)

Si la fonction ne peut être trouvée sur aucun module, l'instance de YModule retournée ne sera pas joignable.

Cette version asynchrone n'existe qu'en Javascript. Elle utilise une fonction de callback plutôt qu'une simple valeur de retour, pour éviter de bloquer la VM Javascript de Firefox, qui n'implémente pas le passage de contrôle entre threads durant les appels d'entrée/sortie bloquants.

Paramètres :

callbackfonction de callback qui sera appelée dès que le résultat sera connu. La fonction callback reçoit trois arguments: le contexte fourni par l'appelant, l'objet fonction concerné et l'instance demandée de YModule
contextcontexte fourni par l'appelant, et qui sera passé tel-quel à la fonction de callback

Retourne :

rien du tout : le résultat sera passé en paramètre à la fonction de callback.

serialport→get_protocol()
serialport→protocol()
serialport.get_protocol()serialport→get_protocol()[serialport protocol]serialport.get_protocol()serialport.get_protocol()serialport.get_protocol()serialport.get_protocol()serialport.get_protocol()serialport.get_protocol()serialport→get_protocol()serialport.get_protocol()serialport.get_protocol()serialport.get_protocol()YSerialPort get_protocol

Retourne le type de protocole utilisé sur la communication série, sous forme d'une chaîne de caractères.

js
function get_protocol()
cpp
string get_protocol()
m
-(NSString*) protocol
pas
string get_protocol(): string
vb
function get_protocol() As String
cs
string get_protocol()
java
String get_protocol()
uwp
async Task<string> get_protocol()
py
get_protocol()
php
function get_protocol()
es
async get_protocol()
dnp
string get_protocol()
cp
string get_protocol()
cmd
YSerialPort target get_protocol

Les valeurs possibles sont "Line" pour des messages ASCII séparés par des retours de ligne, "StxEtx" pour des messages ASCII séparés délimités par les codes STX/ETX, "Frame:[timeout]ms" pour des messages binaires séparés par une temporisation, "Modbus-ASCII" pour des messages MODBUS en mode ASCII, "Modbus-RTU" pour des messages MODBUS en mode RTU, "Wiegand-ASCII" pour des messages Wiegand en mode ASCII, "Wiegand-26","Wiegand-34", etc pour des messages Wiegand en mode octet, "Char" pour un flux ASCII continu ou "Byte" pour un flux binaire continue.

Retourne :

une chaîne de caractères représentant le type de protocole utilisé sur la communication série, sous forme d'une chaîne de caractères

En cas d'erreur, déclenche une exception ou retourne Y_PROTOCOL_INVALID.

serialport→get_rxCount()
serialport→rxCount()
serialport.get_rxCount()serialport→get_rxCount()[serialport rxCount]serialport.get_rxCount()serialport.get_rxCount()serialport.get_rxCount()serialport.get_rxCount()serialport.get_rxCount()serialport.get_rxCount()serialport→get_rxCount()serialport.get_rxCount()serialport.get_rxCount()serialport.get_rxCount()YSerialPort get_rxCount

Retourne le nombre d'octets reçus depuis la dernière mise à zéro.

js
function get_rxCount()
cpp
int get_rxCount()
m
-(int) rxCount
pas
LongInt get_rxCount(): LongInt
vb
function get_rxCount() As Integer
cs
int get_rxCount()
java
int get_rxCount()
uwp
async Task<int> get_rxCount()
py
get_rxCount()
php
function get_rxCount()
es
async get_rxCount()
dnp
int get_rxCount()
cp
int get_rxCount()
cmd
YSerialPort target get_rxCount

Retourne :

un entier représentant le nombre d'octets reçus depuis la dernière mise à zéro

En cas d'erreur, déclenche une exception ou retourne Y_RXCOUNT_INVALID.

serialport→get_rxMsgCount()
serialport→rxMsgCount()
serialport.get_rxMsgCount()serialport→get_rxMsgCount()[serialport rxMsgCount]serialport.get_rxMsgCount()serialport.get_rxMsgCount()serialport.get_rxMsgCount()serialport.get_rxMsgCount()serialport.get_rxMsgCount()serialport.get_rxMsgCount()serialport→get_rxMsgCount()serialport.get_rxMsgCount()serialport.get_rxMsgCount()serialport.get_rxMsgCount()YSerialPort get_rxMsgCount

Retourne le nombre de messages reçus depuis la dernière mise à zéro.

js
function get_rxMsgCount()
cpp
int get_rxMsgCount()
m
-(int) rxMsgCount
pas
LongInt get_rxMsgCount(): LongInt
vb
function get_rxMsgCount() As Integer
cs
int get_rxMsgCount()
java
int get_rxMsgCount()
uwp
async Task<int> get_rxMsgCount()
py
get_rxMsgCount()
php
function get_rxMsgCount()
es
async get_rxMsgCount()
dnp
int get_rxMsgCount()
cp
int get_rxMsgCount()
cmd
YSerialPort target get_rxMsgCount

Retourne :

un entier représentant le nombre de messages reçus depuis la dernière mise à zéro

En cas d'erreur, déclenche une exception ou retourne Y_RXMSGCOUNT_INVALID.

serialport→get_serialMode()
serialport→serialMode()
serialport.get_serialMode()serialport→get_serialMode()[serialport serialMode]serialport.get_serialMode()serialport.get_serialMode()serialport.get_serialMode()serialport.get_serialMode()serialport.get_serialMode()serialport.get_serialMode()serialport→get_serialMode()serialport.get_serialMode()serialport.get_serialMode()serialport.get_serialMode()YSerialPort get_serialMode

Retourne les paramètres de communication du port, sous forme d'une chaîne de caractères du type "9600,8N1".

js
function get_serialMode()
cpp
string get_serialMode()
m
-(NSString*) serialMode
pas
string get_serialMode(): string
vb
function get_serialMode() As String
cs
string get_serialMode()
java
String get_serialMode()
uwp
async Task<string> get_serialMode()
py
get_serialMode()
php
function get_serialMode()
es
async get_serialMode()
dnp
string get_serialMode()
cp
string get_serialMode()
cmd
YSerialPort target get_serialMode

La chaîne contient le taux de transfert, le nombre de bits de données, la parité parité et le nombre de bits d'arrêt. Un suffixe supplémentaire optionnel est inclus si une option de contrôle de flux est active: "CtsRts" pour le contrôle de flux matériel, "XOnXOff" pour le contrôle de flux logique et "Simplex" pour l'utilisation du signal RTS pour l'acquisition d'un bus partagé (tel qu'utilisé pour certains adaptateurs RS485 par exemple).

Retourne :

une chaîne de caractères représentant les paramètres de communication du port, sous forme d'une chaîne de caractères du type "9600,8N1"

En cas d'erreur, déclenche une exception ou retourne Y_SERIALMODE_INVALID.

serialport→get_serialNumber()
serialport→serialNumber()
serialport.get_serialNumber()serialport→get_serialNumber()[serialport serialNumber]serialport.get_serialNumber()serialport.get_serialNumber()serialport.get_serialNumber()serialport.get_serialNumber()serialport.get_serialNumber()serialport.get_serialNumber()serialport→get_serialNumber()serialport.get_serialNumber()serialport.get_serialNumber()serialport.get_serialNumber()YSerialPort get_serialNumber

Retourne le numéro de série du module, préprogrammé en usine.

js
function get_serialNumber()
cpp
string get_serialNumber()
m
-(NSString*) serialNumber
pas
string get_serialNumber(): string
vb
function get_serialNumber() As String
cs
string get_serialNumber()
java
String get_serialNumber()
uwp
async Task<string> get_serialNumber()
py
get_serialNumber()
php
function get_serialNumber()
es
async get_serialNumber()
dnp
string get_serialNumber()
cp
string get_serialNumber()
cmd
YSerialPort target get_serialNumber

Retourne :

: une chaîne de caractères représentant le numéro de série du module, préprogrammé en usine.

En cas d'erreur, déclenche une exception ou retourne YModule.SERIALNUMBER_INVALID.

serialport→get_startupJob()
serialport→startupJob()
serialport.get_startupJob()serialport→get_startupJob()[serialport startupJob]serialport.get_startupJob()serialport.get_startupJob()serialport.get_startupJob()serialport.get_startupJob()serialport.get_startupJob()serialport.get_startupJob()serialport→get_startupJob()serialport.get_startupJob()serialport.get_startupJob()serialport.get_startupJob()YSerialPort get_startupJob

Retourne le nom du fichier de tâches à exécuter au démarrage du module.

js
function get_startupJob()
cpp
string get_startupJob()
m
-(NSString*) startupJob
pas
string get_startupJob(): string
vb
function get_startupJob() As String
cs
string get_startupJob()
java
String get_startupJob()
uwp
async Task<string> get_startupJob()
py
get_startupJob()
php
function get_startupJob()
es
async get_startupJob()
dnp
string get_startupJob()
cp
string get_startupJob()
cmd
YSerialPort target get_startupJob

Retourne :

une chaîne de caractères représentant le nom du fichier de tâches à exécuter au démarrage du module

En cas d'erreur, déclenche une exception ou retourne Y_STARTUPJOB_INVALID.

serialport→get_txCount()
serialport→txCount()
serialport.get_txCount()serialport→get_txCount()[serialport txCount]serialport.get_txCount()serialport.get_txCount()serialport.get_txCount()serialport.get_txCount()serialport.get_txCount()serialport.get_txCount()serialport→get_txCount()serialport.get_txCount()serialport.get_txCount()serialport.get_txCount()YSerialPort get_txCount

Retourne le nombre d'octets transmis depuis la dernière mise à zéro.

js
function get_txCount()
cpp
int get_txCount()
m
-(int) txCount
pas
LongInt get_txCount(): LongInt
vb
function get_txCount() As Integer
cs
int get_txCount()
java
int get_txCount()
uwp
async Task<int> get_txCount()
py
get_txCount()
php
function get_txCount()
es
async get_txCount()
dnp
int get_txCount()
cp
int get_txCount()
cmd
YSerialPort target get_txCount

Retourne :

un entier représentant le nombre d'octets transmis depuis la dernière mise à zéro

En cas d'erreur, déclenche une exception ou retourne Y_TXCOUNT_INVALID.

serialport→get_txMsgCount()
serialport→txMsgCount()
serialport.get_txMsgCount()serialport→get_txMsgCount()[serialport txMsgCount]serialport.get_txMsgCount()serialport.get_txMsgCount()serialport.get_txMsgCount()serialport.get_txMsgCount()serialport.get_txMsgCount()serialport.get_txMsgCount()serialport→get_txMsgCount()serialport.get_txMsgCount()serialport.get_txMsgCount()serialport.get_txMsgCount()YSerialPort get_txMsgCount

Retourne le nombre de messages envoyés depuis la dernière mise à zéro.

js
function get_txMsgCount()
cpp
int get_txMsgCount()
m
-(int) txMsgCount
pas
LongInt get_txMsgCount(): LongInt
vb
function get_txMsgCount() As Integer
cs
int get_txMsgCount()
java
int get_txMsgCount()
uwp
async Task<int> get_txMsgCount()
py
get_txMsgCount()
php
function get_txMsgCount()
es
async get_txMsgCount()
dnp
int get_txMsgCount()
cp
int get_txMsgCount()
cmd
YSerialPort target get_txMsgCount

Retourne :

un entier représentant le nombre de messages envoyés depuis la dernière mise à zéro

En cas d'erreur, déclenche une exception ou retourne Y_TXMSGCOUNT_INVALID.

serialport→get_userData()
serialport→userData()
serialport.get_userData()serialport→get_userData()[serialport userData]serialport.get_userData()serialport.get_userData()serialport.get_userData()serialport.get_userData()serialport.get_userData()serialport→get_userData()serialport.get_userData()

Retourne le contenu de l'attribut userData, précédemment stocké à l'aide de la méthode set_userData.

js
function get_userData()
cpp
void * get_userData()
m
-(id) userData
pas
Tobject get_userData(): Tobject
vb
function get_userData() As Object
cs
object get_userData()
java
Object get_userData()
py
get_userData()
php
function get_userData()
es
async get_userData()

Cet attribut n'es pas utilisé directement par l'API. Il est à la disposition de l'appelant pour stocker un contexte.

Retourne :

l'objet stocké précédemment par l'appelant.

serialport→get_voltageLevel()
serialport→voltageLevel()
serialport.get_voltageLevel()serialport→get_voltageLevel()[serialport voltageLevel]serialport.get_voltageLevel()serialport.get_voltageLevel()serialport.get_voltageLevel()serialport.get_voltageLevel()serialport.get_voltageLevel()serialport.get_voltageLevel()serialport→get_voltageLevel()serialport.get_voltageLevel()serialport.get_voltageLevel()serialport.get_voltageLevel()YSerialPort get_voltageLevel

Retourne le niveau de tension utilisé par le module sur le port série.

js
function get_voltageLevel()
cpp
Y_VOLTAGELEVEL_enum get_voltageLevel()
m
-(Y_VOLTAGELEVEL_enum) voltageLevel
pas
Integer get_voltageLevel(): Integer
vb
function get_voltageLevel() As Integer
cs
int get_voltageLevel()
java
int get_voltageLevel()
uwp
async Task<int> get_voltageLevel()
py
get_voltageLevel()
php
function get_voltageLevel()
es
async get_voltageLevel()
dnp
int get_voltageLevel()
cp
int get_voltageLevel()
cmd
YSerialPort target get_voltageLevel

Retourne :

une valeur parmi Y_VOLTAGELEVEL_OFF, Y_VOLTAGELEVEL_TTL3V, Y_VOLTAGELEVEL_TTL3VR, Y_VOLTAGELEVEL_TTL5V, Y_VOLTAGELEVEL_TTL5VR, Y_VOLTAGELEVEL_RS232, Y_VOLTAGELEVEL_RS485 et Y_VOLTAGELEVEL_TTL1V8 représentant le niveau de tension utilisé par le module sur le port série

En cas d'erreur, déclenche une exception ou retourne Y_VOLTAGELEVEL_INVALID.

serialport→isOnline()serialport.isOnline()serialport→isOnline()[serialport isOnline]serialport.isOnline()serialport.isOnline()serialport.isOnline()serialport.isOnline()serialport.isOnline()serialport→isOnline()serialport.isOnline()serialport.isOnline()serialport.isOnline()

Vérifie si le module hébergeant le port série est joignable, sans déclencher d'erreur.

js
function isOnline()
cpp
bool isOnline()
m
-(BOOL) isOnline
pas
boolean isOnline(): boolean
vb
function isOnline() As Boolean
cs
bool isOnline()
java
boolean isOnline()
py
isOnline()
php
function isOnline()
es
async isOnline()
dnp
bool isOnline()
cp
bool isOnline()

Si les valeurs des attributs en cache du port série sont valides au moment de l'appel, le module est considéré joignable. Cette fonction ne cause en aucun cas d'exception, quelle que soit l'erreur qui pourrait se produire lors de la vérification de joignabilité.

Retourne :

true si le port série est joignable, false sinon

serialport→isOnline_async()serialport.isOnline_async()

Vérifie si le module hébergeant le port série est joignable, sans déclencher d'erreur.

js
function isOnline_async(callback, context)

Si les valeurs des attributs en cache du port série sont valides au moment de l'appel, le module est considéré joignable. Cette fonction ne cause en aucun cas d'exception, quelle que soit l'erreur qui pourrait se produire lors de la vérification de joignabilité.

Cette version asynchrone n'existe qu'en Javascript. Elle utilise une fonction de callback plutôt qu'une simple valeur de retour, pour éviter de bloquer la machine virtuelle Javascript avec une attente active.

Paramètres :

callbackfonction de callback qui sera appelée dès que le résultat sera connu. La fonction callback reçoit trois arguments: le contexte fourni par l'appelant, l'objet fonction concerné et le résultat booléen
contextcontexte fourni par l'appelant, et qui sera passé tel-quel à la fonction de callback

Retourne :

rien du tout : le résultat sera passé en paramètre à la fonction de callback.

serialport→isReadOnly()serialport→isReadOnly()[serialport isReadOnly]serialport.isReadOnly()serialport.isReadOnly()serialport.isReadOnly()serialport.isReadOnly()serialport.isReadOnly()serialport.isReadOnly()serialport→isReadOnly()serialport.isReadOnly()serialport.isReadOnly()serialport.isReadOnly()YSerialPort isReadOnly

Test si la fonction est en lecture seule.

cpp
bool isReadOnly()
m
-(bool) isReadOnly
pas
boolean isReadOnly(): boolean
vb
function isReadOnly() As Boolean
cs
bool isReadOnly()
java
boolean isReadOnly()
uwp
async Task<bool> isReadOnly()
py
isReadOnly()
php
function isReadOnly()
es
async isReadOnly()
dnp
bool isReadOnly()
cp
bool isReadOnly()
cmd
YSerialPort target isReadOnly

Retourne vrais si la fonction est protégé en ecriture ou que la fontion n'est pas disponible.

Retourne :

true si la fonction est protégé en ecriture ou que la fontion n'est pas disponible

serialport→load()serialport.load()serialport→load()[serialport load: ]serialport.load()serialport.load()serialport.load()serialport.load()serialport.load()serialport→load()serialport.load()

Met en cache les valeurs courantes du port série, avec une durée de validité spécifiée.

js
function load(msValidity)
cpp
YRETCODE load(int msValidity)
m
-(YRETCODE) load: (u64) msValidity
pas
YRETCODE load(msValidity: u64): YRETCODE
vb
function load(ByVal msValidity As Long) As YRETCODE
cs
YRETCODE load(ulong msValidity)
java
int load(long msValidity)
py
load(msValidity)
php
function load($msValidity)
es
async load(msValidity)

Par défaut, lorsqu'on accède à un module, tous les attributs des fonctions du module sont automatiquement mises en cache pour la durée standard (5 ms). Cette méthode peut être utilisée pour marquer occasionellement les données cachées comme valides pour une plus longue période, par exemple dans le but de réduire le trafic réseau.

Paramètres :

msValidityun entier correspondant à la durée de validité attribuée aux les paramètres chargés, en millisecondes

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

serialport→loadAttribute()serialport.loadAttribute()serialport→loadAttribute()[serialport loadAttribute: ]serialport.loadAttribute()serialport.loadAttribute()serialport.loadAttribute()serialport.loadAttribute()serialport.loadAttribute()serialport.loadAttribute()serialport→loadAttribute()serialport.loadAttribute()serialport.loadAttribute()serialport.loadAttribute()

Retourne la valeur actuelle d'un attribut spécifique de la fonction, sous forme de texte, le plus rapidement possible mais sans passer par le cache.

js
function loadAttribute(attrName)
cpp
string loadAttribute(string attrName)
m
-(NSString*) loadAttribute: (NSString*) attrName
pas
string loadAttribute(attrName: string): string
vb
function loadAttribute(ByVal attrName As String) As String
cs
string loadAttribute(string attrName)
java
String loadAttribute(String attrName)
uwp
async Task<string> loadAttribute(string attrName)
py
loadAttribute(attrName)
php
function loadAttribute($attrName)
es
async loadAttribute(attrName)
dnp
string loadAttribute(string attrName)
cp
string loadAttribute(string attrName)

Paramètres :

attrNamele nom de l'attribut désiré

Retourne :

une chaîne de caractères représentant la valeur actuelle de l'attribut.

En cas d'erreur, déclenche une exception ou retourne un chaîne vide.

serialport→load_async()serialport.load_async()

Met en cache les valeurs courantes du port série, avec une durée de validité spécifiée.

js
function load_async(msValidity, callback, context)

Par défaut, lorsqu'on accède à un module, tous les attributs des fonctions du module sont automatiquement mises en cache pour la durée standard (5 ms). Cette méthode peut être utilisée pour marquer occasionellement les données cachées comme valides pour une plus longue période, par exemple dans le but de réduire le trafic réseau.

Cette version asynchrone n'existe qu'en Javascript. Elle utilise une fonction de callback plutôt qu'une simple valeur de retour, pour éviter de bloquer la machine virtuelle Javascript avec une attente active.

Paramètres :

msValidityun entier correspondant à la durée de validité attribuée aux les paramètres chargés, en millisecondes
callbackfonction de callback qui sera appelée dès que le résultat sera connu. La fonction callback reçoit trois arguments: le contexte fourni par l'appelant, l'objet fonction concerné et le code d'erreur (ou YAPI_SUCCESS)
contextcontexte fourni par l'appelant, et qui sera passé tel-quel à la fonction de callback

Retourne :

rien du tout : le résultat sera passé en paramètre à la fonction de callback.

serialport→modbusReadBits()serialport.modbusReadBits()serialport→modbusReadBits()[serialport modbusReadBits: ]serialport.modbusReadBits()serialport.modbusReadBits()serialport.modbusReadBits()serialport.modbusReadBits()serialport.modbusReadBits()serialport.modbusReadBits()serialport→modbusReadBits()serialport.modbusReadBits()serialport.modbusReadBits()serialport.modbusReadBits()YSerialPort modbusReadBits

Lit un ou plusieurs bits contigus depuis un périphérique MODBUS.

js
function modbusReadBits(slaveNo, pduAddr, nBits)
cpp
vector<int> modbusReadBits(int slaveNo, int pduAddr, int nBits)
m
-(NSMutableArray*) modbusReadBits: (int) slaveNo
  : (int) pduAddr
  : (int) nBits
pas
TLongIntArray modbusReadBits(slaveNo: LongInt,
  pduAddr: LongInt,
  nBits: LongInt): TLongIntArray
vb
function modbusReadBits(ByVal slaveNo As Integer,
  ByVal pduAddr As Integer,
  ByVal nBits As Integer) As List
cs
List<int> modbusReadBits(int slaveNo, int pduAddr, int nBits)
java
ArrayList<Integer> modbusReadBits(int slaveNo,
  int pduAddr,
  int nBits)
uwp
async Task<List<int>> modbusReadBits(int slaveNo,
  int pduAddr,
  int nBits)
py
modbusReadBits(slaveNo, pduAddr, nBits)
php
function modbusReadBits($slaveNo, $pduAddr, $nBits)
es
async modbusReadBits(slaveNo, pduAddr, nBits)
dnp
int[] modbusReadBits(int slaveNo, int pduAddr, int nBits)
cp
vector<int> modbusReadBits(int slaveNo,
  int pduAddr,
  int nBits)
cmd
YSerialPort target modbusReadBits slaveNo pduAddr nBits

Cette méthode utilise le code de fonction MODBUS 0x01 (Read Coils).

Paramètres :

slaveNoaddresse du périphérique MODBUS esclave à interroger
pduAddradresse relative du premier bit à lire (indexé à partir de zéro).
nBitsnombre de bits à lire

Retourne :

un vecteur d'entiers, correspondant chacun à un bit.

En cas d'erreur, déclenche une exception ou retourne un tableau vide.

serialport→modbusReadInputBits()serialport.modbusReadInputBits()serialport→modbusReadInputBits()[serialport modbusReadInputBits: ]serialport.modbusReadInputBits()serialport.modbusReadInputBits()serialport.modbusReadInputBits()serialport.modbusReadInputBits()serialport.modbusReadInputBits()serialport.modbusReadInputBits()serialport→modbusReadInputBits()serialport.modbusReadInputBits()serialport.modbusReadInputBits()serialport.modbusReadInputBits()YSerialPort modbusReadInputBits

Lit un ou plusieurs bits contigus depuis un périphérique MODBUS.

js
function modbusReadInputBits(slaveNo, pduAddr, nBits)
cpp
vector<int> modbusReadInputBits(int slaveNo, int pduAddr, int nBits)
m
-(NSMutableArray*) modbusReadInputBits: (int) slaveNo
  : (int) pduAddr
  : (int) nBits
pas
TLongIntArray modbusReadInputBits(slaveNo: LongInt,
  pduAddr: LongInt,
  nBits: LongInt): TLongIntArray
vb
function modbusReadInputBits(ByVal slaveNo As Integer,
  ByVal pduAddr As Integer,
  ByVal nBits As Integer) As List
cs
List<int> modbusReadInputBits(int slaveNo,
  int pduAddr,
  int nBits)
java
ArrayList<Integer> modbusReadInputBits(int slaveNo,
  int pduAddr,
  int nBits)
uwp
async Task<List<int>> modbusReadInputBits(int slaveNo,
  int pduAddr,
  int nBits)
py
modbusReadInputBits(slaveNo, pduAddr, nBits)
php
function modbusReadInputBits($slaveNo, $pduAddr, $nBits)
es
async modbusReadInputBits(slaveNo, pduAddr, nBits)
dnp
int[] modbusReadInputBits(int slaveNo, int pduAddr, int nBits)
cp
vector<int> modbusReadInputBits(int slaveNo,
  int pduAddr,
  int nBits)
cmd
YSerialPort target modbusReadInputBits slaveNo pduAddr nBits

Cette méthode utilise le code de fonction MODBUS 0x02 (Read Discrete Inputs).

Paramètres :

slaveNoaddresse du périphérique MODBUS esclave à interroger
pduAddradresse relative du premier bit à lire (indexé à partir de zéro).
nBitsnombre de bits à lire

Retourne :

un vecteur d'entiers, correspondant chacun à un bit.

En cas d'erreur, déclenche une exception ou retourne un tableau vide.

serialport→modbusReadInputRegisters()serialport.modbusReadInputRegisters()serialport→modbusReadInputRegisters()[serialport modbusReadInputRegisters: ]serialport.modbusReadInputRegisters()serialport.modbusReadInputRegisters()serialport.modbusReadInputRegisters()serialport.modbusReadInputRegisters()serialport.modbusReadInputRegisters()serialport.modbusReadInputRegisters()serialport→modbusReadInputRegisters()serialport.modbusReadInputRegisters()serialport.modbusReadInputRegisters()serialport.modbusReadInputRegisters()YSerialPort modbusReadInputRegisters

Lit un ou plusieurs registres d'entrée (registre enlecture seule) depuis un périphérique MODBUS.

js
function modbusReadInputRegisters(slaveNo, pduAddr, nWords)
cpp
vector<int> modbusReadInputRegisters(int slaveNo, int pduAddr, int nWords)
m
-(NSMutableArray*) modbusReadInputRegisters: (int) slaveNo
  : (int) pduAddr
  : (int) nWords
pas
TLongIntArray modbusReadInputRegisters(slaveNo: LongInt,
  pduAddr: LongInt,
  nWords: LongInt): TLongIntArray
vb
function modbusReadInputRegisters(ByVal slaveNo As Integer,
  ByVal pduAddr As Integer,
  ByVal nWords As Integer) As List
cs
List<int> modbusReadInputRegisters(int slaveNo,
  int pduAddr,
  int nWords)
java
ArrayList<Integer> modbusReadInputRegisters(int slaveNo,
  int pduAddr,
  int nWords)
uwp
async Task<List<int>> modbusReadInputRegisters(int slaveNo,
  int pduAddr,
  int nWords)
py
modbusReadInputRegisters(slaveNo, pduAddr, nWords)
php
function modbusReadInputRegisters($slaveNo, $pduAddr, $nWords)
es
async modbusReadInputRegisters(slaveNo, pduAddr, nWords)
dnp
int[] modbusReadInputRegisters(int slaveNo,
  int pduAddr,
  int nWords)
cp
vector<int> modbusReadInputRegisters(int slaveNo,
  int pduAddr,
  int nWords)
cmd
YSerialPort target modbusReadInputRegisters slaveNo pduAddr nWords

Cette méthode utilise le code de fonction MODBUS 0x04 (Read Input Registers).

Paramètres :

slaveNoaddresse du périphérique MODBUS esclave à interroger
pduAddradresse relative du premier registre d'entrée à lire (indexé à partir de zéro).
nWordsnombre de registres d'entrée à lire

Retourne :

un vecteur d'entiers, correspondant chacun à une valeur d'entrée (16 bits).

En cas d'erreur, déclenche une exception ou retourne un tableau vide.

serialport→modbusReadRegisters()serialport.modbusReadRegisters()serialport→modbusReadRegisters()[serialport modbusReadRegisters: ]serialport.modbusReadRegisters()serialport.modbusReadRegisters()serialport.modbusReadRegisters()serialport.modbusReadRegisters()serialport.modbusReadRegisters()serialport.modbusReadRegisters()serialport→modbusReadRegisters()serialport.modbusReadRegisters()serialport.modbusReadRegisters()serialport.modbusReadRegisters()YSerialPort modbusReadRegisters

Lit un ou plusieurs registres interne depuis un périphérique MODBUS.

js
function modbusReadRegisters(slaveNo, pduAddr, nWords)
cpp
vector<int> modbusReadRegisters(int slaveNo, int pduAddr, int nWords)
m
-(NSMutableArray*) modbusReadRegisters: (int) slaveNo
  : (int) pduAddr
  : (int) nWords
pas
TLongIntArray modbusReadRegisters(slaveNo: LongInt,
  pduAddr: LongInt,
  nWords: LongInt): TLongIntArray
vb
function modbusReadRegisters(ByVal slaveNo As Integer,
  ByVal pduAddr As Integer,
  ByVal nWords As Integer) As List
cs
List<int> modbusReadRegisters(int slaveNo,
  int pduAddr,
  int nWords)
java
ArrayList<Integer> modbusReadRegisters(int slaveNo,
  int pduAddr,
  int nWords)
uwp
async Task<List<int>> modbusReadRegisters(int slaveNo,
  int pduAddr,
  int nWords)
py
modbusReadRegisters(slaveNo, pduAddr, nWords)
php
function modbusReadRegisters($slaveNo, $pduAddr, $nWords)
es
async modbusReadRegisters(slaveNo, pduAddr, nWords)
dnp
int[] modbusReadRegisters(int slaveNo,
  int pduAddr,
  int nWords)
cp
vector<int> modbusReadRegisters(int slaveNo,
  int pduAddr,
  int nWords)
cmd
YSerialPort target modbusReadRegisters slaveNo pduAddr nWords

Cette méthode utilise le code de fonction MODBUS 0x03 (Read Holding Registers).

Paramètres :

slaveNoaddresse du périphérique MODBUS esclave à interroger
pduAddradresse relative du premier registre interne à lire (indexé à partir de zéro).
nWordsnombre de registres internes à lire

Retourne :

un vecteur d'entiers, correspondant chacun à une valeur de registre (16 bits).

En cas d'erreur, déclenche une exception ou retourne un tableau vide.

serialport→modbusWriteAndReadRegisters()serialport.modbusWriteAndReadRegisters()serialport→modbusWriteAndReadRegisters()[serialport modbusWriteAndReadRegisters: ]serialport.modbusWriteAndReadRegisters()serialport.modbusWriteAndReadRegisters()serialport.modbusWriteAndReadRegisters()serialport.modbusWriteAndReadRegisters()serialport.modbusWriteAndReadRegisters()serialport.modbusWriteAndReadRegisters()serialport→modbusWriteAndReadRegisters()serialport.modbusWriteAndReadRegisters()serialport.modbusWriteAndReadRegisters()serialport.modbusWriteAndReadRegisters()YSerialPort modbusWriteAndReadRegisters

Modifie l'état de plusieurs bits (ou relais) contigus sur un périphérique MODBUS.

js
function modbusWriteAndReadRegisters(slaveNo, pduWriteAddr, values, pduReadAddr, nReadWords)
cpp
vector<int> modbusWriteAndReadRegisters(int slaveNo,
  int pduWriteAddr,
  vector<int> values,
  int pduReadAddr,
  int nReadWords)
m
-(NSMutableArray*) modbusWriteAndReadRegisters: (int) slaveNo
  : (int) pduWriteAddr
  : (NSMutableArray*) values
  : (int) pduReadAddr
  : (int) nReadWords
pas
TLongIntArray modbusWriteAndReadRegisters(slaveNo: LongInt,
  pduWriteAddr: LongInt,
  values: TLongIntArray,
  pduReadAddr: LongInt,
  nReadWords: LongInt): TLongIntArray
vb
procedure modbusWriteAndReadRegisters(ByVal slaveNo As Integer,
  ByVal pduWriteAddr As Integer,
  ByVal values As List(Of)
cs
List<int> modbusWriteAndReadRegisters(int slaveNo,
  int pduWriteAddr,
  List<int> values,
  int pduReadAddr,
  int nReadWords)
java
ArrayList<Integer> modbusWriteAndReadRegisters(int slaveNo,
  int pduWriteAddr,
  ArrayList<Integer> values,
  int pduReadAddr,
  int nReadWords)
uwp
async Task<List<int>> modbusWriteAndReadRegisters(int slaveNo,
  int pduWriteAddr,
  List<int> values,
  int pduReadAddr,
  int nReadWords)
py
modbusWriteAndReadRegisters(slaveNo, pduWriteAddr, values, pduReadAddr, nReadWords)
php
function modbusWriteAndReadRegisters($slaveNo, $pduWriteAddr, $values, $pduReadAddr, $nReadWords)
es
async modbusWriteAndReadRegisters(slaveNo, pduWriteAddr, values, pduReadAddr, nReadWords)
dnp
int[] modbusWriteAndReadRegisters(int slaveNo,
  int pduWriteAddr,
  int[] values,
  int pduReadAddr,
  int nReadWords)
cp
vector<int> modbusWriteAndReadRegisters(int slaveNo,
  int pduWriteAddr,
  vector<int> values,
  int pduReadAddr,
  int nReadWords)
cmd
YSerialPort target modbusWriteAndReadRegisters slaveNo pduWriteAddr values pduReadAddr nReadWords

Cette méthode utilise le code de fonction MODBUS 0x17 (Read/Write Multiple Registers).

Paramètres :

slaveNoaddresse du périphérique MODBUS esclave à piloter
pduWriteAddradresse relative du premier registre interne à modifier (indexé à partir de zéro).
valuesvecteur de valeurs 16 bits à appliquer
pduReadAddradresse relative du premier registre interne à lire (indexé à partir de zéro).
nReadWordsnombre de registres internes à lire

Retourne :

un vecteur d'entiers, correspondant chacun à une valeur de registre (16 bits) lue.

En cas d'erreur, déclenche une exception ou retourne un tableau vide.

serialport→modbusWriteBit()serialport.modbusWriteBit()serialport→modbusWriteBit()[serialport modbusWriteBit: ]serialport.modbusWriteBit()serialport.modbusWriteBit()serialport.modbusWriteBit()serialport.modbusWriteBit()serialport.modbusWriteBit()serialport.modbusWriteBit()serialport→modbusWriteBit()serialport.modbusWriteBit()serialport.modbusWriteBit()serialport.modbusWriteBit()YSerialPort modbusWriteBit

Modifie l'état d'un seul bit (ou relais) sur un périphérique MODBUS.

js
function modbusWriteBit(slaveNo, pduAddr, value)
cpp
int modbusWriteBit(int slaveNo, int pduAddr, int value)
m
-(int) modbusWriteBit: (int) slaveNo
  : (int) pduAddr
  : (int) value
pas
LongInt modbusWriteBit(slaveNo: LongInt,
  pduAddr: LongInt,
  value: LongInt): LongInt
vb
function modbusWriteBit(ByVal slaveNo As Integer,
  ByVal pduAddr As Integer,
  ByVal value As Integer) As Integer
cs
int modbusWriteBit(int slaveNo, int pduAddr, int value)
java
int modbusWriteBit(int slaveNo, int pduAddr, int value)
uwp
async Task<int> modbusWriteBit(int slaveNo, int pduAddr, int value)
py
modbusWriteBit(slaveNo, pduAddr, value)
php
function modbusWriteBit($slaveNo, $pduAddr, $value)
es
async modbusWriteBit(slaveNo, pduAddr, value)
dnp
int modbusWriteBit(int slaveNo, int pduAddr, int value)
cp
int modbusWriteBit(int slaveNo, int pduAddr, int value)
cmd
YSerialPort target modbusWriteBit slaveNo pduAddr value

Cette méthode utilise le code de fonction MODBUS 0x05 (Write Single Coil).

Paramètres :

slaveNoaddresse du périphérique MODBUS esclave à piloter
pduAddradresse relative du bit à modifier (indexé à partir de zéro).
valuela valeur à appliquer (0 pour l'état OFF, non-zéro pour l'état ON)

Retourne :

le nombre de bits affectés sur le périphérique (1)

En cas d'erreur, déclenche une exception ou retourne zéro.

serialport→modbusWriteBits()serialport.modbusWriteBits()serialport→modbusWriteBits()[serialport modbusWriteBits: ]serialport.modbusWriteBits()serialport.modbusWriteBits()serialport.modbusWriteBits()serialport.modbusWriteBits()serialport.modbusWriteBits()serialport.modbusWriteBits()serialport→modbusWriteBits()serialport.modbusWriteBits()serialport.modbusWriteBits()serialport.modbusWriteBits()YSerialPort modbusWriteBits

Modifie l'état de plusieurs bits (ou relais) contigus sur un périphérique MODBUS.

js
function modbusWriteBits(slaveNo, pduAddr, bits)
cpp
int modbusWriteBits(int slaveNo, int pduAddr, vector<int> bits)
m
-(int) modbusWriteBits: (int) slaveNo
  : (int) pduAddr
  : (NSMutableArray*) bits
pas
LongInt modbusWriteBits(slaveNo: LongInt,
  pduAddr: LongInt,
  bits: TLongIntArray): LongInt
vb
procedure modbusWriteBits(ByVal slaveNo As Integer,
  ByVal pduAddr As Integer,
  ByVal bits As List(Of)
cs
int modbusWriteBits(int slaveNo, int pduAddr, List<int> bits)
java
int modbusWriteBits(int slaveNo,
  int pduAddr,
  ArrayList<Integer> bits)
uwp
async Task<int> modbusWriteBits(int slaveNo,
  int pduAddr,
  List<int> bits)
py
modbusWriteBits(slaveNo, pduAddr, bits)
php
function modbusWriteBits($slaveNo, $pduAddr, $bits)
es
async modbusWriteBits(slaveNo, pduAddr, bits)
dnp
int modbusWriteBits(int slaveNo, int pduAddr, int[] bits)
cp
int modbusWriteBits(int slaveNo,
  int pduAddr,
  vector<int> bits)
cmd
YSerialPort target modbusWriteBits slaveNo pduAddr bits

Cette méthode utilise le code de fonction MODBUS 0x0f (Write Multiple Coils).

Paramètres :

slaveNoaddresse du périphérique MODBUS esclave à piloter
pduAddradresse relative du premier bit à modifier (indexé à partir de zéro).
bitsvecteur de bits à appliquer (un entier par bit)

Retourne :

le nombre de bits affectés sur le périphérique

En cas d'erreur, déclenche une exception ou retourne zéro.

serialport→modbusWriteRegister()serialport.modbusWriteRegister()serialport→modbusWriteRegister()[serialport modbusWriteRegister: ]serialport.modbusWriteRegister()serialport.modbusWriteRegister()serialport.modbusWriteRegister()serialport.modbusWriteRegister()serialport.modbusWriteRegister()serialport.modbusWriteRegister()serialport→modbusWriteRegister()serialport.modbusWriteRegister()serialport.modbusWriteRegister()serialport.modbusWriteRegister()YSerialPort modbusWriteRegister

Modifie la valeur d'un registre interne 16 bits sur un périphérique MODBUS.

js
function modbusWriteRegister(slaveNo, pduAddr, value)
cpp
int modbusWriteRegister(int slaveNo, int pduAddr, int value)
m
-(int) modbusWriteRegister: (int) slaveNo
  : (int) pduAddr
  : (int) value
pas
LongInt modbusWriteRegister(slaveNo: LongInt,
  pduAddr: LongInt,
  value: LongInt): LongInt
vb
function modbusWriteRegister(ByVal slaveNo As Integer,
  ByVal pduAddr As Integer,
  ByVal value As Integer) As Integer
cs
int modbusWriteRegister(int slaveNo, int pduAddr, int value)
java
int modbusWriteRegister(int slaveNo, int pduAddr, int value)
uwp
async Task<int> modbusWriteRegister(int slaveNo,
  int pduAddr,
  int value)
py
modbusWriteRegister(slaveNo, pduAddr, value)
php
function modbusWriteRegister($slaveNo, $pduAddr, $value)
es
async modbusWriteRegister(slaveNo, pduAddr, value)
dnp
int modbusWriteRegister(int slaveNo, int pduAddr, int value)
cp
int modbusWriteRegister(int slaveNo, int pduAddr, int value)
cmd
YSerialPort target modbusWriteRegister slaveNo pduAddr value

Cette méthode utilise le code de fonction MODBUS 0x06 (Write Single Register).

Paramètres :

slaveNoaddresse du périphérique MODBUS esclave à piloter
pduAddradresse relative du registre à modifier (indexé à partir de zéro).
valuela valeur 16 bits à appliquer

Retourne :

le nombre de registres affectés sur le périphérique (1)

En cas d'erreur, déclenche une exception ou retourne zéro.

serialport→modbusWriteRegisters()serialport.modbusWriteRegisters()serialport→modbusWriteRegisters()[serialport modbusWriteRegisters: ]serialport.modbusWriteRegisters()serialport.modbusWriteRegisters()serialport.modbusWriteRegisters()serialport.modbusWriteRegisters()serialport.modbusWriteRegisters()serialport.modbusWriteRegisters()serialport→modbusWriteRegisters()serialport.modbusWriteRegisters()serialport.modbusWriteRegisters()serialport.modbusWriteRegisters()YSerialPort modbusWriteRegisters

Modifie l'état de plusieurs registres internes 16 bits contigus sur un périphérique MODBUS.

js
function modbusWriteRegisters(slaveNo, pduAddr, values)
cpp
int modbusWriteRegisters(int slaveNo, int pduAddr, vector<int> values)
m
-(int) modbusWriteRegisters: (int) slaveNo
  : (int) pduAddr
  : (NSMutableArray*) values
pas
LongInt modbusWriteRegisters(slaveNo: LongInt,
  pduAddr: LongInt,
  values: TLongIntArray): LongInt
vb
procedure modbusWriteRegisters(ByVal slaveNo As Integer,
  ByVal pduAddr As Integer,
  ByVal values As List(Of)
cs
int modbusWriteRegisters(int slaveNo,
  int pduAddr,
  List<int> values)
java
int modbusWriteRegisters(int slaveNo,
  int pduAddr,
  ArrayList<Integer> values)
uwp
async Task<int> modbusWriteRegisters(int slaveNo,
  int pduAddr,
  List<int> values)
py
modbusWriteRegisters(slaveNo, pduAddr, values)
php
function modbusWriteRegisters($slaveNo, $pduAddr, $values)
es
async modbusWriteRegisters(slaveNo, pduAddr, values)
dnp
int modbusWriteRegisters(int slaveNo,
  int pduAddr,
  int[] values)
cp
int modbusWriteRegisters(int slaveNo,
  int pduAddr,
  vector<int> values)
cmd
YSerialPort target modbusWriteRegisters slaveNo pduAddr values

Cette méthode utilise le code de fonction MODBUS 0x10 (Write Multiple Registers).

Paramètres :

slaveNoaddresse du périphérique MODBUS esclave à piloter
pduAddradresse relative du premier registre interne à modifier (indexé à partir de zéro).
valuesvecteur de valeurs 16 bits à appliquer

Retourne :

le nombre de registres affectés sur le périphérique

En cas d'erreur, déclenche une exception ou retourne zéro.

serialport→muteValueCallbacks()serialport.muteValueCallbacks()serialport→muteValueCallbacks()[serialport muteValueCallbacks]serialport.muteValueCallbacks()serialport.muteValueCallbacks()serialport.muteValueCallbacks()serialport.muteValueCallbacks()serialport.muteValueCallbacks()serialport.muteValueCallbacks()serialport→muteValueCallbacks()serialport.muteValueCallbacks()serialport.muteValueCallbacks()serialport.muteValueCallbacks()YSerialPort muteValueCallbacks

Désactive l'envoi de chaque changement de la valeur publiée au hub parent.

js
function muteValueCallbacks()
cpp
int muteValueCallbacks()
m
-(int) muteValueCallbacks
pas
LongInt muteValueCallbacks(): LongInt
vb
function muteValueCallbacks() As Integer
cs
int muteValueCallbacks()
java
int muteValueCallbacks()
uwp
async Task<int> muteValueCallbacks()
py
muteValueCallbacks()
php
function muteValueCallbacks()
es
async muteValueCallbacks()
dnp
int muteValueCallbacks()
cp
int muteValueCallbacks()
cmd
YSerialPort target muteValueCallbacks

Vous pouvez utiliser cette fonction pour économiser la bande passante et le CPU sur les machines de faible puissance, ou pour éviter le déclanchement de callbacks HTTP. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

serialport→nextSerialPort()serialport.nextSerialPort()serialport→nextSerialPort()[serialport nextSerialPort]serialport.nextSerialPort()serialport.nextSerialPort()serialport.nextSerialPort()serialport.nextSerialPort()serialport.nextSerialPort()serialport.nextSerialPort()serialport→nextSerialPort()serialport.nextSerialPort()

Continue l'énumération des ports série commencée à l'aide de yFirstSerialPort() Attention, vous ne pouvez faire aucune supposition sur l'ordre dans lequel les ports série sont retournés.

js
function nextSerialPort()
cpp
YSerialPort * nextSerialPort()
m
-(YSerialPort*) nextSerialPort
pas
TYSerialPort nextSerialPort(): TYSerialPort
vb
function nextSerialPort() As YSerialPort
cs
YSerialPort nextSerialPort()
java
YSerialPort nextSerialPort()
uwp
YSerialPort nextSerialPort()
py
nextSerialPort()
php
function nextSerialPort()
es
nextSerialPort()

Si vous souhaitez retrouver un port série spécifique, utilisez SerialPort.findSerialPort() avec un hardwareID ou un nom logique.

Retourne :

un pointeur sur un objet YSerialPort accessible en ligne, ou null lorsque l'énumération est terminée.

serialport→queryHex()serialport.queryHex()serialport→queryHex()[serialport queryHex: ]serialport.queryHex()serialport.queryHex()serialport.queryHex()serialport.queryHex()serialport.queryHex()serialport.queryHex()serialport→queryHex()serialport.queryHex()serialport.queryHex()serialport.queryHex()YSerialPort queryHex

Envoie un message binaire sur le port série, et lit la réponse reçue.

js
function queryHex(hexString, maxWait)
cpp
string queryHex(string hexString, int maxWait)
m
-(NSString*) queryHex: (NSString*) hexString
  : (int) maxWait
pas
string queryHex(hexString: string, maxWait: LongInt): string
vb
function queryHex(ByVal hexString As String, ByVal maxWait As Integer) As String
cs
string queryHex(string hexString, int maxWait)
java
String queryHex(String hexString, int maxWait)
uwp
async Task<string> queryHex(string hexString, int maxWait)
py
queryHex(hexString, maxWait)
php
function queryHex($hexString, $maxWait)
es
async queryHex(hexString, maxWait)
dnp
string queryHex(string hexString, int maxWait)
cp
string queryHex(string hexString, int maxWait)
cmd
YSerialPort target queryHex hexString maxWait

Cette fonction est prévue pour être utilisée lorsque le module est configuré en protocole basé 'Frame'.

Paramètres :

hexStringle message à envoyer, en hexadécimal
maxWaitle temps maximum d'attente pour obtenir une réponse (en millisecondes).

Retourne :

la première trame reçu après l'envoi du message, en hexadécimal. Les trames suivantes peuvent être obtenues avec des appels à readHex ou readMessages.

En cas d'erreur, déclenche une exception ou retourne une chaîne vide.

serialport→queryLine()serialport.queryLine()serialport→queryLine()[serialport queryLine: ]serialport.queryLine()serialport.queryLine()serialport.queryLine()serialport.queryLine()serialport.queryLine()serialport.queryLine()serialport→queryLine()serialport.queryLine()serialport.queryLine()serialport.queryLine()YSerialPort queryLine

Envoie un message sous forme de ligne de texte sur le port série, et lit la réponse reçue.

js
function queryLine(query, maxWait)
cpp
string queryLine(string query, int maxWait)
m
-(NSString*) queryLine: (NSString*) query : (int) maxWait
pas
string queryLine(query: string, maxWait: LongInt): string
vb
function queryLine(ByVal query As String, ByVal maxWait As Integer) As String
cs
string queryLine(string query, int maxWait)
java
String queryLine(String query, int maxWait)
uwp
async Task<string> queryLine(string query, int maxWait)
py
queryLine(query, maxWait)
php
function queryLine($query, $maxWait)
es
async queryLine(query, maxWait)
dnp
string queryLine(string query, int maxWait)
cp
string queryLine(string query, int maxWait)
cmd
YSerialPort target queryLine query maxWait

Cette fonction est prévue pour être utilisée lorsque le module est configuré en protocole 'Line'.

Paramètres :

queryle message à envoyer (sans le retour de chariot)
maxWaitle temps maximum d'attente pour obtenir une réponse (en millisecondes).

Retourne :

la première ligne de texte reçue après l'envoi du message. Les lignes suivantes peuvent être obtenues avec des appels à readLine ou readMessages.

En cas d'erreur, déclenche une exception ou retourne une chaîne vide.

serialport→queryMODBUS()serialport.queryMODBUS()serialport→queryMODBUS()[serialport queryMODBUS: ]serialport.queryMODBUS()serialport.queryMODBUS()serialport.queryMODBUS()serialport.queryMODBUS()serialport.queryMODBUS()serialport.queryMODBUS()serialport→queryMODBUS()serialport.queryMODBUS()serialport.queryMODBUS()serialport.queryMODBUS()YSerialPort queryMODBUS

Envoie un message à un périphérique MODBUS esclave connecté au port série, et lit la réponse reçue.

js
function queryMODBUS(slaveNo, pduBytes)
cpp
vector<int> queryMODBUS(int slaveNo, vector<int> pduBytes)
m
-(NSMutableArray*) queryMODBUS: (int) slaveNo
  : (NSMutableArray*) pduBytes
pas
TLongIntArray queryMODBUS(slaveNo: LongInt,
  pduBytes: TLongIntArray): TLongIntArray
vb
procedure queryMODBUS(ByVal slaveNo As Integer, ByVal pduBytes As List(Of)
cs
List<int> queryMODBUS(int slaveNo, List<int> pduBytes)
java
ArrayList<Integer> queryMODBUS(int slaveNo,
  ArrayList<Integer> pduBytes)
uwp
async Task<List<int>> queryMODBUS(int slaveNo, List<int> pduBytes)
py
queryMODBUS(slaveNo, pduBytes)
php
function queryMODBUS($slaveNo, $pduBytes)
es
async queryMODBUS(slaveNo, pduBytes)
dnp
int[] queryMODBUS(int slaveNo, int[] pduBytes)
cp
vector<int> queryMODBUS(int slaveNo, vector<int> pduBytes)
cmd
YSerialPort target queryMODBUS slaveNo pduBytes

Le contenu du message est le PDU, fourni sous forme de vecteur d'octets.

Paramètres :

slaveNoaddresse du périphérique MODBUS esclave
pduBytesmessage à envoyer (PDU), sous forme de vecteur d'octets. Le premier octet du PDU est le code de fonction MODBUS.

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un tableau vide (ou une réponse d'erreur).

serialport→readArray()serialport.readArray()serialport→readArray()[serialport readArray: ]serialport.readArray()serialport.readArray()serialport.readArray()serialport.readArray()serialport.readArray()serialport.readArray()serialport→readArray()serialport.readArray()serialport.readArray()serialport.readArray()YSerialPort readArray

Lit le contenu du tampon de réception sous forme de liste d'octets, à partir de la position courante dans le flux de donnée.

js
function readArray(nChars)
cpp
vector<int> readArray(int nChars)
m
-(NSMutableArray*) readArray: (int) nChars
pas
TLongIntArray readArray(nChars: LongInt): TLongIntArray
vb
function readArray(ByVal nChars As Integer) As List
cs
List<int> readArray(int nChars)
java
ArrayList<Integer> readArray(int nChars)
uwp
async Task<List<int>> readArray(int nChars)
py
readArray(nChars)
php
function readArray($nChars)
es
async readArray(nChars)
dnp
int[] readArray(int nChars)
cp
vector<int> readArray(int nChars)
cmd
YSerialPort target readArray nChars

Si le contenu à la position n'est plus disponible dans le tampon de réception, la fonction ne retournera que les données disponibles.

Paramètres :

nCharsle nombre maximum de bytes à lire

Retourne :

une liste de bytes avec le contenu du tampon de réception.

En cas d'erreur, déclenche une exception ou retourne un tableau vide.

serialport→readBin()serialport.readBin()serialport→readBin()[serialport readBin: ]serialport.readBin()serialport.readBin()serialport.readBin()serialport.readBin()serialport.readBin()serialport.readBin()serialport→readBin()serialport.readBin()serialport.readBin()serialport.readBin()YSerialPort readBin

Lit le contenu du tampon de réception sous forme d'objet binaire, à partir de la position courante dans le flux de donnée.

js
function readBin(nChars)
cpp
string readBin(int nChars)
m
-(NSMutableData*) readBin: (int) nChars
pas
TByteArray readBin(nChars: LongInt): TByteArray
vb
function readBin(ByVal nChars As Integer) As Byte
cs
byte[] readBin(int nChars)
java
byte[] readBin(int nChars)
uwp
async Task<byte[]> readBin(int nChars)
py
readBin(nChars)
php
function readBin($nChars)
es
async readBin(nChars)
dnp
byte[] readBin(int nChars)
cp
string readBin(int nChars)
cmd
YSerialPort target readBin nChars

Si le contenu à la position n'est plus disponible dans le tampon de réception, la fonction ne retournera que les données disponibles.

Paramètres :

nCharsle nombre maximum de bytes à lire

Retourne :

un objet binaire avec le contenu du tampon de réception.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

serialport→readByte()serialport.readByte()serialport→readByte()[serialport readByte]serialport.readByte()serialport.readByte()serialport.readByte()serialport.readByte()serialport.readByte()serialport.readByte()serialport→readByte()serialport.readByte()serialport.readByte()serialport.readByte()YSerialPort readByte

Lit le prochain byte dans le tampon de réception, à partir de la position courante dans le flux de donnée.

js
function readByte()
cpp
int readByte()
m
-(int) readByte
pas
LongInt readByte(): LongInt
vb
function readByte() As Integer
cs
int readByte()
java
int readByte()
uwp
async Task<int> readByte()
py
readByte()
php
function readByte()
es
async readByte()
dnp
int readByte()
cp
int readByte()
cmd
YSerialPort target readByte

Si le contenu à la position n'est plus disponible dans le tampon de réception, ou si aucun octet n'est disponible pour l'instant, la fonction retourne YAPI_NO_MORE_DATA.

Retourne :

le prochain byte

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

serialport→readHex()serialport.readHex()serialport→readHex()[serialport readHex: ]serialport.readHex()serialport.readHex()serialport.readHex()serialport.readHex()serialport.readHex()serialport.readHex()serialport→readHex()serialport.readHex()serialport.readHex()serialport.readHex()YSerialPort readHex

Lit le contenu du tampon de réception sous forme hexadécimale, à partir de la position courante dans le flux de donnée.

js
function readHex(nBytes)
cpp
string readHex(int nBytes)
m
-(NSString*) readHex: (int) nBytes
pas
string readHex(nBytes: LongInt): string
vb
function readHex(ByVal nBytes As Integer) As String
cs
string readHex(int nBytes)
java
String readHex(int nBytes)
uwp
async Task<string> readHex(int nBytes)
py
readHex(nBytes)
php
function readHex($nBytes)
es
async readHex(nBytes)
dnp
string readHex(int nBytes)
cp
string readHex(int nBytes)
cmd
YSerialPort target readHex nBytes

Si le contenu à la position n'est plus disponible dans le tampon de réception, la fonction ne retournera que les données disponibles.

Paramètres :

nBytesle nombre maximal d'octets à lire

Retourne :

une chaîne de caractère avec le contenu du tampon de réception, encodé en hexadécimal

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

serialport→readLine()serialport.readLine()serialport→readLine()[serialport readLine]serialport.readLine()serialport.readLine()serialport.readLine()serialport.readLine()serialport.readLine()serialport.readLine()serialport→readLine()serialport.readLine()serialport.readLine()serialport.readLine()YSerialPort readLine

Lit la prochaine ligne (ou le prochain message) du tampon de réception, à partir de la position courante dans le flux de donnée.

js
function readLine()
cpp
string readLine()
m
-(NSString*) readLine
pas
string readLine(): string
vb
function readLine() As String
cs
string readLine()
java
String readLine()
uwp
async Task<string> readLine()
py
readLine()
php
function readLine()
es
async readLine()
dnp
string readLine()
cp
string readLine()
cmd
YSerialPort target readLine

Cette fonction est destinée à être utilisée lorsque le module est configuré pour un protocole basé message, comme en mode 'Line' ou en protocole 'Frame'.

Si le contenu à la position n'est plus disponible dans le tampon de réception, la fonction retournera la plus ancienne ligne disponible et déplacera le pointeur de position juste après. Si aucune nouvelle ligne entière n'est disponible, la fonction retourne un chaîne vide.

Retourne :

une chaîne de caractère avec une ligne de texte

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

serialport→readMessages()serialport.readMessages()serialport→readMessages()[serialport readMessages: ]serialport.readMessages()serialport.readMessages()serialport.readMessages()serialport.readMessages()serialport.readMessages()serialport.readMessages()serialport→readMessages()serialport.readMessages()serialport.readMessages()serialport.readMessages()YSerialPort readMessages

Cherche les messages entrants dans le tampon de réception correspondant à un format donné, à partir de la position courante.

js
function readMessages(pattern, maxWait)
cpp
vector<string> readMessages(string pattern, int maxWait)
m
-(NSMutableArray*) readMessages: (NSString*) pattern
  : (int) maxWait
pas
TStringArray readMessages(pattern: string, maxWait: LongInt): TStringArray
vb
function readMessages(ByVal pattern As String, ByVal maxWait As Integer) As List
cs
List<string> readMessages(string pattern, int maxWait)
java
ArrayList<String> readMessages(String pattern, int maxWait)
uwp
async Task<List<string>> readMessages(string pattern, int maxWait)
py
readMessages(pattern, maxWait)
php
function readMessages($pattern, $maxWait)
es
async readMessages(pattern, maxWait)
dnp
string[] readMessages(string pattern, int maxWait)
cp
vector<string> readMessages(string pattern, int maxWait)
cmd
YSerialPort target readMessages pattern maxWait

Cette fonction ne compare et ne retourne que les caractères imprimables. Les protocoles binaires sont gérés sous forme de représentation hexadécimale.

La recherche retourne tous les messages trouvés qui correspondent au format. Tant qu'aucun message adéquat n'est trouvé, la fonction attendra, au maximum pour le temps spécifié en argument (en millisecondes).

Paramètres :

patternune expression régulière limitée décrivant le format de message désiré, ou une chaîne vide si aucun filtrage des messages n'est désiré. Pour les protocoles binaires, le format est appliqué à la représentation hexadécimale du message.
maxWaitle temps maximum d'attente pour obtenir un message, tant qu'aucun n'est trouvé dans le tampon de réception (en millisecondes).

Retourne :

un tableau de chaînes de caractères contenant les messages trouvés. Les messages binaires sont convertis automatiquement en représentation hexadécimale.

En cas d'erreur, déclenche une exception ou retourne un tableau vide.

serialport→readStr()serialport.readStr()serialport→readStr()[serialport readStr: ]serialport.readStr()serialport.readStr()serialport.readStr()serialport.readStr()serialport.readStr()serialport.readStr()serialport→readStr()serialport.readStr()serialport.readStr()serialport.readStr()YSerialPort readStr

Lit le contenu du tampon de réception sous forme de string, à partir de la position courante dans le flux de donnée.

js
function readStr(nChars)
cpp
string readStr(int nChars)
m
-(NSString*) readStr: (int) nChars
pas
string readStr(nChars: LongInt): string
vb
function readStr(ByVal nChars As Integer) As String
cs
string readStr(int nChars)
java
String readStr(int nChars)
uwp
async Task<string> readStr(int nChars)
py
readStr(nChars)
php
function readStr($nChars)
es
async readStr(nChars)
dnp
string readStr(int nChars)
cp
string readStr(int nChars)
cmd
YSerialPort target readStr nChars

Si le contenu à la position n'est plus disponible dans le tampon de réception, la fonction ne retournera que les données disponibles.

Paramètres :

nCharsle nombre maximum de caractères à lire

Retourne :

une chaîne de caractère avec le contenu du tampon de réception.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

serialport→read_avail()serialport.read_avail()serialport→read_avail()[serialport read_avail]serialport.read_avail()serialport.read_avail()serialport.read_avail()serialport.read_avail()serialport.read_avail()serialport.read_avail()serialport→read_avail()serialport.read_avail()serialport.read_avail()serialport.read_avail()YSerialPort read_avail

Retourne le nombre de bytes prêts à être lus dans le tampon de réception, depuis la position courante dans le flux de donnée utilisé par l'objet d'API.

js
function read_avail()
cpp
int read_avail()
m
-(int) read_avail
pas
LongInt read_avail(): LongInt
vb
function read_avail() As Integer
cs
int read_avail()
java
int read_avail()
uwp
async Task<int> read_avail()
py
read_avail()
php
function read_avail()
es
async read_avail()
dnp
int read_avail()
cp
int read_avail()
cmd
YSerialPort target read_avail

Retourne :

le nombre d'octets prêts à être lus

serialport→read_seek()serialport.read_seek()serialport→read_seek()[serialport read_seek: ]serialport.read_seek()serialport.read_seek()serialport.read_seek()serialport.read_seek()serialport.read_seek()serialport.read_seek()serialport→read_seek()serialport.read_seek()serialport.read_seek()serialport.read_seek()YSerialPort read_seek

Change le pointeur de position courante dans le flux de donnée à la valeur spécifiée.

js
function read_seek(absPos)
cpp
int read_seek(int absPos)
m
-(int) read_seek: (int) absPos
pas
LongInt read_seek(absPos: LongInt): LongInt
vb
function read_seek(ByVal absPos As Integer) As Integer
cs
int read_seek(int absPos)
java
int read_seek(int absPos)
uwp
async Task<int> read_seek(int absPos)
py
read_seek(absPos)
php
function read_seek($absPos)
es
async read_seek(absPos)
dnp
int read_seek(int absPos)
cp
int read_seek(int absPos)
cmd
YSerialPort target read_seek absPos

Cette fonction n'a pas d'effet sur le module, elle ne fait que changer la valeur stockée dans l'objet d'API qui sera utilisée pour les prochaines operations de lecture.

Paramètres :

absPosindex de position absolue pour les opérations de lecture suivantes.

Retourne :

rien du tout.

serialport→read_tell()serialport.read_tell()serialport→read_tell()[serialport read_tell]serialport.read_tell()serialport.read_tell()serialport.read_tell()serialport.read_tell()serialport.read_tell()serialport.read_tell()serialport→read_tell()serialport.read_tell()serialport.read_tell()serialport.read_tell()YSerialPort read_tell

Retourne la valeur actuelle du pointeur de position courante dans le flux de donnée utilisé par l'objet d'API.

js
function read_tell()
cpp
int read_tell()
m
-(int) read_tell
pas
LongInt read_tell(): LongInt
vb
function read_tell() As Integer
cs
int read_tell()
java
int read_tell()
uwp
async Task<int> read_tell()
py
read_tell()
php
function read_tell()
es
async read_tell()
dnp
int read_tell()
cp
int read_tell()
cmd
YSerialPort target read_tell

Retourne :

l'index de position absolue pour les prochaines opérations de lecture.

serialport→registerValueCallback()serialport.registerValueCallback()serialport→registerValueCallback()[serialport registerValueCallback: ]serialport.registerValueCallback()serialport.registerValueCallback()serialport.registerValueCallback()serialport.registerValueCallback()serialport.registerValueCallback()serialport.registerValueCallback()serialport→registerValueCallback()serialport.registerValueCallback()

Enregistre la fonction de callback qui est appelée à chaque changement de la valeur publiée.

js
function registerValueCallback(callback)
cpp
int registerValueCallback(YSerialPortValueCallback callback)
m
-(int) registerValueCallback: (YSerialPortValueCallback) callback
pas
LongInt registerValueCallback(callback: TYSerialPortValueCallback): LongInt
vb
function registerValueCallback(ByVal callback As YSerialPortValueCallback) As Integer
cs
int registerValueCallback(ValueCallback callback)
java
int registerValueCallback(UpdateCallback callback)
uwp
async Task<int> registerValueCallback(ValueCallback callback)
py
registerValueCallback(callback)
php
function registerValueCallback($callback)
es
async registerValueCallback(callback)

Ce callback n'est appelé que durant l'exécution de ySleep ou yHandleEvents. Cela permet à l'appelant de contrôler quand les callback peuvent se produire. Il est important d'appeler l'une de ces deux fonctions périodiquement pour garantir que les callback ne soient pas appelés trop tard. Pour désactiver un callback, il suffit d'appeler cette méthode en lui passant un pointeur nul.

Paramètres :

callbackla fonction de callback à rappeler, ou un pointeur nul. La fonction de callback doit accepter deux arguments: l'object fonction dont la valeur a changé, et la chaîne de caractère décrivant la nouvelle valeur publiée.

serialport→reset()serialport.reset()serialport→reset()[serialport reset]serialport.reset()serialport.reset()serialport.reset()serialport.reset()serialport.reset()serialport.reset()serialport→reset()serialport.reset()serialport.reset()serialport.reset()YSerialPort reset

Remet à zéro tous les compteurs et efface les tampons.

js
function reset()
cpp
int reset()
m
-(int) reset
pas
LongInt reset(): LongInt
vb
function reset() As Integer
cs
int reset()
java
int reset()
uwp
async Task<int> reset()
py
reset()
php
function reset()
es
async reset()
dnp
int reset()
cp
int reset()
cmd
YSerialPort target reset

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

serialport→selectJob()serialport.selectJob()serialport→selectJob()[serialport selectJob: ]serialport.selectJob()serialport.selectJob()serialport.selectJob()serialport.selectJob()serialport.selectJob()serialport.selectJob()serialport→selectJob()serialport.selectJob()serialport.selectJob()serialport.selectJob()YSerialPort selectJob

Charge et execute le fichier de tâche spécifié.

js
function selectJob(jobfile)
cpp
int selectJob(string jobfile)
m
-(int) selectJob: (NSString*) jobfile
pas
LongInt selectJob(jobfile: string): LongInt
vb
function selectJob(ByVal jobfile As String) As Integer
cs
int selectJob(string jobfile)
java
int selectJob(String jobfile)
uwp
async Task<int> selectJob(string jobfile)
py
selectJob(jobfile)
php
function selectJob($jobfile)
es
async selectJob(jobfile)
dnp
int selectJob(string jobfile)
cp
int selectJob(string jobfile)
cmd
YSerialPort target selectJob jobfile

Le fichier doit avoir été préalablement créé en utilisant l'interface graphique, ou téléchargé sur le module à l'aide de la fonction uploadJob().

Paramètres :

jobfilenom du fichier de tâche (fichier sur le module)

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

serialport→set_RTS()
serialport→setRTS()
serialport.set_RTS()serialport→set_RTS()[serialport setRTS: ]serialport.set_RTS()serialport.set_RTS()serialport.set_RTS()serialport.set_RTS()serialport.set_RTS()serialport.set_RTS()serialport→set_RTS()serialport.set_RTS()serialport.set_RTS()serialport.set_RTS()YSerialPort set_RTS

Change manuellement l'état de la ligne RTS.

js
function set_RTS(val)
cpp
int set_RTS(int val)
m
-(int) setRTS: (int) val
pas
LongInt set_RTS(val: LongInt): LongInt
vb
function set_RTS(ByVal val As Integer) As Integer
cs
int set_RTS(int val)
java
int set_RTS(int val)
uwp
async Task<int> set_RTS(int val)
py
set_RTS(val)
php
function set_RTS($val)
es
async set_RTS(val)
dnp
int set_RTS(int val)
cp
int set_RTS(int val)
cmd
YSerialPort target set_RTS val

Cette fonction n'a pas d'effet lorsque le contrôle du flux par CTS/RTS est actif, car la ligne RTS est alors pilotée automatiquement.

Paramètres :

val1 pour activer la ligne RTS, 0 pour la désactiver

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

serialport→set_currentJob()
serialport→setCurrentJob()
serialport.set_currentJob()serialport→set_currentJob()[serialport setCurrentJob: ]serialport.set_currentJob()serialport.set_currentJob()serialport.set_currentJob()serialport.set_currentJob()serialport.set_currentJob()serialport.set_currentJob()serialport→set_currentJob()serialport.set_currentJob()serialport.set_currentJob()serialport.set_currentJob()YSerialPort set_currentJob

Sélectionne un fichier de tâches pour exécution immédiate.

js
function set_currentJob(newval)
cpp
int set_currentJob(string newval)
m
-(int) setCurrentJob: (NSString*) newval
pas
integer set_currentJob(newval: string): integer
vb
function set_currentJob(ByVal newval As String) As Integer
cs
int set_currentJob(string newval)
java
int set_currentJob(String newval)
uwp
async Task<int> set_currentJob(string newval)
py
set_currentJob(newval)
php
function set_currentJob($newval)
es
async set_currentJob(newval)
dnp
int set_currentJob(string newval)
cp
int set_currentJob(string newval)
cmd
YSerialPort target set_currentJob newval

Si une chaîne vide est passée en argument, stoppe immédiatement l'exécution du fichier de tâches actuel.

Paramètres :

newvalune chaîne de caractères

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

serialport→set_logicalName()
serialport→setLogicalName()
serialport.set_logicalName()serialport→set_logicalName()[serialport setLogicalName: ]serialport.set_logicalName()serialport.set_logicalName()serialport.set_logicalName()serialport.set_logicalName()serialport.set_logicalName()serialport.set_logicalName()serialport→set_logicalName()serialport.set_logicalName()serialport.set_logicalName()serialport.set_logicalName()YSerialPort set_logicalName

Modifie le nom logique du port série.

js
function set_logicalName(newval)
cpp
int set_logicalName(string newval)
m
-(int) setLogicalName: (NSString*) newval
pas
integer set_logicalName(newval: string): integer
vb
function set_logicalName(ByVal newval As String) As Integer
cs
int set_logicalName(string newval)
java
int set_logicalName(String newval)
uwp
async Task<int> set_logicalName(string newval)
py
set_logicalName(newval)
php
function set_logicalName($newval)
es
async set_logicalName(newval)
dnp
int set_logicalName(string newval)
cp
int set_logicalName(string newval)
cmd
YSerialPort target set_logicalName newval

Vous pouvez utiliser yCheckLogicalName() pour vérifier si votre paramètre est valide. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Paramètres :

newvalune chaîne de caractères représentant le nom logique du port série.

Retourne :

YAPI_SUCCESS si l'appel se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

serialport→set_protocol()
serialport→setProtocol()
serialport.set_protocol()serialport→set_protocol()[serialport setProtocol: ]serialport.set_protocol()serialport.set_protocol()serialport.set_protocol()serialport.set_protocol()serialport.set_protocol()serialport.set_protocol()serialport→set_protocol()serialport.set_protocol()serialport.set_protocol()serialport.set_protocol()YSerialPort set_protocol

Modifie le type de protocol utilisé sur la communication série.

js
function set_protocol(newval)
cpp
int set_protocol(string newval)
m
-(int) setProtocol: (NSString*) newval
pas
integer set_protocol(newval: string): integer
vb
function set_protocol(ByVal newval As String) As Integer
cs
int set_protocol(string newval)
java
int set_protocol(String newval)
uwp
async Task<int> set_protocol(string newval)
py
set_protocol(newval)
php
function set_protocol($newval)
es
async set_protocol(newval)
dnp
int set_protocol(string newval)
cp
int set_protocol(string newval)
cmd
YSerialPort target set_protocol newval

Les valeurs possibles sont "Line" pour des messages ASCII séparés par des retours de ligne, "StxEtx" pour des messages ASCII séparés délimités par les codes STX/ETX, "Frame:[timeout]ms" pour des messages binaires séparés par une temporisation, "Modbus-ASCII" pour des messages MODBUS en mode ASCII, "Modbus-RTU" pour des messages MODBUS en mode RTU, "Wiegand-ASCII" pour des messages Wiegand en mode ASCII, "Wiegand-26","Wiegand-34", etc pour des messages Wiegand en mode octet, "Char" pour un flux ASCII continu ou "Byte" pour un flux binaire continue. Le suffixe "/[wait]ms" peut être ajouté pour réduire la cadence d'émission de sorte à ce qu'il y ait au minimum le nombre spécifié de millisecondes d'intervalle entre l'envoi de chaque byte. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Paramètres :

newvalune chaîne de caractères représentant le type de protocol utilisé sur la communication série

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

serialport→set_serialMode()
serialport→setSerialMode()
serialport.set_serialMode()serialport→set_serialMode()[serialport setSerialMode: ]serialport.set_serialMode()serialport.set_serialMode()serialport.set_serialMode()serialport.set_serialMode()serialport.set_serialMode()serialport.set_serialMode()serialport→set_serialMode()serialport.set_serialMode()serialport.set_serialMode()serialport.set_serialMode()YSerialPort set_serialMode

Modifie les paramètres de communication du port, sous forme d'une chaîne de caractères du type "9600,8N1".

js
function set_serialMode(newval)
cpp
int set_serialMode(string newval)
m
-(int) setSerialMode: (NSString*) newval
pas
integer set_serialMode(newval: string): integer
vb
function set_serialMode(ByVal newval As String) As Integer
cs
int set_serialMode(string newval)
java
int set_serialMode(String newval)
uwp
async Task<int> set_serialMode(string newval)
py
set_serialMode(newval)
php
function set_serialMode($newval)
es
async set_serialMode(newval)
dnp
int set_serialMode(string newval)
cp
int set_serialMode(string newval)
cmd
YSerialPort target set_serialMode newval

La chaîne contient le taux de transfert, le nombre de bits de données, la parité parité et le nombre de bits d'arrêt. Un suffixe supplémentaire optionnel peut être inclus pour activer une option de contrôle de flux: "CtsRts" pour le contrôle de flux matériel, "XOnXOff" pour le contrôle de flux logique et "Simplex" pour l'utilisation du signal RTS pour l'acquisition d'un bus partagé (tel qu'utilisé pour certains adaptateurs RS485 par exemple). N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Paramètres :

newvalune chaîne de caractères représentant les paramètres de communication du port, sous forme d'une chaîne de caractères du type "9600,8N1"

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

serialport→set_startupJob()
serialport→setStartupJob()
serialport.set_startupJob()serialport→set_startupJob()[serialport setStartupJob: ]serialport.set_startupJob()serialport.set_startupJob()serialport.set_startupJob()serialport.set_startupJob()serialport.set_startupJob()serialport.set_startupJob()serialport→set_startupJob()serialport.set_startupJob()serialport.set_startupJob()serialport.set_startupJob()YSerialPort set_startupJob

Modifie le nom du job à exécuter au démarrage du module.

js
function set_startupJob(newval)
cpp
int set_startupJob(string newval)
m
-(int) setStartupJob: (NSString*) newval
pas
integer set_startupJob(newval: string): integer
vb
function set_startupJob(ByVal newval As String) As Integer
cs
int set_startupJob(string newval)
java
int set_startupJob(String newval)
uwp
async Task<int> set_startupJob(string newval)
py
set_startupJob(newval)
php
function set_startupJob($newval)
es
async set_startupJob(newval)
dnp
int set_startupJob(string newval)
cp
int set_startupJob(string newval)
cmd
YSerialPort target set_startupJob newval

N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Paramètres :

newvalune chaîne de caractères représentant le nom du job à exécuter au démarrage du module

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

serialport→set_userData()
serialport→setUserData()
serialport.set_userData()serialport→set_userData()[serialport setUserData: ]serialport.set_userData()serialport.set_userData()serialport.set_userData()serialport.set_userData()serialport.set_userData()serialport→set_userData()serialport.set_userData()

Enregistre un contexte libre dans l'attribut userData de la fonction, afin de le retrouver plus tard à l'aide de la méthode get_userData.

js
function set_userData(data)
cpp
void set_userData(void * data)
m
-(void) setUserData: (id) data
pas
set_userData(data: Tobject)
vb
procedure set_userData(ByVal data As Object)
cs
void set_userData(object data)
java
void set_userData(Object data)
py
set_userData(data)
php
function set_userData($data)
es
async set_userData(data)

Cet attribut n'es pas utilisé directement par l'API. Il est à la disposition de l'appelant pour stocker un contexte.

Paramètres :

dataobjet quelconque à mémoriser

serialport→set_voltageLevel()
serialport→setVoltageLevel()
serialport.set_voltageLevel()serialport→set_voltageLevel()[serialport setVoltageLevel: ]serialport.set_voltageLevel()serialport.set_voltageLevel()serialport.set_voltageLevel()serialport.set_voltageLevel()serialport.set_voltageLevel()serialport.set_voltageLevel()serialport→set_voltageLevel()serialport.set_voltageLevel()serialport.set_voltageLevel()serialport.set_voltageLevel()YSerialPort set_voltageLevel

Modifie le niveau de tension utilisé par le module sur le port série.

js
function set_voltageLevel(newval)
cpp
int set_voltageLevel(Y_VOLTAGELEVEL_enum newval)
m
-(int) setVoltageLevel: (Y_VOLTAGELEVEL_enum) newval
pas
integer set_voltageLevel(newval: Integer): integer
vb
function set_voltageLevel(ByVal newval As Integer) As Integer
cs
int set_voltageLevel(int newval)
java
int set_voltageLevel(int newval)
uwp
async Task<int> set_voltageLevel(int newval)
py
set_voltageLevel(newval)
php
function set_voltageLevel($newval)
es
async set_voltageLevel(newval)
dnp
int set_voltageLevel(int newval)
cp
int set_voltageLevel(int newval)
cmd
YSerialPort target set_voltageLevel newval

Les valeurs valides dépendent du modèle de module Yoctopuce hébergeant le port série. Consultez la documentation de votre module pour savoir quelles valeurs sont supportées. Affecter une valeur invalide n'aura aucun effet. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Paramètres :

newvalune valeur parmi Y_VOLTAGELEVEL_OFF, Y_VOLTAGELEVEL_TTL3V, Y_VOLTAGELEVEL_TTL3VR, Y_VOLTAGELEVEL_TTL5V, Y_VOLTAGELEVEL_TTL5VR, Y_VOLTAGELEVEL_RS232, Y_VOLTAGELEVEL_RS485 et Y_VOLTAGELEVEL_TTL1V8 représentant le niveau de tension utilisé par le module sur le port série

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

serialport→snoopMessages()serialport.snoopMessages()serialport→snoopMessages()[serialport snoopMessages: ]serialport.snoopMessages()serialport.snoopMessages()serialport.snoopMessages()serialport.snoopMessages()serialport.snoopMessages()serialport.snoopMessages()serialport→snoopMessages()serialport.snoopMessages()serialport.snoopMessages()serialport.snoopMessages()YSerialPort snoopMessages

Récupère les messages dans la mémoire tampon du module série (dans les deux directions), à partir de la position courante.

js
function snoopMessages(maxWait)
cpp
vector<YSnoopingRecord> snoopMessages(int maxWait)
m
-(NSMutableArray*) snoopMessages: (int) maxWait
pas
TYSnoopingRecordArray snoopMessages(maxWait: LongInt): TYSnoopingRecordArray
vb
function snoopMessages(ByVal maxWait As Integer) As List
cs
List<YSnoopingRecord> snoopMessages(int maxWait)
java
ArrayList<YSnoopingRecord> snoopMessages(int maxWait)
uwp
async Task<List<YSnoopingRecord>> snoopMessages(int maxWait)
py
snoopMessages(maxWait)
php
function snoopMessages($maxWait)
es
async snoopMessages(maxWait)
dnp
YSnoopingRecordProxy[] snoopMessages(int maxWait)
cp
vector<YSnoopingRecordProxy> snoopMessages(int maxWait)
cmd
YSerialPort target snoopMessages maxWait

Cette fonction ne compare et ne retourne que les caractères imprimables. Les protocoles binaires sont gérés sous forme de représentation hexadécimale.

Tant qu'aucun message adéquat n'est trouvé, la fonction attendra, au maximum pour le temps spécifié en argument (en millisecondes).

Paramètres :

maxWaitle temps maximum d'attente pour obtenir un message, tant qu'aucun n'est trouvé dans le tampon de réception (en millisecondes).

Retourne :

un tableau de YSnoopingRecord contenant les messages trouvés. Les messages binaires sont convertis automatiquement en représentation hexadécimale.

En cas d'erreur, déclenche une exception ou retourne un tableau vide.

serialport→unmuteValueCallbacks()serialport.unmuteValueCallbacks()serialport→unmuteValueCallbacks()[serialport unmuteValueCallbacks]serialport.unmuteValueCallbacks()serialport.unmuteValueCallbacks()serialport.unmuteValueCallbacks()serialport.unmuteValueCallbacks()serialport.unmuteValueCallbacks()serialport.unmuteValueCallbacks()serialport→unmuteValueCallbacks()serialport.unmuteValueCallbacks()serialport.unmuteValueCallbacks()serialport.unmuteValueCallbacks()YSerialPort unmuteValueCallbacks

Réactive l'envoi de chaque changement de la valeur publiée au hub parent.

js
function unmuteValueCallbacks()
cpp
int unmuteValueCallbacks()
m
-(int) unmuteValueCallbacks
pas
LongInt unmuteValueCallbacks(): LongInt
vb
function unmuteValueCallbacks() As Integer
cs
int unmuteValueCallbacks()
java
int unmuteValueCallbacks()
uwp
async Task<int> unmuteValueCallbacks()
py
unmuteValueCallbacks()
php
function unmuteValueCallbacks()
es
async unmuteValueCallbacks()
dnp
int unmuteValueCallbacks()
cp
int unmuteValueCallbacks()
cmd
YSerialPort target unmuteValueCallbacks

Cette fonction annule un précédent appel à muteValueCallbacks(). N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

serialport→uploadJob()serialport.uploadJob()serialport→uploadJob()[serialport uploadJob: ]serialport.uploadJob()serialport.uploadJob()serialport.uploadJob()serialport.uploadJob()serialport.uploadJob()serialport.uploadJob()serialport→uploadJob()serialport.uploadJob()serialport.uploadJob()serialport.uploadJob()YSerialPort uploadJob

Sauvegarde une définition de tâche (au format JSON) dans un fichier.

js
function uploadJob(jobfile, jsonDef)
cpp
int uploadJob(string jobfile, string jsonDef)
m
-(int) uploadJob: (NSString*) jobfile
  : (NSString*) jsonDef
pas
LongInt uploadJob(jobfile: string, jsonDef: string): LongInt
vb
function uploadJob(ByVal jobfile As String, ByVal jsonDef As String) As Integer
cs
int uploadJob(string jobfile, string jsonDef)
java
int uploadJob(String jobfile, String jsonDef)
uwp
async Task<int> uploadJob(string jobfile, string jsonDef)
py
uploadJob(jobfile, jsonDef)
php
function uploadJob($jobfile, $jsonDef)
es
async uploadJob(jobfile, jsonDef)
dnp
int uploadJob(string jobfile, string jsonDef)
cp
int uploadJob(string jobfile, string jsonDef)
cmd
YSerialPort target uploadJob jobfile jsonDef

Le fichier peut ensuite être activé à l'aide de la méthode selectJob().

Paramètres :

jobfilenom du fichier de tâche sur le module
jsonDefune chaîne de caractères contenant la définition du job en JSON

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

serialport→wait_async()serialport.wait_async()serialport.wait_async()

Attend que toutes les commandes asynchrones en cours d'exécution sur le module soient terminées, et appelle le callback passé en paramètre.

js
function wait_async(callback, context)
es
wait_async(callback, context)

La fonction callback peut donc librement utiliser des fonctions synchrones ou asynchrones, sans risquer de bloquer la machine virtuelle Javascript.

Paramètres :

callbackfonction de callback qui sera appelée dès que toutes les commandes en cours d'exécution sur le module seront terminées La fonction callback reçoit deux arguments: le contexte fourni par l'appelant et l'objet fonction concerné.
contextcontexte fourni par l'appelant, et qui sera passé tel-quel à la fonction de callback

Retourne :

rien du tout.

serialport→writeArray()serialport.writeArray()serialport→writeArray()[serialport writeArray: ]serialport.writeArray()serialport.writeArray()serialport.writeArray()serialport.writeArray()serialport.writeArray()serialport.writeArray()serialport→writeArray()serialport.writeArray()serialport.writeArray()serialport.writeArray()YSerialPort writeArray

Envoie une séquence d'octets (fournie sous forme d'une liste) sur le port série.

js
function writeArray(byteList)
cpp
int writeArray(vector<int> byteList)
m
-(int) writeArray: (NSMutableArray*) byteList
pas
LongInt writeArray(byteList: TLongIntArray): LongInt
vb
procedure writeArray(ByVal byteList As List(Of)
cs
int writeArray(List<int> byteList)
java
int writeArray(ArrayList<Integer> byteList)
uwp
async Task<int> writeArray(List<int> byteList)
py
writeArray(byteList)
php
function writeArray($byteList)
es
async writeArray(byteList)
dnp
int writeArray(int[] byteList)
cp
int writeArray(vector<int> byteList)
cmd
YSerialPort target writeArray byteList

Paramètres :

byteListla liste d'octets à envoyer

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

serialport→writeBin()serialport.writeBin()serialport→writeBin()[serialport writeBin: ]serialport.writeBin()serialport.writeBin()serialport.writeBin()serialport.writeBin()serialport.writeBin()serialport.writeBin()serialport→writeBin()serialport.writeBin()serialport.writeBin()serialport.writeBin()YSerialPort writeBin

Envoie un objet binaire tel quel sur le port série.

js
function writeBin(buff)
cpp
int writeBin(string buff)
m
-(int) writeBin: (NSData*) buff
pas
LongInt writeBin(buff: TByteArray): LongInt
vb
procedure writeBin(ByVal buff As Byte()
cs
int writeBin(byte[] buff)
java
int writeBin(byte[] buff)
uwp
async Task<int> writeBin(byte[] buff)
py
writeBin(buff)
php
function writeBin($buff)
es
async writeBin(buff)
dnp
int writeBin(byte[] buff)
cp
int writeBin(string buff)
cmd
YSerialPort target writeBin buff

Paramètres :

buffl'objet binaire à envoyer

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

serialport→writeByte()serialport.writeByte()serialport→writeByte()[serialport writeByte: ]serialport.writeByte()serialport.writeByte()serialport.writeByte()serialport.writeByte()serialport.writeByte()serialport.writeByte()serialport→writeByte()serialport.writeByte()serialport.writeByte()serialport.writeByte()YSerialPort writeByte

Envoie un unique byte sur le port série.

js
function writeByte(code)
cpp
int writeByte(int code)
m
-(int) writeByte: (int) code
pas
LongInt writeByte(code: LongInt): LongInt
vb
function writeByte(ByVal code As Integer) As Integer
cs
int writeByte(int code)
java
int writeByte(int code)
uwp
async Task<int> writeByte(int code)
py
writeByte(code)
php
function writeByte($code)
es
async writeByte(code)
dnp
int writeByte(int code)
cp
int writeByte(int code)
cmd
YSerialPort target writeByte code

Paramètres :

codele byte à envoyer

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

serialport→writeHex()serialport.writeHex()serialport→writeHex()[serialport writeHex: ]serialport.writeHex()serialport.writeHex()serialport.writeHex()serialport.writeHex()serialport.writeHex()serialport.writeHex()serialport→writeHex()serialport.writeHex()serialport.writeHex()serialport.writeHex()YSerialPort writeHex

Envoie une séquence d'octets (fournie sous forme de chaîne hexadécimale) sur le port série.

js
function writeHex(hexString)
cpp
int writeHex(string hexString)
m
-(int) writeHex: (NSString*) hexString
pas
LongInt writeHex(hexString: string): LongInt
vb
function writeHex(ByVal hexString As String) As Integer
cs
int writeHex(string hexString)
java
int writeHex(String hexString)
uwp
async Task<int> writeHex(string hexString)
py
writeHex(hexString)
php
function writeHex($hexString)
es
async writeHex(hexString)
dnp
int writeHex(string hexString)
cp
int writeHex(string hexString)
cmd
YSerialPort target writeHex hexString

Paramètres :

hexStringla chaîne hexadécimale à envoyer

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

serialport→writeLine()serialport.writeLine()serialport→writeLine()[serialport writeLine: ]serialport.writeLine()serialport.writeLine()serialport.writeLine()serialport.writeLine()serialport.writeLine()serialport.writeLine()serialport→writeLine()serialport.writeLine()serialport.writeLine()serialport.writeLine()YSerialPort writeLine

Envoie une chaîne de caractères sur le port série, suivie d'un saut de ligne (CR LF).

js
function writeLine(text)
cpp
int writeLine(string text)
m
-(int) writeLine: (NSString*) text
pas
LongInt writeLine(text: string): LongInt
vb
function writeLine(ByVal text As String) As Integer
cs
int writeLine(string text)
java
int writeLine(String text)
uwp
async Task<int> writeLine(string text)
py
writeLine(text)
php
function writeLine($text)
es
async writeLine(text)
dnp
int writeLine(string text)
cp
int writeLine(string text)
cmd
YSerialPort target writeLine text

Paramètres :

textla chaîne de caractères à envoyer

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

serialport→writeMODBUS()serialport.writeMODBUS()serialport→writeMODBUS()[serialport writeMODBUS: ]serialport.writeMODBUS()serialport.writeMODBUS()serialport.writeMODBUS()serialport.writeMODBUS()serialport.writeMODBUS()serialport.writeMODBUS()serialport→writeMODBUS()serialport.writeMODBUS()serialport.writeMODBUS()serialport.writeMODBUS()YSerialPort writeMODBUS

Envoie une commande MODBUS (fournie sous forme de chaîne hexadécimale) sur le port série.

js
function writeMODBUS(hexString)
cpp
int writeMODBUS(string hexString)
m
-(int) writeMODBUS: (NSString*) hexString
pas
LongInt writeMODBUS(hexString: string): LongInt
vb
function writeMODBUS(ByVal hexString As String) As Integer
cs
int writeMODBUS(string hexString)
java
int writeMODBUS(String hexString)
uwp
async Task<int> writeMODBUS(string hexString)
py
writeMODBUS(hexString)
php
function writeMODBUS($hexString)
es
async writeMODBUS(hexString)
dnp
int writeMODBUS(string hexString)
cp
int writeMODBUS(string hexString)
cmd
YSerialPort target writeMODBUS hexString

Le message doit commencer par l'adresse de destination. Le CRC (ou LRC) MODBUS est ajouté automatiquement par la fonction. Cette fonction n'attend pas de réponse.

Paramètres :

hexStringle message à envoyer, en hexadécimal, sans le CRC/LRC

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

serialport→writeStr()serialport.writeStr()serialport→writeStr()[serialport writeStr: ]serialport.writeStr()serialport.writeStr()serialport.writeStr()serialport.writeStr()serialport.writeStr()serialport.writeStr()serialport→writeStr()serialport.writeStr()serialport.writeStr()serialport.writeStr()YSerialPort writeStr

Envoie une chaîne de caractères telle quelle sur le port série.

js
function writeStr(text)
cpp
int writeStr(string text)
m
-(int) writeStr: (NSString*) text
pas
LongInt writeStr(text: string): LongInt
vb
function writeStr(ByVal text As String) As Integer
cs
int writeStr(string text)
java
int writeStr(String text)
uwp
async Task<int> writeStr(string text)
py
writeStr(text)
php
function writeStr($text)
es
async writeStr(text)
dnp
int writeStr(string text)
cp
int writeStr(string text)
cmd
YSerialPort target writeStr text

Paramètres :

textla chaîne de caractères à envoyer

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

serialport→writeStxEtx()serialport.writeStxEtx()serialport→writeStxEtx()[serialport writeStxEtx: ]serialport.writeStxEtx()serialport.writeStxEtx()serialport.writeStxEtx()serialport.writeStxEtx()serialport.writeStxEtx()serialport.writeStxEtx()serialport→writeStxEtx()serialport.writeStxEtx()serialport.writeStxEtx()serialport.writeStxEtx()YSerialPort writeStxEtx

Envoie une chaîne de caractères sur le port série, précédée d'un code STX et suivie d'un code ETX.

js
function writeStxEtx(text)
cpp
int writeStxEtx(string text)
m
-(int) writeStxEtx: (NSString*) text
pas
LongInt writeStxEtx(text: string): LongInt
vb
function writeStxEtx(ByVal text As String) As Integer
cs
int writeStxEtx(string text)
java
int writeStxEtx(String text)
uwp
async Task<int> writeStxEtx(string text)
py
writeStxEtx(text)
php
function writeStxEtx($text)
es
async writeStxEtx(text)
dnp
int writeStxEtx(string text)
cp
int writeStxEtx(string text)
cmd
YSerialPort target writeStxEtx text

Paramètres :

textla chaîne de caractères à envoyer

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

24.4. La classe YFiles

Interface pour intéragir avec les systèmes de fichier, disponibles par exemple dans le Yocto-Buzzer, le Yocto-Color-V2, le Yocto-RS485-V2 et le YoctoHub-Ethernet

La class YFiles permet d'accéder au système de fichier embarqué sur certains modules Yoctopuce. Le stockage de fichiers permet par exemple de personnaliser un service web (dans le cas d'un module connecté au réseau) ou pour d'ajouter un police de caractères (dans le cas d'un module d'affichage).

Pour utiliser les fonctions décrites ici, vous devez inclure:

js
<script type='text/javascript' src='yocto_files.js'></script>
cpp
#include "yocto_files.h"
m
#import "yocto_files.h"
pas
uses yocto_files;
vb
yocto_files.vb
cs
yocto_files.cs
java
import com.yoctopuce.YoctoAPI.YFiles;
uwp
import com.yoctopuce.YoctoAPI.YFiles;
py
from yocto_files import *
php
require_once('yocto_files.php');
es
in HTML: <script src="../../lib/yocto_files.js"></script>
in node.js: require('yoctolib-es2017/yocto_files.js');
dnp
import YoctoProxyAPI.YFilesProxy
cp
#include "yocto_files_proxy.h"
vi
YFiles.vi
ml
import YoctoProxyAPI.YFilesProxy
Fonction globales
YFiles.FindFiles(func)

Permet de retrouver un système de fichier d'après un identifiant donné.

YFiles.FindFilesInContext(yctx, func)

Permet de retrouver un système de fichier d'après un identifiant donné dans un Context YAPI.

YFiles.FirstFiles()

Commence l'énumération des systèmes de fichier accessibles par la librairie.

YFiles.FirstFilesInContext(yctx)

Commence l'énumération des systèmes de fichier accessibles par la librairie.

YFiles.GetSimilarFunctions()

Enumère toutes les fonctions de type Files disponibles sur les modules actuellement joignables par la librairie, et retourne leurs identifiants matériels uniques (hardwareId).

Propriétés des objets YFilesProxy
files→AdvertisedValue [lecture seule]

Courte chaîne de caractères représentant l'état courant de la fonction.

files→FilesCount [lecture seule]

Nombre de fichiers présents dans le système de fichier.

files→FriendlyName [lecture seule]

Identifiant global de la fonction au format NOM_MODULE.NOM_FONCTION.

files→FunctionId [lecture seule]

Identifiant matériel du système de fichier, sans référence au module.

files→HardwareId [lecture seule]

Identifiant matériel unique de la fonction au format SERIAL.FUNCTIONID.

files→IsOnline [lecture seule]

Vérifie si le module hébergeant la fonction est joignable, sans déclencher d'erreur.

files→LogicalName [modifiable]

Nom logique de la fonction.

files→SerialNumber [lecture seule]

Numéro de série du module, préprogrammé en usine.

Méthodes des objets YFiles
files→clearCache()

Invalide le cache.

files→describe()

Retourne un court texte décrivant de manière non-ambigüe l'instance du système de fichier au format TYPE(NAME)=SERIAL.FUNCTIONID.

files→download(pathname)

Télécharge le fichier choisi du filesystème et retourne son contenu.

files→download_async(pathname, callback, context)

Procède au chargement du bloc suivant de mesures depuis l'enregistreur de données du module, de manière asynchrone.

files→fileExist(filename)

Test si un fichier esit dans le système de fichier du module.

files→format_fs()

Rétabli le système de fichier dans on état original, défragmenté.

files→get_advertisedValue()

Retourne la valeur courante du système de fichier (pas plus de 6 caractères).

files→get_errorMessage()

Retourne le message correspondant à la dernière erreur survenue lors de l'utilisation du système de fichier.

files→get_errorType()

Retourne le code d'erreur correspondant à la dernière erreur survenue lors de l'utilisation du système de fichier.

files→get_filesCount()

Retourne le nombre de fichiers présents dans le système de fichier.

files→get_freeSpace()

Retourne l'espace disponible dans le système de fichier pour charger des nouveaux fichiers, en octets.

files→get_friendlyName()

Retourne un identifiant global du système de fichier au format NOM_MODULE.NOM_FONCTION.

files→get_functionDescriptor()

Retourne un identifiant unique de type YFUN_DESCR correspondant à la fonction.

files→get_functionId()

Retourne l'identifiant matériel du système de fichier, sans référence au module.

files→get_hardwareId()

Retourne l'identifiant matériel unique du système de fichier au format SERIAL.FUNCTIONID.

files→get_list(pattern)

Retourne une liste d'objets objet YFileRecord qui décrivent les fichiers présents dans le système de fichier.

files→get_logicalName()

Retourne le nom logique du système de fichier.

files→get_module()

Retourne l'objet YModule correspondant au module Yoctopuce qui héberge la fonction.

files→get_module_async(callback, context)

Retourne l'objet YModule correspondant au module Yoctopuce qui héberge la fonction.

files→get_serialNumber()

Retourne le numéro de série du module, préprogrammé en usine.

files→get_userData()

Retourne le contenu de l'attribut userData, précédemment stocké à l'aide de la méthode set_userData.

files→isOnline()

Vérifie si le module hébergeant le système de fichier est joignable, sans déclencher d'erreur.

files→isOnline_async(callback, context)

Vérifie si le module hébergeant le système de fichier est joignable, sans déclencher d'erreur.

files→isReadOnly()

Test si la fonction est en lecture seule.

files→load(msValidity)

Met en cache les valeurs courantes du système de fichier, avec une durée de validité spécifiée.

files→loadAttribute(attrName)

Retourne la valeur actuelle d'un attribut spécifique de la fonction, sous forme de texte, le plus rapidement possible mais sans passer par le cache.

files→load_async(msValidity, callback, context)

Met en cache les valeurs courantes du système de fichier, avec une durée de validité spécifiée.

files→muteValueCallbacks()

Désactive l'envoi de chaque changement de la valeur publiée au hub parent.

files→nextFiles()

Continue l'énumération des systèmes de fichier commencée à l'aide de yFirstFiles() Attention, vous ne pouvez faire aucune supposition sur l'ordre dans lequel les systèmes de fichier sont retournés.

files→registerValueCallback(callback)

Enregistre la fonction de callback qui est appelée à chaque changement de la valeur publiée.

files→remove(pathname)

Efface un fichier, spécifié par son path complet, du système de fichier.

files→set_logicalName(newval)

Modifie le nom logique du système de fichier.

files→set_userData(data)

Enregistre un contexte libre dans l'attribut userData de la fonction, afin de le retrouver plus tard à l'aide de la méthode get_userData.

files→unmuteValueCallbacks()

Réactive l'envoi de chaque changement de la valeur publiée au hub parent.

files→upload(pathname, content)

Télécharge un contenu vers le système de fichier, au chemin d'accès spécifié.

files→wait_async(callback, context)

Attend que toutes les commandes asynchrones en cours d'exécution sur le module soient terminées, et appelle le callback passé en paramètre.

YFiles.FindFiles()
YFiles.FindFiles()
yFindFiles()yFindFiles()[YFiles FindFiles: ]yFindFiles()yFindFiles()YFiles.FindFiles()YFiles.FindFiles()YFiles.FindFiles()YFiles.FindFiles()yFindFiles()YFiles.FindFiles()YFiles.FindFiles()YFiles.FindFiles()

Permet de retrouver un système de fichier d'après un identifiant donné.

js
function yFindFiles(func)
cpp
YFiles* yFindFiles(string func)
m
+(YFiles*) FindFiles: (NSString*) func
pas
TYFiles yFindFiles(func: string): TYFiles
vb
function yFindFiles(ByVal func As String) As YFiles
cs
static YFiles FindFiles(string func)
java
static YFiles FindFiles(String func)
uwp
static YFiles FindFiles(string func)
py
FindFiles(func)
php
function yFindFiles($func)
es
static FindFiles(func)
dnp
static YFilesProxy FindFiles(string func)
cp
static YFilesProxy * FindFiles(string func)

L'identifiant peut être spécifié sous plusieurs formes:

Cette fonction n'exige pas que le système de fichier soit en ligne au moment ou elle est appelée, l'objet retourné sera néanmoins valide. Utiliser la méthode YFiles.isOnline() pour tester si le système de fichier est utilisable à un moment donné. En cas d'ambiguïté lorsqu'on fait une recherche par nom logique, aucune erreur ne sera notifiée: la première instance trouvée sera renvoyée. La recherche se fait d'abord par nom matériel, puis par nom logique.

Si un appel à la méthode is_online() de cet objet renvoie FAUX alors que vous êtes sûr que le module correspondant est bien branché, vérifiez que vous n'avez pas oublié d'appeler registerHub() à l'initialisation de de l'application.

Paramètres :

funcune chaîne de caractères qui référence le système de fichier sans ambiguïté, par exemple YBUZZER2.files.

Retourne :

un objet de classe YFiles qui permet ensuite de contrôler le système de fichier.

YFiles.FindFilesInContext()
YFiles.FindFilesInContext()
YFiles.FindFilesInContext()YFiles.FindFilesInContext()YFiles.FindFilesInContext()

Permet de retrouver un système de fichier d'après un identifiant donné dans un Context YAPI.

java
static YFiles FindFilesInContext(YAPIContext yctx, String func)
uwp
static YFiles FindFilesInContext(YAPIContext yctx, string func)
es
static FindFilesInContext(yctx, func)

L'identifiant peut être spécifié sous plusieurs formes:

Cette fonction n'exige pas que le système de fichier soit en ligne au moment ou elle est appelée, l'objet retourné sera néanmoins valide. Utiliser la méthode YFiles.isOnline() pour tester si le système de fichier est utilisable à un moment donné. En cas d'ambiguïté lorsqu'on fait une recherche par nom logique, aucune erreur ne sera notifiée: la première instance trouvée sera renvoyée. La recherche se fait d'abord par nom matériel, puis par nom logique.

Paramètres :

yctxun contexte YAPI
funcune chaîne de caractères qui référence le système de fichier sans ambiguïté, par exemple YBUZZER2.files.

Retourne :

un objet de classe YFiles qui permet ensuite de contrôler le système de fichier.

YFiles.FirstFiles()
YFiles.FirstFiles()
yFirstFiles()yFirstFiles()[YFiles FirstFiles]yFirstFiles()yFirstFiles()YFiles.FirstFiles()YFiles.FirstFiles()YFiles.FirstFiles()YFiles.FirstFiles()yFirstFiles()YFiles.FirstFiles()

Commence l'énumération des systèmes de fichier accessibles par la librairie.

js
function yFirstFiles()
cpp
YFiles * yFirstFiles()
m
+(YFiles*) FirstFiles
pas
TYFiles yFirstFiles(): TYFiles
vb
function yFirstFiles() As YFiles
cs
static YFiles FirstFiles()
java
static YFiles FirstFiles()
uwp
static YFiles FirstFiles()
py
FirstFiles()
php
function yFirstFiles()
es
static FirstFiles()

Utiliser la fonction YFiles.nextFiles() pour itérer sur les autres systèmes de fichier.

Retourne :

un pointeur sur un objet YFiles, correspondant au premier système de fichier accessible en ligne, ou null si il n'y a pas de systèmes de fichier disponibles.

YFiles.FirstFilesInContext()
YFiles.FirstFilesInContext()
YFiles.FirstFilesInContext()YFiles.FirstFilesInContext()YFiles.FirstFilesInContext()

Commence l'énumération des systèmes de fichier accessibles par la librairie.

java
static YFiles FirstFilesInContext(YAPIContext yctx)
uwp
static YFiles FirstFilesInContext(YAPIContext yctx)
es
static FirstFilesInContext(yctx)

Utiliser la fonction YFiles.nextFiles() pour itérer sur les autres systèmes de fichier.

Paramètres :

yctxun contexte YAPI.

Retourne :

un pointeur sur un objet YFiles, correspondant au premier système de fichier accessible en ligne, ou null si il n'y a pas de systèmes de fichier disponibles.

YFiles.GetSimilarFunctions()
YFiles.GetSimilarFunctions()
YFiles.GetSimilarFunctions()YFiles.GetSimilarFunctions()

Enumère toutes les fonctions de type Files disponibles sur les modules actuellement joignables par la librairie, et retourne leurs identifiants matériels uniques (hardwareId).

dnp
static new string[] GetSimilarFunctions()
cp
static vector<string> GetSimilarFunctions()

Chaque chaîne retournée peut être passée en argument à la méthode YFiles.FindFiles pour obtenir une objet permettant d'intéragir avec le module correspondant.

Retourne :

un tableau de chaînes de caractères, contenant les identifiants matériels de chaque fonction disponible trouvée.

files→AdvertisedValuefiles.AdvertisedValue

Courte chaîne de caractères représentant l'état courant de la fonction.

dnp
string AdvertisedValue

files→FilesCountfiles.FilesCount

Nombre de fichiers présents dans le système de fichier.

dnp
int FilesCount

files→FriendlyNamefiles.FriendlyName

Identifiant global de la fonction au format NOM_MODULE.NOM_FONCTION.

dnp
string FriendlyName

Le chaîne retournée utilise soit les noms logiques du module et de la fonction si ils sont définis, soit respectivement le numéro de série du module et l'identifant matériel de la fonction (par exemple: MyCustomName.relay1)

files→FunctionIdfiles.FunctionId

Identifiant matériel du système de fichier, sans référence au module.

dnp
string FunctionId

Par example relay1.

files→HardwareIdfiles.HardwareId

Identifiant matériel unique de la fonction au format SERIAL.FUNCTIONID.

dnp
string HardwareId

L'identifiant unique est composé du numéro de série du module et de l'identifiant matériel de la fonction (par example RELAYLO1-123456.relay1).

files→IsOnlinefiles.IsOnline

Vérifie si le module hébergeant la fonction est joignable, sans déclencher d'erreur.

dnp
bool IsOnline

Si les valeurs des attributs en cache de la fonction sont valides au moment de l'appel, le module est considéré joignable. Cette fonction ne cause en aucun cas d'exception, quelle que soit l'erreur qui pourrait se produire lors de la vérification de joignabilité.

files→LogicalNamefiles.LogicalName

Nom logique de la fonction.

dnp
string LogicalName

Modifiable. Vous pouvez utiliser yCheckLogicalName() pour vérifier si votre paramètre est valide. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

files→SerialNumberfiles.SerialNumber

Numéro de série du module, préprogrammé en usine.

dnp
string SerialNumber

files→clearCache()files.clearCache()files→clearCache()[files clearCache]files.clearCache()files.clearCache()files.clearCache()files.clearCache()files.clearCache()files→clearCache()files.clearCache()

Invalide le cache.

js
function clearCache()
cpp
void clearCache()
m
-(void) clearCache
pas
clearCache()
vb
procedure clearCache()
cs
void clearCache()
java
void clearCache()
py
clearCache()
php
function clearCache()
es
async clearCache()

Invalide le cache des valeurs courantes du système de fichier. Force le prochain appel à une méthode get_xxx() ou loadxxx() pour charger les les données depuis le module.

files→describe()files.describe()files→describe()[files describe]files.describe()files.describe()files.describe()files.describe()files.describe()files→describe()files.describe()

Retourne un court texte décrivant de manière non-ambigüe l'instance du système de fichier au format TYPE(NAME)=SERIAL.FUNCTIONID.

js
function describe()
cpp
string describe()
m
-(NSString*) describe
pas
string describe(): string
vb
function describe() As String
cs
string describe()
java
String describe()
py
describe()
php
function describe()
es
async describe()

Plus précisément, TYPE correspond au type de fonction, NAME correspond au nom utilsé lors du premier accès a la fonction, SERIAL correspond au numéro de série du module si le module est connecté, ou "unresolved" sinon, et FUNCTIONID correspond à l'identifiant matériel de la fonction si le module est connecté. Par exemple, La methode va retourner Relay(MyCustomName.relay1)=RELAYLO1-123456.relay1 si le module est déjà connecté ou Relay(BadCustomeName.relay1)=unresolved si le module n'est pas déjà connecté. Cette methode ne declenche aucune transaction USB ou TCP et peut donc être utilisé dans un debuggeur.

Retourne :

une chaîne de caractères décrivant le système de fichier (ex: Relay(MyCustomName.relay1)=RELAYLO1-123456.relay1)

files→download()files.download()files→download()[files download: ]files.download()files.download()files.download()files.download()files.download()files.download()files→download()files.download()files.download()files.download()YFiles download

Télécharge le fichier choisi du filesystème et retourne son contenu.

js
function download(pathname)
cpp
string download(string pathname)
m
-(NSMutableData*) download: (NSString*) pathname
pas
TByteArray download(pathname: string): TByteArray
vb
function download(ByVal pathname As String) As Byte
cs
byte[] download(string pathname)
java
byte[] download(String pathname)
uwp
async Task<byte[]> download(string pathname)
py
download(pathname)
php
function download($pathname)
es
async download(pathname)
dnp
byte[] download(string pathname)
cp
string download(string pathname)
cmd
YFiles target download pathname

Paramètres :

pathnamenom complet du fichier à charger, y compris le chemin d'accès.

Retourne :

le contenu du fichier chargé sous forme d'objet binaire

En cas d'erreur, déclenche une exception ou retourne un contenu vide.

files→download_async()files.download_async()

Procède au chargement du bloc suivant de mesures depuis l'enregistreur de données du module, de manière asynchrone.

js
function download_async(pathname, callback, context)

Paramètres :

pathnamenom complet du fichier à charger, y compris le chemin d'accès.
callbackfonction fournie par l'utilisateur, qui sera appelée lorsque la suite du chargement aura été effectué. La fonction callback doit prendre trois arguments: - la variable de contexte à disposition de l'utilisateur - l'objet YFiles dont la méthode download_async a été appelée - le contenu du fichier chargé sous forme d'objet binaire
contextvariable de contexte à disposition de l'utilisateur

Retourne :

rien.

files→fileExist()files.fileExist()files→fileExist()[files fileExist: ]files.fileExist()files.fileExist()files.fileExist()files.fileExist()files.fileExist()files.fileExist()files→fileExist()files.fileExist()files.fileExist()files.fileExist()YFiles fileExist

Test si un fichier esit dans le système de fichier du module.

js
function fileExist(filename)
cpp
bool fileExist(string filename)
m
-(bool) fileExist: (NSString*) filename
pas
boolean fileExist(filename: string): boolean
vb
function fileExist(ByVal filename As String) As Boolean
cs
bool fileExist(string filename)
java
boolean fileExist(String filename)
uwp
async Task<bool> fileExist(string filename)
py
fileExist(filename)
php
function fileExist($filename)
es
async fileExist(filename)
dnp
bool fileExist(string filename)
cp
bool fileExist(string filename)
cmd
YFiles target fileExist filename

Paramètres :

filenamele nom de fichier.

Retourne :

vrais si le fichier existe, et faux is le fichier n'existe pas.

En cas d'erreur, déclenche une exception.

files→format_fs()files.format_fs()files→format_fs()[files format_fs]files.format_fs()files.format_fs()files.format_fs()files.format_fs()files.format_fs()files.format_fs()files→format_fs()files.format_fs()files.format_fs()files.format_fs()YFiles format_fs

Rétabli le système de fichier dans on état original, défragmenté.

js
function format_fs()
cpp
int format_fs()
m
-(int) format_fs
pas
LongInt format_fs(): LongInt
vb
function format_fs() As Integer
cs
int format_fs()
java
int format_fs()
uwp
async Task<int> format_fs()
py
format_fs()
php
function format_fs()
es
async format_fs()
dnp
int format_fs()
cp
int format_fs()
cmd
YFiles target format_fs

entièrement vide. Tous les fichiers précédemment chargés sont irrémédiablement effacés.

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

files→get_advertisedValue()
files→advertisedValue()
files.get_advertisedValue()files→get_advertisedValue()[files advertisedValue]files.get_advertisedValue()files.get_advertisedValue()files.get_advertisedValue()files.get_advertisedValue()files.get_advertisedValue()files.get_advertisedValue()files→get_advertisedValue()files.get_advertisedValue()files.get_advertisedValue()files.get_advertisedValue()YFiles get_advertisedValue

Retourne la valeur courante du système de fichier (pas plus de 6 caractères).

js
function get_advertisedValue()
cpp
string get_advertisedValue()
m
-(NSString*) advertisedValue
pas
string get_advertisedValue(): string
vb
function get_advertisedValue() As String
cs
string get_advertisedValue()
java
String get_advertisedValue()
uwp
async Task<string> get_advertisedValue()
py
get_advertisedValue()
php
function get_advertisedValue()
es
async get_advertisedValue()
dnp
string get_advertisedValue()
cp
string get_advertisedValue()
cmd
YFiles target get_advertisedValue

Retourne :

une chaîne de caractères représentant la valeur courante du système de fichier (pas plus de 6 caractères).

En cas d'erreur, déclenche une exception ou retourne Y_ADVERTISEDVALUE_INVALID.

files→get_errorMessage()
files→errorMessage()
files.get_errorMessage()files→get_errorMessage()[files errorMessage]files.get_errorMessage()files.get_errorMessage()files.get_errorMessage()files.get_errorMessage()files.get_errorMessage()files→get_errorMessage()files.get_errorMessage()

Retourne le message correspondant à la dernière erreur survenue lors de l'utilisation du système de fichier.

js
function get_errorMessage()
cpp
string get_errorMessage()
m
-(NSString*) errorMessage
pas
string get_errorMessage(): string
vb
function get_errorMessage() As String
cs
string get_errorMessage()
java
String get_errorMessage()
py
get_errorMessage()
php
function get_errorMessage()
es
get_errorMessage()

Cette méthode est principalement utile lorsque la librairie Yoctopuce est utilisée en désactivant la gestion des exceptions.

Retourne :

une chaîne de caractères correspondant au message de la dernière erreur qui s'est produit lors de l'utilisation du système de fichier.

files→get_errorType()
files→errorType()
files.get_errorType()files→get_errorType()[files errorType]files.get_errorType()files.get_errorType()files.get_errorType()files.get_errorType()files.get_errorType()files→get_errorType()files.get_errorType()

Retourne le code d'erreur correspondant à la dernière erreur survenue lors de l'utilisation du système de fichier.

js
function get_errorType()
cpp
YRETCODE get_errorType()
m
-(YRETCODE) errorType
pas
YRETCODE get_errorType(): YRETCODE
vb
function get_errorType() As YRETCODE
cs
YRETCODE get_errorType()
java
int get_errorType()
py
get_errorType()
php
function get_errorType()
es
get_errorType()

Cette méthode est principalement utile lorsque la librairie Yoctopuce est utilisée en désactivant la gestion des exceptions.

Retourne :

un nombre correspondant au code de la dernière erreur qui s'est produit lors de l'utilisation du système de fichier.

files→get_filesCount()
files→filesCount()
files.get_filesCount()files→get_filesCount()[files filesCount]files.get_filesCount()files.get_filesCount()files.get_filesCount()files.get_filesCount()files.get_filesCount()files.get_filesCount()files→get_filesCount()files.get_filesCount()files.get_filesCount()files.get_filesCount()YFiles get_filesCount

Retourne le nombre de fichiers présents dans le système de fichier.

js
function get_filesCount()
cpp
int get_filesCount()
m
-(int) filesCount
pas
LongInt get_filesCount(): LongInt
vb
function get_filesCount() As Integer
cs
int get_filesCount()
java
int get_filesCount()
uwp
async Task<int> get_filesCount()
py
get_filesCount()
php
function get_filesCount()
es
async get_filesCount()
dnp
int get_filesCount()
cp
int get_filesCount()
cmd
YFiles target get_filesCount

Retourne :

un entier représentant le nombre de fichiers présents dans le système de fichier

En cas d'erreur, déclenche une exception ou retourne Y_FILESCOUNT_INVALID.

files→get_freeSpace()
files→freeSpace()
files.get_freeSpace()files→get_freeSpace()[files freeSpace]files.get_freeSpace()files.get_freeSpace()files.get_freeSpace()files.get_freeSpace()files.get_freeSpace()files.get_freeSpace()files→get_freeSpace()files.get_freeSpace()files.get_freeSpace()files.get_freeSpace()YFiles get_freeSpace

Retourne l'espace disponible dans le système de fichier pour charger des nouveaux fichiers, en octets.

js
function get_freeSpace()
cpp
int get_freeSpace()
m
-(int) freeSpace
pas
LongInt get_freeSpace(): LongInt
vb
function get_freeSpace() As Integer
cs
int get_freeSpace()
java
int get_freeSpace()
uwp
async Task<int> get_freeSpace()
py
get_freeSpace()
php
function get_freeSpace()
es
async get_freeSpace()
dnp
int get_freeSpace()
cp
int get_freeSpace()
cmd
YFiles target get_freeSpace

Retourne :

un entier représentant l'espace disponible dans le système de fichier pour charger des nouveaux fichiers, en octets

En cas d'erreur, déclenche une exception ou retourne Y_FREESPACE_INVALID.

files→get_friendlyName()
files→friendlyName()
files.get_friendlyName()files→get_friendlyName()[files friendlyName]files.get_friendlyName()files.get_friendlyName()files.get_friendlyName()files→get_friendlyName()files.get_friendlyName()files.get_friendlyName()files.get_friendlyName()

Retourne un identifiant global du système de fichier au format NOM_MODULE.NOM_FONCTION.

js
function get_friendlyName()
cpp
string get_friendlyName()
m
-(NSString*) friendlyName
cs
string get_friendlyName()
java
String get_friendlyName()
py
get_friendlyName()
php
function get_friendlyName()
es
async get_friendlyName()
dnp
string get_friendlyName()
cp
string get_friendlyName()

Le chaîne retournée utilise soit les noms logiques du module et du système de fichier si ils sont définis, soit respectivement le numéro de série du module et l'identifant matériel du système de fichier (par exemple: MyCustomName.relay1)

Retourne :

une chaîne de caractères identifiant le système de fichier en utilisant les noms logiques (ex: MyCustomName.relay1)

En cas d'erreur, déclenche une exception ou retourne Y_FRIENDLYNAME_INVALID.

files→get_functionDescriptor()
files→functionDescriptor()
files.get_functionDescriptor()files→get_functionDescriptor()[files functionDescriptor]files.get_functionDescriptor()files.get_functionDescriptor()files.get_functionDescriptor()files.get_functionDescriptor()files.get_functionDescriptor()files→get_functionDescriptor()files.get_functionDescriptor()

Retourne un identifiant unique de type YFUN_DESCR correspondant à la fonction.

js
function get_functionDescriptor()
cpp
YFUN_DESCR get_functionDescriptor()
m
-(YFUN_DESCR) functionDescriptor
pas
YFUN_DESCR get_functionDescriptor(): YFUN_DESCR
vb
function get_functionDescriptor() As YFUN_DESCR
cs
YFUN_DESCR get_functionDescriptor()
java
String get_functionDescriptor()
py
get_functionDescriptor()
php
function get_functionDescriptor()
es
async get_functionDescriptor()

Cet identifiant peut être utilisé pour tester si deux instance de YFunction référencent physiquement la même fonction sur le même module.

Retourne :

un identifiant de type YFUN_DESCR.

Si la fonction n'a jamais été contactée, la valeur retournée sera Y_FUNCTIONDESCRIPTOR_INVALID

files→get_functionId()
files→functionId()
files.get_functionId()files→get_functionId()[files functionId]files.get_functionId()files.get_functionId()files.get_functionId()files.get_functionId()files→get_functionId()files.get_functionId()files.get_functionId()files.get_functionId()

Retourne l'identifiant matériel du système de fichier, sans référence au module.

js
function get_functionId()
cpp
string get_functionId()
m
-(NSString*) functionId
vb
function get_functionId() As String
cs
string get_functionId()
java
String get_functionId()
py
get_functionId()
php
function get_functionId()
es
async get_functionId()
dnp
string get_functionId()
cp
string get_functionId()

Par example relay1.

Retourne :

une chaîne de caractères identifiant le système de fichier (ex: relay1)

En cas d'erreur, déclenche une exception ou retourne Y_FUNCTIONID_INVALID.

files→get_hardwareId()
files→hardwareId()
files.get_hardwareId()files→get_hardwareId()[files hardwareId]files.get_hardwareId()files.get_hardwareId()files.get_hardwareId()files.get_hardwareId()files→get_hardwareId()files.get_hardwareId()files.get_hardwareId()files.get_hardwareId()

Retourne l'identifiant matériel unique du système de fichier au format SERIAL.FUNCTIONID.

js
function get_hardwareId()
cpp
string get_hardwareId()
m
-(NSString*) hardwareId
vb
function get_hardwareId() As String
cs
string get_hardwareId()
java
String get_hardwareId()
py
get_hardwareId()
php
function get_hardwareId()
es
async get_hardwareId()
dnp
string get_hardwareId()
cp
string get_hardwareId()

L'identifiant unique est composé du numéro de série du module et de l'identifiant matériel du système de fichier (par example RELAYLO1-123456.relay1).

Retourne :

une chaîne de caractères identifiant le système de fichier (ex: RELAYLO1-123456.relay1)

En cas d'erreur, déclenche une exception ou retourne Y_HARDWAREID_INVALID.

files→get_list()
files→list()
files.get_list()files→get_list()[files list: ]files.get_list()files.get_list()files.get_list()files.get_list()files.get_list()files.get_list()files→get_list()files.get_list()files.get_list()files.get_list()YFiles get_list

Retourne une liste d'objets objet YFileRecord qui décrivent les fichiers présents dans le système de fichier.

js
function get_list(pattern)
cpp
vector<YFileRecord> get_list(string pattern)
m
-(NSMutableArray*) list: (NSString*) pattern
pas
TYFileRecordArray get_list(pattern: string): TYFileRecordArray
vb
function get_list(ByVal pattern As String) As List
cs
List<YFileRecord> get_list(string pattern)
java
ArrayList<YFileRecord> get_list(String pattern)
uwp
async Task<List<YFileRecord>> get_list(string pattern)
py
get_list(pattern)
php
function get_list($pattern)
es
async get_list(pattern)
dnp
YFileRecordProxy[] get_list(string pattern)
cp
vector<YFileRecordProxy> get_list(string pattern)
cmd
YFiles target get_list pattern

Paramètres :

patternun filtre optionel sur les noms de fichiers retournés, pouvant contenir des astérisques et des points d'interrogations comme jokers. Si le pattern fourni est vide, tous les fichiers sont retournés.

Retourne :

une liste d'objets YFileRecord, contenant le nom complet (y compris le chemin d'accès), la taille en octets et le CRC 32-bit du contenu du fichier.

En cas d'erreur, déclenche une exception ou retourne une liste vide.

files→get_logicalName()
files→logicalName()
files.get_logicalName()files→get_logicalName()[files logicalName]files.get_logicalName()files.get_logicalName()files.get_logicalName()files.get_logicalName()files.get_logicalName()files.get_logicalName()files→get_logicalName()files.get_logicalName()files.get_logicalName()files.get_logicalName()YFiles get_logicalName

Retourne le nom logique du système de fichier.

js
function get_logicalName()
cpp
string get_logicalName()
m
-(NSString*) logicalName
pas
string get_logicalName(): string
vb
function get_logicalName() As String
cs
string get_logicalName()
java
String get_logicalName()
uwp
async Task<string> get_logicalName()
py
get_logicalName()
php
function get_logicalName()
es
async get_logicalName()
dnp
string get_logicalName()
cp
string get_logicalName()
cmd
YFiles target get_logicalName

Retourne :

une chaîne de caractères représentant le nom logique du système de fichier.

En cas d'erreur, déclenche une exception ou retourne Y_LOGICALNAME_INVALID.

files→get_module()
files→module()
files.get_module()files→get_module()[files module]files.get_module()files.get_module()files.get_module()files.get_module()files.get_module()files→get_module()files.get_module()files.get_module()files.get_module()

Retourne l'objet YModule correspondant au module Yoctopuce qui héberge la fonction.

js
function get_module()
cpp
YModule * get_module()
m
-(YModule*) module
pas
TYModule get_module(): TYModule
vb
function get_module() As YModule
cs
YModule get_module()
java
YModule get_module()
py
get_module()
php
function get_module()
es
async get_module()
dnp
YModuleProxy get_module()
cp
YModuleProxy * get_module()

Si la fonction ne peut être trouvée sur aucun module, l'instance de YModule retournée ne sera pas joignable.

Retourne :

une instance de YModule

files→get_module_async()
files→module_async()
files.get_module_async()

Retourne l'objet YModule correspondant au module Yoctopuce qui héberge la fonction.

js
function get_module_async(callback, context)

Si la fonction ne peut être trouvée sur aucun module, l'instance de YModule retournée ne sera pas joignable.

Cette version asynchrone n'existe qu'en Javascript. Elle utilise une fonction de callback plutôt qu'une simple valeur de retour, pour éviter de bloquer la VM Javascript de Firefox, qui n'implémente pas le passage de contrôle entre threads durant les appels d'entrée/sortie bloquants.

Paramètres :

callbackfonction de callback qui sera appelée dès que le résultat sera connu. La fonction callback reçoit trois arguments: le contexte fourni par l'appelant, l'objet fonction concerné et l'instance demandée de YModule
contextcontexte fourni par l'appelant, et qui sera passé tel-quel à la fonction de callback

Retourne :

rien du tout : le résultat sera passé en paramètre à la fonction de callback.

files→get_serialNumber()
files→serialNumber()
files.get_serialNumber()files→get_serialNumber()[files serialNumber]files.get_serialNumber()files.get_serialNumber()files.get_serialNumber()files.get_serialNumber()files.get_serialNumber()files.get_serialNumber()files→get_serialNumber()files.get_serialNumber()files.get_serialNumber()files.get_serialNumber()YFiles get_serialNumber

Retourne le numéro de série du module, préprogrammé en usine.

js
function get_serialNumber()
cpp
string get_serialNumber()
m
-(NSString*) serialNumber
pas
string get_serialNumber(): string
vb
function get_serialNumber() As String
cs
string get_serialNumber()
java
String get_serialNumber()
uwp
async Task<string> get_serialNumber()
py
get_serialNumber()
php
function get_serialNumber()
es
async get_serialNumber()
dnp
string get_serialNumber()
cp
string get_serialNumber()
cmd
YFiles target get_serialNumber

Retourne :

: une chaîne de caractères représentant le numéro de série du module, préprogrammé en usine.

En cas d'erreur, déclenche une exception ou retourne YModule.SERIALNUMBER_INVALID.

files→get_userData()
files→userData()
files.get_userData()files→get_userData()[files userData]files.get_userData()files.get_userData()files.get_userData()files.get_userData()files.get_userData()files→get_userData()files.get_userData()

Retourne le contenu de l'attribut userData, précédemment stocké à l'aide de la méthode set_userData.

js
function get_userData()
cpp
void * get_userData()
m
-(id) userData
pas
Tobject get_userData(): Tobject
vb
function get_userData() As Object
cs
object get_userData()
java
Object get_userData()
py
get_userData()
php
function get_userData()
es
async get_userData()

Cet attribut n'es pas utilisé directement par l'API. Il est à la disposition de l'appelant pour stocker un contexte.

Retourne :

l'objet stocké précédemment par l'appelant.

files→isOnline()files.isOnline()files→isOnline()[files isOnline]files.isOnline()files.isOnline()files.isOnline()files.isOnline()files.isOnline()files→isOnline()files.isOnline()files.isOnline()files.isOnline()

Vérifie si le module hébergeant le système de fichier est joignable, sans déclencher d'erreur.

js
function isOnline()
cpp
bool isOnline()
m
-(BOOL) isOnline
pas
boolean isOnline(): boolean
vb
function isOnline() As Boolean
cs
bool isOnline()
java
boolean isOnline()
py
isOnline()
php
function isOnline()
es
async isOnline()
dnp
bool isOnline()
cp
bool isOnline()

Si les valeurs des attributs en cache du système de fichier sont valides au moment de l'appel, le module est considéré joignable. Cette fonction ne cause en aucun cas d'exception, quelle que soit l'erreur qui pourrait se produire lors de la vérification de joignabilité.

Retourne :

true si le système de fichier est joignable, false sinon

files→isOnline_async()files.isOnline_async()

Vérifie si le module hébergeant le système de fichier est joignable, sans déclencher d'erreur.

js
function isOnline_async(callback, context)

Si les valeurs des attributs en cache du système de fichier sont valides au moment de l'appel, le module est considéré joignable. Cette fonction ne cause en aucun cas d'exception, quelle que soit l'erreur qui pourrait se produire lors de la vérification de joignabilité.

Cette version asynchrone n'existe qu'en Javascript. Elle utilise une fonction de callback plutôt qu'une simple valeur de retour, pour éviter de bloquer la machine virtuelle Javascript avec une attente active.

Paramètres :

callbackfonction de callback qui sera appelée dès que le résultat sera connu. La fonction callback reçoit trois arguments: le contexte fourni par l'appelant, l'objet fonction concerné et le résultat booléen
contextcontexte fourni par l'appelant, et qui sera passé tel-quel à la fonction de callback

Retourne :

rien du tout : le résultat sera passé en paramètre à la fonction de callback.

files→isReadOnly()files→isReadOnly()[files isReadOnly]files.isReadOnly()files.isReadOnly()files.isReadOnly()files.isReadOnly()files.isReadOnly()files.isReadOnly()files→isReadOnly()files.isReadOnly()files.isReadOnly()files.isReadOnly()YFiles isReadOnly

Test si la fonction est en lecture seule.

cpp
bool isReadOnly()
m
-(bool) isReadOnly
pas
boolean isReadOnly(): boolean
vb
function isReadOnly() As Boolean
cs
bool isReadOnly()
java
boolean isReadOnly()
uwp
async Task<bool> isReadOnly()
py
isReadOnly()
php
function isReadOnly()
es
async isReadOnly()
dnp
bool isReadOnly()
cp
bool isReadOnly()
cmd
YFiles target isReadOnly

Retourne vrais si la fonction est protégé en ecriture ou que la fontion n'est pas disponible.

Retourne :

true si la fonction est protégé en ecriture ou que la fontion n'est pas disponible

files→load()files.load()files→load()[files load: ]files.load()files.load()files.load()files.load()files.load()files→load()files.load()

Met en cache les valeurs courantes du système de fichier, avec une durée de validité spécifiée.

js
function load(msValidity)
cpp
YRETCODE load(int msValidity)
m
-(YRETCODE) load: (u64) msValidity
pas
YRETCODE load(msValidity: u64): YRETCODE
vb
function load(ByVal msValidity As Long) As YRETCODE
cs
YRETCODE load(ulong msValidity)
java
int load(long msValidity)
py
load(msValidity)
php
function load($msValidity)
es
async load(msValidity)

Par défaut, lorsqu'on accède à un module, tous les attributs des fonctions du module sont automatiquement mises en cache pour la durée standard (5 ms). Cette méthode peut être utilisée pour marquer occasionellement les données cachées comme valides pour une plus longue période, par exemple dans le but de réduire le trafic réseau.

Paramètres :

msValidityun entier correspondant à la durée de validité attribuée aux les paramètres chargés, en millisecondes

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

files→loadAttribute()files.loadAttribute()files→loadAttribute()[files loadAttribute: ]files.loadAttribute()files.loadAttribute()files.loadAttribute()files.loadAttribute()files.loadAttribute()files.loadAttribute()files→loadAttribute()files.loadAttribute()files.loadAttribute()files.loadAttribute()

Retourne la valeur actuelle d'un attribut spécifique de la fonction, sous forme de texte, le plus rapidement possible mais sans passer par le cache.

js
function loadAttribute(attrName)
cpp
string loadAttribute(string attrName)
m
-(NSString*) loadAttribute: (NSString*) attrName
pas
string loadAttribute(attrName: string): string
vb
function loadAttribute(ByVal attrName As String) As String
cs
string loadAttribute(string attrName)
java
String loadAttribute(String attrName)
uwp
async Task<string> loadAttribute(string attrName)
py
loadAttribute(attrName)
php
function loadAttribute($attrName)
es
async loadAttribute(attrName)
dnp
string loadAttribute(string attrName)
cp
string loadAttribute(string attrName)

Paramètres :

attrNamele nom de l'attribut désiré

Retourne :

une chaîne de caractères représentant la valeur actuelle de l'attribut.

En cas d'erreur, déclenche une exception ou retourne un chaîne vide.

files→load_async()files.load_async()

Met en cache les valeurs courantes du système de fichier, avec une durée de validité spécifiée.

js
function load_async(msValidity, callback, context)

Par défaut, lorsqu'on accède à un module, tous les attributs des fonctions du module sont automatiquement mises en cache pour la durée standard (5 ms). Cette méthode peut être utilisée pour marquer occasionellement les données cachées comme valides pour une plus longue période, par exemple dans le but de réduire le trafic réseau.

Cette version asynchrone n'existe qu'en Javascript. Elle utilise une fonction de callback plutôt qu'une simple valeur de retour, pour éviter de bloquer la machine virtuelle Javascript avec une attente active.

Paramètres :

msValidityun entier correspondant à la durée de validité attribuée aux les paramètres chargés, en millisecondes
callbackfonction de callback qui sera appelée dès que le résultat sera connu. La fonction callback reçoit trois arguments: le contexte fourni par l'appelant, l'objet fonction concerné et le code d'erreur (ou YAPI_SUCCESS)
contextcontexte fourni par l'appelant, et qui sera passé tel-quel à la fonction de callback

Retourne :

rien du tout : le résultat sera passé en paramètre à la fonction de callback.

files→muteValueCallbacks()files.muteValueCallbacks()files→muteValueCallbacks()[files muteValueCallbacks]files.muteValueCallbacks()files.muteValueCallbacks()files.muteValueCallbacks()files.muteValueCallbacks()files.muteValueCallbacks()files.muteValueCallbacks()files→muteValueCallbacks()files.muteValueCallbacks()files.muteValueCallbacks()files.muteValueCallbacks()YFiles muteValueCallbacks

Désactive l'envoi de chaque changement de la valeur publiée au hub parent.

js
function muteValueCallbacks()
cpp
int muteValueCallbacks()
m
-(int) muteValueCallbacks
pas
LongInt muteValueCallbacks(): LongInt
vb
function muteValueCallbacks() As Integer
cs
int muteValueCallbacks()
java
int muteValueCallbacks()
uwp
async Task<int> muteValueCallbacks()
py
muteValueCallbacks()
php
function muteValueCallbacks()
es
async muteValueCallbacks()
dnp
int muteValueCallbacks()
cp
int muteValueCallbacks()
cmd
YFiles target muteValueCallbacks

Vous pouvez utiliser cette fonction pour économiser la bande passante et le CPU sur les machines de faible puissance, ou pour éviter le déclanchement de callbacks HTTP. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

files→nextFiles()files.nextFiles()files→nextFiles()[files nextFiles]files.nextFiles()files.nextFiles()files.nextFiles()files.nextFiles()files.nextFiles()files.nextFiles()files→nextFiles()files.nextFiles()

Continue l'énumération des systèmes de fichier commencée à l'aide de yFirstFiles() Attention, vous ne pouvez faire aucune supposition sur l'ordre dans lequel les systèmes de fichier sont retournés.

js
function nextFiles()
cpp
YFiles * nextFiles()
m
-(YFiles*) nextFiles
pas
TYFiles nextFiles(): TYFiles
vb
function nextFiles() As YFiles
cs
YFiles nextFiles()
java
YFiles nextFiles()
uwp
YFiles nextFiles()
py
nextFiles()
php
function nextFiles()
es
nextFiles()

Si vous souhaitez retrouver un système de fichier spécifique, utilisez Files.findFiles() avec un hardwareID ou un nom logique.

Retourne :

un pointeur sur un objet YFiles accessible en ligne, ou null lorsque l'énumération est terminée.

files→registerValueCallback()files.registerValueCallback()files→registerValueCallback()[files registerValueCallback: ]files.registerValueCallback()files.registerValueCallback()files.registerValueCallback()files.registerValueCallback()files.registerValueCallback()files.registerValueCallback()files→registerValueCallback()files.registerValueCallback()

Enregistre la fonction de callback qui est appelée à chaque changement de la valeur publiée.

js
function registerValueCallback(callback)
cpp
int registerValueCallback(YFilesValueCallback callback)
m
-(int) registerValueCallback: (YFilesValueCallback) callback
pas
LongInt registerValueCallback(callback: TYFilesValueCallback): LongInt
vb
function registerValueCallback(ByVal callback As YFilesValueCallback) As Integer
cs
int registerValueCallback(ValueCallback callback)
java
int registerValueCallback(UpdateCallback callback)
uwp
async Task<int> registerValueCallback(ValueCallback callback)
py
registerValueCallback(callback)
php
function registerValueCallback($callback)
es
async registerValueCallback(callback)

Ce callback n'est appelé que durant l'exécution de ySleep ou yHandleEvents. Cela permet à l'appelant de contrôler quand les callback peuvent se produire. Il est important d'appeler l'une de ces deux fonctions périodiquement pour garantir que les callback ne soient pas appelés trop tard. Pour désactiver un callback, il suffit d'appeler cette méthode en lui passant un pointeur nul.

Paramètres :

callbackla fonction de callback à rappeler, ou un pointeur nul. La fonction de callback doit accepter deux arguments: l'object fonction dont la valeur a changé, et la chaîne de caractère décrivant la nouvelle valeur publiée.

files→remove()files.remove()files→remove()[files remove: ]files.remove()files.remove()files.remove()files.remove()files.remove()files.remove()files→remove()files.remove()files.remove()files.remove()YFiles remove

Efface un fichier, spécifié par son path complet, du système de fichier.

js
function remove(pathname)
cpp
int remove(string pathname)
m
-(int) remove: (NSString*) pathname
pas
LongInt remove(pathname: string): LongInt
vb
function remove(ByVal pathname As String) As Integer
cs
int remove(string pathname)
java
int remove(String pathname)
uwp
async Task<int> remove(string pathname)
py
remove(pathname)
php
function remove($pathname)
es
async remove(pathname)
dnp
int remove(string pathname)
cp
int remove(string pathname)
cmd
YFiles target remove pathname

A cause de la fragmentation, l'effacement d'un fichier ne libère pas toujours la totalité de l'espace qu'il occuppe. Par contre, la ré-écriture d'un fichier du même nom récupérera dans tout les cas l'espace qui n'aurait éventuellement pas été libéré. Pour s'assurer de libérer la totalité de l'espace du système de fichier, utilisez la fonction format_fs.

Paramètres :

pathnamenom complet du fichier, y compris le chemin d'accès.

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

files→set_logicalName()
files→setLogicalName()
files.set_logicalName()files→set_logicalName()[files setLogicalName: ]files.set_logicalName()files.set_logicalName()files.set_logicalName()files.set_logicalName()files.set_logicalName()files.set_logicalName()files→set_logicalName()files.set_logicalName()files.set_logicalName()files.set_logicalName()YFiles set_logicalName

Modifie le nom logique du système de fichier.

js
function set_logicalName(newval)
cpp
int set_logicalName(string newval)
m
-(int) setLogicalName: (NSString*) newval
pas
integer set_logicalName(newval: string): integer
vb
function set_logicalName(ByVal newval As String) As Integer
cs
int set_logicalName(string newval)
java
int set_logicalName(String newval)
uwp
async Task<int> set_logicalName(string newval)
py
set_logicalName(newval)
php
function set_logicalName($newval)
es
async set_logicalName(newval)
dnp
int set_logicalName(string newval)
cp
int set_logicalName(string newval)
cmd
YFiles target set_logicalName newval

Vous pouvez utiliser yCheckLogicalName() pour vérifier si votre paramètre est valide. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Paramètres :

newvalune chaîne de caractères représentant le nom logique du système de fichier.

Retourne :

YAPI_SUCCESS si l'appel se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

files→set_userData()
files→setUserData()
files.set_userData()files→set_userData()[files setUserData: ]files.set_userData()files.set_userData()files.set_userData()files.set_userData()files.set_userData()files→set_userData()files.set_userData()

Enregistre un contexte libre dans l'attribut userData de la fonction, afin de le retrouver plus tard à l'aide de la méthode get_userData.

js
function set_userData(data)
cpp
void set_userData(void * data)
m
-(void) setUserData: (id) data
pas
set_userData(data: Tobject)
vb
procedure set_userData(ByVal data As Object)
cs
void set_userData(object data)
java
void set_userData(Object data)
py
set_userData(data)
php
function set_userData($data)
es
async set_userData(data)

Cet attribut n'es pas utilisé directement par l'API. Il est à la disposition de l'appelant pour stocker un contexte.

Paramètres :

dataobjet quelconque à mémoriser

files→unmuteValueCallbacks()files.unmuteValueCallbacks()files→unmuteValueCallbacks()[files unmuteValueCallbacks]files.unmuteValueCallbacks()files.unmuteValueCallbacks()files.unmuteValueCallbacks()files.unmuteValueCallbacks()files.unmuteValueCallbacks()files.unmuteValueCallbacks()files→unmuteValueCallbacks()files.unmuteValueCallbacks()files.unmuteValueCallbacks()files.unmuteValueCallbacks()YFiles unmuteValueCallbacks

Réactive l'envoi de chaque changement de la valeur publiée au hub parent.

js
function unmuteValueCallbacks()
cpp
int unmuteValueCallbacks()
m
-(int) unmuteValueCallbacks
pas
LongInt unmuteValueCallbacks(): LongInt
vb
function unmuteValueCallbacks() As Integer
cs
int unmuteValueCallbacks()
java
int unmuteValueCallbacks()
uwp
async Task<int> unmuteValueCallbacks()
py
unmuteValueCallbacks()
php
function unmuteValueCallbacks()
es
async unmuteValueCallbacks()
dnp
int unmuteValueCallbacks()
cp
int unmuteValueCallbacks()
cmd
YFiles target unmuteValueCallbacks

Cette fonction annule un précédent appel à muteValueCallbacks(). N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

files→upload()files.upload()files→upload()[files upload: ]files.upload()files.upload()files.upload()files.upload()files.upload()files.upload()files→upload()files.upload()files.upload()files.upload()YFiles upload

Télécharge un contenu vers le système de fichier, au chemin d'accès spécifié.

js
function upload(pathname, content)
cpp
int upload(string pathname, string content)
m
-(int) upload: (NSString*) pathname
  : (NSData*) content
pas
LongInt upload(pathname: string, content: TByteArray): LongInt
vb
procedure upload(ByVal pathname As String, ByVal content As Byte()
cs
int upload(string pathname, byte[] content)
java
int upload(String pathname, byte[] content)
uwp
async Task<int> upload(string pathname, byte[] content)
py
upload(pathname, content)
php
function upload($pathname, $content)
es
async upload(pathname, content)
dnp
int upload(string pathname, byte[] content)
cp
int upload(string pathname, string content)
cmd
YFiles target upload pathname content

Si un fichier existe déjà pour le même chemin d'accès, son contenu est remplacé.

Paramètres :

pathnamenom complet du fichier, y compris le chemin d'accès.
contentcontenu du fichier à télécharger

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

files→wait_async()files.wait_async()files.wait_async()

Attend que toutes les commandes asynchrones en cours d'exécution sur le module soient terminées, et appelle le callback passé en paramètre.

js
function wait_async(callback, context)
es
wait_async(callback, context)

La fonction callback peut donc librement utiliser des fonctions synchrones ou asynchrones, sans risquer de bloquer la machine virtuelle Javascript.

Paramètres :

callbackfonction de callback qui sera appelée dès que toutes les commandes en cours d'exécution sur le module seront terminées La fonction callback reçoit deux arguments: le contexte fourni par l'appelant et l'objet fonction concerné.
contextcontexte fourni par l'appelant, et qui sera passé tel-quel à la fonction de callback

Retourne :

rien du tout.

24.5. La classe YGenericSensor

Interface pour intéragir avec les capteurs de type GenericSensor, disponibles par exemple dans le Yocto-0-10V-Rx, le Yocto-4-20mA-Rx, le Yocto-RS485-V2 et le Yocto-milliVolt-Rx

La classe YGenericSensor permet de lire et de configurer les transducteurs de signaux Yoctopuce. Elle hérite de la classe YSensor toutes les fonctions de base des capteurs Yoctopuce: lecture de mesures, callbacks, enregistreur de données. De plus, elle permet de configurer une conversion automatique entre le signal mesuré et la grandeur physique représentée.

Pour utiliser les fonctions décrites ici, vous devez inclure:

js
<script type='text/javascript' src='yocto_genericsensor.js'></script>
cpp
#include "yocto_genericsensor.h"
m
#import "yocto_genericsensor.h"
pas
uses yocto_genericsensor;
vb
yocto_genericsensor.vb
cs
yocto_genericsensor.cs
java
import com.yoctopuce.YoctoAPI.YGenericSensor;
uwp
import com.yoctopuce.YoctoAPI.YGenericSensor;
py
from yocto_genericsensor import *
php
require_once('yocto_genericsensor.php');
es
in HTML: <script src="../../lib/yocto_genericsensor.js"></script>
in node.js: require('yoctolib-es2017/yocto_genericsensor.js');
dnp
import YoctoProxyAPI.YGenericSensorProxy
cp
#include "yocto_genericsensor_proxy.h"
vi
YGenericSensor.vi
ml
import YoctoProxyAPI.YGenericSensorProxy
Fonction globales
YGenericSensor.FindGenericSensor(func)

Permet de retrouver un capteur générique d'après un identifiant donné.

YGenericSensor.FindGenericSensorInContext(yctx, func)

Permet de retrouver un capteur générique d'après un identifiant donné dans un Context YAPI.

YGenericSensor.FirstGenericSensor()

Commence l'énumération des capteurs génériques accessibles par la librairie.

YGenericSensor.FirstGenericSensorInContext(yctx)

Commence l'énumération des capteurs génériques accessibles par la librairie.

YGenericSensor.GetSimilarFunctions()

Enumère toutes les fonctions de type GenericSensor disponibles sur les modules actuellement joignables par la librairie, et retourne leurs identifiants matériels uniques (hardwareId).

Propriétés des objets YGenericSensorProxy
genericsensor→AdvMode [modifiable]

Mode de calcul de la valeur publiée jusqu'au hub parent (advertisedValue).

genericsensor→AdvertisedValue [lecture seule]

Courte chaîne de caractères représentant l'état courant de la fonction.

genericsensor→Enabled [modifiable]

état d'activation de cette mesure.

genericsensor→FriendlyName [lecture seule]

Identifiant global de la fonction au format NOM_MODULE.NOM_FONCTION.

genericsensor→FunctionId [lecture seule]

Identifiant matériel du senseur, sans référence au module.

genericsensor→HardwareId [lecture seule]

Identifiant matériel unique de la fonction au format SERIAL.FUNCTIONID.

genericsensor→IsOnline [lecture seule]

Vérifie si le module hébergeant la fonction est joignable, sans déclencher d'erreur.

genericsensor→LogFrequency [modifiable]

Fréquence d'enregistrement des mesures dans le datalogger, ou "OFF" si les mesures ne sont pas stockées dans la mémoire de l'enregistreur de données.

genericsensor→LogicalName [modifiable]

Nom logique de la fonction.

genericsensor→ReportFrequency [modifiable]

Fréquence de notification périodique des valeurs mesurées, ou "OFF" si les notifications périodiques sont désactivées pour cette fonction.

genericsensor→Resolution [modifiable]

Résolution des valeurs mesurées.

genericsensor→SerialNumber [lecture seule]

Numéro de série du module, préprogrammé en usine.

genericsensor→SignalBias [modifiable]

Biais du signal électrique pour la correction du point zéro.

genericsensor→SignalRange [modifiable]

Plage de signal d'entrée utilisé par le capteur.

genericsensor→SignalSampling [modifiable]

Méthode d'échantillonnage du signal utilisée.

genericsensor→SignalUnit [lecture seule]

Unité du signal électrique utilisé par le capteur.

genericsensor→ValueRange [modifiable]

Plage de valeurs physiques mesurés par le capteur.

Méthodes des objets YGenericSensor
genericsensor→calibrateFromPoints(rawValues, refValues)

Enregistre des points de correction de mesure, typiquement pour compenser l'effet d'un boîtier sur les mesures rendues par le capteur.

genericsensor→clearCache()

Invalide le cache.

genericsensor→describe()

Retourne un court texte décrivant de manière non-ambigüe l'instance du capteur générique au format TYPE(NAME)=SERIAL.FUNCTIONID.

genericsensor→get_advMode()

Retourne le mode de calcul de la valeur publiée jusqu'au hub parent (advertisedValue).

genericsensor→get_advertisedValue()

Retourne la valeur courante du capteur générique (pas plus de 6 caractères).

genericsensor→get_currentRawValue()

Retourne la valeur brute retournée par le capteur (sans arrondi ni calibration).

genericsensor→get_currentValue()

Retourne la valeur mesurée actuelle.

genericsensor→get_dataLogger()

Retourne l'objet YDatalogger du module qui héberge le senseur.

genericsensor→get_enabled()

Retourne l'état d'activation de cette mesure.

genericsensor→get_errorMessage()

Retourne le message correspondant à la dernière erreur survenue lors de l'utilisation du capteur générique.

genericsensor→get_errorType()

Retourne le code d'erreur correspondant à la dernière erreur survenue lors de l'utilisation du capteur générique.

genericsensor→get_friendlyName()

Retourne un identifiant global du capteur générique au format NOM_MODULE.NOM_FONCTION.

genericsensor→get_functionDescriptor()

Retourne un identifiant unique de type YFUN_DESCR correspondant à la fonction.

genericsensor→get_functionId()

Retourne l'identifiant matériel du capteur générique, sans référence au module.

genericsensor→get_hardwareId()

Retourne l'identifiant matériel unique du capteur générique au format SERIAL.FUNCTIONID.

genericsensor→get_highestValue()

Retourne la valeur maximale observée pour la measure depuis le démarrage du module.

genericsensor→get_logFrequency()

Retourne la fréquence d'enregistrement des mesures dans le datalogger, ou "OFF" si les mesures ne sont pas stockées dans la mémoire de l'enregistreur de données.

genericsensor→get_logicalName()

Retourne le nom logique du capteur générique.

genericsensor→get_lowestValue()

Retourne la valeur minimale observée pour la measure depuis le démarrage du module.

genericsensor→get_module()

Retourne l'objet YModule correspondant au module Yoctopuce qui héberge la fonction.

genericsensor→get_module_async(callback, context)

Retourne l'objet YModule correspondant au module Yoctopuce qui héberge la fonction.

genericsensor→get_recordedData(startTime, endTime)

Retourne un objet YDataSet représentant des mesures de ce capteur précédemment enregistrées à l'aide du DataLogger, pour l'intervalle de temps spécifié.

genericsensor→get_reportFrequency()

Retourne la fréquence de notification périodique des valeurs mesurées, ou "OFF" si les notifications périodiques sont désactivées pour cette fonction.

genericsensor→get_resolution()

Retourne la résolution des valeurs mesurées.

genericsensor→get_sensorState()

Retourne le code d'état du capteur, qui vaut zéro lorsqu'une mesure actuelle est disponible, ou un code positif si le capteur n'est pas en mesure de fournir une valeur en ce moment.

genericsensor→get_serialNumber()

Retourne le numéro de série du module, préprogrammé en usine.

genericsensor→get_signalBias()

Retourne le biais du signal électrique pour la correction du point zéro.

genericsensor→get_signalRange()

Retourne la plage de signal d'entrée utilisé par le capteur.

genericsensor→get_signalSampling()

Retourne la méthode d'échantillonnage du signal utilisée.

genericsensor→get_signalUnit()

Retourne l'unité du signal électrique utilisé par le capteur.

genericsensor→get_signalValue()

Retourne la valeur actuelle du signal électrique mesuré par le capteur.

genericsensor→get_unit()

Retourne l'unité dans laquelle la measure est exprimée.

genericsensor→get_userData()

Retourne le contenu de l'attribut userData, précédemment stocké à l'aide de la méthode set_userData.

genericsensor→get_valueRange()

Retourne la plage de valeurs physiques mesurés par le capteur.

genericsensor→isOnline()

Vérifie si le module hébergeant le capteur générique est joignable, sans déclencher d'erreur.

genericsensor→isOnline_async(callback, context)

Vérifie si le module hébergeant le capteur générique est joignable, sans déclencher d'erreur.

genericsensor→isReadOnly()

Test si la fonction est en lecture seule.

genericsensor→isSensorReady()

Vérifie si le capteur est actuellement en état de transmettre une mesure valide.

genericsensor→load(msValidity)

Met en cache les valeurs courantes du capteur générique, avec une durée de validité spécifiée.

genericsensor→loadAttribute(attrName)

Retourne la valeur actuelle d'un attribut spécifique de la fonction, sous forme de texte, le plus rapidement possible mais sans passer par le cache.

genericsensor→loadCalibrationPoints(rawValues, refValues)

Récupère les points de correction de mesure précédemment enregistrés à l'aide de la méthode calibrateFromPoints.

genericsensor→load_async(msValidity, callback, context)

Met en cache les valeurs courantes du capteur générique, avec une durée de validité spécifiée.

genericsensor→muteValueCallbacks()

Désactive l'envoi de chaque changement de la valeur publiée au hub parent.

genericsensor→nextGenericSensor()

Continue l'énumération des capteurs génériques commencée à l'aide de yFirstGenericSensor() Attention, vous ne pouvez faire aucune supposition sur l'ordre dans lequel les capteurs génériques sont retournés.

genericsensor→registerTimedReportCallback(callback)

Enregistre la fonction de callback qui est appelée à chaque notification périodique.

genericsensor→registerValueCallback(callback)

Enregistre la fonction de callback qui est appelée à chaque changement de la valeur publiée.

genericsensor→set_advMode(newval)

Modifie le mode de calcul de la valeur publiée jusqu'au hub parent (advertisedValue).

genericsensor→set_enabled(newval)

Modifie l'état d'activation de cette mesure.

genericsensor→set_highestValue(newval)

Modifie la mémoire de valeur maximale observée.

genericsensor→set_logFrequency(newval)

Modifie la fréquence d'enregistrement des mesures dans le datalogger.

genericsensor→set_logicalName(newval)

Modifie le nom logique du capteur générique.

genericsensor→set_lowestValue(newval)

Modifie la mémoire de valeur minimale observée.

genericsensor→set_reportFrequency(newval)

Modifie la fréquence de notification périodique des valeurs mesurées.

genericsensor→set_resolution(resolution, newval)

Change la résolution des valeurs physique mesurées.

genericsensor→set_signalBias(newval)

Modifie le biais du signal électrique pour la correction du point zéro.

genericsensor→set_signalRange(newval)

Modifie la plage du signal d'entrée utilisé par le capteur.

genericsensor→set_signalSampling(newval)

Modifie la méthode d'échantillonnage du signal à utiliser.

genericsensor→set_unit(newval)

Modifie l'unité dans laquelle la valeur mesurée est exprimée.

genericsensor→set_userData(data)

Enregistre un contexte libre dans l'attribut userData de la fonction, afin de le retrouver plus tard à l'aide de la méthode get_userData.

genericsensor→set_valueRange(newval)

Modifie la plage de valeur de sortie, correspondant à la grandeur physique mesurée par le capteur.

genericsensor→startDataLogger()

Démarre l'enregistreur de données du module.

genericsensor→stopDataLogger()

Arrête l'enregistreur de données du module.

genericsensor→unmuteValueCallbacks()

Réactive l'envoi de chaque changement de la valeur publiée au hub parent.

genericsensor→wait_async(callback, context)

Attend que toutes les commandes asynchrones en cours d'exécution sur le module soient terminées, et appelle le callback passé en paramètre.

genericsensor→zeroAdjust()

Ajuste le biais du signal de sorte à ce que la valeur actuelle du signal soit interprétée comme zéro (tare).

YGenericSensor.FindGenericSensor()
YGenericSensor.FindGenericSensor()
yFindGenericSensor()yFindGenericSensor()[YGenericSensor FindGenericSensor: ]yFindGenericSensor()yFindGenericSensor()YGenericSensor.FindGenericSensor()YGenericSensor.FindGenericSensor()YGenericSensor.FindGenericSensor()YGenericSensor.FindGenericSensor()yFindGenericSensor()YGenericSensor.FindGenericSensor()YGenericSensor.FindGenericSensor()YGenericSensor.FindGenericSensor()

Permet de retrouver un capteur générique d'après un identifiant donné.

js
function yFindGenericSensor(func)
cpp
YGenericSensor* yFindGenericSensor(string func)
m
+(YGenericSensor*) FindGenericSensor: (NSString*) func
pas
TYGenericSensor yFindGenericSensor(func: string): TYGenericSensor
vb
function yFindGenericSensor(ByVal func As String) As YGenericSensor
cs
static YGenericSensor FindGenericSensor(string func)
java
static YGenericSensor FindGenericSensor(String func)
uwp
static YGenericSensor FindGenericSensor(string func)
py
FindGenericSensor(func)
php
function yFindGenericSensor($func)
es
static FindGenericSensor(func)
dnp
static YGenericSensorProxy FindGenericSensor(string func)
cp
static YGenericSensorProxy * FindGenericSensor(string func)

L'identifiant peut être spécifié sous plusieurs formes:

Cette fonction n'exige pas que le capteur générique soit en ligne au moment ou elle est appelée, l'objet retourné sera néanmoins valide. Utiliser la méthode YGenericSensor.isOnline() pour tester si le capteur générique est utilisable à un moment donné. En cas d'ambiguïté lorsqu'on fait une recherche par nom logique, aucune erreur ne sera notifiée: la première instance trouvée sera renvoyée. La recherche se fait d'abord par nom matériel, puis par nom logique.

Si un appel à la méthode is_online() de cet objet renvoie FAUX alors que vous êtes sûr que le module correspondant est bien branché, vérifiez que vous n'avez pas oublié d'appeler registerHub() à l'initialisation de de l'application.

Paramètres :

funcune chaîne de caractères qui référence le capteur générique sans ambiguïté, par exemple RX010V01.genericSensor1.

Retourne :

un objet de classe YGenericSensor qui permet ensuite de contrôler le capteur générique.

YGenericSensor.FindGenericSensorInContext()
YGenericSensor.FindGenericSensorInContext()
YGenericSensor.FindGenericSensorInContext()YGenericSensor.FindGenericSensorInContext()YGenericSensor.FindGenericSensorInContext()

Permet de retrouver un capteur générique d'après un identifiant donné dans un Context YAPI.

java
static YGenericSensor FindGenericSensorInContext(YAPIContext yctx,
  String func)
uwp
static YGenericSensor FindGenericSensorInContext(YAPIContext yctx,
  string func)
es
static FindGenericSensorInContext(yctx, func)

L'identifiant peut être spécifié sous plusieurs formes:

Cette fonction n'exige pas que le capteur générique soit en ligne au moment ou elle est appelée, l'objet retourné sera néanmoins valide. Utiliser la méthode YGenericSensor.isOnline() pour tester si le capteur générique est utilisable à un moment donné. En cas d'ambiguïté lorsqu'on fait une recherche par nom logique, aucune erreur ne sera notifiée: la première instance trouvée sera renvoyée. La recherche se fait d'abord par nom matériel, puis par nom logique.

Paramètres :

yctxun contexte YAPI
funcune chaîne de caractères qui référence le capteur générique sans ambiguïté, par exemple RX010V01.genericSensor1.

Retourne :

un objet de classe YGenericSensor qui permet ensuite de contrôler le capteur générique.

YGenericSensor.FirstGenericSensor()
YGenericSensor.FirstGenericSensor()
yFirstGenericSensor()yFirstGenericSensor()[YGenericSensor FirstGenericSensor]yFirstGenericSensor()yFirstGenericSensor()YGenericSensor.FirstGenericSensor()YGenericSensor.FirstGenericSensor()YGenericSensor.FirstGenericSensor()YGenericSensor.FirstGenericSensor()yFirstGenericSensor()YGenericSensor.FirstGenericSensor()

Commence l'énumération des capteurs génériques accessibles par la librairie.

js
function yFirstGenericSensor()
cpp
YGenericSensor * yFirstGenericSensor()
m
+(YGenericSensor*) FirstGenericSensor
pas
TYGenericSensor yFirstGenericSensor(): TYGenericSensor
vb
function yFirstGenericSensor() As YGenericSensor
cs
static YGenericSensor FirstGenericSensor()
java
static YGenericSensor FirstGenericSensor()
uwp
static YGenericSensor FirstGenericSensor()
py
FirstGenericSensor()
php
function yFirstGenericSensor()
es
static FirstGenericSensor()

Utiliser la fonction YGenericSensor.nextGenericSensor() pour itérer sur les autres capteurs génériques.

Retourne :

un pointeur sur un objet YGenericSensor, correspondant au premier capteur générique accessible en ligne, ou null si il n'y a pas de capteurs génériques disponibles.

YGenericSensor.FirstGenericSensorInContext()
YGenericSensor.FirstGenericSensorInContext()
YGenericSensor.FirstGenericSensorInContext()YGenericSensor.FirstGenericSensorInContext()YGenericSensor.FirstGenericSensorInContext()

Commence l'énumération des capteurs génériques accessibles par la librairie.

java
static YGenericSensor FirstGenericSensorInContext(YAPIContext yctx)
uwp
static YGenericSensor FirstGenericSensorInContext(YAPIContext yctx)
es
static FirstGenericSensorInContext(yctx)

Utiliser la fonction YGenericSensor.nextGenericSensor() pour itérer sur les autres capteurs génériques.

Paramètres :

yctxun contexte YAPI.

Retourne :

un pointeur sur un objet YGenericSensor, correspondant au premier capteur générique accessible en ligne, ou null si il n'y a pas de capteurs génériques disponibles.

YGenericSensor.GetSimilarFunctions()
YGenericSensor.GetSimilarFunctions()
YGenericSensor.GetSimilarFunctions()YGenericSensor.GetSimilarFunctions()

Enumère toutes les fonctions de type GenericSensor disponibles sur les modules actuellement joignables par la librairie, et retourne leurs identifiants matériels uniques (hardwareId).

dnp
static new string[] GetSimilarFunctions()
cp
static vector<string> GetSimilarFunctions()

Chaque chaîne retournée peut être passée en argument à la méthode YGenericSensor.FindGenericSensor pour obtenir une objet permettant d'intéragir avec le module correspondant.

Retourne :

un tableau de chaînes de caractères, contenant les identifiants matériels de chaque fonction disponible trouvée.

genericsensor→AdvModegenericsensor.AdvMode

Mode de calcul de la valeur publiée jusqu'au hub parent (advertisedValue).

dnp
int AdvMode

Valeurs possibles:

Y_ADVMODE_INVALID = 0
Y_ADVMODE_IMMEDIATE = 1
Y_ADVMODE_PERIOD_AVG = 2
Y_ADVMODE_PERIOD_MIN = 3
Y_ADVMODE_PERIOD_MAX = 4

Modifiable. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

genericsensor→AdvertisedValuegenericsensor.AdvertisedValue

Courte chaîne de caractères représentant l'état courant de la fonction.

dnp
string AdvertisedValue

genericsensor→Enabledgenericsensor.Enabled

état d'activation de cette mesure.

dnp
int Enabled

Valeurs possibles:

Y_ENABLED_INVALID = 0
Y_ENABLED_FALSE = 1
Y_ENABLED_TRUE = 2

Modifiable. Lorsqu'une mesure est désactivée, sa valeur n'est plus transmise, et pour certains modules, cela permet d'augmenter la fréquence de rafraîchissement des mesures actives. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

genericsensor→FriendlyNamegenericsensor.FriendlyName

Identifiant global de la fonction au format NOM_MODULE.NOM_FONCTION.

dnp
string FriendlyName

Le chaîne retournée utilise soit les noms logiques du module et de la fonction si ils sont définis, soit respectivement le numéro de série du module et l'identifant matériel de la fonction (par exemple: MyCustomName.relay1)

genericsensor→FunctionIdgenericsensor.FunctionId

Identifiant matériel du senseur, sans référence au module.

dnp
string FunctionId

Par example relay1.

genericsensor→HardwareIdgenericsensor.HardwareId

Identifiant matériel unique de la fonction au format SERIAL.FUNCTIONID.

dnp
string HardwareId

L'identifiant unique est composé du numéro de série du module et de l'identifiant matériel de la fonction (par example RELAYLO1-123456.relay1).

genericsensor→IsOnlinegenericsensor.IsOnline

Vérifie si le module hébergeant la fonction est joignable, sans déclencher d'erreur.

dnp
bool IsOnline

Si les valeurs des attributs en cache de la fonction sont valides au moment de l'appel, le module est considéré joignable. Cette fonction ne cause en aucun cas d'exception, quelle que soit l'erreur qui pourrait se produire lors de la vérification de joignabilité.

genericsensor→LogFrequencygenericsensor.LogFrequency

Fréquence d'enregistrement des mesures dans le datalogger, ou "OFF" si les mesures ne sont pas stockées dans la mémoire de l'enregistreur de données.

dnp
string LogFrequency

Modifiable. Modifie la fréquence d'enregistrement des mesures dans le datalogger. La fréquence peut être spécifiée en mesures par secondes, en mesures par minutes (par exemple "15/m") ou en mesures par heure (par exemple "4/h"). Pour désactiver l'enregistrement des mesures de cette fonction, utilisez la valeur "OFF". Attention il est inutile, voir contre productif, de régler la fréquence d'enregistrement à une valeur supérieure à la fréquence d'échantillonnage native du capteur: ces deux fréquences sont complètement indépendantes. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

genericsensor→LogicalNamegenericsensor.LogicalName

Nom logique de la fonction.

dnp
string LogicalName

Modifiable. Vous pouvez utiliser yCheckLogicalName() pour vérifier si votre paramètre est valide. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

genericsensor→ReportFrequencygenericsensor.ReportFrequency

Fréquence de notification périodique des valeurs mesurées, ou "OFF" si les notifications périodiques sont désactivées pour cette fonction.

dnp
string ReportFrequency

Modifiable. Modifie la fréquence de notification périodique des valeurs mesurées. La fréquence peut être spécifiée en mesures par secondes, en mesures par minutes (par exemple "15/m") ou en mesures par heure (par exemple "4/h"). Pour désactiver les notifications périodiques pour cette fonction, utilisez la valeur "OFF". Attention il est inutile, voir contre productif, de régler la fréquence de notification périodique à une valeur supérieure à la fréquence d'échantillonnage native du capteur: ces deux fréquences sont complètement indépendantes. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

genericsensor→Resolutiongenericsensor.Resolution

Résolution des valeurs mesurées.

dnp
double Resolution

La résolution correspond à la précision numérique de la représentation des mesures. Elle n'est pas forcément identique à la précision réelle du capteur. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Modifiable. Modifie la résolution des valeurs physique mesurées. La résolution correspond à la précision de l'affichage des mesures. Elle ne change pas la précision de la mesure elle-même. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

genericsensor→SerialNumbergenericsensor.SerialNumber

Numéro de série du module, préprogrammé en usine.

dnp
string SerialNumber

genericsensor→SignalBiasgenericsensor.SignalBias

Biais du signal électrique pour la correction du point zéro.

dnp
double SignalBias

Un biais positif correspond à la correction d'un signal trop positif, tandis qu'un biais négatif correspond à la correction d'un signal trop négatif.

Modifiable. Si votre signal électrique est positif lorsqu'il devrait être nul, configurez un biais positif de la même valeur afin de corriger l'erreur. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

genericsensor→SignalRangegenericsensor.SignalRange

Plage de signal d'entrée utilisé par le capteur.

dnp
string SignalRange

Modifiable. Modifie la plage du signal d'entrée utilisé par le capteur. Lorsque le signal d'entrée sort de la plage prévue, la valeur de sortie est mise à une valeur arbitraire hors plage, dont le signe indique le sens du dépassement.

Pour un capteur 4-20mA, la plage d'entrée par défaut est "4...20". Pour un capteur 0-10V, la plage d'entrée par défaut est "0.1...10". Pour les interfaces de communication numériques, la plage par défaut est "-999999.999...999999.999".

N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

genericsensor→SignalSamplinggenericsensor.SignalSampling

Méthode d'échantillonnage du signal utilisée.

dnp
int SignalSampling

La méthode HIGH_RATE effectue les mesures le plus rapidement possible, sans aucun filtrage. La méthode HIGH_RATE_FILTERED rajoute un filtre médian sur une fenêtre de 7 échantillons. La méthode LOW_NOISE utilise une fréquence d'aquisition réduite pour réduire le bruit. La méthode LOW_NOISE_FILTERED combine la fréquence réduite avec un filtre médian, pour obtenir des mesures aussi stables que possible même sur un signal bruité.

Valeurs possibles:

Y_SIGNALSAMPLING_INVALID = 0
Y_SIGNALSAMPLING_HIGH_RATE = 1
Y_SIGNALSAMPLING_HIGH_RATE_FILTERED = 2
Y_SIGNALSAMPLING_LOW_NOISE = 3
Y_SIGNALSAMPLING_LOW_NOISE_FILTERED = 4
Y_SIGNALSAMPLING_HIGHEST_RATE = 5

Modifiable. Modifie la méthode d'échantillonnage du signal à utiliser. La méthode HIGH_RATE effectue les mesures le plus rapidement possible, sans aucun filtrage. La méthode HIGH_RATE_FILTERED rajoute un filtre médian sur une fenêtre de 7 échantillons. La méthode LOW_NOISE utilise une fréquence d'aquisition réduite pour réduire le bruit. La méthode LOW_NOISE_FILTERED combine la fréquence réduite avec un filtre médian, pour obtenir des mesures aussi stables que possible même sur un signal bruité. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

genericsensor→SignalUnitgenericsensor.SignalUnit

Unité du signal électrique utilisé par le capteur.

dnp
string SignalUnit

genericsensor→ValueRangegenericsensor.ValueRange

Plage de valeurs physiques mesurés par le capteur.

dnp
string ValueRange

Modifiable. Modifie la plage de valeur de sortie, correspondant à la grandeur physique mesurée par le capteur. La valeur par défaut de la plage de valeur de sortie est la même que la plage de la valeur du signal d'entrée (correspondance 1:1), mais vous pouvez la modifier pour que la fonction calcule directement la grandeur physique encodée par le signal. Notez que le changement de plage peut avoir pour effet de bord un changement automatique de la résolution affichée.

N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

genericsensor→calibrateFromPoints()genericsensor.calibrateFromPoints()genericsensor→calibrateFromPoints()[genericsensor calibrateFromPoints: ]genericsensor.calibrateFromPoints()genericsensor.calibrateFromPoints()genericsensor.calibrateFromPoints()genericsensor.calibrateFromPoints()genericsensor.calibrateFromPoints()genericsensor.calibrateFromPoints()genericsensor→calibrateFromPoints()genericsensor.calibrateFromPoints()genericsensor.calibrateFromPoints()genericsensor.calibrateFromPoints()YGenericSensor calibrateFromPoints

Enregistre des points de correction de mesure, typiquement pour compenser l'effet d'un boîtier sur les mesures rendues par le capteur.

js
function calibrateFromPoints(rawValues, refValues)
cpp
int calibrateFromPoints(vector<double> rawValues,
  vector<double> refValues)
m
-(int) calibrateFromPoints: (NSMutableArray*) rawValues
  : (NSMutableArray*) refValues
pas
LongInt calibrateFromPoints(rawValues: TDoubleArray,
  refValues: TDoubleArray): LongInt
vb
procedure calibrateFromPoints(ByVal rawValues As List(Of)
cs
int calibrateFromPoints(List<double> rawValues,
  List<double> refValues)
java
int calibrateFromPoints(ArrayList<Double> rawValues,
  ArrayList<Double> refValues)
uwp
async Task<int> calibrateFromPoints(List<double> rawValues,
  List<double> refValues)
py
calibrateFromPoints(rawValues, refValues)
php
function calibrateFromPoints($rawValues, $refValues)
es
async calibrateFromPoints(rawValues, refValues)
dnp
int calibrateFromPoints(double[] rawValues,
  double[] refValues)
cp
int calibrateFromPoints(vector<double> rawValues,
  vector<double> refValues)
cmd
YGenericSensor target calibrateFromPoints rawValues refValues

Il est possible d'enregistrer jusqu'à cinq points de correction. Les points de correction doivent être fournis en ordre croissant, et dans la plage valide du capteur. Le module effectue automatiquement une interpolation linéaire de l'erreur entre les points spécifiés. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Pour plus de plus amples possibilités d'appliquer une surcalibration aux capteurs, veuillez contacter support@yoctopuce.com.

Paramètres :

rawValuestableau de nombres flottants, correspondant aux valeurs brutes rendues par le capteur pour les points de correction.
refValuestableau de nombres flottants, correspondant aux valeurs corrigées désirées pour les points de correction.

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

genericsensor→clearCache()genericsensor.clearCache()genericsensor→clearCache()[genericsensor clearCache]genericsensor.clearCache()genericsensor.clearCache()genericsensor.clearCache()genericsensor.clearCache()genericsensor.clearCache()genericsensor→clearCache()genericsensor.clearCache()

Invalide le cache.

js
function clearCache()
cpp
void clearCache()
m
-(void) clearCache
pas
clearCache()
vb
procedure clearCache()
cs
void clearCache()
java
void clearCache()
py
clearCache()
php
function clearCache()
es
async clearCache()

Invalide le cache des valeurs courantes du capteur générique. Force le prochain appel à une méthode get_xxx() ou loadxxx() pour charger les les données depuis le module.

genericsensor→describe()genericsensor.describe()genericsensor→describe()[genericsensor describe]genericsensor.describe()genericsensor.describe()genericsensor.describe()genericsensor.describe()genericsensor.describe()genericsensor→describe()genericsensor.describe()

Retourne un court texte décrivant de manière non-ambigüe l'instance du capteur générique au format TYPE(NAME)=SERIAL.FUNCTIONID.

js
function describe()
cpp
string describe()
m
-(NSString*) describe
pas
string describe(): string
vb
function describe() As String
cs
string describe()
java
String describe()
py
describe()
php
function describe()
es
async describe()

Plus précisément, TYPE correspond au type de fonction, NAME correspond au nom utilsé lors du premier accès a la fonction, SERIAL correspond au numéro de série du module si le module est connecté, ou "unresolved" sinon, et FUNCTIONID correspond à l'identifiant matériel de la fonction si le module est connecté. Par exemple, La methode va retourner Relay(MyCustomName.relay1)=RELAYLO1-123456.relay1 si le module est déjà connecté ou Relay(BadCustomeName.relay1)=unresolved si le module n'est pas déjà connecté. Cette methode ne declenche aucune transaction USB ou TCP et peut donc être utilisé dans un debuggeur.

Retourne :

une chaîne de caractères décrivant le capteur générique (ex: Relay(MyCustomName.relay1)=RELAYLO1-123456.relay1)

genericsensor→get_advMode()
genericsensor→advMode()
genericsensor.get_advMode()genericsensor→get_advMode()[genericsensor advMode]genericsensor.get_advMode()genericsensor.get_advMode()genericsensor.get_advMode()genericsensor.get_advMode()genericsensor.get_advMode()genericsensor.get_advMode()genericsensor→get_advMode()genericsensor.get_advMode()genericsensor.get_advMode()genericsensor.get_advMode()YGenericSensor get_advMode

Retourne le mode de calcul de la valeur publiée jusqu'au hub parent (advertisedValue).

js
function get_advMode()
cpp
Y_ADVMODE_enum get_advMode()
m
-(Y_ADVMODE_enum) advMode
pas
Integer get_advMode(): Integer
vb
function get_advMode() As Integer
cs
int get_advMode()
java
int get_advMode()
uwp
async Task<int> get_advMode()
py
get_advMode()
php
function get_advMode()
es
async get_advMode()
dnp
int get_advMode()
cp
int get_advMode()
cmd
YGenericSensor target get_advMode

Retourne :

une valeur parmi Y_ADVMODE_IMMEDIATE, Y_ADVMODE_PERIOD_AVG, Y_ADVMODE_PERIOD_MIN et Y_ADVMODE_PERIOD_MAX représentant le mode de calcul de la valeur publiée jusqu'au hub parent (advertisedValue)

En cas d'erreur, déclenche une exception ou retourne Y_ADVMODE_INVALID.

genericsensor→get_advertisedValue()
genericsensor→advertisedValue()
genericsensor.get_advertisedValue()genericsensor→get_advertisedValue()[genericsensor advertisedValue]genericsensor.get_advertisedValue()genericsensor.get_advertisedValue()genericsensor.get_advertisedValue()genericsensor.get_advertisedValue()genericsensor.get_advertisedValue()genericsensor.get_advertisedValue()genericsensor→get_advertisedValue()genericsensor.get_advertisedValue()genericsensor.get_advertisedValue()genericsensor.get_advertisedValue()YGenericSensor get_advertisedValue

Retourne la valeur courante du capteur générique (pas plus de 6 caractères).

js
function get_advertisedValue()
cpp
string get_advertisedValue()
m
-(NSString*) advertisedValue
pas
string get_advertisedValue(): string
vb
function get_advertisedValue() As String
cs
string get_advertisedValue()
java
String get_advertisedValue()
uwp
async Task<string> get_advertisedValue()
py
get_advertisedValue()
php
function get_advertisedValue()
es
async get_advertisedValue()
dnp
string get_advertisedValue()
cp
string get_advertisedValue()
cmd
YGenericSensor target get_advertisedValue

Retourne :

une chaîne de caractères représentant la valeur courante du capteur générique (pas plus de 6 caractères).

En cas d'erreur, déclenche une exception ou retourne Y_ADVERTISEDVALUE_INVALID.

genericsensor→get_currentRawValue()
genericsensor→currentRawValue()
genericsensor.get_currentRawValue()genericsensor→get_currentRawValue()[genericsensor currentRawValue]genericsensor.get_currentRawValue()genericsensor.get_currentRawValue()genericsensor.get_currentRawValue()genericsensor.get_currentRawValue()genericsensor.get_currentRawValue()genericsensor.get_currentRawValue()genericsensor→get_currentRawValue()genericsensor.get_currentRawValue()genericsensor.get_currentRawValue()genericsensor.get_currentRawValue()YGenericSensor get_currentRawValue

Retourne la valeur brute retournée par le capteur (sans arrondi ni calibration).

js
function get_currentRawValue()
cpp
double get_currentRawValue()
m
-(double) currentRawValue
pas
double get_currentRawValue(): double
vb
function get_currentRawValue() As Double
cs
double get_currentRawValue()
java
double get_currentRawValue()
uwp
async Task<double> get_currentRawValue()
py
get_currentRawValue()
php
function get_currentRawValue()
es
async get_currentRawValue()
dnp
double get_currentRawValue()
cp
double get_currentRawValue()
cmd
YGenericSensor target get_currentRawValue

Retourne :

une valeur numérique représentant la valeur brute retournée par le capteur (sans arrondi ni calibration)

En cas d'erreur, déclenche une exception ou retourne Y_CURRENTRAWVALUE_INVALID.

genericsensor→get_currentValue()
genericsensor→currentValue()
genericsensor.get_currentValue()genericsensor→get_currentValue()[genericsensor currentValue]genericsensor.get_currentValue()genericsensor.get_currentValue()genericsensor.get_currentValue()genericsensor.get_currentValue()genericsensor.get_currentValue()genericsensor.get_currentValue()genericsensor→get_currentValue()genericsensor.get_currentValue()genericsensor.get_currentValue()genericsensor.get_currentValue()YGenericSensor get_currentValue

Retourne la valeur mesurée actuelle.

js
function get_currentValue()
cpp
double get_currentValue()
m
-(double) currentValue
pas
double get_currentValue(): double
vb
function get_currentValue() As Double
cs
double get_currentValue()
java
double get_currentValue()
uwp
async Task<double> get_currentValue()
py
get_currentValue()
php
function get_currentValue()
es
async get_currentValue()
dnp
double get_currentValue()
cp
double get_currentValue()
cmd
YGenericSensor target get_currentValue

Retourne :

une valeur numérique représentant la valeur mesurée actuelle

En cas d'erreur, déclenche une exception ou retourne Y_CURRENTVALUE_INVALID.

genericsensor→get_dataLogger()
genericsensor→dataLogger()
genericsensor.get_dataLogger()genericsensor→get_dataLogger()[genericsensor dataLogger]genericsensor.get_dataLogger()genericsensor.get_dataLogger()genericsensor.get_dataLogger()genericsensor.get_dataLogger()genericsensor.get_dataLogger()genericsensor.get_dataLogger()genericsensor→get_dataLogger()genericsensor.get_dataLogger()genericsensor.get_dataLogger()genericsensor.get_dataLogger()

Retourne l'objet YDatalogger du module qui héberge le senseur.

js
function get_dataLogger()
cpp
YDataLogger* get_dataLogger()
m
-(YDataLogger*) dataLogger
pas
TYDataLogger get_dataLogger(): TYDataLogger
vb
function get_dataLogger() As YDataLogger
cs
YDataLogger get_dataLogger()
java
YDataLogger get_dataLogger()
uwp
async Task<YDataLogger> get_dataLogger()
py
get_dataLogger()
php
function get_dataLogger()
es
async get_dataLogger()
dnp
YDataLoggerProxy get_dataLogger()
cp
YDataLoggerProxy* get_dataLogger()

Cette méthode retourne un objet qui permet de contrôler les paramètres globaux de l'enregistreur de données. L'objet retourné ne doit pas être libéré.

Retourne :

un objet YDatalogger, ou null en cas d'erreur.

genericsensor→get_enabled()
genericsensor→enabled()
genericsensor.get_enabled()genericsensor→get_enabled()[genericsensor enabled]genericsensor.get_enabled()genericsensor.get_enabled()genericsensor.get_enabled()genericsensor.get_enabled()genericsensor.get_enabled()genericsensor.get_enabled()genericsensor→get_enabled()genericsensor.get_enabled()genericsensor.get_enabled()genericsensor.get_enabled()YGenericSensor get_enabled

Retourne l'état d'activation de cette mesure.

js
function get_enabled()
cpp
Y_ENABLED_enum get_enabled()
m
-(Y_ENABLED_enum) enabled
pas
Integer get_enabled(): Integer
vb
function get_enabled() As Integer
cs
int get_enabled()
java
int get_enabled()
uwp
async Task<int> get_enabled()
py
get_enabled()
php
function get_enabled()
es
async get_enabled()
dnp
int get_enabled()
cp
int get_enabled()
cmd
YGenericSensor target get_enabled

Retourne :

soit Y_ENABLED_FALSE, soit Y_ENABLED_TRUE, selon l'état d'activation de cette mesure

En cas d'erreur, déclenche une exception ou retourne Y_ENABLED_INVALID.

genericsensor→get_errorMessage()
genericsensor→errorMessage()
genericsensor.get_errorMessage()genericsensor→get_errorMessage()[genericsensor errorMessage]genericsensor.get_errorMessage()genericsensor.get_errorMessage()genericsensor.get_errorMessage()genericsensor.get_errorMessage()genericsensor.get_errorMessage()genericsensor→get_errorMessage()genericsensor.get_errorMessage()

Retourne le message correspondant à la dernière erreur survenue lors de l'utilisation du capteur générique.

js
function get_errorMessage()
cpp
string get_errorMessage()
m
-(NSString*) errorMessage
pas
string get_errorMessage(): string
vb
function get_errorMessage() As String
cs
string get_errorMessage()
java
String get_errorMessage()
py
get_errorMessage()
php
function get_errorMessage()
es
get_errorMessage()

Cette méthode est principalement utile lorsque la librairie Yoctopuce est utilisée en désactivant la gestion des exceptions.

Retourne :

une chaîne de caractères correspondant au message de la dernière erreur qui s'est produit lors de l'utilisation du capteur générique.

genericsensor→get_errorType()
genericsensor→errorType()
genericsensor.get_errorType()genericsensor→get_errorType()[genericsensor errorType]genericsensor.get_errorType()genericsensor.get_errorType()genericsensor.get_errorType()genericsensor.get_errorType()genericsensor.get_errorType()genericsensor→get_errorType()genericsensor.get_errorType()

Retourne le code d'erreur correspondant à la dernière erreur survenue lors de l'utilisation du capteur générique.

js
function get_errorType()
cpp
YRETCODE get_errorType()
m
-(YRETCODE) errorType
pas
YRETCODE get_errorType(): YRETCODE
vb
function get_errorType() As YRETCODE
cs
YRETCODE get_errorType()
java
int get_errorType()
py
get_errorType()
php
function get_errorType()
es
get_errorType()

Cette méthode est principalement utile lorsque la librairie Yoctopuce est utilisée en désactivant la gestion des exceptions.

Retourne :

un nombre correspondant au code de la dernière erreur qui s'est produit lors de l'utilisation du capteur générique.

genericsensor→get_friendlyName()
genericsensor→friendlyName()
genericsensor.get_friendlyName()genericsensor→get_friendlyName()[genericsensor friendlyName]genericsensor.get_friendlyName()genericsensor.get_friendlyName()genericsensor.get_friendlyName()genericsensor→get_friendlyName()genericsensor.get_friendlyName()genericsensor.get_friendlyName()genericsensor.get_friendlyName()

Retourne un identifiant global du capteur générique au format NOM_MODULE.NOM_FONCTION.

js
function get_friendlyName()
cpp
string get_friendlyName()
m
-(NSString*) friendlyName
cs
string get_friendlyName()
java
String get_friendlyName()
py
get_friendlyName()
php
function get_friendlyName()
es
async get_friendlyName()
dnp
string get_friendlyName()
cp
string get_friendlyName()

Le chaîne retournée utilise soit les noms logiques du module et du capteur générique si ils sont définis, soit respectivement le numéro de série du module et l'identifant matériel du capteur générique (par exemple: MyCustomName.relay1)

Retourne :

une chaîne de caractères identifiant le capteur générique en utilisant les noms logiques (ex: MyCustomName.relay1)

En cas d'erreur, déclenche une exception ou retourne Y_FRIENDLYNAME_INVALID.

genericsensor→get_functionDescriptor()
genericsensor→functionDescriptor()
genericsensor.get_functionDescriptor()genericsensor→get_functionDescriptor()[genericsensor functionDescriptor]genericsensor.get_functionDescriptor()genericsensor.get_functionDescriptor()genericsensor.get_functionDescriptor()genericsensor.get_functionDescriptor()genericsensor.get_functionDescriptor()genericsensor→get_functionDescriptor()genericsensor.get_functionDescriptor()

Retourne un identifiant unique de type YFUN_DESCR correspondant à la fonction.

js
function get_functionDescriptor()
cpp
YFUN_DESCR get_functionDescriptor()
m
-(YFUN_DESCR) functionDescriptor
pas
YFUN_DESCR get_functionDescriptor(): YFUN_DESCR
vb
function get_functionDescriptor() As YFUN_DESCR
cs
YFUN_DESCR get_functionDescriptor()
java
String get_functionDescriptor()
py
get_functionDescriptor()
php
function get_functionDescriptor()
es
async get_functionDescriptor()

Cet identifiant peut être utilisé pour tester si deux instance de YFunction référencent physiquement la même fonction sur le même module.

Retourne :

un identifiant de type YFUN_DESCR.

Si la fonction n'a jamais été contactée, la valeur retournée sera Y_FUNCTIONDESCRIPTOR_INVALID

genericsensor→get_functionId()
genericsensor→functionId()
genericsensor.get_functionId()genericsensor→get_functionId()[genericsensor functionId]genericsensor.get_functionId()genericsensor.get_functionId()genericsensor.get_functionId()genericsensor.get_functionId()genericsensor→get_functionId()genericsensor.get_functionId()genericsensor.get_functionId()genericsensor.get_functionId()

Retourne l'identifiant matériel du capteur générique, sans référence au module.

js
function get_functionId()
cpp
string get_functionId()
m
-(NSString*) functionId
vb
function get_functionId() As String
cs
string get_functionId()
java
String get_functionId()
py
get_functionId()
php
function get_functionId()
es
async get_functionId()
dnp
string get_functionId()
cp
string get_functionId()

Par example relay1.

Retourne :

une chaîne de caractères identifiant le capteur générique (ex: relay1)

En cas d'erreur, déclenche une exception ou retourne Y_FUNCTIONID_INVALID.

genericsensor→get_hardwareId()
genericsensor→hardwareId()
genericsensor.get_hardwareId()genericsensor→get_hardwareId()[genericsensor hardwareId]genericsensor.get_hardwareId()genericsensor.get_hardwareId()genericsensor.get_hardwareId()genericsensor.get_hardwareId()genericsensor→get_hardwareId()genericsensor.get_hardwareId()genericsensor.get_hardwareId()genericsensor.get_hardwareId()

Retourne l'identifiant matériel unique du capteur générique au format SERIAL.FUNCTIONID.

js
function get_hardwareId()
cpp
string get_hardwareId()
m
-(NSString*) hardwareId
vb
function get_hardwareId() As String
cs
string get_hardwareId()
java
String get_hardwareId()
py
get_hardwareId()
php
function get_hardwareId()
es
async get_hardwareId()
dnp
string get_hardwareId()
cp
string get_hardwareId()

L'identifiant unique est composé du numéro de série du module et de l'identifiant matériel du capteur générique (par example RELAYLO1-123456.relay1).

Retourne :

une chaîne de caractères identifiant le capteur générique (ex: RELAYLO1-123456.relay1)

En cas d'erreur, déclenche une exception ou retourne Y_HARDWAREID_INVALID.

genericsensor→get_highestValue()
genericsensor→highestValue()
genericsensor.get_highestValue()genericsensor→get_highestValue()[genericsensor highestValue]genericsensor.get_highestValue()genericsensor.get_highestValue()genericsensor.get_highestValue()genericsensor.get_highestValue()genericsensor.get_highestValue()genericsensor.get_highestValue()genericsensor→get_highestValue()genericsensor.get_highestValue()genericsensor.get_highestValue()genericsensor.get_highestValue()YGenericSensor get_highestValue

Retourne la valeur maximale observée pour la measure depuis le démarrage du module.

js
function get_highestValue()
cpp
double get_highestValue()
m
-(double) highestValue
pas
double get_highestValue(): double
vb
function get_highestValue() As Double
cs
double get_highestValue()
java
double get_highestValue()
uwp
async Task<double> get_highestValue()
py
get_highestValue()
php
function get_highestValue()
es
async get_highestValue()
dnp
double get_highestValue()
cp
double get_highestValue()
cmd
YGenericSensor target get_highestValue

Peut être réinitialisé à une valeur arbitraire grâce à set_highestValue().

Retourne :

une valeur numérique représentant la valeur maximale observée pour la measure depuis le démarrage du module

En cas d'erreur, déclenche une exception ou retourne Y_HIGHESTVALUE_INVALID.

genericsensor→get_logFrequency()
genericsensor→logFrequency()
genericsensor.get_logFrequency()genericsensor→get_logFrequency()[genericsensor logFrequency]genericsensor.get_logFrequency()genericsensor.get_logFrequency()genericsensor.get_logFrequency()genericsensor.get_logFrequency()genericsensor.get_logFrequency()genericsensor.get_logFrequency()genericsensor→get_logFrequency()genericsensor.get_logFrequency()genericsensor.get_logFrequency()genericsensor.get_logFrequency()YGenericSensor get_logFrequency

Retourne la fréquence d'enregistrement des mesures dans le datalogger, ou "OFF" si les mesures ne sont pas stockées dans la mémoire de l'enregistreur de données.

js
function get_logFrequency()
cpp
string get_logFrequency()
m
-(NSString*) logFrequency
pas
string get_logFrequency(): string
vb
function get_logFrequency() As String
cs
string get_logFrequency()
java
String get_logFrequency()
uwp
async Task<string> get_logFrequency()
py
get_logFrequency()
php
function get_logFrequency()
es
async get_logFrequency()
dnp
string get_logFrequency()
cp
string get_logFrequency()
cmd
YGenericSensor target get_logFrequency

Retourne :

une chaîne de caractères représentant la fréquence d'enregistrement des mesures dans le datalogger, ou "OFF" si les mesures ne sont pas stockées dans la mémoire de l'enregistreur de données

En cas d'erreur, déclenche une exception ou retourne Y_LOGFREQUENCY_INVALID.

genericsensor→get_logicalName()
genericsensor→logicalName()
genericsensor.get_logicalName()genericsensor→get_logicalName()[genericsensor logicalName]genericsensor.get_logicalName()genericsensor.get_logicalName()genericsensor.get_logicalName()genericsensor.get_logicalName()genericsensor.get_logicalName()genericsensor.get_logicalName()genericsensor→get_logicalName()genericsensor.get_logicalName()genericsensor.get_logicalName()genericsensor.get_logicalName()YGenericSensor get_logicalName

Retourne le nom logique du capteur générique.

js
function get_logicalName()
cpp
string get_logicalName()
m
-(NSString*) logicalName
pas
string get_logicalName(): string
vb
function get_logicalName() As String
cs
string get_logicalName()
java
String get_logicalName()
uwp
async Task<string> get_logicalName()
py
get_logicalName()
php
function get_logicalName()
es
async get_logicalName()
dnp
string get_logicalName()
cp
string get_logicalName()
cmd
YGenericSensor target get_logicalName

Retourne :

une chaîne de caractères représentant le nom logique du capteur générique.

En cas d'erreur, déclenche une exception ou retourne Y_LOGICALNAME_INVALID.

genericsensor→get_lowestValue()
genericsensor→lowestValue()
genericsensor.get_lowestValue()genericsensor→get_lowestValue()[genericsensor lowestValue]genericsensor.get_lowestValue()genericsensor.get_lowestValue()genericsensor.get_lowestValue()genericsensor.get_lowestValue()genericsensor.get_lowestValue()genericsensor.get_lowestValue()genericsensor→get_lowestValue()genericsensor.get_lowestValue()genericsensor.get_lowestValue()genericsensor.get_lowestValue()YGenericSensor get_lowestValue

Retourne la valeur minimale observée pour la measure depuis le démarrage du module.

js
function get_lowestValue()
cpp
double get_lowestValue()
m
-(double) lowestValue
pas
double get_lowestValue(): double
vb
function get_lowestValue() As Double
cs
double get_lowestValue()
java
double get_lowestValue()
uwp
async Task<double> get_lowestValue()
py
get_lowestValue()
php
function get_lowestValue()
es
async get_lowestValue()
dnp
double get_lowestValue()
cp
double get_lowestValue()
cmd
YGenericSensor target get_lowestValue

Peut être réinitialisé à une valeur arbitraire grâce à set_lowestValue().

Retourne :

une valeur numérique représentant la valeur minimale observée pour la measure depuis le démarrage du module

En cas d'erreur, déclenche une exception ou retourne Y_LOWESTVALUE_INVALID.

genericsensor→get_module()
genericsensor→module()
genericsensor.get_module()genericsensor→get_module()[genericsensor module]genericsensor.get_module()genericsensor.get_module()genericsensor.get_module()genericsensor.get_module()genericsensor.get_module()genericsensor→get_module()genericsensor.get_module()genericsensor.get_module()genericsensor.get_module()

Retourne l'objet YModule correspondant au module Yoctopuce qui héberge la fonction.

js
function get_module()
cpp
YModule * get_module()
m
-(YModule*) module
pas
TYModule get_module(): TYModule
vb
function get_module() As YModule
cs
YModule get_module()
java
YModule get_module()
py
get_module()
php
function get_module()
es
async get_module()
dnp
YModuleProxy get_module()
cp
YModuleProxy * get_module()

Si la fonction ne peut être trouvée sur aucun module, l'instance de YModule retournée ne sera pas joignable.

Retourne :

une instance de YModule

genericsensor→get_module_async()
genericsensor→module_async()
genericsensor.get_module_async()

Retourne l'objet YModule correspondant au module Yoctopuce qui héberge la fonction.

js
function get_module_async(callback, context)

Si la fonction ne peut être trouvée sur aucun module, l'instance de YModule retournée ne sera pas joignable.

Cette version asynchrone n'existe qu'en Javascript. Elle utilise une fonction de callback plutôt qu'une simple valeur de retour, pour éviter de bloquer la VM Javascript de Firefox, qui n'implémente pas le passage de contrôle entre threads durant les appels d'entrée/sortie bloquants.

Paramètres :

callbackfonction de callback qui sera appelée dès que le résultat sera connu. La fonction callback reçoit trois arguments: le contexte fourni par l'appelant, l'objet fonction concerné et l'instance demandée de YModule
contextcontexte fourni par l'appelant, et qui sera passé tel-quel à la fonction de callback

Retourne :

rien du tout : le résultat sera passé en paramètre à la fonction de callback.

genericsensor→get_recordedData()
genericsensor→recordedData()
genericsensor.get_recordedData()genericsensor→get_recordedData()[genericsensor recordedData: ]genericsensor.get_recordedData()genericsensor.get_recordedData()genericsensor.get_recordedData()genericsensor.get_recordedData()genericsensor.get_recordedData()genericsensor.get_recordedData()genericsensor→get_recordedData()genericsensor.get_recordedData()genericsensor.get_recordedData()genericsensor.get_recordedData()YGenericSensor get_recordedData

Retourne un objet YDataSet représentant des mesures de ce capteur précédemment enregistrées à l'aide du DataLogger, pour l'intervalle de temps spécifié.

js
function get_recordedData(startTime, endTime)
cpp
YDataSet get_recordedData(double startTime, double endTime)
m
-(YDataSet*) recordedData: (double) startTime
  : (double) endTime
pas
TYDataSet get_recordedData(startTime: double, endTime: double): TYDataSet
vb
function get_recordedData(ByVal startTime As Double,
  ByVal endTime As Double) As YDataSet
cs
YDataSet get_recordedData(double startTime, double endTime)
java
YDataSet get_recordedData(double startTime, double endTime)
uwp
async Task<YDataSet> get_recordedData(double startTime,
  double endTime)
py
get_recordedData(startTime, endTime)
php
function get_recordedData($startTime, $endTime)
es
async get_recordedData(startTime, endTime)
dnp
YDataSetProxy get_recordedData(double startTime,
  double endTime)
cp
YDataSetProxy* get_recordedData(double startTime,
  double endTime)
cmd
YGenericSensor target get_recordedData startTime endTime

Veuillez vous référer à la documentation de la classe YDataSet pour plus plus d'informations sur la manière d'obtenir un aperçu des mesures pour la période, et comment charger progressivement une grande quantité de mesures depuis le dataLogger.

Cette méthode ne fonctionne que si le module utilise un firmware récent, car les objets YDataSet ne sont pas supportés par les firmwares antérieurs à la révision 13000.

Paramètres :

startTimele début de l'intervalle de mesure désiré, c'est à dire en nombre de secondes depuis le 1er janvier 1970 UTC. La valeur 0 peut être utilisée pour ne poser aucune limite sur le début des mesures.
endTimela find de l'intercalle de mesure désiré, c'est à dire en nombre de secondes depuis le 1er janvier 1970 UTC. La valeur 0 peut être utilisée pour ne poser aucune limite de fin.

Retourne :

une instance de YDataSet, dont les méthodes permettent de d'accéder aux données historiques souhaitées.

genericsensor→get_reportFrequency()
genericsensor→reportFrequency()
genericsensor.get_reportFrequency()genericsensor→get_reportFrequency()[genericsensor reportFrequency]genericsensor.get_reportFrequency()genericsensor.get_reportFrequency()genericsensor.get_reportFrequency()genericsensor.get_reportFrequency()genericsensor.get_reportFrequency()genericsensor.get_reportFrequency()genericsensor→get_reportFrequency()genericsensor.get_reportFrequency()genericsensor.get_reportFrequency()genericsensor.get_reportFrequency()YGenericSensor get_reportFrequency

Retourne la fréquence de notification périodique des valeurs mesurées, ou "OFF" si les notifications périodiques sont désactivées pour cette fonction.

js
function get_reportFrequency()
cpp
string get_reportFrequency()
m
-(NSString*) reportFrequency
pas
string get_reportFrequency(): string
vb
function get_reportFrequency() As String
cs
string get_reportFrequency()
java
String get_reportFrequency()
uwp
async Task<string> get_reportFrequency()
py
get_reportFrequency()
php
function get_reportFrequency()
es
async get_reportFrequency()
dnp
string get_reportFrequency()
cp
string get_reportFrequency()
cmd
YGenericSensor target get_reportFrequency

Retourne :

une chaîne de caractères représentant la fréquence de notification périodique des valeurs mesurées, ou "OFF" si les notifications périodiques sont désactivées pour cette fonction

En cas d'erreur, déclenche une exception ou retourne Y_REPORTFREQUENCY_INVALID.

genericsensor→get_resolution()
genericsensor→resolution()
genericsensor.get_resolution()genericsensor→get_resolution()[genericsensor resolution]genericsensor.get_resolution()genericsensor.get_resolution()genericsensor.get_resolution()genericsensor.get_resolution()genericsensor.get_resolution()genericsensor.get_resolution()genericsensor→get_resolution()genericsensor.get_resolution()genericsensor.get_resolution()genericsensor.get_resolution()YGenericSensor get_resolution

Retourne la résolution des valeurs mesurées.

js
function get_resolution()
cpp
double get_resolution()
m
-(double) resolution
pas
double get_resolution(): double
vb
function get_resolution() As Double
cs
double get_resolution()
java
double get_resolution()
uwp
async Task<double> get_resolution()
py
get_resolution()
php
function get_resolution()
es
async get_resolution()
dnp
double get_resolution()
cp
double get_resolution()
cmd
YGenericSensor target get_resolution

La résolution correspond à la précision numérique de la représentation des mesures. Elle n'est pas forcément identique à la précision réelle du capteur. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Retourne :

une valeur numérique représentant la résolution des valeurs mesurées

En cas d'erreur, déclenche une exception ou retourne Y_RESOLUTION_INVALID.

genericsensor→get_sensorState()
genericsensor→sensorState()
genericsensor.get_sensorState()genericsensor→get_sensorState()[genericsensor sensorState]genericsensor.get_sensorState()genericsensor.get_sensorState()genericsensor.get_sensorState()genericsensor.get_sensorState()genericsensor.get_sensorState()genericsensor.get_sensorState()genericsensor→get_sensorState()genericsensor.get_sensorState()genericsensor.get_sensorState()genericsensor.get_sensorState()YGenericSensor get_sensorState

Retourne le code d'état du capteur, qui vaut zéro lorsqu'une mesure actuelle est disponible, ou un code positif si le capteur n'est pas en mesure de fournir une valeur en ce moment.

js
function get_sensorState()
cpp
int get_sensorState()
m
-(int) sensorState
pas
LongInt get_sensorState(): LongInt
vb
function get_sensorState() As Integer
cs
int get_sensorState()
java
int get_sensorState()
uwp
async Task<int> get_sensorState()
py
get_sensorState()
php
function get_sensorState()
es
async get_sensorState()
dnp
int get_sensorState()
cp
int get_sensorState()
cmd
YGenericSensor target get_sensorState

Retourne :

un entier représentant le code d'état du capteur, qui vaut zéro lorsqu'une mesure actuelle est disponible, ou un code positif si le capteur n'est pas en mesure de fournir une valeur en ce moment

En cas d'erreur, déclenche une exception ou retourne Y_SENSORSTATE_INVALID.

genericsensor→get_serialNumber()
genericsensor→serialNumber()
genericsensor.get_serialNumber()genericsensor→get_serialNumber()[genericsensor serialNumber]genericsensor.get_serialNumber()genericsensor.get_serialNumber()genericsensor.get_serialNumber()genericsensor.get_serialNumber()genericsensor.get_serialNumber()genericsensor.get_serialNumber()genericsensor→get_serialNumber()genericsensor.get_serialNumber()genericsensor.get_serialNumber()genericsensor.get_serialNumber()YGenericSensor get_serialNumber

Retourne le numéro de série du module, préprogrammé en usine.

js
function get_serialNumber()
cpp
string get_serialNumber()
m
-(NSString*) serialNumber
pas
string get_serialNumber(): string
vb
function get_serialNumber() As String
cs
string get_serialNumber()
java
String get_serialNumber()
uwp
async Task<string> get_serialNumber()
py
get_serialNumber()
php
function get_serialNumber()
es
async get_serialNumber()
dnp
string get_serialNumber()
cp
string get_serialNumber()
cmd
YGenericSensor target get_serialNumber

Retourne :

: une chaîne de caractères représentant le numéro de série du module, préprogrammé en usine.

En cas d'erreur, déclenche une exception ou retourne YModule.SERIALNUMBER_INVALID.

genericsensor→get_signalBias()
genericsensor→signalBias()
genericsensor.get_signalBias()genericsensor→get_signalBias()[genericsensor signalBias]genericsensor.get_signalBias()genericsensor.get_signalBias()genericsensor.get_signalBias()genericsensor.get_signalBias()genericsensor.get_signalBias()genericsensor.get_signalBias()genericsensor→get_signalBias()genericsensor.get_signalBias()genericsensor.get_signalBias()genericsensor.get_signalBias()YGenericSensor get_signalBias

Retourne le biais du signal électrique pour la correction du point zéro.

js
function get_signalBias()
cpp
double get_signalBias()
m
-(double) signalBias
pas
double get_signalBias(): double
vb
function get_signalBias() As Double
cs
double get_signalBias()
java
double get_signalBias()
uwp
async Task<double> get_signalBias()
py
get_signalBias()
php
function get_signalBias()
es
async get_signalBias()
dnp
double get_signalBias()
cp
double get_signalBias()
cmd
YGenericSensor target get_signalBias

Un biais positif correspond à la correction d'un signal trop positif, tandis qu'un biais négatif correspond à la correction d'un signal trop négatif.

Retourne :

une valeur numérique représentant le biais du signal électrique pour la correction du point zéro

En cas d'erreur, déclenche une exception ou retourne Y_SIGNALBIAS_INVALID.

genericsensor→get_signalRange()
genericsensor→signalRange()
genericsensor.get_signalRange()genericsensor→get_signalRange()[genericsensor signalRange]genericsensor.get_signalRange()genericsensor.get_signalRange()genericsensor.get_signalRange()genericsensor.get_signalRange()genericsensor.get_signalRange()genericsensor.get_signalRange()genericsensor→get_signalRange()genericsensor.get_signalRange()genericsensor.get_signalRange()genericsensor.get_signalRange()YGenericSensor get_signalRange

Retourne la plage de signal d'entrée utilisé par le capteur.

js
function get_signalRange()
cpp
string get_signalRange()
m
-(NSString*) signalRange
pas
string get_signalRange(): string
vb
function get_signalRange() As String
cs
string get_signalRange()
java
String get_signalRange()
uwp
async Task<string> get_signalRange()
py
get_signalRange()
php
function get_signalRange()
es
async get_signalRange()
dnp
string get_signalRange()
cp
string get_signalRange()
cmd
YGenericSensor target get_signalRange

Retourne :

une chaîne de caractères représentant la plage de signal d'entrée utilisé par le capteur

En cas d'erreur, déclenche une exception ou retourne Y_SIGNALRANGE_INVALID.

genericsensor→get_signalSampling()
genericsensor→signalSampling()
genericsensor.get_signalSampling()genericsensor→get_signalSampling()[genericsensor signalSampling]genericsensor.get_signalSampling()genericsensor.get_signalSampling()genericsensor.get_signalSampling()genericsensor.get_signalSampling()genericsensor.get_signalSampling()genericsensor.get_signalSampling()genericsensor→get_signalSampling()genericsensor.get_signalSampling()genericsensor.get_signalSampling()genericsensor.get_signalSampling()YGenericSensor get_signalSampling

Retourne la méthode d'échantillonnage du signal utilisée.

js
function get_signalSampling()
cpp
Y_SIGNALSAMPLING_enum get_signalSampling()
m
-(Y_SIGNALSAMPLING_enum) signalSampling
pas
Integer get_signalSampling(): Integer
vb
function get_signalSampling() As Integer
cs
int get_signalSampling()
java
int get_signalSampling()
uwp
async Task<int> get_signalSampling()
py
get_signalSampling()
php
function get_signalSampling()
es
async get_signalSampling()
dnp
int get_signalSampling()
cp
int get_signalSampling()
cmd
YGenericSensor target get_signalSampling

La méthode HIGH_RATE effectue les mesures le plus rapidement possible, sans aucun filtrage. La méthode HIGH_RATE_FILTERED rajoute un filtre médian sur une fenêtre de 7 échantillons. La méthode LOW_NOISE utilise une fréquence d'aquisition réduite pour réduire le bruit. La méthode LOW_NOISE_FILTERED combine la fréquence réduite avec un filtre médian, pour obtenir des mesures aussi stables que possible même sur un signal bruité.

Retourne :

une valeur parmi Y_SIGNALSAMPLING_HIGH_RATE, Y_SIGNALSAMPLING_HIGH_RATE_FILTERED, Y_SIGNALSAMPLING_LOW_NOISE, Y_SIGNALSAMPLING_LOW_NOISE_FILTERED et Y_SIGNALSAMPLING_HIGHEST_RATE représentant la méthode d'échantillonnage du signal utilisée

En cas d'erreur, déclenche une exception ou retourne Y_SIGNALSAMPLING_INVALID.

genericsensor→get_signalUnit()
genericsensor→signalUnit()
genericsensor.get_signalUnit()genericsensor→get_signalUnit()[genericsensor signalUnit]genericsensor.get_signalUnit()genericsensor.get_signalUnit()genericsensor.get_signalUnit()genericsensor.get_signalUnit()genericsensor.get_signalUnit()genericsensor.get_signalUnit()genericsensor→get_signalUnit()genericsensor.get_signalUnit()genericsensor.get_signalUnit()genericsensor.get_signalUnit()YGenericSensor get_signalUnit

Retourne l'unité du signal électrique utilisé par le capteur.

js
function get_signalUnit()
cpp
string get_signalUnit()
m
-(NSString*) signalUnit
pas
string get_signalUnit(): string
vb
function get_signalUnit() As String
cs
string get_signalUnit()
java
String get_signalUnit()
uwp
async Task<string> get_signalUnit()
py
get_signalUnit()
php
function get_signalUnit()
es
async get_signalUnit()
dnp
string get_signalUnit()
cp
string get_signalUnit()
cmd
YGenericSensor target get_signalUnit

Retourne :

une chaîne de caractères représentant l'unité du signal électrique utilisé par le capteur

En cas d'erreur, déclenche une exception ou retourne Y_SIGNALUNIT_INVALID.

genericsensor→get_signalValue()
genericsensor→signalValue()
genericsensor.get_signalValue()genericsensor→get_signalValue()[genericsensor signalValue]genericsensor.get_signalValue()genericsensor.get_signalValue()genericsensor.get_signalValue()genericsensor.get_signalValue()genericsensor.get_signalValue()genericsensor.get_signalValue()genericsensor→get_signalValue()genericsensor.get_signalValue()genericsensor.get_signalValue()genericsensor.get_signalValue()YGenericSensor get_signalValue

Retourne la valeur actuelle du signal électrique mesuré par le capteur.

js
function get_signalValue()
cpp
double get_signalValue()
m
-(double) signalValue
pas
double get_signalValue(): double
vb
function get_signalValue() As Double
cs
double get_signalValue()
java
double get_signalValue()
uwp
async Task<double> get_signalValue()
py
get_signalValue()
php
function get_signalValue()
es
async get_signalValue()
dnp
double get_signalValue()
cp
double get_signalValue()
cmd
YGenericSensor target get_signalValue

Retourne :

une valeur numérique représentant la valeur actuelle du signal électrique mesuré par le capteur

En cas d'erreur, déclenche une exception ou retourne Y_SIGNALVALUE_INVALID.

genericsensor→get_unit()
genericsensor→unit()
genericsensor.get_unit()genericsensor→get_unit()[genericsensor unit]genericsensor.get_unit()genericsensor.get_unit()genericsensor.get_unit()genericsensor.get_unit()genericsensor.get_unit()genericsensor.get_unit()genericsensor→get_unit()genericsensor.get_unit()genericsensor.get_unit()genericsensor.get_unit()YGenericSensor get_unit

Retourne l'unité dans laquelle la measure est exprimée.

js
function get_unit()
cpp
string get_unit()
m
-(NSString*) unit
pas
string get_unit(): string
vb
function get_unit() As String
cs
string get_unit()
java
String get_unit()
uwp
async Task<string> get_unit()
py
get_unit()
php
function get_unit()
es
async get_unit()
dnp
string get_unit()
cp
string get_unit()
cmd
YGenericSensor target get_unit

Retourne :

une chaîne de caractères représentant l'unité dans laquelle la measure est exprimée

En cas d'erreur, déclenche une exception ou retourne Y_UNIT_INVALID.

genericsensor→get_userData()
genericsensor→userData()
genericsensor.get_userData()genericsensor→get_userData()[genericsensor userData]genericsensor.get_userData()genericsensor.get_userData()genericsensor.get_userData()genericsensor.get_userData()genericsensor.get_userData()genericsensor→get_userData()genericsensor.get_userData()

Retourne le contenu de l'attribut userData, précédemment stocké à l'aide de la méthode set_userData.

js
function get_userData()
cpp
void * get_userData()
m
-(id) userData
pas
Tobject get_userData(): Tobject
vb
function get_userData() As Object
cs
object get_userData()
java
Object get_userData()
py
get_userData()
php
function get_userData()
es
async get_userData()

Cet attribut n'es pas utilisé directement par l'API. Il est à la disposition de l'appelant pour stocker un contexte.

Retourne :

l'objet stocké précédemment par l'appelant.

genericsensor→get_valueRange()
genericsensor→valueRange()
genericsensor.get_valueRange()genericsensor→get_valueRange()[genericsensor valueRange]genericsensor.get_valueRange()genericsensor.get_valueRange()genericsensor.get_valueRange()genericsensor.get_valueRange()genericsensor.get_valueRange()genericsensor.get_valueRange()genericsensor→get_valueRange()genericsensor.get_valueRange()genericsensor.get_valueRange()genericsensor.get_valueRange()YGenericSensor get_valueRange

Retourne la plage de valeurs physiques mesurés par le capteur.

js
function get_valueRange()
cpp
string get_valueRange()
m
-(NSString*) valueRange
pas
string get_valueRange(): string
vb
function get_valueRange() As String
cs
string get_valueRange()
java
String get_valueRange()
uwp
async Task<string> get_valueRange()
py
get_valueRange()
php
function get_valueRange()
es
async get_valueRange()
dnp
string get_valueRange()
cp
string get_valueRange()
cmd
YGenericSensor target get_valueRange

Retourne :

une chaîne de caractères représentant la plage de valeurs physiques mesurés par le capteur

En cas d'erreur, déclenche une exception ou retourne Y_VALUERANGE_INVALID.

genericsensor→isOnline()genericsensor.isOnline()genericsensor→isOnline()[genericsensor isOnline]genericsensor.isOnline()genericsensor.isOnline()genericsensor.isOnline()genericsensor.isOnline()genericsensor.isOnline()genericsensor→isOnline()genericsensor.isOnline()genericsensor.isOnline()genericsensor.isOnline()

Vérifie si le module hébergeant le capteur générique est joignable, sans déclencher d'erreur.

js
function isOnline()
cpp
bool isOnline()
m
-(BOOL) isOnline
pas
boolean isOnline(): boolean
vb
function isOnline() As Boolean
cs
bool isOnline()
java
boolean isOnline()
py
isOnline()
php
function isOnline()
es
async isOnline()
dnp
bool isOnline()
cp
bool isOnline()

Si les valeurs des attributs en cache du capteur générique sont valides au moment de l'appel, le module est considéré joignable. Cette fonction ne cause en aucun cas d'exception, quelle que soit l'erreur qui pourrait se produire lors de la vérification de joignabilité.

Retourne :

true si le capteur générique est joignable, false sinon

genericsensor→isOnline_async()genericsensor.isOnline_async()

Vérifie si le module hébergeant le capteur générique est joignable, sans déclencher d'erreur.

js
function isOnline_async(callback, context)

Si les valeurs des attributs en cache du capteur générique sont valides au moment de l'appel, le module est considéré joignable. Cette fonction ne cause en aucun cas d'exception, quelle que soit l'erreur qui pourrait se produire lors de la vérification de joignabilité.

Cette version asynchrone n'existe qu'en Javascript. Elle utilise une fonction de callback plutôt qu'une simple valeur de retour, pour éviter de bloquer la machine virtuelle Javascript avec une attente active.

Paramètres :

callbackfonction de callback qui sera appelée dès que le résultat sera connu. La fonction callback reçoit trois arguments: le contexte fourni par l'appelant, l'objet fonction concerné et le résultat booléen
contextcontexte fourni par l'appelant, et qui sera passé tel-quel à la fonction de callback

Retourne :

rien du tout : le résultat sera passé en paramètre à la fonction de callback.

genericsensor→isReadOnly()genericsensor→isReadOnly()[genericsensor isReadOnly]genericsensor.isReadOnly()genericsensor.isReadOnly()genericsensor.isReadOnly()genericsensor.isReadOnly()genericsensor.isReadOnly()genericsensor.isReadOnly()genericsensor→isReadOnly()genericsensor.isReadOnly()genericsensor.isReadOnly()genericsensor.isReadOnly()YGenericSensor isReadOnly

Test si la fonction est en lecture seule.

cpp
bool isReadOnly()
m
-(bool) isReadOnly
pas
boolean isReadOnly(): boolean
vb
function isReadOnly() As Boolean
cs
bool isReadOnly()
java
boolean isReadOnly()
uwp
async Task<bool> isReadOnly()
py
isReadOnly()
php
function isReadOnly()
es
async isReadOnly()
dnp
bool isReadOnly()
cp
bool isReadOnly()
cmd
YGenericSensor target isReadOnly

Retourne vrais si la fonction est protégé en ecriture ou que la fontion n'est pas disponible.

Retourne :

true si la fonction est protégé en ecriture ou que la fontion n'est pas disponible

genericsensor→isSensorReady()YGenericSensor isSensorReady

Vérifie si le capteur est actuellement en état de transmettre une mesure valide.

cmd
YGenericSensor target isSensorReady

Retourne faux si le module n'est pas joignable, ou que le capteur n'a pas de mesure actuelle à communiquer. Cette fonction ne cause en aucun cas d'exception, quelle que soit l'erreur qui pourrait se produire lors de la vérification de joignabilité.

Retourne :

true si le capteur dispose d'une mesure actuelle, false sinon

genericsensor→load()genericsensor.load()genericsensor→load()[genericsensor load: ]genericsensor.load()genericsensor.load()genericsensor.load()genericsensor.load()genericsensor.load()genericsensor→load()genericsensor.load()

Met en cache les valeurs courantes du capteur générique, avec une durée de validité spécifiée.

js
function load(msValidity)
cpp
YRETCODE load(int msValidity)
m
-(YRETCODE) load: (u64) msValidity
pas
YRETCODE load(msValidity: u64): YRETCODE
vb
function load(ByVal msValidity As Long) As YRETCODE
cs
YRETCODE load(ulong msValidity)
java
int load(long msValidity)
py
load(msValidity)
php
function load($msValidity)
es
async load(msValidity)

Par défaut, lorsqu'on accède à un module, tous les attributs des fonctions du module sont automatiquement mises en cache pour la durée standard (5 ms). Cette méthode peut être utilisée pour marquer occasionellement les données cachées comme valides pour une plus longue période, par exemple dans le but de réduire le trafic réseau.

Paramètres :

msValidityun entier correspondant à la durée de validité attribuée aux les paramètres chargés, en millisecondes

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

genericsensor→loadAttribute()genericsensor.loadAttribute()genericsensor→loadAttribute()[genericsensor loadAttribute: ]genericsensor.loadAttribute()genericsensor.loadAttribute()genericsensor.loadAttribute()genericsensor.loadAttribute()genericsensor.loadAttribute()genericsensor.loadAttribute()genericsensor→loadAttribute()genericsensor.loadAttribute()genericsensor.loadAttribute()genericsensor.loadAttribute()

Retourne la valeur actuelle d'un attribut spécifique de la fonction, sous forme de texte, le plus rapidement possible mais sans passer par le cache.

js
function loadAttribute(attrName)
cpp
string loadAttribute(string attrName)
m
-(NSString*) loadAttribute: (NSString*) attrName
pas
string loadAttribute(attrName: string): string
vb
function loadAttribute(ByVal attrName As String) As String
cs
string loadAttribute(string attrName)
java
String loadAttribute(String attrName)
uwp
async Task<string> loadAttribute(string attrName)
py
loadAttribute(attrName)
php
function loadAttribute($attrName)
es
async loadAttribute(attrName)
dnp
string loadAttribute(string attrName)
cp
string loadAttribute(string attrName)

Paramètres :

attrNamele nom de l'attribut désiré

Retourne :

une chaîne de caractères représentant la valeur actuelle de l'attribut.

En cas d'erreur, déclenche une exception ou retourne un chaîne vide.

genericsensor→loadCalibrationPoints()genericsensor.loadCalibrationPoints()genericsensor→loadCalibrationPoints()[genericsensor loadCalibrationPoints: ]genericsensor.loadCalibrationPoints()genericsensor.loadCalibrationPoints()genericsensor.loadCalibrationPoints()genericsensor.loadCalibrationPoints()genericsensor.loadCalibrationPoints()genericsensor.loadCalibrationPoints()genericsensor→loadCalibrationPoints()genericsensor.loadCalibrationPoints()YGenericSensor loadCalibrationPoints

Récupère les points de correction de mesure précédemment enregistrés à l'aide de la méthode calibrateFromPoints.

js
function loadCalibrationPoints(rawValues, refValues)
cpp
int loadCalibrationPoints(vector<double> rawValues,
  vector<double> refValues)
m
-(int) loadCalibrationPoints: (NSMutableArray*) rawValues
  : (NSMutableArray*) refValues
pas
LongInt loadCalibrationPoints(var rawValues: TDoubleArray,
  var refValues: TDoubleArray): LongInt
vb
procedure loadCalibrationPoints(ByVal rawValues As List(Of)
cs
int loadCalibrationPoints(List<double> rawValues,
  List<double> refValues)
java
int loadCalibrationPoints(ArrayList<Double> rawValues,
  ArrayList<Double> refValues)
uwp
async Task<int> loadCalibrationPoints(List<double> rawValues,
  List<double> refValues)
py
loadCalibrationPoints(rawValues, refValues)
php
function loadCalibrationPoints(&$rawValues, &$refValues)
es
async loadCalibrationPoints(rawValues, refValues)
cmd
YGenericSensor target loadCalibrationPoints rawValues refValues

Paramètres :

rawValuestableau de nombres flottants, qui sera rempli par la fonction avec les valeurs brutes des points de correction.
refValuestableau de nombres flottants, qui sera rempli par la fonction avec les valeurs désirées des points de correction.

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

genericsensor→load_async()genericsensor.load_async()

Met en cache les valeurs courantes du capteur générique, avec une durée de validité spécifiée.

js
function load_async(msValidity, callback, context)

Par défaut, lorsqu'on accède à un module, tous les attributs des fonctions du module sont automatiquement mises en cache pour la durée standard (5 ms). Cette méthode peut être utilisée pour marquer occasionellement les données cachées comme valides pour une plus longue période, par exemple dans le but de réduire le trafic réseau.

Cette version asynchrone n'existe qu'en Javascript. Elle utilise une fonction de callback plutôt qu'une simple valeur de retour, pour éviter de bloquer la machine virtuelle Javascript avec une attente active.

Paramètres :

msValidityun entier correspondant à la durée de validité attribuée aux les paramètres chargés, en millisecondes
callbackfonction de callback qui sera appelée dès que le résultat sera connu. La fonction callback reçoit trois arguments: le contexte fourni par l'appelant, l'objet fonction concerné et le code d'erreur (ou YAPI_SUCCESS)
contextcontexte fourni par l'appelant, et qui sera passé tel-quel à la fonction de callback

Retourne :

rien du tout : le résultat sera passé en paramètre à la fonction de callback.

genericsensor→muteValueCallbacks()genericsensor.muteValueCallbacks()genericsensor→muteValueCallbacks()[genericsensor muteValueCallbacks]genericsensor.muteValueCallbacks()genericsensor.muteValueCallbacks()genericsensor.muteValueCallbacks()genericsensor.muteValueCallbacks()genericsensor.muteValueCallbacks()genericsensor.muteValueCallbacks()genericsensor→muteValueCallbacks()genericsensor.muteValueCallbacks()genericsensor.muteValueCallbacks()genericsensor.muteValueCallbacks()YGenericSensor muteValueCallbacks

Désactive l'envoi de chaque changement de la valeur publiée au hub parent.

js
function muteValueCallbacks()
cpp
int muteValueCallbacks()
m
-(int) muteValueCallbacks
pas
LongInt muteValueCallbacks(): LongInt
vb
function muteValueCallbacks() As Integer
cs
int muteValueCallbacks()
java
int muteValueCallbacks()
uwp
async Task<int> muteValueCallbacks()
py
muteValueCallbacks()
php
function muteValueCallbacks()
es
async muteValueCallbacks()
dnp
int muteValueCallbacks()
cp
int muteValueCallbacks()
cmd
YGenericSensor target muteValueCallbacks

Vous pouvez utiliser cette fonction pour économiser la bande passante et le CPU sur les machines de faible puissance, ou pour éviter le déclanchement de callbacks HTTP. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

genericsensor→nextGenericSensor()genericsensor.nextGenericSensor()genericsensor→nextGenericSensor()[genericsensor nextGenericSensor]genericsensor.nextGenericSensor()genericsensor.nextGenericSensor()genericsensor.nextGenericSensor()genericsensor.nextGenericSensor()genericsensor.nextGenericSensor()genericsensor.nextGenericSensor()genericsensor→nextGenericSensor()genericsensor.nextGenericSensor()

Continue l'énumération des capteurs génériques commencée à l'aide de yFirstGenericSensor() Attention, vous ne pouvez faire aucune supposition sur l'ordre dans lequel les capteurs génériques sont retournés.

js
function nextGenericSensor()
cpp
YGenericSensor * nextGenericSensor()
m
-(YGenericSensor*) nextGenericSensor
pas
TYGenericSensor nextGenericSensor(): TYGenericSensor
vb
function nextGenericSensor() As YGenericSensor
cs
YGenericSensor nextGenericSensor()
java
YGenericSensor nextGenericSensor()
uwp
YGenericSensor nextGenericSensor()
py
nextGenericSensor()
php
function nextGenericSensor()
es
nextGenericSensor()

Si vous souhaitez retrouver un capteur générique spécifique, utilisez GenericSensor.findGenericSensor() avec un hardwareID ou un nom logique.

Retourne :

un pointeur sur un objet YGenericSensor accessible en ligne, ou null lorsque l'énumération est terminée.

genericsensor→registerTimedReportCallback()genericsensor.registerTimedReportCallback()genericsensor→registerTimedReportCallback()[genericsensor registerTimedReportCallback: ]genericsensor.registerTimedReportCallback()genericsensor.registerTimedReportCallback()genericsensor.registerTimedReportCallback()genericsensor.registerTimedReportCallback()genericsensor.registerTimedReportCallback()genericsensor.registerTimedReportCallback()genericsensor→registerTimedReportCallback()genericsensor.registerTimedReportCallback()

Enregistre la fonction de callback qui est appelée à chaque notification périodique.

js
function registerTimedReportCallback(callback)
cpp
int registerTimedReportCallback(YGenericSensorTimedReportCallback callback)
m
-(int) registerTimedReportCallback: (YGenericSensorTimedReportCallback) callback
pas
LongInt registerTimedReportCallback(callback: TYGenericSensorTimedReportCallback): LongInt
vb
function registerTimedReportCallback(ByVal callback As YGenericSensorTimedReportCallback) As Integer
cs
int registerTimedReportCallback(TimedReportCallback callback)
java
int registerTimedReportCallback(TimedReportCallback callback)
uwp
async Task<int> registerTimedReportCallback(TimedReportCallback callback)
py
registerTimedReportCallback(callback)
php
function registerTimedReportCallback($callback)
es
async registerTimedReportCallback(callback)

Ce callback n'est appelé que durant l'exécution de ySleep ou yHandleEvents. Cela permet à l'appelant de contrôler quand les callbacks peuvent se produire. Il est important d'appeler l'une de ces deux fonctions périodiquement pour garantir que les callbacks ne soient pas appelés trop tard. Pour désactiver un callback, il suffit d'appeler cette méthode en lui passant un pointeur nul.

Paramètres :

callbackla fonction de callback à rappeler, ou un pointeur nul. La fonction de callback doit accepter deux arguments: l'object fonction dont la valeur a changé, et un objet YMeasure décrivant la nouvelle valeur publiée.

genericsensor→registerValueCallback()genericsensor.registerValueCallback()genericsensor→registerValueCallback()[genericsensor registerValueCallback: ]genericsensor.registerValueCallback()genericsensor.registerValueCallback()genericsensor.registerValueCallback()genericsensor.registerValueCallback()genericsensor.registerValueCallback()genericsensor.registerValueCallback()genericsensor→registerValueCallback()genericsensor.registerValueCallback()

Enregistre la fonction de callback qui est appelée à chaque changement de la valeur publiée.

js
function registerValueCallback(callback)
cpp
int registerValueCallback(YGenericSensorValueCallback callback)
m
-(int) registerValueCallback: (YGenericSensorValueCallback) callback
pas
LongInt registerValueCallback(callback: TYGenericSensorValueCallback): LongInt
vb
function registerValueCallback(ByVal callback As YGenericSensorValueCallback) As Integer
cs
int registerValueCallback(ValueCallback callback)
java
int registerValueCallback(UpdateCallback callback)
uwp
async Task<int> registerValueCallback(ValueCallback callback)
py
registerValueCallback(callback)
php
function registerValueCallback($callback)
es
async registerValueCallback(callback)

Ce callback n'est appelé que durant l'exécution de ySleep ou yHandleEvents. Cela permet à l'appelant de contrôler quand les callback peuvent se produire. Il est important d'appeler l'une de ces deux fonctions périodiquement pour garantir que les callback ne soient pas appelés trop tard. Pour désactiver un callback, il suffit d'appeler cette méthode en lui passant un pointeur nul.

Paramètres :

callbackla fonction de callback à rappeler, ou un pointeur nul. La fonction de callback doit accepter deux arguments: l'object fonction dont la valeur a changé, et la chaîne de caractère décrivant la nouvelle valeur publiée.

genericsensor→set_advMode()
genericsensor→setAdvMode()
genericsensor.set_advMode()genericsensor→set_advMode()[genericsensor setAdvMode: ]genericsensor.set_advMode()genericsensor.set_advMode()genericsensor.set_advMode()genericsensor.set_advMode()genericsensor.set_advMode()genericsensor.set_advMode()genericsensor→set_advMode()genericsensor.set_advMode()genericsensor.set_advMode()genericsensor.set_advMode()YGenericSensor set_advMode

Modifie le mode de calcul de la valeur publiée jusqu'au hub parent (advertisedValue).

js
function set_advMode(newval)
cpp
int set_advMode(Y_ADVMODE_enum newval)
m
-(int) setAdvMode: (Y_ADVMODE_enum) newval
pas
integer set_advMode(newval: Integer): integer
vb
function set_advMode(ByVal newval As Integer) As Integer
cs
int set_advMode(int newval)
java
int set_advMode(int newval)
uwp
async Task<int> set_advMode(int newval)
py
set_advMode(newval)
php
function set_advMode($newval)
es
async set_advMode(newval)
dnp
int set_advMode(int newval)
cp
int set_advMode(int newval)
cmd
YGenericSensor target set_advMode newval

N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Paramètres :

newvalune valeur parmi Y_ADVMODE_IMMEDIATE, Y_ADVMODE_PERIOD_AVG, Y_ADVMODE_PERIOD_MIN et Y_ADVMODE_PERIOD_MAX représentant le mode de calcul de la valeur publiée jusqu'au hub parent (advertisedValue)

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

genericsensor→set_enabled()
genericsensor→setEnabled()
genericsensor.set_enabled()genericsensor→set_enabled()[genericsensor setEnabled: ]genericsensor.set_enabled()genericsensor.set_enabled()genericsensor.set_enabled()genericsensor.set_enabled()genericsensor.set_enabled()genericsensor.set_enabled()genericsensor→set_enabled()genericsensor.set_enabled()genericsensor.set_enabled()genericsensor.set_enabled()YGenericSensor set_enabled

Modifie l'état d'activation de cette mesure.

js
function set_enabled(newval)
cpp
int set_enabled(Y_ENABLED_enum newval)
m
-(int) setEnabled: (Y_ENABLED_enum) newval
pas
integer set_enabled(newval: Integer): integer
vb
function set_enabled(ByVal newval As Integer) As Integer
cs
int set_enabled(int newval)
java
int set_enabled(int newval)
uwp
async Task<int> set_enabled(int newval)
py
set_enabled(newval)
php
function set_enabled($newval)
es
async set_enabled(newval)
dnp
int set_enabled(int newval)
cp
int set_enabled(int newval)
cmd
YGenericSensor target set_enabled newval

Lorsqu'une mesure est désactivée, sa valeur n'est plus transmise, et pour certains modules, cela permet d'augmenter la fréquence de rafraîchissement des mesures actives. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Paramètres :

newvalsoit Y_ENABLED_FALSE, soit Y_ENABLED_TRUE, selon l'état d'activation de cette mesure

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

genericsensor→set_highestValue()
genericsensor→setHighestValue()
genericsensor.set_highestValue()genericsensor→set_highestValue()[genericsensor setHighestValue: ]genericsensor.set_highestValue()genericsensor.set_highestValue()genericsensor.set_highestValue()genericsensor.set_highestValue()genericsensor.set_highestValue()genericsensor.set_highestValue()genericsensor→set_highestValue()genericsensor.set_highestValue()genericsensor.set_highestValue()genericsensor.set_highestValue()YGenericSensor set_highestValue

Modifie la mémoire de valeur maximale observée.

js
function set_highestValue(newval)
cpp
int set_highestValue(double newval)
m
-(int) setHighestValue: (double) newval
pas
integer set_highestValue(newval: double): integer
vb
function set_highestValue(ByVal newval As Double) As Integer
cs
int set_highestValue(double newval)
java
int set_highestValue(double newval)
uwp
async Task<int> set_highestValue(double newval)
py
set_highestValue(newval)
php
function set_highestValue($newval)
es
async set_highestValue(newval)
dnp
int set_highestValue(double newval)
cp
int set_highestValue(double newval)
cmd
YGenericSensor target set_highestValue newval

Utile pour réinitialiser la valeur renvoyée par get_highestValue().

Paramètres :

newvalune valeur numérique représentant la mémoire de valeur maximale observée

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

genericsensor→set_logFrequency()
genericsensor→setLogFrequency()
genericsensor.set_logFrequency()genericsensor→set_logFrequency()[genericsensor setLogFrequency: ]genericsensor.set_logFrequency()genericsensor.set_logFrequency()genericsensor.set_logFrequency()genericsensor.set_logFrequency()genericsensor.set_logFrequency()genericsensor.set_logFrequency()genericsensor→set_logFrequency()genericsensor.set_logFrequency()genericsensor.set_logFrequency()genericsensor.set_logFrequency()YGenericSensor set_logFrequency

Modifie la fréquence d'enregistrement des mesures dans le datalogger.

js
function set_logFrequency(newval)
cpp
int set_logFrequency(string newval)
m
-(int) setLogFrequency: (NSString*) newval
pas
integer set_logFrequency(newval: string): integer
vb
function set_logFrequency(ByVal newval As String) As Integer
cs
int set_logFrequency(string newval)
java
int set_logFrequency(String newval)
uwp
async Task<int> set_logFrequency(string newval)
py
set_logFrequency(newval)
php
function set_logFrequency($newval)
es
async set_logFrequency(newval)
dnp
int set_logFrequency(string newval)
cp
int set_logFrequency(string newval)
cmd
YGenericSensor target set_logFrequency newval

La fréquence peut être spécifiée en mesures par secondes, en mesures par minutes (par exemple "15/m") ou en mesures par heure (par exemple "4/h"). Pour désactiver l'enregistrement des mesures de cette fonction, utilisez la valeur "OFF". Attention il est inutile, voir contre productif, de régler la fréquence d'enregistrement à une valeur supérieure à la fréquence d'échantillonnage native du capteur: ces deux fréquences sont complètement indépendantes. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Paramètres :

newvalune chaîne de caractères représentant la fréquence d'enregistrement des mesures dans le datalogger

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

genericsensor→set_logicalName()
genericsensor→setLogicalName()
genericsensor.set_logicalName()genericsensor→set_logicalName()[genericsensor setLogicalName: ]genericsensor.set_logicalName()genericsensor.set_logicalName()genericsensor.set_logicalName()genericsensor.set_logicalName()genericsensor.set_logicalName()genericsensor.set_logicalName()genericsensor→set_logicalName()genericsensor.set_logicalName()genericsensor.set_logicalName()genericsensor.set_logicalName()YGenericSensor set_logicalName

Modifie le nom logique du capteur générique.

js
function set_logicalName(newval)
cpp
int set_logicalName(string newval)
m
-(int) setLogicalName: (NSString*) newval
pas
integer set_logicalName(newval: string): integer
vb
function set_logicalName(ByVal newval As String) As Integer
cs
int set_logicalName(string newval)
java
int set_logicalName(String newval)
uwp
async Task<int> set_logicalName(string newval)
py
set_logicalName(newval)
php
function set_logicalName($newval)
es
async set_logicalName(newval)
dnp
int set_logicalName(string newval)
cp
int set_logicalName(string newval)
cmd
YGenericSensor target set_logicalName newval

Vous pouvez utiliser yCheckLogicalName() pour vérifier si votre paramètre est valide. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Paramètres :

newvalune chaîne de caractères représentant le nom logique du capteur générique.

Retourne :

YAPI_SUCCESS si l'appel se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

genericsensor→set_lowestValue()
genericsensor→setLowestValue()
genericsensor.set_lowestValue()genericsensor→set_lowestValue()[genericsensor setLowestValue: ]genericsensor.set_lowestValue()genericsensor.set_lowestValue()genericsensor.set_lowestValue()genericsensor.set_lowestValue()genericsensor.set_lowestValue()genericsensor.set_lowestValue()genericsensor→set_lowestValue()genericsensor.set_lowestValue()genericsensor.set_lowestValue()genericsensor.set_lowestValue()YGenericSensor set_lowestValue

Modifie la mémoire de valeur minimale observée.

js
function set_lowestValue(newval)
cpp
int set_lowestValue(double newval)
m
-(int) setLowestValue: (double) newval
pas
integer set_lowestValue(newval: double): integer
vb
function set_lowestValue(ByVal newval As Double) As Integer
cs
int set_lowestValue(double newval)
java
int set_lowestValue(double newval)
uwp
async Task<int> set_lowestValue(double newval)
py
set_lowestValue(newval)
php
function set_lowestValue($newval)
es
async set_lowestValue(newval)
dnp
int set_lowestValue(double newval)
cp
int set_lowestValue(double newval)
cmd
YGenericSensor target set_lowestValue newval

Utile pour réinitialiser la valeur renvoyée par get_lowestValue().

Paramètres :

newvalune valeur numérique représentant la mémoire de valeur minimale observée

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

genericsensor→set_reportFrequency()
genericsensor→setReportFrequency()
genericsensor.set_reportFrequency()genericsensor→set_reportFrequency()[genericsensor setReportFrequency: ]genericsensor.set_reportFrequency()genericsensor.set_reportFrequency()genericsensor.set_reportFrequency()genericsensor.set_reportFrequency()genericsensor.set_reportFrequency()genericsensor.set_reportFrequency()genericsensor→set_reportFrequency()genericsensor.set_reportFrequency()genericsensor.set_reportFrequency()genericsensor.set_reportFrequency()YGenericSensor set_reportFrequency

Modifie la fréquence de notification périodique des valeurs mesurées.

js
function set_reportFrequency(newval)
cpp
int set_reportFrequency(string newval)
m
-(int) setReportFrequency: (NSString*) newval
pas
integer set_reportFrequency(newval: string): integer
vb
function set_reportFrequency(ByVal newval As String) As Integer
cs
int set_reportFrequency(string newval)
java
int set_reportFrequency(String newval)
uwp
async Task<int> set_reportFrequency(string newval)
py
set_reportFrequency(newval)
php
function set_reportFrequency($newval)
es
async set_reportFrequency(newval)
dnp
int set_reportFrequency(string newval)
cp
int set_reportFrequency(string newval)
cmd
YGenericSensor target set_reportFrequency newval

La fréquence peut être spécifiée en mesures par secondes, en mesures par minutes (par exemple "15/m") ou en mesures par heure (par exemple "4/h"). Pour désactiver les notifications périodiques pour cette fonction, utilisez la valeur "OFF". Attention il est inutile, voir contre productif, de régler la fréquence de notification périodique à une valeur supérieure à la fréquence d'échantillonnage native du capteur: ces deux fréquences sont complètement indépendantes. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Paramètres :

newvalune chaîne de caractères représentant la fréquence de notification périodique des valeurs mesurées

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

genericsensor→set_resolution()
genericsensor→setResolution()
genericsensor.set_resolution()genericsensor→set_resolution()[genericsensor setResolution: ]genericsensor.set_resolution()genericsensor.set_resolution()genericsensor.set_resolution()genericsensor.set_resolution()genericsensor.set_resolution()genericsensor.set_resolution()genericsensor→set_resolution()genericsensor.set_resolution()genericsensor.set_resolution()genericsensor.set_resolution()YGenericSensor set_resolution

Change la résolution des valeurs physique mesurées.

js
function set_resolution(newval)
cpp
int set_resolution(double newval)
m
-(int) setResolution: (double) newval
pas
integer set_resolution(newval: double): integer
vb
function set_resolution(ByVal newval As Double) As Integer
cs
int set_resolution(double newval)
java
int set_resolution(double newval)
uwp
async Task<int> set_resolution(double newval)
py
set_resolution(newval)
php
function set_resolution($newval)
es
async set_resolution(newval)
dnp
int set_resolution(double newval)
cp
int set_resolution(double newval)
cmd
YGenericSensor target set_resolution newval

La résolution correspond à la précision de l'affichage des mesures. Elle ne change pas la précision de la mesure elle-même. Cette fonction est très utile pour publier des valeurs avec une resolution spécifique à travers des callbacks. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Paramètres :

resolutionLa nouvelle résolution sous forme d'un nombre à virgule, par exemple: 1.0, 0.1, 0.01, 0.02, 0.05 etc.

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur. En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.newvalune valeur numérique

@return YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

genericsensor→set_signalBias()
genericsensor→setSignalBias()
genericsensor.set_signalBias()genericsensor→set_signalBias()[genericsensor setSignalBias: ]genericsensor.set_signalBias()genericsensor.set_signalBias()genericsensor.set_signalBias()genericsensor.set_signalBias()genericsensor.set_signalBias()genericsensor.set_signalBias()genericsensor→set_signalBias()genericsensor.set_signalBias()genericsensor.set_signalBias()genericsensor.set_signalBias()YGenericSensor set_signalBias

Modifie le biais du signal électrique pour la correction du point zéro.

js
function set_signalBias(newval)
cpp
int set_signalBias(double newval)
m
-(int) setSignalBias: (double) newval
pas
integer set_signalBias(newval: double): integer
vb
function set_signalBias(ByVal newval As Double) As Integer
cs
int set_signalBias(double newval)
java
int set_signalBias(double newval)
uwp
async Task<int> set_signalBias(double newval)
py
set_signalBias(newval)
php
function set_signalBias($newval)
es
async set_signalBias(newval)
dnp
int set_signalBias(double newval)
cp
int set_signalBias(double newval)
cmd
YGenericSensor target set_signalBias newval

Si votre signal électrique est positif lorsqu'il devrait être nul, configurez un biais positif de la même valeur afin de corriger l'erreur. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Paramètres :

newvalune valeur numérique représentant le biais du signal électrique pour la correction du point zéro

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

genericsensor→set_signalRange()
genericsensor→setSignalRange()
genericsensor.set_signalRange()genericsensor→set_signalRange()[genericsensor setSignalRange: ]genericsensor.set_signalRange()genericsensor.set_signalRange()genericsensor.set_signalRange()genericsensor.set_signalRange()genericsensor.set_signalRange()genericsensor.set_signalRange()genericsensor→set_signalRange()genericsensor.set_signalRange()genericsensor.set_signalRange()genericsensor.set_signalRange()YGenericSensor set_signalRange

Modifie la plage du signal d'entrée utilisé par le capteur.

js
function set_signalRange(newval)
cpp
int set_signalRange(string newval)
m
-(int) setSignalRange: (NSString*) newval
pas
integer set_signalRange(newval: string): integer
vb
function set_signalRange(ByVal newval As String) As Integer
cs
int set_signalRange(string newval)
java
int set_signalRange(String newval)
uwp
async Task<int> set_signalRange(string newval)
py
set_signalRange(newval)
php
function set_signalRange($newval)
es
async set_signalRange(newval)
dnp
int set_signalRange(string newval)
cp
int set_signalRange(string newval)
cmd
YGenericSensor target set_signalRange newval

Lorsque le signal d'entrée sort de la plage prévue, la valeur de sortie est mise à une valeur arbitraire hors plage, dont le signe indique le sens du dépassement.

Pour un capteur 4-20mA, la plage d'entrée par défaut est "4...20". Pour un capteur 0-10V, la plage d'entrée par défaut est "0.1...10". Pour les interfaces de communication numériques, la plage par défaut est "-999999.999...999999.999".

N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Paramètres :

newvalune chaîne de caractères représentant la plage du signal d'entrée utilisé par le capteur

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

genericsensor→set_signalSampling()
genericsensor→setSignalSampling()
genericsensor.set_signalSampling()genericsensor→set_signalSampling()[genericsensor setSignalSampling: ]genericsensor.set_signalSampling()genericsensor.set_signalSampling()genericsensor.set_signalSampling()genericsensor.set_signalSampling()genericsensor.set_signalSampling()genericsensor.set_signalSampling()genericsensor→set_signalSampling()genericsensor.set_signalSampling()genericsensor.set_signalSampling()genericsensor.set_signalSampling()YGenericSensor set_signalSampling

Modifie la méthode d'échantillonnage du signal à utiliser.

js
function set_signalSampling(newval)
cpp
int set_signalSampling(Y_SIGNALSAMPLING_enum newval)
m
-(int) setSignalSampling: (Y_SIGNALSAMPLING_enum) newval
pas
integer set_signalSampling(newval: Integer): integer
vb
function set_signalSampling(ByVal newval As Integer) As Integer
cs
int set_signalSampling(int newval)
java
int set_signalSampling(int newval)
uwp
async Task<int> set_signalSampling(int newval)
py
set_signalSampling(newval)
php
function set_signalSampling($newval)
es
async set_signalSampling(newval)
dnp
int set_signalSampling(int newval)
cp
int set_signalSampling(int newval)
cmd
YGenericSensor target set_signalSampling newval

La méthode HIGH_RATE effectue les mesures le plus rapidement possible, sans aucun filtrage. La méthode HIGH_RATE_FILTERED rajoute un filtre médian sur une fenêtre de 7 échantillons. La méthode LOW_NOISE utilise une fréquence d'aquisition réduite pour réduire le bruit. La méthode LOW_NOISE_FILTERED combine la fréquence réduite avec un filtre médian, pour obtenir des mesures aussi stables que possible même sur un signal bruité. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Paramètres :

newvalune valeur parmi Y_SIGNALSAMPLING_HIGH_RATE, Y_SIGNALSAMPLING_HIGH_RATE_FILTERED, Y_SIGNALSAMPLING_LOW_NOISE, Y_SIGNALSAMPLING_LOW_NOISE_FILTERED et Y_SIGNALSAMPLING_HIGHEST_RATE représentant la méthode d'échantillonnage du signal à utiliser

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

genericsensor→set_unit()
genericsensor→setUnit()
genericsensor.set_unit()genericsensor→set_unit()[genericsensor setUnit: ]genericsensor.set_unit()genericsensor.set_unit()genericsensor.set_unit()genericsensor.set_unit()genericsensor.set_unit()genericsensor.set_unit()genericsensor→set_unit()genericsensor.set_unit()genericsensor.set_unit()genericsensor.set_unit()YGenericSensor set_unit

Modifie l'unité dans laquelle la valeur mesurée est exprimée.

js
function set_unit(newval)
cpp
int set_unit(string newval)
m
-(int) setUnit: (NSString*) newval
pas
integer set_unit(newval: string): integer
vb
function set_unit(ByVal newval As String) As Integer
cs
int set_unit(string newval)
java
int set_unit(String newval)
uwp
async Task<int> set_unit(string newval)
py
set_unit(newval)
php
function set_unit($newval)
es
async set_unit(newval)
dnp
int set_unit(string newval)
cp
int set_unit(string newval)
cmd
YGenericSensor target set_unit newval

N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Paramètres :

newvalune chaîne de caractères représentant l'unité dans laquelle la valeur mesurée est exprimée

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

genericsensor→set_userData()
genericsensor→setUserData()
genericsensor.set_userData()genericsensor→set_userData()[genericsensor setUserData: ]genericsensor.set_userData()genericsensor.set_userData()genericsensor.set_userData()genericsensor.set_userData()genericsensor.set_userData()genericsensor→set_userData()genericsensor.set_userData()

Enregistre un contexte libre dans l'attribut userData de la fonction, afin de le retrouver plus tard à l'aide de la méthode get_userData.

js
function set_userData(data)
cpp
void set_userData(void * data)
m
-(void) setUserData: (id) data
pas
set_userData(data: Tobject)
vb
procedure set_userData(ByVal data As Object)
cs
void set_userData(object data)
java
void set_userData(Object data)
py
set_userData(data)
php
function set_userData($data)
es
async set_userData(data)

Cet attribut n'es pas utilisé directement par l'API. Il est à la disposition de l'appelant pour stocker un contexte.

Paramètres :

dataobjet quelconque à mémoriser

genericsensor→set_valueRange()
genericsensor→setValueRange()
genericsensor.set_valueRange()genericsensor→set_valueRange()[genericsensor setValueRange: ]genericsensor.set_valueRange()genericsensor.set_valueRange()genericsensor.set_valueRange()genericsensor.set_valueRange()genericsensor.set_valueRange()genericsensor.set_valueRange()genericsensor→set_valueRange()genericsensor.set_valueRange()genericsensor.set_valueRange()genericsensor.set_valueRange()YGenericSensor set_valueRange

Modifie la plage de valeur de sortie, correspondant à la grandeur physique mesurée par le capteur.

js
function set_valueRange(newval)
cpp
int set_valueRange(string newval)
m
-(int) setValueRange: (NSString*) newval
pas
integer set_valueRange(newval: string): integer
vb
function set_valueRange(ByVal newval As String) As Integer
cs
int set_valueRange(string newval)
java
int set_valueRange(String newval)
uwp
async Task<int> set_valueRange(string newval)
py
set_valueRange(newval)
php
function set_valueRange($newval)
es
async set_valueRange(newval)
dnp
int set_valueRange(string newval)
cp
int set_valueRange(string newval)
cmd
YGenericSensor target set_valueRange newval

La valeur par défaut de la plage de valeur de sortie est la même que la plage de la valeur du signal d'entrée (correspondance 1:1), mais vous pouvez la modifier pour que la fonction calcule directement la grandeur physique encodée par le signal. Notez que le changement de plage peut avoir pour effet de bord un changement automatique de la résolution affichée.

N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Paramètres :

newvalune chaîne de caractères représentant la plage de valeur de sortie, correspondant à la grandeur physique mesurée par le capteur

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

genericsensor→startDataLogger()genericsensor.startDataLogger()genericsensor→startDataLogger()[genericsensor startDataLogger]genericsensor.startDataLogger()genericsensor.startDataLogger()genericsensor.startDataLogger()genericsensor.startDataLogger()genericsensor.startDataLogger()genericsensor.startDataLogger()genericsensor→startDataLogger()genericsensor.startDataLogger()genericsensor.startDataLogger()genericsensor.startDataLogger()YGenericSensor startDataLogger

Démarre l'enregistreur de données du module.

js
function startDataLogger()
cpp
int startDataLogger()
m
-(int) startDataLogger
pas
LongInt startDataLogger(): LongInt
vb
function startDataLogger() As Integer
cs
int startDataLogger()
java
int startDataLogger()
uwp
async Task<int> startDataLogger()
py
startDataLogger()
php
function startDataLogger()
es
async startDataLogger()
dnp
int startDataLogger()
cp
int startDataLogger()
cmd
YGenericSensor target startDataLogger

Attention, l'enregistreur ne sauvera les mesures de ce capteur que si la fréquence d'enregistrement (logFrequency) n'est pas sur "OFF".

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

genericsensor→stopDataLogger()genericsensor.stopDataLogger()genericsensor→stopDataLogger()[genericsensor stopDataLogger]genericsensor.stopDataLogger()genericsensor.stopDataLogger()genericsensor.stopDataLogger()genericsensor.stopDataLogger()genericsensor.stopDataLogger()genericsensor.stopDataLogger()genericsensor→stopDataLogger()genericsensor.stopDataLogger()genericsensor.stopDataLogger()genericsensor.stopDataLogger()YGenericSensor stopDataLogger

Arrête l'enregistreur de données du module.

js
function stopDataLogger()
cpp
int stopDataLogger()
m
-(int) stopDataLogger
pas
LongInt stopDataLogger(): LongInt
vb
function stopDataLogger() As Integer
cs
int stopDataLogger()
java
int stopDataLogger()
uwp
async Task<int> stopDataLogger()
py
stopDataLogger()
php
function stopDataLogger()
es
async stopDataLogger()
dnp
int stopDataLogger()
cp
int stopDataLogger()
cmd
YGenericSensor target stopDataLogger

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

genericsensor→unmuteValueCallbacks()genericsensor.unmuteValueCallbacks()genericsensor→unmuteValueCallbacks()[genericsensor unmuteValueCallbacks]genericsensor.unmuteValueCallbacks()genericsensor.unmuteValueCallbacks()genericsensor.unmuteValueCallbacks()genericsensor.unmuteValueCallbacks()genericsensor.unmuteValueCallbacks()genericsensor.unmuteValueCallbacks()genericsensor→unmuteValueCallbacks()genericsensor.unmuteValueCallbacks()genericsensor.unmuteValueCallbacks()genericsensor.unmuteValueCallbacks()YGenericSensor unmuteValueCallbacks

Réactive l'envoi de chaque changement de la valeur publiée au hub parent.

js
function unmuteValueCallbacks()
cpp
int unmuteValueCallbacks()
m
-(int) unmuteValueCallbacks
pas
LongInt unmuteValueCallbacks(): LongInt
vb
function unmuteValueCallbacks() As Integer
cs
int unmuteValueCallbacks()
java
int unmuteValueCallbacks()
uwp
async Task<int> unmuteValueCallbacks()
py
unmuteValueCallbacks()
php
function unmuteValueCallbacks()
es
async unmuteValueCallbacks()
dnp
int unmuteValueCallbacks()
cp
int unmuteValueCallbacks()
cmd
YGenericSensor target unmuteValueCallbacks

Cette fonction annule un précédent appel à muteValueCallbacks(). N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

genericsensor→wait_async()genericsensor.wait_async()genericsensor.wait_async()

Attend que toutes les commandes asynchrones en cours d'exécution sur le module soient terminées, et appelle le callback passé en paramètre.

js
function wait_async(callback, context)
es
wait_async(callback, context)

La fonction callback peut donc librement utiliser des fonctions synchrones ou asynchrones, sans risquer de bloquer la machine virtuelle Javascript.

Paramètres :

callbackfonction de callback qui sera appelée dès que toutes les commandes en cours d'exécution sur le module seront terminées La fonction callback reçoit deux arguments: le contexte fourni par l'appelant et l'objet fonction concerné.
contextcontexte fourni par l'appelant, et qui sera passé tel-quel à la fonction de callback

Retourne :

rien du tout.

genericsensor→zeroAdjust()genericsensor.zeroAdjust()genericsensor→zeroAdjust()[genericsensor zeroAdjust]genericsensor.zeroAdjust()genericsensor.zeroAdjust()genericsensor.zeroAdjust()genericsensor.zeroAdjust()genericsensor.zeroAdjust()genericsensor.zeroAdjust()genericsensor→zeroAdjust()genericsensor.zeroAdjust()genericsensor.zeroAdjust()genericsensor.zeroAdjust()YGenericSensor zeroAdjust

Ajuste le biais du signal de sorte à ce que la valeur actuelle du signal soit interprétée comme zéro (tare).

js
function zeroAdjust()
cpp
int zeroAdjust()
m
-(int) zeroAdjust
pas
LongInt zeroAdjust(): LongInt
vb
function zeroAdjust() As Integer
cs
int zeroAdjust()
java
int zeroAdjust()
uwp
async Task<int> zeroAdjust()
py
zeroAdjust()
php
function zeroAdjust()
es
async zeroAdjust()
dnp
int zeroAdjust()
cp
int zeroAdjust()
cmd
YGenericSensor target zeroAdjust

N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur. En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

24.6. La classe YDataLogger

Interface de contrôle de l'enregistreur de données, présent sur la plupart des capteurs Yoctopuce.

La plupart des capteurs Yoctopuce sont équipés d'une mémoire non-volatile. Elle permet de mémoriser les données mesurées d'une manière autonome, sans nécessiter le suivi permanent d'un ordinateur. La classe YDataLogger contrôle les paramètres globaux de cet enregistreur de données. Le contrôle de l'enregistrement (start / stop) et la récupération des données se fait au niveau des objets qui gèrent les senseurs.

Pour utiliser les fonctions décrites ici, vous devez inclure:

js
<script type='text/javascript' src='yocto_module.js'></script>
cpp
#include "yocto_module.h"
m
#import "yocto_module.h"
pas
uses yocto_module;
vb
yocto_module.vb
cs
yocto_module.cs
java
import com.yoctopuce.YoctoAPI.YDataLogger;
uwp
import com.yoctopuce.YoctoAPI.YDataLogger;
py
from yocto_module import *
php
require_once('yocto_module.php');
es
in HTML: <script src="../../lib/yocto_module.js"></script>
in node.js: require('yoctolib-es2017/yocto_module.js');
dnp
import YoctoProxyAPI.YDataLoggerProxy
cp
#include "yocto_module_proxy.h"
vi
YDataLogger.vi
ml
import YoctoProxyAPI.YDataLoggerProxy
Fonction globales
YDataLogger.FindDataLogger(func)

Permet de retrouver un enregistreur de données d'après un identifiant donné.

YDataLogger.FindDataLoggerInContext(yctx, func)

Permet de retrouver un enregistreur de données d'après un identifiant donné dans un Context YAPI.

YDataLogger.FirstDataLogger()

Commence l'énumération des enregistreurs de données accessibles par la librairie.

YDataLogger.FirstDataLoggerInContext(yctx)

Commence l'énumération des enregistreurs de données accessibles par la librairie.

YDataLogger.GetSimilarFunctions()

Enumère toutes les fonctions de type DataLogger disponibles sur les modules actuellement joignables par la librairie, et retourne leurs identifiants matériels uniques (hardwareId).

Propriétés des objets YDataLoggerProxy
datalogger→AdvertisedValue [lecture seule]

Courte chaîne de caractères représentant l'état courant de la fonction.

datalogger→AutoStart [modifiable]

Mode d'activation automatique de l'enregistreur de données à la mise sous tension.

datalogger→BeaconDriven [modifiable]

Vrai si l'enregistreur de données est synchronisé avec la balise de localisation.

datalogger→FriendlyName [lecture seule]

Identifiant global de la fonction au format NOM_MODULE.NOM_FONCTION.

datalogger→FunctionId [lecture seule]

Identifiant matériel de l'enregistreur de données, sans référence au module.

datalogger→HardwareId [lecture seule]

Identifiant matériel unique de la fonction au format SERIAL.FUNCTIONID.

datalogger→IsOnline [lecture seule]

Vérifie si le module hébergeant la fonction est joignable, sans déclencher d'erreur.

datalogger→LogicalName [modifiable]

Nom logique de la fonction.

datalogger→Recording [modifiable]

état d'activation de l'enregistreur de données.

datalogger→SerialNumber [lecture seule]

Numéro de série du module, préprogrammé en usine.

Méthodes des objets YDataLogger
datalogger→clearCache()

Invalide le cache.

datalogger→describe()

Retourne un court texte décrivant de manière non-ambigüe l'instance de l'enregistreur de données au format TYPE(NAME)=SERIAL.FUNCTIONID.

datalogger→forgetAllDataStreams()

Efface tout l'historique des mesures de l'enregistreur de données.

datalogger→get_advertisedValue()

Retourne la valeur courante de l'enregistreur de données (pas plus de 6 caractères).

datalogger→get_autoStart()

Retourne le mode d'activation automatique de l'enregistreur de données à la mise sous tension.

datalogger→get_beaconDriven()

Retourne vrai si l'enregistreur de données est synchronisé avec la balise de localisation.

datalogger→get_currentRunIndex()

Retourne le numéro du Run actuel, correspondant au nombre de fois que le module a été mis sous tension avec la fonction d'enregistreur de données active.

datalogger→get_dataSets()

Retourne une liste d'objets YDataSet permettant de récupérer toutes les mesures stockées par l'enregistreur de données.

datalogger→get_dataStreams(v)

Construit une liste de toutes les séquences de mesures mémorisées par l'enregistreur (ancienne méthode).

datalogger→get_errorMessage()

Retourne le message correspondant à la dernière erreur survenue lors de l'utilisation de l'enregistreur de données.

datalogger→get_errorType()

Retourne le code d'erreur correspondant à la dernière erreur survenue lors de l'utilisation de l'enregistreur de données.

datalogger→get_friendlyName()

Retourne un identifiant global de l'enregistreur de données au format NOM_MODULE.NOM_FONCTION.

datalogger→get_functionDescriptor()

Retourne un identifiant unique de type YFUN_DESCR correspondant à la fonction.

datalogger→get_functionId()

Retourne l'identifiant matériel de l'enregistreur de données, sans référence au module.

datalogger→get_hardwareId()

Retourne l'identifiant matériel unique de l'enregistreur de données au format SERIAL.FUNCTIONID.

datalogger→get_logicalName()

Retourne le nom logique de l'enregistreur de données.

datalogger→get_module()

Retourne l'objet YModule correspondant au module Yoctopuce qui héberge la fonction.

datalogger→get_module_async(callback, context)

Retourne l'objet YModule correspondant au module Yoctopuce qui héberge la fonction.

datalogger→get_recording()

Retourne l'état d'activation de l'enregistreur de données.

datalogger→get_serialNumber()

Retourne le numéro de série du module, préprogrammé en usine.

datalogger→get_timeUTC()

Retourne le timestamp Unix de l'heure UTC actuelle, lorsqu'elle est connue.

datalogger→get_usage()

Retourne le pourcentage d'utilisation de la mémoire d'enregistrement.

datalogger→get_userData()

Retourne le contenu de l'attribut userData, précédemment stocké à l'aide de la méthode set_userData.

datalogger→isOnline()

Vérifie si le module hébergeant l'enregistreur de données est joignable, sans déclencher d'erreur.

datalogger→isOnline_async(callback, context)

Vérifie si le module hébergeant l'enregistreur de données est joignable, sans déclencher d'erreur.

datalogger→isReadOnly()

Test si la fonction est en lecture seule.

datalogger→load(msValidity)

Met en cache les valeurs courantes de l'enregistreur de données, avec une durée de validité spécifiée.

datalogger→loadAttribute(attrName)

Retourne la valeur actuelle d'un attribut spécifique de la fonction, sous forme de texte, le plus rapidement possible mais sans passer par le cache.

datalogger→load_async(msValidity, callback, context)

Met en cache les valeurs courantes de l'enregistreur de données, avec une durée de validité spécifiée.

datalogger→muteValueCallbacks()

Désactive l'envoi de chaque changement de la valeur publiée au hub parent.

datalogger→nextDataLogger()

Continue l'énumération des enregistreurs de données commencée à l'aide de yFirstDataLogger() Attention, vous ne pouvez faire aucune supposition sur l'ordre dans lequel les enregistreurs de données sont retournés.

datalogger→registerValueCallback(callback)

Enregistre la fonction de callback qui est appelée à chaque changement de la valeur publiée.

datalogger→set_autoStart(newval)

Modifie le mode d'activation automatique de l'enregistreur de données à la mise sous tension.

datalogger→set_beaconDriven(newval)

Modifie le mode de synchronisation de l'enregistreur de données .

datalogger→set_logicalName(newval)

Modifie le nom logique de l'enregistreur de données.

datalogger→set_recording(newval)

Modifie l'état d'activation de l'enregistreur de données.

datalogger→set_timeUTC(newval)

Modifie la référence de temps UTC, afin de l'attacher aux données enregistrées.

datalogger→set_userData(data)

Enregistre un contexte libre dans l'attribut userData de la fonction, afin de le retrouver plus tard à l'aide de la méthode get_userData.

datalogger→unmuteValueCallbacks()

Réactive l'envoi de chaque changement de la valeur publiée au hub parent.

datalogger→wait_async(callback, context)

Attend que toutes les commandes asynchrones en cours d'exécution sur le module soient terminées, et appelle le callback passé en paramètre.

YDataLogger.FindDataLogger()
YDataLogger.FindDataLogger()
yFindDataLogger()yFindDataLogger()[YDataLogger FindDataLogger: ]yFindDataLogger()yFindDataLogger()YDataLogger.FindDataLogger()YDataLogger.FindDataLogger()YDataLogger.FindDataLogger()YDataLogger.FindDataLogger()yFindDataLogger()YDataLogger.FindDataLogger()YDataLogger.FindDataLogger()YDataLogger.FindDataLogger()

Permet de retrouver un enregistreur de données d'après un identifiant donné.

js
function yFindDataLogger(func)
cpp
YDataLogger* yFindDataLogger(string func)
m
+(YDataLogger*) FindDataLogger: (NSString*) func
pas
TYDataLogger yFindDataLogger(func: string): TYDataLogger
vb
function yFindDataLogger(ByVal func As String) As YDataLogger
cs
static YDataLogger FindDataLogger(string func)
java
static YDataLogger FindDataLogger(String func)
uwp
static YDataLogger FindDataLogger(string func)
py
FindDataLogger(func)
php
function yFindDataLogger($func)
es
static FindDataLogger(func)
dnp
static YDataLoggerProxy FindDataLogger(string func)
cp
static YDataLoggerProxy * FindDataLogger(string func)

L'identifiant peut être spécifié sous plusieurs formes:

Cette fonction n'exige pas que l'enregistreur de données soit en ligne au moment ou elle est appelée, l'objet retourné sera néanmoins valide. Utiliser la méthode YDataLogger.isOnline() pour tester si l'enregistreur de données est utilisable à un moment donné. En cas d'ambiguïté lorsqu'on fait une recherche par nom logique, aucune erreur ne sera notifiée: la première instance trouvée sera renvoyée. La recherche se fait d'abord par nom matériel, puis par nom logique.

Si un appel à la méthode is_online() de cet objet renvoie FAUX alors que vous êtes sûr que le module correspondant est bien branché, vérifiez que vous n'avez pas oublié d'appeler registerHub() à l'initialisation de de l'application.

Paramètres :

funcune chaîne de caractères qui référence l'enregistreur de données sans ambiguïté, par exemple LIGHTMK3.dataLogger.

Retourne :

un objet de classe YDataLogger qui permet ensuite de contrôler l'enregistreur de données.

YDataLogger.FindDataLoggerInContext()
YDataLogger.FindDataLoggerInContext()
YDataLogger.FindDataLoggerInContext()YDataLogger.FindDataLoggerInContext()YDataLogger.FindDataLoggerInContext()

Permet de retrouver un enregistreur de données d'après un identifiant donné dans un Context YAPI.

java
static YDataLogger FindDataLoggerInContext(YAPIContext yctx,
  String func)
uwp
static YDataLogger FindDataLoggerInContext(YAPIContext yctx,
  string func)
es
static FindDataLoggerInContext(yctx, func)

L'identifiant peut être spécifié sous plusieurs formes:

Cette fonction n'exige pas que l'enregistreur de données soit en ligne au moment ou elle est appelée, l'objet retourné sera néanmoins valide. Utiliser la méthode YDataLogger.isOnline() pour tester si l'enregistreur de données est utilisable à un moment donné. En cas d'ambiguïté lorsqu'on fait une recherche par nom logique, aucune erreur ne sera notifiée: la première instance trouvée sera renvoyée. La recherche se fait d'abord par nom matériel, puis par nom logique.

Paramètres :

yctxun contexte YAPI
funcune chaîne de caractères qui référence l'enregistreur de données sans ambiguïté, par exemple LIGHTMK3.dataLogger.

Retourne :

un objet de classe YDataLogger qui permet ensuite de contrôler l'enregistreur de données.

YDataLogger.FirstDataLogger()
YDataLogger.FirstDataLogger()
yFirstDataLogger()yFirstDataLogger()[YDataLogger FirstDataLogger]yFirstDataLogger()yFirstDataLogger()YDataLogger.FirstDataLogger()YDataLogger.FirstDataLogger()YDataLogger.FirstDataLogger()YDataLogger.FirstDataLogger()yFirstDataLogger()YDataLogger.FirstDataLogger()

Commence l'énumération des enregistreurs de données accessibles par la librairie.

js
function yFirstDataLogger()
cpp
YDataLogger * yFirstDataLogger()
m
+(YDataLogger*) FirstDataLogger
pas
TYDataLogger yFirstDataLogger(): TYDataLogger
vb
function yFirstDataLogger() As YDataLogger
cs
static YDataLogger FirstDataLogger()
java
static YDataLogger FirstDataLogger()
uwp
static YDataLogger FirstDataLogger()
py
FirstDataLogger()
php
function yFirstDataLogger()
es
static FirstDataLogger()

Utiliser la fonction YDataLogger.nextDataLogger() pour itérer sur les autres enregistreurs de données.

Retourne :

un pointeur sur un objet YDataLogger, correspondant au premier enregistreur de données accessible en ligne, ou null si il n'y a pas de enregistreurs de données disponibles.

YDataLogger.FirstDataLoggerInContext()
YDataLogger.FirstDataLoggerInContext()
YDataLogger.FirstDataLoggerInContext()YDataLogger.FirstDataLoggerInContext()YDataLogger.FirstDataLoggerInContext()

Commence l'énumération des enregistreurs de données accessibles par la librairie.

java
static YDataLogger FirstDataLoggerInContext(YAPIContext yctx)
uwp
static YDataLogger FirstDataLoggerInContext(YAPIContext yctx)
es
static FirstDataLoggerInContext(yctx)

Utiliser la fonction YDataLogger.nextDataLogger() pour itérer sur les autres enregistreurs de données.

Paramètres :

yctxun contexte YAPI.

Retourne :

un pointeur sur un objet YDataLogger, correspondant au premier enregistreur de données accessible en ligne, ou null si il n'y a pas de enregistreurs de données disponibles.

YDataLogger.GetSimilarFunctions()
YDataLogger.GetSimilarFunctions()
YDataLogger.GetSimilarFunctions()YDataLogger.GetSimilarFunctions()

Enumère toutes les fonctions de type DataLogger disponibles sur les modules actuellement joignables par la librairie, et retourne leurs identifiants matériels uniques (hardwareId).

dnp
static new string[] GetSimilarFunctions()
cp
static vector<string> GetSimilarFunctions()

Chaque chaîne retournée peut être passée en argument à la méthode YDataLogger.FindDataLogger pour obtenir une objet permettant d'intéragir avec le module correspondant.

Retourne :

un tableau de chaînes de caractères, contenant les identifiants matériels de chaque fonction disponible trouvée.

datalogger→AdvertisedValuedatalogger.AdvertisedValue

Courte chaîne de caractères représentant l'état courant de la fonction.

dnp
string AdvertisedValue

datalogger→AutoStartdatalogger.AutoStart

Mode d'activation automatique de l'enregistreur de données à la mise sous tension.

dnp
int AutoStart

Valeurs possibles:

Y_AUTOSTART_INVALID = 0
Y_AUTOSTART_OFF = 1
Y_AUTOSTART_ON = 2

Modifiable. N'oubliez pas d'appeler la méthode saveToFlash() pour sauver la modification de configuration. Attention si le module n'a pas de source de temps à sa disposition au démarrage, il va attendre environ 8 sec avant de démarrer automatiquement l'enregistrement avec un horodatage arbitraire.

datalogger→BeaconDrivendatalogger.BeaconDriven

Vrai si l'enregistreur de données est synchronisé avec la balise de localisation.

dnp
int BeaconDriven

Valeurs possibles:

Y_BEACONDRIVEN_INVALID = 0
Y_BEACONDRIVEN_OFF = 1
Y_BEACONDRIVEN_ON = 2

Modifiable. Modifie le mode de synchronisation de l'enregistreur de données . N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

datalogger→FriendlyNamedatalogger.FriendlyName

Identifiant global de la fonction au format NOM_MODULE.NOM_FONCTION.

dnp
string FriendlyName

Le chaîne retournée utilise soit les noms logiques du module et de la fonction si ils sont définis, soit respectivement le numéro de série du module et l'identifant matériel de la fonction (par exemple: MyCustomName.relay1)

datalogger→FunctionIddatalogger.FunctionId

Identifiant matériel de l'enregistreur de données, sans référence au module.

dnp
string FunctionId

Par example relay1.

datalogger→HardwareIddatalogger.HardwareId

Identifiant matériel unique de la fonction au format SERIAL.FUNCTIONID.

dnp
string HardwareId

L'identifiant unique est composé du numéro de série du module et de l'identifiant matériel de la fonction (par example RELAYLO1-123456.relay1).

datalogger→IsOnlinedatalogger.IsOnline

Vérifie si le module hébergeant la fonction est joignable, sans déclencher d'erreur.

dnp
bool IsOnline

Si les valeurs des attributs en cache de la fonction sont valides au moment de l'appel, le module est considéré joignable. Cette fonction ne cause en aucun cas d'exception, quelle que soit l'erreur qui pourrait se produire lors de la vérification de joignabilité.

datalogger→LogicalNamedatalogger.LogicalName

Nom logique de la fonction.

dnp
string LogicalName

Modifiable. Vous pouvez utiliser yCheckLogicalName() pour vérifier si votre paramètre est valide. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

datalogger→Recordingdatalogger.Recording

état d'activation de l'enregistreur de données.

dnp
int Recording

Valeurs possibles:

Y_RECORDING_INVALID = 0
Y_RECORDING_OFF = 1
Y_RECORDING_ON = 2
Y_RECORDING_PENDING = 3

Modifiable.

datalogger→SerialNumberdatalogger.SerialNumber

Numéro de série du module, préprogrammé en usine.

dnp
string SerialNumber

datalogger→clearCache()datalogger.clearCache()datalogger→clearCache()[datalogger clearCache]datalogger.clearCache()datalogger.clearCache()datalogger.clearCache()datalogger.clearCache()datalogger.clearCache()datalogger→clearCache()datalogger.clearCache()

Invalide le cache.

js
function clearCache()
cpp
void clearCache()
m
-(void) clearCache
pas
clearCache()
vb
procedure clearCache()
cs
void clearCache()
java
void clearCache()
py
clearCache()
php
function clearCache()
es
async clearCache()

Invalide le cache des valeurs courantes de l'enregistreur de données. Force le prochain appel à une méthode get_xxx() ou loadxxx() pour charger les les données depuis le module.

datalogger→describe()datalogger.describe()datalogger→describe()[datalogger describe]datalogger.describe()datalogger.describe()datalogger.describe()datalogger.describe()datalogger.describe()datalogger→describe()datalogger.describe()

Retourne un court texte décrivant de manière non-ambigüe l'instance de l'enregistreur de données au format TYPE(NAME)=SERIAL.FUNCTIONID.

js
function describe()
cpp
string describe()
m
-(NSString*) describe
pas
string describe(): string
vb
function describe() As String
cs
string describe()
java
String describe()
py
describe()
php
function describe()
es
async describe()

Plus précisément, TYPE correspond au type de fonction, NAME correspond au nom utilsé lors du premier accès a la fonction, SERIAL correspond au numéro de série du module si le module est connecté, ou "unresolved" sinon, et FUNCTIONID correspond à l'identifiant matériel de la fonction si le module est connecté. Par exemple, La methode va retourner Relay(MyCustomName.relay1)=RELAYLO1-123456.relay1 si le module est déjà connecté ou Relay(BadCustomeName.relay1)=unresolved si le module n'est pas déjà connecté. Cette methode ne declenche aucune transaction USB ou TCP et peut donc être utilisé dans un debuggeur.

Retourne :

une chaîne de caractères décrivant l'enregistreur de données (ex: Relay(MyCustomName.relay1)=RELAYLO1-123456.relay1)

datalogger→forgetAllDataStreams()datalogger.forgetAllDataStreams()datalogger→forgetAllDataStreams()[datalogger forgetAllDataStreams]datalogger.forgetAllDataStreams()datalogger.forgetAllDataStreams()datalogger.forgetAllDataStreams()datalogger.forgetAllDataStreams()datalogger.forgetAllDataStreams()datalogger.forgetAllDataStreams()datalogger→forgetAllDataStreams()datalogger.forgetAllDataStreams()datalogger.forgetAllDataStreams()datalogger.forgetAllDataStreams()YDataLogger forgetAllDataStreams

Efface tout l'historique des mesures de l'enregistreur de données.

js
function forgetAllDataStreams()
cpp
int forgetAllDataStreams()
m
-(int) forgetAllDataStreams
pas
LongInt forgetAllDataStreams(): LongInt
vb
function forgetAllDataStreams() As Integer
cs
int forgetAllDataStreams()
java
int forgetAllDataStreams()
uwp
async Task<int> forgetAllDataStreams()
py
forgetAllDataStreams()
php
function forgetAllDataStreams()
es
async forgetAllDataStreams()
dnp
int forgetAllDataStreams()
cp
int forgetAllDataStreams()
cmd
YDataLogger target forgetAllDataStreams

Cette méthode remet aussi à zéro le compteur de Runs.

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

datalogger→get_advertisedValue()
datalogger→advertisedValue()
datalogger.get_advertisedValue()datalogger→get_advertisedValue()[datalogger advertisedValue]datalogger.get_advertisedValue()datalogger.get_advertisedValue()datalogger.get_advertisedValue()datalogger.get_advertisedValue()datalogger.get_advertisedValue()datalogger.get_advertisedValue()datalogger→get_advertisedValue()datalogger.get_advertisedValue()datalogger.get_advertisedValue()datalogger.get_advertisedValue()YDataLogger get_advertisedValue

Retourne la valeur courante de l'enregistreur de données (pas plus de 6 caractères).

js
function get_advertisedValue()
cpp
string get_advertisedValue()
m
-(NSString*) advertisedValue
pas
string get_advertisedValue(): string
vb
function get_advertisedValue() As String
cs
string get_advertisedValue()
java
String get_advertisedValue()
uwp
async Task<string> get_advertisedValue()
py
get_advertisedValue()
php
function get_advertisedValue()
es
async get_advertisedValue()
dnp
string get_advertisedValue()
cp
string get_advertisedValue()
cmd
YDataLogger target get_advertisedValue

Retourne :

une chaîne de caractères représentant la valeur courante de l'enregistreur de données (pas plus de 6 caractères).

En cas d'erreur, déclenche une exception ou retourne Y_ADVERTISEDVALUE_INVALID.

datalogger→get_autoStart()
datalogger→autoStart()
datalogger.get_autoStart()datalogger→get_autoStart()[datalogger autoStart]datalogger.get_autoStart()datalogger.get_autoStart()datalogger.get_autoStart()datalogger.get_autoStart()datalogger.get_autoStart()datalogger.get_autoStart()datalogger→get_autoStart()datalogger.get_autoStart()datalogger.get_autoStart()datalogger.get_autoStart()YDataLogger get_autoStart

Retourne le mode d'activation automatique de l'enregistreur de données à la mise sous tension.

js
function get_autoStart()
cpp
Y_AUTOSTART_enum get_autoStart()
m
-(Y_AUTOSTART_enum) autoStart
pas
Integer get_autoStart(): Integer
vb
function get_autoStart() As Integer
cs
int get_autoStart()
java
int get_autoStart()
uwp
async Task<int> get_autoStart()
py
get_autoStart()
php
function get_autoStart()
es
async get_autoStart()
dnp
int get_autoStart()
cp
int get_autoStart()
cmd
YDataLogger target get_autoStart

Retourne :

soit Y_AUTOSTART_OFF, soit Y_AUTOSTART_ON, selon le mode d'activation automatique de l'enregistreur de données à la mise sous tension

En cas d'erreur, déclenche une exception ou retourne Y_AUTOSTART_INVALID.

datalogger→get_beaconDriven()
datalogger→beaconDriven()
datalogger.get_beaconDriven()datalogger→get_beaconDriven()[datalogger beaconDriven]datalogger.get_beaconDriven()datalogger.get_beaconDriven()datalogger.get_beaconDriven()datalogger.get_beaconDriven()datalogger.get_beaconDriven()datalogger.get_beaconDriven()datalogger→get_beaconDriven()datalogger.get_beaconDriven()datalogger.get_beaconDriven()datalogger.get_beaconDriven()YDataLogger get_beaconDriven

Retourne vrai si l'enregistreur de données est synchronisé avec la balise de localisation.

js
function get_beaconDriven()
cpp
Y_BEACONDRIVEN_enum get_beaconDriven()
m
-(Y_BEACONDRIVEN_enum) beaconDriven
pas
Integer get_beaconDriven(): Integer
vb
function get_beaconDriven() As Integer
cs
int get_beaconDriven()
java
int get_beaconDriven()
uwp
async Task<int> get_beaconDriven()
py
get_beaconDriven()
php
function get_beaconDriven()
es
async get_beaconDriven()
dnp
int get_beaconDriven()
cp
int get_beaconDriven()
cmd
YDataLogger target get_beaconDriven

Retourne :

soit Y_BEACONDRIVEN_OFF, soit Y_BEACONDRIVEN_ON, selon vrai si l'enregistreur de données est synchronisé avec la balise de localisation

En cas d'erreur, déclenche une exception ou retourne Y_BEACONDRIVEN_INVALID.

datalogger→get_currentRunIndex()
datalogger→currentRunIndex()
datalogger.get_currentRunIndex()datalogger→get_currentRunIndex()[datalogger currentRunIndex]datalogger.get_currentRunIndex()datalogger.get_currentRunIndex()datalogger.get_currentRunIndex()datalogger.get_currentRunIndex()datalogger.get_currentRunIndex()datalogger.get_currentRunIndex()datalogger→get_currentRunIndex()datalogger.get_currentRunIndex()datalogger.get_currentRunIndex()datalogger.get_currentRunIndex()YDataLogger get_currentRunIndex

Retourne le numéro du Run actuel, correspondant au nombre de fois que le module a été mis sous tension avec la fonction d'enregistreur de données active.

js
function get_currentRunIndex()
cpp
int get_currentRunIndex()
m
-(int) currentRunIndex
pas
LongInt get_currentRunIndex(): LongInt
vb
function get_currentRunIndex() As Integer
cs
int get_currentRunIndex()
java
int get_currentRunIndex()
uwp
async Task<int> get_currentRunIndex()
py
get_currentRunIndex()
php
function get_currentRunIndex()
es
async get_currentRunIndex()
dnp
int get_currentRunIndex()
cp
int get_currentRunIndex()
cmd
YDataLogger target get_currentRunIndex

Retourne :

un entier représentant le numéro du Run actuel, correspondant au nombre de fois que le module a été mis sous tension avec la fonction d'enregistreur de données active

En cas d'erreur, déclenche une exception ou retourne Y_CURRENTRUNINDEX_INVALID.

datalogger→get_dataSets()
datalogger→dataSets()
datalogger.get_dataSets()datalogger→get_dataSets()[datalogger dataSets]datalogger.get_dataSets()datalogger.get_dataSets()datalogger.get_dataSets()datalogger.get_dataSets()datalogger.get_dataSets()datalogger.get_dataSets()datalogger→get_dataSets()datalogger.get_dataSets()datalogger.get_dataSets()YDataLogger get_dataSets

Retourne une liste d'objets YDataSet permettant de récupérer toutes les mesures stockées par l'enregistreur de données.

js
function get_dataSets()
cpp
vector<YDataSet> get_dataSets()
m
-(NSMutableArray*) dataSets
pas
TYDataSetArray get_dataSets(): TYDataSetArray
vb
function get_dataSets() As List
cs
List<YDataSet> get_dataSets()
java
ArrayList<YDataSet> get_dataSets()
uwp
async Task<List<YDataSet>> get_dataSets()
py
get_dataSets()
php
function get_dataSets()
es
async get_dataSets()
dnp
YDataSetProxy[] get_dataSets()
cmd
YDataLogger target get_dataSets

Cette méthode ne fonctionne que si le module utilise un firmware récent, car les objets YDataSet ne sont pas supportés par les firmwares antérieurs à la révision 13000.

Retourne :

une liste d'objets YDataSet

En cas d'erreur, déclenche une exception ou retourne une liste vide.

datalogger→get_dataStreams()
datalogger→dataStreams()

Construit une liste de toutes les séquences de mesures mémorisées par l'enregistreur (ancienne méthode).

L'appelant doit passer par référence un tableau vide pout stocker les objets DataStream, et la méthode va les remplire avec des objets décrivant les séquences de données disponibles.

Cette méthode est préservée pour maintenir la compatibilité avec les applications existantes. Pour les nouvelles applications, il est préférable d'utiliser la méthode get_dataSets() ou d'appeler directement la méthode get_recordedData() sur l'objet représentant le capteur désiré.

Paramètres :

vun tableau de DataStream qui sera rempli avec les séquences trouvées

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

datalogger→get_errorMessage()
datalogger→errorMessage()
datalogger.get_errorMessage()datalogger→get_errorMessage()[datalogger errorMessage]datalogger.get_errorMessage()datalogger.get_errorMessage()datalogger.get_errorMessage()datalogger.get_errorMessage()datalogger.get_errorMessage()datalogger→get_errorMessage()datalogger.get_errorMessage()

Retourne le message correspondant à la dernière erreur survenue lors de l'utilisation de l'enregistreur de données.

js
function get_errorMessage()
cpp
string get_errorMessage()
m
-(NSString*) errorMessage
pas
string get_errorMessage(): string
vb
function get_errorMessage() As String
cs
string get_errorMessage()
java
String get_errorMessage()
py
get_errorMessage()
php
function get_errorMessage()
es
get_errorMessage()

Cette méthode est principalement utile lorsque la librairie Yoctopuce est utilisée en désactivant la gestion des exceptions.

Retourne :

une chaîne de caractères correspondant au message de la dernière erreur qui s'est produit lors de l'utilisation de l'enregistreur de données.

datalogger→get_errorType()
datalogger→errorType()
datalogger.get_errorType()datalogger→get_errorType()[datalogger errorType]datalogger.get_errorType()datalogger.get_errorType()datalogger.get_errorType()datalogger.get_errorType()datalogger.get_errorType()datalogger→get_errorType()datalogger.get_errorType()

Retourne le code d'erreur correspondant à la dernière erreur survenue lors de l'utilisation de l'enregistreur de données.

js
function get_errorType()
cpp
YRETCODE get_errorType()
m
-(YRETCODE) errorType
pas
YRETCODE get_errorType(): YRETCODE
vb
function get_errorType() As YRETCODE
cs
YRETCODE get_errorType()
java
int get_errorType()
py
get_errorType()
php
function get_errorType()
es
get_errorType()

Cette méthode est principalement utile lorsque la librairie Yoctopuce est utilisée en désactivant la gestion des exceptions.

Retourne :

un nombre correspondant au code de la dernière erreur qui s'est produit lors de l'utilisation de l'enregistreur de données.

datalogger→get_friendlyName()
datalogger→friendlyName()
datalogger.get_friendlyName()datalogger→get_friendlyName()[datalogger friendlyName]datalogger.get_friendlyName()datalogger.get_friendlyName()datalogger.get_friendlyName()datalogger→get_friendlyName()datalogger.get_friendlyName()datalogger.get_friendlyName()datalogger.get_friendlyName()

Retourne un identifiant global de l'enregistreur de données au format NOM_MODULE.NOM_FONCTION.

js
function get_friendlyName()
cpp
string get_friendlyName()
m
-(NSString*) friendlyName
cs
string get_friendlyName()
java
String get_friendlyName()
py
get_friendlyName()
php
function get_friendlyName()
es
async get_friendlyName()
dnp
string get_friendlyName()
cp
string get_friendlyName()

Le chaîne retournée utilise soit les noms logiques du module et de l'enregistreur de données si ils sont définis, soit respectivement le numéro de série du module et l'identifant matériel de l'enregistreur de données (par exemple: MyCustomName.relay1)

Retourne :

une chaîne de caractères identifiant l'enregistreur de données en utilisant les noms logiques (ex: MyCustomName.relay1)

En cas d'erreur, déclenche une exception ou retourne Y_FRIENDLYNAME_INVALID.

datalogger→get_functionDescriptor()
datalogger→functionDescriptor()
datalogger.get_functionDescriptor()datalogger→get_functionDescriptor()[datalogger functionDescriptor]datalogger.get_functionDescriptor()datalogger.get_functionDescriptor()datalogger.get_functionDescriptor()datalogger.get_functionDescriptor()datalogger.get_functionDescriptor()datalogger→get_functionDescriptor()datalogger.get_functionDescriptor()

Retourne un identifiant unique de type YFUN_DESCR correspondant à la fonction.

js
function get_functionDescriptor()
cpp
YFUN_DESCR get_functionDescriptor()
m
-(YFUN_DESCR) functionDescriptor
pas
YFUN_DESCR get_functionDescriptor(): YFUN_DESCR
vb
function get_functionDescriptor() As YFUN_DESCR
cs
YFUN_DESCR get_functionDescriptor()
java
String get_functionDescriptor()
py
get_functionDescriptor()
php
function get_functionDescriptor()
es
async get_functionDescriptor()

Cet identifiant peut être utilisé pour tester si deux instance de YFunction référencent physiquement la même fonction sur le même module.

Retourne :

un identifiant de type YFUN_DESCR.

Si la fonction n'a jamais été contactée, la valeur retournée sera Y_FUNCTIONDESCRIPTOR_INVALID

datalogger→get_functionId()
datalogger→functionId()
datalogger.get_functionId()datalogger→get_functionId()[datalogger functionId]datalogger.get_functionId()datalogger.get_functionId()datalogger.get_functionId()datalogger.get_functionId()datalogger→get_functionId()datalogger.get_functionId()datalogger.get_functionId()datalogger.get_functionId()

Retourne l'identifiant matériel de l'enregistreur de données, sans référence au module.

js
function get_functionId()
cpp
string get_functionId()
m
-(NSString*) functionId
vb
function get_functionId() As String
cs
string get_functionId()
java
String get_functionId()
py
get_functionId()
php
function get_functionId()
es
async get_functionId()
dnp
string get_functionId()
cp
string get_functionId()

Par example relay1.

Retourne :

une chaîne de caractères identifiant l'enregistreur de données (ex: relay1)

En cas d'erreur, déclenche une exception ou retourne Y_FUNCTIONID_INVALID.

datalogger→get_hardwareId()
datalogger→hardwareId()
datalogger.get_hardwareId()datalogger→get_hardwareId()[datalogger hardwareId]datalogger.get_hardwareId()datalogger.get_hardwareId()datalogger.get_hardwareId()datalogger.get_hardwareId()datalogger→get_hardwareId()datalogger.get_hardwareId()datalogger.get_hardwareId()datalogger.get_hardwareId()

Retourne l'identifiant matériel unique de l'enregistreur de données au format SERIAL.FUNCTIONID.

js
function get_hardwareId()
cpp
string get_hardwareId()
m
-(NSString*) hardwareId
vb
function get_hardwareId() As String
cs
string get_hardwareId()
java
String get_hardwareId()
py
get_hardwareId()
php
function get_hardwareId()
es
async get_hardwareId()
dnp
string get_hardwareId()
cp
string get_hardwareId()

L'identifiant unique est composé du numéro de série du module et de l'identifiant matériel de l'enregistreur de données (par example RELAYLO1-123456.relay1).

Retourne :

une chaîne de caractères identifiant l'enregistreur de données (ex: RELAYLO1-123456.relay1)

En cas d'erreur, déclenche une exception ou retourne Y_HARDWAREID_INVALID.

datalogger→get_logicalName()
datalogger→logicalName()
datalogger.get_logicalName()datalogger→get_logicalName()[datalogger logicalName]datalogger.get_logicalName()datalogger.get_logicalName()datalogger.get_logicalName()datalogger.get_logicalName()datalogger.get_logicalName()datalogger.get_logicalName()datalogger→get_logicalName()datalogger.get_logicalName()datalogger.get_logicalName()datalogger.get_logicalName()YDataLogger get_logicalName

Retourne le nom logique de l'enregistreur de données.

js
function get_logicalName()
cpp
string get_logicalName()
m
-(NSString*) logicalName
pas
string get_logicalName(): string
vb
function get_logicalName() As String
cs
string get_logicalName()
java
String get_logicalName()
uwp
async Task<string> get_logicalName()
py
get_logicalName()
php
function get_logicalName()
es
async get_logicalName()
dnp
string get_logicalName()
cp
string get_logicalName()
cmd
YDataLogger target get_logicalName

Retourne :

une chaîne de caractères représentant le nom logique de l'enregistreur de données.

En cas d'erreur, déclenche une exception ou retourne Y_LOGICALNAME_INVALID.

datalogger→get_module()
datalogger→module()
datalogger.get_module()datalogger→get_module()[datalogger module]datalogger.get_module()datalogger.get_module()datalogger.get_module()datalogger.get_module()datalogger.get_module()datalogger→get_module()datalogger.get_module()datalogger.get_module()datalogger.get_module()

Retourne l'objet YModule correspondant au module Yoctopuce qui héberge la fonction.

js
function get_module()
cpp
YModule * get_module()
m
-(YModule*) module
pas
TYModule get_module(): TYModule
vb
function get_module() As YModule
cs
YModule get_module()
java
YModule get_module()
py
get_module()
php
function get_module()
es
async get_module()
dnp
YModuleProxy get_module()
cp
YModuleProxy * get_module()

Si la fonction ne peut être trouvée sur aucun module, l'instance de YModule retournée ne sera pas joignable.

Retourne :

une instance de YModule

datalogger→get_module_async()
datalogger→module_async()
datalogger.get_module_async()

Retourne l'objet YModule correspondant au module Yoctopuce qui héberge la fonction.

js
function get_module_async(callback, context)

Si la fonction ne peut être trouvée sur aucun module, l'instance de YModule retournée ne sera pas joignable.

Cette version asynchrone n'existe qu'en Javascript. Elle utilise une fonction de callback plutôt qu'une simple valeur de retour, pour éviter de bloquer la VM Javascript de Firefox, qui n'implémente pas le passage de contrôle entre threads durant les appels d'entrée/sortie bloquants.

Paramètres :

callbackfonction de callback qui sera appelée dès que le résultat sera connu. La fonction callback reçoit trois arguments: le contexte fourni par l'appelant, l'objet fonction concerné et l'instance demandée de YModule
contextcontexte fourni par l'appelant, et qui sera passé tel-quel à la fonction de callback

Retourne :

rien du tout : le résultat sera passé en paramètre à la fonction de callback.

datalogger→get_recording()
datalogger→recording()
datalogger.get_recording()datalogger→get_recording()[datalogger recording]datalogger.get_recording()datalogger.get_recording()datalogger.get_recording()datalogger.get_recording()datalogger.get_recording()datalogger.get_recording()datalogger→get_recording()datalogger.get_recording()datalogger.get_recording()datalogger.get_recording()YDataLogger get_recording

Retourne l'état d'activation de l'enregistreur de données.

js
function get_recording()
cpp
Y_RECORDING_enum get_recording()
m
-(Y_RECORDING_enum) recording
pas
Integer get_recording(): Integer
vb
function get_recording() As Integer
cs
int get_recording()
java
int get_recording()
uwp
async Task<int> get_recording()
py
get_recording()
php
function get_recording()
es
async get_recording()
dnp
int get_recording()
cp
int get_recording()
cmd
YDataLogger target get_recording

Retourne :

une valeur parmi Y_RECORDING_OFF, Y_RECORDING_ON et Y_RECORDING_PENDING représentant l'état d'activation de l'enregistreur de données

En cas d'erreur, déclenche une exception ou retourne Y_RECORDING_INVALID.

datalogger→get_serialNumber()
datalogger→serialNumber()
datalogger.get_serialNumber()datalogger→get_serialNumber()[datalogger serialNumber]datalogger.get_serialNumber()datalogger.get_serialNumber()datalogger.get_serialNumber()datalogger.get_serialNumber()datalogger.get_serialNumber()datalogger.get_serialNumber()datalogger→get_serialNumber()datalogger.get_serialNumber()datalogger.get_serialNumber()datalogger.get_serialNumber()YDataLogger get_serialNumber

Retourne le numéro de série du module, préprogrammé en usine.

js
function get_serialNumber()
cpp
string get_serialNumber()
m
-(NSString*) serialNumber
pas
string get_serialNumber(): string
vb
function get_serialNumber() As String
cs
string get_serialNumber()
java
String get_serialNumber()
uwp
async Task<string> get_serialNumber()
py
get_serialNumber()
php
function get_serialNumber()
es
async get_serialNumber()
dnp
string get_serialNumber()
cp
string get_serialNumber()
cmd
YDataLogger target get_serialNumber

Retourne :

: une chaîne de caractères représentant le numéro de série du module, préprogrammé en usine.

En cas d'erreur, déclenche une exception ou retourne YModule.SERIALNUMBER_INVALID.

datalogger→get_timeUTC()
datalogger→timeUTC()
datalogger.get_timeUTC()datalogger→get_timeUTC()[datalogger timeUTC]datalogger.get_timeUTC()datalogger.get_timeUTC()datalogger.get_timeUTC()datalogger.get_timeUTC()datalogger.get_timeUTC()datalogger.get_timeUTC()datalogger→get_timeUTC()datalogger.get_timeUTC()datalogger.get_timeUTC()datalogger.get_timeUTC()YDataLogger get_timeUTC

Retourne le timestamp Unix de l'heure UTC actuelle, lorsqu'elle est connue.

js
function get_timeUTC()
cpp
s64 get_timeUTC()
m
-(s64) timeUTC
pas
int64 get_timeUTC(): int64
vb
function get_timeUTC() As Long
cs
long get_timeUTC()
java
long get_timeUTC()
uwp
async Task<long> get_timeUTC()
py
get_timeUTC()
php
function get_timeUTC()
es
async get_timeUTC()
dnp
long get_timeUTC()
cp
s64 get_timeUTC()
cmd
YDataLogger target get_timeUTC

Retourne :

un entier représentant le timestamp Unix de l'heure UTC actuelle, lorsqu'elle est connue

En cas d'erreur, déclenche une exception ou retourne Y_TIMEUTC_INVALID.

datalogger→get_usage()
datalogger→usage()
datalogger.get_usage()datalogger→get_usage()[datalogger usage]datalogger.get_usage()datalogger.get_usage()datalogger.get_usage()datalogger.get_usage()datalogger.get_usage()datalogger.get_usage()datalogger→get_usage()datalogger.get_usage()datalogger.get_usage()datalogger.get_usage()YDataLogger get_usage

Retourne le pourcentage d'utilisation de la mémoire d'enregistrement.

js
function get_usage()
cpp
int get_usage()
m
-(int) usage
pas
LongInt get_usage(): LongInt
vb
function get_usage() As Integer
cs
int get_usage()
java
int get_usage()
uwp
async Task<int> get_usage()
py
get_usage()
php
function get_usage()
es
async get_usage()
dnp
int get_usage()
cp
int get_usage()
cmd
YDataLogger target get_usage

Retourne :

un entier représentant le pourcentage d'utilisation de la mémoire d'enregistrement

En cas d'erreur, déclenche une exception ou retourne Y_USAGE_INVALID.

datalogger→get_userData()
datalogger→userData()
datalogger.get_userData()datalogger→get_userData()[datalogger userData]datalogger.get_userData()datalogger.get_userData()datalogger.get_userData()datalogger.get_userData()datalogger.get_userData()datalogger→get_userData()datalogger.get_userData()

Retourne le contenu de l'attribut userData, précédemment stocké à l'aide de la méthode set_userData.

js
function get_userData()
cpp
void * get_userData()
m
-(id) userData
pas
Tobject get_userData(): Tobject
vb
function get_userData() As Object
cs
object get_userData()
java
Object get_userData()
py
get_userData()
php
function get_userData()
es
async get_userData()

Cet attribut n'es pas utilisé directement par l'API. Il est à la disposition de l'appelant pour stocker un contexte.

Retourne :

l'objet stocké précédemment par l'appelant.

datalogger→isOnline()datalogger.isOnline()datalogger→isOnline()[datalogger isOnline]datalogger.isOnline()datalogger.isOnline()datalogger.isOnline()datalogger.isOnline()datalogger.isOnline()datalogger→isOnline()datalogger.isOnline()datalogger.isOnline()datalogger.isOnline()

Vérifie si le module hébergeant l'enregistreur de données est joignable, sans déclencher d'erreur.

js
function isOnline()
cpp
bool isOnline()
m
-(BOOL) isOnline
pas
boolean isOnline(): boolean
vb
function isOnline() As Boolean
cs
bool isOnline()
java
boolean isOnline()
py
isOnline()
php
function isOnline()
es
async isOnline()
dnp
bool isOnline()
cp
bool isOnline()

Si les valeurs des attributs en cache de l'enregistreur de données sont valides au moment de l'appel, le module est considéré joignable. Cette fonction ne cause en aucun cas d'exception, quelle que soit l'erreur qui pourrait se produire lors de la vérification de joignabilité.

Retourne :

true si l'enregistreur de données est joignable, false sinon

datalogger→isOnline_async()datalogger.isOnline_async()

Vérifie si le module hébergeant l'enregistreur de données est joignable, sans déclencher d'erreur.

js
function isOnline_async(callback, context)

Si les valeurs des attributs en cache de l'enregistreur de données sont valides au moment de l'appel, le module est considéré joignable. Cette fonction ne cause en aucun cas d'exception, quelle que soit l'erreur qui pourrait se produire lors de la vérification de joignabilité.

Cette version asynchrone n'existe qu'en Javascript. Elle utilise une fonction de callback plutôt qu'une simple valeur de retour, pour éviter de bloquer la machine virtuelle Javascript avec une attente active.

Paramètres :

callbackfonction de callback qui sera appelée dès que le résultat sera connu. La fonction callback reçoit trois arguments: le contexte fourni par l'appelant, l'objet fonction concerné et le résultat booléen
contextcontexte fourni par l'appelant, et qui sera passé tel-quel à la fonction de callback

Retourne :

rien du tout : le résultat sera passé en paramètre à la fonction de callback.

datalogger→isReadOnly()datalogger→isReadOnly()[datalogger isReadOnly]datalogger.isReadOnly()datalogger.isReadOnly()datalogger.isReadOnly()datalogger.isReadOnly()datalogger.isReadOnly()datalogger.isReadOnly()datalogger→isReadOnly()datalogger.isReadOnly()datalogger.isReadOnly()datalogger.isReadOnly()YDataLogger isReadOnly

Test si la fonction est en lecture seule.

cpp
bool isReadOnly()
m
-(bool) isReadOnly
pas
boolean isReadOnly(): boolean
vb
function isReadOnly() As Boolean
cs
bool isReadOnly()
java
boolean isReadOnly()
uwp
async Task<bool> isReadOnly()
py
isReadOnly()
php
function isReadOnly()
es
async isReadOnly()
dnp
bool isReadOnly()
cp
bool isReadOnly()
cmd
YDataLogger target isReadOnly

Retourne vrais si la fonction est protégé en ecriture ou que la fontion n'est pas disponible.

Retourne :

true si la fonction est protégé en ecriture ou que la fontion n'est pas disponible

datalogger→load()datalogger.load()datalogger→load()[datalogger load: ]datalogger.load()datalogger.load()datalogger.load()datalogger.load()datalogger.load()datalogger→load()datalogger.load()

Met en cache les valeurs courantes de l'enregistreur de données, avec une durée de validité spécifiée.

js
function load(msValidity)
cpp
YRETCODE load(int msValidity)
m
-(YRETCODE) load: (u64) msValidity
pas
YRETCODE load(msValidity: u64): YRETCODE
vb
function load(ByVal msValidity As Long) As YRETCODE
cs
YRETCODE load(ulong msValidity)
java
int load(long msValidity)
py
load(msValidity)
php
function load($msValidity)
es
async load(msValidity)

Par défaut, lorsqu'on accède à un module, tous les attributs des fonctions du module sont automatiquement mises en cache pour la durée standard (5 ms). Cette méthode peut être utilisée pour marquer occasionellement les données cachées comme valides pour une plus longue période, par exemple dans le but de réduire le trafic réseau.

Paramètres :

msValidityun entier correspondant à la durée de validité attribuée aux les paramètres chargés, en millisecondes

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

datalogger→loadAttribute()datalogger.loadAttribute()datalogger→loadAttribute()[datalogger loadAttribute: ]datalogger.loadAttribute()datalogger.loadAttribute()datalogger.loadAttribute()datalogger.loadAttribute()datalogger.loadAttribute()datalogger.loadAttribute()datalogger→loadAttribute()datalogger.loadAttribute()datalogger.loadAttribute()datalogger.loadAttribute()

Retourne la valeur actuelle d'un attribut spécifique de la fonction, sous forme de texte, le plus rapidement possible mais sans passer par le cache.

js
function loadAttribute(attrName)
cpp
string loadAttribute(string attrName)
m
-(NSString*) loadAttribute: (NSString*) attrName
pas
string loadAttribute(attrName: string): string
vb
function loadAttribute(ByVal attrName As String) As String
cs
string loadAttribute(string attrName)
java
String loadAttribute(String attrName)
uwp
async Task<string> loadAttribute(string attrName)
py
loadAttribute(attrName)
php
function loadAttribute($attrName)
es
async loadAttribute(attrName)
dnp
string loadAttribute(string attrName)
cp
string loadAttribute(string attrName)

Paramètres :

attrNamele nom de l'attribut désiré

Retourne :

une chaîne de caractères représentant la valeur actuelle de l'attribut.

En cas d'erreur, déclenche une exception ou retourne un chaîne vide.

datalogger→load_async()datalogger.load_async()

Met en cache les valeurs courantes de l'enregistreur de données, avec une durée de validité spécifiée.

js
function load_async(msValidity, callback, context)

Par défaut, lorsqu'on accède à un module, tous les attributs des fonctions du module sont automatiquement mises en cache pour la durée standard (5 ms). Cette méthode peut être utilisée pour marquer occasionellement les données cachées comme valides pour une plus longue période, par exemple dans le but de réduire le trafic réseau.

Cette version asynchrone n'existe qu'en Javascript. Elle utilise une fonction de callback plutôt qu'une simple valeur de retour, pour éviter de bloquer la machine virtuelle Javascript avec une attente active.

Paramètres :

msValidityun entier correspondant à la durée de validité attribuée aux les paramètres chargés, en millisecondes
callbackfonction de callback qui sera appelée dès que le résultat sera connu. La fonction callback reçoit trois arguments: le contexte fourni par l'appelant, l'objet fonction concerné et le code d'erreur (ou YAPI_SUCCESS)
contextcontexte fourni par l'appelant, et qui sera passé tel-quel à la fonction de callback

Retourne :

rien du tout : le résultat sera passé en paramètre à la fonction de callback.

datalogger→muteValueCallbacks()datalogger.muteValueCallbacks()datalogger→muteValueCallbacks()[datalogger muteValueCallbacks]datalogger.muteValueCallbacks()datalogger.muteValueCallbacks()datalogger.muteValueCallbacks()datalogger.muteValueCallbacks()datalogger.muteValueCallbacks()datalogger.muteValueCallbacks()datalogger→muteValueCallbacks()datalogger.muteValueCallbacks()datalogger.muteValueCallbacks()datalogger.muteValueCallbacks()YDataLogger muteValueCallbacks

Désactive l'envoi de chaque changement de la valeur publiée au hub parent.

js
function muteValueCallbacks()
cpp
int muteValueCallbacks()
m
-(int) muteValueCallbacks
pas
LongInt muteValueCallbacks(): LongInt
vb
function muteValueCallbacks() As Integer
cs
int muteValueCallbacks()
java
int muteValueCallbacks()
uwp
async Task<int> muteValueCallbacks()
py
muteValueCallbacks()
php
function muteValueCallbacks()
es
async muteValueCallbacks()
dnp
int muteValueCallbacks()
cp
int muteValueCallbacks()
cmd
YDataLogger target muteValueCallbacks

Vous pouvez utiliser cette fonction pour économiser la bande passante et le CPU sur les machines de faible puissance, ou pour éviter le déclanchement de callbacks HTTP. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

datalogger→nextDataLogger()datalogger.nextDataLogger()datalogger→nextDataLogger()[datalogger nextDataLogger]datalogger.nextDataLogger()datalogger.nextDataLogger()datalogger.nextDataLogger()datalogger.nextDataLogger()datalogger.nextDataLogger()datalogger.nextDataLogger()datalogger→nextDataLogger()datalogger.nextDataLogger()

Continue l'énumération des enregistreurs de données commencée à l'aide de yFirstDataLogger() Attention, vous ne pouvez faire aucune supposition sur l'ordre dans lequel les enregistreurs de données sont retournés.

js
function nextDataLogger()
cpp
YDataLogger * nextDataLogger()
m
-(YDataLogger*) nextDataLogger
pas
TYDataLogger nextDataLogger(): TYDataLogger
vb
function nextDataLogger() As YDataLogger
cs
YDataLogger nextDataLogger()
java
YDataLogger nextDataLogger()
uwp
YDataLogger nextDataLogger()
py
nextDataLogger()
php
function nextDataLogger()
es
nextDataLogger()

Si vous souhaitez retrouver un enregistreur de données spécifique, utilisez DataLogger.findDataLogger() avec un hardwareID ou un nom logique.

Retourne :

un pointeur sur un objet YDataLogger accessible en ligne, ou null lorsque l'énumération est terminée.

datalogger→registerValueCallback()datalogger.registerValueCallback()datalogger→registerValueCallback()[datalogger registerValueCallback: ]datalogger.registerValueCallback()datalogger.registerValueCallback()datalogger.registerValueCallback()datalogger.registerValueCallback()datalogger.registerValueCallback()datalogger.registerValueCallback()datalogger→registerValueCallback()datalogger.registerValueCallback()

Enregistre la fonction de callback qui est appelée à chaque changement de la valeur publiée.

js
function registerValueCallback(callback)
cpp
int registerValueCallback(YDataLoggerValueCallback callback)
m
-(int) registerValueCallback: (YDataLoggerValueCallback) callback
pas
LongInt registerValueCallback(callback: TYDataLoggerValueCallback): LongInt
vb
function registerValueCallback(ByVal callback As YDataLoggerValueCallback) As Integer
cs
int registerValueCallback(ValueCallback callback)
java
int registerValueCallback(UpdateCallback callback)
uwp
async Task<int> registerValueCallback(ValueCallback callback)
py
registerValueCallback(callback)
php
function registerValueCallback($callback)
es
async registerValueCallback(callback)

Ce callback n'est appelé que durant l'exécution de ySleep ou yHandleEvents. Cela permet à l'appelant de contrôler quand les callback peuvent se produire. Il est important d'appeler l'une de ces deux fonctions périodiquement pour garantir que les callback ne soient pas appelés trop tard. Pour désactiver un callback, il suffit d'appeler cette méthode en lui passant un pointeur nul.

Paramètres :

callbackla fonction de callback à rappeler, ou un pointeur nul. La fonction de callback doit accepter deux arguments: l'object fonction dont la valeur a changé, et la chaîne de caractère décrivant la nouvelle valeur publiée.

datalogger→set_autoStart()
datalogger→setAutoStart()
datalogger.set_autoStart()datalogger→set_autoStart()[datalogger setAutoStart: ]datalogger.set_autoStart()datalogger.set_autoStart()datalogger.set_autoStart()datalogger.set_autoStart()datalogger.set_autoStart()datalogger.set_autoStart()datalogger→set_autoStart()datalogger.set_autoStart()datalogger.set_autoStart()datalogger.set_autoStart()YDataLogger set_autoStart

Modifie le mode d'activation automatique de l'enregistreur de données à la mise sous tension.

js
function set_autoStart(newval)
cpp
int set_autoStart(Y_AUTOSTART_enum newval)
m
-(int) setAutoStart: (Y_AUTOSTART_enum) newval
pas
integer set_autoStart(newval: Integer): integer
vb
function set_autoStart(ByVal newval As Integer) As Integer
cs
int set_autoStart(int newval)
java
int set_autoStart(int newval)
uwp
async Task<int> set_autoStart(int newval)
py
set_autoStart(newval)
php
function set_autoStart($newval)
es
async set_autoStart(newval)
dnp
int set_autoStart(int newval)
cp
int set_autoStart(int newval)
cmd
YDataLogger target set_autoStart newval

N'oubliez pas d'appeler la méthode saveToFlash() pour sauver la modification de configuration. Attention si le module n'a pas de source de temps à sa disposition au démarrage, il va attendre environ 8 sec avant de démarrer automatiquement l'enregistrement avec un horodatage arbitraire.

Paramètres :

newvalsoit Y_AUTOSTART_OFF, soit Y_AUTOSTART_ON, selon le mode d'activation automatique de l'enregistreur de données à la mise sous tension

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

datalogger→set_beaconDriven()
datalogger→setBeaconDriven()
datalogger.set_beaconDriven()datalogger→set_beaconDriven()[datalogger setBeaconDriven: ]datalogger.set_beaconDriven()datalogger.set_beaconDriven()datalogger.set_beaconDriven()datalogger.set_beaconDriven()datalogger.set_beaconDriven()datalogger.set_beaconDriven()datalogger→set_beaconDriven()datalogger.set_beaconDriven()datalogger.set_beaconDriven()datalogger.set_beaconDriven()YDataLogger set_beaconDriven

Modifie le mode de synchronisation de l'enregistreur de données .

js
function set_beaconDriven(newval)
cpp
int set_beaconDriven(Y_BEACONDRIVEN_enum newval)
m
-(int) setBeaconDriven: (Y_BEACONDRIVEN_enum) newval
pas
integer set_beaconDriven(newval: Integer): integer
vb
function set_beaconDriven(ByVal newval As Integer) As Integer
cs
int set_beaconDriven(int newval)
java
int set_beaconDriven(int newval)
uwp
async Task<int> set_beaconDriven(int newval)
py
set_beaconDriven(newval)
php
function set_beaconDriven($newval)
es
async set_beaconDriven(newval)
dnp
int set_beaconDriven(int newval)
cp
int set_beaconDriven(int newval)
cmd
YDataLogger target set_beaconDriven newval

N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Paramètres :

newvalsoit Y_BEACONDRIVEN_OFF, soit Y_BEACONDRIVEN_ON, selon le mode de synchronisation de l'enregistreur de données

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

datalogger→set_logicalName()
datalogger→setLogicalName()
datalogger.set_logicalName()datalogger→set_logicalName()[datalogger setLogicalName: ]datalogger.set_logicalName()datalogger.set_logicalName()datalogger.set_logicalName()datalogger.set_logicalName()datalogger.set_logicalName()datalogger.set_logicalName()datalogger→set_logicalName()datalogger.set_logicalName()datalogger.set_logicalName()datalogger.set_logicalName()YDataLogger set_logicalName

Modifie le nom logique de l'enregistreur de données.

js
function set_logicalName(newval)
cpp
int set_logicalName(string newval)
m
-(int) setLogicalName: (NSString*) newval
pas
integer set_logicalName(newval: string): integer
vb
function set_logicalName(ByVal newval As String) As Integer
cs
int set_logicalName(string newval)
java
int set_logicalName(String newval)
uwp
async Task<int> set_logicalName(string newval)
py
set_logicalName(newval)
php
function set_logicalName($newval)
es
async set_logicalName(newval)
dnp
int set_logicalName(string newval)
cp
int set_logicalName(string newval)
cmd
YDataLogger target set_logicalName newval

Vous pouvez utiliser yCheckLogicalName() pour vérifier si votre paramètre est valide. N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Paramètres :

newvalune chaîne de caractères représentant le nom logique de l'enregistreur de données.

Retourne :

YAPI_SUCCESS si l'appel se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

datalogger→set_recording()
datalogger→setRecording()
datalogger.set_recording()datalogger→set_recording()[datalogger setRecording: ]datalogger.set_recording()datalogger.set_recording()datalogger.set_recording()datalogger.set_recording()datalogger.set_recording()datalogger.set_recording()datalogger→set_recording()datalogger.set_recording()datalogger.set_recording()datalogger.set_recording()YDataLogger set_recording

Modifie l'état d'activation de l'enregistreur de données.

js
function set_recording(newval)
cpp
int set_recording(Y_RECORDING_enum newval)
m
-(int) setRecording: (Y_RECORDING_enum) newval
pas
integer set_recording(newval: Integer): integer
vb
function set_recording(ByVal newval As Integer) As Integer
cs
int set_recording(int newval)
java
int set_recording(int newval)
uwp
async Task<int> set_recording(int newval)
py
set_recording(newval)
php
function set_recording($newval)
es
async set_recording(newval)
dnp
int set_recording(int newval)
cp
int set_recording(int newval)
cmd
YDataLogger target set_recording newval

Paramètres :

newvalune valeur parmi Y_RECORDING_OFF, Y_RECORDING_ON et Y_RECORDING_PENDING représentant l'état d'activation de l'enregistreur de données

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

datalogger→set_timeUTC()
datalogger→setTimeUTC()
datalogger.set_timeUTC()datalogger→set_timeUTC()[datalogger setTimeUTC: ]datalogger.set_timeUTC()datalogger.set_timeUTC()datalogger.set_timeUTC()datalogger.set_timeUTC()datalogger.set_timeUTC()datalogger.set_timeUTC()datalogger→set_timeUTC()datalogger.set_timeUTC()datalogger.set_timeUTC()datalogger.set_timeUTC()YDataLogger set_timeUTC

Modifie la référence de temps UTC, afin de l'attacher aux données enregistrées.

js
function set_timeUTC(newval)
cpp
int set_timeUTC(s64 newval)
m
-(int) setTimeUTC: (s64) newval
pas
integer set_timeUTC(newval: int64): integer
vb
function set_timeUTC(ByVal newval As Long) As Integer
cs
int set_timeUTC(long newval)
java
int set_timeUTC(long newval)
uwp
async Task<int> set_timeUTC(long newval)
py
set_timeUTC(newval)
php
function set_timeUTC($newval)
es
async set_timeUTC(newval)
dnp
int set_timeUTC(long newval)
cp
int set_timeUTC(s64 newval)
cmd
YDataLogger target set_timeUTC newval

Paramètres :

newvalun entier représentant la référence de temps UTC, afin de l'attacher aux données enregistrées

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

datalogger→set_userData()
datalogger→setUserData()
datalogger.set_userData()datalogger→set_userData()[datalogger setUserData: ]datalogger.set_userData()datalogger.set_userData()datalogger.set_userData()datalogger.set_userData()datalogger.set_userData()datalogger→set_userData()datalogger.set_userData()

Enregistre un contexte libre dans l'attribut userData de la fonction, afin de le retrouver plus tard à l'aide de la méthode get_userData.

js
function set_userData(data)
cpp
void set_userData(void * data)
m
-(void) setUserData: (id) data
pas
set_userData(data: Tobject)
vb
procedure set_userData(ByVal data As Object)
cs
void set_userData(object data)
java
void set_userData(Object data)
py
set_userData(data)
php
function set_userData($data)
es
async set_userData(data)

Cet attribut n'es pas utilisé directement par l'API. Il est à la disposition de l'appelant pour stocker un contexte.

Paramètres :

dataobjet quelconque à mémoriser

datalogger→unmuteValueCallbacks()datalogger.unmuteValueCallbacks()datalogger→unmuteValueCallbacks()[datalogger unmuteValueCallbacks]datalogger.unmuteValueCallbacks()datalogger.unmuteValueCallbacks()datalogger.unmuteValueCallbacks()datalogger.unmuteValueCallbacks()datalogger.unmuteValueCallbacks()datalogger.unmuteValueCallbacks()datalogger→unmuteValueCallbacks()datalogger.unmuteValueCallbacks()datalogger.unmuteValueCallbacks()datalogger.unmuteValueCallbacks()YDataLogger unmuteValueCallbacks

Réactive l'envoi de chaque changement de la valeur publiée au hub parent.

js
function unmuteValueCallbacks()
cpp
int unmuteValueCallbacks()
m
-(int) unmuteValueCallbacks
pas
LongInt unmuteValueCallbacks(): LongInt
vb
function unmuteValueCallbacks() As Integer
cs
int unmuteValueCallbacks()
java
int unmuteValueCallbacks()
uwp
async Task<int> unmuteValueCallbacks()
py
unmuteValueCallbacks()
php
function unmuteValueCallbacks()
es
async unmuteValueCallbacks()
dnp
int unmuteValueCallbacks()
cp
int unmuteValueCallbacks()
cmd
YDataLogger target unmuteValueCallbacks

Cette fonction annule un précédent appel à muteValueCallbacks(). N'oubliez pas d'appeler la méthode saveToFlash() du module si le réglage doit être préservé.

Retourne :

YAPI_SUCCESS si l'opération se déroule sans erreur.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

datalogger→wait_async()datalogger.wait_async()datalogger.wait_async()

Attend que toutes les commandes asynchrones en cours d'exécution sur le module soient terminées, et appelle le callback passé en paramètre.

js
function wait_async(callback, context)
es
wait_async(callback, context)

La fonction callback peut donc librement utiliser des fonctions synchrones ou asynchrones, sans risquer de bloquer la machine virtuelle Javascript.

Paramètres :

callbackfonction de callback qui sera appelée dès que toutes les commandes en cours d'exécution sur le module seront terminées La fonction callback reçoit deux arguments: le contexte fourni par l'appelant et l'objet fonction concerné.
contextcontexte fourni par l'appelant, et qui sera passé tel-quel à la fonction de callback

Retourne :

rien du tout.

24.7. La classe YDataSet

Séquence de données enregistrées par le datalogger, obtenue par la méthode sensor.get_recordedData()

Les objets YDataSet permettent de récupérer un ensemble de mesures enregistrées correspondant à un capteur donné, pour une période choisie. Ils permettent le chargement progressif des données. Lorsque l'objet YDataSet est instancié par la méthode sensor.get_recordedData(), aucune donnée n'est encore chargée du module. Ce sont les appels successifs à la méthode loadMore() qui procèdent au chargement effectif des données depuis l'enregistreur de données.

Un résumé des mesures disponibles est disponible via la fonction get_preview() dès le premier appel à loadMore(). Les mesures elles-même sont disponibles via la fonction get_measures() au fur et à mesure de leur chargement.

Cette classe ne fonctionne que si le module utilise un firmware relativement récent, car les objets YDataSet ne sont pas supportés par les firmwares antérieurs à la révision 13000.

Pour utiliser les fonctions décrites ici, vous devez inclure:

js
<script type='text/javascript' src='yocto_module.js'></script>
cpp
#include "yocto_module.h"
m
#import "yocto_module.h"
pas
uses yocto_module;
vb
yocto_module.vb
cs
yocto_module.cs
java
import com.yoctopuce.YoctoAPI.YDataSet;
uwp
import com.yoctopuce.YoctoAPI.YDataSet;
py
from yocto_module import *
php
require_once('yocto_module.php');
es
in HTML: <script src="../../lib/yocto_module.js"></script>
in node.js: require('yoctolib-es2017/yocto_module.js');
dnp
import YoctoProxyAPI.YDataSetProxy
cp
#include "yocto_module_proxy.h"
ml
import YoctoProxyAPI.YDataSetProxy
Fonction globales
YDataSet.Init(sensorName, startTime, endTime)

Retourne un objet YDataSet permettant de charger les mesures d'un capteur donné par son nom ou identifiant matériel, pour un intervalle de temps spécifié.

Méthodes des objets YDataSet
dataset→get_endTimeUTC()

Retourne l'heure absolue de la fin des mesures disponibles, sous forme du nombre de secondes depuis le 1er janvier 1970 (date/heure au format Unix).

dataset→get_functionId()

Retourne l'identifiant matériel de la fonction qui a effectué les mesures, sans référence au module.

dataset→get_hardwareId()

Retourne l'identifiant matériel unique de la fonction qui a effectué les mesures, au format SERIAL.FUNCTIONID.

dataset→get_measures()

Retourne toutes les mesures déjà disponibles pour le DataSet, sous forme d'une liste d'objets YMeasure.

dataset→get_measuresAt(measure)

Retourne les mesures détaillées pour une mesure résumée précédemment retournée par get_preview().

dataset→get_measuresAvgAt(index)

Retourne la valeur moyenne observée durant l'intervalle de temps couvert par l'entrée spécifiée du résumé des mesures.

dataset→get_measuresEndTimeAt(index)

Retourne l'heure de fin de l'entrée spécifiée du résumé des mesures, sous forme du nombre de secondes depuis le 1er janvier 1970 UTC (date/heure au format Unix).

dataset→get_measuresMaxAt(index)

Retourne la plus grande valeur observée durant l'intervalle de temps couvert par l'entrée spécifiée du résumé des mesures.

dataset→get_measuresMinAt(index)

Retourne la plus petite valeur observée durant l'intervalle de temps couvert par l'entrée spécifiée du résumé des mesures.

dataset→get_measuresRecordCount()

Retourne le nombre de mesures déja chargées pour ce DataSet.

dataset→get_measuresStartTimeAt(index)

Retourne l'heure absolue de l'entrée spécifiée du résumé des mesures, sous forme du nombre de secondes depuis le 1er janvier 1970 UTC (date/heure au format Unix).

dataset→get_preview()

Retourne une version résumée des mesures qui pourront être obtenues de ce YDataSet, sous forme d'une liste d'objets YMeasure.

dataset→get_previewAvgAt(index)

Retourne la valeur moyenne observée durant l'intervalle de temps couvert par l'entrée spécifiée du résumé des mesures.

dataset→get_previewEndTimeAt(index)

Retourne l'heure de fin de l'entrée spécifiée du résumé des mesures, sous forme du nombre de secondes depuis le 1er janvier 1970 UTC (date/heure au format Unix).

dataset→get_previewMaxAt(index)

Retourne la plus grande valeur observée durant l'intervalle de temps couvert par l'entrée spécifiée du résumé des mesures.

dataset→get_previewMinAt(index)

Retourne la plus petite valeur observée durant l'intervalle de temps couvert par l'entrée spécifiée du résumé des mesures.

dataset→get_previewRecordCount()

Retourne le nombre d'entrées dans la version résumée des mesures qui pourront être obtenues dans ce YDataSet.

dataset→get_previewStartTimeAt(index)

Retourne l'heure absolue de l'entrée spécifiée du résumé des mesures, sous forme du nombre de secondes depuis le 1er janvier 1970 UTC (date/heure au format Unix).

dataset→get_progress()

Retourne l'état d'avancement du chargement des données, sur une échelle de 0 à 100.

dataset→get_startTimeUTC()

Retourne l'heure absolue du début des mesures disponibels, sous forme du nombre de secondes depuis le 1er janvier 1970 (date/heure au format Unix).

dataset→get_summary()

Retourne un objet YMeasure résumant tout le YDataSet.

dataset→get_summaryAvg()

Retourne la valeur moyenne observée durant l'intervalle de temps couvert par ce DataSet.

dataset→get_summaryEndTime()

Retourne l'heure de fin de la dernière mesure du data set, sous forme du nombre de secondes depuis le 1er janvier 1970 UTC (date/heure au format Unix).

dataset→get_summaryMax()

Retourne la plus grande valeur observée durant l'intervalle de temps couvert par ce DataSet.

dataset→get_summaryMin()

Retourne la plus petite valeur observée durant l'intervalle de temps couvert par ce DataSet.

dataset→get_summaryStartTime()

Retourne l'heure absolue de la première mesure du data set, sous forme du nombre de secondes depuis le 1er janvier 1970 UTC (date/heure au format Unix).

dataset→get_unit()

Retourne l'unité dans laquelle la valeur mesurée est exprimée.

dataset→loadMore()

Procède au chargement du bloc suivant de mesures depuis l'enregistreur de données du module, et met à jour l'indicateur d'avancement.

dataset→loadMore_async(callback, context)

Procède au chargement du bloc suivant de mesures depuis l'enregistreur de données du module, de manière asynchrone.

YDataSet.Init()
YDataSet.Init()

Retourne un objet YDataSet permettant de charger les mesures d'un capteur donné par son nom ou identifiant matériel, pour un intervalle de temps spécifié.

Les données seront récupérées depuis la mémoire du data logger, qui devra avoir été précédemment activé au moment désiré. Les méthodes de la classe YDataSet permettent d'obtenir un aperçu des mesures pour la période, et de charger progressivement une grande quantité de mesures depuis le dataLogger.

Paramètres :

sensorNamenom logique ou identifiant matériel du capteur dont les données doivent être récupérées dans la data logger.
startTimele début de l'intervalle de mesure désiré, c'est à dire en nombre de secondes depuis le 1er janvier 1970 UTC. La valeur 0 peut être utilisée pour ne poser aucune limite sur le début des mesures.
endTimela find de l'intercalle de mesure désiré, c'est à dire en nombre de secondes depuis le 1er janvier 1970 UTC. La valeur 0 peut être utilisée pour ne poser aucune limite de fin.

Retourne :

une instance de YDataSet, dont les méthodes permettent de d'accéder aux données historiques souhaitées.

dataset→get_endTimeUTC()
dataset→endTimeUTC()
dataset.get_endTimeUTC()dataset→get_endTimeUTC()[dataset endTimeUTC]dataset.get_endTimeUTC()dataset.get_endTimeUTC()dataset.get_endTimeUTC()dataset.get_endTimeUTC()dataset.get_endTimeUTC()dataset.get_endTimeUTC()dataset→get_endTimeUTC()dataset.get_endTimeUTC()dataset.get_endTimeUTC()dataset.get_endTimeUTC()

Retourne l'heure absolue de la fin des mesures disponibles, sous forme du nombre de secondes depuis le 1er janvier 1970 (date/heure au format Unix).

js
function get_endTimeUTC()
cpp
s64 get_endTimeUTC()
m
-(s64) endTimeUTC
pas
int64 get_endTimeUTC(): int64
vb
function get_endTimeUTC() As Long
cs
long get_endTimeUTC()
java
long get_endTimeUTC()
uwp
async Task<long> get_endTimeUTC()
py
get_endTimeUTC()
php
function get_endTimeUTC()
es
async get_endTimeUTC()
dnp
long get_endTimeUTC()
cp
s64 get_endTimeUTC()

Lorsque l'objet YDataSet est créé, l'heure de fin est celle qui a été passée en paramètre à la fonction get_dataSet. Dès le premier appel à la méthode loadMore(), l'heure de fin est mise à jour à la dernière mesure effectivement disponible dans l'enregistreur de données pour la plage spécifiée.

OBSOLÈTE: cette methode a été remplacé par get_summary() qui retoure des informations plus précises.

Retourne :

un entier positif correspondant au nombre de secondes écoulées entre le 1er janvier 1970 et la dernière mesure.

dataset→get_functionId()
dataset→functionId()
dataset.get_functionId()dataset→get_functionId()[dataset functionId]dataset.get_functionId()dataset.get_functionId()dataset.get_functionId()dataset.get_functionId()dataset.get_functionId()dataset.get_functionId()dataset→get_functionId()dataset.get_functionId()dataset.get_functionId()dataset.get_functionId()

Retourne l'identifiant matériel de la fonction qui a effectué les mesures, sans référence au module.

js
function get_functionId()
cpp
string get_functionId()
m
-(NSString*) functionId
pas
string get_functionId(): string
vb
function get_functionId() As String
cs
string get_functionId()
java
String get_functionId()
uwp
async Task<string> get_functionId()
py
get_functionId()
php
function get_functionId()
es
async get_functionId()
dnp
string get_functionId()
cp
string get_functionId()

Par example temperature1.

Retourne :

une chaîne de caractères identifiant la fonction (ex: temperature1)

dataset→get_hardwareId()
dataset→hardwareId()
dataset.get_hardwareId()dataset→get_hardwareId()[dataset hardwareId]dataset.get_hardwareId()dataset.get_hardwareId()dataset.get_hardwareId()dataset.get_hardwareId()dataset.get_hardwareId()dataset.get_hardwareId()dataset→get_hardwareId()dataset.get_hardwareId()dataset.get_hardwareId()dataset.get_hardwareId()

Retourne l'identifiant matériel unique de la fonction qui a effectué les mesures, au format SERIAL.FUNCTIONID.

js
function get_hardwareId()
cpp
string get_hardwareId()
m
-(NSString*) hardwareId
pas
string get_hardwareId(): string
vb
function get_hardwareId() As String
cs
string get_hardwareId()
java
String get_hardwareId()
uwp
async Task<string> get_hardwareId()
py
get_hardwareId()
php
function get_hardwareId()
es
async get_hardwareId()
dnp
string get_hardwareId()
cp
string get_hardwareId()

L'identifiant unique est composé du numéro de série du module et de l'identifiant matériel de la fonction (par example THRMCPL1-123456.temperature1).

Retourne :

une chaîne de caractères identifiant la fonction (ex: THRMCPL1-123456.temperature1)

En cas d'erreur, déclenche une exception ou retourne Y_HARDWAREID_INVALID.

dataset→get_measures()
dataset→measures()
dataset.get_measures()dataset→get_measures()[dataset measures]dataset.get_measures()dataset.get_measures()dataset.get_measures()dataset.get_measures()dataset.get_measures()dataset.get_measures()dataset→get_measures()dataset.get_measures()dataset.get_measures()dataset.get_measures()

Retourne toutes les mesures déjà disponibles pour le DataSet, sous forme d'une liste d'objets YMeasure.

js
function get_measures()
cpp
vector<YMeasure> get_measures()
m
-(NSMutableArray*) measures
pas
TYMeasureArray get_measures(): TYMeasureArray
vb
function get_measures() As List
cs
List<YMeasure> get_measures()
java
ArrayList<YMeasure> get_measures()
uwp
async Task<List<YMeasure>> get_measures()
py
get_measures()
php
function get_measures()
es
async get_measures()
dnp
YMeasure[] get_measures()
cp
vector<YMeasure> get_measures()

Chaque élément contient: - le moment ou la mesure a débuté - le moment ou la mesure s'est terminée - la valeur minimale observée dans l'intervalle de temps - la valeur moyenne observée dans l'intervalle de temps - la valeur maximale observée dans l'intervalle de temps

Avant d'appeler cette méthode, vous devez appeler loadMore() pour charger des données depuis l'enregistreur sur le module. L'appel doit être répété plusieurs fois pour charger toutes les données, mais vous pouvez commencer à utiliser les données disponibles avant qu'elles n'aient été toutes chargées

Les mesures les plus anciennes sont toujours chargées les premières, et les plus récentes en dernier. De ce fait, les timestamps dans la table des mesures sont normalement par ordre chronologique. La seule exception est dans le cas où il y a eu un ajustement de l'horloge UTC de l'enregistreur de données pendant l'enregistrement.

Retourne :

un tableau d'enregistrements, chaque enregistrement représentant une mesure effectuée à un moment précis.

En cas d'erreur, déclenche une exception ou retourne un tableau vide.

dataset→get_measuresAt()
dataset→measuresAt()
dataset.get_measuresAt()dataset→get_measuresAt()[dataset measuresAt: ]dataset.get_measuresAt()dataset.get_measuresAt()dataset.get_measuresAt()dataset.get_measuresAt()dataset.get_measuresAt()dataset.get_measuresAt()dataset→get_measuresAt()dataset.get_measuresAt()dataset.get_measuresAt()dataset.get_measuresAt()

Retourne les mesures détaillées pour une mesure résumée précédemment retournée par get_preview().

js
function get_measuresAt(measure)
cpp
vector<YMeasure> get_measuresAt(YMeasure measure)
m
-(NSMutableArray*) measuresAt: (YMeasure*) measure
pas
TYMeasureArray get_measuresAt(measure: TYMeasure): TYMeasureArray
vb
function get_measuresAt(ByVal measure As YMeasure) As List
cs
List<YMeasure> get_measuresAt(YMeasure measure)
java
ArrayList<YMeasure> get_measuresAt(YMeasure measure)
uwp
async Task<List<YMeasure>> get_measuresAt(YMeasure measure)
py
get_measuresAt(measure)
php
function get_measuresAt($measure)
es
async get_measuresAt(measure)
dnp
YMeasure[] get_measuresAt(YMeasure measure)
cp
vector<YMeasure> get_measuresAt(YMeasure measure)

Le résultat est fourni sous forme d'une liste d'objets YMeasure.

Paramètres :

measuremesure résumée extraite de la liste précédemment retournée par get_preview().

Retourne :

un tableau d'enregistrements, chaque enregistrement représentant les mesures observée durant un certain intervalle de temps.

En cas d'erreur, déclenche une exception ou retourne un tableau vide.

dataset→get_measuresAvgAt()
dataset→measuresAvgAt()

Retourne la valeur moyenne observée durant l'intervalle de temps couvert par l'entrée spécifiée du résumé des mesures.

Paramètres :

indexun entier dans la plage [0...MeasuresRecordCount-1].

Retourne :

un nombre décimal correspondant à la valeur moyenne observée.

dataset→get_measuresEndTimeAt()
dataset→measuresEndTimeAt()

Retourne l'heure de fin de l'entrée spécifiée du résumé des mesures, sous forme du nombre de secondes depuis le 1er janvier 1970 UTC (date/heure au format Unix).

Lors que l'enregistrement de données se fait à une fréquence supérieure à une mesure par seconde, le timestamp peuvent inclurent une fraction décimale.

Paramètres :

indexun entier dans la plage [0...MeasuresRecordCount-1].

Retourne :

un nombre réel positif correspondant au nombre de secondes écoulées entre le 1er janvier 1970 UTC et la fin de la mesure.

dataset→get_measuresMaxAt()
dataset→measuresMaxAt()

Retourne la plus grande valeur observée durant l'intervalle de temps couvert par l'entrée spécifiée du résumé des mesures.

Paramètres :

indexun entier dans la plage [0...MeasuresRecordCount-1].

Retourne :

un nombre décimal correspondant à la plus grande valeur observée.

dataset→get_measuresMinAt()
dataset→measuresMinAt()

Retourne la plus petite valeur observée durant l'intervalle de temps couvert par l'entrée spécifiée du résumé des mesures.

Paramètres :

indexun entier dans la plage [0...MeasuresRecordCount-1].

Retourne :

un nombre décimal correspondant à la plus petite valeur observée.

dataset→get_measuresRecordCount()
dataset→measuresRecordCount()

Retourne le nombre de mesures déja chargées pour ce DataSet.

Le nombre total de mesures disponible n'est connu que lorsque toutes les mesures sont chargées, c'est-à-dire quand loadMore() a été appelé en boucle jusqu'à ce que l'indicateur d'avancement retourne 100.

Retourne :

un nombre entier correspondant au nombre d'entrées déjà chargées.

dataset→get_measuresStartTimeAt()
dataset→measuresStartTimeAt()

Retourne l'heure absolue de l'entrée spécifiée du résumé des mesures, sous forme du nombre de secondes depuis le 1er janvier 1970 UTC (date/heure au format Unix).

Lors que l'enregistrement de données se fait à une fréquence supérieure à une mesure par seconde, le timestamp peuvent inclurent une fraction décimale.

Paramètres :

indexun entier dans la plage [0...MeasuresRecordCount-1].

Retourne :

un nombre réel positif correspondant au nombre de secondes écoulées entre le 1er janvier 1970 UTC et la début de la mesure.

dataset→get_preview()
dataset→preview()
dataset.get_preview()dataset→get_preview()[dataset preview]dataset.get_preview()dataset.get_preview()dataset.get_preview()dataset.get_preview()dataset.get_preview()dataset.get_preview()dataset→get_preview()dataset.get_preview()dataset.get_preview()dataset.get_preview()

Retourne une version résumée des mesures qui pourront être obtenues de ce YDataSet, sous forme d'une liste d'objets YMeasure.

js
function get_preview()
cpp
vector<YMeasure> get_preview()
m
-(NSMutableArray*) preview
pas
TYMeasureArray get_preview(): TYMeasureArray
vb
function get_preview() As List
cs
List<YMeasure> get_preview()
java
ArrayList<YMeasure> get_preview()
uwp
async Task<List<YMeasure>> get_preview()
py
get_preview()
php
function get_preview()
es
async get_preview()
dnp
YMeasure[] get_preview()
cp
vector<YMeasure> get_preview()

Chaque élément contient: - le début d'un intervalle de temps - la fin d'un intervalle de temps - la valeur minimale observée dans l'intervalle de temps - la valeur moyenne observée dans l'intervalle de temps - la valeur maximale observée dans l'intervalle de temps

Le résumé des mesures est disponible dès que loadMore() a été appelé pour la première fois.

Retourne :

un tableau d'enregistrements, chaque enregistrement représentant les mesures observée durant un certain intervalle de temps.

En cas d'erreur, déclenche une exception ou retourne un tableau vide.

dataset→get_previewAvgAt()
dataset→previewAvgAt()

Retourne la valeur moyenne observée durant l'intervalle de temps couvert par l'entrée spécifiée du résumé des mesures.

Paramètres :

indexun entier dans la plage [0...PreviewRecordCount-1].

Retourne :

un nombre décimal correspondant à la valeur moyenne observée.

dataset→get_previewEndTimeAt()
dataset→previewEndTimeAt()

Retourne l'heure de fin de l'entrée spécifiée du résumé des mesures, sous forme du nombre de secondes depuis le 1er janvier 1970 UTC (date/heure au format Unix).

Lors que l'enregistrement de données se fait à une fréquence supérieure à une mesure par seconde, le timestamp peuvent inclurent une fraction décimale.

Paramètres :

indexun entier dans la plage [0...PreviewRecordCount-1].

Retourne :

un nombre réel positif correspondant au nombre de secondes écoulées entre le 1er janvier 1970 UTC et la fin de la mesure.

dataset→get_previewMaxAt()
dataset→previewMaxAt()

Retourne la plus grande valeur observée durant l'intervalle de temps couvert par l'entrée spécifiée du résumé des mesures.

Paramètres :

indexun entier dans la plage [0...PreviewRecordCount-1].

Retourne :

un nombre décimal correspondant à la plus grande valeur observée.

dataset→get_previewMinAt()
dataset→previewMinAt()

Retourne la plus petite valeur observée durant l'intervalle de temps couvert par l'entrée spécifiée du résumé des mesures.

Paramètres :

indexun entier dans la plage [0...PreviewRecordCount-1].

Retourne :

un nombre décimal correspondant à la plus petite valeur observée.

dataset→get_previewRecordCount()
dataset→previewRecordCount()

Retourne le nombre d'entrées dans la version résumée des mesures qui pourront être obtenues dans ce YDataSet.

Retourne :

un nombre entier correspondant au nombre d'entrées dans le résumé.

dataset→get_previewStartTimeAt()
dataset→previewStartTimeAt()

Retourne l'heure absolue de l'entrée spécifiée du résumé des mesures, sous forme du nombre de secondes depuis le 1er janvier 1970 UTC (date/heure au format Unix).

Lors que l'enregistrement de données se fait à une fréquence supérieure à une mesure par seconde, le timestamp peuvent inclurent une fraction décimale.

Paramètres :

indexun entier dans la plage [0...PreviewRecordCount-1].

Retourne :

un nombre réel positif correspondant au nombre de secondes écoulées entre le 1er janvier 1970 UTC et la début de la mesure.

dataset→get_progress()
dataset→progress()
dataset.get_progress()dataset→get_progress()[dataset progress]dataset.get_progress()dataset.get_progress()dataset.get_progress()dataset.get_progress()dataset.get_progress()dataset.get_progress()dataset→get_progress()dataset.get_progress()dataset.get_progress()dataset.get_progress()

Retourne l'état d'avancement du chargement des données, sur une échelle de 0 à 100.

js
function get_progress()
cpp
int get_progress()
m
-(int) progress
pas
LongInt get_progress(): LongInt
vb
function get_progress() As Integer
cs
int get_progress()
java
int get_progress()
uwp
async Task<int> get_progress()
py
get_progress()
php
function get_progress()
es
async get_progress()
dnp
int get_progress()
cp
int get_progress()

A l'instanciation de l'objet par la fonction get_dataSet(), l'avancement est nul. Au fur et à mesure des appels à loadMore(), l'avancement progresse pour atteindre la valeur 100 lorsque toutes les mesures ont été chargées.

Retourne :

un nombre entier entre 0 et 100 représentant l'avancement du chargement des données demandées.

dataset→get_startTimeUTC()
dataset→startTimeUTC()
dataset.get_startTimeUTC()dataset→get_startTimeUTC()[dataset startTimeUTC]dataset.get_startTimeUTC()dataset.get_startTimeUTC()dataset.get_startTimeUTC()dataset.get_startTimeUTC()dataset.get_startTimeUTC()dataset.get_startTimeUTC()dataset→get_startTimeUTC()dataset.get_startTimeUTC()dataset.get_startTimeUTC()dataset.get_startTimeUTC()

Retourne l'heure absolue du début des mesures disponibels, sous forme du nombre de secondes depuis le 1er janvier 1970 (date/heure au format Unix).

js
function get_startTimeUTC()
cpp
s64 get_startTimeUTC()
m
-(s64) startTimeUTC
pas
int64 get_startTimeUTC(): int64
vb
function get_startTimeUTC() As Long
cs
long get_startTimeUTC()
java
long get_startTimeUTC()
uwp
async Task<long> get_startTimeUTC()
py
get_startTimeUTC()
php
function get_startTimeUTC()
es
async get_startTimeUTC()
dnp
long get_startTimeUTC()
cp
s64 get_startTimeUTC()

Lorsque l'objet YDataSet est créé, l'heure de départ est celle qui a été passée en paramètre à la fonction get_dataSet. Dès le premier appel à la méthode loadMore(), l'heure de départ est mise à jour à la première mesure effectivement disponible dans l'enregistreur de données pour la plage spécifiée.

OBSOLÈTE: cette methode a été remplacé par get_summary() qui retoure des informations plus précises.

Retourne :

un entier positif correspondant au nombre de secondes écoulées entre le 1er janvier 1970 et la première mesure enregistrée.

dataset→get_summary()
dataset→summary()
dataset.get_summary()dataset→get_summary()[dataset summary]dataset.get_summary()dataset.get_summary()dataset.get_summary()dataset.get_summary()dataset.get_summary()dataset.get_summary()dataset→get_summary()dataset.get_summary()dataset.get_summary()dataset.get_summary()

Retourne un objet YMeasure résumant tout le YDataSet.

js
function get_summary()
cpp
YMeasure get_summary()
m
-(YMeasure*) summary
pas
TYMeasure get_summary(): TYMeasure
vb
function get_summary() As YMeasure
cs
YMeasure get_summary()
java
YMeasure get_summary()
uwp
async Task<YMeasure> get_summary()
py
get_summary()
php
function get_summary()
es
async get_summary()
dnp
YMeasure get_summary()
cp
YMeasure get_summary()

Il inclut les information suivantes: - le moment de la première mesure - le moment de la dernière mesure - la valeur minimale observée dans l'intervalle de temps - la valeur moyenne observée dans l'intervalle de temps - la valeur maximale observée dans l'intervalle de temps

Ce résumé des mesures est disponible dès que loadMore() a été appelé pour la première fois.

Retourne :

un objet YMeasure

dataset→get_summaryAvg()
dataset→summaryAvg()

Retourne la valeur moyenne observée durant l'intervalle de temps couvert par ce DataSet.

Retourne :

un nombre décimal correspondant à la valeur moyenne observée.

dataset→get_summaryEndTime()
dataset→summaryEndTime()

Retourne l'heure de fin de la dernière mesure du data set, sous forme du nombre de secondes depuis le 1er janvier 1970 UTC (date/heure au format Unix).

Lors que l'enregistrement de données se fait à une fréquence supérieure à une mesure par seconde, le timestamp peuvent inclurent une fraction décimale.

Retourne :

un nombre réel positif correspondant au nombre de secondes écoulées entre le 1er janvier 1970 UTC et la fin de la mesure.

dataset→get_summaryMax()
dataset→summaryMax()

Retourne la plus grande valeur observée durant l'intervalle de temps couvert par ce DataSet.

Retourne :

un nombre décimal correspondant à la plus grande valeur observée.

dataset→get_summaryMin()
dataset→summaryMin()

Retourne la plus petite valeur observée durant l'intervalle de temps couvert par ce DataSet.

Retourne :

un nombre décimal correspondant à la plus petite valeur observée.

dataset→get_summaryStartTime()
dataset→summaryStartTime()

Retourne l'heure absolue de la première mesure du data set, sous forme du nombre de secondes depuis le 1er janvier 1970 UTC (date/heure au format Unix).

Lors que l'enregistrement de données se fait à une fréquence supérieure à une mesure par seconde, le timestamp peuvent inclurent une fraction décimale.

Retourne :

un nombre réel positif correspondant au nombre de secondes écoulées entre le 1er janvier 1970 UTC et la début de la mesure.

dataset→get_unit()
dataset→unit()
dataset.get_unit()dataset→get_unit()[dataset unit]dataset.get_unit()dataset.get_unit()dataset.get_unit()dataset.get_unit()dataset.get_unit()dataset.get_unit()dataset→get_unit()dataset.get_unit()dataset.get_unit()dataset.get_unit()

Retourne l'unité dans laquelle la valeur mesurée est exprimée.

js
function get_unit()
cpp
string get_unit()
m
-(NSString*) unit
pas
string get_unit(): string
vb
function get_unit() As String
cs
string get_unit()
java
String get_unit()
uwp
async Task<string> get_unit()
py
get_unit()
php
function get_unit()
es
async get_unit()
dnp
string get_unit()
cp
string get_unit()

Retourne :

une chaîne de caractères représentant une unité physique.

En cas d'erreur, déclenche une exception ou retourne Y_UNIT_INVALID.

dataset→loadMore()dataset.loadMore()dataset→loadMore()[dataset loadMore]dataset.loadMore()dataset.loadMore()dataset.loadMore()dataset.loadMore()dataset.loadMore()dataset.loadMore()dataset→loadMore()dataset.loadMore()dataset.loadMore()dataset.loadMore()

Procède au chargement du bloc suivant de mesures depuis l'enregistreur de données du module, et met à jour l'indicateur d'avancement.

js
function loadMore()
cpp
int loadMore()
m
-(int) loadMore
pas
LongInt loadMore(): LongInt
vb
function loadMore() As Integer
cs
int loadMore()
java
int loadMore()
uwp
async Task<int> loadMore()
py
loadMore()
php
function loadMore()
es
async loadMore()
dnp
int loadMore()
cp
int loadMore()

Retourne :

un nombre entier entre 0 et 100 représentant l'avancement du chargement des données demandées, ou un code d'erreur négatif en cas de problème.

En cas d'erreur, déclenche une exception ou retourne un code d'erreur négatif.

dataset→loadMore_async()dataset.loadMore_async()

Procède au chargement du bloc suivant de mesures depuis l'enregistreur de données du module, de manière asynchrone.

js
function loadMore_async(callback, context)

Paramètres :

callbackfonction fournie par l'utilisateur, qui sera appelée lorsque la suite du chargement aura été effectué. La fonction callback doit prendre trois arguments: - la variable de contexte à disposition de l'utilisateur - l'objet YDataSet dont la méthode loadMore_async a été appelée - le résultat de l'appel: soit l'état d'avancement du chargement (0...100), ou un code d'erreur négatif en cas de problème.
contextvariable de contexte à disposition de l'utilisateur

Retourne :

rien.

24.8. La classe YMeasure

Valeur mesurée, retournée en particulier par les méthodes de la classe YDataSet.

Les objets YMeasure sont utilisés dans l'interface de programmation Yoctopuce pour représenter une valeur observée à un moment donnée. Ces objets sont utilisés en particulier en conjonction avec la classe YDataSet, mais aussi par les notification périodique des capteurs configurées (voir sensor.registerTimedReportCallback).

Pour utiliser les fonctions décrites ici, vous devez inclure:

js
<script type='text/javascript' src='yocto_module.js'></script>
cpp
#include "yocto_module.h"
m
#import "yocto_module.h"
pas
uses yocto_module;
vb
yocto_module.vb
cs
yocto_module.cs
java
import com.yoctopuce.YoctoAPI.YMeasure;
uwp
import com.yoctopuce.YoctoAPI.YMeasure;
py
from yocto_module import *
php
require_once('yocto_module.php');
es
in HTML: <script src="../../lib/yocto_module.js"></script>
in node.js: require('yoctolib-es2017/yocto_module.js');
Méthodes des objets YMeasure
measure→get_averageValue()

Retourne la valeur moyenne observée durant l'intervalle de temps couvert par la mesure.

measure→get_endTimeUTC()

Retourne l'heure absolue de la fin de la mesure, sous forme du nombre de secondes depuis le 1er janvier 1970 UTC (date/heure au format Unix).

measure→get_maxValue()

Retourne la plus grande valeur observée durant l'intervalle de temps couvert par la mesure.

measure→get_minValue()

Retourne la plus petite valeur observée durant l'intervalle de temps couvert par la mesure.

measure→get_startTimeUTC()

Retourne l'heure absolue du début de la mesure, sous forme du nombre de secondes depuis le 1er janvier 1970 UTC (date/heure au format Unix).

measure→get_averageValue()
measure→averageValue()
measure.get_averageValue()measure→get_averageValue()[measure averageValue]measure.get_averageValue()measure.get_averageValue()measure.get_averageValue()measure.get_averageValue()measure.get_averageValue()measure.get_averageValue()measure→get_averageValue()measure.get_averageValue()

Retourne la valeur moyenne observée durant l'intervalle de temps couvert par la mesure.

js
function get_averageValue()
cpp
double get_averageValue()
m
-(double) averageValue
pas
double get_averageValue(): double
vb
function get_averageValue() As Double
cs
double get_averageValue()
java
double get_averageValue()
uwp
double get_averageValue()
py
get_averageValue()
php
function get_averageValue()
es
get_averageValue()

Retourne :

un nombre décimal correspondant à la valeur moyenne observée.

measure→get_endTimeUTC()
measure→endTimeUTC()
measure.get_endTimeUTC()measure→get_endTimeUTC()[measure endTimeUTC]measure.get_endTimeUTC()measure.get_endTimeUTC()measure.get_endTimeUTC()measure.get_endTimeUTC()measure.get_endTimeUTC()measure.get_endTimeUTC()measure→get_endTimeUTC()measure.get_endTimeUTC()

Retourne l'heure absolue de la fin de la mesure, sous forme du nombre de secondes depuis le 1er janvier 1970 UTC (date/heure au format Unix).

js
function get_endTimeUTC()
cpp
double get_endTimeUTC()
m
-(double) endTimeUTC
pas
double get_endTimeUTC(): double
vb
function get_endTimeUTC() As Double
cs
double get_endTimeUTC()
java
double get_endTimeUTC()
uwp
double get_endTimeUTC()
py
get_endTimeUTC()
php
function get_endTimeUTC()
es
get_endTimeUTC()

Lors que l'enregistrement de données se fait à une fréquence supérieure à une mesure par seconde, le timestamp peuvent inclurent une fraction décimale.

Retourne :

un nombre réel positif correspondant au nombre de secondes écoulées entre le 1er janvier 1970 UTC et la fin de la mesure.

measure→get_maxValue()
measure→maxValue()
measure.get_maxValue()measure→get_maxValue()[measure maxValue]measure.get_maxValue()measure.get_maxValue()measure.get_maxValue()measure.get_maxValue()measure.get_maxValue()measure.get_maxValue()measure→get_maxValue()measure.get_maxValue()

Retourne la plus grande valeur observée durant l'intervalle de temps couvert par la mesure.

js
function get_maxValue()
cpp
double get_maxValue()
m
-(double) maxValue
pas
double get_maxValue(): double
vb
function get_maxValue() As Double
cs
double get_maxValue()
java
double get_maxValue()
uwp
double get_maxValue()
py
get_maxValue()
php
function get_maxValue()
es
get_maxValue()

Retourne :

un nombre décimal correspondant à la plus grande valeur observée.

measure→get_minValue()
measure→minValue()
measure.get_minValue()measure→get_minValue()[measure minValue]measure.get_minValue()measure.get_minValue()measure.get_minValue()measure.get_minValue()measure.get_minValue()measure.get_minValue()measure→get_minValue()measure.get_minValue()

Retourne la plus petite valeur observée durant l'intervalle de temps couvert par la mesure.

js
function get_minValue()
cpp
double get_minValue()
m
-(double) minValue
pas
double get_minValue(): double
vb
function get_minValue() As Double
cs
double get_minValue()
java
double get_minValue()
uwp
double get_minValue()
py
get_minValue()
php
function get_minValue()
es
get_minValue()

Retourne :

un nombre décimal correspondant à la plus petite valeur observée.

measure→get_startTimeUTC()
measure→startTimeUTC()
measure.get_startTimeUTC()measure→get_startTimeUTC()[measure startTimeUTC]measure.get_startTimeUTC()measure.get_startTimeUTC()measure.get_startTimeUTC()measure.get_startTimeUTC()measure.get_startTimeUTC()measure.get_startTimeUTC()measure→get_startTimeUTC()measure.get_startTimeUTC()

Retourne l'heure absolue du début de la mesure, sous forme du nombre de secondes depuis le 1er janvier 1970 UTC (date/heure au format Unix).

js
function get_startTimeUTC()
cpp
double get_startTimeUTC()
m
-(double) startTimeUTC
pas
double get_startTimeUTC(): double
vb
function get_startTimeUTC() As Double
cs
double get_startTimeUTC()
java
double get_startTimeUTC()
uwp
double get_startTimeUTC()
py
get_startTimeUTC()
php
function get_startTimeUTC()
es
get_startTimeUTC()

Lors que l'enregistrement de données se fait à une fréquence supérieure à une mesure par seconde, le timestamp peuvent inclurent une fraction décimale.

Retourne :

un nombre réel positif correspondant au nombre de secondes écoulées entre le 1er janvier 1970 UTC et la début de la mesure.

25. Problèmes courants

25.1. Par où commencer ?

Si c'est la première fois que vous utilisez un module Yoctopuce et ne savez pas trop par où commencer, allez donc jeter un coup d'œil sur le blog de Yoctopuce. Il y a une section dédiée aux débutants 62.

25.2. Linux et USB

Pour fonctionner correctement sous Linux la librairie a besoin d'avoir accès en écriture à tous les périphériques USB Yoctopuce. Or, par défaut, sous Linux les droits d'accès des utilisateurs non-root à USB sont limités à la lecture. Afin d'éviter de devoir lancer les exécutables en tant que root, il faut créer une nouvelle règle udev pour autoriser un ou plusieurs utilisateurs à accéder en écriture aux périphériques Yoctopuce.

Pour ajouter une règle udev à votre installation, il faut ajouter un fichier avec un nom au format "##-nomArbitraire.rules" dans le répertoire "/etc/udev/rules.d". Lors du démarrage du système, udev va lire tous les fichiers avec l'extension ".rules" de ce répertoire en respectant l'ordre alphabétique (par exemple, le fichier "51-custom.rules" sera interprété APRES le fichier "50-udev-default.rules").

Le fichier "50-udev-default" contient les règles udev par défaut du système. Pour modifier le comportement par défaut du système, il faut donc créer un fichier qui commence par un nombre plus grand que 50, qui définira un comportement plus spécifique que le défaut du système. Notez que pour ajouter une règle vous aurez besoin d'avoir un accès root sur le système.

Dans le répertoire udev_conf de l'archive du VirtualHub63 pour Linux, vous trouverez deux exemples de règles qui vous éviterons de devoir partir de rien.

Exemple 1: 51-yoctopuce.rules

Cette règle va autoriser tous les utilisateurs à accéder en lecture et en écriture aux périphériques Yoctopuce USB. Les droits d'accès pour tous les autres périphériques ne seront pas modifiés. Si ce scénario vous convient il suffit de copier le fichier "51-yoctopuce_all.rules" dans le répertoire "/etc/udev/rules.d" et de redémarrer votre système.

# udev rules to allow write access to all users # for Yoctopuce USB devices SUBSYSTEM=="usb", ATTR{idVendor}=="24e0", MODE="0666"

Exemple 2: 51-yoctopuce_group.rules

Cette règle va autoriser le groupe "yoctogroup" à accéder en lecture et écriture aux périphériques Yoctopuce USB. Les droits d'accès pour tous les autres périphériques ne seront pas modifiés. Si ce scénario vous convient il suffit de copier le fichier "51-yoctopuce_group.rules" dans le répertoire "/etc/udev/rules.d" et de redémarrer votre système.

# udev rules to allow write access to all users of "yoctogroup" # for Yoctopuce USB devices SUBSYSTEM=="usb", ATTR{idVendor}=="24e0", MODE="0664", GROUP="yoctogroup"

25.3. Plateformes ARM: HF et EL

Sur ARM il existe deux grandes familles d'executables: HF (Hard Float) et EL (EABI Little Endian). Ces deux familles ne sont absolument pas compatibles entre elles. La capacité d'une machine ARM à faire tourner des exécutables de l'une ou l'autre de ces familles dépend du hardware et du système d'exploitation. Les problèmes de compatibilité entre ArmHL et ArmEL sont assez difficiles à diagnostiquer, souvent même l'OS se révèle incapable de distinguer un exécutable HF d'un exécutable EL.

Tous les binaires Yoctopuce pour ARM sont fournis pré-compilée pour ArmHF et ArmEL, si vous ne savez à quelle famille votre machine ARM apartient, essayez simplement de lancer un exécutable de chaque famille.

25.4. Les exemples de programmation n'ont pas l'air de marcher

La plupart des exemples de programmation de l'API Yoctopuce sont des programmes en ligne de commande et ont besoin de quelques paramètres pour fonctionner. Vous devez les lancer depuis l'invite de commande de votre système d'exploitation ou configurer votre IDE pour qu'il passe les paramètres corrects au programme 64.

25.5. Module alimenté mais invisible pour l'OS

Si votre Yocto-RS485 est branché par USB et que sa LED bleue s'allume, mais que le module n'est pas vu par le système d'exploitation, vérifiez que vous utilisez bien un vrai câble USB avec les fils pour les données, et non pas un câble de charge. Les câbles de charge n'ont que les fils d'alimentation.

25.6. Another process named xxx is already using yAPI

Si lors de l'initialisation de l'API Yoctopuce, vous obtenez le message d'erreur "Another process named xxx is already using yAPI", cela signifie qu'une autre application est déjà en train d'utiliser les modules Yoctopuce USB. Sur une même machine, un seul processus à la fois peut accéder aux modules Yoctopuce par USB. Cette limitation peut facilement être contournée en utilisant un VirtualHub et le mode réseau 65.

25.7. Déconnexions, comportement erratique

Si votre Yocto-RS485 se comporte de manière erratique et/ou se déconnecte du bus USB sans raison apparente, vérifiez qu'il est alimenté correctement. Evitez les câbles d'une longueur supérieure à 2 mètres. Au besoin, intercalez un hub USB alimenté 66 67.

25.8. RegisterHub d'un VirtualHub déconnecte le précédent

Si lorsque vous faire un YAPI.RegisterHub d'un VirtualHub la connexion avec un autre virtualHub précédement enregistré tombe, vérifiez que les machines qui hébergent ces VirtualHubs on bien un hostname différent. Ce cas de figure est très courant avec les machines dont le système d'exploitation est installé avec une image monolithique, comme les Raspberry-PI par exemple. L'API Yoctopuce utilise les numéros de série Yoctopuce pour communiquer et le numéro de série d'un VirtualHub est créé à la volée à partir du hostname de la machine qui l'héberge.

25.9. Commandes ignorées

Si vous avez l'impression que des commandes envoyées à un module Yoctopuce sont ignorées, typiquement lorsque vous avez écrit un programme qui sert à configurer ce modules Yoctopuce et qui envoie donc beaucoup de commandes, vérifiez que vous avez bien mis un YAPI.FreeAPI() à la fin du programme. Les commandes sont envoyées aux modules de manière asynchrone grâce à un processus qui tourne en arrière plan. Lorsque le programme se termine, ce processus est tué, même s'il n'a pas eu le temps de tout envoyer. En revanche API.FreeAPI() attend que la file d'attente des commandes à envoyer soit vide avant de libérer les ressources utilisées par l'API et rendre la main.

25.10. Module endommagé

Yoctopuce s'efforce de réduire la production de déchets électroniques. Si vous avez l'impression que votre Yocto-RS485 ne fonctionne plus, commencez par contacter le support Yoctopuce par e-mail pour poser un diagnostic. Même si c'est suite à une mauvaise manipulation que le module a été endommagé, il se peut que Yoctopuce puisse le réparer, et ainsi éviter de créer un déchet électronique.

Déchets d'équipements électriques et électroniques (DEEE) Si voulez vraiment vous débarasser de votre Yocto-RS485, ne le jetez pas à la poubelle, mais ramenez-le à l'un des points de collecte proposé dans votre région afin qu'il soit envoyé à un centre de recyclage ou de traitement spécialisé.



26. Caractéristiques

Vous trouverez résumées ci-dessous les principales caractéristiques techniques de votre module Yocto-RS485

Identifiant produitRS485MK1
Révision matérielle
Connecteur USBmicro-B
Largeur20 mm
Longueur56 mm
Poids8 g
ChipsetADM2587E
Fréquence max115200 bps
Mémoire tampon16 KB
Classe de protection selon IEC 61140classe III
Isolation USB, tension retenue (1 min.)2.5 kV
Temp. de fonctionnement normale5...40 °C
Temp. de fonctionnement étendue-30...85 °C
Conformité RoHSRoHS III (2011/65/UE+2015/863)
USB Vendor ID0x24E0
USB Device ID0x0048
Boîter recommandéYoctoBox-Long-Thick-Black
Code tarifaire harmonisé8542.3190
Fabriqué enSuisse

Ces spécifications correspondent à la révision matérielle actuelle du produit. Les spécifications des versions antérieures peuvent être inférieures.

La plage de température étendue est définie d'après les spécifications des composants et testée sur une durée limitée (1h). En cas d'utilisation prolongée hors de la plage de température standard, il est recommandé procéder à des tests extensifs avant la mise en production.

27. Index

A
advertisedValue
AdvertisedValue
AdvMode
advMode
API
AutoStart
autoStart
B
Beacon
beacon
BeaconDriven
beaconDriven
C
calibrateFromPoints
calibrationParam
checkFirmware
CheckLogicalName
clearCache
clearHistory
ClearHTTPCallbackCacheDir
command
currentJob
currentRawValue
currentRunIndex
currentValue
D
DataLogger
describe
DisableExceptions
download
download_async
E
enabled
Enabled
EnableExceptions
EnableUSBHost
errCount
F
fileExist
Files
FilesCount
filesCount
FindDataLogger
FindDataLoggerInContext
FindFiles
FindFilesInContext
FindGenericSensor
FindGenericSensorInContext
FindModule
FindModuleInContext
FindSerialPort
FindSerialPortInContext
firmwareRelease
FirmwareRelease
FirstDataLogger
FirstDataLoggerInContext
FirstFiles
FirstFilesInContext
FirstGenericSensor
FirstGenericSensorInContext
FirstModule
FirstSerialPort
FirstSerialPortInContext
forgetAllDataStreams
format_fs
FreeAPI
freeSpace
FriendlyName
functionBaseType
functionCount
FunctionId
functionId
functionName
functionType
functionValue
G
GenericSensor
get_advertisedValue
get_advMode
get_allSettings
get_autoStart
get_averageValue
get_beacon
get_beaconDriven
get_CTS
get_currentJob
get_currentRawValue
get_currentRunIndex
get_currentValue
get_dataLogger
get_dataSets
get_dataStreams
get_enabled
get_endTimeUTC
get_errCount
get_errorMessage
get_errorType
get_filesCount
get_firmwareRelease
get_freeSpace
get_friendlyName
get_functionDescriptor
get_functionId
get_functionIds
get_hardwareId
get_highestValue
get_icon2d
get_jobMaxSize
get_jobMaxTask
get_lastLogs
get_lastMsg
get_list
get_logFrequency
get_logicalName
get_lowestValue
get_luminosity
get_maxValue
get_measures
get_measuresAt
get_measuresAvgAt
get_measuresEndTimeAt
get_measuresMaxAt
get_measuresMinAt
get_measuresRecordCount
get_measuresStartTimeAt
get_minValue
get_module
get_module_async
get_parentHub
get_persistentSettings
get_preview
get_previewAvgAt
get_previewEndTimeAt
get_previewMaxAt
get_previewMinAt
get_previewRecordCount
get_previewStartTimeAt
get_productId
get_productName
get_productRelease
get_progress
get_protocol
get_rebootCountdown
get_recordedData
get_recording
get_reportFrequency
get_resolution
get_rxCount
get_rxMsgCount
get_sensorState
get_serialMode
get_serialNumber
get_signalBias
get_signalRange
get_signalSampling
get_signalUnit
get_signalValue
get_startTimeUTC
get_startupJob
get_subDevices
get_summary
get_summaryAvg
get_summaryEndTime
get_summaryMax
get_summaryMin
get_summaryStartTime
get_timeUTC
get_txCount
get_txMsgCount
get_unit
get_upTime
get_url
get_usage
get_usbCurrent
get_userData
get_userVar
get_valueRange
get_voltageLevel
GetAPIVersion
GetCacheValidity
GetDeviceListValidity
GetDllArchitecture
GetDllPath
GetLog
GetNetworkTimeout
GetSimilarFunctions
GetTickCount
H
HandleEvents
HardwareId
hasFunction
highestValue
I
Init
InitAPI
isOnline
IsOnline
isOnline_async
isReadOnly
isSensorReady
J
JobMaxSize
jobMaxSize
jobMaxTask
JobMaxTask
L
lastMsg
load
load_async
loadAttribute
loadCalibrationPoints
loadMore
loadMore_async
log
LogFrequency
logFrequency
logicalName
LogicalName
lowestValue
luminosity
Luminosity
M
modbusReadBits
modbusReadInputBits
modbusReadInputRegisters
modbusReadRegisters
modbusWriteAndReadRegisters
modbusWriteBit
modbusWriteBits
modbusWriteRegister
modbusWriteRegisters
Module
muteValueCallbacks
N
nextDataLogger
nextFiles
nextGenericSensor
nextModule
nextSerialPort
P
persistentSettings
PreregisterHub
ProductId
productId
productName
ProductName
ProductRelease
productRelease
Protocol
protocol
Q
queryHex
queryLine
queryMODBUS
R
read_avail
read_seek
read_tell
readArray
readBin
readByte
readHex
readLine
readMessages
readStr
reboot
rebootCountdown
recording
Recording
registerBeaconCallback
registerConfigChangeCallback
RegisterDeviceArrivalCallback
RegisterDeviceRemovalCallback
RegisterHub
RegisterHubDiscoveryCallback
RegisterHubWebsocketCallback
registerLogCallback
RegisterLogFunction
registerTimedReportCallback
registerValueCallback
remove
reportFrequency
ReportFrequency
reset
Resolution
resolution
revertFromFlash
rxCount
rxMsgCount
S
saveToFlash
SelectArchitecture
selectJob
sensorState
SerialMode
serialMode
SerialNumber
serialNumber
SerialPort
set_advMode
set_allSettings
set_allSettingsAndFiles
set_autoStart
set_beacon
set_beaconDriven
set_currentJob
set_enabled
set_highestValue
set_logFrequency
set_logicalName
set_lowestValue
set_luminosity
set_protocol
set_recording
set_reportFrequency
set_resolution
set_RTS
set_serialMode
set_signalBias
set_signalRange
set_signalSampling
set_startupJob
set_timeUTC
set_unit
set_userData
set_userVar
set_valueRange
set_voltageLevel
SetCacheValidity
SetDelegate
SetDeviceListValidity
SetHTTPCallbackCacheDir
SetNetworkTimeout
SetTimeout
SetUSBPacketAckMs
signalBias
SignalBias
SignalRange
signalRange
signalSampling
SignalSampling
signalUnit
SignalUnit
signalValue
Sleep
snoopMessages
startDataLogger
startupJob
StartupJob
stopDataLogger
T
techspec
TestHub
timeUTC
triggerConfigChangeCallback
triggerFirmwareUpdate
TriggerHubDiscovery
txCount
txMsgCount
U
unit
unmuteValueCallbacks
UnregisterHub
UpdateDeviceList
UpdateDeviceList_async
updateFirmware
updateFirmwareEx
upload
uploadJob
upTime
usage
usbcurrent
usbCurrent
userVar
V
valueRange
ValueRange
voltageLevel
VoltageLevel
W
wait_async
wiring
writeArray
writeBin
writeByte
writeHex
writeLine
writeMODBUS
writeStr
writeStxEtx
Y
YAPI
YDataLogger
YDataSet
YFiles
YGenericSensor
YMeasure
YModule
YSerialPort
Z
zeroAdjust


  1. court-court-court long-long-long court-court-court
  2. support@yoctopuce.com
  3. La présente description de l'isolation électrique s'applique à la dernière révision du produit. Certaines révisions antérieures du produit pourraient disposer de distances d'isolement et de ligne de fuite plus faible. Pour obtenir la distance d'isolement/ligne de fuite d'un module plus ancien, contactez le support Yoctopuce en communiquant le numéro de série du module ou la référence d'achat à votre demande.
  4. Valeur nominale non testée.
  5. http://www.yoctopuce.com/EN/products/category/enclosures
  6. Le driver HID est celui qui gère les périphériques tels que la souris, le clavier, etc.
  7. Le connecteur Mini A a existé quelque temps, mais a été retiré du standard USB http://www.usb.org/developers/Deprecation_Announcement_052507.pdf
  8. www.yoctopuce.com/FR/virtualhub.php
  9. L'interface est testée avec Chrome, FireFox, Safari, Edge et IE 11.
  10. www.yoctopuce.com/FR/virtualhub.php
  11. Consultez la documentation du virtual hub pour plus de détails
  12. www.yoctopuce.com/FR/article/cables-usb-la-taille-compte
  13. La seule combinaison non supportée est 7-N-1 (7 bits, sans parité, un seul stop bit), mais cette combinaison n'est pour ainsi dire jamais utilisée.
  14. http://www.yoctopuce.com/FR/products/accessoires-et-connectique/rs232-snooping-adapter
  15. http://www.yoctopuce.com/FR/libraries.php
  16. Si vous souhaitez recompiler l'API en ligne de commande, vous aurez aussi besoin de l'API C++
  17. http://www.yoctopuce.com/FR/libraries.php
  18. http://www.yoctopuce.com/FR/virtualhub.php
  19. www.yoctopuce.com/FR/libraries.php
  20. www.yoctopuce.com/FR/virtualhub.php
  21. http://babeljs.io
  22. Quelques serveurs PHP gratuits: easyPHP pour windows, MAMP pour Mac Os X
  23. www.yoctopuce.com/FR/libraries.php
  24. www.yoctopuce.com/FR/virtualhub.php
  25. Si vous n'avez pas d'éditeur de texte, utilisez Notepad plutôt que Microsoft Word.
  26. http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express
  27. www.yoctopuce.com/FR/libraries.php
  28. www.yoctopuce.com/FR/libraries.php
  29. www.yoctopuce.com/FR/article/nouvelle-librairie-objective-c-pour-mac-os-x
  30. http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-basic-express
  31. www.yoctopuce.com/FR/libraries.php
  32. Les sources de cette DLL sont disponibles dans l'API C++
  33. Pensez à changer le filtre de la fenêtre de sélection de fichiers, sinon la DLL n'apparaîtra pas
  34. http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-csharp-express
  35. www.yoctopuce.com/FR/libraries.php
  36. Les sources de cette DLL sont disponibles dans l'API C++
  37. Pensez à changer le filtre de la fenêtre de sélection de fichiers, sinon la DLL n'apparaîtra pas
  38. https://www.visualstudio.com/fr/vs/
  39. www.yoctopuce.com/FR/libraries.php
  40. https://www.visualstudio.com/downloads/
  41. En fait, Borland a diffusé des versions gratuites (pour usage personnel) de Delphi 2006 et Delphi 2007, en cherchant un peu sur internet il est encore possible de les télécharger.
  42. Les librairies Delphi sont régulièrement testées avec Delphi 5 et Delphi XE2
  43. www.yoctopuce.com/FR/libraries.php
  44. Utilisez le menu outils / options d'environement
  45. http://www.python.org/download/
  46. www.yoctopuce.com/FR/libraries.php
  47. www.yoctopuce.com/FR/libraries.php
  48. www.yoctopuce.com/FR/virtualhub.php
  49. www.yoctopuce.com/FR/libraries.php
  50. Les YoctoHub sont un moyen simple et efficace d'ajouter une connectivité réseau à vos modules Yoctopuce. http://www.yoctopuce.com/FR/products/category/extensions-et-reseau
  51. http://www.yoctopuce.com/FR/libraries.php
  52. https://knowledge.ni.com/KnowledgeArticleDetails?id=kA00Z000000P8XnSAK
  53. https://forums.ni.com/t5/Developer-Center-Resources/Creating-a-LabVIEW-Palette/ta-p/3520557
  54. www.yoctopuce.com/FR/products/category/extensions-and-networking
  55. http://www.yoctopuce.com/EN/virtualhub.php
  56. voir section Utilisation objets Proxy
  57. www.yoctopuce.com/FR/products/category/extensions-et-reseau
  58. www.yoctopuce.com/FR/virtualhub.php
  59. La valeur passée en paramètre est la même que celle rendue par la méthode get_advertisedValue()
  60. L'objet YMeasure du datalogger est exactement du même type que ceux qui sont passés aux fonctions de callback périodique.
  61. Les librairies JavaScript, Node.js et PHP ne permettent pas encore de mettre à jour les modules, mais ces fonctions seront disponibles dans un prochain build.
  62. voir: http://www.yoctopuce.com/FR/blog_by_categories/pour-les-debutants
  63. http://www.yoctopuce.com/EN/virtualhub.php
  64. voir: http://www.yoctopuce.com/FR/article/a-propos-des-programmes-d-exemples
  65. voir: http://www.yoctopuce.com/FR/article/message-d-erreur-another-process-is-already-using-yapi
  66. voir: http://www.yoctopuce.com/FR/article/cables-usb-la-taille-compte
  67. voir: http://www.yoctopuce.com/FR/article/combien-de-capteurs-usb-peut-on-connecter
Yoctopuce, get your stuff connected.