Constellation se définit comme une plateforme technique d’orchestration et d’interconnexion des objets, des services et des applications, multi-langage et multi-technologie, à destination des développeurs, makers, enseignants/chercheurs, étudiants et professionnels de l’informatique.

Constellation permet développer rapidement des applications, des services, des pages Web ou objets connectés, en simplifiant le développement, le déploiement et l’administration tout en maximisant la facilité d’interconnexion.

clip_image002

L’idée est que n’importe quel système ou application connectée dans Constellation peut échanger des données et invoquer des méthodes avec les autres clients connectés que ce soit des services (processus « daemon »), des applications graphiques, des objets connectés ou bien de simples pages Web.

Concrètement un script Python peut par exemple invoquer une fonction d’une application Windows (.NET/WPF), d’un Arduino ou bien d’une page Web Javascript et vice-versa grâce aux « MessageCallbacks« . De même un programme Arduino peut par exemple intégrer en temps réel une variable produite par un script Python ou une application Windows et vice-versa grâce aux « StateObjects”.

Il devient alors possible d’imaginer des scénarios très complets car toute la tuyauterie technique est cachée par Constellation que ce soit dans un contexte Smart Home, IoT, IT ou autre.

Parler une même langue

Imaginez deux personnes travaillant ensemble mais parlant deux langues différentes, par exemple le portugais et l’italien. Comment établir une communication et donc une coopération entre ces deux personnes ?

image

Imaginons qu’une de ces deux personnes décide d’apprendre la langue de l’autre. Par exemple, un effort est fourni par le travailleur portugais pour apprendre l’italien. La communication peut donc s’effectuer en italien et ces deux personnes communiquent et coopèrent ensemble.

image

Imaginez maintenant un deuxième groupe composé d’une personne parlant français et l’autre l’allemand. Encore une fois, une personne doit faire l’effort d’apprendre la langue de l’autre, disons que le français apprenne l’allemand : les deux personnes peuvent maintenant travailler en binôme.

image

Maintenant comment faire pour réunir ces quatre personnes sur le même projet ? Un portugais, un italien, un français et un allemand. Deux parlent l’italien, et les deux autres l’allemand ?

image

Plutôt que perdre du temps et de l’énergie à apprendre une ou plusieurs langue en fonction des collaborateurs et du projet, on préconisera l’apprentissage d’une langue commune comme l’anglais.

image

L’idée est exactement la même avec Constellation, comment faire pour qu’une application graphique Windows développée en .NET (C#) puisse “parler” avec un objet connecté développé en Arduino (C++) ou qu’un script Python puisse parler avec une page Web développée en JavaScript ou avec une application mobile iOS ou Android ? Comment faire pour que cette même application puisse également parler avec l’objet connecté Arduino de la même manière que notre application graphique .NET ?

L’anglais dans notre analogie est Constellation. Techniquement Constellation est un service fonctionnant sur le protocole standard HTTP en utilisant le format de données JSON pour la représentation de la donnée.

image

Tout système, service, objet ou application connectée à Constellation peut envoyer et recevoir des messages en temps réel dans un langage universel.

Constellation apporte la notion de “MessageCallbacks” qui permet aux développeurs de lier un message à 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.

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

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..

MessageCallbacks

Chaque “MessageCallback” est référencé sur le serveur Constellation. C’est à dire que Constellation joue le rôle d’annuaire en ayant connaissance de chaque méthode exposée par l’ensemble des systèmes/applications/objets qui y sont connectés.

Partager les informations

Au delà de la capacité à pouvoir invoquer ou exposer des méthodes dans Constellation, les programmes, les services ou les objets connectés produisent des données, des variables.

Par exemple l’état d’un CPU, 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 toutes des variables capturées, mesurées par des systèmes, objets ou applications.

Dashboard HTML

Dans la terminologie Constellation, on appelle ces variables des StateObjects. Un StateObject est produit et publié par un système connecté à Constellation. Une fois publié, tous les autres systèmes connectés peuvent interroger les StateObjects et même les suivre en temps réel afin de déclencher des évènements, des enregistrements, etc.

Par exemple on pourra afficher ces données en temps réel sur des Dashboards applicatifs ou physiques, les enregistrer dans des bases de données pour l’analyse statistique ou encore déclencher des évènements, des moteurs de règles; par exemple envoyer une alerte si un équipement réseau ne répond plus, ouvrir les volets si un seuil de luminosité est atteint, ouvrir une porte de garage si la voiture s’approche de la maison, etc.

Analyse de StateObjects

Un des avantages de cette architecture est qu’il n’est pas nécessaire d’interroger les systèmes un à un pour connaitre leurs variables car chacun d’entre eux publient les StateObjects dans la Constellation aussi souvent que leurs variables changent. Ainsi Constellation a connaissance à chaque instant de l’état de chaque système via les StateObjects.

StateObjects

De ce fait, chaque acteur de la Constellation peut facilement intégrer et interagir en temps réel avec les variables de l’ensemble des systèmes/objets d’une Constellation.

Un centralisateur

Sans une plateforme de “centralisation” on est obligé de créer des liens directs entre les technologies / systèmes favorisant le syndrome du “plat de spaghettis” et monopolisant tous les efforts sur le développement de ces ponts.

Syndrome du “plat de spaghettis”

L’objectif premier de Constellation est donc de jouer ce rôle de médiateur, afin de centraliser l’ensemble des programmes, services, applications ou objets de votre écosystème, de “votre Constellation”.

Constellation comme centralisateur

Tous vos systèmes peuvent donc s’appeler mutuellement (au sens invocation de méthodes) grâce aux MessageCallbacks et peuvent échanger des données, des variables en temps réel avec les StateObjects.

Mais au delà de facette “développement”, Constellation joue également un rôle de centralisateur du niveau réseau / infrastructure.

Imaginez intégrer dans une page Web les données produites par différents objets connectés développés en Arduino et interagir avec un service Web écrit en .NET et un autre en Python.

Sans Constellation  vous allez décider que chaque objet, script ou service vont exposer un service Web. Vous allez donc réaliser plusieurs fois la même chose : exposer un service en HTTP/S,  en gérant la sécurité, le log, le protocole, le format de donnée, etc. Et à chaque fois en utilisant des technologies différentes : .NET, Arduino et Python.

Vous allez donc passer beaucoup de temps et d’énergie sur des éléments de tuyauterie technique.

Une fois vos services déployés, il faudra renseigner dans votre application Web JavaScript, l’adresse et le port de chaque service ce qui peut devenir rapidement un casse-tête dès que vous commencez à avoir un certain nombre de service.

Vous devrez également gérer les éléments d’ouverture de port / flux réseau.

Pour compliquer encore plus le schéma, imaginez que votre service .NET doit avoir connaissance en temps réel des variables de vos Arduino. Il faut donc que votre service .NET ait également connaissance des adresses/port de vos Arduino ainsi que du contrat de service pour pouvoir interroger vos objets en temps réel sans dégrader leurs performances.

Et que faire si un objet est ajouté dans votre architecture, ou qu’une adresse IP change, qu’un objet est corrompu ?

Sans centralisateur

Dans une architecture avec un centralisateur tel que Constellation, la seule chose que vous devez connaitre c’est l’adresse du serveur Constellation, le centralisateur (et également la clé de sécurité pour pouvoir s’authentifier sur Constellation).

Avec un centralisateur

Et d’un point de vue réseau, le seul prérequis est d’exposer le serveur HTTP/S. Tous les systèmes connectées à Constellation, que ce soit une application graphique, un service, un objet connecté, une page Web ou une application mobile sont tous “client” du service, ils n’ont besoin d’aucune configuration particulière.

Vous pouvez déployer vos systèmes sur n’importe quel réseau, du moment qu’ils sont accès au centralisateur Constellation, ils font partie de votre Constellation et peuvent donc “parler” avec tout le monde.

Constellation apporte donc un gain de temps considérable tant sur les phases de développement, de déploiement et d’administration ce qui vous permet de vous consacrez sur l’essentielle.

Une plateforme d’orchestration

Constellation est aussi une plateforme d’orchestration dans le sens où elle simplifie le déploiement, la mise à jour et l’administration des applications et des services de votre Constellation.

Pour cela l’architecture consiste à installer un agent que l’on appelle une sentinelle.

Une sentinelle est un agent de déploiement pour Constellation. Concrètement il s’agit d’une application installée sur un système Windows ou Linux et qui tourne en tache de fond.

Son rôle est d’exécuter les ordres provenant du serveur Constellation pour :

  • Déployer des packages, c’est à dire télécharger des packages (programmes) depuis le serveur et les démarrer localement
  • Démarrer, arrêter ou redémarrer les packages
  • Remonter les informations au serveur de chaque package démarré (état, consommation CPU et RAM, etc..)

Sentinelles Constellation

Les packages sont des applications graphiques ou non graphiques (service) placées sur le serveur dans le “Package Repository” et que nous allons pouvoir déployer sur les sentinelles de sa Constellation.

Vous pouvez déployer autant de package que vous souhaitez sur chaque sentinelle. Une fois le package démarré, vous retrouvez son état et sa consommation de ressource dans la Console ou via l’API. Vous pourrez également l’arrêter, le redémarrer ou forcer la mise à jour du package.

Packages Constellation

Chaque log produit par un package de votre Constellation remonte dans la Constellation de plus la configuration n’est plus définie dans un fichier de configuration local à vos applications mais est centralisée sur le serveur Constellation.

Console Log

Ainsi si vous souhaitez changer une variable de configuration de l’un de vos packages, vous pouvez le faire directement depuis l’API ou la Console et propager cette mise à jour dans Constellation.

Settings Constellation

De ce fait tout est grandement simplifié. Vous n’avez plus besoin de gérer les aspects de sécurité, de logs, de configuration, de protocole réseau, de configuration réseau, etc.

Il suffit de développer vos packages et de les déposer sur votre serveur Constellation. Vous pourrez ensuite définir où chaque package doit être déployer.

L’ensemble des logs sont remontés en temps réel sur le serveur Constellation, la configuration est elle aussi centralisée sur le serveur et vous pouvez déployer vos mises à jour sans même avoir besoin d’un accès SSH ou RDP à vos machines.

La seule action requise étant d’avoir installer une sentinelle.

Ce que Constellation n’est pas …

On a associe trop souvent à tord Constellation à une plateforme domotique. Constellation est une plateforme bien plus large qui peut être mise en œuvre dans n’importe quelle solution ou projet.

En effet, Constellation n’est pas un système domotique avec une interface utilisateur, il ne remplacera pas une box domotique ou une solution comme Jeedom ou Domoticz. Cependant ces éléments peuvent être connectés à Constellation afin d’interconnecter votre monde domotique avec d’autres composants / services / objets.

Dans l’idée, Constellation se rapproche plus d’un bus tel que la technologie MQTT ou encore des services comme Azure IoT Hub en allant plus loin avec ses MessageCallbacks, ses StateObjects ou encore son système d’orchestration.

Usage et licence

La plateforme Constellation est gratuite pour un usage personnel ou éducatif (école et université) et est soumise à une licence payante pour les professionnels et entreprises développant des projets ou prototypes basés Constellation.

Cliquez ici pour plus d’information.

Pour aller plus loin