﻿<?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 Domotique - Constellation</title>
	<atom:link href="https://developer.myconstellation.io/tag/domotique/feed/" rel="self" type="application/rss+xml" />
	<link>https://developer.myconstellation.io/tag/domotique/</link>
	<description>Votre plateforme d&#039;interconnexion</description>
	<lastBuildDate>Thu, 13 Jun 2019 14:32:56 +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 Domotique - Constellation</title>
	<link>https://developer.myconstellation.io/tag/domotique/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Créer une prise connectée avec un ESP8266</title>
		<link>https://developer.myconstellation.io/tutorials/creer-une-prise-connectee-avec-un-esp8266/</link>
					<comments>https://developer.myconstellation.io/tutorials/creer-une-prise-connectee-avec-un-esp8266/#respond</comments>
		
		<dc:creator><![CDATA[Lucas]]></dc:creator>
		<pubDate>Tue, 31 Oct 2017 11:29:46 +0000</pubDate>
				<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[Relais]]></category>
		<category><![CDATA[XBMC]]></category>
		<category><![CDATA[Kodi]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[MessageCallback]]></category>
		<category><![CDATA[Switch]]></category>
		<category><![CDATA[StateObjectLink]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[ESP8266]]></category>
		<category><![CDATA[ESP]]></category>
		<category><![CDATA[Domotique]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=5668</guid>

					<description><![CDATA[<p>Par Lucas Dupuis La prise connectée est un élément phare de la domotique de la maison. Il permet d&#8217;allumer ou d&#8217;éteindre un équipement branché dessus ou encore de connaitre sa consommation en énergie. Dans mon cas, j&#8217;avais besoin d&#8217;allumer ou</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/tutorials/creer-une-prise-connectee-avec-un-esp8266/">Créer une prise connectée avec un ESP8266</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><em>Par Lucas Dupuis</em></p>
<p>La prise connectée est un élément phare de la domotique de la maison. Il permet d&rsquo;allumer ou d&rsquo;éteindre un équipement branché dessus ou encore de connaitre sa consommation en énergie. Dans mon cas, j&rsquo;avais besoin d&rsquo;allumer ou d&rsquo;éteindre les enceintes de mon média center automatiquement lorsque ce dernier était démarré.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/10/2016-08-08-16.32.30.jpg"><img class="colorbox-5668"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Prise connectée" src="https://developer.myconstellation.io/wp-content/uploads/2017/10/2016-08-08-16.32.30_thumb.jpg" alt="Prise connectée" width="404" height="304" border="0" /></a></p>
<p align="left">Découvrons ensemble comment créer sa prise connectée avec un ESP8266.</p>
<p><span id="more-5668"></span></p>
<h2>Prérequis</h2>
<p>Pour ce tutoriel, il vous faut :</p>
<ul>
<li>Un bloc prise avec un interrupteur</li>
<li>Un transformateur AC/DC 5v</li>
<li>Un ESP-01 (ESP8266)</li>
<li>Un régulateur de tension 3.3v</li>
<li>Un relais 220V pilotable en 5v</li>
<li>Un transistor, des résistances, des leds, une diode, des condensateurs</li>
<li>Du fil électrique</li>
<li>Un pistolet à colle et une drémel</li>
<li>Un serveur Constellation</li>
</ul>
<h2>Etape 1 : Construire la prise</h2>
<p>Dans un premier temps, il nous faut un boitier abordable que nous pourrons ouvrir pour insérer notre ESP à l&rsquo;intérieur. Après quelques recherches, j&rsquo;ai opté pour le <a href="http://www.conrad.fr/ce/fr/product/778994/Prise-intermdiaire-commutable-Renkforce-778994-1-ple-argent">boitier Renkforce disponible chez Conrad</a> pour 3€ environ.</p>
<p>On commence donc par l’ouvrir pour la vider littéralement :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/10/2016-11-10-22.38.32.jpg"><img class="colorbox-5668"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Prise Renkforce" src="https://developer.myconstellation.io/wp-content/uploads/2017/10/2016-11-10-22.38.20_thumb.jpg" alt="Prise Renkforce" width="204" height="271" border="0" /><img class="colorbox-5668"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Prise Renkforce" src="https://developer.myconstellation.io/wp-content/uploads/2017/10/2016-11-10-22.38.32_thumb.jpg" alt="Prise Renkforce" width="204" height="271" border="0" /></a></p>
<p align="center"><img class="colorbox-5668"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Démontage" src="https://developer.myconstellation.io/wp-content/uploads/2017/10/2016-11-10-22.41.28_thumb.jpg" alt="Démontage" width="244" height="184" border="0" /><a href="https://developer.myconstellation.io/wp-content/uploads/2017/10/2016-11-10-22.41.28.jpg"><img class="colorbox-5668"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Prise démontée" src="https://developer.myconstellation.io/wp-content/uploads/2017/10/2016-11-10-22.44.15_thumb.jpg" alt="Prise démontée" width="244" height="184" border="0" /></a></p>
<p>Puis tous les supports plastique à l&rsquo;intérieur doivent être cassés pour libérer un maximum de place. Je les ai cassés avec une pince coupante et j&rsquo;ai fini de retirer le maximum de plastique avec un dremel. Sur cette photo j&rsquo;avais retiré une partie du fond de la prise pour un autre projet.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/10/2016-12-18-11.25.15.jpg"><img class="colorbox-5668"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Usinage" src="https://developer.myconstellation.io/wp-content/uploads/2017/10/2016-12-18-11.25.15_thumb.jpg" alt="Usinage" width="354" height="266" border="0" /></a></p>
<p>Il faut ensuite préparer un câblage avec le relais pour qu&rsquo;il s&rsquo;intercale entre l&rsquo;arrivée de la phase (mur) et la phase distribuée à l&rsquo;élément branché sur la prise. Mais il faut également garder en tête que l&rsquo;alimentation de l&rsquo;ESP doit être permanente :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/10/2016-08-10-22.52.19.jpg"><img class="colorbox-5668"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Schéma" src="https://developer.myconstellation.io/wp-content/uploads/2017/10/2016-08-10-22.52.19_thumb.jpg" alt="Schéma" width="354" height="266" border="0" /></a></p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/10/Schma-relais.png"><img class="colorbox-5668"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Schéma" src="https://developer.myconstellation.io/wp-content/uploads/2017/10/Schma-relais_thumb.png" alt="Schéma" width="350" height="321" border="0" /></a></p>
<p>Mon principal problème dans ce tutoriel a été de tout faire rentrer dans la prise. En effet, l&rsquo;alimentation + le relais prennent beaucoup de place et tout est rentré au chausse-pied, avec le câblage noyé dans la colle chaude afin d&rsquo;assurer l&rsquo;isolation.</p>
<p>Le transformateur alimente donc en 5v un régulateur de tension LM1117 3.3V avec deux condensateurs pour lisser du 3.3v pour l&rsquo;ESP01.</p>
<p>Il alimente également directement la bobine du relais dont le circuit est interrompu par un transistor NPN BC547 dont la base sera pilotée en saturation par un GPIO de l&rsquo;ESP.</p>
<p>L&rsquo;ESP pilote deux leds de statut : une rouge et une verte et possède également son dernier GPIO en input pour un bouton physique placé sur le dessus du boitier. Si vous avez suivi jusque-là et que vous connaissez l&rsquo;ESP01, vous aurez compris qu&rsquo;il est impossible de le programmer directement dans la prise, deux des 4 GPIO devant normalement être utilisés pour la communication série.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/10/2016-08-07-16.00.46.jpg"><img class="colorbox-5668"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="2016-08-07 16.00.46" src="https://developer.myconstellation.io/wp-content/uploads/2017/10/2016-08-07-16.00.46_thumb.jpg" alt="2016-08-07 16.00.46" width="454" height="342" border="0" /></a></p>
<p>Pour combler le « trou » du bouton physique original, j&rsquo;ai choisi de coller par l&rsquo;intérieur du boitier un petit bout de plexiglas translucide. Je l&rsquo;ai ensuite percé pour faire passer les deux leds rouge et verte.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/10/2016-12-18-18.27.32.jpg"><img class="colorbox-5668"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="2016-12-18 18.27.32" src="https://developer.myconstellation.io/wp-content/uploads/2017/10/2016-12-18-18.27.32_thumb.jpg" alt="2016-12-18 18.27.32" width="244" height="184" border="0" /></a><a href="https://developer.myconstellation.io/wp-content/uploads/2017/10/2016-08-22-23.08.43.jpg"><img class="colorbox-5668"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="2016-08-22 23.08.43" src="https://developer.myconstellation.io/wp-content/uploads/2017/10/2016-08-22-23.08.43_thumb.jpg" alt="2016-08-22 23.08.43" width="244" height="184" border="0" /></a></p>
<p align="left">Et voilà, on obtient une prise connectée par Wifi avec un ESP8266 avec un bouton poussoir et deux LEDs, reste plus qu’à le programmer !</p>
<h2>Etape 2 : la programmation</h2>
<p>La fonction de base de la prise est assez simple : couper le courant ou le laisser passer. Dans un premier temps, j&rsquo;ai uploadé un sketch de base Constellation avec Arduino sur l&rsquo;ESP01 à l&rsquo;extérieur de la prise. Je l&rsquo;ai ensuite branché dans la prise que j&rsquo;ai enfiché dans le mur. Bazinga, le régulateur 3.3v fait son job, l&rsquo;ESP boote, se connecte à mon réseau wifi et envoie un « hello world » dans la console Constellation. Pour découvrir comment connecter un ESP8266 à Constellation, <a href="https://developer.myconstellation.io/getting-started/connecter-un-arduino-ou-un-esp8266-constellation/">suivez ce guide</a>.</p>
<p>Ensuite, j&rsquo;ai utilisé la librairie Constellation <a href="https://developer.myconstellation.io/client-api/arduino-esp-api/recevoir-des-messages-et-exposer-des-methodes-messagecallback-sur-arduino-esp/">pour ajouter un MessageCallback</a> pour activer ou désactiver le GPIO de la prise, <a href="https://developer.myconstellation.io/client-api/arduino-esp-api/produire-des-stateobjects-depuis-arduino-esp/">couplé à un StateObject</a> pour maintenir l’état de la prise dans Constellation :</p>
<p></p><pre class="crayon-plain-tag">constellation.registerMessageCallback("Switch", MessageCallbackDescriptor().setDescription("Switch le statut du relais."),
  [](JsonObject &amp; json) {
    statutRelais = !statutRelais;
    digitalWrite(gpioRelais, statutRelais);
    constellation.pushStateObject("Status", stringFormat("{ 'IsActivated':%s }", statutRelais ? "true" : "false" ));
  });</pre><p></p>
<p align="left">Ainsi Constellation a toujours connaissance de l’état de la prise via le StateObject nommé “Status” :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/10/StateObject.png"><img class="colorbox-5668"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="StateObject de l'état de la prise" src="https://developer.myconstellation.io/wp-content/uploads/2017/10/StateObject_thumb.png" alt="StateObject de l'état de la prise" width="354" height="259" border="0" /></a></p>
<p align="left">Et tout le monde peut maintenant découvrir et utiliser le MessageCallback “Switch” exposé par notre ESP pour permuter l’état de notre prise :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/10/MessageCallback2-002.png"><img class="colorbox-5668"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="MessageCallback" src="https://developer.myconstellation.io/wp-content/uploads/2017/10/MessageCallback2-002_thumb.png" alt="MessageCallback" width="354" height="115" border="0" /></a></p>
<p align="left">Bingo, on a donc une prise 220V connectée à Constellation qu’on pourra piloter depuis une page Web, un programme Python ou autre.</p>
<p align="left">Pour vous donnez quelques idées, n’hésitez pas à relire ce tutoriel : <a href="https://developer.myconstellation.io/tutorials/creer-un-relais-connecte/">Créer un relais connecté</a>.</p>
<h2 align="left">Etape 3 : Lier sa prise connectée à l’état de son média-center</h2>
<p align="left">Dans ma Constellation, je dispose d&rsquo;un package « brain » développé en C# avec Visual Studio qui contient l’ensemble des règles de la maison (gestion du chauffages, lumières, volets, etc..).</p>
<p align="left">Je l’ai enrichi pour faire en sorte que si Kodi est en train de lire un média (audio ou vidéo) et que la prise n’est pas allumée, alors il invoque le MessageCallback pour allumer la prise. Et inversement pour l&rsquo;éteindre !</p>
<p align="left">J’ai donc dans une classe C#, ajouté <a href="https://developer.myconstellation.io/client-api/net-package-api/consommer-des-stateobjects/#Les_StateObjectLink">deux StateObjectLinks</a>, c’est à dire que j’ai deux propriétés de mon code C# qui sont liées à mes StateObjets représentant l’état de mon media-center de l’état de ma prise !</p>
<p align="left">Il me reste plus qu’à ajouter un handler sur le changement d’état du State Object de Kodi, afin d’ajouter deux conditions “if” :</p>
<ul>
<li>
<div align="left">Si la prise est éteinte alors que Kodi joue quelque chose (PlayerState différent de null) alors on allume la prise</div>
</li>
<li>
<div align="left">Si la prise est allumée alors que Kodi joue rien (PlayerState null) alors on éteint la prise</div>
</li>
</ul>
<p align="left">Pour allumer ou éteindre la prise, il suffit d’invoquer le MessageCallback “Switch” exposé par notre code Arduino <a href="https://developer.myconstellation.io/client-api/net-package-api/envoyer-des-messages-invoquer-des-messagecallbacks/">en créant un proxy vers notre package.</a></p>
<p></p><pre class="crayon-plain-tag">public class KodiDemo
{
    /// &lt;summary&gt;
    /// StateObject XBMC. Permet de connaitre les infos de lecture.
    /// &lt;/summary&gt;
    [StateObjectLink(Package = "Xbmc", Name = "Kodi Salon NUC")]
    public StateObjectNotifier KodiNotifier { get; set; }

    /// &lt;summary&gt;
    /// StateObject de l'ESP controlant le relais d'activation. Permet de synchroniser les infos de lecture avec la valeur du relais.
    /// &lt;/summary&gt;
    [StateObjectLink(Sentinel = "ESP8266-01-001", Package = "ESP_Relay_Button", Name = "Status")]
    public StateObjectNotifier PriseKodi { get; set; }

    public void Start()
    {
        this.KodiNotifier.ValueChanged += (s, e) =&gt;
        {
            if (this.PriseKodi.DynamicValue.Status == false
                &amp;&amp; e.IsNew == false
                &amp;&amp; e.OldState.DynamicValue.PlayerState == null
                &amp;&amp; e.NewState.DynamicValue.PlayerState != null)
            {
                // démarrage.
                PackageHost.WriteInfo("Activation de la prise.");
                PackageHost.CreateMessageProxy("ESP8266_01_002/ESP_Relay_Button").Switch();
            }

            if (this.PriseKodi.DynamicValue.Status == true
                &amp;&amp; e.IsNew == false
                &amp;&amp; e.OldState.DynamicValue.PlayerState != null
                &amp;&amp; e.NewState.DynamicValue.PlayerState == null)
            {
                PackageHost.WriteInfo($"Arret de la prise.");
                PackageHost.CreateMessageProxy("ESP8266_01_002/ESP_Relay_Button").Switch();
            }
        };
    }
}</pre><p></p>
<p>Et voilà comment en quelques lignes de C# et grâce à Constellation, mes enceintes seront automatiquement allumées ou éteintes selon que mon media-center diffuse ou non un média vidéo ou audio !</p>
<h2>Pour aller plus loin</h2>
<p>Pour aller plus loin, j&rsquo;ai ajouté quelques fonctionnalités intéressantes :</p>
<ul>
<li>J&rsquo;ai pluggé le bouton poussoir ajouté sur le dessus de la prise pour qu&rsquo;il change l&rsquo;état du relais et mette à jour le state objet en conséquence.</li>
<li>J&rsquo;ai ajouté la possibilité d&rsquo;associer les leds de façade au fonctionnement de la prise en m&rsquo;inspirant de ce qui existe sur les prises connectées du marché. La led rouge indique le statut de fonctionnement (power on / connexion au wifi en clignotant), la led verte indique l&rsquo;état du relais.</li>
<li>J&rsquo;ai ajouté également un mode « blind », je trouve que c&rsquo;est une fonctionnalité intéressante mais qui est absente des prises sur le marché : Quand il fait noir dans une pièce et que la prise se reconnecte au wifi, cela peut être gênant de la voir clignoter. Un package de « brain » peut alors gérer les leds directement en <a href="https://developer.myconstellation.io/showcases/connecter-volets-constellation-arduino-raspberry/">fonction de mes volets</a> <img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></li>
<li>Ensuite, en cas de déconnection du wifi ou de coupure de courant, j&rsquo;ai prévu un bout de code permettant, au démarrage de l&rsquo;ESP, de requêter son propre StateObject. Cela permet à la prise de revenir à l&rsquo;état dans lequel elle était avant la coupure.</li>
<li>J&rsquo;ai également fait intervenir <a href="https://developer.myconstellation.io/tutorials/connecter-un-video-projecteur-dans-constellation/">l&rsquo;activation de mon projecteur</a>. Ce dernier push un StateObject. Si le média center est éteint, il envoie un paquet WOL via <a href="https://developer.myconstellation.io/package-library/networktools/">le package networktools</a> pour l&rsquo;allumer et envoie une notification de fermeture des volets du salon. Le démarrage de la lecture du média sur kodi pilote la prise d&rsquo;allumage des enceintes sans action manuelle. Ainsi, le démarrage du projecteur et la lecture sur kodi lancent l&rsquo;ambiance parfaite pour profiter de mes séries en un seul geste.</li>
</ul>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/tutorials/creer-une-prise-connectee-avec-un-esp8266/">Créer une prise connectée avec un ESP8266</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://developer.myconstellation.io/tutorials/creer-une-prise-connectee-avec-un-esp8266/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>S-Fit : Concevez un miroir connecté orienté fitness</title>
		<link>https://developer.myconstellation.io/showcases/s-fit-concevez-un-miroir-connecte-oriente-fitness/</link>
					<comments>https://developer.myconstellation.io/showcases/s-fit-concevez-un-miroir-connecte-oriente-fitness/#comments</comments>
		
		<dc:creator><![CDATA[Sebastien Warin]]></dc:creator>
		<pubDate>Wed, 27 Sep 2017 10:05:42 +0000</pubDate>
				<category><![CDATA[Showcases]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[StateObject]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Miroir]]></category>
		<category><![CDATA[Constellation]]></category>
		<category><![CDATA[AngularJS]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[Consumer]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[ForecastIO]]></category>
		<category><![CDATA[Domotique]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=5474</guid>

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

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

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

    constellation.connect();

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

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

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

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

					<description><![CDATA[<p>Le package Jeedom vous permet de contrôler vos équipements et vos scénarios Jeedom. Cette documentation a été réalisé avec la version 1.0 du package Jeedom ainsi que la version 1.0 du plugin Constellation pour Jeedom. Le code source est disponible</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/package-library/jeedom/">Jeedom dans Constellation</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Le package Jeedom vous permet de contrôler vos équipements et vos scénarios Jeedom.</p>
<p>Cette documentation a été réalisé avec la version 1.0 du package Jeedom ainsi que la version 1.0 du plugin Constellation pour Jeedom.</p>
<p>Le code source est disponible sur <a title="https://github.com/myconstellation/constellation-packages/tree/master/Jeedom" href="https://github.com/myconstellation/constellation-packages/tree/master/Jeedom">https://github.com/myconstellation/constellation-packages/tree/master/Jeedom</a></p>
<h3>Installation du package Jeedom</h3>
<p>Depuis le “Online Package Repository” de votre Console Constellation, déployez le package Jeedom :</p>
<p align="center"><a href="http://i.imgur.com/dftrTld.png"><img class="colorbox-4912"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; padding-right: 0px; border-width: 0px;" title="clip_image002[4]" src="http://i.imgur.com/dftrTld.png" alt="clip_image002[4]" width="354" height="226" 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 spécifier l’adresse URL ainsi que la clé API de votre installation Jeedom sans le « http:// » :</p>
<p align="center"><a href="http://i.imgur.com/D5VLHMX.png"><img class="colorbox-4912"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; padding-right: 0px; border-width: 0px;" title="clip_image004[4]" src="http://i.imgur.com/D5VLHMX.png" alt="clip_image004[4]" width="354" height="176" border="0" /></a></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="Jeedom"&gt;
  &lt;settings&gt;
    &lt;setting key="ServerUrl" value="192.168.1.20" /&gt;
    &lt;setting key="ApiKey" value="123456abcdef" /&gt;
  &lt;/settings&gt;
&lt;/package&gt;</pre><p></p>
<h3>Détails du package</h3>
<h4>Les Settings</h4>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="bottom" width="10"><u>Nom</u></td>
<td valign="bottom" width="10"><u>Type</u></td>
<td valign="bottom" width="10"><u>Détail</u></td>
<td valign="bottom" width="478"><u>Description</u></td>
</tr>
<tr>
<td valign="bottom" width="10">ServerUrl</td>
<td valign="bottom" width="10">String</td>
<td valign="bottom" width="10">Obligatoire</td>
<td valign="bottom" width="478">Adresse IP de Jeedom</td>
</tr>
<tr>
<td valign="bottom" width="10">ApiKey</td>
<td valign="bottom" width="10">String</td>
<td valign="bottom" width="10">Obligatoire</td>
<td valign="bottom" width="478">Clé API de Jeedom</td>
</tr>
</tbody>
</table>
<h4>Les StateObjects</h4>
<p>Ce package ne comporte aucuns StateObjects.</p>
<h4>Les MessageCallbacks</h4>
<p>Le package expose 2 types de MessageCallbacks :</p>
<ul>
<li>SceneControl :</li>
</ul>
<p>Ces Message Callbacks ne produisent aucunes réponses (saga).</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="bottom" width="132"><u>Nom</u></td>
<td valign="bottom" width="200"><u>Champ scene_id</u></td>
<td valign="bottom" width="259"><u>Description</u></td>
</tr>
<tr>
<td width="132">Start</td>
<td width="200"><i>Id du scénario</i></td>
<td width="259">Démarre le scénario</td>
</tr>
<tr>
<td width="132">Stop</td>
<td width="200"><i>Id du scénario</i></td>
<td width="259">Arrête le scénario</td>
</tr>
<tr>
<td width="132">Activer</td>
<td width="200"><i>Id du scénario</i></td>
<td width="259">Active le scénario</td>
</tr>
<tr>
<td width="132">Desactiver</td>
<td width="200"><i>Id du scénario</i></td>
<td width="259">Désactive le scénario</td>
</tr>
</tbody>
</table>
<ul>
<li>SendCommand :</li>
</ul>
<p>Ces Message Callbacks ne produisent aucunes réponses (saga).</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="bottom" width="132"><u>Nom</u></td>
<td valign="bottom" width="121"><u>Champ id</u></td>
<td valign="bottom" width="167"><u>Champ value</u></td>
<td valign="bottom" width="167"><u>Champ value2</u></td>
<td valign="bottom" width="259"><u>Description</u></td>
</tr>
<tr>
<td width="132">Switch</td>
<td width="121"><i>Id de l&rsquo;équipement</i></td>
<td width="167">Aucun</td>
<td width="167">Aucun</td>
<td width="259">Pour un équipement de type switch</td>
</tr>
<tr>
<td width="132">Slider</td>
<td width="121"><i>Id de l&rsquo;équipement</i></td>
<td width="167">Valeur souhaitée</td>
<td width="167">Aucun</td>
<td width="259">Pour un équipement de type slider</td>
</tr>
<tr>
<td width="132">Message</td>
<td width="121"><i>Id de l&rsquo;équipement</i></td>
<td width="167">Titre du message</td>
<td width="167">Corps du message</td>
<td width="259">Pour un équipement de type message</td>
</tr>
<tr>
<td width="132">Color</td>
<td width="121"><i>Id de l&rsquo;équipement</i></td>
<td width="167">Couleur souhaitée</td>
<td width="167">Aucun</td>
<td width="259">Pour un équipement de type color</td>
</tr>
</tbody>
</table>
<h3>Le plugin pour Jeedom (version 1.0)</h3>
<h4>Installation</h4>
<p>Afin d’éviter de questionner Jeedom toutes les x secondes et pour obtenir les informations le plus rapidement possible, un plugin pour Jeedom a été développé.</p>
<p>Celui-ci vous permet d&rsquo;envoyer toutes les informations d&rsquo;un équipement quand une ou plusieurs informations de cet équipement se mettent à jour.</p>
<p>Le plugin peut être téléchargé à cette adresse : http://erwann.laville.free.fr/Jeedom/constellation.zip</p>
<p>Il vous suffit alors de l&rsquo;extraire dans le dossier plugin de Jeedom. Une fois installé, vous pourrez l&rsquo;activer dans la liste des plugins sur Jeedom :</p>
<p align="center"><a href="http://i.imgur.com/JAqfqUX.png"><img class="colorbox-4912"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; padding-right: 0px; border-width: 0px;" title="clip_image004[4]" src="http://i.imgur.com/JAqfqUX.png" width="354" height="176" border="0" /></a></p>
<p>Une fois activé, vous aurez accès à la configuration générale du plugin. Il vous faudra indiquer l&rsquo;url de Constellation (sans le http), le nom de la sentinelle et la clé créditential associée au plugin.</p>
<p align="center"><a href="http://i.imgur.com/4RLHco7.png"><img class="colorbox-4912"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; padding-right: 0px; border-width: 0px;" title="clip_image004[4]" src="http://i.imgur.com/4RLHco7.png" width="354" height="176" border="0" /></a></p>
<p>Par la suite vous pouvez ajouter autant d&rsquo;équipement que souhaités. Chaque équipement créé correspondra à un package différent sur Constellation. Le nom de cet équipement correspondra au nom du package.</p>
<p align="center"><a href="http://i.imgur.com/jytCq2H.png"><img class="colorbox-4912"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; padding-right: 0px; border-width: 0px;" title="clip_image004[4]" src="http://i.imgur.com/jytCq2H.png" width="354" height="176" border="0" /></a></p>
<p align="center"><a href="http://i.imgur.com/eHOQm3f.png"><img class="colorbox-4912"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; padding-right: 0px; border-width: 0px;" title="clip_image004[4]" src="http://i.imgur.com/eHOQm3f.png" width="354" height="176" border="0" /></a></p>
<h4>Les StateObjects</h4>
<p>Le plugin Constellation pour Jeedom envoi un SO par équipement ajouté dans le « package ».</p>
<p>Si vous ajoutez plusieurs commandes d&rsquo;un même équipement dans le package, les informations de l&rsquo;équipement seront envoyés au même package dans Constellation à chaque mise à jour de chaque commandes indiquées.</p>
<p>Par exemple dans mon équipement Zwave, je rajoute #[Salle de Bains][Wall Plug][Etat]# et #[Salle de Bains][Wall Plug][Puissance]#. Les informations de mon Wall Plug seront envoyés à Constellation si l&rsquo;état ou si la puissance changent.</p>
<p align="center"><a href="http://i.imgur.com/Vn2H4I4.png"><img class="colorbox-4912"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; padding-right: 0px; border-width: 0px;" title="clip_image004[4]" src="http://i.imgur.com/Vn2H4I4.png" width="354" height="176" border="0" /></a></p>
<p>Pour le moment, les SO ont comme nom le chemin de l&rsquo;équipement dans Jeedom, par exemple : [Salle de Bains][Wall Plug]</p>
<p>N&rsquo;oubliez pas de rajouter dans Constellation la sentinel et le package, par exemple ici :</p>
<p></p><pre class="crayon-plain-tag">&lt;sentinel name="Squeezebox" credential="Standard"&gt;
  &lt;packages&gt;
    &lt;package name="Zwave" /&gt;
  &lt;/packages&gt;
&lt;/sentinel&gt;</pre><p></p>
<h4>Les Plugins compatiblent</h4>
<p>Du fait du système utilisé (fonction listener) tous les plugins de Jeedom ne sont pas compatibles. Voici une liste non exhaustive des plugins Jeedom essayés :</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td align="center" valign="bottom" width="200"><u>Nom du plugin</u></td>
<td align="center" valign="bottom" width="100"><u>Compatible</u></td>
<td align="center" valign="bottom" width="100"><u>Non compatible</u></td>
</tr>
<tr>
<td align="center" valign="bottom" width="200">BLEA</td>
<td align="center" valign="bottom" width="100">X</td>
<td align="center" valign="bottom" width="100"></td>
</tr>
<tr>
<td align="center" valign="bottom" width="200">Espeasy</td>
<td align="center" valign="bottom" width="100">X</td>
<td align="center" valign="bottom" width="100"></td>
</tr>
<tr>
<td align="center" valign="bottom" width="200">Agenda</td>
<td align="center" valign="bottom" width="100"></td>
<td align="center" valign="bottom" width="100">X</td>
</tr>
<tr>
<td align="center" valign="bottom" width="200">Monitoring</td>
<td align="center" valign="bottom" width="100">X</td>
<td align="center" valign="bottom" width="100"></td>
</tr>
<tr>
<td align="center" valign="bottom" width="200">RFXCom</td>
<td align="center" valign="bottom" width="100">X</td>
<td align="center" valign="bottom" width="100"></td>
</tr>
<tr>
<td align="center" valign="bottom" width="200">Zwave</td>
<td align="center" valign="bottom" width="100">X</td>
<td align="center" valign="bottom" width="100"></td>
</tr>
</tbody>
</table>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/package-library/jeedom/">Jeedom 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/jeedom/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Connecter un vidéo projecteur standard à Constellation et synchroniser les volets</title>
		<link>https://developer.myconstellation.io/tutorials/connecter-un-video-projecteur-dans-constellation/</link>
					<comments>https://developer.myconstellation.io/tutorials/connecter-un-video-projecteur-dans-constellation/#respond</comments>
		
		<dc:creator><![CDATA[Lucas]]></dc:creator>
		<pubDate>Tue, 16 May 2017 10:23:36 +0000</pubDate>
				<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[ESP8266]]></category>
		<category><![CDATA[Domotique]]></category>
		<category><![CDATA[Volet]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Projecteur]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=4888</guid>

					<description><![CDATA[<p>Par Lucas Dupuis Ayant fait récemment l&#8217;acquisition d&#8217;un vidéo-projecteur pour mes soirées films, je me suis vite rendu compte qu&#8217;avec les jours qui rallongent, j&#8217;ai besoin de fermer les volets de mon salon afin de rester dans une certaine pénombre.</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/tutorials/connecter-un-video-projecteur-dans-constellation/">Connecter un vidéo projecteur standard à Constellation et synchroniser les volets</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><em>Par Lucas Dupuis</em></p>
<p>Ayant fait récemment l&rsquo;acquisition d&rsquo;un vidéo-projecteur pour mes soirées films, je me suis vite rendu compte qu&rsquo;avec les jours qui rallongent, j&rsquo;ai besoin de fermer les volets de mon salon afin de rester dans une certaine pénombre.</p>
<p>La présentation de mon système de pilotage de volets n&rsquo;est plus à faire, <a href="/showcases/connecter-volets-constellation-arduino-raspberry/">vous la retrouverez ici</a>. Vous pouvez aussi utiliser des modules Z-Wave comme le FGR-211 qu&rsquo;on connectera à Constellation via le package <a href="/package-library/vera/">Vera</a> ou <a href="/package-library/jeedom/">Jeedom</a>. Dans tous les cas, nous disposons un <a href="/concepts/messaging-message-scope-messagecallback-saga/">MessageCallback </a>pour ouvrir ou fermer nos volets !</p>
<p>La problématique qui se pose est la suivante : comment savoir que le projecteur est allumé et que je m&rsquo;apprête à regarder un film ?</p>
<p>J&rsquo;ai réfléchi à plusieurs solutions :</p>
<ul>
<li>Monitorer la consommation de la prise électrique afin de déduire que le projecteur est allumé
<ul>
<li>Avantages :
<ul>
<li>Permet d&rsquo;exposer un booléen indiquant que le projecteur est allumé et d&rsquo;ouvrir/fermer les volets en conséquence</li>
<li>Permet de monitorer la consommation en temps réel</li>
<li>Permet de monitorer la durée d&rsquo;utilisation de la lampe du vidéo-projecteur</li>
</ul>
</li>
<li>Inconvénients :
<ul>
<li>Nécessite une prise connectée avec conso-mètre (à fabriquer ou à acheter)</li>
<li>C&rsquo;est potentiellement complexe et coûteux</li>
</ul>
</li>
</ul>
</li>
<li>Surveiller le StateObject de mon médiacenter Kodi (exposé par le package <a href="/package-library/xbmc/">xbmc</a>)
<ul>
<li>Avantages :
<ul>
<li>J&rsquo;ai déjà une routine surveillant le stateobject pour allumer et éteindre le système de son lorsqu&rsquo;un média est joué</li>
<li>Il n&rsquo;y a que du code à mettre en place dans le package « cerveau » de la maison</li>
</ul>
</li>
<li>Inconvénients :
<ul>
<li>Il n&rsquo;y a pas de lien direct entre l&rsquo;allumage du projecteur et une action sur les volets</li>
<li>La sélection du film ou du média sur l&rsquo;écran se fait volets ouverts, et donc c&rsquo;est potentiellement gênant en cas de luminosité importante</li>
<li>Cela ne tient pas compte des autres sources branchées sur le projecteur (TV, console, &#8230;)</li>
</ul>
</li>
</ul>
</li>
<li>Utiliser un déclencheur sur le projecteur
<ul>
<li>Avantages :
<ul>
<li>Montage simple</li>
<li>Peu d&rsquo;investissement</li>
<li>Système embarqué trivial</li>
</ul>
</li>
<li>Inconvénients :
<ul>
<li>Pas de monitoring de consommation</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>J&rsquo;ai retenu la seconde et la troisième option : la seconde option, consistant à surveiller le stateobject de <a href="/package-library/xbmc/">kodi</a> permet l&rsquo;allumage du système de son lorsqu&rsquo;un média est lu, que ce soit un film ou un morceau de musique et la troisième option pour déclencher la fermeture des volets à l&rsquo;allumage du vidéo projecteur.</p>
<h3>Prerequis</h3>
<ul>
<li>Un serveur Constellation</li>
<li>Un vidéo-projecteur avec une sortie 12V</li>
<li>Un ESP8266 (ou Arduino connecté) avec un régulateur de tension</li>
<li>Le SDK Visual Studio</li>
</ul>
<h3>Etape 1 : connecter le vidéo projecteur dans Constellation</h3>
<p>En regardant les caractéristiques de mon projecteur, je me suis rendu compte qu&rsquo;il existait une sortie 12V permettant de déclencher un moteur pour une toile de projection.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/2017-05-03-21.19.35.jpg"><img class="colorbox-4888"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Le projecteur vidéo" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/2017-05-03-21.19.35_thumb.jpg" alt="Le projecteur vidéo" width="454" height="342" border="0" /></a></p>
<p>À la maison je projette sur un mur blanc, je n&rsquo;ai donc pas besoin de cette sortie. Il s&rsquo;agit d&rsquo;un connecteur jack mono que vous trouverez rapidement chez vous dans votre boite de récup&rsquo; ou bien directement sur le net pour quelques centimes.</p>
<p>Il suffit donc d&rsquo;un ESP8266 (par exemple un ESP-01, très petit et peu cher) et d&rsquo;un régulateur de tension 3.3v (ex. LD1117v33) acceptant en entrée une tension entre 5 et 15V et le tour est joué !</p>
<p>En effet, le projecteur envoie du 12v sur la sortie dès qu&rsquo;il est sous tension et du 0v lorsqu&rsquo;il est éteint. Ainsi notre ESP-01 sera alimenté par cette sortie. Lorsqu&rsquo;on allume le vidéo-projecteur, l&rsquo;ESP-01 sera démarré et lorsqu&rsquo;on éteint le vidéo projecteur, il sera éteint car plus d&rsquo;alimentation !</p>
<p>Aussi simple que cela !</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/2017-05-16-10.27.17.jpg"><img class="colorbox-4888"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Schéma du montage avec l'ESP8266" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/2017-05-16-10.27.17_thumb.jpg" alt="Schéma du montage avec l'ESP8266" width="454" height="193" border="0" /></a></p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/2017-05-06-15.37.28.jpg"><img class="colorbox-4888"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Le vidéo projecteur avec l'ESP8266" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/2017-05-06-15.37.28_thumb.jpg" alt="Le vidéo projecteur avec l'ESP8266" width="454" height="342" border="0" /></a></p>
<p>L&rsquo;ESP, de son côté, publie simplement toutes les secondes un StateObject ayant une durée de vie de 5 secondes pour indiquer que le projecteur est allumé.</p>
<p>Pour connecter un ESP8266 (ou un Arduino) <a href="/getting-started/connecter-un-arduino-ou-un-esp8266-constellation/">suivez ce guide</a> ! Une fois connecté dans ma Constellation, je <a href="/client-api/arduino-esp-api/produire-des-stateobjects-depuis-arduino-esp/">publie le StateObject</a> dans la boucle principale <em>loop()</em></p>
<p></p><pre class="crayon-plain-tag">void loop() {
  constellation.loop();
 
  if(((millis() - lastTime) &gt; 1000) 
    || (millis() &lt; lastTime))
  {
    constellation.pushStateObject("Uptime",  millis(), 5);
    lastTime = millis();
  } 
}</pre><p></p>
<p>On a donc dans les StateObjects de notre Constellation, un StateObject « Uptime » publié dans mon cas par le package (virtuel)  « ESP01_Projector » qui contient l&rsquo;uptime de mon projecteur :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/Screenshot-SO.png"><img class="colorbox-4888"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Le StateObject de l'uptime du projecteur" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/Screenshot-SO_thumb.png" alt="Le StateObject de l'uptime du projecteur" width="457" height="332" border="0" /></a></p>
<p style="text-align: left;" align="center">Ce StateObject est mis à jour par l&rsquo;ESP toutes les secondes avec une durée de vie de 5 secondes ! Ainsi je n&rsquo;ai pas besoin de connaitre la valeur du StateObject, il me suffit juste de vérifier que le StateObject est « Valide » et non « Expiré » !</p>
<p style="text-align: left;" align="center">Si il est valide c&rsquo;est que dans les 5 dernières secondes il y a bien publié son Uptime, donc l&rsquo; ESP est démarré ce qui implique que mon vidéo projecteur est bien démarré (pour alimenter l&rsquo;ESP) !</p>
<p style="text-align: left;" align="center">En revanche si ce StateObject est expiré, c&rsquo;est à dire que le StateObject n&rsquo;a pas été mis à jour durant les 5 dernières secondes or l&rsquo;ESP est censé le faire à chaque seconde ! L&rsquo;ESP-01 est donc déconnecté ce qui impliquerai que le vidéo projecteur est arrêté !</p>
<h3 style="text-align: left;" align="center">Etape 2 : synchroniser le vidéo projecteur avec mes volets</h3>
<p style="text-align: left;" align="center">Maintenant, dans mon package « cerveau » de Constellation, il suffit de surveiller ce StateObject et son état expiré ou non pour savoir quelle commande envoyer aux volets.</p>
<p style="text-align: left;" align="center">J&rsquo;ai donc créé un package « cerveau » en C#.</p>
<p style="text-align: left;" align="center">Dans ma classe, je crée un <a href="/client-api/net-package-api/consommer-des-stateobjects/">StateObjectLink </a>pour lier le StateObject de l&rsquo;ESP dans une propriété .NET de mon code :</p>
<p></p><pre class="crayon-plain-tag">/// &lt;summary&gt;
/// StateObject du projecteur. Permet de connaitre l'uptime du projecteur.
/// &lt;/summary&gt;
[StateObjectLink("ESP01_Projector", "Uptime")]
public StateObjectNotifier ProjectorUptime { get; set; }</pre><p></p>
<p>Maintenant au démarrage de mon package, j&rsquo;attache un « handler » sur l&rsquo;événement « <em>ValueChanged</em> » permettant d&rsquo;ajouter du code en cas de mise à jour du StateObject.</p>
<p>Ici je vérifie que mon StateObjectLink est bien lié au StateObject (<em>HasValue</em>) et que ce StateObject n&rsquo;est pas expiré (<em>IsExpired</em>).</p>
<p>Si la condition est vrai, c&rsquo;est que mon projecteur est allumé, alors je peux fermer mes volets autrement je restaure les volets dans leurs positions précédentes.</p>
<p></p><pre class="crayon-plain-tag">this.ProjectorUptime.ValueChanged += (s, e) =&gt;
{
    // Projecteur allumé ?
    if (this.ProjectorUptime.HasValue == true &amp;&amp; this.ProjectorUptime.Value.IsExpired == false)
    {
        // Si projecteur est allumé, on ferme les volets.
        foreach (var volet in this.voletConfig)
        {
            if (this.ShowDebug)
            {
                PackageHost.WriteWarn($"Fermeture du volet {volet.Name} à 100%.");
            }
            
            // On enregistre au passage la position de départ pour la restaurer à la fin.
            volet.PreviousPosition = volet.CurrentPosition; 
            
            // Ordre de fermeture (100%).
            PackageHost.CreateMessageScope("ESP_Shutters").ChangePercent(volet.Name, 100);
        }
    }
    else
    {
        // Si projecteur est éteint, on rouvre les volets.
        foreach (var volet in this.voletConfig)
        {
            if (this.ShowDebug)
            {
                PackageHost.WriteWarn($"Ouverture du volet {volet.Name} à l'ancienne position, {Convert.ToInt32(volet.Percent * 100.0)}-&gt;{volet.PreviousPosition}% après {this.tempoReouvertureVolets} secs d'inactivité.");
            }

            // Pour chaque volet, on revient à la position initiale
            PackageHost.CreateMessageScope("ESP_Shutters").ChangePercent(volet.Name, volet.PreviousPosition);
        }
    }
};</pre><p></p>
<h3>Conclusion</h3>
<p>Une demi-heure de prototypage et de soudure, un petit quart d&rsquo;heure de développement, et le challenge est relevé !</p>
<p>L&rsquo;allumage du projecteur ferme les volets de mon salon selon une consigne, il déclenche également un scénario prédéfini pour les lampes Hue et active la prise du système de son. Le clic sur le bouton de la télécommande rend l&rsquo;expérience du film beaucoup plus profitable avec Constellation !</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/tutorials/connecter-un-video-projecteur-dans-constellation/">Connecter un vidéo projecteur standard à Constellation et synchroniser les volets</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://developer.myconstellation.io/tutorials/connecter-un-video-projecteur-dans-constellation/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Connecter ses volets dans la Constellation avec des Arduino et un Raspberry</title>
		<link>https://developer.myconstellation.io/showcases/connecter-volets-constellation-arduino-raspberry/</link>
					<comments>https://developer.myconstellation.io/showcases/connecter-volets-constellation-arduino-raspberry/#respond</comments>
		
		<dc:creator><![CDATA[Lucas]]></dc:creator>
		<pubDate>Mon, 08 Jun 2015 09:21:39 +0000</pubDate>
				<category><![CDATA[Showcases]]></category>
		<category><![CDATA[Volet]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Domotique]]></category>
		<category><![CDATA[Raspberry]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=4680</guid>

					<description><![CDATA[<p>Ecrit par Lucas Dupuis en Juin 2015. Lorsque nous avons acheté notre maison, nous avons entamé de lourds travaux de rénovation ce qui m’a permis de passer du câble multifonction blindé à chaque point de contrôle (interrupteurs) dans l’optique de</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/showcases/connecter-volets-constellation-arduino-raspberry/">Connecter ses volets dans la Constellation avec des Arduino et un Raspberry</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><em>Ecrit par Lucas Dupuis en Juin 2015.</em></p>
<p>Lorsque nous avons acheté notre maison, nous avons entamé de lourds travaux de rénovation ce qui m’a permis de passer du câble multifonction blindé à chaque point de contrôle (interrupteurs) dans l’optique de pouvoir facilement ajouter des fonctionnalités domotique sans avoir recours à des solutions sans fil comme le Z-Wave assez coûteux.</p>
<p>Après l’installation de pas moins d’une dizaine volets électrique dans la maison, il me fallait une solution de pilotage à la fois simple, fiable et surtout économique. De plus cette solution devra être ouverte me permettant de concevoir ma propre interface de contrôle sur tout type de support et de pouvoir facilement ajouter de l’intelligence.</p>
<p>Grace à la plateforme Constellation, un Raspberry Pi et quelques Arduinos, j’ai pu concevoir mon propre système de gestion des volets.</p>
<h3>La conception</h3>
<p>Concrètement chaque volet dispose de deux phases : une pour la montée et une autre pour la descente.</p>
<p>L’idée est donc de piloter ces deux phases avec des relais. Pour garder le contrôle manuel des volets (c’est-à-dire à partir des interrupteurs encastrés dans le mur), j’ai connecté chaque interrupteur bistable au système pour déclencher les volets (obligatoire pour une certification WAF J).</p>
<p>Pour cela derrière chaque interrupteur des volets, j’ai placé une carte de contrôle avec deux relais 220V et deux entrées. Chaque carte de contrôle est connectée sur un câble multifonction qui arrive à chaque volet. On utilise donc 6 fils : deux pour les entrées des interrupteurs (montée et descente), deux pour la commande des deux relais (montée et descente) et deux pour l’alimentation (5V ou 12V en fonction de vos relais).</p>
<p>Côté budget, comptez moins de 3€ par volet.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-68.png"><img class="colorbox-4680"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Carte de relais par volet" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-68.png" alt="Carte de relais par volet" width="304" height="404" border="0" /></a></p>
<p>L’ensemble des câbles se rejoignent tous jusque dans ma baie réseau au RDC. Chaque volet a donc besoin de deux sorties pour les relais et deux entrées pour l’interrupteur bistable. Avec 10 volets, ça nous donne donc 20 sorties et 20 entrées, beaucoup trop pour un Raspberry !</p>
<p>Toujours dans l’optique de baisser les coûts, j’utilise un réseau d’Arduino Mini Pro acheté moins de 2€ pièce.</p>
<p>Chaque Arduino peut gérer jusqu’à 3 volets. Ils sont tous installés sur une carte et connectés en série sur un bus I2C sur lequel est également connecté un Raspberry qui sera le cerveau des volets, lui-même connecté dans la Constellation.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-69.png"><img class="colorbox-4680"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Centrale Arduino et Raspberry" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-69.png" alt="Centrale Arduino et Raspberry" width="454" height="342" border="0" /></a></p>
<p>N’importe quel objet, page Web ou programme connecté dans la Constellation pourra envoyer un ordre à chaque volet. Chaque ordre sera traité par le package Constellation qui tourne sur le Raspberry qui, commandera l’Arduino associé via le bus I2C qui lui-même activera le relais correspondant à l’ordre de montée ou descente du volet cible !</p>
<h3>Conception logicielle</h3>
<p>Une fois nos volets connectés sur les cartes relais reliés aux Arduinos, il suffit d’activer les sorties pour basculer l’état des relais et donc piloter la montée ou la descente de chacun de nos volets.</p>
<p>Par exemple pour une montée :</p>
<p></p><pre class="crayon-plain-tag">digitalWrite(volets[i].relaisMontee, HIGH);
digitalWrite(volets[i].relaisDescente, LOW);</pre><p></p>
<p>Pour capter un changement d’état sur les interrupteurs bistables, il suffit de lire l’entrée correspondante configurée en pull-up. Si l’entrée change d’état à l’état LOW c’est qu’on vient d’appuyer sur le bouton de montée :</p>
<p></p><pre class="crayon-plain-tag">if (digitalRead(volets[i].buttonMontee) == LOW &amp;&amp; volets[i].previousSens != 1)
{
  // Demande de montée
}</pre><p></p>
<p>Pour la communication des Arduino avec la base Raspberry, j’utilise le protocole I2C. Chaque Arduino à son adresse 0x11 pour le 1<sup>er</sup>, 0x12 pour le 2<sup>ème</sup>, etc.. en esclave sur le bus. Le Raspberry est maître.</p>
<p>Lors du setup, j’attribue l’adresse de mon Arduino et configure des callbacks pour la réception et l’émission :</p>
<p></p><pre class="crayon-plain-tag">Wire.begin(SLAVE_ADDRESS);
Wire.onReceive(receiveData);
Wire.onRequest(sendData);</pre><p></p>
<p>Pour la lecture, dès qu’il y a quelque chose sur le bus, je récupère un Int dont les deux 1<sup>ers</sup> bits m’indiquent le n° du volet, suivi d’un bit pour savoir si je dois allumer ou eteindre le volet. En cas d’allumage, le dernier bit permet de connaitre le sens (montée ou descente) :</p>
<p></p><pre class="crayon-plain-tag">while(Wire.available()) 
{
    int dataReceived = 0;
    dataReceived = Wire.read();
    rawVal += dataReceived;
}
int rawInt = rawVal.toInt();
int numVolet = bitRead(rawInt,2) &amp; bitRead(rawInt,3)*2;
int allumageVolet = bitRead(rawInt,1);
int sensVolet = bitRead(rawInt,0);
// Envoyer l'ordre sur les sorties du volet correspondant</pre><p></p>
<p>Pour connaitre l’état des interrupteurs depuis le Raspberry, chaque Arduino écrit sur le bus un Int avec le même format pour indiquer pour chaque volet son état :</p>
<p></p><pre class="crayon-plain-tag">Wire.write(/* int représentant l’état du volet */);</pre><p></p>
<p>Maintenant que je peux piloter l’ensemble de mes volets depuis mon Raspberry, j’utilise la plateforme Constellation pour tout connecter facilement.</p>
<p>Grace au SDK Constellation dans Visual Studio et aux Python Tools for Visual Studio, j’ai créé un package Constellation en Python.</p>
<p>Le package expose des méthodes dans la Constellation pour le contrôle et publie des « StateObjects » sur l’état de chaque volet.</p>
<p></p><pre class="crayon-plain-tag">def ActionVoletMessageCallback(data):
    # Action à envoyer à un volet.
    try:
        volet = GetShutter(data["shutterName"].lower())
        actionStr = data["actionShutter"].lower()
     if actionStr == "montee":
            volet.Open()
        elif actionStr == "descente":
            volet.Close()
        else:
            volet.Stop()
    Constellation.WriteInfo("ActionVolet: %s =&gt; %s ", (volet.nom, actionStr))</pre><p></p>
<p>Les methodes Open/Close/Stop écrivent sur le bus I2C avec la commande I2CSet à destination de l’adresse de l’arduino cible, l’entier représentant l’ordre à exécuter :</p>
<p></p><pre class="crayon-plain-tag">commande = 'i2cset -y 1 %s 0x%x' % (self.adresse, i)
os.system(commande)</pre><p></p>
<p>Pour la lecture sur le bus, j’utilise la commande « i2cget ».</p>
<p></p><pre class="crayon-plain-tag">f = os.popen('i2cget -y 1 %s' % self.adresse, 'r')
retour = f.read()</pre><p></p>
<p>Une fois l’entier représentant l’état de chaque volet décrypté, je publie dans la Constellation un StateObject avec toutes les infos :</p>
<p></p><pre class="crayon-plain-tag"># Changement, on met à jour le stateobject
 Constellation.PushStateObject(volet.nom, volet.etat, "Shutter",
   {
       "Adresse": volet.adresse,
       "Numero": volet.numero,
       "Statut inversé" : volet.inverseStatut,
       "Commande inversée" : volet.inverseCommande
   })</pre><p></p>
<p>Une fois mon package développé, je peux directement depuis Visual Studio le publier sur mon serveur et le déployer sur une sentinelle de ma Constellation.</p>
<p>Au préalable j’ai installé une Sentinelle Constellation sur mon Raspberry. Il me suffit ensuite de lancer mon package depuis l’interface Web de contrôle de ma Constellation.</p>
<p>Cette interface me permet également de suivre en temps réel les logs de mes packages :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-70.png"><img class="colorbox-4680"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Console Constellation 1.7" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-70.png" alt="Console Constellation 1.7" width="354" height="100" border="0" /></a></p>
<h3>Aller plus loin avec Constellation</h3>
<p>A ce stade l’état de chaque volet de ma maison est publié dans la Constellation et je suis capable de piloter chacun d’entre eux en envoyer un message dans la Constellation à destination de mon package Python.</p>
<p>La suite logique est de créer une interface de pilotage. Pour cela je vais utiliser l’API Constellation pour AngularJS me permettant de créer une application HTML/JS connectée dans la Constellation avec le framework Angular de Google.</p>
<p>Grace à la Constellation, le code Javascript se résume à cela :</p>
<p></p><pre class="crayon-plain-tag">app.controller('ShutterAngularController', ['$scope', 'constellation', function ($scope, constellation) {

    constellation.intializeClient("http://constellation.myhome.lan:8088/", "MonAcessKey", "HomeControl");

    var MesVolets = {};
    constellation.onUpdateStateObject(function (message) {
        $scope.$apply(function () {
            $scope.MesVolets[message.Name] = message;
        });
    });

    constellation.onConnectionStateChanged(function (change) {
        if (change.newState === $.signalR.connectionState.connected) {
            constellation.requestSubscribeStateObjects("*", "ShutterController", "*", "*");
        }
    });

    $scope.actionShutter = function (shutter, action) {
        constellation.sendMessage({ Scope: 'Package', Args: ['ShutterController'] }, 'ActionVoletMessageCallback', { 'shutterName': shutter.Name, 'actionShutter': action });
    };

    constellation.connect();
}]);</pre><p></p>
<p>Dans mon contrôleur, je me connecte à ma Constellation et je m’abonne au StateObject du package « ShutterController ». A chaque réception d’un state object, je l’ajoute dans mon scope Angular. De plus j’ai ajouté une méthode pour envoyer un message de contrôle à mon package Python.</p>
<p>Il ne reste plus qu’à faire une vue HTML en faisant une boucle sur notre variable de scope « MesVolets » :</p>
<p></p><pre class="crayon-plain-tag">&lt;div class="list-group-item" ng-repeat="shutter in ShutterController"&gt;
    &lt;h3&gt;                        
        {{shutter.Name}}
        &lt;em class="pull-right btn-group" role="group" aria-label="..."&gt;
            &lt;button type="button" 
                class="btn btn-default glyphicon glyphicon-chevron-up" 
                ng-class="{ active: shutter.Value==='Montee' }" 
                ng-click='actionShutter(shutter, "montee")'&gt;
                &lt;/button&gt;
            &lt;button type="button" 
                class="btn btn-default glyphicon glyphicon-stop" 
                ng-class="{ active: shutter.Value==='Arret' }" 
                ng-click='actionShutter(shutter, "stop")'&gt;
                &lt;/button&gt;
            &lt;button type="button" 
                class="btn btn-default glyphicon glyphicon-chevron-down" 
                ng-class="{ active: shutter.Value==='Descente' }" 
                ng-click='actionShutter(shutter, "descente")'&gt;
                &lt;/button&gt;
        &lt;/em&gt;
    &lt;/h3&gt;
&lt;/div&gt;</pre><p></p>
<p>Et voilà comment créer une première interface Web de supervision et de contrôle de l’ensemble des volets à la maison.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-71.png"><img class="colorbox-4680"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Interface de contrôle des volets" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-71.png" alt="Interface de contrôle des volets" width="404" height="387" border="0" /></a></p>
<p>Les propriétés des volets étant exposées dans la Constellation, il devient facile d’ajouter de l’intelligence dans la maison. Par exemple, j’ai également un autre Raspberry avec un capteur de luminosité TSL2561 dans ma Constellation ce qui me permet d’ouvrir et fermer les volets en fonction du seuil de luminosité ou encore de fermer automatiquement les volets lorsque je lance un film sur mon XBMC (XBMC/Kodi étant lui-même connecté dans ma Constellation).</p>
<p>Grace à la plateforme Constellation, l’interconnexion des objets devient un jeu d’enfant comme l’orchestration et le déploiement de mes programmes à travers les différents devices de la maison.</p>
<p>Ainsi, moyennant un budget inférieur à 100€, j’ai pu connecter et rendre intelligents mes dix volets.</p>
<p><b><i>Lucas Dupuis</i></b></p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/showcases/connecter-volets-constellation-arduino-raspberry/">Connecter ses volets dans la Constellation avec des Arduino et un Raspberry</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://developer.myconstellation.io/showcases/connecter-volets-constellation-arduino-raspberry/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Wemo : intégrez vos prises Belkin Wemo dans Constellation</title>
		<link>https://developer.myconstellation.io/package-library/wemo/</link>
					<comments>https://developer.myconstellation.io/package-library/wemo/#respond</comments>
		
		<dc:creator><![CDATA[Constellation Documentation Agent]]></dc:creator>
		<pubDate>Wed, 26 Oct 2016 14:20:42 +0000</pubDate>
				<category><![CDATA[Packages]]></category>
		<category><![CDATA[Domotique]]></category>
		<category><![CDATA[Belkin]]></category>
		<category><![CDATA[Wemo]]></category>
		<category><![CDATA[Package]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=3524</guid>

					<description><![CDATA[<p>Le package Wemo vous permet de connecter des équipements Belkin/Wemo dans Constellation. Actuellement, dans la version 1.0 du package, seuls les prises connectés Wemo Switch et Wemo Insight sont supportées. Le code source est disponible sur : https://github.com/myconstellation/constellation-packages/tree/master/Wemo Installation Depuis</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/package-library/wemo/">Wemo : intégrez vos prises Belkin Wemo dans Constellation</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Le package Wemo vous permet de connecter des équipements Belkin/Wemo dans Constellation.</p>
<p align="center"><img class="colorbox-3524"  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-139.png" alt="image" width="350" height="166" border="0" /></p>
<p align="left">Actuellement, dans la version 1.0 du package, seuls les prises connectés Wemo Switch et Wemo Insight sont supportées.</p>
<p>Le code source est disponible sur : <a href="https://github.com/myconstellation/constellation-packages/tree/master/Wemo">https://github.com/myconstellation/constellation-packages/tree/master/Wemo</a></p>
<h3>Installation</h3>
<p>Depuis le “Online Package Repository” de votre Console Constellation, déployez le package Wemo:</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/10/image-140.png"><img class="colorbox-3524"  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-128.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 align="left">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="Wemo" /&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="478"><u>Description</u></td>
</tr>
<tr>
<td valign="top" width="10"><strong>DeviceQueryInterval</strong></td>
<td valign="top" width="10">Int32</td>
<td valign="top" width="10">Optionnel<br />
Par défaut : 1</td>
<td valign="top" width="478">Intervalle de temps en seconde pour interroger et rafraichir le statuts du périphérique Wemo dans les StateObjects Constellation (par défaut, toutes les secondes).</td>
</tr>
<tr>
<td valign="top" width="10"><strong>DiscoveryInterval</strong></td>
<td valign="top" width="10">Int32</td>
<td valign="top" width="10">Optionnel<br />
Par défaut : 600</td>
<td valign="top" width="478">Intervalle de temps en seconde pour lancer une découverte des nouveaux périphérique Wemo sur le réseau (par défaut, toutes les 600 secondes, soit 10 minutes).</td>
</tr>
</tbody>
</table>
<h4>Les StateObjects</h4>
<p>Vous retrouverez autant de StateObjects que périphérique Wemo découvert sur le réseau :</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; SerialNumber &gt;&gt;</strong></td>
<td valign="top" width="10">Wemo.WemoSwitch</td>
<td valign="top" width="446">Représente l’état d’une prise connectée Wemo</td>
</tr>
</tbody>
</table>
<h4 align="left">Les MessageCallbacks</h4>
<p>Le package expose 3 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>Discover</strong></td>
<td valign="top" width="141">Aucune</td>
<td valign="top" width="407">Lance une découverte des nouveaux périphérique Wemo sur le réseau</td>
</tr>
<tr>
<td valign="top" width="10"><strong>SetSwitchState</strong></td>
<td valign="top" width="141">Aucune</td>
<td valign="top" width="407">Défini le statuts (On/Off) d’une prise Wemo</td>
</tr>
</tbody>
</table>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/10/image-141.png"><img class="colorbox-3524"  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-129.png" alt="image" width="350" height="102" border="0" /></a></p>
<h3 align="left">Quelques exemples</h3>
<ul>
<li>Afficher l’état et contrôler chaque des prises Wemo depuis une application mobile multi-plateforme</li>
</ul>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/package-library/wemo/">Wemo : intégrez vos prises Belkin Wemo 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/wemo/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Vera : la domotique Z-Wave dans Constellation</title>
		<link>https://developer.myconstellation.io/package-library/vera/</link>
					<comments>https://developer.myconstellation.io/package-library/vera/#comments</comments>
		
		<dc:creator><![CDATA[Constellation Documentation Agent]]></dc:creator>
		<pubDate>Wed, 26 Oct 2016 13:34:30 +0000</pubDate>
				<category><![CDATA[Packages]]></category>
		<category><![CDATA[Package]]></category>
		<category><![CDATA[Vera]]></category>
		<category><![CDATA[ZWave]]></category>
		<category><![CDATA[Domotique]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=3514</guid>

					<description><![CDATA[<p>Le package Vera vous permet de connecter la box domotique Z-Wave Vera dans Constellation. L’état des différents périphériques est publié en tant que StateObjects et des MessageCallbacks vous permettent de déclencher des scènes ou piloter les équipements. Le code source</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/package-library/vera/">Vera : la domotique Z-Wave dans Constellation</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Le package Vera vous permet de connecter la box domotique Z-Wave Vera dans Constellation. L’état des différents périphériques est publié en tant que StateObjects et des MessageCallbacks vous permettent de déclencher des scènes ou piloter les équipements.</p>
<p align="center"><img class="colorbox-3514"  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-134.png" alt="image" width="240" height="166" border="0" /></p>
<p>Le code source est disponible sur : <a href="https://github.com/myconstellation/constellation-packages/tree/master/Vera">https://github.com/myconstellation/constellation-packages/tree/master/Vera</a></p>
<h3>Installation</h3>
<p>Depuis le “Online Package Repository” de votre Console Constellation, déployez le package Vera :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/10/image-135.png"><img class="colorbox-3514"  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-124.png" alt="image" width="350" height="213" 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 l’adresse IP (ou DNS) de votre Vera :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/10/image-136.png"><img class="colorbox-3514"  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-125.png" alt="image" width="350" height="188" border="0" /></a></p>
<p align="left">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="Vera"&gt;
  &lt;settings&gt;
    &lt;setting key="VeraHost" value=192.168.x.x /&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="478"><u>Description</u></td>
</tr>
<tr>
<td valign="top" width="10"><strong>VeraHost</strong></td>
<td valign="top" width="10">String</td>
<td valign="top" width="10">Obligatoire</td>
<td valign="top" width="478">L’IP ou le DNS de votre box domotique Vera</td>
</tr>
</tbody>
</table>
<h4>Les StateObjects</h4>
<p>Vous retrouverez autant de StateObjects que périphérique Z-Wave enregistré sur votre Vera :</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>Vera_&lt;&lt; SerialNumber &gt;&gt;</strong></td>
<td valign="top" width="10">VeraNet.VeraDevice</td>
<td valign="top" width="446">Représente l’état de la Vera (modèle, S/N, version, etc..)</td>
</tr>
<tr>
<td valign="top" width="10"><strong>&lt;&lt; Nom de la scène &gt;&gt;</strong></td>
<td valign="top" width="10">VeraNet.Scene</td>
<td valign="top" width="446">Représente l’état d’une scène</td>
</tr>
<tr>
<td valign="top" width="10"><strong>&lt;&lt; Nom du device &gt;&gt;</strong></td>
<td valign="top" width="10">VeraNet.TemperatureSensor</td>
<td valign="top" width="446">Représente l’état d’un capteur de température</td>
</tr>
<tr>
<td valign="top" width="10"><strong>&lt;&lt; Nom du device &gt;&gt;</strong></td>
<td valign="top" width="10">VeraNet.HumiditySensor</td>
<td valign="top" width="446">Représente l’état d’un capteur d’humidité</td>
</tr>
<tr>
<td valign="top" width="10"><strong>&lt;&lt; Nom du device &gt;&gt;</strong></td>
<td valign="top" width="10">VeraNet.WindowCovering</td>
<td valign="top" width="446">Représente l’état d’un volet</td>
</tr>
<tr>
<td valign="top" width="10"><strong>&lt;&lt; Nom du device &gt;&gt;</strong></td>
<td valign="top" width="10">VeraNet.DimmableLight</td>
<td valign="top" width="446">Représente l’état d’un Switch Dimmable</td>
</tr>
<tr>
<td valign="top" width="10"><strong>&lt;&lt; Nom du device &gt;&gt;</strong></td>
<td valign="top" width="10">VeraNet.Switch</td>
<td valign="top" width="446">Représente l’état d’un Switch</td>
</tr>
<tr>
<td valign="top" width="10"><strong>&lt;&lt; Nom du device &gt;&gt;</strong></td>
<td valign="top" width="10">VeraNet.PowerMeter</td>
<td valign="top" width="446">Représente l’état d’un capteur d’énergie</td>
</tr>
<tr>
<td valign="top" width="10"><strong>&lt;&lt; Nom du device &gt;&gt;</strong></td>
<td valign="top" width="10">VeraNet.SecuritySensor</td>
<td valign="top" width="446">Représente l’état d’un capteur de sécurité</td>
</tr>
</tbody>
</table>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/10/image-137.png"><img class="colorbox-3514"  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-126.png" alt="image" width="350" height="223" border="0" /></a></p>
<h4 align="left">Les MessageCallbacks</h4>
<p>Le package expose 3 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>RunScene</strong></td>
<td valign="top" width="141">Boolean</td>
<td valign="top" width="407">Déclenche une scène sur la Vera</td>
</tr>
<tr>
<td valign="top" width="10"><strong>SetDimmableLevel</strong></td>
<td valign="top" width="141">Boolean</td>
<td valign="top" width="407">Définit le niveau (0-100%) d’un device “Dimmable”</td>
</tr>
<tr>
<td valign="top" width="10"><strong>SetSwitchState</strong></td>
<td valign="top" width="141">Boolean</td>
<td valign="top" width="407">Définit le statuts (On/Off) d’un device “Switch”</td>
</tr>
<tr>
<td valign="top" width="10"><strong>SetWindowCoveringAction</strong> <i></i></td>
<td valign="top" width="141">Boolean</td>
<td valign="top" width="407">Définit l’ordre (montée, décente ou arrêt) d’un volet (WindowsCovering)</td>
</tr>
</tbody>
</table>
<h3 align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/10/image-138.png"><img class="colorbox-3514"  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-127.png" alt="image" width="350" height="210" border="0" /></a></h3>
<h3 align="left">Quelques exemples</h3>
<ul>
<li>Afficher l’état et contrôler chaque lampe et volet sur un Dashboard HTML</li>
<li>Gérer les volets automatiquement en fonction de la luminosité avec un package C#</li>
<li>Piloter des lampes Hue en suivant un schéma depuis un interrupteur Fibaro grâce à un package C#</li>
<li>Piloter sa domotique Z-Wave depuis un montre Samsung Gear S2</li>
<li>Synchroniser la lampe du bureau avec la session Windows</li>
</ul>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/package-library/vera/">Vera : la domotique Z-Wave 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/vera/feed/</wfw:commentRss>
			<slash:comments>5</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-22 04:36:49 by W3 Total Cache
-->