Je vous propose de réaliser un afficheur déporté pour compteur Linky. Cet afficheur, disponible au sein de votre lieu de vie, vous permettra d'apprécier en direct la consommation des différents appareils de votre logement. Il pourra également vous éviter de surcharger votre installation et éviter de faire "sauter les plombs" en échelonnant vos différents consommateurs d'énergie : lave-linge, lave-vaisselle, sèche-linge, etc. Le programme proposé est adapté à un abonnement avec option heures creuses, monophasé. Mais il est tout à fait possible d'adapter le programme écrit en micropython et interprété par la carte Pybstick26.
Pour cette version de programme, la pybstick26 lite suffit. Vous la trouverez ici : https://shop.mchobby.be/fr/micropython/1830-pybstick-lite-26-micropython-et-arduino
Un mot sur la sécurité, ce montage ne respecte pas les exigences du document : https://www.enedis.fr/sites/default/files/Enedis-NOI-CPT_54E.pdf Il est donc naturel que je me décharge de toute responsabilité concernant la réalisation de ce dispositif par un tiers. Vous voilà averti. Néanmoins, s'il est correctement réalisé, il ne représente aucun danger pour l'utilisateur et le compteur lui-même. Il consomme environ 10mA sous 3,6 à 6V donc moins de 130mW.
Par contre, il ne tiendra pas les agressions comme le branchement direct au 220V AC. Mais avez-vous envie de vous électriser au 220V ?
Bonne réalisation.
Etape 1 : Le schéma de principe
Voilà le schéma de principe de notre afficheur déporté Linky. Rien de bien compliqué. Le compteur Linky, par rapport à ses prédécesseurs, offre une troisième broche à coté des broches I1 et I2 nommée A pour alimentation. Celle-ci délivre un courant alternatif de 6Vcc pouvant aller jusqu'à 12Vcc entre les broches I1 & A. On peut consommer 130mW sur cette alimentation. C'est donc un simple pont redresseur double alternance réalisé avec 4 diodes de commutations 1N4148 et une "grosse" capacité réservoir de 100uF qui alimentera les broches 2 et 4 de la carte PYBSTICK.
Les données sont fournies au rythme démentiel de 1200 bauds, 1 bit de start, 7 bits de données, 1 bit parité paire et 1 de stop entre les broches I1 et I2 sous la forme d'une tension alternative de 6Vcc présente pour un bit dominant ou absente pour un bit ressessif. C'est donc avec un optocoupleur avec émetteur alternatif et une sortie de type collecteur émetteur qui, associé à une résistance de tirage de 10kohms fixée à la tension de sortie de 3.3V réalisera la conversion en niveau logique interprété par l'entrée RX de l'UART2 de la PYBSTICK (broche 8).
Le petit écran OLED sera lui câblé en I2C avec un signal de reset généré par par l'IO S7 de la PYBSTICK 26.
Etape 2 : Installation du câble déporté
Qui dit afficheur déporté dit câble.Vous avez besoin d'un câble avec à minima trois conducteurs. Un câble 4 paires torsadées, non blindé, pour centrale d'alarme et assez bon marché. A acheter en grande surface de bricolage ou à récupérer sur une ancienne installation. Cela peut-être du câble téléphonique agrafé sur une plinthe (on ne s'enkikinait pas en 1970-80 lorsque le téléphone arrivait à la maison, les techniciens France Telecom posaient ça le plus vite possible). Il vaut mieux utiliser du câble monobrin, plus pratique pour le connecteur sans soudure présent sur le compteur Linky.
Etape 3 : Assemblage de la Pybstick26 sur la plaque à trous
Il s'agit de braser les deux connecteurs femelles livrés avec la pybstick26 de manière à obtenir quelque chose comme ça.
Etape 4 : Preparation de l'afficheur OLED 6 broches
Sources :
# main.py -- put your code here!
from machine import I2C, Pin
import pyb
import select
import ssd1306
from time import sleep, sleep_ms
from fdrawer import FontDrawer
# pybstick lite à 48MHz pour autoalimentation sur compteur Linky
pyb.freq(48000000)
# init bus i2c a 400KHz
i2c=I2C(1, freq=400000)
# reset afficheur OLED
rst=Pin("S7", Pin.OUT_PP)
rst.low()
sleep_ms(50)
rst.high()
# Initialisation afficheur
oled = ssd1306.SSD1306_I2C(width=128, height=64, i2c=i2c, addr=0x3c, external_vcc=False)
oled.init_display()
# Dessiner un rectangle blanc - rect( x, y, w, h, c )
oled.show() # doit être appelé
def display(wh, hp, hc, ph):
oled.fill(0)
oled.rect( 0, 0, 128, 64, 1 )
oled.line( 92, 30, 92, 64, 1 )
oled.line( 0, 30, 128, 30, 1 )
fd = FontDrawer( frame_buffer=oled, font_name = 'vera_23' )
fd.print_str(str(wh), 8, 5 )
fd.print_str(str(ph), 96, 36 )
fd = FontDrawer( frame_buffer=oled, font_name = 'vera_15' )
fd.print_str("W/Hr", 80, 10 )
fd.print_str("HP:", 8, 30 )
fd.print_str("HC:", 8, 46 )
fd.print_str(str(hp), 35, 32 )
fd.print_str(str(hc), 35, 46 )
oled.show()
# declaration à zéro des index
wh = 'xxxxx'
hc = 'xxxxxx'
hp = 'xxxxxx'
ph = 'xx'
buffer_size = 128
loop = 0
info = pyb.UART(2, 1200, bits=7, parity=0, stop=1, timeout=0)
while 1:
tampon=str(info.read(buffer_size))
if tampon :
print (tampon)
x=tampon.find('HCHC')
if x >=0 and x < (buffer_size-20): hc=tampon[x+5:x+11]
x=tampon.find('HCHP')
if x >=0 and x < (buffer_size-20): hp=tampon[x+5:x+11]
x=tampon.find('PAPP')
if x >=0 and x < (buffer_size-16) and tampon[x+10] == ' ': wh=tampon[x+5:x+10]
x=tampon.find('PTEC')
if x >=0 and x < (buffer_size-16): ph=tampon[x+5:x+7]
loop = loop + 1
if loop >= 3:
display(wh, hp, hc, ph)
loop = 0
Top
ça m'évitera d'aller au coffret qui est à l'extérieur quand je veux faire des relevés car je contrôle l'ajustemnt de ma conso ce qui me permet de la réduire de 15% en moyenne