données incomplètes entre arduino et Domoticz

Bonjour à tous,

J’envoie des donnée à partir d’un arduino pro mini via une passerelle wifi dans Domoticz. J’ai deux sondes, une BME280 et une Dallas DS18B20.
J’ai trouvé deux bouts de code qui fonctionnent correctement quand ils sont utilisés seuls. Quand je veux jouer au docteur Frankenstein et assembler ces deux codes dans le moniteur série toutes les valeurs s’affichent mais dans Domoticz toutes les valeurs passent une première fois et ensuite il n’y a que les valeurs de la Dallas qui sont mises à jour. (Pour l’instant je ne me préoccupe que des valeurs des sondes, pas du niveau batterie)

Ce qui s’affiche dans Domoticz

 2019-02-22 08:49:51.597 Status: MySensors: Node: 3, Sketch Version: 1.6
2019-02-22 08:49:51.597 Status: MySensors: Node: 3, Sketch Name: DS18B20 Temperature Senso
2019-02-22 08:49:51.612 Status: MySensors: Node: 3, Sketch Version: 1.1
2019-02-22 08:49:54.659 Status: MySensors: Node: 3, Sketch Name: BME280 Sensor
2019-02-22 08:49:54.675 Status: MySensors: Node: 3, Sketch Version: 1.6
2019-02-22 08:49:54.675 Status: MySensors: Node: 3, Sketch Name: DS18B20 Temperature Senso
2019-02-22 08:49:54.691 Status: MySensors: Node: 3, Sketch Version: 1.1
2019-02-22 08:49:58.722 (Gateway ESP8266 MySensors v2) Temp + Humidity + Baro (TempHumBaro)
2019-02-22 08:49:58.738 (Gateway ESP8266 MySensors v2) Temp + Humidity + Baro (TempHumBaro)
2019-02-22 08:49:58.769 (Gateway ESP8266 MySensors v2) Temp + Humidity + Baro (TempHumBaro)
2019-02-22 08:49:59.754 (Gateway ESP8266 MySensors v2) General/Barometer (Baro)
2019-02-22 08:49:59.769 (Gateway ESP8266 MySensors v2) Temp (TempDALLAS)
2019-02-22 08:50:10.817 (Gateway ESP8266 MySensors v2) Temp (TempDALLAS)
2019-02-22 08:50:20.864 (Gateway ESP8266 MySensors v2) Temp (TempDALLAS)
2019-02-22 08:50:31.912 (Gateway ESP8266 MySensors v2) Temp (TempDALLAS)
2019-02-22 08:50:41.983 (Gateway ESP8266 MySensors v2) Temp (TempDALLAS)
2019-02-22 08:50:52.989 (Gateway ESP8266 MySensors v2) Temp (TempDALLAS)
2019-02-22 08:51:03.036 (Gateway ESP8266 MySensors v2) Temp (TempDALLAS)
2019-02-22 08:51:14.068 (Gateway ESP8266 MySensors v2) Temp (TempDALLAS)
2019-02-22 08:51:24.147 (Gateway ESP8266 MySensors v2) Temp (TempDALLAS)
2019-02-22 08:51:34.163 (Gateway ESP8266 MySensors v2) Temp (TempDALLAS)
2019-02-22 08:51:45.195 (Gateway ESP8266 MySensors v2) Temp (TempDALLAS)
2019-02-22 08:51:55.258 (Gateway ESP8266 MySensors v2) Temp (TempDALLAS)
2019-02-22 08:52:06.290 (Gateway ESP8266 MySensors v2) Temp (TempDALLAS)
2019-02-22 08:52:16.338 (Gateway ESP8266 MySensors v2) Temp (TempDALLAS)
2019-02-22 08:52:27.386 (Gateway ESP8266 MySensors v2) Temp (TempDALLAS)
2019-02-22 08:52:37.496 (Gateway ESP8266 MySensors v2) Temp (TempDALLAS)
2019-02-22 08:52:48.516 (Gateway ESP8266 MySensors v2) Temp (TempDALLAS)

Le .ino est en pièce jointe car trop long.

Merci.

dallas_bme.ino (16.6 KB)

Tiens il me semble reconnaître ce code :wink:

      send(tempMsg.set(temperature, 1));
// tu ne précises pas la source du message. Comme ceci
      send(tempMsg.setSensor(TEMP_CHILD).set(temperature, 1));

hbachetti:
Tiens il me semble reconnaître ce code :wink:

Et pour cause ! D'ailleurs je me garderai bien d'en revendiquer la paternité, ne comprenant pas le quart de la moitié de qui fait quoi dedans !

 send(tempMsg.set(temperature, 1));
// tu ne précises pas la source du message. Comme ceci
      send(tempMsg.setSensor(TEMP_CHILD).set(temperature, 1));

Mon erreur ne doit pas venir de là car les code de la BME et de la Dallas utilisés seuls fonctionnent correctement, les valeurs s'affichent bien en boucle pour les deux sondes dans le monitor série:

10:55:08.173 -> Temperature bme280= 21.69 C
10:55:08.173 -> Humidity bme280= 34.54 %
10:55:08.173 -> Pressure bme280= 970.40 hPa
10:55:08.173 -> Forecast = stable
10:55:08.173 -> Battery Voltage: 3.44 V
10:55:08.173 -> Battery percent: 102 %
10:55:08.173 -> 99895 MCO:SLP:MS=750,SMS=0,I1=255,M1=255,I2=255,M2=255
10:55:08.173 -> 99903 TSF:TDI:TSL
10:55:08.992 -> 99905 MCO:SLP:WUP=-1
10:55:08.992 -> 99907 TSF:TRI:TSB
10:55:09.096 -> 99975 !TSF:MSG:SEND,3-3-0-0,s=5,c=1,t=0,pt=7,l=5,sg=0,ft=5,st=NACK:19.6
10:55:09.096 -> Transmission temperature DALLAS OK: 19.60°C

Mais une seule fois au début pour la BME dans Domoticzet ensuite il n'y a que celles de la Dallas qui sont mises à jour.

Oui c'est vrai que le message est déclaré comme ceci :

MyMessage tempMsg(TEMP_CHILD, V_TEMP);

Il ne devrait pas y avoir d’ambiguïté.

Le problème est peut être ici :

    if (temperature != lastTemp)
    {
      send(tempMsg.set(temperature, 1));
      lastTemp = temperature;
    }

La partie DS18B20 :

  #if COMPARE_TEMP == 1
  if (lastTemperature != temperaturedallas && temperaturedallas != -127.00 && temperaturedallas != 85.00) {
  #else
  if (temperaturedallas != -127.00 && temperaturedallas != 85.00) {
  #endif
    // Send in the new temperature
    send(tempMsg.setSensor(CHILD_ID_TEMP).set(temperaturedallas, 1));
    // Save new temperatures for next compare
    lastTemperature = temperaturedallas;
    Serial.print("Transmission temperature DALLAS OK: ");
    Serial.print(temperaturedallas);
    Serial.println("°C");
  }

COMPARE_TEMP = 0 donc la température est envoyée systématiquement.

Soit tu passes COMPARE_TEMP à 1 pour que la température DS18B20 soit envoyée seulement si elle a changé.
Soit tu conditionnes ton test dans la partie BME280 :

    if (!COMPARE_TEMP || temperature != lastTemp)
    {
      send(tempMsg.set(temperature, 1));
      lastTemp = temperature;
    }

Comme ça tu auras juste à changer la valeur de COMPARE_TEMP par la suite si tu veux que les deux températures soient remontées seulement lors des changements.

Je pense que DOMOTICZ va associer l'humidité aux deux sondes de température, mais je me trompe peut-être. Tu me diras.

Si je suppose que les BME280 est à l'extérieur et la DS18B20 à l'intérieur je vise juste ?

hbachetti:
je suppose que les BME280 est à l’extérieur et la DS18B20 à l’intérieur je vise juste ?

A l’extérieur il devrait y avoir les deux, avec la Dallas étanche en dehors de la boite et la BME juste pour la pression et l’humidité.

J’ai essayé plein de choses avant de venir pleurer à nouveau, sans résultat, j’ai toujours le même problème,
les valeurs de la dallas ne passent qu’une fois au début et puis ensuite plus rien, ni dans Domoticz ni dans le moniteur.
J’ai enlevé la partie qui envoie les infos de la Dallas seulement si ses valeurs changent mais ça ne change rien, de toute façon cette partie fonctionne parfaitement quand le code est utilisé seul et quand je la réchauffe.
Bref quand j’utilise les deux codes séparément ça fonctionne parfaitement, dès que je mets les deux ensemble il n’y a que la bme qui passe, la Dallas ne passe qu’une fois.
Le .ino est en pièce jointe.
Merci

bme_seule_ok.ino (14.3 KB)