Bonjour à toutes et à tous,
Je galère à trouver une solution à mon problème.
J'utilise un module USB qui lit les trames de Teleinfo du Linky sur un Raspberry PI (ces trames sont mises à jour et envoyées en permanence par le Linky).
Mais il y a seulement 4 informations qui me sont utiles : EAST, EAIT, SINSTS et SINSTI.
J'ai trouvé un morceau de code qui me permet de trouver ces informations et de les envoyer au bon endroit :
Ca fonctionne pas trop mal, mais ça peut être un peu lent, car même si j'ai mis l'ordre des différents grep en fonction de l'ordre d'arrivée des infos désirées, le temps de traitement peut sauter une trame et du coup ça attend la trame d'après pour récupérer l'info manquante.Code:#!/bin/bash DOMO_IP="192.168.X.X" # Domoticz IP Address à renseigner DOMO_PORT="XXX" # Domoticz Port à renseigner TELEINFO_CONSO_IDX="90" # Teleinfo CONSO IDX à renseigner #EAST=$(grep EAST /dev/ttyUSB12 -m 1 | awk '{ print $2}') #EAIT=$(grep EAIT /dev/ttyUSB12 -m 1 | awk '{ print $2}') #SINSTS=$(grep SINSTS /dev/ttyUSB12 -m 1 | awk '{ print $2}') #SINSTI=$(grep SINSTI /dev/ttyUSB12 -m 1 | awk '{ print $2}') echo "EAST : $EAST" echo "EAIT : $EAIT" echo "SINSTS : $SINSTS" echo "SINSTI : $SINSTI" #if [[ $SINSTS = +([0-9]) ]] ; then #curl -s "Accept: application/json" "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command¶m=udevice&idx=$TELEINFO_CONSO_IDX&nvalue=0&svalue=$SINSTS;$EAST" > /dev/null #fi
Je cherche donc à récupérer les 4 infos en une seule trame, avec cela :
et j'obtientCode:grep -E 'EAST|EAIT|SINSTS|SINSTI' /dev/ttyUSB12 -m 4
Le problème c'est que je n'arrive pas à utiliser ce résultat dans une variable : le $variable me renvoie que la première ligne :Code:SINSTS 03856 \ SINSTI 00000 < EAST 026715032 ) EAIT 002666950 '
Bien sûr, en fonction de quand le script est déclenché, la première valeur à apparaitre n'est pas toujours la même !Code:TELEINFO=$(grep -E 'EAST|EAIT|SINSTS|SINSTI' /dev/ttyUSB12 -m 4) echo $TELEINFO SINSTI 00000 < '
J'ai passer des heures à essayer différents moyens, avec sed, avec awk, avec | tr '\n' ' ',..., entre autres pour essayer de compiler le résultat affiché sur 4 lignes en une seule pour qu'elle puisse entrer dans la variable, rien n'y fait, je dois passer à côté de quelque chose, ou peut être faut-il définir la variable d'une autre manière ?
Si quelqu'un est susceptible de m'aider, je suis preneur !!!
Merci.
-----