Une sonde DS18b20 lue 2 et plus non enfin presque

Forum dédié au bus 1-Wire : connectique, intégration
FRED66
Messages : 14
Inscription : 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 : 6638
Inscription : 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
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

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 : 14
Inscription : 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.
Dernière modification 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