Explication des principales fonctionnalités du programme arduino disponible en téléchargement sur ce site.
Commencer par télécharger le programme ici : Telecharger puis ouvrir les 3 fichiers.
Les grands principes adoptés :
On trouve sur le Net de nombreuses versions de programme de lecture de la téléinfo, plus ou moins complexes. Mon choix a été de faire une version facilement maintenable pour que chacun puisse l’adapter en fonction de ses besoins.
La lecture :
En fonction du type d’abonnement souscrit, le compteur envoie de 1 à 33 trames d’informations différentes, chaque trame peut être identifiée par un mot clef. J’ai donc fait 2 fonctions :
- LectureTeleInfo() : Qui lit une trame sans se préoccuper de sont contenu
- GetTrameInfo(String keyword) : Qui boucle sur LectureTeleInfo jusqu’à trouvé une trame qui a le mot clef voulu. et qui va ne renvoyer que la données associée au mot clef (relevé du Compteur, son No, etc …)
Vous voyez … C’est facile …. Il suffit de demander son mot clef dans la liste suivante :
- ADCO : No de compteur
- BASE : Relevé .. en tarification de base
- OPTARIF : Option tarifaire
- …
Le traitement
Le traitement consiste à appeler en boucle :
- readTeleInfo() : Cette fonction va être appelée de manière répétitive.
- On va y mettre les informations qu’on veut lire, par exemple BASE = GetTrameInfo(“BASE”); si on veut lire la t&rification de base.
- Si on a plusieurs compteurs, on prévoit la lecture sur un autre port d’entrée de l’arduino… dans une variable séparée BASE2 = GetTrameInfo(“BASE”);
- On va y mettre les informations qu’on veut lire, par exemple BASE = GetTrameInfo(“BASE”); si on veut lire la t&rification de base.
- Switch() : Cette petite fonction permet de basculer la lecture sur un port, puis sur l’autre. On lit toujours sur mySerial dans les fonctions, mais mySerial “est” mySerial1 ou Myserial2 en alternatif, apres chaque appel de switch.
- Les 2 lignes suivantes (dans Classe.cpp) donnent les ports arduino qui seront lus (à mettre en adéquation avec votre montage électronique) :
- mySerial1 = new SoftwareSerial(6, 8); // RX, TX soit lecture sur port 6
- mySerial2 = new SoftwareSerial(7, 9); // RX, TX soit lecture sur port 7
- Les 2 lignes suivantes (dans Classe.cpp) donnent les ports arduino qui seront lus (à mettre en adéquation avec votre montage électronique) :
Puis à interval régulier, défini par un timer :
- EnvoiTeleInfo() : L’appel à cette fonction envoie les informations connues à un instant t au site internet. La fréquence d’appel est géré par un timer t.
- t.every(6800, EnvoiTeleInfo); Fréquence d’appel du timer. L’envoi des infos au site devrait donc être réalisé toutes les 6800 millisecondes .. mais dans les faits, ça donne 30 Secondes, même en enlevant tous les Delays (Je ne comprends pas !!! le fait d’avoir un clone peut être …. ou des delays posés dans les bibliotheques utilisées ???…)…
- svp : si vous envoyez vos trames sur le site pour pofiter des graphiques gratuits, ajuster cette valeur si nécessaire, mais ne descendez pas en dessous de 30 secondes d’interval entre chaque envoi, pour ne pas surcharger la base de données. Il est à noter que pour les données de plus de 2 jours, une purge sera effectuée pour ne garder que des tranches de 10 minutes environ.
- t.every(6800, EnvoiTeleInfo); Fréquence d’appel du timer. L’envoi des infos au site devrait donc être réalisé toutes les 6800 millisecondes .. mais dans les faits, ça donne 30 Secondes, même en enlevant tous les Delays (Je ne comprends pas !!! le fait d’avoir un clone peut être …. ou des delays posés dans les bibliotheques utilisées ???…)…
La dernière chose importante sont les 2 lignes suivantes :
- char remoteServer[]=”220v.fr”; .. pour préciser sur quel site vous envoyez vos donnée. Mais vous êtes pas bien chez nous ?
- sprintf(httpRequest,”GET /GetTeleInfo.php?ADCO=%s&OPTARIF=%s&ISOUSC=%u&BASE=%s&IINST=%u&IMAX=%u&PAPP=%uu&ADCO2=%s&OPTARIF2=%s&BASE2=%s&WCPT=%u HTTP/1.1″
,adco,optarif,ISOUSC,base,IINST,IMAX,PAPP,adco2,optarif2,base2,WattCompteur); .. pour dire la fonction php qui va réceptionner votre envoi pour les stocker en base de données.
A noter : Je vais faire d’autres versions du programme, notamment une adaptée à ceux qui qui n’ont qu’un compteur par exemple. Pour ce cas précis, il suffit de mettre en commentaire l’appel du switch.