J'ai une application tournant sur un esp8266 qui envoie une requete http vers un serveur jeedom qui me répond avec les données attendues. Ca marche très bien lorsque le serveur est sur le réseau local.
Mais je voudrais que cela fonctionne aussi lorsque je suis ailleurs ssur un autre réseau local. Par le net donc.
J'accède sans difficulté à mon serveur jeedom à distance grâce à un dyndns.
Je me suis dit qu'il suffisait de remplacer l'adresse ip locale par l'adresse ip renvoyée par le 'adresse dyndns mais la requete http.GET() retourne -1 et pas de réponse de jeedom.
Si quelqu'un sait comment faire?
#include <ESP8266WebServer.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClientSecure.h>
const char *ssid = "freebox_xxxx";
const char *password = "xxxx";
//const char *host = "192.168.0.34"; // Remplacé par "82.124.5.xxx" adresse de la box chez moi
const char *host = "82.124.5.242";
const int port = 80;
const char* apiKey = "rrJYD7EXmepFPpyvO3yXcO2O4M1Cc7x7"; // API id jeedom
const int watchdog = 60000; //interval envoi requette HTTP vers jeedom
ESP8266WebServer server ( 80 );
HTTPClient http;
void setup() {
Serial.begin(115200);
delay(200);
Serial.println("\nTentative de connexion au réseau local");
WiFi.begin(ssid, password);// Connexion au réseau local en wifi
Serial.print("Connecting");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected");
Serial.print("Local IP address: "); Serial.println(WiFi.localIP());
server.on("/datas", update);
server.begin();
server.handleClient();
initPendule();
}
//======================================
// Formation et demande d'envoi de la requête au serveur jeedom
//======================================
void initPendule()
{
String baseurl = "/core/api/jeeApi.php?apikey=";
baseurl += apiKey;
baseurl += "&type=cmd&id=1105"; // Id de la cmd
String url = baseurl;
//Serial.print("Base url:");Serial.println (baseurl);
sendToJeedom(url);
}
void loop()
{
}
//===========================================
// Envoi de la requête http au serveur jeedom pour récupérer les données
//===========================================
WiFiClient client;
bool sendToJeedom(String url)
{
http.begin(client,host,port,url);
int httpCode= http.GET();
Serial.printf("\nRéponse:%d\n",httpCode);
http.end();
return true;
}
/******************************************************************************************
* RECEPTION TRAME PAR LE SERVEUR
******************************************************************************************/
void update()
{
char *s1, *unit;
const char *s2;
Serial.printf("Arrivée:%s données\n",server.args());
delay(10);
}