Forum eedomus
https://forum.eedomus.com/

xPL eedomus
https://forum.eedomus.com/viewtopic.php?f=14&t=319
Page 1 sur 2  Suivant »
Auteur:  Chacks [ 27 Mai 2012 17:07 ]
Sujet du message:  xPL Eedomus

Bonjour,

je cherche à envoyer des données en xPL vers l'Eedomus avec un arduino.
Mon premier souci est que j'ai une livebox2 et elle ne supporte pas le broadcast donc j'ai mis directement l'IP de ma box eedomus (IP fixé par la livebox) pour l'envoi des requêtes xPL.
Les requêtes sont envoyées en UDP sur le port 3865 (port xPL).

voici une trame xPL envoyée

Code : Tout sélectionner
xpl-stat
{
hop=1
source=arduino
target=eedomus
}
sensor.basic
{
device=0x4A30
type=temp
current=24.2
}


Dans l'aide de l'eedomus, il est indiqué qu'une notification doit apparaitre quand la box reçoit une requête xPL mais je ne vois rien apparaitre. Serait-il possible d'avoir une petite aide pour arriver à intégrer des requêtes xPL autres que le RFXCOM.

Merci.

P.S. : Une section xPL pourrait peut être intéressante ou à regrouper avec la section API
Auteur:  Chacks [ 27 Mai 2012 21:09 ]
Sujet du message:  Re: xPL Eedomus

Bon je me répond à moi même, j'ai réussi à recevoir correctement les trames xPL avec la box en lui faisant croire que c'est un RFXCOM LAN qui lui envoi les données. Voici une trame que je lui envoi :

Code : Tout sélectionner
xpl-stat
{
hop=1
source=rfxcom-lan.0004a3131b9d
target=*
}
sensor.basic
{
device=th1 0x4B70
type=temp
current=20.7
}


J'espère que le support nous permettra plus tard d'ajouter des modules sans avoir besoin de se faire passer pour un RFXCOM.
Auteur:  cedriclocqueneux [ 28 Mai 2012 09:10 ]
Sujet du message:  Re: xPL Eedomus

Merci pour l'astuce !
J'espère aussi que d'autres appareils que le RFXCOm seront supportés, c'est une demande que j'ai remonté aussi à l'équipe :p
Auteur:  PlaneteDomo [ 28 Mai 2012 10:32 ]
Sujet du message:  Re: xPL Eedomus

Salut,

Je n'ai pas testé, mais il n'y a pas de raison que ça ne fonctionne pas.

Je pense plus que c'est un problème de déclaration de la source vis à vis du protocole xPL

La source doit être de la forme [editeur-deviceID].[identifiant]

Essaye donc en mettant chacks-arduino.1 par exemple, je pense que ça devrait marcher.

A++
Auteur:  PlaneteDomo [ 29 Mai 2012 14:43 ]
Sujet du message:  Re: xPL Eedomus

J'ai édité mon message ci-dessus, j'avais oublié le deviceID.

Il faut donc impérativement avoir une source identifiée correctement.

A+
Auteur:  Chacks [ 29 Mai 2012 20:29 ]
Sujet du message:  Re: xPL Eedomus

Merci pour les réponses, je vais tester tout ça dès que possible (un heureux événement m'occupe à 100% ces jours-ci :P )
Auteur:  Chacks [ 03 Juin 2012 15:44 ]
Sujet du message:  Re: xPL Eedomus

Je viens de tester et ça ne marche pas. Je pense qu'il faut que le couple [editeur-deviceID] doit être connu par la box. Pour l'instant je reste donc avec le couple RFXCOM-LAN
Auteur:  PlaneteDomo [ 03 Juin 2012 17:18 ]
Sujet du message:  Re: xPL Eedomus

Chacks a écrit:Je viens de tester et ça ne marche pas. Je pense qu'il faut que le couple [editeur-deviceID] doit être connu par la box. Pour l'instant je reste donc avec le couple RFXCOM-LAN


Je te confirme qu'il n'y a aucun test sur l'éditeur je vais regarder d'ou ça vient. Tu as laissé * comme destination ?
Auteur:  Chacks [ 03 Juin 2012 19:16 ]
Sujet du message:  Re: xPL Eedomus

Oui j'ai bien laisser * en destination, j'ai juste changer la source.

Merci.
Auteur:  Pat11 [ 14 Mars 2013 22:35 ]
Sujet du message:  Re: xPL eedomus

Bonsoir
je relance de forum car je cherche comment envoyer des donnée xPL a partir d'un arduino pour les récupérer sur mon eedomus
j 'ai cherché sur internet , j ai trouvé des librairie pour arduino mais c est un peut complique pour un débutant comme moi
alors si quelqu'un passe par la peut être Chacks qui la déjà fait
merci d'avance
Auteur:  Chacks [ 15 Mars 2013 08:34 ]
Sujet du message:  Re: xPL eedomus

Bonjour Pat,

je ne suis pas chez moi jusqu'à lundi mais dés que je rentre je peux t'envoyer le fichier de prog de mon arduino si tu veux. Pour info je récupère les données RF de sondes WS1170 et j'envoi la valeur vers l'eedomus par xPL.

@+
Auteur:  Pat11 [ 15 Mars 2013 12:56 ]
Sujet du message:  Re: xPL eedomus

Bonjour chacks
Merci pour ta réponse , oui je veux bien avoir tes profs sa me donnera une base,moi c est pour récupèrer la température ds18b20 et le niveau d une piscine pour l envoyer sur l eedomus en xpl
Merci bonne journée et j attend sa avec impatience
Auteur:  Chacks [ 18 Mars 2013 07:48 ]
Sujet du message:  Re: xPL eedomus

Bonjour,

voici le code que j'utilise pour envoyer les valeurs de température et humidité issues de capteurs Velleman WS1170 en xPL vers l'eedomus. La fonction d'envoi xPL s'appelle xPLSend().

Code : Tout sélectionner
/* Inclus la librairie SPI pour le module Ethernet Shield */
#include <SPI.h>

/* Inclus la librairie Ethernet */
#include <Client.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
#include <Server.h>

/* Variables d'entrée/sortie de l'arduino */
#define DataPin 2

/* Variables de gestion des boucles */
int i = 0;
int j = 0;

/* Variables de gestion des données reçus par RF */
unsigned long time = 0;
byte data = 0;
byte tableoctet[6];
boolean End_Receive = false;
#define POLYNOME 0x131; // POLYNOME = x^8 + x^5 + x^4 + 1

/* Variables Température et Humidité et Adresse du capteur */
int Tp = 0;
int Tp_dec = 0;
char Tp_str[5];
int Rh = 0;
char Rh_str[3];
int Adr = 0;
char Adr_str[13];

/* Variables de configuration ethernet */
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x9B, 0x73 };

/* Variables xPL */
char* xPLType = "xpl-stat";
char* xPLSource = "rfxcom-lan.0004a3131b9d";
//char* xPLSource = "arduino-lan.90A2DA009B73";
char* xPLTarget = "*";
char* xPLSchema = "sensor.basic";
char packetBuffer[200];

/* Adresse de Broadcast */
byte BroadcastIP[] = {192, 168, 1, 255};

/* Port xPL */
unsigned int xplPort = 3865;

EthernetUDP Udp;

unsigned int TargetPort = 3639;

/* Fonction d'initialisation */
void setup()
{
  pinMode(DataPin, INPUT);
 
  //Serial.begin(115200);
 
  // Initialise la connexion ethernet
  Ethernet.begin(mac);
  Udp.begin(6600);
  //Serial.println("Initialisation terminee.");
}

void loop()
{
  while (End_Receive == false)
  {
    time = pulseIn(DataPin, HIGH, 2000);
   
    if (time > 450 && time < 1800)
    {
      data = (data << 1) + (time > 1000 ? 0 : 1);
     
      if (((j + 1) % 8) == 0)
      {
        tableoctet[j / 8] = data;
      }
      ++j;
    }
    if (j > 0 && time < 450)
    {
      End_Receive = true;
    }
  }
 
  if (tableoctet[0] == 0xFF)
  {
    if (Check_CRC(tableoctet,6,0))
    {
      Tp = ((tableoctet[2] & 0x0F) << 8) | tableoctet[3];
      Rh = tableoctet[4];
      Adr = (tableoctet[1] << 8) | (tableoctet[2] & 0xF0) ;
      sprintf( Adr_str, "%s 0x%02X", "th1", Adr);
      //Serial.println(Adr_str);

      if (Tp >= 2048)
      {
        Tp = (Tp - 2048) + 0x4000;
      }
     
      if ((Tp & 0x001) == 0x000)
      {
        Tp_dec = Tp/10;
        sprintf( Tp_str, "%d", Tp_dec);
        Tp_dec = Tp % 10;
        sprintf( Tp_str, "%s.%d", Tp_str, Tp_dec);
        xPLSend(Adr_str,"temp",Tp_str);
        //xPLSend(Adr_str,"battery","100"); // Pour essai
      }

      sprintf( Rh_str, "%d", Rh);
      xPLSend(Adr_str,"humidity",Rh_str);
      //xPLSend(Adr_str,"battery","100"); // Pour essai

    }
  }
  j = 0;
  End_Receive = false;
  delay(100);
}

void xPLSend(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();
}

boolean Check_CRC(uint8_t data[], uint8_t nbrOfBytes, uint8_t checksum)
{
  uint8_t crc = 0;
  uint8_t byteCtr;
 
  for ( byteCtr = 1; byteCtr < nbrOfBytes; ++byteCtr)
  {
    crc ^= (data[byteCtr]);
    for (uint8_t bit = 8; bit > 0; --bit)
    {
      if (crc & 0x80)
      {
        crc = crc << 1;
        crc = crc ^ POLYNOME;
      }
      else
      {
        crc = (crc << 1);
      }
    }
  }
 
  if (crc != checksum)
  {
    return false;
  }
  else
  {
    return true;
  }
}


Bon courage.
Auteur:  Pat11 [ 18 Mars 2013 13:34 ]
Sujet du message:  Re: xPL eedomus

Bonjour
Merci chacks pour se code je vais étudier sa se soir et je te tiens au courant
Bonne journée
Auteur:  Pat11 [ 20 Mars 2013 17:21 ]
Sujet du message:  Re: xPL eedomus

Bonjour
Merci chacks pour le code, j ai eu du mal , mais en cherchant sur le net j'ai trouvé une librairie
xPL.Arduino au lien suivant : http://connectingstuff.net/blog/xpl-ard ... mment-7427
qui est plus facile à mettre en œuvre et en plus tu as aussi pour recevoir les messages xpl, maintenant il me reste plus qu'a faire la transmission par xbee et arduino
merci encore pour ton aide
Patrick
Auteur:  Pat11 [ 21 Mars 2013 10:00 ]
Sujet du message:  Re: xPL eedomus

Bonjour
j'ai une petite question, peut on envoyer un ordre xpl à partir de l'eedomus.
merci
Auteur:  Madoma73 [ 21 Mars 2013 10:33 ]
Sujet du message:  Re: xPL eedomus

Bonjour,
oui, tu peux le faire sans problèmes via les actionneurs XPL disponible en tant que périphérique

Pierre
Auteur:  Pat11 [ 21 Mars 2013 18:16 ]
Sujet du message:  Re: xPL eedomus

Bonsoir
merci pour la réponse, effectivement ça fonctionne, mais je pense qu'il y a un souci la box doit attendre un retour, car le bouton reste "ON en cours", une petite idée peur être
merci
Auteur:  Pat11 [ 27 Mars 2013 20:41 ]
Sujet du message:  Re: xPL eedomus

bonsoir
je cherche a récupérer une commande xPL sur mon arduino via une commande par un actionneur xPL de la box, pour actionner deux relais,si quelqu'un à une idée ou un exemple, peut être si chacks passe dans le coin

merci d'avance
Auteur:  Chacks [ 29 Mars 2013 08:48 ]
Sujet du message:  Re: xPL eedomus

Bonjour,

avec la librairie trouvée sur connecting stuff, il y a une partie réception avec une fonction de parse qui te permet de parser les messages xPL reçus afin de déclencher une action en fonction du type de message reçu. Tu souhaites recevoir quoi exactement?
Page 1 sur 2 Le fuseau horaire est UTC+1 heure