Gateway USB avec DHTnew et Bus CAN

Un forum dédie à vos questions concernant l'intégration à Domoticz des capteurs et gateway mysensors.org
Répondre
maticz
Messages : 15
Enregistré le : 14 juil. 2019, 11:18

Gateway USB avec DHTnew et Bus CAN

Message par maticz »

Bonjour

après 4jours à ratissé les bas fond du web, je post mon problème.

la base : Domoticz <--- Usb --- Arduino uno <---filaire--- 2x capteurs DHT22 (temp/humidité)

affichage sur le terminal Série de L'IDE :

Code : Tout sélectionner

15:06:04.334 -> 0;255;3;0;14;Gateway startup complete.
15:06:04.334 -> 0;255;0;0;17;2.3.2
15:06:04.334 -> 0;255;3;0;11;TempHumidDHT22
15:06:04.334 -> 0;255;3;0;12;1.1
15:06:04.334 -> 0;1;0;0;7;
15:06:04.334 -> 0;2;0;0;6;
15:06:04.334 -> 0;3;0;0;7;
15:06:04.334 -> 0;4;0;0;6;
15:06:07.351 -> 0;2;1;0;0;20.4
15:06:07.351 -> 0;1;1;0;1;51.2
15:06:07.351 -> 0;4;1;0;0;20.2
15:06:07.351 -> 0;3;1;0;1;52.3

le Human readable output:

https://www.mysensors.org/build/parser? ... 3B1%3B52.3


sur la 2éme sonde les valeurs ne varie pas
(j'ai testé sans la partie MySensors, c'est bon, le câblage est bon)

le croquis :

Code : Tout sélectionner

/*
 *            MYSENSORS V2 - 2020
 * HISTORY: (une base de Henrik EKblad et Torben Woltjen)
 * INFO: 
 * https://www.mysensors.org/download/sensor_api_20 
 * https://www.mysensors.org/download/serial_api_20 
 *  
 * Description:
 * MySensors Gateway USB avec capteurs direct non Hertzien.  
 * 
 * Libraries:
 * - ACAN2515 ver.2.0.4 de pierre Molinaro
 * - DHTNEW Ver:0.1.5 de Rob Tillaart's
 * 
 * Modification:
 * -X- 2 capteurs DHT22 (température-humidité)
 * -o- 
 * -o- 
 * -o- 
 *
 * 
 */

/*   Selection du type de connection */ 
  //#define MY_RS485          //RS485
  #define MY_GATEWAY_SERIAL   // serial gateway

  #include <SPI.h>
  #include <MySensors.h>  
  #include <dhtnew.h>

  DHTNEW Capteur1 (6);
  DHTNEW Capteur2 (7);

  #define CHILD_ID_HUM_1  1
  #define CHILD_ID_TEMP_1 2
  
   #define CHILD_ID_HUM_2 3
   #define CHILD_ID_TEMP_2 4

  //uint8_t nNoUpdatesTemp2;
  //uint8_t nNoUpdatesHum2;
  //bool metric = true;

/* déclaration du conteneur pour l'envoi de message*/
/* identifiant du capteur et type de variable */
  MyMessage msgHum1(CHILD_ID_HUM_1, V_HUM);
  MyMessage msgTemp1(CHILD_ID_TEMP_1, V_TEMP);
  MyMessage msgHum2(CHILD_ID_HUM_2, V_HUM);
  MyMessage msgTemp2(CHILD_ID_TEMP_2, V_TEMP);

/* liste des types de variables*/
/*https://www.mysensors.org/download/serial_api_20#variable-types */

/*reset du compteur des millisecondes*/
 unsigned long previousMillis = 0;  
/*Fréquence d'utilisation du capteur (60000millisecondes=1mn) */
 const long interval = 3000;

 void setup()      /*------ Setup --------*/
 {
// Serial.begin(115200);
 Capteur1.read();
 Capteur2.read();
 }

 void presentation()    /* -----void MySensors----*/
 { 
  /* Envoi inf de version d'esquisse à la passerelle */
 sendSketchInfo("TempHumidDHT22", "1.1");
  
/* Enregistrez tous les capteurs sur gw */
/*(ils seront créés en tant qu'appareils enfants)*/
  present(CHILD_ID_HUM_1, S_HUM);
  present(CHILD_ID_TEMP_1, S_TEMP);
  present(CHILD_ID_HUM_2, S_HUM);
  present(CHILD_ID_TEMP_2, S_TEMP);
 
 // metric = getControllerConfig().isMetric;
 }

 void loop()   /*----------- Loop ---------*/
 {  
 unsigned long currentMillis = millis();
 /*calcul temps ecouler du capteur*/
     if (currentMillis - previousMillis >= interval)
       {
        previousMillis = currentMillis; 
            
  float temperature1 = Capteur1.temperature;  
  float humidity1 = Capteur1.humidity;
  float temperature2 = Capteur2.temperature;
  float humidity2 = Capteur2.humidity;

/* ------ control des  capteurs  ---------*/ 
    const int error = Capteur1.read(); 
       if (error != DHTLIB_OK)
       { 
       Serial.println(" Panne sur DHT22 ");
        }
                    
/* envoi des valeurs sur le serveur */     
    send(msgTemp1.set(temperature1, 1));
    send(msgHum1.set(humidity1, 1));
    send(msgTemp2.set(temperature2, 1));
    send(msgHum2.set(humidity2, 1));
  
/* --------- Visu sur terminal Debug -------------*/
 /*      Serial.print("humidite 1 : ");
        Serial.print(humidity1);
        Serial.print(" %\t");
        Serial.print("Temperature 1 : ");
        Serial.print(temperature1);
        Serial.println(" C");
         Serial.print("humidite 2 : ");
         Serial.print(humidity2);
         Serial.print(" %\t");
         Serial.print("Temperature 2 : ");
         Serial.print(temperature2);
         Serial.println(" C");
   */     
     }
 }  

 
Pour les DHT22 la librairie et une version DHTNEW Ver:0.1.5 de Rob Tillaart's
pour MySensors c'est version 2.3.2

tester avec un capteur DHT22 et Domoticz c'est bon :D

Merci

pour info:
https://github.com/domoticz/domoticz/issues/276
https://easydomoticz.com/forum/viewtopi ... sor#p43770
Modifié en dernier par maticz le 10 juin 2020, 20:35, modifié 1 fois.

boum
Messages : 101
Enregistré le : 18 janv. 2019, 11:34
Localisation : France

Re: Gateway USB et DHTnew

Message par boum »

À vue d'œil, il manque la lecture du 2e capteur dans la fonction boucle loop() :

Code : Tout sélectionner

/* ------ control des  capteurs  ---------*/ 
    const int error1 = Capteur1.read(); 
       if (error1 != DHTLIB_OK)
       { 
       Serial.println(" Panne sur premier DHT22 ");
        }
                    
    const int error2 = Capteur2.read(); 
       if (error2 != DHTLIB_OK)
       { 
       Serial.println(" Panne sur deuxieme DHT22 ");
        }
Aussi, tu envoies les valeurs précédentes au contrôleur. Sur 3s, ce n'est pas grave, mais si tu augmentes l'intervalle, il faudra peut-être ajouter des wait après les CapteurX.read() et récupérer les valeurs après.
Domoticz v4.10717 sur Pi³ / Z-Wave / RFXCom

maticz
Messages : 15
Enregistré le : 14 juil. 2019, 11:18

Re: Gateway USB et DHTnew

Message par maticz »

.... " il manque la lecture du 2e capteur dans la fonction boucle loop() : "

j'le crois pas :o Impec, les valeurs sont rafraîchi.
( comprend pas pourquoi le control du capteur bloquer le 2eme DHT??)

et pour .."peut-être ajouter des wait " ... oui le temps de latence lecture/mesure des DHT est à prendre en compte.

boum .... merci beaucoup.

Super vais pouvoir continuer mon Binz avec mon module CAN2515/spi et crée une "virtuelle" sur l'Arduino

maticz
Messages : 15
Enregistré le : 14 juil. 2019, 11:18

Re: Gateway USB et DHTnew

Message par maticz »

... champagne pour le Forum :lol:

une recopie du terminal

Code : Tout sélectionner

Configuration du MCP2515
configuration ok

0;2;1;0;0;19.9
0;1;1;0;1;52.2

0;4;1;0;0;20.2
0;3;1;0;1;49.0

0;6;1;0;0;23.2
0;5;1;0;1;48.8
les derniers valeurs remonte par le bus CAN

capteurs virtuel 6 et 5

le croquis brouillon de la Gateway USB CAN ( le nom est pas très clair)

Code : Tout sélectionner

/*
 *            MYSENSORS V2 - 2020
 * HISTORY: (une base de Henrik EKblad et Torben Woltjen)
 * INFO: 
 * https://www.mysensors.org/download/sensor_api_20 
 * https://www.mysensors.org/download/serial_api_20 
 *  
 * Description:
 * MySensors Gateway USB avec capteurs direct non Hertzien.  
 * 
 * Libraries:
 * - ACAN2515 ver.2.0.4 de pierre Molinaro
 * - DHTNEW Ver:0.1.5 de Rob Tillaart's
 * 
 * Modification:
 * -X- 2 capteurs DHT22 (température-humidité)
 * -X- Ajout module ACAN2515
 * -o- 
 * -o- 
 *
 * 
 */

/*   Selection du type de connection */ 
   #define MY_GATEWAY_SERIAL   // serial gateway

  #include <SPI.h>
  #include <MySensors.h>  
  #include <dhtnew.h>

   #include <ACANBuffer16.h>           /* les buffers */ 
   #include <ACANBuffer.h>
   #include <ACAN2515Settings.h>       /* les reglages */
   #include <ACAN2515.h>               /* le controleur*/
   #include <CANMessage.h>             /* les messages */

  DHTNEW Capteur1 (6);
  DHTNEW Capteur2 (7);

  
  /*---- capteurs virtuel CAN ----  */
  float  T1;  float   H1;  /*capteur 1 */
  float  T2;  float   H2;  /*capteur 2 */
  float  T3;  float   H3;  /*capteur 3 */
  float  T4;  float   H4;  /*capteur 4 */
  
/* ----- MySensors ----*/
  #define CHILD_ID_HUM_1  1
  #define CHILD_ID_TEMP_1 2
   #define CHILD_ID_HUM_2 3
   #define CHILD_ID_TEMP_2 4

   #define CHILD_ID_HUM_3 5 /* test CAN*/
   #define CHILD_ID_TEMP_3 6


  /*  Module CAN MCP2515 */
   static const uint8_t MCP2515_CS  = 10;  /* pin SPI_CS */
   static const uint8_t MCP2515_INT = 2;   /* pin interruption */

    /* objet de type ACAN2515 est instancié pour gérer le MCP2515  */
   ACAN2515 CAN(MCP2515_CS, SPI, MCP2515_INT); /* pin CS,SPI ,pin INT */
   static const uint32_t FREQUENCE_DU_QUARTZ = 8ul * 1000ul * 1000ul; /*quartz du MCP2515*/
   static const uint32_t FREQUENCE_DU_BUS_CAN = 125ul * 1000ul;  /*fréquence du bus*/

   CANMessage message;     /* objets CAN pour les messages en réception */

 /* ---- classement des messages CAN ----*/
 void receive1 (const CANMessage & message)  { 
  const uint16_t capteurs = message.id & 0x1F; 
  
 switch (capteurs) {
  case 10:
    T1 = message.dataFloat[0];
    H1 = message.dataFloat[1];
    break;
  case 11:
    T2 = message.dataFloat[0];
    H2 = message.dataFloat[1];
    break;
  case 12:
    T3 = message.dataFloat[0];
    H3 = message.dataFloat[1];
    break;
  case 13:
    T4 = message.dataFloat[0];
    H4 = message.dataFloat[1];
    break;
    }
   }

// ----- défini masques et filtres pour les messages  ------
  const ACAN2515Mask masque = standard2515Mask( 0, 0, 0); 
  const ACAN2515AcceptanceFilter filtres[] =  {  
   { standard2515Filter( 0, 0, 0), receive1 }
    };

/* déclaration du conteneur pour l'envoi de message*/
/* identifiant du capteur et type de variable */
  MyMessage msgHum1(CHILD_ID_HUM_1, V_HUM);
  MyMessage msgTemp1(CHILD_ID_TEMP_1, V_TEMP);
  MyMessage msgHum2(CHILD_ID_HUM_2, V_HUM);
  MyMessage msgTemp2(CHILD_ID_TEMP_2, V_TEMP);

  MyMessage msgHum3(CHILD_ID_HUM_3, V_HUM);
  MyMessage msgTemp3(CHILD_ID_TEMP_3, V_TEMP);

/* liste des types de variables*/
/*https://www.mysensors.org/download/serial_api_20#variable-types */




/*reset du compteur des millisecondes*/
unsigned long previousMillis = 0;  
/*Fréquence d'utilisation du capteur (60000millisecondes=1mn) */
const long interval = 3000;

void setup()      /*------ Setup --------*/
{
// Serial.begin(115200);
  SPI.begin();           /* bus SPI module CAN */
 Capteur1.read();
 Capteur2.read();

 Serial.println("Configuration du MCP2515");
  ACAN2515Settings reglages(FREQUENCE_DU_QUARTZ, FREQUENCE_DU_BUS_CAN);

  reglages.mReceiveBufferSize = 4;      /* nbr d'emplacement buffer*/
  reglages.mTransmitBuffer0Size = 0;    /* file d'attente d'emission*/
  
  /* Demarrage et control d'erreur du CAN */ 
  const uint16_t codeErreur = CAN.begin(reglages,[] {CAN.isr(); }, masque, filtres, 1 );
     
  if (codeErreur == 0) {
    Serial.println("configuration ok"); }
    else {
    Serial.println("Probleme de connexion");
    while (1); 
    }
 
}

 void presentation()    /* -----void MySensors----*/
 { 
  /* Envoi inf de version d'esquisse à la passerelle */
 sendSketchInfo("TempHumidDHT22", "1.1");
  
/* Enregistrez tous les capteurs sur gw */
/*(ils seront créés en tant qu'appareils enfants)*/
  present(CHILD_ID_HUM_1, S_HUM);
  present(CHILD_ID_TEMP_1, S_TEMP);
  present(CHILD_ID_HUM_2, S_HUM);
  present(CHILD_ID_TEMP_2, S_TEMP);

  present(CHILD_ID_HUM_3, S_HUM);
  present(CHILD_ID_TEMP_3, S_TEMP);
 
 // metric = getControllerConfig().isMetric;
}



void loop()   /*----------- Loop ---------*/
{  

 unsigned long currentMillis = millis();
 /*calcul temps ecouler du capteur*/
     if (currentMillis - previousMillis >= interval)
       {
        previousMillis = currentMillis; 
            
  float temperature1 = Capteur1.temperature;  
  float humidity1 = Capteur1.humidity;
  float temperature2 = Capteur2.temperature;
  float humidity2 = Capteur2.humidity;

  float temperature3 = T1;
  float humidity3 = H1;

/* ------ control des  capteurs  ---------*/ 
    const int error = Capteur1.read(); 
       if (error != DHTLIB_OK)
       { 
       Serial.println(" Panne sur DHT22 ");
        }
     const int error2 = Capteur2.read(); 
       if (error2 != DHTLIB_OK)
       { 
       Serial.println(" Panne sur deuxieme DHT22 ");
        }    
                    
/* envoi des valeurs sur le serveur */     
    send(msgTemp1.set(temperature1, 1));
    send(msgHum1.set(humidity1, 1));
    send(msgTemp2.set(temperature2, 1));
    send(msgHum2.set(humidity2, 1));

     send(msgTemp3.set(temperature3, 1));
    send(msgHum3.set(humidity3, 1));
  
/* --------- Visu sur terminal Debug -------------*/
 /*      Serial.print("humidite 1 : ");
        Serial.print(humidity1);
        Serial.print(" %\t");
        Serial.print("Temperature 1 : ");
        Serial.print(temperature1);
        Serial.println(" C");
         Serial.print("humidite 2 : ");
         Serial.print(humidity2);
         Serial.print(" %\t");
         Serial.print("Temperature 2 : ");
         Serial.print(temperature2);
         Serial.println(" C");
   */  
   
 CAN.dispatchReceivedMessage();
/* 
  Serial.print(T1);
  Serial.print( " :A: ");
  Serial.println(H1);
  
  Serial.print(T2);
  Serial.print( " :B: ");
  Serial.println(H2);
  
  Serial.print(T3);
  Serial.print( " :C: ");
  Serial.println(H3);

  Serial.print(T4);
  Serial.print( " :D: ");
  Serial.println(H4);
  delay(2000); // pose de Delay et Serial.print pour test
  */ 
       }
}  

 

maticz
Messages : 15
Enregistré le : 14 juil. 2019, 11:18

Re: Gateway USB et DHTnew

Message par maticz »

... la partie DomoTicz

une recopie des Log

Code : Tout sélectionner

.......
2020-06-10 20:04:53.924 Status: MySensors: Worker started...
2020-06-10 20:04:54.924 Status: MySensors: Using serial port: /dev/ttyACM0
2020-06-10 20:04:56.651 Status: MySensors: Node: 0, Sketch Name: TempHumidDHT22
2020-06-10 20:04:56.651 Status: MySensors: Node: 0, Sketch Version: 1.1
2020-06-10 20:07:38.546 Status: EventSystem: reset all device statuses...
2020-06-10 20:08:49.061 Status: EventSystem: reset all device statuses...
2020-06-10 20:08:54.365 Status: EventSystem: reset all device statuses...
2020-06-10 20:11:04.345 Status: EventSystem: reset all device statuses...
2020-06-10 20:20:08.593 (mysensors DHT CAN) Temp + Humidity (TempHum)
2020-06-10 20:20:08.602 (mysensors DHT CAN) Temp + Humidity (TempHum)
2020-06-10 20:20:08.611 (mysensors DHT CAN) Temp + Humidity (TempHum CAN)
.......

et en pièce joint une recopie d’écran de Domoticz
Fichiers joints
recopie Mysensors Can vue023 .png
recopie Mysensors Can vue023 .png (257.7 Kio) Vu 880 fois

Répondre