Transfert météo vers WeatherCloud

Bonjour à tous,

voici le code:

#define WeatherCloudServer "188.164.196.110" 
#define WeatherCloudID "xxxxxxxxxx"  
#define WeatherCloudKey "xxxxxxxxxx"

  if (wifiWethCloud.connect(WeatherCloudServer, 80)) {
    Serial.println("La connexion à WeatherCloud a été acceptée.");
    wifiWethCloud.print  ("GET /v01/set");
    wifiWethCloud.print  ("/wid/"); 		    wifiWethCloud.print(WeatherCloudID);
    wifiWethCloud.print  ("/key/"); 		    wifiWethCloud.print(WeatherCloudKey);
    wifiWethCloud.print  ("/softwareid/");	wifiWethCloud.print  ("v1PAmerciApg68390");
    wifiWethCloud.print  ("/temp/"); 		    wifiWethCloud.print(contenu[0]);	  // température extérieure
    wifiWethCloud.print  ("/hum/"); 		    wifiWethCloud.print(contenu[1]);		// humidité relative
    wifiWethCloud.print  ("/bar/"); 		    wifiWethCloud.print(contenu[2].toInt() * 10);		// pression atmosphérique
//    wifiWethCloud.print  ("/dew/"); 		    wifiWethCloud.print(dew);				  // point de rosée
//    wifiWethCloud.print  ("/heat/"); 		    wifiWethCloud.print(heat);
    
//    wifiWethCloud.print  ("/battery/"); 	  wifiWethCloud.print(Voltage * 10);
//    wifiWethCloud.print  ("/rain/"); 		  wifiWethCloud.print(pluieJour * 10); 		// quantite de pluie dans une journee
//    wifiWethCloud.print  ("/rainrate/");	  wifiWethCloud.print(pluieHeure * 10); 	// quantite de pluie dans une heure
//    wifiWethCloud.print  ("/chill/"); 	    wifiWethCloud.print(windChill * 10);		// refroidissement éolien
//    wifiWethCloud.print  ("/wspd/"); 		  wifiWethCloud.print(mParSec(vitesseVent) * 10);		// vitesse du vent en km/h
//    wifiWethCloud.print  ("/wdir/"); 		  wifiWethCloud.print(angw);						// direction du vent
//    wifiWethCloud.print  ("/wspdhi/"); 	  wifiWethCloud.print(mParSec(vitesseRafale) * 10);	//force des rafales - pointes de vent
    //wifiWethCloud.print("/uvi/"); 		      wifiWethCloud.print(Uvi * 10);        			// index uv x10 [0,160] 8.0->80 			//indice UV
    //wifiWethCloud.print("/solarrad/");	    wifiWethCloud.print(Uvj * 10);  					// watts/m2 x10 [0,20000] 1050.0->10500		// wattage du soleil
    wifiWethCloud.println("/ HTTP/1.1");
    wifiWethCloud.print  ("Host: ");
    wifiWethCloud.println(WeatherCloudServer);
    wifiWethCloud.println("Connection: close");
    wifiWethCloud.println();
    Serial.print  ("Température envoyée: "); 	Serial.println(contenu[0]);	// température extérieure
    Serial.print  ("Humidité envoyée : "); 		Serial.println(contenu[1]);	// humidité relative
    Serial.print  ("Pression barométrique : "); 	Serial.println(contenu[2]);	// pression atmosphérique
    Serial.println("Données envoyées vers Weathercloud avec succès.\n");
    wifiWethCloud.stop();
  } else {
    Serial.println("Erreur de connection à Weathercloud");
  }

En terminal, je reçois confirmation de transmission ("Données envoyées vers Weathercloud avec succès.\n");
Mais, de toute évidence, mes données ne sont pas reçues par le serveur car aucune mise à jour n'a été publiée en 36 heures de transfert aux 60 secondes !

Dans le code de pg68390, je vois des multiplication par 10 des température et pression.
Est-ce qu'une pression trop basse ( 100hPa ou lieu de 100kPa - 1000 hPa ) pourrait disqualifier tout le transfert ?

Voici le retour en terminal:

12:11:10.368 -> La connexion à WeatherCloud a été acceptée.
12:11:10.433 -> Température envoyée: -2.69
12:11:10.433 -> Humidité envoyée : 72.31
12:11:10.433 -> Pression barométrique : 101.24
12:11:10.433 -> Données envoyées vers Weathercloud avec succès.

Ce me semble donc bon.
Pour lier mon appareil, il me fallut fournir un site web. L'appareil est lié mais le transfert de données ne fonctionne toujours pas.

J'ai inscrit marque et modèles comme « autres » puisque c'est ma ESP32cam qui transmet grâce via code ci-haut.
oui, j'ai bien copié et collé les ID et clef reçus de WeatherCloud dans mon code arduino.

Dans ce genre de cas, il est intéressant d'afficher l'URL que tu utilise sur le moniteur série, afin d'essayer cette URL à la main ou de vérifier celle-ci a ce que tu ferais dans un navigateur WEB.

Sinon dans cet documentation, il est indiqué que tu ne dois pas envoyer de nombre à virgule flottante ou des réels, mais des entiers, avec le dernier chiffre représentant le chiffre à après la virgule, c'est a dire que 72.31 doit être arrondis à 72.3 puis convertit en entier 723

Oh que c'est pertinent ça!
Mais où donc avez-vous trouvé cette documentation ? !!!!
J'en prends bonne note et corrigerai mes valeurs conformément à ce que vous écrivez ci-haut et ce que je trouverai dans la doc. C'est clair que mes chiffres ont besoin de retouche, car ils ont presque tous des virgules et des valeurs qui suivent ces virgules.

Merci à tous,
ça progresse très bien.
J'ai réussi un transfert de données en inscrivant l'adresse et ses données directement dans la barre d'un fureteur web (HTTP, port 80). Il ne me reste donc qu'à reconstruire cela dans mon programme Arduino.

L'adresse est la suivante:

http://api.weathercloud.net/v01/set?wid=monIDdappareil&key=maCLEFappareil&temp=-68&hum=687&bar=10022

qui envoit les données suivantes:
température = -6,8 ºC
humidité 68,7%
pression : 102,2 kPA

interprétées correctement car reçues multipliées par 10 selon la règle interne et en ºC, %, et hPA
soit
tem=-68
hum=687
bar=10220

Rien n'y fait, même si un envoi direct via FireFox fonctionne, la fonction arduino - elle - refuse de mettre l'info à jour.
Voici le code

  if (wifiWethCloud.connect(WeatherCloudServer, 80)) {
    wifiWethCloud.print("GET /v01/set");
    wifiWethCloud.print("/wid/"); wifiWethCloud.print(WeatherCloudID);
    wifiWethCloud.print("/key/"); wifiWethCloud.print(WeatherCloudKey);
    wifiWethCloud.print("/softwareid/"); wifiWethCloud.print("v1PAmerciApg68390");
    wifiWethCloud.print("/temp/"); wifiWethCloud.print(valWeatherCloud[0]);
    wifiWethCloud.print("/hum/"); wifiWethCloud.print(valWeatherCloud[1]);
    wifiWethCloud.print("/bar/"); wifiWethCloud.print(valWeatherCloud[2]);
//    wifiWethCloud.print("/dew/"); wifiWethCloud.print(dew);
//    wifiWethCloud.print("/heat/"); wifiWethCloud.print(heat);
    
//    wifiWethCloud.print("/battery/"); wifiWethCloud.print(Voltage * 10);
//    wifiWethCloud.print("/rain/"); wifiWethCloud.print(pluieJour * 10); // quantite de pluie dans une journee
//    wifiWethCloud.print("/rainrate/"); wifiWethCloud.print(pluieHeure * 10); // quantite de pluie dans une heure
//    wifiWethCloud.print("/chill/"); wifiWethCloud.print(windChill * 10);
//    wifiWethCloud.print("/wspd/"); wifiWethCloud.print(metersPerSecond(vitesseVent) * 10);
//    wifiWethCloud.print("/wdir/"); wifiWethCloud.print(angw);
//    wifiWethCloud.print("/wspdhi/"); wifiWethCloud.print(metersPerSecond(vitesseRafale) * 10);
//    //wifiWethCloud.print("/uvi/"); wifiWethCloud.print(Uvi * 10);        // index uv x10 [0,160] 8.0->80
//    //wifiWethCloud.print("/solarrad/"); wifiWethCloud.print(Uvj * 10);  // watts/m2 x10 [0,20000] 1050.0->10500
    wifiWethCloud.println("/ HTTP/1.1");
    wifiWethCloud.println("Host: 188.164.196.110");
    wifiWethCloud.println("Connection: close");
    wifiWethCloud.println();

    while (wifiWethCloud.connected() || wifiWethCloud.available()) {
      if (wifiWethCloud.available()) {
        char line[128]; // Buffer pour lire la réponse
        wifiWethCloud.readBytesUntil('\n', line, sizeof(line));
        Serial.println(line);
      }
    }
    Serial.println("Données envoyées vers Weathercloud avec succès.\n");
    wifiWethCloud.stop();
    Serial.print  ("Température envoyée: "); 	  Serial.println(valWeatherCloud[0]);	// température extérieure
    Serial.print  ("Humidité envoyée : "); 		  Serial.println(valWeatherCloud[1]);	// humidité relative
    Serial.print  ("Pression barométrique : "); Serial.println(valWeatherCloud[2]);	// pression atmosphérique
  } else {
    Serial.println("Erreur de connection à Weathercloud");
  }

Les valeurs retournées par la fonction de vérification comptent un beau «200» reçu du serveur comme si les valeurs avaient été enregistrées.

En fait, en plus de 3 heures de différents tests, une seule valeur a été engrangée par le serveur, avec le code ci-haut. Depuis: rien.

Bien sûr, si vous tentez de vérifier ma page sur WeatherCloud vous serez tenté de dire que ça fonctionne, mais c'est un trucage perso.

  1. J'envoie mes données vers mon serveur (celui qui affichait précédemment et encore le fait-il la page Météo actuelle
  2. Une tâche « CRON » fait passer les données de la page Météo actuelle à WeatherCloud.

Étant en réduction de mes activités web, je veux abandonner la page « météo actuelle » à la faveur de WeatherCloud. J'aimerais donc voir mon problème résolu.

Merci à vous.

Malheureusement pas sur le site WeatherCloud

L'URL que tu construit n'est pas la même que celle que tu as testé, c'est normal ?
ce que tu construit:
/v01/set/wid/monIDdappareil/key/maCLEFappareil/softwareid/v1PAmerciApg68390/temp/68/hum/687/bar/10022

contre:
/v01/set?wid=monIDdappareil&key=maCLEFappareil&temp=-68&hum=687&bar=10022

J'ai essayé les deux versions. Rien n'y fait.
Je reprends, car j'ai dû laisser une faute de frappe quelque part.

Comme je te l'avais indiqué si tu peux afficher ton URL sur le moniteur série, cela te simplifierais la vie.
Sinon met ton code corrigé.

Ce code semble enfin être le bon.

Le voici tiré de mon IDE

  if (wifiWethCloud.connect(WeatherCloudServer, 80)) {
    wifiWethCloud.print("GET /v01/set");
    wifiWethCloud.print("?wid="); wifiWethCloud.print(WeatherCloudID);
    wifiWethCloud.print("&key="); wifiWethCloud.print(WeatherCloudKey);
//    wifiWethCloud.print("&date="); wifiWethCloud.print(201241018);
//    wifiWethCloud.print("&time="); wifiWethCloud.print(2245);
    wifiWethCloud.print("&software="); wifiWethCloud.print("Arduino_RaspPicoW_v1.0");
    wifiWethCloud.print("&softwareid="); wifiWethCloud.print("v1PAmerciApg68390");
    wifiWethCloud.print("&temp="); wifiWethCloud.print(valWeatherCloud[0]);
    wifiWethCloud.print("&hum="); wifiWethCloud.print(valWeatherCloud[1]);
    wifiWethCloud.print("&bar="); wifiWethCloud.print(valWeatherCloud[2]);
//    wifiWethCloud.print("&dew="); wifiWethCloud.print(dew);
//    wifiWethCloud.print(&/heat="); wifiWethCloud.print(heat);
    
    wifiWethCloud.print("&battery=49"); 
//    wifiWethCloud.print("&rain="); wifiWethCloud.print(pluieJour * 10); // quantite de pluie dans une journee
//    wifiWethCloud.print("&rainrate="); wifiWethCloud.print(pluieHeure * 10); // quantite de pluie dans une heure
//    wifiWethCloud.print("&chill="); wifiWethCloud.print(windChill * 10);
//    wifiWethCloud.print("&wspd="); wifiWethCloud.print(metersPerSecond(vitesseVent) * 10);
//    wifiWethCloud.print("&wdir="); wifiWethCloud.print(angw);
//    wifiWethCloud.print("&wspdhi="); wifiWethCloud.print(metersPerSecond(vitesseRafale) * 10);
//    //wifiWethCloud.print("&uvi="); wifiWethCloud.print(Uvi * 10);        // index uv x10 [0,160] 8.0->80
//    //wifiWethCloud.print("&solarrad="); wifiWethCloud.print(Uvj * 10);  // watts/m2 x10 [0,20000] 1050.0->10500
    wifiWethCloud.println("/ HTTP/1.1");
    wifiWethCloud.println("Host: 188.164.196.110");
    wifiWethCloud.println("Connection: close");
    wifiWethCloud.println();

    while (wifiWethCloud.connected() || wifiWethCloud.available()) {
      if (wifiWethCloud.available()) {
        char line[128]; // Buffer pour lire la réponse
        wifiWethCloud.readBytesUntil('\n', line, sizeof(line));
        Serial.println(line);
      }
    }
    Serial.println("Données envoyées vers Weathercloud avec succès.\n");
    wifiWethCloud.stop();
    Serial.print  ("Température envoyée: "); 	  Serial.println(valWeatherCloud[0]);	// température extérieure
    Serial.print  ("Humidité envoyée : "); 		  Serial.println(valWeatherCloud[1]);	// humidité relative
    Serial.print  ("Pression barométrique : "); Serial.println(valWeatherCloud[2]);	// pression atmosphérique
  } else {
    Serial.println("Erreur de connection à Weathercloud");
  }

Bonjour à tous,

depuis le 19 décembre, WeatherCloud a changé son code.
Depuis le 19 décembre, mon code n'arrive plus à pousser mes données.

Quelles adaptations avez-vous dû faire pour que votre système fonctionne ?

Avant le 19 décembre 2024, le code ci-haut fonctionnait très bien.

J'ai trouvé:
ce qui a changé, c'est l'adresse du serveur.

Ce qui était utilisé antérieurement:

//#define WeatherCloudServer "188.164.196.110"

Ce qui doit être utilisé dosormais

#define WeatherCloudServer "api.weathercloud.net"

Ce qui donne donc:

Avant setup()

#define WeatherCloudServer "api.weathercloud.net"
#define WeatherCloudID "votre_ID"
#define WeatherCloudKey "votre_clef"

Dans loop()

  if (wifiWethCloud.connect(WeatherCloudServer, 80)) {
    wifiWethCloud.print("GET /v01/set");
    wifiWethCloud.print("?wid="); wifiWethCloud.print(WeatherCloudID);
    wifiWethCloud.print("&key="); wifiWethCloud.print(WeatherCloudKey);
//    wifiWethCloud.print("&date="); wifiWethCloud.print(201241018);
//    wifiWethCloud.print("&time="); wifiWethCloud.print(2245);
    wifiWethCloud.print("&software="); wifiWethCloud.print("LeNomDeVotreChoix");
    wifiWethCloud.print("&softwareid="); wifiWethCloud.print("votreVersion");
    wifiWethCloud.print("&temp="); wifiWethCloud.print(variableTemperatureExterieure);
    wifiWethCloud.print("&tempin="); wifiWethCloud.print(variableTemperatureInterieure);
    wifiWethCloud.print("&hum="); wifiWethCloud.print(variableHumiditeRelative);
    wifiWethCloud.print("&bar="); wifiWethCloud.print(varabilePressionAtmospherique);
    wifiWethCloud.print("&dew="); wifiWethCloud.print(variablePointDeRosee); 
//    wifiWethCloud.print(&/heat="); wifiWethCloud.print(variableChaleurRessentie);     
//    wifiWethCloud.print("&rain="); wifiWethCloud.print(variablPluieCeJour);
//    wifiWethCloud.print("&rainrate="); wifiWethCloud.print(variablePluieParHeure);
//    wifiWethCloud.print("&chill="); wifiWethCloud.print(varialbeRefroidissementEolien_ouHumidex);  
//    wifiWethCloud.print("&wspd="); wifiWethCloud.print(vitesseVentEnMetreParSeconde));
//    wifiWethCloud.print("&wdir="); wifiWethCloud.print(angleDuVent);
//    wifiWethCloud.print("&wspdhi="); wifiWethCloud.print(vitesseRafale);
//    //wifiWethCloud.print("&uvi="); wifiWethCloud.print(indiceUV);
//    //wifiWethCloud.print("&solarrad="); wifiWethCloud.print(RayonnementSolaire);
    wifiWethCloud.print("&battery=49"); 
    wifiWethCloud.println("/ HTTP/1.1");
    wifiWethCloud.print  ("Host: ");
    wifiWethCloud.println(WeatherCloudServer);
    wifiWethCloud.println("Connection: close");
    wifiWethCloud.println();