Code json sur arduino

Bonjour,
J'utilise une carte Mega 2560 et une carte Ethernet Wiznet 5100 pour envoyer sur Domoticz les relevés de températures de mes sondes DS18B20.
Ca fonctionne pas de souci.
Ce que j'aimerai si cela était possible, c'est de raccourcir le code au niveau de l'envoi, car pour le moment (essai) je n'ai que 2 sondes, mais en réalité j'en ai 27.

  void sendToDomoticz(){
  // Création du lien qui sera envoyé à l'API.  
  String messageTExt = "/json.htm?type=command&param=udevice&idx=" + String(IDX_outsideTemp) + "&nvalue=0&svalue=" + String(Temp_outsideThermometer);
  String messageTInt = "/json.htm?type=command&param=udevice&idx=" + String(IDX_insideTemp) + "&nvalue=0&svalue=" + String(Temp_insideThermometer);
  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");    
        client.println();
        client.println("Connection: close");             // On ferme la connexion.     
        Serial.println("Connection: Fermée");
        client.stop();
       Serial.println("Message 1 envoyé à Domoticz");
   }   
    if (client.connect(host, port)) {    // On se connecte au serveur Domoticz
        client.println(String("GET ") + messageTInt + " HTTP/1.1");          
        client.println();
        client.println("Connection: close");             // On ferme la connexion. 
        delay(10);    
        Serial.println("Connection: Fermée");
        client.stop();
        Serial.println("Message 2 envoyé à Domoticz"); 
  }
  else
   {
    Serial.println("la connexion a échoué");
  }
    }

Voici la partie qui me chagrine comme vous voyez je fais une répétition donc avec 27 ???
J'ai essayé de mettre les 2 lignes GET à la suite mais là Domoticz n'est plus mis à jour.
Merci de votre aide

Bonjour,
Tu pourrais, par exemple, travailler avec des tableaux, un pour mettre le résultat des mesures, un autre pour stocker les index et faire une boucle qui lise un par un les éléments des tableaux, construise la requête et l'envoi.

Bonjour,
Mes connaissances en programmation sont limitées. Ce code provient de 2 codes qui étaient écrits pour des ESP donc WIFI (c'est la mode). Je suis équipé d'un Wiznet 5100 (filaire). Toutes mes sondes (27) arrivent sur mon Arduino Méga sur le bus One Wire ce qui me permet de gérer un panneau solaire. Je suis dessus depuis 3 semaines. Je stocke mes températures dans des variables. A mon niveau c'est plus de 200 lignes de codes qu'il faudrait.
Je suis incapable de faire ce que tu mentionnes.
Si tu peux me guider, ce serait avec plaisir.

à quoi doit ressembler l'URL GET si vous avez plusieurs capteurs à mettre à jour. est-ce supporté ?

sinon il faut effectivement envoyer n requêtes à la suite et dans ce cas ce serait mieux d'avoir les 27 données dans un tableau

peut-être un truc du genre:

const byte nombreDeCapteurs = 27;
struct {
  uint32_t deviceID;
  int temperature;
} lesCapteurs[nombreDeCapteurs]; // <=== à initialiser bien sûr

void sendToDomoticz() {
  // Création du lien qui sera envoyé à l'API.
  if (client.connect(host, port)) {    // On se connecte au serveur Domoticz
    for (int i = 0; i < nombreDeCapteurs; i++) {
      String requete = "/json.htm?type=command&param=udevice&idx=" + String(lesCapteurs[i].deviceID) + "&nvalue=0&svalue=" + String(lesCapteurs[i].valeur);
      Serial.print("Message à envoyer: "); Serial.println(requete);
      client.println(String("GET ") + requete + " HTTP/1.1");
      client.println();
      client.println("Connection: close");             // On ferme la connexion.
      delay(1);
    }
    Serial.println("Messages envoyés à Domoticz");
    client.stop();
  } else {
    Serial.println("la connexion a échoué");
  }
}

En effet, le titre n'est pas bon, car la on fait un envoie par capteur

Il y a un autre moyen c'est de faire un fichier json est de l'envoyer, dans se fichier, il y aura tous les capteurs....

[
	{
		Numero: "capteur1",
		value: "xxx"
	},
	{
		Numero: "capteur1",
		value: "xxx"
	},
	{
		Numero: "capteurX",
		value: "xxx"
	}
]

Il y a la librairie Json arduino qui existe

mais est-ce supporté par l'API de Domoticz ?

Voici la commande Json que Domoticz accepte

/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=TEMP

    IDX = id of your device (This number can be found in the devices tab in the column "IDX")
    TEMP = Temperature

Je pensait mettre une commande par sonde mais c'est impossible. Avec la deuxième

if (client.connect(host, port)) {    // On se connecte au serveur Domoticz    
        client.println(String("GET ") + messageTExt + " HTTP/1.1"); 
   client.println(String("GET ") + messageTInt + " HTTP/1.1");
        client.println();
        client.println("Connection: close");             // On ferme la connexion.     
        Serial.println("Connection: Fermée");
        client.stop();
       Serial.println("Message 1 envoyé à Domoticz");

à la suite ça bloque les températures ne sont plus actualisées. Le code lui fonctionne par erreur, dans le sérial j'ai bien message envoyé donc le if est bon..
Il doit manqué une commande intermédiaire.

Serial.println(requete);

il indique quoi?

tu as un bon tuto ici

J'ai déjà lu ce site, une partie du code vient de là.

https://projetsdiy.fr/mesure-temperature-dallas-ds18b20-code-arduino-compatible-esp8266-esp32-domoticz-http/)

Le souci c'est que tout est fait pour des ESP. La Bibliothèque HTTPClient de l'ESP n'est pas la même que celle d'Arduino HttpClient. Cela a été un de mes tracas.

en pratique ce n'est pas une commande avec un fichier JSON, c'est juste un GET avec des paramètres et on dirait qu'on ne peut passer qu'un ID et valeur.

Oui. La commande n'est prévue que pour une seule sonde. On multiplie les GET, il n'y a pas de limite dans Domoticz.
Ce que je ne comprend pas, c'est pourquoi je ne peux pas envoyer 2 GET différents une fois la connexion établie. Si je met les 2 GET à la file rien ne change dans Domoticz. Si j'intercale une ligne vide entre les 2, la première s'actualise la 2ème ne change pas.
Je pense qu'il y a une manière de faire, sans être obligé d'ouvrir et de fermer la connexion à chaque fois.