Comme annoncé, ce forum est passé en lecture seule au 1er janvier 2020. Désormais nous vous invitons à vous rendre sur notre nouvelle page communauté :
Image

A très bientôt !

Commande volet roulant avec ESPeasy OU sketch MQTT.

latwingo
Actif
Messages : 504
Inscription : 24 nov. 2014, 10:58
Localisation : Cagnes Sur Mer

Re: Commande volet roulant avec ESPeasy OU sketch MQTT.

Message par latwingo » 24 janv. 2018, 17:16

Apparemment ton inter sur l'entrée 2 ce comporte comme un clignotant il change d état 10 fois en 7 seconde le problème de faux positif n'est toujours pas réglé sur tes modules :oops: :oops: :oops:

Avatar de l’utilisateur
marmoul
Actif
Messages : 891
Inscription : 01 sept. 2015, 15:50
Localisation : Haute-Saône (70)

Re: Commande volet roulant avec ESPeasy OU sketch MQTT.

Message par marmoul » 24 janv. 2018, 17:20

Ce qui est ouf c'est que tout mes volet bougent en meme temps c'est versaille chez moi je comprend rien :/

Tu crois que sa peut faire exploser mon wifi et reboot les autres modules?

alcor_fr
Timide
Messages : 274
Inscription : 29 juil. 2014, 11:48

Re: Commande volet roulant avec ESPeasy OU sketch MQTT.

Message par alcor_fr » 24 janv. 2018, 17:27

On la valeur 255 qui remonte
Ca veut dire que ton volet recalibre

on voit aussi des valeurs in
Ca veut dire que tes modules perdent leur connexions à mosquitto

T'as pas eu une coupure electrique ?

Mais oui ton entrée 2 va pas bien ...

Avatar de l’utilisateur
marmoul
Actif
Messages : 891
Inscription : 01 sept. 2015, 15:50
Localisation : Haute-Saône (70)

Re: Commande volet roulant avec ESPeasy OU sketch MQTT.

Message par marmoul » 24 janv. 2018, 17:30

non justement j'ai pas eu de coupure j'étais sur mon pc du coup j'aurais vu y'a pas d'onduleur.


J'ai des erreur jmqtt qui remonte de temps en temps sa viendrai de la?? j'ai poster sur le fil on verra la reponse du dev.

Mes 4 volet on fait sa en meme temps du coup y'a eu un truc mais quoi je ne sais pas...
pourquoi il calibre alors qu'il n'y a rien je comprend plus j'ai rien toucher

edit : mon message avec les log
viewtopic.php?f=96&t=32675&p=577080#p577080

Avatar de l’utilisateur
marmoul
Actif
Messages : 891
Inscription : 01 sept. 2015, 15:50
Localisation : Haute-Saône (70)

Re: Commande volet roulant avec ESPeasy OU sketch MQTT.

Message par marmoul » 27 janv. 2018, 13:14

Bonjour à tous
Nouveau retour:

Côté jmqtt c’est réglé du coup je me suis pencher sur le pb de deco/reconnection des modules qui font que sa bug.
J’ai recherché côté wifi j’ai changer de canal et vérifier mes conf mis les module en bail fixe...
Ce matin encore des mouvements non voulu ( personne à la maison) mais que sur les modules du rdc alors que avant c’etait partout.
Sa a dû règler des pb mais pas tout.

Alors petite question serait il possible de se passer du calibrage au reboot du module ?
Car au final si pas de reboot sa sera transparent la reconnection si aucun mouvement.
Il me semble que la position du volet est stockée dans l’epromm.
Du coup il serait possible que si variable dans l’epromm alors pas de calibrage ?
Merci bon week-end

latwingo
Actif
Messages : 504
Inscription : 24 nov. 2014, 10:58
Localisation : Cagnes Sur Mer

Re: Commande volet roulant avec ESPeasy OU sketch MQTT.

Message par latwingo » 27 janv. 2018, 14:08

Salut Marmoul si je coupe mon routeur et que je le rallume je n'ai aucun mouvement
Du à la déconnexion du wifi

Les modules ce recalibre que si je coupe leur alimentation 230v

Avatar de l’utilisateur
marmoul
Actif
Messages : 891
Inscription : 01 sept. 2015, 15:50
Localisation : Haute-Saône (70)

Re: Commande volet roulant avec ESPeasy OU sketch MQTT.

Message par marmoul » 27 janv. 2018, 14:20

latwingo a écrit :
27 janv. 2018, 14:08
Salut Marmoul si je coupe mon routeur et que je le rallume je n'ai aucun mouvement
Du à la déconnexion du wifi

Les modules ce recalibre que si je coupe leur alimentation 230v
Malheureusement je ne sais pas si il reboot totalement ou juste il reprenne la co mqtt?
Ce que je vois c’est des in dans l’historique.
Sa viendrai de quoi ???

Vraiment bizarre je dois avoir un fantôme lol

latwingo
Actif
Messages : 504
Inscription : 24 nov. 2014, 10:58
Localisation : Cagnes Sur Mer

Re: Commande volet roulant avec ESPeasy OU sketch MQTT.

Message par latwingo » 27 janv. 2018, 17:15

Avec le dernier code la reconnexion au mqtt n'entraîne pas de mouvements non plus
Dernière édition par latwingo le 27 janv. 2018, 18:27, édité 1 fois.

latwingo
Actif
Messages : 504
Inscription : 24 nov. 2014, 10:58
Localisation : Cagnes Sur Mer

Re: Commande volet roulant avec ESPeasy OU sketch MQTT.

Message par latwingo » 27 janv. 2018, 17:17

Tu as pas des micro coupure de tension sur tes câbles d alim 220v
Sur tes disjoncteurs du rdc tu as pas un appareil qui fait un gros appel de courant pompe chauffage chauffage aquarium ect

Avatar de l’utilisateur
marmoul
Actif
Messages : 891
Inscription : 01 sept. 2015, 15:50
Localisation : Haute-Saône (70)

Re: Commande volet roulant avec ESPeasy OU sketch MQTT.

Message par marmoul » 27 janv. 2018, 18:25

Non car mon réseau est séparé en ligne avec un inter différentiel en tête de chaque ligne.
Tout les équipements qui perturbe sont à part...
Et aujourd’hui sa l’a fait sur certains volets et pas d’autre :/
Du coup les micro coupure altèrerait tout mon réseau électrique comme mes ordi ou autre mais là y a que sa.
C’est pour sa que j’en comprend pas pourquoi...
Comment chercher? Wifi ou électricité ? Code ou montage...
je cherche je cherche lol

latwingo
Actif
Messages : 504
Inscription : 24 nov. 2014, 10:58
Localisation : Cagnes Sur Mer

Re: Commande volet roulant avec ESPeasy OU sketch MQTT.

Message par latwingo » 27 janv. 2018, 18:36

Déjà plante un voltmetre sur l un des module et regarde quand tu active un volet ce qui ce passe
Fait pareil avec 2 dupont et regarde également entre le 3.3 et le gnd ce qui ce passe également

T'es volets sont câble en 1.5 sur l alim 220v mais sur quel longueur

Essai également avec et sans la terre du moteur des volets voir s'il y a pas un retour par la

Je te dit tout ce que je ferais si c'était chez moi essai dans le routeur de définir un canal wifi fixe sans cohabitation 20 40 mhz
Laisse en 20 mhz tu n'a pas de réseau en cpl chez toi

Depuis les dernières modif je n'ai plus eu de problème ça marche nickel sans condo de plus ni opto

Allez courage Marmoul tu va y arriver
Bon week

Avatar de l’utilisateur
marmoul
Actif
Messages : 891
Inscription : 01 sept. 2015, 15:50
Localisation : Haute-Saône (70)

Re: Commande volet roulant avec ESPeasy OU sketch MQTT.

Message par marmoul » 27 janv. 2018, 18:46

Merci latwingo je vais regarder encore une fois même si j’avais testé déjà au voltamètre et je j’avais rien vu de bizarre.
Pour la terre je vais regarder on sais jamais :)
Oui c’est câble en 1.5 sur 10-12m pour le plus éloigné.

Côté wifi je suis repassé en 40mhz je connais pas trop. Je suis passée en canal 1 car c’est le moins chargé avec les voisins. Je repasse en 20.
J’ai pas de cpl à la maison.

Moi avec le module de rol et les opto sa va bien mais c’est cette partie de reboot qui me fou le souc...

Je sais pas si tu l’historise les in de tes volets mais moi c’est dingue le nombre ( je te poste un screen dès que je peux tu verra :) )

Merci de ton soutien c’est gentil.

alcor_fr
Timide
Messages : 274
Inscription : 29 juil. 2014, 11:48

Re: Commande volet roulant avec ESPeasy OU sketch MQTT.

Message par alcor_fr » 27 janv. 2018, 22:17

tu peux nous faire un récap d'ou tu en es ?

Code Wemos, je crois que tu as fait des modifs ?
Lib Shutters ?

Remets nous des logs

Le In est emis quand le wemos se reconnecte à mosquitto
Ca veut dire qu'avant de se reconnecter, bah il se deconnecte ;)

Moi je n'ai jamais de in qui remonte dans les logs sauf perte de wifi. Dans ce cas, reconnexion wifi et mqtt >> Publish sur in

Tu as toujours des faux positifs sur les entrées ?

manumdk
Actif
Messages : 502
Inscription : 23 mars 2015, 23:49

Re: Commande volet roulant avec ESPeasy OU sketch MQTT.

Message par manumdk » 27 janv. 2018, 23:25

marmoul a écrit :
27 janv. 2018, 18:25
Non car mon réseau est séparé en ligne avec un inter différentiel en tête de chaque ligne.
Tout les équipements qui perturbe sont à part...
Et aujourd’hui sa l’a fait sur certains volets et pas d’autre :/
Du coup les micro coupure altèrerait tout mon réseau électrique comme mes ordi ou autre mais là y a que sa.
C’est pour sa que j’en comprend pas pourquoi...
Comment chercher? Wifi ou électricité ? Code ou montage...
je cherche je cherche lol
Salut,
Je ne connais le code, mais pour tes tests, redémarre ton routeur Wifi, tu verras bien la réaction de ton wemos.
De même pour le mqtt, redémarre le serveur Mosquito, ton Wemos devrait perdre le lien et le wemos se reconnectera.
A+

Avatar de l’utilisateur
marmoul
Actif
Messages : 891
Inscription : 01 sept. 2015, 15:50
Localisation : Haute-Saône (70)

Re: Commande volet roulant avec ESPeasy OU sketch MQTT.

Message par marmoul » 29 janv. 2018, 09:19

alcor_fr a écrit :
27 janv. 2018, 22:17
tu peux nous faire un récap d'ou tu en es ?

Code Wemos, je crois que tu as fait des modifs ?
Lib Shutters ?

Remets nous des logs

Le In est emis quand le wemos se reconnecte à mosquitto
Ca veut dire qu'avant de se reconnecter, bah il se deconnecte ;)

Moi je n'ai jamais de in qui remonte dans les logs sauf perte de wifi. Dans ce cas, reconnexion wifi et mqtt >> Publish sur in

Tu as toujours des faux positifs sur les entrées ?
Salut alcor-fr,

Actuellement j'ai 4 modules en place:
- 1 avec l'extension de rol pour les entrées avec les optos,
- 3 avec des resistances entre le vcc et les pin 4-5
Mon code est celui ci-dessous que j'ai modifié mais juste pour ajouter un serveur web avec une page web (en effet j'ai en des pb ou mon module était sur le wifi mais pas sur mqtt du coup impossible à joindre et à raz sans tous sortir du mur)

Code : Tout sélectionner

/*
 * SKETCH fonctionnant sur wemos D1 MINI POUR COMMANDE DE VOLET ROULANT FILAIRE AVEC RENVOI DE LA POSITION DU VOLET EN POURCENTAGE
 * HARD : https://www.jeedom.com/forum/viewtopic.php?f=185&t=25017&sid=c757bad46d600f07820dab2a45ec8b33
 * LIBRAIRIES : https://github.com/marvinroger/arduino-shutters V3 beta4 (voir bibliothèque IDE Arduino)
 * AJOUT de l'OTA 
 * AJOUT de WiFiManager
 * Possibilité d'enregistrer l'adresse IP de son broker MQTT
 * Possibilité d'enregistrer les temps de course monté et descente
 */
#include <FS.h>
#include <Shutters.h>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <WiFiClientSecure.h>
#include <ESP8266WebServer.h>
#include <DNSServer.h>
#include <WiFiManager.h>
#include <PubSubClient.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
#include <ArduinoJson.h>
#include <EEPROM.h>


bool debug = false;  //Affiche sur la console si True
bool raz = false;   //Réinitialise la zone SPIFFS et WiFiManager si True
long lastMsg = 0;
long lastConnect = 0;
char mqtthost[16] = ""; //Variable qui sera utilisée par WiFiManager pour enregistrer l'adresse IP du broker MQTT
const char* PASS = "password"; //A modifier avec le mot de passe voulu, il sera utilise pour les mises a jour OTA

char timeCourseup[3] = ""; //Variable qui sera utilisée par WiFiManager pour enregistrer le temp de course du volet
char timeCoursedown[3] = "";
const byte eepromOffset = 0;
unsigned long upCourseTime = 20 * 1000; //Valeur par défaut du temps de course en montée, un temps de course de descente peut aussi être défini
unsigned long downCourseTime = 20 * 1000;
const float calibrationRatio = 0.1;

int R1state;
int R2state;
int In1state;
int In2state;
int lastR1state;
int lastR2state;
int lastIn1state;
int lastIn2state;

//Wifimanager 
//flag for saving data
bool shouldSaveConfig = false;
//callback notifying us of the need to save config
void saveConfigCallback () {
  Serial.println("Should save config");
  shouldSaveConfig = true;
}


// NOMAGE MQTT
#define relais1_topic "Chambre2/Relais1"
#define relais2_topic "Chambre2/Relais2"
#define entree1_topic "Chambre2/Entree1"
#define entree2_topic "Chambre2/Entree2"
#define position_topic "Chambre2/Position"
#define JeedomIn_topic "Chambre2/in"
#define JeedomOut_topic "Chambre2/out"
#define ESP8266Client "Chambre2" //Nom du peripherique sur le reseau

//RELAIS 1
const int R1pin = 12;
//RELAIS 2
const int R2pin = 13;
//ENTREE 1
const int In1pin = 4;
//ENTREE 2
const int In2pin = 5;

// VARIABLES

char message_buff[100];

WiFiClient espClientChambre2;  // A renommer pour chaque volets
PubSubClient client(espClientChambre2); // A renommer pour chaque volets
ESP8266WebServer server (80);
//***********************************************************************************
// FONCTIONS LIBRAIRIE position volets

void shuttersOperationHandler(Shutters* s, ShuttersOperation operation) {
  switch (operation) {
    case ShuttersOperation::UP:
      if (debug){Serial.println("Shutters going up.");}
        up();
        //mqtt();
      break;
    case ShuttersOperation::DOWN:
      if (debug){Serial.println("Shutters going down.");}
        dwn();
        //mqtt();
      break;
    case ShuttersOperation::HALT:
      if (debug){Serial.println("Shutters halting.");}
        stp();
        mqttlevel();
      break;
  }
}

void readInEeprom(char* dest, byte length) {
  for (byte i = 0; i < length; i++) {
    dest[i] = EEPROM.read(eepromOffset + i);
  }
}

void shuttersWriteStateHandler(Shutters* shutters, const char* state, byte length) {
  for (byte i = 0; i < length; i++) {
    EEPROM.write(eepromOffset + i, state[i]);
    #ifdef ESP8266
    EEPROM.commit();
    #endif
  }
}

void onShuttersLevelReached(Shutters* shutters, byte level) {
  if (debug){
  Serial.print("Shutters at ");
  Serial.print(level);
  Serial.println("%");
  }
  if ((level % 10) == 0) {
  mqttlevel();  
  }
  }

Shutters shutters;
//

//***********************************************************************************
// SETUP

void setup() {
  
  
  //SERIAL//
  Serial.begin(115200);
  delay(100);
  #ifdef ESP8266
  EEPROM.begin(512);
  #endif
  Serial.println();
  Serial.println("*** Starting ***");

  Serial.println(ESP8266Client);
  
  R1state = digitalRead(R1pin);
  R2state = digitalRead(R2pin);
  In1state = digitalRead(In1pin);
  In2state = digitalRead(In2pin);
  lastR1state = R1state;
  lastR2state = R2state;
  lastIn1state = In1state;
  lastIn2state = In2state;
  if (debug){
  Serial.print("R1state:" );
  Serial.println(R1state); 
  Serial.print("R2state:" );
  Serial.println(R2state); 
  Serial.print("In1state:" );
  Serial.println(In1state); 
  Serial.print("In2state:" );
  Serial.println(In2state); 
  }
     
if (raz){
  Serial.println("Réinitialisation de la configuration (reset SPIFFS).");
  SPIFFS.format();
 }
  //Lecture du fichier de configuration depuis le FS avec json
  Serial.println("montage du FS...");
  if (SPIFFS.begin()) {
    Serial.println("FS monté");
    if (SPIFFS.exists("/config.json")) {
      //file exists, reading and loading
      Serial.println("Lecture du fichier de config");
      File configFile = SPIFFS.open("/config.json", "r");
      if (configFile) {
        Serial.println("Fichier de config ouvert");
        size_t size = configFile.size();
        // Allocate a buffer to store contents of the file.
        std::unique_ptr<char[]> buf(new char[size]);
        configFile.readBytes(buf.get(), size);
        DynamicJsonBuffer jsonBuffer;
        JsonObject& json = jsonBuffer.parseObject(buf.get());
        json.printTo(Serial);
        if (json.success()) {
          Serial.println("\nJson parsé");
          strcpy(mqtthost, json["mqtthost"]);
          strcpy(timeCourseup, json["timeCourseup"]);
          strcpy(timeCoursedown, json["timeCoursedown"]);
          upCourseTime = (strtoul (timeCourseup, NULL, 10)) * 1000; //On retype la variable (%ul unsigned long) et on la multiplie par 1000 (ce sont des millisecondes)
          downCourseTime = (strtoul (timeCoursedown, NULL, 10)) * 1000;
         } else {
          Serial.println("Erreur lors du chargement du fichier de config json");
        }
      }
    }
  } else {
    Serial.println("Erreur lors du montage du FS");
  }
  //end read
  
  //WIFI// 
  WiFiManager wifiManager;
  wifiManager.setSaveConfigCallback(saveConfigCallback);
  //Ajout de la variable de configuration MQTT Server (ou Broker)
  WiFiManagerParameter custom_mqtthost("server", "mqtt server", mqtthost, 16);
  WiFiManagerParameter custom_timeCourse_up("time_course_up", "Time Course Up", timeCourseup, 3);
  WiFiManagerParameter custom_timeCourse_down("time_course_down", "Time Course Down", timeCoursedown, 3);
  wifiManager.addParameter(&custom_mqtthost);
  wifiManager.addParameter(&custom_timeCourse_up);
  wifiManager.addParameter(&custom_timeCourse_down);
  
  wifiManager.autoConnect(ESP8266Client, PASS);

//reset settings - for testing
if (raz){
  Serial.println("Réinitialisation de WiFiManager.");
  wifiManager.resetSettings();
  }
// Configuration OTA
  //Port 8266 (defaut)
  ArduinoOTA.setPort(8266);
  //Hostname 
  ArduinoOTA.setHostname(ESP8266Client);
  //Mot de passe
  ArduinoOTA.setPassword(PASS);
  //Depart de la mise a jour
  ArduinoOTA.onStart([]() {
    Serial.println("Maj OTA");
  });
  //Fin de la mise a jour
  ArduinoOTA.onEnd([]() {
    Serial.print("\n Maj terminee");
  });
  //Pendant la mise a jour
  ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
    Serial.printf("Progression : %u%%\r", (progress / (total / 100)));
  });
  //En cas d'erreur
  ArduinoOTA.onError([](ota_error_t error) {
    Serial.printf("Erreur[%u]: ", error);
    switch (error) {
      //Erreur d'authentification
      case OTA_AUTH_ERROR :     Serial.println("Erreur d'authentification lors de la mise à jour");
                                break;
      case OTA_BEGIN_ERROR :    Serial.println("Erreur lors du lancement de la mise à jour");
                                break;
      case OTA_CONNECT_ERROR :  Serial.println("Erreur de connexion lors de la mise à jour");
                                break;
      case OTA_RECEIVE_ERROR :  Serial.println("Erreur de reception lors de la mise à jour");
                                break;
      case OTA_END_ERROR :      Serial.println("Erreur lors de la phase finale de la mise à jour");
                                break;
      default:                  Serial.println("Erreur inconnue lors de la mise à jour");
    }
  });
  ArduinoOTA.begin();
  //Fin conf OTA
  
  // on affiche l'adresse IP qui nous a été attribuée
  Serial.println("");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  
  //Lecture de la valeur MQTT server enregistrée dans le fichier de config json
  strcpy(mqtthost, custom_mqtthost.getValue());
  strcpy(timeCourseup, custom_timeCourse_up.getValue());
  upCourseTime = (strtoul (timeCourseup, NULL, 10)) * 1000; //On retype la variable (%ul unsigned long) et on la multiplie par 1000 (ce sont des millisecondes)
  strcpy(timeCoursedown, custom_timeCourse_down.getValue());
  downCourseTime = (strtoul (timeCoursedown, NULL, 10)) * 1000;
  //Sauvegarde des valeurs dans le fichier de configuration json
  if (shouldSaveConfig) {
    Serial.println("saving config");
    DynamicJsonBuffer jsonBuffer;
    JsonObject& json = jsonBuffer.createObject();
    json["mqtthost"] = mqtthost;
    json["timeCourseup"] = timeCourseup;
    json["timeCoursedown"] = timeCoursedown;
    File configFile = SPIFFS.open("/config.json", "w");
    if (!configFile) {
      Serial.println("Erreur lors de l'ouverture du fichier de config json pour enregistrement");
    }
    json.printTo(Serial);
    json.printTo(configFile);
    configFile.close();
    //end save
  }
//MQTT//
  
  client.setServer(mqtthost, 1883);
  Serial.print("host MQTT :");
  Serial.println(mqtthost);
  client.setCallback(callback);

// INITIALYZE GPIO
  pinMode(R1pin, OUTPUT);
  pinMode(R2pin, OUTPUT);
  //digitalWrite(R1pin, 0);
  //digitalWrite(R2pin, 0);
  pinMode(In1pin, INPUT_PULLUP);
  pinMode(In2pin, INPUT_PULLUP);

  server.on ( "/", handleRoot );
  server.begin();
  
  char storedShuttersState[shutters.getStateLength()];
  readInEeprom(storedShuttersState, shutters.getStateLength());
  shutters
    .setOperationHandler(shuttersOperationHandler)
    .setWriteStateHandler(shuttersWriteStateHandler)
    .restoreState(storedShuttersState)
    .setCourseTime(upCourseTime, downCourseTime)
    .onLevelReached(onShuttersLevelReached)
    .begin();
  
  Serial.println("Shutter Begin");
  }
  
//***********************************************************************************
// FONCTION Reset + Format memoire ESP
void eraz(){
  WiFiManager wifiManager;
if (debug){Serial.println("Réinitialisation de WiFiManager.");}
  wifiManager.resetSettings();
if (debug){Serial.println("Réinitialisation de la configuration (reset SPIFFS).");}
  SPIFFS.format();
ESP.reset();
}

//***********************************************************************************
// FONCTION communication MQTT JEEDOM VERS ESP
void callback(char* topic, byte* payload, unsigned int length) {
  int i = 0;
  if ( debug ) {
    Serial.println("Message recu =>  topic: " + String(topic));
    Serial.println(" | longueur: " + String(length,DEC));
  }
  // create character buffer with ending null terminator (string)
  for(i=0; i<length; i++) {
    message_buff[i] = payload[i];
  }
  message_buff[i] = '\0';
  
  String msgString = String(message_buff);
  if ( debug ) {
    Serial.println("Payload: " + msgString);
  }
   uint8_t niv = msgString.toInt();
   
  if (niv >= 0 && niv <= 100 &&  msgString != "up" && msgString != "dwn" && msgString != "stp" && msgString != "raz"){
    shutters.setLevel(niv);
  }
    else if ( msgString == "up" ) {
    shutters.setLevel(100); 
  } else if ( msgString == "dwn" ){
    shutters.setLevel(0);  
  } else if ( msgString == "stp" ){
    shutters.stop();  
  } else if ( msgString == "raz" ){
    eraz();
  }
}

//***********************************************************************************
//Fonction reconnexion MQTT
void reconnect() { 
  // Loop until we're reconnected
  long now1 = millis();
  if (debug){
  Serial.print("Attente de connexion MQTT...");}
    // Attempt to connect
    if (client.connect(ESP8266Client)) {
      float connectedepuis = (now1 - lastConnect)/1000;
      if (debug){Serial.print("connected depuis :");
      Serial.println(connectedepuis);}
      // Once connected, publish an announcement...
      client.publish(JeedomIn_topic, String(connectedepuis).c_str());
      lastConnect = now1;
      // ... and resubscribe
      client.subscribe(JeedomOut_topic);
    } else {
  if (debug){
      Serial.print("Erreur, rc=");
      Serial.print(client.state());
  Serial.println(" Nouvelle tentative dans 5 secondes");}
      // Wait 5 seconds before retrying
      }
  }

//***********************************************************************************
// LOOP
void loop(void){
  
R1state = digitalRead(R1pin);
R2state = digitalRead(R2pin);
In1state = digitalRead(In1pin);
In2state = digitalRead(In2pin);

  unsigned long now = millis();
  
  if (now - lastMsg > 5000) {
     lastMsg = now;
    if (!client.connected()) {
      if (debug){Serial.println("client reconnexion");}
      reconnect();
    }}
  
if (R1state != lastR1state){
  if (debug){Serial.println("declenchement par R1" );}
  mqttR1();
  lastR1state = R1state;
}
if (R2state != lastR2state){
  if (debug){Serial.println("declenchement par R2" );}
  mqttR2();
  lastR2state = R2state;
} 
if (In1state != lastIn1state){
  if (debug){Serial.println("declenchement par In1" );}
  OutIn();
  mqttIn1();
  lastIn1state = In1state;
}
if (In2state != lastIn2state){
  if (debug){Serial.println("declenchement par In2" );}
  OutIn();
  mqttIn2();
  lastIn2state = In2state;
}
  server.handleClient();
  ArduinoOTA.handle();
  client.loop();
  shutters.loop(); 
}

//***********************************************************************************
// FONCTION MQTT ESP VERS JEEDOM
void mqttR1(){
char Relais1[2];
sprintf(Relais1, "%d", digitalRead(R1pin)); 
if (!client.connected()) {
    reconnect();
  }
  else {
    if (debug){
   Serial.print("envoi MQTTR1 :");
   Serial.println(Relais1);
 }
client.publish(relais1_topic, Relais1);
}
}

void mqttR2(){
char Relais2[2];
sprintf(Relais2, "%d", digitalRead(R2pin));
if (!client.connected()) {
    reconnect();
  }
  else {
    if (debug){
   Serial.print("envoi MQTTR2 :");
   Serial.println(Relais2);
 }
client.publish(relais2_topic, Relais2);
}
}

void mqttIn1(){
char Entree1[2];
sprintf(Entree1, "%d", digitalRead(In1pin));
if (!client.connected()) {
    reconnect();
  }
  else {
if (debug){
   Serial.print("envoi MQTTIn1 :");
   Serial.println(Entree1);
 }
client.publish(entree1_topic, Entree1);
}
}

void mqttIn2(){
char Entree2[2];
sprintf(Entree2, "%d", digitalRead(In2pin));
if (!client.connected()) {
    reconnect();
  }
  else {
if (debug){
   Serial.print("envoi MQTTIn2 :");
   Serial.println(Entree2);
 }
client.publish(entree2_topic, Entree2);
}
}

void mqttlevel(){
  char level[4];
  sprintf(level, "%d", shutters.getCurrentLevel());
if (!client.connected()) {
    reconnect();
  }
  else {  
if (debug){
   Serial.print("envoi MQTTlevel :");
   Serial.println(level);
 }
     client.publish(position_topic, level);
 }
}

//***********************************************************************************
// FONCTIONS MOUVEMENTS VOLET
void up(){
  digitalWrite(R1pin, 1);
  digitalWrite(R2pin, 0);
  if (debug){Serial.println("MOUVEMENT: up" );}
  
  }

void dwn(){
  digitalWrite(R1pin, 0);
  digitalWrite(R2pin, 1);
  if (debug){Serial.println("MOUVEMENT: dwn" );}
  }

void stp(){
  digitalWrite(R1pin, 0);
  digitalWrite(R2pin, 0);
  if (debug){Serial.println("MOUVEMENT: stp" );}
  }

//***********************************************************************************
//FONCTION SORTIES RELAIS EN FONCTION DES ENTREES POUR COMMANDE LOCAL
void OutIn(){
    
int status = In1state*10 + In2state;
// status = 10 pour up, 1 pour dwn, 0 pour stp
int level1 = shutters.getCurrentLevel();

switch (status) { 
   case 10:
   
    if (debug){
      Serial.print("In1state:" );
      Serial.println(In1state);  
      Serial.print("In2state:" );
      Serial.println(In2state);  
      Serial.print("status:" );
      Serial.println(status);    
      }
      if (level1 != 100){
      shutters.setLevel(100);
      }
      
  break;


case 1:
   if (debug){
      Serial.print("In1state:" );
      Serial.println(In1state);  
      Serial.print("In2state:" );
      Serial.println(In2state);  
      Serial.print("status:" );
      Serial.println(status);    
      }
      if (level1 != 0){
      shutters.setLevel(0);
      }
   break;


case 11:
   
   shutters.stop();
   //mqtt(); 
   if (debug){
      Serial.print("In1state:" );
      Serial.println(In1state);  
      Serial.print("In2state:" );
      Serial.println(In2state);  
      Serial.print("status:" );
      Serial.println(status);    
      }
   
      
   break;

case 0:
break;

default: 
   Serial.println("Erreur Switch Case");  
   break;

}  
}

String getPage() {
String page = "<html charset=UTF-8><head> <meta http-equiv='refresh' content='5'><meta name='viewport' content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no'>";
page += "<link href='https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/superhero/bootstrap.min.css' rel='stylesheet'>";
page += "<title>Volet roulant</title></head><body>";
page += "<div class='container-fluid'>";
page +=    "<div class='row'>";
page +=     "<div class='col-md-12'>";
page +=       "<h1 class='text-center'><b><u>Volet Roulant " ESP8266Client "</u></b></h1><br><br>";
page +=       "<h3>Gestion du volet roulant:</h3>";
page +=     "</div>";
page +=   "</div>";
page +=   "<div class='row'>";
page +=     "<div class='col-md-12'>";
page +=       "<ul><li>Ouverture du volet: <strong>";
page +=          shutters.getCurrentLevel();
page +=          "%</strong></li></ul>";
page +=       "<br><div class='btn-group'>";         
page +=         "<div class='col-md-4 col-sm-4'><form action='/' method='POST'><button class='btn btn-info' type='button submit' name='up' value='up'><span class='glyphicon glyphicon-chevron-up' aria-hidden='true'></span></button></form></div>";
page +=         "<div class='col-md-4 col-sm-4'><form action='/' method='POST'><button class='btn btn-info' type='button submit' name='stp' value='stp'><span class='glyphicon glyphicon-stop' aria-hidden='true'></span></button></form></div>";
page +=         "<div class='col-md-4 col-sm-4'><form action='/' method='POST'><button class='btn btn-info' type='button submit' name='dwn' value='dwn'><span class='glyphicon glyphicon-chevron-down' aria-hidden='true'></span></button></form></div>";
page +=       "</div>";
page +=     "</div>";
page +=   "</div>";
page +=   "<div class='row'>";
page +=     "<div class='col-md-12'>";
page +=       "<h3>Configuration:</h3>";
page +=       "<ul>";
page +=                            "<li>Adresse IP du volet roulant : <strong>192.168.1.";
page +=                                 WiFi.localIP()[3];
page +=                             "</strong></li>";
page +=                             "<li>Nom du module : <strong>";
page +=                                 ESP8266Client;
page +=                             "</strong></li>";
page +=                             "<li>Delai descente volet : <strong>";
page +=                                 timeCourseup;
page +=                             "s</strong></li><li>Nom du wifi: <strong>";
page +=                                 WiFi.SSID();
page +=                             "</strong></li><li>Puissance du wifi: <strong>";
page +=                                 WiFi.RSSI();
page +=                             "dBm</strong></li>";
page +=       "</ul>";
page +=       "<h3>Serveur MQTT:</h3>";
page +=       "<ul>";
page +=                          "<li>Adresse IP du serveur : <strong>";
page +=                                   mqtthost;
page +=                          "</strong></li>";
page +=                          "<li>MDP de conexion : <strong>";
page +=                                   PASS;
page +=                         "</strong></li>";
page +=                         "<li>Bouton poussoir 1 : <strong>";
page +=                                  In1state;
page +=                         "</strong></li>";
page +=                         "<li>Bouton poussoir 2 : <strong>";
page +=                                  In2state;
page +=                         "</strong></li>";
page +=       "</ul>";
page +=     "</div>";
page +=   "</div>";
page +=   "<div class='row'>";
page +=     "<div class='col-md-12'><h3>Remise a zero :</h3><ul><li>Permet de remettre a zero la config et d'acceder a la page de configuration.</li></ul><br>";
page +=     "<div class='col-md-4 col-sm-4'><form action='/' method='POST'><button type='button submit' class='btn btn-danger' name='raz' value='raz'><span class='glyphicon glyphicon-remove-sign' aria-hidden='true'></span> RAZ</button></form></div>";
page +=     "</div></div<div class='row'><div class='col-md-12'><div class='page-header'><h4 class='text-center'>ESP8266 volet roulant<br><small> @marmoul</small></h4></div></div></div></div>";
  page += "</body></html>";
  return page;
}
void handleRoot() {
  if ( server.hasArg("up") ) {
    shutters.setLevel(100);
    server.send ( 200, "text/html", getPage() );
  } else if ( server.hasArg("stp") ) {
    shutters.stop();
    server.send ( 200, "text/html", getPage() );
  } else if ( server.hasArg("dwn") ) {
    shutters.setLevel(0);
    server.send ( 200, "text/html", getPage() );
  } else if (server.hasArg("raz")) {
    eraz();
    server.send ( 200, "text/html", getPage() );
  } else {
    server.send ( 200, "text/html", getPage() );
  }
}

Pour info voila les in sur une semaine pour les 4 volets !!!!!
History_-_Jeedom_et_Boîte_de_réception_—_Seb__50 messages__3_non_lus_.png
History_-_Jeedom_et_Boîte_de_réception_—_Seb__50 messages__3_non_lus_.png (298.71 Kio) Consulté 1826 fois
J'ai changer de config wifi et je suis passer sur le canal 1 j'ai l'impression que c'est mieux pour les in depuis hier a suivre...
j'ai passer les modules volet roulant en bail fixe et J'ai environs 35 produit connecté à mon réseau wifi (ordi, tablette téléphone, module Esp, enceinte....) le tout sur un routeur archer C7 tournant sous openwrt.
OpenWrt_-_Sans-fil_-_LuCI.png
OpenWrt_-_Sans-fil_-_LuCI.png (32.4 Kio) Consulté 1826 fois
Pour les log je ne sais pas trop ce que je pourrais te donnée du coup :/

Merci :)
manumdk a écrit :
27 janv. 2018, 23:25
Salut,
Je ne connais le code, mais pour tes tests, redémarre ton routeur Wifi, tu verras bien la réaction de ton wemos.
De même pour le mqtt, redémarre le serveur Mosquito, ton Wemos devrait perdre le lien et le wemos se reconnectera.
A+
Je viens de tester le redémarrage du serveur mqtt et non pas de reboot de l'esp, un in dans l'historique...
je teste pou le wifi.
Merci

Avatar de l’utilisateur
marmoul
Actif
Messages : 891
Inscription : 01 sept. 2015, 15:50
Localisation : Haute-Saône (70)

Re: Commande volet roulant avec ESPeasy OU sketch MQTT.

Message par marmoul » 29 janv. 2018, 09:33

Ah si je sais pas si sa peu servir mais j'avais recuperé les log de mon routeur quand sa a bug l'autre jour. Je le poste si sa parle a quelqu'un :)
Pièces jointes
logopenwrt.txt
(70.71 Kio) Téléchargé 38 fois

latwingo
Actif
Messages : 504
Inscription : 24 nov. 2014, 10:58
Localisation : Cagnes Sur Mer

Re: Commande volet roulant avec ESPeasy OU sketch MQTT.

Message par latwingo » 29 janv. 2018, 13:00

Salut Marmoul

Je ne connais pas trop ce genre de routeur

Mais à mon avis au dessus de 10 périphérique
Qui tire un peu il c'est plus ou il est

Il doit même couper les connexions tout seul

Si je prends l'exemple de ma Freebox
Jusqu'à 15 ça va Temps que personne ne regarde un vidéo en wifi sur ça tablette sinon tout les 4 mn elle perd la connexion Wifi
Donc du coup j'ai Mi un routeur Dlink que pour la domotique masquer une foi tout paramétrer

Ou alors il te faudrait1 ou 2 répéteur wifi pour éviter que ce pauvre routeur ce transforme en cocote minute

Avatar de l’utilisateur
marmoul
Actif
Messages : 891
Inscription : 01 sept. 2015, 15:50
Localisation : Haute-Saône (70)

Re: Commande volet roulant avec ESPeasy OU sketch MQTT.

Message par marmoul » 29 janv. 2018, 13:47

Y’a pas grand chose qui tourne au final car je dois y avoir 15 module esp.
Le reste c’est Jeedom lms syno ordi téléphone...
Et quand sa a planter j’asais rien en streaming j’étais seul chez moi.

J’ai juste une caméra wanscam hw0036 dessus.

Par contre sa explique pas pourquoi mes modules calibre juste les in :/

Edit:

Sa à l'air mieux avec les modif réseau.
A 9h c'étais le reboot de mqtt pour tester
Pièces jointes
History_-_Jeedom.png
History_-_Jeedom.png (256.47 Kio) Consulté 1805 fois

latwingo
Actif
Messages : 504
Inscription : 24 nov. 2014, 10:58
Localisation : Cagnes Sur Mer

Re: Commande volet roulant avec ESPeasy OU sketch MQTT.

Message par latwingo » 29 janv. 2018, 18:12

Regarde on dirai qu'il a trouvé ton fantôme

https://youtu.be/aq8_os6g13s

rol-rider
Actif
Messages : 5097
Inscription : 10 août 2014, 23:50

Re: Commande volet roulant avec ESPeasy OU sketch MQTT.

Message par rol-rider » 30 janv. 2018, 10:12

Il est bien gentil le chéri-bibi anglo-saxon, mais on ne l'a pas attendu pour tester le filtre passe bas sauf ? que l'on ne connait pas la fréquence qui pose problème et que l'on ne dispose pas d'appareil pour la trouver ! et qu'il ne tient pas compte de la résistance pullup déjà présente, les tests risquent d'être long....très long pour trouver la bonne valeur !
reste, l'opto ! j'y travaille.(posté demain)
RPI3 avec mSATA
RFXcom; RFLink; Z-Wave; Mysensors; ESPEasy
Noeuds MySensors-téléinfo-Température-Distance-Baromètre-relais
Noeuds ESPEasy-open-garage-relais-PIR-Station Météo

Répondre

Revenir vers « [Plugin Tiers] ESPEasy »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 5 invités