Teleinfo EDF

Bla bla sur la domotique. La section ou on se trompe jamais !

Re: Teleinfo EDF

Messagede Thibaut_V » 17 Sep 2013, 15:38

Merci Steeve3172!

Mais il ne faut pas que le pc soit trop éloigné de ton compteur.


C'est bien ça le problème!

Autre chose, je ne m'y connais pas du tout en électronique, donc, si vous avez une idée de la difficulté d'implémentation de la solution, ça serait parfait.
Thibaut_V
Membre un peu timide !
 
Messages: 3
Inscription: 17 Sep 2013, 14:51

Re: Teleinfo EDF

Messagede nightfever » 02 Oct 2013, 21:00

Calcipher a Ă©crit:
Pour la téléinfo avec un raspberry, voir ici : http://www.chaleurterre.com/forum/viewtopic.php?t=15153
Perso j'utilise le montage suivant : http://www.chaleurterre.com/forum/viewt ... 1607#51607 branché sur le port série de mon serveur, c'est le même principe. Ca doit aussi marcher sur un NAS, et à la dernière page du même post, il y a un montage en usb.
Pour ceux que ça intéresse, on peut avoir l'optocoupleur gratos en demandant un sample chez Vishay...


Merci beaucoup. J'ai fais le montage indiqué sur ton premier lien (2 résistances + l'opto). Ca fonctionne nikel : je vois défiler les infos via putty et j'ai pu constater que ce sont les mêmes qu'affichées sur le compteur (après avoir fais le tri biensur ^^). Me reste plus qu'à m'attaquer à la partie BDD + graphique. Ensuite, je referai le montage de façon optimisée pour que ça rentre dans le Rasp. Pour info, j'ai mis la clé wifi sur le rasp et ce dernier est posé sur mon compteur. Impeccable :mrgreen:
-- Armony one |freebox v6 |LightManager |intertechno | chacon | galaxy tab 8.9|SmartTv avec wifi --
-- Jeedom sur RPI 2 + clé 3G| Vera Lite (firmware UI5 v1.5.622)+ RFXtrx usb | 6 x Oregon THGR122NX | 1 x capteur ST814 |6 x tête thermostatique Danfos | Thermostat Z-wave programmable | 5 x fibaro FGD-211 | 1 x module AEO_MSEI | 1x FGS211 | 1 x multifonctions AEO_DSB05 | 1 x multifonctions BE_MOLITE | 2 x FGR211 --
-- NAS DS213 | openremote + myvera| teleinfo sur raspberry pi | IpCam Foscam FI9821W-V2 --
nightfever
Dieu de domotique
 
Messages: 394
Inscription: 15 DĂ©c 2012, 16:47
Localisation: Nord

Re: Teleinfo EDF

Messagede Calcipher » 03 Oct 2013, 07:52

nightfever a écrit:Merci beaucoup. J'ai fais le montage indiqué sur ton premier lien (2 résistances + l'opto). Ca fonctionne nikel : je vois défiler les infos via putty et j'ai pu constater que ce sont les mêmes qu'affichées sur le compteur (après avoir fais le tri biensur ^^). Me reste plus qu'à m'attaquer à la partie BDD + graphique. Ensuite, je referai le montage de façon optimisée pour que ça rentre dans le Rasp. Pour info, j'ai mis la clé wifi sur le rasp et ce dernier est posé sur mon compteur. Impeccable :mrgreen:

Merci pour le retour. Cette solution est vraiment excellente quand le compteur est loin de la centrale domotique.
Calcipher
Dieu de domotique
 
Messages: 251
Inscription: 14 Nov 2012, 09:58
Localisation: Angers

Re: Teleinfo EDF

Messagede nightfever » 03 Oct 2013, 20:01

Calcipher a Ă©crit:Merci pour le retour. Cette solution est vraiment excellente quand le compteur est loin de la centrale domotique.


ben le retour c'est normal. Je suis le premier à râler quand tu passes des heures à chercher pour pas embêter le monde, que tu trouves le sujet idéal et qu'il n'est pas suivi :roll:

Par contre, me concernant je galère pour la suite. Je ne sais pas quelle structure de BDD et comment la remplir tellement je trouve d'exemples ressemblant (avec des fichiers en python ou en c pour alimenter la BDD...). Et si la structure est mal définie, c'est tous les programmes php / java qu'il faut que je modifie (avec juste quelques notions). Oui, j'ai récupéré ce pachage teleinfov3 :wink:
J'ai bien trouvé ce sujet avec ses 2 exemples mais je trouve dommage de passer par la vera et continuer à la surcharger alors que nous avons un système autonome avec le RP.
Voici les infos que je récupère via putty :
Code: Tout sélectionner
ADCO 0207XXXXXXX
OPTARIF HC.. <
ISOUSC 30 9
HCHC 006868722 -
HCHP 020247319 /
PTEC HP..
IINST 002 Y
IMAX 036 H
PAPP 00450 *
HHPHC A ,


Tu as adopté quoi toi pour remplir ta BDD et l'fficher ? une transition par la vera ?
-- Armony one |freebox v6 |LightManager |intertechno | chacon | galaxy tab 8.9|SmartTv avec wifi --
-- Jeedom sur RPI 2 + clé 3G| Vera Lite (firmware UI5 v1.5.622)+ RFXtrx usb | 6 x Oregon THGR122NX | 1 x capteur ST814 |6 x tête thermostatique Danfos | Thermostat Z-wave programmable | 5 x fibaro FGD-211 | 1 x module AEO_MSEI | 1x FGS211 | 1 x multifonctions AEO_DSB05 | 1 x multifonctions BE_MOLITE | 2 x FGR211 --
-- NAS DS213 | openremote + myvera| teleinfo sur raspberry pi | IpCam Foscam FI9821W-V2 --
nightfever
Dieu de domotique
 
Messages: 394
Inscription: 15 DĂ©c 2012, 16:47
Localisation: Nord

Re: Teleinfo EDF

Messagede benjynet » 03 Oct 2013, 20:34

Et moi je dis, pourquoi personne n'a encore pondu un truc zwave pour recuperer la téléinfo ? que l'on placerai sur un rail DIN , bien sur...
viewtopic.php?f=9&t=7317
Box HomeCenter2 de Fibaro - IPX800 de GCE
1x FGS221 - 1x FGD211 - 1x Universal Sensor avec 4 DS18B20 - 5x WallPlug
benjynet
Guru de domotique
 
Messages: 119
Inscription: 09 Avr 2012, 21:40
Localisation: Oise (60)

Re: Teleinfo EDF

Messagede Calcipher » 04 Oct 2013, 08:57

nightfever a écrit:Tu as adopté quoi toi pour remplir ta BDD et l'fficher ? une transition par la vera ?

Chez moi c'est un programme maison en perl (chacun son truc) qui tourne sur mon serveur domotique.
Le principe en gros :
- Lecture de la téléinfo ligne par ligne en vérifiant le checksum (dernier octet de la ligne)
- Je récupère ensuite le nom de l'index et la valeur associée
- Pour tous les index qui m'intéressent, si la valeur est lue pour la première fois ou si elle a bougé, j'envoie un ordre update à ma base de données
- Je mémorise ensuite la valeur de mon index et je boucle sur la ligne suivante

Et moi je dis, pourquoi personne n'a encore pondu un truc zwave pour recuperer la téléinfo ? que l'on placerai sur un rail DIN , bien sur...

C'est une très bonne idée mais le problème c'est que le zwave est un protocole non ouvert (c'est son plus gros défaut) et qu'il n'existe pas de module émetteur "programmable"
Calcipher
Dieu de domotique
 
Messages: 251
Inscription: 14 Nov 2012, 09:58
Localisation: Angers

Re: Teleinfo EDF

Messagede nightfever » 28 Oct 2013, 21:16

Bon alors voici mon retour :
le montage (avec un coup de dremel le long du connecteur DIN pour réussir à fermer le boitier). Le schéma est ici
Image

le montage connecté sur le raspberry :
Image

le boitier fermé (avec la clé wifi) :
Image

le code C qui fonctionne :
Code: Tout sélectionner
/*       teleinfoserial_mysql.c                              */
/* Version pour PC et wrt54gl                              */
/* Lecture donnĂ©es TĂ©lĂ©info et enregistre donnĂ©es sur base mysql vesta si ok sinon dans fichier csv.   */
/* Connexion par le port sĂ©rie du Wrt54gl (Console dĂ©sactivĂ©e dans inittab.)            */
/* VĂ©rification checksum donnĂ©es tĂ©lĂ©info et boucle de 3 essais si erreurs.            */
/* Par domos78 at free point fr                              */

/*
Paramètres à adapter:
- Port série à modifier en conséquence avec SERIALPORT.
- Nombre de valeurs à relever: NB_VALEURS + tableaux "etiquettes" et "poschecksum" à modifier selon abonnement (ici triphasé heures creuses).
- Paramètres Mysql (Serveur, Base, table et login/password)
- Autorisé le serveur MySql à accepter les connexions distantes pour le Wrt54gl.

Compilation : se connecter en ssh, se mettre dans le repertoire où est placé le fichier teleinfoserial_mysql.c et lancer la commande :
- gcc -Wall teleinfoserial_mysql.c -o teleinfoserial_mysql -lmysqlclient

Compilation wrt54gl:
- avec le SDK (OpenWrt-SDK-Linux).

Résultat pour les données importantes dans la base MySql du serveur distant:
dan@vesta:~$ bin/listdatateleinfo.sh
timestamp       date            heure           hchp    hchc    ptec    inst1   inst2   inst3   papp
1222265525      24/09/2008      16:12:05        8209506 8026019 HP      1       0       1       460
1222265464      24/09/2008      16:11:04        8209499 8026019 HP      1       0       1       460
1222265405      24/09/2008      16:10:05        8209493 8026019 HP      1       0       1       390
1222265344      24/09/2008      16:09:04        8209487 8026019 HP      1       0       1       390
1222265284      24/09/2008      16:08:04        8209481 8026019 HP      1       0       1       390
1222265225      24/09/2008      16:07:05        8209476 8026019 HP      1       0       1       390
1222265164      24/09/2008      16:06:04        8209470 8026019 HP      1       0       1       390
1222265105      24/09/2008      16:05:05        8209464 8026019 HP      1       0       1       390

RĂ©sultat en mode DEBUG:
ADCO='70060936xxxx'
OPTARIF='HC..'
ISOUSC='20'
HCHP='008444126'
HCHC='008228815'
PTEC='HP'
IINST='002'
IMAX='011'
PMAX='07470'
PAPP='00610'
HHPHC='E'
MOTDETAT='000000'
*/

//-----------------------------------------------------------------------------
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <time.h>
#include <syslog.h>
#include <termios.h>
#include <sys/fcntl.h>
#include <sys/types.h>
#include <mysql/mysql.h>

// Define port serie
#define BAUDRATE B1200
#define SERIALPORT "/dev/ttyAMA0"

// Define mysql
#define MYSQL_HOST "localhost"
#define MYSQL_DB "domotique"
#define MYSQL_TABLE "teleinfo"
#define MYSQL_LOGIN "'bip'"
#define MYSQL_PWD "'bip'"

// Fichier local au Wrt4gl/PC + fichier trame pour debug.
#define DATACSV "/var/www/teleinfo/teleinfosql.csv"
#define TRAMELOG "/var/www/teleinfo/trames/teleinfotrame."

/* Active mode debug. DĂ©commenter pour activer le mode Debug. Il Ă©crit :
- chaque cheksum lu et calculé dans "/var/log/messages"
- "Requete MySql ok." dans "/var/log/messages" pour chaque Ă©criture conforme dans la BDD
- un fichier avec la trame de données pour chaque lecture du compteur dans "/var/www/teleinfo/trames/"
*/
//#define DEBUG

//-----------------------------------------------------------------------------

// Déclaration pour le port série.
int             fdserial ;
struct termios  termiosteleinfo ;

// Déclaration pour les données.
char ch[2] ;
char car_prec ;
char message[512] ;
char* match;
int id ;
char datateleinfo[512] ;

/// Constantes/Variables à changées suivant abonnement, Nombre de valeurs, voir tableau "etiquettes", 20 pour abonnement tri heures creuse.
#define NB_VALEURS 11
char etiquettes[NB_VALEURS][11] = {"ADCO", "OPTARIF", "ISOUSC", "HCHC", "HCHP", "PTEC", "IINST", "IMAX", "PAPP", "HHPHC", "MOTDETAT"} ;
// Fin Constantes/variables à changées suivant abonnement.

char    valeurs[NB_VALEURS][11] ;
char    checksum[255] ;
int    res ;
int   no_essais = 1 ;
int   nb_essais = 3 ;
int   erreur_checksum = 0 ;

// DĂ©claration pour la date.
time_t       td;
struct    tm    *dc;
char      sdate[12];
char      sheure[10];
char      timestamp[11];

/*------------------------------------------------------------------------------*/
/* Init port rs232                        */
/*------------------------------------------------------------------------------*/
int initserie(void)
// Mode Non-Canonical Input Processing, Attend 1 caractère ou time-out(avec VMIN et VTIME).
{
   int device ;

        // Ouverture de la liaison serie (Nouvelle version de config.)
        if ( (device=open(SERIALPORT, O_RDWR | O_NOCTTY)) == -1 )
   {
                syslog(LOG_ERR, "Erreur ouverture du port serie %s !", SERIALPORT);
                exit(1) ;
        }

        tcgetattr(device,&termiosteleinfo) ;            // Lecture des parametres courants.

   cfsetispeed(&termiosteleinfo, BAUDRATE) ;         // Configure le dĂ©bit en entrĂ©e/sortie.
   cfsetospeed(&termiosteleinfo, BAUDRATE) ;

   termiosteleinfo.c_cflag |= (CLOCAL | CREAD) ;         // Active rĂ©ception et mode local.

   // Format sĂ©rie "7E1"
   termiosteleinfo.c_cflag |= PARENB  ;            // Active 7 bits de donnees avec parite pair.
   termiosteleinfo.c_cflag &= ~PARODD ;
   termiosteleinfo.c_cflag &= ~CSTOPB ;
   termiosteleinfo.c_cflag &= ~CSIZE ;
   termiosteleinfo.c_cflag |= CS7 ;

   termiosteleinfo.c_iflag |= (INPCK | ISTRIP) ;         // Mode de control de paritĂ©.

   termiosteleinfo.c_cflag &= ~CRTSCTS ;            // DĂ©sactive control de flux matĂ©riel.

   termiosteleinfo.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG) ;   // Mode non-canonique (mode raw) sans echo.

   termiosteleinfo.c_iflag &= ~(IXON | IXOFF | IXANY | ICRNL) ;   // DĂ©sactive control de flux logiciel, conversion 0xOD en 0x0A.

   termiosteleinfo.c_oflag &= ~OPOST ;            // Pas de mode de sortie particulier (mode raw).

   termiosteleinfo.c_cc[VTIME] = 80 ;              // time-out Ă  ~8s.
   termiosteleinfo.c_cc[VMIN]  = 0 ;               // 1 car. attendu.

   tcflush(device, TCIFLUSH) ;               // Efface les donnĂ©es reçues mais non lues.
        tcsetattr(device,TCSANOW,&termiosteleinfo) ;         // Sauvegarde des nouveaux parametres
   return device ;
}

/*------------------------------------------------------------------------------*/
/* Lecture donnĂ©es tĂ©lĂ©info sur port sĂ©rie               */
/*------------------------------------------------------------------------------*/
void LiTrameSerie(int device)
{
// (0d 03 02 0a => Code fin et début trame)
   tcflush(device, TCIFLUSH) ;         // Efface les donnĂ©es non lus en entrĂ©e.
   message[0]='\0' ;
   memset(valeurs, 0x00, sizeof(valeurs)) ;

   do
   {
      car_prec = ch[0] ;
      res = read(device, ch, 1) ;
      if (! res)
      {   
         syslog(LOG_ERR, "Erreur pas de rĂ©ception dĂ©but donnĂ©es TĂ©lĂ©info !\n") ;
         close(device);
         exit(1) ;
      }
    }
   while ( ! (ch[0] == 0x02 && car_prec == 0x03) ) ;   // Attend code fin suivi de dĂ©but trame tĂ©lĂ©info .

   do
   {
      res = read(device, ch, 1) ;
      if (! res)
      {   
         syslog(LOG_ERR, "Erreur pas de rĂ©ception fin donnĂ©es TĂ©lĂ©info !\n") ;
         close(device);
         exit(1) ;
      }
      ch[1] ='\0' ;
      strcat(message, ch) ;
   }
   while (ch[0] != 0x03) ;            // Attend code fin trame tĂ©lĂ©info.
}

/*------------------------------------------------------------------------------*/
/* Test checksum d'un message (Return 1 si checkum ok)            */
/*------------------------------------------------------------------------------*/
int checksum_ok(char *etiquette, char *valeur, char checksum)
{
   unsigned char sum = 32 ;      // Somme des codes ASCII du message + un espace
   int i ;

   for (i=0; i < strlen(etiquette); i++) sum = sum + etiquette[i] ;
   for (i=0; i < strlen(valeur); i++) sum = sum + valeur[i] ;
   sum = (sum & 63) + 32 ;
   
   //placĂ© ici, permet d'enregistrer le cheksum lu et calculĂ© Ă  chaque fois dans le fichier "/var/log/messages"
   #ifdef DEBUG
      syslog(LOG_INFO, "Checksum lu:%02x   calculĂ©:%02x", checksum, sum) ;
   #endif
   
   if ( sum == checksum) return 1 ;   // Return 1 si checkum ok.
   return 0 ;
}

/*------------------------------------------------------------------------------*/
/* Recherche valeurs des Ă©tiquettes de la liste.            */
/*------------------------------------------------------------------------------*/
int LitValEtiquettes()
{
   int id ;
   erreur_checksum = 0 ;

   for (id=0; id<NB_VALEURS; id++)
   {
      if ( (match = strstr(message, etiquettes[id])) != NULL)
      {
         sscanf(match, "%s %s %s", etiquettes[id], valeurs[id], checksum) ;
         if ( strlen(checksum) > 1 ) checksum[0]=' ' ;   // sscanf ne peux lire le checksum Ă  0x20 (espace), si longueur checksum > 1 donc c'est un espace.
         if ( ! checksum_ok(etiquettes[id], valeurs[id], checksum[0]) )
         {
            //syslog(LOG_ERR, "Donnees teleinfo [%s] corrompues (essai %d) !\n", etiquettes[id], no_essais) ;
            syslog(LOG_INFO, "Donnees teleinfo [%s] corrompues (essai %d) !\n", etiquettes[id], no_essais) ;
            erreur_checksum = 1 ;
            return 0 ;
         }
      }
   }
   // Remplace chaine "HP.." ou "HC.." par "HP ou "HC".
   valeurs[5][2] = '\0' ;
   #ifdef DEBUG
   printf("----------------------\n") ; for (id=0; id<NB_VALEURS; id++) printf("%s='%s'\n", etiquettes[id], valeurs[id]) ;
   #endif
   return 1 ;
}


/*------------------------------------------------------------------------------*/
/* Ecrit les donnĂ©es teleinfo dans base mysql               */
/*------------------------------------------------------------------------------*/
int writemysqlteleinfo(char data[])
{
   MYSQL mysql ;
   char query[255] ;

   /* INIT MYSQL AND CONNECT ----------------------------------------------------*/
   if(!mysql_init(&mysql))
   {
      syslog(LOG_ERR, "Erreur: Initialisation MySQL impossible !") ;
      return 0 ;
   }
   if(!mysql_real_connect(&mysql, MYSQL_HOST, MYSQL_LOGIN,   MYSQL_PWD, MYSQL_DB, 0, NULL, 0))
   {
      syslog(LOG_ERR, "Erreur connection %d: %s \n", mysql_errno(&mysql), mysql_error(&mysql));
      return 0 ;
   }

   sprintf(query, "INSERT INTO %s VALUES (%s)", MYSQL_TABLE, data);

   if(mysql_query(&mysql, query))
   {
      syslog(LOG_ERR, "Erreur INSERT %d: \%s \n", mysql_errno(&mysql), mysql_error(&mysql));
      mysql_close(&mysql);
      return 0 ;
   }
   #ifdef DEBUG
   else syslog(LOG_INFO, "Requete MySql ok.") ;
   #endif
   mysql_close(&mysql);
   return 1 ;
}

/*------------------------------------------------------------------------------*/
/* Ecrit les donnĂ©es teleinfo dans fichier DATACSV            */
/*------------------------------------------------------------------------------*/
void writecsvteleinfo(char data[])
{
        /* Ouverture fichier csv */
        FILE *datateleinfo ;
        if ((datateleinfo = fopen(DATACSV, "a")) == NULL)
        {
      syslog(LOG_ERR, "Erreur ouverture fichier teleinfo %s !", DATACSV) ;
                exit(1);
        }
        fprintf(datateleinfo, "%s\n", data) ;
        fclose(datateleinfo) ;
}

/*------------------------------------------------------------------------------*/
/* Ecrit la trame teleinfo dans fichier si erreur (pour debugger)      */
/*------------------------------------------------------------------------------*/
void writetrameteleinfo(char trame[], char ts[])
{
   char nomfichier[255] = TRAMELOG ;
   strcat(nomfichier, ts) ;
        FILE *teleinfotrame ;
        if ((teleinfotrame = fopen(nomfichier, "w")) == NULL)
        {
      syslog(LOG_ERR, "Erreur ouverture fichier teleinfotrame %s !", nomfichier) ;
                exit(1);
        }
        fprintf(teleinfotrame, "%s", trame) ;
        fclose(teleinfotrame) ;
}


/*------------------------------------------------------------------------------*/
/* Main                              */
/*------------------------------------------------------------------------------*/
int main(int argc, char *argv[])
{
openlog("teleinfo_mysql_v4", LOG_PID, LOG_USER) ;
fdserial = initserie() ;

do
{
   // Lit trame tĂ©lĂ©info.
   LiTrameSerie(fdserial) ;

   time(&td) ;                                     //Lit date/heure système.
   dc = localtime(&td) ;
   strftime(sdate,sizeof sdate,"%Y-%m-%d",dc);
   strftime(sheure,sizeof sdate,"%H:%M:%S",dc);
   strftime(timestamp,sizeof timestamp,"%s",dc);

   #ifdef DEBUG
   writetrameteleinfo(message, timestamp) ;   // Enregistre trame en mode debug.
   #endif
   
   
   if ( LitValEtiquettes() )          // Lit valeurs des Ă©tiquettes de la liste.
   {
      if(strcmp(valeurs[0],"")!=0)  // code ajoutĂ© = lignes 385 Ă  389.
      {
      sprintf(datateleinfo,"'%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s'", timestamp, sdate, sheure, valeurs[0], valeurs[1], valeurs[2], valeurs[3], valeurs[4], valeurs[5], valeurs[6], valeurs[7], valeurs[8], valeurs[9], valeurs[10]) ;
      }
      else
      {
      syslog(LOG_INFO, "pb de lecture de la valeur de ADCO (Ă©tiquette 0)") ;
      for (id=0; id<NB_VALEURS; id++) syslog(LOG_INFO,"%s='%s'\n", etiquettes[id], valeurs[id]) ; // affiche les etiquettes + caleurs si erreur sur etiquette 0
      writetrameteleinfo(message, timestamp) ;   // Enregistre trame
      }
      if (! writemysqlteleinfo(datateleinfo) ) writecsvteleinfo(datateleinfo) ;      // Si Ă©criture dans base MySql KO, Ă©criture dans fichier csv.
      
   }
   
   no_essais++ ;
}
while ( (erreur_checksum) && (no_essais <= nb_essais) ) ;

close(fdserial) ;
closelog() ;
exit(0) ;
}

ce code est un peu adapté par rapport à ce qu'on trouve et je suis encore en train d'analyser les erreurs qui peuvent intervenir donc certaines lignes peuvent être enlevées. Je mettrai une version plus épurée plus tard mais si certains cherchent, celui-ci fonctionne très bien ;)
J'en sors les graphes qu'on voit ici

Voilà donc un système complètement autonome de toute box domotique (merci à Calcipher pour le lien de départ). Pour ceux qui le souhaite, il y a possibilité de récupérer les datas pour afficher dans un Vcontainer sur la vera à l'aide de ce topic mais pas trop le temps de m'attarder là dessus pour le moment (priorité au chauffage ^^)
-- Armony one |freebox v6 |LightManager |intertechno | chacon | galaxy tab 8.9|SmartTv avec wifi --
-- Jeedom sur RPI 2 + clé 3G| Vera Lite (firmware UI5 v1.5.622)+ RFXtrx usb | 6 x Oregon THGR122NX | 1 x capteur ST814 |6 x tête thermostatique Danfos | Thermostat Z-wave programmable | 5 x fibaro FGD-211 | 1 x module AEO_MSEI | 1x FGS211 | 1 x multifonctions AEO_DSB05 | 1 x multifonctions BE_MOLITE | 2 x FGR211 --
-- NAS DS213 | openremote + myvera| teleinfo sur raspberry pi | IpCam Foscam FI9821W-V2 --
nightfever
Dieu de domotique
 
Messages: 394
Inscription: 15 DĂ©c 2012, 16:47
Localisation: Nord

Précédente

Retourner vers Discussions Générales

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 23 invités

Copyright © 2011 - Touteladomotique.com - Tous droits rĂ©servĂ©s
Les blogs partenaires : Abavala, Domo-Blog, Domotique34, Maison et Domotique