Wiki Linux SMH

   

Flux RSS

Teleinfo

1 - Présentation

La téléinfo est l'utilisation d'un montage électronique branché sur le compteur EDF afin de récupérer les informations du compteur (consommation, etc).

Un tel montage peut être acheté sur ce site : http://teleinfo.dauguet.net/

2 - Recuperation des informations

Les scripts que l'on va utilisé ici viennent de ce site : http://vesta.homelinux.net/mediawiki/index.php/Demodulateur_teleinformation_EDF . Je vous invite plus que vivement à aller le consulter! C'est très instructif.

2.1 - Quel type de montage on utilise ?

Tout d'abord, il faut savoir quel montage vous utilisez afin de connaître le nom du périphérique du point de vue de Linux.

  • port série : /dev/ttyS1
  • port usb : /dev/ttyUSB0

Dans mon cas, j'ai le montage sur port usb. Nous utiliserons donc ici /dev/ttyUSB0 dans la suite.

2.2 - Premier test

Récupérer le fichier Teleinfoserial_csv.c. Editez le pour modifier le périphérique :

...
//#define SERIALPORT "/dev/ttyS0"
#define SERIALPORT "/dev/ttyUSB0"
...

Maintenant, compilez le :

gcc -Wall teleinfoserial_csv.c -o teleinfoserial_csv

Et testons :

$ ./teleinfoserial_csv 
----------------------
ADCO='030928083671'
OPTARIF='HC..'
ISOUSC='45'
HCHP='000809254'
HCHC='000248692'
PTEC='HC'
IINST1=''
IINST2=''
IINST3=''
IMAX1=''
IMAX2=''
IMAX3=''
PMAX=''
PAPP='00660'
HHPHC='D'
MOTDETAT='000000'
PPOT=''
ADIR1=''
ADIR2=''
ADIR3=''

Un fichier est généré également :

$ cat /tmp/teleinfo.csv 
'1254517835','2009-10-02','23:10:35','030928083671','HC..','45','000809254','000248686','HC','','','','','','','','00660','D','000000','','','',''

Bon, maintenant on sait que ça fonctionne ;) Pour la signification exacte des champs, voir le site mentionné plus haut.

2.3 - Stockage en base de données

Récupérez le fichier Teleinfoserial_mysql.c

Adaptez le avec les bons paramètres (périphérique et coordonnées My Sql) :

//#define SERIALPORT "/dev/tts/0"
#define SERIALPORT "/dev/ttyUSB0"

// Define mysql
#define MYSQL_HOST "SQLSERVEUR"
#define MYSQL_DB "BASE"
#define MYSQL_TABLE "TABLE"
#define MYSQL_LOGIN "SQLLOGIN"
#define MYSQL_PWD "SQLPASSWD"

Installons My Sql, le client en ligne de commande et la librairie pour la compilation :

# apt-get install mysql-client mysql-server-5.0 libmysqlclient15-dev

Compilons le programme :

gcc -Wall teleinfoserial_mysql.c -o teleinfoserial_mysql -lmysqlclient

Maintenant, créez la base MySQL. Les informations se trouvent ici : http://vesta.homelinux.net/mediawiki/index.php/Export_donnee_Teleinfo_sur_base_FAI.php#Structure_de_la_table_Teleinfo

Connectez vous à mysql :

$ mysql -u root -p

Créez une base nommée teleinfo et l'utiliser :

CREATE DATABASE teleinfo;
USE teleinfo;

Donner les droits sur la base à notre utilisateur préféré :

GRANT ALL PRIVILEGES ON teleinfo.* TO 'teleinfo'@'localhost' IDENTIFIED BY 'motdepasse';

Désormais on se connectera avec le nouvel utilisateur :

$ mysql -u teleinfo -p

Et on créé la table : Fichier

CREATE TABLE IF NOT EXISTS `teleinfo` (
  `timestamp` bigint(10) NOT NULL default '0',
  `rec_date` date NOT NULL default '0000-00-00',
  `rec_time` time NOT NULL default '00:00:00',
  `adco` varchar(12) character set latin1 collate latin1_general_ci NOT NULL,
  `optarif` varchar(4) character set latin1 collate latin1_general_ci NOT NULL,
  `isousc` tinyint(2) NOT NULL default '0',
  `hchp` bigint(9) NOT NULL default '0',
  `hchc` bigint(9) NOT NULL default '0',
  `ptec` varchar(2) character set latin1 collate latin1_general_ci NOT NULL,
  `inst1` tinyint(3) NOT NULL default '0',
  `inst2` tinyint(3) NOT NULL default '0',
  `inst3` tinyint(3) NOT NULL default '0',
  `imax1` tinyint(3) NOT NULL default '0',
  `imax2` tinyint(3) NOT NULL default '0',
  `imax3` tinyint(3) NOT NULL default '0',
  `pmax` int(5) NOT NULL default '0',
  `papp` int(5) NOT NULL default '0',
  `hhphc` varchar(1) character set latin1 collate latin1_general_ci NOT NULL,
  `motdetat` varchar(6) character set latin1 collate latin1_general_ci NOT NULL,
  `ppot` varchar(2) character set latin1 collate latin1_general_ci NOT NULL,
  `adir1` tinyint(3) NOT NULL default '0',
  `adir2` tinyint(3) NOT NULL default '0',
  `adir3` tinyint(3) NOT NULL default '0',
  UNIQUE KEY `timestamp` (`timestamp`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Et maintenant il ne reste plus qu'à "croner" le script :

* * * * * /home/fritz/domotique/teleinfo/teleinfoserial_mysql >> /tmp/teleinfoserial_mysql.log 2>&1

==Sauvegarde des données==

 
Vous êtes : 38.107.191.86 Dernière modification : 03/10/09 00:12 Propriétaire : Fritz Modifié par : Fritz

Commentaires

Afficher les commentaires
Il n'y a aucun commentaire sur cette page