Volets roulants bubendorff

Bonjour à tous,

Je voudrais partager avec vous la domotisation de mes volets roulants bubendorff. Ils sont sans fils et datent de plusieurs années, ils n’ont pas été prévus pour être domotisés :disappointed_relieved:

J’ai deux volets disposant chacun d’une télécommande de ce type :

image

Objectifs : Contrôler l’ouverture et la fermeture de mes volets roulants via Gladys, les pieds en éventail dans mon canapé.
Garder la possibilité d’utiliser la télécommande pour ouvrir et fermer de manière traditionnelle.

Matériel (par télécommande) :

  • 1 ESP8266 Wemos mini d1
  • 2 résistances 220 ohms
  • 2 optocouleurs DIP4 817C
  • Quelques bouts de fils
  • Un morceau de pcb
  • De quoi souder
  • Une alimentation 5V style chargeur de tél ou hub USB

Etape 1 : Préparation de la télécommande

Il faut démonter la télécommande, retirer la pile et souder des fils au niveau des boutons (voir photo ci-dessous). Si l’on fait toucher les deux fils de même couleur, on fait un contact, c’est la même chose que si l’on appuie sur le bouton.

Etape 2 : Montage éléctronique

On passe au wemos. Voici le schéma à suivre :

Quand on va passer les PIN D1 ou D2 à l’état 1, on va simuler l’appuie sur le bouton à travers l’optocoupleur, et quand on les passe à l’état 0, c’est comme si on n’appuyait plus.

Etape 3 : Serveur Web

On démarre l’IDE Arduino, et on pousse le code suivant sur le Wemos :

Code Arduino
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>

MDNSResponder mdns;
int tempo = 250;

int up = 5;    // Wemos D1
int down = 4;  // Wemos D2


// Nom et mot de passe du réseau WIFI
const char* ssid = "xxxxx";
const char* password = "xxxxxx";

ESP8266WebServer server(80);
String webSite="";

void setup(void){

  Serial.begin(115200);

  pinMode(BUILTIN_LED, OUTPUT);
  digitalWrite(BUILTIN_LED, LOW);

  pinMode(up, OUTPUT);
  pinMode(down, OUTPUT);
  WiFi.begin(ssid, password);
  Serial.println("");
  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) { 
    delay(500);
    Serial.print(".");
  }
 
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  
 if (mdns.begin("esp8266", WiFi.localIP())) {
   Serial.println("MDNS responder started");
  }
  server.on("/", [](){
    webSite +="IP Volet: ";
    webSite +=WiFi.localIP().toString();
    webSite +="\r";
    server.send(200, "text/html", webSite);
    webSite="";

    digitalWrite(BUILTIN_LED, LOW);
    delay(250);
    digitalWrite(BUILTIN_LED, HIGH);
    delay(250);
    digitalWrite(BUILTIN_LED, LOW);
    delay(250);
    digitalWrite(BUILTIN_LED, HIGH);
    delay(250);
    digitalWrite(BUILTIN_LED, LOW);
    delay(250);
    digitalWrite(BUILTIN_LED, HIGH);
    delay(250);
    digitalWrite(BUILTIN_LED, LOW);
    delay(250);
    digitalWrite(BUILTIN_LED, HIGH);
    
    });
    
  server.on("/FERMER", [](){
    server.send(200, "text/html", "Fermeture Volet");
    Serial.println("Demande fermeture volet");

    // Positionnement port "down"
    digitalWrite(down, 1);                   // Début appui pour fermeture volet
    delay(tempo);
    digitalWrite(down, 0);                    // Fin appui pour fermeture volet
    
    digitalWrite(BUILTIN_LED, LOW);
    delay(250);
    digitalWrite(BUILTIN_LED, HIGH);
    delay(250);
    digitalWrite(BUILTIN_LED, LOW);
    delay(250);
    digitalWrite(BUILTIN_LED, HIGH);
  });
  
  server.on("/OUVRIR", [](){
    server.send(200, "text/html", "Ouverture Volet");
    Serial.println("Demande ouverture volet");

    // Positionnement port "up"
    digitalWrite(up, 1);                   // Début appui pour ouverture volet
    delay(tempo);                           //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    digitalWrite(up, 0);                    // Fin appui pour ouverture volet

    digitalWrite(BUILTIN_LED, LOW);
    delay(250);
    digitalWrite(BUILTIN_LED, HIGH);
    delay(250);
    digitalWrite(BUILTIN_LED, LOW);
    delay(250);
    digitalWrite(BUILTIN_LED, HIGH);
  });
      
  server.begin();
  Serial.println("HTTP server started");
  digitalWrite(BUILTIN_LED, HIGH);
}
 
void loop(void){
  server.handleClient();
  if(WiFi.status() != WL_CONNECTED)
  {
    digitalWrite(BUILTIN_LED, HIGH);
    Serial.println("");
    Serial.print("Wifi is disconnected!");
    Serial.println("");
    Serial.print("Reconnecting");
    Serial.println("");
    //WiFi.begin(ssid,password);
    
    while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    }
    digitalWrite(BUILTIN_LED,LOW);
  }
}

Il faut penser à modifier le SSID de votre WIFI et la clé de sécurité.

Info sur le code : Quand le serveur web démarre la led bleu du wemos s’allume. Une fois connecté au wifi, la LED s’éteint. On est en attente de réception d’une requête. Quand on reçoit une requête /OUVRIR ou /FERMER la LED clignote.

Maintenant il faut trouver l’IP de votre Wemos, le plus simple est de se connecter à votre BOX pour le faire. Imaginons : 192.168.1.24
On peut maintenant exécuter un curl 192.168.1.24/OUVRIR ou curl 192.168.1.24/FERMER pour voir la télécommande clignoter et les volets s’ouvrir ou se fermer.

Etape 4 : Configuration de Gladys

C’est sympa tout ça mais contrôler avec Gladys ca serait mieux. On va donc créer deux scripts, un pour ouvrir et un pour fermer.

Ouvrir
const sleep = (milliseconds) => {
  return new Promise(resolve => setTimeout(resolve, milliseconds))
}
gladys.utils.request('http://192.168.1.24/OUVRIR')
sleep(1000).then(() => {
  gladys.utils.request('http://192.168.1.29/OUVRIR')
})
Fermer
const sleep = (milliseconds) => {
  return new Promise(resolve => setTimeout(resolve, milliseconds))
}
gladys.utils.request('http://192.168.1.24/FERMER')
sleep(1000).then(() => {
  gladys.utils.request('http://192.168.1.29/FERMER')
})

NB : J’ai deux télécommandes chez moi et j’ai remarqué que si j’envoie l’ordre en même temps aux deux rien ne se passe. J’ai donc mis une tempo d’une seconde entre les deux commandes comme on peut le voir dans les scripts

Contrôle par la voix :

J’ai installé le module script-exec. Il permet de lancer un script via le narrateur de Gladys. Et comme j’ai installé le module Snips, je peux maintenant contrôler mes volets depuis le canapé avec un simple : “Gladys, ouvre les volets” :wink:

Un petit boitier en impression 3D et c’est fini ! Je peux maintenant reposer les télécommande dans un meuble pas trop loin au cas où.

Je remercie ce site dont je me suis beaucoup inspiré et qui présente d’autres méthodes pour contrôler les bubendorff. Elles sont toutes intégrables dans Gladys : https://wikifab.org/wiki/Domotiser_3_volets_roulants_Bubendorff_pour_moins_de_20_euros_avec_3_solutions

4 Likes

C’est génial ça!

Tu aurais moyen de nous faire une petite vidéo? Je partage ça direct :wink:

Pas de souci je m’en occupe ce soir.

1 Like
2 Likes

aha, c’est génial! Tu es d’accord pour que je partage la vidéo sur Facebook/Twitter/Newsletter? :slight_smile:

Ouais si tu veux, pas de souci

Partagé ! J’ai publié les vidéos en natives sinon ça rend mal sur ces plateformes :slight_smile:

J’ai essayé de t’identifier sur Twitter mais je n’ai pas trouvé ton handle… Si tu veux que je te tag dis moi :slight_smile:

Je ne suis pas sur twitter c’est pour ça :smile:

1 Like

Coucou,
Joli boulot !
Question “bête”, tes volets n’étaient-ils pas pilotés en 433MHz ?
Si oui as tu pensé à utiliser les commandes radio ou ça te paraissait plus “simple” et propre de faire comme tu as fait ?
Si non bah rien :slight_smile:

Ah mince, j’ai passé 10 bonnes minutes à fouiller Twitter de fond en comble :sweat_smile:

Wow impressionnant !

Snips sera un module par défaut dans gladys 4 ?

1 Like

Se serais intéressant en effet quand je vois le nombre de post sur le sujet de snip ca me fais peur.

Merci pour ce tuto très sympathique. Je vais de ce pas aller bricoler ma VM Gladys pour y porter ton code pour gérer mes luminaires que je pilote également via une URL !

Malheureusement mes bubendorff de 10 ans fonctionnent avec un code propriétaire à code tournant et ne sont pas prévu pour être domotisés. Impossible de reproduire le signal. J’ai cherché sur plein de forum et j’ai toujours vu la même réponse : “pas possible via les ondes”.
J’ai vu une solution un jour, mais faut brouiller le signal pour qu’il n’arrive pas au récepteur mais quand même sur ta clef stlye RFlink, et ensuite retirer le brouillage et rejouer le signal depuis ta clé. Ceci à chaque fois que tu veux ouvrir / Fermer. En fait on parle plus de piratage que de domotique là :smiley:

C’est pas mal ça … j’ai des volets en commande sans fil dont je n’arrive pas à capter le signal.
Si je comprends bien, le wemos récupère le signal et lance une requête via wifi à Gladys.
Je n’y connais rien en électronique, à quoi servent les octocoupleur et résistance ?
Tiboys

De rien, si besoin hésite pas.

Le wemos se connecte au même wifi que Gladys. Ils peuvent donc communiquer entre eux. Gladys peut donc lui envoyer des requêtes web.
Tu programme le wemos pour qu’il fasse serveur web. En fonction des appelles au serveur (via gladys par exemple) tu changes l’état des GPIO.

Les GPIO sont reliées aux optocoupleurs en passant par une résistance. Quand tu passes une GPIO à 1 il y a du courant qui arrive jusqu’à la borne 1 de l’optocoupleur, ce courant va indiquer à optocoupleur de faire contact en ces bornes 3 et 4. Et comme les borne 3 et 4 sont reliées au bouton physique de la télécommande, un contact se fait, simulant l’appuyer physique sur le bouton. Quand tu repasses la GPIO à 0 et c’est comme si tu retirais le doigts du bouton.

1 Like

Merci pour l’explication. Le wemos avec optocoupleur deviennent donc un relais intelligent.
Je vais regarder si je peux raccorder ça sur mes boutons.
Merci

Bonjour,
Très beau travail :+1:
Je vous que vous utilisez une carte seeed de type ReSpeaker 4-Mic Array.
J’ai le même produit mais je n’arrive pas la configurer pour qu’elle puisse réagir comme la votre:

  • lumières qui s’allument à chaque réponse de requête.
  • comment l’avez intégré à gladys? avez vous une procédure à me conseillé ou forum?

Merci pour tout et surtout joli travail ce que vous faites :wink:

Cordialement
Fahmi

Bonjour @Fahmi,

Il faut utiliser un script en python en plus de Snips : https://github.com/Psychokiller1888/snipsLedControl/wiki/Arguments-customization
J’utilise un Respeaker 6-Mic, ca fonctionne aussi avec le 4-mic il faut parti des matériels compatibles.

J’ai installé Snips et le module Snips de gladys. Ensuite j’ai personnalisé le wakeword de Snips :
https://docs.snips.ai/articles/platform/wakeword/personal

Cordialement,
Thibaut.