﻿<?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 WindowsControl - Constellation</title>
	<atom:link href="https://developer.myconstellation.io/tag/windowscontrol/feed/" rel="self" type="application/rss+xml" />
	<link>https://developer.myconstellation.io/tag/windowscontrol/</link>
	<description>Votre plateforme d&#039;interconnexion</description>
	<lastBuildDate>Thu, 13 Jun 2019 14:30:12 +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 WindowsControl - Constellation</title>
	<link>https://developer.myconstellation.io/tag/windowscontrol/</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[tutoriel]]></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>
		<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[Lux]]></category>
		<category><![CDATA[LightSensor]]></category>
		<category><![CDATA[.NET]]></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>
		<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[Arduino]]></category>
		<category><![CDATA[ESP8266]]></category>
		<category><![CDATA[WindowsControl]]></category>
		<category><![CDATA[Rotary Encoder]]></category>
		<category><![CDATA[Windows]]></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>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Mise en cache de page à l’aide de Disk: Enhanced 

Served from: developer.myconstellation.io @ 2026-01-23 02:03:29 by W3 Total Cache
-->