Forum eedomus
http://forum.eedomus.fr/

Récupérer une température sur un arduino
http://forum.eedomus.fr/viewtopic.php?f=15&t=557
Page 1 sur 1
Auteur:  Pat11 [ 30 Oct 2012 23:18 ]
Sujet du message:  Récupérer une température sur un arduino

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
Auteur:  DjMomo [ 31 Oct 2012 12:59 ]
Sujet du message:  Re: Récupérer une température sur un arduino

Quelle est la valeur de ton xpath ?

Quelle est l'erreur affichée ?
Auteur:  Pat11 [ 31 Oct 2012 19:15 ]
Sujet du message:  Re: Récupérer une température sur un arduino

bonsoir
je mets comme valeur
URL
http://192.168.1.65
XPATH
//ARDUINO/TEMP
le message erreur est simplement erreur
Auteur:  DjMomo [ 31 Oct 2012 19:49 ]
Sujet du message:  Re: Récupérer une température sur un arduino

Un seul slash avant ARDUINO il me semble -> /ARDUINO/TEMP
Auteur:  Pat11 [ 02 Nov 2012 08:53 ]
Sujet du message:  Re: Récupérer une température sur un arduino

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
Auteur:  DjMomo [ 02 Nov 2012 09:48 ]
Sujet du message:  Re: Récupérer une température sur un arduino

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.
Auteur:  Pat11 [ 07 Nov 2012 19:22 ]
Sujet du message:  Re: Récupérer une température sur un arduino

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
Auteur:  rc eedomus [ 20 Nov 2013 17:38 ]
Sujet du message:  Re: Récupérer une température sur un arduino

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
Auteur:  Pat11 [ 21 Nov 2013 05:45 ]
Sujet du message:  Re: Récupérer une température sur un arduino

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
Auteur:  rc eedomus [ 25 Nov 2013 05:55 ]
Sujet du message:  Re: Récupérer une température sur un arduino

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
Auteur:  Pat11 [ 25 Nov 2013 18:26 ]
Sujet du message:  Re: Récupérer une température sur un arduino

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
Auteur:  DjMomo [ 25 Nov 2013 18:45 ]
Sujet du message:  Re: Récupérer une température sur un arduino

Utilisez les balises [code] et [/code] pour une meilleure visibilité...
Auteur:  rc eedomus [ 25 Nov 2013 18:45 ]
Sujet du message:  Re: Récupérer une température sur un arduino

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
Auteur:  Pat11 [ 25 Nov 2013 19:11 ]
Sujet du message:  Re: Récupérer une température sur un arduino

Non j'ai abandonnée c'etait en XML
Page 1 sur 1 Le fuseau horaire est UTC+1 heure