#26 02/11/2010 13:09:31

neomilium
Moddeur newbie
Date d'inscription: 13/07/2009
Messages: 45

Re: Téléinfo compteur électrique

Salut,

"

".str_replace(array('[', '\"'), array('[', '"'), '$matches[2]')." ".$lang_common['wrote'].":

"J'ai commandé et reçu des opto-coupleurs Vishay, mais j'ai pas encore trouvé le temps d'en faire quelque chose.

Ce weekend j'ai pris le temps de monter un vishay avec un adaptateur USB->TTL (FTDI). Ça n'a pas donné les résultats escomptés: le montage ne permet pas d'utiliser seuls 2 résistances et l'optocoupleur.
Attention: je ne remet pas en cause le montage à base de vishay, simplement qu'il n'est pas adapté à un usage en TTL pour tous les adaptateurs...

Pour les curieux, quelques explications: le montage vishay fournit une sortie série qui est pull-down. Or l'adaptateur que j'utilise a ses entrées en pull-ups, cela créé donc un pont diviseur dans le cas d'un '0' logique et les tensions de seuil font que la transmission ne se fait pas correctement. Le problème est solvable, à l'aide d'un ou deux transistors ou une simple porte logique. Je n'ai pas pu réaliser ce nouveau montage faute de temps. Mais j'espère pouvoir proposer un schéma minimal mais opérationnel pour tout type de UART-TTL: 3,3v et 5v.

Hors ligne

 

#27 02/11/2010 14:26:30

goundoulf
Administrateur
Date d'inscription: 21/08/2007
Messages: 4607
Site web

Re: Téléinfo compteur électrique

Merci neomilium pour ton retour ! T'avais vu un schéma fonctionnel à base de Vishay, ou t'avais envie de les utiliser ?

Hors ligne

 

#28 02/11/2010 15:55:40

neomilium
Moddeur newbie
Date d'inscription: 13/07/2009
Messages: 45

Re: Téléinfo compteur électrique

"

".str_replace(array('[', '\"'), array('[', '"'), '$matches[2]')." ".$lang_common['wrote'].":

"T'avais vu un schéma fonctionnel à base de Vishay, ou t'avais envie de les utiliser ?

J'avais vu sur le net un schéma à base de Vishay pour PC avec RS232; néanmoins, je n'ai pas encore vu de montage à base Vishay ou équivalent pour du UART-TTL. J'ai peut-être mal cherché...

J'avais envie d'utiliser ce type de montage car il est vraiment simple et ne requiert que très peu de composant donc un faible prix, une rapidité de montage qui permet même au débutant en électronique de se fabriquer son adaptateur et dernier avantage à mes yeux: la consommation que je souhaite minimale.

Hors ligne

 

#29 02/11/2010 20:41:38

ptitgal
Moddeur newbie
Date d'inscription: 07/10/2010
Messages: 27

Re: Téléinfo compteur électrique

Tu utilises deux résistances ? J'avais essayé un montage avec résistances qui ne fonctionnait pas, je l'ai tout simplement enlevé, l'adaptateur ftdi en ayant une interne.

En parcourant les docs de ftdi, il y en a une qui concerne les montages optocouplés, ça peut aider. Pour ma part, je n'en met aucune côté TTL, pas de pont de division, et comme les signaux de la téléinfo sont inversés (un 1 correspond à 0V), il n'y a pas de problèmes. Je garde juste une résistance en entrée de l'optocoupleur pour la téléinfo.

Hors ligne

 

#30 03/11/2010 11:48:04

neomilium
Moddeur newbie
Date d'inscription: 13/07/2009
Messages: 45

Re: Téléinfo compteur électrique

"

".str_replace(array('[', '\"'), array('[', '"'), '$matches[2]')." ".$lang_common['wrote'].":

"Tu utilises deux résistances ?

J'utilise une version modifiée de ce schéma:
http://www.chaleurterre.com/forum/image … v2_102.png
La modification consiste à enlever le connecteur X1, brancher la broche 2 sur le RX de mon FT232R, la broche 3 à la masse, et la 4 à VCC.

"

".str_replace(array('[', '\"'), array('[', '"'), '$matches[2]')." ".$lang_common['wrote'].":

"J'avais essayé un montage avec résistances qui ne fonctionnait pas, je l'ai tout simplement enlevé, l'adaptateur ftdi en ayant une interne.

La résistance R2 est une pull-down, et le FT232R a une pull-up interne sur ses entrées comme décrit dans http://www.ftdichip.com/Support/Documen … FT232R.pdf
(page 20, note sous la table 5.10)
Il est donc à mon sens étrange de ne pas mettre de résistance de tirage pour les cas où l'optocoupleur est bloqué, combiné avec le fait que la résistance interne est pull-up, j'ai bien l'impression qu'on ne peut lire que des '1'.

Par contre, il me semble bien après réflexion, que dans mon cas le signal va être inversé... du coup, la solution pourrait être simple: virer la R2, mettre la broche 3 de l'opto à la masse et placer mon RX (avec pull-up interne) sur la broche 4 de l'opto.

"

".str_replace(array('[', '\"'), array('[', '"'), '$matches[2]')." ".$lang_common['wrote'].":

"En parcourant les docs de ftdi, il y en a une qui concerne les montages optocouplés, ça peut aider.

Parles tu de cette note d'application : "FT2232D/H Fast Opto-Isolated Serial Interface Mode" ?

"

".str_replace(array('[', '\"'), array('[', '"'), '$matches[2]')." ".$lang_common['wrote'].":

"Pour ma part, je n'en met aucune côté TTL, pas de pont de division, et comme les signaux de la téléinfo sont inversés (un 1 correspond à 0V), il n'y a pas de problèmes. Je garde juste une résistance en entrée de l'optocoupleur pour la téléinfo.

Tu as un montage Téléinfo->UART-TTL fonctionnel ? Si oui, lequel ?

Hors ligne

 

#31 03/11/2010 14:56:10

goundoulf
Administrateur
Date d'inscription: 21/08/2007
Messages: 4607
Site web

Re: Téléinfo compteur électrique

"

".str_replace(array('[', '\"'), array('[', '"'), '$matches[2]')." ".$lang_common['wrote'].":

""

".str_replace(array('[', '\"'), array('[', '"'), '$matches[2]')." ".$lang_common['wrote'].":

"Tu utilises deux résistances ?

J'utilise une version modifiée de ce schéma:
http://www.chaleurterre.com/forum/image … v2_102.png
La modification consiste à enlever le connecteur X1, brancher la broche 2 sur le RX de mon FT232R, la broche 3 à la masse, et la 4 à VCC.

Pourquoi as-tu modifié le schéma mis en lien ? Quels sont les avantages / inconvénients ?

Hors ligne

 

#32 03/11/2010 15:00:59

neomilium
Moddeur newbie
Date d'inscription: 13/07/2009
Messages: 45

Re: Téléinfo compteur électrique

"

".str_replace(array('[', '\"'), array('[', '"'), '$matches[2]')." ".$lang_common['wrote'].":

"Pourquoi as-tu modifié le schéma mis en lien ? Quels sont les avantages / inconvénients ?

Simplement car le schéma permet de se brancher en RS232 (connecteur X1) pas en UART.

Hors ligne

 

#33 03/11/2010 16:58:16

clohr
Moddeur aficionados
Date d'inscription: 25/01/2008
Messages: 243

Re: Téléinfo compteur électrique

Juste pour ma culture, c'est quoi la distinction entre les deux ? (RS232 vs. UART)
Pour moi, j'étais dans l'idée que  " y a un UART dans une carte RS232 " (sans trop savoir ce que ça implique, si ce n'est vaguement l'idée qu'il y a un buffer dedans qui permet de limiter d'autant les interruptions lorsque des données arrivent).
Dans ton cas, concrètement, il est où ton UART sur lequel tu te branches ?

Dernière modification par clohr (03/11/2010 16:58:36)

Hors ligne

 

#34 03/11/2010 17:42:19

neomilium
Moddeur newbie
Date d'inscription: 13/07/2009
Messages: 45

Re: Téléinfo compteur électrique

"

".str_replace(array('[', '\"'), array('[', '"'), '$matches[2]')." ".$lang_common['wrote'].":

"Juste pour ma culture, c'est quoi la distinction entre les deux ? (RS232 vs. UART)

Si on souhaite être précis on ne peut pas réellement opposé l'un à l'autre mais à l'usage on entend par RS232: une forme de connecteurs (DB-9 et DB-25) et surtout des tensions électriques allant de -25V à +25V.
"

".str_replace(array('[', '\"'), array('[', '"'), '$matches[2]')." ".$lang_common['wrote'].":

"Un niveau logique "0" est représenté par une tension de +3V à +25V et un niveau logique "1" par une tension de -3V à -25V (codage NRZ). Ordinairement, des niveaux de +12V et -12V sont utilisés.
La norme V.28 indique qu'un 0 est reconnu si la tension est inférieure à -3 V, et un 1 est reconnu si la tension est supérieure à +3 V.

RS232, qu'on oppose ici à UART-TTL (UART par abus de langage).
On dénomme UART-TTL une connexion série qui n'a pas les contraintes de connecteurs et surtout qui n'a pas de tension négative pour le '0' logique: le niveau bas est GND, et le niveau haut est VCC (j'épargne aux lecteurs les tensions de seuils qui sont variables).

J'espère que c'est à peu prêt clair ce que je raconte smile

"

".str_replace(array('[', '\"'), array('[', '"'), '$matches[2]')." ".$lang_common['wrote'].":

"Dans ton cas, concrètement, il est où ton UART sur lequel tu te branches ?

J'utilise ce montage dans deux situations:
- sur un adaptateur USB->UART-TTL (qui fonctionne en 3,3v ou en 5v) pour le connecter à la NeufBox4 (ou à mon portable pour le debug).
- sur le connecteur interne d'un WRT54GS

PS: Il est également possible d'envisager d'utiliser l' UART-TTL interne de la NeufBox4 mais je préfère garder l'accès à la console Linux via ce port.

Hors ligne

 

#35 03/11/2010 18:09:01

dark
Moddeur fou
Lieu: Angers
Date d'inscription: 15/02/2008
Messages: 818

Re: Téléinfo compteur électrique

"

".str_replace(array('[', '\"'), array('[', '"'), '$matches[2]')." ".$lang_common['wrote'].":

"J'utilise ce montage dans deux situations:
- sur un adaptateur USB->UART-TTL (qui fonctionne en 3,3v ou en 5v) pour le connecter à la NeufBox4 (ou à mon portable pour le debug).
- sur le connecteur interne d'un WRT54GS

PS: Il est également possible d'envisager d'utiliser l' UART-TTL interne de la NeufBox4 mais je préfère garder l'accès à la console Linux via ce port.

Donc cela fonctionne sur la NB4. En gros il reste à faire une interface ?

Dernière modification par dark (03/11/2010 18:09:17)

Hors ligne

 

#36 03/11/2010 18:39:20

neomilium
Moddeur newbie
Date d'inscription: 13/07/2009
Messages: 45

Re: Téléinfo compteur électrique

"

".str_replace(array('[', '\"'), array('[', '"'), '$matches[2]')." ".$lang_common['wrote'].":

"Donc cela fonctionne sur la NB4. En gros il reste à faire une interface ?

Sur la NB4, il est possible de brancher en USB un adaptateur USB->UART et d'y accoler une interface Téléinfo->UART. Il est également envisageable d'utiliser cette même interface Téléinfo->UART pour la reliée sur le port interne mais:
- je n'ai pas testé donc je n'affirmerai pas ce que je ne sais pas;
- il faut pouvoir vérifier le type d'électronique d'entrée UART qui est en interne pour assurer la compatibilité avec un montage minimaliste comme je tente de le faire;
- il faut désactiver la console Linux sur ttyS0.

Hors ligne

 

#37 03/11/2010 20:28:36

dark
Moddeur fou
Lieu: Angers
Date d'inscription: 15/02/2008
Messages: 818

Re: Téléinfo compteur électrique

"

".str_replace(array('[', '\"'), array('[', '"'), '$matches[2]')." ".$lang_common['wrote'].":

""

".str_replace(array('[', '\"'), array('[', '"'), '$matches[2]')." ".$lang_common['wrote'].":

"Donc cela fonctionne sur la NB4. En gros il reste à faire une interface ?

Sur la NB4, il est possible de brancher en USB un adaptateur USB->UART et d'y accoler une interface Téléinfo->UART. Il est également envisageable d'utiliser cette même interface Téléinfo->UART pour la reliée sur le port interne mais:
- je n'ai pas testé donc je n'affirmerai pas ce que je ne sais pas;
- il faut pouvoir vérifier le type d'électronique d'entrée UART qui est en interne pour assurer la compatibilité avec un montage minimaliste comme je tente de le faire;
- il faut désactiver la console Linux sur ttyS0.

Je ne parlais pas du port série interne mais d'une interface graphique ou d'un démon. J'aimemais tester le branchement car je dispose d'une NB4 en stock et d'un un adaptateur USB->UART FTDI.

Dernière modification par dark (03/11/2010 20:29:45)

Hors ligne

 

#38 17/11/2010 11:05:10

dark
Moddeur fou
Lieu: Angers
Date d'inscription: 15/02/2008
Messages: 818

Re: Téléinfo compteur électrique

Une avancée sur ce sujet ?

Hors ligne

 

#39 17/11/2010 12:02:48

neomilium
Moddeur newbie
Date d'inscription: 13/07/2009
Messages: 45

Re: Téléinfo compteur électrique

Oui ! J'ai un montage avec un opto-coupleur Vishay, deux résistances et un FTDI. J'ai un schéma dessiné mais pas sous la main, je le posterai donc plus tard.

Coté soft, je n'ai rien trouvé que me plaise vraiment: je voulais un daemon qui m'extrait les infos et qui les mette à disposition pour d'éventuelles applications clientes (potentiellement multiples).
Le mieux selon moi (et je serai ravi d'en discuter) c'est d'avoir un daemon et un librairie pour accéder aux données du daemon. Néanmoins, avec cette conception on tombe rapidement dans l'obligation de mettre en place une communication inter-processus simplement pour quelques ensembles "clef-valeur".

Motivé par le dogme "tout est fichier" d'Unix, je me suis tourné vers teleinfofs:
http://code.google.com/p/teleinfofs/

Malheureusement, c'est en python et si on regarde le code, à chaque requête sur le système de fichier on a une connexion sur le port série, une attente de trame, etc.
Si on considère les ressources de la NeufBox (ou autre routeur du même genre) et la vitesse de transmission des trames téléinfo, ce n'est pas acceptable.

Du coup, j'ai recodé teleinfofs en C (je cherche d'ailleurs un nom qui diffère de l'implémentation python, pour l'instant la meilleure idée est: teleinfuse).
C'est fonctionnel mais uniquement foreground, je n'arrive pas à daemoniser mon appli multi-threads (un thread de lecture série, un pour FUSE).
Si quelqu'un a des idées, je prends smile

Donc au final, j'ai un répertoire mis à jour toutes les 10 sec contenant tous les fichiers correspondant aux valeurs qu'on peut avoir dans la trame.

Hors ligne

 

#40 17/11/2010 13:22:57

dark
Moddeur fou
Lieu: Angers
Date d'inscription: 15/02/2008
Messages: 818

Re: Téléinfo compteur électrique

"

".str_replace(array('[', '\"'), array('[', '"'), '$matches[2]')." ".$lang_common['wrote'].":

"Du coup, j'ai recodé teleinfofs en C (je cherche d'ailleurs un nom qui diffère de l'implémentation python, pour l'instant la meilleure idée est: teleinfuse).
C'est fonctionnel mais uniquement foreground, je n'arrive pas à daemoniser mon appli multi-threads (un thread de lecture série, un pour FUSE).
Si quelqu'un a des idées, je prends smile

Donc au final, j'ai un répertoire mis à jour toutes les 10 sec contenant tous les fichiers correspondant aux valeurs qu'on peut avoir dans la trame.

C'est déjà un bon début. Qu'est ce qui t'empêche de faire tourner l'appli en mode démon ?

Dernière modification par dark (17/11/2010 13:23:09)

Hors ligne

 

#41 17/11/2010 14:47:09

neomilium
Moddeur newbie
Date d'inscription: 13/07/2009
Messages: 45

Re: Téléinfo compteur électrique

Usuellement, pour mettre en background un prog en C, j'utilise daemon(3). Simple et efficace, je n'ai jamais eu de souci... car je n'utilisais pas les threads.
Visiblement, lorsque tu daemon() (implicitement fork()) les taches (thread) existantes sont tuées.

Pour faire simple, je fourni un lien où le type à un problème similaire:
http://forums.fedoraforum.org/showthread.php?t=98953

Il me reste des voies à explorer avant d'être bloqué: je vais tenter de détacher un thread qui en crée deux autres. Le thread détaché me servant de "fork()" façon pthread.

Hors ligne

 

#42 17/11/2010 16:00:36

goundoulf
Administrateur
Date d'inscription: 21/08/2007
Messages: 4607
Site web

Re: Téléinfo compteur électrique

teleinfuse c'est pas mal comme nom, avoir tout recodé en C c'est encore mieux smile

t'as un dépôt en ligne avec le code ?

Hors ligne

 

#43 17/11/2010 16:03:55

dark
Moddeur fou
Lieu: Angers
Date d'inscription: 15/02/2008
Messages: 818

Re: Téléinfo compteur électrique

Il faut peut être utiliser la libpthread avec pthread_create(). Tu peux jeter à oeuil à un programme en C que je connais : MuMuDVB.

Je pourrais poser la question au développeur. Sinon clohr devrait pouvoir de répondre.

http://pficheux.free.fr/articles/lmf/threads/

Pour le principe du démon :

One of the last steps in setting up a daemon is closing out the standard file descriptors (STDIN, STDOUT, STDERR). Since a daemon cannot use the terminal, these file descriptors are redundant and a potential security hazard.

source http://www.netzmafia.de/skripten/unix/l … howto.html

http://peterlombardo.wikidot.com/linux-daemon-in-c

Dernière modification par dark (17/11/2010 16:23:09)

Hors ligne

 

#44 17/11/2010 17:37:26

neomilium
Moddeur newbie
Date d'inscription: 13/07/2009
Messages: 45

Re: Téléinfo compteur électrique

"

".str_replace(array('[', '\"'), array('[', '"'), '$matches[2]')." ".$lang_common['wrote'].":

"teleinfuse c'est pas mal comme nom, avoir tout recodé en C c'est encore mieux smile

Merci smile

"

".str_replace(array('[', '\"'), array('[', '"'), '$matches[2]')." ".$lang_common['wrote'].":

"t'as un dépôt en ligne avec le code ?

Non, pas encore mais j'aimerai.. il me faut un nom de projet et un hebergeur et c'est parti.

PS: usuellement je prends googlecode... je n'aime pas particulièrement Google, c'est juste que je trouve l'outil super-efficace.

Hors ligne

 

#45 17/11/2010 17:43:08

neomilium
Moddeur newbie
Date d'inscription: 13/07/2009
Messages: 45

Re: Téléinfo compteur électrique

"

".str_replace(array('[', '\"'), array('[', '"'), '$matches[2]')." ".$lang_common['wrote'].":

"Il faut peut être utiliser la libpthread avec pthread_create()

Merci mais j'ai passé cette étape depuis quelques jours. Là le point bloquant du moment c'est vraiment l'association pthreads + background qui me fait résistance smile

"

".str_replace(array('[', '\"'), array('[', '"'), '$matches[2]')." ".$lang_common['wrote'].":

"Pour le principe du démon

Encore merci pour tout ça, je connais et pratique la daemonisation smile
là, vraiment j'insiste c'est l'usage de pthreads en background qui me pose quelques soucis. Mais j'ai de bonnes pistes... Je n'ai juste pas encore pris le temps.

Hors ligne

 

#46 17/11/2010 17:53:17

goundoulf
Administrateur
Date d'inscription: 21/08/2007
Messages: 4607
Site web

Re: Téléinfo compteur électrique

Tu fais bien le $matches[1] tout au début ?

Sinon $matches[1] peut peut être t'aider

Tiens-nous au courant !

Hors ligne

 

#47 17/11/2010 18:17:50

obinou
Administrateur
Lieu: Lot, 46
Date d'inscription: 29/08/2007
Messages: 466

Re: Téléinfo compteur électrique

"

".str_replace(array('[', '\"'), array('[', '"'), '$matches[2]')." ".$lang_common['wrote'].":

"PS: usuellement je prends googlecode... je n'aime pas particulièrement Google, c'est juste que je trouve l'outil super-efficace.

Moi j'utilise régulièrement Indefero : Ouvertement inspiré de Google Code, un simple hébergement PHP (et un accès shell pour le GIT), et zou.
Mais c'est à héberger soit-même(*); le site propose de l'hébergement payant.

Sinon, github et bien aussi a mon avis (moins agréable, quand même).

(*) Je peux te fournir ça si nécessaire.

Hors ligne

 

#48 17/11/2010 20:13:43

neomilium
Moddeur newbie
Date d'inscription: 13/07/2009
Messages: 45

Re: Téléinfo compteur électrique

"

".str_replace(array('[', '\"'), array('[', '"'), '$matches[2]')." ".$lang_common['wrote'].":

"Tu fais bien le $matches[1] tout au début ?

Oui, j'avais bien tenté de cette façon mais cela c'était soldé par un échec.Mais après un nouveau test, il s'avère que la source de l'erreur n'était plus le fait que le thread était tué mais un problème d'options FUSE et l'argument nochdir de daemon que j'avais mal choisi.
Donc merci pour l'indice ;-)
Finalement, il me reste encore à faire en sorte qu'on ne soit plus obligé de passer "-f" pour forcer fuse à ne pas lui-même se daemoniser. Ce qui nécessite de creuser un peu plus FUSE.

"

".str_replace(array('[', '\"'), array('[', '"'), '$matches[2]')." ".$lang_common['wrote'].":

"Sinon $matches[1] peut peut être t'aider

Merci pour l'info.

Hors ligne

 

#49 17/11/2010 20:19:22

miguel22
Moddeur aficionados
Date d'inscription: 27/04/2010
Messages: 160

Re: Téléinfo compteur électrique

Bonsoir,

l'appel à fork() ne permet pas d'hériter de tout les threads du parent mais seulement du thread courant.

Clairement dans ton cas, tu dois appeler daemon() avant de créer les threads.

Miguel

Hors ligne

 

#50 17/11/2010 21:08:16

neomilium
Moddeur newbie
Date d'inscription: 13/07/2009
Messages: 45

Re: Téléinfo compteur électrique

"

".str_replace(array('[', '\"'), array('[', '"'), '$matches[2]')." ".$lang_common['wrote'].":

"Oui ! J'ai un montage avec un opto-coupleur Vishay, deux résistances et un FTDI. J'ai un schéma dessiné mais pas sous la main, je le posterai donc plus tard.

Voici donc ce qui fonctionne actuellement chez moi:
handle_img_tag('$matches[1]$matches[3]')
T1 et T2 sont reliés au compteur (leur sens n'a pas d'importance).
VCC, GND et RXD sont relié à l'adapteur FTDI. Cela a été testé en 3,3v et en 5v sans problème apparent.

Hors ligne

 

Pied de page des forums