Go Down

Topic: Serveur de téléinformation Linky (Read 2999 times) previous topic - next topic

MicroQuettas

Aug 24, 2018, 03:03 pm Last Edit: Aug 25, 2018, 03:27 pm by MicroQuettas Reason: Ajout schéma démodulateur
Bonjour à toutes et à tous,

Comme annoncé il y a déjà quelques temps, voici un petit serveur de données de téléinformation client Linky (ou celle des compteurs électroniques qui a le même format).

La démodulation des signaux Linky se fait avec un des adaptateurs déjà largement publiés. A toutes fins utiles, celui que j'utilise est en P.J.

Le serveur fonctionne sur n'importe quelle carte ESP8266 de type ESP12 (NodeMCU, Wemos D1, etc..) mais pas sur les cartes de type ESP01.
C'est un serveur HTTP, ce qui veut dire qu'il est utilisable avec n'importe quel navigateur (PC, téléphone ou tablette). Il n'y a pas de client à installer, ni d'abonnement à prévoir, c'est du HTML 5 standard.

La programmation se fait avec l'IDE Arduino après avoir rajouté les cartes ESP8266.

Un petit dessin valant mieux qu'un grand discours, en P.J. les captures d'écran.

A très bientôt pour la suite, et bonne bidouille,

MicroQuettas


MicroQuettas

#1
Aug 24, 2018, 03:35 pm Last Edit: Aug 25, 2018, 03:29 pm by MicroQuettas Reason: Corrections mineures - Ajout référence précédente publication
Re bonjour,

Voici maintenant le logiciel pour ce serveur.
Quelques mots d'explication d'abord :
  • le décodage des signaux Linky se fait avec un décodeur dérivé de celui déjà publié ici Décodeur Linky. Cette version est plus robuste. Je mettrai prochainement à jour celui déjà publié,
  • la réception des signaux était initialement prévue avec SoftwareSerial, mais ce logiciel consomme trop de CPU car les temporisations y sont faites avec des boucles d'attente  :smiley-cry: Bref, j'ai dû en écrire un construit sur un principe différent,
  • le logiciel est modulaire, le tout en compilation séparée, ce qui explique le grand nombre de fichiers,  :smiley-confuse:
  • les indicateurs graphiques sont en SVG (scalable vector graphics). C'est similaire, mais différent du "canvas" également utilisé en pareil cas,
  • les pages HTML sont statiques, sauf celles affichant la puissance instantanée et l'intensité qui utilisent une requête AJAX pour leur mise à jour toutes les 2 secondes. Un grand merci au passage à J-M-L pour son tuto sur le sujet dans ses "techniques avancées",
  • la sécurité est de type "HTTP basique" avec un utilisateur et un administrateur. C'est plus que suffisant pour une utilisation sur un réseau privé. Pour l'accès depuis Internet, j'utilise un VPN,
  • pour les mises à jour, il est possible d'activer un serveur OTA. On peut alors faire les mises à jour sans intervention physique sur le serveur. Attention, le serveur OTA et le récepteur série utilisant le même timer1, l'activation de l'OTA arrête la réception des signaux Linky,
  • les paramètres sont sauvegardés dans la pseudo EEPROM de l'ESP8266.


Configuration : au choix deux méthodes :
  • éditer le fichier A_DevConfig.h et y renseigner votre Wifi, ou
  • compiler, charger et lancer le programme tel quel. Il va chercher à se connecter à un réseau Wifi qu'il ne trouvera pas et va ouvrir pendant 1 minute un point d'accès SSID "Linky_xxx" sur lequel vous pourrez vous connecter avec le mot de passe "admin". Vous pouvez alors vous connecter sur le serveur à l'IP 192.168.12.1 avec votre navigateur et configurer le serveur pour votre réseau Wifi. Un redémarrage et c'est parti...
  • dans tous les cas, le paramétrage des comptes peut se faire après coup depuis le serveur.


Les comptes par défaut sont :
  • utilisateur : "user" mot de passe "user",
  • administrateur : "admin" mot de passe "admin"

On peut paramétrer cela depuis le fichier "A_DevConfig.h" avant la première installation et depuis le serveur avec l'écran idoine après.

Le serveur fonctionne avec des compteurs monophasé ou triphasé (option de compilation TRIPHASE dans A_DevConfig.h). Il n'a qu'un tarif, mais on peut en rajouter d'autres... Comme il y en a beaucoup et que je n'en ai pas l'usage, je ne l'ai pas fait, mais j'aiderai bien volontiers ceux que cela intéresse.

Comme d'habitude, je répondrai à toutes les demandes (raisonnables)...

Bonne bidouille,

MicroQuettas


Artouste

Bonsoir
voilà une belle réalisation finie :smiley-mr-green:

J'ai dans ma "campagne" un linky nouvellement installé ,je n'ai pas encore eu le temps de jouer avec 

je met donc ton ZIP de coté



Je pense que tu devrais mettre un lien vers l'adaptateur/démodulateur que toi tu utilise



MicroQuettas

Salut Artouste,

Merci. J'ai rajouté le schéma et le lien sur la publication précédente.

A+ et bonne bidouille,

MicroQuettas

alaindepicardie

bonjour
Merci pour ce serveur teleinfo.
je ne vois pas si tu l'a écrit multi-tarif ou seulement en tarif de base.... Dit autrement ce serveur gère l'abonnement heure creuse?
merci pour le partage.

MicroQuettas

Bonjour,

Non, la version publiée ne gère que le tarif de base, mais il n'y a pas de difficulté à l'adapter à d'autres tarifs. Il faudrait juste m'envoyer une trame complète que je sois sûr de ce que je fais, car évidemment, je ne pourrais pas tester autrement qu'en simulation. Le bi tarif heures pleines / heures creuses peut certainement intéresser du monde.

A+

MicroQuettas

alaindepicardie

#6
Aug 25, 2018, 06:11 pm Last Edit: Aug 25, 2018, 06:22 pm by alaindepicardie
bonjour
oui, je viens de le voir.
Quote
Objet decodeur de teleinformation client (TIC)
               format Linky "historique" ou anciens compteurs
               electroniques.

               Version triphasé (compatible monophasé)
               tarif unique
oui, le tarif HC/HP est courant.
J'essaie de capturer des trames ce soir pour les mettre en ligne.


Puisque je suis la, petite question si tu as le temps.
j'ai un uno qui me décode déjà deux téléinfo.
j'utilise la librairie Software serial.
cette librairie me prend beaucoup de ressources, par exemple lorsque je me sert de (millis) c'est faux.
je vois dans ta description que tu as écrit une librairie.... Comme cela au passage, elle n'est pas adaptable/utilisable sur un Uno?
Cordialement Alain

MicroQuettas

Bonsoir Alain,

OK pour le tarif HP/HC. Avec les trames, je verrai cela dans la semaine. Ce ne devrait pas être compliqué.

Pour la biblio de réception SwSerialRx, elle est adaptable sur un Uno, en utilisant le timer2, qui, à ma connaissance n'est pas utilisé. On ne pourra toutefois avoir qu'une instance. C'est intéressant à faire (interruptions, etc.). Je vais voir cela, mais pas tout de suite.


Bonne bidouille

Fred de MicroQuettas

rjnc38

#8
Aug 25, 2018, 07:12 pm Last Edit: Aug 25, 2018, 07:13 pm by rjnc38
j'ai un uno qui me décode déjà deux téléinfo.
j'utilise la librairie Software serial.
cette librairie me prend beaucoup de ressources, par exemple lorsque je me sert de (millis) c'est faux.
bonjour
dans ce cas pourquoi ne pas passer sur une Mega avec 4 UART, elle existe même en format réduit Mega pro

alaindepicardie

#9
Aug 26, 2018, 02:17 pm Last Edit: Aug 26, 2018, 03:12 pm by alaindepicardie
bonjour
Quote
dans ce cas pourquoi ne pas passer sur une Mega avec 4 UART, elle existe même en format réduit Mega pro
oui, mais j'avais acheté un arduino uno et un esp.
c'est sur cet hiver je vais acheter un clone de Méga.

Alors quel boulot! c'est magnifique, je me sens bien petit devant un tel travail, vraiment merci.

Sinon a la compilation j'ai un message d'erreur:

Code: [Select]
Arduino : 1.8.5 (Windows 7), Carte : "ESPino (ESP-12 Module), 80 MHz, ck, 4M (1M SPIFFS), v2 Prebuilt (MSS=536), Disabled, None, 115200"

C:\Users\User\Documents\Arduino\Lky03f_P\Lky03f_P.ino:92:23: fatal error: Streaming.h: No such file or directory

#include <Streaming.h>

                      ^

compilation terminated.

exit status 1
Erreur de compilation pour la carte ESPino (ESP-12 Module)


j'ai donc ajouté cette librairie:https://github.com/geneReeves/ArduinoStreaming
et maintenant cela compile mais avec ce message d'erreur

Code: [Select]

ATTENTION : La catégorie 'Language' dans la bibliothèque ArduinoStreaming n'est pas valide.
Définition sur : 'Uncategorized'
Archiving built core (caching) in: C:\Users\User\AppData\Local\Temp\arduino_cache_807921\
core\core_esp8266_esp8266_espino_CpuFrequency_80,ResetMethod_ck,FlashSize_4M1M,LwIPVariant_v2mss536,Debug_Disabled,
DebugLevel_None____,UploadSpeed_115200_525d20b96160dc2c65dab96450e4c58c.a


Voila qu'en pensez vous.
Alain

MicroQuettas

Bonjour Alain,

C'est tout simple : vous n'utilisez pas la bonne biblio "Streaming".
J'ai pris la mienne sur le site Arduino, tout à fait en bas de cette page Arduino Libraries
rubrique "contributed / utilities".

Merci pour l'intérêt que vous portez à ce projet et bonne bidouille.

MicroQuettas

alaindepicardie

#11
Aug 28, 2018, 08:23 pm Last Edit: Aug 28, 2018, 08:34 pm by alaindepicardie
bonjour
OK, merci j'ai donc mis la bonne bibliothèque et ça compile.

quelques retour:

-avec la version: LkyRx_06 de l'autre post, je décode sans soucis (avec un tarif base).

-par contre avec la version Lky03f_P de ce post je ne démarre pas!
j'ai dans un premier temps compilé directement et j'ai juste la led bleu qui clignote, en  activant le mode debug, j'ai le message Minute Tick qui apparait. la led bleu clignote toute les 1 ou 2 secondes.

J'ai donc renseigné les deux champs comme cela:

Code: [Select]
#define CWif_PSSID "Livebox-Alain"
#define CWif_PPwd "1234567890ABCDEF1111111111"


et toujours rien j'ai le message:

Code: [Select]

Bonjour
EEPROM time mgt params used
EEPROM main config used
EEPROM Wifi config
EEPROM accounts used
GWif_SR = 0
GWif_SR = 5
GWif_SR = 50
AP = 0x1
GWif_SR = 55
WiFi connection aborted


la led bleu clignote toute les 1 ou 2 secondes.





Sinon pour les trames, il y a deux types de compteur électronique:
les anciens (une bonne dizaine d'année), ces derniers ne remontent pas la PAPP.

Et puis les derniers qui eux remontent la PAPP.
Je ne sais pas si le fait de ne pas trouver le champs PAPP peut poser soucis, aussi j'ai mis un peu de temps afin de te fournir deux trame:
-une trame ancien compteur
-une trame compteur plus récent
Par contre mon niveau en prog Ardruino est du genre copier/coller ( voyez ce que je veut dire) autrement dit, pour sauver la face on va dire que je debute!

Les trames ancien compteur:

Quote
ADCO 02865473XXXX N
OPTARIF HC.. <
ISOUSC 45 ?
HCHC 054247766 /
HCHP 079818219 @
PTEC HP..  
IINST 001 X
IMAX 022 C
HHPHC D /
MOTDETAT 000000 029801538499 Q
Quote
et les trames nouveau compteur:
MOTDETAT 000000 B
OPTARIF HC.. <
ISOUSC 15 <
HCHC 002922023 Z
HCHP 004513052 '
PTEC HP..  
IINST 000 W
IMAX 009 H
PAPP 00000 !
HHPHC D /
ADCO 03072289XXXX N
voila Cordialement Alain






MicroQuettas

Bonjour,

Merci pour le retour. Les points suivants sont normaux :

  • le clignotement de la LED toutes les secondes atteste du bon fonctionnement,
  • même en mode debug, le serveur ne transmet pas la téléinformation sur son port série.


Concernant la non connexion au Wifi, quelques explications :

  • le serveur garde ses paramètres sur une zone de sa mémoire qui fonctionne comme une EEPROM, avec une clé (CRC) qui atteste de la validité des données,
  • au démarrage, il va lire l'EEPROM et la clé. Si la clé est correcte, il charge les paramètres depuis l'EEPROM,
  • si la clé est incorrecte, il charge les paramètres par défaut depuis le fichier A_DevConfig.h et les copie en EEPROM.[\li]
Vous avez dû démarrer le serveur avant d'avoir édité le fichier A_DevConfig, et du coup il a copié en EEPROM les paramètres du fichier brut. A chaque redémarrage il reprend ces paramètres qui ne correspondent pas à votre réseau, d'où l'impossibilité de se connecter.

Rassurez vous, il y a 2 façons de se sortir de là, mais il faut d'abord que j'explique un peu mieux comment cela marche, et mes explications précédentes étaient vraiment succinctes.  :smiley-sad-blue:

On va avoir un serveur sur un réseau local (le vôtre). Pour que ce serveur soit accessible, il faut :
  • connaître son adresse IP sur votre réseau,
  • que cette adresse ne change pas à chaque connexion.


Pour cela, il faut que le serveur ait une adresse IP fixe sur votre réseau. Il y a 2 façons d'y arriver :
  • c'est le serveur qui choisit lui même son adresse,
  • c'est votre box Internet qui le reconnait et lui donne toujours la même adresse.


Les deux façons de faire sont possibles. C'est une question de goût et de possibilité d'intervenir sur votre box Internet. La méthode 2 nécessite plus d'intervention sur la box.

Je suis plutôt parti sur la 1 : c'est le serveur qui se prend tout seul une adresse, mais il faut l'aider un peu en lui communicant les caractéristiques de votre réseau.

Vous avez déjà renseigné le SSID et le mot de passe Wifi, c'est nécessaire, mais pas suffisant. Il faut aussi que vous lui donniez :
  • l'adresse IP (interne, sur votre réseau) de votre box,
  • si possible, celle des DNS,
  • et surtout que l'adresse que le serveur va prendre soit compatible avec votre réseau.


Je ne sais pas si vous connaissez ces informations. Si vous les connaissez, éditez les lignes 144 à 152 du fichier A_DevConfig.h
Dans le fichier de base, tout repose sur une box dont l'adresse interne est :
192.168.1.1, mais je ne sais pas ce que vous avez chez vous. C'est ce qui conditionne tout et c'est ce qu'il vous faut chercher en 1er si vous ne la connaissez pas.

Si vous êtes à l'aise avec votre box, vous pouvez aussi y pêcher les adresses des DNS et celles de début et de fin de la zone DHCP.
On peut aussi récupérer une partie de ces informations sur un PC, un téléphone ou une tablette connectés en Wifi.

Le serveur prend une adresse haute 192.168.1.224 qui est généralement en dehors de la zone DHCP, d'où l'absence de conflit. Sauf bonne raison, ne la changez pas  (paramètre CWif_DefDvNb ligne 131 du fichier A_DevConfig.h).


Une fois que vous aurez tout cela, contactez moi. Ce sera alors très simple de configurer le serveur sur votre réseau.


                                                   §§§§§§§§§§§§§§§§

Un grand merci pour la copie des trames. Cela m'a permis d'avancer en explicitant un point qui n'était pas clair dans la documentation que j'avais.
Pour l'absence de PAPP sur le vieux compteur, je vais rajouter une option de simulation avec l'intensité...

Voilà, bon courage, bonne bidouille et à bientôt

Fred de MicroQuettas

alaindepicardie

#13
Aug 29, 2018, 10:21 pm Last Edit: Aug 29, 2018, 10:21 pm by alaindepicardie
bonjour
merci pour le temps que vous prenez pour nous.
Quote
vous dites être parti sur:192.168.1.1
ben, il me semble que c'est l'adresse pour me connecter sur ma box orange, si c'est bien le cas cela va être plus simple.

Quote
.
-l'adresse IP (interne, sur votre réseau) de votre box, ça c'est bon je dois savoir faire
-si possible, celle des DNS, je pense aussi
-et surtout que l'adresse que le serveur va prendre soit compatible avec votre réseau.
-Si vous êtes à l'aise avec votre box, vous pouvez aussi y pêcher les adresses des DNS ça je vais regarder
-et celles de début et de fin de la zone DHCP. ça aussi c'est bon je dois savoir faire
-Le serveur prend une adresse haute 192.168.1.224 qui est généralement en dehors de la zone DHCP, d'où l'absence de conflit. Sauf bonne raison, ne la changez pas  ok
Je vais donc chercher te reviens vers vous au plus tôt (je pense demain car je viens de voir que le mode de  connexion sur ma box Orange a changé depuis la dernière fois ou j'y suis allé...... il y a longtemps: Comme  tout fonctionne bien je n'y allait plus  ;) )
encore merci

alaindepicardie

bonjour
si je vous dit:

Quote
serveur DHCP IPv4 actif.
adresse IP de la Livebox 192.168.1.1
masque de sous-réseau du LAN   255.255.255.0
adresse IP de début 192.168.1.10
adresse IP de fin 192.168.1.150
Quote
DNS primaire IPv4   80.10.246.3
DNS secondaire IPv4   81.253.149.10
Quote
Vous pouvez visualiser tous les appareils de votre réseau local

appareils du réseau local
nom   nom DNS   adresse IP   

meteo 192.168.1.10
osmc 192.168.1.31
android-a83f4049bb2b6170 192.168.1.15
User-PC 192.168.1.17
PC47 192.168.1.18
android-23c93c5a4351a67a 192.168.1.12
est ce que cela vous est utile
Avant d'editer le fichier config
Cordialement, et merci Alain

Go Up