Sommaire

Dans ce tutoriel nous allons créer un relais connecté qu’on pourra contrôler depuis une page Web, une montre ou même un script Powershell pour piloter une lumière, une porte de garage, une chaudière ou n’importe quelle charge électrique (10 ampères max) ou contact sec.

Prérequis

  • Un Arduino connecté ou un ESP8266
  • Un shield relais (ou un relais seul avec une diode, une résistance et un transistor NPN)
  • Un serveur Constellation

Etape 1 : le montage

Ici on utilisera un D1 Mini Pro (ESP8266) avec un « Shield » relais tout fait qu’il n’y a plus qu’à déposer sur le « D1 Mini ». Si vous n’avez de shield, vous pouvez utiliser un relais seul que vous piloterez avec un transistor NPN via une sortie de l’ESP8266.

Relais connecté

Vous retrouverez sur ce shield un bornier à 3 pôles :

  • Le pôle de gauche est « NO » (normalement ouvert)
  • Le pole du milieu est le commun
  • Le pôle de droite est « NC » (normalement fermé)

Autrement dit, au repos il y a contact entre le 2ème et 3ème pole (normalement fermé). Lorsque que vous activez le relais, vous permutez le contact entre la 1ère et le 2ème pole.

Si vous voulez piloter une lampe, connectez un des fils entre la source d’énergie et votre lampe sur le pole « commun » et le pole « NO ». Ainsi au repos, votre lampe ne sera pas allumée mais si vous activez votre relais elle le sera.

Attention tout de même si vous manipulez des sources AC 220V et n’oubliez pas que votre relais ne supporte que des charges inférieures à 10A (soit environ 2200W).

Etape 3 : la programmation

Pour démarrer vous devez dans Constellation déclarer une sentinelle associée à une clé d’accès et un package virtuel. Ici notre ESP8266 est représenté par la sentinelle nommée “ESP8266” et le package virtuel se nomme “MyRelay”.

Dans l’Arduino IDE, nous créons un nouveau projet à partir du Starter Kit Constellation pour ESP8266 dans lequel nous allons définir le nom de notre réseau Wifi (SSID) ainsi que sa clé d’accès  puis nous configurerons le client Constellation en spécifiant l’identité de notre package virtuel, sa clé d’accès et l’adresse/port de notre serveur Constellation :

Encore une fois si tout cela est nouveau pour vous, je vous recommande de suivre ce guide d’introduction à l’API Constellation pour Arduino/ESP8266.

Notre relais se pilote par la sortie D1. Commencez donc par configurer cette sortie en ajoutant la ligne suivante dans la méthode « setup() » :

Ensuite, toujours dans la méthode de démarrage « setup() » et une fois connecté au Wifi, déclarez le MessageCallback suivant :

Nous exposons ici un MessageCallback nommé « SwitchState »  qui prend en paramètre un booléen pour définir l’état du relais (ON ou OFF).

Le code du MC pilotera alors la sortie D1 sur lequel est connecté notre relais et publiera un StateObject « State » avec l’état actuel du relais.

Pour finir, toujours au démarrage, ajoutez cette ligne après la déclaration de votre MC :

Ainsi au démarrage de l’ESP8266, le relais est forcément sur Off, donc nous actualisation le StateObject « State » sur Constellation avec la valeur « false ».

Et voilà, votre relais connecté est opérationnel !

Vous pouvez connecter sur les pôles NO et commun une charge électrique comme une lampe ou une simple LED, en courant continue ou alternatif (220V par exemple) sans dépasser 10 ampères.

Si vous ne connectez rien sur votre relais, vous pouvez tout de même tester son bon fonctionnement :

  • Le relais « claque » lorsqu’il change d’état
  • Une petite LED rouge à côté de l’inscription « NC » s’allumera quand le relais est sur « ON »

Lancez le MessageCallback Explorer de la Console Constellation pour tester votre MessageCallback :

MessageCallbacks Explorer

Etape 3 : créer une page Web de pilotage du relais

Créons maintenant une page Web pour piloter notre relais. Pour cela créez un fichier HTML sur votre poste avec une structure HTML de base.

Dans les entêtes ajoutez les scripts suivants :

Sur la balise <html> ajoutez l’attribut :

Et sur la balise <body> ajoutez l’attribut :

Ajoutez ensuite le script suivant dans votre page (dans une balise <script>) :

N’oubliez pas de définir l’adresse de votre Constellation ainsi que la clé d’accès pour vous connecter à votre Constellation lors de l’appel de la méthode « constellation.initializeClient ».

Enfin, ajoutez sur votre page la valeur du StateObject « State » et un bouton pour envoyer un message au package « MyRelay » afin d’invoquer le MC « SwitchState ».

Par exemple avec quelques classes CSS issues de Bootstrap :

Vous obtenez en quelques minutes une page Web permettant de piloter en temps réel votre relais avec un retour sur son état courant.

Page Web de contrôle

Vous pouvez d’ailleurs ouvrir la page sur plusieurs navigateurs ou sur plusieurs machines et constater que toutes les pages se mettent à jour en temps réel dès que l’état du relais change.

Etape 4 (optionnelle) : Piloter le relais avec un script Powershell

Pour invoquer votre MessageCallback depuis un script Powershell nous allons utilisez l’interface http.

Vous pouvez d’ailleurs afficher le code snippet pour obtenir l’URL depuis le MessageCallback Explorer.

Dans notre cas l’URL sera : http://localhost:8088/rest/consumer/SendMessage?SentinelName=Consumer&PackageName=DemoPowershel&AccessKey=xxxx&scope=Package&args=MyRelay&key=SwitchState&data=true

Comme vous le constatez nous utilisons l’interface « /consumer ». L’argument « sentinelName » doit donc être « Consumer » et le nom du package est en fait un « friendly name » que nous appellerons ici « DemoPowershell ». Vous devez remplacer le « xxxx » par une clé d’accès valide, par exemple la même que celle utilisée par les ESP.

Notre Powershell est donc un « consommateur » et non un « package virtuel ». Il n’y a donc pas besoin de le déclarer dans la configuration de notre Constellation. Un consommateur peut envoyer ou recevoir des messages et consommer des StateObjects mais il ne peut pas écrire de log ni même publier des StateObjects.

Si vous souhaitez utiliser ce script sur une autre machine sur le serveur Constellation, remplacez dans l’URL « localhost » par l’adresse IP ou DNS de votre serveur Constellation.

Pour invoquer une URL en Powershell vous pouvez utiliser la command-let « Invoke-WebRequest ».

Créons alors un script Powershell que nous nommerons « SwitchRelay.ps1 » avec le code suivant :

Et voilà votre commande Powershell est capable d’invoquer un MessageCallback dans votre Constellation et donc de piloter le relais de votre ESP8266 !

Script Powershell

Créer un relais connecté
Editer la page sur GitHub
Étiqueté avec :                        

Démarrez la discussion sur le forum Constellation