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