[RESOLU][NANO] Requete HTTP vers IPX800v4

Bonjour à tous,
Je galère depuis plusieurs jours sur un problème; j’ai trouvé bcp d’exemples sur le Net; j’ai testé beaucoup de possibilités; je sèche; j’ai besoin d’aide…

Je cherche à utiliser un Arduino Nano afin d’utiliser ses entrées numériques (détecteur mouvement, détecteur ouverture, etc…) et mettre à jour (requête HTTP simple) mes serveurs domotiques (un serveur avec Jeedom et une carte IPX800v4 (entrée virtuelle)). J’ai codé; les requêtes vers Jeedom fonctionnent; celles vers l’IPX ne fonctionnent pas.

Voici mon code, simplifié pour l’exemple:

#include <UIPEthernet.h>
byte mac[] = { 0x54, 0x34, 0x41, 0x30, 0x30, 0x31 };  
EthernetClient client;
void setup()
{
  Serial.begin(9600);
  Ethernet.begin(mac);
  Serial.println("Connecting...");
  if (client.connect("<MON_IP>", 80))
  {
      client.println("GET /api/xdevices.json?key=<MON_API>&SetVI=001");
      client.println("Host: <MON_IP>");
      client.println("Connection: close");
      client.println("");
      client.stop();
      Serial.println("Connection successfull");
  }
  else
  {
    Serial.println("Connection failed");
  }
}
void loop()
{
}

Note: La requete “http://<MON_IP>/api/xdevices.json?key=<MON_API>&SetVI=001”, depuis un navigateur, fonctionne parfaitement et retourne
{
“product”: “IPX800_V4”,
“status”: “Success”
}
Note: Je précise que “Ethernet.begin(mac)” fonctionne; mon Arduino a bien une adresse IP correcte.
Note: La console affiche “Connecting” et “Connection successfull” indiquant que le code est exécuté.

Merci par avance pour votre aide.

Tu parles à ton serveur, mais tu te barres sans attendre la réponse... ça n'a pas l'air de lui plaire...
Donc avant client.stop() il faut lire la réponse du serveur: regarde les différents exemples de client http fournis avec l'IDE.

Hello,
J’ai essayé plusieurs exemples avec lecture du flux retour sans succès, avant de m’apercevoir que la librairie qu’il me fallait utiliser était la lib “EtherCard.h” (vielle librairie) car mon interface Ethernet est à base du chipset “ENC28J60”. Donc, exit les lib “Ethernet.h”, “Ethernet2.h” (totalement inopérantes) ou “UIPEthernet.h” (DHCP fonctionne mais pas la gestion du flux retour).
A présent, ca fonctionne.
Voici un exemple pour aider les prochains qui se poseront cette question…
Note: Le script lit une entrée digitale (D2)(capteur d’ouverture avec aimant) et met à jour une entrée virtuelle (VI001) de l’IPX en fonction.

// ================================================
// DigitalInputEthernet_Nano - v2 - 2018/06/05
// ------------------------------------------------
// Programme qui lit les entree digitales de Nano
// et qui met à jour les serveurs domotiques
// (Jeedom & IPX) par requete HTTP.
// Note: Apres bcp de galeres, il s'avere que c'est
// cette librairie qui fonctionne avec ma carte...
// ================================================
#include <EtherCard.h>
// ================================================
// Definition d'une adresse MAC
// Le DHCP lui donnera une adresse bien déterminée
// ================================================
static byte mymac[] = { 0x54,0x34,0x41,0x30,0x30,0x31 }; //Exemple

int sensorVal=99;
int sensorVal_OLD=9;

byte Ethernet::buffer[700];
static uint32_t timer;
// ================================================
// Retour du serveur
// ================================================
// Note: On ne fait rien (tout est commenté donc) avec la réponse du serveur
static void my_callback (byte status, word off, word len) {
  //Ethernet::buffer[off+300] = 0;
  //Serial.println("Contenu HTML");
  //String tout = (const char*) Ethernet::buffer + off;
  //Serial.println(tout);
}
// ================================================
// Initialisation
// ================================================
void setup () {
  // Init du canal de sortie pour les outputs ecran
  Serial.begin(9600);
  //On prépare la carte
  Serial.println("\n[webClient]"); //A afficher sinon on a un bad request
  if (ether.begin(sizeof Ethernet::buffer, mymac,10) == 0) 
    Serial.println(F("Failed to access Ethernet controller"));
  if (!ether.dhcpSetup())
    Serial.println(F("DHCP failed"));
  ether.printIp("IP:  ", ether.myip);
  char websiteIP[] = "192.168.<MON_IP>";
  ether.parseIp(ether.hisip, websiteIP);
  ether.printIp("SRV: ", ether.hisip);
  
}

void loop () {
  ether.packetLoop(ether.packetReceive());
  sensorVal = digitalRead(2);
  Serial.println(sensorVal);
  if (sensorVal != sensorVal_OLD)
  {
    if (sensorVal == 1)
    {
      ether.browseUrl(PSTR("/api/xdevices.json?key=<MON_APIKEY>&SetVI=001"), "", "192.168.<MON_IP>", my_callback);
    }
    if (sensorVal == 0)
    {
      ether.browseUrl(PSTR("/api/xdevices.json?key=<MON_APIKEY>&ClearVI=001"), "", "192.168.<MON_IP>", my_callback);
    }   
  sensorVal_OLD=sensorVal;
  }
}