JetRex92 Posté(e) le 3 mai 2015 Signaler Posté(e) le 3 mai 2015 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
jojo Posté(e) le 3 mai 2015 Signaler Posté(e) le 3 mai 2015 je n'y connais rien, mais j'essayerais peut-être ceci : local result, status, errorCode = Nano:GET("/getinfopin=1") donc sans le ?
JetRex92 Posté(e) le 3 mai 2015 Auteur Signaler Posté(e) le 3 mai 2015 Ca ne change rien... Merci quand même
flamalex Posté(e) le 18 novembre 2020 Signaler Posté(e) le 18 novembre 2020 (modifié) 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é le 19 novembre 2020 par flamalex
Messages recommandés