﻿<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tag Constellation - Constellation</title>
	<atom:link href="https://developer.myconstellation.io/tag/constellation/feed/" rel="self" type="application/rss+xml" />
	<link>https://developer.myconstellation.io/tag/constellation/</link>
	<description>Votre plateforme d&#039;interconnexion</description>
	<lastBuildDate>Wed, 28 Aug 2019 14:46:13 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0.11</generator>

<image>
	<url>https://developer.myconstellation.io/wp-content/uploads/2016/02/256x256-e1457476015859.png</url>
	<title>Tag Constellation - Constellation</title>
	<link>https://developer.myconstellation.io/tag/constellation/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Créer une serrure connectée à Constellation</title>
		<link>https://developer.myconstellation.io/tutorials/creer-une-serrure-connectee-constellation/</link>
					<comments>https://developer.myconstellation.io/tutorials/creer-une-serrure-connectee-constellation/#respond</comments>
		
		<dc:creator><![CDATA[Sebastien Warin]]></dc:creator>
		<pubDate>Wed, 16 May 2018 14:05:31 +0000</pubDate>
				<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Constellation]]></category>
		<category><![CDATA[AngularJS]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[ESP8266]]></category>
		<category><![CDATA[Serrure]]></category>
		<category><![CDATA[tutoriel]]></category>
		<category><![CDATA[MessageCallback]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=5979</guid>

					<description><![CDATA[<p>Article proposé par Olivier MOUILLOT, Mohammed TAHRI JOUTEI HASSANI et Gaëtan DELABY Vous attendez quelqu’un chez vous mais vous êtes occupé à faire autre chose. Cette serrure connectée vous permettra de contrôler l’ouverture de la porte d’entrée depuis n’importe quelle</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/tutorials/creer-une-serrure-connectee-constellation/">Créer une serrure connectée à Constellation</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><em>Article proposé par Olivier MOUILLOT, Mohammed TAHRI JOUTEI HASSANI et Gaëtan DELABY</em></p>
<p>Vous attendez quelqu’un chez vous mais vous êtes occupé à faire autre chose. Cette serrure connectée vous permettra de contrôler l’ouverture de la porte d’entrée depuis n’importe quelle pièce de votre domicile, et cela en un clic grâce à votre smartphone. Nous allons voir pas à pas comment la mettre en place simplement.</p>

<h2>Prérequis</h2>
<p>Pour réaliser ce projet, il vous faut :</p>
<ul>
<li>Une gâche électrique 12V / 500 A</li>
<li>Un ESP8266</li>
<li>Un régulateur de tension LM1117</li>
<li>Un transistor NPN TIP 110</li>
<li>Une résistance 5,6 KΩ</li>
<li>Deux condensateurs 0,1 µF et 0,33 µF</li>
<li>Du fil électrique</li>
<li>Une batterie 12V</li>
<li>Un serveur Constellation (Un ordinateur pourra faire l’affaire)</li>
</ul>
<h2>Etape 1 : réaliser une serrure connectée</h2>
<p>Dans un premier temps, il nous a fallu trouver une serrure adaptée au développement du projet sur laquelle nous pouvions brancher nos fils électriques. Nous avons donc opté pour la serrure suivante que vous pourrez vous procurer via <a href="https://www.amazon.fr/Extel-90301-3-%C3%A9lectrique-passage-serrure/dp/B002LS6OTA/ref=sr_1_2?ie=UTF8&amp;qid=1511196788&amp;sr=8-2&amp;keywords=g%C3%A2che+%C3%A9lectrique&amp;dpID=31-7q-yaD0L&amp;preST=_SX300_QL70_&amp;dpSrc=srch">ce lien </a>.</p>
<p align="center"><a href="https://www.amazon.fr/Extel-90301-3-%C3%A9lectrique-passage-serrure/dp/B002LS6OTA/ref=sr_1_2?ie=UTF8&amp;qid=1511196788&amp;sr=8-2&amp;keywords=g%C3%A2che+%C3%A9lectrique&amp;dpID=31-7q-yaD0L&amp;preST=_SX300_QL70_&amp;dpSrc=srch"><img class="colorbox-5979"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Extel Weca 90301.3 Gâche électrique sans passage de serrure" src="https://developer.myconstellation.io/wp-content/uploads/2018/05/image.png" alt="Extel Weca 90301.3 Gâche électrique sans passage de serrure" width="146" height="331" border="0" /></a></p>
<p>Pour de plus amples informations techniques sur la gâchette, vous pouvez également regarder <a href="http://www.produktinfo.conrad.com/datenblaetter/75000-99999/094195-an-01-ml-gache_elec_de_en_fr_nl.pdf">ici</a>.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2018/05/image-1.png"><img class="colorbox-5979"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="serrure de dessus" src="https://developer.myconstellation.io/wp-content/uploads/2018/05/image_thumb.png" alt="serrure de dessus " width="354" height="266" border="0" /></a></p>
<p>Il faut ensuite créer le câblage nécessaire au fonctionnement de la serrure. Notre principal problème a été de convertir l’alimentation indispensable de 12V pour la serrure en une alimentation de 3,3V nécessaire à l’utilisation de notre ESP. A l’aide du régulateur de tension, nous avons réalisé le montage suivant en entrée de l’ESP.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2018/05/image-2.png"><img class="colorbox-5979"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title=" régulateur de tension" src="https://developer.myconstellation.io/wp-content/uploads/2018/05/image_thumb-1.png" alt=" régulateur de tension" width="400" height="138" border="0" /></a></p>
<p>Afin de laisser passer le courant et de faire fonctionner la gâchette, le transistor TIP110 en série avec une résistance 5,6kΩ se placent en sortie GPIO de l’ESP. Une LED peut être également placée à cette même sortie afin de visualiser l’état de la serrure.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2018/05/image-3.png"><img class="colorbox-5979"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="sortie ESP" src="https://developer.myconstellation.io/wp-content/uploads/2018/05/image_thumb-2.png" alt="sortie ESP" width="350" height="232" border="0" /></a></p>
<p>Enfin, voici le montage final reprenant tous les composants :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2018/05/image-4.png"><img class="colorbox-5979"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Schéma global du circuit" src="https://developer.myconstellation.io/wp-content/uploads/2018/05/image_thumb-3.png" alt="Schéma global du circuit" width="350" height="184" border="0" /></a></p>
<h2>Etape 2 : Programmation</h2>
<p>Vous avez fait la moitié du travail, voyons ensemble comment coder notre ESP8266.</p>
<p>La fonction de base de la gâche électrique est assez simple : couper le courant à travers la serrure pour la fermer ou le laisser passer le courant afin d’ouvrir la serrure. En premier lieu, nous avons développé le code Arduino servant à faire faire passer du courant ou non dans la gâche. Pour cela nous devons dans un premier temps connecter notre ESP8266 à Constellation. Pour découvrir comment connecter votre ESP à Constellation, <a href="https://developer.myconstellation.io/getting-started/connecter-un-arduino-ou-un-esp8266-constellation/">suivez ce guide</a>.</p>
<p>En ce qui concerne le code Arduino permettant de contrôler la serrure, vous en trouverez ci-dessous l’intégralité.</p>
<p></p><pre class="crayon-plain-tag">#include &lt;Constellation.h&gt;

// ESP8266 Wifi
#include &lt;ESP8266WiFi.h&gt;
char ssid[] = "MY-WIFI";
char password[] = "xxxxxxxx";

define LOCK_PIN D3

// Constellation client
Constellation&lt;WiFiClient&gt; constellation("172.20.10.2", 8088, "d1mini", "demoisen", "xxxxxxxx");

void setup(void) {
  Serial.begin(115200);  delay(10);

  //SET I/O 
  pinMode(LOCK_PIN, OUTPUT);
  // INITIAL mode
  digitalWrite(LOCK_PIN , LOW);

  // Set Wifi mode
  if (WiFi.getMode() != WIFI_STA) {
    WiFi.mode(WIFI_STA);
    delay(10);
  }
  
  // Connecting to Wifi  
  Serial.print("Connecting to ");
  Serial.println(ssid);  
  WiFi.begin(ssid, password);  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("WiFi connected. IP: ");
  Serial.println(WiFi.localIP());

  constellation.pushStateObject("State", false);
  
  constellation.registerMessageCallback("OpenDoor", MessageCallbackDescriptor().setDescription("Ouvres la porte"),
      [](JsonObject&amp; message) {
            digitalWrite(LOCK_PIN, HIGH);
            constellation.pushStateObject("State", true);
            delay(4000);
            digitalWrite(LOCK_PIN, LOW);   
            constellation.pushStateObject("State", false);    
      });
  
  // Declare the package descriptor
  constellation.declarePackageDescriptor();

  // WriteLog info
  constellation.writeInfo("Virtual Package on '%s' is started !", constellation.getSentinelName());  
}

void loop(void) {
  constellation.loop();
}</pre><p></p>
<p>L’étape suivante a été d’utiliser la librairie Constellation <a href="https://developer.myconstellation.io/client-api/arduino-esp-api/recevoir-des-messages-et-exposer-des-methodes-messagecallback-sur-arduino-esp/">pour ajouter un « MessageCallback</a> » afin de contrôler le GPIO de la gâchette, <a href="https://developer.myconstellation.io/client-api/arduino-esp-api/produire-des-stateobjects-depuis-arduino-esp/">couplé à un « StateObject</a> » permettant de maintenir l’état de la serrure dans Constellation :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2018/05/image-5.png"><img class="colorbox-5979"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="StateObject" src="https://developer.myconstellation.io/wp-content/uploads/2018/05/image_thumb-4.png" alt="StateObject" width="354" height="258" border="0" /></a></p>
<p>Constellation va aller garder en permanence l’état de la serrure grâce au StateObject « State ».</p>
<p>Dorénavant, n’importe qui connecté au serveur peut se servir du MessageCallback « OpenDoor» exposé par l’ESP que nous avons utilisé pour faire permuter l’ouverture et la fermeture automatique de la serrure. Un délai de 4 secondes est programmé avant que la serrure ne se referme après ouverture de la gâche. Nous avons ajouté cette fonctionnalité afin d’ajouter une partie sécurité à notre dispositif.</p>
<p align="center"><img class="colorbox-5979"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="MessageCallback" src="https://developer.myconstellation.io/wp-content/uploads/2018/05/image-6.png" alt="MessageCallback" width="350" height="73" border="0" /></p>
<p>&nbsp;</p>
<p>On obtient alors simplement le pilotage de notre gâchette avec Constellation, dont l’état pourra être contrôlé grâce à une page Web qu’on vous présente dans la partie suivante.</p>
<h2>Etape 3 : Piloter sa serrure à l’aide d’une page web</h2>
<p>Pour cette dernière étape qui consiste à piloter notre serrure connectée grâce à une page Web. Il s’agit principalement de l’interface via laquelle vous pourrez facilement décider de l’ouverture ou la fermeture de la serrure.</p>
<p>Voici le code HTML que nous avons mis en place :</p>
<p></p><pre class="crayon-plain-tag">&lt;!DOCTYPE html&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" ng-app="MyDemoApp"&gt;
&lt;head&gt;
    &lt;link rel="stylesheet" href="bruh.css" /&gt;
    &lt;title&gt;Serrure connectée&lt;/title&gt;
    &lt;link rel="stylesheet" href="style.css" /&gt;
    &lt;script type="text/javascript" src="https://code.jquery.com/jquery-2.2.4.min.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="https://ajax.aspnetcdn.com/ajax/signalr/jquery.signalr-2.2.2.min.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="https://cdn.myconstellation.io/js/Constellation-1.8.2.min.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.min.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="https://cdn.myconstellation.io/js/ngConstellation-1.8.2.min.js"&gt;&lt;/script&gt;
    
    &lt;script&gt;
        var myDemoApp = angular.module('MyDemoApp', ['ngConstellation']);
        myDemoApp.controller('MyController', ['$scope',  'constellationConsumer', function ($scope, constellation) {
  
          constellation.initializeClient("http://172.20.10.2:8088", "xxxxxxxxxx", "WebPage");
          constellation.onConnectionStateChanged(function (change) {
            if (change.newState === $.signalR.connectionState.connected) {
                console.log("Je suis connecté !");
                constellation.requestSubscribeStateObjects("*", "DoorLock", "*", "*");
                }
            });

          constellation.onUpdateStateObject(function (stateObject) {
              console.log(stateObject);
              $scope[stateObject.Name] = stateObject.Value;
              $scope.$apply();
          });
          
          $scope.openDoor = function(){
                constellation.sendMessage({Scope: 'Package', Args: ['DoorLock']}, 'OpenDoor');
            };

            
          constellation.connect();

                }]);
    &lt;/script&gt;
 
&lt;/head&gt;

&lt;body ng-controller="MyController"&gt;
        
    &lt;button ng-click="openDoor()"&gt; OPEN &lt;/button&gt;

&lt;/body&gt;
&lt;/html&gt;</pre><p></p>
<p>Avec quelques lignes de CSS, le rendu final de notre page est le suivant et on ne peut plus simple d’utilisation pour le pilotage :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2018/05/image-7.png"><img class="colorbox-5979"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Page Web" src="https://developer.myconstellation.io/wp-content/uploads/2018/05/image_thumb-5.png" alt="Page web" width="354" height="169" border="0" /></a></p>
<p>Pour la suite il suffit d’héberger cette page HTML sur un serveur Web quelconque et vous pourrez ouvrir votre porte depuis un PC, un smartphone, une table ou autre.</p>
<p>Et comme l’ouverture de la porte est exposer comme un <a href="https://developer.myconstellation.io/concepts/messaging-message-scope-messagecallback-saga/">MessageCallback</a>, vous pourrez l’ouvrir depusi un code <a href="https://developer.myconstellation.io/client-api/net-package-api/envoyer-des-messages-invoquer-des-messagecallbacks/">C#,</a> <a href="https://developer.myconstellation.io/client-api/python-api/envoyer-des-messages-et-invoquer-des-messagecallbacks-en-python/">Python</a>, <a href="https://developer.myconstellation.io/client-api/arduino-esp-api/envoyer-des-messages-et-invoquer-des-messagecallbacks-depuis-arduino-esp/">Arduino</a> ou même un simple <a href="https://developer.myconstellation.io/client-api/rest-api/interface-rest-consumer/#Envoyer_des_messages">appel HTTP</a> à l’API Constellation. N’hésitez pas à utiliser le “<a href="https://developer.myconstellation.io/constellation-platform/constellation-console/messagecallbacks-explorer/">Code Generator</a>” de la console Constellation.</p>
<p>Au final avec une gâche électrique, un ESP8266, une Constellation et quelques lignes d’Arduino, on est capable d’ouvrir une porte depuis tous type d’application.</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/tutorials/creer-une-serrure-connectee-constellation/">Créer une serrure connectée à Constellation</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://developer.myconstellation.io/tutorials/creer-une-serrure-connectee-constellation/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Constellation à la DevCon #4 le 26 octobre à l&#8217;école 42</title>
		<link>https://developer.myconstellation.io/blog/devcon-4-le-26-octobre-lecole-42/</link>
					<comments>https://developer.myconstellation.io/blog/devcon-4-le-26-octobre-lecole-42/#comments</comments>
		
		<dc:creator><![CDATA[Sebastien Warin]]></dc:creator>
		<pubDate>Fri, 20 Oct 2017 09:02:14 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Raspberry]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Supervision]]></category>
		<category><![CDATA[Package]]></category>
		<category><![CDATA[conférence]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Sentinel]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[Constellation]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[Web Platform Installer]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=5604</guid>

					<description><![CDATA[<p>Jeudi 26 octobre 2017 se tiendra la 4ème édition de la DevCon, la conférence technique du magazine Programmez! Le thème de cet après-midi sera 100 % Raspberry Pi &#38; Co en production : serveur, IoT, développement, Docker. Et à cette</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/blog/devcon-4-le-26-octobre-lecole-42/">Constellation à la DevCon #4 le 26 octobre à l&rsquo;école 42</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Jeudi 26 octobre 2017 se tiendra la 4ème édition de la <strong>DevCon</strong>, la conférence technique du magazine <a href="https://www.programmez.com/">Programmez!</a></p>
<p align="center"><a href="https://www.programmez.com/content/devcon-4-100-raspberry-pi-co"><img class="colorbox-5604"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="devcon-4" src="https://developer.myconstellation.io/wp-content/uploads/2017/10/devcon-4.jpg" alt="devcon-4" width="400" height="317" border="0" /></a></p>
<p>Le thème de cet après-midi sera <strong>100 % Raspberry Pi &amp; Co en production</strong> : serveur, IoT, développement, Docker.</p>
<p>Et à cette occasion, vous retrouverez une nouvelle fois une session dédiée à <a href="http://www.myconstellation.io/">Constellation</a> spécial Raspberry.</p>
<p>Au menu de cette session :</p>
<ul>
<li>Comment <a href="https://developer.myconstellation.io/constellation-platform/constellation-server/installer-constellation-sur-linux/">déployer une Constellation sur Raspbian</a> en une seule ligne de commande grâce au Web Platform Installer</li>
<li>Comment <a href="https://developer.myconstellation.io/getting-started/ajouter-des-sentinelles/#Installation_dune_sentinelle_sur_un_systeme_Linux">joindre des RPi v1, v2, v3 </a>dans Constellation pour y <a href="https://developer.myconstellation.io/plateforme/fonctionnalites/deploiement-administration/">déployer et superviser des packages</a> (programmes) depuis une interface Web centrale</li>
<li>Comment développer des packages avec <a href="https://developer.myconstellation.io/getting-started/creez-votre-premier-package-constellation-en-csharp/">Visual Studio</a> ou en ligne de commande avec le « <a href="https://developer.myconstellation.io/blog/developpez-vos-packages-python-ligne-de-commande/">Constellation Package Tools CLI</a> » et les déployer automatiquement sur vos RPi</li>
<li>Comment <a href="https://developer.myconstellation.io/client-api/python-api/">vos packages Python</a> sur RPi peuvent interagir avec vos autres systèmes et autres packages Python, C#, objets Arduino ou des ESP8266, des pages Javascript, ou autre</li>
<li>Comment contrôler un RPi depuis une pages Web ou une application mobile multi-plateforme avec quelques lignes !</li>
</ul>
<p>Nous verrons également plusieurs applications concrètes déployées pour ma « smarthome » comme : <a href="http://sebastien.warin.fr/2015/03/24/2478-senergy-la-solution-de-monitoring-des-ressources-energetiques-de-la-maison-geek-is-in-da-house-2015/">S-Energy</a>, ma solution de supervision des ressources énergique basée sur un Raspberry, <a href="http://sebastien.warin.fr/2015/08/20/2833-s-opener-connectez-et-scurisez-votre-porte-de-garage-avec-constellation-et-un-raspberry-pi-la-porte-de-garage-intelligente/">S-Opener</a> pour piloter la porte de garage depuis un Raspberry, <a href="https://developer.myconstellation.io/tutorials/un-capteur-de-luminosite-exterieur-pilote-par-raspberry/">capteurs luminosité</a>, gestion des volets, etc&#8230;</p>
<p><b>Quand ? </b>26 octobre à partir de 13h30</p>
<p><b>Où :</b> à l’école 42 (Paris)</p>
<p><b>Informations &amp; inscriptions :</b> <a href="https://www.programmez.com/content/devcon-4-100-raspberry-pi-co">https://www.programmez.com/content/devcon-4-100-raspberry-pi-co</a></p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/blog/devcon-4-le-26-octobre-lecole-42/">Constellation à la DevCon #4 le 26 octobre à l&rsquo;école 42</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://developer.myconstellation.io/blog/devcon-4-le-26-octobre-lecole-42/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Créer une boite aux lettres connectée avec Constellation</title>
		<link>https://developer.myconstellation.io/showcases/creer-une-boite-aux-lettres-connectee-constellation/</link>
					<comments>https://developer.myconstellation.io/showcases/creer-une-boite-aux-lettres-connectee-constellation/#respond</comments>
		
		<dc:creator><![CDATA[Sebastien Warin]]></dc:creator>
		<pubDate>Wed, 27 Sep 2017 10:29:50 +0000</pubDate>
				<category><![CDATA[Showcases]]></category>
		<category><![CDATA[Capteur]]></category>
		<category><![CDATA[PushBullet]]></category>
		<category><![CDATA[Constellation]]></category>
		<category><![CDATA[smartphone]]></category>
		<category><![CDATA[Consumer]]></category>
		<category><![CDATA[Cordova]]></category>
		<category><![CDATA[Ionic]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[ESP8266]]></category>
		<category><![CDATA[StateObject]]></category>
		<category><![CDATA[ESP]]></category>
		<category><![CDATA[MessageCallback]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Javascript]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=5519</guid>

					<description><![CDATA[<p>Projet réalisé par Judith Caroff, Jeanne Leclercq, Luc Fermaut, Pierre Hourdé, Jean-Baptiste Lavoine et Victorien Renault. Introduction Étudiants en 3ème année à l’ISEN-Lille, nous avons eu l’idée de développer une boîte aux lettres connectée en utilisant la plateforme Constellation. En</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/showcases/creer-une-boite-aux-lettres-connectee-constellation/">Créer une boite aux lettres connectée avec Constellation</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><em>Projet réalisé par Judith Caroff, Jeanne Leclercq, Luc Fermaut, Pierre Hourdé, Jean-Baptiste Lavoine et Victorien Renault.</em></p>
<h2>Introduction</h2>
<p>Étudiants en 3<sup>ème</sup> année à l’ISEN-Lille, nous avons eu l’idée de développer une boîte aux lettres connectée en utilisant la plateforme Constellation.</p>
<p>En réalisant ce projet, nous voulions proposer une solution de boîte aux lettres connectée à un prix raisonnable et possédant une interface fluide pour améliorer l’expérience de l’utilisateur. Pour cela, nous avons acheté des composants peu coûteux à placer sur notre boîte aux lettres, et développé une application Ionic.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/Schma-de-prsentation.png"><img class="colorbox-5519"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Schéma de fonctionnement global de notre boîte aux lettres" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/Schma-de-prsentation_thumb.png" alt="Schéma de fonctionnement global de notre boîte aux lettres" width="450" height="225" border="0" /></a></p>
<p>Notre boîte aux lettres est connectée à la plateforme Constellation par le biais d’un ESP8266, vous pouvez le connecter facilement à votre Constellation en suivant <a href="https://developer.myconstellation.io/getting-started/connecter-un-arduino-ou-un-esp8266-constellation/">cette documentation sur le site Constellation</a>.</p>
<p>Nous détectons ensuite la présence de courriers à l’aide de capteurs à ultrasons.</p>
<p>Avec un lecteur de cartes NFC, nous contrôlons l’accès à notre boîte aux lettres. Celui-ci nous permet de savoir qui a ouvert la boîte aux lettres et donc d’envoyer les bonnes informations à notre Constellation. Le lecteur NFC nous permet également de vérifier qu’une carte ou qu’un badge a les autorisations nécessaires afin de commander l’ouverture via un servo-moteur.</p>
<p>L’application, développée avec le framework ionic nous permet d’offrir une interface utilisateur ergonomique. En la connectant à Constellation, l’utilisateur a accès à toutes les informations nécessaires très facilement.</p>
<h2>La boîte aux lettres connectée</h2>
<p><i>Prérequis : Avoir connecté l’ESP8266 à Constellation.</i></p>
<h3>Composants utilisés</h3>
<p>Pour connecter notre boîte aux lettres à Constellation, nous avons utilisé :</p>
<ul>
<li>Un ESP8266 D1 Mini (8€ sur Amazon)</li>
<li>Des capteurs à ultrasons HC SR04 (3€ sur Amazon)</li>
<li>Un lecteur de cartes NFC (8€ sur Amazon)</li>
<li>Un servo-moteur (6€ sur eBay)</li>
</ul>
<p>Voici la correspondance pour définir les différents pins avec cet ESP :</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top">D0</td>
<td valign="top">D1</td>
<td valign="top">D2</td>
<td valign="top">D3</td>
<td valign="top">D4</td>
<td valign="top">D5</td>
<td valign="top">D6</td>
<td valign="top">D7</td>
<td valign="top">D8</td>
<td valign="top">RX</td>
<td valign="top">TX</td>
</tr>
<tr>
<td valign="top">16</td>
<td valign="top">5</td>
<td valign="top">4</td>
<td valign="top">0</td>
<td valign="top">2</td>
<td valign="top">14</td>
<td valign="top">12</td>
<td valign="top">13</td>
<td valign="top">15</td>
<td valign="top">3</td>
<td valign="top">1</td>
</tr>
</tbody>
</table>
<h3>Etape 1 : Détecter la présence d’une lettre grâce à un capteur ultrason</h3>
<p><i>Nos capteurs fonctionnent avec une alimentation de 5V</i><i></i></p>
<p>Les capteurs à ultrasons nous permettent de mesurer une distance en créant une impulsion sur une des broches. Grâce à cette mesure, nous pouvons détecter une variation de la distance lorsqu’un courrier et inséré dans la boîte aux lettres. Nous envoyons alors l’information à Constellation grâce à un MessageCallback.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/capteur-ultrason.jpg"><img class="colorbox-5519"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Capteur ultrason" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/capteur-ultrason_thumb.jpg" alt="Capteur ultrason" width="300" height="136" border="0" /></a></p>
<p>Relier le capteur à notre ESP est assez simple, notre capteur à ultrasons possède 4 branches, chacune branchée sur un pin de notre ESP.</p>
<p>Ci-dessous, les correspondances entre les branches du capteur à ultrasons et les pins de l’ESP8266 :</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="63%">
<p style="text-align: left;">Branche du capteur à ultrasons</p>
</td>
<td valign="top" width="36%">Pin de l’ESP8266</td>
</tr>
<tr>
<td valign="top" width="63%">VCC</td>
<td valign="top" width="36%">5V</td>
</tr>
<tr>
<td valign="top" width="63%">GND</td>
<td valign="top" width="36%">GND</td>
</tr>
<tr>
<td valign="top" width="63%">TRIG</td>
<td valign="top" width="36%">D4</td>
</tr>
<tr>
<td valign="top" width="63%">ECHO</td>
<td valign="top" width="36%">D3</td>
</tr>
</tbody>
</table>
<p style="text-align: center;" align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/Module-ultrasons.png"><img class="colorbox-5519"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Module à ultrasons connecté à notre ESP8266" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/Module-ultrasons_thumb.png" alt="Module à ultrasons connecté à notre ESP8266" width="354" height="205" border="0" /></a></p>
<p style="text-align: left;">Dans notre code, nous configurons les pins dans le setup afin de préparer l’impulsion.</p>
<p></p><pre class="crayon-plain-tag">void setup() {
   pinMode(TRIGGER, OUTPUT);
   digitalWrite(TRIGGER, LOW); //La broche TRIGGER doit être à LOW au repos
   pinMode(ECHO, INPUT);
   Serial.begin(9600);
 }</pre><p></p>
<p style="text-align: left;">Nous envoyons ensuite de façon continue des impulsions pour savoir si un obstacle est présent puis, s’il y en a un, nous envoyons un Message Callback.</p>
<p></p><pre class="crayon-plain-tag">void loop() {    
    /* 1. Lance une mesure de distance en envoyant une impulsion HIGH de 10 µs sur la broche TRIGGER */
   digitalWrite(TRIGGER, HIGH);
   delayMicroseconds(10);
   digitalWrite(TRIGGER, LOW);
   
   /* 2. Mesure le temps entre l'envoi de l'impulsion ultrasonore et son écho (s'il existe) */
   long measure = pulseIn(ECHO, HIGH);                
                                                                                 
   /* 3. Calcul la distance à partir du temps mesuré */
   long distanceMeasured = measure *vitesse ;
  
   /* 4. Envoie d'un MessageCallback à Constellation si on rentre dans le if */ 
   if(distanceMeasured &lt; defaultValue){
     constellation.sendMessage(Package, "Brain", "message");
   }
}</pre><p></p>
<p style="text-align: center;"><img loading="lazy" class="size-full wp-image-5527 aligncenter colorbox-5519" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/video1-2-gap.jpg" data-gif="https://developer.myconstellation.io/wp-content/uploads/2017/09/video1-2.gif" alt="" width="196" height="350" /></p>
<h3 style="text-align: left;">Etape 2 : Gérer les accès à la boîte aux lettres grâce à un lecteur de carte NFC</h3>
<p style="text-align: left;">Dans cette partie, nous allons envoyer un Message Callback à Constellation grâce à l’ID du badge NFC détecté par notre lecteur de cartes.</p>
<p style="text-align: left;">Cela nous permettra par la suite de gérer les autorisations d’accès à la boîte aux lettres, de contrôler l’ouverture par notre servo-moteur, et d’avertir l’utilisateur qu’un colis a été livré ou que le courrier a été récupéré. Nous devrons donc enregistrer les différents utilisateurs en renseignant leur ID de badge et leur statut (facteur ou utilisateur).</p>
<p style="text-align: left;">Voici le câblage réalisé pour cette partie entre le NFC et l’ESP :</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="49%">Branche du NFC</td>
<td valign="top" width="50%">Pin de l’ESP8266</td>
</tr>
<tr>
<td valign="top" width="49%">RST</td>
<td valign="top" width="50%">D1</td>
</tr>
<tr>
<td valign="top" width="49%">SDA(SS)</td>
<td valign="top" width="50%">D2</td>
</tr>
<tr>
<td valign="top" width="49%">MOSI</td>
<td valign="top" width="50%">D7</td>
</tr>
<tr>
<td valign="top" width="49%">MISO</td>
<td valign="top" width="50%">D6</td>
</tr>
<tr>
<td valign="top" width="49%">SCK</td>
<td valign="top" width="50%">D5</td>
</tr>
<tr>
<td valign="top" width="49%">GND</td>
<td valign="top" width="50%">GND</td>
</tr>
<tr>
<td valign="top" width="49%">3.3 V</td>
<td valign="top" width="50%">3.3 V</td>
</tr>
</tbody>
</table>
<p style="text-align: center;"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/Lecteur-NFC.png"><img class="colorbox-5519"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Lecteur NFC connecté à notre ESP8266" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/Lecteur-NFC_thumb.png" alt="Lecteur NFC connecté à notre ESP8266" width="354" height="183" border="0" /></a></p>
<p style="text-align: left;">Il faut commencer par télécharger la bibliothèque suivante :</p>
<p style="text-align: center;" align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/bibliothque-arduino-1.png"><img class="colorbox-5519"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="bibliothèque arduino 1" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/bibliothque-arduino-1_thumb.png" alt="bibliothèque arduino 1" width="354" height="71" border="0" /></a></p>
<p style="text-align: left;">Voici ensuite la fonction nécessaire à l’envoi d’un Message Callback lorsque nous captons un nouveau badge.</p>
<p></p><pre class="crayon-plain-tag">void NFC() {
    // Regarde s'il y a une nouvelle carte, s'il n'y en a pas on quitte la fonction
    if ( ! mfrc522.PICC_IsNewCardPresent()) {
        return;
    }
    // S'il n'arrive pas à lire la carte on quitte la fonction
    if ( ! mfrc522.PICC_ReadCardSerial()) {
        return;
    }
    char sochar[256]; // 256 correspond à un octet
    String UID= dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size); 
    /* Permet de transformer un tableau de bit en String */
    UID.toCharArray(sochar, 256);
    constellation.sendMessage(Package, "Brain", "Authorisation", sochar); /* envoie un message Callback du package Brain appelé Authorisation*/
}</pre><p></p>
<h3 style="text-align: left;">Etape 3 : Ouvrir et fermer la porte grâce à un servo-moteur</h3>
<p style="text-align: left;">Le servomoteur va nous servir à commander notre verrou. Ce dernier va donc s’abonner à un State Object nous donnant l’état de la porte (verrouillée ou déverrouillée). Ainsi, lorsque notre lecteur NFC captera un ID autorisé, notre State Object changera, ainsi que l’état de verrouillage de la porte.</p>
<p style="text-align: left;">Voici les branchements qui relient notre moteur à l’ESP :</p>
<table class=" aligncenter" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="59%">PIN DU MOTEUR</td>
<td valign="top" width="40%">Pin de l’ESP8266</td>
</tr>
<tr>
<td valign="top" width="59%">5 V (câble orange)</td>
<td valign="top" width="40%">5 V</td>
</tr>
<tr>
<td valign="top" width="59%">GND (câble marron)</td>
<td valign="top" width="40%">GND</td>
</tr>
<tr>
<td valign="top" width="59%">Commande (câble jaune)</td>
<td valign="top" width="40%">D8</td>
</tr>
</tbody>
</table>
<p style="text-align: left;">Avant d’utiliser le code ci-dessous, il faut vérifier que vous avez bien installé les bibliothèques suivantes :</p>
<p style="text-align: center;" align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/bibliothque-arduino-2.png"><img class="colorbox-5519"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="bibliothèque arduino 2" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/bibliothque-arduino-2_thumb.png" alt="bibliothèque arduino 2" width="354" height="128" border="0" /></a></p>
<p style="text-align: left;">Dans le Setup ci-dessous, nous nous abonnons à un StateObject qui nous permet d’ouvrir et de fermer la porte lorsqu’il change d’état.</p>
<p></p><pre class="crayon-plain-tag">void setup() {
    monServo.attach(15); // Définit le moteur au D8
    monServo.write(0); // ServoMoteur à sa position initiale
    constellation.registerStateObjectLink("*", "Brain", "Porte_ouverte", [](JsonObject&amp; so) {
     delay(100); // délai afin d'attendre la connexion à  Constellation
     if (so["Value"]== true){   
       monServo.write(90);  // Position de la porte ouverte
       }
 
    if (so["Value"]== false){
       monServo.write(0);   // Position de la porte fermée
       }
       delay(3000); // attendre au minimum 3 secs avant que la porte ne change d'état.
   });  
 }</pre><p></p>
<p style="text-align: center;"><img loading="lazy" class="alignnone size-full wp-image-5528 aligncenter colorbox-5519" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/video2-2-gap.jpg" data-gif="https://developer.myconstellation.io/wp-content/uploads/2017/09/video2-2.gif" alt="" width="196" height="350" /></p>
<h3 style="text-align: left;">Etape 4 : Synchroniser toutes nos parties avec un package Constellation</h3>
<p style="text-align: left;">Vous pouvez retrouver notre code complet pour la boîte aux lettres sur GitHub pour plus de précision (<a href="https://l.facebook.com/l.php?u=https%3A%2F%2Fgithub.com%2FSqyluck%2FBoite-aux-lettres-connectee&amp;h=ATO-A7kid-AyGmrtD0hCDSOEWcwWMsyF8aAuEcrDY3b1Q9b-_NEMOnsJ9DOWADshjfo8FwRAmqfoT5MoHe3RwBJ1U_2af1vgeNd_XHbk_4LNVdA4-AYBgC-v6mcC5YakbL12cgMSWJFFBA">https://github.com/Sqyluck/Boite-aux-lettres-connectee</a>).</p>
<p style="text-align: left;">Il est ensuite nécessaire de créer un package Constellation, qui va nous permettre de traiter toutes les données de nos différents éléments.</p>
<p style="text-align: left;">→ Voici les différents Message Callbacks créent dans le package afin de répondre à nos besoins.</p>
<p style="text-align: center;" align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/Message-Callbacks.png"><img class="colorbox-5519"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Message Callbacks" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/Message-Callbacks_thumb.png" alt="Message Callbacks" width="354" height="357" border="0" /></a></p>
<p style="text-align: left;">→ Voici la liste des State Objects générés par le package pour permettre l’affichage de nos données dans l’application et l’envoi d’ordre au servomoteur via l’ESP8266.</p>
<p style="text-align: center;" align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/State-Objects.png"><img class="colorbox-5519"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="State Objects" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/State-Objects_thumb.png" alt="State Objects" width="354" height="166" border="0" /></a></p>
<h3 style="text-align: left;">Etape 5 : Fabrication de la boîte aux lettres</h3>
<p style="text-align: left;">Nous avons utilisé des planches en bois afin de réaliser notre boîte aux lettres. Nous avons vissé les planches entre elles, puis nous avons fixé nos éléments sous le toit de la boîte.</p>
<p style="text-align: center;" align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/Visuel-boite-au-lettre-extrieur.jpg"><img class="colorbox-5519"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Visuel boite au lettre extérieur" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/Visuel-boite-au-lettre-extrieur_thumb.jpg" alt="Visuel boite au lettre extérieur" width="254" height="310" border="0" /></a></p>
<p style="text-align: center;" align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/Visuel-boite-au-lettre-composants.jpg"><img class="colorbox-5519"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Visuel boite au lettre composants" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/Visuel-boite-au-lettre-composants_thumb.jpg" alt="Visuel boite au lettre composants" width="223" height="244" border="0" /></a> <a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/Visuel-boite-au-lettre-intrieur.jpg"><img class="colorbox-5519"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Visuel boite au lettre intérieur" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/Visuel-boite-au-lettre-intrieur_thumb.jpg" alt="Visuel boite au lettre intérieur" width="207" height="244" border="0" /></a></p>
<p style="text-align: center;" align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/Schma-composants.png"><img class="colorbox-5519"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Schéma composants" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/Schma-composants_thumb.png" alt="Schéma composants" width="450" height="232" border="0" /></a></p>
<h2 style="text-align: left;">L’interface utilisateur</h2>
<p style="text-align: left;"><i>Prérequis : disposer de Node.js et de npm</i></p>
<h3 style="text-align: left;">Etape 1 : Créer une application avec ionic</h3>
<p style="text-align: left;">Afin de réaliser notre interface utilisateur, nous avons décidé dans un premier temps de développer notre application avec Ionic 2 dans Visual Studio. Mais avec cette méthode nous étions obligé de développer notre application en langage typescript ce qui était plus compliqué pour connecter l’application à la plateforme Constellation. Nous avons donc décidé d’utiliser Ionic 1 afin de développer notre application en javascript et de la connecter plus facilement.</p>
<p style="text-align: left;">Avant de commencer, il faut lancer l’installation de Ionic 1 depuis l’invite de commande :</p>
<p></p><pre class="crayon-plain-tag">npm install – g cordova ionic</pre><p></p>
<p style="text-align: left;"><i>(Attention : cette commande ne fonctionnera pas si vous ne disposez pas auparavant de node.js et de npm)</i><i></i></p>
<p style="text-align: left;">Une fois que nous nous sommes placé dans le dossier dans lequel nous souhaitons développer notre application, nous pouvons utiliser la commande suivante pour lancer la création d’un nouveau projet.</p>
<p></p><pre class="crayon-plain-tag">ionic start myApp tabs --type ionic1</pre><p></p>
<p style="text-align: left;"><i>(Nous venons ici de créer un nouveau projet ionic 1 de type tabs intitulé myApp)</i></p>
<p style="text-align: left;">Dans l’invite de commande, placez-vous dans le dossier de l’application (en utilisant la commande cd).</p>
<p style="text-align: left;">La commande ionic serve permet d’exécuter l’application dans un navigateur.</p>
<p style="text-align: left;">Lorsque le projet est créé, vous devez éditer vos différentes pages (par ex. sur Notepad++). Les fichiers à modifier se trouvent dans le dossier « www » :</p>
<ul style="text-align: left;">
<li>Le fichier index.html</li>
<li>Les fichiers .html appartenant au dossier “templates” → C’est ici que vous pouvez modifier le contenu de chaque page de votre application.</li>
<li>Le fichier app.js dans le dossier “js” → Vous devez définir votre constellation à cet endroit.</li>
<li>Le fichier controllers.js dans le dossier “js” → Chaque controller est associé à une page html. Vous pouvez utiliser les variables et les fonctions définies dans ces pages grâce aux “Scopes”.</li>
</ul>
<h3 style="text-align: left;">Etape 2 : Visualiser notre application sur un smartphone</h3>
<p style="text-align: left;">Si vous souhaitez utiliser votre application sur votre smartphone, vous pouvez utiliser l’application “ionic view” disponible sur l’App Store et Google Play. Cette application vous permettra de visualiser directement l’application que vous êtes en train de développer sur votre smartphone.</p>
<p style="text-align: left;">Une fois l’application installée, vous devez ensuite vous rendre <a href="https://apps.ionic.io/apps/">sur ce site</a>, créer un compte, puis cliquez sur “New App”. Il ne vous reste plus qu’à faire le lien avec votre application et l’envoyer sur votre appareil. Pour cela, dans le dossier de votre application, utilisez les deux commandes suivantes dans votre invite de commande</p>
<p></p><pre class="crayon-plain-tag">ionic link 
ionic upload</pre><p></p>
<p style="text-align: left;">Ouvrez ensuite ionic view et visualisez votre application.</p>
<p style="text-align: left;">Vous pouvez également, après avoir branché votre téléphone et avoir activé le mode debug, utiliser la commande cordova run android afin de simuler directement votre application sur votre téléphone android.</p>
<h3 style="text-align: left;">Etape 3 : Connecter notre application à constellation</h3>
<p style="text-align: left;">Afin de connecter notre application à la plateforme constellation, nous allons modifier le fichier app.js ainsi que le index.html.</p>
<p style="text-align: left;">Pour cela, nous allons importer les bibliothèques suivantes dans le fichier index.html :</p>
<ul style="text-align: left;">
<li>jquery-2.2.4.min.js</li>
<li>jquery.signalr-2.2.1.min.js</li>
<li>Constellation-1.8.1.min.js</li>
<li>ngConstellation-1.8.1.min.js</li>
</ul>
<p style="text-align: left;">Les librairies sont disponibles sur cette <a href="http://cdn.myconstellation.io/js/">page</a>. Nous vous conseillons de créer un dossier intitulé constellation dans le dossier « lib » et d’y enregistrer ces différentes bibliothèques.</p>
<p style="text-align: left;">Il ne vous restera plus qu’à ajouter les lignes de code suivantes dans le fichier index.html :</p>
<p></p><pre class="crayon-plain-tag">&lt;script type="text/javascript" src="lib/constellation/jquery-2.2.4.min.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="lib/constellation/jquery.signalr-2.2.1.min.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="lib/constellation/Constellation-1.8.1.min.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="lib/constellation/ngConstellation-1.8.1.min.js"&gt;&lt;/script&gt;</pre><p></p>
<p style="text-align: left;">Puis nous allons ajouter le code suivant à notre fichier app.js :</p>
<p style="text-align: left;">1. Modifier la ligne angular.module, y ajouter ‘ngConstellation’ comme ci-dessous :</p>
<p></p><pre class="crayon-plain-tag">angular.module('starter', ['ionic', 'starter.controllers', 'ngConstellation'])</pre><p></p>
<p style="text-align: left;">2. Modifier la fonction .run, y ajouter $rootScope et constellationConsumer :</p>
<p></p><pre class="crayon-plain-tag">.run(function($ionicPlatform, $rootScope, constellationConsumer)</pre><p></p>
<p style="text-align: left;">3. Ajouter le code suivant dans la fonction .run :</p>
<p></p><pre class="crayon-plain-tag">constellationConsumer.initializeClient("http://192.168.43.171:8088", "123456789", "Application Ionic");
    constellationConsumer.onConnectionStateChanged(function (change) {
        if (change.newState === $.signalR.connectionState.connected) {
            console.log("Connecté à constellation");
            $rootScope.isConnected = true;
        }
    });
    constellationConsumer.connect();
    $rootScope.constellation = constellationConsumer;</pre><p></p>
<p style="text-align: left;">Vous pouvez maintenant vérifier que vous êtes bien connecté à votre constellation en regardant dans votre console (f12 dans votre navigateur).</p>
<h3 style="text-align: left;">Etape 4 : Connecter notre application à la boîte aux lettres</h3>
<p style="text-align: left;">Un certain nombre de State Objects et de Message Callbacks ont été réalisés dans notre package constellation afin de traiter nos différentes informations (ce package est disponible sur gitHub).</p>
<p style="text-align: left;">Le rôle de notre application ici est simplement de s’abonner aux State Objects et d’envoyer des messages Callbacks à notre constellation.</p>
<p style="text-align: left;">→ <b>Exemple de récupération d’un State Object</b> :</p>
<p style="text-align: left;">Les StateObjects se récupèrent dans le fichier app.js, à l’endroit où nous avons défini notre constellation. Voici un exemple de code correspondant à notre State Object « Users » :</p>
<p></p><pre class="crayon-plain-tag">//State Object Utilisateurs
constellationConsumer.registerStateObjectLink("*", "Brain", "Users", "*", function(so) {
    $rootScope.Users = so.Value;
    $rootScope.$apply();
});</pre><p></p>
<p style="text-align: left;">Pour afficher nos utlisateurs, il nous suffit maintenant, dans notre page html d’utiliser le code suivant :</p>
<p></p><pre class="crayon-plain-tag">&lt;ion-item ng-repeat="user in Users"&gt;
  &lt;h2&gt;{{user.firstName}} {{user.name}}&lt;/h2&gt;
  &lt;p&gt;{{user.client ? "client":"facteur"}}&lt;/p&gt;
&lt;/ion-item&gt;</pre><p></p>
<p style="text-align: left;">→ <b>Exemple d’envoi d’un message Callback</b> :</p>
<p style="text-align: left;">Les messages Callbacks s’envoient dans le fichier controllers.js. Voici l’exemple de code pour le Message Callback « DeleteUser » :</p>
<p></p><pre class="crayon-plain-tag">//Message CallBack DeleteUser
$scope.name = $stateParams.name
$scope.firstName = $stateParams.firstName;
$scope.deleteUser = function() {
    var deleteUser = $ionicPopup.confirm({
      title: 'Supprimer cet utilisateur',
      template: 'Etes vous sur de vouloir supprimer cet utilisateur ?'
    });
    deleteUser.then(function(res) {
      if(res) {
          $rootScope.constellation.sendMessage({ Scope: 'Package', Args: ['Brain'] }, 'DeleteUser', [$scope.firstName, $scope.name ]);
          $state.go('tab.utilisateurs');
          console.log('deleted');
      } 
      else {
          console.log('do nothing');
      }
    });
};</pre><p></p>
<p style="text-align: left;">Dans notre page html, on appelle maintenant la fonction créée dans notre controller.js dans un bouton par exemple :</p>
<p></p><pre class="crayon-plain-tag">&lt;button ng-click="deleteUser()"&gt;Supprimer cet utilisateur&lt;/button&gt;</pre><p></p>
<p style="text-align: left;">En vous servant de cette base, vous pouvez réaliser une application vous permettant de recevoir un message sur votre application lorsque vous recevez un courrier ou un colis mais aussi d’ajouter ou de supprimer des accès à la boite aux lettres.</p>
<p style="text-align: center;"><img loading="lazy" class="alignnone size-full wp-image-5530 aligncenter colorbox-5519" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/video3-2-gap.jpg" data-gif="https://developer.myconstellation.io/wp-content/uploads/2017/09/video3-2.gif" alt="" width="196" height="350" /></p>
<p style="text-align: left;">Il est également possible de réutiliser des packages existants, par exemple, nous nous sommes servis du package PushBullet afin de recevoir des notifications sur notre smartphone.</p>
<p style="text-align: left;">Voici un aperçu de notre application ionic :</p>
<p style="text-align: center;" align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/notifications.png"><img class="colorbox-5519"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="notifications" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/notifications_thumb.png" alt="notifications" width="150" height="295" border="0" /></a><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/paramtres.png"><img class="colorbox-5519"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="paramètres" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/paramtres_thumb.png" alt="paramètres" width="150" height="295" border="0" /></a><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/utilisateurs.png"><img class="colorbox-5519"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="utilisateurs" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/utilisateurs_thumb.png" alt="utilisateurs" width="150" height="295" border="0" /></a></p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/showcases/creer-une-boite-aux-lettres-connectee-constellation/">Créer une boite aux lettres connectée avec Constellation</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://developer.myconstellation.io/showcases/creer-une-boite-aux-lettres-connectee-constellation/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>S-Fit : Concevez un miroir connecté orienté fitness</title>
		<link>https://developer.myconstellation.io/showcases/s-fit-concevez-un-miroir-connecte-oriente-fitness/</link>
					<comments>https://developer.myconstellation.io/showcases/s-fit-concevez-un-miroir-connecte-oriente-fitness/#comments</comments>
		
		<dc:creator><![CDATA[Sebastien Warin]]></dc:creator>
		<pubDate>Wed, 27 Sep 2017 10:05:42 +0000</pubDate>
				<category><![CDATA[Showcases]]></category>
		<category><![CDATA[Consumer]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[ForecastIO]]></category>
		<category><![CDATA[Domotique]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[StateObject]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Miroir]]></category>
		<category><![CDATA[Constellation]]></category>
		<category><![CDATA[AngularJS]]></category>
		<category><![CDATA[UI]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=5474</guid>

					<description><![CDATA[<p>C’est l’été, la saison des maillots de bains, il est grand temps de se prendre en main et de se sculpter un corps de rêve. Pourquoi ne pas utiliser une des nombreuses solutions de tracker d’activités présentes sur le marché</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/showcases/s-fit-concevez-un-miroir-connecte-oriente-fitness/">S-Fit : Concevez un miroir connecté orienté fitness</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><i>C’est l’été, la saison des maillots de bains, il est grand temps de se prendre en main et de se sculpter un corps de rêve. Pourquoi ne pas utiliser une des nombreuses solutions de tracker d’activités présentes sur le marché ? Ce n’est pas assez drôle pour des makers, nous avons donc décidé de créer notre propre solution fitness axée autour d’un miroir connecté !</i></p>
<p style="text-align: center;"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/fig1.png"><img class="colorbox-5474"  loading="lazy" title="Résultat final du miroir connecté à Constellation" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/fig1_thumb.png" alt="Résultat final du miroir connecté à Constellation" width="300" height="381" border="0" /></a></p>
<h2>Introduction</h2>
<p>Nous sommes 5 étudiants en troisième année de Cycle Informatique et Réseaux à l’ISEN et nous avons conçu un nouveau concept de solution fitness basée sur un miroir. Pour réaliser notre projet, nous avions un budget de 0€ mais nous avions surtout une grande motivation pour créer un produit innovant et agréable à utiliser.</p>
<p>C’est pour cela que nous avons utilisé des produits de récupérations. En effet, nous avons tous dans notre garage un ordinateur portable que nous n’utilisons plus, une ancienne webcam, et quelques planches de contreplaqué. Concernant l’aspect miroir, nous avons utilisé du film sans tain car nous en avions déjà, cependant, pour une dizaine d’euros de plus, vous pourrez utiliser une vitre sans tain. Cette dernière donnera un rendu bien meilleur à votre miroir. Voilà qui devrait suffire pour la partie matérielle de notre projet.</p>
<p>Pour la partie logicielle, nous avons utilisé la plateforme Constellation. Les lecteurs réguliers de ce magazine la connaissent déjà, pour les autres, il s’agit d’une plateforme technique d’orchestration et d’interconnexion des objets, des services et des applications. Elle s’appuie sur des paquets qui peuvent publier et consommer des messages ainsi que sur des fonctions partagées. Concrètement, avec Constellation, en quelques lignes, il devient très simple de connecter des objets (ou applications) entre eux. Ces derniers vont donc dialoguer via Constellation comme le feraient des micro-services. L’avantage d’utiliser cette plateforme pour un tel projet c’est la facilité avec laquelle nous avons pu connecter et déployer les différentes briques de notre miroir. Pour en savoir plus sur cette technologie, vous pouvez vous rendre sur <a href="http://www.myconstellation.io/">http://www.myconstellation.io/</a></p>
<p>Pour résumer, en raison d’un coût très faible et d’un développement simplifié, S-Fit est le projet parfait pour vous occuper cet été.</p>
<h2>Fonctionnement général</h2>
<p>Nous avons tout d’abord pensé S-Fit comme une application dotée d’un podomètre. Cette dernière synchronise les différents profils des membres de la famille en temps réel grâce à Constellation. Vous pouvez ainsi y gérer vos propres objectifs et surveiller votre progression. Vous ne perdrez pas votre motivation grâce à notre système de trophées qui vous donnera envie de repousser vos limites chaque jour. Comme il n’existe pas de meilleure motivation que la compétition, vous pourrez vous comparer à vos proches grâces à des outils d’analyse s’appuyant sur une série de graphiques.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/fig7.png"><img class="colorbox-5474"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Les sources d’informations du miroir" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/fig7_thumb.png" alt="Les sources d’informations du miroir" width="240" height="240" border="0" /></a></p>
<p>Pour vous rappeler vos objectifs chaque matin, nous avons ajouté à S-Fit un miroir compagnon. Ce dernier a demandé beaucoup de réflexion car il s’agit d’un nouvel objet avec lequel il faut interagir de manière naturelle. De plus, il fallait faire de ce dernier un bel objet que l’on puisse retrouver chez soi. Nous avons donc fait le choix d’une interface minimaliste qui affiche seulement les informations pertinentes : la météo, les évènements à venir et votre progression. De ce fait, pas besoin de toucher le miroir et d’y laisser des traces de doigts.</p>
<p>Pour gérer les multiples profils, nous avons également intégré un module de reconnaissance faciale qui permettra au miroir d’afficher des informations personnalisées en fonction de son utilisateur.</p>
<p>Comme vous vous en doutez surement, le lien entre l’application et le miroir se fait par l&rsquo;intermédiaire de la plateforme Constellation. Tout est synchronisé en temps réel et cela fonctionne comme par magie.</p>
<h3>Etape 1 : Conception du boîtier</h3>
<p>Pour commencer, il faut démonter votre vieil ordinateur, afin d’en récupérer la dalle LCD. On utilise ensuite la référence de cette dernière pour pouvoir se procurer le contrôleur adapté.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/fig2.jpg"><img class="colorbox-5474"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="La dalle récupérée et son contrôleur" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/fig2_thumb.jpg" alt="La dalle récupérée et son contrôleur" width="236" height="244" border="0" /></a></p>
<p>Ensuite, il faut concevoir un boîtier capable d’accueillir l’ensemble de votre appareil. Son épaisseur et ses dimensions dépendent donc de votre miroir. Nous ne fournirons donc pas de plans pour rendre votre création unique.</p>
<p>Attention toutefois à prévoir des espaces pour l’aération, l’alimentation et les contrôles de la dalle.</p>
<p>C’est la partie la plus personnelle du projet, c’est le moment de libérer votre créativité pour mettre en place votre vision de S-Fit.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/fig3.jpg"><img class="colorbox-5474"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Assemblage du boîtier et vernissage" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/fig3_thumb.jpg" alt="Assemblage du boîtier et vernissage" width="244" height="125" border="0" /></a><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/fig4.jpg"><img class="colorbox-5474"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Assemblage du boîtier et vernissage" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/fig4_thumb.jpg" alt="Assemblage du boîtier et vernissage" width="244" height="127" border="0" /></a></p>
<p>Nous avons également prévu une trappe d’accès à l’arrière pour pouvoir modifier notre miroir plus tard.</p>
<p>Si vous avez fait le choix du film sans tain, il va falloir le poser. Pour cela, voici les quelques étapes à suivre :</p>
<ul>
<li>Nettoyer votre dalle à l’aide d’un chiffon doux</li>
<li>Appliquer un peu d’eau savonneuse sur celle-ci</li>
<li>Poser le film sans tain petit à petit en vous aidant d’un grattoir. Attention à ne pas rayer le film avec, c’est très fragile !</li>
<li>Chassez, toujours avec ce grattoir, les dernières bulles d’air</li>
</ul>
<p>Prenez bien votre temps lors de la pose, c’est une partie très délicate et elle affectera directement l’esthétique de votre miroir.</p>
<p>Vous avez maintenant l’ensemble des pièces qui vont constituer votre miroir. Pour terminer, il ne vous reste plus qu’à tout assembler en faisant attention à bien aligner la dalle et le boîtier.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/fig5.jpg"><img class="colorbox-5474"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Le miroir assemblé, prêt à être refermé" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/fig5_thumb.jpg" alt="Le miroir assemblé, prêt à être refermé" width="354" height="266" border="0" /></a></p>
<p>Si vous souhaitez intégrer un module de reconnaissance faciale, il va falloir ajouter une webcam (USB).</p>
<p>Pour cela, il faut la démonter, récupérer le circuit et le fixer dans le boîtier.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/fig07.jpg"><img class="colorbox-5474"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Miroir assemblé sans la webcam" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/fig07_thumb.jpg" alt="Miroir assemblé sans la webcam" width="304" height="404" border="0" /></a></p>
<h3>Etape 2 : Le développement logiciel</h3>
<h4>Etape 2.1 : L’interface du miroir</h4>
<p>Pour réaliser le miroir, nous avons choisi de concevoir une application web avec AngularJS. En effet, comme le dit le créateur de Constellation, Sébastien Warin, on peut connecter n’importe quoi avec quelques lignes de code qui vont bien.</p>
<p>Tout d’abord, il est important de rappeler que pour continuer ce tutoriel, il est nécessaire d’avoir une Constellation déployée chez soi. Vous trouverez la plateforme ainsi que les tutoriels de prise en main sur le portail <a href="https://developer.myconstellation.io/">https://developer.myconstellation.io/</a></p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/fig8.png"><img class="colorbox-5474"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Le rôle de Constellation dans la plateforme S-Fit" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/fig8_thumb.png" alt="Le rôle de Constellation dans la plateforme S-Fit" width="300" height="300" border="0" /></a></p>
<p>Nous allons donc pouvoir connecter notre application Angular à Constellation :</p>
<p></p><pre class="crayon-plain-tag">var app = angular.module('Mirror', ['ngConstellation']);

app.controller('MyController', ['$scope', 'constellationConsumer', ($scope, constellation) =&gt; {

    constellation.initializeClient("maconstellation.local", "masupercle123", "MyMirror");

    constellation.connect();

}]);</pre><p></p>
<p>Il ne reste plus qu’à s’abonner aux StateObjects de Constellation que l’on veut voir sur le miroir. Par exemple, ici, nous allons récupérer la météo dans la ville de Lille :</p>
<p></p><pre class="crayon-plain-tag">constellation.registerStateObjectLink("*", "ForecastIO", "Lille", "*", (so) =&gt; {
    $scope.$apply(() =&gt; {
        $scope.temperature = so.Value.currently.temperature;
    });
});</pre><p></p>
<p>Pour en savoir plus, vous pouvez vous rendre sur le portail dont le lien se trouve plus haut pour y trouver la documentation complète. Vous trouverez d’ailleurs un tutoriel détaillé sur l’utilisation de Constellation en JavaScript. Mais rassurez vous, ce n’est pas plus compliqué que cela. Il ne manque que quelques lignes d’HTML et de CSS pour donner vie à votre miroir.</p>
<p>Si on continue l’exemple de la météo, le code HTML associé pourrait-être le suivant :</p>
<p></p><pre class="crayon-plain-tag">&lt;p&gt;{{temperature}}&lt;/p&gt;</pre><p></p>
<p>On obtiendrait alors une page sur laquelle la température va s’afficher dynamiquement.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/fig6.png"><img class="colorbox-5474"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="L’interface finale du miroir: le choix du noir et blanc permet un meilleur rendu sur le miroir" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/fig6_thumb.png" alt="L’interface finale du miroir: le choix du noir et blanc permet un meilleur rendu sur le miroir" width="450" height="336" border="0" /></a></p>
<h4>Etape 2.2 : La reconnaissance faciale</h4>
<p>Comme nous l’expliquions plus haut, nous avons ajouté un module de reconnaissance faciale pour gérer plusieurs profils. Il s’agit d’une partie facultative et plutôt complexe.</p>
<p>Pour cela, nous avons utilisé une <a href="https://www.codeproject.com/Articles/261550/EMGU-Multiple-Face-Recognition-using-PCA-and-Paral">application open source existante</a> qui s’appuie sur EMGU.CV. C’est un portage en C# d’OpenCV. Malheureusement, cette application était trop ancienne et nous n’avons pas réussi à la connecter directement à Constellation. Pour résoudre ce problème, nous avons conçu un paquet Constellation qui permet de publier et de s’abonner aux StateObjects par l’intermédiaire de sockets TCP.</p>
<p>Lors de l’ajout d’un nouvel utilisateur S-Fit, le paquet lance la séquence d’enregistrement d’un visage automatiquement.</p>
<p>Nous avons effectué plusieurs essais sur la quantité d’images à enregistrer, afin d’obtenir l’équilibre idéal entre une reconnaissance optimale et un minimum d’espace utilisé. Pour vous reconnaître, l’algorithme s’appuie sur plusieurs caractéristiques faciales, comme la forme du nez, de la bouche, des yeux, de vos sourcils…</p>
<p>De par le peu d’espace pris par la reconnaissance, vous pouvez aisément enregistrer toute votre famille, afin que le miroir devienne un élément à part entière de votre lieu de vie, et que tout le monde participe à la compétition !</p>
<p>La reconnaissance faciale se déroule en deux étapes. La première consiste à détecter un visage. Pour cela nous avons utilisé le classificateur Haar car il nous fallait une reconnaissance faciale en temps réel. Le classificateur Haar est, en fait, un fichier xml contenant une quantité énorme de photos dites négatives et positives. Les photos positives contiennent un visage, tandis que les photos négatives n’en contiennent pas. Cela permet donc de savoir si un visage est présent sur une photo ne faisant pas partie du classificateur. À noter qu’il est possible de créer soi-même son propre classificateur ou même d’en améliorer un.</p>
<p>Ici, nous nous servons donc de ce dernier afin de vérifier si, sur la frame actuelle, un visage est présent ou non de la sorte :</p>
<p></p><pre class="crayon-plain-tag">gray_frame = currentFrame.Convert&lt;Gray, Byte&gt;();

MCvAvgComp[][] facesDetected = gray_frame.DetectHaarCascade(Face, 1.2, 10, Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(50, 50));</pre><p></p>
<p>Ceci va donc insérer dans le tableau facesDetected[0] tous les visages ayant eu un résultat positif après comparaison avec le classificateur Haar.</p>
<p>Dans un second temps, on cherche à reconnaître une personne à l’aide de son visage, l’application dispose donc d’une architecture très simple divisée en trois classes C#. La classe principale va capturer le flux vidéo de la webcam puis par la suite analyser chaque image via la classe de reconnaissance de personne qui, elle, aura au préalable chargé les données des personnes déjà enregistrées. La dernière classe sert, quant à elle, à enregistrer une personne en prenant une centaine de photos du visage de celle-ci.</p>
<p>Pour communiquer avec notre package, nous avons également ajouté une classe TCPClient.cs qui se connecte et échange les StateObjects via le réseau.</p>
<p>C’est d’ailleurs les paquets reçus qui vont démarrer les fonctions d’ajout d’utilisateur.</p>
<p>Pour rendre la gestion des utilisateurs agréable, nous avons intégré cette reconnaissance faciale de manière totalement transparente. Lorsqu’un utilisateur s’enregistre dans l’application il doit être face au miroir. Pour vérifier cela, l’utilisateur sera invité à saisir un code à six chiffres qui s’affichera quelques secondes sur le miroir. Une fois l’ensemble des informations saisies dans l’application, le miroir va automatiquement lancer une séquence de capture de 100 clichés du nouvel utilisateur.</p>
<p>Pour la reconnaissance des utilisateurs enregistrés, le paquet de reconnaissance faciale va capturer une image chaque seconde pour vérifier la présence ou non d’un individu connu.</p>
<p>Lorsque deux utilisateurs enregistrés sont face au miroir, ce dernier va se concentrer sur celui qu’il identifie le mieux.</p>
<h4>Etape 2.3 : L’application mobile</h4>
<p>L’application S-Fit a été conçue avec les frameworks Ionic 3 et Apache Cordova. Ces frameworks permettent d’obtenir une application Web à l&rsquo;intérieur d’une application native Android ou iOS qui embarque un serveur NodeJS sur le mobile. Comme nous l’avons vu plus haut, l’application qu’affiche le miroir est une page web, l’application mobile utilise donc les mêmes technologies.</p>
<p>Ainsi, la connexion s’effectuera tout aussi simplement :</p>
<p></p><pre class="crayon-plain-tag">var constellation = $.signalR.createConstellationConsumer("maconstellation.local", "masupercle123", "MonApp");

constellation.connection.start();</pre><p></p>
<p>Une application comme la nôtre peut alors consommer des StateObjects mais également envoyer des MessageCallbacks. C’est à dire exécuter des fonctions directement sur la Constellation. C’est particulièrement utile pour incrémenter le compteur de pas.</p>
<p>Nous avons découpé notre application en trois grandes parties : la gestion des profils, les activités et les trophées.</p>
<h5>Gestion des profils</h5>
<p>Comme S-Fit est pensé pour plusieurs utilisateurs, nous avons géré les profils dans notre application.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/fig10-1.png"><img class="colorbox-5474"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Choix d’utilisateur, nouvel utilisateur et informations" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/fig10_thumb-1.png" alt="Choix d’utilisateur, nouvel utilisateur et informations" width="354" height="202" border="0" /></a></p>
<p>Lorsqu’un utilisateur lance l’application, il peut choisir son profil. Cette action va établir la connexion avec la Constellation pour récupérer les informations personnelles et l’historique d’activités. Toutefois, s’il n’a pas de profil, il peut en ajouter un s’il est en face du miroir, qui lui affichera alors un code de vérification. Lors du lancement de l’application, cette dernière synchronise instantanément les nouvelles données d’activités avec le serveur Constellation.</p>
<p>L’utilisation d’S-Fit est totalement transparente et ne demande pas de manipulation particulière de l’utilisateur. En effet, nous avons cherché à fournir un produit simple, accessible et entièrement automatisé. Cette synchronisation est permise par Constellation.</p>
<h5>Les activités</h5>
<p>Cette partie se compose d’un podomètre, d’un récapitulatif de la journée en cours et d’un historique sous forme de graphiques.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/fig11-1.png"><img class="colorbox-5474"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Récapitulatif de la journée en temps réel et statistiques" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/fig11_thumb-1.png" alt="Récapitulatif de la journée en temps réel et statistiques" width="304" height="262" border="0" /></a></p>
<p>Pour le podomètre, nous nous sommes appuyés sur un plugin de Cordova permettant d’accéder aux données de l&rsquo;accéléromètre du mobile. A l’aide des données fournies par ce plugin, nous avons pu étudier les variations sur les axes x, y et z, dans l’optique de compter les pas.</p>
<p>L’application récupère donc les données accélérométriques de votre mobile toutes les 0.120 secondes. C’est une valeur que nous avons retenue après plusieurs jours de tests pour affiner la précision du compteur de pas, puis, en s’appuyant sur les précédentes valeurs, on va déterminer si le mouvement effectué est un pas ou non, et donc informer Constellation si elle doit incrémenter le nombre de pas de l’utilisateur.</p>
<p>Le développement de cette application ne se résume pas qu’à de la programmation informatique. Nous avons également réalisé des mesures sur plusieurs dizaines de personnes afin d’obtenir un lien entre la morphologie et la longueur des pas</p>
<p></p><pre class="crayon-plain-tag">var slope = 0.64878048 ;
var origin = 44.6744 ;

function getDistance(size, stepCounter) {
    return (size * slope - origin) * stepCounter;
}</pre><p></p>
<p>Avec les informations physiologiques et l’activité de l’utilisateur, on peut donc créer un ensemble de fonctions qui permettent d’étudier son état de santé, en calculant par exemple les calories dépensées chaque jour. C’est grâce à ces données qu’il est possible de créer une application fitness entièrement maîtrisée. On est alors libre d’appliquer les algorithmes souhaités sur les données récupérées.</p>
<p>Pour la page des graphiques sur l’application mobile, nous avons utilisé la bibliothèque Chart.js qui permet de tracer des graphiques dynamiques avec un rendu épuré. Son principal avantage est la prise en main rapide de la bibliothèque ainsi que toutes ses options.</p>
<p>Voici un exemple pour tracer un graphique linéaire</p>
<p></p><pre class="crayon-plain-tag">var myLineChart = new Chart(ctx, {
    type: 'line',
    data: data,
    options: options
});</pre><p></p>
<p>Cependant, il faut tout d’abord récupérer les informations présentes dans les StateObjects pour les afficher dans les graphiques. Cela nous permet de faire des graphes qui se mettent à jour en temps réel.</p>
<h5>Les trophées</h5>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/fig12.png"><img class="colorbox-5474"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="La liste des trophées et détails d’un trophée" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/fig12_thumb.png" alt="La liste des trophées et détails d’un trophée" width="354" height="303" border="0" /></a></p>
<p>Comme nous l’expliquions plus haut, nous avons intégré un système de trophées et de récompense. Il se présente tout d’abord comme une liste de trophées que l’on débloque en réalisant des succès particuliers (pas, distance).</p>
<p>Les trophées montrent votre expérience sur S-Fit, et représentent donc la récompense pour vos efforts. Lorsque l’on clique sur un trophée débloqué, on affiche son détail et le nombre de points qu’il a rapporté.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/fig11.png"><img class="colorbox-5474"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Schéma récapitulatif de la synchronisation" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/fig11_thumb.png" alt="Schéma récapitulatif de la synchronisation" width="240" height="240" border="0" /></a></p>
<h2>Conclusion</h2>
<p>Voilà qui conclue les grandes étapes de la réalisation de S-Fit. Comme vous avez pu le voir les possibilités de personnalisation sont très nombreuses. C’est un projet ludique et facile à réaliser. C’est également un bon point de départ pour prendre en main la plateforme Constellation. Nous espérons vraiment qu’il vous a plu et que vous allez réaliser votre propre version.</p>
<p>Nous tenons également à remercier Julie, Adrien et tous ceux qui se sont impliqués de près ou de loin dans la réalisation de ce projet.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/fig9.jpg"><img class="colorbox-5474"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="L’équipe au complet" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/fig9_thumb.jpg" alt="L’équipe au complet" width="404" height="256" border="0" /></a></p>
<p>Auteurs : Valentin BEQUART, David BRICENO-AGUILERA, Pierre-Alexandre CHOAIN, Milan FERTIN et Hugo MROCZKOWSKI.</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/showcases/s-fit-concevez-un-miroir-connecte-oriente-fitness/">S-Fit : Concevez un miroir connecté orienté fitness</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://developer.myconstellation.io/showcases/s-fit-concevez-un-miroir-connecte-oriente-fitness/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Constellation 1.8.1 est disponible</title>
		<link>https://developer.myconstellation.io/blog/constellation-1-8-1-est-disponible/</link>
					<comments>https://developer.myconstellation.io/blog/constellation-1-8-1-est-disponible/#respond</comments>
		
		<dc:creator><![CDATA[Sebastien Warin]]></dc:creator>
		<pubDate>Fri, 16 Sep 2016 13:11:42 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Constellation]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Console]]></category>
		<category><![CDATA[Changelog]]></category>
		<category><![CDATA[Sentinel]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=2572</guid>

					<description><![CDATA[<p>Après deux mois en “Release Candidate”, la version 1.8.1 de la plateforme Constellation est disponible pour tous sur l’environnement de production “stable”. Vous pouvez donc mettre à jour votre installation en lançant le « Web Platform Installer » : Ou sur Linux</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/blog/constellation-1-8-1-est-disponible/">Constellation 1.8.1 est disponible</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Après deux mois en “Release Candidate”, la version 1.8.1 de la plateforme Constellation est disponible pour tous sur l’environnement de production “stable”.</p>
<p>Vous pouvez donc mettre à jour votre installation en lançant le « Web Platform Installer » :</p>
<div class="wpfilebase-file-default" onclick="if('undefined' == typeof event.target.href) document.getElementById('wpfb-file-link-1').click();">
  <div class="icon"><a href="https://developer.myconstellation.io/download/installers/Constellation-Web-Platform-Installer-1.9.735.exe" target="_blank" title="Download Constellation Web Platform Installer"><img class="colorbox-2572"  align="middle" src="https://developer.myconstellation.io/wp-includes/images/crystal/interactive.png" alt="Constellation Web Platform Installer" /></a></div>
  <div class="filetitle">
    <a href="https://developer.myconstellation.io/download/installers/Constellation-Web-Platform-Installer-1.9.735.exe" title="Download Constellation Web Platform Installer" target="_blank" id="wpfb-file-link-1">Constellation Web Platform Installer</a>
    <a href="https://developer.myconstellation.io/getting-started/installer-constellation/#wpfb-file-42" class="postlink">» Article</a>
    <br />
    Constellation-Web-Platform-Installer-1.9.735.exe<br />
    Version: 1.9.735<br />
  </div>
  <div class="info">
    1.2 MiB<br />
    2137 Downloads<br />
    <a href="#" onclick="return wpfilebase_filedetails(1);">Détails</a>
  </div>
  <div class="details" id="wpfilebase-filedetails1" style="display: none;">
  <p>Constellation Web Platform Installer pour Windows</p>
  <table border="0">
   
   <tr><td><strong>Auteur:</strong></td><td>MyConstellation.io</td></tr>
   <tr><td><strong>Plateformes:</strong></td><td>Windows</td></tr>
   
   <tr><td><strong>Catégorie:</strong></td><td>Web Platform Installers</td></tr>
   <tr><td><strong>Licence:</strong></td><td>Constellation License Agreement</td></tr>
   <tr><td><strong>Date:</strong></td><td>juin 15, 2020</td></tr>
  </table>
  </div>
 <div style="clear: both;"></div>
</div>
<p>Ou sur Linux en lançant la commande suivante :</p>
<p></p><pre class="crayon-plain-tag">wget -O install.sh https://developer.myconstellation.io/download/installers/install-linux.sh &amp;&amp; chmod +x install.sh &amp;&amp; ./install.sh</pre><p></p>
<p>A ce sujet, le « Web Platform Installer » pour Linux a été revu pour corriger les différents bugs remontés par la communauté.</p>
<h3>Constellation Server 1.8.1 : ajout des compteurs de performance et nouvelle API de Management</h3>
<p>Outre la refonte du manageur de StateObject et diverses optimisations et corrections de bugs mineurs, la nouvelle version du serveur Constellation supporte les compteurs de performance sous Windows pour pouvoir suivre l’activité du serveur.</p>
<p>Vous trouverez dans l’analyseur de performance Windows une nouvelle catégorie Constellation avec l’ensemble des compteurs du serveur :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/04/image-8.png"><img class="colorbox-2572"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Compteurs de performance Windows" src="https://developer.myconstellation.io/wp-content/uploads/2017/04/image_thumb-8.png" alt="Compteurs de performance Windows" width="240" height="180" border="0" /></a></p>
<p>L’autre grande nouveauté concerne l’API de Management. Elle met à disposition une API HTTP/REST d’édition de la configuration de votre Constellation :</p>
<ul>
<li>Gestion des sentinelles</li>
<li>Gestion des packages</li>
<li>Gestion des groupes</li>
<li>Gestion des settings</li>
<li>Gestion des RecoveryOptions</li>
<li>Gestion des credentials et autorisations</li>
<li>Gestion du Package Repository et upload de package</li>
<li>Gestion de la licence</li>
<li>Lire / Ecriture du fichier de configuration</li>
<li>Récupération du numéro de version du serveur</li>
<li>Rechargement et déploiement de la configuration</li>
</ul>
<p>Vous trouverez <a href="/client-api/rest-api/interface-rest-management/">sur cette page la documentation complète</a> relative à cette API.</p>
<h3>Constellation Sentinel 1.8.1</h3>
<p>Les sentinelles remontent désormais au serveur des informations quant au moteur .NET utilisé et prennent en compte les changements de configuration des <a href="/constellation-platform/constellation-server/fichier-de-configuration/#Section_recoveryOptions">RecoveryOptions</a> même si le package est déjà démarré. Aussi diverses optimisations et correctifs de bugs mineurs sont embarqués dans cette mise à jour.</p>
<h3>Constellation Console 1.8.1 : une console vraiment complète !</h3>
<p>C’est certainement la principale nouveauté de cette release 1.8.1 : l’évolution majeure de la Console !</p>
<p>Couplée à l’API de Management du serveur Constellation 1.8.1, il est désormais possible de configurer / piloter la quasi-totalité de Constellation depuis l’interface graphique de la Console sans devoir éditer le fichier de configuration XML manuellement.</p>
<p>De plus, cette version ajoute le catalogue en ligne de package Constellation directement dans la Console.</p>
<h5>Gestion des sentinelles et packages</h5>
<p>Il est maintenant possible d’ajouter, éditer ou supprimer les sentinelles depuis l’interface graphique.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/04/image-9.png"><img class="colorbox-2572"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Ajout de sentinelles" src="https://developer.myconstellation.io/wp-content/uploads/2017/04/image_thumb-9.png" alt="Ajout de sentinelles" width="350" height="146" border="0" /></a></p>
<p align="left">De la même façon, il est possible de déployer des packages sans devoir éditer le fichier de configuration XML grâce à un assistant de déploiement :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/04/image-10.png"><img class="colorbox-2572"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Déployer un package" src="https://developer.myconstellation.io/wp-content/uploads/2017/04/image_thumb-10.png" alt="Déployer un package" width="350" height="128" border="0" /></a></p>
<p align="left">De plus il est maintenant possible d’éditer la configuration ou les paramètres (settings) d’un package, de gérer les groupes de messages ou encore de supprimer les packages depuis l’interface de la Console :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/04/image-11.png"><img class="colorbox-2572"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Gestion des packages" src="https://developer.myconstellation.io/wp-content/uploads/2017/04/image_thumb-11.png" alt="Gestion des packages" width="350" height="165" border="0" /></a></p>
<ul><!--EndFragment--></ul>
<h5>Gestion des settings</h5>
<p>La Console 1.8.1 rend possible l’édition des settings des packages sur base du manifeste. La Console tient compte des <a href="/concepts/package-manifest/#Informations_sur_les_Settings_du_package">différentes informations contenues dans le manifeste</a> comme les valeurs par défaut, le type du setting, son caractère obligatoire ou non, etc..</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/04/image-12.png"><img class="colorbox-2572"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Edition de settings" src="https://developer.myconstellation.io/wp-content/uploads/2017/04/image_thumb-12.png" alt="Edition de settings" width="350" height="210" border="0" /></a></p>
<p align="left">De plus l’éditeur s’adaptera en fonction du type du setting (types simples, section XML ou JSON) :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/04/image-13.png"><img class="colorbox-2572"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Edition de settings" src="https://developer.myconstellation.io/wp-content/uploads/2017/04/image_thumb-13.png" alt="Edition de settings" width="350" height="280" border="0" /></a></p>
<h5>Le catalogue de package en ligne</h5>
<p>Le catalogue de package officiel est directement intégré dans la console ce qui vous permettra de déployer des nouveaux packages ou les mises à jour sans quitter votre Console Constellation.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/04/image-14.png"><img class="colorbox-2572"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Ajout du catalogue en ligne" src="https://developer.myconstellation.io/wp-content/uploads/2017/04/image_thumb-14.png" alt="Ajout du catalogue en ligne" width="350" height="223" border="0" /></a></p>
<h5>Gestion des crédentials et des autorisations</h5>
<p>Il est désormais possible de gérer les crédentials depuis l’interface de la Console sans devoir éditer la configuration XML :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/04/image-15.png"><img class="colorbox-2572"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Gestion des credentials" src="https://developer.myconstellation.io/wp-content/uploads/2017/04/image_thumb-15.png" alt="Gestion des credentials" width="350" height="83" border="0" /></a></p>
<p align="left">De plus, les autorisations sont également éditables depuis la Console :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/04/image-16.png"><img class="colorbox-2572"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Gestion des autorisations" src="https://developer.myconstellation.io/wp-content/uploads/2017/04/image_thumb-16.png" alt="Gestion des autorisations" width="350" height="368" border="0" /></a></p>
<h5>Editeur de configuration</h5>
<p>L’éditeur de configuration a évolué afin d’ajouter l&rsquo;IntelliSense sur du base du schéma de configuration de Constellation pour simplifier l’édition bien qu’avec cette nouvelle version 1.8.1 il n’est plus tellement nécessaire de devoir éditeur ce fichier manuellement, l’interface de la Console permet la quasi-totalité des opérations.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/04/image-17.png"><img class="colorbox-2572"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Ajout de l'IntelliSense" src="https://developer.myconstellation.io/wp-content/uploads/2017/04/image_thumb-17.png" alt="Ajout de l'IntelliSense" width="350" height="127" border="0" /></a></p>
<p>Pour consulter le changelog complet de la version 1.8.1 :</p>
<ul>
<li><a href="/constellation-platform/changelog/#15092016_Release_181_18116259">Release 1.8.1 (1.8.1.16259)</a></li>
<li><a href="/constellation-platform/changelog/#14092016_Release_181_RC3_18116258">Release 1.8.1 RC3 (1.8.1.16258)</a></li>
<li><a href="/constellation-platform/changelog/#21072016_Release_181_RC2_18116203">Release 1.8.1 RC2 (1.8.1.16203)</a></li>
<li><a href="/constellation-platform/changelog/#20072016_Release_181_RC1_18116202">Release 1.8.1 RC1 (1.8.1.16202)</a></li>
</ul>
<p>N’hésitez pas à remonter <a href="https://developer.myconstellation.io/forums/topic/constellation-1-8-1-en-release-candidate/">vos feedbacks sur le forum</a>.</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/blog/constellation-1-8-1-est-disponible/">Constellation 1.8.1 est disponible</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://developer.myconstellation.io/blog/constellation-1-8-1-est-disponible/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Exposer Constellation en HTTPS derrière un reverse proxy avec Nginx et Let&#8217;s Encrypt</title>
		<link>https://developer.myconstellation.io/constellation-platform/constellation-server/exposer-constellation-en-https-derriere-un-reverse-proxy-avec-nginx-et-lets-encrypt/</link>
					<comments>https://developer.myconstellation.io/constellation-platform/constellation-server/exposer-constellation-en-https-derriere-un-reverse-proxy-avec-nginx-et-lets-encrypt/#respond</comments>
		
		<dc:creator><![CDATA[Sebastien Warin]]></dc:creator>
		<pubDate>Wed, 25 Apr 2018 08:11:01 +0000</pubDate>
				<category><![CDATA[Constellation Server]]></category>
		<category><![CDATA[Constellation]]></category>
		<category><![CDATA[Proxy]]></category>
		<category><![CDATA[Reverse Proxy]]></category>
		<category><![CDATA[Certificat]]></category>
		<category><![CDATA[TCP]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[HTTPS]]></category>
		<category><![CDATA[Routeur]]></category>
		<category><![CDATA[Configuration]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[SSL]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=5890</guid>

					<description><![CDATA[<p>Pour sécuriser votre Constellation vous devez utilise le protocole HTTPS afin de chiffrer toutes les communications en SSL. Si vous avez un serveur Windows, vous pouvez également utiliser IIS pour configurer un reverse proxy vers Constellation. Dans cet article nous</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/constellation-platform/constellation-server/exposer-constellation-en-https-derriere-un-reverse-proxy-avec-nginx-et-lets-encrypt/">Exposer Constellation en HTTPS derrière un reverse proxy avec Nginx et Let&rsquo;s Encrypt</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Pour sécuriser votre Constellation vous devez utilise le protocole HTTPS afin de chiffrer toutes les communications en SSL.</p>
<p><img loading="lazy" class="alignnone size-full wp-image-3796 aligncenter colorbox-5890" src="https://developer.myconstellation.io/wp-content/uploads/2016/08/ssl.jpg" alt="" width="253" height="189" /></p>
<p>Si vous avez un serveur Windows, vous pouvez également <a href="/constellation-platform/constellation-server/exposer-constellation-derrire-un-serveur-web-reverse-proxy/">utiliser IIS pour configurer un reverse proxy</a> vers Constellation.</p>
<p>Dans cet article nous allons découvrir comment exposer le serveur Constellation derrière un serveur Nginx protégé avec un certificat SSL Let’s Encrypt.</p>
<h3>Prérequis : avoir une Constellation exposée publiquement avec un nom DNS</h3>
<p>Avant de démarrer vous devez avoir un serveur Constellation opérationel.</p>
<p>Si vous installez Constellation sur un Linux, cela se résume à lancer la commande ci-dessous et à suivre l&rsquo;assistant :</p>
<p></p><pre class="crayon-plain-tag">wget -O install.sh https://developer.myconstellation.io/download/installers/install-linux.sh &amp;&amp; chmod +x install.sh &amp;&amp; ./install.sh</pre><p></p>
<p>Pour plus d’information, veuillez suivre le guide : <a href="/constellation-platform/constellation-server/installer-constellation-sur-linux/">Installer Constellation sur Linux.</a></p>
<p>On considéra à ce stade que votre serveur Constellation est démarré et opérationnel. Vous pouvez lancer la commande suivante pour vérifier le statut des services Constellation :</p>
<p></p><pre class="crayon-plain-tag">sudo supervisorctl status</pre><p></p>
<p>Vous devriez voir le “<em>constellation-server</em>” avec le statut “RUNNING” (et la sentinelle si déployée) :</p>
<p></p><pre class="crayon-plain-tag">sebastien@ubuntu:~$ sudo supervisorctl status
constellation-sentinel           RUNNING   pid 1194, uptime 1 day, 17:36:48
constellation-server             RUNNING   pid 2888, uptime 1 day, 15:06:41</pre><p></p>
<p>Vous pouvez également installer Constellation sur un système Windows (voir <a href="/getting-started/installer-constellation/">le guide</a>).</p>
<p>En effet, le reverse proxy (ici Ngnix) qui sera installé sur un système Linux peut exposer un service tel que Constellation quelque soit le serveur sur lequel il est déployé. Le reverse proxy n&rsquo;est pas nécessairement sur la même machine sur le ou les services à exposer.</p>
<p>Il est donc possible d&rsquo;installer un serveur Linux avec Nginx pour exposer en SSL un serveur Constellation sur un système Windows de la même manière que nous pouvons installer un serveur <a href="/constellation-platform/constellation-server/exposer-constellation-derrire-un-serveur-web-reverse-proxy/">Windows avec IIS</a> pour exposer en SSL un serveur Constellation sur un système Linux !</p>
<p>Dans ce guide nous avons installer le serveur Constellation et le reverse proxy Nginx sur le même serveur, sous Linux Ubuntu 16.</p>
<p>Si vous souhaitez activer le HTTPS et donc ajouter un certificat SSL, vous devez nécessairement avoir un nom DNS qui pointe vers l’adresse IP (public) de votre serveur de reverse proxy.</p>
<p>Plusieurs options s&rsquo;offre à vous :</p>
<ul>
<li>Si vous avez un nom de domaine, modifiez votre zone DNS pour ajouter un “host” (enregistrement A ou AAAA) vers l’adresse IP (public) de votre Constellation.</li>
<li>SI vous n’avez pas de nom de domaine :
<ul>
<li>Achetez-en un ! Comptez environ 15€/an pour les extensions standards (.fr, .net, .com), 2,99€ HT par an pour  un <a href="https://www.ovh.com/fr/domaines/" target="_blank" rel="noopener noreferrer">.ovh</a></li>
<li>Utilisez un service de “Dynamic DNS” comme dyndns.fr, dyn.com ou autre</li>
<li>Certains FAI comme Free proposent d&rsquo;attacher un nom DNS type xxxx.hd.free.fr à votre IP de connexion</li>
<li>Certains NAS comme Synology permettent aussi de créer un DDNS type xxx.synology.me vers votre IP de connexion</li>
</ul>
</li>
</ul>
<p>Dans le cas présent, j’ai crée l’entrée DNS “demo.internal.myconstellation.io” qui pointe vers l’adresse IP public du serveur Constellation installé sur un Ubuntu (le DNS doit pointer votre le serveur où sera installé le reverse proxy dans la mesure où tout passera par lui. Etant donné que le reverse proxy sera sur le même serveur que le service Constellation on peut dire que le DNS pointe vers le serveur Constellation).</p>
<p>Bien évidement, si votre serveur est installé dernière un routeur avec du NAT (typiquement sur un réseau local derrière une box Internet) vous devez configurer la redirection de port sur votre routeur/box internet.</p>
<p>Encore une fois, on part du principe que le serveur de R.P et Constellation sont sur le même serveur, donc la même IP interne.</p>
<p>Dans un premier temps redirigez seulement le port 8088 en tcp sur l’IP interne de votre serveur Constellation. A noter que nous supprimerons cette redirection une fois le reverse proxy installé.</p>
<p>Donc pour résumer et avant de démarrer, vous devez avoir votre serveur Constellation démarré répondant sur l’URL : <a href="http://&lt;mon_nom_dns&gt;:8088">http://&lt;mon_nom_dns&gt;:8088</a></p>
<p>Dans mon cas : <a href="http://demo.internal.myconstellation.io:8088">http://demo.internal.myconstellation.io:8088</a> :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2018/04/image-1.png"><img class="colorbox-5890"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Serveur Constellation sur un nom DNS" src="https://developer.myconstellation.io/wp-content/uploads/2018/04/image_thumb.png" alt="Serveur Constellation sur un nom DNS" width="484" height="291" border="0" /></a></p>
<p>Voilà vous êtes prêt, votre Constellation est démarrée et elle répond bien sur un nom DNS public depuis l&rsquo;internet.</p>
<h3>Exposer Constellation derrière Nginx</h3>
<p>Avant de démarrer il est recommandé de mettre à jour le référentiel du gestionnaire de package par la commande suivante :</p>
<p></p><pre class="crayon-plain-tag">sudo apt-get update</pre><p></p>
<p>Ensuite installez le serveur Web Nginx avec la commande :</p>
<p></p><pre class="crayon-plain-tag">sudo apt-get install nginx</pre><p></p>
<p>Les fichiers de configuration sont situés dans le répertoire “<em>/etc/nginx/sites-available/</em>” et pour les activer on crée un lien symbolique vers ces fichiers dans le répertoire “<em>/etc/nginx/sites-enabled</em>”.</p>
<p>Pour commencer désactivez la configuration par défaut par la commande ci-dessous :</p>
<p></p><pre class="crayon-plain-tag">sudo rm /etc/nginx/sites-enabled/default</pre><p></p>
<p>Comme vous l’aurez compris le contenu de cette configuration par défaut est toujours présente dans le répertoire “<em>/etc/nginx/sites-available/</em>” mais non activée car on a supprimé le lien symbolique vers ce fichier dans le répertoire “<em>site-enabled</em>”.</p>
<p>Maintenant nous allons créer une configuration pour notre reverse proxy avec la commande :</p>
<p></p><pre class="crayon-plain-tag">sudo nano /etc/nginx/sites-available/constellation</pre><p></p>
<p>Dans ce fichier, copiez le contenu suivant :</p>
<p></p><pre class="crayon-plain-tag">server {
    listen 80; listen [::]:80;
    server_name demo.internal.myconstellation.io;

    location / {
        proxy_pass http://localhost:8088;

        set $content_length_safe $http_content_length;
        if ($content_length_safe = "") {
            set $content_length_safe 0;
        }
        proxy_set_header Content-Length $content_length_safe;

        proxy_set_header Host $host;
        proxy_set_header Connection "";
        proxy_http_version 1.1;

        proxy_buffering off;
        proxy_cache off;
        proxy_connect_timeout 30;
        proxy_send_timeout 30;
        proxy_read_timeout 150;
    }
}</pre><p></p>
<p>Vous devez modifier le paramètre “<em>server_name</em>” avec le nom DNS de votre serveur Constellation, dans le cas présent “demo.internal.myconstellation.io”.</p>
<p>Il est important de bien reprendre les mêmes options, notamment le “<em>proxy_buffering</em>” pour permettre les “<em>server-Sent events</em>” vers le serveur Constellation.</p>
<p>Dans le cas présent Nginx va « proxifer » les requêtes vers <em>http://localhost:8088</em>, c&rsquo;est à dire au service Constellation (port 8088) installé sur le même serveur (localhost).</p>
<p>Tapez ensuite sur la combinaison de touches “Ctrl+X” pour quitter en prenant suivant d’enregistrer le fichier. Puis, pour activer cette configuration, créez le lien symbolique suivant :</p>
<p></p><pre class="crayon-plain-tag">sudo ln -s /etc/nginx/sites-available/constellation  /etc/nginx/sites-enabled/constellation</pre><p></p>
<p>Avant de redémarrer Nginx, éditez le fichier de configuration global pour augmenter la taille maximale des requêtes entrantes afin de pouvoir uploader des packages Constellation sur le serveur (par défaut cette taille est fixée à 1Mo, autrement dit vous obtiendrez une erreur 413 « Request Entity Too Large » si vous tentez d&rsquo;uploader un package de plus de 1Mo).</p>
<p></p><pre class="crayon-plain-tag">sudo nano /etc/nginx/nginx.conf</pre><p></p>
<p>Sous la section « http », ajoutez l&rsquo;option « <strong>client_max_body_size</strong> » (ou si l&rsquo;option existe déjà, modifiez sa valeur) que nous fixerons à 100 Méga :</p>
<p></p><pre class="crayon-plain-tag">client_max_body_size 100M;</pre><p></p>
<p>Pour finir, rechargez Nginx afin prendre en compte notre nouvelle configuration :</p>
<p></p><pre class="crayon-plain-tag">sudo systemctl reload nginx</pre><p></p>
<p>Votre Constellation est maintenant accessible derrière Nginx sur le port 80.</p>
<p>Rendez-vous donc sur l’adresse http://&lt;votre_nom_dns&gt; (sans spécifier le port, car 80 par défaut) pour vérifier que le reverse proxy est opérationnel. Dans le cas présent <a href="http://demo.internal.myconstellation.io">http://demo.internal.myconstellation.io</a></p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2018/04/image-2.png"><img class="colorbox-5890"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2018/04/image_thumb-1.png" alt="image" width="484" height="290" border="0" /></a></p>
<p align="left">Ce n’est donc plus Constellation qui répond mais notre serveur Nginx qui lui même communique avec le serveur Constellation local.</p>
<p align="left">Donc pour résumer, sur le port 80 c&rsquo;est le serveur Nginx qui répond en transférant au serveur Constellation sur le port 8088.</p>
<p><span style="text-decoration: underline;">Note</span> : si vous êtes dernière un routeur avec du NAT, n’oubliez pas d’ajouter la redirection du port 80 vers votre serveur Constellation interne. Par la même occasion vous pouvez supprimer la redirection du port 8088, ainsi tout passera nécessairement par Nginx.</p>
<h3>Activer le HTTPS avec des certificats SSL Let’s Encrypt</h3>
<p>Maintenant que votre service Constellation est exposé dernière le serveur Nginx vous allez pouvoir configurer différentes choses sur Nginx comme par exemple des restrictions d&rsquo;accès , l’authentification, des limites (throttling) et bien d’autre chose. Dans le cas présent on va s’intéresser au support du SSL.</p>
<p>Pour activer le HTTPS, il vous faut un certificat SSL. Pour simplifier la démarche, Let’s Encrypt est une autorité de certification lancée en 2015 qui permet d’automatiser la génération de certificat. De plus le service est gratuit ! Les certificats sont valides trois mois, il faudra donc régulièrement les renouveler mais vous allez voir que cette action est entièrement automatisable.</p>
<p>Ici nous allons utiliser <a href="https://certbot.eff.org/" target="_blank" rel="noopener noreferrer">Certbot</a>, un agent installé sur le serveur qui permet de générer et renouveler automatiquement les certificats SSL Let’s Encrypt.</p>
<p>Commencez par ajouter le repository suivant :</p>
<p></p><pre class="crayon-plain-tag">sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update</pre><p></p>
<p>Ensuite installez Certbot pour Nginx :</p>
<p></p><pre class="crayon-plain-tag">sudo apt-get install python-certbot-nginx</pre><p></p>
<p>Une fois installé, lancez la commande “<em>certbot –nginx</em>” en spécifiant le nom DNS vers votre serveur. Dans le cas présent :</p>
<p></p><pre class="crayon-plain-tag">sudo certbot --nginx -d demo.internal.myconstellation.io</pre><p></p>
<p>L’assistant vous demandera tout d’abord votre adresse mail :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2018/04/image-3.png"><img class="colorbox-5890"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2018/04/image_thumb-2.png" alt="image" width="484" height="100" border="0" /></a></p>
<p>Après avoir accepté les conditions du service, l’assistant va automatiquement valider un challenge en interrogeant votre site Web (d’où la nécessité d’avoir exposé correctement votre serveur sur Internet avec le nom DNS spécifié), créer le certificat SSL et l&rsquo;ajouter dans votre configuration Nginx.</p>
<p>Pour finir l’assistant vous proposera de modifier automatiquement la configuration de votre Nginx pour rediriger tous les appels HTTP (port 80) vers HTTPS (port 443).</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2018/04/image-4.png"><img class="colorbox-5890"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Activation de la redirection HTTPS" src="https://developer.myconstellation.io/wp-content/uploads/2018/04/image_thumb-3.png" alt="Activation de la redirection HTTPS" width="484" height="438" border="0" /></a></p>
<p>Choisissiez l’option 2 pour activer cette redirection.</p>
<p>Et voilà, votre serveur Nginx est configuré avec le certificat SSL généré par Let’s Encrypt et toutes les requêtes seront redirigés en HTTPS et donc chiffrés !</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2018/04/image-5.png"><img class="colorbox-5890"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2018/04/image_thumb-4.png" alt="image" width="484" height="108" border="0" /></a></p>
<p align="left"><strong>Votre Constellation est maintenant protégée !</strong></p>
<p align="left">Rechargez la page dans votre navigateur (F5) sur l’URL <em>http://&lt;mon_nom_dns&gt;</em> vous constaterez la redirection automatique en <em>https://</em> et le cadenas vert vous informant du chiffrement SSL :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2018/04/image-6.png"><img class="colorbox-5890"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Constellation en HTTPS" src="https://developer.myconstellation.io/wp-content/uploads/2018/04/image_thumb-5.png" alt="Constellation en HTTPS" width="484" height="290" border="0" /></a></p>
<p align="left">(Note : pour les personnes derrières un NAT, n’oubliez pas non plus d&rsquo;ajouter la redirection du port 443 vers votre serveur Nginx interne)</p>
<p align="left">Pour vérifier le bon renouvellement du certificat vous pouvez utiliser la commande suivante :</p>
<p></p><pre class="crayon-plain-tag">sudo certbot renew --dry-run</pre><p></p>
<p align="left">Certbot a automatiquement installé un trigger dans systemd (ou crontab selon le système) pour réaliser le renouvellement et déploiement automatique de vos certificats avant leurs expirations.</p>
<p align="left">Pour les plus curieux, vous pouvez jeter un œil dans le fichier “<em>/etc/nginx/sites-available/constellation</em>” pour voir les modifications apportées par Certbot.</p>
<h3>Pour aller plus loin</h3>
<h4>Sécuriser le serveur avec un firewall UFW et fail2ban</h4>
<h5>Installer fail2ban</h5>
<p><a href="http://fail2ban.sourceforge.net/">Fail2ban</a> est un script tournant en tâche de fond qui va vérifier si les tentatives d&rsquo;authentification SSH et Nginx; et en cas d&rsquo;attaque, bannir l&rsquo;IP grâce à <code>iptables</code>.</p>
<p></p><pre class="crayon-plain-tag">sudo apt-get install fail2ban</pre><p></p>
<p>Pour plus d’info:  <a title="https://www.digitalocean.com/community/tutorials/how-to-protect-an-nginx-server-with-fail2ban-on-ubuntu-14-04" href="https://www.digitalocean.com/community/tutorials/how-to-protect-an-nginx-server-with-fail2ban-on-ubuntu-14-04">https://www.digitalocean.com/community/tutorials/how-to-protect-an-nginx-server-with-fail2ban-on-ubuntu-14-04</a></p>
<h5>Installer UFW</h5>
<p>UFW est un firewall applicatif. Pour l’installer :</p>
<p></p><pre class="crayon-plain-tag">sudo apt-get install ufw</pre><p></p>
<p>Autorisez ensuite les services HTTP (nécessaire pour le challenge Let’s Encrypt), HTTPS (notre reverse proxy Nginx vers Constellation) et SSH :</p>
<p></p><pre class="crayon-plain-tag">sudo ufw allow http
sudo ufw allow https
sudo ufw allow ssh</pre><p></p>
<p>Pour l’activer :</p>
<p></p><pre class="crayon-plain-tag">sudo ufw enable</pre><p></p>
<p>Votre serveur Linux ne répondra plus que sur les ports 22 (ssh), 80 (http), 443 (https) en IPv4 et IPv6.</p>
<p></p><pre class="crayon-plain-tag">sebastien@ubuntu:~$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
80                         ALLOW       Anywhere
443                        ALLOW       Anywhere
22                         ALLOW       Anywhere
80 (v6)                    ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)
22 (v6)                    ALLOW       Anywhere (v6)</pre><p></p>
<p>Vous noterez que le port 8088 n&rsquo;est maintenant plus accessible car bloqué par le firewall UFW. Il faudra forcement se connecter à Constellation via Nginx en HTTPS. N’oubliez pas alors de modifier l’URI de votre Constellation sur vos sentinelles existantes pour prendre en compte ce changement.</p>
<h4>Ajouter d’autre application Web dernière votre reverse proxy SSL</h4>
<p>Jusqu&rsquo;au présent vous avez configuré un nom DNS type “demo.internal.myconstellation.io” qui pointe vers votre serveur Linux sur lequel le service Nginx répond en HTTP (80) et HTTPS (443) avec un certificat Let’s Encrypt pour “proxifier” les requêtes vers le service Constellation accessible localement sur le port 8088.</p>
<p>Vos utilisateurs se connectent donc forcement en HTTPS sur le reverse proxy pour accéder à Constellation !</p>
<p>La règle configurée dans Ngnix “proxifie” toutes les requêtes à partir de la racine « / » vers Constellation :</p>
<p></p><pre class="crayon-plain-tag">location / {
        proxy_pass http://localhost:8088;
....
}</pre><p></p>
<p>Mais il est également possible d’adapter cette règle pour que votre reverse proxy ne soit plus exclusivement un passe-plat pour Constellation mais aussi pour vos autres services internes (une box domotique, un serveur Web, un objet connecté, une camera IP, etc…).</p>
<p>Vous aurez ainsi la possibilité d’exposer différents services Web internes dernière votre reverse proxy profitant d’un même port TCP (le 443) et donc d’un même canal de communication sécurisé (par le cryptage SSL).</p>
<p>Parmi les différentes options pour ce type de configuration :</p>
<ol>
<li>Reverse proxy en fonction du “server_name”</li>
<li>Reverse proxy en fonction de la “location”</li>
</ol>
<h5>Reverse Proxy en fonction du server_name</h5>
<p>Le principe est de rejouer ce tutoriel depuis le début pour chacune de vos applications à exposer.</p>
<p>Vous devrez ainsi créer une adresse DNS vers votre IP public pour chaque site, créer une configuration Nginx en changeant le « <em>server_name</em> » et « <em>proxy_pass</em> » vers la ressource interne à exposer et créer un certificat SSL avec Certbot pour tous vos sites créés.</p>
<p>Vous aurez ainsi une multitude de nom DNS qui pointerons tous vers votre serveur Nginx qui lui redirigera vers les ressources internes en fonction du « server_name ». Par exemple “constellation.mondomaine.fr”, “macamera.mondomaine.fr”, “jeedom.mondomaine.fr”, etc.. etc..</p>
<p>La configuration est simple car il s’agit de répéter ce tutoriel pour chaque service, par contre l’administration est un peu lourde et vous aurez autant de sous domaine et donc de certificat que de service à exposer.</p>
<h5>Reverse Proxy en fonction de la “location”</h5>
<p>Dans ce mode, nous gardons un seul site Nginx (celui configuré dans le fichier <em>/etc/nginx/sites-available/constellation</em>) et donc un seul nom de domaine (ici <em>demo.internal.myconstellation.io</em>) avec son certificat associé.</p>
<p>Cependant au lieu de “rediriger” les requêtes depuis la racine « / » vers Constellation nous allons créer plusieurs “location”.</p>
<p>Prenons un exemple pour bien comprendre. Ici le serveur Ngnix est installé sur la même que le serveur Constellation, donc localhost. Imaginons que dans ce même réseau LAN, j’ai par exemple un serveur ZoneMinder qui répond sur 192.168.0.10 et une box Jeedom sur 192.168.0.11.</p>
<p>Je pourrais éditer la configuration Nginx de cette façon :</p>
<p></p><pre class="crayon-plain-tag">location /constellation/ {
        proxy_pass http://localhost:8088/constellation/;

        proxy_set_header Host $host;
        proxy_set_header Connection "";
        proxy_http_version 1.1;

        proxy_buffering off;
        proxy_cache off;
        proxy_connect_timeout 30;
        proxy_send_timeout 30;
    }
    
    
location /zm/ {
        proxy_pass <a href="http://192.168.0.10/zm/;">http://192.168.0.10/zm/;

</a>        proxy_set_header Host $host;
        proxy_set_header Connection "";
        proxy_http_version 1.1;
    }
    
location /jeedom/ {
        proxy_pass http://192.168.0.11;

        proxy_set_header Host $host;
        proxy_set_header Connection "";
        proxy_http_version 1.1;
    }</pre><p></p>
<p>Ainsi, en fonction du “path” demandé, un service différent me répondra :</p>
<ul>
<li><a href="https://&lt;mon_nom_DNS&gt;/constellation">https://&lt;mon_nom_DNS&gt;/constellation</a> : réponse du serveur Constellation</li>
<li><a href="https://&lt;mon_nom_DNS&gt;/zm">https://&lt;mon_nom_DNS&gt;/zm</a>  : réponse du serveur ZoneMinder</li>
<li><a href="https://&lt;mon_nom_DNS&gt;/jeedom">https://&lt;mon_nom_DNS&gt;/jeedom</a> : réponse du serveur Jeedom</li>
</ul>
<p><u>Attention</u> : si le serveur Constellation répond sur un “sous path”, comme ici “/constellation” il faut également modifier la configuration du serveur Constellation pour l’informer.</p>
<p>Pour cela modifiez le ficher “<em>/opt/constellation-server/Constellation.Server.exe.config</em>” :</p>
<p></p><pre class="crayon-plain-tag">sudo nano /opt/constellation-server/Constellation.Server.exe.config</pre><p></p>
<p>Et modifier le <em>listenUri</em> pour reprendre la même structure d’URI, ici en ajoutant “/constellation” :</p>
<p></p><pre class="crayon-plain-tag">&lt;listenUris&gt;
    &lt;uri listenUri="http://+:8088/constellation" /&gt;
&lt;/listenUris&gt;</pre><p></p>
<p>Pour finir, il faudra relancer le service Constellation pour prendre en compte ce changement :</p>
<p></p><pre class="crayon-plain-tag">sudo supervisorctl restart constellation-server</pre><p></p>
<p>Voilà votre Constellation répond maintenant sur le /constellation, dans notre cas <a title="https://demo.internal.myconstellation.io/constellation" href="https://demo.internal.myconstellation.io/constellation">https://demo.internal.myconstellation.io/constellation</a> :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2018/04/image-7.png"><img class="colorbox-5890"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Constellation derrière Nginx" src="https://developer.myconstellation.io/wp-content/uploads/2018/04/image_thumb-6.png" alt="Constellation derrière Nginx" width="484" height="290" border="0" /></a></p>
<p align="left">Si maintenant on change le path pour “/zm” soit ici <a href="https://demo.internal.myconstellation.io/zm">https://demo.internal.myconstellation.io/zm</a>, c’est notre serveur ZoneMinder qui répondra :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2018/04/image-8.png"><img class="colorbox-5890"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="ZoneMinder derrière Nginx" src="https://developer.myconstellation.io/wp-content/uploads/2018/04/image_thumb-7.png" alt="ZoneMinder derrière Nginx" width="484" height="290" border="0" /></a></p>
<p>On a donc un seul serveur en frontal, Ngnix qui écoute en HTTPS avec le certificat Let’s Encrypt pour sécuriser TOUS les échanges et qui, selon le “path” demandé, transféra les requêtes vers les différents services internes de votre réseau.</p>
<p>A noter que vous pouvez également utiliser des expressions régulières (regex) pour définir vos “locations”. Pour plus d’information : <a title="https://www.scalescale.com/tips/nginx/nginx-location-directive/" href="https://www.scalescale.com/tips/nginx/nginx-location-directive/">https://www.scalescale.com/tips/nginx/nginx-location-directive/</a></p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/constellation-platform/constellation-server/exposer-constellation-en-https-derriere-un-reverse-proxy-avec-nginx-et-lets-encrypt/">Exposer Constellation en HTTPS derrière un reverse proxy avec Nginx et Let&rsquo;s Encrypt</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://developer.myconstellation.io/constellation-platform/constellation-server/exposer-constellation-en-https-derriere-un-reverse-proxy-avec-nginx-et-lets-encrypt/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Créer, tester et déployer des packages Python en ligne de commande</title>
		<link>https://developer.myconstellation.io/client-api/python-api/developper-avec-le-package-tools-cli/</link>
					<comments>https://developer.myconstellation.io/client-api/python-api/developper-avec-le-package-tools-cli/#respond</comments>
		
		<dc:creator><![CDATA[Sebastien Warin]]></dc:creator>
		<pubDate>Thu, 07 Sep 2017 21:50:15 +0000</pubDate>
				<category><![CDATA[Python API]]></category>
		<category><![CDATA[Constellation SDK]]></category>
		<category><![CDATA[WriteLog]]></category>
		<category><![CDATA[Settings]]></category>
		<category><![CDATA[MessageCallback]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Constellation]]></category>
		<category><![CDATA[StateObject]]></category>
		<category><![CDATA[Package]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=5341</guid>

					<description><![CDATA[<p>Vous pouvez créer des packages Constellation Python avec Visual Studio ou alors sans IDE avec l&#8217;outil en ligne de commande nommé « Constellation Package Tools CLI ». Nous allons dans cet article créer, tester et déployer sur votre Constellation un package Python</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/client-api/python-api/developper-avec-le-package-tools-cli/">Créer, tester et déployer des packages Python en ligne de commande</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Vous pouvez <a href="https://developer.myconstellation.io/getting-started/creez-votre-premier-package-constellation-en-python/">créer des packages Constellation Python avec Visual Studio</a> ou alors sans IDE avec l&rsquo;outil en ligne de commande nommé <em><strong>« Constellation Package Tools CLI ».</strong></em></p>
<p>Nous allons dans cet article créer, tester et déployer sur votre Constellation un package Python avec cet outil.</p>
<h2>Prérequis</h2>
<p>Le « Constellation Package Tools CLI » est un outil en ligne de commande compatible Windows et Linux. Il est écrit en Python et s&rsquo;installe via PIP avec la commande :</p>
<p></p><pre class="crayon-plain-tag">pip install constellation-pkgtools-cli</pre><p></p>
<p>Sur Windows vous devriez au préalable avoir installé Python 2.7 ainsi que l&rsquo;outil « pip » et les libraires « pyzmq » et « enum34 ». La procédure complète d&rsquo;installation est <a href="https://developer.myconstellation.io/getting-started/creez-votre-premier-package-constellation-en-python/#Installer_Python_sur_Windows">décrite sur cette page</a>.</p>
<p>Via une invite de commande, tapez la commande ci-dessus :</p>
<p style="text-align: center;"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image.png"><img class="colorbox-5341"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Installation sur Windows" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb.png" alt="Installation sur Windows" width="354" height="246" border="0" /></a></p>
<p>Sur Linux, vous devez également avoir installé Python 2.7 (généralement installé par défaut),  l&rsquo;outil « pip » et les libraires « pyzmq » et « enum34 » sans oublier le moteur Mono. Pour cela, utilisez le WPI (<em>Web Platform Installer</em>) pour <a href="/getting-started/ajouter-des-sentinelles/#Installation_dune_sentinelle_sur_un_systeme_Linux">installer une sentinelle Constellation</a>. Celui-ci se chargera de déployer l&rsquo;ensemble des prérequis nécessaire.</p>
<p style="text-align: center;"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-1.png"><img class="colorbox-5341"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Installation sur Linux" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-1.png" alt="Installation sur Linux" width="354" height="226" border="0" /></a></p>
<h2>La commande « ctln »</h2>
<p>Une fois le package Python « <em>constellation-pkgtools-cli</em> » installé via PIP, vous aurez accès à une commande nommée « ctln » (abréviation de <strong>C</strong>ons<strong>t</strong>e<strong>l</strong>latio<strong>n</strong>)</p>
<p style="text-align: center;"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-3.png"><img class="colorbox-5341"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Commande &quot;ctln&quot;" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-3.png" alt="Commande &quot;ctln&quot;" width="454" height="229" border="0" /></a></p>
<p>Cette commande vous permettra de créer de nouveau package, les tester et déployer en local ou directement sur un serveur Constellation.</p>
<h2>Créer son premier package Python</h2>
<p>Pour créer un nouveau package utilisez simplement la commande “create” en spécifiant le nom de votre package. Par exemple :</p>
<p></p><pre class="crayon-plain-tag">ctln create &lt;mon projet&gt;</pre><p></p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-4.png"><img class="colorbox-5341"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Création d'un nouveau package" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-4.png" alt="Création d'un nouveau package" width="354" height="234" border="0" /></a></p>
<p align="left">Et voilà, votre package “MyFirstPackage” est créé dans le répertoire du même nom !</p>
<h3 align="left">Template de package</h3>
<p>Chaque package est créé à partir d’un template. Vous pouvez lister les templates avec la commande :</p>
<p></p><pre class="crayon-plain-tag">ctln template list</pre><p></p>
<p>A l’heure où est écrit cet article il y a deux templates de type “projet” :</p>
<ul>
<li>Python Base Template : le template de base (créé par défaut)</li>
<li>Python Demo template : package Python avec du code de “demo”</li>
</ul>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-5.png"><img class="colorbox-5341"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Listing des templates de package" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-5.png" alt="Listing des templates de package" width="354" height="234" border="0" /></a></p>
<p align="left">Lorsque vous créez un package avec la commande “ctln create”, le template “python-base” est sélectionné par défaut.</p>
<p align="left">Vous pouvez cependant préciser l’Id du template à utiliser dans la commande “ctln create”. Par exemple pour créer un package sur base du template de demo :</p>
<p></p><pre class="crayon-plain-tag">ctln create &lt;mon projet&gt; python-demo</pre><p></p>
<p align="left">Il y a aussi des templates de type “item”, c’est à dire des templates pour les scripts que vous allez rajouter par la suite à votre package.</p>
<h3 align="left">Mise à jour du template</h3>
<p align="left">Comme vous le constatez dans le listing des templates ci-dessus, chaque template comporte un numéro de version car ils sont amenés à évoluer notamment en cas de mise à jour des librairies Constellation.</p>
<p align="left">Avec le SDK Constellation Visual Studio, les nouvelles versions des librairies sont diffusées avec NuGet. Ici avec cet outil en ligne de commande, les nouvelles librairies sont embarquées dans des mises à jour des templates.</p>
<p align="left">Ainsi pour mettre à jour vos packages, vous pouvez tout simplement mettre à jour le template de votre package par la commande :</p>
<p></p><pre class="crayon-plain-tag">ctln update</pre><p></p>
<p align="left">Cette commande doit être lancé depuis le répertorie racine de votre package.</p>
<p align="left">Notez également que la mise à jour est “intelligente” dans la mesure où elle n’écrase pas vos fichiers de configuration, le manifeste du package ou encore vos scripts Python.</p>
<h2>Développer son package</h2>
<p>Le développement de package Python est <a href="/getting-started/creez-votre-premier-package-constellation-en-python/#Creez_le_package_Python_dans_Visual_Studio">expliqué dans cet article</a>. Bien que l&rsquo;article se base sur Visual Studio, l&rsquo;API Python est strictement identique.</p>
<p>Ainsi, pour rappel, vous avez à la racine de votre projet le fichier « <a href="/concepts/package-manifest/">PackageInfo.xml</a> » qui contient l&rsquo;ensemble des informations de votre package (<a href="/concepts/package-manifest/">plus de détail ici</a>) mais aussi le fichier de configuration nommé « PythonPackageHost.exe.config » qui contient la liste des scripts Python à lancer.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-7.png"><img class="colorbox-5341"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Structure du package" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-7.png" alt="Structure du package" width="354" height="234" border="0" /></a></p>
<p>Les <a href="/getting-started/creez-votre-premier-package-constellation-en-python/#Les_bases">bases </a>du développement d&rsquo;un script Constellation Python <a href="/getting-started/creez-votre-premier-package-constellation-en-python/#Les_bases">sont expliquées ici</a>.</p>
<p>Pour faciliter le développement, vous n&rsquo;êtes pas obligé de modifier manuellement le fichier de configuration pour gérer les scripts Python. Pour cela vous avez à disposition différentes commandes pour lister, ajouter, renommer ou supprimer des scripts.</p>
<h3>Lister les scripts du package</h3>
<p>Les scripts Constellation Python lancés par votre package peuvent être listés par la commande :</p>
<p></p><pre class="crayon-plain-tag">ctln pyscript list</pre><p></p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-6.png"><img class="colorbox-5341"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Listing des scripts Python du package" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-6.png" alt="Listing des scripts Python du package" width="354" height="234" border="0" /></a></p>
<p style="text-align: left;">Ici votre package « MyFirstPackage » ne contient qu&rsquo;un seul script nommé « Main.py » dans le répertoire Scripts du package.</p>
<h3 style="text-align: left;">Ajouter des scripts Python</h3>
<p style="text-align: left;">Pour ajouter un script Constellation Python, vous pouvez soit ajouter un script existant sur votre système de fichier dans votre package ou soit créer un nouveau script à partir d&rsquo;un modèle (template).</p>
<h4 style="text-align: left;">Ajouter un script existant</h4>
<p style="text-align: left;">Pour un script existant, il suffit d&rsquo;utiliser l&rsquo;option « add » :</p>
<p></p><pre class="crayon-plain-tag">ctln pyscript add &lt;filepath&gt; [--filename=&lt;name&gt;]</pre><p></p>
<p>Vous devez spécifier le chemin complet vers votre fichier à ajouter (filepath) et optionnellement le nom du fichier une fois ajouté dans votre package.</p>
<p>Par exemple la commande ci-dessous ajoutera dans votre package le fichier « ~/demo/MyDemo.py » sous le nom « DemoSeb.py »</p>
<p></p><pre class="crayon-plain-tag">ctln pyscript add ~/demo/MyDemo.py --filename=DemoSeb.py</pre><p></p>
<h4 style="text-align: left;">Ajouter de nouveau script</h4>
<p style="text-align: left;">L&rsquo;action la plus courante sera de créer un nouveau script Python dans votre package avec l&rsquo;action « new » via la commande suivante :</p>
<p></p><pre class="crayon-plain-tag">ctln pyscript new &lt;filename&gt; [&lt;item_template_name&gt;]</pre><p></p>
<p>Vous devez obligatoirement spécifier le nom du fichier (filename) avec ou sans l’extension .py (rajoutée automatiquement). Le script sera créé dans le répertoire Scripts de votre package et automatiquement déclaré dans la configuration.</p>
<p>Vous pouvez également spécifier l&rsquo;identifiant du template à utiliser. Les templates peuvent être listés avec la commande « <em>ctln template list</em> » comme vu ci-dessus.  A l&rsquo;heure où cet article est écrit il y a trois templates de type « item » :</p>
<ul>
<li>« python-base » : le template de base</li>
<li>« python-demo »  : un template avec du code de demonstration</li>
<li>« python-empty »  : un squelette vide</li>
</ul>
<p>Si vous ne précisez pas l&rsquo;identifiant, c&rsquo;est le template « python-base » qui sera utilisé.</p>
<p>Par exemple ajoutons à notre package un deuxième script (avec le template de base) :</p>
<p></p><pre class="crayon-plain-tag">ctln pyscript new Main2</pre><p></p>
<p>Rajoutons également un troisieme scriupt de démonstation en utilisant le template de demo (python-demo) :</p>
<p></p><pre class="crayon-plain-tag">ctln pyscript new DemoConstellation python-demo</pre><p></p>
<p>Notre package a maintenant trois scripts : Main.py (créé avec le template du package), Main2.py (créé ci-dessus avec le template de base), DemoConstellation.py (créé avec le template de demo) :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-8.png"><img class="colorbox-5341"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Ajout de scripts Python" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-8.png" alt="Ajout de scripts Python" width="354" height="226" border="0" /></a></p>
<h3 style="text-align: left;">Renommer ou supprimer des scripts</h3>
<p style="text-align: left;">Vous pouvez renommer les scripts du package avec l’option “rename”. Par exemple renommons “DemoConstellation” par “Demo” (les extensions “.py” sont optionnelles) :</p>
<p></p><pre class="crayon-plain-tag">ctln pyscript rename DemoConstellation Demo</pre><p></p>
<p><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-9.png"><img class="colorbox-5341"  loading="lazy" style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="Renommer des scripts" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-9.png" alt="Renommer des scripts" width="354" height="226" border="0" /></a></p>
<p>Pour supprimer des scripts il suffit d’utiliser l’option “remove” en spécifiant le nom du script (avec ou sans son extension .py).</p>
<p>Par exemple supprimons les deux fichiers “Main2.py” et “Demo.py” que nous avons ajoutés (et renommés) ci-dessus :</p>
<p></p><pre class="crayon-plain-tag">ctln pyscript remove Main2
ctln pyscript remove Demo</pre><p></p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-10.png"><img class="colorbox-5341"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Supprimer des scripts" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-10.png" alt="Supprimer des scripts" width="354" height="226" border="0" /></a></p>
<h3>Editer les scripts Python du package</h3>
<p>Une fois vos scripts ajoutés, renommés ou supprimés avec la commande “ctln”, libre à vous d’utiliser votre éditeur de texte préféré pour éditer votre code !</p>
<p>Par exemple de le cas ici présent d’un accès SSH Linux, je pourrais utiliser “nano” ou “vim” (ou encore Notepad++ sur ma station WIndows via un tranfert SCP avec WInSCP par exemple).</p>
<p></p><pre class="crayon-plain-tag">nano Scripts/Main.py</pre><p></p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-11.png"><img class="colorbox-5341"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Edition des scripts Python avec Nano" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-11.png" alt="Edition des scripts Python avec Nano" width="354" height="226" border="0" /></a></p>
<p align="left">Ici le script “Main” défini une fonction de démarrage (<em>OnStart</em>) et une fonction de fermeture (<em>OnExit</em>). Pour rappel, les <a href="/getting-started/creez-votre-premier-package-constellation-en-python/#Les_bases">bases </a>de l’API Constellation Python <a href="/getting-started/creez-votre-premier-package-constellation-en-python/#Les_bases">sont expliquées ici</a>.</p>
<p align="left">Notez simplement que dans cet exemple, le WriteInfo déclenché au démarrage (<em>OnStart</em>) écrit un log dasn Constellation de type “Information” en concaténant dans un message textuel les propriétés suivantes :</p>
<ul>
<li>
<div align="left">“<span style="text-decoration: underline;">PackageName</span>” : le nom du package</div>
</li>
<li>
<div align="left">“<span style="text-decoration: underline;">SentinelName</span>” : le nom de la sentinelle sur laquelle est déployée ce package</div>
</li>
<li>
<div align="left">“<span style="text-decoration: underline;">IsStandAlone</span>” : un booléen indiquant si le package tourne de façon indépendante ou hébergée au sein d’une sentinelle</div>
</li>
<li>
<div align="left">“<span style="text-decoration: underline;">IsConnected</span>” : un booléen indiquant si le package est connecté ou non à une Constellation</div>
</li>
</ul>
<h2>Tester son package</h2>
<p>Pour tester notre package en local, il suffit de lancer la commande suivante :</p>
<p></p><pre class="crayon-plain-tag">ctln run</pre><p></p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-12.png"><img class="colorbox-5341"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Démarrage du package en local" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-12.png" alt="Démarrage du package en local" width="354" height="215" border="0" /></a></p>
<p>Comme vous pouvez le lire sur la console, le nom de la sentinelle affichée est “local sandbox” étant donné que la propriété <em>IsStandalone</em> est <em>true</em> (la propriété <em>SentinelName</em> est None). En effet votre package n’est pas déployé/démarré par Constellation sur une véritable sentinelle. Il est juste démarré en “standalone” par la commande “run”.</p>
<p>De plus la propriété “<em>IsConnected</em>” est <em>false</em> car votre package n’est pas connecté à une Constellation.</p>
<p>Vous pouvez donc tester des éléments de base de votre package mais de façon déconnecté, il manquera donc plusieurs fonctionnalités (les logs produits resterons local dans votre console, pas d&rsquo;accès aux settings hormis ceux déclarés en local, la publication ou consommation de StateObjects sera impossible tout comme l’invocation ou l&rsquo;exposition de MessageCallbacks).</p>
<p>Pour tester votre package complètement, il est possible de le lancer en local tout en le connectant à une Constellation.</p>
<p>Tout d&rsquo;abord, il faudra déclarer des serveurs Constellation dans l&rsquo;outil <em>ctln</em>.</p>
<h3>Ajouter et gérer des serveurs Constellation</h3>
<p>Les commandes sont les suivantes :</p>
<p></p><pre class="crayon-plain-tag">ctln server list
ctln server (add | set) &lt;name&gt; --url=&lt;url&gt; --accesskey=&lt;key&gt;
ctln server (add | set) &lt;name&gt; --url=&lt;url&gt; --username=&lt;user&gt;
ctln server check &lt;name&gt;
ctln server remove &lt;name&gt;</pre><p></p>
<p>Vous pouvez lister les serveurs, ajouter ou mettre à jour des serveurs avec la clé d’accès ou un couple login/password, tester la connectivité ou supprimer des serveurs.</p>
<p>Par exemple je dispose d’une Constellation installée à l’adresse : <a title="http://pc-seb.ajsinfo.loc:8088" href="http://pc-seb.ajsinfo.loc:8088">http://pc-seb.ajsinfo.loc:8088</a>. Un credential basé sur le couple login/password “admin/seb” a été configuré. Je peux donc ajouter ce serveur que je nommerai ici “pc-seb” via la commande :</p>
<p></p><pre class="crayon-plain-tag">ctln server add pc-seb --url=http://pc-seb.ajsinfo.loc:8088 --username=admin</pre><p></p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-13.png"><img class="colorbox-5341"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Ajout de serveur Constellation" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-13.png" alt="Ajout de serveur Constellation" width="354" height="215" border="0" /></a></p>
<p>Le serveur ajouté est testé au moment de l’ajout mais vous pouvez à tout moment tester la connectivité vers cette Constellation avec la commande “<em>ctln server check</em>”. Par exemple pour tester la Constellation nommée “pc-seb” :</p>
<p></p><pre class="crayon-plain-tag">ctln server check pc-seb</pre><p></p>
<h3>Tester son package dans Constellation</h3>
<p>Maintenant que nous avons ajouté un serveur Constellation dans l’outil, nous pouvons relancé notre package en le connectant à notre Constellation nommée “pc-seb” via la commande :</p>
<p></p><pre class="crayon-plain-tag">ctln run --server=pc-seb</pre><p></p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-14.png"><img class="colorbox-5341"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Démarrage du package en local mais connecté à un serveur Constellation" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-14.png" alt="Démarrage du package en local mais connecté à un serveur Constellation" width="354" height="215" border="0" /></a></p>
<p align="left">Le package démarre toujours dans la « sandbox locale » (<em>IsStandalone = true</em>) mais cette fois ci il est connecté à ma Constellation nommée « pc-seb » (<em>IsConnected = true</em>).</p>
<p align="left">D’ailleurs en lançant la Console Constellation je peux maintenant suivre en temps réel les logs de ce package, les StatesObjects qu’il produit ou encore les MessageCallbacks qu’il expose.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-15.png"><img class="colorbox-5341"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Connexion du package avec sa Constellation" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-15.png" alt="Connexion du package avec sa Constellation" width="354" height="208" border="0" /></a></p>
<h2>Publier son package</h2>
<p>Une fois le package développé et testé, il ne reste plus qu’à le packager pour pouvoir le déployer dans Constellation.</p>
<p>Vous pouvez soit le packager dans un fichier en local (que vous pourrez uploader sur une Constellation ou échanger avec d&rsquo;autre) ou soit le déployer directement dans une Constellation référencée dans l&rsquo;outil.</p>
<p>Par exemple pour publier ce package dans un fichier local dans le répertoire “/home/pi” :</p>
<p></p><pre class="crayon-plain-tag">ctln publish --output=/home/pi</pre><p></p>
<p>Maintenant, pour déployer ce même package directement sur une Constellation, il suffit simplement de spécifier le nom du serveur Constellation enregistré sur la commande “publish”.</p>
<p>Par exemple pour publier ce package sur la Constellation nommée ici “pc-seb” :</p>
<p></p><pre class="crayon-plain-tag">ctln publish pc-seb</pre><p></p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-16.png"><img class="colorbox-5341"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Publication d'un package sur une Constellation" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-16.png" alt="Publication d'un package sur une Constellation" width="354" height="215" border="0" /></a></p>
<p align="left">En vous rendant sur le <a href="/constellation-platform/constellation-console/package-repository/">Package Repository</a> de votre Console Constellation, votre package fraîchement publié sera prêt à être <a href="/constellation-platform/constellation-console/gerer-packages-avec-la-console-constellation/#Deployer_un_package">déployé sur vos sentinelles Windows ou Linux</a> de votre Constellation.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-17.png"><img class="colorbox-5341"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Package Repository" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-17.png" alt="Package Repository" width="354" height="268" border="0" /></a></p>
<h2>Next steps</h2>
<p>Pour en savoir plus sur le développement de package en Python :</p>
<ul>
<li>Retour sur <a href="/getting-started/creez-votre-premier-package-constellation-en-python/#Les_bases">les bases</a> de l’API Python  (<a href="/getting-started/creez-votre-premier-package-constellation-en-python/#Produire_des_logs">produire des logs</a>, <a href="/getting-started/creez-votre-premier-package-constellation-en-python/#Acces_aux_settings">accéder aux settings</a>, <a href="/getting-started/creez-votre-premier-package-constellation-en-python/#Publier_des_StateObjects">publier des StateObjects</a>)</li>
<li><a href="/client-api/python-api/messagecallbacks-exposer-des-methodes-python/">Exposer vos fonctions</a> Python dans Constellation (les MessageCallbacks)</li>
<li><a href="/client-api/python-api/envoyer-des-messages-et-invoquer-des-messagecallbacks-en-python/">Invoquer des MessageCallbacks</a> des autres packages de votre Constellation en Python</li>
<li><a href="/client-api/python-api/consommer-des-stateobjects-en-python/">Consommer les StateObjects</a> de votre Constellation</li>
</ul>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/client-api/python-api/developper-avec-le-package-tools-cli/">Créer, tester et déployer des packages Python en ligne de commande</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://developer.myconstellation.io/client-api/python-api/developper-avec-le-package-tools-cli/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>L&#8217;interface REST « Consumer »</title>
		<link>https://developer.myconstellation.io/client-api/rest-api/interface-rest-consumer/</link>
					<comments>https://developer.myconstellation.io/client-api/rest-api/interface-rest-consumer/#comments</comments>
		
		<dc:creator><![CDATA[Sebastien Warin]]></dc:creator>
		<pubDate>Fri, 12 Aug 2016 14:44:31 +0000</pubDate>
				<category><![CDATA[REST API]]></category>
		<category><![CDATA[Saga]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[group]]></category>
		<category><![CDATA[SendMessage]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Constellation]]></category>
		<category><![CDATA[StateObject]]></category>
		<category><![CDATA[AccessKey]]></category>
		<category><![CDATA[Consumer]]></category>
		<category><![CDATA[Package]]></category>
		<category><![CDATA[Request]]></category>
		<category><![CDATA[Message]]></category>
		<category><![CDATA[Subscribe]]></category>
		<category><![CDATA[MessageCallback]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=2284</guid>

					<description><![CDATA[<p>L’interface REST “Consumer” permet à tout système, script, objet ou programme de “consommer” des éléments dans une Constellation sans devoir être déclaré comme un package. Un consommateur peut : Consommer des StateObjects (Request ou Subscribe) Envoyer ou recevoir des messages Généralités</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/client-api/rest-api/interface-rest-consumer/">L&rsquo;interface REST « Consumer »</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>L’interface REST “Consumer” permet à tout système, script, objet ou programme de “consommer” des éléments dans une Constellation sans devoir être déclaré comme un package.</p>
<p>Un consommateur peut :</p>
<ul>
<li>Consommer des StateObjects (Request ou Subscribe)</li>
<li>Envoyer ou recevoir des messages</li>
</ul>
<h3>Généralités</h3>
<h4>Construction de l’URL</h4>
<p>L’URL est :  &lt;Root URI&gt;/rest/consumer/&lt;action&gt;?&lt;paramètres&gt;</p>
<p>Partons du principe que votre Constellation est exposée en HTTP sur le port 8088 (sans path). On retrouvera dans le <a href="https://developer.myconstellation.io/constellation-server/fichier-de-configuration/">fichier de configuration</a> la section suivante :</p>
<p></p><pre class="crayon-plain-tag">&lt;listenUris&gt;
  &lt;uri listenUri="http://+:8088/" /&gt;
&lt;/listenUris&gt;</pre><p></p>
<p>La “Root URI “ est donc “<strong>http://&lt;ip ou dns&gt;:8088/</strong>”.</p>
<p>Par exemple si nous sommes en local, nous pourrions écrire :</p>
<p></p><pre class="crayon-plain-tag">http://localhost:8088/rest/consumer/xxxxx</pre><p></p>
<h4>Authentification</h4>
<p>Comme pour toutes les requêtes vers Constellation vous devez impérativement spécifier dans <u>les headers HTTP</u> <strong>ou</strong> dans <u>les paramètres de l’URL</u> (querystring), les paramètres “SentinelName”, “PackageName” et “AccessKey” pour l’authentification.</p>
<p>Dans le cas de l’API “Consumer”, la “SentinelName” est “Consumer” et le “PackageName” est le nom de votre choix que l’on considère comme un “FriendlyName”. Typiquement le “FriendlyName” est par exemple le nom de l’application/page qui se connecte.</p>
<p>L’AccessKey doit bien sur être déclarée et activée sur le serveur.</p>
<p>Ainsi chaque appel sera sous la forme :</p>
<p></p><pre class="crayon-plain-tag">http://localhost:8088/rest/consumer/&lt;action&gt;?SentinelName=Consumer&amp;PackageName=&lt;Friendly name&gt;&amp;AccessKey=&lt;access key&gt;&amp;&lt;paramètres&gt;</pre><p></p>
<h4>Check Access</h4>
<p>Toutes les API REST de Constellation exposent une méthode en GET “CheckAccess” qui retourne un code HTTP 200 (OK). Cela permet de tester la connexion et l’authentification au serveur Constellation.</p>
<ul>
<li>Action : “CheckAccess” (GET)</li>
<li>Paramètres : aucun</li>
</ul>
<p>Exemple :</p>
<p></p><pre class="crayon-plain-tag">http://localhost:8088/rest/consumer/CheckAccess?SentinelName=Consumer&amp;PackageName=Demo&amp;AccessKey=MaCleDeTest123</pre><p></p>
<h3>Envoyer des messages</h3>
<ul>
<li>Action : “SendMessage” (GET ou POST)</li>
<li>En GET, voici les paramètres de l’URL :
<ul>
<li><u>scope</u> : le type de scope (All, Other, Group, Sentinel ou Package)</li>
<li><u>args</u> : les arguments du scope (par exemple le nom du groupe, de la sentinelle, du package ou de l’instance du package – plusieurs valeurs possibles séparées par des virgules)</li>
<li><u>key</u> : la clé du message (= la méthode à invoquer)</li>
<li><u>data</u> : le contenu du message (= les arguments de la méthode)</li>
<li><u>sagaId</u> (optionnel) : l’identification de la saga si le message est envoyé dans une saga</li>
</ul>
</li>
</ul>
<p>Vous pouvez également invoquer cette action en POST. Le corps de votre requête contiendra l’objet JSON suivant :</p>
<p></p><pre class="crayon-plain-tag">{
  "Scope" : { "Scope" : "&lt;type&gt;", Args: [ "&lt;arg1&gt;", "&lt;args2&gt;", .... ], "SagaId":"Identifiant de la Saga" },
  "Key" : "&lt;Key&gt;",
  "Data" : "&lt;Data&gt;"
}</pre><p></p>
<p>La propriété “SagaId” dans le JSON ci-dessus est optionnelle.</p>
<p>Par exemple pour envoyer un message au package Nest en invoquant la méthode (key) “SetTargetTemperature” avec en paramètre le nombre “21” :</p>
<p></p><pre class="crayon-plain-tag">http://localhost:8088/rest/consumer/SendMessage?SentinelName=Consumer&amp;PackageName=Demo&amp;AccessKey=MaCleDeTest123&amp;scope=Package&amp;args=Nest&amp;key=SetTargetTemperature&amp;data=21</pre><p></p>
<p>Par exemple pour invoquer ce MessageCallback depuis cURL :</p>
<p></p><pre class="crayon-plain-tag">curl "http://localhost:8088/rest/consumer/SendMessage?SentinelName=Consumer&amp;PackageName=Demo&amp;AccessKey=MaCleDeTest123&amp;scope=Package&amp;args=Nest&amp;key=SetTargetTemperature&amp;data=21"</pre><p></p>
<p>Ce même MessageCallback “SetTargetTemperature” du package Nest peut être invoqué dans une saga afin de recevoir un un accusé de réception :</p>
<p></p><pre class="crayon-plain-tag">http://localhost:8088/rest/consumer/SendMessage?SentinelName=Consumer&amp;PackageName=Demo&amp;AccessKey=MaCleDeTest123&amp;scope=Package&amp;args=Nest&amp;key=SetTargetTemperature&amp;data=21&amp;sagaId=123456789</pre><p></p>
<p>Il faudra ensuite “récupérer” les messages reçus (voir dessous) pour lire la réponse à votre saga que nous avons ici identifié par la clé “123456789”.</p>
<p>Autre exemple avec un MessageCallback avec plusieurs paramètres :</p>
<p></p><pre class="crayon-plain-tag">http://localhost:8088/rest/consumer/SendMessage?SentinelName=Consumer&amp;PackageName=Demo&amp;AccessKey=MaCleDeTest123&amp;scope=Package&amp;args=MyPackage&amp;key=MethodeAvec3Params&amp;data=[ 'param 1', 123, true ]</pre><p></p>
<p>Attention le contenu du paramètre « args » doit être encodé. De ce fait, avec cURL :</p>
<p></p><pre class="crayon-plain-tag">curl "http://localhost:8088/rest/consumer/SendMessage?SentinelName=Consumer&amp;PackageName=Demo&amp;AccessKey=MaCleDeTest123&amp;scope=Package&amp;args=MyPackage&amp;key=MethodeAvec3Params&amp;data=%5B+%27param+1%27%2C+123%2C+true+%5D"</pre><p></p>
<p>Pour invoquer ce même MC avec un « POST » depuis cURL :</p>
<p></p><pre class="crayon-plain-tag">curl -H "Content-Type: application/json" -X POST -i -d '{ "Scope" : { "Scope" : "Package", Args: [ "MyPackage"] }, "Key" : "MethodeAvec3Params", "Data" : [ "param 1", 123, true ] }' "http://localhost:8088/rest/consumer/SendMessage?SentinelName=Consumer&amp;PackageName=Demo&amp;AccessKey=MaCleDeTest123"</pre><p></p>
<h3>Recevoir des messages</h3>
<h4>Créer un abonnement de réception</h4>
<p>Tout d’abord pour recevoir des messages il faut s’abonner aux messages.</p>
<ul>
<li>Action : “SubscribeToMessage” (GET)</li>
<li>Paramètres :
<ul>
<li><u>subscriptionId</u> (optionnel) : identifiant de l’abonnement si déjà connu</li>
</ul>
</li>
</ul>
<p></p><pre class="crayon-plain-tag">http://localhost:8088/rest/consumer/SubscribeToMessage?SentinelName=Consumer&amp;PackageName=Demo&amp;AccessKey=MaCleDeTest123</pre><p></p>
<p>Vous obtiendrez en réponse l’ID de votre abonnement, le “Subscription Id”.</p>
<h4>Relever les messages</h4>
<ul>
<li>Action : “GetMessages” (GET)</li>
<li>Paramètres :
<ul>
<li><u>subscriptionId</u> : identifiant de l’abonnement</li>
<li><u>timeout</u> (optionnel – par défaut 60000) : temps maximal en milliseconde de la mise en attente de la requête (entre 1000ms et 120000ms)</li>
<li><u>limit</u> (optionnel – par défaut 0) : nombre maximum de message à retourner pour l’appel</li>
</ul>
<p><!--EndFragment--></li>
</ul>
<p>Il s’agit d’une requête en “long-polling” c’est à dire que la requête sera “bloquée” sur le serveur tant qu’il n’y a pas de message reçu évitant ainsi de “flooder” en continue le serveur pour savoir si de nouveaux messages sont disponibles ou non. Par défaut la requête est bloquée 60 secondes maximum mais vous pouvez personnaliser cette valeur avec le paramètre “timeout”. Si il y a des messages disponibles, le serveur vous renvoi un tableau JSON avec les messages reçus. Si il n’y a pas de réponse dans le délai spécifié par le paramètre “timeout” (60 secondes par défaut), le tableau retourné sera vide.</p>
<p>A chaque réponse vous devez donc relancer une requête “GetMessages” pour “écouter” les prochains messages qui vont sont destinés.</p>
<p>Il est également possible de limiter le nombre de message dans la réponse avec le paramètre “limit” ce qui peut être utile sur de petits “devices” ne disposant pas de beaucoup de mémoire RAM pour désérialiser de gros tableaux JSON.</p>
<p>Exemple simple :</p>
<p></p><pre class="crayon-plain-tag">http://localhost:8088/rest/consumer/GetMessages?SentinelName=Consumer&amp;PackageName=Demo&amp;AccessKey=MaCleDeTest123&amp;subscriptionId=xxxxx</pre><p></p>
<p>Autre exemple en limitant le nombre de message à 2 par appel et en bloquant la requête pendant 10 secondes au maximum :</p>
<p></p><pre class="crayon-plain-tag">http://localhost:8088/rest/consumer/GetMessages?SentinelName=Consumer&amp;PackageName=Demo&amp;AccessKey=MaCleDeTest123&amp;subscriptionId=xxxxx&amp;timeout=10000&amp;limit=2</pre><p></p>
<h4>S’abonner à un groupe</h4>
<p>Vous pouvez vous abonner à des groupes pour recevoir les messages envoyés dans ces groupes par l’action “SubscribeToMessageGroup” en précisant le nom du groupe et votre ID d’abonnement.</p>
<ul>
<li>Action : “SubscribeToMessageGroup” (GET)</li>
<li>Paramètres :
<ul>
<li><u>group</u> : le nom du groupe à joindre</li>
<li><u>subscriptionId</u> (optionnel) : identifiant de l’abonnement si déjà connu</li>
</ul>
</li>
</ul>
<p></p><pre class="crayon-plain-tag">http://localhost:8088/rest/consumer/SubscribeToMessageGroup?SentinelName=Consumer&amp;PackageName=Demo&amp;AccessKey=MaCleDeTest123&amp;subscriptionId=xxxxx&amp;group=A</pre><p></p>
<p>Comme l’action “SubscribeToMessage”, cette action vous retourne l’ID d’abonnement à utiliser pour l’action “GetMessages”.</p>
<h3>Consommation de StateObjects</h3>
<h4>Request</h4>
<p>Cette méthode permet de récupérer la valeur actuelle d’un ou de plusieurs StateObjects.</p>
<ul>
<li>Action : “RequestStateObjects” (GET)</li>
<li>Paramètres :
<ul>
<li><u>sentinel</u> (optionnel – par défaut “*”): nom de la sentinelle</li>
<li><u>package</u> (optionnel – par défaut “*”) : nom du package</li>
<li><u>name</u> (optionnel – par défaut “*”) : nom du StateObject</li>
<li><u>type</u> (optionnel – par défaut “*”) : type du StateObject</li>
</ul>
</li>
</ul>
<p>Par exemple pour récupérer tous les StateObject de votre Constellation :</p>
<p></p><pre class="crayon-plain-tag">http://localhost:8088/rest/consumer/RequestStateObjects?SentinelName=Consumer&amp;PackageName=Demo&amp;AccessKey=MaCleDeTest123</pre><p></p>
<p>Ou seulement ceux produits par le package “HWMonitor” (quelque soit la sentinelle) :</p>
<p></p><pre class="crayon-plain-tag">http://localhost:8088/rest/consumer/RequestStateObjects?SentinelName=Consumer&amp;PackageName=Demo&amp;AccessKey=MaCleDeTest123&amp;package=HWMonitor</pre><p></p>
<p>Ou encore tous les StateObjects nommés “/intelcpu/load/0” et produits le package “HWMonitor” (quelque soit la sentinelle) :</p>
<p></p><pre class="crayon-plain-tag">http://localhost:8088/rest/consumer/RequestStateObjects?SentinelName=Consumer&amp;PackageName=Demo&amp;AccessKey=MaCleDeTest123&amp;package=HWMonitor&amp;name=/intelcpu/load/0</pre><p></p>
<h4>Subscribe</h4>
<p>Vous pouvez également vous abonner aux mises à jour des StateObjects.</p>
<p>Le principe est le même qu’avec les messages : il faut récupérer un ID d’abonnement et invoquer une méthode en long-polling pour recevoir les mises à jour.</p>
<h5>S’abonner à des StateObjects</h5>
<ul>
<li>Action : “SubscribeToStateObjects” (GET)</li>
<li>Paramètres :
<ul>
<li><u>subscriptionId</u> (optionnel) : identifiant de l’abonnement si déjà connu</li>
<li><u>sentinel</u> (optionnel – par défaut “*”): nom de la sentinelle</li>
<li><u>package</u> (optionnel – par défaut “*”) : nom du package</li>
<li><u>name</u> (optionnel – par défaut “*”) : nom du StateObject</li>
<li><u>type</u> (optionnel – par défaut “*”) : type du StateObject</li>
</ul>
</li>
</ul>
<p>En retour vous obtiendrez l’ID d’abonnement (un GUID).</p>
<p>Par exemple pour s’abonner au SO “/intelcpu/load/0”, produit le package “HWMonitor” sur la sentinelle “MON-PC” :</p>
<p></p><pre class="crayon-plain-tag">http://localhost:8088/rest/consumer/SubscribeToStateObjects?SentinelName=Consumer&amp;PackageName=Demo&amp;AccessKey=MaCleDeTest123&amp;sentinel=MON-PC&amp;package=HWMonitor&amp;name=/intelcpu/load/0</pre><p></p>
<p><strong>ATTENTION</strong> : si vous souhaitez “ajouter” des SO à votre abonnement vous devez <u>impérativement</u> préciser votre ID d’abonnement récupéré lors du 1er appel autrement vous allez créer un nouvel abonnement.</p>
<p>Par exemple pour “ajouter” le SO correspondant à la consommation RAM :</p>
<p></p><pre class="crayon-plain-tag">http://localhost:8088/rest/consumer/SubscribeToStateObjects?SentinelName=Consumer&amp;PackageName=Demo&amp;AccessKey=MaCleDeTest123&amp;sentinel=MON-PC&amp;package=HWMonitor&amp;name=/ram/load&amp;subscriptionId=&lt;subId&gt;</pre><p></p>
<h5>Relever les StateObjects mis à jour</h5>
<p>Pour récupérer les SO de votre abonnement qui ont changés entre deux appels vous devez invoquer l’action “GetStateObjects” en spécifiant l’ID de votre abonnement :</p>
<ul>
<li>Action : “GetStateObjects” (GET)</li>
<li>Paramètres :
<ul>
<li><u>subscriptionId</u> : identifiant de l’abonnement</li>
<li><u>timeout</u> (optionnel – par défaut 60000) : temps maximal en milliseconde de la mise en attente de la requête (entre 1000ms et 120000ms)</li>
<li><u>limit</u> (optionnel – par défaut 0) : nombre maximum de message à retourner pour l’appel</li>
</ul>
</li>
<li><!--EndFragment--></li>
</ul>
<p>Comme pour les message, vous pouvez limiter le nombre de SO (limit) et le timeout de la requête (timeout).</p>
<p></p><pre class="crayon-plain-tag">http://localhost:8088/rest/consumer/GetStateObjects?SentinelName=Consumer&amp;PackageName=Demo&amp;AccessKey=MaCleDeTest123&amp;subscriptionId=&lt;subId&gt;</pre><p></p>
<p>Notez que si un StateObject pour lequel vous êtes abonné change plusieurs fois entre deux appels “GetStateObjects”, vous obtiendrez la dernière valeur et non l’historique de tous les changements.</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/client-api/rest-api/interface-rest-consumer/">L&rsquo;interface REST « Consumer »</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://developer.myconstellation.io/client-api/rest-api/interface-rest-consumer/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Bienvenue sur le nouveau site Constellation</title>
		<link>https://developer.myconstellation.io/blog/nouveau-site-constellation/</link>
					<comments>https://developer.myconstellation.io/blog/nouveau-site-constellation/#respond</comments>
		
		<dc:creator><![CDATA[Sebastien Warin]]></dc:creator>
		<pubDate>Fri, 11 Mar 2016 11:19:21 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Site Web]]></category>
		<category><![CDATA[Constellation]]></category>
		<category><![CDATA[News]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=907</guid>

					<description><![CDATA[<p>Il y a plus d’un an, je décidais d’ouvrir Constellation en beta privée. Pour cette occasion j&#8217;ai créé deux sites : une landing page pour présenter la plateforme et une base de connaissance pour héberger la documentation, les binaires et</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/blog/nouveau-site-constellation/">Bienvenue sur le nouveau site Constellation</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Il y a plus d’un an, je décidais d’ouvrir Constellation en beta privée. Pour cette occasion j&rsquo;ai créé deux sites : une landing page pour présenter la plateforme et une base de connaissance pour héberger la documentation, les binaires et un forum d’échange.</p>
<p>Après un an de feedback et de réflexion, Constellation a trouvé sa voie : une nouvelle version 1.8 plus complète et plus simple à prendre en main pour vous apporter toujours plus de productivité, une nouvelle documentation en français cette fois, mais surtout un business model bien défini et un nouveau site qui se veut plus agréable et plus riche.</p>
<p>Vous retrouverez donc sur ce nouveau site tout ce dont vous avez besoin : <a href="/plateforme/">la présentation de la plateforme</a>, un <a href="/blog/">blog</a>, les <a href="/documentation/">documentations techniques</a>, les <a href="/downloads/">liens de téléchargements</a>, les <a href="/forums/">forums</a>, les <a href="/questions/">questions/réponses</a>, etc.</p>
<p>Le site est actuellement en cours de construction, n’hésitez pas à me donner vos avis !</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/blog/nouveau-site-constellation/">Bienvenue sur le nouveau site Constellation</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://developer.myconstellation.io/blog/nouveau-site-constellation/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Mise en cache de page à l’aide de Disk: Enhanced 

Served from: developer.myconstellation.io @ 2026-01-23 02:02:24 by W3 Total Cache
-->