Zlinky decodage trame STGE (Registre de statuts)

Salut,

Pour ceux que ça intéresse voici un script python qui decode la trame STGE que l’on peut récupérer par le Zlinky.
Il y a quelques info à récupérer, comme :
. Etat du « Dépassement de la puissance de référence »
. Etat du « Contact sec »
. Etat de la sortie TIC
. Tarif en cours sur le contrat fourniture
. etc… ( https://www.enedis.fr/media/2035/download )
Cette trame est synchro à la seconde près, et elle permet eventuellement de se passer de NTARF, LTARF, RELAIS du Zlinky et éventuellement le soulager un peu :slight_smile:

def bit_shift_right(value, shift):
    return (value >> shift)

# Trame STGE en hexadécimal depuis Zlinky
trame = int(data.get("trame", "0x00000000"), 16)

# Extraction des champs.
# Selon les besoins remplacer les
# lignes commentées par le nom du
# capteur créé sous HA

decoded = {
    "sensor.lixee_tic_stge_contact_sec":        1 - trame & 1,
#   "Organe de coupure":                         bit_shift_right(trame, 1) & 7,
#    "État du cache-bornes":                     bit_shift_right(trame, 4) & 1,
#    "Surtension":                               bit_shift_right(trame, 6) & 1,
    "sensor.lixee_tic_stge_depassement_p_ref":  bit_shift_right(trame, 7) & 1,
#    "Consommation/Production":                  bit_shift_right(trame, 8) & 1,
#    "Sens de l'énergie":                        bit_shift_right(trame, 9) & 1,
    "sensor.lixee_tic_stge_tarif_fournisseur":  1 + bit_shift_right(trame, 10) & 15,
#    "Tarif contrat distributeur":               bit_shift_right(trame, 14) & 3,
#    "Mode dégradé horloge":                     bit_shift_right(trame, 16) & 1,
#    "Sortie télé-info":                         bit_shift_right(trame, 17) & 1,
#    "Sortie communication Euridis":             bit_shift_right(trame, 19) & 3,
#    "Statut CPL":                               bit_shift_right(trame, 21) & 3,
#    "Synchronisation CPL":                      bit_shift_right(trame, 23) & 1,
    "sensor.lixee_tic_stge_tempo_couleur_jour": bit_shift_right(trame, 24) & 3,
#    "Couleur lendemain Tempo":                  bit_shift_right(trame, 26) & 3,
#    "Préavis pointes mobiles":                  bit_shift_right(trame, 28) & 3,
#    "Pointe mobile":                            bit_shift_right(trame, 30) & 3,
}

# Appel du script par l'outil de dev. (actions) sous HA:
# action: python_script.linky_decode_trame_stge
# data:
#    trame: "0x{{states('sensor.lixee_status_register')}}"

# Retourner les résultats décodés dans les logs
# for key, value in decoded.items():
#    logger.info(f"{key}: {value}")

# Mettre à jour capteurs HA
for sensor, value in decoded.items():
    hass.states.set(sensor, value)

L’automatisation :

alias: Zlinky_tic_decodage_Stge
triggers:
  - trigger: state
    entity_id:
      - sensor.lixee_status_register
conditions: []
actions:
  - action: python_script.linky_decode_trame_stge
    data:
      trame: 0x{{states('sensor.lixee_status_register')}}
mode: single

3 « J'aime »

Hello,

merci pour ton post, et ça m’intéresserait de faire pareil en me servant de ton travail.
Je suis un peu rookie avec HA , de fait pourrais tu m’expliquer ou mettre le fichier script …(HA\config\Scripts ?) ?

Alors en attendant j’ai essayé :

1- de le mettre dans HA\config\Scripts
2- en le renommant linky_decode_trame_stge.yaml
3- et enfin de créer une automatisation avec ton code yaml

mais j’ai une erreur à l’exécution de l’automatisation :

Erreur : Action python_script.linky_decode_trame_stge not found

Voilà , manifestement le script python n’est pas ou bon endroit , et/ou il faut le déclarer qq part , mais là je sèche…

merci pour ton aide :slight_smile:
Cyril

Bonjour,
regarde la doc:

le script python doit être en *.py ( pas yaml )

Merci , je ne savais pas qu’il fallait un intégration supplémentaire pour que ça fonctionne.
j’essaye :: :slight_smile:
Muchas gracias

C’est bon ça marche . :grin:
A part que la valeur « demain » (bit 26&27) est systématiquement à 0 (je suis en mode Standard).
Demain est annoncé jour bleu , elle devrait donc être à 1.
Je vais voir au prochain changement si ça varie .

EDIT:
Après recherches , seuls les jours blancs et rouges seraient annoncés la veille en mode standard.
Donc 0= pas d’annonce encore, ou jour bleu demain.
Les valeurs possibles sont donc uniquement 0,2 ou 3 , jamais 1

Les bits 27&26 ne seront :
-jamais égaux à 0&1 ensemble respectivement.
-Par contre on aura, a priori
-1&0 pour les jours blancs
-1&1 pour les jours rouges