Une sonde DS18b20 lue 2 et plus non enfin presque

Le bus 1-Wire, connectique, et intégration dans Domoticz
Répondre
FRED66
Messages : 12
Enregistré le : 13 nov. 2021, 19:41

Une sonde DS18b20 lue 2 et plus non enfin presque

Message 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.

Keros
Messages : 2599
Enregistré le : 23 juil. 2019, 20:57

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

Message 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

Neutrino
Messages : 1900
Enregistré le : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)
Contact :

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

Message par Neutrino »

Et en passant par MQTT ?
C'est plus rapide et moins gourmand.
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?

FRED66
Messages : 12
Enregistré le : 13 nov. 2021, 19:41

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

Message 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.
Modifié en dernier par Keros le 18 déc. 2021, 17:46, modifié 1 fois.
Raison : Merci d'éditer le dernier message pour y rajouter l'information supplémentaire

Répondre