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/
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.
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.
Dans mon cas, j'ai le montage sur port usb. Nous utiliserons donc ici /dev/ttyUSB0 dans la suite.
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.
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==