Téleinfo filaire avec Linky

Forum dédié aux questions concernant la configuration de votre serveur sous Linux
Carthman
Messages : 96
Inscription : 22 sept. 2016, 16:27

Re: Téleinfo filaire avec Linky

Message par Carthman »

Oui je lis bien des infos avec un cat /dev/ttyUSB0, mais les trames en Standard sont complètement différentes que celles en Historique, et par exemple PAPP, HCHC et HCHP n'existent pas dans les trames standards !
higgins91
Messages : 669
Inscription : 17 nov. 2016, 11:06

Re: Téleinfo filaire avec Linky

Message par higgins91 »

Carthman a écrit : 05 oct. 2020, 23:07 par exemple PAPP, HCHC et HCHP n'existent pas dans les trames standards !
HCHC et HCHP correspondent aux tarifs heures pleines/heures creuses, si tu n'as pas cet abonnement (abonnement base par exemple) alors normal que ça n'apparaisse pas chez toi.
Dz version : 2024.7
Rpi 4 avec dongle téléinfo, GPIO pour le moment !
manuloup
Messages : 781
Inscription : 18 févr. 2015, 13:05

Re: Téleinfo filaire avec Linky

Message par manuloup »

Si tu veux, montre nous une trame et on te dira ce qu'il faut faire.
Synology DS920+ avec VM Debian 12, Aeon Labs Z-Stick Gen5, Aeon Zwave et devices zwaves , Teleinfo USB, devices Zigbee, batterie Marstek Venus E, Shelly Pro 3EM...
Carthman
Messages : 96
Inscription : 22 sept. 2016, 16:27

Re: Téleinfo filaire avec Linky

Message par Carthman »

Bonsoir,

Désolé de revenir vers vous que maintenant, mais j'avais laissé tomber ce sujet pendant un moment.
Mais bon, je n'ai plus le suivi en temps réel de ma conso qui me sert entre autre à faire du délestage sur le chauffage, et avec l'hiver, j'ai peur que je dépasse un jour les 9 kVA et que mon Linky se coupe !

Il me faut donc trouver une solution pour lire à nouveau les infos de la Teleinfo.

On m'a proposé déjà de l'aide sur ce topic, mais je ne comprends pas du tout le langage Lua, alors que le script que vous m'avez proposé me parle un peu mieux, même si je ne sais pas encore quelles adaptations apporter pour mon besoin.

Voici la trame que vous m'avez demandé (j'ai enlevé les infos non électriques) :

Code : Tout sélectionner

NGTF          BASE              <
LTARF         BASE              F
EAST    026603684       2
EASF01  014197436       E
EASF02  012406248       >
EASF03  000000000       $
EASF04  000000000       %
EASF05  000000000       &
EASF06  000000000       '
EASF07  000000000       (
EASF08  000000000       )
EASF09  000000000       *
EASF10  000000000       "
EASD01  014197436       C
EASD02  012406248       <
EASD03  000000000       "
EASD04  000000000       #
EAIT    002666950       '
ERQ1    000153600       J
ERQ2    000026310       H
ERQ3    000379898       )
ERQ4    004211658       Y
IRMS1   002     0
URMS1   229     G
PREF    09      H
PCOUP   09      "
SINSTS  00451   P
SMAXSN  H201201005531   01137   -
SMAXSN-1        H201130182240   06175   V
SINSTI  00000   <
SMAXIN  H201201000000   00000   I
SMAXIN-1        H201130103126   01936   H
CCASN   H201201010000   00424   ,
CCASN-1 H201201000000   00363   K
UMOY1   H201201010000   227
J'aurais besoin de récupérer les infos EAST (Energie active soutirée totale), EAIT (Energie active injectée totale), SINSTS (Puissance app. Instantanée soutirée) et SINSTI (Puissance app. Instantanée injectée), et d'envoyer ces infos vers 4 dispositifs différents de Domoticz.

Merci.
manuloup
Messages : 781
Inscription : 18 févr. 2015, 13:05

Re: Téleinfo filaire avec Linky

Message par manuloup »

Bonjour,

C'est assez simple. J'essaierai de te modifier mon script en conséquence dans la journée.
Synology DS920+ avec VM Debian 12, Aeon Labs Z-Stick Gen5, Aeon Zwave et devices zwaves , Teleinfo USB, devices Zigbee, batterie Marstek Venus E, Shelly Pro 3EM...
manuloup
Messages : 781
Inscription : 18 févr. 2015, 13:05

Re: Téleinfo filaire avec Linky

Message par manuloup »

Voilà, à adapter si besoin. J'ai mis juste pour EAST, tu prendras exemple si cela fonctionne pour les 3 autres. Il faut également créer un device dans domoticz et récupérer son numéro pour le mettre en variable.

Code : Tout sélectionner

#!/bin/bash
DOMO_IP="192.168.1.x"       # Domoticz IP Address à renseigner
DOMO_PORT="8080"            # Domoticz Port à renseigner
TELEINFO_EAST_IDX="861"           # Teleinfo EAST IDX à renseigner

EAST=$(dd if=/dev/ttyUSB0  bs=512 count=1 iflag=fullblock 2>/dev/null | grep EAST  | tail -1 | awk '{ print $2}')

echo "EAST : $EAST"

if [[ $EAST = +([0-9]) ]] ; then
curl -s -i -H "Accept: application/json" "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command&param=udevice&idx=$TELEINFO_EAST_IDX&nvalue=0&svalue=$EAST"
fi
Synology DS920+ avec VM Debian 12, Aeon Labs Z-Stick Gen5, Aeon Zwave et devices zwaves , Teleinfo USB, devices Zigbee, batterie Marstek Venus E, Shelly Pro 3EM...
Carthman
Messages : 96
Inscription : 22 sept. 2016, 16:27

Re: Téleinfo filaire avec Linky

Message par Carthman »

Merci beaucoup pour ta réactivité !

J'ai essayer cela, ça ne marchait pas, ça n'arrivait pas à trouver la bonne valeur : ça me sortait un champ vide.
Après plein d'essai avec des commandes dd, cat ou grep, j'ai réussi à obtenir une valeur en mettant grep -m 1.
Je ne sais pas pourquoi chez toi ça marchait et pas chez moi, mais j'ai l'impression que le flot continu d'informations venant de /dev/ttyUSB12 perturbait le fonctionnement.

J'ai même constaté que dd if=/dev/ttyUSB12 bs=512 count=1 iflag=fullblock 2>/dev/null | grep SINSTS -m 1 | tail -1 | awk '{ print $2}' ne renvoyait pas la valeur à coups sûr quand je lance la commande manuellement, alors qu'un simple grep SINSTS /dev/ttyUSB12 -m 1 | awk '{ print $2}' me donne une valeur à coup sûr.


Par contre, je vois bien que mon Compteur a reçu quelque chose, car il n'est plus en rouge, mais il n'affiche rien, est-ce que ça pourrait venir des 0 devant ? (La valeur que j'ai envoyée était 00459).

Il y a cela d'affiché dans ma console à chaque exécution manuelle du script :

Code : Tout sélectionner

SINSTS : 00422
HTTP/1.1 200 OK
Content-Length: 49
Cache-Control: no-cache
Pragma: no-cache
Access-Control-Allow-Origin: *
Content-Type: application/json;charset=UTF-8

{
        "status" : "OK",
        "title" : "Update Device"
}
J'ai également d'autres questions pour aller plus loin :

- La valeur de EAST est stockée dans une variable qui est $EAST.
Est-ce que cette variable est utilisable dans d'autres scripts ?

- Si non, quelle serait la commande qui remplacerait curl -s -i -H "Accept: application/json" "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command&param=udevice&idx=$TELEINFO_EAST_IDX&nvalue=0&svalue=$EAST" pour écrire dans une variable Domoticz plutôt que dans un dispositif ?

- Il me semble que ce script ne fait pas de boucle. Il faudrait donc le mettre dans la Crontab pour l'exécuter en permanence.
Est-ce qu'il ne serait pas mieux de le faire tourner en boucle ou ça poserait des problèmes ? (si la solution Crontab fait le même boulot ya pas de problème, je le met dans la Crontab).

- Quelle est la différence entre les capteurs virtuels "Electrique (Instantané+Compteur)" et "P1 Compteur Intelligent (Electrique) ?

Merci !
Carthman
Messages : 96
Inscription : 22 sept. 2016, 16:27

Re: Téleinfo filaire avec Linky

Message par Carthman »

Je réponds à une question à moi-même, car j'ai trouvé des choses en parallèle !

Si mon compteur n'affiche rien, c'est parce qu'il lui faut une 2ème info vu qu'il est du type "Electrique (Instantané+Compteur).
Du coups j'ai également compris la différence entre les compteurs grâce à cette page du Wiki de Domoticz !
Carthman
Messages : 96
Inscription : 22 sept. 2016, 16:27

Re: Téleinfo filaire avec Linky

Message par Carthman »

Bon alors je n'arrive toujours pas à voir quelque chose sur mon compteur, je pense que je passe à côté de quelque chose.

J'ai essayé avec un compteur "simple" qui affiche juste la conso en directe, et ça fonctionne avec ce code :

Code : Tout sélectionner

#!/bin/bash
DOMO_IP="192.168.0.8"       # Domoticz IP Address à renseigner
DOMO_PORT="9799"            # Domoticz Port à renseigner
TELEINFO_CONSO_IDX="89"           # Teleinfo CONSO IDX à renseigner

# EAST=$(grep EAST /dev/ttyUSB12 -m 1 | awk '{ print $2}')
SINSTS=$(grep SINSTS /dev/ttyUSB12 -m 1 | awk '{ print $2}')

# echo "EAST : $EAST"
echo "SINSTS : $SINSTS"

if [[ $SINSTS = +([0-9]) ]] ; then
curl -s -i -H "Accept: application/json" "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command&param=udevice&idx=$TELEINFO_CONSO_IDX&nvalue=0&svalue=$SINSTS"
fi
Mais avec le compteur qui fait affichage instantané et cumul des kwh, mon dispositif reste vierge :

Code : Tout sélectionner

#!/bin/bash
DOMO_IP="192.168.0.8"       # Domoticz IP Address à renseigner
DOMO_PORT="9799"            # Domoticz Port à renseigner
TELEINFO_CONSO_IDX="87"           # Teleinfo CONSO IDX à renseigner

EAST=$(grep EAST /dev/ttyUSB12 -m 1 | awk '{ print $2}')
SINSTS=$(grep SINSTS /dev/ttyUSB12 -m 1 | awk '{ print $2}')

echo "EAST : $EAST"
echo "SINSTS : $SINSTS"

if [[ $SINSTS = +([0-9]) ]] ; then
curl -s -i -H "Accept: application/json" "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command&param=udevice&idx=$TELEINFO_CONSO_IDX&nvalue=0&svalue=$SINSTS,$EAST"
fi

J'ai pu voir que dans ton code original tu rajoutes cela :

Code : Tout sélectionner

PAPP=`expr $PAPP + 0`

Code : Tout sélectionner

if [[ $PAPP < 100 ]] ; then
   echo "$(date) : PAPP : $PAPP2 " >> /var/log/domoticz_teleinfo.txt
fi
Quelle est l'utilité ?
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Téleinfo filaire avec Linky

Message par Keros »

Je pense que ton soucis vient que ton deuxième compteur a besoin de deux infos pour être mis à jour : https://www.domoticz.com/wiki/Domoticz_ ... counter.29
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Répondre