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

<image>
	<url>https://developer.myconstellation.io/wp-content/uploads/2016/02/256x256-e1457476015859.png</url>
	<title>Tag Linux - Constellation</title>
	<link>https://developer.myconstellation.io/tag/linux/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<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>Jeu de fléchettes connecté à Constellation</title>
		<link>https://developer.myconstellation.io/showcases/jeu-de-flechettes-connecte/</link>
					<comments>https://developer.myconstellation.io/showcases/jeu-de-flechettes-connecte/#respond</comments>
		
		<dc:creator><![CDATA[Sebastien Warin]]></dc:creator>
		<pubDate>Sun, 20 Nov 2016 18:44:59 +0000</pubDate>
				<category><![CDATA[Showcases]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[Flechette]]></category>
		<category><![CDATA[Jeu]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=4642</guid>

					<description><![CDATA[<p>Projet réalisé par Buguel Maxime, Cartiaux Charles, Douillard Thomas et Roeland Quentin en Novembre 2016. Introduction Nous sommes quatre étudiants en Master 2 à l’ISEN Lille. Nous nous sommes récemment découverts une passion pour les fléchettes, surement lié à la présence d’une</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/showcases/jeu-de-flechettes-connecte/">Jeu de fléchettes connecté à Constellation</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Projet réalisé par Buguel Maxime, Cartiaux Charles, Douillard Thomas et Roeland Quentin en Novembre 2016.</p>
<h3>Introduction</h3>
<p>Nous sommes quatre étudiants en Master 2 à l’ISEN Lille. Nous nous sommes récemment découverts une passion pour les fléchettes, surement lié à la présence d’une cible dans le bar que nous fréquentons (avec modération) après les cours.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image18.png"><img class="colorbox-4642"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Cible de fléchettes Phoenix-Darts" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image18_thumb.png" alt="Cible de fléchettes Phoenix-Darts" width="156" height="240" border="0" /></a></p>
<p>La découverte de cette nouvelle passion nous a poussé à ressortir du placard les cibles avec lesquelles nous avons pu jouer étant plus jeunes. Mais le plaisir de jouer aux fléchettes n&rsquo;était pas le même. C’est vrai que l&rsquo;écran LCD de 2cm par 4cm et le haut parleur 8-bit n’offre pas la même ambiance que celle que nous pouvons avoir sur une borne de bistrot.</p>
<p>Il existe de nombreux tutoriel pour se créer une borne d’arcade chez soi pour les fans de rétro-gaming mais nous n’avons rien trouvé pour “<i>pimper</i>” notre jeu de fléchettes, mis à part un article de <a href="https://danielfett.de/en/projects/raspberry-pidart-electronic-dartboard-superpowers/">blog</a> qui sans expliquer les détails de la transformation nous a servie de “Preuve de faisabilité”.</p>
<p>Mais nous avons décidé d&rsquo;aller un peu plus loin que de simplement améliorer l&rsquo;expérience utilisateur en optimisant l’affichage ainsi que les effets sonores. Afin d&rsquo;intégrer la cible comme un objet connecté à part entière, Constellation a été utilisé</p>
<h3>Connecter la cible</h3>
<p>Côté matériel la première étape est de faire l&rsquo;acquisition d’une cible électronique (bas de gammes afin de limiter les coûts), nous avons choisis le jeu de fléchette le moins chère que l’on ai pu trouver : 19,99 euros.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image27.png"><img class="colorbox-4642"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Jeu de fléchette electronique" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image27_thumb.png" alt="Jeu de fléchette electronique" width="210" height="240" border="0" /></a></p>
<p>La détection d’une fléchette par la cible se fait à l’aide de 2 nappes en plastiques séparées par une épaisseur en mousse trouée.</p>
<p>On remarque que le jeu est divisé en 2 moitiés (Par l’axe qui passe entre la zone 9 et 14) l’une des 2 nappes en plastique contient 7 pistes conductrices:</p>
<ul>
<li>une pour toutes les zones “Simple” de la moitié de la cible</li>
<li>une pour toutes les zones “Simple” de l’autre moitié de la cible</li>
<li>une pour toutes les zones “Double” de la moitié de la cible</li>
<li>une pour toutes les zones “Double” de l’autre moitié de la cible</li>
<li>une pour toutes les zones “Triple” de la moitié de la cible</li>
<li>une pour toutes les zones “Triple” de l’autre moitié de la cible</li>
<li>une pour le “Bull” Simple et Double</li>
</ul>
<p>L’autre nappe contient 10 pistes, 8 des pistes correspondent chacune à une paire de zone numérotée, chacune des zones appartenant à une moitié différente ((9, 14) par exemple). Les 2 pistes restantes ont, en plus de la paire de zone, une zone du “Bull”.</p>
<p>On se retrouve donc avec ce tableau qui permet de déterminer quelle zone a été touchée. Il suffit d’alimenter les 7 pistes “OUT” une par une et de lire l&rsquo;état des 10 pistes “IN”. Si on voit que l’une des pistes IN est alimenté alors on peut en déduire la zone touchée.</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="109">OUT \ IN</td>
<td valign="top" width="56">9</p>
<p>14</p>
<p>DB</td>
<td valign="top" width="56">12</p>
<p>11</p>
<p>SB</td>
<td valign="top" width="56">5</p>
<p>8</p>
<p>&#8211;</td>
<td valign="top" width="56">20</p>
<p>16</p>
<p>&#8211;</td>
<td valign="top" width="56">10</p>
<p>15</p>
<p>&#8211;</td>
<td valign="top" width="56">2</p>
<p>6</p>
<p>&#8211;</td>
<td valign="top" width="56">17</p>
<p>13</p>
<p>&#8211;</td>
<td valign="top" width="56">3</p>
<p>4</p>
<p>&#8211;</td>
<td valign="top" width="56">19</p>
<p>18</p>
<p>&#8211;</td>
<td valign="top" width="56">7</p>
<p>1</p>
<p>&#8211;</td>
</tr>
<tr>
<td valign="top" width="109">TRIPLE</td>
<td valign="top" width="56">T9</td>
<td valign="top" width="56">T12</td>
<td valign="top" width="56">T5</td>
<td valign="top" width="56">T20</td>
<td valign="top" width="56">T10</td>
<td valign="top" width="56">T2</td>
<td valign="top" width="56">T17</td>
<td valign="top" width="56">T3</td>
<td valign="top" width="56">T19</td>
<td valign="top" width="56">T7</td>
</tr>
<tr>
<td valign="top" width="109">DOUBLE</td>
<td valign="top" width="56">D9</td>
<td valign="top" width="56">D12</td>
<td valign="top" width="56">D5</td>
<td valign="top" width="56">D20</td>
<td valign="top" width="56">D10</td>
<td valign="top" width="56">D2</td>
<td valign="top" width="56">D17</td>
<td valign="top" width="56">D3</td>
<td valign="top" width="56">D19</td>
<td valign="top" width="56">D7</td>
</tr>
<tr>
<td valign="top" width="109">SINGLE</td>
<td valign="top" width="56">S9</td>
<td valign="top" width="56">S12</td>
<td valign="top" width="56">S5</td>
<td valign="top" width="56">S20</td>
<td valign="top" width="56">S10</td>
<td valign="top" width="56">S2</td>
<td valign="top" width="56">S17</td>
<td valign="top" width="56">S3</td>
<td valign="top" width="56">S19</td>
<td valign="top" width="56">S7</td>
</tr>
<tr>
<td valign="top" width="109">BULL</td>
<td valign="top" width="56">DB</td>
<td valign="top" width="56">SB</td>
<td valign="top" width="56">&#8211;</td>
<td valign="top" width="56">&#8211;</td>
<td valign="top" width="56">&#8211;</td>
<td valign="top" width="56">&#8211;</td>
<td valign="top" width="56">&#8211;</td>
<td valign="top" width="56">&#8211;</td>
<td valign="top" width="56">&#8211;</td>
<td valign="top" width="56">&#8211;</td>
</tr>
<tr>
<td valign="top" width="109">SINGLE</td>
<td valign="top" width="56">S14</td>
<td valign="top" width="56">S11</td>
<td width="56">S8</td>
<td valign="top" width="56">S16</td>
<td valign="top" width="56">S15</td>
<td valign="top" width="56">S6</td>
<td valign="top" width="56">S13</td>
<td valign="top" width="56">S4</td>
<td valign="top" width="56">S18</td>
<td valign="top" width="56">S1</td>
</tr>
<tr>
<td valign="top" width="109">DOUBLE</td>
<td valign="top" width="56">D14</td>
<td valign="top" width="56">D11</td>
<td valign="top" width="56">D8</td>
<td valign="top" width="56">D16</td>
<td valign="top" width="56">D15</td>
<td valign="top" width="56">D6</td>
<td valign="top" width="56">D13</td>
<td valign="top" width="56">D4</td>
<td valign="top" width="56">D18</td>
<td valign="top" width="56">D1</td>
</tr>
<tr>
<td valign="top" width="109">TRIPLE</td>
<td valign="top" width="56">T14</td>
<td valign="top" width="56">T11</td>
<td valign="top" width="56">T8</td>
<td valign="top" width="56">T16</td>
<td valign="top" width="56">T15</td>
<td valign="top" width="56">T6</td>
<td valign="top" width="56">T13</td>
<td valign="top" width="56">T4</td>
<td valign="top" width="56">T18</td>
<td valign="top" width="56">T1</td>
</tr>
</tbody>
</table>
<p>Maintenant que l’on sait comment ça marche, il ne reste plus qu&rsquo;à le connecter aux GPIO du microcontrôleur de son choix.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image23.png"><img class="colorbox-4642"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Raspberry Pi" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image23_thumb.png" alt="Raspberry Pi" width="404" height="229" border="0" /></a></p>
<p>Dans ce tutoriel nous avons choisi de connecter la cible à un Raspberry Pi B+ mais il est tout à fait possible de le faire avec un Arduino, un ESP8226 ou encore un autre type de Pi. La seule contrainte est qu’il faut au moins 17 GPIO, il faudra donc augmenter le nombre de GPIO à l’aide d’un <i>MCP23017-E/SP 16 I/O Expander.</i></p>
<p>Il faudra aussi que soit installé sur le device une sentinelle constellation.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-67.png"><img class="colorbox-4642"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Schéma électronique pour l'acquisition depuis la cible" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-67.png" alt="Schéma électronique pour l'acquisition depuis la cible" width="402" height="338" border="0" /></a></p>
<p>Les nappes étant en plastique on ne peut venir souder dessus, on choisit donc de venir souder les fils sur le circuit imprimé directement, ensuite on peut remonter le tout. Et pour tester on les relies au Pi à l’aide d’une plaque de test (BreadBoard).</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image16.png"><img class="colorbox-4642"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Connexions au RPi" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image16_thumb.png" alt="Connexions au RPi" width="404" height="229" border="0" /></a></p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image21.png"><img class="colorbox-4642"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="PCB du jeu de flechette" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image21_thumb.png" alt="PCB du jeu de flechette" width="404" height="304" border="0" /></a></p>
<p>On peut maintenant déployer un package sur le pi pour connecter notre cible a constellation. Sur Le raspberry Pi, le plus simple est de faire un package python en utilisant la librairie GPIO.</p>
<p>Cette petite fonction va permettre de transformer un couple de GPIOs (entré, sortie), en un message pour constellation contenant une zone de la cible.</p>
<p></p><pre class="crayon-plain-tag">def dartTouch(pinin,pinout):
    outputDictionary = {}
    outputDictionary[PIN_TRIPPLE_1] = [3,1]
    outputDictionary[PIN_DOUBLE_1] = [2,1]
    outputDictionary[PIN_SINGLE_1] = [1,1]
    outputDictionary[PIN_BULL] = [0,2]
    outputDictionary[PIN_SINGLE_0] = [1,0]
    outputDictionary[PIN_DOUBLE_0] = [2,0]
    outputDictionary[PIN_TRIPPLE_0] = [3,0]

    inputDictionary = {}
    inputDictionary[PIN_9_14_B] = [9,14,50]
    inputDictionary[PIN_20_16_1] = [20,16,1]
    inputDictionary[PIN_12_11_B] = [12,11,25]
    inputDictionary[PIN_5_8_2] = [5,8,2]
    inputDictionary[PIN_6_2_3] = [6,2,3]
    inputDictionary[PIN_10_15_4] = [10,15,4]
    inputDictionary[PIN_13_17_5] = [13,17,5]
    inputDictionary[PIN_4_3_6] = [4,3,6]
    inputDictionary[PIN_18_19_7] = [18,19,7]
    inputDictionary[PIN_1_7_8] = [1,7,8]


    isButton = False
    value = inputDictionary[pinin][outputDictionary[pinout][1]]
    multiple = outputDictionary[pinout][0]
    if(multiple == 0):
        isButton = True
        multiple = 1
        if(value == 50):
            multiple = 2
            value = 25
            isButton = False
        if(value == 25):
            multiple = 1
            isButton = False
    if isButton :
       Constellation.SendMessage("DartManager", "ButtonPressed",[ value ])
    else:
       Constellation.SendMessage("DartManager", "onDartTargetTouch",[ multiple, value ])
    time.sleep(0.8)</pre><p></p>
<p>Il ne reste plus qu&rsquo;à alimenter les pins de sorties une à une et de lire l’état des pins en entrée.</p>
<p></p><pre class="crayon-plain-tag">while True:
  for pinout in outs:
    GPIO.output(pinout,GPIO.HIGH)
    for pinin in ins:
      if(GPIO.input(pinin)):
        dartTouch(pinin,pinout)
    GPIO.output(pinout,GPIO.LOW)</pre><p></p>
<p>Une fois notre prototype avec la BreadBoard testé et approuvé nous avons pus réaliser un deuxième prototype sur lequel nous avons juste à venir brancher les pins de notre pi et de notre cible.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image08.png"><img class="colorbox-4642"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="BreadBoard d'interface avec le RPi" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image08_thumb.png" alt="BreadBoard d'interface avec le RPi" width="304" height="279" border="0" /></a></p>
<p>Ce prototype moins encombrant, apporte également plus de robustesse à notre jeu dans l’optique d’une utilisation plus fréquente.</p>
<h3>Constellation</h3>
<p>Afin de pouvoir envoyer l’information qu’une fléchette a touché la cible, de pouvoir traiter l’information pour par exemple savoir si l’utilisateur en a déjà lancé trois et ainsi que cette dernière ne compte pas, puis afficher cette information sur les différentes interfaces graphiques, nous devions créer un bus de données.</p>
<p>Pour cela, nous avons utilisé le principe des “StateObject” et ”MessageCallBack” de Constellation afin de communiquer entre chacune des différentes parties.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image22.png"><img class="colorbox-4642"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Architecture avec Constellation" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image22_thumb.png" alt="Architecture avec Constellation" width="440" height="209" border="0" /></a></p>
<p>Deux packages Constellation ont donc été créé, l’un en Python, pour la détection des fléchettes et l’autre en C# pour la gestion de parties.</p>
<p>Ainsi lorsque qu’une fléchette touche la cible, le package en Python va envoyer cette information au package C# en appelant la méthode “onDartTargetTouch”,</p>
<p></p><pre class="crayon-plain-tag">Constellation.SendMessage("DartManager", "onDartTargetTouch",[ multiple, value ])</pre><p></p>
<p>qui va, après avoir effectué les modifications engendrées par ce coup sur la partie, mettre à jour le StateObject ‘’DartGame’’ afin que, l’UI qui s’y est abonné, soit informé.</p>
<p></p><pre class="crayon-plain-tag">[MessageCallback]
void onDartTargetTouch(short multiple,short value)
{
   PackageHost.WriteInfo(multiple + " "+ value);
   if(game.applyShoot(new Shoot(multiple, value), this)){}
   update();
}

private void update()
{
   PackageHost.PushStateObject&lt;AbstractDartGame&gt;("DartGame", game);
}</pre><p></p>
<p>Le StateObject “DartGame” représentant la partie actuelle (joueurs, tours, tirs, etc..) sous forme d’un objet JSON.</p>
<p>Le but étant, une fois les paquets installés sur chacune des machines respectives (“sentinelle” pour Constellation), de pouvoir tout contrôler depuis l’UI. Des MessageCallBack sont donc mis à la disposition de cette dernière, représentant ainsi l’ensemble des fonctions nécessaires à la gestion d’une partie.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image01.png"><img class="colorbox-4642"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="MessageCallbacks du DartManager" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image01_thumb.png" alt="MessageCallbacks du DartManager" width="454" height="186" border="0" /></a></p>
<h3>User Experience</h3>
<p>Le gros point noir de notre cible, comme nous l’avons décrit en introduction, était l’interaction avec les utilisateurs et comme vous pouvez vous en douter après les modifications que nous avons apportés à notre cible l’afficheur de score d’origine n’est plus fonctionnel. Pour le remplacer nous avons donc réalisé un Dashboard sous la forme d’une application web.</p>
<h4>Le Dashboard</h4>
<p>Le Dashboard comme nous l’avons évoqué ci-dessus est une application qui nous permet d’afficher les scores provenant de notre Constellation simplement en s’abonnant au StateObject du manager de jeu. L’interface de ce Dashboard a été réalisé avec AngularJS et Angular Material pour le design. En effet en nous abonnant à un StateObject via Constellation, le Dashboard est notifié de chaque modification apportées à la partie de fléchette en cours et de modifier l’affichage dynamiquement grâce à l’objet JSON fournis par Constellation tout cela en simplement quelques lignes de codes :</p>
<p></p><pre class="crayon-plain-tag">constellation.registerStateObjectLink("*", "*", "DartGame", "*", function (so) {
    $scope.$apply(function() {
       $scope.constelationGame = so.Value;
    });           
});</pre><p></p>
<p>La connection du Dahboard à Constellation permet également d’exposer des méthodes afin de déclencher des effets sonores sur certains lancers afin de dynamiser la partie.</p>
<p></p><pre class="crayon-plain-tag">constellation.subscribeMessages("DartsDashboard");
constellation.registerMessageCallback("Triple", function (msg) {
    var audio = new Audio('sounds/Triple.wav');
    audio.play();
});
                
constellation.registerMessageCallback("Double", function (msg) {
    var audio = new Audio('sounds/Double.wav');
    audio.play();
});</pre><p></p>
<p>Pour le design, Angular Material nous a permis de développer rapidement et simplement une interface esthétique.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image26.png"><img class="colorbox-4642"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Interface du Dahboard" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image26_thumb.png" alt="Interface du Dahboard" width="450" height="411" border="0" /></a></p>
<h4>L’application mobile</h4>
<p>Toujours dans le but d’améliorer les fonctionnalités offertes par notre jeu customisé, une application mobile accompagne notre nouvel objet connecté pour y ajouter une dimension sociale ! Baptisé My Dart Compagnon, elle se destine aux joueurs les plus passionnés.</p>
<p>L’application est réalisée avec Ionic, un Framework open source qui permet de développer des applications mobiles hybrides rapidement et facilement. Il s’appuie sur <a href="https://angularjs.org/">AngularJS</a> pour la partie application web du framework et sur <a href="http://cordova.apache.org/">Cordova</a> pour la partie construction des applications natives. On peut donc très facilement se connecter à Constellation via le SDK JavaScript. Ionic framework permet de développer une seule application et de la déployer sur tous les supports, web ou mobile, que ce soit Android, iOS ou bien Windows Mobile.</p>
<p>De plus, l’application intègre les services Firebase, la plateforme d’outils mobile de Google qui permet d’implémenter un espace de stockage synchronisé et personnel pour l’utilisateur en toute simplicité, en mode cloud. Cet espace peut être accessible par d’autres clients, comme par exemple le Dashboard.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image17.png"><img class="colorbox-4642"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Application mobile" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image17_thumb.png" alt="Application mobile" width="454" height="163" border="0" /></a></p>
<p>En utilisant l’authentification Facebook, l’application permet de voir ses amis qui l’utilisent également et de les inviter à jouer. Au début de chaque partie, le joueur peut charger son profil sur le Dashboard présenté ci-dessus en flashant un QR Code. Cela lui permet de suivre son score personnel durant la partie sur son smartphone, de consulter l’historique de ses parties disputées et ses statistiques personnelles. Les joueurs les plus compétiteurs chercheront eux à débloquer l’intégralité des succès : des récompenses débloquées lors de la réalisation de certaines actions ou performances.</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/showcases/jeu-de-flechettes-connecte/">Jeu de fléchettes connecté à Constellation</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://developer.myconstellation.io/showcases/jeu-de-flechettes-connecte/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Installer Constellation sur Linux</title>
		<link>https://developer.myconstellation.io/constellation-platform/constellation-server/installer-constellation-sur-linux/</link>
					<comments>https://developer.myconstellation.io/constellation-platform/constellation-server/installer-constellation-sur-linux/#comments</comments>
		
		<dc:creator><![CDATA[Sebastien Warin]]></dc:creator>
		<pubDate>Wed, 03 May 2017 22:59:59 +0000</pubDate>
				<category><![CDATA[Constellation Server]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Web Platform Installer]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[serveur]]></category>
		<category><![CDATA[installation]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=4353</guid>

					<description><![CDATA[<p>Dans cet article nous allons découvrir comment installer Constellation sur un système Linux/Debian et ses dérivés (Raspbian, Ubuntu, etc..). Les étapes sont conceptuellement les mêmes que pour une installation sur Windows. Prérequis Le bootstrapper du Web Platform Installer pour Linux utilise l’outil</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/constellation-platform/constellation-server/installer-constellation-sur-linux/">Installer Constellation sur Linux</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Dans cet article nous allons découvrir comment installer Constellation sur un système Linux/Debian et ses dérivés (Raspbian, Ubuntu, etc..).</p>
<p>Les étapes sont conceptuellement les mêmes que pour une <a href="/getting-started/installer-constellation/">installation sur Windows</a>.</p>
<h3>Prérequis</h3>
<p>Le bootstrapper du <em><strong>Web Platform Installer</strong></em> pour Linux utilise l’outil APT pour installer automatiquement les dépendances de Constellation à savoir :</p>
<ul>
<li>Python 2.7 et ses outils de développement (python-dev)</li>
<li>Mono 3.12 au minimum pour le serveur (Mono 3.10 pour la sentinelle)</li>
<li>Supervisor</li>
<li>Whiptail</li>
</ul>
<p>Si vous êtes sur une autre distribution que Debian (ou ses dérivés) et que vous ne disposez pas de l’outil APT, vous devrez installer ces packages manuellement.</p>
<p>Dans cet article nous avons créé une machine virtuelle x64 et installé le système <strong>Linux Debian 8.2</strong> en “net-install” (<a href="https://www.debian.org/distrib/netinst">à télécharger ici</a>).</p>
<p>Notez que la procédure est exactement la même pour un Raspberry Pi (sous Raspbian). A ce sujet, une page spécifique au Raspberry Pi et Constellation est <a href="#">disponible ici</a>.</p>
<p>Lors de l’installation du système Debian, nous avons installé les utilitaires de base ainsi que le serveur SSH, ni plus ni moins :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-11.png"><img class="colorbox-4353"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Installation d'un serveur Linux/Debian" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-11.png" alt="Installation d'un serveur Linux/Debian" width="428" height="221" border="0" /></a></p>
<p align="left">A la fin de l’installation, nous pouvons nous connecter à cette machine Linux fraîchement installée depuis un client SSH comme Putty :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-12.png"><img class="colorbox-4353"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Connexion SSH" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-12.png" alt="Connexion SSH" width="428" height="273" border="0" /></a></p>
<p align="left">Pour finir, il est fortement recommandé de mettre à jour les sources APT avant de commencer l&rsquo;installation de Constellation en lançant la commande suivante (en root) :</p>
<p></p><pre class="crayon-plain-tag">apt-get update</pre><p></p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-13.png"><img class="colorbox-4353"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Mise à jour des sources APT" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-13.png" alt="Mise à jour des sources APT" width="428" height="273" border="0" /></a></p>
<p align="left">N’oubliez pas, par défaut sur Debian 8, “sudo” n’est pas installé. Ainsi pour lancer des commandes en root :</p>
<ul>
<li>
<div align="left">soit vous vous connectez en SSH directement avec le login root</div>
</li>
<li>
<div align="left">soit vous lancez la commande “su” pour ouvrir la session root depuis votre session courante</div>
</li>
<li>
<div align="left">soit vous installez et configurez “sudo”</div>
</li>
</ul>
<p align="left">Voilà, notre machine Linux est prête à recevoir Constellation !</p>
<h3>Lancer le Web Platform Installer Linux</h3>
<p>Pour télécharger et démarrer <strong><em>Web Platform Installer</em></strong>, rien de plus simple ! Lancez simplement la commande suivante :</p>
<p></p><pre class="crayon-plain-tag">wget -O install.sh https://developer.myconstellation.io/download/installers/install-linux.sh &amp;&amp; chmod +x install.sh &amp;&amp; ./install.sh</pre><p></p>
<p>Le <strong><em>Web Platform Installer</em></strong> (WPI) se chargera lui même de se lancer en root en utilisant “sudo” ou “su” si la première commande n’est pas disponible.</p>
<p>Ainsi si le WPI est lancé depuis un autre utilisateur, vous serez amené à saisir le mot de passe du compte “root” pour l’autoriser à se lancer :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-14.png"><img class="colorbox-4353"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Lancement du Web Platform Installer" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-14.png" alt="Lancement du Web Platform Installer" width="428" height="273" border="0" /></a></p>
<h3>Installer la plateforme</h3>
<h4>Etape 1 : installation des prérequis</h4>
<p>Comme décrit plus haut, le WPI va installer via APT les dépendances nécessaires pour Constellation (Python-Dev, Mono et Supervisor).</p>
<p>Comme il s’agit d’un système fraîchement installé, nous laissons le WPI installer l’ensemble des prérequis.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-15.png"><img class="colorbox-4353"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Installation des prérequis" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-15.png" alt="Installation des prérequis" width="244" height="156" border="0" /></a><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-16.png"><img class="colorbox-4353"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Installation des prérequis" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-16.png" alt="Installation des prérequis" width="244" height="156" border="0" /></a><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-17.png"><img class="colorbox-4353"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Installation des prérequis" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-17.png" alt="Installation des prérequis" width="244" height="156" border="0" /></a></p>
<h4>Etape 2 : sélectionnez les composants Constellation à installer</h4>
<p>Le WPI vous permet d’installer :</p>
<ul>
<li>Le <strong>Serveur</strong> Constellation (avec ou sans la Console)</li>
<li>La <strong>Console</strong> Constellation</li>
<li>La <strong>Sentinel</strong> Service</li>
</ul>
<p>Dans notre cas nous allons commencer par installer le serveur avec la console. Nous sélectionnons donc la première option :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-18.png"><img class="colorbox-4353"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Web Platform Installer" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-18.png" alt="Web Platform Installer" width="428" height="273" border="0" /></a></p>
<h4>Etape 3 : acceptez la licence d’utilisation</h4>
<p>Vous retrouverez le détail des licences Constellation <a href="https://developer.myconstellation.io/licensing/">sur cette page</a>. Pour résumer, Constellation est gratuit pour un usage personnel ou éducatif sans aucun but lucratif et soumis à l’acquisition d’une licence pour un usage professionnel ou entreprise.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-19.png"><img class="colorbox-4353"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Licence Constellation" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-19.png" alt="Licence Constellation" width="428" height="273" border="0" /></a></p>
<h4>Etape 4 : identification</h4>
<p>Vous devez dans cette étape renseigner votre compte myConstellation.io afin de pouvoir télécharger les composants Constellation et accéder à vos licences :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-20.png"><img class="colorbox-4353"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Identification MyConstellation" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-20.png" alt="Identification MyConstellation" width="244" height="156" border="0" /></a><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-21.png"><img class="colorbox-4353"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Identification MyConstellation" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-21.png" alt="Identification MyConstellation" width="244" height="156" border="0" /></a></p>
<h4>Etape 5 : configuration du serveur Constellation</h4>
<p>Entrons désormais dans les étapes de configuration de chacun des composants à installer en commençant par le serveur Constellation.</p>
<h5>Etape 5.1 : répertoire d’installation</h5>
<p>Vous devez choisir le répertoire d’installation du serveur Constellation :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-22.png"><img class="colorbox-4353"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Répertoire d'installation du serveur" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-22.png" alt="Répertoire d'installation du serveur" width="428" height="273" border="0" /></a></p>
<h5>Etape 5.2 : sélection de la licence</h5>
<p>Vous devez ici sélectionner <a href="https://developer.myconstellation.io/licensing/">une licence</a> pour l’utilisation du serveur. Vous obtiendrez l’ensemble des licences associées à votre compte avec la possibilité de créer des licences gratuites pour un usage personnel (<a href="https://developer.myconstellation.io/licensing/">plus d’information ici</a>).</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-23.png"><img class="colorbox-4353"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Selection de la licence" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-23.png" alt="Selection de la licence" width="428" height="273" border="0" /></a></p>
<h5>Etape 5.3 : choix du répertoire des packages</h5>
<p>Dans cette étape vous devez définir le répertoire pour votre catalogue de packages de votre Constellation.</p>
<p>Par défaut, il s’agit du sous-dossier “Packages” de votre répertoire d’installation :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-24.png"><img class="colorbox-4353"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Choix du répertoire des packages" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-24.png" alt="Choix du répertoire des packages" width="428" height="273" border="0" /></a></p>
<h5>Etape 5.4 : choix du port d’écoute du serveur</h5>
<p>Le serveur Constellation utilise le protocole HTTP/s pour exposer ses différents hubs et APIs. Pour cela vous avez besoin de choisir le port d’écoute.</p>
<p>Par défaut, le serveur Constellation écoutera en HTTP sur le port 8088.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-25.png"><img class="colorbox-4353"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Choix du port d’écoute du serveur" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-25.png" alt="Choix du port d’écoute du serveur" width="428" height="273" border="0" /></a></p>
<p>A noter que vous pouvez déclarer dans la configuration du serveur Constellation sur plusieurs ports HTTP et/ou HTTPS ou même définir un chemin HTTP personnalisé. Il est d’ailleurs conseillé d’activer le protocole HTTPS si vous souhaitez exposer votre serveur Constellation sur Internet. Vous retrouverez plusieurs articles sur la configuration avancée du serveur dans la rubrique <a href="https://developer.myconstellation.io/constellation-platform/constellation-server/">Constellation Server</a>.</p>
<h5>Etape 5.5 : choix des clés d’accès</h5>
<p>Pour se connecter à Constellation vous avez besoin de créer des clés d’accès (les “Access Keys”). Dans le cas d’une nouvelle installation, l’assistant vous proposera de créer deux clés :</p>
<ul>
<li>Une clé “Standard” (accès de base) que vous utiliserez pour connecter vos sentinelles et packages</li>
<li>Une clé “Administrator” qui dispose des droits d’accès au hub de contrôle (pour le pilotage de la Constellation) et à l’API de Management (pour la configuration du serveur)</li>
</ul>
<p>Une clé d’accès est une chaine de caractère. Il est conseillé de choisir des clés d’accès assez longues (&gt; 16 caractères) et compliquées.</p>
<p>Pour simplifier leurs mémorisations et générations, Constellation propose d’utiliser un couple login/password pour créer des clés d’accès. Pour cela, on utilise le hash SHA1.</p>
<p>Exemple : pour le login “Admin” et le mot de passe “Password”, la clé d’accès sera “d882b8721a224d38ebb54559e6b54e5df3a1bc6d” (soit SHA1(“AdminPassword”)). Notez bien que la casse est importante !</p>
<p>C’est pourquoi le WPI vous proposera soit de spécifier directement vos AccessKeys ou soit d’utiliser un couple login/password.</p>
<p>Ici sélectionnons la deuxième option :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-26.png"><img class="colorbox-4353"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Configuration des clés d'accès" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-26.png" alt="Configuration des clés d'accès" width="428" height="273" border="0" /></a></p>
<p align="left">Pour la clé “Standard” utilisons le couple “demo/demo” :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-27.png"><img class="colorbox-4353"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Configuration des clés d'accès" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-27.png" alt="Configuration des clés d'accès" width="244" height="156" border="0" /></a><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-28.png"><img class="colorbox-4353"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Configuration des clés d'accès" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-28.png" alt="Configuration des clés d'accès" width="244" height="156" border="0" /></a></p>
<p align="left">Et pour la clé “Administrator”, utilisons le couple “admin/password” :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-29.png"><img class="colorbox-4353"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Configuration des clés d'accès" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-29.png" alt="Configuration des clés d'accès" width="244" height="156" border="0" /></a><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-30.png"><img class="colorbox-4353"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Configuration des clés d'accès" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-30.png" alt="Configuration des clés d'accès" width="244" height="156" border="0" /></a></p>
<p align="left">Pour finir, vous pouvez ajouter le droit de débogage sur la clé “Administrator”. Cela nous permettra de tester des packages connectés à votre Constellation depuis le SDK sous Visual Studio.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-31.png"><img class="colorbox-4353"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Configuration des clés d'accès" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-31.png" alt="Configuration des clés d'accès" width="428" height="273" border="0" /></a></p>
<h4>Etape 6 : installation et configuration de la Console Constellation</h4>
<p>Une fois le serveur installé, le WPI vous proposera d’installer et configurer automatiquement la Console Constellation :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-32.png"><img class="colorbox-4353"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Installation de la Console" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-32.png" alt="Installation de la Console" width="428" height="273" border="0" /></a></p>
<p>Vous devez simplement spécifier le répertorie d’installation, par défaut dans /opt :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-33.png"><img class="colorbox-4353"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Installation de la Console" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-33.png" alt="Installation de la Console" width="428" height="273" border="0" /></a></p>
<p>Vous pouvez aussi indiquer si vous souhaitez restreindre l’accès la console à “localhost” (ce qui n’aurait pas de sens dans notre cas étant donné que notre système Linux ne dispose pas de navigateur internet localement) :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-34.png"><img class="colorbox-4353"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Installation de la Console" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-34.png" alt="Installation de la Console" width="428" height="273" border="0" /></a></p>
<h4>Etape 7 : Validation de l’installation</h4>
<p align="left">Et voilà, le serveur Constellation ainsi que la Console sont installés sur votre système Linux.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-35.png"><img class="colorbox-4353"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Fin de l'installation" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-35.png" alt="Fin de l'installation" width="428" height="273" border="0" /></a></p>
<p>Ouvrez un navigateur Internet et rendez-vous sur l’adresse IP ou DNS de votre système Linux sur le port spécifié lors de l’installation (par défaut 8088). Vous devriez atterrir sur une page du serveur Constellation vous indiquant le n° de la version du serveur, dans notre exemple 1.8.2.17118 :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-36.png"><img class="colorbox-4353"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Page du serveur" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-36.png" alt="Page du serveur" width="428" height="287" border="0" /></a></p>
<p align="left">Comme le serveur Constellation héberge la Console,  vous avez un lien “Open Constellation Console” sur cette page vous permettant d’accéder directement à la Console :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-37.png"><img class="colorbox-4353"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Console Constellation" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-37.png" alt="Console Constellation" width="428" height="287" border="0" /></a></p>
<p align="left">Utilisez le couple login/password “Administrator” défini lors de l’installation pour vous connecter, dans notre exemple “admin/password” :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/05/image-38.png"><img class="colorbox-4353"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Console Constellation" src="https://developer.myconstellation.io/wp-content/uploads/2017/05/image_thumb-38.png" alt="Console Constellation" width="428" height="287" border="0" /></a></p>
<p align="left">Bravo, votre serveur Constellation est opérationnel !</p>
<h3>Next steps</h3>
<ul>
<li><a href="https://developer.myconstellation.io/getting-started/ajouter-des-sentinelles/">Ajoutez des sentinelles dans votre Constellation</a></li>
<li><a href="https://developer.myconstellation.io/getting-started/telecharger-et-deployer-des-packages-sur-vos-sentinelles/">Téléchargez et déployez des packages sur vos sentinelles</a></li>
<li><a href="/constellation-platform/constellation-server/exposer-constellation-en-https-derriere-un-reverse-proxy-avec-nginx-et-lets-encrypt/">Exposer votre Constellation sur Internet derrière un reverse proxy Nginx en HTTPS avec des certificats SSL Let&rsquo;s Encrypt</a></li>
</ul>
<p>Prêt pour développer avec Constellation ?</p>
<ul>
<li><a href="https://developer.myconstellation.io/getting-started/creez-votre-premier-package-constellation-en-csharp/">Créez votre premier package Constellation en C#</a></li>
<li><a href="https://developer.myconstellation.io/client-api/net-package-api/packages-ui-wpf-winform/">Créez des packages UI en Winform ou WPF</a></li>
<li><a href="https://developer.myconstellation.io/getting-started/connectez-vos-pages-web-constellation/">Connectez vos pages Web à Constellation</a></li>
<li><a href="https://developer.myconstellation.io/getting-started/creez-votre-premier-package-constellation-en-python/">Créez votre premier package Constellation en Python</a></li>
<li><a href="https://developer.myconstellation.io/getting-started/connecter-un-arduino-ou-un-esp8266-constellation/">Connectez un Arduino ou un ESP8266 à Constellation</a></li>
</ul>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/constellation-platform/constellation-server/installer-constellation-sur-linux/">Installer Constellation sur Linux</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://developer.myconstellation.io/constellation-platform/constellation-server/installer-constellation-sur-linux/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Cr&#233;ez votre premier package Constellation en Python</title>
		<link>https://developer.myconstellation.io/getting-started/creez-votre-premier-package-constellation-en-python/</link>
					<comments>https://developer.myconstellation.io/getting-started/creez-votre-premier-package-constellation-en-python/#respond</comments>
		
		<dc:creator><![CDATA[Sebastien Warin]]></dc:creator>
		<pubDate>Fri, 01 Apr 2016 08:28:19 +0000</pubDate>
				<category><![CDATA[Guide de démarrage]]></category>
		<category><![CDATA[Python API]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[PushStateObject]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Publish]]></category>
		<category><![CDATA[Package]]></category>
		<category><![CDATA[Settings]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=1737</guid>

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

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

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

def Start():
    Constellation.OnSettingsUpdated = OnSettingsUpdated

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

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

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

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

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

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

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

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

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

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

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

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