Left for archival purposes.

User avatar
By Charly86
#21855 Overcrash

Did you succesfully reading teleinfo with ESP8266 ?

I've tried with esp8266 Arduino but I can't have any reliable results, same hardware as you, SFH620 (that works on Arduino, Pi, Spark Core, PC, ...) only on ESP8266 I have problem, that so strange.

I've done another test, same sketch on ESP8266 and Photon running at the same time, teleinfo signal connected to both RX Photon AND Rx ESP8266, here the result :
teleinfo.jpg
teleinfo Photon vs ESP8266

As you can see works fine on Photon does not work on ESP8266, I tried both with
Code: Select allSerial.begin(1200, SERIAL_7E1)
and
Code: Select allSerial.begin(1200)

This second is even worst (which makes sense)
What is strange is that with Photon I just put
Code: Select allSerial.begin(1200)
because I can't change parity and stop bit and it works !!!!

Any idea are welcomed, I'm stuck with this issue
User avatar
By Overcrash
#21858 Je suppose que toutes les personnes qui passeront ici sont en france car seul EDF semble utiliser une méthode de transmission aussi tordue...

Bref, Fred, oui c'est voulu d'avoir laissé en 8bits car c'est bien 8bits mais avec seulement 7 bits de données, le dernier étant à effacer.
Donc en gros sur un arduino on laisse tout par défaut hormis la vitesse qui est à 1200bps.

J'ai réussi en modifiant un FW de NodeMCU à voir le résultat souhaité, mais je ne suis pas en mesure de le renvoyer en LUA, c'esst du simple affichage et donc totalement inutile.
Après j'ai trouvé la librarie Bit de NodeMCU et je suis très proche du but !!!

voici où j'en suis actuellement :

- récupération du signal : ok
- compréhansion de celui-ci : ok

il me reste plus qu'à "automatiser" ce que je fais caractères par caractères !!!

Pour simplement convertir chaque caractères à la volée, voici le code :

Code: Select alluart.setup( 0, 1200, 8, 0, 1, 0 )

print("Init ok !")

uart.on("data",   1, function(d)
    print("---------------------")
    charin = string.byte(d)
    print("Char in: "..charin)
    hexvaluein = string.format("0x%08x", string.byte(d))
    print("Hex: "..hexvaluein)
    charshift = bit.rshift(hexvaluein, 0)
    print("Char Shift: "..charshift)
    char = string.format("%c", charshift)
    print("Char out: "..char)
end, 0)


Maintenant il faut utiliser le buffer pour stocker le max, à savoir 255 caractères puis boucler dessus pour afficher les caractères convertis.

Ensuite, avec un micro-relais, il faudra connecter le RX puis le déconnecter dès que la fin de trame auras été reçu puis ensuite traiter la donnée.

Je n'ai pas beaucoup de temps en ce moment, c'est pourquoi je ne réponds pas vite.
Je me suis cependant mis un portable dans la cave à côté du compteur avec un arduino et des relais afin d'y accéder de partout pour des tests lorsque j'ai quelques minutes. C'est un peu barbare, mais ça fonctionne ! :mrgreen:

EDIT :
Bon, bah il suffisait que j'en parles pour ne plus avoir accès à ma machine... et je ne suis bien évidemment pas chez moi ce WE ! :o