Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/10/2013, à 19:07

usky

Recuperer un flux d'info sur /dev/ttyUSB1

Bonjour

J'ai un préripherique USB qui récupere les données de mon compteur EDF.
La clé fonctionne, si je fais un 
J'obtient un texte qui défile. Ci joint un exemple :

DS-212j> cat /dev/ttyUSB1
PAPP 00900 *
HHPHC D /
MOTDETAT 000000 B
ADCO 040222095195 >
OPTARIF HC.. <
ISOUSC 45 ?
HCHC 034742837 ,
HCHP 043984767 C
PTEC HP..
IINST 004 [
IMAX 039 K
PAPP 00900 *
HHPHC D /
MOTDETAT 000000 B
ADCO 040222095195 >
OPTARIF HC.. <
ISOUSC 45 ?

Je souhaite pouvoir récuperer la valeur PAPP (consommation en Watt).

J'ai donc tenté un

cat /dev/USB1 | grep PAPP

Qui me renvoie bien les valeurs :

DS-212j> cat /dev/ttyUSB1 | grep PAPP
PAPP 00860 /
PAPP 00850 .
PAPP 00850 .
]

Mais là ou je bloque c'est pour récuperer uniquement la valeur numérique ?

Merci de votre aide


Un PC Desktop Sous Ubuntu 12.04 Unity + acer1410 sous Unity Plus de windows depuis 2007 Le PC acer est sous Windows7... Ubuntu ne marche plus correctement depuis la 12.04...
http://parrains.linux.free.fr/

Hors ligne

#2 Le 19/10/2013, à 23:38

ssdg

Re : Recuperer un flux d'info sur /dev/ttyUSB1

echo "PAPP 00860 /" | cut -d" "  -f2

Voilà. wink

Pour plus de détails, regarde le manuel de la commande cut wink


s'il n'y a pas de solution, c'est qu'il n'y a pas de problème... ou pas.

Hors ligne

#3 Le 20/10/2013, à 08:26

usky

Re : Recuperer un flux d'info sur /dev/ttyUSB1

Merci ssdg
Ta commande fonctionne mais j'ai encore un soucis car ajouté à ma commande cela ne me sort rien...

cat /dev/ttyUSB1 | grep PAPP | cut -d" " -f2

une idée ?


Un PC Desktop Sous Ubuntu 12.04 Unity + acer1410 sous Unity Plus de windows depuis 2007 Le PC acer est sous Windows7... Ubuntu ne marche plus correctement depuis la 12.04...
http://parrains.linux.free.fr/

Hors ligne

#4 Le 20/10/2013, à 18:18

claudius01

Re : Recuperer un flux d'info sur /dev/ttyUSB1

Bonsoir,

Peut-être que :

cat /dev/ttyUSB1 | grep PAPP | awk '{print $2}'

fonctionne mieux (si le cas pb de caractère espace, tabulation, etc.)


Cordialement, A+
--
Claudius

Hors ligne

#5 Le 21/10/2013, à 10:24

tiramiseb

Re : Recuperer un flux d'info sur /dev/ttyUSB1

Salut,

Faire ce genre de choses sur un pseudo-fichier de périphérique me semble potentiellement problématique.
L'idéal serait de faire un petit programme qui se connecte sur le tty, avec gestion de flux, gestion d'erreurs, etc, et qui traite les données qu'il reçoit...

Ça m'étonne que ça passe par ttyUSB1 : c'est un convertisseur série/usb !?



Sinon, autre chose, ta clé USB m'intéresse, c'est quoi le modèle, ça s'achète où ?

Dernière modification par tiramiseb (Le 21/10/2013, à 10:24)

Hors ligne

#6 Le 21/10/2013, à 10:53

claudius01

Re : Recuperer un flux d'info sur /dev/ttyUSB1

Bonjour,

tiramiseb a écrit :

... Ça m'étonne que ça passe par ttyUSB1 : c'est un convertisseur série/usb !?

Je dirai plutôt : Câble USB/Série ou package driver ftdi_sio de chez FTDI Chip installé dans les distributions Ubuntu > 08.04 qui permet, je cite un extrait d'article mettant en œuvre ce driver :

Linux (noyau version 2.6.31 et supérieur)
Les noyaux Linux de version supérieure ou égale à 2.6.31 intègrent les derniers pilotes
d’émulation de port virtuel du FT232R (modules ftdi_sio). Il n’y rien à installer et c’est aussi
probablement le cas pour des versions plus anciennes du noyau.
La passerelle est accessible via le périphérique /dev/ttyUSBx.
Pour émuler un terminal, nous vous recommandons GTKTerm ou HTerm.

et qui permet effectivement de faire des actions comme : echo « commandes » > /dev/ttyUSB1  ou  cat  fichier_de_commandes > /dev/ttyUSB1 et la réception plus l’affichage des réponses dans un 2ème terminal console par  cat < /dev/ttyUSB1 (cf. http://micro-infos.com/2013/01/17/progr … ronique/3/)


Cordialement, A+
--
Claudius

Hors ligne

#7 Le 21/10/2013, à 10:58

tiramiseb

Re : Recuperer un flux d'info sur /dev/ttyUSB1

claudius01 a écrit :

Je dirai plutôt : Câble USB/Série ou package driver ftdi_sio de chez FTDI Chip

Ce n'est de loin pas le seul périphérique/câble/adaptateur à faire un /dev/ttyUSBx...

Hors ligne

#8 Le 21/10/2013, à 14:18

claudius01

Re : Recuperer un flux d'info sur /dev/ttyUSB1

Re,

Entièrement d'accord avec toi tiramiseb, mais cette solution est l'une des plus utilisées par les électroniciens depuis que leur chère interface série / RS232 a disparu de tous les PC ;-(
Maintenant, on ne va pas se priver d'un driver fourni de base dans Linux et qui est prêt à être installé; je veux parler du module 'ftdi_sio.ko' :

$ sudo find / -name "ftdi_sio.ko"
/lib/modules/3.5.0-30-generic/kernel/drivers/usb/serial/ftdi_sio.ko
/lib/modules/3.5.0-23-generic/kernel/drivers/usb/serial/ftdi_sio.ko 

Cordialement, A+
--
Claudius

Hors ligne

#9 Le 26/10/2014, à 14:55

usky

Re : Recuperer un flux d'info sur /dev/ttyUSB1

Je ressucite ce topic car je n'ai toujours pas de solution...

Je souhaite maintenant l'executer sur un NAS synology.
Une solution (très peu présentable je l'admet) serait d'ecrire la sortie de ce port Serie/usb dans un fichier texte et de travailler ce fichier texte.

Pour faire cette opération, une solution manuelle que j'ai trouvé est de faire succéssivement :

cat /dev/ttyUSB0 > log.txt
sleep 2
pkill cat

Le probleme c'est que si je met tout dans un script, le script se bloque....


Un PC Desktop Sous Ubuntu 12.04 Unity + acer1410 sous Unity Plus de windows depuis 2007 Le PC acer est sous Windows7... Ubuntu ne marche plus correctement depuis la 12.04...
http://parrains.linux.free.fr/

Hors ligne

#10 Le 27/10/2014, à 09:57

ssdg

Re : Recuperer un flux d'info sur /dev/ttyUSB1

la syntaxe n'est pas exactement la même quand tu es dans un script(une question de quel processus à l'accès au clavier). Essaie avec cette syntaxe:

cat >monfichier <<EOF
test
test
EOF

Comme tu t'en doute, bash prend le contenu entre les deux EOF et le fourni à cat qui lui le répète, écrivant ainsi dans "monfichier"


s'il n'y a pas de solution, c'est qu'il n'y a pas de problème... ou pas.

Hors ligne

#11 Le 27/10/2014, à 10:06

tiramiseb

Re : Recuperer un flux d'info sur /dev/ttyUSB1

Le probleme c'est que si je met tout dans un script, le script se bloque....

Il ne se bloque pas. Il reste sur le "cat" comme tu le lui as demandé.

Dans un script et dans un terminal, ton truc réagit de la même manière : avec ton "cat" tu ne peux plus entrer de commande après, il faut que tu l'arrêtes manuellement, soit avec Ctrl-C soit dans un autre terminal.

Donc contrairement à ce que dit ssdg, j'ai pour ma part envie de te dire que, justement, la syntaxe est exactement la même dans un script et dans un terminal : si tu fais ce "cat /dev/ttyUSB0 > log.txt" dans un terminal alors tu ne peux plus rien faire d'autre dans le terminal sans tuer ce cat.

Tu peux par exemple faire la chose suivante :

while read line
do
  [tes commandes machin truc]
done < /dev/ttyUSB0

Là ça lira le contenu de ton ttyUSB ligne après ligne, et pour chaque ligne ça exécute le contenu du while.

Mais bon, pour ce genre de choses il vaut mieux faire un "vrai" programme plutôt que de se baser sur un script.

D'ailleurs en cherchant un tout petit peu sur Google j'ai trouvé ce post d'un gars qui a fait un tel programme en C : http://hallard.me/teleinfo-broadcast/. Ça pourra peut-être te simplifier la vie...

Hors ligne

#12 Le 27/10/2014, à 10:17

usky

Re : Recuperer un flux d'info sur /dev/ttyUSB1

Merci à tous les 2 pour vos réponses, je vais regarder ca.

J'utilisais le code en C pour faire cette opération mais la mise à jour du syno a tout cassé. DSM5 n'utilise plus mysql mais mariaDB et douc coup le programme en C ne fonctionne plus, il me manque une bibliotheque...
Je cherche donc une solution alternative sans compilation !

J'ai trouvé uin code php que je vais pouvoir adapter mais bizzarement il ne fonctionne pas sur le NAS.
Le code PHP ouvre le port /dev/ttyUSB0 via un fopen, mais bizarement rien n'est lu...

Mon idée est d'adapter le strict en récupérant un fichier log d'ou le cat.


Un PC Desktop Sous Ubuntu 12.04 Unity + acer1410 sous Unity Plus de windows depuis 2007 Le PC acer est sous Windows7... Ubuntu ne marche plus correctement depuis la 12.04...
http://parrains.linux.free.fr/

Hors ligne

#13 Le 27/10/2014, à 10:18

tiramiseb

Re : Recuperer un flux d'info sur /dev/ttyUSB1

Ah d'accord, donc tu connaissais déjà ça.

Mon idée est d'adapter le strict en récupérant un fichier log d'ou le cat.

while, alors.

Ou alors un truc un peu plus évolué, avec Python par exemple.

Le code PHP ouvre le port /dev/ttyUSB0 via un fopen, mais bizarement rien n'est lu...

L'utilisateur qui exécute le code a les bons droits ?

Hors ligne

#14 Le 27/10/2014, à 15:52

usky

Re : Recuperer un flux d'info sur /dev/ttyUSB1

tiramiseb a écrit :

Ah d'accord, donc tu connaissais déjà ça.

Ou alors un truc un peu plus évolué, avec Python par exemple.

J'y ai bien pensé mais je n'ai pas (encore) de compétences en python

L'utilisateur qui exécute le code a les bons droits ?

Bonne question, mais je n'en sais rien ...
Comment dire à PHP qu'il a le droit de lire ce port ?


Un PC Desktop Sous Ubuntu 12.04 Unity + acer1410 sous Unity Plus de windows depuis 2007 Le PC acer est sous Windows7... Ubuntu ne marche plus correctement depuis la 12.04...
http://parrains.linux.free.fr/

Hors ligne

#15 Le 27/10/2014, à 16:19

tiramiseb

Re : Recuperer un flux d'info sur /dev/ttyUSB1

Il faut voir avec quel utilisateur ce script PHP tournerait.

Hors ligne

#16 Le 17/12/2014, à 19:07

gipet77

Re : Recuperer un flux d'info sur /dev/ttyUSB1

bonjour,
J'ai suivi vos explications et ai réussi à remonter aussi les informations de mon compteur électrique.
N'étant pas informaticien, je souhaiterai créer un script dont le but est d'archiver toutes les 10 mn les données des champs HCHC et HCHP dans un fichier texte afin d'être utilisé ultérieurement sous tableur, du type:
2014-12-16 17:50 HCHC 000563 HCHP 000999
2014-12 16 18:00 HCHC 000563 HCHP 001002
Pouvez vous m'aider à construite ce type de script ?
D'avance merci

Hors ligne

#17 Le 17/12/2014, à 19:23

tiramiseb

Re : Recuperer un flux d'info sur /dev/ttyUSB1

Bonjour gipet77,

Pour commencer, il faut qu'on sache précisément de quelle manière tu peux lire et obtenir ces informations.
Ensuite, si tu veux faire ça sous forme de tableur ultérieurement, l'idéal est de t'intéresser au format CSV.

Pour ma part je ferais ça sous forme d'un programme écrit en Python, c'est l'un des langages les plus abordables...

Pas de souci pour t'aider à construire le truc, par contre pour ma part je ne te l'écrirai pas en entier : je préfère t'apprendre à pêcher plutôt que de te donner un poisson wink

Hors ligne

#18 Le 17/12/2014, à 20:55

ssdg

Re : Recuperer un flux d'info sur /dev/ttyUSB1

être informaticien, c'est pas facile. Heureusement faire un programme de cet ordre (surtout maintenant que tu arrive à lire les informations du compteur), c'est un projet perso du même ordre que "se construire une cabane de jardin" ou "faire une salle de jeu dans les combles".

Dans ton cas, si j'ai bien compris, tu as réuissi à lire sur ton périphérique tty les informations qui t'intéressent "en vrac", et maintenant, tu voudrais:
1) les lire périodiquement (j'aurais tendance à dire : "cron" cf doc)
2) extraire les données qui t'intéressent. (je dirais "regexp", 'parsing' (c'est le nom technique d'extraire des données d'un texte))
3) Les ajouter dans un fichier type tableur. (là, 'CSV' )


s'il n'y a pas de solution, c'est qu'il n'y a pas de problème... ou pas.

Hors ligne

#19 Le 12/01/2015, à 00:00

gipet77

Re : Recuperer un flux d'info sur /dev/ttyUSB1

Merci à tiramiseb et ssdg pour vos conseils, avec votre aide et en fouillant sur le forum, j'ai réussi à avancer:
1) j'ai édité un premier script qui capture en permanence les trames et les met dans un fichier texte.
2) dans un deuxième script, je réussi à lire le fichier précédent, isoler et stocker les deux données qui m'intéressent chacune dans un fichier propre.
  respectivement indexHC.txt et indexHP.txt, j'ai notamment utilsé cat grep tail cut.
Mais patauge depuis quelques heures, et vous sollicite de nouveau...
je voudrais additionner la valeur contenue dans indexHC.txt et une constante, avec celle contenue indexHC.txt et une autre constante et enregistrer le tout dans un fichier nommé index.txt
un troisième fichier qui me servirait de base pour travailler sous tableur top10.txt serait formaté comme ceci date ; heure ; valeur index courant - ancien index.
voilà merci d'avance et bonne année !
PS: je fais tout cela sur des heures perdues... excusez moi pour les délais des réponses...
3) je ne connaissais pas cron, je vais donc l’utiliser pour lancer toute les 10mn le deuxième script.

Dernière modification par gipet77 (Le 21/01/2015, à 11:04)

Hors ligne

#20 Le 12/01/2015, à 02:43

ssdg

Re : Recuperer un flux d'info sur /dev/ttyUSB1

En bash, voiçi des pistes:

T=$(( $(echo 123) + 1))
echo $T # => 124
date -d "2004-02-29 16:21:42" +%D # => 02/29/04 # si le format de sortie ne te plait pas: man date
date -d "2004-02-29 16:21:42" +%R # => 16:21
A=$( echo "1")
B="2"
C=$(( 4-1))
echo $A\;$B\;$C

cf: http://stackoverflow.com/questions/1842 … te-in-bash

$ date=$(date +'%Y-%m-%d %H:%M:%S')
$ read Y M D h m s <<< ${date//[-: ]/ }
$ echo "Y=$Y, m=$m"
Y=2009, m=57
cat src.file |
while read a; do
echo $a;
echo $a | cut -c 1 
done

Je t'invite aussi à regarder des choses comme sed, les fonctions bash (et comment tu peux les utiliser entre des "|"

Quand tu gèrera des choses comme les variables et les fonctions, tu pourra simplifier tes traitements. par exemple:

function fonction1 {
  cut -c 1 | md5sum ;
}
function fonction2 {
  datetime=$(echo $1| cut -c 2-)
  date -d"$datetime" +%R 
}
a="A2004-02-29 16:21:42"
echo $( echo $a | fonction1 )\;$(fonction2 "$a") #=>bf072e9119077b4e76437a93986787ef -;16:21
rm fichier.sortie
$echo 1 >> fichier.sortie
$echo 2 >> fichier.sortie
$cat fichier.sortie
1
2

Dans ton cas, tu pourrais lire ta ligne de fichier (voir read dans mes exemples plus haut), la découper de deux façons différentes (les fonctions), et les ressortir sous une ligne de CSV (via echo >>)


s'il n'y a pas de solution, c'est qu'il n'y a pas de problème... ou pas.

Hors ligne

#21 Le 12/01/2015, à 09:53

tiramiseb

Re : Recuperer un flux d'info sur /dev/ttyUSB1

Faire ça en plusieurs scripts et passer par des fichiers ".txt" intermédiaires, je trouve ça plutôt complexe. Je suis sûr que tu peux faire tout ce que tu veux en un seul script...

Quelle est la nécessité de passer par le fichier texte créé par le premier script ?

Hors ligne

#22 Le 12/01/2015, à 15:19

gipet77

Re : Recuperer un flux d'info sur /dev/ttyUSB1

Merci ssdg,
je vais essayer avec ton assistance
A+
JP

Hors ligne

#23 Le 12/01/2015, à 15:37

gipet77

Re : Recuperer un flux d'info sur /dev/ttyUSB1

Salut tiramiseb
Je passe par des fichiers intermédiaires pour les raisons suivantes :
le fichier que je reçois par le port série du PC toute les secondes contient des données qui évoluent. (kWh consommés en heures creuses et kWh consommés en heures pleines)
le premier script enregistre donc de façon basique, toutes les trames reçues. Ce fichier évolue donc en permanence et me sert de base.
le deuxième script construit le fichier csv.
un troisième script traitera d'envoi d'info http (non réalisé)

1) Intérêt 1: deux fichiers consos txt comportant les index des comptages, car le site www.michamps4b.be autorise l'envoi de ces 2 consos, je compte utilser curl (envoi http)
2) Intérêt 2 : analyse énergétique : retracer l'évolution de la demande, journalière, hebdomadaire, mensuelle et annuelle, et c'est la somme des deux compteurs qui m’intéresse.
3) les trames reçues étant différentes suivant le type de compteur électrique, j'ai prévu dans un premier temps un script n°2 pour le compteur "bleu option HC". cela concerne notre propos.
Ce script 2 sera décliné en 2a, 2b, 2c... en fonction des cas que je rencontrerai. A chaque script son débogage.

PS: cela me permet d'avancer pas à pas et de me former aux scripts....

A+
JP

Dernière modification par gipet77 (Le 21/01/2015, à 11:05)

Hors ligne

#24 Le 12/01/2015, à 15:56

tiramiseb

Re : Recuperer un flux d'info sur /dev/ttyUSB1

Oui non, l'intérêt global de la chose je l'avais bien comprise, ce que je ne comprends pas c'est l'intérêt de faire ça en plusieurs scripts.

Pourquoi ne pas construire le fichier CSV par le premier script ?
Pourquoi ne pas envoyer des infos en HTTP par le premier script ?

Hors ligne

#25 Le 12/01/2015, à 16:27

gipet77

Re : Recuperer un flux d'info sur /dev/ttyUSB1

heu... je ne sais pas...
parce que les sripts Ubuntu sont nouveaux pour moi....
parce que je ne suis pas informaticien ! ....
parce que le script 2 peut-être lancé sans le 3
parce que le script 3 peut être lancé sans le 2
parce que je ne maîtrise pas toutes les subtilités des emboîtages des commandes !
parce que je recherche la fonctionnalité avant tout, et n'ai pas de notion d'organisation des scripts,
mais je suis preneur de conseils.... et d'assistances.
je connais l'objectif final, mais pas les différentes possibilités pour y arriver

Hors ligne