Export donnee Teleinfo sur base FAI.php

De MicElectroLinGenMet.

Sommaire

Export. des données Téléinfo.

Exemple d'export dans une base MySql chez le FAI free.fr

Cette export est fait à partir des relevées Téléinfo faites sur un Wrt54gl.

Voir page : Interface téléinfo. piloté par un WRT54GL

Description

  • Créer une table teleinfo (voir structure ci-dessous) sur le site http://phpmyadmin.free.fr/phpMyAdmin/ de free.
  • Copie du script PHP ci-dessous sur son site web du FAI (aprés avoir renseigner les login/password/base)
  • Les données Téléinfo. seront sous forme de fichier CSV avec séparateur comme le fichier obtenu avec Teleinfoserial-wrt54gl.c.
  • Le fichier CSV est transféré à partir du Wrt54gl vers le site web perso du FAI avec la commande wput.
  • Le script PHP d'import. des données dans la base du FAI se lance à partir du Wrt54gl avec la comande wget.
  • Le tout se fait à partir du Wrt54gl avec le script shell ci-dessous si le Wrt54gl est bien configuré pour accéder à Internet (IP/Passerelle/DNS).


Le fichier CSV et le script PHP sont dans cet exemple dans la racine du site du FAI.

Script PHP sur site FAI

<?php
/* 
SCRIPT importcsvteleinfobasefai.php
Exemple "brut de fonderie" à adapter, sécuriser ...
*/
		$importfile="teleinfo.csv" ;
 
		$serveur="sql.free.fr"; 
   		$login="LOGIN_FAI";
    		$base="BASE_FAI";
		$pass="PASSWORD_FAI" ;
    		$table="teleinfo";
 
       		mysql_connect($serveur, $login, $pass) or die("Erreur de connexion au serveur");
  		mysql_select_db($base) or die("Erreur de connexion a la base de donnees !\n");
 
		$query="LOAD DATA LOCAL INFILE '$importfile'
				REPLACE INTO TABLE `$table`
				FIELDS TERMINATED BY ',' 
				ENCLOSED BY '\''
				LINES TERMINATED BY '\n'" ;
       		mysql_query($query) or die ("Erreur dans la requète " . mysql_error() .  " !\n"); 
        	echo "OK\n" ;
 
		mysql_close();
?>


Structure de la table Teleinfo

A adapter en fonction de ses besoins.

# Exemple de structure de la table teleinfo à créer chez son FAI:
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;


Exemple de fichier CSV

Obtenu avec le programme Teleinfoserial-wrt54gl.c

'1223717885','2008-10-11','11:38:05','70060936XXXX','HC..','20','8430133','8216484','HP','1','0','1','11','20','19','7470','420','E','000000','00','0','0','0'
'1223717944','2008-10-11','11:39:04','70060936XXXX','HC..','20','8430140','8216484','HP','1','0','1','11','20','19','7470','410','E','000000','00','0','0','0'
'1223718005','2008-10-11','11:40:05','70060936XXXX','HC..','20','8430147','8216484','HP','1','0','1','11','20','19','7470','420','E','000000','00','0','0','0'
'1223718065','2008-10-11','11:41:05','70060936XXXX','HC..','20','8430154','8216484','HP','1','0','1','11','20','19','7470','410','E','000000','00','0','0','0'
'1223718124','2008-10-11','11:42:04','70060936XXXX','HC..','20','8430160','8216484','HP','1','0','1','11','20','19','7470','450','E','000000','00','0','0','0'
'1223718185','2008-10-11','11:43:05','70060936XXXX','HC..','20','8430167','8216484','HP','1','0','1','11','20','19','7470','430','E','000000','00','0','0','0'
'1223718244','2008-10-11','11:44:04','70060936XXXX','HC..','20','8430174','8216484','HP','1','0','1','11','20','19','7470','410','E','000000','00','0','0','0'
'1223718305','2008-10-11','11:45:05','70060936XXXX','HC..','20','8430180','8216484','HP','1','0','1','11','20','19','7470','410','E','000000','00','0','0','0'
'1223718365','2008-10-11','11:46:05','70060936XXXX','HC..','20','8430187','8216484','HP','1','0','1','11','20','19','7470','440','E','000000','00','0','0','0'
'1223718424','2008-10-11','11:47:04','70060936XXXX','HC..','20','8430194','8216484','HP','1','0','1','11','20','19','7470','410','E','000000','00','0','0','0'
'1223718485','2008-10-11','11:48:05','70060936XXXX','HC..','20','8430200','8216484','HP','1','0','1','11','20','19','7470','410','E','000000','00','0','0','0'
'1223718544','2008-10-11','11:49:04','70060936XXXX','HC..','20','8430207','8216484','HP','1','0','1','11','20','19','7470','400','E','000000','00','0','0','0'

Ou généré à partir d'une table 'teleinfo' déjà existante:

SELECT *
INTO OUTFILE '/tmp/teleinfo.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '\''
LINES TERMINATED BY '\n'
FROM `teleinfo`


Import d'un fichier csv dans la table 'teleinfo'

Requête Sql utilisée dans le script PHP pour importer dans la base du FAI.

LOAD DATA LOCAL INFILE 'teleinfo.csv' 
	REPLACE INTO TABLE `teleinfo`
	FIELDS TERMINATED BY ',' 
	ENCLOSED BY '\''
	LINES TERMINATED BY '\n'


Script SHELL sur le WRT54GL

Exemple de script lancé sur le Wrt54gl toutes les heures pour mise à jour base FAI

Lancer en crontab du Wrt54gl:

0 * * * * /jffs/bin/exportcsvsqlfree.sh > /tmp//exportcsvsqlfree.log 2>&1
#!/bin/sh
# Le fichier /tmp/teleinfo.csv est rempli par teleinfoserial lancé en crontab toutes les mn.
#
# Installation package wput sur Wrt54gl avec OpenWrt: => ipkg install wput
# Attention wput renvoie toujours un code '0' même si erreur.
#
# A vérifier sur le site http://phpmyadmin.free.fr/phpMyAdmin/ de free pour voir si la base est à jour. 
#
 
if /usr/bin/wput -u -t 3 /tmp/teleinfo.csv ftp://site.perso:xxxxxxxx@ftpperso.free.fr/teleinfo.csv | grep -q "0K"
then
	RESULT=$(/usr/bin/wget -O - http://site.perso.free.fr/importcsvteleinfobasefai.php)
	if [ "$RESULT" = "OK" ]
	then
		> /tmp/teleinfo.csv
	else
		echo "Erreur import base FAI !"
		echo "Nouvel essai la fois suivante."
		exit 1	
	fi
else
	echo "Erreur transfert fichier CSV !"
	echo "Nouvel essai la fois suivante."
	exit 1	
 
fi
exit 0