Aller au contenu
JetRex92

Reponse À Une Requete Http

Recommended Posts

Bonjour à  tous

 

petit pb de réponse requête HTTP.

 

Voilà  je communique avec un dispositif sur mon réseau local avec des requêtes HTTP  permettant de lui envoyer des demandes pour action mais aussi pour récupérer des infos.

 

A partir d'un navigateur tout fonctionne correctement.

Au niveau HC2, les requêtes (dans un module virtuel), permettant au dispositif de déclencher des actions, fonctionnent très bien.

par contre je ne sais pas comment récupérer les infos en envoyant une requête de demande d'info au dispositif.

 

Le dispositif en question est expérimental (Arduino nano + shield internet) et  n'a pas d'Api. c'est mon programme qui gère les demandes client du serveur du Nano.

Dans le navigateur je récupère bien l'état des pins du Nano pas dans le HC2 !!

la requête demande info est :

 

           Nano = Net.FHttp("xxx.xxx.xxx.xxx");
           local result, status, errorCode = Nano:GET("/?getinfopin=1")

 

je pensais récupérer l'info dans  result mais rien. J'ai du passer à  côté de quelque chose ......

 

le serveur Nano Arduino envoie :

 

            client.println("<html><title>NanoPin</title><body><h3>Etat pins</h3></body>");
            client.print("<tr><td>"); client.print(etatpin); client.print("</td></tr>");

 

J'ai fait des recherches un peu partout mais je ne vois pas la solution

Si quelqu'un a une idée

Merci d'avance

 

Pour info, je suis en V4.042 sur la HC2 depuis sa sortie et pas de problème pour l'instant

Partager ce message


Lien à poster
Partager sur d’autres sites

je n'y connais rien, mais j'essayerais peut-être ceci :

local result, status, errorCode = Nano:GET("/getinfopin=1")

donc sans le ?

Partager ce message


Lien à poster
Partager sur d’autres sites

hello, 5 ans !!!!

j'ai un anémomètre (pulse) sur arduino, j'envoie la vitesseVent sur une page html, j'ai la valeur, par exemple, 22.5 qui s'affiche.

sur la HC2, dans un VD comment la récupérer et l'afficher dans un label

 

le code ci dessous ne fonctionne pas

local selfId = fibaro:getSelfId()
local ARDUINO = Net.FHttp("192.168.1.175", 4200)
local response = ARDUINO:GET("vitesseVent")
fibaro:call(selfId, "setProperty", "ui.Label8.value", response)

merci pour vos retours

 

EDIT:

le code ci dessous fonctionne, il ne doit pas etre dans le bonne ordre, je n'arrive pas à remonter la valeur de la variable

arduino vitesseVent vers la variable globale fibaro "testvent"

je retrouve bien "vitesseVent" comme valeur dans la variable "testvent" mais ça ne s'actualise pas et ce n'est pas la "vrai" valeur puisque je devrai recuper un nombre

#define ANEMOMETRE  1   //pin D3, interruption n°1
#define PI        3.1415
#define RAYON     0.10  //rayon en mètre de l'anémomètre en mètre
volatile unsigned int countAnemometre = 0;  

unsigned long previousMillis=   0;
unsigned long previousMillis2=  0;
unsigned long delaiAnemometre = 3000L;    //3 secondes
unsigned long delaiProgramme =  60000L;   //60 sec

float gust(0);        //vent max cumulé sur 1 min
float wind(0);        //vent moyen cumulé sur 1 min
int nbAnemo = 0;      //nb d'occurence de mesure Anemo
float vitesseVent(0); //vent moyen cumulé sur 1 min

#include <Ethernet.h>
#include <SPI.h>

byte mac[] = { 0x90, 0xA2, 0xDA, 0x0E, 0xA5, 0x7E }; //physical mac address 90:A2:DA:0E:A5:7E
byte ip[] = { 192, 168, 1, 175 }; // ip in lan
byte gateway[] = { 192, 168, 1, 1 }; // internet access via router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask   
IPAddress server(192,168,1,24); //HC2 FIBARO

EthernetClient client;


void setup() {
  Ethernet.begin(mac, ip);
  Serial.begin(9600);
  delay(1000);
    attachInterrupt(ANEMOMETRE,interruptAnemometre,RISING) ;
pinMode(13, OUTPUT);
pinMode(3, INPUT);

Serial.println("connecting...");
  String PostData = "{\r\n\"value\":\"'vitesseVent'\"\r\n}"; //JSON data to send
  if (client.connect(server,80)) {
    Serial.println("connected");
    client.print("PUT /api/globalVariables/testvent"); //Fibaro Global Variable
    client.println(" HTTP/1.1");
    client.println("Host: 192.168.1.24");
    client.println("Authorization: Basic XXXXXXXXXXXXXXXXX");   //need to insert base 64 user:password
    client.print("Content-Length: ");
    client.println(PostData.length());
    client.println();
    client.println(PostData); 
  }
  else {
   Serial.println("Connection Failed."); 
  }
 
}
/*  *  Fonction d'interruption de l'anémomètre qui incrémente un compteur à chaque impulsion */
void interruptAnemometre(){
  countAnemometre++;
}
void loop(){    
 int BP = digitalRead(3); // Lecture du capteur
if (BP == LOW) {
digitalWrite(13, HIGH); // Allume la Led
}
else {
digitalWrite(13, LOW); // Eteind la Led
} 
  unsigned long currentMillis = millis(); // read time passed
//Récupération des infos de l'anémomètre toutes les 3 sec
  //Enregistrement cumulé des valeurs
  if (currentMillis - previousMillis > delaiAnemometre){
    previousMillis = millis();
   // vitesseVent = (PI * RAYON * 2 * countAnemometre)/3*3.6; //3 = durée de prise de mesure (3sec)
    vitesseVent = (0.83 * countAnemometre)/3*3.6; //3 = durée de prise de mesure (3sec) 
    if(vitesseVent>gust) gust = vitesseVent;
    wind += vitesseVent;
    nbAnemo++;
    countAnemometre = 0;
    Serial.print("Vent:");
    Serial.println(vitesseVent); 
       
  }
  //Toutes les minutes, compilation des valeurs et envoi au serveur  
  if (currentMillis - previousMillis2 > delaiProgramme){
    previousMillis2 = millis();
    float avgwind = wind / nbAnemo;
    
    Serial.print("Wind AVG : ");
    Serial.println(avgwind);
    Serial.print("Gust : ");
    Serial.println(gust);
    
    //RAZ des compteurs qui ont servi a calculé les valeurs moyennes sur 1 min
    wind = 0;
    gust = 0;
    nbAnemo = 0;
  }
   if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    for(;;)
      ;
  }
}

 

Modifié par flamalex

Partager ce message


Lien à poster
Partager sur d’autres sites

×