Sommaire
Les StateObjects sont des objets de données produits et publiés par des packages qu’ils soient “réels” ou “virtuels” d’une Constellation.
Ils représentent des variables de type simple (numérique, chaîne de caractère, booléen, etc..) ou de type complexe (objet formaté en JSON).
Les StateObjects sont tous stockés sur le serveur Constellation et peuvent être interrogés par n’importe quels packages ou consommateurs de la Constellation (sauf si des autorisations restreignent l’accès).
Le StateObject
Chaque StateObject comporte :
- Le nom de la sentinelle et du package qui a produit le StateObject
- Un nom (la clé d’un StateObject)
- Une valeur
- Une date de mise à jour
- Une durée de vie en seconde (“0” si infinie)
- Un type
- Des métadatas (dictionnaire de clé / valeur)
Dans la philosophie Constellation, chaque package (virtuel ou non) publie des StateObjects représentant des « variables publiques ».
Par exemple un capteur de température Arduino publiera des StateObjects sur la température ou humidité qu’il relève, un package comme le “HWMonitor” publiera des StateObjects sur les compteurs hardware qu’il mesure (consommation CPU, RAM, etc..), ou encore un package comme celui “Paradox” publiera des StateObjects pour chaque zone d’un système d’alarme où chaque StateObject contiendra un objet indiquant l’état de la zone (ouverte/fermée, en alarme ou non, en défaut ou non, etc..).
Le « StateObject Explorer » de la Console Constellation permet d’explorer l’ensemble des StateObjects de la Constellation :
Avec la possibilité de visualiser tous les détails et de vous abonner aux mises à jour en temps réel :
La capture ci-dessus montre un StateObject produit par le package “NetAtmo” qui représente le détail d’un capteur NetAtmo (Id, version du firmware, nom du capteur, statuts de la communication, niveau de la batterie, etc..).
Comme chaque package peut publier des StateObjects dans Constellation, il est possible en interrogeant les StateObjects de votre Constellation de connaitre en temps réel l’état de tous vos systèmes (ou du moins “le dernier état connu”).
A noter que l’unicité d’un StateObject est obtenu par le triplet : “Sentinel + Package + Nom” car un nom de StateObject est unique pour une instance de package (couple Sentinel / Package), de même qu’un package est un unique pour une sentinelle et qu’une sentinelle est unique dans une Constellation.
Interrogation, abonnement et filtre
Dans les librairies Constellation (JavaScript, .NET, Python, Arduino, etc..) et d’un point de vue plus générique avec les interfaces REST Constellation vous allez retrouver les mêmes fonctionnalités :
- Le “Request” de StateObject
- Le “Subscribe” de StateObject
Le “Request” permet de récupérer la dernière valeur connue d’un ou de plusieurs StateObjects.
Le ”Subscribe” permet de créer un abonnement sur un ou plusieurs StateObjects. Une fois abonné, vous serez notifié en temps réel des qu’un StateObject de votre abonnement est mis à jour.
Dans ces deux méthodes vous serez amené à définir le ou les StateObjects que vous souhaitez récupérer ou suivre. Pour cela vous devez définir un filtre en indiquant :
- Le nom de la sentinelle du StateObject
- Le nom du package du StateObject
- Le nom du StateObject
- Le type du StateObject
Pour chaque filtre vous pourrez appliquer le wildcard “*” pour accepter toutes les valeurs possibles.
Ainsi appliquer le filtre /// sélectionnera tous les StateObjects de votre Constellation. N’oubliez pas que l’unicité d’un StateObject est obtenue par le triplet : “Sentinel + Package + Nom”.
Quelques exemples :
- */Demo/*/* : sélectionne tous les StateObjects du package “Demo” quelque soit la sentinelle
- MonPC/Demo/*/* : sélectionne tous les StateObjects du package “Demo” de la sentinelle “MonPC”
- MonPC/*/*/* : tous les StateObjects produits sur la sentinelle MonPC
- MonPC/*/*/MyData : tous les StateObjects de type “MyData” et produits sur la sentinelle MonPC
- MonPC/Demo/ABC/* : le StateObject ABC du package Demo sur la sentinelle MonPC
Démarrez la discussion sur le forum Constellation