Aller au contenu

Teleinfo


mickeys

Messages recommandés

bonjour

je souhaiterais mettre en place le Teleinfo sur un nas synology (ds212j)

j ai récupéré le fichier usbserial.ko et ftdi_sio.ko correspondants a mon processeur.

j ai exécuter le code

knod /dev/ttyUSB0 c 188 0

stty -F /dev/ttyUSB0 1200 sane evenp parenb cs7 -crtscts

wget http://votreserveur/usbserial.ko

wget http://votreserveur/ftdi_sio.ko

insmod usbserial.ko

insmod ftdi_sio.ko

Voir les infos usb

cat /dev/ttyUSB0

j ai bien la trame donc le signal est ok sur le port usb

il faut donc maintenant récupérer le programme en c qui intègre les données en base mysql

- Installation de phpmyadmin via le dsm 4 du nas

- Création de la bdd

j ai récupéré le fichier en .c pour intégrer en base

Mais voici mon probleme !!!!!

Quand j exécute la commande en SSH

/volume1/scripts/teleinfoserial_mysql.c

j ai l erreur suivante:

/volume1/scripts/teleinfoserial_mysql.c: line 1: /bin: Permission denied

/volume1/scripts/teleinfoserial_mysql.c: line 2: /bin: Permission denied

/volume1/scripts/teleinfoserial_mysql.c: line 3: /bin: Permission denied

/volume1/scripts/teleinfoserial_mysql.c: line 4: syntax error: unexpected "("

Que dois je faire ? je ne comprend pas :o

Je me connecte en root

Je pense faire prochainement un petit tuto sur la mise en place complète. :)

cordialement

Modifié par mickeys
Lien vers le commentaire
Partager sur d’autres sites

  • Réponses 55
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans ce sujet

Meilleurs contributeurs dans ce sujet

bonjour

merci

je dois obligatoirement compiler le programme en .c ?

sur mon ancien serveur ( dlink ) je n'ai pas eu besoin de le compiler

c est juste un programme en c que le nas doit exécuter.

je n ai aucun moyen de compiler quoi que ce soit

j ai récupérer les ko grâce a un membre du forum

peut être peut il me le compiler , il a le même nas que moi

Modifié par mickeys
Lien vers le commentaire
Partager sur d’autres sites

Les fichier ".c" sont des sources le "C" n'est pas un langage interprété comme le perl ou le python il faut donc le compiler pour avoir un exécutable sur la plateforme cible quand aux ".ko" ce sont bien des exécutable "objets" du kernel (ca c'est bon !)

Est tu sur que ton fichier ".c" est bien du "C", tu peux nous mettre quelques lignes (le début par exemple)

Patrick

Lien vers le commentaire
Partager sur d’autres sites

Les fichier ".c" sont des sources le "C" n'est pas un langage interprété comme le perl ou le python il faut donc le compiler pour avoir un exécutable sur la plateforme cible quand aux ".ko" ce sont bien des exécutable "objets" du kernel (ca c'est bon !)

Est tu sur que ton fichier ".c" est bien du "C", tu peux nous mettre quelques lignes (le début par exemple)

Patrick


/*	   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];

/*--------------------

(Petit HS)

Histoire de ne pas mourir idiot... c'est quoi le "Teleinfo" ???

http://penhard.anthony.free.fr/?p=207

Les fichier ".c" sont des sources le "C" n'est pas un langage interprété comme le perl ou le python il faut donc le compiler pour avoir un exécutable sur la plateforme cible quand aux ".ko" ce sont bien des exécutable "objets" du kernel (ca c'est bon !)

Est tu sur que ton fichier ".c" est bien du "C", tu peux nous mettre quelques lignes (le début par exemple)

Patrick

ce qui veut dire que si je trouve le script en python cela devrait fonctionner ?

Lien vers le commentaire
Partager sur d’autres sites


/*------------------------------------------------------------------------------*/

/* Ecrit les données teleinfo dans base mysql	 */

/*------------------------------------------------------------------------------*/

int writemysqlteleinfo(char data[])

{

MYSQL mysql ;

char query[255] ;

/* INIT MYSQL AND CONNECT ----------------------------------------------------*/

if(!mysql_init(&mysql))

{

  syslog(LOG_ERR, "Erreur: Initialisation MySQL impossible !") ;

  return 0 ;

}

if(!mysql_real_connect(&mysql, MYSQL_HOST, MYSQL_LOGIN, MYSQL_PWD, MYSQL_DB, 0, NULL, 0))

{

  syslog(LOG_ERR, "Erreur connection %d: %s \n", mysql_errno(&mysql), mysql_error(&mysql));

  return 0 ;

}

sprintf(query, "INSERT INTO %s VALUES (%s)", MYSQL_TABLE, data);

if(mysql_query(&mysql, query))

{

  syslog(LOG_ERR, "Erreur INSERT %d: \%s \n", mysql_errno(&mysql), mysql_error(&mysql));

  mysql_close(&mysql);

  return 0 ;

}

#ifdef DEBUG

else syslog(LOG_INFO, "Requete MySql ok.") ;

#endif

mysql_close(&mysql);

return 1 ;

}

Lien vers le commentaire
Partager sur d’autres sites

ce qui veut dire que si je trouve le script en python cela devrait fonctionner ?

  • si tu trouve un script python qui fasse exactement la meme chose que le programme C que tu nous à montré
  • si tu as installé sur ton Synology une version de Python compatible avec le script
  • si ce python qui dispose de toutes les librairies pythons requises

Ca fait pas mal de "si"" ...

Lien vers le commentaire
Partager sur d’autres sites

je vais demander a la personne qui ma donné les fichier ko si il peut me compiler mon programme

aucune

Ca peut marcher en effet: tu as une version perl de ton application?

pas d autre version , c est une version c trouvé sur le net qui fonctionne tres bien sur mon ancien nas dlink

Lien vers le commentaire
Partager sur d’autres sites

je vais demander a la personne qui ma donné les fichier ko si il peut me compiler mon programme

attention : il est quand même assez mal foutu ce programme, toute la config de connexion mysql est en dur dans le source!

A chaque modif (user, password, nom de la base) va falloir recompiler!

Lien vers le commentaire
Partager sur d’autres sites

effectivement un fichier de config serait mieux

mais bon c est déjà bien d avoir un fichier , même si on peut pas l exécuter :lol:

C'est pire que ce que je pensais: la config du type d'abonnement est *aussi* dans le code!!!



/// 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"} ;

Si tu veux mon avis c'est pas gagné...

Lien vers le commentaire
Partager sur d’autres sites

Bon par contre le code n'a pas l'air très compliqué,

Suffit de trouver quelqu'un ayant acces à ce type d'appareil interfacé avec un serveur linux (pour pouvoir debugger), maitrisant un langage de script type perl ou python, pour te le réécrire sans trop de difficultés.

Modifié par CoolRaoul
Lien vers le commentaire
Partager sur d’autres sites

Je viens de tester le script compile normalement avec le gcc d'ipkg (donc compilation direct sur le nas)... le seul soucis c la librairie mysql mais la gestion de fichier csv devrait marche suffit de taper

gcc -Wall teleinfoserial_mysql.c -o teleinfoserial_mysql

Pour le fun je regardes pour voir ce que cela donne en téléchargant l'api mysql mais cela devrait marcher sans trop de soucis

Lien vers le commentaire
Partager sur d’autres sites

super nouvelle ça merci Sp@ro je vais tester ce soir

Pourquoi dit tu qu'il y a un problème avec la librairie MySQL ?

car le but de ce script est d enregistrer en base mysql .

Bon il est vrais que je peux faire ensuite un script php pour lire les données du csv et les enregistrer en base

cdlt

Lien vers le commentaire
Partager sur d’autres sites

effectivement il n'y a pas les sources de mysql sur le syno ....

J'ai essayé en téléchargent les sources de MYSQL mais cela marche moyennement car je ne sais pas comment configurer le fichier myqsl_version.h.in il faudrait que le je lance le Makefile sur le syno ....

Je vais regarder si il n'y a pas moyen de récupérer ce qu'il faut dans les sources de synology

Sinon je suis entrain de regarder du coté de domogik que je veux installer sur ma raspberrypi (la je galère avec le support de l'IPSEC et du PPTP) et il ce trouve qu'il gère le téléinfo client et vue que domogik c'est fait en python ... je suppose que l'on pourrait extraire cette partie du code de domogik mais je n'ai pas encore regarder ....

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.


×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.