Problème visibilité mqtt

Bonjour,
J'ai un code pour faire communiquer mon arduino avec mqtt. 
Mon broker est Mosquitto sur Home Assistant.J'essaye de faire communiquer 10 dht22.
Lorsque j'utilise mqtt explorer, je ne vois pas mon arduino, mais lorsque j'envoie des 
messages avec mqttlens, ils apparaissent.
Je précise que dans mosquitto, il voit l'adresse IP de mon arduino et me dit qu'il y est 
connecté mais aucun message ne passe.
Dans la console arduino, je vois les messages.
Petite précision: sans rien changer au code ou autre, parfois il se connecte mais pour 
très peu de temps.
Est-ce que quelqu'un sait comment m'aider?
Voici mon code (en partie car le forum me dit que j'excède les 9000 caractères):
#include <DHT.h>
 #include <SPI.h>
 #include <Ethernet.h>
 #include <PubSubClient.h>
 

 #define DHTPIN1 24 
 #define DHTPIN2 26  
 #define DHTPIN3 28
 #define DHTPIN4 30  

 #define DHTPIN6 34 
 #define DHTPIN7 36
 #define DHTPIN8 38  
 #define DHTPIN9 40 
  

 #define DHTTYPE1 DHT22
 #define DHTTYPE2 DHT22
 #define DHTTYPE3 DHT22
 #define DHTTYPE4 DHT22

 #define DHTTYPE6 DHT22
 #define DHTTYPE7 DHT22
 #define DHTTYPE8 DHT22
 #define DHTTYPE9 DHT22
 

 DHT dht1 (DHTPIN1, DHTTYPE1);
 DHT dht2 (DHTPIN2, DHTTYPE1);
 DHT dht3 (DHTPIN3, DHTTYPE1);
 DHT dht4 (DHTPIN4, DHTTYPE1);

 DHT dht6 (DHTPIN6, DHTTYPE1);
 DHT dht7 (DHTPIN7, DHTTYPE1);
 DHT dht8 (DHTPIN8, DHTTYPE1);
 DHT dht9 (DHTPIN9, DHTTYPE1);
 

 byte mac[]    = {  0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED }; // adresses mac
const char* mqtt_server = "192.168.1.2";
const char* client_name = "speakerswitch";


        // ------------- mqtt ---------------//

   void callback(char* topic, byte* payload, unsigned int length)
   {
   // gérer le message est arrivé
   }

  EthernetClient ethClient;
  PubSubClient client(ethClient);

  long lastReconnectAttempt = 0;

  boolean reconnect()
 {
    if (client.connect("Arduino_rez", "home/Arduino_rez", 0, true, "offline"))
    {
     // Once connected, publish an announcement...
     client.publish("home/Arduino_rez","online", true);
     // ... and resubscribe
     client.subscribe("inTopic");
    }
   return client.connected();
 }


 // Réservez la zone de stockage pour sauver la clôture //
 
  // capteur0
  static char humidity[15];
  static char temperature[15];
  float h = 0.0;
  float h_alt = 0.0;
  float t = 0.0;
  float t_alt = 0.0;

  // capteur1
  static char char_h1[15];
  static char char_t1[15];
  float h1 = 0.0;
  float h1_alt = 0.0;
  float t1 = 0.0;
  float t1_alt = 0.0;

    // capteur2
  static char char_h2[15];
  static char char_t2[15];
  float h2 = 0.0;
  float h2_alt = 0.0;
  float t2 = 0.0;
  float t2_alt = 0.0;

    // capteur3
  static char char_h3[15];
  static char char_t3[15];
  float h3 = 0.0;
  float h3_alt = 0.0;
  float t3 = 0.0;
  float t3_alt = 0.0;

    // capteur4
  static char char_h4[15];
  static char char_t4[15];
  float h4 = 0.0;
  float h4_alt = 0.0;
  float t4 = 0.0;
  float t4_alt = 0.0;

    // capteur5
  static char char_h5[15];
  static char char_t5[15];
  float h5 = 0.0;
  float h5_alt = 0.0;
  float t5 = 0.0;
  float t5_alt = 0.0;

    // capteur6
  static char char_h6[15];
  static char char_t6[15];
  float h6 = 0.0;
  float h6_alt = 0.0;
  float t6 = 0.0;
  float t6_alt = 0.0;

    // capteur7
  static char char_h7[15];
  static char char_t7[15];
  float h7 = 0.0;
  float h7_alt = 0.0;
  float t7 = 0.0;
  float t7_alt = 0.0;

    // capteur8
  static char char_h8[15];
  static char char_t8[15];
  float h8 = 0.0;
  float h8_alt = 0.0;
  float t8 = 0.0;
  float t8_alt = 0.0;

    // capteur9
  static char char_h9[15];
  static char char_t9[15];
  float h9 = 0.0;
  float h9_alt = 0.0;
  float t9 = 0.0;
  float t9_alt = 0.0;

// remise a zero du compteur "millisecondes"  depuis le dernier appel.
    unsigned long previousMillis = 0;  
        
// valeur intervalle de fréquence d'utilisation du capteur, en millisecondes (60000=1mn)
    const long interval = 6000;



         //***************** Setup **********************//

 void setup()
 {
   client.setServer(server, 1883);
   client.setCallback(callback);

   Ethernet.begin(mac, ip);
   delay(1500);
   lastReconnectAttempt = 0;
  
   Serial.begin(9600);
      
  if (Ethernet.begin(mac) == 0)
    {
      Serial.println("Failed to configure Ethernet using DHCP");
      return;
    }
    
  Serial.print("My IP address: ");
  for (byte thisByte = 0; thisByte < 4; thisByte++) {
    // print the value of each byte of the IP address:
    Serial.print(Ethernet.localIP()[thisByte], DEC);
    Serial.print("."); 
  }
  Serial.println();


   dht1.begin();
   dht2.begin();
   dht3.begin();
   dht4.begin();

   dht6.begin();
   dht7.begin();
   dht8.begin();
   dht9.begin();  
 }
void loop()
 {
   if (!client.connected())
   {
     long now = millis();
     if (now - lastReconnectAttempt > 5000) // calcul temps pour reconnection client
       {
        lastReconnectAttempt = now;
    
     // Tentative de reconnexion
       if (reconnect())
          {
          lastReconnectAttempt = 0;
          }
       }
   }

   else
     {
      client.loop(); // Client connected
     }

   unsigned long currentMillis = millis();

    if (currentMillis - previousMillis >= interval) // calcul temps ecouler du capteur
    {
      previousMillis = currentMillis;
      h1 = dht1.readHumidity();     //humidite 1
      t1 = dht1.readTemperature();  //Temperature 1
      
      h2 = dht2.readHumidity();     //humidite 2
      t2 = dht2.readTemperature();  //Temperature 2

      h3 = dht3.readHumidity();     //humidite 3
      t3 = dht3.readTemperature();  //Temperature 3
      
      h4 = dht4.readHumidity();     //humidite 4
      t4 = dht4.readTemperature();  //Temperature 4


      
      h6 = dht6.readHumidity();     //humidite 6
      t6 = dht6.readTemperature();  //Temperature 6
     
      h7 = dht7.readHumidity();     //humidite 7
      t7 = dht7.readTemperature();  //Temperature 7
      
      h8 = dht8.readHumidity();     //humidite 8
      t8 = dht8.readTemperature();  //Temperature 8
     
      h9 = dht9.readHumidity();     //humidite 9
      t9 = dht9.readTemperature();  //Temperature 9     
     }
    
   // Vérifiez si un numéro valide est retourné.
   //  Si "NaN" "Not a Number" (pas un nombre) est renvoyé, affiche erreurs capteur.

     if (isnan(t) || isnan(h) || isnan(t1) || isnan(h1) || isnan(t2) || isnan(h2) || isnan(t3) || isnan(h3) || isnan(t4) || isnan(h4) || isnan(t5) || isnan(h5) || isnan(t6) || isnan(h6) || isnan(t7) || isnan(h7) || isnan(t8) || isnan(h8) || isnan(t9) || isnan(h9) )
      {
       Serial.println(" un DHT22 n'a pas pu être lu");
       client.publish("home/Arduino_rez","Erreur capteur",true);
    
     // "true" envoie le message conservé, c'est-à-dire que le message reste sur le courtier
     //jusqu'à ce que quelque chose de nouveau arrive.
      }
       else if (h == h_alt && t == t_alt && h1 == h1_alt && t1 == t1_alt && h2 == h2_alt && t2 == t2_alt && h3 == h3_alt && t3 == t3_alt && h4 == h4_alt && t4 == t4_alt && h5 == h5_alt && t5 == t5_alt && h6 == h6_alt && t6 == t6_alt && h7 == h7_alt && t7 == t7_alt && h8 == h8_alt && t8 == t8_alt && h9 == h9_alt && t9 == t9_alt  )
         {
          //ne fais rien
         }
       else
        {
         client.publish("home/Arduino_rez","en Ligne", true);
    
         dtostrf(h,6, 1, humidity);
         dtostrf(t,6, 1, temperature);
      
         dtostrf(h1,6, 1, char_h1);
         dtostrf(t1,6, 1, char_t1);

         dtostrf(h2,6, 1, char_h2);
         dtostrf(t2,6, 1, char_t2);

         dtostrf(h3,6, 1, char_h3);
         dtostrf(t3,6, 1, char_t3);

         dtostrf(h4,6, 1, char_h4);
         dtostrf(t4,6, 1, char_t4);

         dtostrf(h5,6, 1, char_h5);
         dtostrf(t5,6, 1, char_t5);

         dtostrf(h6,6, 1, char_h6);
         dtostrf(t6,6, 1, char_t6);

         dtostrf(h7,6, 1, char_h7);
         dtostrf(t7,6, 1, char_t7);

         dtostrf(h8,6, 1, char_h8);
         dtostrf(t8,6, 1, char_t8);

         dtostrf(h9,6, 1, char_h9);
         dtostrf(t9,6, 1, char_t9);
        client.publish("home/Arduino_rez/ch_heather/humidite",humidity, true);
         client.publish("home/Arduino_rez/ch_heather/Temperature",temperature, true);
Merci

Bonjour

Plusieurs phrases du message sont tronquées ,
Rééditer le message SVP

Si un programme dépasse les 9000 caractères il est possible de je joindre.

Bonjour,

En fichier attaché, le code complet.
J'ai également modifié mon message initial pour qu'il ne soit pas tronqué.

Merci

code.txt (12.4 KB)

Bonjour,
J'ai trouvé le problème mais pas la solution.
Pour que ca fonctionne, il faut que j'ajoute le mot de passe et le nom d'utilisateur de mon broker mqtt. Mais je n'y arrive pas. Quelqu'un saurait-il me donner la solution?
Merci

Bonsoir

Regardes l'exemple mqtt_auth de la librairie PubSub, il te montra comment faire, (les brokers MQTT sont souvent configurés avec accès contrôlé)

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.