Forum eedomus
http://forum.eedomus.fr/

Commande+Notification porte de garage pour moins de 10€
http://forum.eedomus.fr/viewtopic.php?f=58&t=6228
Page 1 sur 1
Auteur:  Cen [ 03 Déc 2017 20:58 ]
Sujet du message:  Commande+Notification porte de garage pour moins de 10€

Introduction

Je vous présente un petit montage simple à quelques Euros qui permet de remonter sur la boite eedomus l’information si la porte du garage est ouverte ou fermée, et de commander son ouverture/fermeture toujours depuis la eedomus.

Cette solution se base sur le matériel suivant
• Un module "NodeMCU, ESP8260", acheté sur Wish pour 3 Euros
• Un relais et un capteur d’inclinaison, pour Arduino, acheté aussi sur Wish pour 2 Euros
• Une alimentation USB (que j’avais déjà)

Prérequis: le circuit "NodeMCU ESP8260" fonctionne par Wifi, et donc, il faut une couverture Wifi dans le garage.

Photo3 Boitier.jpg
Photo3 Boitier.jpg (187 Kio) Consulté 16252 fois




Le montage hardware

Pour mettre en route l’environnement de développement, je me suis basé sur les mini tutos que vous trouverez à cette adresse :
https://easycoding.tn/index.php/nodemcu/

La mise en œuvre est simple et rapide : en moins d’une heure, je pouvais déjà actionner la led interne du NodeMCU, et une heure plus tard, je pouvais faire la même chose, mais par Wifi. Bref, c’est un module assez impressionnant.
Photo1 Circuit.jpg
Circuit
Photo1 Circuit.jpg (281.72 Kio) Consulté 16252 fois


Voici le schéma, relativement simple, qui montre donc comment le relais et le capteur d’inclinaison sont connectés au NodeMCU :
Schema.jpg
Schéma
Schema.jpg (47.99 Kio) Consulté 16252 fois


Alimenté en 5V par le port USB, Consommation: moins de 0.1W
I/O Pin usage:
Relais 13= Pin D7
Sensor 4= Pin D2

J’ai mis tout cela dans une petite boite, les circuits étant fixés sur un petit morceau de lino. Pour le boitier de mon prochain montage, je négocierai avec mon fils quelques legos !
Photo6 Boitier.jpg
Boitier2
Photo6 Boitier.jpg (344.03 Kio) Consulté 16252 fois


Et quelques photos, l’installation montée dans mon garage

Porte fermée, on voit le capteur contre la porte, et la petite boite sur l’étagère
Photo9 Garage.jpg
Garage1
Photo9 Garage.jpg (425.21 Kio) Consulté 16252 fois

Le module sur l’étagère. Le cable rouge/noir va vers le capteur sur la porte, le cable blanc sur l’entrée du système d’ouverture/fermeture du garage, et enfin, on distingue encore le petit chargeur USB, pour alimenter le module

Photo10 Garage.jpg
Garage2
Photo10 Garage.jpg (321.45 Kio) Consulté 16252 fois

Photo11 Garage.jpg
Garage3
Photo11 Garage.jpg (273.87 Kio) Consulté 16252 fois


Le programme du NodeMCU
Il vous faudra modifier ce programme ainsi
• Fixer vos informations WiFi : adresse IP, gateway et subnet, SSID et mot de passe
• Fixer vos codes api_user et api_secret (voir la section « Configuration eedomus »)
• A regarder, j’ai mis des XXX ou YYY là où il faut adapter

Quelques informations sur ce programme. Bien sûr, tout peut être modifié à votre guise
• Le module est programmé pour attendre 10s lorsqu’un changement a lieu. Cela permet à ma porte de garage de changer de position, au capteur d’inclinaison de se stabiliser, pour ne pas remonter des notifications intermédiaires, inutiles
• Dès que le capteur détecte un changement, il envoie la notification sur l’API de la eedomus.
• Si vous fermez le garage, par une commande eedomus, l’état sera « Ferme le garage » pendant 10 secondes, ensuite, le module enverra une notification « Garage fermé », et donc, l’état passera à « Garage fermé »
• Relais: mon garage fonctionne ainsi : S’il est ouvert, une impulsion le ferme et s’il est fermé, une impulsion l’ouvre. J’ai programmée une impulsion de 0.5 sec pour actionner la porte du garage. Vous pouvez évidemment faire plus long ou plus court. Mais 0.5 sec correspond bien à une pression courte sur un bouton pression
• Pour tester le module sans la boîte eedomus, il suffit d’entrer dans un Explorer : http://192.168.0.XX/OuvreLaPorte ou http://192.168.0.XX/FermeLaPorte


La configuration eedomus
1) Création d'un actionneur HTTP
• Nom: Porte Garage Actionneur
• Pièce: Aucune
• Usage: Ouverture
• Avec 2 états: 0: Ouvre le garage ; 1: Ferme le Garage
• Sur "Ouvre le garage", placer l'URL suivante: http://192.168.0.40/OuvreLaPorte
• Sur "Ferme le garage" placer l'URL suivante: http://192.168.0.40/FermeLaPorte

Il faut ensuite aller dans « Paramètres Experts » et cliquer sur la clé située à côté de « Code API ». Le système vous demande alors votre mot de passe eedomus, et vous donne deux informations qu’il faut noter
api_user : XXXXXX (6 caractères)
api_secret : YYYYYYYYYYYYYYYY (16 caractères)


2) Création d'un état virtual
• Nom: Porte Garage NodeMCU
• Pièce: Extérieur
• Avec 4 états: 0: Garage Ouvert (état); 1: Garage Fermé (état); 2: Ouvre le garage (action); 3: Ferme le garage (action)
• Fixer les icones "Garage ouvert" et "Garage Fermé", sur les deux états
• Sur "Ouvre le garage (action)", mettre comme action associée "Porte garage - Ouvre le garage"
• Sur "Ferme le garage (action)", mettre comme action associée "Porte garage - Ferme le garage"

Le code
Code : Tout sélectionner
//Open/Close Garage door
//Provide status, Open or closed
//Version 1.0
//CEN, November 2017
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>


//////////////////////////////////////////////////////////////
//For debug purpose, compiler commands
//#define DEBUG           //Comment this line to remove all debug lines
#ifdef DEBUG
  #define DEBUG_PRINT(x)  Serial.print(x)
  #define DEBUG_PRINTLN(x)  Serial.println(x)
#else
  #define DEBUG_PRINT(x)
  #define DEBUG_PRINTLN(x)
#endif

 
const char* ssid = "XXX";             //WiFi ID
const char* password = "XXX";         //WiFi PWD
int DoorState = 0;                    //0=Ouvert, 1=Fermé
int Door;                             //Will contain the sensor state
HTTPClient http;                      //Declare an object of class HTTPCLient
int httpCode;               
String httpError;

//I/O Pin usage
int RelayPin = 13;   //13= Pin D7, Relay
int SensorPin = 4;   //4= Pin D2, Sensor

//eedomus information
//const char* IP_Eedomus = "192.168.0.XX";
//const char* PeriphID_Eedomus = "XXXXXX";
//api_user=XXXXXX
//api_secret=XXXXXXXXXXXXXXXX
//Command to be sent to the eedomus to notify that the garage door is opened, value=0 to open, value=1 to close
const char* GO= "http://192.168.0.XX/api/set?action=periph.value&periph_id=XXXXXX&value=0&api_user=XXXXXX&api_secret=XXXXXXXXXXXXXXXX";
const char* GF= "http://192.168.0.XX/api/set?action=periph.value&periph_id=XXXXXX&value=1&api_user=XXXXXX&api_secret=XXXXXXXXXXXXXXXX";

//Static IP, Gateway and Subnet
IPAddress staticIP (192,168,0,XX);
IPAddress gateway (192,168,1,1);
IPAddress subnet(255,255,255,0);

//Start server
WiFiServer server(80);
 
void setup() {
  Serial.begin(115200); delay(10);

  //Setup pin 12 & 13
  pinMode(SensorPin, INPUT);
  pinMode(RelayPin, OUTPUT);
  digitalWrite(RelayPin, LOW);
 
  // Connect to WiFi network
  DEBUG_PRINTLN("");DEBUG_PRINT("Connecting to WIFI Network ");DEBUG_PRINTLN(ssid);


  WiFi.disconnect();
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) { delay(300); DEBUG_PRINT("."); }
  WiFi.config(staticIP, gateway, subnet);
  WiFi.hostname("ThierryNodeMCUGarage");
  DEBUG_PRINTLN("");
  DEBUG_PRINT("Connected to WIFI ");DEBUG_PRINTLN(ssid);
  DEBUG_PRINT("My IP Address: ");DEBUG_PRINTLN(WiFi.localIP());
  DEBUG_PRINT("My Gateway: ");DEBUG_PRINTLN((WiFi.gatewayIP().toString().c_str()));
  DEBUG_PRINT("My hostname: ");DEBUG_PRINTLN(WiFi.hostname());
 
  // Start the server
  server.begin();
  DEBUG_PRINTLN("Server started");
 
  // Print the IP address
  DEBUG_PRINT("Use this URL to connect: "); DEBUG_PRINT("http://"); DEBUG_PRINT(WiFi.localIP()); DEBUG_PRINT("/");DEBUG_PRINTLN("OuvreLaPorte");
  DEBUG_PRINT("Use this URL to connect: "); DEBUG_PRINT("http://"); DEBUG_PRINT(WiFi.localIP()); DEBUG_PRINT("/");DEBUG_PRINTLN("FermeLaPorte");
}



void loop() {

  // Check if a client has connected
  WiFiClient client = server.available();
 
  //Client has connected. Treat request
  if (client) {
    DEBUG_PRINTLN("New connection");

    // Read the first line of the request
    String request = client.readStringUntil('\r');
    DEBUG_PRINTLN(request);
    client.flush();
 
    // Match the request, for both request (close or open), close the relay for 500ms
    if (request.indexOf("/OuvreLaPorte") != -1)  {
      DEBUG_PRINTLN("Ouvre la porte");
      digitalWrite(RelayPin, HIGH);
      delay(500);
      digitalWrite(RelayPin, LOW);
    }
    if (request.indexOf("/FermeLaPorte") != -1)  {
      DEBUG_PRINTLN("Ferme la porte");
      digitalWrite(RelayPin, HIGH);
      delay(500);
      digitalWrite(RelayPin, LOW);
    }
  client.println("HTTP/1.1 200 OK"); //Acknoledge command. Without that, eedomus keeps sending the command
  delay(10000);  //Wait that the garage door is fully opened or closed, ignore all during 10sec
  } //if (client)

  //Pull Sensor
  Door=digitalRead(SensorPin);    //Read the sensor

  //If the captor returns a different value of the DoorState, send the info to the eedomus
  if (Door != DoorState) {
    DEBUG_PRINT("Sensor= ");DEBUG_PRINTLN(Door);
    switch (Door) {
    case 0:
        http.begin(GO);
        httpCode = http.GET();
        if (httpCode > 0) {
          httpError= http.getString();
          DEBUG_PRINTLN(httpError);   
        }
        DoorState=0;
        break;
    case 1:
        http.begin(GF);
        httpCode = http.GET();
        if (httpCode > 0) {
          httpError= http.getString();
          DEBUG_PRINTLN(httpError);   
        }
        DoorState=1;
        break;
    default:
        DEBUG_PRINT("Error, capteur returns "); DEBUG_PRINTLN(Door);
        break;
    } //switch (Door)
  delay(10000);  //Ignore all during 10sec 
  } //if (Door != DoorState)
 delay(1); //Wait 1 before next loop
}





Conclusions
Ce circuit NodeMCU est vraiment impressionnant. Il se programme comme un Arduino, offre des possibilités énormes, et cela pour quelques euros. Ca fait « montage maison » dans mon boitier transparent, comparé à une installation du commerce, mais ce montage remplace deux modules z-waves, nécessaire pour créer un tel système (Fibaro capteur d’inclinaison et un actionneur pour faire fonctionner le moteur de la porte du garage). J’ai été agréablement surpris de pouvoir faire un montage en quelques heures de travail seulement!
Ce circuit permet vraiment de songer à tout type de module maison. Ma prochaine idée est de fabriquer un haut-parleur télécommandé par la eedomus, capable de jouer des sons MP3 préenregistrés (aboiements, alarme, message de bienvenue, …).
Avez-vous d’autres idées ?
Auteur:  tresorier [ 27 Déc 2017 23:40 ]
Sujet du message:  Re: Commande+Notification porte de garage pour moins de 10€

Bonjour

Super montage !
J'ai l'intention de commander mes volets roulants par une solution similaire.
Je compte utiliser un boitier Sonoff 2ch flashé (2 relais intégrés sur une carte esp8285 : 8€ chez banggood https://www.banggood.com/fr/SONOFF-DIY-Dual-Channel-WIFI-Wireless-Remote-Control-Switch-For-Smart-Home-Support-2G-3G-4G-Network-p-1138790.html?rmmds=search&cur_warehouse=CN).
Pour le flashage : https://forum.hardware.fr/hfr/electroniquedomotiquediy/domotique_maisonconnectee/domotique-connectee-intelligente-sujet_5_163.htm#t165312

Ce boitier simplifierait grandement en cablage le système de la porte de garage :D

Au lieu d'un capteur de position, je pense utiliser un capteur de luminosité.
Je souhaite également conserver la commande manuelle. Peut se faire en utilisant des entrées sur l'ESP.
J'ai juste 2 soucis :
- Intégrer la carte dans ou derrière la boîte murale (ca devrait pouvoir se faire !)
- Je ne maitrise pas la programmation arduino, mais j'apprends ;)

Je constate que l'intégration dans l'eedomus est simple avec du http.
Au final, je vise la commande par la Google home, vu que je commande déjà mes thermostats SRT321 par ce moyen.
Merci pour cette idée dont je vais m'inspirer largement.
Je ne manquerai pas de revenir pour des conseils de programmation.
Auteur:  rover820i [ 28 Déc 2017 15:33 ]
Sujet du message:  Re: Commande+Notification porte de garage pour moins de 10€

tresorier a écrit:Au lieu d'un capteur de position, je pense utiliser un capteur de luminosité.

:shock: :shock: :shock: Et la nuit :roll:
Auteur:  tresorier [ 28 Déc 2017 15:52 ]
Sujet du message:  Re: Commande+Notification porte de garage pour moins de 10€

rover820i a écrit:
tresorier a écrit:Au lieu d'un capteur de position, je pense utiliser un capteur de luminosité.

:shock: :shock: :shock: Et la nuit :roll:


La nuit je dors :lol:

Ok, je n'ai pas trop détaillé !
Le capteur de luminosité servira à fermer une façade à la tombée du jour en automatique (avec capteur d'ouverture de porte fenêtre en plus)
Si besoin d'ouvrir la nuit, il y aura possibilité du manuel
Auteur:  influman [ 28 Déc 2017 16:34 ]
Sujet du message:  Re: Commande+Notification porte de garage pour moins de 10€

il fait nuit à 17h l'hiver :)
Auteur:  tresorier [ 28 Déc 2017 16:54 ]
Sujet du message:  Re: Commande+Notification porte de garage pour moins de 10€

influman a écrit:il fait nuit à 17h l'hiver :)


à l'est, oui !
à l'ouest, c'est 17h30 !
S'il fait nuit, c'est l'heure de fermer les volets ?
Je ne suis pas un adepte des ombres chinoises :D
Auteur:  rover820i [ 28 Déc 2017 17:28 ]
Sujet du message:  Re: Commande+Notification porte de garage pour moins de 10€

tresorier a écrit:La nuit je dors :lol:

Ok, je n'ai pas trop détaillé !
Le capteur de luminosité servira à fermer une façade à la tombée du jour en automatique (avec capteur d'ouverture de porte fenêtre en plus)
Si besoin d'ouvrir la nuit, il y aura possibilité du manuel

J'ai cru que tu voulais utiliser un capteur de luminosité pour détecter l'ouverture et la fermeture du volet :mrgreen:
Auteur:  tresorier [ 28 Déc 2017 17:36 ]
Sujet du message:  Re: Commande+Notification porte de garage pour moins de 10€

rover820i a écrit:
tresorier a écrit:La nuit je dors :lol:

Ok, je n'ai pas trop détaillé !
Le capteur de luminosité servira à fermer une façade à la tombée du jour en automatique (avec capteur d'ouverture de porte fenêtre en plus)
Si besoin d'ouvrir la nuit, il y aura possibilité du manuel

J'ai cru que tu voulais utiliser un capteur de luminosité pour détecter l'ouverture et la fermeture du volet :mrgreen:


Et moi, j'ai cru que tu blaguais !!!
Comme en fin d'année on est en plein dans les bêtisiers :)

Plus sérieusement, que penses tu de cette solution, toi qui est plutot ferru sur ces sujets (au vu de tes interventions toujours très pertinentes et pointues) ?
Auteur:  rover820i [ 29 Déc 2017 10:20 ]
Sujet du message:  Re: Commande+Notification porte de garage pour moins de 10€

Je pense qu'utiliser un double relais non adapté pour commander des volets roulants est risqué pour le moteur... Si les deux relais sont commutés ensemble le moteur risque de ne pas apprécier. Sauf si le flash permet d'empêcher que les deux relais soient actifs en même temps.

J'utilise aussi la méthode de la luminosité réelle pour fermer les volets, avec sécurité par capteur d'ouverture pour ne pas fermer le volet d'un ouvrant ouvert (géré par une règle)
Auteur:  Cen [ 15 Jan 2018 20:20 ]
Sujet du message:  Re: Commande+Notification porte de garage pour moins de 10€

Merci pour vos commentaires

Alors quelques points

1) Oui, je pense que ce montage peut très facilement être adapté pour gérer des volets roulants. Perso, j’utiliserai une carte NodeMCU avec une carte 2 relais, mais je comprends bien l’idée avec le SONOFF. Et en effet, bien tester le programme pour s’assurer qu’il ne connecte pas les deux relais en même temps

2) J’ai conservé toutes les autres commandes pour l’ouverture de la porte, donc ce montage est monté en parallèle avec les autres méthodes (télécommande depuis la voiture, interrupteur dans ma maison et interrupteur dans le garage lui-même). Ma femme n’apprécie pas trop la technologie, alors, je n’ai pas le choix, tout doit être 100% transparent 

3) Et finalement, mon montage est maintenant en place depuis 2 mois, et ça fonctionne parfaitement. J’ai fait quelques modifs dans le programme, mais rien de critique

Encore merci pour vos commentaires
Page 1 sur 1 Le fuseau horaire est UTC+1 heure