Bonjour a tous,
Je viens quérir voir aider sur comment avoir les données de consommation du compteur électrique Linky.
Historiquement j’ai un Ecodevice,.mais depuis l’installation du compteur linky je ne me suis pas intéressé a l’exploitation des données du linky. Et bizarrement ça ne fonctionne pas.
Possédant quelques esp32, j’ai voulu testé avec.
J’ai donc trouvé plusieurs solutions :
Pour le moment, je n’ai essayé que le montage électronique. Comme le projet donne les sources du code avec l’environnement Arduino, je préférerais passer par esphome…
Sans succès. Je me suis demandé si mon linky avait sa sortie TIC fonctionnelle (précision j’ai fait la demande a engie et mon linky est depuis en mode standard).
Je suis tombé ensuite sur gammatroniques : GammaTroniques - GammaTroniques
Et la vidéo youtube : https://youtu.be/3NFsX_dUdyY?si=glS3Ho8UHeAf8okY
Et j’ai notamment essayé le montage avec le ftdi :
Dans la vidéo youtube degammatronique, il dit notamment que la résistance en entrée peut être retirée si on arrive pas à lire avec l’uart la sortie TIC. Et la en la retirant, j’ai enfin eu quelque chose :
PJOURF+1 00008001 NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE 9
[03][02]
ADSC 811775150598 F
VTIC 02 J
DATE E250609174445 M
NGTF BASE <
LTARF BASE F
EAST 035627991 9
EASF01 035627991 L
EASF02 000000000 #
EASF03 000000000 $
EASF04 000000000 %
EASF05 000000000 &
EASF06 000000000 ’
EASF07 000000000 (
EASF08 000000000 )
EASF09 000000000 *
EASF10 000000000 "
EASD01 011323978 B
EASD02 011700855 <
EASD03 003697295 K
EASD04 008905863 J
IRMS1 003 1
URMS1 235 D
PREF 06 E
PCOUP 06 _
SINSTS 00656 W
SMAXSN E250609111324 04990 B
SMAXSN-1 E250603205232 03990 [
CCASN E250609173000 00690 H
CCASN-1 E250609170000 00808 $
UMOY1 E250609174000 235 7
STGE 003A4001 >
MSG1 PAS DE MESSAGE <
PRM 05163675805536 =
RELAIS 000 B
NTARF 01 N
NJOURF 00 &
NJOURF+1 00 B
Bon, ça me semble prometteur, non ?
Mais dès que je test avec l’esp32, je n’ai plus rien…
Vous auriez une idée ?
Sur f1atb, l’auteur dit qu’il faut une résistance d’au moins 1kohm…
Salut
Il y a des lots de mosfets qui ne respectent pas les brochages
J’ai passé des heures a trouver le problème
Pour enfin comprendre que drain et source était inversé.
Fait un demi tour a ton MOSFET et teste a nouveau.
voir extrait de message sur amazon
tu peux voir un exemple d’utilisation
edit
assure toi aussi d’être dans le bon mode historique ou standard c’est important pour la definition du firmware
voir le depot github suivant pour les differentes config
README.md
# Linky Teleinformation (TIC) + ESPHome + Home Assistant
## Vue Home Assistant

## Vue du Web Server

Ce fichier a été tronqué. afficher l'original
linky.yaml
esphome:
name: linky
# https://esphome.io/components/esp8266.html
esp8266:
board: d1_mini
# https://esphome.io/components/esp32.html
#esp32:
# board: lolin_s2_mini
Ce fichier a été tronqué. afficher l'original
1 « J'aime »
Merci de ton retour !
Je vais réessayer sur une breadboard, j’essaie de te faire un retour vite!
En mode standard, la valeur des résistances est importante… et ce qui est généralement préconisé (2K côté led et 10K côté transistor) ne fonctionne que rarement.
Chez moi ça fonctionne avec une résistance de 2K7 côté LED de l’optocoupleur, et une de 4K7 côté émetteur.
Si ça peut aider voilà mon YAML pour un compteur en mode standard avec un abonnement Tempo
esphome:
name: esphome-teleinfo
friendly_name: esp-teleinfo
min_version: 2024.6.0
name_add_mac_suffix: false
project:
name: esphome.web
version: dev
esp8266:
board: esp01_1m
# Enable logging
logger:
level: DEBUG
baud_rate: 0
# Enable Home Assistant API
api:
# Allow Over-The-Air updates
ota:
- platform: esphome
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Set up a wifi access point
ap: {}
uart:
id: uart_bus
rx_pin: GPIO13
baud_rate: 9600
parity: EVEN
data_bits: 7
teleinfo:
id: myteleinfo
update_interval: 30s
historical_mode: False
###### Partie sensors Linky ######
sensor:
- platform: uptime
id: uptime_seconds
name: "Uptime ESP"
update_interval: 60s
unit_of_measurement: s
accuracy_decimals: 0
internal: True
force_update: false
icon: mdi:timer
- platform: teleinfo
tag_name: "NTARF"
name: "Numéro Tarif actuel"
unit_of_measurement: ""
state_class: ""
id: linky_numero_tarif_actuel
accuracy_decimals: 0
icon: mdi:clock-time-nine-outline
teleinfo_id: myteleinfo
#Linky Intensité souscrite####################################
- platform: teleinfo
tag_name: "PREF"
name: "Linky puissance souscrite"
unit_of_measurement: "VA"
device_class: apparent_power
state_class: measurement
icon: mdi:current-ac
teleinfo_id: myteleinfo
filters:
- multiply: 1000
- filter_out: 0
#Index option Tempo
#Linky Heures Creuses Jours Bleus###############################
- platform: teleinfo
tag_name: "EASF01"
name: "Linky Tempo Index Creuses Bleus"
id: Linky_Tempo_Index_hcjb
icon: mdi:flash
teleinfo_id: myteleinfo
state_class: "total_increasing"
device_class: "energy"
unit_of_measurement: "kWh"
accuracy_decimals: 3
filters:
- multiply: 0.001
- filter_out: 0
#Linky Heures Pleines Jours Bleus#############################
- platform: teleinfo
tag_name: "EASF02"
name: "Linky Tempo Index Pleines Bleus"
id: Linky_Tempo_Index_hpjb
icon: mdi:flash
teleinfo_id: myteleinfo
state_class: "total_increasing"
device_class: "energy"
unit_of_measurement: "kWh"
accuracy_decimals: 3
filters:
- multiply: 0.001
- filter_out: 0
#Linky Heures Creuses Jours Blancs#########################
- platform: teleinfo
tag_name: "EASF03"
name: "Linky Tempo Index Creuses Blancs"
id: Linky_Tempo_Index_hcjw
icon: mdi:flash
teleinfo_id: myteleinfo
state_class: "total_increasing"
device_class: "energy"
unit_of_measurement: "kWh"
accuracy_decimals: 3
filters:
- multiply: 0.001
- filter_out: 0
#Linky Heures Pleines Jours Blancs#############################
- platform: teleinfo
tag_name: "EASF04"
name: "Linky Tempo Index Pleines Blancs"
id: Linky_Tempo_Index_hpjw
icon: mdi:flash
teleinfo_id: myteleinfo
state_class: "total_increasing"
device_class: "energy"
unit_of_measurement: "kWh"
accuracy_decimals: 3
filters:
- multiply: 0.001
- filter_out: 0
#Linky Heures Creuses Rouges###############################
- platform: teleinfo
tag_name: "EASF05"
name: "Linky Tempo Index Creuses Rouges"
id: Linky_Tempo_Index_hcjr
icon: mdi:flash
teleinfo_id: myteleinfo
state_class: "total_increasing"
device_class: "energy"
unit_of_measurement: "kWh"
accuracy_decimals: 3
filters:
- multiply: 0.001
- filter_out: 0
#Linky Heures Pleines Jours Rouges#######################
- platform: teleinfo
tag_name: "EASF06"
name: "Linky Tempo Index Pleines Rouges"
id: Linky_Tempo_Index_hpjr
icon: mdi:flash
teleinfo_id: myteleinfo
state_class: "total_increasing"
device_class: "energy"
unit_of_measurement: "kWh"
accuracy_decimals: 3
filters:
- multiply: 0.001
- filter_out: 0
#Linky Intensité Instantanée############################
- platform: teleinfo
tag_name: "IRMS1"
name: "Linky Intensité"
id: linky_intensite
unit_of_measurement: "A"
device_class: current
state_class: measurement
icon: mdi:current-ac
teleinfo_id: myteleinfo
#Avertissement de Dépassement De Puissance Souscrite#############################
#- platform: teleinfo
# tag_name: "ADPS"
# name: "Linky adps"
# device_class: current
# state_class: measurement
# icon: mdi:current-ac
# teleinfo_id: myteleinfo
#Linky Intensité maximale appelé##################################
#- platform: teleinfo
# tag_name: "IMAX"
# name: "Linky Intensité Max"
# unit_of_measurement: "A"
# device_class: current
# state_class: measurement
# icon: mdi:current-ac
# teleinfo_id: myteleinfo
#Linky Puissance apparente#########################################
- platform: teleinfo
tag_name: "SINSTS"
name: "linky puissance consommee"
id: linky_puissance_consommee
unit_of_measurement: "VA"
state_class: measurement
device_class: apparent_power
icon: mdi:gauge
teleinfo_id: myteleinfo
#Linky Tempo Couleur du Jour#########################################
- platform: template
name: "STGE couleur jour"
id: linky_couleur_jour
icon: mdi:invert-colors
accuracy_decimals: 0
#Linky Tempo Couleur du Lendemain######################################
- platform: template
name: "STGE couleur demain"
id: linky_couleur_lendemain
icon: mdi:invert-colors
accuracy_decimals: 0
#- platform: template
# name: "Linky Organe Coupure"
# id: linky_organe_coupure
# accuracy_decimals: 0
#- platform: template
# name: "Linky Numéro Index Fournisseur"
# id: linky_index_fournisseur
# accuracy_decimals: 0
#- platform: template
# name: "Linky Numéro Index Distributeur"
# id: linky_index_distributeur
# accuracy_decimals: 0
#- platform: template
# name: "Linky Etat Com Euridis"
# id: linky_com_euridis
# accuracy_decimals: 0
#- platform: template
# name: "Linky Status CPL"
# id: linky_status_cpl
# accuracy_decimals: 0
#- platform: template
# name: "Linky préavis pointe mobile"
# id: linky_preavis_pointe
# accuracy_decimals: 0
#- platform: template
# name: "Linky Pointe mobile"
# id: linky_pointe_mobile
# accuracy_decimals: 0
binary_sensor:
#- platform: template
# name: "Linky Relais"
# id: linky_contact_sec
#- platform: template
# name: "Linky Cache-bornes"
# id: linky_cachebornes
#- platform: template
# name: "Linky Surtension phase"
# id: linky_surtension_phase
#Linky Depassement de Puissance#####################################
- platform: template
name: "STGE Depassement Puissance"
id: linky_depassement_puissance
icon: mdi:stack-overflow
#Linky Producteur / Consommateur#####################################
- platform: template
name: "STGE Producteur / Consommateur"
id: linky_producteur
icon: mdi:arrow-left-right-bold
#Linky Sens Energie Active############################################
- platform: template
name: "STGE Sens Energie Active"
id: linky_sens_energie
icon: mdi:arrow-left-right-bold
#- platform: template
# name: "Linky Mode Dégradé Horloge"
# id: linky_horloge_degrade
#- platform: template
# name: "Linky Mode Téléinformation"
# id: linky_mode_tic
#- platform: template
# name: "Linky Synchro CPL"
# id: linky_sync_cpl
text_sensor:
- platform: teleinfo
tag_name: "LTARF"
name: "Libélé Tarif actuel"
id: linky_nom_tarif_actuel
icon: mdi:clock-time-nine-outline
teleinfo_id: myteleinfo
- platform: teleinfo
tag_name: "STGE"
name: "Registre de Status"
id: linky_registre_status
icon: mdi:key-variant
teleinfo_id: myteleinfo
on_value:
then:
- lambda: |-
std::string str_registre = id(linky_registre_status).state;
if (str_registre.length() > 1){
uint32_t int_registre = std::stoul(str_registre, nullptr,16);
unsigned int int_fonction = int_registre & 0b1; //masque bit 0 = Contact sec
//id(linky_contact_sec).publish_state(int_fonction !=0);
int_registre = int_registre >> 1;
int_fonction = int_registre & 0b111; //masque bit 1..3 = Organe de coupure
//id(linky_organe_coupure).publish_state((float)int_fonction);
int_registre = int_registre >> 3;
int_fonction = int_registre & 0b1; //masque bit 4 = Etat cache-bornes
//id(linky_cachebornes).publish_state(int_fonction !=0);
int_registre = int_registre >> 2;
int_fonction = int_registre & 0b1; //masque bit 6 = Surtension
//id(linky_surtension_phase).publish_state(int_fonction !=0);
int_registre = int_registre >> 1;
int_fonction = int_registre & 0b1; //masque bit 7 = Dépassement puissance
id(linky_depassement_puissance).publish_state(int_fonction !=0);
int_registre = int_registre >> 1;
int_fonction = int_registre & 0b1; //masque bit 8 = Producteur
id(linky_producteur).publish_state(int_fonction !=0);
int_registre = int_registre >> 1;
int_fonction = int_registre & 0b1; //masque bit 9 = Sens énergie active
id(linky_sens_energie).publish_state(int_fonction !=0);
int_registre = int_registre >> 1;
int_fonction = int_registre & 0b1111; //masque bit 10..13 = Numéro index fournisseur
//id(linky_index_fournisseur).publish_state((float)int_fonction);
int_registre = int_registre >> 4;
int_fonction = int_registre & 0b11; //masque bits 14 & 15 = Numéro index distributeur
//id(linky_index_distributeur).publish_state((float)int_fonction);
int_registre = int_registre >> 2;
int_fonction = int_registre & 0b1; //masque bit 16 = Mode dégradé horloge
//id(linky_horloge_degrade).publish_state(int_fonction !=0);
int_registre = int_registre >> 1;
int_fonction = int_registre & 0b1; //masque bit 17 = Mode Téléinformation
//id(linky_mode_tic).publish_state(int_fonction !=0);
int_registre = int_registre >> 2;
int_fonction = int_registre & 0b11; //masque bits 19 & 20 = Etat communication Euridis
//id(linky_com_euridis).publish_state((float)int_fonction);
int_registre = int_registre >> 2;
int_fonction = int_registre & 0b11; //masque bits 21 & 22 = Status CPL
//id(linky_status_cpl).publish_state((float)int_fonction);
int_registre = int_registre >> 2;
int_fonction = int_registre & 0b1; //masque bit 23 = Synchronisation CPL
//id(linky_sync_cpl).publish_state(int_fonction !=0);
int_registre = int_registre >> 1;
int_fonction = int_registre & 0b11; //masque bits 24 & 25 = Couleur du jour Tempo
id(linky_couleur_jour).publish_state((float)int_fonction);
int_registre = int_registre >> 2;
int_fonction = int_registre & 0b11; //masque bits 26 & 27 = Couleur du lendemain Tempo
id(linky_couleur_lendemain).publish_state((float)int_fonction);
int_registre = int_registre >> 2;
int_fonction = int_registre & 0b11; //masque bits 28 & 29 = Préavis pointes mobiles
//id(linky_preavis_pointe).publish_state((float)int_fonction);
int_registre = int_registre >> 2;
int_fonction = int_registre & 0b11; //masque bits 30 & 31 = Pointes mobiles
//id(linky_pointe_mobile).publish_state((float)int_fonction);
}
- platform: template
name: Uptime
update_interval: 60s
icon: mdi:clock-start
lambda: |-
int seconds = (id(uptime_seconds).state);
int days = seconds / (24 * 3600);
seconds = seconds % (24 * 3600);
int hours = seconds / 3600;
seconds = seconds % 3600;
int minutes = seconds / 60;
seconds = seconds % 60;
if ( days ) {
return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() };
} else if ( hours ) {
return { (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() };
} else if ( minutes ) {
return { (String(minutes) +"m "+ String(seconds) +"s").c_str() };
} else {
return { (String(seconds) +"s").c_str() };
}
web_server:
1 « J'aime »
Super, Merci beaucoup pour ton retour.
J’ai pas de pompe à désouder pour démonter le mosfet, donc je peux guère tenter pour le moment…
Dès la pompe reçue, modulo le timing, je démonte le mosfet et je tente 2,7kohm et 4,7kohm