Bonjour,
J'ai construit ma station météo à base de Wemos D1 mini, et je transmets les données sur les sites Wunderground et Weathercloud sans problème.
Maintenant je voudrais faire l'envoi vers le site Awekas.at mais je n'y arrive pas, en cherchant sur internet certains tutos disaient de s'inspirer de l'envoi vers Wunderground , ce que j'ai fait mais cela ne fonctionne pas.
voici le code de la fonction :
Ce n'est pas très sérieux comme réponse.
Je suppose qu'Awekas doit avoir publié une doc de leur API pour indiquer aux utilisateurs comment transférer leurs données.
Oui j'ai trouvé ceci concernant l'api d'awekas : api awekas
mais d'après ce que j'ai compris, c'est plutôt fait pour récupérer des données que d'en envoyer, mais je comprends pas tout
et pour l'aide sur leur site, j'ai rien trouvé d'intéressant car c'est plutôt prévu pour des stations météo du commerce avec déjà dans le software ce qu'il faut pour les envois...
Je dois préciser que j'avais déjà réussi à envoyer mes données en 08/2024, mais suite à
un petit problème d'ordi j'ai perdu certains de mes sketchs, et notamment celui ou j'avais intégré l'envoi vers ce site awekas ! ma station sur awekas
Ils me proposent de donner une URL qui va permettre à leur site d'interroger ma station pour obtenir des données. Je suppose que le format attendu doit être particulier.
➜ Si mon interprétation est correcte, ce n'est pas votre station qui envoie ("push") les données directement dans leur API mais leur site qui vient récupérer ("pull") les données de temps en temps.
@J-M-L votre interprétation est la bonne.
Moi je dois faire l'envoi comme si j'avais une station du commerce et simuler l'envoi comme je l'avais déjà fait au mois d'Aout en m'inspirant du protocole wunderground comme décrit ici en post #4 : https://www.awekas.at/for2/index.php?thread/18586-froggit-wh3000/
j'essaye de reproduire ce que j'avais fait mais les données n'arrivent pas !
@J-M-L merci pour cette excellente idée, après plusieurs essais et petites modifications dans le libellé de la requête, les données sont bien arrivées !
J'ai utilisé cette synthaxe pour y parvenir sans HTTP et sans le -d :
philippe@InWinZorinOs:~$ curl -X POST "ws.awekas.at/weatherstation/updateweatherstation.php?""ID=xxxxxx&password=xxxxxx&tempf=77&humidity=60"
OKphilippe@InWinZorinOs:~$
OK donc la transmission s'effectue correctement et est prise en compte côté serveur.
il ne reste plus qu'à rendre dynamique la partie statique &tempf=77&humidity=60
un truc du genre (tapé aussi ici donc attention aux bugs) pour émettre toutes les 15 minutes (intervalEnvoi)
Il y a deux fonctions "bidons" (lireTemperatureF et lireHumidite) qui génèrent une valeur aléatoire. Il faudra bien sûr mettre à la place la lecture des capteurs.
L'URL est bâtie dynamiquement avec les client.print("&xxx="); client.print(xxx); pour ajouter les champs souhaités qui correspondent à la spec du protocole Wunderground.
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
const char* ssid = "votre_SSID";
const char* passwordWifi = "votre_MDP";
const char* host = "ws.awekas.at";
const char* idStation = "votre_ID"; // ID de la station météo
const char* mdpStation = "votre_mdp"; // Mot de passe de la station météo
const unsigned long intervalEnvoi = 1000ul * 60ul * 15ul; // Intervalle de 15 minutes en millisecondes
unsigned long dernierEnvoi = 0;
float lireTemperatureF() {
float tempC = random(-40, 46); // Génère une température en °C entre -40 et 45
return tempC * 9.0 / 5.0 + 32.0; // Convertir en °F
}
int lireHumidite() {
return random(0, 101); // Génère un pourcentage d'humidité entre 0 et 100
}
void envoyer() {
WiFiClient client;
float temperatureF = lireTemperatureF(); // Lire la température
int humidite = lireHumidite(); // Lire l'humidité
if (client.connect(host, 80)) {
client.print("POST /weatherstation/updateweatherstation.php?ID=");
client.print(idStation);
client.print("&password="); client.print(mdpStation);
client.print("&tempf="); client.print(temperatureF, 2); // Affichage de la température avec deux décimales
client.print("&humidity="); client.print(humidite);
client.print(" HTTP/1.1\r\n");
client.print("Host: "); client.print(host);
client.print("\r\n");
client.print("Connection: close\r\n\r\n");
Serial.println("Données envoyées !");
while (client.connected() || client.available()) {
if (client.available()) {
char line[128]; // Buffer pour lire la réponse
client.readBytesUntil('\n', line, sizeof(line));
Serial.println(line);
}
}
} else {
Serial.println("Échec de la connexion");
}
}
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, passwordWifi);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connexion au WiFi...");
}
Serial.println("Connecté au WiFi");
}
void loop() {
unsigned long maintenant = millis();
if (maintenant - dernierEnvoi >= intervalEnvoi) {
envoyer();
dernierEnvoi = maintenant;
}
}
@J-M-L aucun bug dans votre sketch
je le laisse tourner ce soir, j'ai mis des envois toutes les 5 minutes pour tester,
demain j'essayerai de rajouter d'autres valeurs comme celles du vent par exemple,
merci déjà pour votre aide .
En lisant votre sujet, je me suis trouvé encouragé à m'inscrire sur WeatherCloud. Où y avez-vous trouvé les instructions de transfert de données ?
Puis-je me fier à ce que vous présentez ci-haut pour AweKasServer ?
Merci.
@Patriboom Tant mieux si mon sujet vous a encouragé à vous inscrire sur Weathercloud, voici la fonction que j'appelle pour l'envoi des données sur ce site .
void sentDataToWeatherCloud() {
if (wifiClient.connect(WeatherCloudServer, 80)) {
wifiClient.print("GET /v01/set");
wifiClient.print("/wid/"); wifiClient.print(WeatherCloudID);
wifiClient.print("/key/"); wifiClient.print(WeatherCloudKey);
wifiClient.print("/softwareid/"); wifiClient.print("d50a5c965d45");
wifiClient.print("/temp/"); wifiClient.print(temperature * 10);
wifiClient.print("/hum/"); wifiClient.print(humidity);
wifiClient.print("/bar/"); wifiClient.print(pressure * 10);
wifiClient.print("/dew/"); wifiClient.print(dew);
wifiClient.print("/heat/"); wifiClient.print(heat);
wifiClient.print("/battery/"); wifiClient.print(Voltage * 10);
wifiClient.print("/rain/"); wifiClient.print(pluieJour * 10); // quantite de pluie dans une journee
wifiClient.print("/rainrate/"); wifiClient.print(pluieHeure * 10); // quantite de pluie dans une heure
wifiClient.print("/chill/"); wifiClient.print(windChill * 10);
wifiClient.print("/wspd/"); wifiClient.print(metersPerSecond(vitesseVent) * 10);
wifiClient.print("/wdir/"); wifiClient.print(angw);
wifiClient.print("/wspdhi/"); wifiClient.print(metersPerSecond(vitesseRafale) * 10);
//wifiClient.print("/uvi/"); wifiClient.print(Uvi * 10); // index uv x10 [0,160] 8.0->80
//wifiClient.print("/solarrad/"); wifiClient.print(Uvj * 10); // watts/m2 x10 [0,20000] 1050.0->10500
wifiClient.println("/ HTTP/1.1");
wifiClient.println("Host: 188.164.196.110");
wifiClient.println("Connection: close");
wifiClient.println();
Serial.println("Donnees envoyees vers Weathercloud avec succes.\n");
wifiClient.stop();
//delay(100);
}
else {
Serial.println("Erreur connection à Weathercloud");
}
digitalWrite(LED_BUILTIN, HIGH); // Turn the LED off
}
float metersPerSecond(float kilometersPerHour) {
return round((kilometersPerHour * 1000 / 3600) * 10) / 10; // arrondi a 1 decimale
}
Une autre question ...
Y a-t-il possibilité d'envoyer une photo en même temps que les données ?
Si vous ignorez la réponse, sauriez-vous où je pourrai trouver cette réponse ?