﻿<?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 Windows - Constellation</title>
	<atom:link href="https://developer.myconstellation.io/tag/windows/feed/" rel="self" type="application/rss+xml" />
	<link>https://developer.myconstellation.io/tag/windows/</link>
	<description>Votre plateforme d&#039;interconnexion</description>
	<lastBuildDate>Thu, 13 Jun 2019 14:34:21 +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 Windows - Constellation</title>
	<link>https://developer.myconstellation.io/tag/windows/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Créer un boitier connecté « Mix box » permettant de contrôler votre ordinateur</title>
		<link>https://developer.myconstellation.io/tutorials/creer-un-boitier-connecte-mix-box-permettant-de-controler-votre-ordinateur/</link>
					<comments>https://developer.myconstellation.io/tutorials/creer-un-boitier-connecte-mix-box-permettant-de-controler-votre-ordinateur/#respond</comments>
		
		<dc:creator><![CDATA[Sebastien Warin]]></dc:creator>
		<pubDate>Wed, 16 May 2018 14:24:43 +0000</pubDate>
				<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[MessageCallback]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[ESP8266]]></category>
		<category><![CDATA[Pression]]></category>
		<category><![CDATA[WindowsControl]]></category>
		<category><![CDATA[tutoriel]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=5991</guid>

					<description><![CDATA[<p>Tutoriel proposé par Marc-Antoine DUVAL, Joël GUILLEM et Quentin LEVERT. Dans ce tutoriel, nous allons créer un boitier qui est relié à un ou plusieurs ordinateurs de la maison grâce à un ESP8266 connecté à constellation. Des LEDs permettent à</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/tutorials/creer-un-boitier-connecte-mix-box-permettant-de-controler-votre-ordinateur/">Créer un boitier connecté « Mix box » permettant de contrôler votre ordinateur</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><em>Tutoriel proposé par Marc-Antoine DUVAL, Joël GUILLEM et Quentin LEVERT.</em></p>

<p>Dans ce tutoriel, nous allons créer un boitier qui est relié à un ou plusieurs ordinateurs de la maison grâce à un ESP8266 connecté à constellation. Des LEDs permettent à l’utilisateur de suivre le résultat des commandes en temps réel. Le boitier permet de commander à distance le lecteur de vidéo VLC media player à travers différentes fonctionnalités. Il gère :</p>
<ul>
<li>Le volume</li>
<li>La marche avant / marche arrière au cours d’un visionnage</li>
<li>La mise en lecture / pause d’une vidéo</li>
<li>La fermeture de VLC</li>
</ul>
<h2>Prérequis</h2>
<ul>
<li>Un ESP8266, nous utilisons un D1-mini</li>
<li>6 boutons poussoirs tactiles blancs</li>
<li>2 LEDs RGB</li>
<li>Une plaque de plexiglas noire</li>
<li>Une imprimante laser</li>
<li>Un serveur constellation</li>
<li>Le package « Windows Control » déployé sur une ou plusieurs sentinelles</li>
</ul>
<h2>Etape 1 : Réaliser le montage des boutons et LEDs</h2>
<p>Dans un premier temps, nous allons réaliser le montage électronique des composants. Tout d’abord il est nécessaire de brancher l’ESP8266 à la breadboard et de l’alimenter en le connectant en mini-USB à une source d&rsquo;alimentation. Il faut ensuite brancher la masse de l’ESP à la colonne de masse de la breadboard.</p>
<p>Pour les besoins de l’explication du montage, tous les autres composants seront connectés à la breadboard, cependant il est tout à fait possible de les connecter une fois insérés dans le boitier (voir Etape 2). Le schéma global est présenté ci-après.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2018/05/Cablage.png"><img class="colorbox-5991"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Cablage" src="https://developer.myconstellation.io/wp-content/uploads/2018/05/Cablage_thumb.png" alt="Cablage" width="354" height="357" border="0" /></a></p>
<p>&nbsp;</p>
<p>Ici nous avons choisi 2 LEDs RGB afin d’améliorer l’effet visuel pour obtenir une LED de couleur jaune. La première LED verte pourra être connectée directement au pin D8 de l’ESP. Quant à la seconde LED RGB, il suffit de connecter les pattes correspondant aux LEDs rouge et verte à la même ligne, puis de lier cette ligne au pin D7 de l’ESP.</p>
<p>Les boutons poussoirs sont à connecter avec les broches 1 et 3 d’un côté et les broches 2 et 4 de l’autre. Le branchement est classique, à savoir les pin D1 à D6 connectés directement sur la patte 1 de chaque bouton, puis retour à la masse sur la patte 3 des boutons. Lorsque l’on appuie sur le bouton, le pin correspondant passera donc en état bas (LOW) et est en état haut (HIGH) tant que l’on n’appuie pas.</p>
<p>Une fois le câblage terminé, nous allons passer à la réalisation du boitier qui contiendra à l’intérieur l’ESP et la breadboard.</p>
<h2>Etape 2 : Réaliser le boitier</h2>
<p>Dans un second temps, il nous faut un boitier que nous pourrons ouvrir pour mettre notre ESP. Le design de la face de devant doit aussi correspondre au nombre de boutons et LED que l’on souhaite mettre en place.</p>
<p>Afin de résoudre cette problématique, nous avons décidé d’imprimer le boitier grâce à une imprimante laser. Nous avons utilisé une plaque de plexiglas noir d’une épaisseur de 3mm.</p>
<p>Tout d’abord, nous avons créé le fond de la boite sans le couvercle. Nous avons utilisé le site : <a href="http://carrefour-numerique.cite-sciences.fr/fablab/wiki/doku.php?id=projets:generateur_de_boites">http://carrefour-numerique.cite-sciences.fr/fablab/wiki/doku.php?id=projets:generateur_de_boites</a> qui permet de générer automatique le fichier .svg qui sera reconnu et utilisé pour l’impression laser. Il suffit d’entrer les dimensions voulues.</p>
<p>Ensuite nous avons utilisé SolidWorks afin de créer notre face avant personnalisée. Nous avons choisi percer 2 trous pour les LEDs et 6 pour les boutons carrés. Après la réalisation de la pièce, plusieurs étapes sont alors nécessaires pour exporter le fichier SolidWorks en fichier .svg.</p>
<ul>
<li>Sélectionner la vue correspondant à la pièce à réaliser</li>
<li>Enregistrer le fichier SolidWorks au format .DXF.</li>
<li>Sélectionner la vue à exporter. Ici, on sélectionne la vue en cours.</li>
</ul>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2018/05/face_avant.png"><img class="colorbox-5991"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Choix de la face à sauvegarder" src="https://developer.myconstellation.io/wp-content/uploads/2018/05/face_avant_thumb.png" alt="Choix de la face à sauvegarder" width="354" height="194" border="0" /></a></p>
<ul>
<li>Installer Inkscape, ce logiciel permettra de créer le fichier pour l’imprimante laser.</li>
<li>Importer le fichier dans Inkscape. Il faut désactiver mise à l’échelle automatique.</li>
<li>Sauvegarder le fichier qui sera utilisé pour l’impression laser.</li>
</ul>
<p>Enfin, nous avons assemblé toutes les pièces du boitier :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2018/05/Boitier.jpg"><img class="colorbox-5991"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Boitier" src="https://developer.myconstellation.io/wp-content/uploads/2018/05/Boitier_thumb.jpg" alt="Boitier" width="254" height="316" border="0" /></a></p>
<h2>Etape 3 : Programmation</h2>
<p>Dans un premier temps, il faut vous assurer que votre ESP8266 soit connecté à votre constellation, si vous ne savez pas comment vous y prendre, je vous invite donc à suivre le tutoriel réalisé par Sébastien Warin : <a href="https://developer.myconstellation.io/getting-started/connecter-un-arduino-ou-un-esp8266-constellation/">https://developer.myconstellation.io/getting-started/connecter-un-arduino-ou-un-esp8266-constellation/</a> .</p>
<p>Pour commencer, il faut déclarer le matériel dans la méthode setup de notre ESP8266, conformément à <b>l&rsquo;étape 1, </b>nous avons choisi les pin 1 à 6 en mode PULLUP pour les boutons et les pins 7 &amp; 8 pour les LEDs :</p>
<p></p><pre class="crayon-plain-tag">pinMode(D1,INPUT_PULLUP);
  pinMode(D2,INPUT_PULLUP);
  pinMode(D3,INPUT_PULLUP);
  pinMode(D4,INPUT_PULLUP);
  pinMode(D5,INPUT_PULLUP);
  pinMode(D6,INPUT_PULLUP);
  pinMode(D7,OUTPUT);
  pinMode(D8,OUTPUT);
  digitalWrite(D7,LOW);
  digitalWrite(D8,LOW);</pre><p></p>
<p>Nous avons associé à chaque bouton un messageCallback avec les paramètres permettant d&rsquo;effectuer l&rsquo;action voulu. Pour faire cela, nous avons réalisé une fonction « checkButtonState » qui permet de gérer les évènements d&rsquo;appuie sur les boutons et d&rsquo;appeler le messageCallback correspondant au bouton. Juste avant l&rsquo;appel du messageCallback, la led cablée au pin D7 est allumée pour une période de 2 secondes afin de montrer à l&rsquo;utilisateur que l&rsquo;ESP8266 a bien réalisé l&rsquo;action. Cela permettra en cas de disfonctionnement, que l&rsquo;utilisateur puisse savoir si c&rsquo;est le hardware ou la transmission Wifi/Constellation qui est défectueux.</p>
<p>Le tableau ci-dessous récapitule les actions, messageCallback et pins qui sont associés ensemble :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2018/05/image-8.png"><img class="colorbox-5991"  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/05/image_thumb-6.png" alt="image" width="450" height="109" border="0" /></a></p>
<p>Ci-dessous le code de la fonction checkButtonState :</p>
<p></p><pre class="crayon-plain-tag">void checkButtonState(){
  
  static int lastButtonStateD1 = HIGH;
  static int lastButtonStateD2 = HIGH;
  static int lastButtonStateD3 = HIGH;
  static int lastButtonStateD4 = HIGH;
  static int lastButtonStateD5 = HIGH;
  static int lastButtonStateD6 = HIGH;
  static long led1TimeLitUP = 0;
  // If the led is lit up for 2 secondes, we shut off the led
  if(millis() - led1TimeLitUP &gt;2000){
      digitalWrite(D7, LOW);
    }
  // We retrieve the pin value
  int reading = digitalRead(D1);
// If pin value has changed
  if (reading != lastButtonStateD1){
   // And if pin value is high which mean button is pushed, then we make the associated action
    if (reading == HIGH){
      // We lit up the led in order to show to the user that the messageCallback is sending
       digitalWrite(D7,HIGH);
       // "led1TimeLitUp" take the value of the moment when it has been litted up
       led1TimeLitUP = millis();
       // we use the messageCallback to do the wanted action
       constellation.sendMessage(Package, "WindowsControl", "VolumeUp","{}");
     
      }
      lastButtonStateD1 = reading ;
     
      return;
  }
  reading = digitalRead(D2);
  if (reading != lastButtonStateD2){
     if (reading == HIGH){
        digitalWrite(D7,HIGH); 
        led1TimeLitUP = millis();
        constellation.sendMessage(Package, "WindowsControl", "VolumeDown", "{}"); 
        
      }
      lastButtonStateD2 = reading;
      return;
    }
  reading = digitalRead(D3);
  if (reading != lastButtonStateD3){
     if (reading == HIGH){
        digitalWrite(D7,HIGH); 
        led1TimeLitUP = millis();
        constellation.sendMessage(Package, "WindowsControl", "SendKey", "SpaceBar");
       
      }
      lastButtonStateD3 = reading;
      return;
    }
    
  reading = digitalRead(D4);
  if (reading != lastButtonStateD4){
     if (reading == HIGH){
        digitalWrite(D7,HIGH); 
        led1TimeLitUP = millis();
        constellation.sendMessage(Package, "WindowsControl", "SendCombinationOfKey", "['ALT', 'Left']");
        
      }
      lastButtonStateD4 = reading;
      return;
    }
   reading = digitalRead(D5);
    if (reading != lastButtonStateD5){
     if (reading == HIGH){
        digitalWrite(D7,HIGH); 
        led1TimeLitUP = millis();
        constellation.sendMessage(Package, "WindowsControl", "SendCombinationOfKey", "['ALT', 'Right']");
      
      }
      lastButtonStateD5 = reading;
      return;
    }
    reading = digitalRead(D6);
    if (reading != lastButtonStateD6){
     if (reading == HIGH){
        digitalWrite(D7,HIGH); 
        led1TimeLitUP = millis();
        constellation.sendMessage(Package, "WindowsControl", "SendCombinationOfKey", "['CTRL', 'Q']");
        
      }
      lastButtonStateD6 = reading;
      return;
    }  
  }</pre><p></p>
<p>Et voilà notre boitier de contrôle est opérationnel. Il ne reste plus qu’à l’alimenter et vous avons à notre disposition des boutons physiques pour piloter notre Windows facilement.</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/tutorials/creer-un-boitier-connecte-mix-box-permettant-de-controler-votre-ordinateur/">Créer un boitier connecté « Mix box » permettant de contrôler votre ordinateur</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-un-boitier-connecte-mix-box-permettant-de-controler-votre-ordinateur/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Synchroniser la lampe du bureau avec sa session Windows</title>
		<link>https://developer.myconstellation.io/tutorials/synchroniser-lampe-bureau-avec-session-windows/</link>
					<comments>https://developer.myconstellation.io/tutorials/synchroniser-lampe-bureau-avec-session-windows/#respond</comments>
		
		<dc:creator><![CDATA[Sebastien Warin]]></dc:creator>
		<pubDate>Sun, 14 May 2017 12:35:00 +0000</pubDate>
				<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[IA]]></category>
		<category><![CDATA[Package]]></category>
		<category><![CDATA[StateObjectLink]]></category>
		<category><![CDATA[Vera]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Z-Wave]]></category>
		<category><![CDATA[WindowsControl]]></category>
		<category><![CDATA[Lux]]></category>
		<category><![CDATA[LightSensor]]></category>
		<category><![CDATA[.NET]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=4829</guid>

					<description><![CDATA[<p>L&#8217;un des avantages de Constellation est qu&#8217;il est très facile de faire « parler » des objets/systèmes entre eux. Dans ce tutoriel, nous allons lier notre lampe du bureau à notre session Windows. L&#8217;idée est très simple : lorsque vous déverrouillez (ou ouvrez) votre</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/tutorials/synchroniser-lampe-bureau-avec-session-windows/">Synchroniser la lampe du bureau avec sa session Windows</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>L&rsquo;un des avantages de Constellation est qu&rsquo;il est très facile de faire « parler » des objets/systèmes entre eux. Dans ce tutoriel, nous allons lier notre lampe du bureau à notre session Windows.</p>
<p>L&rsquo;idée est très simple : lorsque vous déverrouillez (ou ouvrez) votre session Windows on allumera automatiquement la lampe du bureau et lorsque vous verrouillez (ou fermez) votre session, la lampe s&rsquo;éteindra automatiquement.</p>
<p align="center"><img loading="lazy" class="aligncenter wp-image-4833 size-full colorbox-4829" title="Demo" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/WindowsControl-gap.jpg" data-gif="https://developer.myconstellation.io/wp-content/uploads/2017/05/WindowsControl.gif" alt="Demo" width="450" height="253" /></p>
<p>On peut même aller plus loin si vous avez un capteur de luminosité connecté pour n&rsquo;allumer la lampe que lorsqu&rsquo;il fait trop sombre.</p>
<h3>Prérequis</h3>
<ul>
<li>Un serveur Constellation</li>
<li>Une lampe pilotable par Constellation</li>
<li>Le package <a href="/package-library/windowscontrol/">WindowsControl</a> déployé sur la sentinelle de l&rsquo;ordinateur Windows à synchroniser avec la lampe</li>
<li>Optionnellement un capteur de luminosité connecté dans Constellation</li>
<li>Le SDK Constellation pour Visual Studio</li>
</ul>
<h3>Etape 1 : piloter une lampe par Constellation</h3>
<p>Bien entendu il faut d&rsquo;abord pouvoir piloter une lampe par Constellation pour réaliser ce tutoriel !</p>
<p>Vous pouvez par exemple piloter un relais depuis un Raspberry en créant un package Python ou bien depuis un Arduino ou un ESP8266 comme vu <a href="/tutorials/creer-un-relais-connecte/">dans ce tutoriel</a>. Il suffit de créer une fonction pilotant un relais (simple manipulation d&rsquo;une sortie digitale) et d&rsquo;exposer cette fonction comme <a href="/concepts/messaging-message-scope-messagecallback-saga/">MessageCallback</a>. On pourra ainsi invoquer votre méthode pour ouvrir et fermer le relais et donc piloter une lampe depuis n&rsquo;importe quel système connecté dans votre Constellation.</p>
<p align="center"><img loading="lazy" class="alignnone size-full wp-image-4599 colorbox-4829" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-58.png" alt="" width="350" height="198" srcset="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-58.png 454w, https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-58-300x170.png 300w" sizes="(max-width: 350px) 100vw, 350px" /></p>
<p>Autre solution utiliser une carte de relais connectée par USB qu&rsquo;on pilotera avec le package <a href="/package-library/relayboard/">RelayBoard</a>. Ce package expose des MC permettant d&rsquo;ouvrir ou fermer les relais et publie l&rsquo;état de chacun d&rsquo;entre eux comme StateObject. Il ne reste plus qu&rsquo;à connecter une lampe sur l&rsquo;un des relais.</p>
<p align="center"><img loading="lazy" class="alignnone size-full wp-image-3530 colorbox-4829" title="RelayBoard" src="https://developer.myconstellation.io/wp-content/uploads/2016/10/image-143.png" alt="RelayBoard" width="176" height="180" /></p>
<p>On peut aussi utiliser des prises Wifi Belkin Wemo qu&rsquo;on connectera à Constellation avec le package <a href="/package-library/wemo/">Wemo</a>. Encore une fois ce package expose des MC permettant d&rsquo;allumer ou d’éteindre la charge connectée dessus et publie son état en tant que StateObject. Il suffit d&rsquo;y brancher une lampe !</p>
<p align="center"><img class="colorbox-4829"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Prise Wemo Insight" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/wemo.jpg" alt="Prise Wemo Insight" width="200" height="200" border="0" /></p>
<p>Dans la même idée, on peut utiliser des prises Somfy qu&rsquo;on connectera à Constellation avec le package <a href="/package-library/rfxcom/">RFXCOM </a>nécessitant une passerelle RFXcom connectée en USB. Le package expose un MessageCallback permettant d&rsquo;envoyer des ordres par radiofréquences aux équipements RTS (protocole Somfy) pour piloter par exemple des prises. Il n&rsquo;y a pas de retour d&rsquo;état sur ce protocole, donc il ne sera pas possible de récupérer son état mais on pourra allumer ou éteindre la prise et donc une lampe !</p>
<p align="center"><img class="colorbox-4829"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Prise Somfy" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/prise-telecommandee-interieure-variateur-100-w-rts-2401092-somfy.jpg" alt="Prise Somfy" width="200" height="200" border="0" /></p>
<p>Encore une autre possibilité, utiliser des prises ou des modules Z-Wave. Il faut pour cela un contrôleur Z-Wave qu&rsquo;on connectera à Constellation. Vous pouvez soit utiliser le package <a href="/package-library/jeedom/">Jeedom </a>ou soit le package <a href="/package-library/vera/">Vera</a>.</p>
<p align="center"><img class="colorbox-4829"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Prise Z-Wave AN158" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/an158.jpg" alt="Prise Z-Wave AN158" width="200" height="200" border="0" /></p>
<p>On pourrait également utiliser des lampes ou des ampoules connectées de la gamme Phillips Hue qu&rsquo;on connectera à Constellation grâce au package <a href="/package-library/hue/">Hue</a>.</p>
<p style="text-align: center;"><img loading="lazy" class="alignnone size-full wp-image-3598 colorbox-4829" src="https://developer.myconstellation.io/wp-content/uploads/2016/10/image-166.png" alt="" width="350" height="175" srcset="https://developer.myconstellation.io/wp-content/uploads/2016/10/image-166.png 350w, https://developer.myconstellation.io/wp-content/uploads/2016/10/image-166-300x150.png 300w" sizes="(max-width: 350px) 100vw, 350px" /></p>
<p>Pour ma part la lampe de mon bureau est contrôlée par une prise Z-Wave AN158 appairée sur une Vera Lite. Ce contrôleur Z-Wave est connecté à Constellation grâce au package <a href="/package-library/vera/">Vera</a>.</p>
<p>J&rsquo;ai donc dans ma Constellation des StateObjets pour chaque périphérique Z-Wave et des MessageCallbacks pour envoyer des ordres Z-Wave. Par exemple depuis le <a href="/constellation-platform/constellation-console/messagecallbacks-explorer/">MessageCallbacks Explorer</a>, on retrouve le MC « <em>SetSwitchState</em> » permettant de définir l&rsquo;état d&rsquo;un switch (On/Off) Z-Wave.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-85.png"><img class="colorbox-4829"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="MessageCallbacks Explorer" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-85.png" alt="MessageCallbacks Explorer" width="454" height="169" border="0" /></a></p>
<p style="text-align: left;" align="center">Depuis l&rsquo;API.net il me suffit d&rsquo;invoquer le code suivant pour allumer le device #42 :</p>
<p></p><pre class="crayon-plain-tag">PackageHost.CreateMessageProxy("Vera").SetSwitchState(new { DeviceID = 42, State = true });</pre><p></p>
<p>Vous pouvez appuyer sur le bouton <img loading="lazy" class="alignnone size-full wp-image-2961 colorbox-4829" src="https://developer.myconstellation.io/wp-content/uploads/2016/09/image_thumb-112.png" alt="" width="25" height="22" /> pour obtenir les exemples de code pour chaque MessageCallback. Par exemple toujours pour allumer le device Z-Wave #42 depuis un Arduino :</p>
<p></p><pre class="crayon-plain-tag">constellation.sendMessage(Package, "Vera", "SetSwitchState", "{ 'DeviceID':42, 'State':true }");</pre><p></p>
<p>Bref il existe différente méthode de piloter une lampe (ou n&rsquo;importe quelle charge) depuis Constellation, soit en mode DIY en créant vous-même votre package réel (C#, Python, &#8230;) ou virtuel (Arduino, ESP8266, Gadgeteer, &#8230;) ou bien en utilisant des technologies telles RTS de Somfy, le Z-Wave, les lampes et ampoules Philips, les prises Wifi de Belkin, etc&#8230; avec les packages déjà disponibles dans le <a href="/plateforme/package-repository/">catalogue en ligne</a>.</p>
<p>Et quand bien même il n&rsquo;existe pas de connecteur Constellation pour piloter votre lampe, libre à vous de créer votre propre package créant ainsi la passerelle, le connecteur entre Constellation et votre lampe.</p>
<h3>Etape 2 : connaitre l&rsquo;état de la session avec le package WindowsControl</h3>
<p>Maintenant que nous avons un MessageCallback pour piloter la lampe du bureau, faut-il encore savoir si la session est ouverte ou non.</p>
<p>Pour cela vous avez dans le catalogue en ligne, le package <a href="/package-library/windowscontrol/">WindowsControl</a> qui expose différent MessageCallbacks pour verrouiller ou fermer une session, pour arrêter ou redémarrer l&rsquo;ordinateur, pour contrôler le volume ou la luminosité (comme vu <a href="/tutorials/potentiometre-connecte-pour-controler-le-volume-ou-la-luminosite/">dans ce tutoriel</a>).</p>
<p>Ce package produit également un StateObject nommé « SessionLocked » de type booléen qui indique si la session est verrouillée (ou fermée) ou non.</p>
<p>Il suffit donc de <a href="/getting-started/telecharger-et-deployer-des-packages-sur-vos-sentinelles/">déployer ce package</a> depuis la <a href="/constellation-platform/constellation-console/package-repository/">Console Constellation</a> sur la sentinelle UI du PC à synchroniser avec votre lampe. On suivra ainsi ce StateObject pour savoir quel est l&rsquo;état de votre session et réagir tout changement d&rsquo;état.</p>
<h3>Etape 3 : synchroniser la lampe avec la session en C#</h3>
<p>Passons au chose sérieuse, nous avons d&rsquo;un côté un StateObject nous indiquant si la session est ouverte ou non et un MessageCallback nous permettant d&rsquo;allumer ou d&rsquo;éteindre la lampe du bureau, reste juste à créer le lien.</p>
<p>Pour cela nous allons <a href="/getting-started/creez-votre-premier-package-constellation-en-csharp/">créer un package .NET en C#</a> depuis Visual Studio.</p>
<p>Dans la classe principale (<em>Program</em>), nous allons ajouter un <a href="/client-api/net-package-api/consommer-des-stateobjects/">StateObjectLink</a>, c&rsquo;est à dire une propriété dans notre code liée au StateObject représentant l&rsquo;état de la session en ajoutant les lignes :</p>
<p></p><pre class="crayon-plain-tag">[StateObjectLink("WindowsControl", "SessionLocked")]
public StateObjectNotifier SessionLocked { get; set; }</pre><p></p>
<p>Prenez garde toutefois, si vous avez déployé le package WindowsControl sur plusieurs sentinelles de votre Constellation, le StateObjectLink ci-dessus sera lié à plusieurs StateObjects et non au StateObject de votre ordinateur à scruter. L’unicité d’un StateObject est obtenu par le triplet : “Sentinel + Package + Nom” car un nom de StateObject est unique pour une <a href="https://developer.myconstellation.io/concepts/instance-package-versioning-et-resolution/#Sentinel_Package_Instance_de_package">instance de package</a> (couple Sentinel / Package), de même qu’un package est unique pour une sentinelle et qu’une sentinelle est unique dans une Constellation.</p>
<p>De ce fait pour lier la propriété « <em>SessionLocked</em> » au StateObject « <em>SessionLocked</em> » de votre ordinateur on écrira :</p>
<p></p><pre class="crayon-plain-tag">[StateObjectLink("PC-SEB_UI", "WindowsControl", "SessionLocked")]
public StateObjectNotifier Session { get; set; }</pre><p></p>
<p>Dans l&rsquo;exemple ci-dessus, la machine est nommée « PC-SEB » et donc le nom de sa sentinelle « PC-SEB_UI » étant donné que le package WindowsControl est déployé sur la Sentinelle UI d&rsquo;où le suffixe « _UI » dans le nom de la sentinelle. Vous pouvez bien entendu vérifier le nom exacte de votre sentinelle sur la Console Constellation.</p>
<p>Maintenant que l&rsquo;état de la session de notre PC est synchronisé dans cette propriété .NET de notre code C#, nous allons ajouter un « handler » pour réagir au changement d&rsquo;état :</p>
<p></p><pre class="crayon-plain-tag">this.SessionLocked.ValueChanged += (s, e) =&gt;
{
    if ((bool)this.SessionLocked.DynamicValue)
    {
        PackageHost.WriteInfo("Verrouillage de la session : fermeture de la lampe");
    }
    else
    {
        PackageHost.WriteInfo("Session déverrouillée : allumage de la lampe");
    }
};</pre><p></p>
<p>Maintenant pour allumer la lumière, il suffit d&rsquo;envoyer un message pour déclencher le MessageCallback permettant de contrôler votre lampe. Comme expliqué ci-dessus, dans mon cas, la lampe sur mon bureau est contrôlée par une prise Z-Wave AN158 pilotable par le package Vera via le MessageCallback « <em>SetSwitchState</em>« .</p>
<p>On crée donc <a href="/client-api/net-package-api/envoyer-des-messages-invoquer-des-messagecallbacks/">un proxy dynamique vers le package</a> Vera et on invoque le MC comme on invoquerait une méthode .NET en passant en paramètre un objet contenant l&rsquo;ID du device Z-Wave et l&rsquo;état souhaité :</p>
<p></p><pre class="crayon-plain-tag">PackageHost.CreateMessageProxy("Vera").SetSwitchState(new { DeviceID = 42, State = true });</pre><p></p>
<p>Pour connaitre l&rsquo;ID du device Z-Wave on peut soit le rechercher dans le StateObjects Explorer et l&rsquo;écrire en dur dans notre code C#, ou soit ajouter un autre StateObjectLink afin de récupérer dynamiquement son Id (car contenu dans le StateObject du device).</p>
<p>Le code de notre package sera donc :</p>
<p></p><pre class="crayon-plain-tag">public class Program : PackageBase
{
    [StateObjectLink("Vera", "Lampe Bureau Seb")]
    public StateObjectNotifier LampeBureau { get; set; }

    [StateObjectLink("PC-SEB_UI", "WindowsControl", "SessionLocked")]
    public StateObjectNotifier SessionLocked { get; set; }

    static void Main(string[] args)
    {
        PackageHost.Start&lt;Program&gt;(args);
    }

    public override void OnStart()
    {
        this.SessionLocked.ValueChanged += (s, e) =&gt;
        {
            if ((bool)this.SessionLocked.DynamicValue)
            {
                PackageHost.WriteInfo("Verrouillage de la session : fermeture de la lampe");
                PackageHost.CreateMessageProxy("Vera").SetSwitchState(new { DeviceID = (int)this.LampeBureau.DynamicValue.Id, State = false });
            }
            else
            {
                PackageHost.WriteInfo("Session déverrouillée : allumage de la lampe");
                PackageHost.CreateMessageProxy("Vera").SetSwitchState(new { DeviceID = (int)this.LampeBureau.DynamicValue.Id, State = true });
            }
        };
    }
}</pre><p></p>
<p>On peut maintenant lancer notre package en mode « Debug On Constellation » pour le tester depuis Visual Studio tout en le connectant dans votre Constellation :</p>
<p><img loading="lazy" class="alignnone size-full wp-image-1675 aligncenter colorbox-4829" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-196.png" alt="" width="104" height="34" /></p>
<p>Vous pouvez tester le fonctionnel de votre package : on verrouille la session, la lampe s&rsquo;éteint, on la déverrouille, la lampe s&rsquo;allume !</p>
<p>Une fois votre package testé et validé, vous pouvez <a href="/constellation-platform/constellation-sdk/publier-package-visual-studio/">le publier</a> dans votre Constellation et le déployer sur une de vos sentinelles (<a href="/getting-started/creez-votre-premier-package-constellation-en-csharp/#Publier_son_package_dans_Constellation">voir le guide</a>).</p>
<h3>Etape 4 : ajouter un capteur de luminosité</h3>
<p>Jusqu&rsquo;à présent dès que la session est déverrouillée la lampe du bureau s&rsquo;allume et dès qu&rsquo;on la ferme elle s’éteint. Seulement en pleine journée ce n&rsquo;est peut être pas très judicieux d&rsquo;allumer la lumière !</p>
<p>Pour cela nous pouvons ajouter une condition supplémentaire basée sur la luminosité ambiante.</p>
<p>On pourrait utiliser un capteur sans fil du marché comme le Chacon DIO54783 connecté via le package RFXcom ou bien un capteur Z-Wave via le package Vera ou Jeedom. On peut aussi concevoir son propre capteur avec un Arduino ou un ESP8266 <a href="/tutorials/creer-un-capteur-de-luminosite-dans-une-prise-220v/">comme vu dans ce tutoriel</a> ou avec un Raspberry Pi <a href="/tutorials/un-capteur-de-luminosite-exterieur-pilote-par-raspberry/">comme vu ici</a>.</p>
<p style="text-align: center;"><a href="/tutorials/creer-un-capteur-de-luminosite-dans-une-prise-220v/"><img loading="lazy" class="alignnone wp-image-4818 colorbox-4829" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-84.png" alt="" width="351" height="312" srcset="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-84.png 454w, https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-84-300x266.png 300w" sizes="(max-width: 351px) 100vw, 351px" /></a></p>
<p style="text-align: center;"><a href="/tutorials/un-capteur-de-luminosite-exterieur-pilote-par-raspberry/"><img loading="lazy" class="alignnone wp-image-4749 size-full colorbox-4829" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/P1170883_thumb-1.jpg" alt="" width="354" height="227" srcset="https://developer.myconstellation.io/wp-content/uploads/2017/05/P1170883_thumb-1.jpg 354w, https://developer.myconstellation.io/wp-content/uploads/2017/05/P1170883_thumb-1-300x192.jpg 300w" sizes="(max-width: 354px) 100vw, 354px" /></a></p>
<p>Dans notre article, prenons par exemple l&rsquo;un des deux capteurs ci-dessus qui publient chacun un StateObject nommé « Lux » composé de 3 propriétés : Broadband, IR et Lux.</p>
<p>Pour intégrer cette « information » dans notre code C#, ajoutons un StateObjectLink vers le StateObject « Lux » :</p>
<p></p><pre class="crayon-plain-tag">[StateObjectLink("LightSensor", "Lux")]
public StateObjectNotifier LuxSensor { get; set; }</pre><p></p>
<p>On peut maintenant modifier la condition d&rsquo;allumage avec un « else if » qui vérifiera que la luminosité est inférieure à un seuil qu&rsquo;on <a href="/client-api/net-package-api/settings/">va déclarer dans les settings</a> Constellation de façon à pouvoir modifier cette valeur à la volée depuis la Console Constellation :</p>
<p></p><pre class="crayon-plain-tag">else if (this.LuxSensor.DynamicValue.Lux &lt; PackageHost.GetSettingValue&lt;int&gt;("DaylightThreshold"))</pre><p></p>
<p>Bien entendu comme tout setting, il est vivement recommandé de le déclarer dans le <a href="/concepts/package-manifest/">manifeste du package</a> (le fichier <em>PackageInfo.xml</em>). De plus on pourra y définir la valeur par défaut ici fixée à 50 (lux) :</p>
<p></p><pre class="crayon-plain-tag">&lt;Settings&gt;
  &lt;Setting name="DaylightThreshold" type="Int32" defaultValue="50" description="Seuil de luminosité minimale pour l'allumage de la lampe du bureau" /&gt;
&lt;/Settings&gt;</pre><p></p>
<p>Pour finir, prenons le cas où la session est déjà déverrouillée et la soirée arrivant, la luminosité passe en dessous du seuil : il faut alors allumer la lumière bien que l&rsquo;état de la session n&rsquo;a pas changé !</p>
<p>Pour cela nous allons ajouter un « handler » pour réagir à chaque mise à jour du StateObject « Lux » du capteur de luminosité. A chaque nouvelle mesure, si la valeur est inférieure au seuil défini dans les settings et que la session est bien déverrouillée, on allumera la lumière :</p>
<p></p><pre class="crayon-plain-tag">this.LuxSensor.ValueChanged += (s, e) =&gt;
{
    if (e.NewState.DynamicValue.Lux &lt; PackageHost.GetSettingValue&lt;int&gt;("DaylightThreshold") &amp;&amp; (bool) this.SessionLocked.DynamicValue == false)
    {
        PackageHost.WriteInfo("Session déverrouillée à la tombée de la nuit : allumage de la lampe");
        PackageHost.CreateMessageProxy("Vera").SetSwitchState(new { DeviceID = (int)this.LampeBureau.DynamicValue.Id, State = true });
    }
};</pre><p></p>
<p>Ainsi notre lumière de bureau est maintenant synchronisée à notre session et ne s&rsquo;allumera que si la luminosité est faible. Elle sera donc éteinte dès qu&rsquo;on ferme ou verrouille la session et s&rsquo;allumera si la luminosité baisse sous le seuil défini dans les settings alors que la session est déjà déverrouillée ou vient d&rsquo;être déverrouillée.</p>
<h3>Etape 5 : fermer la lampe en cas de déconnexion du PC</h3>
<p>Pour vraiment aller au fond des choses il y a encore un cas à gérer : que faire si le PC s’arrête proprement ou brutalement. En somme l&rsquo;idée est de fermer la lampe si le PC est déconnecté de Constellation, que ce soit suite à un arrêt de l&rsquo;ordinateur, un crash, une déconnexion quelconque, etc..</p>
<p>Pour savoir si le PC est bien connecté on va surveiller l&rsquo;état de la sentinelle UI de votre PC. Pour cela il faut se connecter sur le hub de contrôle.</p>
<p>L&rsquo;utilisation du hub de contrôle depuis un package C# est expliqué en détail <a href="/client-api/net-package-api/controlmanager/">dans cet article </a>que je vous recommande de lire.</p>
<p>La première étape consiste donc à déclarer dans le <a href="/concepts/package-manifest/">manifeste du package</a> (le fichier <em>PackageInfo.xml</em>) l&rsquo;utilisation du hub de contrôle par votre package en ajoutant l&rsquo;attribut suivant sur la balise <em>Package</em> :</p>
<p></p><pre class="crayon-plain-tag">EnableControlHub="true"</pre><p></p>
<p>De plus il faut également, sur votre package, définir une <a href="/constellation-platform/constellation-console/gerer-credentials-avec-la-console-constellation/">clé d&rsquo;accès ayant les droits d&rsquo;accès au hub de contrôle</a>. Vous pouvez vérifier la bonne connexion au hub de contrôle dans votre code par la propriété : « <em>PackageHost.HasControlManager</em>« .</p>
<p>Une fois connecté au hub de contrôle on va demander à recevoir les mises à jour des statuts des sentinelles de notre Constellation par la ligne :</p>
<p></p><pre class="crayon-plain-tag">PackageHost.ControlManager.RequestSentinelUpdates();</pre><p></p>
<p>Cela nous permet ensuite d&rsquo;attacher un « handler » qu&rsquo;on filtrera sur notre sentinelle (ici nommée « PC-SEB_UI »). On stockera dans la variable « pcConnected » un booléen indiquant si la sentinelle de notre PC est connectée ou non. Si notre sentinelle n&rsquo;est pas/plus connectée, on fermera immédiatement la lampe du bureau.</p>
<p></p><pre class="crayon-plain-tag">PackageHost.ControlManager.SentinelUpdated += (s, e) =&gt;
{
    if (e.Sentinel.Description.SentinelName == "PC-SEB_UI")
    {
        this.pcConnected = e.Sentinel.IsConnected;
        PackageHost.WriteInfo("Le PC de Seb est '{0}'", e.Sentinel.IsConnected ? "connecté" : "déconnecté");
        if (!this.pcConnected)
        {
            // Éteindre la lampe si le PC est déconnecté !
            PackageHost.CreateMessageProxy("Vera").SetSwitchState(new { DeviceID = (int)this.LampeBureau.DynamicValue.Id, State = false });
        }
    }
};</pre><p></p>
<p>De plus, dans la condition d&rsquo;allumage, on rajoutera le fait de vérifier que le PC est bien connecté avant de prendre la décision d&rsquo;allumer la lampe :</p>
<p></p><pre class="crayon-plain-tag">else if (this.pcConnected &amp;&amp; this.LuxSensor.DynamicValue.Lux &lt; PackageHost.GetSettingValue&lt;int&gt;("DaylightThreshold"))</pre><p></p>
<p>Et voilà, notre package est opérationnel ! La lampe est parfaitement synchronisée avec l&rsquo;état de notre session Windows en tenant compte de la luminosité ambiante et des différents cas de figure pouvant apparaître, comme le redémarrage, l’arrêt ou le crash de notre PC !</p>
<p>Le code final est :</p>
<p></p><pre class="crayon-plain-tag">public class Program : PackageBase
{
    // Nom de la sentinelle Windows à syncrhoniser avec la lampe
    private const string SEB_PC_SENTINEL_NAME = "PC-SEB_UI";
    
    // PC Connecté? oui ou non !
    private bool pcConnected = false;

    // Lien vers le SO de la lampe du bureau
    [StateObjectLink("Vera", "Lampe Bureau Seb")]
    public StateObjectNotifier LampeBureau { get; set; }

    // Lien vers l'état de la session Windows
    [StateObjectLink(SEB_PC_SENTINEL_NAME, "WindowsControl", "SessionLocked")]
    public StateObjectNotifier SessionLocked { get; set; }

    // Lien vers le capteur de luminosité
    [StateObjectLink("LightSensor", "Lux")]
    public StateObjectNotifier LuxSensor { get; set; }

    // Démarrage du package
    static void Main(string[] args)
    {
        PackageHost.Start&lt;Program&gt;(args);
    }

    // Méthode de démarrage de notre package
    public override void OnStart()
    {
        // Si accès au ControlHub
        if (PackageHost.HasControlManager)
        {
            // Demande de reception des mise à jour des sentinelles
            PackageHost.ControlManager.RequestSentinelUpdates();
            // En cas de mise à jour de l'état d'une sentinelle
            PackageHost.ControlManager.SentinelUpdated += (s, e) =&gt;
            {
                // Si cela concerne notre sentinelle
                if (e.Sentinel.Description.SentinelName == SEB_PC_SENTINEL_NAME)
                {
                    // On stocke dans la variable "pcConnected" l'état connecté ou déconnecté de notre PC
                    this.pcConnected = e.Sentinel.IsConnected;
                    PackageHost.WriteInfo("Le PC de Seb est '{0}'", e.Sentinel.IsConnected ? "connecté" : "déconnecté");
                    // Si le PC est maintenant déconnecté, on ferme la lampe !
                    if (!this.pcConnected)
                    {
                        SetLight(false);
                    }
                }
            };
        }
        else
        {
            // Pas d'accès au COntrolHub, on log une erreur ! Vérifiez votre clé d'accès !
            PackageHost.WriteError("Accès au ControlHub impossible !");
        }

        // En cas de mise à jour du StateObject "Lux" du package "LightSensor"
        this.LuxSensor.ValueChanged += (s, e) =&gt;
        {
            // Si le PC est connecté, que la luminosité actuelle est inférieure au seuil défini dans les settings et que la session est bien dévérouillée
            if (this.pcConnected &amp;&amp; e.NewState.DynamicValue.Lux &lt; PackageHost.GetSettingValue&lt;int&gt;("DaylightThreshold") &amp;&amp; (bool) this.SessionLocked.DynamicValue == false)
            {
                // On allume la lampe !
                SetLight(true);
                PackageHost.WriteInfo("Session dévérouillée à la tombée de la nuit : allumage de la lampe");
            }
        };

        // En cas de mise à jour du StateObject "SessionLocked" du package "WindowsControl"
        this.SessionLocked.ValueChanged += (s, e) =&gt;
        {
            // Si la session est vérouillée (ou fermée)
            if ((bool)this.SessionLocked.DynamicValue)
            {
                // On eteint la lampe
                SetLight(false);
                PackageHost.WriteInfo("Verrouillage de la session : fermeture de la lampe");
            }
            // Si le PC est connecté, que la luminosité actuelle est inférieure au seuil défini dans les settings et que la session est donc dévérouillée
            else if (this.pcConnected &amp;&amp; this.LuxSensor.DynamicValue.Lux &lt; PackageHost.GetSettingValue&lt;int&gt;("DaylightThreshold"))
            {
                // On allume la lampe !
                SetLight(true);
                PackageHost.WriteInfo("Session déverrouillée avec luminosité faible : allumage de la lampe");
            }
        };
    }

    private void SetLight(bool state)
    {
        // Pour allumer la lumière, on invoque le MC "SetSwitchState" du package "Vera" en passant l'ID de la lampe (récupérée par son StateObjet)
        PackageHost.CreateMessageProxy("Vera").SetSwitchState(new { DeviceID = (int)this.LampeBureau.DynamicValue.Id, State = state });
    }
}</pre><p></p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/tutorials/synchroniser-lampe-bureau-avec-session-windows/">Synchroniser la lampe du bureau avec sa session Windows</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://developer.myconstellation.io/tutorials/synchroniser-lampe-bureau-avec-session-windows/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Un potentiomètre connecté pour contrôler le volume de votre PC, la luminosité de l&#8217;écran et bien plus encore</title>
		<link>https://developer.myconstellation.io/tutorials/potentiometre-connecte-pour-controler-le-volume-ou-la-luminosite/</link>
					<comments>https://developer.myconstellation.io/tutorials/potentiometre-connecte-pour-controler-le-volume-ou-la-luminosite/#respond</comments>
		
		<dc:creator><![CDATA[Sebastien Warin]]></dc:creator>
		<pubDate>Wed, 10 May 2017 09:15:44 +0000</pubDate>
				<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[Rotary Encoder]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[ESP8266]]></category>
		<category><![CDATA[WindowsControl]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=4549</guid>

					<description><![CDATA[<p>Dans ce tutoriel nous allons créer un encodeur rotatif connecté pour piloter tout type de chose comme le volume ou la luminosité de vos ordinateurs Windows par exemple grâce au package WindowsControl. Pour cela nous allons utiliser un encodeur rotatif</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/tutorials/potentiometre-connecte-pour-controler-le-volume-ou-la-luminosite/">Un potentiomètre connecté pour contrôler le volume de votre PC, la luminosité de l&rsquo;écran et bien plus encore</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Dans ce tutoriel nous allons créer un encodeur rotatif connecté pour piloter tout type de chose comme le volume ou la luminosité de vos ordinateurs Windows par exemple grâce au package <a href="/package-library/windowscontrol/">WindowsControl</a>.</p>
<p align="center"><img class="colorbox-4549"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Volume2" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/Volume2-gap.jpg" data-gif="https://developer.myconstellation.io/wp-content/uploads/2017/05/Volume2.gif" alt="Volume2" width="400" height="225" border="0" /></p>
<p>Pour cela nous allons utiliser un encodeur rotatif aussi nommé potentiomètre angulaire comme le KY-040 (comptez entre 50 cts et 2 euros pièce) avec un ESP8266 connecté en Wifi à votre Constellation.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/ky040.jpg"><img class="colorbox-4549"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="KY-040" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/ky040_thumb.jpg" alt="KY-040" width="240" height="184" border="0" /></a></p>
<h3>Prérequis</h3>
<p>Pour réaliser ce tutoriel, il nous faut :</p>
<ul>
<li>Un ESP8266, ici nous utilisons un D1 Mini Pro</li>
<li>Un encodeur rotatif KY-040</li>
<li>Un <a href="/getting-started/installer-constellation/">serveur Constellation</a></li>
<li>Le package <a href="/package-library/windowscontrol/">WindowsControl </a>déployé sur au moins une <a href="/getting-started/ajouter-des-sentinelles/">sentinelle Windows</a></li>
</ul>
<h3>Etape 1 : créer un encodeur rotatif connecté</h3>
<p>Le KY-040 a 5 pins : deux pour l&rsquo;alimentation (5V et Gnd), deux pour l&rsquo;encodeur rotatif (CLK et DT) et un dernier pour le bouton (lorsque l&rsquo;on pousse sur le potentiomètre).</p>
<p>Nous allons donc tout simplement connecter les pin 5V et Gnd sur le port 5V et Gnd de notre D1 Mini Pro. Les pins CLK et DT respectivement sur les ports D1 et D2 et le switch (pin SW) sur le port D3.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/DSC_0019.jpg"><img class="colorbox-4549"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="ESP RotaryController" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/DSC_0019_thumb.jpg" alt="ESP RotaryController" width="304" height="173" border="0" /></a></p>
<p>Vous pouvez optionnellement habiller le potentiomètre avec un bouchon, ci-dessous récupéré sur une veille chaine Hifi :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/DSC_0014.jpg"><img class="colorbox-4549"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="ESP RotaryController avec un bouchon" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/DSC_0014_thumb.jpg" alt="ESP RotaryController avec un bouchon" width="304" height="173" border="0" /></a></p>
<p style="text-align: left;" align="center">Votre encodeur est prêt, il ne reste plus qu&rsquo;à le programmer.</p>
<h3>Etape 2 : programmer l’ESP8266</h3>
<p>Pour démarrer vous devez dans Constellation déclarer une sentinelle associée à une clé d’accès et un package virtuel. Ici notre ESP8266 est représenté par la sentinelle nommée “ESP8266” et le package virtuel se nomme “RotaryController”.</p>
<p>Dans l’Arduino IDE, nous créons un nouveau projet à partir du Starter Kit Constellation pour ESP8266 dans lequel nous allons définir le nom de notre réseau Wifi (SSID) ainsi que sa clé d’accès  puis nous configurerons le client Constellation en spécifiant l’identité de notre package virtuel, sa clé d’accès et l’adresse/port de notre serveur Constellation :</p>
<p></p><pre class="crayon-plain-tag">// ESP8266 Wifi
#include &lt;ESP8266WiFi.h&gt;
char ssid[] = "MON SSID";
char password[] = "macléWifi!!!!";

// Constellation client
Constellation&lt;WiFiClient&gt; constellation("X.X.X.X", 8088, "ESP8266", "RotaryController", "xxxxxxxxxxxxxxxxx");</pre><p></p>
<p>Encore une fois si tout cela est nouveau pour vous, je vous recommande <a href="/getting-started/connecter-un-arduino-ou-un-esp8266-constellation/">de suivre ce guide d’introduction à l’API Constellation pour Arduino/ESP8266</a>.</p>
<p>Maintenant que la coquille de notre package virtuel sur ESP8266 est prête, ajoutons une librairie pour interpréter les signaux du KY-040 (inputs CLK et DT) pour connaitre et mesurer le mouvement du potentiomètre.</p>
<p>Dans le gestionnaire de bibliothèque (menu<em> Croquis &gt; Inclure une bibliothèque</em>), installez la librairie “<a href="https://www.pjrc.com/teensy/td_libs_Encoder.html">Encoder</a>” de Paul Stoffregen et ajoutez-la dans votre code avant de déclarer une variable de type “Encoder” que nous nommerons “encoder”.</p>
<p>Pour rappel nous avons connecté le KY-040 sur les ports D1 (CLK) et D2 (DT) et le bouton sur D3 (SW) :</p>
<p></p><pre class="crayon-plain-tag">#include &lt;Encoder.h&gt;

Encoder encoder(D1, D2);
int pinSW = D3;</pre><p></p>
<p>Le bouton poussoir du potentiomètre est un simple bouton poussoir connecté en « pull-up » (à la masse). Il n&rsquo;est donc pas traité par la librairie « Encoder » et sera interprété avec un simple « <em>digitalRead</em>« .</p>
<p>Toujours dans l’entête de votre code, configurons les valeurs par défaut suivantes :</p>
<p></p><pre class="crayon-plain-tag">// Default values
static String target = "WindowsControl";
static String mcbUp = "VolumeUp";
static String mcbDown = "VolumeDown";
static String mcbPush = "Mute";</pre><p></p>
<p>Ici on configure où on va envoyer le message, par défaut au scope du package « WindowsControl ».</p>
<p>A ce package « WindowsControl » on enverra :</p>
<ul>
<li>Un message « VolumeUp » si le potentiomètre « monte »</li>
<li>Un message « VolumeDown » si le potentiomètre « descend »</li>
<li>Un message « Mute » si on pousse le potentiomètre « monte »</li>
</ul>
<p>C’est à dire que par défaut, notre potentiomètre connecté contrôlera le volume des PC Windows où le package WindowsControl est déployé. On pourra par la suite personnaliser ces actions dans les settings comme nous le verrons ci-dessous.</p>
<p>Entrons maintenant dans le code de la méthode « <em>setup()</em>« . Ajoutons la ligne suivante pour initialiser l&rsquo;entrée D3 où est connecté le bouton poussoir :</p>
<p></p><pre class="crayon-plain-tag">// Init I/O
pinMode(pinSW, INPUT_PULLUP);</pre><p></p>
<p>Enregistrons ensuite un MessageCallback « ReloadSettings » pour permettre de recharger la configuration « à la volée » sans devoir redémarrer notre EPS. Ce MessageCallback se charge d&rsquo;invoquer la fonction « <em>loadSettings()</em>« .</p>
<p>De plus, à la fin de notre méthode « setup() » invoquons cette méthode « <em>loadSettings()</em> » pour charger la configuration au démarrage.</p>
<p></p><pre class="crayon-plain-tag">// ReloadSettings MessageCallback
constellation.registerMessageCallback("ReloadSettings", MessageCallbackDescriptor().setDescription("Reload the settings"),
  [](JsonObject&amp; json) {
    loadSettings();
    constellation.writeInfo("Settings reloaded");
 });
constellation.declarePackageDescriptor();

// Load settings on start
loadSettings();</pre><p></p>
<p>Cette méthode « <em>loadSettings()</em> » récupère les settings sur le serveur Constellation et écrase la valeur par défaut si le setting est défini sur le serveur.</p>
<p></p><pre class="crayon-plain-tag">void loadSettings() {
  JsonObject&amp; settings = constellation.getSettings();
  if(settings.containsKey("Target")) {
    target = String(settings["Target"].asString());
  }
  if(settings.containsKey("OnUp")) {
    mcbUp = String(settings["OnUp"].asString());
  }
  if(settings.containsKey("OnDown")) {
    mcbDown = String(settings["OnDown"].asString());
  }
  if(settings.containsKey("OnPush")) {
    mcbPush = String(settings["OnPush"].asString());
  }
}</pre><p></p>
<p>De ce fait par défaut, notre potentiomètre connecté invoque le MessageCallback « VolumeUp » sur le package « WindowsControl » lorsque l&rsquo;on tourne à droite, « VolumeDown » à gauche ou « Mute » lorsqu&rsquo;on appuie dessus. Il suffira d&rsquo;ajouter/modifier les settings de notre package virtuel depuis la Console Constellation pour modifier ces actions.</p>
<p>Il ne reste plus qu&rsquo;à définir le code de la boucle principale, la fonction « <em>loop()</em>« .</p>
<p>Celle-ci lit la valeur de l&rsquo;encodeur rotatif et envoi les messages dans Constellation en cas de montée ou de descente. La boucle lit également la valeur de l&rsquo;entrée D3 pour envoyer le message en cas d&rsquo;appui sur le potentiomètre.</p>
<p></p><pre class="crayon-plain-tag">void loop(void) {
  constellation.loop();

  static long lastValue = -1;
  long value = encoder.read();
  if (value != lastValue &amp;&amp; abs(value - lastValue) &gt;= 4) {
    if(lastValue &gt; value) {
      Serial.println("Up");
      constellation.sendMessage(Package, target.c_str(), mcbUp.c_str(), "{}");
    }
    else {
      Serial.println("Down");
      constellation.sendMessage(Package, target.c_str(), mcbDown.c_str(), "{}");
    }    
    lastValue = value;
  }
  
  static int lastButtonState = LOW; 
  int buttonState = digitalRead(pinSW);
  if (buttonState != lastButtonState &amp;&amp; buttonState == LOW) {
     Serial.println("Push");
     constellation.sendMessage(Package, target.c_str(), mcbPush.c_str(), "{}");
  }
  lastButtonState = buttonState;  
}</pre><p></p>
<p>Et voilà votre potentiomètre connecté est opérationnel !</p>
<h3>Démos</h3>
<h4>Piloter le volume de vos PC</h4>
<p>Une fois le programme téléversé sur votre ESP8266, vous pouvez tourner le potentiomètre à gauche ou à droite pour diminuer ou augmenter le volume. Si vous appuyez sur le bouton, vous alternez entre les modes « mute/un-mute ».</p>
<p align="center"><img class="colorbox-4549"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="MultiSentinels" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/MultiSentinels-gap.jpg" data-gif="https://developer.myconstellation.io/wp-content/uploads/2017/05/MultiSentinels.gif" alt="MultiSentinels" width="400" height="225" border="0" /></p>
<p style="text-align: left;" align="center">Par contre si vous avez déployé le package <a href="/package-library/windowscontrol/">WindowsControl </a>sur plusieurs de vos sentinelles, vous <strong>contrôlerez simultanément le volume sur TOUTES vos sentinelles</strong> comme le montre l&rsquo;animation ci-dessus.</p>
<p style="text-align: left;" align="center">Souvenez-vous du <a href="/concepts/instance-package-versioning-et-resolution/">concept d&rsquo;instance</a>, ici notre ESP8266 envoie un message au scope « WindowsControl », c&rsquo;est donc TOUTES les instances du package « WindowsControl » qui recevrons le message.</p>
<h4>Piloter le volume d’un PC en particulier</h4>
<p>Pour contrôler le volume d&rsquo;un PC en particulier, il faut envoyer les messages au scope d&rsquo;une instance du « WindowsControl » en particulier.</p>
<p>Pour cela nous devez spécifier l&rsquo;instance selon la nomenclature suivante : « SENTINEL/Package ».</p>
<p>Par exemple, le nom de la sentinelle sur laquelle est déployée le package WindowsControl est « PC-SEB_UI ». Il faudra donc que j&rsquo;envoie les messages au package « PC-SEB_UI/WindowsControl » pour contrôler le volume de mon ordinateur « PC-SEB » et non de tous.</p>
<p>Comme nous avons créé un système personnalisable en se servant des settings Constellation, il me suffit, depuis la Console Constellation, d&rsquo;ajouter le setting que nous avons nommé « Target » pour définir le nom du scope où envoyer les messages :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-50.png"><img class="colorbox-4549"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Personnaliser les settings" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-50.png" alt="Personnaliser les settings" width="404" height="194" border="0" /></a></p>
<p style="text-align: left;" align="center">Et voilà, désormais je ne pilote que le volume de cette machine en particulier et non de toutes mes machines.</p>
<h4>Piloter la luminosité d’un PC</h4>
<p>Si on observe les MessageCallbacks du package <a href="/package-library/windowscontrol/">WindowsControl</a>, on constate qu&rsquo;il expose d&rsquo;autre MCs dont « BrightnessUp » et « BrightnessDown » pour augmenter ou diminuer la luminosité.</p>
<p>Avec notre code se base sur les settings, nous pouvons modifier le nom des MC à invoquer en ajoutant/modifiant les settings du package.</p>
<p>Ajoutons donc deux settings nommés « OnUp » et « OnDown » respectivement définis avec les valeurs « BrightnessUp » et « BrightnessDown ». Invoquons ensuite le MC « ReloadSettings » sur notre package virtuel ou bien appuyez sur le bouton « Reset » de votre ESP8266 pour le redémarrer et donc recharger les settings :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-51.png"><img class="colorbox-4549"  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/2017/05/image_thumb-51.png" alt="image" width="404" height="214" border="0" /></a></p>
<p style="text-align: left;" align="center">Désormais notre potentiomètre connecté pilotera la luminosité :</p>
<p align="center"><img class="colorbox-4549"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Brightness" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/Brightness-gap.jpg" data-gif="https://developer.myconstellation.io/wp-content/uploads/2017/05/Brightness.gif" alt="Brightness" width="400" height="225" border="0" /></p>
<h4>Pour aller plus loin …</h4>
<p>Comme vous l&rsquo;avez vu, notre potentiomètre est entièrement personnalisable car le nom des MC à invoquer en cas de montée, descente ou d&rsquo;appui sur le potentiomètre est personnalisable dans les settings.</p>
<p>Ici on pilote le volume ou la luminosité d&rsquo;un Windows grâce au package WindowsControl, mais on pourrait également piloter tout type de chose : l&rsquo;intensité d&rsquo;une lampe, le thermostat, le toit ouvrant d&rsquo;une voiture ou bien des valeurs de vos programmes ou pages Web, par exemple le slider d&rsquo;une page HTML !</p>
<p>Libre à votre imagination <img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/tutorials/potentiometre-connecte-pour-controler-le-volume-ou-la-luminosite/">Un potentiomètre connecté pour contrôler le volume de votre PC, la luminosité de l&rsquo;écran et bien plus encore</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://developer.myconstellation.io/tutorials/potentiometre-connecte-pour-controler-le-volume-ou-la-luminosite/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>WindowsControl : contrôlez vos ordinateurs Windows depuis Constellation</title>
		<link>https://developer.myconstellation.io/package-library/windowscontrol/</link>
					<comments>https://developer.myconstellation.io/package-library/windowscontrol/#respond</comments>
		
		<dc:creator><![CDATA[Constellation Documentation Agent]]></dc:creator>
		<pubDate>Fri, 28 Oct 2016 09:42:19 +0000</pubDate>
				<category><![CDATA[Packages]]></category>
		<category><![CDATA[Package]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[WindowsControl]]></category>
		<category><![CDATA[Controle]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=3583</guid>

					<description><![CDATA[<p>Le package WindowsControl vous permet de contrôler l’état de vos ordinateurs Windows (mise en veille, hibernation, arrêt/redémarrage, verrouillage de la session, contrôle du volume ou de la luminosité …). Le code source de ce package est en ligne sur :</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/package-library/windowscontrol/">WindowsControl : contrôlez vos ordinateurs Windows depuis Constellation</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Le package WindowsControl vous permet de contrôler l’état de vos ordinateurs Windows (mise en veille, hibernation, arrêt/redémarrage, verrouillage de la session, contrôle du volume ou de la luminosité …).</p>
<p>Le code source de ce package est en ligne sur : <a href="https://github.com/myconstellation/constellation-packages/tree/master/WindowsControl">https://github.com/myconstellation/constellation-packages/tree/master/WindowsControl</a></p>
<h3>Installation</h3>
<p>Depuis le “Online Package Repository” de votre Console Constellation, déployez le package WindowsControl :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/10/image-162.png"><img class="colorbox-3583"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; padding-right: 0px; border-width: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/10/image_thumb-146.png" alt="image" width="350" height="214" border="0" /></a></p>
<p>Une fois le package télécharger votre repository local, sélectionnez la sentinelle sur laquelle déployer le package.</p>
<p>Vous pouvez également déployer ce package manuellement dans la configuration de votre Constellation :</p>
<p></p><pre class="crayon-plain-tag">&lt;package name="WindowsControl" /&gt;</pre><p></p>
<h3>Détails du package</h3>
<h4>Les Settings</h4>
<p>Ce package ne comporte aucun setting.</p>
<h4>Les StateObjects</h4>
<p>Vous retrouverez le StateObject suivant :</p>
<table border="0" width="100%" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td valign="top" width="10"><u>Nom</u></td>
<td valign="top" width="10"><u>Type</u></td>
<td valign="top" width="446"><u>Description</u></td>
</tr>
<tr>
<td valign="top" width="10"><strong>SessionLocked</strong></td>
<td valign="top" width="10">Boolean</td>
<td valign="top" width="446">Indique si la session est actuellement verrouillée ou non. Le package doit être déployé sur une sentinelle “UI” afin d’être lancé au sein d’une session Windows autrement ce StateObject ne sera pas publié.</td>
</tr>
</tbody>
</table>
<h4 align="left">Les MessageCallbacks</h4>
<p>Le package expose 6 MessageCallbacks :</p>
<table border="0" width="100%" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td valign="top" width="10"><u>Nom</u></td>
<td valign="top" width="141"><u>Réponse (saga)</u></td>
<td valign="top" width="407"><u>Description</u></td>
</tr>
<tr>
<td valign="top" width="10"><strong>Hibernate</strong></td>
<td valign="top" width="141"><em>Aucune</em></td>
<td valign="top" width="407">Mise en hibernation de la machine.</td>
</tr>
<tr>
<td valign="top" width="10"><strong>LockWorkStation</strong></td>
<td valign="top" width="141"><em>Aucune</em></td>
<td valign="top" width="407">Verrouille la session utilisateur (uniquement si le package est déployé dans une sentinelle UI)</td>
</tr>
<tr>
<td valign="top" width="10"><strong>LogoffSession</strong> <i></i></td>
<td valign="top" width="141"><em>Aucune</em></td>
<td valign="top" width="407">Ferme la session utilisateur (uniquement si le package est déployé dans une sentinelle UI)</td>
</tr>
<tr>
<td valign="top" width="10"><strong>Reboot</strong> <i></i></td>
<td valign="top" width="141"><em>Aucune</em></td>
<td valign="top" width="407">Redémarre la machine.</td>
</tr>
<tr>
<td valign="top" width="10"><strong>Shutdown</strong></td>
<td valign="top" width="141"><em>Aucune</em></td>
<td valign="top" width="407">Arrêt la machine.</td>
</tr>
<tr>
<td valign="top" width="10"><strong>Sleep</strong></td>
<td valign="top" width="141"><em>Aucune</em></td>
<td valign="top" width="407">Mise en veille de la machine.</td>
</tr>
<tr>
<td valign="top" width="10"><strong>Mute</strong></td>
<td valign="top" width="141"><em>Aucune</em></td>
<td valign="top" width="407">Active ou désactive le mode “Muet”.</td>
</tr>
<tr>
<td valign="top" width="10"><strong>VolumeUp</strong></td>
<td valign="top" width="141"><em>Aucune</em></td>
<td valign="top" width="407">Augmente le volume.</td>
</tr>
<tr>
<td valign="top" width="10"><strong>VolumeDown</strong></td>
<td valign="top" width="141"><em>Aucune</em></td>
<td valign="top" width="407">Diminue le volume.</td>
</tr>
<tr>
<td valign="top" width="10"><strong>SetBrightness</strong></td>
<td valign="top" width="141"><em>Aucune</em></td>
<td valign="top" width="407">Définit la luminosité de l’écran (valeur entre  0 et 100).</td>
</tr>
<tr>
<td valign="top" width="10"><strong>BrightnessUp</strong></td>
<td valign="top" width="141"><em>Aucune</em></td>
<td valign="top" width="407">Augmente la luminosité de l’écran.</td>
</tr>
<tr>
<td valign="top" width="10"><strong>BrightnessDown</strong></td>
<td valign="top" width="141"><em>Aucune</em></td>
<td valign="top" width="407">Diminue la luminosité de l’écran.</td>
</tr>
</tbody>
</table>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/10/image-163.png"><img class="colorbox-3583"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; padding-right: 0px; border-width: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/10/image_thumb-147.png" alt="image" width="350" height="268" border="0" /></a></p>
<h3 align="left">Quelques exemples</h3>
<ul>
<li>Synchroniser la lampe du bureau avec l’état de la session Windows</li>
<li>Eteindre toutes ses machines Windows avec un script Powershell</li>
<li>Mise en veille automatique d’une machine en cas d’absence de mouvement</li>
</ul>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/package-library/windowscontrol/">WindowsControl : contrôlez vos ordinateurs Windows depuis Constellation</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://developer.myconstellation.io/package-library/windowscontrol/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PerfCounter : intégrez les compteurs de performance Windows dans Constellation</title>
		<link>https://developer.myconstellation.io/package-library/perfcounter/</link>
					<comments>https://developer.myconstellation.io/package-library/perfcounter/#respond</comments>
		
		<dc:creator><![CDATA[Constellation Documentation Agent]]></dc:creator>
		<pubDate>Tue, 25 Oct 2016 13:40:00 +0000</pubDate>
				<category><![CDATA[Packages]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[PerfCounter]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Performance Counter]]></category>
		<category><![CDATA[Performance Monitor]]></category>
		<category><![CDATA[WMI]]></category>
		<category><![CDATA[Instrumentation]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=3410</guid>

					<description><![CDATA[<p>Le package PerfCounter permet de suivre des compteurs de performance Windows et de les injecter en tant que StateObject dans Constellation. Le code source du package est disponible sur : https://github.com/myconstellation/constellation-packages/tree/master/PerfCounter Installation Depuis le “Online Package Repository” de votre Console</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/package-library/perfcounter/">PerfCounter : intégrez les compteurs de performance Windows dans Constellation</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Le package PerfCounter permet de suivre des compteurs de performance Windows et de les injecter en tant que StateObject dans Constellation.</p>
<p>Le code source du package est disponible sur : <a title="https://github.com/myconstellation/constellation-packages/tree/master/PerfCounter" href="https://github.com/myconstellation/constellation-packages/tree/master/PerfCounter">https://github.com/myconstellation/constellation-packages/tree/master/PerfCounter</a></p>
<h3>Installation</h3>
<p>Depuis le “Online Package Repository” de votre Console Constellation, déployez le package PerfCounter :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/10/image-101.png"><img class="colorbox-3410"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; padding-right: 0px; border-width: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/10/image_thumb-93.png" alt="image" width="350" height="214" border="0" /></a></p>
<p>Une fois le package télécharger votre repository local, sélectionnez la sentinelle sur laquelle déployer le package.</p>
<p>Pour finir, sur la page de Settings, vous devez obligatoirement définir le setting “PerfCounters”. Il s’agit d’un setting de type “ConfigurationSection” c’est à dire que la configuration de ce setting est décrite en XML.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/10/image-103.png"><img class="colorbox-3410"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; padding-right: 0px; border: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/10/image_thumb-95.png" alt="image" width="350" height="306" border="0" /></a></p>
<p></p><pre class="crayon-plain-tag">&lt;perfCounterSection xmlns="urn:PerfCounter"&gt;
  &lt;perfCounters&gt;     
    &lt;perfCounter id="&lt;&lt; StateObject Name &gt;&gt;" categoryName="&lt;&lt;  Performance Counter Category Name &gt;&gt;" counterName="&lt;&lt; Performance Counter Counter Name &gt;&gt;"  instanceName="&lt;&lt; Optionnal Performance Counter Instance Name &gt;&gt;" /&gt;
  &lt;/perfCounters&gt;
&lt;/perfCounterSection&gt;</pre><p></p>
<p>Vous devez spécifier une liste de <em>&lt;perfCounter&gt;</em> dont les attributs sont :</p>
<ul>
<li><u>id</u> (obligatoire) : l’identifiant unique de ce compteur performance qui sera utilisé comme nom pour le StateObject</li>
<li><u>categoryName</u> (obligatoire) : la catégorie du compteur de performance</li>
<li><u>counterName</u> (obligatoire) : le nom du compteur de performance</li>
<li><u>instanceName</u> (optionnel) : le nom de l’instance du compteur de performance si nécessaire</li>
<li><u>machineName</u> (optionnel) : le nom de la machine sur laquelle récupérer le compteur de performance (si vide, c’est la machine il s’agit local)</li>
</ul>
<p>Par exemple pour récupérer la mémoire RAM disponible (catégorie “Memory”, nom “Available MBytes”, aucune instance) :</p>
<p></p><pre class="crayon-plain-tag">&lt;perfCounter id="MemoryAvailableMBytes" categoryName="Memory" counterName="Available MBytes"  /&gt;</pre><p></p>
<p>Pour la consommation globale du CPU (catégorie “Processor”, nom “% Processor Time”, instance “_Total”) :</p>
<p></p><pre class="crayon-plain-tag">&lt;perfCounter id="ProcessorTime" categoryName="Processor" counterName="% Processor Time" instanceName="_Total" /&gt;</pre><p></p>
<p>Chaque produit (Constellation Server y compris) peuvent publier des compteurs de performances (ASP.NET, IIS, SQL Server, Windows, etc..). Vous pouvez donc facilement les injecter dans Constellation.</p>
<p>Par exemple, ci-dessous une configuration du package injectant dans Constellation les compteurs de performance relatif au processeur, mémoire RAM, interfaces réseau, disque physique C:, ASP.NET, la CLR .net, le service IIS et SQL Server :</p>
<p></p><pre class="crayon-plain-tag">&lt;perfCounterSection xmlns="urn:PerfCounter"&gt;
   &lt;perfCounters&gt;     

     &lt;!-- Processor --&gt;
     &lt;perfCounter id="ProcessorTime" categoryName="Processor" counterName="% Processor Time" instanceName="_Total" /&gt;
     &lt;perfCounter id="ProcessorQueueLength" categoryName="System" counterName="Processor Queue Length" /&gt;

     &lt;!-- Disk --&gt;
     &lt;perfCounter id="Disk0_IdleTime" categoryName="PhysicalDisk" counterName="% Idle Time" instanceName="0 C:" /&gt;
     &lt;perfCounter id="Disk0_SecPerRead" categoryName="PhysicalDisk" counterName="Avg. Disk sec/read"   instanceName="0 C:"/&gt;
     &lt;perfCounter id="Disk0_SecPerWrite" categoryName="PhysicalDisk" counterName="Avg. Disk sec/write"  instanceName="0 C:" /&gt;
     &lt;perfCounter id="Disk0_QueueLength" categoryName="PhysicalDisk" counterName="Current Disk Queue Length"  instanceName="0 C:" /&gt;

     &lt;!-- Memory --&gt;
     &lt;perfCounter id="MemoryAvailableMBytes" categoryName="Memory" counterName="Available MBytes"  /&gt;
     &lt;perfCounter id="MemoryPagesPerSec" categoryName="Memory" counterName="Pages/sec"  /&gt;
     &lt;perfCounter id="MemoryCacheBytes" categoryName="Memory" counterName="Cache Bytes"  /&gt;

     &lt;!-- Network Interface --&gt;
     &lt;perfCounter id="NetworkIntefaceBytesPerSec" categoryName="Network Interface" counterName="Bytes Total/sec" instanceName="Broadcom NetXtreme 57xx Gigabit Controller"  /&gt;
     &lt;perfCounter id="NetworkIntefaceOutputQueueLength" categoryName="Network Interface" counterName="Output Queue Length" instanceName="Broadcom NetXtreme 57xx Gigabit Controller" /&gt;

     &lt;!-- Paging File --&gt;
     &lt;perfCounter id="PagingFileUsage" categoryName="Paging File" counterName="% Usage" instanceName="_Total"  /&gt;

     &lt;!-- .NET CLR --&gt;
     &lt;perfCounter id="DotNetExceptionThrownPerSec" categoryName=".NET CLR Exceptions" counterName="# of Exceps Thrown / Sec" instanceName="_Global_" /&gt;
     &lt;perfCounter id="DotNetTotalCommittedBytes" categoryName=".NET CLR Memory" counterName="# Total Committed Bytes" instanceName="_Global_" /&gt;

     &lt;!-- ASP.NET --&gt;
     &lt;perfCounter id="AspNetRequestPerSec" categoryName="ASP.NET Applications" counterName="Requests/Sec" instanceName="__Total__" /&gt;
     &lt;perfCounter id="AspNetApplicationRestart" categoryName="ASP.NET" counterName="Application Restarts" /&gt;
     &lt;perfCounter id="AspNetRequestWaitTime" categoryName="ASP.NET" counterName="Request Wait Time" /&gt;
     &lt;perfCounter id="AspNetRequestQueued" categoryName="ASP.NET" counterName="Requests Queued" /&gt;

     &lt;!-- IIS --&gt;
     &lt;perfCounter id="IISGetRequestPerSec" categoryName="Web Service" counterName="Get Requests/sec" instanceName="_Total"  /&gt;
     &lt;perfCounter id="IISPostRequestPerSec" categoryName="Web Service" counterName="Post Requests/sec" instanceName="_Total"  /&gt;
     &lt;perfCounter id="IISCurrentConnections" categoryName="Web Service" counterName="Current Connections" instanceName="_Total"  /&gt;

     &lt;!-- SQL Server --&gt;
     &lt;perfCounter id="SqlBufferCacheHitRatio" categoryName="MSSQL$SQL2012:Buffer Manager" counterName="Buffer cache hit ratio" /&gt;
     &lt;perfCounter id="SqlPageLifeExpectancy" categoryName="MSSQL$SQL2012:Buffer Manager" counterName="Page life expectancy" /&gt;
     &lt;perfCounter id="SqlBatchRequestsPerSec" categoryName="MSSQL$SQL2012:SQL Statistics" counterName="Batch Requests/Sec" /&gt;
     &lt;perfCounter id="SqlSQLCompilationsPerSec" categoryName="MSSQL$SQL2012:SQL Statistics" counterName="SQL Compilations/Sec" /&gt;
     &lt;perfCounter id="SqlSQLReCompilationsPerSec" categoryName="MSSQL$SQL2012:SQL Statistics" counterName="SQL Re-Compilations/Sec" /&gt;
     &lt;perfCounter id="SqlUserConnections" categoryName="MSSQL$SQL2012:General Statistics" counterName="User Connections" /&gt;
     &lt;perfCounter id="SqlLockWaitsPerSec" categoryName="MSSQL$SQL2012:Locks" counterName="Lock Waits/sec" instanceName="_Total" /&gt;
     &lt;perfCounter id="SqlPageSplitsPerSec" categoryName="MSSQL$SQL2012:Access Methods" counterName="Page Splits/sec" /&gt;
     &lt;perfCounter id="SqlProcessesBlocked" categoryName="MSSQL$SQL2012:General Statistics" counterName="Processes Blocked" /&gt;
     &lt;perfCounter id="SqlCheckpointPagesPerSec" categoryName="MSSQL$SQL2012:Buffer Manager" counterName="Checkpoint Pages/sec" /&gt;

   &lt;/perfCounters&gt;
 &lt;/perfCounterSection&gt;</pre><p></p>
<p>Vous pouvez également déployer ce package manuellement dans la configuration de votre Constellation :</p>
<p></p><pre class="crayon-plain-tag">&lt;package name="perfcounter"&gt;
  &lt;settings&gt;
    &lt;setting key="PerfCounters"&gt;
        &lt;content&gt;
          &lt;perfCounterSection xmlns="urn:PerfCounter"&gt;
            &lt;perfCounters&gt;     
              &lt;perfCounter id="&lt;&lt; StateObject Name &gt;&gt;" categoryName="&lt;&lt;  Performance Counter Category Name &gt;&gt;" counterName="&lt;&lt; Performance Counter Counter Name &gt;&gt;"  instanceName="&lt;&lt; Optionnal Performance Counter Instance Name &gt;&gt;" /&gt;
            &lt;/perfCounters&gt;
          &lt;/perfCounterSection&gt;
        &lt;/content&gt;
      &lt;/setting&gt;
  &lt;/settings&gt;
&lt;/package&gt;</pre><p></p>
<h3>Détails du package</h3>
<h4>Les Settings</h4>
<table border="0" width="100%" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td valign="top" width="10"><u>Nom</u></td>
<td valign="top" width="10"><u>Type</u></td>
<td valign="top" width="10"><u>Détail</u></td>
<td valign="top" width="456"><u>Description</u></td>
</tr>
<tr>
<td valign="top" width="10"><strong>PerfCounters</strong></td>
<td valign="top" width="10">ConfigurationSection(XML)</td>
<td valign="top" width="10">Obligatoire</td>
<td valign="top" width="456">Configuration des compteurs de performance à suivre</td>
</tr>
<tr>
<td valign="top" width="10"><strong>RefreshInterval</strong></td>
<td valign="top" width="10">Int32</td>
<td valign="top" width="10">Optionnel<br />
Par défaut : 1000</td>
<td valign="top" width="456">Intervalle de temps en milliseconde pour interroger les compteurs de performance enregistrés et mettre à jour les StateObjects correspondants.</td>
</tr>
</tbody>
</table>
<h4>Les StateObjects</h4>
<p>Vous retrouverez autant de StateObject que de compteur de performance enregistrés dans la configuration de votre package.</p>
<table border="0" width="100%" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td valign="top" width="10"><u>Nom</u></td>
<td valign="top" width="10"><u>Type</u></td>
<td valign="top" width="446"><u>Description</u></td>
</tr>
<tr>
<td valign="top" width="10"><strong>&lt;&lt; ID du PerfCounter &gt;&gt;</strong></td>
<td valign="top" width="10">Single</td>
<td valign="top" width="446">Valeur numérique du compteur de performance</td>
</tr>
</tbody>
</table>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/10/image-102.png"><img class="colorbox-3410"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; padding-right: 0px; border-width: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/10/image_thumb-94.png" alt="image" width="350" height="280" border="0" /></a></p>
<h4 align="left">Les MessageCallbacks</h4>
<p>Ce package n’expose aucun MessageCallback.</p>
<h3 align="left">Quelques exemples</h3>
<ul>
<li>
<div>Afficher les valeurs des PerfCounters de différents serveurs Windows sur une page Web</div>
</li>
<li>
<div>Piloter une bande de LED en fonction du nombre de requête HTTP sur un serveur IIS avec un Arduino/ESP</div>
</li>
</ul>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/package-library/perfcounter/">PerfCounter : intégrez les compteurs de performance Windows dans Constellation</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://developer.myconstellation.io/package-library/perfcounter/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Cr&#233;ez votre premier package Constellation en Python</title>
		<link>https://developer.myconstellation.io/getting-started/creez-votre-premier-package-constellation-en-python/</link>
					<comments>https://developer.myconstellation.io/getting-started/creez-votre-premier-package-constellation-en-python/#respond</comments>
		
		<dc:creator><![CDATA[Sebastien Warin]]></dc:creator>
		<pubDate>Fri, 01 Apr 2016 08:28:19 +0000</pubDate>
				<category><![CDATA[Guide de démarrage]]></category>
		<category><![CDATA[Python API]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[PushStateObject]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Publish]]></category>
		<category><![CDATA[Package]]></category>
		<category><![CDATA[Settings]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=1737</guid>

					<description><![CDATA[<p>Vous pouvez développer des packages Constellation avec le langage Python. Sur vos sentinelles Windows comme sur vos sentinelles Linux vous pourrez profiter des différentes libraires et de l’écosystème Python connectés dans Constellation. Découvrons dans cet article comment créer et déployer</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/getting-started/creez-votre-premier-package-constellation-en-python/">Cr&eacute;ez votre premier package Constellation en Python</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Vous pouvez développer des packages Constellation avec le langage Python. Sur vos sentinelles Windows comme sur vos sentinelles Linux vous pourrez profiter des différentes libraires et de l’écosystème Python connectés dans Constellation.</p>
<p>Découvrons dans cet article comment créer et déployer votre premier package Constellation en Python.</p>
<p><span id="more-1737"></span></p>
<h3>Prérequis</h3>
<p>Tout d’abord, que vous soyez sur Windows ou Linux, il vous faudra un interpréteur Python 2 ou Python 3 et une ou deux libraires indispensables pour Constellation.</p>
<p>Notez que ces prérequis sont automatiquement installés sur Linux avec le <em><a href="/dowload/">Web Platform Installer</a></em>.</p>
<h4>Installer Python sur Windows</h4>
<p>Téléchargez <a href="https://www.python.org/downloads/windows/">Python pour Windows</a> (en version 2.x ou 3.x) puis lancez l’installation en choisissant une installation pour tous les utilisateurs :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/04/image-1.png"><img class="colorbox-1737"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Installation Python" src="https://developer.myconstellation.io/wp-content/uploads/2016/04/image_thumb-1.png" alt="Installation Python" width="424" height="364" border="0" /></a></p>
<p align="left">Sélectionnez le composant “PIP” ( le gestionnaire de package Python) et ajoutez “Python.exe” dans les “Paths” Windows :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/04/image-2.png"><img class="colorbox-1737"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Installation des composants Python" src="https://developer.myconstellation.io/wp-content/uploads/2016/04/image_thumb-2.png" alt="Installation des composants Python" width="424" height="363" border="0" /></a></p>
<p align="left">Une fois l’installation terminée, lancez une invite de commande (cmd.exe) et assurez-vous que la commande “python” fonctionne :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/04/image-3.png"><img class="colorbox-1737"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Python.exe fonctionnel" src="https://developer.myconstellation.io/wp-content/uploads/2016/04/image_thumb-3.png" alt="Python.exe fonctionnel" width="424" height="130" border="0" /></a></p>
<p align="left">Toujours dans une invite de commande Windows, installez via PIP les librairies “pyzmq” (et “enum34” si vous êtes en Python 2.x) grâce aux commandes suivantes :</p>
<p></p><pre class="crayon-plain-tag">pip install pyzmq
pip install enum34</pre><p></p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/04/install-python-tools-windows.png"><img class="colorbox-1737"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Installation des libs pour Python" src="https://developer.myconstellation.io/wp-content/uploads/2016/04/install-python-tools-windows_thumb.png" alt="Installation des libs pour Python" width="424" height="330" border="0" /></a></p>
<p align="left">Si vous êtes sur Python 3.x, vous n’avez pas besoin du module “enum34”, seulement “pyzmq”.</p>
<p align="left">Et voilà, votre environnement Windows est prêt !</p>
<h4>Installer Python sur Linux</h4>
<p>Sur un système Debian ou similaire (Raspbian, Ubuntu, etc …), vous n’avez qu’à installer (et enregistrer dans votre Constellation) <a href="/getting-started/ajouter-des-sentinelles/#Installation_dune_sentinelle_sur_un_systeme_Linux">une sentinelle Constellation</a>.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-1.png"><img class="colorbox-1737"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Installation des prérequis via PIP" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-1.png" alt="Installation des prérequis via PIP" width="350" height="222" border="0" /></a></p>
<p>Le <a href="/dowload/"><em>Web Platform Installer</em></a> vous proposera d’installer tous les prérequis nécessaires à savoir Python et les librairies “pyZmq” et “enum34” (si Python 2.x) via PIP.</p>
<p>Autrement, pour installer manuellement ces prérequis, vous pouvez utiliser les mêmes commandes que sur Windows :</p>
<p></p><pre class="crayon-plain-tag">sudo easy_install pip
sudo pip install pyzmq
sudo pip install enum34</pre><p></p>
<p>Encore une fois, la libraire “enum34” est seulement requise sur Python 2.x.</p>
<p>Enfin si vous utilisez un Raspberry Pi, vous pouvez également <a href="/constellation-platform/constellation-server/constellation-raspberry-pi/">consulter cet article en particulier</a>.</p>
<p>Et voilà, votre environnement Linux est prêt !</p>
<h3>Développer un package Python en ligne de commande</h3>
<p>Vous pouvez soit utiliser le SDK Constellation basé sur Visual Studio pour créer, tester et déployer des packages Constellation (.NET ou Python) ou bien, utiliser l&rsquo;outil en ligne de commande nommé <a href="/client-api/python-api/developper-avec-le-package-tools-cli/"><strong><em>« Constellation Package Tools CLI »</em></strong></a>.</p>
<p>Le développement sous Visual Studio est abordé ci-dessous. Pour l&rsquo;outil en ligne de commande, rendez-vous sur la page : <a href="/client-api/python-api/developper-avec-le-package-tools-cli/">Créer, tester et déployer des packages Python en ligne de commande</a></p>
<h3>Développer un package Python avec Visual Studio</h3>
<p>Après avoir installé les prérequis et le <a href="/getting-started/installer-constellation/#Etape_5_selectionnez_les_composants_Constellation_a_installer">SDK Constellation</a>, lancez Visual Studio et créez un nouveau package Constellation de type “Python” :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/04/image.png"><img class="colorbox-1737"  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 package Python" src="https://developer.myconstellation.io/wp-content/uploads/2016/04/image_thumb.png" alt="Création d'un package Python" width="424" height="294" border="0" /></a></p>
<p align="left">Une fois créé le projet Visual Studio a la structure suivante :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/04/image-4.png"><img class="colorbox-1737"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Structure d'un package Python" src="https://developer.myconstellation.io/wp-content/uploads/2016/04/image_thumb-4.png" alt="Structure d'un package Python" width="244" height="199" border="0" /></a></p>
<p align="left">Vous retrouverez une structure classique pour un package Constellation :</p>
<ul>
<li>
<div align="left"><u>App.config</u> : le fichier de configuration local pour définir les valeurs locales de vos settings (<a href="/client-api/net-package-api/settings/">lire ici</a>) ainsi que<span style="text-decoration: underline;"> les scripts Python à démarrer</span></div>
</li>
<li>
<div align="left"><u>PackageInfo.xml</u> : le <a href="/concepts/package-manifest/">manifeste de votre package</a></div>
</li>
<li>
<div align="left"><u>packages.config</u> : le fichier des packages Nuget de votre projet (réservé à Nuget)</div>
</li>
<li>
<div align="left"><u>Program.cs</u> : le point d’entrée (C#) de votre package qui se chargera de lancer le “Python Proxy” (le pont entre vos scripts Python et Constellation)</div>
</li>
<li>
<div align="left">Le répertoire “Scripts” (qui contient vos scripts Python)</div>
<ul>
<li>
<div align="left"><u>Constellation.py</u> : le proxy Python Constellation (la librairie Python) : <u>ne pas modifier</u> !</div>
</li>
<li>
<div align="left"><u>Demo.py</u> : un script Python d’exemple</div>
</li>
</ul>
</li>
</ul>
<h4 align="left">Configurer les scripts à démarrer</h4>
<p align="left">Vous pouvez ajouter autant de scripts Python dans le dossier “Scripts” comme vous le souhaitez. Pour cela, cliquez-droit sur ce répertoire et sélectionnez « <em>Ajouter un nouvel élément »</em>.</p>
<p align="left">Dans la catégorie « Constellation » sélectionnez « <strong><em>Constellation Python Script</em></strong> » :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/06/image-1.png"><img class="colorbox-1737"  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 script Constellation Python" src="https://developer.myconstellation.io/wp-content/uploads/2017/06/image_thumb-1.png" alt="Création d'un nouveau script Constellation Python" width="354" height="246" border="0" /></a></p>
<p align="left">Chaque script sera démarré dans un processus dédié et connecté à Constellation.</p>
<p align="left"><u>Attention</u> : si vous rajoutez des scripts Python dans ce dossier, il faut obligatoirement les inclure dans le package en sélectionnant “<em>Copy if newer</em>” pour la propriété “<em>Copy to Output directory</em>”. Cette propriété est automatiquement définie à cette valeur si vous avez créé votre fichier Python en sélectionnant l’élément « <em>Constellation Python Script</em> » comme expliqué ci-dessus.</p>
<p align="left"><strong>Dans le fichier « <em>App.config</em> » vous devez déclarer les fichiers Python à démarrer</strong>. Les scripts Python créé en sélectionnant l’élément « Constellation Python Script » sont automatiquement ajoutés dans ce fichier lors de la création. <strong>Si vous renommez ou supprimer vos scripts, n&rsquo;oubliez pas de mettre à jour ce fichier</strong>.</p>
<p></p><pre class="crayon-plain-tag">&lt;pythonProxy xmlns="urn:Constellation.PythonProxy"&gt;
  &lt;scripts&gt;
    &lt;script filename="Scripts\Demo.py" /&gt;
    &lt;script filename="Scripts\LightSensor.py" /&gt;
    &lt;script filename="Scripts\Camera.py" /&gt;
  &lt;/scripts&gt;
&lt;/pythonProxy&gt;</pre><p></p>
<p align="left">Le script “Demo.py” est créé à titre d’exemple. Vous pouvez le supprimer, renommer ou modifier à votre convenance.</p>
<p align="left">Grâce à Visual Studio et au SDK Constellation, vous bénéficiez d’un environnement de développement agréable pour créer vos packages Python avec la coloration syntaxique et l’IntelliSense :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/04/image-6.png"><img class="colorbox-1737"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="IntelliSense VisualStudio" src="https://developer.myconstellation.io/wp-content/uploads/2016/04/image_thumb-6.png" alt="IntelliSense VisualStudio" width="420" height="276" border="0" /></a></p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/04/image-7.png"><img class="colorbox-1737"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="IntelliSense VisualStudio" src="https://developer.myconstellation.io/wp-content/uploads/2016/04/image_thumb-7.png" alt="IntelliSense VisualStudio" width="420" height="61" border="0" /></a></p>
<h4 align="left">Les bases</h4>
<p align="left">Chaque script Python doit impérativement importer la librairie Constellation et démarrer la “connexion” avec le proxy Python en invoquant la méthode “Start” :</p>
<p></p><pre class="crayon-plain-tag">import Constellation
# Votre code !
Constellation.Start()</pre><p></p>
<p align="left">Vous avez trois façon de démarrer cette connexion :</p>
<p align="left">1 – La plus simple est d’invoquer la méthode “Start” :</p>
<p></p><pre class="crayon-plain-tag">Constellation.Start()</pre><p></p>
<p align="left">La méthode “Start” démarre la connexion et maintient le script en “vie” grâce à une boucle qui tourne tant que le package Constellation est lancé.</p>
<p align="left">Autrement dit le code après la méthode “Start” ne sera jamais appelé !</p>
<p align="left">2 – Invoquer la méthode “Start” en passant une fonction de démarrage :</p>
<p align="left">Vous pouvez passer le nom d’une fonction en paramètre de la méthode “Start” qui sera invoquée dès que le script Python est connecté à Constellation.</p>
<p align="left">Cela vous permet de définir du code au démarrage du package :</p>
<p></p><pre class="crayon-plain-tag">def OnStart():
    # Mon code de démarrage ici
    pass

Constellation.Start(OnStart);</pre><p></p>
<p align="left">3 – Troisième méthode : invoquer la méthode “StartAsync” (non bloquante)</p>
<p align="left">Mais attention vous devrez vous même créer une boucle pour maintenant votre script “en vie” autrement il s’arrêtera automatiquement !</p>
<p></p><pre class="crayon-plain-tag">Constellation.StartAsync()
while Constellation.IsRunning:
    pass
    time.sleep(1)</pre><p></p>
<h4 align="left">Interpréteurs Python et environnements virtuels</h4>
<p align="left">Par défaut chaque script est lancé avec la commande “python”. C’est pour cela qu’il est recommandé d’ajouter Python dans le PATH de votre système afin de pouvoir “résoudre” la commande “python”.</p>
<p>Vous pouvez aussi définir dans le fichier <em>App.config</em> de votre package Python, l’attribut “<em>pythonCmd</em>” pour spécifier la commande à lancer. Ci-dessous un exemple avec l’interpréteur Python 2.7 :</p>
<p></p><pre class="crayon-plain-tag">&lt;pythonProxy xmlns="urn:Constellation.PythonProxy" pythonCmd="C:\Python27\python.exe"&gt;
  &lt;scripts&gt;
    &lt;script filename="Scripts\Demo.py" /&gt;
    &lt;script filename="Scripts\Demo2.py" /&gt;
  &lt;/scripts&gt;
&lt;/pythonProxy&gt;</pre><p></p>
<p>L’attribut “<em>pythonCmd</em>” peut-être également défini de manière individuelle pour chaque script. Prenez par exemple la configuration suivante :</p>
<p></p><pre class="crayon-plain-tag">&lt;pythonProxy xmlns="urn:Constellation.PythonProxy" pythonCmd="python3"&gt;
  &lt;scripts&gt;
    &lt;script filename="Scripts\Demo.py" /&gt;
    &lt;script filename="Scripts\Demo2.py" pythonCmd="C:\Users\Sebastien\venv\Scripts\python.exe" /&gt;
    &lt;script filename="Scripts\Demo3.py" pythonCmd="C:\Python27\python.exe" /&gt;
  &lt;/scripts&gt;
&lt;/pythonProxy&gt;</pre><p></p>
<p>Ci-dessus le package Python démarre trois scripts Demo.py, Demo2.py et Demo3.py de la façon suivante :</p>
<ul>
<li>Demo.py sera lancé par l’interpréteur Python 3 (via la commande “python3” défini au niveau global)</li>
<li>Demo2.py sera lancé par un environnement virtuel ici nommé “venv” (défini pour le script)</li>
<li>Demo3.py sera lancé par l’interpréteur Python 2.7 installé dans “C:\Python27”</li>
</ul>
<p>Vous pouvez donc utiliser cet attribut pour spécifier l’interpréteur Python à utiliser (Python 2 vs 3 ou même des interpréteurs dans des environnements virtuels). Quelque soit l’interpréteur utilisé n’oubliez d’installer les librairies “pyzmq” (et “enum34” si Python 2.x).</p>
<p><span style="text-decoration: underline;">Note</span> : vous pouvez aussi les Settings Constellation dans l&rsquo;attribut « pythonCmd » vous permettant ainsi de définir/changer d&rsquo;interpréteur sans modifier le code de votre package, simplement en manipulant les settings de votre package depuis la Console Constellation. Plus d&rsquo;information <a href="/blog/support-python-3-et-environnements-virtuels/#La_configuration_du_Proxy_par_settings_Constellation">sur ce billet</a>.</p>
<h4 align="left">Produire des logs</h4>
<p align="left">Pour écrire des logs dans le hub Constellation, <a href="/client-api/net-package-api/les-bases-des-packages-net/#Ecrire_des_logs">tout comme en C#,</a> vous disposez des méthodes suivantes :</p>
<ul>
<li>
<div align="left">WriteInfo</div>
</li>
<li>
<div align="left">WriteWarn</div>
</li>
<li>
<div align="left">WriteError</div>
</li>
</ul>
<p align="left">Exemple :</p>
<p></p><pre class="crayon-plain-tag">Constellation.WriteInfo("Hello world from Python !")
Constellation.WriteWarn("This is a warning !")
Constellation.WriteError("This is an error !")</pre><p></p>
<p align="left">En Python vous pouvez formater vos messages avec des variables grâce à l’opérateur “%”.</p>
<p align="left">Par exemple, affichons dans les logs Constellation l’état de notre package :</p>
<p></p><pre class="crayon-plain-tag">Constellation.WriteInfo("Hi I'm '%s' and I run on %s" % (Constellation.PackageName, Constellation.SentinelName))
Constellation.WriteInfo("IsConnected = %s | IsStandAlone = %s " % (Constellation.IsConnected, Constellation.IsStandAlone))</pre><p></p>
<p align="left">Vous remarquez par la même occasion <a href="/client-api/net-package-api/les-bases-des-packages-net/#Proprietes_du_PackageHost">quelques propriétés</a> accessibles dans vos scripts Python (<em>IsConnected</em>, <em>IsStandAlone</em>, <em>SentinelName</em>, <em>PackageName</em>, etc…).</p>
<h4 align="left">Accès aux settings</h4>
<p align="left">Le fonctionnement des settings est strictement identique à l’API .NET <a href="/client-api/net-package-api/settings/">décrite ici</a>.</p>
<p align="left">Les settings sont définis sur le serveur au niveau du package ou via des groupes, et par héritage peuvent être définis dans le fichier local App.config et/ou dans le manifeste. Je vous invite vivement <a href="/client-api/net-package-api/settings/">à lire cet article</a> pour bien comprendre le fonctionnement des settings.</p>
<p align="left">Avec l’API Python de Constellation vous disposez de la méthode “GetSetting” pour récupérer la valeur de vos settings.</p>
<p align="left">Par exemple pour afficher la valeur du setting “Demo1” :</p>
<p></p><pre class="crayon-plain-tag">Constellation.WriteInfo("Demo1 = " + str(Constellation.GetSetting("Demo1")))</pre><p></p>
<p align="left">Si la valeur du setting n’existe pas, la méthode vous retourne un “Null” :</p>
<p></p><pre class="crayon-plain-tag">if Constellation.GetSetting("Demo1") &lt;&gt; Null:
     Constellation.WriteInfo("Demo1 = " + str(Constellation.GetSetting("Demo1")))</pre><p></p>
<p align="left">Vous avez également la possibilité d’attacher une méthode callback pour être notifier dans votre code Python lorsque les settings de votre packages sont mises à jour dans Constellation :</p>
<p></p><pre class="crayon-plain-tag">import Constellation

def OnSettingsUpdated():
    print("Mise à jour de mes settings depuis Constellation !!")

def Start():
    Constellation.OnSettingsUpdated = OnSettingsUpdated

Constellation.Start(Start);</pre><p></p>
<h4 align="left">Publier des StateObjects</h4>
<p align="left"><a href="/client-api/net-package-api/stateobjects/">Comme pour l’API .NET</a>, vous disposez de la méthode PushStateObject pour publier un StateObject.</p>
<p align="left">Chaque StateObject a obligatoirement un nom et une valeur de n’importe quel type :</p>
<p></p><pre class="crayon-plain-tag">Constellation.PushStateObject("MyString", "OK")
Constellation.PushStateObject("MyNumber", 123)
Constellation.PushStateObject("MyDecimal", 123.12)
Constellation.PushStateObject("MyBoolean", True)</pre><p></p>
<p align="left">Vous pouvez publier des StateObjects dont la valeur est un objet complexe :</p>
<p></p><pre class="crayon-plain-tag">Constellation.PushStateObject("Demo", { "UneString": "DemoPython", "UnNombre": 123 })</pre><p></p>
<p align="left">Dans l&rsquo;exemple ce-dessus, le StateObject « Demo » est un objet contenant deux propriétés : « UneString » et « UnNombre ».</p>
<p align="left">Lorsqu&rsquo;il s&rsquo;agit de type complexe, il est vivement conseiller de décrire le type du StateObject à Constellation.</p>
<p align="left">Pour cela au démarrage de votre package (méthode Start), enregistrez vos différents types de StateObjects avec la méthode « DescribeStateObjectType ».</p>
<p align="left">Par exemple :</p>
<p></p><pre class="crayon-plain-tag">Constellation.DescribeStateObjectType("MyStateObject", "StateObject à deux propriétés de démonstration", [
    { 'Name':'UneString', 'Type':'string', 'Description': 'Une chaine de caractère tout simplement' },        
    { 'Name':'UnNombre', 'Type':'int', 'Description': 'Un nombre entier' }
])</pre><p></p>
<p>Pour chaque type on spécifiera un nom, une description du type et la liste ses propriétés. Sachant que pour chaque propriété nous avons un nom, un type et une description.</p>
<p>Le type d&rsquo;une propriété peut faire elle-même référence à un autre type complexe que vous avez enregistré.</p>
<p>Pour finir il faudra déclarer le package descriptor après avoir décrit tous vos types :</p>
<p></p><pre class="crayon-plain-tag">Constellation.DeclarePackageDescriptor()</pre><p></p>
<p align="left">Enfin, pour chaque publication de StateObject, vous pouvez spécifier le type (simple ou complexe que vous aurez enregistré ci-dessus), un dictionnaire de méta-données ou encore une durée de vie (en seconde)  :</p>
<p></p><pre class="crayon-plain-tag">Constellation.PushStateObject("Demo", { "UneString": "DemoPython", "UnNombre": 123 }, type = "MyStateObject", metadatas = { "DeviceId": "RPi", "SerialNumber":"123" }, lifetime = 300)</pre><p></p>
<h4 align="left">Tester son package dans Visual Studio</h4>
<p align="left">Laissons le code de démo du script “Demo.py” créé par le Template du projet tel quel :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/04/image-8.png"><img class="colorbox-1737"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Demo Python" src="https://developer.myconstellation.io/wp-content/uploads/2016/04/image_thumb-8.png" alt="Demo Python" width="420" height="130" border="0" /></a></p>
<p align="left">Notons simplement qu’au démarrage du package on enregistre la méthode “OnStart” pour :</p>
<ul>
<li>
<div align="left">Produire différents logs via des “WriteInfo” (Warning &amp; Error) contenant notamment différentes propriétés comme le <em>IsConnected</em> &amp; <em>IsStandalone</em>.</div>
</li>
<li>
<div align="left">Publier le StateObject “Demo”</div>
</li>
</ul>
<h5 align="left">Debug local (hors Constellation)</h5>
<p align="left">Commençons par tester notre package hors Constellation en lançant simplement le package avec le bouton “Start” de Visual Studio (F5) :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/04/image-9.png"><img class="colorbox-1737"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Debug local" src="https://developer.myconstellation.io/wp-content/uploads/2016/04/image_thumb-9.png" alt="Debug local" width="424" height="55" border="0" /></a></p>
<p align="left">Votre package démarre et vous pouvez suivre dans la console les différents logs produits par votre package.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/04/image-10.png"><img class="colorbox-1737"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/04/image_thumb-10.png" alt="image" width="420" height="138" border="0" /></a></p>
<p align="left">Vous observerez que votre package n’est pas connecté à Constellation (<em>IsConnected = false</em>).</p>
<h5 align="left">Debug dans Constellation</h5>
<p align="left">Maintenant lançons toujours le debugging de votre package Constellation depuis Visual Studio mais en connectant votre package à Constellation. (Assurez-vous d’avoir défini dans Visual Studio la Constellation à utiliser pour le debug comme nous l’avons vu dans <a href="/getting-started/creez-votre-premier-package-constellation-en-csharp/#Tester_son_package_dans_sa_Constellation">ce guide</a>).</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/04/image-11.png"><img class="colorbox-1737"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Debug On Constellation" src="https://developer.myconstellation.io/wp-content/uploads/2016/04/image_thumb-11.png" alt="Debug On Constellation" width="424" height="55" border="0" /></a></p>
<p align="left">Cette fois ci, votre package démarre dans Visual Studio mais en étant connecté à Constellation (<em>IsConnected = true</em>).</p>
<p align="left">Vous pouvez donc suivre en temps réel les logs depuis la Console Constellation :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/04/image-12.png"><img class="colorbox-1737"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Debug On Constellation" src="https://developer.myconstellation.io/wp-content/uploads/2016/04/image_thumb-12.png" alt="Debug On Constellation" width="424" height="226" border="0" /></a></p>
<p align="left">Vous retrouverez également dans le StateObject Explorer de la Console, le StateObject “Demo” publié par notre package :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/04/image-13.png"><img class="colorbox-1737"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="StateObject Demo" src="https://developer.myconstellation.io/wp-content/uploads/2016/04/image_thumb-13.png" alt="StateObject Demo" width="424" height="302" border="0" /></a></p>
<h4 align="left">Publiez votre package</h4>
<p align="left">Lorsque votre package est testé et validé, nous pouvons le publier dans Constellation.</p>
<p align="left">Pour cela cliquez sur le bouton de publication :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/04/image-14.png"><img class="colorbox-1737"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Publication du package" src="https://developer.myconstellation.io/wp-content/uploads/2016/04/image_thumb-14.png" alt="Publication du package" width="424" height="55" border="0" /></a></p>
<p align="left">Sélectionnez votre serveur Constellation cible et cliquez sur “Publish” :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/04/image-15.png"><img class="colorbox-1737"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/04/image_thumb-15.png" alt="image" width="424" height="212" border="0" /></a></p>
<p align="left">Une fois publié, vous retrouverez votre package dans le “Package Repository” de la Console.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/04/image-16.png"><img class="colorbox-1737"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Package Repository" src="https://developer.myconstellation.io/wp-content/uploads/2016/04/image_thumb-16.png" alt="Package Repository" width="424" height="158" border="0" /></a></p>
<p align="left">N’oubliez pas que vous pouvez personnaliser les différentes informations (nom du package, auteur, URL, version, description, etc…) en <a href="/concepts/package-manifest/">éditant le manifeste</a> de votre package.</p>
<h4 align="left">Déployez votre package sur une sentinelle</h4>
<p align="left">Maintenant que votre package est dans le catalogue de votre Constellation, vous pouvez le déployer sur autant de sentinelle que vous le souhaitez!</p>
<h5 align="left">Par l&rsquo;édition du fichier de configuration</h5>
<p align="left">Pour cela, vous pouvez éditer manuellement la configuration (via le <em><a href="/constellation-platform/constellation-console/configuration-editor/">Configuration Editor</a></em>) pour ajouter une instance de package sur la sentinelle de votre choix par la ligne :</p>
<p></p><pre class="crayon-plain-tag">&lt;package name="MonPackagePython" /&gt;</pre><p></p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/04/image-17.png"><img class="colorbox-1737"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Deploiement du package" src="https://developer.myconstellation.io/wp-content/uploads/2016/04/image_thumb-17.png" alt="Deploiement du package" width="424" height="195" border="0" /></a></p>
<p align="left">On peut également déclarer le setting “Demo1” pour cette instance de package :</p>
<p></p><pre class="crayon-plain-tag">&lt;package name="MonPackagePython"&gt;
  &lt;settings&gt;
    &lt;setting key="Demo1" value="Hello Python !!!!" /&gt;
  &lt;/settings&gt;
&lt;/package&gt;</pre><p></p>
<p align="left">Cliquez sur le bouton “Save &amp; Deploy” et votre package sera automatiquement démarré sur la sentinelle ici nommée “PO-SWARIN” !</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/04/image-18.png"><img class="colorbox-1737"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Package déployé" src="https://developer.myconstellation.io/wp-content/uploads/2016/04/image_thumb-18.png" alt="Package déployé" width="424" height="182" border="0" /></a></p>
<h5 align="left">Par l&rsquo;interface graphique de la Console Constellation</h5>
<p align="left">Autre moyen, plus intuitif et rapide pour déployer un package, cliquez sur le bouton “Deploy” dans menu contextuel de votre package Python :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-6.png"><img class="colorbox-1737"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Déploiement d'un package" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-6.png" alt="Déploiement d'un package" width="428" height="149" border="0" /></a></p>
<p align="left">Vous pouvez également cliquer sur le bouton “<a href="/constellation-platform/constellation-console/gerer-packages-avec-la-console-constellation/#Deployer_un_package">Deploy new package</a>” sur la page “Packages”.</p>
<p align="left">Un assistant vous proposera de sélectionner la sentinelle sur laquelle déployer votre package Python :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-7.png"><img class="colorbox-1737"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Déploiement d'un package" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-7.png" alt="Déploiement d'un package" width="428" height="158" border="0" /></a></p>
<p align="left">Si les settings de votre package sont déclarés dans le manifeste (<a href="/concepts/package-manifest/#Informations_sur_les_Settings_du_package">voir ici</a>), la Console vous affichera une fenêtre de paramétrage :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-8.png"><img class="colorbox-1737"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Configuration des settings" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-8.png" alt="Configuration des settings" width="428" height="246" border="0" /></a></p>
<p align="left">Une fois votre package déployé, vous pourrez suivre dans la Console Log votre package :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-9.png"><img class="colorbox-1737"  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" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-9.png" alt="Démarrage du package" width="428" height="163" border="0" /></a></p>
<p align="left">Et voilà votre premier package Python créé et déployé dans votre Constellation !</p>
<h4 align="left">Next steps</h4>
<ul>
<li>
<div align="left"><a href="/client-api/python-api/messagecallbacks-exposer-des-methodes-python/">MessageCallback : exposer des méthodes Python dans la Constellation</a></div>
</li>
<li>
<div align="left"><a href="/client-api/python-api/envoyer-des-messages-et-invoquer-des-messagecallbacks-en-python/">Envoyer des messages et invoquer des MessageCallbacks de la Constellation</a></div>
</li>
<li>
<div align="left"><a href="/client-api/python-api/consommer-des-stateobjects-en-python/">StateObjectLink : consommer des StateObjects de votre Constellation</a></div>
</li>
</ul>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/getting-started/creez-votre-premier-package-constellation-en-python/">Cr&eacute;ez votre premier package Constellation en Python</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://developer.myconstellation.io/getting-started/creez-votre-premier-package-constellation-en-python/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Gérer les sentinelles avec la Console Constellation</title>
		<link>https://developer.myconstellation.io/constellation-platform/constellation-console/gerer-sentinelles-avec-la-console-constellation/</link>
					<comments>https://developer.myconstellation.io/constellation-platform/constellation-console/gerer-sentinelles-avec-la-console-constellation/#respond</comments>
		
		<dc:creator><![CDATA[Sebastien Warin]]></dc:creator>
		<pubDate>Fri, 19 Aug 2016 15:05:41 +0000</pubDate>
				<category><![CDATA[Constellation Sentinel]]></category>
		<category><![CDATA[Constellation Console]]></category>
		<category><![CDATA[Console]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[Virtuel]]></category>
		<category><![CDATA[Sentinel]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Windows]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=2380</guid>

					<description><![CDATA[<p>Gérer les sentinelles Dans le menu principal de gauche, cliquez sur “Sentinels” : Vous retrouverez sur cette page l’ensemble des sentinelles de votre Constellation. Le statut peut être : Unknow : une sentinelle qui ne sait jamais connectée ou une</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/constellation-platform/constellation-console/gerer-sentinelles-avec-la-console-constellation/">Gérer les sentinelles avec la Console Constellation</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Gérer les sentinelles</h3>
<p align="left">Dans le menu principal de gauche, cliquez sur “Sentinels” :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/08/image-32.png"><img class="colorbox-2380"  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/2016/08/image_thumb-21.png" alt="image" width="350" height="179" border="0" /></a></p>
<p align="left">Vous retrouverez sur cette page l’ensemble des sentinelles de votre Constellation.</p>
<p align="left">Le statut peut être :</p>
<ul>
<li>
<div align="left"><u>Unknow</u> : une sentinelle qui ne sait jamais connectée ou une sentinelle virtuelle</div>
</li>
<li>
<div align="left"><u>Disconnected</u> : une sentinelle qui est déconnectée après avoir été connecté</div>
</li>
<li>
<div align="left"><u>Connected</u> : la sentinelle est connectée</div>
</li>
</ul>
<p align="left">Dans le cadre d’une sentinelle réelle (connectée ou déconnectée) vous obtiendrez également la version de la sentinelle, du système d&rsquo;exploitation et autres informations sur le moteur d&rsquo;execution .NET.</p>
<p align="left">Le bouton “Détails” permet d’afficher l’ensemble des informations d’une sentinelle :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/08/image-33.png"><img class="colorbox-2380"  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/2016/08/image_thumb-22.png" alt="image" width="350" height="279" border="0" /></a></p>
<p align="left">Il s’agit d’un menu contextuel qui vous permettra également d’éditer les informations de connexion de la sentinelle, de la supprimer ou encore de voir ou ajouter des packages sur cette sentinelle :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/08/image-34.png"><img class="colorbox-2380"  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/2016/08/image_thumb-23.png" alt="image" width="202" height="240" border="0" /></a></p>
<h3>Ajouter une sentinelle</h3>
<p>Pour déclarer une sentinelle réelle ou <a href="/concepts/sentinels-packages-virtuels/">virtuelle</a>, cliquez sur le bouton “Add sentinel” :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/08/image-35.png"><img class="colorbox-2380"  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/2016/08/image_thumb-24.png" alt="image" width="350" height="182" border="0" /></a></p>
<p align="left">Dans la fenêtre d’ajout saisissez le nom de votre sentinelle ainsi que le credential à utiliser pour la connexion :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/08/image-36.png"><img class="colorbox-2380"  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/2016/08/image_thumb-25.png" alt="image" width="350" height="144" border="0" /></a></p>
<p align="left">Pour ajouter et gérer vos credentials, rendez-vous sur la page “<a href="/constellation-platform/constellation-console/gerer-credentials-avec-la-console-constellation/">Server Management &gt; Credentials</a>”.</p>
<p align="left"><u>Note</u> : dans le cas d’une sentinelle Service, le nom par défaut est le nom de la machine (hostname Linux ou Windows) et dans le cas d’une sentinelle UI (pour Windows seulement), il s’agit du nom de la machine suivi du suffixe “_UI”. Notez toutefois que vous pouvez <a href="/constellation-platform/constellation-sentinel/custom-sentinel/">modifier le nom de la sentinelle dans la configuration de celle-ci</a>. De plus les installeurs Windows et Linux des sentinelles utilisent l’API de Management pour enregistrer automatiquement la sentinelle au serveur, vous n’avez donc pas à l’ajouter manuellement. Cet écran servira surtout pour l’ajout de <a href="/concepts/sentinels-packages-virtuels/">sentinelle virtuelle</a>.</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/constellation-platform/constellation-console/gerer-sentinelles-avec-la-console-constellation/">Gérer les sentinelles avec la Console Constellation</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-console/gerer-sentinelles-avec-la-console-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 01:54:08 by W3 Total Cache
-->