﻿<?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 Raspberry - Constellation</title>
	<atom:link href="https://developer.myconstellation.io/tag/raspberry/feed/" rel="self" type="application/rss+xml" />
	<link>https://developer.myconstellation.io/tag/raspberry/</link>
	<description>Votre plateforme d&#039;interconnexion</description>
	<lastBuildDate>Thu, 19 Apr 2018 05:09:28 +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 Raspberry - Constellation</title>
	<link>https://developer.myconstellation.io/tag/raspberry/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Constellation à la DevCon #4 le 26 octobre à l&#8217;école 42</title>
		<link>https://developer.myconstellation.io/blog/devcon-4-le-26-octobre-lecole-42/</link>
					<comments>https://developer.myconstellation.io/blog/devcon-4-le-26-octobre-lecole-42/#comments</comments>
		
		<dc:creator><![CDATA[Sebastien Warin]]></dc:creator>
		<pubDate>Fri, 20 Oct 2017 09:02:14 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Raspberry]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Supervision]]></category>
		<category><![CDATA[Package]]></category>
		<category><![CDATA[conférence]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Sentinel]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[Constellation]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[Web Platform Installer]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=5604</guid>

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

					<description><![CDATA[<p>Dans un précédent tutoriel, nous avons découvert comment créer un capteur de luminosité avec un ESP8266 connecté par Wifi. Ici je vous propose de créer un capteur extérieur piloté par un Raspberry Pi. Pour être exact, le Raspberry Pi sera</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/tutorials/un-capteur-de-luminosite-exterieur-pilote-par-raspberry/">Un capteur de luminosité extérieur piloté par un Raspberry avec un package Python</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Dans un précédent tutoriel, nous avons découvert comment créer un <a href="/tutorials/creer-un-capteur-de-temperature-humidite-et-luminosite-connecte/">capteur de luminosité avec un ESP8266</a> connecté par Wifi. Ici je vous propose de créer un capteur extérieur piloté par un Raspberry Pi.</p>
<p>Pour être exact, le Raspberry Pi sera installé en intérieur, connecté au réseau filaire Ethernet et relié par un câble à un boitier étanche installé sur le toit qui contiendra une photorésistance et/ou un capteur TSL2561.</p>
<p>Nous allons utiliser un <a href="/constellation-platform/constellation-sentinel/constellation-raspberry-pi/">Raspberry B+ version 1</a> sur lequel <a href="/getting-started/ajouter-des-sentinelles/">nous installerons une sentinelle</a> pour pouvoir déployer notre package depuis Visual Studio. Le package d’acquisition des données sera <a href="/getting-started/creez-votre-premier-package-constellation-en-python/">écrit en Python</a>.</p>
<h3>Prérequis</h3>
<ul>
<li>Un serveur Constellation</li>
<li>Un <a href="/constellation-platform/constellation-sentinel/constellation-raspberry-pi/">Raspberry Pi </a>sur lequel <a href="/getting-started/ajouter-des-sentinelles/">nous installerons une sentinelle</a></li>
<li>Une photorésistance avec un condensateur 1uF et/ou un capteur TSL2561</li>
<li>Visual Studio avec le SDK Constellation</li>
</ul>
<h3>Mesurer la luminosité ambiante avec une photorésistance</h3>
<h4>Le montage</h4>
<p>Tout d&rsquo;abord, il nous faut un boitier étanche avec un couvercle transparent (pour mesurer la luminosité c&rsquo;est mieux !) :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/P1160386-1.jpg"><img class="colorbox-4730"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Boite étanche" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/P1160386_thumb-1.jpg" alt="Boite étanche" width="379" height="243" border="0" /></a></p>
<p>Sur une plaque epoxy, soudons la photorésistance avec un condensateur 1uF.</p>
<p>Une des deux pattes de la photorésistance sera reliée sur la pin « 3v3 » du Raspberry et la deuxième sera reliée à une entrée du Raspberry, disons la pin n°12 (soit la GPIO #18). Toujours sur cette 2ème patte, on soudera le pole « + » du condensateur. L&rsquo;autre pole du condensateur, celle marquée « -« , devra être reliée à la masse, sur l&rsquo;une des pins « GND » du Raspberry.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/P1160398-1.jpg"><img class="colorbox-4730"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Photorésistance" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/P1160398_thumb-1.jpg" alt="Photorésistance" width="310" height="298" border="0" /></a></p>
<p>On a donc trois fils connectés entre le Raspberry et notre capteur : le 3V3 et la masse (Gnd) pour l&rsquo;alimentation et un pour le signal (GPIO #18). L&rsquo;idée est donc de « charger » le condensateur et de chronométrer le temps qu&rsquo;il mets à se décharger.</p>
<p>Plus il y a de lumière et moins la résistance est forte, autrement dit le condensateur se déchargera très rapidement. A l&rsquo;inverse, plus il fait sombre et plus la résistance sera forte. Autrement dit, moins il y a de lumière et moins vite se déchargera le condensateur.</p>
<p>On voit sur les photos ci-dessous, le fil Orange pour le 3V3, le fil Bleu pour la GPIO et le fil Blanc pour la masse (Gnd) :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/P1160424-1.jpg"><img class="colorbox-4730"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Installation dans le boitier" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/P1160424_thumb-1.jpg" alt="Installation dans le boitier" width="347" height="264" border="0" /></a><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/P1160435-1.jpg"><img class="colorbox-4730"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Installation dans le boitier" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/P1160435_thumb-1.jpg" alt="Installation dans le boitier" width="351" height="264" border="0" /></a></p>
<p>Il fois les connexions réalisées, on peut refermer proprement notre boitier en vérifiant soigneusement son étanchéité avant de l&rsquo;installer sur le toit.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/P1160450-1.jpg"><img class="colorbox-4730"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Installation sur le toit" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/P1160450_thumb-1.jpg" alt="Installation sur le toit" width="354" height="300" border="0" /></a></p>
<p>Côté intérieur, on relie les 3 fils de notre boitier au Raspberry (3v3, Gnd et GPIO18), le câble Ethernet et l&rsquo;alimentation MicroUSB.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/P1160442-1.jpg"><img class="colorbox-4730"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Raspberry Pi B" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/P1160442_thumb-1.jpg" alt="Raspberry Pi B" width="354" height="335" border="0" /></a></p>
<p style="text-align: left;" align="center">Pour l&rsquo;installation du <a href="/constellation-platform/constellation-sentinel/constellation-raspberry-pi/">système sur le Raspberry suivez ce guide</a> puis <a href="/getting-started/ajouter-des-sentinelles/">installez-y une sentinelle</a>. Votre Raspberry est prêt et connecté à Constellation, reste à développer notre package Python.</p>
<h4>Programmation</h4>
<p>Depuis Visual Studio, <a href="/getting-started/creez-votre-premier-package-constellation-en-python/">créons un nouveau projet</a> de type « Constellation Python Package » que nous nommerons “LightSensor”.</p>
<p align="center"><img loading="lazy" class="wp-image-1736 size-medium aligncenter colorbox-4730" src="https://developer.myconstellation.io/wp-content/uploads/2016/04/image_thumb-300x208.png" alt="" width="300" height="208" srcset="https://developer.myconstellation.io/wp-content/uploads/2016/04/image_thumb-300x208.png 300w, https://developer.myconstellation.io/wp-content/uploads/2016/04/image_thumb.png 424w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>Renommez le fichier « Demo.py » en « Light.py » et remplacez l’intégralité du contenu par le code suivant :</p>
<p></p><pre class="crayon-plain-tag">import Constellation
import RPi.GPIO as GPIO, time, os      

MAX_READING = 30000
LIGHT_SENSOR_GPIO = 18
MEASURE_INTERVAL = 10

def OnExit():
    GPIO.cleanup()

def RCtime (RCpin):
    reading = 0
    GPIO.setup(RCpin, GPIO.OUT)
    GPIO.output(RCpin, GPIO.LOW)
    time.sleep(0.1) 
    GPIO.setup(RCpin, GPIO.IN)
    # This takes about 1 millisecond per loop cycle
    while (GPIO.input(RCpin) == GPIO.LOW):
        if (reading &gt; MAX_READING):
            break
        reading += 1
    return reading
 
def Start():
    global INTERVAL
    GPIO.setmode(GPIO.BCM)
    Constellation.OnExitCallback = OnExit
    lastSend = 0
    currentValue = 0
    count = 0
    Constellation.WriteInfo("LightSensor is ready !")
    while Constellation.IsRunning:
        currentValue = currentValue + RCtime(LIGHT_SENSOR_GPIO)
        count = count + 1
        ts = int(round(time.time()))
        if ts - lastSend &gt;= int(Constellation.GetSetting("Interval")):
            avg = int(round(currentValue / count))
            Constellation.PushStateObject("Light", avg, "int")
            currentValue = 0
            count = 0
            lastSend = ts
        time.sleep(MEASURE_INTERVAL)

Constellation.Start(Start)</pre><p></p>
<p>N’hésitez pas à <a href="/getting-started/creez-votre-premier-package-constellation-en-python/">relire le guide</a> sur la création de package Python pour bien comprendre les bases d&rsquo;un package Python.</p>
<p>Ici on démarre notre package par la méthode « Start » qui démarre une boucle pour appeler la méthode <em>RCtime</em> toutes les 10 secondes (variable MEASURE_INTERVAL).</p>
<p>La méthode <em>RCtime</em> charge le condensateur (mode output) puis passe l&rsquo;I/O en « input » et incrémente la variable « reading » en continue tant que le condensateur n&rsquo;est pas déchargé (input == « low »). Plus la valeur « reading » est élevée, plus le condensateur a mis du temps à se décharger et donc moins il y a de lumière. On a un garde-fou à « 30.000 » pour ne pas attendre indéfiniment dans le cas où il fait trop sombre.</p>
<p>Bien entendu on ne mesure pas une unité précise. Si vous déployez votre code sur un RPi V1 et V2 (plus puissant), vous n&rsquo;aurez pas la même valeur pour les mêmes conditions.</p>
<p>Chaque mesure incrémente la variable « currentValue », puis dès qu&rsquo;on atteint l&rsquo;intervalle configuré dans les Settings Constellation, on fait la moyenne des mesures on <a href="/getting-started/creez-votre-premier-package-constellation-en-python/#Publier_des_StateObjects">publie un StateObjec</a>t nommé « Light » de type « int ».</p>
<p>Dans le <a href="/concepts/package-manifest/">manifeste du package</a> (<em>PackageInfo.xml</em>), n&rsquo;oubliez pas de déclarer le setting « Interval » en lui spécifiant une valeur par défaut, ici de 10 seconde :</p>
<p></p><pre class="crayon-plain-tag">&lt;Settings&gt;
  &lt;Setting name="Interval" isRequired="false" type="Int32" defaultValue="10" description="Interval to read sensors in second" /&gt;
&lt;/Settings&gt;</pre><p></p>
<p>De même vous pouvez également modifier les informations de compatibilité des plateformes pour exclure la plateforme Windows dans la mesure où le package exploite les GPIO du Raspberry.</p>
<p></p><pre class="crayon-plain-tag">&lt;Platform id="Win32NT" isCompliant="false" /&gt;</pre><p></p>
<p>Et voilà le package est prêt, vous pouvez depuis Visual Studio le <a href="/getting-started/creez-votre-premier-package-constellation-en-python/#Publiez_votre_package">publier</a> dans votre Constellation :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-72.png"><img class="colorbox-4730"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Publication du projet" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-72.png" alt="Publication du projet" width="454" height="283" border="0" /></a></p>
<p>… puis <a href="/getting-started/creez-votre-premier-package-constellation-en-python/#Deployez_votre_package_sur_une_sentinelle">le déployer</a> sur votre sentinelle Raspberry depuis la Console Constellation, en cliquant sur le bouton “Deploy new package” :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-73.png"><img class="colorbox-4730"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Deploiement" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-73.png" alt="Deploiement" width="454" height="291" border="0" /></a></p>
<p>Dans l’assistant de déploiement vous pourrez alors personnaliser le setting “Interval” ou bien laisser la valeur par défaut que nous avons fixé à 10 (secondes) :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-74.png"><img class="colorbox-4730"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Settings" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-74.png" alt="Settings" width="454" height="248" border="0" /></a></p>
<p align="left">Sur la Console Log, le package va être téléchargé et déployé par votre sentinelle Raspberry avant de démarrer :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-75.png"><img class="colorbox-4730"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Console Log" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-75.png" alt="Console Log" width="454" height="252" border="0" /></a></p>
<p align="left">Et en vous rendant dans le StateObjects Explorer, vous verrez votre package “LightSensor” publier un StateObject “Light” avec un entier comme valeur :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-76.png"><img class="colorbox-4730"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="StateObjects Explorer" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-76.png" alt="StateObjects Explorer" width="454" height="160" border="0" /></a></p>
<p>Votre package Python est opérationnel, on peut dés à présent exploiter cette valeur dans une page Web, un script, un programme .NET ou Python, un Arduino, etc… comme nous le verrons dans la suite de cet article.</p>
<h3>Mesurer des lux avec un capteur TSL2561</h3>
<p>Pour obtenir une mesure plus fiable et surtout exploitant une échelle de mesure universelle, nous allons utiliser un capteur de luminosité TSL2561 capable de mesurer des Lux.</p>
<h4>Le montage</h4>
<p>Dans cette deuxième version, j&rsquo;ai conservé la photorésistance et simplement ajouté le capteur TSL2561. Celui-ci est également alimenté en 3V3, j&rsquo;ai donc réutilisé les deux fils (Orange et Blanc) de la photorésistance pour alimenter le capteur également.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/P1170883-1.jpg"><img class="colorbox-4730"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Ajout d'un capteur TSL2561" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/P1170883_thumb-1.jpg" alt="Ajout d'un capteur TSL2561" width="354" height="227" border="0" /></a></p>
<p style="text-align: left;" align="center">Le TSL2561 utilise l&rsquo;I²C, j&rsquo;ai donc ajouté deux fils entre le boitier étanche et le Raspberry pour connecter le capteur en i²C (SDA et SCL).</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/P1170888-1.jpg"><img class="colorbox-4730"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Ajout d'un capteur TSL2561" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/P1170888_thumb-1.jpg" alt="Ajout d'un capteur TSL2561" width="354" height="201" border="0" /></a></p>
<p style="text-align: left;" align="center">Sur le Raspberry, le SDA est la GPIO#2 et le SCL la GPIO #3, c&rsquo;est à dire juste en dessus de la pin 3v3.</p>
<h4>La programmation</h4>
<p>Le plus simple et le plus fiable pour récupérer les données du capteur TSL2561 depuis un Raspberry est d&rsquo;utiliser un programme natif. Pour cela nous allons utiliser le code publié à cette adresse : <a title="http://dino.ciuffetti.info/2014/03/tsl2561-light-sensor-on-raspberry-pi-in-c/" href="http://dino.ciuffetti.info/2014/03/tsl2561-light-sensor-on-raspberry-pi-in-c/">http://dino.ciuffetti.info/2014/03/tsl2561-light-sensor-on-raspberry-pi-in-c/</a>.</p>
<p>Il suffit récupérer les 3 fichiers C et de les compiler avec GCC pour générer le binaire. Pour vous simplifier la tache, vous pouvez directement récupérer le binaire <a href="https://developer.myconstellation.io/download/resources/tutorials/GetTSL2561">GetTSL2561 ici</a>.</p>
<p>Ajoutez ensuite un deuxième script nommé « Lux.py » dans le répertoire « Scripts » de votre projet et <strong>n&rsquo;oubliez pas</strong> d&rsquo;inclure votre script dans le package en définissant la Build Action à « Content » et en activant la copie du fichier dans le répertoire de sortie :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-77.png"><img class="colorbox-4730"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Inclure les scripts Python dans le package" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-77.png" alt="Inclure les scripts Python dans le package" width="254" height="339" border="0" /></a></p>
<p>Copiez également le binaire <a href="https://developer.myconstellation.io/download/resources/tutorials/GetTSL2561">GetTSL2561</a> dans le répertoire « Scripts » de votre package en l&rsquo;incluant également dans le package (Build Action à Content et Copy if newer).</p>
<p>Le contenu du script « Lux.py » sera :</p>
<p></p><pre class="crayon-plain-tag">import Constellation
import os, re, subprocess, time, stat

# Const
EXECUTABLE_FILENAME = "GetTSL2561"

def DoMeasure():
    # Start process
    process = subprocess.Popen("./" + EXECUTABLE_FILENAME, stdout=subprocess.PIPE)
    # Reading  output
    for line in iter(process.stdout.readline, ''):
        # Parse line
        matchObj = re.match('RC: (\d*)\((.*)\), broadband: (\d*), ir: (\d*), lux: (\d*)', line)
        if matchObj:
            # Reading value
            returnCode = int(matchObj.group(1))
            broadband = int(matchObj.group(3))
            ir = int(matchObj.group(4))
            lux = int(matchObj.group(5))
            # Push StateObject
            if returnCode != 0:
                Constellation.WriteWarn("Unknow return code %s : %s" % (returnCode, line))
            else:
                Constellation.PushStateObject("Lux", { "Broadband": broadband, "IR" : ir, "Lux" : lux }, "LightSensor.Lux")
        else:
            Constellation.WriteError("Unable to parse the output: %s" % line)

def Start():    
    # Make the "GetTSL2561" file as executable
    st = os.stat(EXECUTABLE_FILENAME)
    os.chmod(EXECUTABLE_FILENAME, st.st_mode | stat.S_IEXEC)
    Constellation.WriteInfo("LuxSensor is ready !")
    while Constellation.IsRunning:  
        DoMeasure()
        time.sleep(int(Constellation.GetSetting("Interval")))

Constellation.Start(Start)</pre><p></p>
<p>Comme pour le script « Light.py », on déclare la méthode « <em>Start</em> » comme méthode de démarrage. Celle-ci boucle tant que le package est démarré à l&rsquo;intervalle défini par le setting « Interval » qu&rsquo;on a déclaré à 10 secondes par défaut dans le manifeste.</p>
<p>A chaque itération, on invoque la méthode « <em>DoMeasure</em> » qui démarre le programme « <em>GetTSL2561</em> » et on parse avec une regex le résultat de la sortie du programme (<em>process.stdout</em>) pour extraire le code de retour, le broadband (spectre visible), l&rsquo;infrarouge et le nombre de lux courant mesuré par le capteur.</p>
<p>Si le code de retour est égal à 0 c&rsquo;est que la mesure est correcte, on publie alors un StateObject nommé « Lux » contenant les trois propriétés mesurées : Broadband, IR et Lux.</p>
<p></p><pre class="crayon-plain-tag">Constellation.PushStateObject("Lux", { "Broadband": broadband, "IR" : ir, "Lux" : lux }, "LightSensor.Lux")</pre><p></p>
<p>Attention avant de déployer cette nouvelle version<strong> il faut activer l&rsquo;I²C sur le Raspberry</strong>. Pour cela lancer la commande « <em>sudo raspi-config</em> » puis dans le menu « <em>Advanced Options</em> » activez l&rsquo;I²C et chargez le module par défaut au démarrage.</p>
<p>On peut maintenant publier cette nouvelle version depuis Visual Studio et lancer un « Reload » sur notre package pour déployer cette nouvelle version sur notre Rapsberry.</p>
<p>Désormais nous avons deux StateObjects publiés par ce package : « <em>Light</em> » via la photorésistance et « <em>Lux</em> » via le TSL2561 :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-78.png"><img class="colorbox-4730"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="StateObjects Explorer" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-78.png" alt="StateObjects Explorer" width="454" height="133" border="0" /></a></p>
<p>Notre nouveau StateObject « Lux » est un objet complexe contenant trois propriétés :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-79.png"><img class="colorbox-4730"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Detail du StateObject Lux" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-79.png" alt="Detail du StateObject Lux" width="454" height="330" border="0" /></a></p>
<h3>Exploitez les données</h3>
<p>Notre package Python vit sa vie sur notre Raspberry et publie à intervalle régulier deux StateObjects sur base des mesures réalisées par la photorésistance et/ou le capteur de lux TSL2561.</p>
<p>On peut maintenant écrire des pages Web, des scripts, des packages .NET ou Python, Arduino, etc… qui exploiteront ces mesures en temps réel.</p>
<h4>Un dashboard Web</h4>
<p>Depuis <a href="/getting-started/connectez-vos-pages-web-constellation/">une page Web</a>, il suffit d&rsquo;ajouter un <a href="/client-api/javascript-api/consommer-constellation-angular-js/">StateObjectLink</a>. Vous pouvez vous inspirer <a href="/tutorials/creer-un-capteur-de-temperature-humidite-et-luminosite-connecte/#Etape_3_Une_page_Web_pour_afficher_votre_capteur_en_temps_reel">de ce tutoriel</a> par exemple.</p>
<p></p><pre class="crayon-plain-tag">constellation.registerStateObjectLink("*", "LightSensor", "Lux", "*", function (so) {
  $scope.$apply(function () {
    console.log("Lux = ", so.Value.Lux);
  });
});</pre><p></p>
<p>Par exemple sur le <a href="https://sebastien.warin.fr/2015/07/15/3033-s-panel-une-interface-domotique-et-iot-multi-plateforme-avec-cordova-angularjs-et-constellation-ou-comment-crer-son-dashboard-domotique-mural/" target="_blank" rel="noopener noreferrer">projet S-Panel</a> avec quelques composants Bootstrap :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-80.png"><img class="colorbox-4730"  loading="lazy" title="S-Panel" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-80.png" alt="S-Panel" width="244" height="131" border="0" /></a></p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-81.png"><img class="colorbox-4730"  loading="lazy" title="S-Panel" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-81.png" alt="S-Panel" width="354" height="210" border="0" /></a></p>
<h4>Un programme .NET</h4>
<p>Vous pouvez là aussi vous inspirer <a href="/tutorials/creer-un-capteur-de-temperature-humidite-et-luminosite-connecte/#Etape_4_optionnelle_creer_un_package_NET_pour_exploiter_les_donnees_du_capteur">de ce tutoriel</a>. En clair, il suffit dans votre code C# d&rsquo;ajouter des <a href="/client-api/net-package-api/consommer-des-stateobjects/">StateObjectLinks </a>avec l&rsquo;API.NET :</p>
<p></p><pre class="crayon-plain-tag">[StateObjectLink("LightSensor", "Lux")]
public StateObjectNotifier Lux { get; set; }</pre><p></p>
<p>Ainsi la propriété .NET nommée « Lux » ci-dessus sera liée en temps réel au StateObject « Lux » du package « LigthSensor ».</p>
<p>Vous pouvez ajouter des événements dès que la valeur change :</p>
<p></p><pre class="crayon-plain-tag">this.Lux.ValueChanged += (s, e) =&gt;
{
    PackageHost.WriteInfo($"Nouvelle mesure à {this.Lux.Value.LastUpdate} = {this.Lux.DynamicValue.Lux} lux");
};</pre><p></p>
<p><img loading="lazy" class="alignnone size-medium wp-image-4596 aligncenter colorbox-4730" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-57-300x153.png" alt="" width="300" height="153" srcset="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-57-300x153.png 300w, https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-57.png 404w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>Vous pouvez ainsi faire ce que bon vous semble avec cette information. Par exemple allumer automatiquement les lumières si la luminosité est trop faible, fermer les volets, enregistrer la valeur des Lux dans un fichier Excel ou une base de données, etc.. etc..</p>
<h4>Historisation avec ElasticSearch / Kibana</h4>
<p>En utilisant le package <a href="/package-library/graylogconnector">Graylog </a>du <a href="/plateforme/package-repository/">catalogue de package</a>, on peut historiser les mesures de notre capteur dans une base ElasticSearch.</p>
<p>Dans la configuration du package Graylog, on aura quelque chose comme :</p>
<p></p><pre class="crayon-plain-tag">&lt;graylogConfiguration xmlns="urn:GraylogConnector" sendPackageLogs="false" sendPackageStates="true" sendSentinelUpdates="true"&gt;
    &lt;subscriptions&gt;
        &lt;subscription package="LightSensor" name="Lux" /&gt;
        &lt;!-- ..... --&gt;
    &lt;/subscriptions&gt;
    &lt;outputs&gt;
        &lt;gelfOutput name="Graylog server UDP" host="graylog.ajsinfo.loc" port="12201" protocol="Udp" /&gt;
    &lt;/outputs&gt;
&lt;/graylogConfiguration&gt;</pre><p></p>
<p>La documentation du package <a href="/package-library/graylogconnector">Graylog</a> est disponible <a href="/package-library/graylogconnector">ici</a>. En résumé on crée ici un abonnement pour la StateObject « Lux » du package « LightSensor » et dans les « outputs » on a déclaré notre serveur Graylog.</p>
<p>De ce fait dès que le StateObject « Lux » est mis à jour par notre package Python, le package Graylog enregistre la nouvelle version du StateObject sur le serveur Graylog qui lui-même utilise ElasticSearch comme base de stockage.</p>
<p>Ainsi on pourra utiliser un outil comme Kibana pour visualiser l&rsquo;évolution de notre StateObject :</p>
<p><img loading="lazy" class="aligncenter colorbox-4730" title="Kibana" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-83.png" alt="Kibana" width="454" height="304" border="0" /></p>
<p>Un article complet sur le sujet <a href="https://sebastien.warin.fr/2015/10/09/3180-creez-votre-home-analytics-analyse-et-reporting-de-votre-domotique-informatique-et-objets-connectes-avec-elasticsearch-graylog-kibana-constellation/" target="_blank" rel="noopener noreferrer">a été publié ici</a>.</p>
<h4>Stats avec Cacti</h4>
<p>On peut également écrire un script pour récupérer notre StateObject « Lux » depuis l&rsquo;<a href="/client-api/rest-api/interface-rest-consumer/">interface REST</a> qu&rsquo;on ajoutera en tant que « <em>Data Input Methods</em> » dans Cacti pour pouvoir créer des graphiques facilement :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-82.png"><img class="colorbox-4730"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Cacti" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-82.png" alt="Cacti" width="454" height="358" border="0" /></a></p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/tutorials/un-capteur-de-luminosite-exterieur-pilote-par-raspberry/">Un capteur de luminosité extérieur piloté par un Raspberry avec un package Python</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://developer.myconstellation.io/tutorials/un-capteur-de-luminosite-exterieur-pilote-par-raspberry/feed/</wfw:commentRss>
			<slash:comments>1</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[Javascript]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Domotique]]></category>
		<category><![CDATA[Raspberry]]></category>
		<category><![CDATA[Volet]]></category>
		<category><![CDATA[Python]]></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>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Mise en cache de page à l’aide de Disk: Enhanced 

Served from: developer.myconstellation.io @ 2026-01-23 02:50:40 by W3 Total Cache
-->