[***] Téléinfo - Linux & PHP

Solution à base d'un PC et d'un logiciel (Misterhouse, Domotiga, Heyu, etc). Vous trouverez ici de l'aide pour installer, configurer ou développer des scripts sur ces logiciels. Les principaux langages sont Perl, Java, Shell Unix, Php, etc

Re: Téléinfo - Linux & PHP

Messagede Morsure » 19 Avr 2013, 15:06

Merci Ă  tous, j'avance beaucoup grace Ă  ce sujet!

Encore quelques points bloquants mais ca avance...

Je suis parti du script retravaillé de Dujack pour l'adapter à mes besoins.

Donc partie téléinformation/réception et affichage par ttyAMA0 --> OK
Sauvegarde de la téléinformation sur csv --> OK
Sauvegarde sur la BDD mysql --> NOK

Je vois qu'il y a des infos qui sont sensées être envoyé vers syslog lors de l'éxécution de ce script si erreur. Savez vous vers où elles sont envoyées?

Merci bcp!

Vive la démocratisation de la Domo grace à la Framboise!
Morsure
Membre un peu timide !
 
Messages: 3
Inscription: 16 Avr 2013, 19:02

Re: Téléinfo - Linux & PHP

Messagede lolo1878 » 19 Avr 2013, 17:20

Le repertoire du syslog est
/var/log


Si tu as un abonnement de base sans HP HC, je veux bien voir ton code, car mon pb n'est pas résolu.
lolo1878
Guru de domotique
 
Messages: 125
Inscription: 16 Mar 2007, 15:32

Re: Téléinfo - Linux & PHP

Messagede Morsure » 19 Avr 2013, 19:00

Sorry lolo1878, j'ai un abonnement HPHC... Je ne peux pas t'aider sur ce coup là, par contre il me semble que ca ne doit pas bcp varié, il te faut juste prendre les valeurs que tu récupères dans ton cat et les définir dans ton code.

Mais je suppose que tu as fait cette partie.
Morsure
Membre un peu timide !
 
Messages: 3
Inscription: 16 Avr 2013, 19:02

Re: [***] Téléinfo - Linux & PHP

Messagede lolo1878 » 30 Avr 2013, 20:36

Pour avancer sur mon pb, je cherche a faire une trace pour récuperer les valeurs de "i"(etiquette et valeur) dans mes deux boucles "for".
Je n'y arrive pas.
Quelqu'un peut-il m'aider ?

Code: Tout sélectionner
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 ;
   if ( sum == checksum) return 1 ;   // Return 1 si checkum ok.
   #ifdef DEBUG
      syslog(LOG_INFO, "Checksum lu:%02x   calculĂ©:%02x", checksum, sum) ;
   #endif   
   return 0 ;
lolo1878
Guru de domotique
 
Messages: 125
Inscription: 16 Mar 2007, 15:32

Re: [***] Téléinfo - Linux & PHP

Messagede Dujack » 02 Mai 2013, 12:54

Salut,

Ajoutes ces deux lignes juste avant "return 0"

printf ("%s\n", etiquette);
printf ("%s\n", valeur);

Les valeurs contenues dans chaque tableau apparaitrons dans la console Ă  partir de laquelle tu lances ton fichier executable
Dujack
Membre Actif
 
Messages: 15
Inscription: 10 FĂ©v 2013, 22:08

Re: [***] Téléinfo - Linux & PHP

Messagede lolo1878 » 14 Mai 2013, 17:40

Merci Dujack

Je n'arrive pas a comprendre les erreurs de lecture !!!
lolo1878
Guru de domotique
 
Messages: 125
Inscription: 16 Mar 2007, 15:32

Re: [***] Téléinfo - Linux & PHP

Messagede lolo1878 » 21 Mai 2013, 19:25

Grâce a Dujack et a MOI641 du site chaleurterre.com ma téléinfo fonctionne enfin.
Pour info MOI641 a réalisé un super tuto sur la teleinfo avec des graphiques.

Pour ceux comme moi qui sont avec un abonnement de BASE voici la solution.
DĂ©claration des etiquettes
char etiquettes[NB_VALEURS][9] = {"ADCO", "OPTARIF", "ISOUSC", "BASE", "PTEC", "IINST", "IMAX", "PAPP", "MOTDETAT"} ;


en suite il faut modifier la fonction LitVarEtiquttes comme suit
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) ;
strcpy ((char *)message, match);
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) ;
erreur_checksum = 1 ;
return 0 ;
}

}

}
// Remplace chaine "HP.." ou "HC.." par "HP ou "HC".
valeurs[4][2] = '\0' ;

return 1 ;
}


Encore un grand merci a eux deux.
lolo1878
Guru de domotique
 
Messages: 125
Inscription: 16 Mar 2007, 15:32

Re: [***] Téléinfo - Linux & PHP

Messagede dimi10 » 20 Nov 2013, 21:37

Bonjour,
J'ai retravaillé la version précédence du programme en C car le temps de réponse était trop important et pouvait généré des problèmes de timeout du serveur web. De plus il n'acceptait pas d'être appelé par deux instances différentes.
Cette nouvelle version ne met plus a jour la bdd Mysql, un cron s'en charge.
La téléinfo est maintenant disponible dans deux pseudo fichier en ramdisk
un demon est créé, il est lancé au boot via un script dans init.d
Il tourne depuis deux mois sur mon Raspberry sans le moindre plantage
une nouvelle version est à l’essai, elle supprime des valeurs nulles dans les champs en cas d'erreur non détectée par le checksum et ne fait plus appel à la library wiringPi
Code: Tout sélectionner
/*
//teleinfo.c

Crée un démon qui lis les teleinfo sur compteur EDF ou PAC et les copie dans deux fichiers en ramdsik sur un RASPBERRY PI
Ce choix a été fait sachant que les carte SD supportent pas trop des cycles d'ecritures répétés
Ce code est en grande partie issus: de http://vesta.homelinux.free.fr/site/wiki/teleinfoserial_mysql.html
      et pour le code du daemon: http://www.thegeekstuff.com/2012/02/c-daemon-process/
Soyez indulgent avec mes modifications, je n'ai jamais fait de C++ je viens de l'assembler et du Pascal....

Pour le raspberry en tilisant /dev/ttyAMA0
   1°      supprimer dans /boot/cmdline.txt  console=ttyAMA0,115200 kgdboc=ttyAMA0,115200
   2°   commenter dans /etc/initab #T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
   3° reboot
2 GPIO sont utilisé pour selection 1 des deux compteurs
inutile de configurer ttyAMA0, le programme s'en charge


Compilation : 
gcc -Wall /home/dimi/c++_src/teleinfo.c -o /opt/share/bin/teleinfo -lwiringPi
pour debugger: ajouter -g
*/
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <time.h>
#include <syslog.h>
#include <termios.h>
#include <signal.h>
#include <sys/fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
//installer les bibliothèques WiringPi :https://projects.drogon.net/raspberry-pi/wiringpi/download-and-install/
#include <wiringPi.h>

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

// fichier trame pour debug.

#define TRAMELOG "trame_log.csv"
#define FICHIER_EDF "/dev/ramdisk/trame_EDF.csv"
#define FICHIER_PAC "/dev/ramdisk/trame_PAC.csv"
// Activer mode debug.
//#define DEBUG
#define SYSLOG
//-----------------------------------------------------------------------------
// 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 datateleinfo1[256] ;
char datateleinfo2[256] ;
#define NB_VALEURS 17
char etiquettes[NB_VALEURS][17] = {"ADCO", "OPTARIF", "ISOUSC", "HCHP", "HCHC", "PTEC", "IINST1", "IINST2", "IINST3", "IMAX1", "IMAX2", "IMAX3", "PMAX", "PAPP", "HHPHC", "MOTDETAT", "PPOT"} ;
// info                                0        1             2        3       4      5         6        7         8         9         10      11      12      13       14       15         16       17
char    valeurs[NB_VALEURS][18] ;
char    checksum[255] ;
int    res ;
int   no_essais = 1 ;
int   nb_essais = 3 ;
int   erreur_checksum = 0 ;
typedef int bool;
enum { false, true };
int    debug = 0;
int    boucle = 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)
      {   
         #ifdef DEBUG
            printf("Erreur pas de rĂ©ception dĂ©but donnĂ©es TĂ©lĂ©info !\n") ;
         #endif
         #ifdef SYSLOG
            syslog(LOG_ERR, "Erreur pas de rĂ©ception dĂ©but donnĂ©es TĂ©lĂ©info !\n") ;
         #endif
         
         //close(device);
         return;
         //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)
      {   
         #ifdef DEBUG
            printf("Erreur pas de rĂ©ception fin donnĂ©es TĂ©lĂ©info !\n") ;
         #endif
         #ifdef SYSLOG
            syslog(LOG_ERR, "Erreur pas de rĂ©ception fin donnĂ©es TĂ©lĂ©info !\n") ;
         #endif
         return;         
      }
      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 ;
   if ( sum == checksum) return 1 ;   // Return 1 si checkum ok.
   else
   #ifdef DEBUG
      printf("Checksum lu:%02x   calculĂ©:%02x", checksum, sum) ;
   #endif
   #ifdef SYSLOG
      no_essais++;
      syslog(LOG_INFO, "label:%s   Checksum lu:%02x   calculĂ©:%02x    no_erreurs:%02x",etiquette, checksum, sum, no_essais) ;
   #endif
   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]) )
         {
            #ifdef DEBUG
               printf("Donnees teleinfo [%s] corrompues !\n", etiquettes[id]);
            #endif
            #ifdef SYSLOG
               syslog(LOG_INFO, "Donnees teleinfo [%s] corrompues  !\n", etiquettes[id]) ;
            #endif
            erreur_checksum = 1 ;
            return 0 ;
         }
      }
   }
   
   // Remplace chaine "HP.." ou "HC.." par "HP ou "HC".
   valeurs[5][2] = '\0' ;
   return 1 ;
}

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


int file_exist(char *fichier)
{
   struct stat buf;
   if (stat ( fichier, &buf ) == 0) return (1); else return (0);
}

void cree_lock_file(int pid)
{
      /* creation d'un verrou */
      FILE *pid_file;
      if ((pid_file = fopen("/dev/ramdisk/teleinfo.pid","w")) == NULL)
      {
      #ifdef DEBUG
         syslog(LOG_INFO, "Erreur ouverture fichier teleinfo.pid!") ;
      #endif
      }
      fprintf(pid_file, "%u\n", pid) ;
      fclose(pid_file) ;
}

void remove_lock_file(char *fichier)
{
  if( unlink( fichier ) != 0 )
    perror( "Error deleting file" );
  else
    puts( "File successfully deleted" );
}

int read_lock_file() //retourne 0 (false) si pas de fichier ou le pid si existant
{
   pid_t pid = 0;
   FILE *fp = fopen("/dev/ramdisk/teleinfo.pid", "r");
   if (!fp) return (0);
   if (fscanf(fp, "%d\n", &pid) != 1) return (0);
   fclose(fp);
   return (pid);
}

/*------------------------------------------------------------------------------*/
/* Main                              */
/*------------------------------------------------------------------------------*/
//declaration param ligne commande
int main(int argc, char *argv[])
{

if (file_exist("/dev/ramdisk/teleinfo.pid"))
   {
        if (argc > 1) // faire un test sur argv[1] inexistant => plantage segmentation
      {   
         if(strcmp(argv[1],"-rmlock")==0)
         {
            remove_lock_file("/dev/ramdisk/teleinfo.pid");
            //kill(read_lock_file(), SIGKILL);
            exit (0);
         }
      }
      else
      {
         printf("Une seule instance de teleinfo possible \n");         
         exit(1);
      }
   }  // if (lock_file_exists())
   
if (wiringPiSetup() == -1)      exit (1);
debug = false;
boucle =true;

if (argc > 1) // faire un test sur argv[1] inexistant => plantage segmentation
{
   if(strcmp(argv[1],"-h")==0)
   {

      printf("programme teleinfo: cree 2 fichiers csv dans /dev/ramdisk/ contenant dans l'ordre les valeurs suivantes:\n");
      printf("unixtimestamp date time HCHP HCHC PTEC IINST1 IINST2 IINST3 IMAX1 IMAX2 IMAX3 PMAX PAPP\n");
      printf("paramètres: sans argument mode boucle \n");      
      printf("      -DEBUG,  \n");      
      printf("      -DEBUG1, (one shot) \n");
      printf("      -d, mode deamon \n");
      printf("      -rmlock, kill deamon and remove lockfile \n");
      return (1);
   }
   if(strcmp(argv[1],"-DEBUG1")==0)
   {
      printf("mode one shot debug \n") ;
      boucle = false;
      debug = true;
   }
   if(strcmp(argv[1],"-DEBUG")==0)
   {
      printf("mode debug \n") ;
      boucle = true;
      debug = true;
   }   
   if(strcmp(argv[1],"-d")==0)
   {
      //*******   creation du deamon
      pid_t process_id = 0;
      pid_t sid = 0;
      // Create child process
      process_id = fork();
      // Indication of fork() failure
      if (process_id < 0)
      {
         printf("fork failed!\n");
         // Return failure in exit status
         exit(1);
      }
      // PARENT PROCESS. Need to kill it.
      if (process_id > 0)
      {
      #ifdef DEBUG
         printf("process_id of child process %d \n", process_id);
      #endif
      // return success in exit status
      exit(0);
      }
      //unmask the file mode
      umask(0);
      //set new session
      sid = setsid();
      if(sid < 0)
      {
         // Return failure
         exit(1);
      }
   }
}
//************** init du daeps -aux
   #ifdef DEBUG
      printf("teleinfo compilĂ© avec debug: affiche les erreurs port serie et checksum  \n") ;
   #endif
   #ifdef SYSLOG
      syslog(LOG_INFO, "teleinfo daemon started pid: %d", getpid()) ;
      printf("teleinfo compilĂ© avec SYSLOG: erreurs port serie et checksum + log dans syslog \n") ;
   #endif
   cree_lock_file(getpid());

   //set pin 0 et 1 output mode
   pinMode (0, OUTPUT);
   pinMode (1, OUTPUT);
   fdserial = initserie() ;
do
{
   // Lit trame tĂ©lĂ©info EDF
   digitalWrite (0, 1);
   digitalWrite (1, 0); 
   LiTrameSerie(fdserial) ;
   if ( LitValEtiquettes() )          // Lit valeurs des Ă©tiquettes de la liste.
   {
      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);
      sprintf(datateleinfo1,"%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s",timestamp, sdate, sheure, valeurs[3], valeurs[4],valeurs[5],valeurs[6], valeurs[7],valeurs[8],valeurs[9],valeurs[10],valeurs[11],valeurs[12], valeurs[13]) ;
      writecsvteleinfo(datateleinfo1,FICHIER_EDF) ;
   }
   // Lit trame tĂ©lĂ©info PAC
   digitalWrite (0, 0);
   digitalWrite (1, 1); 
   LiTrameSerie(fdserial) ;
   if ( LitValEtiquettes() )          // Lit valeurs des Ă©tiquettes de la liste.
   {
      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);
      sprintf(datateleinfo2,"%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s",timestamp, sdate, sheure, valeurs[3], valeurs[4],valeurs[5],valeurs[6], valeurs[7],valeurs[8],valeurs[9],valeurs[10],valeurs[11],valeurs[12], valeurs[13]) ;
      writecsvteleinfo(datateleinfo2,FICHIER_PAC) ;
   }

   if (debug)
   {
      printf("EDF %s \n", datateleinfo1);
      printf("PAC %s \n", datateleinfo2);
   }             
}
while (file_exist("/dev/ramdisk/teleinfo.pid")) ;
close(fdserial) ;
closelog() ;
//deconnecte la liaison serie
digitalWrite (0, 1);
digitalWrite (1, 1);
if (file_exist("/dev/ramdisk/teleinfo.pid")) remove_lock_file("/dev/ramdisk/teleinfo.pid");
exit(0) ;
}

Voici le code php lancé par le cron, (il faut php cli) je sais ne n'est pas joli de faire en php ce qu'il est possible de faire en bash mais c'est par facilité pour moi
Code: Tout sélectionner
#!/usr/bin/php
#write_edf_Mysql.php
#lecture des données téléinfo EDF et les ecrit dans la bdd
<?php
$server="192.168.1.???"; //Entrez le nom de votre serveur MySQL
$user="???"; //Entrez votre identifiant MySQL
$password="???"; //Entrez votre mot de passe MySQL
$bdd="???"; //Choisissez le nom de votre base
//error_reporting (5);
// ----- FIN DES VARIABLES A MODIFIER -----
$mysql_link=mysql_connect("$server","$user","$password")
    or die("Impossible de se connecter : " . mysql_error());
//echo "Connexion réussie \n";

$db_selected = mysql_select_db("$bdd",$mysql_link);
if (!$db_selected) {
   die ('Impossible de sĂ©lectionner la base de donnĂ©es :\n ' . mysql_error());
}

$data_compteur = file_get_contents('/dev/ramdisk/trame_EDF.csv');
$data_compteur = rtrim($data_compteur);
$tbl_compteur = explode( ",", $data_compteur);

$sql = "INSERT INTO `EDF` (`timestamp`,`rec_date`,`rec_time`,`hchp`, `hchc`, `inst1`, `inst2`, `inst3`, `imax1`, `imax2`, `imax3`, `pmax`, `papp`)
   VALUES ($tbl_compteur[0],'$tbl_compteur[1]','$tbl_compteur[2]',$tbl_compteur[3],$tbl_compteur[4],$tbl_compteur[6],$tbl_compteur[7],$tbl_compteur[8],$tbl_compteur[9],$tbl_compteur[10],$tbl_compteur[11],$tbl_compteur[12],$tbl_compteur[13] )";
echo $sql;
$result =mysql_query($sql);
if (!$result) {
   echo 'Impossible d\'exĂ©cuter la requĂŞte : ' . mysql_error();
   exit;}
?>

pour le hardware qui permet de relevé sur 2 compteurs:
pour récupérer le schéma en PDF: https://sites.google.com/site/tatayet38 ... o_rasp.pdf
ou le source en Dia: https://sites.google.com/site/tatayet38 ... o_rasp.dia
Dernière édition par dimi10 le 23 Nov 2013, 11:18, édité 1 fois.
Nas Synology ds106 avec ipkg
Raspberry pi controle alarme station météo chauffage simulation présence
ipx800 v2
réseau Ethernet sans wi-fi
Ow-server
Squeezebox
pas de windows ni de mac
dimi10
P'tit Guru de domotique
 
Messages: 52
Inscription: 04 FĂ©v 2012, 12:02

Re: [***] Téléinfo - Linux & PHP

Messagede Mayeric » 23 Nov 2013, 09:33

Quel timing ! Ayant enfin câblé la sortie teleinfo de mes trois compteurs (EDF, chauffage general, Chaudière) jusqu'a mon armoire informatique, je vais m'atteler au décodage teleinfo que je comptais baser sur raspberry et les infos de ce fil (merci dimi10 pour ce partage !!).

Avant de me lancer dans le détail du code de dimi10 (mes souvenirs informatiques sont lointains ;-) ), juste qqs questionnement:
- d'autres forums parlent de montage de teleinfo sur base Arduino... quel intérêt respectif de partir plutôt sur arduino ou sur raspi ? (J'ai un arduino un ds un tiroir et un raspi en production - serveur web principal de ma domotique + base SQL de températures.
- je ne connais pas les deamons... a qoi cela sert-il ?

Merci !
Mayeric
P'tit Guru de domotique
 
Messages: 92
Inscription: 08 Oct 2012, 09:58

Re: [***] Téléinfo - Linux & PHP

Messagede nightfever » 23 Nov 2013, 10:05

salut,

ce topic a été basé sur le module dauget que je n'ai plus trouvé à la vente (1er post).
pour info, je me suis tourné vers une autre solution à base d'un raspberry pi (comme tu le souhaites) mais avec un montage qui vaut rien et ça fonctionne parfaitement.
c'est ici => Teleinfo EDF
Si ça peut t'aider...
-- 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: [***] Téléinfo - Linux & PHP

Messagede dimi10 » 23 Nov 2013, 11:26

Bonjour,
Un daemon est un programme lancé en général lors du boot et qui tourne en arrière plan. Il fournit dans ce cas un "service" qui consiste à fournir un pseudo système de fichier contenant les données téléinfo.
Il faut quand même être conscient qu'avec un RPI on est pas dans le "clic clic tout de suite" il faudra se plonger dans le système d'exploitation Linux, comprendre un peu et compiler sois même le programme.
Je vais bientĂ´t mettre en ligne une nouvelle version qui ne fait plus appel Ă  des library non standard et de ce fait plus facile Ă  compiler pour les novices (dont je fais aussi partie)
Nas Synology ds106 avec ipkg
Raspberry pi controle alarme station météo chauffage simulation présence
ipx800 v2
réseau Ethernet sans wi-fi
Ow-server
Squeezebox
pas de windows ni de mac
dimi10
P'tit Guru de domotique
 
Messages: 52
Inscription: 04 FĂ©v 2012, 12:02

Re: [***] Téléinfo - Linux & PHP

Messagede Mayeric » 01 DĂ©c 2014, 18:29

Bonjour,

Après une pose dans mon installation, liée en particulier à la "mort" (corruption) de la carte SD de mon Raspi (qui a emporté avec lui toutes mes données de températures!! ;-( ), je me penche à nouveau sur le sujet... y a-t-il eu des nouvelles ou mise à jour depuis ce dernier post ?

Mayeric
Mayeric
P'tit Guru de domotique
 
Messages: 92
Inscription: 08 Oct 2012, 09:58

PrécédenteSuivante

Retourner vers Logiciel - Les autres logiciels pour la domotique

Qui est en ligne

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

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


cron