﻿<?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>Catégorie Constellation SDK - Constellation</title>
	<atom:link href="https://developer.myconstellation.io/constellation-platform/constellation-sdk/feed/" rel="self" type="application/rss+xml" />
	<link>https://developer.myconstellation.io/constellation-platform/constellation-sdk/</link>
	<description>Votre plateforme d&#039;interconnexion</description>
	<lastBuildDate>Thu, 19 Apr 2018 08:10:30 +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>Catégorie Constellation SDK - Constellation</title>
	<link>https://developer.myconstellation.io/constellation-platform/constellation-sdk/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Publier un package depuis Visual Studio</title>
		<link>https://developer.myconstellation.io/constellation-platform/constellation-sdk/publier-package-visual-studio/</link>
					<comments>https://developer.myconstellation.io/constellation-platform/constellation-sdk/publier-package-visual-studio/#respond</comments>
		
		<dc:creator><![CDATA[Sebastien Warin]]></dc:creator>
		<pubDate>Tue, 09 Aug 2016 12:54:13 +0000</pubDate>
				<category><![CDATA[Constellation SDK]]></category>
		<category><![CDATA[Package]]></category>
		<category><![CDATA[SDK]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=2155</guid>

					<description><![CDATA[<p>Pour publier un package Constellation depuis Visual Studio vous pouvez cliquez sur l’icone dans la barre Constellation : Le package à publier est celui marqué comme “Projet de démarrage” dans le cas où vous avez plusieurs projet dans votre solution</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/constellation-platform/constellation-sdk/publier-package-visual-studio/">Publier un package depuis Visual Studio</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Pour publier un package Constellation depuis Visual Studio vous pouvez cliquez sur l’icone <img class="colorbox-2155"  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/09/image-90.png" alt="image" width="26" height="31" border="0" /> dans la barre Constellation :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-91.png"><img class="colorbox-2155"  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/09/image_thumb-86.png" alt="image" width="350" height="144" border="0" /></a></p>
<p align="left">Le package à publier est celui marqué comme “Projet de démarrage” dans le cas où vous avez plusieurs projet dans votre solution Visual Studio.</p>
<p>Autrement cliquez-droit sur le projet que vous souhaitez publier et cliquez sur “Publish Constellation package” dans le menu “Constellation” :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-92.png"><img class="colorbox-2155"  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/09/image_thumb-87.png" alt="image" width="350" height="318" border="0" /></a></p>
<p>Vous pourrez ensuite publier votre package en local ou directement sur un serveur Constellation.</p>
<h3>Publication locale</h3>
<p>Il suffit d’indiquer un répertoire de sortie et un nom de fichier :</p>
<p><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-93.png"><img class="colorbox-2155"  loading="lazy" style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/09/image_thumb-88.png" alt="image" width="350" height="174" border="0" /></a></p>
<h3>Publication sur un serveur Constellation</h3>
<p>Pour publier votre package sur un serveur Constellation sélectionnez la méthode “Upload on Constellation Server” et indiquez le serveur à utiliser :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-94.png"><img class="colorbox-2155"  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/09/image_thumb-89.png" alt="image" width="350" height="174" border="0" /></a></p>
<p>Pour gérer les serveurs Constellation depuis Visual Studio, <a href="/constellation-platform/constellation-sdk/gerer-connexions-constellation/">consultez cet article</a>.</p>
<p>Une confirmation vous indiquera le bon déroulé de la publication :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-95.png"><img class="colorbox-2155"  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/09/image_thumb-90.png" alt="image" width="350" height="121" border="0" /></a></p>
<p align="left">Notez que vous pouvez suivre le détail du processus de publication dans la fenêtre “Output” de Visual Studio :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-96.png"><img class="colorbox-2155"  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/09/image_thumb-91.png" alt="image" width="350" height="89" border="0" /></a></p>
<p>Une fois publié, votre package sera disponible dans le Package Repository de votre Constellation et sera prêt à être déployé sur une de vos sentinelles :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-97.png"><img class="colorbox-2155"  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/09/image_thumb-92.png" alt="image" width="350" height="86" border="0" /></a></p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/constellation-platform/constellation-sdk/publier-package-visual-studio/">Publier un package depuis Visual Studio</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-sdk/publier-package-visual-studio/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Le générateur de code C#</title>
		<link>https://developer.myconstellation.io/constellation-platform/constellation-sdk/generateur-de-code/</link>
					<comments>https://developer.myconstellation.io/constellation-platform/constellation-sdk/generateur-de-code/#respond</comments>
		
		<dc:creator><![CDATA[Sebastien Warin]]></dc:creator>
		<pubDate>Tue, 09 Aug 2016 12:53:45 +0000</pubDate>
				<category><![CDATA[Constellation SDK]]></category>
		<category><![CDATA[StateObject]]></category>
		<category><![CDATA[MessageCallback]]></category>
		<category><![CDATA[SDK]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=2153</guid>

					<description><![CDATA[<p>Etant donné que chaque package peut (et devrait) déclarer la liste des MessageCallbacks détaillée (description, liste des paramètres, type de réponse, …) qu’il expose ainsi que la liste des types personnalisées qu’il utilise dans la signature de ses MessageCallbacks ou</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/constellation-platform/constellation-sdk/generateur-de-code/">Le générateur de code C#</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Etant donné que chaque package peut (et devrait) déclarer la liste des MessageCallbacks détaillée (description, liste des paramètres, type de réponse, …) qu’il expose ainsi que la liste des types personnalisées qu’il utilise dans la signature de ses MessageCallbacks ou des StateObjects qu’il publie, il est donc possible de générer du code de manière automatique.</p>
<p>C’est grâce à cette description, que l’on nomme le “PackageDescriptor” que fonctionne le “<a href="/constellation-platform/constellation-console/messagecallbacks-explorer/">MessageCallback Explorer</a>” de la Console Constellation par exemple.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-116.png"><img class="colorbox-2153"  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/09/image_thumb-111.png" alt="image" width="350" height="200" border="0" /></a></p>
<p align="left">L’interface est capable de lister chaque MessageCallbacks  de chaque packages de votre Constellation avec un formulaire pour la saisie des paramètres (simples ou complexes) afin de tester simplement vos MC.</p>
<p align="left">En cliquant sur le bouton <a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-117.png"><img class="colorbox-2153"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/09/image_thumb-112.png" alt="image" width="25" height="22" border="0" /></a>, le “<a href="/constellation-platform/constellation-console/messagecallbacks-explorer/">MessageCallback Explorer</a>” de la Console Constellation vous propose des “code snippets” pour différents langages (C#, Python, Arduino, JS, etc.).</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-118.png"><img class="colorbox-2153"  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/09/image_thumb-113.png" alt="image" width="354" height="226" border="0" /></a></p>
<h3 align="left">Pourquoi générer du code ?</h3>
<p align="left">Comme vous le savez, en C# pour envoyer un message et donc invoquer un MC d’un autre package, vous devez créer un scope et invoquer le MC en utilisant un proxy dynamique.</p>
<p align="left">Par exemple pour invoquer le MC “AreaArm” du package Paradox, on pourrait écrire :</p>
<p></p><pre class="crayon-plain-tag">PackageHost.CreateMessageProxy("Paradox").AreaArm(new { Area = Paradox.Core.Area, Mode = Paradox.Core.ArmingMode, PinCode = System.String });</pre><p></p>
<p align="left">Il est important de noter ici que la méthode “<em>CreateMessageProxy</em>” retourne un “proxy dynamique”, c’est à dire que la méthode invoquée, ici “AreaArm” sera la clé du message.</p>
<p align="left">Autrement dit, comme tout est dynamique, il y a aucune aide ou auto-complétion. On pourrait très bien écrire ceci :</p>
<p></p><pre class="crayon-plain-tag">PackageHost.CreateMessageProxy("Paradox").CeciEstUnExemple();</pre><p></p>
<p>Votre package enverra un message “CeciEstUnExemple” au(x) package(s) Paradox de votre Constellation. Vous devez donc être vigilent sur le nom des MC invoqués car une erreur de frappe passera inaperçu !</p>
<p>Pour plus d’information sur l’envoi de messages &amp; invocation de MessageCallbacks en C#, <a href="/client-api/net-package-api/envoyer-des-messages-invoquer-des-messagecallbacks/">veuillez lire ceci</a>.</p>
<p>Le “problème” est le même avec la consommation des StateObjects (<a href="/client-api/net-package-api/consommer-des-stateobjects/">lire ceci</a>). Par exemple pour injecter dans votre code, le StateObject “/intelcpu/0/load/0” produit par le package “HWMonitor” sur la sentinelle “MON-PC”, on peut écrire :</p>
<p></p><pre class="crayon-plain-tag">[StateObjectLink("MON-PC", "HWMonitor", "/intelcpu/0/load/0")]
private StateObjectNotifier CPU { get; set; }</pre><p></p>
<p>Je peux donc ensuite exploiter la valeur de mon StateObject :</p>
<p></p><pre class="crayon-plain-tag">dynamic value = this.CPU.DynamicValue;</pre><p></p>
<p>La propriété “Value” du StateObjectNotifier  me donne la valeur du StateObject et la propriété “Value” de ce StateObject me donne la valeur du StateObject. Vous pouvez utiliser la propriété “DynamicValue” directement sur le StateObjectNotifier  pour récupérer la valeur du SO sous forme d’un ”dynamic”.</p>
<p>Comme chaque StateObject est différent, je ne sais pas ne que je trouverai dedans (une valeur simple, un objet complexe, …). D’où l’intérêt d’utiliser le <a href="/constellation-platform/constellation-console/stateobjects-explorer/">StateObject Explorer</a> de la Console Constellation pour explorer les SO de votre Constellation.</p>
<p>Par exemple, le StateObject “/intelcpu/0/load/0” produit par le package “HWMonitor” est un objet complexe contenant 4 propriétés :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-119.png"><img class="colorbox-2153"  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/09/image_thumb-114.png" alt="image" width="354" height="252" border="0" /></a></p>
<p align="left">Alors que le StateObject de type “CarbonDioxideMeasurement” produit par le package “NetAtmo” est un entier :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-120.png"><img class="colorbox-2153"  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/09/image_thumb-115.png" alt="image" width="354" height="280" border="0" /></a></p>
<p>C’est pour cela que dans votre code, la valeur d’un StateObject est “dynamique” : tout dépend du StateObject que vous consommez !</p>
<p>Que ce soit pour l’invocation de MessageCallback ou la consommation de StateObject, la forme “dynamique” permet de s’adapter à toutes les situations. En revanche vous perdez l’auto complétion ce qui peut vous ralentir mais aussi être une source d’erreur. D’où l’intérêt de générer du code dans votre package!</p>
<h3>Générer du code depuis Visual Studio.</h3>
<p>Le générateur de code inclut dans le SDK Constellation pour Visual Studio ne fonctionne que pour un projet C#.</p>
<p>Commencez tout d’abord par cliquer le bouton <a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-110.png"><img class="colorbox-2153"  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/09/image_thumb-105.png" alt="image" width="30" height="24" border="0" /></a> “Generate Code” dans la barre de menu :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-109.png"><img class="colorbox-2153"  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/09/image_thumb-104.png" alt="image" width="240" height="92" border="0" /></a></p>
<p>Le code sera généré pour le projet marqué comme projet de démarrage dans le cas où votre solution contient plusieurs projets.</p>
<p>Autrement, en cliquant-droit sur le projet de votre choix, sélectionnez “Generate Code” dans le sous-menu “Constellation” :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-111.png"><img class="colorbox-2153"  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/09/image_thumb-106.png" alt="image" width="350" height="327" border="0" /></a></p>
<p>Vous serez amené à sélectionner dans la liste déroulante la Constellation à cibler. Pour configurer des connexions vers vos Constellations, <a href="/constellation-platform/constellation-sdk/gerer-connexions-constellation/">lisez ceci</a>.</p>
<p>Une fois le serveur Constellation sélectionné, cliquez sur “Connect and Discover”. Vous obtiendrez la liste de toutes vos sentinelles et packages de votre Constellation :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-122.png"><img class="colorbox-2153"  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/09/image_thumb-117.png" alt="image" width="350" height="387" border="0" /></a></p>
<p align="left">Sélectionnez tout simplement la liste des packages que vous souhaitez inclure dans votre code. Par exemple, ici nous allons générer du code pour les packages “DoorBell”, “LightSensor”, “IRRemote”,”Paradox”, “Pionner” et “Vera”.</p>
<p align="left">Après avoir cliqué sur le bouton “Generate”, un message de confirmation vous indiquera le bon déroulé de l’opération :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-113.png"><img class="colorbox-2153"  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/09/image_thumb-108.png" alt="image" width="168" height="165" border="0" /></a></p>
<p align="left">Le SDK génère le code dans le fichier “<em>MyConstellation.generated.cs</em>” :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-114.png"><img class="colorbox-2153"  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/09/image_thumb-109.png" alt="image" width="291" height="203" border="0" /></a></p>
<p align="left">Attention, vous ne devez pas modifier ce code directement car ce fichier est écrasé à chaque fois que vous relancer une génération.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-115.png"><img class="colorbox-2153"  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/09/image_thumb-110.png" alt="image" width="350" height="308" border="0" /></a></p>
<h3 align="left">Utiliser le code généré</h3>
<h4 align="left">Organisation du code généré</h4>
<p align="left">Le code généré dans le fichier “<em>MyConstellation.generated.cs</em>” s’organise dans plusieurs espaces de nom (namespaces) :</p>
<ul>
<li>
<div align="left">Dans le namespace de votre assembly vous trouverez :</div>
<ul>
<li>
<div align="left">La classe statique “<em>MyConstellation</em>” représentant votre Constellation</div>
</li>
<li>
<div align="left">Les classes utilitaires <em>RealNameAttribute</em> et <em>RealNameExtension</em> indispensable au fonctionnement du code généré</div>
</li>
</ul>
</li>
<li>
<div align="left">Des namespaces par package</div>
<ul>
<li>
<div align="left"><em>VotreNamespace.NomDuPackage.StateObjects</em> : code généré pour les StateObjects (si des StateObjects sont déclarés pour le package)</div>
</li>
<li>
<div align="left"><em>VotreNamespace.NomDuPackage.MessageCallbacks</em> : code généré pour les MessageCallbacks (si des MessageCallbacks sont déclarés pour le package)</div>
</li>
</ul>
</li>
</ul>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-123.png"><img class="colorbox-2153"  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/09/image_thumb-118.png" alt="image" width="350" height="406" border="0" /></a></p>
<h4 align="left">Des énumérations pour les sentinelles, packages et instances de votre Constellation</h4>
<p align="left">La classe statique “<em>MyConstellation</em>” contient trois énumérations :</p>
<ul>
<li>
<div align="left"><u>Sentinels</u> : contenant la liste des sentinelles de votre Constellation</div>
</li>
<li>
<div align="left"><u>Packages</u> : contenant le liste des packages de votre Constellation</div>
</li>
<li>
<div align="left"><u>PackageInstances</u> : contenant la liste des instances des packages de votre Constellation</div>
</li>
</ul>
<p align="left">Comme les noms de sentinelles ou packages peuvent contenir des caractères interdits en C# (comme par exemple les tirets), les valeurs des énumérations sont “nettoyées” et la valeur réelle se trouve dans l’attribut “RealName” que vous pouvez récupérer avec la méthode d’extension “<em>GetRealName()</em>”.</p>
<p align="left">Dans notre exemple l’énumération “Sentinels” générée est la suivante :</p>
<p></p><pre class="crayon-plain-tag">/// &lt;summary&gt;
/// Specifies the sentinels in your Constellation
/// &lt;/summary&gt;
public enum Sentinels
{
    /// &lt;summary&gt;
    /// Sentinel 'CEREBRUM'
    /// &lt;/summary&gt;
    [RealName("CEREBRUM")]
    CEREBRUM,
    /// &lt;summary&gt;
    /// Sentinel 'ESP8266'
    /// &lt;/summary&gt;
    [RealName("ESP8266")]
    ESP8266,
    /// &lt;summary&gt;
    /// Sentinel 'ESP-DoorBell'
    /// &lt;/summary&gt;
    [RealName("ESP-DoorBell")]
    ESP_DoorBell,
    /// &lt;summary&gt;
    /// Sentinel 'ESP-LightSensorSalon'
    /// &lt;/summary&gt;
    [RealName("ESP-LightSensorSalon")]
    ESP_LightSensorSalon,
    /// &lt;summary&gt;
    /// Sentinel 'esp-senergy'
    /// &lt;/summary&gt;
    [RealName("esp-senergy")]
    esp_senergy,
    /// &lt;summary&gt;
    /// Sentinel 'SKYNET-SERVER'
    /// &lt;/summary&gt;
    [RealName("SKYNET-SERVER")]
    SKYNET_SERVER,
}</pre><p></p>
<p align="left">De ce fait on peut manipuler les sentinelles et récupérer le nom réel avec la méthode “GetRealName()” :</p>
<p></p><pre class="crayon-plain-tag">MyConstellation.Sentinels sentinel = MyConstellation.Sentinels.ESP_DoorBell;
string realName = sentinel.GetRealName();</pre><p></p>
<p align="left">De plus, dans cette classe vous trouverez des méthodes d’extension pour <a href="/client-api/net-package-api/envoyer-des-messages-invoquer-des-messagecallbacks/#Creer_un_scope">créer un “MessageScope”</a> vers une de vos sentinelles, packages ou instances de package.</p>
<p align="left">Par exemple pour créer un scope vers les packages “Hue” :</p>
<p></p><pre class="crayon-plain-tag">MessageScope scope = MyConstellation.Packages.Hue.CreateScope();</pre><p></p>
<p>Ce qui est équivalent à :</p>
<p></p><pre class="crayon-plain-tag">MessageScope scope = MessageScope.Create("Hue");</pre><p></p>
<p>Sauf qu’avec le code généré plus besoin de chercher le nom exact ni même de risquer de faire une erreur de frappe, car tout est énumération !</p>
<p>On peut également cibler une instance d’un package en particulier. Par exemple pour cibler précisément le package “Hue” déployé sur la sentinelle “SKYNET-SERVER” :</p>
<p></p><pre class="crayon-plain-tag">MessageScope scope = MyConstellation.PackageInstances.SKYNET_SERVER_Hue.CreateScope();</pre><p></p>
<h4 align="left">Code généré pour les StateObjects</h4>
<p align="left">Prenons un exemple simple :  dans le code généré ci-dessus j’ai sélectionné le package “Paradox”, un package permettant de connecter les système d’alarme Paradox dans Constellation.</p>
<p align="left">Ce package publie plusieurs StateObjects :</p>
<ul>
<li>
<div align="left">Des StateObjects de type “AreaInfo” par secteur qui représente l’état d’un secteur (système armé ou non par exemple)</div>
</li>
<li>
<div align="left">Des StateObjects de type “ZoneInfo” par zone qui représente l’état d’une zone (zone ouverte ou non par exemple)</div>
</li>
<li>
<div align="left">Des StateObjects de type “UserInfo” par utilisateur qui représente l’état d’un utilisateur (nom de l’utilisateur, dernière activité, etc..)</div>
</li>
</ul>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-124.png"><img class="colorbox-2153"  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/09/image_thumb-119.png" alt="image" width="350" height="206" border="0" /></a></p>
<p align="left">Prenons par exemple le StateObject “ZoneInfo1” de ce package :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-125.png"><img class="colorbox-2153"  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/09/image_thumb-120.png" alt="image" width="350" height="268" border="0" /></a></p>
<p align="left">On y trouvera plusieurs informations sur l’état de cette zone.</p>
<p align="left">Le code généré pour les StateObjects de ce package sera donc rangé dans le namespace : <em>VotreNamespace.Paradox.StateObjects </em>et contiendra :</p>
<ul>
<li>
<div align="left">Une énumération “<em>ParadoxStateObjectNames</em>” référençant le nom des StateObjects actuellement connus sur le serveur</div>
</li>
<li>
<div align="left">Une classe “<em>ParadoxStateObjectLinkAttribute</em>” (spécialisation de la classe <em>StateObjectLinkAttribute</em>)</div>
</li>
<li>
<div align="left">Des classes pour chaque types personnalisés du package, ici le générateur aura généré les classes “AreaInfo”, “ZoneInfo” et “UserInfo”</div>
</li>
<li>
<div align="left">Une classe “<em>ParadoxExtensions</em>” contenant des méthodes d’extension pour convertir des StateObjects en type personnalisé</div>
</li>
</ul>
<p align="left">Voyons par exemple comment inclure notre StateObject de la zone “1” dans votre code C# avec le code généré.</p>
<p align="left">Tout d’abord, il faut inclure le namespace :</p>
<p></p><pre class="crayon-plain-tag">using Paradox.StateObjects;</pre><p></p>
<p align="left">Ensuite ajoutons un “StateObjectLink” de type “ParadoxStateObjectLink” où nous préciserons le nom du StateObject avec l’énumération :</p>
<p></p><pre class="crayon-plain-tag">[ParadoxStateObjectLink(ParadoxStateObjectNames.ZoneInfo1)]
public StateObjectNotifier Zone1 { get; set; }</pre><p></p>
<p align="left">Sans le code généré nous aurions écrit :</p>
<p></p><pre class="crayon-plain-tag">[StateObjectLink(Package="Paradox", Name="ZoneInfo1")]
public StateObjectNotifier Zone1 { get; set; }</pre><p></p>
<p align="left">Je peux ensuite utiliser la méthode d’extension générée “<em>AsZoneInfo()</em>” pour convertir la valeur du StateObject en “<em>ZoneInfo</em>” (“<em>Zon</em>eInfo” étant un type personnalisé décrit par le package Paradox) :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-126.png"><img class="colorbox-2153"  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/09/image_thumb-121.png" alt="image" width="400" height="125" border="0" /></a></p>
<p align="left">Le générateur a “reproduit” ce type dans votre code généré avec les commentaires tel que spécifiés dans le PackageDescriptor du package Paradox.</p>
<p align="left">Sans le code généré, vous devez travailler avec un objet dynamique, donc sans auto-complétion :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-127.png"><img class="colorbox-2153"  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/09/image_thumb-122.png" alt="image" width="230" height="32" border="0" /></a></p>
<p align="left">Bien entendu tous les Packages (virtuels ou non) peuvent déclarer des Packages Descriptor.</p>
<p align="left">Prenez l’exemple d’un capteur d’électricité basé sur un ESP8266. En utilisant la <a href="/client-api/arduino-esp-api/">librairie Constellation pour Arduino</a>, le code C++ de ce package virtuel commence par déclarer le type “<em>SEnergy.Electricity</em>” :</p>
<p></p><pre class="crayon-plain-tag">constellation.addStateObjectType("SEnergy.Electricity", TypeDescriptor().setDescription("S-Energy Electricity data").addProperty("Counter", "System.Int64", "Number of revolution").addProperty("Timestamp", "System.Int64", "Internal timestamp of the last revolution").addProperty("RevolutionTime", "System.Double", "The time (in ms) of the last revolution").addProperty("WattPerHour", "System.Int32", "Energy consumed").addProperty("Cumul", "System.Int64", "Total of KWh consumed")); 
constellation.declarePackageDescriptor();</pre><p></p>
<p>Puis à chaque fois que le capteur détecte une consommation électrique il publie un StateObject de la façon suivante :</p>
<p></p><pre class="crayon-plain-tag">StaticJsonBuffer&lt;JSON_OBJECT_SIZE(5)&gt; jsonBuffer;
JsonObject&amp; myStateObject = jsonBuffer.createObject();
myStateObject["Counter"] = counter;
myStateObject["Timestamp"] = ts;
myStateObject["RevolutionTime"] = timePerRevolution;
myStateObject["WattPerHour"] = wattPerHour;
myStateObject["Cumul"] = cumul;
constellation.pushStateObject("Electricity", myStateObject, "SEnergy.Electricity", 600);</pre><p></p>
<p align="left">On retrouve bien ce StateObject sur la Console Constellation :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-129.png"><img class="colorbox-2153"  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/09/image_thumb-124.png" alt="image" width="350" height="249" border="0" /></a></p>
<p align="left">Après avoir sélectionné le package “<em>SElectricity</em>” dans le générateur de code, je peux très facilement exploiter ce StateObject avec auto-complétion, description, etc.. :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-130.png"><img class="colorbox-2153"  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/09/image_thumb-125.png" alt="image" width="450" height="176" border="0" /></a></p>
<p align="left">Par exemple pour suivre en temps réel la consommation électrique dans mon package C# avec le code généré à partir du capteur ESP8266 écrit en C++/Arduino :</p>
<p></p><pre class="crayon-plain-tag">namespace ConstellationPackageConsole2
{
    using Constellation.Package;
    using ConstellationPackageConsole2.SElectricity.StateObjects;

    public class Program : PackageBase
    {
        [SElectricityStateObjectLink(SElectricityStateObjectNames.Electricity)]
        public StateObjectNotifier Electricity { get; set; }

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

        public override void OnStart()
        {
            this.Electricity.ValueChanged += (s, e) =&gt;
            {
                PackageHost.WriteInfo($"Current Energy Consumption : {e.NewState.AsSElectricitySEnergy_Electricity().WattPerHour}W @ {e.NewState.LastUpdate}");
            };
        }
    }
}</pre><p></p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-131.png"><img class="colorbox-2153"  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/09/image_thumb-126.png" alt="image" width="350" height="176" border="0" /></a></p>
<h4 align="left">Code généré pour les MessageCallbacks</h4>
<p align="left">Le principe est le même avec les MessagesCallbacks, le générateur de code va créer le code dans le namespace “<em>VotreNamespace.NomDuPackage.MessagesCallbacks</em>” :</p>
<ul>
<li>
<div align="left">Des classes pour chaque types personnalisés utilisés dans les MC du package</div>
</li>
<li>
<div align="left">Une classe “<em>(NomDuPackage)Scope</em>” permettant de référencer les MC sous forme de méthodes .NET</div>
</li>
<li>
<div align="left">Une classe “<em>(NomDuPackage)Extensions</em>” : classe d’extension pour créer un scope du package à partir d’un MessageScope ou des énumérations Sentinels, Packages, PackagesInstances générées par le générateur</div>
</li>
</ul>
<h5 align="left">MessageCallbacks avec ou sans paramètre</h5>
<p align="left">Prenons par exemple le package virtuel “IRremote”, un récepteur/émetteur d’infrarouge développé en Arduino/C++ sur un ESP8266. Ce package virtuel expose deux MessageCallbacks : “Restart” pour rebooter l’ESP et “SendCode” pour envoyer un signal IR.</p>
<p align="left">En utilisant la <a href="/client-api/arduino-esp-api/">librairie Constellation pour Arduino</a> de ces deux MC se résume par ces quelques lignes de C++ :</p>
<p></p><pre class="crayon-plain-tag">// SendCode MessageCallback
constellation.registerMessageCallback("SendCode",
  MessageCallbackDescriptor().setDescription("Send the IR code").addParameter("encoding", "System.String").addParameter("code", "System.Int64"),
  [](JsonObject&amp; json) {
    const char * encoder = json["Data"][0].asString();  
    unsigned long code = strtoul(json["Data"][1].asString(), NULL, 0);
    // send the "code" here !
 });

// Restart MessageCallback
constellation.registerMessageCallback("Restart",
  MessageCallbackDescriptor().setDescription("Restart the ESP"),
  [](JsonObject&amp; json) {
    ESP.restart();
 });</pre><p></p>
<p>Une fois l’ESP démarré, nos deux MessageCallbacks sont correctement référencés sur Console Constellation avec les listes des paramètres, types et description :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-132.png"><img class="colorbox-2153"  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/09/image_thumb-127.png" alt="image" width="350" height="150" border="0" /></a></p>
<p>Dans Visual Studio, générons maintenant le code pour notre package “IRRemote” :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-133.png"><img class="colorbox-2153"  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/09/image_thumb-128.png" alt="image" width="350" height="195" border="0" /></a></p>
<p>Ajoutons ensuite le namespace correspondant aux MessageCallbacks de notre package, ici “IRRemote” :</p>
<p></p><pre class="crayon-plain-tag">using IRremote.MessageCallbacks;</pre><p></p>
<p>Vous pouvez ensuite utiliser l’énumération “Packages” (ou “PackagesIntances”) et accéder à la méthode d’extension “<em>CreateIRRemoteScope</em>” pour créer un scope spécifiquement pour notre package :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-134.png"><img class="colorbox-2153"  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/09/image_thumb-129.png" alt="image" width="450" height="109" border="0" /></a></p>
<p>Vous avez également une méthode d’extension nommée “ToXXXXSCope()” sur un MessageScope. En clair vous avez plusieurs moyen de créer un scope spécifiquement pour votre package “IRremote” avec le code généré :</p>
<p></p><pre class="crayon-plain-tag">IRremoteScope scope =  MyConstellation.Packages.IRremote.CreateIRremoteScope();

IRremoteScope scope = new IRremoteScope(MessageScope.Create("IRRemote"));

IRremoteScope scope = MessageScope.Create("IRRemote").ToIRremoteScope();

IRremoteScope scope = MessageScope.Create(MyConstellation.Packages.IRremote.GetRealName()).ToIRremoteScope();</pre><p></p>
<p>Ensuite sur la classe Scope généré pour votre package, ici “<em>IRRemoteScope</em>”, vous <strong>retrouverez vos MessageCallbacks sous forme de méthode .NET avec les paramètres et descriptions</strong> !</p>
<p>De ce fait vous disposez de l’auto complétion sans risque de faire des erreurs de frappe :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-135.png"><img class="colorbox-2153"  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/09/image_thumb-130.png" alt="image" width="450" height="152" border="0" /></a></p>
<p>Ainsi pour envoyer un code IR sur l’Arduino/ESP depuis mon code C#, on pourrait écrire :</p>
<p></p><pre class="crayon-plain-tag">// Send Power ON/OFF to Samsung TV
MyConstellation.Packages.IRremote.CreateIRremoteScope().SendCode("Samsung", 0xE0E040BF);</pre><p></p>
<h5>MessageCallbacks avec des paramètres complexes</h5>
<p>Ici le package “<em>IRRemote</em>” expose un MC sans paramètre et un autre avec deux paramètres simples (string et long).</p>
<p>Mais le générateur est également capable de gérer les types complexes. Par exemple prenez le package “Xbmc” permettant de piloter des média-centers Xbmc/Kodi.</p>
<p>Le package expose différents MessageCallbacks pour lancer un média, mettre pause, piloter le volume et également pour afficher un message à l’écran via le MessageCallback nommé “ShowNotification”.</p>
<p>Ce MessageCallback prend deux paramètres : le nom de l’hôte Xbmc (un string) et la notification à afficher. Cette notification est un objet de type “<em>Xbmc.NotificationRequest</em>” :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-136.png"><img class="colorbox-2153"  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/09/image_thumb-131.png" alt="image" width="350" height="155" border="0" /></a></p>
<p align="left">Sur la Console Constellation, vous pouvez cliquer sur les types personnalisés pour afficher les détails du type, ici un objet avec quatre propriétés :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-137.png"><img class="colorbox-2153"  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/09/image_thumb-132.png" alt="image" width="350" height="172" border="0" /></a></p>
<p align="left">Lorsque vous générez le code C# pour ce package vous retrouverez bien le MC “<em>ShowNotification</em>” avec le type personnalisé en paramètre :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-138.png"><img class="colorbox-2153"  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/09/image_thumb-133.png" alt="image" width="450" height="92" border="0" /></a></p>
<p>Le générateur a en effet reproduit le type personnalisé dans votre code C# :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-139.png"><img class="colorbox-2153"  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/09/image_thumb-134.png" alt="image" width="450" height="92" border="0" /></a></p>
<p>Ainsi pour afficher une notification sur un hôte Kodi, je pourrais écrire très simplement :</p>
<p></p><pre class="crayon-plain-tag">MyConstellation.Packages.Xbmc.CreateXbmcScope().ShowNotification("Kodi", new NotificationRequest() { Title = "Constellation", Message = "Hello World !" });</pre><p></p>
<h5>MessageCallbacks avec réponse : les sagas</h5>
<p>Une invocation d’un MessageCallback peut donner lieu à une réponse, on appelle cela les “<a href="/concepts/messaging-message-scope-messagecallback-saga/#Les_Sagas">Sagas</a>”. Avec l’API.NET, n’hésitez pas à relire les articles dédiés : <a href="/client-api/net-package-api/envoyer-des-messages-invoquer-des-messagecallbacks/#Invoquer_un_MessageCallback_avec_reponse_Utilisation_des_Sagas">Invoquer un MessageCallback avec réponse</a> et <a href="/client-api/net-package-api/messagecallbacks/#Repondre_a_une_saga">Répondre à une saga</a>.</p>
<p>Prenons un exemple, le package “Vera” (interface pour les box domotique) expose des MC pour envoyer des ordres à des périphériques Z-Wave :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-140.png"><img class="colorbox-2153"  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/09/image_thumb-135.png" alt="image" width="350" height="213" border="0" /></a></p>
<p align="left">Vous remarquerez d’ailleurs que les MC “<em>SetDimmableLevel</em>” et “<em>SetSwitchState</em>” prennent en argument un type complexe comme expliqué dans le chapitre précédent.</p>
<p align="left">Vous remarquerez également que ces trois MC retournent un message de réponse, ici de type “Boolean”. En effet le résultat de l’exécution de l’ordre Z-Wave par la Vera est retourné à l’appellent si celui-ci à attaché un numéro de Saga.</p>
<p align="left">Ainsi dans le code généré, les méthodes générées pour ces MessageCallbacks retournent une <em>Task&lt;T&gt; </em>où T est le type de retour, ici un booléen :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-141.png"><img class="colorbox-2153"  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/09/image_thumb-136.png" alt="image" width="350" height="70" border="0" /></a></p>
<p>Ainsi dans le C# on peut très facilement invoquer le MessageCallback et récupérer la réponse :</p>
<p></p><pre class="crayon-plain-tag">bool result = await MyConstellation.Packages.Vera.CreateVeraScope().SetSwitchState(new DeviceRequest() { DeviceID = 42, State = false });
 if (result)
 {
     PackageHost.WriteInfo("Device #42 turn off !");
 }
 else
 {
     PackageHost.WriteWarn("Unable to turn off the device #42 !");
 }</pre><p></p>
<p>Pour plus d’information à ce sujet, je vous recommande la lecture de l’article : <a href="/client-api/net-package-api/envoyer-des-messages-invoquer-des-messagecallbacks/#Invoquer_un_MessageCallback_avec_reponse_Utilisation_des_Sagas">Invoquer un MessageCallback avec réponse</a>.</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/constellation-platform/constellation-sdk/generateur-de-code/">Le générateur de code C#</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-sdk/generateur-de-code/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Gérer les connexions Constellation</title>
		<link>https://developer.myconstellation.io/constellation-platform/constellation-sdk/gerer-connexions-constellation/</link>
					<comments>https://developer.myconstellation.io/constellation-platform/constellation-sdk/gerer-connexions-constellation/#respond</comments>
		
		<dc:creator><![CDATA[Sebastien Warin]]></dc:creator>
		<pubDate>Tue, 09 Aug 2016 12:55:22 +0000</pubDate>
				<category><![CDATA[Constellation SDK]]></category>
		<category><![CDATA[SDK]]></category>
		<category><![CDATA[AccessKey]]></category>
		<category><![CDATA[connexion]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=2159</guid>

					<description><![CDATA[<p>Pour gérer les connexions Constellation dans Visual Studio, cliquez sur le bouton “Manage Constellation Servers” dans la barre d’outils Constellation : Vous pourrez alors ajouter, supprimer ou éditer des connexions vers vos serveurs Constellation : Le bouton “Test” permet de</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/constellation-platform/constellation-sdk/gerer-connexions-constellation/">Gérer les connexions Constellation</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Pour gérer les connexions Constellation dans Visual Studio, cliquez sur le bouton “Manage Constellation Servers” dans la barre d’outils Constellation :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/08/image.png"><img class="colorbox-2159"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Manage Constellation Servers" src="https://developer.myconstellation.io/wp-content/uploads/2016/08/image_thumb.png" alt="Manage Constellation Servers" width="354" height="71" border="0" /></a></p>
<p>Vous pourrez alors ajouter, supprimer ou éditer des connexions vers vos serveurs Constellation :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/08/image-1.png"><img class="colorbox-2159"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Manage Constellation Servers" src="https://developer.myconstellation.io/wp-content/uploads/2016/08/image_thumb-1.png" alt="Manage Constellation Servers" width="354" height="268" border="0" /></a></p>
<p align="left">Le bouton “Test” permet de tester la connectivité.</p>
<p align="left">N’oubliez pas de sélectionner dans le liste déroulante en haut de la fenêtre, le serveur Constellation à utiliser pour le debug des packages.</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/constellation-platform/constellation-sdk/gerer-connexions-constellation/">Gérer les connexions 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-sdk/gerer-connexions-constellation/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Editer la configuration Constellation depuis Visual Studio</title>
		<link>https://developer.myconstellation.io/constellation-platform/constellation-sdk/editer-configuration-constellation-depuis-visual-studio/</link>
					<comments>https://developer.myconstellation.io/constellation-platform/constellation-sdk/editer-configuration-constellation-depuis-visual-studio/#respond</comments>
		
		<dc:creator><![CDATA[Sebastien Warin]]></dc:creator>
		<pubDate>Tue, 09 Aug 2016 12:54:56 +0000</pubDate>
				<category><![CDATA[Constellation SDK]]></category>
		<category><![CDATA[Configuration]]></category>
		<category><![CDATA[SDK]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=2157</guid>

					<description><![CDATA[<p>Pour éditer la configuration de votre Constellation depuis Visual Studio cliquer sur l’icone : Vous retrouvez aussi ce bouton dans le menu contextuel (clique-droit) sur un projet Constellation: Par défaut, Visual Studio ouvrira le fichier de configuration du serveur Constellation</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/constellation-platform/constellation-sdk/editer-configuration-constellation-depuis-visual-studio/">Editer la configuration Constellation depuis Visual Studio</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Pour éditer la configuration de votre Constellation depuis Visual Studio cliquer sur l’icone <a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-98.png"><img class="colorbox-2157"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/09/image_thumb-93.png" alt="image" width="23" height="26" border="0" /></a> :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-99.png"><img class="colorbox-2157"  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/09/image_thumb-94.png" alt="image" width="350" height="98" border="0" /></a></p>
<p align="left">Vous retrouvez aussi ce bouton dans le menu contextuel (clique-droit) sur un projet Constellation:</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-100.png"><img class="colorbox-2157"  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/09/image_thumb-95.png" alt="image" width="354" height="306" border="0" /></a></p>
<p>Par défaut, Visual Studio ouvrira le fichier de configuration du serveur Constellation enregistré si il n’y en a qu’un. Autrement un fenêtre vous invitera à sélectionner le serveur Constellation à utiliser :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-105.png"><img class="colorbox-2157"  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/09/image_thumb-100.png" alt="image" width="350" height="89" border="0" /></a></p>
<p>Pour gérer les serveurs Constellation dans Visual Studio, <a href="/constellation-platform/constellation-sdk/gerer-connexions-constellation/">consultez cet article</a>.</p>
<p>Une fois la configuration de votre serveur Constellation ouverte dans Visual Studio, vous pouvez l&rsquo;éditer comme bon vous semble :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-102.png"><img class="colorbox-2157"  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/09/image_thumb-97.png" alt="image" width="350" height="190" border="0" /></a></p>
<p align="left">Vous disposerez de l’auto-complétion et de la validation du schéma de votre configuration :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-103.png"><img class="colorbox-2157"  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/09/image_thumb-98.png" alt="image" width="350" height="120" border="0" /></a></p>
<p align="left">Lorsque vous enregistrez ce fichier, Visual Studio vous proposera d’uploader le fichier modifié sur votre Constellation :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-106.png"><img class="colorbox-2157"  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/09/image_thumb-101.png" alt="image" width="350" height="210" border="0" /></a></p>
<p align="left">Vous pourrez également ordonner le rechargement de votre nouvelle configuration sur votre serveur :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-107.png"><img class="colorbox-2157"  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/09/image_thumb-102.png" alt="image" width="350" height="158" border="0" /></a></p>
<p align="left">Ici, si vous ouvrez la Console Constellation vous pourrez observer vos modifications :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/09/image-108.png"><img class="colorbox-2157"  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/09/image_thumb-103.png" alt="image" width="350" height="190" border="0" /></a></p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/constellation-platform/constellation-sdk/editer-configuration-constellation-depuis-visual-studio/">Editer la configuration Constellation depuis Visual Studio</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-sdk/editer-configuration-constellation-depuis-visual-studio/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Créer, tester et déployer des packages Python en ligne de commande</title>
		<link>https://developer.myconstellation.io/client-api/python-api/developper-avec-le-package-tools-cli/</link>
					<comments>https://developer.myconstellation.io/client-api/python-api/developper-avec-le-package-tools-cli/#respond</comments>
		
		<dc:creator><![CDATA[Sebastien Warin]]></dc:creator>
		<pubDate>Thu, 07 Sep 2017 21:50:15 +0000</pubDate>
				<category><![CDATA[Python API]]></category>
		<category><![CDATA[Constellation SDK]]></category>
		<category><![CDATA[MessageCallback]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Constellation]]></category>
		<category><![CDATA[StateObject]]></category>
		<category><![CDATA[Package]]></category>
		<category><![CDATA[WriteLog]]></category>
		<category><![CDATA[Settings]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=5341</guid>

					<description><![CDATA[<p>Vous pouvez créer des packages Constellation Python avec Visual Studio ou alors sans IDE avec l&#8217;outil en ligne de commande nommé « Constellation Package Tools CLI ». Nous allons dans cet article créer, tester et déployer sur votre Constellation un package Python</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/client-api/python-api/developper-avec-le-package-tools-cli/">Créer, tester et déployer des packages Python en ligne de commande</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Vous pouvez <a href="https://developer.myconstellation.io/getting-started/creez-votre-premier-package-constellation-en-python/">créer des packages Constellation Python avec Visual Studio</a> ou alors sans IDE avec l&rsquo;outil en ligne de commande nommé <em><strong>« Constellation Package Tools CLI ».</strong></em></p>
<p>Nous allons dans cet article créer, tester et déployer sur votre Constellation un package Python avec cet outil.</p>
<h2>Prérequis</h2>
<p>Le « Constellation Package Tools CLI » est un outil en ligne de commande compatible Windows et Linux. Il est écrit en Python et s&rsquo;installe via PIP avec la commande :</p>
<p></p><pre class="crayon-plain-tag">pip install constellation-pkgtools-cli</pre><p></p>
<p>Sur Windows vous devriez au préalable avoir installé Python 2.7 ainsi que l&rsquo;outil « pip » et les libraires « pyzmq » et « enum34 ». La procédure complète d&rsquo;installation est <a href="https://developer.myconstellation.io/getting-started/creez-votre-premier-package-constellation-en-python/#Installer_Python_sur_Windows">décrite sur cette page</a>.</p>
<p>Via une invite de commande, tapez la commande ci-dessus :</p>
<p style="text-align: center;"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image.png"><img class="colorbox-5341"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Installation sur Windows" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb.png" alt="Installation sur Windows" width="354" height="246" border="0" /></a></p>
<p>Sur Linux, vous devez également avoir installé Python 2.7 (généralement installé par défaut),  l&rsquo;outil « pip » et les libraires « pyzmq » et « enum34 » sans oublier le moteur Mono. Pour cela, utilisez le WPI (<em>Web Platform Installer</em>) pour <a href="/getting-started/ajouter-des-sentinelles/#Installation_dune_sentinelle_sur_un_systeme_Linux">installer une sentinelle Constellation</a>. Celui-ci se chargera de déployer l&rsquo;ensemble des prérequis nécessaire.</p>
<p style="text-align: center;"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-1.png"><img class="colorbox-5341"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Installation sur Linux" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-1.png" alt="Installation sur Linux" width="354" height="226" border="0" /></a></p>
<h2>La commande « ctln »</h2>
<p>Une fois le package Python « <em>constellation-pkgtools-cli</em> » installé via PIP, vous aurez accès à une commande nommée « ctln » (abréviation de <strong>C</strong>ons<strong>t</strong>e<strong>l</strong>latio<strong>n</strong>)</p>
<p style="text-align: center;"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-3.png"><img class="colorbox-5341"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Commande &quot;ctln&quot;" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-3.png" alt="Commande &quot;ctln&quot;" width="454" height="229" border="0" /></a></p>
<p>Cette commande vous permettra de créer de nouveau package, les tester et déployer en local ou directement sur un serveur Constellation.</p>
<h2>Créer son premier package Python</h2>
<p>Pour créer un nouveau package utilisez simplement la commande “create” en spécifiant le nom de votre package. Par exemple :</p>
<p></p><pre class="crayon-plain-tag">ctln create &lt;mon projet&gt;</pre><p></p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-4.png"><img class="colorbox-5341"  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 package" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-4.png" alt="Création d'un nouveau package" width="354" height="234" border="0" /></a></p>
<p align="left">Et voilà, votre package “MyFirstPackage” est créé dans le répertoire du même nom !</p>
<h3 align="left">Template de package</h3>
<p>Chaque package est créé à partir d’un template. Vous pouvez lister les templates avec la commande :</p>
<p></p><pre class="crayon-plain-tag">ctln template list</pre><p></p>
<p>A l’heure où est écrit cet article il y a deux templates de type “projet” :</p>
<ul>
<li>Python Base Template : le template de base (créé par défaut)</li>
<li>Python Demo template : package Python avec du code de “demo”</li>
</ul>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-5.png"><img class="colorbox-5341"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Listing des templates de package" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-5.png" alt="Listing des templates de package" width="354" height="234" border="0" /></a></p>
<p align="left">Lorsque vous créez un package avec la commande “ctln create”, le template “python-base” est sélectionné par défaut.</p>
<p align="left">Vous pouvez cependant préciser l’Id du template à utiliser dans la commande “ctln create”. Par exemple pour créer un package sur base du template de demo :</p>
<p></p><pre class="crayon-plain-tag">ctln create &lt;mon projet&gt; python-demo</pre><p></p>
<p align="left">Il y a aussi des templates de type “item”, c’est à dire des templates pour les scripts que vous allez rajouter par la suite à votre package.</p>
<h3 align="left">Mise à jour du template</h3>
<p align="left">Comme vous le constatez dans le listing des templates ci-dessus, chaque template comporte un numéro de version car ils sont amenés à évoluer notamment en cas de mise à jour des librairies Constellation.</p>
<p align="left">Avec le SDK Constellation Visual Studio, les nouvelles versions des librairies sont diffusées avec NuGet. Ici avec cet outil en ligne de commande, les nouvelles librairies sont embarquées dans des mises à jour des templates.</p>
<p align="left">Ainsi pour mettre à jour vos packages, vous pouvez tout simplement mettre à jour le template de votre package par la commande :</p>
<p></p><pre class="crayon-plain-tag">ctln update</pre><p></p>
<p align="left">Cette commande doit être lancé depuis le répertorie racine de votre package.</p>
<p align="left">Notez également que la mise à jour est “intelligente” dans la mesure où elle n’écrase pas vos fichiers de configuration, le manifeste du package ou encore vos scripts Python.</p>
<h2>Développer son package</h2>
<p>Le développement de package Python est <a href="/getting-started/creez-votre-premier-package-constellation-en-python/#Creez_le_package_Python_dans_Visual_Studio">expliqué dans cet article</a>. Bien que l&rsquo;article se base sur Visual Studio, l&rsquo;API Python est strictement identique.</p>
<p>Ainsi, pour rappel, vous avez à la racine de votre projet le fichier « <a href="/concepts/package-manifest/">PackageInfo.xml</a> » qui contient l&rsquo;ensemble des informations de votre package (<a href="/concepts/package-manifest/">plus de détail ici</a>) mais aussi le fichier de configuration nommé « PythonPackageHost.exe.config » qui contient la liste des scripts Python à lancer.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-7.png"><img class="colorbox-5341"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Structure du package" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-7.png" alt="Structure du package" width="354" height="234" border="0" /></a></p>
<p>Les <a href="/getting-started/creez-votre-premier-package-constellation-en-python/#Les_bases">bases </a>du développement d&rsquo;un script Constellation Python <a href="/getting-started/creez-votre-premier-package-constellation-en-python/#Les_bases">sont expliquées ici</a>.</p>
<p>Pour faciliter le développement, vous n&rsquo;êtes pas obligé de modifier manuellement le fichier de configuration pour gérer les scripts Python. Pour cela vous avez à disposition différentes commandes pour lister, ajouter, renommer ou supprimer des scripts.</p>
<h3>Lister les scripts du package</h3>
<p>Les scripts Constellation Python lancés par votre package peuvent être listés par la commande :</p>
<p></p><pre class="crayon-plain-tag">ctln pyscript list</pre><p></p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-6.png"><img class="colorbox-5341"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Listing des scripts Python du package" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-6.png" alt="Listing des scripts Python du package" width="354" height="234" border="0" /></a></p>
<p style="text-align: left;">Ici votre package « MyFirstPackage » ne contient qu&rsquo;un seul script nommé « Main.py » dans le répertoire Scripts du package.</p>
<h3 style="text-align: left;">Ajouter des scripts Python</h3>
<p style="text-align: left;">Pour ajouter un script Constellation Python, vous pouvez soit ajouter un script existant sur votre système de fichier dans votre package ou soit créer un nouveau script à partir d&rsquo;un modèle (template).</p>
<h4 style="text-align: left;">Ajouter un script existant</h4>
<p style="text-align: left;">Pour un script existant, il suffit d&rsquo;utiliser l&rsquo;option « add » :</p>
<p></p><pre class="crayon-plain-tag">ctln pyscript add &lt;filepath&gt; [--filename=&lt;name&gt;]</pre><p></p>
<p>Vous devez spécifier le chemin complet vers votre fichier à ajouter (filepath) et optionnellement le nom du fichier une fois ajouté dans votre package.</p>
<p>Par exemple la commande ci-dessous ajoutera dans votre package le fichier « ~/demo/MyDemo.py » sous le nom « DemoSeb.py »</p>
<p></p><pre class="crayon-plain-tag">ctln pyscript add ~/demo/MyDemo.py --filename=DemoSeb.py</pre><p></p>
<h4 style="text-align: left;">Ajouter de nouveau script</h4>
<p style="text-align: left;">L&rsquo;action la plus courante sera de créer un nouveau script Python dans votre package avec l&rsquo;action « new » via la commande suivante :</p>
<p></p><pre class="crayon-plain-tag">ctln pyscript new &lt;filename&gt; [&lt;item_template_name&gt;]</pre><p></p>
<p>Vous devez obligatoirement spécifier le nom du fichier (filename) avec ou sans l’extension .py (rajoutée automatiquement). Le script sera créé dans le répertoire Scripts de votre package et automatiquement déclaré dans la configuration.</p>
<p>Vous pouvez également spécifier l&rsquo;identifiant du template à utiliser. Les templates peuvent être listés avec la commande « <em>ctln template list</em> » comme vu ci-dessus.  A l&rsquo;heure où cet article est écrit il y a trois templates de type « item » :</p>
<ul>
<li>« python-base » : le template de base</li>
<li>« python-demo »  : un template avec du code de demonstration</li>
<li>« python-empty »  : un squelette vide</li>
</ul>
<p>Si vous ne précisez pas l&rsquo;identifiant, c&rsquo;est le template « python-base » qui sera utilisé.</p>
<p>Par exemple ajoutons à notre package un deuxième script (avec le template de base) :</p>
<p></p><pre class="crayon-plain-tag">ctln pyscript new Main2</pre><p></p>
<p>Rajoutons également un troisieme scriupt de démonstation en utilisant le template de demo (python-demo) :</p>
<p></p><pre class="crayon-plain-tag">ctln pyscript new DemoConstellation python-demo</pre><p></p>
<p>Notre package a maintenant trois scripts : Main.py (créé avec le template du package), Main2.py (créé ci-dessus avec le template de base), DemoConstellation.py (créé avec le template de demo) :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-8.png"><img class="colorbox-5341"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Ajout de scripts Python" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-8.png" alt="Ajout de scripts Python" width="354" height="226" border="0" /></a></p>
<h3 style="text-align: left;">Renommer ou supprimer des scripts</h3>
<p style="text-align: left;">Vous pouvez renommer les scripts du package avec l’option “rename”. Par exemple renommons “DemoConstellation” par “Demo” (les extensions “.py” sont optionnelles) :</p>
<p></p><pre class="crayon-plain-tag">ctln pyscript rename DemoConstellation Demo</pre><p></p>
<p><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-9.png"><img class="colorbox-5341"  loading="lazy" style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="Renommer des scripts" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-9.png" alt="Renommer des scripts" width="354" height="226" border="0" /></a></p>
<p>Pour supprimer des scripts il suffit d’utiliser l’option “remove” en spécifiant le nom du script (avec ou sans son extension .py).</p>
<p>Par exemple supprimons les deux fichiers “Main2.py” et “Demo.py” que nous avons ajoutés (et renommés) ci-dessus :</p>
<p></p><pre class="crayon-plain-tag">ctln pyscript remove Main2
ctln pyscript remove Demo</pre><p></p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-10.png"><img class="colorbox-5341"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Supprimer des scripts" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-10.png" alt="Supprimer des scripts" width="354" height="226" border="0" /></a></p>
<h3>Editer les scripts Python du package</h3>
<p>Une fois vos scripts ajoutés, renommés ou supprimés avec la commande “ctln”, libre à vous d’utiliser votre éditeur de texte préféré pour éditer votre code !</p>
<p>Par exemple de le cas ici présent d’un accès SSH Linux, je pourrais utiliser “nano” ou “vim” (ou encore Notepad++ sur ma station WIndows via un tranfert SCP avec WInSCP par exemple).</p>
<p></p><pre class="crayon-plain-tag">nano Scripts/Main.py</pre><p></p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-11.png"><img class="colorbox-5341"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Edition des scripts Python avec Nano" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-11.png" alt="Edition des scripts Python avec Nano" width="354" height="226" border="0" /></a></p>
<p align="left">Ici le script “Main” défini une fonction de démarrage (<em>OnStart</em>) et une fonction de fermeture (<em>OnExit</em>). Pour rappel, les <a href="/getting-started/creez-votre-premier-package-constellation-en-python/#Les_bases">bases </a>de l’API Constellation Python <a href="/getting-started/creez-votre-premier-package-constellation-en-python/#Les_bases">sont expliquées ici</a>.</p>
<p align="left">Notez simplement que dans cet exemple, le WriteInfo déclenché au démarrage (<em>OnStart</em>) écrit un log dasn Constellation de type “Information” en concaténant dans un message textuel les propriétés suivantes :</p>
<ul>
<li>
<div align="left">“<span style="text-decoration: underline;">PackageName</span>” : le nom du package</div>
</li>
<li>
<div align="left">“<span style="text-decoration: underline;">SentinelName</span>” : le nom de la sentinelle sur laquelle est déployée ce package</div>
</li>
<li>
<div align="left">“<span style="text-decoration: underline;">IsStandAlone</span>” : un booléen indiquant si le package tourne de façon indépendante ou hébergée au sein d’une sentinelle</div>
</li>
<li>
<div align="left">“<span style="text-decoration: underline;">IsConnected</span>” : un booléen indiquant si le package est connecté ou non à une Constellation</div>
</li>
</ul>
<h2>Tester son package</h2>
<p>Pour tester notre package en local, il suffit de lancer la commande suivante :</p>
<p></p><pre class="crayon-plain-tag">ctln run</pre><p></p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-12.png"><img class="colorbox-5341"  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 en local" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-12.png" alt="Démarrage du package en local" width="354" height="215" border="0" /></a></p>
<p>Comme vous pouvez le lire sur la console, le nom de la sentinelle affichée est “local sandbox” étant donné que la propriété <em>IsStandalone</em> est <em>true</em> (la propriété <em>SentinelName</em> est None). En effet votre package n’est pas déployé/démarré par Constellation sur une véritable sentinelle. Il est juste démarré en “standalone” par la commande “run”.</p>
<p>De plus la propriété “<em>IsConnected</em>” est <em>false</em> car votre package n’est pas connecté à une Constellation.</p>
<p>Vous pouvez donc tester des éléments de base de votre package mais de façon déconnecté, il manquera donc plusieurs fonctionnalités (les logs produits resterons local dans votre console, pas d&rsquo;accès aux settings hormis ceux déclarés en local, la publication ou consommation de StateObjects sera impossible tout comme l’invocation ou l&rsquo;exposition de MessageCallbacks).</p>
<p>Pour tester votre package complètement, il est possible de le lancer en local tout en le connectant à une Constellation.</p>
<p>Tout d&rsquo;abord, il faudra déclarer des serveurs Constellation dans l&rsquo;outil <em>ctln</em>.</p>
<h3>Ajouter et gérer des serveurs Constellation</h3>
<p>Les commandes sont les suivantes :</p>
<p></p><pre class="crayon-plain-tag">ctln server list
ctln server (add | set) &lt;name&gt; --url=&lt;url&gt; --accesskey=&lt;key&gt;
ctln server (add | set) &lt;name&gt; --url=&lt;url&gt; --username=&lt;user&gt;
ctln server check &lt;name&gt;
ctln server remove &lt;name&gt;</pre><p></p>
<p>Vous pouvez lister les serveurs, ajouter ou mettre à jour des serveurs avec la clé d’accès ou un couple login/password, tester la connectivité ou supprimer des serveurs.</p>
<p>Par exemple je dispose d’une Constellation installée à l’adresse : <a title="http://pc-seb.ajsinfo.loc:8088" href="http://pc-seb.ajsinfo.loc:8088">http://pc-seb.ajsinfo.loc:8088</a>. Un credential basé sur le couple login/password “admin/seb” a été configuré. Je peux donc ajouter ce serveur que je nommerai ici “pc-seb” via la commande :</p>
<p></p><pre class="crayon-plain-tag">ctln server add pc-seb --url=http://pc-seb.ajsinfo.loc:8088 --username=admin</pre><p></p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-13.png"><img class="colorbox-5341"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Ajout de serveur Constellation" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-13.png" alt="Ajout de serveur Constellation" width="354" height="215" border="0" /></a></p>
<p>Le serveur ajouté est testé au moment de l’ajout mais vous pouvez à tout moment tester la connectivité vers cette Constellation avec la commande “<em>ctln server check</em>”. Par exemple pour tester la Constellation nommée “pc-seb” :</p>
<p></p><pre class="crayon-plain-tag">ctln server check pc-seb</pre><p></p>
<h3>Tester son package dans Constellation</h3>
<p>Maintenant que nous avons ajouté un serveur Constellation dans l’outil, nous pouvons relancé notre package en le connectant à notre Constellation nommée “pc-seb” via la commande :</p>
<p></p><pre class="crayon-plain-tag">ctln run --server=pc-seb</pre><p></p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-14.png"><img class="colorbox-5341"  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 en local mais connecté à un serveur Constellation" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-14.png" alt="Démarrage du package en local mais connecté à un serveur Constellation" width="354" height="215" border="0" /></a></p>
<p align="left">Le package démarre toujours dans la « sandbox locale » (<em>IsStandalone = true</em>) mais cette fois ci il est connecté à ma Constellation nommée « pc-seb » (<em>IsConnected = true</em>).</p>
<p align="left">D’ailleurs en lançant la Console Constellation je peux maintenant suivre en temps réel les logs de ce package, les StatesObjects qu’il produit ou encore les MessageCallbacks qu’il expose.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-15.png"><img class="colorbox-5341"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Connexion du package avec sa Constellation" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-15.png" alt="Connexion du package avec sa Constellation" width="354" height="208" border="0" /></a></p>
<h2>Publier son package</h2>
<p>Une fois le package développé et testé, il ne reste plus qu’à le packager pour pouvoir le déployer dans Constellation.</p>
<p>Vous pouvez soit le packager dans un fichier en local (que vous pourrez uploader sur une Constellation ou échanger avec d&rsquo;autre) ou soit le déployer directement dans une Constellation référencée dans l&rsquo;outil.</p>
<p>Par exemple pour publier ce package dans un fichier local dans le répertoire “/home/pi” :</p>
<p></p><pre class="crayon-plain-tag">ctln publish --output=/home/pi</pre><p></p>
<p>Maintenant, pour déployer ce même package directement sur une Constellation, il suffit simplement de spécifier le nom du serveur Constellation enregistré sur la commande “publish”.</p>
<p>Par exemple pour publier ce package sur la Constellation nommée ici “pc-seb” :</p>
<p></p><pre class="crayon-plain-tag">ctln publish pc-seb</pre><p></p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-16.png"><img class="colorbox-5341"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Publication d'un package sur une Constellation" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-16.png" alt="Publication d'un package sur une Constellation" width="354" height="215" border="0" /></a></p>
<p align="left">En vous rendant sur le <a href="/constellation-platform/constellation-console/package-repository/">Package Repository</a> de votre Console Constellation, votre package fraîchement publié sera prêt à être <a href="/constellation-platform/constellation-console/gerer-packages-avec-la-console-constellation/#Deployer_un_package">déployé sur vos sentinelles Windows ou Linux</a> de votre Constellation.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/09/image-17.png"><img class="colorbox-5341"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Package Repository" src="https://developer.myconstellation.io/wp-content/uploads/2017/09/image_thumb-17.png" alt="Package Repository" width="354" height="268" border="0" /></a></p>
<h2>Next steps</h2>
<p>Pour en savoir plus sur le développement de package en Python :</p>
<ul>
<li>Retour sur <a href="/getting-started/creez-votre-premier-package-constellation-en-python/#Les_bases">les bases</a> de l’API Python  (<a href="/getting-started/creez-votre-premier-package-constellation-en-python/#Produire_des_logs">produire des logs</a>, <a href="/getting-started/creez-votre-premier-package-constellation-en-python/#Acces_aux_settings">accéder aux settings</a>, <a href="/getting-started/creez-votre-premier-package-constellation-en-python/#Publier_des_StateObjects">publier des StateObjects</a>)</li>
<li><a href="/client-api/python-api/messagecallbacks-exposer-des-methodes-python/">Exposer vos fonctions</a> Python dans Constellation (les MessageCallbacks)</li>
<li><a href="/client-api/python-api/envoyer-des-messages-et-invoquer-des-messagecallbacks-en-python/">Invoquer des MessageCallbacks</a> des autres packages de votre Constellation en Python</li>
<li><a href="/client-api/python-api/consommer-des-stateobjects-en-python/">Consommer les StateObjects</a> de votre Constellation</li>
</ul>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/client-api/python-api/developper-avec-le-package-tools-cli/">Créer, tester et déployer des packages Python en ligne de commande</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://developer.myconstellation.io/client-api/python-api/developper-avec-le-package-tools-cli/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-21 05:15:17 by W3 Total Cache
-->