S’il fallait résumer la plateforme Constellation, on pourrait dire qu’elle repose sur trois grands principes :

  • Orchestration : permettant de déployer des programmes (services ou applications) que l’on nomme des packages sur un réseau de sentinelles en gérant la configuration, le versioning et les logs
  • Messaging & MessageCallback : tout système connecté à Constellation peut envoyer et recevoir des messages en temps réel dans un langage universel. Les MessageCallbacks font l’association entre un message et une méthode (fonction) d’un programme afin de permettre à tous les intervenants d’exposer et d’invoquer des méthodes entre eux très facilement et rapidement
  • StateObjects : l’état d’un CPU, d’une variable, d’une lampe, d’une batterie, d’une porte, le volume de la radio, le nombre de visiteur d’un site web, le temps de réponse d’un équipement réseau ou la température d’une chambre ou d’un disque dur, … sont tous des StateObjects. Chaque intervenant peut interroger ou suivre en temps réel les StateObjects produits par les packages d’une Constellation.

Constellation simplifie le développement, le déploiement et facilite l’administration des services et des programmes qui la composent tout en maximisant la facilité d’interconnecter ces composants.

 

La plateforme Constellation

Sommaire

Les MessageCallbacks

Le concept est simple : une page Web, un objet connecté, une application graphique, un script ou un service (daemon) connectés dans Constellation peuvent exposer des méthodes (que ce soit une fonction ou une procédure). On appelle cela un « MessageCallback » et ce quelque soit votre langage de développement.

Pour cela, il suffit de définir quelles méthodes doivent être exposées dans Constellation.

Par exemple pour exposer une méthode d’un programme .NET en C#, on ajoutera simplement l’attribut “MessageCallback” :

Pour exposer une méthode C++ d’un Arduino, on invoquera la méthode “registerMessageCallback” :

Chaque API Constellation permet d’enregistrer des MessageCallbacks que ce soit en Javascript, en .NET (C#, VB, C++/CLI, …), en C++/Arduino, en Python, etc…

Une fois les MessageCallbacks enregistrés, ils sont tous référencés dans la Constellation ce qui permet à tout le monde de les lister et de les invoquer.

MessageCallbacks Explorer

Par exemple un script Python sur un Raspberry pourra invoquer votre méthode .NET ci-dessus par la simple ligne :

De même qu’une page Web avec une ligne de JavaScript pourra invoquer votre méthode C++ sur votre Arduino :

En définitive quelque soit votre environnement ou votre langage de développement, vous pouvez exposer des méthodes dans Constellation et les invoquer au travers de Constellation.

MessageCallbacks

MessageCallbacks

De ce fait un script Python peut invoquer des méthodes C++ d’un Arduino, Javascript d’une page Web, .NET d’une application Windows, aussi bien qu’une page Web peut invoquer des méthodes d’un script Python, d’un Arduino, etc..

Sans rentrer dans le détail sachez que les MessageCallbacks peuvent être associés à des méthodes avec une valeur de retour grâce à la notion de “saga” et peuvent être associés à des autorisations pour limiter la portée des certaines méthodes. Aussi un mécanisme de description permet de décrire très finement les MessageCallbacks dans Constellation ce qui permet de générer du code pour encore simplifier le développement.

En résumé Constellation permet aux développeurs d’interconnecter différentes technologies/langages très facilement et rapidement permettant ainsi de concevoir des solutions très complexes.

Les StateObjects

Le concept est simple :  un objet connecté, une application graphique, un script ou un service (daemon) connectés dans Constellation peuvent publier des variables.  On appelle cela un « StateObject« .

Par exemple vous développez un programme .NET en C# qui mesure votre consommation de CPU que vous souhaitez partager dans Constellation :

Ou bien un objet connecté à base d’Arduino réalisant une mesure de la température ambiante en C++ :

Les StateObjects sont identifiés par une clé et la valeur peut être aussi bien une valeur simple (une chaine de caractère, un booléen, une valeur numérique) ou un type complexe (objet ou tableau JSON).

Tous les StateObjects sont stockés sur le serveur Constellation. De ce fait, il suffit d’interroger le serveur Constellation pour connaitre l’état des variables de l’ensemble des systèmes connectés sans devoir les interroger un à un. C’est donc la responsabilité de chaque système de maintenir à jour ses variables dans Constellation en invoquant la méthode “PushStateObject”.

StateObjects

Ensuite tous les systèmes connectés dans Constellation (pages Web, objets connectés, applications graphiques, scripts ou service) peuvent interroger et/ou suivre en temps réel un ou plusieurs « StateObjects ». On appelle cela les “StateObjectLink”.

Par exemple vous pouvez attacher une fonction JavaScript dans une page Web à chaque publication (mise à jour) du StateObject de l’Arduino :

Ou encore inclure ce StateObject dans une classe .NET. Par exemple en C# vous devez simplement ajouter l’attribut “StateObjectLink” pour lier un StateObject publié dans Constellation à une propriété .NET :

Vous pourrez ensuite manipuler la valeur du StateObject ou vous abonnez aux mises à jour comme une véritable variable de votre code .NET à la différence que la valeur est produite par un dispositif de votre Constellation (dans notre exemple un Arduino) et non par votre code .NET :

Ainsi grâce aux mécanisme des StateObjects de Constellation il devient très facile de d’interagir avec l’état des différents systèmes/applications connectées dans Constellation.

L’orchestration

Les différents systèmes/applications dont on parle ci-dessus, qui sont capables d’exposer ou d’invoquer des méthodes grâce aux MessageCallback et/ou de publier et consommer des variables grâce aux StateObjects, sont appelés “packages”.

Les packages sont stockés sur le serveur Constellation dans un catalogue de package que l’on nomme le “Package Repository”.

Ces packages sont ensuite déployés sur ce que l’on nomme des “sentinelles”. Une sentinelle est un agent de déploiement qui tourne en tache de fond sur des systèmes Windows ou Linux.

Vous n’avez donc plus à déployer vos applications/services manuellement sur vos système, il suffit simplement de pré-installer une sentinelle et Constellation s’occupera du déploiement.

Orchestration

Chaque package déployé sur une sentinelle pourra être contrôler via Constellation. Vous pourrez arrêter le package, le redémarrer depuis Constellation. De plus, toutes les configurations des packages sont centralisées sur le serveur et la mise à jour de ces packages devient aisée puisqu’aucune action directement sur l’équipement n’est alors nécessaire.

Aussi les logs produits par les packages sont remontés au serveur Constellation en temps réel tout comme l’état de chaque package.

Les différentes API

La plateforme fournit plusieurs API pour .NET (C#, VB, C++), pour Python, pour Arduino, pour JavaScript, AngularJS et donc indirectement iOS, Anrdoid, WP avec Cordova et Ionic, etc…

De ce fait l’intégration de vos développement dans la plateforme Constellation est grandement facilité. De plus Constellation est aussi accessible via une API HTTP permettant d’intégrer n’importe quelle technologie capable de réaliser des appels HTTP (Java, PHP, Ruby, Lua/NodeMCU, Powershell, Bash, etc..).

Le SDK intégré à Visual Studio

Un SDK intégré à l’IDE Microsoft Visual Studio est également disponible.

SDK Visual Studio

Grace à cela vous pouvez développer et déployer très facilement des packages Constellation en Python ou en .NET au sein d’un IDE très riche.

La Console Constellation ou vos propres applications comme chef d’orchestre

L’administration et le contrôle d’une Constellation est réalisé au travers un hub, appelé le “Hub de Contrôle” (Control Hub). En vous connectant sur ce bus, vous pourrez superviser les sentinelles et les packages de votre Constellation, arrêter/redémarrer des packages, écouter les logs produits par les packages de votre Constellation, etc..

La Console Constellation est une application Web client-side proposant une interface graphique conviviale pour l’administration et le contrôle de votre Constellation :

Console Constellation

Vous pouvez aussi réaliser vos propres applications ou script d’administration en fonction de vos besoins étant donné que tout est accessible via des API HTTP.

Un catalogue de package gratuit

Vous retrouvez un catalogue de packages Constellation, dès à présent utilisables dans votre Constellation, mis à disposition par la communauté et permettant de connecter différents objets, services ou applications.

Packages

Pour aller plus loin