Récupérer une température sur un arduino

Capteurs et actionneurs HTTP

Récupérer une température sur un arduino

Messagepar Pat11 » 30 Oct 2012 23:18

Bonsoir
je cherche à récupérer la température sur un arduino à l'aire d'une requête HTTP, voici mon programme sur l'arduino
client.println("HTTP/1.0 200 OK\r\nContent-type : text/html\r\n\r\n");
client.println("<?xlm version=\"1.0\" encoding=\"ISO-8859-1\"?>");
client.println("<ARDUINO>";
client.print("<TEMP>";
client.print(tm,DEC);
client.print("</TEMP>";
client.println("</ARDUINO>");
j'essaye avec xpath et j' ai erreur
merci d'avance pour votre aide
Pat11
 
Messages : 71
Inscription : 23 Sep 2012

Re: Récupérer une température sur un arduino

Messagepar DjMomo » 31 Oct 2012 12:59

Quelle est la valeur de ton xpath ?

Quelle est l'erreur affichée ?
Moi ? C'est Fabien
--------------------------------------------
Mon Github : http://www.github.com/DjMomo/
DjMomo
 
Messages : 1121
Inscription : 26 Sep 2012

Re: Récupérer une température sur un arduino

Messagepar Pat11 » 31 Oct 2012 19:15

bonsoir
je mets comme valeur
URL
http://192.168.1.65
XPATH
//ARDUINO/TEMP
le message erreur est simplement erreur
Pat11
 
Messages : 71
Inscription : 23 Sep 2012

Re: Récupérer une température sur un arduino

Messagepar DjMomo » 31 Oct 2012 19:49

Un seul slash avant ARDUINO il me semble -> /ARDUINO/TEMP
Moi ? C'est Fabien
--------------------------------------------
Mon Github : http://www.github.com/DjMomo/
DjMomo
 
Messages : 1121
Inscription : 26 Sep 2012

Re: Récupérer une température sur un arduino

Messagepar Pat11 » 02 Nov 2012 08:53

bonjour
merci de la réponse mais j ai déjà essayé, quand j affiche le resultat dans une page internet en code source jai le résultat suivant:

<?xml version="1.0" encoding="ISO-8859-1"?>
<ARDUINO>
<TEMP>4</TEMP></ARDUINO>
donc je pense que je fais une erreur dans la connections avec xPath ou url
quelqu'un aurais une idée
merci
Pat11
 
Messages : 71
Inscription : 23 Sep 2012

Re: Récupérer une température sur un arduino

Messagepar DjMomo » 02 Nov 2012 09:48

Encodage UTF-8 et non ISO-8859-1.
Il te manque aussi un espace entre le guillemet fermant de ISO et le point d'interrogation, première ligne.
Enfin, il ne faut pas de retour à la ligne. Tout tient normalement sur une seule ligne.
Moi ? C'est Fabien
--------------------------------------------
Mon Github : http://www.github.com/DjMomo/
DjMomo
 
Messages : 1121
Inscription : 26 Sep 2012

Re: Récupérer une température sur un arduino

Messagepar Pat11 » 07 Nov 2012 19:22

Bonsoir
j arrive toujours pas à récupérer mes données d'un arduino, j ai un message d'erreur avec aperçu du contenu et quand je clic dessus il apparait une petite fenêtre avec le contenu xml et le résultat encadré par les balises.
je ne sais pas comment on peut insérer une image dans la discussion.
merci de votre aide
Pat11
 
Messages : 71
Inscription : 23 Sep 2012

Re: Récupérer une température sur un arduino

Messagepar rc eedomus » 20 Nov 2013 17:38

Bonsoir Pat11,

Je rencontre le même problème que vous en essayant d'implémenter une réponse au niveau de mon programme ARDUINO malgré des tests positifs du XPATH.

Avez-vous résolu ce problème ? quelle est la syntaxe adéquat si c'était le cas ?

Merci d'avance

RC
rc eedomus
 
Messages : 12
Inscription : 08 Nov 2013

Re: Récupérer une température sur un arduino

Messagepar Pat11 » 21 Nov 2013 05:45

Bonjour
j'ai réussi a récupérer des données en xpl mais par contre j'ai pas réussi à commander l'arduino en xpl
si vous voulez je peux vous donner le programme.
Patrick
Pat11
 
Messages : 71
Inscription : 23 Sep 2012

Re: Récupérer une température sur un arduino

Messagepar rc eedomus » 25 Nov 2013 05:55

Bonjour,

Merci pat11, je cherche à connaitre la bonne syntaxe "HTTP" à renvoyer depuis l'ARDUINO (mode serveur web) à la box pour récupérer des données du capteur dans eedomus.

PI, j'ai également essayé d'implémenter le protocole XPL au niveau de l'ARDUINO mais sans succès (pb gestion mémoire apparemment).

Merci d'avance

RC
rc eedomus
 
Messages : 12
Inscription : 08 Nov 2013

Re: Récupérer une température sur un arduino

Messagepar Pat11 » 25 Nov 2013 18:26

Bonsoir
je te mets se que j'avais fais avec un arduino en xpl , j’espère que sa sera claire car je suis pas un spécialiste, mais sa fonctionnais bien je l’utilise pour les températures de la piscine et son niveau

/* Inclus la librairie SPI pour le module Ethernet Shield */
#include <SPI.h>
#include <tools.h>
/* Inclus la librairie Ethernet */
#include <Client.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
#include <Server.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include "xPL.h"
xPL xpl;
// Définition de la pin arduino utilisée pour le bus OneWire
#define ONE_WIRE_BUS 2
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
//Surface
DeviceAddress TempSurface = { 0x28, 0x72, 0xFF, 0x5C, 0x04, 0x00, 0x00, 0x75 };
//Fond
DeviceAddress TempFond = { 0x28, 0x5F, 0x9E, 0x5D, 0x04, 0x00, 0x00, 0xDA };
char xPLSchema[20];
char Tp_str[5];
int Adr;
char Adr_str[13];
float temperature;
char TempChar[10];
char* ValeurPlein ;
char* ValeurCom;
char* Total;
/* Variables de configuration ethernet */
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x9B, 0x73 };
IPAddress ip(192,168,1,72);
/* Variables xPL */
char* xPLType = "xpl-trig";
char* xPLSource = "arduino-lan.piscine";
char* xPLTarget = "*";
char packetBuffer[500];
/* Adresse de Broadcast */
byte BroadcastIP[] = {192, 168, 1, 70};
/* Port xPL */
unsigned int xplPort = 3865;
EthernetUDP Udp;
unsigned int TargetPort = 3639;
/* Fonction d'initialisation */
void setup()
{
xpl.Process();
Serial.begin(115200);
sensors.begin();
sensors.setResolution(TempSurface,10);
sensors.setResolution(TempFond,10);
// Initialise la connexion ethernet
Ethernet.begin(mac,ip);
Udp.begin(6600);
pinMode(4,INPUT);
pinMode(5,INPUT);
pinMode(6,INPUT);
pinMode(7,INPUT);
Serial.println("Initialisation terminee.");
xpl.SendExternal = &SendUdPMessage; // pointer to the send callback
xpl.AfterParseAction = &AfterParseAction; // pointer to a post parsing action callback
xpl.SetSource_P(PSTR("xpl"), PSTR("arduino"), PSTR("test")); // parameters for hearbeat message
}
void loop()
{
//commande de récupération des températures
sensors.requestTemperatures();
//récup de la valeur temperature surface et mise en centi-degrés
int Etat1 = sensors.getTempC(TempSurface);
if (Etat1 != temperature) {
temperature = Etat1;
Adr = 1;
delay (1000);
sprintf( Adr_str, "%s 0x100%d", "th3", Adr);
ftoa(TempChar,temperature,1);
sprintf(xPLSchema, "%s", "sensor.basic");
xPLSendSensor(xPLSchema,Adr_str,"temp",TempChar);
}
//récup de la valeur fond et mise en centi-degrés
int Etat2 = sensors.getTempC(TempFond);
if (Etat2 != temperature){
temperature = Etat2;
Adr = 2;
delay(1000);
sprintf( Adr_str, "%s 0x100%d", "th3", Adr);
ftoa(TempChar,temperature,1);
sprintf(xPLSchema, "%s", "sensor.basic");
xPLSendSensor(xPLSchema, Adr_str,"temp",TempChar);
}
//calcul temperature moyenne
int Etat3 = (sensors.getTempC(TempSurface) + sensors.getTempC(TempFond))/2;
if (Etat3 != temperature){
temperature = Etat3;
Adr = 3;
delay (1000);
sprintf( Adr_str, "%s 0x100%d", "th3", Adr);
ftoa(TempChar,temperature,1);
sprintf(xPLSchema, "%s", "sensor.basic");
xPLSendSensor(xPLSchema, Adr_str,"temp",TempChar);
}
//Calcul niveau
int Etat4 = digitalRead (4);
int Etat5 = digitalRead (5);
int Etat6 = digitalRead (6);
int Etat7 = digitalRead (7);
//if (Etat != Total) {
// Total = Etat;
if (Etat4 == 1) {
ValeurPlein = "0";
}
if (Etat5 ==1) {
ValeurPlein = "25";
}
if (Etat6 == 1) {
ValeurPlein = "50";
}
if (Etat7 == 1) {
ValeurPlein = "100";
}
if (ValeurPlein != Total) {
Total = ValeurPlein;
Adr = 4;
ValeurCom = "dim";
//delay (1000);
sprintf( Adr_str, "%s%d" , "N", Adr);
sprintf(xPLSchema, "%s", "x10.basic");
xPLSendCommandDim(xPLSchema, Adr_str,ValeurCom,ValeurPlein);
}
int packetSize = Udp.parsePacket();
if(packetSize)
{
char xPLMessageBuff[XPL_MESSAGE_BUFFER_MAX];

// read the packet into packetBufffer
Udp.read(xPLMessageBuff, XPL_MESSAGE_BUFFER_MAX);

// parse message
xpl.ParseInputMessage(xPLMessageBuff);
}
}
//Message pour les capteurs xpl
void xPLSendSensor(char* xPLSchema, char* Capteur, char* Type, char* Valeur)
{
sprintf( packetBuffer, "");
strcat( packetBuffer, xPLType);
strcat( packetBuffer, "\n{\nhop=1\nsource=");
strcat( packetBuffer, xPLSource );
strcat( packetBuffer, "\ntarget=" );
strcat( packetBuffer, xPLTarget );
strcat( packetBuffer, "\n}\n" );
strcat( packetBuffer, xPLSchema );
strcat( packetBuffer, "\n{\n" );
sprintf( packetBuffer, "%sdevice=%s\n", packetBuffer, Capteur );
sprintf( packetBuffer, "%stype=%s\n", packetBuffer, Type );
sprintf( packetBuffer, "%scurrent=\%s\n", packetBuffer, Valeur );
sprintf( packetBuffer, "%s}\n", packetBuffer );
Serial.println(packetBuffer);
Udp.beginPacket(BroadcastIP, xplPort);
Udp.write(packetBuffer);
Udp.endPacket();
delay(10000);
}
//Message pour les actionneurs xpl
void xPLSendCommand(char* xPLSchema, char* Capteur, char* Valeur)
{
sprintf( packetBuffer, "");
strcat( packetBuffer, xPLType);
strcat( packetBuffer, "\n{\nhop=1\nsource=");
strcat( packetBuffer, xPLSource );
strcat( packetBuffer, "\ntarget=" );
strcat( packetBuffer, xPLTarget );
strcat( packetBuffer, "\n}\n" );
strcat( packetBuffer, xPLSchema );
strcat( packetBuffer, "\n{\n" );
sprintf( packetBuffer, "%sdevice=%s\n", packetBuffer, Capteur );
sprintf( packetBuffer, "%scommand=\%s\n", packetBuffer, Valeur );
sprintf( packetBuffer, "%s}\n", packetBuffer );
Serial.println(packetBuffer);
Udp.beginPacket(BroadcastIP, xplPort);
Udp.write(packetBuffer);
Udp.endPacket();
delay(10000);
}
void xPLSendCommandDim(char* xPLSchema, char* Capteur, char* Com, char* Valeur)
{
sprintf( packetBuffer, "");
strcat( packetBuffer, xPLType);
strcat( packetBuffer, "\n{\nhop=1\nsource=");
strcat( packetBuffer, xPLSource );
strcat( packetBuffer, "\ntarget=" );
strcat( packetBuffer, xPLTarget );
strcat( packetBuffer, "\n}\n" );
strcat( packetBuffer, xPLSchema );
strcat( packetBuffer, "\n{\n" );
sprintf( packetBuffer, "%sdevice=%s\n", packetBuffer, Capteur );
sprintf( packetBuffer, "%scommand=\%s\n", packetBuffer, Com );
sprintf( packetBuffer, "%slevel=\%s\n", packetBuffer, Valeur );
sprintf( packetBuffer, "%s}\n", packetBuffer );
Serial.println(packetBuffer);
Udp.beginPacket(BroadcastIP, xplPort);
Udp.write(packetBuffer);
Udp.endPacket();
delay(10000);
}
void SendUdPMessage(char *buffer)
{
Udp.beginPacket(BroadcastIP, xplPort);
Udp.write(buffer);
Udp.endPacket();
}
void AfterParseAction(xPL_Message * message)
{
if (xpl.TargetIsMe(message))
{
if (message->IsSchema_P(PSTR("lighting"), PSTR("basic")))
{
Serial.println(PSTR("is lighting.basic"));
}
}

// show message
Serial.println(message->toString());
}

bon courage si tu as des questions hésite pas mais je suis pas un expert
Pat11
 
Messages : 71
Inscription : 23 Sep 2012

Re: Récupérer une température sur un arduino

Messagepar DjMomo » 25 Nov 2013 18:45

Utilisez les balises [code] et [/code] pour une meilleure visibilité...
Moi ? C'est Fabien
--------------------------------------------
Mon Github : http://www.github.com/DjMomo/
DjMomo
 
Messages : 1121
Inscription : 26 Sep 2012

Re: Récupérer une température sur un arduino

Messagepar rc eedomus » 25 Nov 2013 18:45

Merci pour cet exemple, je vais l'étudier avec attention.

Ton premier message en 2012 faisait référence à une requete HTTP :

Bonsoir
je cherche à récupérer la température sur un arduino à l'aire d'une requête HTTP, voici mon programme sur l'arduino
client.println("HTTP/1.0 200 OK\r\nContent-type : text/html\r\n\r\n");
client.println("<?xlm version=\"1.0\" encoding=\"ISO-8859-1\"?>");
client.println("<ARDUINO>";
client.print("<TEMP>";
client.print(tm,DEC);
client.print("</TEMP>";
client.println("</ARDUINO>");
j'essaye avec xpath et j' ai erreur
merci d'avance pour votre aide


Aurais-tu trouvé depuis la bonne syntaxe qui permet de récupérer le(s) paramètre(s) dans la box ?

Cordialement
rc eedomus
 
Messages : 12
Inscription : 08 Nov 2013

Re: Récupérer une température sur un arduino

Messagepar Pat11 » 25 Nov 2013 19:11

Non j'ai abandonnée c'etait en XML
Pat11
 
Messages : 71
Inscription : 23 Sep 2012


Retour vers Requêtes HTTP

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 31 invité(s)