43

Teleinfo Broadcast comptatible avec Emoncms

Dans un précédent billet je présentais un petit programme que j’avais écrit pour envoyer les informations reçues via la téléinformation vers une base mySQL ou en diffusion sur le réseau. Un autre post détaillait la procédure pour faire fonctionner le tout sur un Raspberry PI.

Nouveautés

J’ai modifié le programme et y ai ajouté quelques fonctionnalités intéressantes décrites ci dessous :

  • la possibilité de remonter les informations reçues vers une passerelle emoncms (locale ou distante)
  • Utilisation d’un fichier de config pour éviter les lignes de commande à rallonge
  • Remonté sur Emoncms uniquement les données modifiées afin d’optimiser la base Emoncms
  • Utilisation massives de statistiques par le daemon, affichable via l’envoi d’un signal

Installation

L’installation nécessite certains packages en fonction de si vous souhaitez avoir ou non la publication des données dans une base mySQL et/ou emoncms. Prenez la main sur votre machine linux (j’ai fait ce tutoriel sur un raspberry Pi avec la dernière raspbian, en fonction de votre système le nom des packages peut changer).

Installation des dépendences :

Récupération des sources et compilation

Par défaut le programme se trouve maintenant dans /usr/local/bin avec les fonctions mySQL et emoncms disponibles. Vous pouvez changer cela dans le fichier Makefile, la procédure est commenté dans le fichier.

Si c’est votre 1ere installation veuillez copier le fichier de configuration dans /etc/

 Utilisation du programme

La configuration du programme peut se faire directement en le lancant avec les bons arguments sur la ligne de commande, mais vu tous les paramètres cela peut vite devenir contraignant donc j’ai ajouté la possibilité d’utiliser le fichier de configuration.

Le fichier de configuration contient les valeurs par défaut, mais celles-ci peuvent être modifiées par la ligne de commande. En effet la configuration passée par la ligne de commande est toujours prioritaire sur le fichier de configuration.

Lorsque le programme teleinfo est lancé il va chercher sa configuration dans le fichier de configuration, donc lors de votre 1ere installation veuillez editer le fichier /etc/teleinfo.conf

Voici un exemple de configuration

Une fois le fichier renseigné, passons au 1er test. Attention, il faut être sur la machine sur laquelle est connectée la téléinfo en liaison série pour ce test. Dans les exemples suivants, mySQL et emoncms sont désactivés dans le fichier de config (mySQL=0 et emoncms=0) mais les paramètres associés correctement renseignés.

N’hésitez pas à lancer l’aide en ligne (enfin aide est un bien grand mot dans le cas présent)

 

 

Lancez la commande suivante

Vous devriez voir alors ce qui arrive par la liaison série comme ci dessous

Pressez Ctrl-c pour quitter (cela peut prendre 1 à 2 seconde), vous allez alors voir les statistiques

Bon, c’est bien joli, çà fonctionne mais ne fait pas grand chose, nous allons donc lancer le mode send (sans deamon) ultra simple mais avec affichage. Il va lire sur la liaison série et envoyer les informations sur le réseau.

 

Ok çà fonctionne, mais comment ? les stats sont fausses ? Non c’est normal comme dans ce mode il ne fait rien, aucune vérification sur les trames reçues n’est effectuée, elle arrive sur le port série elle repart sur le réseau. C’est le client réseau qui se chargera du décodage. Si nous avions activé par exemple emoncms, les stats auraient été plus complètes.

Maintenant, la même chose en mode daemon, c’est la dernière fois qu’on le lance dans ces exemples. Tous les suivants s’appuieront sur celui-ci qui tourne maintenant en mode serveur.

Et voila on retrouve la main, mais marche-t-il vraiment ? Ok on va vérifier cela en demandant l’affichage des stats. Pour celà nous allons envoyer le signal SIGUSR1 au daemon comme ci dessous :

PS : Attention si vous fermez la console entre temps, l’affichage des stats ne se fera plus dans le terminal, vous verrez les informations dans le syslog (et bien d’autres) en faisant un

Reprenons, le serveur envoi bien des trames, et si nous testions le client ?

Tiens si je mettais un script toutes les 5 minutes attendant une trame et m’envoyant les données dans une base mySQL puis se finisse tout seul ? Ok, on teste la commande déjà (et le fichier de config bien renseigné sur la partie mySQL). Avec un -v (verbose) pour voir ce qui se passe pour tester et enfin le switch -q pour envoyer vers mySQL

 

Et voilà parfait çà fonctionne, on le voit dans les stats, bon maintenant essayons la même chose avec emoncms. Le switch -q est donc remplacé par le -e

 

çà fonctionne, les stats indiquent bien le post OK sur emoncms. Mais je veux que sur emoncms ce soit en temps réel, donc deux choix s’offre à moi, ajouter le switch -e (emoncms) au lancement du 1er daemon (celui qui écoute sur la serial et broadcast sur le réseau) mais je n’ai pas retenu cette solution pour un choix tout à fait personnel et arbitraire. J’ai lancé sur une autre machine la commande de l’exemple précédent en y ajoutant de switch -d (daemon).

Voilà, les exemples décris ici sont vraiment donnés à titre indicatif pour vous permettre de voir un peu comment le programme fonctionne mais les nombreuses possibilités font que vous devriez pouvoir vous sortir de n’importe quelles contraintes avec ce programme. N’oubliez pas le switch –help qui vous donnera un peu d’aide.

Applications

Les applications possibles sont très nombreuses, je laisse votre imagination faire. Personnellement, j’ai un daemon sur un Raspberry PI + une carte ArduiPi près du compteur EDF qui tourne et qui envoi les trames sur le réseau. Sur la même machine, toutes les 5 minutes j’envoi les données vers une base mySQL à l’aide d’un crontab.

Avec cette configuration, sur une machine distante, un autre daemon écoute et envoi les données reçues vers une passerelle emoncms. Pourquoi 2 daemon sur 2 machines, très simple, je voulais tester la nouvelle version de mon programme sans interférer avec l’ancienne. çà tourne depuis avril 2014 sans le moindre soucis. De plus celà me permet de laisser la machine qui gère la liaison série a ses petites affaires et je peux tester de n’importe ou sans rien “casser”, même vérifier si tout fonctionne correctement. Je trouve cette solution vraiment efficace et simple.

Voilà ce que ca donne au niveau d’Emoncms lors de la remonté d’information, on voit bien que seules les données modifiées sont rafraîchies.

Données Teleinfo sur Emoncms

Données Teleinfo sur Emoncms

Enfin histoire de faire quelques autres tests, sur une autre machine distante, je fais tourner un node-red qui écoute sur le réseau les trames UDP envoyée par le 1er daemon pour les afficher dans le serial debug (souvenez vous, le port 1200 est le port UDP sur lequelles sont envoyées les trames réseaux)

Données Teleinfo avec Node-Red

Données Teleinfo avec Node-Red

J’adore Node-Red et je crois que je vais m’y mettre très sérieusement, c’est tellement simple de gérer les Objets de l’Internet avec.

Je savais qu’un jour broadcaster les données de téléinfo sur mon réseau local me permettrait de le récupérer depuis n’importe quelle machine pour en faire ce dont j’ai besoin. D’ailleurs, je pense que mes sondes de températures vont suivre le même chemin, bien qu’elles soient déjà sur Emoncms par un autre biais (fhem)

Si vous souhaitez avoir de l’aide ou des information concernant le programme teleinfo broadcast, n’hésitez pas à laisser un commentaire.

 Références

  • Le code source est disponible sur mon github dans le repository teleinfo
  • Site très intéressant de Play With Free
  • Vesta Home Linux, site de ma première source d’inspiration quand j’ai écrit la 1ere version. Le modèle de la base de données DbiTeleinfo provient de là mais curieusement je n’ai pas trouvé sur le net le script de création de la base, je vous donne le mien (attention version monophasée)

 

 

Charles

Charles

43 Comments

  1. Bonjour,

    Merci pour votre travail, je rencontre tout de meme quelques problemes avec l’utilisation de votre programme :

    Quand je le lance en mode test sur la machine que possede l’interface de teleinfo j’ai bien les information qui s’affichent dans la console et les enregistement MySQL qui fonctionne.

    Par contre si je lance le programme en serveur j’ai bien la lecture des informations (je supose que le deamon fonctionne correctement) par contre quand j’essai en reception que cela sois sur la meme machine ou sur une autre machine du reseau. Je me retrouve en timeout et aucune donnée reçu.

    Pouvez vous m’apporté votre aide ?

    Christophe

    • Bonjour Christophe,

      Si le daemon fonctionne correctement peut être que le problème vient du réseau, dans le fichier de configuration /etc/teleinfo.conf est ce que l’entrée suivante
      network = 192.168.1.255
      correspond à votre réseau ? je suis chez Free et par defaut le réseau est est 192.168.1.x mais peut être que le votre est différent, si vous faites un ifconfig sur la machine qui possède le daemon teleinfo quelle est son adresse IP ?
      si votre réseau est par exemple 192.168.0.x il faudra alors mettre l’entrée network à :
      network = 192.168.0.255

      Charles

  2. Bonjour,

    J’ai modifié votre script pour mes besoins personnels en ajoutant la possibilité de stocker la trame Teleinfo courante dans un fichier afin de pouvoir être lu par plusieurs programmes en même temps.

    Si cela vous intéresse, je peux vous envoyer les sources.

    Frédéric

  3. Bonjour,

    Bravo pour le travail effectué !

    Je rencontre une difficulté avec le fonctionnement le deamon en mode serveur : teleinfo -m s -d.
    Le service démarre normalement, des infos sont reçues par Emoncms (2 ou 3 trames) puis le service “s’embale” jusqu’à prendre 80 % de l’utilisation CPU du raspberry et les envois ne sont plus reçus par Emoncms…

    Auriez vous une idée de la cause de ce constat ?

    Merci

    Romary

    • Bonjour Romary et merci pour le commentaire.
      J’ai déjà rencontré ce type de problème (pas avec le programme téléinfo mais avec d’autres) en liaison avec la serial du Pi.
      Tout d’abord, comment est connectée votre téléinfo sur le Pi (d’ailleurs c’est un Pi V1 ou V2) ? Avec un plug USB, directement sur le serial avec une interface, avec une ArduiPi ?
      Afin de pouvoir commencer quelques investigations et d’essayer de voir d’où provient le soucis, je vous propose de faire les tests suivant :
      – Lancez uniquement le programme en mode console (pas de deamon) avec la commande suivante teleinfo -m s, que s’affiche-t-il à l’écran ?
      – Si le programme s’emballe toujours, faire la même chose mais sans l’envoi vers emoncms juste histoire de voir si cela provient de l’envoi ou non.

      Par ailleurs, je sais d’expérience qu’avec un PI bien chargé, parfois la serial ne répond pas très bien non plus. Il est aussi possible que çà s’emballe parce que le buffer est bien rempli avant le lancement et alors çà déroule toutes les trames du buffer jusqu’à revenir à une vitesse normale. Du coups çà s’emballe longtemps ou çà revient à la normale après ?
      Je vais voir si je peux flusher le buffer série juste après l’ouverture dans le programme, çà sera une sécurité supplémentaire.
      Charles

  4. Bonjour Charles-Henri,

    Merci pour le retour,

    Mon Pi est un V2 avec un Shield RPIDOM Lite pour récupérer les trames de téléinfo.

    Après un reboot, si je lance : teleinfo -m s
    j’obtient : FATAL: tlf_init_serial /dev/ttyS0: No such file or directory

    Je suis obligé à chage reboot de lancer la commande :
    sudo ln -s /dev/ttyAMA0 /dev/ttyS0

    Après avoir relancé teleinfo -m s j’obtient :

    teleinfo 1.0.8 Statistics
    ==========================
    Frames Sent : 33
    Frames checked : 33
    Frames OK : 33
    Checksum errors : 0
    Frame format Errors : 0
    Frame size Errors : 0
    MySQL init OK : 0
    MySQL init errors : 0
    MySQL connect OK : 0
    MySQL connect errors: 0
    MySQL queries OK : 0
    MySQL queries errors: 0
    EmonCMS total post : 17
    EmonCMS post OK : 17
    EmonCMS post errors : 0
    EmonCMS timeout : 0
    ————————–
    dans un premier temps les infos sont bien récupérées par Emoncms

    en laçant top, je vois le service teleinfo qui s’emballe au bout de 5 mn et les trames ne sont plus envoyées

    teleinfo 1.0.8 Statistics
    ==========================
    Frames Sent : 172
    Frames checked : 172
    Frames OK : 172
    Checksum errors : 0
    Frame format Errors : 0
    Frame size Errors : 0
    MySQL init OK : 0
    MySQL init errors : 0
    MySQL connect OK : 0
    MySQL connect errors: 0
    MySQL queries OK : 0
    MySQL queries errors: 0
    EmonCMS total post : 89
    EmonCMS post OK : 89
    EmonCMS post errors : 0
    EmonCMS timeout : 0
    ————————–

    Si je lance teleinfo -m s sans l’envoi vers Emoncms, même résultat, au bout de 5 mn le serviec prend 98 % du CPU. Une fois que ça s’emballe, ça ne redescend pas…

    Voilà les stats :

    teleinfo 1.0.8 Statistics
    ==========================
    Frames Sent : 178
    Frames checked : 0
    Frames OK : 0
    Checksum errors : 0
    Frame format Errors : 0
    Frame size Errors : 0
    MySQL init OK : 0
    MySQL init errors : 0
    MySQL connect OK : 0
    MySQL connect errors: 0
    MySQL queries OK : 0
    MySQL queries errors: 0
    EmonCMS total post : 0
    EmonCMS post OK : 0
    EmonCMS post errors : 0
    EmonCMS timeout : 0
    ————————–

    Qu’appelez vous un “pi bien chargé” ? Je n’ai rien d’autre dessus à part le Shield RPIDOM Lite qui récupère les trames de téléinformation.

    Encore merci pour l’aide

    Romary

  5. Romary,

    j’ai regardé comment est cablé la téléinfo sur le RPIDOM, c’est assez futé car pour piloter la ligne 1 to 2 de teleinfo il faut envoyer une commande sur le port sérial pour indiquer quelle sortie on souhaite activer. J’espère juste que c’est pas incompatible avec mon programme (normalement je n’envois rien sur la serial) qui pourait faire basculer la ligne.

    Pour l’erreur sur le ttyS0 c’est très simple à régler définitivement, dans le fichier /etc/teleinfo.conf

    changer

    par

    Quand je parlais de chargé c’est en soft, style une base MySQL, un serveur WEB ou autre mais avec un V2 çà doit aller.

    Si vous mettez teleinfo en mode test en désactivant EMONCMS et SQL (emoncms=0 et mysql=0 dans le fichier de conf) puis en lancant

    çà doit afficher les trames, laissez tourner 15/30 minutes histoire de voir que la reception se passe bien et que les trames sont toujours affichée à l’écran au bout de 15/30 minutes et que le service de prends pas tout le CPU.

    Serait-il possible de voir votre fichier teleinfo.conf ?

    Merci à vous.

     

     

     

     

     

  6. Bonjour,

    Lorsque je lance le mode teleinfo -m test, les infos apparaissent clairement dans la console, environ une par seconde, et au bout de 4 mn, des caractères défilent à l’écran sans logique et illisibles…
    Ctrl C arrête l’affichage et j’obtient (il y a beaucoup de caractères avant) :

    CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 60 <
    HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHCHC 024999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999^C
    teleinfo 1.0.8 Statistics
    ==========================
    Frames Sent : 0
    Frames checked : 175
    Frames OK : 173
    Checksum errors : 0
    Frame format Errors : 1
    Frame size Errors : 1
    MySQL init OK : 0
    MySQL init errors : 0
    MySQL connect OK : 0
    MySQL connect errors: 0
    MySQL queries OK : 0
    MySQL queries errors: 0
    EmonCMS total post : 0
    EmonCMS post OK : 0
    EmonCMS post errors : 0
    EmonCMS timeout : 0
    ————————–

    Voilà une copie de mon fichier teleinfo.conf :

    # teleinfo.conf
    # configuration file for teleinfo program
    # Purpose : send/recevice teleinformation from severals devices then can
    # – write to MySql
    # – write to Emoncms
    # – send UDP frame over network
    #
    # Author : (c) Charles-Henri Hallard
    # http://hallard.me
    # 15/04/2014 : Creation

    # teleinfo mode
    # mode : send, receive or test
    # receive : receive teleinfo frame from network (need another daemon in send mode)
    # send : read from serial and send the teleinfo frame to network
    # (preconized mode for daemon)
    # test : display teleinfo data received from serial
    mode = receive

    # tty serial device for reading teleinfo
    tty = /dev/ttyAMA0

    # Set verbose to 1 enable teleinfo program to be more verbose
    verbose = 0

    # get only this label value and display it
    # valid with read mode only
    # get = PAPP

    # Set this value to 1 disable the lockfile creation
    nolock = 0

    # Set this value to 1 to deamonize the teleinfo process
    # process will then run continuously
    daemon = 0

    # network where to send broadcast frame
    network = 192.168.1.255

    # net port used to send frame
    port = 1200

    # mySQL parameters
    # teleinfo should have been compiled with defined USE_MYSQL (see Makefile)
    # ========================================================================
    # set mysql = 0 disable mySQL
    # but, calling teleinfo with -q on command line activate mysql
    # with the following parameters
    mysql = 0
    server = localhost
    user = root
    password = yourpassword
    database = databasename
    table = DbiTeleinfo
    mysql_port = 3306

    # EmonCMS parameters
    # teleinfo should have been compiled with defined USE_EMONCMS (see Makefile)
    # ==========================================================================
    # set emoncms = 0 ignore this feature but keep parameters
    # so calling teleinfo with -e on command line activate emoncms
    # with the following parameters
    # node = nodeID is used for sending data to a specific node ID to emoncms
    emoncms = 0
    url = http://emoncms.org/input/post.json
    apikey = xxxxxxxxxxxxxx
    #node = 19

    Encore merci pour le retour

    Romary

  7. Lorsque ça se met à “délirer” après avoir lancé teleinfo -m test, le service teleinfo utilise 30 % du CPU (alors qu’avant il utilisait moins de 1 %…)

    Romary

    • Romary,
      Très bien on va faire un autre test, peux tu lancer le meme test que précédement, mais l’arrêter immédiatement après 2/3 trames affichées correctement et ensuite taper la commande suivante
      cat /dev/ttyAMA0
      ça doit faire défiler aussi le serial. De la attendre 15/30 minutes et m’indiquer si çà se met à délirer aussi.
      si oui on retente de faire un
      stty 1200 cs7 evenp cstopb -igncr -inlcr -brkint -icrnl -opost -isig -icanon -iexten -F /dev/ttyAMA0
      puis un
      cat /dev/ttyAMA0
      Et idem, on attends.
      Désolé c’est un peu long, mais il faut isoler le soucis.

  8. Bonjour,

    Aïe, un os…

    La commande cat /dev/ttyAMA0 ne renvoit rien dans la console…
    Ni :
    echo A > /dev/ttyAMA0
    cat /dev/ttyAMA0

    Alors que lors de la première utilisaiton de la carte RPIDOM, j’avais les infos qui apparaissaient…

    Je formate la carte du raspberry et recommence de zéro.

    Après installation de raspbian et libération du port série, je relance l’installation du programme téléinofo et là :

    pi@raspberrypi ~/teleinfo $ make
    cc -DUSE_MYSQL -DUSE_EMONCMS -c teleinfo.c
    teleinfo.c:33:25: fatal error: mysql/mysql.h: No such file or directory
    compilation terminated.
    Makefile:30: recipe for target ‘teleinfo.o’ failed
    make: *** [teleinfo.o] Error 1

    Que me manque-t-il pour que l’installation se déroule normalement ?

    Merci !

    Romary

  9. Bonsoir,

    Merci pour la dernière remarque, il manquait effectivement les dépendances…

    mais toujours impossible d’afficher les infos à la suite de la commande :

    cat /dev/ttyAMA0.

    C’est bizzare car après avoir suivi le tuto de démarrage du RPIDOM j’avais bien des infos à la suite de cette commande…

    Par contre, la commande teleinfo -m test a l’air de ne plus faire disjoncter l’affichage… ca tourne depuis 15 mn sans problème !

    Je ne peux continuer le test plus loin ce soir…plus d’infos demain !

    Romary

  10. Bonjour,

    Tout marche comme il faut depuis 3 jours !
    J’ai une hypothèse sur le problème rencontré, j’avais sur un précédent travail un programme qui se lançait toutes les 5 mn pour récupérer les trames de téléinfo et les envoyer vers un serveur Mysql…

    Encore merci pour les informations et les conseils !

    Romary

  11. Bonjour,

    merci beaucoup pour votre tuto très clair. Mon but est d’envoyer les données de téléinfo sur EMONCMS, et je dois faire une erreur. J’ai branché mon Pi sur le port série ttyAMA0, et ça fonctionne (données défilant en faisant un cat).

    Avec votre programme, la commande “teleinfo -m test” fonctionne, par contre après j’ai des erreurs pour la commande suivante (timeout). J’ai sans doute une erreur dans le teleinfo.conf (j’ai mis à jour le nom du port série, l’IP de mon Pi, l’API write d’emoncms), voici la copie.

    Merci de votre aide !

    # teleinfo.conf
    # configuration file for teleinfo program
    # Purpose : send/recevice teleinformation from severals devices then can
    # – write to MySql
    # – write to Emoncms
    # – send UDP frame over network
    #
    # Author : (c) Charles-Henri Hallard
    # http://hallard.me
    # 15/04/2014 : Creation

    # teleinfo mode
    # mode : send, receive or test
    # receive : receive teleinfo frame from network (need another daemon in send $
    # send : read from serial and send the teleinfo frame to network
    # (preconized mode for daemon)
    # test : display teleinfo data received from serial
    mode = receive

    # tty serial device for reading teleinfo
    tty = /dev/ttyAMA0

    # Set verbose to 1 enable teleinfo program to be more verbose
    verbose = 0

    # get only this label value and display it
    # valid with read mode only
    # get = PAPP

    # Set this value to 1 disable the lockfile creation
    nolock = 0

    # Set this value to 1 to deamonize the teleinfo process
    # process will then run continuously
    daemon = 0

    # network where to send broadcast frame
    network = 192.168.1.100

    # net port used to send frame
    port = 1200

    # mySQL parameters
    # teleinfo should have been compiled with defined USE_MYSQL (see Makefile)
    # ========================================================================
    # set mysql = 0 disable mySQL
    # but, calling teleinfo with -q on command line activate mysql
    # teleinfo should have been compiled with defined USE_MYSQL (see Makefile)
    # ========================================================================
    # set mysql = 0 disable mySQL
    # but, calling teleinfo with -q on command line activate mysql
    # with the following parameters
    mysql = 0
    server = localhost
    user = root
    password = yourpassword
    database = databasename
    table = DbiTeleinfo
    mysql_port = 3306

    # EmonCMS parameters
    # teleinfo should have been compiled with defined USE_EMONCMS (see Makefile)
    # ==========================================================================
    # set emoncms = 0 ignore this feature but keep parameters
    # so calling teleinfo with -e on command line activate emoncms
    # with the following parameters
    # node = nodeID is used for sending data to a specific node ID to emoncms
    emoncms = 0
    url = http://emoncms.org/input/post.json
    apikey = 3bd4668ec26544a7fe2a85c0e36b3ace
    #node = 19

    • Bonjour Bruno,

      Tout d’abord merci pour le commentaire.
      Afin de pouvoir t’aider j’ai besoin de comprendre sur la façon dont tu souhaites faire fonctionner le programme téléinfo.
      Comptes-tu le lancer via un cron toutes les x minutes pour y envoyer les données vers emoncms ou souhaites tu les envoyer en temps réel sur Emoncms ?

      Dans le fichier teleinfo.conf le parametre network ne doit pas être l’adresse di PI mais celle de ton reseau, je pense que dans ton cas c’est plutôt 192.168.1.255, c’est surement cela la cause du timeout.
      De plus le paramètre emoncms doit être égal à 1 si tu souhaites que les infos soient envoyés sur le site d’emoncms. Tu as configuré en mode receive, c’est à dire que le programme attend une trame d’un autre daemon teleinfo et je pense que ce n’est pas le fonctionnement que tu attends.

      Voici donc les paramètres à changer dans teleinfo.conf pour un envoi en temps réel vers emoncms

      mode = send
      daemon = 1
      network = 192.168.1.255
      emoncms = 1

      Ensuite la commande pour le lancer (1 seule fois au démarrage du PI par exemple)

      /votre/chemin/du/binaire/teleinfo

      J’espère que cela correspond à tes attentes, sinon n’hésites pas à revenir vers moi.

      Charles

  12. Merci beaucoup pour ta réponse : j’ai fait les modifications indiquées, et ça marche !
    Et effectivement je dois maintenant préciser mes besoins..

    Une question de débutant on modifie le fichier teleinfo.conf dans /etc, mais où est passé celui de /usr/local/bin ? Je ne le trouve plus.

  13. Salut et merci pour ce super tuto.

    Il ne me reste plus qu’à comprendre comment marche emoncms, entre les input, les feeds, les vis, … :S

    • Bonjour Mikael,

      Oui, je te confirme l’approche d’Emoncms est un peu déroutante au début, j’ai mis un petit moment avant de comprendre le principe.

      Bon courage à toi

      Charles

  14. Emoncms était le plus difficile à maitriser pour ma part et ce n’est toujours pas ma tasse de thé.

    Pour ma part, mes feeds ressemble à ça :
    http://www.domolio.fr/wp-content/uploads/2014/09/Emoncms-feeds.png

    Pour l’instant, je me contente de graphs en temps réel et d’un historique de cette consomation. Mais je pense qu’il est possible de faire mieux encore, c’est clair que les feeds, les visu sont pas très user-friendly… Enfin c’est surtout que c’est super souple comme outil, à tel point qu’il est difficile d’avoir quelque chose qui a a de la gueule.

    Bon amusemant avec emoncms

    • Lion,

      C’est vrai qu’un bon vrai tutorial d’Emoncms dédié à la téléinfo serait top, avec graph comparatifs et tout…

      Perso pour le moment je feed et j’en reste là, j’ai d’autres priorités 😉

      Charles

  15. Bonjour;

    J’utilise un adaptateur usb de chez ADTeK et votre programme teleinfo.
    Cela ne donne que :

    teleinfo 1.0.8 Statistics
    ==========================
    Frames Sent : 0
    Frames checked : 0
    Frames OK : 0
    Checksum errors : 0
    Frame format Errors : 0
    Frame size Errors : 0
    EmonCMS total post : 0
    EmonCMS post OK : 0
    EmonCMS post errors : 0
    EmonCMS timeout : 0
    ————————–
    En espionnant les trames par un cat /dev/ttyUSB0 > trame
    j’ai vu qu’il y avait bien des STX (les CTL B) mais apparemment pas de ETX :

    ^B
    ADCO 020122110569 4
    OPTARIF HC.. <
    ISOUSC 15 <
    HCHC 000002504 Q
    HCHP 000026237 '
    PTEC HP..
    IINST 004 [
    IMAX 009 H
    PAPP 00990 3
    HHPHC D /
    MOTDETAT 000000 B
    ^B

    Est-ce le driver qui les enlève ou j'ai loupé qqchose ?

    Cordialement

    Jean-Luc

    • Bonjour Jean-Luc

      Normalement çà doit fonctionner, si le cat fonctionne alors la liaison série est bonne.
      Comment avez vous lancé le programme téléinfo ? avec les paramètres manuels ou avec le fichier de conf ?

      En tout état de cause, La commande suivante devrait donner comme le cat
      teleinfo -m test -y /dev/ttyUSB0

      Charles

  16. Bonjour

    En effet cela devrait marcher et cela fonctionne maintenant :

    – l’adaptateur usb de chez ADTeK propose différentes configurations et je l’avais réglée sur 9600 bauds …
    – j’avais modifié votre programme dans les environs de
    // Configuration structure defaults values
    } opts = {
    .port = “”,
    .baud = 1200,
    .flow = FC_NONE,
    .flow_str = “none”,
    .parity = P_EVEN,
    .parity_str = “even”,
    .databits = 7,

    avec des “bonnes valeurs” mais apparemment, elles ne sont pas prises en compte.

    – j’ai tout simplement configuré le stick usb à 1200 et tout va bien …

    Y a t-il une possibilité de choisir la config série (fichier config ou autre) ou faut-il le coder ?

    Cordialement

    Jean Luc

    • Bonjour Jean-Luc,

      Oui la configuration série est bien à l’endroit que tu indiques dans les sources du programme. Je ne l’ai pas implémenté dans le fichier de configuration parce que je pensais que l’émission des trames téléinfo étaient standard (1200 bkps) et définies pas EdF.
      Je ne sais pas trop comment fonctionne le dongle en question, mais il doit buffériser la trame (qui elle arrive toujours à 1200 kbps) et une fois OK la retransmettre à une autre vitesse (je ne capte pas trop l’intérêt si ce n’est ajouter une couche supplémentaire)
      Mais l’essentiel soit que tu ais réussi à faire fonctionner le programme avec ton dongle.

      Charles

  17. Bonjour

    Oui en effet, les trames de téléinformation sont un standard “EDF”.
    En ce qui concerne les adaptateurs, celui de ADTek est configuré par défaut en sortie à 9600b de façon à être compatible apparemment avec d’autres applications sur Windows. Pourquoi celles-ci souhaitent du 9600 ????? A demander aux windoziens …

    Par contre côté linux, j’ai été surpris du comportement de “cat” qui doit (je n’en suis pas encore certain à 100%) manger les ETX (fin de trame téléinfo) et remplace par des newline ou autre. D’où ma suspicion qui s’est avérée fausse : c’était simplement le débit qui était en cause.

    Si je comprend bien, si je veux repasser en 9600, en modifiant dans le programme comme je l’ai indiqué, cela devrait fonctionner ?

    Autre chose, j’ai bâti un simulateur afin de pouvoir faire des manip sans compteur. Un bien grand mot mais ça marche :

    cstream -b 170 -t 170 t.log | socat – PTY,link=/tmp/ttyS0,waitslave

    Il faut installer cstream et socat.
    Les trames sont disponibles sur /tmp/ttyS0
    170 est la taille de mes trames (là ce n’est pas standard apparemment)
    t.log est un gros fichier (à constituer par exemple en faisant des concaténations après avoir fait une redirection des trames réelles dans un fichier log grâce à cutecom.

    ./teleinfo -m s -y /tmp/ttyS0 n’y voit alors que du feu…

    Cordialement

    • Jean-Luc,

      Oui en modifiant les paramètres çà devrait fonctionner, attention néanmoins à vérifier aussi la parité et le nombre de stop bits.

      Pour le simulateur, excellente idée je vais en avoir besoin en plus, çà tombe bien 😉

      Merci à toi

      Charles

  18. bonjour

    Heureux que cela puisse servir; je suis en train de tester ton programme justement avec cette astuce; on peut confectionner des trames mal constituées aussi.

    cstream -b 170 -t 170 t.log | pv -p -e -s 2654748 |socat – PTY,link=/tmp/ttyS0,waitslave

    (on peut voir l’avancement de l’épuisement du fichier avec pv :
    [===> ] 30%

    Au cours des tests, j’ai voulu recompiler ton programme sans l’option
    emoncms que je ne vais pas utiliser (trop lourd).

    Je me suis aperçu que je ne pouvais pas enlever l’option emoncms dans le makefile; il y des soucis à la compilation :
    make
    cc -DUSE_MYSQL -c teleinfo.c
    teleinfo.c: In function ‘tlf_treat_label’:
    teleinfo.c:1006: error: ‘struct ‘ has no member named ’emoncms’
    make: *** [teleinfo.o] Erreur 1

    Dans le source, autour de la ligne 1000 :
    void tlf_treat_label( char * plabel, char * pvalue)
    {
    // emoncms need only numeric values
    if (opts.emoncms)
    {

    Bon j’ai remis l’option emoncms, cela compile mais il doit manquer des choses dans le source puisque le champ emoncms n’existe pas.

    Cordialement

    Jean-Luc

  19. Bonjour,

    Merci pour l’excellent programme en C. Je m’en sers pour de la remontée de données vers emoncms à partir d’une sonde teleinfo et d’un raspberry pi.
    Pour info, car emoncms et un peu difficile au début, pour obtenir un résultat j’utilise les étapes suivantes sous mon “input” BASE :

    1 -> Log to Feed – Compteur (Utile pour la phase de dessous)
    2 -> Total pulse count to pulse increment – (Diff N- N-1)
    3 -> Log to Feed – Elec. Wh
    4 -> Accumulator – Elec. Wh Acc
    5 -> X 0.001 ( vers kWh)
    6 -> kWh to kWh/d (Consommation Journalière en kWh/d)
    7 -> kWh to Power (Puissance instantanée)

    Pour le point 7 (kWh to power), on observe une équivalence avec PAPP. J’ai également modifié le script pour obtenir une puissance instantanée, et celle-ci est équivalente à celle obtenue par emoncms.

    Cdlt

  20. Bonjour,
    merci encore pour ce tuto.
    J’ai le bug suivant en réponse à l’exécution de teleinfo :
    Removing stale lock: /var/lock/LCK..ttyAMA0

    Mon fichier teleinfo.conf est le suivant, en enlevant les commentaires :

    mode = send
    # modif Bruno – port série
    tty = /dev/ttyAMA0
    verbose = 0
    nolock = 0
    daemon = 1
    network = 192.168.1.255
    port = 1200
    mysql = 0
    server = localhost
    user = root
    password = yourpassword
    database = databasename
    table = DbiTeleinfo
    mysql_port = 3306

    emoncms = 1
    url = http://emoncms.org/input/post.json
    apikey = XXXXX
    #node = 19

    De plus, le cat /dev/ttyAMA0 ne fonctionne plus après le lancement de teleinfo…

    • Bonjour Bruno,

      Lorsque le programme est lancé c’est tout à fait normal que tu n’ais plus accès au /dev/ttyAMA0 car il est utilisé par le programme lui même.

      Pour le lock peux-tu supprimer le verrou en supprimant le fichier /var/lock/LCK..ttyAMA0 avant de lancer le programme ? Sinon essais de mettre le paramètre nolock du fichier de configuration à 1 et dis moi ce que çà donne.

      En te souhaitant une bonne année 2015.

      Charles

  21. Afin de pouvoir centraliser les demandes de supports et de faciliter la lecture je viens de désactiver les commentaires sur les articles. Celà ne signifie pas que ce n’est plus possible, au contraire mais pour cela merci de le faire via les Forums dédiés.

    Concernant la téléinfo c’est celui-ci

    Merci de votre compréhension.

34Comments are closed.

Comments on this topic in community Forums.