/* 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 PC:
- 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:
root@wrt54gl:~# ./teleinfoserial_mysql
----- 2008-10-12 15:59:52 -----
ADCO='70060936xxxx'
OPTARIF='HC..'
ISOUSC='20'
HCHP='008444126'
HCHC='008228815'
PTEC='HP'
IINST1='002'
IINST2='000'
IINST3='001'
IMAX1='011'
IMAX2='020'
IMAX3='019'
PMAX='07470'
PAPP='00610'
HHPHC='E'
MOTDETAT='000000'
PPOT='00'
ADIR1=''
ADIR2=''
ADIR3=''
*/
//-----------------------------------------------------------------------------
#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/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"
#define MYSQL_HOST "localhost"
#define MYSQL_DB "******"
#define MYSQL_TABLE "******"
#define MYSQL_LOGIN "******"
#define MYSQL_PWD "******"
// Fichier local au Wrt4gl/PC + fichier trame pour debug.
#define DATACSV "/tmp/teleinfosql.csv"
#define TRAMELOG "/tmp/teleinfotrame."
// Active mode debug.
//#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 20
//char etiquettes[NB_VALEURS][16] = {"ADCO", "OPTARIF", "ISOUSC", "HCHP", "HCHC", "PTEC", "IINST1", "IINST2", "IINST3", "IMAX1", "IMAX2", "IMAX3", "PMAX", "PAPP", "HHPHC", "MOTDETAT", "PPOT", "ADIR1", "ADIR2" ,"ADIR3"} ;
char etiquettes[NB_VALEURS][16] = {"ADCO", "OPTARIF", "ISOUSC", "HCHP", "HCHC", "PTEC", "IINST", "IINST2", "IINST3", "IMAX", "IMAX2", "IMAX3", "PMAX", "PAPP", "HHPHC", "MOTDETAT", "PPOT", "ADIR", "ADIR2" ,"ADIR3"} ;
// Fin Constantes/variables à changées suivant abonnement.
char valeurs[NB_VALEURS][18] ;
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];
/*--------------------
http://penhard.anthony.free.fr/?p=207
ce qui veut dire que si je trouve le script en python cela devrait fonctionner ?