Page 1 sur 1

Une sonde DS18b20 lue 2 et plus non enfin presque

Publié : 17 déc. 2021, 15:56
par FRED66
Bonjour,

J'utilise un Arduino Mega 2560 un Ethernet Wiznet 5100 et 27 sondes. Domoticz est sur mon ordi Windows 10.
Mon programme sur Arduino tourne parfaitement, j'affiche mes sondes sur un LCD et gère par ce biais d'autres fonctions.
J'envoie mes valeurs de sondes sur Domoticz tout va bien. (plus ergo et pour avoir les tableaux de courbes)
J'utilise la commande Json de Domoticz

Code : Tout sélectionner

// Création du lien qui sera envoyé à l'API.  
  String messageTExt = "/json.htm?type=command&param=udevice&idx=" + String(IDX_T_ext) + "&nvalue=0&svalue=" + String(Temp_Ext);
Mais qu'est ce qu'il veut alors ? J'y arrive.
Le problème est celui là. Je suis obligé de répété 27 fois ce code

Code : Tout sélectionner

// Envoi de la requete à Domoticz.
    if (client.connect(host, port)) {                                                 // On se connecte au serveur Domoticz          
          client.println(String("GET ") + messageTExt + " HTTP/1.1"); delay(1);          
          client.println(); client.println("Connection: close"); client.stop();            // On ferme la connexion.        
          Serial.println(" Text envoyé à Domoticz"); Serial.println("Connection: Fermée");
car si je met 2 sondes ou + dans le même "if", là il n'y a plus de mise à jour des températures dans Domoticz.
J'aimerai réduire mon code et n'avoir qu'un seul if(client.connect...
Certe, c'est de l'électronique et tant qu'il y a de la capacité mémoire, mais rien que de penser j'ouvre et je ferme la connexion 27 fois toutes les 10 secondes, je suis fatigué.
J'ai essayé plein de variantes mais rien n'y fait. Si vous avez des idées, simples. Je suis pas un génie. je suis une version 6.0.
Merci de votre aide.

Re: Une sonde DS18b20 lue 2 et plus non enfin presque

Publié : 17 déc. 2021, 17:55
par Keros
Mets nous ton script complet, nous pourrons analyser et te proposer quelque chose. Ne duplique que pour traiter 3 sondes, on comprendra.

PS : essaye de mettre de titre de sujet explicite. Je ne comprends rien en lisant Une sonde DS18b20 lue 2 et plus non enfin presque

Re: Une sonde DS18b20 lue 2 et plus non enfin presque

Publié : 17 déc. 2021, 18:10
par Neutrino
Et en passant par MQTT ?
C'est plus rapide et moins gourmand.

Re: Une sonde DS18b20 lue 2 et plus non OU Comment envoyer plusieurs températures de DS18B20 en une seule fois

Publié : 18 déc. 2021, 12:56
par FRED66

Code : Tout sélectionner

void Cxion_ethernet() {
  delay(10);
  Serial.println();
  Serial.print("Connexion au réseau : ");
  Ethernet.begin(mac, ip); 
  Serial.println("");
  Serial.println("Ethernet connexion OK ");
  Serial.print("=> Addresse IP : ");
  Serial.print(Ethernet.localIP());
}
Voilà le code que j'aimerai envoyer à minima
void sendToDomoticz(){
  // Création du lien qui sera envoyé à l'API.  
  String messageTExt = "/json.htm?type=command&param=udevice&idx=" + String(IDX_T_ext) + "&nvalue=0&svalue=" + String(Temp_Ext);
  String messageTInt = "/json.htm?type=command&param=udevice&idx=" + String(IDX_T_int) + "&nvalue=0&svalue=" + String(Temp_Int);
  Serial.print("Message à envoyer TExt : "); Serial.println(messageTExt);
  Serial.print("Message à envoyer TInt : "); Serial.println(messageTInt);
  // Envoi de la requete à Domoticz.
    if (client.connect(host, port)) {                                                 // On se connecte au serveur Domoticz          
          client.println(String("GET ") + messageTExt + " HTTP/1.1"); delay(1);
          client.println(String("GET ") + messageTInt + " HTTP/1.1"); delay(1);          
          client.println(); client.println("Connection: close"); client.stop();            // On ferme la connexion.        
          Serial.println(" Text envoyé à Domoticz"); Serial.println(" Tint envoyé à Domoticz"); Serial.println("Connection: Fermée");
        }
Je ne comprends pas pourquoi il faut ouvrir et fermer une connexion à chaque fois alors que l'IDX est unique et la sonde aussi.
Dans Arduino ça fonctionne. Sur le sérial, j'ai bien les 3 dernières instructions.
Le reste du programme est identique aux programmes des DS18B20.

MQTT, j'ai lu des trucs. Mais là, comment coder ? Je sais pas.