Java 2 Ada - Tag USB
2013-09-24T20:48:00+00:00
Stephane Carrez
urn:md5:d12e23c53b2436d6becce3d51ddbdf38
AWA
Suivi de consommation éléctrique avec clef USB Teleinfo ADTEK
urn:md5:f5c0b3ced47ba72adf1f8bd2cad5b390
2013-09-24T20:48:00+00:00
2013-09-24T20:48:00+00:00
Stephane Carrez
EDF
USB
monitoring
teleinfo
<div class="post-text"><p>Les compteurs EDF récent disposent d'un module émettant périodiquement des informations sur la consommation éléctrique. Le compteur utilise un protocol série à 1200 baud, le signal est modulé par une porteuse à 50Khz (Voir <a href="http://www.domotique-info.fr/technologies-domotique/teleinformation/">téléinformation EDF</a> pour les détails ainsi que la <a href="http://norm.edf.fr/pdf/HN44S812emeeditionMars2007.pdf">Spécification Technique EDF</a>). Cet article explique comment récupérer ces informations et les rendre visibles è travers plusieurs graphes. En deux mots, le principe est de récupérer les informations EDF, d'envoyer ces informations sur un serveur et afficher tous les graphes et résultats à travers une interface Web accessible depuis Internet.</p><p><div class="wiki-img-center"><div class="wiki-img-inner"><img src="/images/PC/.bbox-teleinfo_m.jpg" longdesc="bbox-teleinfo.png, sept. 2013" alt="bbox-teleinfo.png"></img></div></div></p><h2>Téléinformation avec clef USB ADTEK</h2><p>La société <a href="http://www.adtek.fr/">Adtek</a> propose un petit module <a href="http://store.adtek.fr/home/10-teleinfo-usb-sans-souris-folle-v2.html">Téléinfo USB</a> permettant de récupérer la téléinformation via un port série. La communication se fait à 9600 baud, 8-bits, sans parité. Sous Linux, il faut charger les deux modules <code>usbserial</code> et <code>ftdi_sio</code>. Suivant la version du driver ftdi, la clef USB peut ne pas eÃâtre reconnue, il faut alors indiquer les identifiants du fabricant et du produit lors du chargement du driver.</p><pre><code>insmod usbserial.ko
insmod ftdi_sio.ko vendor=0x0403 product=0x6015
</code></pre><p>Si tout se passe bien le driver va créer le device <code>/dev/ttyUSB0</code> lorsque la clef est montée:</p><pre><code>usbserial: USB Serial Driver core
USB Serial support registered for FTDI USB Serial Device
ftdi_sio 2-2:1.0: FTDI USB Serial Device converter detected
usb 2-2: Detected FT232RL
usb 2-2: FTDI USB Serial Device converter now attached to ttyUSB0
usbcore: registered new interface driver ftdi_sio
ftdi_sio: v1.4.3:USB FTDI Serial Converters Driver
</code></pre><h2>Petit agent de monitoring</h2><p>Un petit agent de monitoring va lire en permanence les trames EDF de téléinformation via le port série. Il doit collecter les données et envoyer les résultats toutes les 5 minutes en utilisant un POST HTTP vers le serveur qui lui est donné au démarrage.</p><pre><code>edf-teleinfo /dev/ttyUSB0 http://server/teleinfo.php &
</code></pre><p>Cet agent peut tourner dans un <a href="http://www.raspberrypi.org/">Raspberry Pi</a>, un <a href="http://beagleboard.org/">BeagleBone Black</a>. Dans mon cas, je le fais tourner sur ma <a href="http://www.laboutique.bouyguestelecom.fr/offres/bbox/equipement/bbox-sensation-adsl.html">Bbox Sensation ADSL</a>. A défaut, on peut utiliser un PC standard mais ce n'est pas optimal pour la consommation éléctrique. Source de l'agent: <a href="/images/gcc/edf-teleinfo.c">edf-teleinfo.c</a></p><p>La compilation de l'agent se fait simplement avec l'une des commandes suivantes:</p><pre><code>gcc -o edf-teleinfo -Wall -O2 edf-teleinfo.c
arm-angstrom-linux-gnueabi-gcc -o edf-teleinfo-arm -Wall -O2 edf-teleinfo.c
</code></pre><h2>Création des fichiers RRDtool</h2><p>Le compteur EDF envoie une mesure toutes les 2 secondes (option <code>-s</code> de <code>rrdtool</code>). La consommation éléctrique est enregistrée sous deux data sources: <code>hc</code> (<i>Heures creuses</i>) et <code>hp</code> (<i>Heures pleines</i>). Les <i>min, max</i> et <i>average</i> sont calculés pour des périodes de 1 mn (30 mesures), 5mn (150 mesures) et 15 mn (450 mesures).</p><pre><code>rrdtool create teleinfo-home.rrd -s 2 \
DS:hc:COUNTER:300:0:4294967295 \
DS:hp:COUNTER:300:0:4294967295 \
RRA:AVERAGE:0.1:30:1800 \
RRA:MIN:0.1:30:1800 \
RRA:MAX:0.1:30:1800 \
RRA:AVERAGE:0.1:150:1800 \
RRA:MIN:0.1:150:1800 \
RRA:MAX:0.1:150:1800 \
RRA:AVERAGE:0.1:450:1800 \
RRA:MIN:0.1:450:1800 \
RRA:MAX:0.1:150:1800
</code></pre><p>Alors que les <i>Heures creuses</i> et <i>Heures pleines</i> sont définies comme <code>COUNTER</code>, l'intensité instantanée et la puissance apparente sont représentées avec des gauges variant de 0 à 70A ou 0 à 15000W.</p><pre><code>rrdtool create teleinfo_power-home.rrd -s 2 \
DS:ic:GAUGE:300:0:70 \
DS:pap:GAUGE:300:0:15000 \
RRA:AVERAGE:0.1:30:1800 \
RRA:MIN:0.1:30:1800 \
RRA:MAX:0.1:30:1800 \
RRA:AVERAGE:0.1:150:1800 \
RRA:MIN:0.1:150:1800 \
RRA:MAX:0.1:150:1800 \
RRA:AVERAGE:0.1:450:1800 \
RRA:MIN:0.1:450:1800 \
RRA:MAX:0.1:150:1800
</code></pre><p>La création des fichiers est à faire une seule fois sur le serveur. Si la création est faite dans un répertoire <code>/var/lib/collectd/rrd</code> alors on peut facilement utiliser <a href="http://pommi.nethuis.nl/category/cgp/">Collectd Graph Panel</a> pour l'affichage des graphes.</p><h2>Collecte des informations</h2><p>Sur le serveur, une page fait l'extraction des paramètres de la requête POST et remplit la base de donnés <a href="http://oss.oetiker.ch/rrdtool/">RRDtool</a>.</p><p>L'agent envoie les informations suivantes:</p><ul><li><code>date</code>: le temps Unix correspondant à la première mesure,</li><li><code>end</code>: le temps Unix de la dernière mesure,</li><li><code>hc</code>: la valeur du compteur sur les heures creuses,</li><li><code>hp</code>: la valeur du compteur sur les heures pleines,</li><li><code>ic</code>: le courant instantané,</li><li><code>pap</code>: la puissance apparente.</li></ul><p>Comme l'agent envoie les données par lot de 150 valeurs (ou plus si il y a eu des problèmes de connection), la mise à jour se fait en insérant plusieurs valeurs à la fois. Dans ce cas, <code>rrdupdate</code> s'attend à avoir le timestamp Unix suivit des valeurs des deux data sources (courant et puissance). Voici un extrait de la commande:</p><pre><code>rrdupdate \
/var/lib/collectd/rrd/home/teleinfo/teleinfo_power-home.rrd \
1379885272:4:1040 1379885274:4:1040 1379885276:4:1040 \
1379885278:4:1040 1379885280:4:1040 1379885282:4:1040 \
1379885284:4:1040 1379885286:4:1040 1379885288:4:1040 ...
</code></pre><p>Pour l'installation de la collecte, copier le fichier <code>edf-collect.php</code> sur le serveur en s'arrangeant pour rendre accessible la page via le serveur web. Source: <a href="/images/php/edf-collect.php.txt">edf-collect.php.txt</a></p><h2>Affichage des informations</h2><p><a href="http://pommi.nethuis.nl/category/cgp/">Collectd Graph Panel</a> est une application web écrite en PHP et Javascript permettant d'afficher les graphes collectés par <a href="http://collectd.org/">collectd</a>. Si les graphes sont crées au bon endroit, alors cette application les reconnaitra et permettra de les afficher. Pour cela, il faut ajouter le plugin <code>teleinfo.php</code> dans le répertoire <code>plugin</code>. Source: <a href="/images/php/teleinfo.php.txt">teleinfo.php.txt</a></p><pre><code>unzip CGP-0.4.1.zip
cp teleinfo.php.txt CGP-0.4.1/plugin/teleinfo.php
</code></pre><h2>Et maintenant</h2><p>Voir sa consommation éléctrique a un petit coté ludique. Parfois c'est surprenant de constater que la consommation éléctrique ne descend pas en dessous de 200W. Ceci dit c'est normal avec toutes ces Box, décodeurs, switch et autres appareils qui même en veille consomme quelques watts.</p><p><a href="http://www.suiviconso.fr/">Suiviconso</a></p><p><a href="http://www.planete-domotique.com/blog/2010/03/30/la-teleinformation-edf/">Planete Domotique</a></p></div>
How to repair the USB connection problem on Android Samsung phones
urn:md5:47ee41d72ec1ffbc5f492c22d3bf2e6d
2011-01-19T20:09:34+00:00
2011-01-19T20:09:34+00:00
Stephane Carrez
Android
USB
Ubuntu
<div class="post-text"><p>Several Samsung Galaxy phones seem to have USB connection problems. Sometimes the USB connection stops working and even rebooting the phone does not solve the problem. This article gives the symptoms and explains how to fix that.</p><h2>Symptoms</h2><p>It took me a long time to figure out and fix the problem (looking at many forums, trying many solutions that never worked). The problem was not a driver problem on the PC, nor some dust on the USB connector but really a software/configuration problem on the Android phone itself. The symptoms were the following:</p><ul><li>The phone is correctly configured in <code>Settings -> Applications -> Development to USB</code> mode (no development)</li><li>Plugging and unplugging the USB cable does not produce any event on the phone (it is as though you plug the charger: no USB icon in the status bar)</li><li>Rebooting the phone has no effect. USB is still not recognized (the USB icon does not appear in the status bar).</li><li>Rebooting the phone with the USB cable connected to the PC is better. The USB icon appears but it never disappears after unplug and the connection still does not work.</li><li>Under Windows, Samsung Kies tries to connect but the connection process never ends. Windows sees the USB device.</li><li>Under Ubuntu, the <code>dmesg</code> command reports an error when the USB cable is plugged:</li></ul><pre><code>[62752.296029] usb 2-6: new high speed USB device using ehci_hcd and address 38
[62752.429897] usb 2-6: configuration #1 chosen from 1 choice
[62752.431442] hub 2-6:1.0: bad descriptor, ignoring hub
[62752.431450] hub: probe of 2-6:1.0 failed with error -5
[62752.431543] cdc_acm 2-6:1.0: ttyACM0: USB ACM device
[62752.432560] hub 2-6:1.2: bad descriptor, ignoring hub
[62752.432567] hub: probe of 2-6:1.2 failed with error -5
</code></pre><ul><li>However the device <b>is recognized</b>. Indeed, you can see it with <code>lsusb</code>.</li><li>You can even use the <code>lsusb -D</code> command to look at the details of the device. <b>BUT</b>, this command reports an error (<code>can't get hub descriptor: Broken pipe</code>) within its output:</li></ul><pre><code>$ lsusb -D /dev/bus/usb/002/014
Device: ID 04e8:6601 Samsung Electronics Co., Ltd Z100 Mobile Phone
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 9 Hub
bDeviceSubClass 0 Unused
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 64
idVendor 0x04e8 Samsung Electronics Co., Ltd
idProduct 0x6601 Z100 Mobile Phone
...
can't get hub descriptor: Broken pipe
Device Qualifier (for other device speed):
bLength 10
bDescriptorType 6
bcdUSB 2.00
...
</code></pre><h2>Resolution</h2><p>1. Unplug the USB cable</p><p>2. On the cell phone, dial the following number: <b>*#7284#</b></p><p>Once the last <b>#</b> is hit, the <b>PhoneUtil</b> application is launched. Choose <b>USB -> Modem</b> and then <b>USB -> PDA</b> mode.</p><p>The good mode should be <b>PDA</b>. Even if the mode is PDA, switch to Modem and then back to PDA.</p><p>3. Plug the USB cable.</p><p><img src="/images/android/.phone-utilscreen_m.jpg" alt="Android PhoneUtil"></img></p><h3>Results</h3><p>Once the cable is plugged, the USB device is recognized and the following messages are reported by <code>dmesg</code>:</p><pre><code>[62941.921435] usb 2-6: new high speed USB device using ehci_hcd and address 39
[62942.054057] usb 2-6: configuration #2 chosen from 1 choice
[62942.086841] Initializing USB Mass Storage driver...
[62942.087128] scsi8 : SCSI emulation for USB Mass Storage devices
[62942.087310] usbcore: registered new interface driver usb-storage
[62942.087314] USB Mass Storage support registered.
[62942.087340] usb-storage: device found at 39
[62942.087344] usb-storage: waiting for device to settle before scanning
[62947.084396] usb-storage: device scan complete
[62947.085230] scsi 8:0:0:0: Direct-Access SAMSUNG GT-I5800 Card 0000 PQ: 0 ANSI: 2
[62947.088053] sd 8:0:0:0: Attached scsi generic sg4 type 0
[62947.096526] sd 8:0:0:0: [sdd] Attached SCSI removable disk
</code></pre><p>The <code>lsusb -D</code> command should now work without any problem (the <code>can't get hub descriptor: Broken pipe</code> error has gone).</p><h3>Mounting the sdcard</h3><p>Before mounting the sdcard, activate the USB mount connection on the phone by clicking on the USB icon in the status bar. Once this is done, <code>dmesg</code> will report more messages such as:</p><pre><code>[66309.394438] sd 8:0:0:0: [sdd] 3862528 512-byte logical blocks: (1.97 GB/1.84 GiB)
[66309.394934] sd 8:0:0:0: [sdd] Assuming drive cache: write through
[66309.396297] sd 8:0:0:0: [sdd] Assuming drive cache: write through
[66309.396301] sdd: sdd1
</code></pre><p>On Ubuntu, the sdcard is mounted with the following command:</p><pre><code>$ sudo mount -t vfat /dev/sdd1 /mnt/storage
</code></pre><h3>Android Device Development</h3><p>For Android development, it is necessary to configure the <code>udev</code> (dynamic device management) service. It should be done before connecting the device. For this you have to create a rules file for <code>udev</code>. Create the following file <code>/etc/udev/rules.d/51-android.rules</code> and put:</p><pre><code>SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", MODE="0666"
</code></pre><p>Make sure the file is readable:</p><pre><code># chmod a+r /etc/udev/rules.d/51-android.rules
</code></pre><p>Then, restart udev with</p><pre><code># service udev restart
</code></pre><h2>References</h2><ul><li><a href="http://www.wpcentral.com/tethering-figured-out-samsung-focus-omnia-7">USB Tethering support discovered for Samsung Focus & Omnia 7</a></li><li><a href="http://developer.android.com/guide/developing/device.html">Developing on a Device</a></li><li><a href="http://www.askvg.com/google-android-hidden-secret-codes">Google Android Hidden Secret Codes</a> (The <b>*#7284#</b> code is not listed but you'll find many others; use them with care).</li><li><a href="http://geekosaur.com/2010/01/hidden-android-debug-menu/">Hidden Android Debug Menu</a> (the <b>*#*#4636#*#*</b> code)</li></ul><h2>Update 2017</h2><p>Seven years after this initial post, people still have many problems with their USB connection. The solution presented here may not work anymore for some of you. You may checkout the following article that gives you more Android secret codes:</p><ul><li><a href="http://joyofandroid.com/android-secret-codes-hidden-menu-dialler-codes/">110 Android Secret Codes, Hidden Menu, and Dialler Codes</a></li></ul></div>