<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Christophe Nowicki</title>
	<atom:link href="http://www.csquad.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.csquad.org</link>
	<description>Just for fun</description>
	<lastBuildDate>Sun, 31 Jan 2010 10:42:55 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Gestion de la lumière d&#8217;ambiance avec le protocole DMX sous Debian GNU/Linux</title>
		<link>http://www.csquad.org/2010/01/31/dmx-lumiere-ambiance-debian/</link>
		<comments>http://www.csquad.org/2010/01/31/dmx-lumiere-ambiance-debian/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 10:39:51 +0000</pubDate>
		<dc:creator>cscm</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Home automation]]></category>
		<category><![CDATA[Ambient intelligence]]></category>
		<category><![CDATA[DMX]]></category>
		<category><![CDATA[led]]></category>
		<category><![CDATA[OLA]]></category>
		<category><![CDATA[OpenDMX]]></category>
		<category><![CDATA[RGB]]></category>

		<guid isPermaLink="false">http://www.csquad.org/?p=1057</guid>
		<description><![CDATA[La technologie des lumières à LEDs offre la possibilité de placer une source de lumière n&#8217;importe où (aquarium, meubles, faux plafonds, derrière un écran, etc&#8230;). 
Par contre, les LEDs disposent de plus de fonctionnalités que les ampoules classiques.
En effet, en plus d&#8217;un bouton d&#8217;allumage, vous avez la possibilité de changer la couleur de la lumière, [...]]]></description>
			<content:encoded><![CDATA[<p>La technologie des lumières à LEDs offre la possibilité de placer une source de lumière <strong>n&#8217;importe où</strong> (aquarium, meubles, faux plafonds, derrière un écran, etc&#8230;). </p>
<p>Par contre, les LEDs disposent de <strong>plus de fonctionnalités</strong> que les ampoules classiques.<br />
En effet, en plus d&#8217;un bouton d&#8217;allumage, vous avez la possibilité de changer la couleur de la lumière, la faire varier dans le temps, modifier son intensité, jouer une séquence, etc&#8230; </p>
<p>Avec un nombre de possiblités plus grand, les interfaces de contrôle classique (<a href="http://en.wikipedia.org/wiki/X10_(industry_standard)">X10</a>, <a href="http://wiki.linuxmce.org/index.php/PLCBUS">PLCBUS</a>, etc&#8230;) ne suffisent pas.</p>
<p>Il est donc nécessaire de placer un peu plus d&#8217;intelligence dans le réseau d&#8217;illumination à l&#8217;aide du protocole <a href="http://en.wikipedia.org/wiki/DMX512">DMX</a>. </p>
<p>Ce protocole est utilisé dans le monde des concerts, des plateaux de télévision et des spectacles.<br />
Néanmoins, il est tout à fait possible de le détourner pour un usage domotique.</p>
<p>Dans ce billet, je vais décrire l&#8217;utilisation d&#8217;un contrôleur LED RGB DMX et de l&#8217;interface <a href="http://www.enttec.com/index.php?main_menu=Products&#038;pn=70303&#038;show=description&#038;name=opendmxusb">OpenDMX</a> de chez ENTTEC, à l&#8217;aide du projet <a href="http://code.google.com/p/linux-lighting/">OLA</a> sous <a href="http://www.debian.org/">Debian GNU/Linux</a>.</p>
<h3>Principe de fonctionnement</h3>
<p>Voici le schèma du montage:<br />
<img src="http://www.csquad.org/wp-content/uploads/2009/12/dmx_led_overview.png" alt="dmx_led_overview" title="dmx_led_overview" width="814" height="205" class="alignnone size-full wp-image-886" /></p>
<ul>
<li>le PC communique à l&#8217;aide du port USB avec un contrôleur DMX ; </li>
<li>les contrôleurs LEDs mis en série convertissent les ordres en instructions RGB ;</li>
</ul>
<p>Et voici ce que cela donne :</p>
<p><a href="http://www.csquad.org/wp-content/uploads/2010/01/opendmx_rgb_led_strip_usb.jpg"><img src="http://www.csquad.org/wp-content/uploads/2010/01/opendmx_rgb_led_strip_usb-300x197.jpg" alt="OpenDMX RGB LED" title="opendmx_rgb_led_strip_usb" width="300" height="197" class="alignnone size-medium wp-image-1087" /></a></p>
<h3>Matériel</h3>
<p>Voici le matériel nécessaire pour un bandeau à LED, le tout fonctionne biensûr sous Debian GNU/Linux est <em>FOSS Friendly</em> <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<table border="1" width="80%">
<tr>
<th>Produit</th>
<th>Prix</th>
</tr>
<tr>
<td><a href="http://www.sirs-e.com/st/open-dmx-usb-p-47.html">OPEN DMX USB Hardware Interface</a></td>
<td>$52.00 &#8211; $60.00</td>
</tr>
<tr>
<td><a href="http://www.sirs-e.com/st/rgb-led-dmx-controller-2-p-2930.html">RGB LED DMX Controller 2</a></td>
<td>$48.00 &#8211; $76.80</td>
</tr>
<tr>
<td><a href="http://www.sirs-e.com/st/rj45-female-cable-adapter-p-2976.html">RJ45 Connetor to XLR Female Connector</a></td>
<td>$11.20 &#8211; $14.25 </td>
</tr>
<tr>
<td><a href="http://www.sirs-e.com/st/rj45-male-cable-adapter-p-2944.html">RJ45 to XLR Male DMX Cable Adapter 3ft</a></td>
<td>$10.99 &#8211; $14.00</td>
</tr>
<tr>
<td><a href="http://www.sirs-e.com/st/adapter-pole-female-pole-male-p-35.html">DMX/XLR converter connector</a></td>
<td>$10.50 &#8211; $12.00</td>
</tr>
<tr>
<td><a href="http://www.sirs-e.com/st/controller-power-supply-usaeu-p-2923.html">LED Controller Power Supply, USA/EU</a></td>
<td>$23.10 &#8211; $36.96</td>
</tr>
<tr>
<td><a href="http://www.sirs-e.com/st/terminator-pole-male-connector-p-133.html">DMX 512 Terminator, 3 Pole Male Connector</a></td>
<td>$7.94</td>
</tr>
<tr>
<td><a href="http://www.ampoule-leds.fr/mini-bandeau-rigide-rgb-12-led-20cm-150degres-12v-dc-p-2491.html">Mini Bandeau Rigide RGB 12 Led 20cm 150° 12v DC</a></td>
<td>6 &euro; &#8211; 12,95 &euro;</td>
</tr>
<tr>
<td><a href="http://www.ampoule-leds.fr/raccord-intermediaire-pour-bandeau-lumineux-led-longueur-5cm-p-638.html">Raccord intermédiaire pour Bandeau lumineux à Led Longueur 5cm</a></td>
<td>1.5 &euro; </td>
</tr>
</table>
<p>Pour le cablage, entre le bandeau lumineux et le contrôleur à LED, Il faut couper une extrémité du cable de raccord et la dénuder pour brancher sur le bornier à quatre vis de sortie RGB.</p>
<h3>Installation du matériel</h3>
<p>Une fois que vous avez branché l&#8217;OpenDMX au PC, vous devez voir un convertisseur USB-Serial (UART) à l&#8217;aide de <em>lsusb</em> :<br />
<code><br />
$ lsusb<br />
Bus 002 Device 006: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC<br />
</code></p>
<p>Pour faire fonctionner l&#8217;OpenDMX, vous avez besoin du module noyau <em>dmx-usb</em> et d&#8217;un environnement de compilation pour les modules. (paquet linux-headers*, etc&#8230;).<br />
<code><br />
# cd /usr/src<br />
# git-clone http://www.erwinrol.com/git/dmx_usb_module/<br />
# cd dmx_usb_module<br />
# make<br />
# cp ./dmx_usb.ko /lib/modules/$(uname -r)/kernel/drivers/usb/serial<br />
# depmod -a<br />
</code></p>
<p>Comme, l&#8217;OpenDMX est un convertiseur <em>USB-Serial</em>, le noyau par défaut le présente comme une interface <em>/dev/ttyUSB</em>.<br />
Il est donc nécessaire de <em>blacklister</em> les modules <em>usbserial</em> dans le fichier <em>/etc/modprobe.d/blacklist</em>, en ajoutant les lignes suivantes :<br />
<code><br />
blacklist usbserial<br />
blacklist usb-serial<br />
blacklist ftdi_sio<br />
</code><br />
Ensuite, ajouter le module <em>dmx_usb</em> dans le fichier <em>/etc/modules</em> et rebooter la machine.<br />
Au reboot, vous devez avoir une interface <em>/dev/dmx0</em>, qu&#8217;il faut rendre accessible pour tous les utilisateurs :<br />
<code><br />
# ls -l /dev/dmx0<br />
crw-rw---- 1 root root 180, 192 2010-01-30 00:37 /dev/dmx0<br />
# chmod a+rw /dev/dmx0<br />
</code></p>
<h3>Installation du logiciel pour la gestion de la lumière : Open Lighting Architecture (OLA)</h3>
<p>Comme, il n&#8217;y a pas de paquets Debian disponibles pour ce programme, je vais décrire une procédure d&#8217;installation à partir des sources :</p>
<h4>Dépendances</h4>
<p>Vous allez avoir besoin des dépendances suivantes pour la compilation :<br />
<code><br />
# apt-get install  build-essential uuid-dev libcppunit-dev libgcrypt-dev<br />
</code></p>
<h4>Compilation de Protocol Buffers de Google</h4>
<p>Vous avez besoin de <a href="http://code.google.com/p/protobuf/">protobuf</a>, pour la gestion de l&#8217;échange de données :<br />
<code><br />
# cd /usr/src<br />
# wget http://protobuf.googlecode.com/files/protobuf-2.3.0.tar.bz2<br />
# tar xjf protobuf-2.3.0.tar.bz2<br />
# cd protobuf-2.3.0<br />
# ./configure ; make ; make install<br />
</code></p>
<h4>Compilation de google-ctemplate</h4>
<p>Vous avez besoin du système <a href="http://code.google.com/p/google-ctemplate/">ctemplate</a> :<br />
<code><br />
# cd /usr/src<br />
# wget http://google-ctemplate.googlecode.com/files/ctemplate-0.96.tar.gz<br />
# tar xzf ctemplate-0.96.tar.gz<br />
# cd ctemplate-0.96<br />
# ./configure; make ; make install<br />
</code></p>
<h4>Compilation de microhttpd (optionnel)</h4>
<p>Vous avez besoin de la <a href="ftp://ftp.gnu.org/gnu/libmicrohttpd/">libmicrohttpd</a> version > à 0.4 (non disponible dans Debian) pour l&#8217;interface web de gestion :<br />
<code><br />
# cd /usr/src<br />
# wget ftp://ftp.gnu.org/gnu/libmicrohttpd/libmicrohttpd-0.4.5.tar.gz<br />
# tar xzf libmicrohttpd-0.4.5.tar.gz<br />
# cd libmicrohttpd-0.4.5<br />
# ./configure; make ; make install<br />
</code></p>
<h4>Compilation de OLA</h4>
<p>Le projet OLA se découpe en deux parties : un serveur et des clients, dont voici la procédure de compilation.<br />
Pour le serveur :<br />
<code><br />
# cd /usr/src<br />
# wget http://linux-lighting.googlecode.com/files/ola-0.6.0.tar.gz<br />
# tar xzf ola-0.6.0.tar.gz<br />
# cd ola-0.6.0<br />
# ./configure; make ; make install<br />
</code><br />
Pour le client en C++ :<br />
<code><br />
# cd /usr/src<br />
# wget http://linux-lighting.googlecode.com/files/ola-0.6.0.tar.gz<br />
# tar xzf ola-0.6.0.tar.gz<br />
# cd ola-examples-0.6.0<br />
# ./configure; make ; make install<br />
</code></p>
<h4>Lancement d&#8217;OLAd</h4>
<p>Vous pouvez lancer <em>olad</em>, avec un utilisateur qui disspose des droits de lecture / écriture du <em>/dev/dmx0</em> :<br />
<code><br />
$ olad -l 3<br />
...<br />
</code><br />
Vous pouvez ensuite vérifier si l&#8217;OpenDMX a bien été détecté par le serveur à l&#8217;aide du client <em>ola_dev_info</em> :<br />
<code><br />
$ ola_dev_info<br />
...<br />
Device 3: OpenDmx USB Device<br />
  port 0, OUT Open Dmx at /dev/dmx0<br />
...<br />
</code></p>
<p>Et si vouz avez compilé <em>libmicrohttpd</em>, vous devez pouvoir accèder à l&#8217;interface web du <em>daemon</em>, sur le port 9090 :</p>
<table>
<tr>
<td>
<a href="http://www.csquad.org/wp-content/uploads/2010/01/dmx_console_ola_web.png"><img src="http://www.csquad.org/wp-content/uploads/2010/01/dmx_console_ola_web-300x168.png" alt="DMX OLA web console" title="dmx_console_ola_web" width="300" height="168" class="alignnone size-medium wp-image-1110" /></a>
</td>
<td>
<a href="http://www.csquad.org/wp-content/uploads/2010/01/ola_web_interface.png"><img src="http://www.csquad.org/wp-content/uploads/2010/01/ola_web_interface-300x172.png" alt="" title="ola_web_interface" width="300" height="172" class="alignnone size-medium wp-image-1112" /></a>
</td>
</tr>
</table>
<h4>Test et validation du bon fonctionnement</h4>
<p>Avant de pouvoir manipuler les LEDs, il est nécessaire d&#8217;attribuer un<em>univers</em> au contrôleur OpenDMX à l&#8217;aide de la commande <em>ola_patch</em> :<br />
<code><br />
$ ola_patch -d 3 -p 0 -u 0<br />
</code></p>
<p>Ensuite vous pouvez lancer dans deux terminaux les commandes <em>ola_dmxmonitor</em> et <em>ola_dmxconsole</em>.<br />
La première permet de suivre le statut des diffèrents composants et la seconde permet de les controler à l&#8217;aide d&#8217;un interface graphique en curses.</p>
<p>L&#8217;identifiant du contrôleur LED RGB sur le réseau DMX, est fonction de la valeur prise par le petit switch qui se situe sur celui-ci.<br />
Et se découpe de la manière suivante : </p>
<ul>
<li>Rouge = valeur du switch ;</li>
<li>Vert = valeur du switch + 1 ;</li>
<li>Bleu = valeur du switch + 2.</li>
</ul>
<p>Vous pouvez faire varier les trois valeurs pour obtenir les diffèrentes couleurs possibles.  </p>
<h3>Allez plus loin avec l&#8217;Open Lighting Architecture (OLA)</h3>
<p>OLA supporte de nombreux contrôleurs <a href="http://www.opendmx.net/index.php/Category:USB">USB</a> et Ethernet.<br />
Il dispose d&#8217;une <a href="http://www.opendmx.net/index.php/OLA_Client_API">API Client C++</a> et <a href="http://www.opendmx.net/index.php/OLA_Python_API">Python</a>, ce qui rend son intégration possible et facile dans d&#8217;autres projets et offre de nombreuses possiblités. </p>
<h3>La diffusion d&#8217;informations à l&#8217;aide de la lumière d&#8217;ambiance et ses possiblités</h3>
<p>L&#8217;idée de pouvoir contrôler l&#8217;intensité et la couleur d&#8217;un bandeau à LED qui se situe dans n&#8217;importe quel endroit de la maison, offre des possiblités interessantes en matière de diffusion d&#8217;informations.</p>
<p>En effet, la lumière permet de diffuser l&#8217;information de manière non intrusive.<br />
Voici quelques exemples des possibilités offertes :</p>
<ul>
<li>comme la lampe <a href="http://www.linuxfordevices.com/c/a/Linux-For-Devices-Articles/Device-Profile-Violet-Dal-the-first-emotional-lamp/">DAL de Violet</a>, se connecter à l&#8217;Internet pour exploiter des ressources ;</li>
<li>Pour ceux qui disposent de l&#8217;option <a href="http://www.edf-bleuciel.fr/accueil/mon-quotidien-avec-bleu-ciel-d-edf/option-tempo-141090.html">Tempo d&#8217;EDF</a>, il est possible de diffuser la couleur du jour ;</li>
<li>Modifier l&#8217;Intensité lumineuse en fonction de nombreux paramètres : tempèrature, l&#8217;ensoleillement, nombre de personnes présentes dans la pièces, activation d&#8217;une alarme, réveil du bébé, etc&#8230;</li>
</ul>
<p>Ce sont quelques exemples des possiblités offertes. Pour le reste vous pouvez faire marcher votre imagination pour créer des nouvelles manières d&#8217;inter-agir avec les machines et cette <a href="http://fr.wikipedia.org/wiki/Intelligence_ambiante">Intelligence ambiante</a>.</p>
<h3>Réferences</h3>
<p>Voici mes réferences :</p>
<ul>
<li>Le Wiki d&#8217;<a href="http://www.opendmx.net/index.php/OpenDMX.net">OpenDMX.net</a> ; </li>
<li>Le site du constructeur <a href="http://www.enttec.com/">ENTTEC</a> ;</li>
<li>Le tutorial <a href="http://www.opendmx.net/index.php/LLA,_OpenDMX_USB_and_Q_Light_Controller_Tutorial">LLA, OpenDMX USB and Q Light Controller Tutorial</a> ;</li>
<li>L&#8217;article <a href="http://www.sonomag.com/Archives/Article,Go,comprendre,dmx,Id,1980.html">Comprendre: Le DMX</a>, chez SONOMag ;</li>
<li><a href="http://members.westnet.com.au/rowanmac/opendmx.html">Hippy&#8217;s Open DMX USB Resources</a> ; </li>
<li>Le site du projet <a href="http://llg.cubic.org/dmx4linux/">DMX4Linux</a> ;</li>
<li>La présentation du <a href="http://wiki.binkey.nl/DMX">DMX</a>, chez Automated Home.</li>
</ul>
<h3>Conclusion</h3>
<p>Le protocole DMX est ancien et souffre de nombreux défaults, mais il présente encore de nombreux avantages tels que :</p>
<ul>
<li>la disponiblité de <a href="http://www.conrad.fr/webapp/wcs/stores/servlet/CatalogSearchFASResultView?storeId=10001&#038;catalogId=10001&#038;langId=-2&#038;searchSKU=&#038;fh_search=DMX">nombreux équipements</a> à prix abordable ;</li>
<li>sa simplicité. </li>
</ul>
<p>Il faut noter qu&#8217;il existe une alternative plus récente au protocole DMX : <a href="http://www.dalicontrol.com/dali/whatisdali.htm">Digital Addressable Lighting Interface (DALI)</a>.</p>
<p>Il est aussi possible de remplacer le contôleur OpenDMX par une carte <a href="http://www.arduino.cc/">Arduino</a>, comme décrit  <a href="http://www.arduino.cc/playground/DMX/Opendmx">ici</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.csquad.org/2010/01/31/dmx-lumiere-ambiance-debian/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Faire son propre moteur de recherche avec Nutch</title>
		<link>http://www.csquad.org/2010/01/11/nutch/</link>
		<comments>http://www.csquad.org/2010/01/11/nutch/#comments</comments>
		<pubDate>Mon, 11 Jan 2010 22:22:26 +0000</pubDate>
		<dc:creator>cscm</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Network]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Nutch]]></category>
		<category><![CDATA[Tomcat]]></category>

		<guid isPermaLink="false">http://www.csquad.org/?p=973</guid>
		<description><![CDATA[Allez aujourd&#8217;hui, je lâche mon troll, qui n&#8217;a pas manger depuis plusieurs semaines :
S&#8217;il y a quelque chose que vous faites et que personne ne doit savoir, peut-être qu&#8217;il faudrait commencer par ne pas le faire
Source : Google CEO Eric Schmidt Dismisses the Importance of Privacy
Il a raison le bon docteur Schmidt, il aurait du [...]]]></description>
			<content:encoded><![CDATA[<p>Allez aujourd&#8217;hui, je lâche mon troll, qui n&#8217;a pas manger depuis plusieurs semaines :</p>
<blockquote><p>S&#8217;il y a quelque chose que vous faites et que personne ne doit savoir, peut-être qu&#8217;il faudrait commencer par ne pas le faire</p></blockquote>
<p>Source : <a href="http://www.eff.org/deeplinks/2009/12/google-ceo-eric-schmidt-dismisses-privacy">Google CEO Eric Schmidt Dismisses the Importance of Privacy</a></p>
<p>Il a raison le bon docteur Schmidt, il aurait du faire plus attention <a href="http://en.wikipedia.org/wiki/Liu_Xiaobo">Liu Xiaobo</a> avant de chercher <em>droits de l’homme</em> sur un <a href="http://news.google.cn/news?q=Liu%20Xiaobo&#038;hl=zh-CN&#038;ie=UTF-8&#038;ned=ccn&#038;tab=Hn">moteur de recherche censuré</a>&#8230;</p>
<p>Bref vous m&#8217;avez compris ce genre de parole dans la bouche de l&#8217;homme le plus puissant de la plante ne m&#8217;inspire pas confiance  et je continue à penser que le slogan de Google <a href="http://en.wikipedia.org/wiki/Don%27t_be_evil">Don&#8217;t be evil</a> est une véritable plaisanterie.</p>
<p>Alors au lieu de vous conseiller de passer à Bling, je vais vous expliquer comment faire votre propre moteur de recherche.</p>
<p>Ce billet décrit la mise en place d&#8217;un moteur de recherche sous Debian GNU/Linux basé sur <a href="http://lucene.apache.org/nutch/">Nutch</a>.</p>
<h3>Pré-requis</h3>
<table>
<tr>
<td valign="top">
<a href="http://www.csquad.org/wp-content/uploads/2010/01/140px-Google’s_First_Production_Server.jpg"><img src="http://www.csquad.org/wp-content/uploads/2010/01/140px-Google’s_First_Production_Server.jpg" alt="140px-Google’s_First_Production_Server" title="140px-Google’s_First_Production_Server" width="140" height="232" class="alignleft size-full wp-image-1005" /></a>
</td>
<td>
<p>
Pour faire votre propre moteur de recherche vous avez besoin de :</p>
<ul>
<li>450 000 serveurs répartis sur toute la planète ;</li>
<li>80Go d&#8217;espace disque par machine ;</li>
<li>4Go de mémoire par machine ;</li>
<li>Une connexion fibre optique entre vos <em>&#8220;data centers&#8221;</em> ; </li>
</ul>
</td>
</tr>
</table>
<p>
Bref, si vous n&#8217;avez pas cette infrastructure à votre disposition ce n&#8217;est pas la peine d&#8217;aller plus loin <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /><br />
Bon d&#8217;accord, vous voulez simplement un moteur de recherche personnel?
</p>
<p>Un seul serveur avec les caractéristiques suivantes :</p>
<ul>
<li>Un bon processeur ;</li>
<li>Beaucoup de mémoire (4Go, ba oui, c&#8217;est du Java ma petite dame <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ) ;</li>
<li>Un gros disque dur très rapide de plus de 500Go (des <a href="http://en.wikipedia.org/wiki/Western_Digital_Raptor"> Raptor</a> par exemple ) ;</li>
<li>Une bonne bande passante, avec plus de 2Mb en <em>download</em>;</li>
<li>Une distribution Debian GNU/Linux ;</li>
<li>Des compétences en administration d&#8217;Apache, Tomcat et ligne de commande ;</li>
<li>Un peu de temps pour configurer le système et le paramétrer aux petits oignons.</li>
</ul>
<p>C&#8217;est bien plus abordable ? <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>Fonctionnalités</h3>
<p>En mettant en place mon propre moteur de recherche, je voulais obtenir les fonctionnalités suivantes :</p>
<ul>
<li>Indexation des documents locaux (ex: un Intranet) ;</li>
<li>Indexation plus poussé de mes centres d&#8217;intérêts ;</li>
<li>Indépendance par rapport à un moteur de recherche ;</li>
</ul>
<p>Néanmoins, je dois faire une croix sur : </p>
<ul>
<li>la publicité ciblée ;</li>
<li>la recherche d&#8217;images, de vidéos et temps réel ;</li>
<li>la correction orthographique.</li>
</ul>
<h3>Les limitations</h3>
<p>On pourrait dire que Nutch est un moteur de recherche de l&#8217;époque <em>&#8220;web 1.0&#8243;</em>. En effet, il ne contient pas d&#8217;algorithme d&#8217;<a href="http://fr.wikipedia.org/wiki/Intelligence_collective">Intelligence Bolchevique^Wcollective</a> comme la plupart des moteurs de recherche. Cela signifie que seul le <a href="http://fr.wikipedia.org/wiki/PageRank">Page rank</a> est utilisé et que les votes des utilisateurs ne sont pas pris en compte. Il est aussi plus sensible au <a href="http://fr.wikipedia.org/wiki/Spamdexing">Spamdexing</a>. </p>
<h3>Présentation des composants</h3>
<table>
<tr>
<td valign="top"><img src="http://www.csquad.org/wp-content/uploads/2010/01/ubuntu_nutch_small.png" alt="" title="ubuntu_nutch_small" width="128" height="187" class="alignleft size-full wp-image-1034" /></td>
<td>
<p>
L&#8217;architecture d&#8217;un moteur de recherche est assez simple, vous avez besoin :</p>
<ul>
<li>d&#8217;un <a href="http://en.wikipedia.org/wiki/Web_crawler">Web crawler</a>, un logiciel qui explore automatiquement le Web à la recherche de ressources.</li>
<li>un système d&#8217;indexation, dans le cas de Nutch c&#8217;est <a href="http://lucene.apache.org/">Apache Lucene</a> ; </li>
<li>des interfaces de recherche ;</li>
</ul>
</td>
</tr>
</table>
<h3>Installation</h3>
<p>Voici les étapes nécessaires pour faire fonctionner la version 1.0 Nuch sur une machine <a href="http://www.debian.org/">Debian GNU/Linux</a> version &#8220;lenny&#8221;.</p>
<h4>Dépendances</h4>
<p>Vous avez besoin des composants suivants :<br />
<code># apt-get install tomcat5.5 tomcat5.5-admin tomcat5.5-webapps sun-java6-jre<br />
</code><br />
Configurer le JRE par default :<br />
<code># update-alternatives  --set java /usr/lib/jvm/java-6-sun/jre/bin/java</code></p>
<h4>Nutch</h4>
<p>C&#8217;est une application en Java, que je place dans le repertoire <em>opt</em> :<br />
<code><br />
# cd /opt<br />
# wget http://mirror.mkhelif.fr/apache/lucene/nutch/nutch-1.0.tar.gz<br />
# tar xzf nutch-1.0.tar.gz<br />
# ln -s nutch-1.0 nutch<br />
# mkdir nutch/urls<br />
# mkdir nutch/crawl<br />
# chown tomcat55: nutch-1.0<br />
</code></p>
<h4>Configuration</h4>
<p>La configuration du moteur de recherche se trouve dans le fichier <em>conf/nutch-default.xml</em>, vous disposez de votre fichier <em>conf/nutch-site.xml</em>, spécifique à votre instance. Les variables intéressantes sont :</p>
<ul>
<li>http.agent.* : la politesse, pour décrire votre robot ou bien prendre l&#8217;identité d&#8217;un autre ; </li>
<li>db.fetch.interval.(default|max) : ces variables définissent le nombre de jours entre chaque passage du robot, comme vous ne pourrez pas faire le tour du web en moins de 30 jours <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> , une bonne idée est d&#8217;augmenter ces valeurs ;</li>
<li>plugin.includes : la définition des plugins pris en charge, ici vous pouvez ajouter la gestion des documents pdf, microsoft word et du protocole https.</li>
</ul>
<h3>Bootstrapping du moteur de recherche</h3>
<p>Votre moteur de recherche doit avaler une quantité de donnée importante avant de pouvoir faire une recherche pertinente.<br />
Voici quelques sources pour l&#8217;initialiser.</p>
<h4>A l&#8217;aide d&#8217;un annuaire</h4>
<p>Il  existe de très bons annuaires complets comme le projet <a href="http://www.dmoz.org/">Open Directory Project</a>.<br />
Dont l&#8217;ensemble des données sont disponibles au format RDF et téléchargeables librement : <a href="http://rdf.dmoz.org/rdf/">http://rdf.dmoz.org/rdf/</a>.<br />
Par contre, attention ce fichier référence 4 446 480 sites web et vous allez avoir besoin de beaucoup de place pour les référencer tout ce contenu.</p>
<p>Voici la procédure pour utiliser l&#8217;annuaire DMOZ avec Nutch :<br />
<code><br />
$ cd /opt/nutch<br />
$ mkdir urls<br />
$ wget http://rdf.dmoz.org/rdf/content.rdf.u8.gz -O urls/content.rdf.u8.gz<br />
$ gunzip urls/content.rdf.u8.gz<br />
$ bin/nutch org.apache.nutch.tools.DmozParser urls/content.rdf.u8 > urls/dmoz<br />
$ bin/nutch inject crawl/crawldb urls/dmoz<br />
Injector: starting<br />
Injector: crawlDb: crawl/crawldb<br />
Injector: urlDir: urls/dmoz<br />
Injector: Converting injected urls to crawl db entries.<br />
Injector: Merging injected urls into crawl db.<br />
Injector: done<br />
</code></p>
<h4>A l&#8217;aide d&#8217;un Marque-page</h4>
<p>Une autre source pour initialiser le moteur de recherche est d&#8217;utiliser les adresses contenues dans votre marque-page. Le principal avantage de cette technique est la faible quantité de données  à analyser et une pertinence de recherche accrue.<br />
Pour ce faire, vous devez exporter votre marque-page au format HTML (pour Mozilla Firefox) et en extraire les adresses de la manière suivante :</p>
<p><code><br />
$ cd /opt/nutch<br />
$ grep "A HREF=\"http"  bookmarks.html | cut -d '"' -f 2  > urls/bookmarks<br />
$ bin/nutch inject crawl/crawldb urls/bookmarks<br />
Injector: starting<br />
Injector: crawlDb: crawl/crawldb<br />
Injector: urlDir: urls/bookmarks<br />
Injector: Converting injected urls to crawl db entries.<br />
Injector: Merging injected urls into crawl db.<br />
Injector: done<br />
</code></p>
<h4>A l&#8217;aide de Wikipedia</h4>
<p><a href="http://fr.wikipedia.org">Wikipedia</a> fourni des <em>dumps</em> de sa <a href="http://en.wikipedia.org/wiki/Wikipedia_database">base de données</a> au format XML. Il est donc possible d&#8217;utiliser les URLs des articles de wikipedia comme source.<br />
Voici la procédure pour la version française de Wikipedia, celle-ci contient 897 974 urls.<br />
<code><br />
$ cd /opt/nutch/<br />
$ mkdir urls<br />
$ wget http://download.wikimedia.org/frwiki/latest/frwiki-latest-abstract.xml -O urls/frwiki-latest-abstract.xml<br />
$ grep "&lt;url&gt;" urls/frwiki-latest-abstract.xml | cut -d '>' -f 2 | cut -d '< ' -f 1 > urls/wikipedia-fr<br />
$ bin/nutch inject crawl/crawldb urls/wikipedia-fr<br />
Injector: starting<br />
Injector: crawlDb: crawl/crawldb<br />
Injector: urlDir: urls/wikipedia-fr<br />
Injector: Converting injected urls to crawl db entries.<br />
Injector: Merging injected urls into crawl db.<br />
Injector: done<br />
</code></p>
<h3>What you&#8217;re waitin&#8217; for ? Christmas ?</h3>
<h4>Come get some!</h4>
<p>Une fois que vous avez chargé la base de données avec vos urls, il faut les parcourir afin de les indexer. Cela se fait à l&#8217;aide de plusieurs commandes :</p>
<ul>
<li><strong>generate</strong> : sélections des adresses à parcourir ;</li>
<li><strong>fetch</strong> : parcourt des urls ;</li>
<li><strong>updatedb</strong> : mise à jours de la base des adresses ;</li>
<li><strong>invertlinks</strong> : mise à jours de l&#8217;index des adresses inversées  ;</li>
<li><strong>index</strong> : indexation des données  ;</li>
</ul>
<p>Une séquence classique ressemble donc à cela :<br />
<code><br />
bin/nutch generate crawl/crawldb crawl/segments -topN 1000<br />
s1=`ls -d crawl/segments/2* | tail -1`<br />
bin/nutch fetch $s1<br />
bin/nutch updatedb crawl/crawldb $s1<br />
bin/nutch invertlinks crawl/linkdb $s1<br />
bin/nutch index crawl/indexes crawl/crawldb crawl/linkdb $s1<br />
</code><br />
Cette suite de commandes vous permet de parcourir et d´indexer 1000 adresses issues de votre base.<br />
C&#8217;est un très bon 1er test pour voir si cela fonctionne. </p>
<h4>Shake it, baby!</h4>
<p>Une autre commande intéressante est <em>readdb</em> avec l&#8217;option <em>stats</em>, qui permet d&#8217;obtenir des informations sur le contenu de votre base  :<br />
<code><br />
$ bin/nutch readdb crawl/crawldb/ -stats<br />
CrawlDb statistics start: crawl/crawldb/<br />
Statistics for CrawlDb: crawl/crawldb/<br />
TOTAL urls:     3377315<br />
...<br />
min score:      0.0<br />
avg score:      0.13178158<br />
max score:      401.402<br />
status 1 (db_unfetched):        2966337<br />
status 2 (db_fetched):  300008<br />
status 3 (db_gone):     46659<br />
status 4 (db_redir_temp):       27857<br />
status 5 (db_redir_perm):       36454<br />
</code><br />
Une bonne idées serait de mettre en place un système de monitoring sur ces informations pour suivre le déroulement. Par contre, il faut faire attention car la commande prend plusieurs minutes à s&#8217;exécuter.  (donc hors de question de la placer dans un plugin munin, un mail tous les soirs serait une meilleur méthode). </p>
<h4>Damn&#8230; I&#8217;m looking good!</h4>
<p>Vous pouvez tester en ligne de commande  le fonctionnement du moteur de recherche :<br />
<code>$ bin/nutch org.apache.nutch.searcher.NutchBean apache<br />
Total hits: 6413<br />
 0 20100104001440/http://xmlgraphics.apache.org/fop/<br />
 ... be part of Apache's XML Graphics project . Demonstration ... goals of the Apache FOP project are to ...<br />
 1 20100103201220/http://velocity.apache.org/<br />
 ... Library Site building Site tools Apache Reference Apache Website How the ASF ... way in its field. Apache<br />
...<br />
</code></p>
<p>Voilà cela fonctionne en ligne de commande, nous pouvons passer à l&#8217;interface end user (enfin un moteur de recherche en ligne de commande c&#8217;est très pratique aussi <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  )</p>
<h3>Configuration de l&#8217;interface web</h3>
<p>Nutch fournir un application pour Tomcat / Jboss. Il suffit de la déployer et de lui indiquer l&#8217;emplacement de votre index de la manière suivante :<br />
<code><br />
# cd /opt/nutch<br />
# cp nutch-1.0.war /var/lib/tomcat5.5/webapps<br />
... attendre<br />
# vim /var/lib/tomcat5.5/webapps/nutch-1.0/WEB-INF/classes/nutch-default.xml<br />
... remplacer la value de <em>searcher.dir</em>  par /opt/nutch/crawl<br />
</code><br />
Mais aussi modifier la sécurité de tomcat, via le fichier <em>/etc/default/tomcat5.5</em> en mettant la variable <em>TOMCAT5_SECURITY</em> à no.<br />
Ou bien en créant un fichier policy donnant l&#8217;accès au répertoire <em>/opt/nutch/crawl</em>. (c&#8217;est plus propre <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  )</p>
<p>Vous pouvez ensuite redémarrer tomcat et accèder au moteur de recherche via votre navigateur sur le port 8180.</p>
<h3>Problèmes rencontrés</h3>
<p>Voici quelques problèmes que j&#8217;ai rencontré lors de mes tests de la version 1.0 de Nutch :</p>
<h4>La directive merge ne fonctionne pas</h4>
<p>Impossible de <em>fusionner</em> deux index, il est nécessaire de re-creer l&#8217;ensemble de l&#8217;index à chaque fois.</p>
<h4>La directive fetch flanche</h4>
<p>Lorsque trop nombreux sites sont choisis dans la liste des sites à parcourir par le robot d&#8217;indexation à l&#8217;aide de l&#8217;option <em>topN</em>, le programme produit une erreur et le <em>segement</em> produit est corrompu. (c&#8217;est pour cette raison que je limite le nombre de site dans un segment à 5000)</p>
<h3>Maintenance de l&#8217;index</h3>
<p>Une fois le moteur de recherche mise en place, il faut maintenir l&#8217;index à jours. Pour cela, j&#8217;ai mis en place un simple script de crawl avec cron qui se lance tous les soirs :<br />
<code><br />
#!/bin/sh<br />
bin/nutch generate crawl/crawldb crawl/segments -topN 5000<br />
s1=`ls -d crawl/segments/2* | tail -1`<br />
bin/nutch fetch $s1<br />
bin/nutch updatedb crawl/crawldb $s1<br />
bin/nutch invertlinks crawl/linkdb $s1<br />
</code><br />
et un autre qui re-créer l&#8217;index :<br />
<code><br />
#!/bin/sh<br />
rm -rf crawl/indexes/<br />
bin/nutch index crawl/indexes/ crawl/crawldb/ crawl/linkdb/ crawl/segments/*<br />
</code></p>
<h3>Optimisation du robot d&#8217;indexation</h3>
<p>La principale difficulté de ce projet est l&#8217;indexation d&#8217;une énorme quantité de données avec des moyens techniques très limité.<br />
Voici donc quelques idées pour optimiser l&#8217;indexation de votre moteur de recherche. </p>
<h4>Utiliser le serveur mandataire de votre fournisseur d&#8217;accès à Internet</h4>
<p>Vous pouvez ajouter l&#8217;adresse du serveur mandataire de votre FAI dans le fichier <em>conf/nutch-site.xml</em> :<br />
<code><br />
&lt;property><br />
  &lt;name>http.proxy.host&lt;/name><br />
  &lt;value>proxy.free.fr&lt;/value><br />
&lt;/property><br />
&lt;property><br />
  &lt;name>http.proxy.port&lt;/name><br />
  &lt;value>3128&lt;/value><br />
&lt;/property><br />
</code></p>
<p>Note : On me signale dans l&#8217;oreillette, que <a href="http://www.freenews.fr/spip.php?article7300">mon FAI à fermer son proxy</a> à cause d&#8217;une sombre histoire de <a href="http://fr.wikipedia.org/wiki/Loi_Cr%C3%A9ation_et_Internet">Haute Autorité De l&#8217;Ouverture Postale Inopinée</a>.</p>
<h4>Mise en place d&#8217;un serveur DNS locale</h4>
<p>Vous avez besoin de mettre en place un serveur cache DNS locale qui prend en charge les requêtes du robot. Vous pouvez faire cela avec <a href="https://www.isc.org/products/BIND/">ISC BIND</a> ou bien <a href="http://www.phys.uu.nl/~rombouts/pdnsd.html">pdnsd</a>. </p>
<h4>Augmentation du nombre de Threads</h4>
<p>Vous pouvez aussi augmenter le nombre de processus utiliser par le robot d&#8217;indexation en modifiant les variables du fichier de configuration :</p>
<ul>
<li><em>fetcher.threads.fetch</em> : nombre de threads au total (42) ;</li>
</ul>
<p>Pour plus d&#8217;informations, vous pouvez voir sur le wiki du projet : <a href="http://wiki.apache.org/nutch/OptimizingCrawls">OptimizingCrawls</a>.</p>
<h3>Imposer^WIntégrer Nutch</h3>
<p>Voici quelques astuces pour intégrer Nutch à votre architecture. </p>
<h4>Mozilla Firefox</h4>
<p>Pour Mozilla Firefox, le système de plugin permet d&#8217;inclure votre <a href="https://developer.mozilla.org/en/Creating_OpenSearch_plugins_for_Firefox">propre moteur de recherche</a>.<br />
Pour faire cela, il faut placer le fichier <a href="/wp-content/contrib/nutch.xml">nutch.xml</a> dans votre profile Firefox : <em>~/.mozilla/firefox/*.default/searchplugins</em> (en remplacant par l&#8217;addresse de votre instance ) .</p>
<h4>DNS Menteur</h4>
<p>Vous pouvez modifier la configuration de votre DNS pour résoudre le domaine google avec l&#8217;adresse de votre moteur de recherche. (Ouais, je sais Net Neutrality, toussa <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ). En modifiant la feuille de style de l&#8217;interface web certains utilisateurs ne verront surement pas la diffèrence.</p>
<h3>Est-ce bien raisonnable ?</h3>
<p>Vous allez me dire. Héberger son propre moteur de recherche chez soit, quelle drôle d&#8217;idée  <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /><br />
Je pousse, le concept d&#8217;<a href="http://fr.wikipedia.org/wiki/Auto-h%C3%A9bergement">Auto-hébergement</a> au maximum, mais il est clair que j&#8217;ai fait cette article <em>&#8220;Just for fun&#8221;</em>, car même si je ne peut indexer que 5000 sites par jours (le script fonctionne durant les heures creuses) , soit 1 825 000 en un an, je vais avoir beaucoup de mal à indexer les 4 446 480 urls de DMOZ.</p>
<h3>Références</h3>
<p>Voici quelques références intéressantes sur le sujet :</p>
<ul>
<li><a href="http://infolab.stanford.edu/~backrub/google.html">The Anatomy of a Large-Scale Hypertextual Web Search Engine</a> : description de l&#8217;architecture de Google ;</li>
<li><a href="http://www.schneier.com/blog/archives/2009/12/my_reaction_to.html">La réponse de Bruce Schneier</a> à Eric Schmidt ;</li>
<li>Le <a href="http://lucene.apache.org/nutch/tutorial8.html">tutorial</a> pour les versions 0.8.x de Nutch ;</li>
<li>Le <a href="http://wiki.apache.org/nutch/FrontPage">Wiki</a> du projet Nutch ; </li>
<li>Un <a href="http://www.bustedtees.com/skynet">tee short</a> très googlitude ;</li>
<li>Un autre tutorial similaire pour une version plus ancienne : <a href="http://goupil.arnaud.free.fr/nutch.php">Installation de Nutch 0.8.1 sous Ubuntu 6.10</a> d&#8217;Arnaud Goupil ;</li>
<li>Le blog du groupe de travail francophone : <a href="http://frutch.blogspot.com/">Frutch</a> ;</li>
<li><a href="http://www.motrech.com/">Motrech</a>, le blog consacré aux moteurs de recherche. </li>
</ul>
<h3>Conclusion</h3>
<p>Vous avez maintenant à votre disposition un moteur de recherche personnel.<br />
Et vous êtes libre de rechercher des choses sans que personne ne puisse le savoir <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /><br />
L&#8217;étape la plus dure est de se passer de l&#8217;utilisation google <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /><br />
Si vous voulez aller plus loin dans le monde des moteurs de recherche libre vous pouvez intégrer Nutch avec <a href="http://lucene.apache.org/solr/features.html">Solr</a>, comme décrit dans cette article : <a href="http://www.lucidimagination.com/blog/2009/03/09/nutch-solr/">Using Nutch with Solr</a>.<br />
Afin d&#8217;obtenir un moteur de recherche professionnel pour une entreprise. (principalement pour éviter la fuite d&#8217;information).<br />
Ou bien si vous si êtes intéressé par un produit similaire aux <a href="http://www.google.com/enterprise/intranet_search.html">Solutions d&#8217;entreprise</a> de Google.</p>
<p>Pour finir, la petite cerise sur la gâteau, comme Nutch utilise <a href="http://hadoop.apache.org/">Hadoop</a>, il <em>scale</em> comme un troupeau éléphants <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.csquad.org/2010/01/11/nutch/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Présentation du standard Zigbee</title>
		<link>http://www.csquad.org/2009/12/19/zigbee/</link>
		<comments>http://www.csquad.org/2009/12/19/zigbee/#comments</comments>
		<pubDate>Sat, 19 Dec 2009 13:00:50 +0000</pubDate>
		<dc:creator>cscm</dc:creator>
				<category><![CDATA[Home automation]]></category>
		<category><![CDATA[Network]]></category>
		<category><![CDATA[Robotics]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[ZigBee]]></category>

		<guid isPermaLink="false">http://www.csquad.org/?p=893</guid>
		<description><![CDATA[



Je reviens des mercredis de la RFID organisé par filrfid, le sujet de la présentation était le protocole ZigBee. 
Lors de la présentation faite par Véranith Ly de la société oRFIDée, j&#8217;ai appris beaucoup de choses sur ce protocole. 
J&#8217;aimerai donc vous en faire profiter et parler des domaines qui m&#8217;intéressent à savoir la domotique, [...]]]></description>
			<content:encoded><![CDATA[<table>
<tr valign='top'>
<td valign='top'><img src="http://www.csquad.org/wp-content/uploads/2009/12/ZigBee_Network_Design-za-web.jpg" alt="ZigBee_Network_Design" title="ZigBee_Network_Design" width="257" height="200" class="alignleft size-full wp-image-936" /></td>
<td>
<p>Je reviens des <a href="http://www.filrfid.org/article-16-decembre-un-mercredi-special-zigbee-venez-nombreux--40848259.html">mercredis de la RFID</a> organisé par <a href="http://www.filrfid.org/">filrfid</a>, le sujet de la présentation était le protocole <a href="http://fr.wikipedia.org/wiki/Zigbee">ZigBee</a>. </p>
<p>Lors de la présentation faite par Véranith Ly de la société <a href="http://www.orfidee.com/">oRFIDée</a>, j&#8217;ai appris beaucoup de choses sur ce protocole. </p>
<p>J&#8217;aimerai donc vous en faire profiter et parler des domaines qui m&#8217;intéressent à savoir la domotique, la robotique et la topologie des réseaux maillés.
</p>
</td>
</tr>
</table>
<h3>Description rapide du standard</h3>
<p><a href="http://fr.wikipedia.org/wiki/Zigbee">ZigBee</a>, est un standard de communication sans-fils comme le <a href="http://fr.wikipedia.org/wiki/Wi-Fi">Wifi</a> ou le <a href="http://fr.wikipedia.org/wiki/Bluetooth">Bluetooth</a>.<br />
Les principaux avantages du standard sont :</p>
<ul>
<li>Autonomie de l&#8217;émetteur, il est possible de le faire fonctionner durant <strong>plusieurs années</strong> à l&#8217;aide d&#8217;une batterie ;</li>
<li>La possibilité de mettre en place une <a href="http://fr.wikipedia.org/wiki/Topologie_maill%C3%A9e">topologie de réseaux maillés</a> ;</li>
<li><strong>65535 nœuds</strong> sont <em>addressable</em> sur le réseau ; </li>
<li>le standard définie : les méthodes de communication sur le réseau, <strong>mais aussi</strong> les fonctionnement des applications ;</li>
<li>l&#8217;ensemble des produits sont certifiés par <a href="http://www.zigbee.org/">l&#8217;Alliance ZigBee</a> et soutenus par de <a href="http://www.zigbee.org/zigbee/About/OurMembers/tabid/191/Default.aspx">nombreuses entreprises industriels</a> ;</li>
</ul>
<p>Ce qui est intéressant, c&#8217;est que le standard définit un ensemble de caractéristiques pour un équipement.<br />
Regroupé sous forme de famille :</p>
<ul>
<li><a href="http://www.zigbee.org/Markets/ZigBeeSmartEnergy/ZigBeeSmartEnergyOverview/tabid/431/Default.aspx">ZigBee Smart Energy</a> ;</li>
<li><a href="http://www.zigbee.org/Markets/ZigBeeRemoteControl/ZigBeeRemoteControlOverview/tabid/475/Default.aspx">ZigBee Remote Control</a> ; </li>
<li><a href="http://www.zigbee.org/Markets/ZigBeeRemoteControl/ZigBeeRemoteControlOverview/tabid/475/Default.aspx">ZigBee Home Automation</a> ;</li>
<li><a href="http://www.zigbee.org/Markets/ZigBeeHealthCare/ZigBeeHealthCareOverview/tabid/426/Default.aspx">ZigBee Health Care</a>, non disponible;</li>
<li><a href="http://www.zigbee.org/Markets/ZigBeeBuildingAutomation/tabid/226/Default.aspx">ZigBee Building Automation</a>, pas encore définie ;</li>
<li>ZigBee Telecommunication Services, non encore définie.</li>
</ul>
<h3>Domaines d&#8217;application du protocole</h3>
<p>Les domaines d&#8217;applications du protocole sont les suivants :</p>
<ul>
<li>la gestion de l&#8217;énergie et les réseaux de <a href="http://fr.wikipedia.org/wiki/Smart_grid">distribution d&#8217;électricité « intelligent »</a> ;  </li>
<li>la médecine, avec le <a href="http://fr.wikipedia.org/wiki/WSN#Applications_m.C3.A9dicales_et_v.C3.A9t.C3.A9rinaire">suivi des indicateurs physiologiques</a> sur le long terme pour les maladies chroniques.</li>
<li>Les réseaux de capteurs en général : <a href="http://fr.wikipedia.org/wiki/R%C3%A9seau_de_capteurs_sans-fil">WSN</a> ; </li>
<li>Les télécommandes, le protocole est amené à remplacer les télécommandes infrarouge à moyen terme.</li>
<li>La domotique, pour le contrôle et la gestion des appareils dans une maison ;</li>
<li>La <a href="http://en.wikipedia.org/wiki/Real-time_locating_system">localisation en temps réel</a> ;</li>
<li>Et enfin la robotique, pour le contrôle à distance ;</li>
</ul>
<h3>La promesse du standard</h3>
<p>Les équipements qui respectent le standard et sont <a href="http://www.zigbee.org/Products/CertifiedProducts/CertifiedProductsOverview/tabid/463/Default.aspx">certifiés par l&#8217;Alliance ZigBee</a> sont théoriquement interchangeable et peuvent communiquer ensemble. </p>
<p>Cela signifie, qu&#8217;il est possible d&#8217;allumer à l&#8217;aide d&#8217;une télécommande de marque A, une douille d&#8217;ampoule de marque B et un lecteur de DVD de marque C. </p>
<p>Cela parait trivial dit comme cela, mais dans l&#8217;état actuel de développement de la domotique, cela releve du <strong>miracle</strong> &#8230;</p>
<p>Même, s&#8217;il existe des protocoles propriétaires pour faire cela, il est nécessaire de vendre <em>son âme</em> à un constructeur (<a href="http://fr.wikipedia.org/wiki/Enfermement_propri%C3%A9taire">Vendor lock-in</a> garantie sur facture <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ) ou bien mettre en place des protocoles de <a href="http://fr.wikipedia.org/wiki/Middleware">Middleware</a> comme <a href="http://xplproject.org.uk/">xPL</a> et une belle galaxie de protocoles hétérogènes. (cf. le schéma de ma <a href="http://www.csquad.org/installation-domotique/">petite installation perso</a> <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ).</p>
<h3>La gestion des <em>binding</em></h3>
<p>La couche applicatif du standard ZigBee, inclut une possibilité très intéressante pour la domotique : le <em>binding</em>. </p>
<p>L&#8217;idée est de <strong>relier deux équipements</strong> du réseau de manière <strong>automatique et transparente</strong> pour l&#8217;utilisateur. </p>
<p>L&#8217;un des meilleur exemple pour comprendre est celui d&#8217;une ampoule et un d&#8217;un interrupteur.</p>
<p>Lorsque l&#8217;utilisateur active physiquement le <em>binding</em>, à l&#8217;aide d&#8217;un bouton par exemple. </p>
<p>Les deux <em>devices</em> se mettent en relation avec le coordinateur du réseau, qui détermine si oui ou non les profils applicatifs sont compatibles et de les lier. </p>
<p>Ce qui permet aux  équipements d&#8217;être liés automatiquement et il n&#8217;est pas nécessaire de configurer les adresses des équipements, etc&#8230;</p>
<h3>L&#8217;état actuel de la certification </h3>
<p>Pour l&#8217;instant, il y a peu d&#8217;équipements qui sont certifiés par l&#8217;Alliance :</p>
<ul>
<li><a href="http://www.zigbee.org/Products/CertifiedProducts/ZigBeeSmartEnergy/tabid/271/Default.aspx">ZigBee Smart Energy Certified Products</a> ;</li>
<li><a href="http://www.zigbee.org/Products/CertifiedProducts/ZigBeeHomeAutomation/tabid/455/Default.aspx">ZigBee Home Automation Certified Products</a>.</li>
</ul>
<p>Mais on trouve pas mal de vendeurs d&#8217;autres produits que ne sont pas forcement entièrement certifiés mais qui respectent la partie communication du standard. </p>
<h3>Problématique du sans-fils</h3>
<p>Comme toutes technologies sans-fils, elle présente quelques problématiques particulières : </p>
<h4>La source d&#8217;énergie</h4>
<p>Bien que le module ZigBee nécessite très peu d&#8217;énergie pour fonctionner (20mA pour émettre une trame sur le réseau), se pose la question de la source d&#8217;énergie. </p>
<p>Lorsque celle-ci est fournie par une pile cela pose de problématique de :</p>
<ul>
<li>fiabilité / qualité de la source d&#8217;énergie  ;</li>
<li>la nécessité de remplacer régulièrement la source d&#8217;énergie ; </li>
<li>la nécessité de mettre en place un dispositif pour notifier l&#8217;utilisateur du statut de la pile. </li>
</ul>
<h4>La sécurité</h4>
<p>La sécurité du standard ZigBee repose tout d’abord, sur la sécurité du protocole de communication IEEE 802.15.4. Pour mieux comprendre les méthodes de sécurisation mises en place par le protocole, vous pouvez lire cet article de vulgarisation : <a href="http://www.sensor-networks.org/index.php?page=0903503549">Security in 802.15.4 and ZigBee networks</a> ; ou bien cet excellent papier <a href="http://naveen.ksastry.com/papers/15.4-wise04.pdf">Security Considerations for IEEE 802.15.4 Networks</a>. Mais dans ce domaine, rien de nouveau, ce sont toujours les mêmes principes qui s’appliquent, à savoir :</p>
<ul>
<li>Plus la puce dispose de puissance et plus le niveau de chiffrement est fort (au maximum <a href="http://fr.wikipedia.org/wiki/Standard_de_chiffrement_avanc%C3%A9">AES128</a> pour ZigBee) ;</li>
<li>La qualité des composants et du générateur de nombre aléatoire ( <a href="http://digitaloffense.net/tools/debian-openssl/">merci de ne pas utiliser le PID du programme</a> <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ) ;</li>
<li>La qualité de l’implémentation du code de chiffrement.</li>
</ul>
<p>Bref, vous vous doutez bien que les modules ZigBee qui seront vendus au grand publique ne seront pas d’un niveau de sécurité militaire et n’embarqueront sûrement pas <a href="http://enginova.com/radioactive_random_number_genera.htm">pas un compteur Geiger</a> comme source d&#8217;entropie <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>D&#8217;autant plus que le standard n&#8217;impose pas forcement un niveau de chiffrement fort à tous les profils applicatifs. </p>
<h3>Robotique</h3>
<p>Pour la robotique, il n&#8217;existe pas de profil dans le standard, mais la plupart des amateurs dans le domaine ont déjà compris les nombreux intérêts de ZigBee et on voit de plus en plus d&#8217;interfaces apparaître (<a href="http://www.trossenrobotics.com/bioloid-zigbee-wireless-module-set.aspx">Bioloid</a>, <a href="http://www.circuitcellar.com/library/print/0306/leland-188/leland-188.pdf">WowWee</a>, etc&#8230; )</p>
<h3>Logiciels libres</h3>
<p>Du coté des logiciels libres, nous avons :</p>
<ul>
<li>Un projet mort : <a href="http://zigbuzz.sourceforge.net/fr/index.html">ZigBuzz</a> ;</li>
<li>Le projet <a href="http://sourceforge.net/apps/trac/linux-zigbee/wiki">IEEE802.15.4/ZigBee Stack for Linux</a>, dont l&#8217;objectif est l&#8217;intégration de la pile ZigBee dans le noyau Linux, commiter dans la version 2.6.30-rc7 ;</li>
<li>Le projet <a href="http://freakz.sourceforge.net/">FreakZ</a>, dont l&#8217;objectif est l&#8217;implémentation du pile ZigBee libre pour l&#8217;embarque ;</li>
</ul>
<p>Malheureusement, il y a une incompatibilité entre la licence des spécifications du standard ZigBee et la licence <a href="http://www.gnu.org/licenses/gpl.html">GPL</a>. en effet celle-ci ne prend pas en compte un usage non commercial. </p>
<p>Pour plus de détails sur ce point : <a href="http://freaklabs.org/index.php/Blog/Zigbee/Zigbee-Linux-and-the-GPL.html">Zigbee, Linux, and the GPL</a>.</p>
<p>Néanmoins, le code du protocole IEEE 802.15.4 est <a href="http://lwn.net/Articles/334666/">déjà le noyau</a> et bénéficie d&#8217;un niveau de protection <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>Matériel</h3>
<p>Le matériel ZigBee disponible se découpe en plusieurs familles de la plus simple à la plus complexe :</p>
<h4>Émetteur-récepteur</h4>
<p>Les principaux constructeurs d&#8217;émetteur-récepteur sont <a href="http://www.ti.com/">Texas instruments</a> et <a href="http://www.freescale.com/">Freescale</a>.</p>
<h4>Puce</h4>
<p>Les puces prennent en charge la norme IEEE 802.15.4, elles sont produites par : <a href="http://www.ember.com/">Ember</a>, <a href="http://www.jennic.com/">Jennic</a>, <a href="http://www.ti.com/">Texas instruments</a> et <a href="http://www.freescale.com/">Freescale</a>.</p>
<h4>Modules</h4>
<p>Les modules prennent en charge le standard ZigBee et sont produites par : <a href="http://www.digi.com/">Digi</a>, <a href="http://www.one-rf.com/">One-RF</a>, <a href="http://www.telegesis.com/">Telegesis</a>, <a href="http://www.meshnetics.com/">Meshnetrics</a>, <a href="http://www.radiocrafts.com/">Radiocrafts</a>&#8230;</p>
<h4>Produit fini</h4>
<ul>
<li><a href="http://www.tritech.se/sv/start/tritech.php">Tritech</a> : dongles USB et routeurs Ethernet/Zigbee ;</li>
<li><a href="http://www.digi.com/">Digi</a> : passerelles RS232/485, USB, Ethernet, GPIO, routeurs autonomes</li>
<li><a href="http://www.telegesis.com/">Telegesis</a> : dongles USB et CF, routeurs autonomes et Ethernet</li>
<li><a href=""></a><a href="http://www.alektrona.com/">Alektrona</a> : gateway ethernet / zigbee;</li>
<li><a href="http://www.libelium.com/">Libelium</a> : capteurs et routeurs multi-protocoles Wifi, Bluetooth, GPRS et GPS ;</li>
<li>Des <em>shields</em> pour la carte <a href="http://www.arduino.cc/">Arduino</a> et ses dérivées.
</li>
</ul>
<h4>Offre packagée</h4>
<p>Pour les produits packagés, il existe les solutions suivantes :</p>
<ul>
<li><a href='http://www.control4.com/'>Control4</a> : gamme de produits domotiques ; </li>
<li><a href='http://www.alertme.com/'>AlerteMe</a> : système de suivi de la consommation électrique et  alarme.</li>
</ul>
<h3>Déploiements importants de ces technologies</h3>
<p>Il y a pas mal de déploiements de ces technologies aux USA dans le cadre des réseau de distribution d&#8217;électricité « intelligent » en Californie et au Texas principalement. </p>
<p>En Europe, le ville de <a href="http://www.openstreetmap.org/?mlat=57.706407&#038;mlon=11.968631&#038;zoom=10">Gothenburg en Suède</a> a déployé un réseau de <a href="http://tdworld.com/info_systems/highlights/gothenberg-ge-smart-meters-0609/">90 000 compteurs intelligents</a>. </p>
<p>En France, le déploiement est encore à l&#8217;état de recherche avec le projet <a href="http://www.senslab.info/index.php/Main_Page">SensLab</a>, le projet de localisation fait par <a href="http://www.orfidee.com/">Orfidée</a> pour la <a href="http://www.defense.gouv.fr/marine">Marine Nationale</a>.</p>
<p>Et d&#8217;autres projets couverts par des accords de non divulgation <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>Références</h3>
<p>Voici quelques références pour approfondir le sujet :</p>
<ul>
<li>Le site de la <a href="http://www.zigbee.org/">ZigBee Alliance</a> ; </li>
<li>le site <a href="http://www.sensor-networks.org/">sensor-networks</a> ;</li>
<li>l’article de Sensor-networks sur les différence entre <a href="http://www.sensor-networks.org/index.php?page=0823123150">802.15.4 vs ZigBee</a> ;</li>
<li>le site du projet <a href="http://sourceforge.net/apps/trac/linux-zigbee/wiki">IEEE802.15.4/ZigBee Stack for Linux</a> ;</li>
</ul>
<h3>Conclusion</h3>
<p>Voilà, ceci est une petite présentation standard ZigBee, que j&#8217;ai voulu la plus succincte possible. Le sujet étant très vaste et passionnant. J&#8217;ai forcement fait des erreurs et oublié des références.  Merci de m&#8217;en faire part par mail ou via les commentaires.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.csquad.org/2009/12/19/zigbee/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Notifications Nagios par Téléphone</title>
		<link>http://www.csquad.org/2009/12/09/notifications-nagios-par-telephone/</link>
		<comments>http://www.csquad.org/2009/12/09/notifications-nagios-par-telephone/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 19:39:02 +0000</pubDate>
		<dc:creator>cscm</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Network]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[Nagios]]></category>
		<category><![CDATA[SIP]]></category>
		<category><![CDATA[Text-to-Speech]]></category>

		<guid isPermaLink="false">http://www.csquad.org/?p=780</guid>
		<description><![CDATA[J&#8217;ai configuré mon instance de Nagios pour recevoir une notification par téléphone en cas d&#8217;incident. (déclenchement d&#8217;une alarme ou d&#8217;un détecteur d&#8217;eau / fumée dans mon installation domotique). 
Ce billet décrit comment mettre en place un système de  la notification par téléphone avec Nagios.
Pré-requis
Vous avez besoin des composants suivants :

Une distribution Debian GNU/Linux ;
Une [...]]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai configuré mon instance de <a href="http://www.nagios.org/">Nagios</a> pour recevoir une notification par téléphone en cas d&#8217;incident. (déclenchement d&#8217;une alarme ou d&#8217;un détecteur d&#8217;eau / fumée dans mon <a href="/installation-domotique/">installation domotique</a>). </p>
<p>Ce billet décrit comment mettre en place un système de  la notification par téléphone avec Nagios.</p>
<h3>Pré-requis</h3>
<p>Vous avez besoin des composants suivants :</p>
<ul>
<li>Une distribution <a href="http://www.debian.org/">Debian GNU/Linux</a> ;</li>
<li>Une installation fonctionnelle de <a href="http://www.nagios.org/">Nagios</a> ; </li>
<li>Une PABX IP avec le support du protocole SIP, comme <a href="http://www.asterisk.org/">Asterisk</a> ;</li>
<li>Un système de Synthèse vocale fonctionnelle, comme <a href="http://espeak.sourceforge.net/">eSpeak</a> + <a href="http://tcts.fpms.ac.be/synthesis/mbrola.html">MBROLA</a> ;</li>
<li>Un client SIP en ligne de commande comme <a href="http://www.pjsip.org/pjsua.htm">PJSUA</a>. </li>
</ul>
<h3>Installation</h3>
<p>Le client SIP en ligne de commande PJSUA n&#8217;est pas disponible dans les paquets du projet Debian.<br />
Il est donc nécessaire de l&#8217;installer manuellement à l&#8217;aide du classique : <em>configure, make, make install</em>.<br />
La procédure est décrite dans ce billet : <a href="http://blog.nicolargo.com/2009/02/un-client-sip-en-ligne-de-commande.html">Un client SIP en ligne de commande</a>.</p>
<p>Pour l&#8217;installation du système de synthèse vocale, vous pouvez vous référer à mon précèdent billet sur le sujet : <a href="http://www.csquad.org/2009/08/27/text-to-speech-avec-espeak-mbrola-et-speech-dispatcher/">Text-to-Speech avec eSpeak, MBROLA et Speech Dispatcher</a>.</p>
<h3>Configuration</h3>
<p>Vous devez créer un compte SIP pour Nagios sur votre PABX et tester que l&#8217;enregistrement est fonctionnel. </p>
<p>Pour cela vous avez besoin d&#8217;un fichier de configuration spécifique à Nagios pour PJSUA, dans <em>/etc/nagios/sip.cfg</em> par exemple :<br />
<code><br />
--id sip:nagios@pabx.csquad.lan<br />
--registrar sip:pabx.csquad.lan<br />
--realm *<br />
--username nagios<br />
--password secret<br />
</code></p>
<p>Vous pouvez ensuite tester l&#8217;enregistrement en ligne de commande :<br />
<code>$ pjsua --config-file /etc/nagios/sip.cfg<br />
...<br />
 11:17:05.376    pjsua_acc.c  sip:nagios@pabx.csquad.lan: registration success, status=200 (OK), will re-register in 300 seconds</code></p>
<p>Un appel de test :<br />
<code>$ pjsua --config-file /etc/nagios/sip.cfg --null-audio sip:secretariat@pabx.csquad.lan</code></p>
<p>Ensuite un appel de test audio avec un message :<br />
<code> $ espeak -v mb/mb-fr1 "E.T. téléphone maison" | /usr/local/bin/mbrola /usr/share/mbrola/fr1/fr1 - test.wav<br />
$ pjsua --config-file /etc/nagios/sip.cfg --play-file=test.wav --auto-play --null-audio sip:secretariat@pabx.csquad.lan<br />
$ rm -f test.wav<br />
</code></p>
<p>On met le tout dans un petit script <a href="http://expect.nist.gov/">expect</a> pour prendre en charge la déconnections de manière polie :<br />
<code><br />
#!/usr/bin/expect  --<br />
set timeout 45<br />
set addr [lindex $argv 0]<br />
set text [lindex $argv 1]<br />
exec /usr/bin/espeak -v mb/mb-fr1 $text | /usr/local/bin/mbrola /usr/share/mbrola/fr1/fr1 - /tmp/phone-call.wav;<br />
spawn /usr/local/bin/pjsua --app-log-level=3 --config-file /etc/nagios/sip.cfg --play-file /tmp/phone-call.wav --auto-play --null-audio --max-calls 1 sip:$addr<br />
expect {<br />
        "DISCONNCTD" {<br />
                exit<br />
        }<br />
        timeout {<br />
                send "h\n"<br />
                exit<br />
        }<br />
        eof {<br />
                exit<br />
        }<br />
}<br />
</code><br />
Et voilà <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Il ne nous reste plus qu&#8217;à configurer ce type de notification dans Nagios.<br />
Pour cela, il faut modifier le fichier <em>contacts.cfg</em> :<br />
<code># 'nagios-phone' contact definition<br />
define contact{<br />
        contact_name                    nagios-phone<br />
        alias                           Nagios Admin via Phone<br />
        service_notification_period     24x7 ; mouahahahahahaha<br />
        host_notification_period        24x7 ; moiahahahahahahah<br />
        service_notification_options    w,u,c,r<br />
        host_notification_options       d,u,r<br />
        service_notification_commands   notify-by-phone<br />
        host_notification_commands      host-notify-by-phone<br />
        email sip:secretariat@pabx.csquad.lan<br />
        }<br />
</code><br />
Puis le fichier <em>misccommands.cfg</em> :<br />
<code># 'notify-by-phone' personnal command definition<br />
define command{<br />
  command_name notify-by-phone<br />
  command_line /usr/local/bin/phone-call.sh $CONTACTEMAIL$ "$NOTIFICATIONTYPE$ alert - $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$"<br />
}<br />
# 'host-notify-by-phone' personnal command definition<br />
define command{<br />
  command_name host-notify-by-phone<br />
  command_line /usr/local/bin/phone-call.sh $CONTACTEMAIL$ "Host $HOSTSTATE$ alert for $HOSTNAME$!"<br />
}<br />
</code><br />
Ensuite, vous pouvez définir <em>nagios-phone</em> comme un contact pour des services ou hosts. </p>
<p>Il faut aussi modifier la valeur de la variable <a href="http://nagios.sourceforge.net/docs/2_0/configmain.html#notification_timeout">notification_timeout</a> dans le fichier de configuration <em>nagios.cfg</em>, pour avoir le temps de décrocher le téléphone et d&#8217;en tendre le message. </p>
<h3>Conclusion</h3>
<p>Vous n&#8217;avez plus aucune excuse pour ne pas brancher vos esclaves^Wéquipe d&#8217;administrateurs systèmes directement sur le système de surveillance de vos serveurs <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  </p>
<p>Plus sérieusement, la notification par téléphone est une méthode très intrusive. Il est nécessaire de décrocher le téléphone. Il faut donc l&#8217;utiliser avec parcimonie. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.csquad.org/2009/12/09/notifications-nagios-par-telephone/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Capteur de dioxyde de carbone pour réseau 1-wire</title>
		<link>http://www.csquad.org/2009/12/08/capteur-de-dioxyde-de-carbone-pour-reseau-1-wire/</link>
		<comments>http://www.csquad.org/2009/12/08/capteur-de-dioxyde-de-carbone-pour-reseau-1-wire/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 19:09:05 +0000</pubDate>
		<dc:creator>cscm</dc:creator>
				<category><![CDATA[Home automation]]></category>
		<category><![CDATA[1-wire]]></category>
		<category><![CDATA[co2]]></category>
		<category><![CDATA[dioxyde de carbone]]></category>
		<category><![CDATA[Munin]]></category>

		<guid isPermaLink="false">http://www.csquad.org/?p=810</guid>
		<description><![CDATA[Après la lecture de plusieurs livres de Jean-Marc Jancovici (merci Nicolas   ),
je me suis intéressé à la concentration de dioxyde de carbone dans l&#8217;air.
En effet, cette concentration afflue directement sur le climat de la planète.
Je me suis donc mis à la recherche d&#8217;un capteur de CO2 abordable pour ma station météo.  
La [...]]]></description>
			<content:encoded><![CDATA[<p>Après la lecture de plusieurs livres de <a href="http://www.manicore.com/">Jean-Marc Jancovici</a> (merci Nicolas <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ),<br />
je me suis intéressé à la concentration de dioxyde de carbone dans l&#8217;air.<br />
En effet, cette concentration afflue directement sur le climat de la planète.<br />
Je me suis donc mis à la recherche d&#8217;un capteur de CO2 abordable pour ma station météo.  </p>
<h3>La recherche du capteur</h3>
<table>
<tr>
<td>
<a href="http://www.csquad.org/wp-content/uploads/2009/12/co2_1.jpg"><img src="http://www.csquad.org/wp-content/uploads/2009/12/co2_1-300x240.jpg" alt="co2 sensor" title="co2 sensor" width="300" height="240" class="alignleft size-medium wp-image-843" /></a>
</td>
<td>
Mes critères pour le capteur de dioxyde de carbone de ma station météo étaient les suivants :</p>
<ul>
<li>communicant avec le pc à l&#8217;aide d&#8217;un protocole standard ;</li>
<li>fonctionnant sous Debian GNU/Linux ;</li>
<li>petit budget, moins de 150 euros.</li>
</ul>
<p>Après plusieurs jours recherche, je me suis retrouvé le bec dans l&#8217;eau.
</td>
</tr>
</table>
<p>En effet, ce genre de capteur est visiblement réservé aux équipements scientifiques et la plupart des devis que j&#8217;ai réussi à obtenir sont bien au dessus de mon budget.<br />
Mais dernièrement, j&#8217;ai trouvé un revendeur de matériel 1-wire en Suède : <a href="https://www.m.nu/index.php?language=en">m.nu</a>.<br />
Celui-ci propose un capteur de CO2 abordable : <a href="https://www.m.nu/co2meter-version-2-p-259.html?language=en">CO2-meter</a>.<br />
Ce capteur est basé sur le capteur <a href="http://www.senseair.se/Datablad/k30%20.pdf">K30</a> de chez <a href="http://www.senseair.se/">SenseAir</a> et un <a href="http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2921">DS2450</a>.<br />
Ce capteur peut être utilisé en intérieur  ou bien à l&#8217;extérieur.<br />
Par contre dans le cas d&#8217;une utilisation extérieur, il faut le protéger des précipitations. </p>
<h3>Matériel</h3>
<p>
Pour faire fonctionner le capteur vous avez besoin des composants suivants :  </p>
<table border="1" width="80%">
<tr>
<th>Produit</th>
<th>Prix</th>
</tr>
<td>
<a href="https://www.m.nu/co2meter-version-2-p-259.html">CO2-meter</a>
</td>
<td align="right">139,93€</td>
<tr>
<td>
<a href="https://www.m.nu/spanningsinjektor-5v-version-21-p-262.html?language=en">5V Power injectors</a>
</td>
<td align="right">19,96€</td>
</tr>
<tr>
<td>
<a href="https://www.m.nu/batterieliminator-5v-06a-p-73.html">Alimentation 5V</a>
</td>
<td align="right">14,95€</td>
</tr>
</table>
<h3>Exploitation du capteur</h3>
<p></p>
<h4>Avec OWFS</h4>
<p>
Une fois le capteur branché sur le réseau 1-wire, il est vu par <a href="http://owfs.org/">owfs</a> :<br />
<code><br />
$ tree /mnt/owfs/20.C17E0D000000<br />
/mnt/owfs/20.C17E0D000000<br />
|-- PIO.A<br />
|-- PIO.ALL<br />
|-- PIO.B<br />
|-- PIO.C<br />
|-- PIO.D<br />
|-- address<br />
...<br />
|-- type<br />
|-- volt.A<br />
|-- volt.ALL<br />
|-- volt.B<br />
|-- volt.C<br />
|-- volt.D<br />
|-- volt2.A<br />
|-- volt2.ALL<br />
|-- volt2.B<br />
|-- volt2.C<br />
`-- volt2.D<br />
3 directories, 74 files<br />
$ cat /mnt/owfs/20.C17E0D000000/type<br />
DS2450%</code>
</p>
<p>
Les informations intéressantes se trouvent dans les fichiers :</p>
<ul>
<li><em>volt.A</em> : sortie du capteur de CO^2, donne la concentration de CO2 en <a href="http://en.wikipedia.org/wiki/Parts_per_million">ppm</a>. Il faut multiplier la valeur par 1000. Ex: 0.772277 * 1000 = 772 ppm ;</li>
<li><em>volt.B</em> : statut du capteur de CO^2, le voltage doit  être au alentour de 3.2V ;</li>
<li><em>volt.D</em> : voltage du DS2450S, doit être aux alentours de 5V ;</li>
</ul>
<h4>Avec Munin</h4>
<p>
Pour faire un graphique de la concentration de dioxyde de carbone, j&#8217;utilise <a href="http://munin.projects.linpro.no/">munin</a> et un petit <em>plugin</em> fait maison :<br />
<code><br />
$ svn co http://svn.csquad.org/owcarbondioxide<br />
A    owcarbondioxide/owcarbondioxide<br />
...<br />
$ chmod a+x owcarbondioxide/owcarbondioxide<br />
# mv owcarbondioxide/owcarbondioxide  /usr/share/munin/plugins/<br />
# ln -s /usr/share/munin/plugins/owcarbondioxide  /etc/munin/plugins/owcarbondioxide<br />
$ /etc/munin/plugins/owcarbondioxide config<br />
graph_title Carbon dioxide 1-wire sensor<br />
graph_args --base 1000 --lower-limit 0 --upper-limit 5000<br />
graph_vlabel Carbon dioxide in ppm<br />
graph_category sensors<br />
graph_info This graph shows the Carbon dioxide on the one-wire network.<br />
Chambre.label Chambre<br />
$ /etc/munin/plugins/owcarbondioxide get<br />
Chambre.value 786.184<br />
</code>
</p>
</p>
<p>
Vous devriez obtenir ce type de graphique :<br />
<a href="http://www.csquad.org/wp-content/uploads/2009/12/meuh.csquad.lan-owcarbondioxide-day.png"><img src="http://www.csquad.org/wp-content/uploads/2009/12/meuh.csquad.lan-owcarbondioxide-day-300x160.png" alt="meuh.csquad.lan-owcarbondioxide-day" title="meuh.csquad.lan-owcarbondioxide-day" width="300" height="160" class="alignnone size-medium wp-image-851" /></a>
</p>
<h3>Références</h3>
<p>
Voici quelques références intéressantes sur le sujet :</p>
<ul>
<li>[en] <a href="http://en.wikipedia.org/wiki/Carbon_dioxide_in_Earth%27s_atmosphere">Carbon dioxide in Earth&#8217;s atmosphere</a> ;</li>
<li>[fr] <a href="http://www.manicore.com/documentation/serre/gaz.html">Quels sont les gaz à effet de serre ?</a> ;</li>
<li>[en] <a href="http://health.state.mn.us/divs/eh/indoorair/co2/index.html">Carbon Dioxide (CO2)</a>.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.csquad.org/2009/12/08/capteur-de-dioxyde-de-carbone-pour-reseau-1-wire/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>xPL Perl update script for Pachube</title>
		<link>http://www.csquad.org/2009/11/27/xpl-perl-update-script-for-pachube/</link>
		<comments>http://www.csquad.org/2009/11/27/xpl-perl-update-script-for-pachube/#comments</comments>
		<pubDate>Fri, 27 Nov 2009 22:29:45 +0000</pubDate>
		<dc:creator>cscm</dc:creator>
				<category><![CDATA[Home automation]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Pachube]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[xPL]]></category>

		<guid isPermaLink="false">http://www.csquad.org/?p=805</guid>
		<description><![CDATA[I&#8217;ve wrote a small update script for Pachube based on xPL-Perl.
This module is based on Beanz&#8217;s Net::Pachube module.
I use this script, for my pachube feed.
Setup
The setup is very simple on Debian GNU/Linux, at first you need the Net::Pachube module :
$ wget http://search.cpan.org/CPAN/authors/id/B/BE/BEANZ/Net-Pachube-0.01.tar.gz
$ tar xzf Net-Pachube-0.01.tar.gz
$ cd Net-Pachube-0.01
$ perl Makefile.PL
$ make
...
# make install

Note: the dh-make-perl method [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve wrote a small update script for <a href="http://www.pachube.com/">Pachube</a> based on <a href="http://www.xpl-perl.org.uk/">xPL-Perl</a>.<br />
This module is based on Beanz&#8217;s <a href="http://search.cpan.org/dist/Net-Pachube/">Net::Pachube</a> module.<br />
I use this script, for <a href="http://www.pachube.com/feeds/1934">my pachube feed</a>.</p>
<h3>Setup</h3>
<p>The setup is very simple on Debian GNU/Linux, at first you need the Net::Pachube module :<br />
<code>$ wget http://search.cpan.org/CPAN/authors/id/B/BE/BEANZ/Net-Pachube-0.01.tar.gz<br />
$ tar xzf Net-Pachube-0.01.tar.gz<br />
$ cd Net-Pachube-0.01<br />
$ perl Makefile.PL<br />
$ make<br />
...<br />
# make install<br />
</code><br />
Note: the <em>dh-make-perl</em> method does not work, with this package ;-(</p>
<p>Then you can grab, my <em>xpl-pachube</em> script :</p>
<p><code>$ svn co http://svn.csquad.org/xpl-pachube/<br />
..<br />
# chmod +x xpl-pachube/xpl-pachube<br />
# mv xpl-pachube/xpl-pachube /usr/local/bin<br />
</code></p>
<h3>Run</h3>
<p>You can start the <em>xpl-pachube</em> script in verbose this way :<br />
<code><br />
$ xpl-pachube -key 52b37888404598851de -verbose -feed_id 1934 class=sensor device=cc128.01189.0.1<br />
</code></p>
<p>You need to change the <em>-key</em> and <em>-feed_id</em> arguments.</p>
<p>That&#8217;s all folks!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.csquad.org/2009/11/27/xpl-perl-update-script-for-pachube/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Reconnaissance vocale sous GNU/Linux et domotique</title>
		<link>http://www.csquad.org/2009/10/27/reconnaissance-vocale-avec-julius/</link>
		<comments>http://www.csquad.org/2009/10/27/reconnaissance-vocale-avec-julius/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 16:32:13 +0000</pubDate>
		<dc:creator>cscm</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Home automation]]></category>
		<category><![CDATA[Robotics]]></category>
		<category><![CDATA[AIML]]></category>
		<category><![CDATA[eSpeak]]></category>
		<category><![CDATA[Julius]]></category>
		<category><![CDATA[Microphone array]]></category>
		<category><![CDATA[Voice Tracker]]></category>
		<category><![CDATA[VoxForge]]></category>
		<category><![CDATA[WAF]]></category>

		<guid isPermaLink="false">http://www.csquad.org/?p=554</guid>
		<description><![CDATA[L&#8217;objectif de cet article est de décrire mon avancement sur le système de reconnaissance vocale dans mon installation domotique. En effet, pour mon usage personnel, j&#8217;ai mis au point un chatterbot pour contrôler de manière intuitive l&#8217;appartement.
Cette technologie permet de tenir une discutions intuitive avec une maison intelligente pour lui faire exécuter des ordres.  [...]]]></description>
			<content:encoded><![CDATA[<p>L&#8217;objectif de cet article est de décrire mon avancement sur le système de <a href="http://fr.wikipedia.org/wiki/Reconnaissance_vocale">reconnaissance vocale</a> dans mon <a href="/installation-domotique/">installation domotique</a>. En effet, pour mon usage personnel, j&#8217;ai mis au point un <a href="http://en.wikipedia.org/wiki/Chatterbot">chatterbot</a> pour contrôler de manière intuitive l&#8217;appartement.<br />
Cette technologie permet de tenir une discutions intuitive avec une maison intelligente pour lui faire exécuter des ordres.   (allez <a href="http://www.imdb.com/title/tt0062622/">Stanley</a>, tu t&#8217;es seulement planter de 10 ans <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ) :<br />
<code><br />
Moi>Alfred?<br />
Alfred>Oui, monsieur.<br />
Moi>Allume la lumière du salon.<br />
-- run xpl-sender -c x10.basic command=on device=a3<br />
Alfred>C'est fait.<br />
</code><br />
Le nom du bot est un hommage à <a href="http://en.wikipedia.org/wiki/Alfred_Pennyworth">Alfred Pennyworth</a>. Allons faire un petit tour dans les entrailles de la batcave <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>Définition du besoin</h3>
<p>L&#8217;accumulation des télécommandes sur mon installation domotique, fait chuter mon <a href="http://en.wikipedia.org/wiki/Wife_acceptance_factor">WAF</a> de manière dramatique.<br />
 En effet, pour regarder une chaîne de télévision ou allumer la lumière.<br />
Il est nécessaire d&#8217;utiliser deux ou trois télécommandes différentes.<br />
Naviguer dans des interfaces, etc&#8230;<br />
Bref, pour des technologies donc l&#8217;objectif est d&#8217;améliorer la qualité de vie et rendre les taches quotidienne plus facile, j&#8217;avais un gros problème <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /><br />
Après un petite discussion et une mise au point avec ma moitié, j&#8217;ai réussi à vendre la solution de contrôle par la voix.<br />
Belle connerie me voilà parti dans un domaine que je ne connais pas <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h4>Première Approche</h4>
<p>Je <a href="http://www.touteladomotique.com/forum/viewtopic.php?t=2112">lance une boue à la mer</a> sur le forum <em>&#8220;toute la domotique&#8221;</em>. </p>
<p>Visiblement, je ne suis pas le seul à chercher ce genre de fonctionnalité. Actuellement, nous avons dans le domaine :</p>
<ul>
<li>l&#8217;abominable <a href="http://www.homeseer.com/">HomeSeer</a> qui fonctionne très mal en Anglais à l&#8217;aide de l&#8217;interface de reconnaissance vocale inclue dans <a href="http://www.microsoft.com/enable/products/windowsvista/speech.aspx">Microsoft Windows</a> et la <a href="http://en.wikipedia.org/wiki/Speech_Application_Programming_Interface">SAPI</a> ;</li>
<li>Rien de spécifique à la domotique sous GNU/Linux, mais une belle galaxie de programmes dans le domaine.</li>
</ul>
<h3>Le choix du microphone</h3>
<p>Ma petite dame voulais parler librement sans aucune contrainte et il n&#8217;étais pas question de l&#8217;équiper d&#8217;un microphone.<br />
J&#8217;ai donc cherché une solution qui permet de capter la parole dans une pièce sans microphone sur la personne.<br />
La solution magique s&#8217;appelle la technique du <a href="http://en.wikipedia.org/wiki/Microphone_array">Microphone array</a>.<br />
Le principe est très simple, mettre en commun plusieurs microphones reliés à un <a href="http://en.wikipedia.org/wiki/Digital_signal_processor">DSP</a> qui permet de faire le traitement du signal en fonction de l&#8217;orientation physique des microphones.<br />
J&#8217;ai donc proposé de mettre en place chez moi le <a href="http://groups.csail.mit.edu/cag/mic-array/images/array_pics/tn/dscf0483.jpg.html">LOUD</a> (non ce n&#8217;est pas un radiateur <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ).<br />
Bon vous vous doutez bien que lorsque j&#8217;ai proposé la solution du LOUD, j&#8217;ai faillit passer  par la fenêtre <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />   </p>
<table>
<tr>
<td valign="top">
<img src="http://www.csquad.org/wp-content/uploads/2009/09/microphone_array.jpg" alt="microphone_array" title="microphone_array" width="275" height="142" class="alignnone size-full wp-image-582" />
</td>
<td>
Heureusement, il existe des solutions plus simples telles que le <a href="http://www.acousticmagic.com/">Voice Tracker</a> de chez Acoustic Magic. </p>
<p>Celui-ci permet de capter la parole dans une pièce, retraite le signal et permet d&#8217;obtenir sur une prise Jack classique la voix et rien que la voix dans une pièce.<br />
Magique <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </td>
</tr>
</table>
<p>Je peux parler le dos tourner au microphone dans une pièce de 20m^2 et l&#8217;ordinateur capte ma voix de manière impressionnante <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>Le logiciel de reconnaissance vocale</h3>
<p>Il y a principalement deux solutions dans le domaine sous GNU/Linux :</p>
<ul>
<li>Le projet <a href="http://cmusphinx.sourceforge.net/html/cmusphinx.php">CMU Sphinx</a> avec PocketSphinx, Sphinx-[234], etc&#8230;</li>
<li><a href="http://julius.sourceforge.jp/en_index.php">Julius</a>, Open-Source Large Vocabulary CSR Engine Julius.</li>
</ul>
<p>Sur ces deux moteurs de reconnaissance vocale, reposent de nombreux <a href="http://www.voxforge.org/home/docs/faq/faq/what-is-a-dialog-manager">Dialog Manager</a>,  qui permettent d&#8217;exploiter le moteurs pour faire de la téléphonie, de contrôle vocale, etc&#8230; </p>
<h3>Ma méthode</h3>
<p>Soyons claire, je ne suis pas un expert en reconnaissance vocale et ce domaine est vraiment très difficile d&#8217;accès et nécessite la compréhension de nombreuses notions.<br />
J&#8217;ai donc adopté la technique <a href="http://www.epitech.eu/">EPITECH</a> : c&#8217;est à dire faire en sorte que cela fonctionne. ( sans comprendre tout le contexte <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  )</p>
<h3>Un bon informaticien est un informaticien feignant</h3>
<p>Pour faire fonctionner Julius, il est nécessaire de lire à haute voix de nombreux mots pour enregistrer les différents <a href="http://fr.wikipedia.org/wiki/Phon%C3%A8me">phonèmes</a> qui les composent. Afin de créer un <a href="http://fr.wikipedia.org/wiki/Mod%C3%A8le_de_Markov_cach%C3%A9">Modèle de Markov caché</a> exploitable par le logiciel.<br />
Voici donc comment je m&#8217;y suis pris pour éviter cette phase fastidieuse du projet.</p>
<h4>Utilisation d&#8217;un logiciel de synthèse vocale</h4>
<p>1 ère approche une solution assez &#8220;<em>laide</em>&#8220;,  qui consiste à faire lire ces mots par un logiciel de <a href="http://en.wikipedia.org/wiki/Speech_synthesis">synthèse vocale</a> comme <a href="http://espeak.sourceforge.net/">eSpeak</a>. Mais le résultat n&#8217;était pas très bon.</p>
<h4>Utilisation d&#8217;une collection d&#8217;enregistrement audio</h4>
<p>J&#8217;ai par la suite découvert le <a href="http://shtooka.net/fr/">projet Shtooka</a>, qui est une collection audio libre de mots français.<br />
Tous les termes liés à la domotique ne sont pas disponible dans le projet mais il est très facile d&#8217;ajouter ces termes à sa base de données locale.</p>
<h4>Conversion texte vers Phonème</h4>
<p>Une des étapes de l&#8217;apprentissage de Julius est la conversion du texte en <a href="http://fr.wikipedia.org/wiki/Phon%C3%A8me">Phonèmes</a>, pour résoudre ce problème, j&#8217;ai utilisé l&#8217;option -X de  <a href="http://espeak.sourceforge.net/">eSpeak</a> dont voici un exemple de sortie :</p>
<pre>$espeak -v fr -q -X "lumière"
Translate 'lumière'
  1     l        [l]

  1     u        [y]

  1     m        [m]

 21     i (A     [j]
  1     i        [i]

 43     è       [E]

  1     r        [r]

 22     e (_     []
  1     e        [@]

 lymj'Er</pre>
<h4>Un peu de glu</h4>
<p>Pour faire fonctionner tout ces éléments ensemble, je me suis fait un script Perl (très sale pour le moment) permettant de réaliser automatiquement toutes ces étapes :</p>
<ul>
<li>analyse des questions posées au robot ;</li>
<li>la conversion des mots en phonèmes ; </li>
<li>la diction des mots ;</li>
<li>la création du modèle accoustique.</li>
</ul>
<p>Il s&#8217;agit de l&#8217;automatisation de toutes les étapes de la création d&#8217;un modèle acoustique du projet <a href="http://www.voxforge.org/home/dev/acousticmodels/linux/create/htkjulius/tutorial">VoxForge</a>.</p>
<h3>Les travaux en cours</h3>
<p>Mon projet est disponible à cette adresse : <a href="http://alfred.csquad.org/">Alfred</a><br />
Il est en cours de développement mais pour l&#8217;instant il est possible de donner des ordres simples. </p>
<p>J&#8217;utilise <a href="http://www.rivescript.com/">RiveScript</a> pour la définition des tâches et de la conversation. Ce langage de chatbot est plus puissant que  <a href="http://en.wikipedia.org/wiki/AIML">AIML</a>. Car il permet d&#8217;inclure du code Perl assez puissant dans le code de la conversation. Voici un exemple :<br />
<code>$ more lib/Alfred/languages/en/x10.rs<br />
+ switch * on<br />
- do you want me to switch &lt;star&gt; on?<br />
+ yes<br />
% do you want me to switch * on<br />
- &lt;call&gt;xpl_x10_send_on &lt;botstar&gt;&lt;/botstar&gt;&lt;/call&gt;</code><br />
<code>$more lib/Alfred/modules/x10.rs<br />
> object xpl_x10_send_on perl<br />
    my ($obj,$method,@args) = @_;<br />
    $obj->{'xpl'}->send(<br />
        message_type => 'xpl-cmnd', class => 'x10.basic',<br />
        body => { command => 'on', device => 'a3'  });<br />
< object<br />
</code></p>
<h3>Un petit appel à contribution</h3>
<p>J'aurais gagné énormément de temps si le projet <a href="http://www.voxforge.org/">VoxForge</a> avait reçu plus de contribution de la part des utilisateurs francophones.</p>
<p>En effet, il n'y a pas assez de contribution pour pouvoir faire un modèle accoustique en Français.<br />
Cela permettra de <strong>disposer d'un système de reconnaissance vocale libre</strong> en Français.<br />
Ce qui intéresse beaucoup de monde à mon avis <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /><br />
C'est donc un petit appel à contribution aux projets VoxForge et <a href="http://shtooka.net/fr/">Shtooka</a>.</p>
<h3>Références intéressantes</h3>
<ul>
<li>Ensemble de <a href="http://cookerspot.tuxfamily.org/wikka.php?wakka=ReconnaissanceVocale">liens intéressants</a> sur le sujet de la reconnaissance vocale sous GNU/Linux.</li>
<li>Un exemple d'utilisation de Julius : <a href="http://www.linux.com/archive/feature/134671">Querying a database using open source voice control software</a> ; </li>
<li>Les <a href="http://www.voxforge.org/home/dev/acousticmodels/linux">tutoriels</a> du projet VoxForge ;</li>
<li>Le <a href="http://sourceforge.jp/projects/julius/downloads/37581/Juliusbook-part-4.1.2-en.pdf">Julius Book</a>. </li>
</ul>
<p></code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.csquad.org/2009/10/27/reconnaissance-vocale-avec-julius/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Smart by &#8220;accident&#8221;</title>
		<link>http://www.csquad.org/2009/10/23/smart-by-accident/</link>
		<comments>http://www.csquad.org/2009/10/23/smart-by-accident/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 17:54:53 +0000</pubDate>
		<dc:creator>cscm</dc:creator>
				<category><![CDATA[Home automation]]></category>
		<category><![CDATA[Robotics]]></category>
		<category><![CDATA[Hadopi]]></category>
		<category><![CDATA[Internet of Things]]></category>
		<category><![CDATA[Nabaztag]]></category>
		<category><![CDATA[roomba]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://www.csquad.org/?p=633</guid>
		<description><![CDATA[Despite The title, This weblog entry is in French. I&#8217;m deeply sorry for beening too lazy  
Je viens de finir la lecture de l&#8217;étude suivante :
A Spotlight on Security and Privacy Risks with Future Household Robots: Attacks and Lessons. 
Celui-ci parle des risques et de la sécurité liés aux robots ménagers (je crois que [...]]]></description>
			<content:encoded><![CDATA[<p>Despite The title, This weblog entry is in French. I&#8217;m deeply sorry for beening too lazy <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Je viens de finir la lecture de l&#8217;étude suivante :<br />
<a href="http://www.cs.washington.edu/homes/tdenning/files/papers/ubicomp_robots_authors_copy.pdf">A Spotlight on Security and Privacy Risks with Future Household Robots: Attacks and Lessons</a>. </p>
<p>Celui-ci parle des risques et de la sécurité liés aux <a href="http://www.pixmania.com/fr/fr/guide-d-achat-les-robots-menagers/ga25.html">robots ménagers</a> (je crois que c&#8217;est pas le bon lien <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ).</p>
<p>Pour résumer rapidement l&#8217;article, celui-ci a évalué le niveau de sécurité des robots : <a href="http://www.wowwee.com/en/products/tech/telepresence/rovio/rovio">Rovio</a>, <a href="http://fr.wikipedia.org/wiki/Meccano_Spykee">Spykee</a> et <a href="http://fr.wikipedia.org/wiki/Robosapien">RoboSapien V2</a>.<br />
Le résultat est une véritable catastrophe d&#8217;un point de vue de la sécurité :</p>
<ul>
<li>des connexions sans fil, pas ou faiblement sécurisées ;</li>
<li>non chiffrement des informations d&#8217;authentification ;</li>
<li>apparition de nouvelles attaques.</li>
</ul>
<p>Mais ce dont j&#8217;aimerais vous parler est l&#8217;idée que soulève les auteurs au début du document:</p>
<blockquote><p>both thoses that we encountered and those that we foresee can be attributed partly to the fact that the home is becoming &#8220;accidentally&#8221; smart and that there is no dedicated, trained system administrator for the home environment.</p></blockquote>
<p>Je vais dans ce billet illustré cette idée et me permettre de réfléchir à haute voix.</p>
<h3>The incoming smart^Wobject</h3>
<p>Ils sont minions, petits ou grands, utiles ou futiles.<br />
ils s&#8217;appellent <a href="http://fr.wikipedia.org/wiki/Roomba">Roomba</a>,   <a href="http://fr.wikipedia.org/wiki/Nabaztag">Nabaztag</a> ou <a href="http://fr.wikipedia.org/wiki/Freebox">Freebox</a>.<br />
Ils sont arrivés dans nos maisons progressivement.<br />
Et <a href="http://fr.wikipedia.org/wiki/Nao(robotique)">les meilleurs</a> pointent bientôt leur nez <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /><br />
Ils mettent en place progressivement le paradigme de <a href="http://fr.wikipedia.org/wiki/Internet_des_objets">l&#8217;Internet des objets</a> et de l&#8217;<a href="http://fr.wikipedia.org/wiki/Intelligence_ambiante">Intelligence ambiante</a>.</p>
<h3>Early adopters</h3>
<p>La cible 1ére de ses technologies sont les <a href="http://fr.wikipedia.org/wiki/Geek">Geek</a>, ce sont les seuls capables d&#8217;adopter ces technologies, d&#8217;accepter les problèmes liés à  leur jeune âge et de les exploiter.</p>
<p>Les Geeks ont généralement les compétences nécessaires pour comprendre le fonctionnement de ces nouveaux objets.  </p>
<h3>Mainstream and Mrs. Michu</h3>
<p>Ces objets arrivent progressivement chez <a href="http://www.dico-des-mots.com/definitions/madame-michu.html">Madame Michu</a> et c&#8217;est la que cela devient intéressant.  </p>
<h4>Freebox</h4>
<p>Commençons par la Freebox, voulez-vous.  Car je trouve que c&#8217;est l un des meilleurs exemples d&#8217;<em>intelligence accidentelle</em>. </p>
<p>Des millions de foyers français ont reçus avec leur abonnement Internet une <em>machin-box</em>.<br />
Celle-ci est équipée d&#8217;une liaison  <a href="http://fr.wikipedia.org/wiki/Wi-Fi">Wi-Fi</a> qui n&#8217;est pas sécurisée, que cela soit en <a href="http://www.isoc.org/isoc/conferences/ndss/02/papers/stubbl.pdf">WEP</a> ou WPA.<br />
Du coup ces milliers de foyer se retrouvent propulsés dans le rôle d&#8217;un administrateur réseau.<br />
Et s&#8217;ils n&#8217;ont pas les compétences nécessaires et que leur connexion est usurpée, ils se trouveront privé de leur droit d&#8217;accès Internet grâce à la loi <a href="http://fr.wikipedia.org/wiki/HADOPI">HADOPI</a>.  </p>
<h4>Roomba</h4>
<p>Le robot aspirateur Roomba, dispose d&#8217;une forte puissance et il est capable de faire des dégâts important dans une maison si la pièce n&#8217;est pas préparée pour son passage.<br />
Le mien dispose en plus d&#8217;une <a href="http://en.wikipedia.org/wiki/RooTooth">connexion Bluetooth</a> dont je doute sérieusement du niveau de sécurité compte-tenu de la complexité du protocole.<br />
Avec une bonne dose de <a href="http://fr.wikipedia.org/wiki/Fuzzing">Fuzzing</a>, je pense qu&#8217;il est tout à fait envisageable de  prendre le contrôle du robot à distance et de me ruiner le salon <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h4>Nabaztag</h4>
<p>Continuons avec le <a href="http://en.wikipedia.org/wiki/Nabaztag">Nabaztag</a>.<br />
J&#8217;aime beaucoup les lapins, mais je dois avouer que celui-ci me sort particulièrement par les oreilles compte-tenu des problèmes qu&#8217;il pose :</p>
<ul>
<li>La connexion Wifi qui pose les mêmes problèmes que la Freebox ;</li>
<li>La centralisation, l&#8217;ensemble de l&#8217;intelligence du lapin se trouve sur les serveurs de <a href="http://fr.wikipedia.org/wiki/Violet_(entreprise)">Violet</a>, ce qui signifie que si la société fait faillite, alors les lapins mourront ; </li>
<li>Ce dernier point soulève de nombreux problèmes liés à la vie privé ; </li>
</ul>
<h3>The rabbit is sad, he wants to hug you</h3>
<p>Je suis un des <em>early adopters</em> des ces technologies ( la domotique, la robotique, etc&#8230; ).<br />
Mais je trouve que les utilisateurs et les constructeurs ne font pas assez attention aux implications et aux risques liés à ces technologies. </p>
<h4>Est-ce que je ne vais pas un peu fort dans les accusations ?</h4>
<p>Je pense qu aujourd&#8217;hui les histoires de robots qui volent des clés ou qui saccagent une maison peuvent faire sourire.<br />
Mais imaginez les mêmes scénarios dans 5 à 10 ans et nous rigolerons un peu moins. </p>
<h4>Mais quel est le principal problème ?</h4>
<p>L&#8217;internet des objets va être déployé dans un nouvel environnement : votre maison.<br />
C&#8217;est à dire un lieu privé, ou la fuite d&#8217;information et/ou les risques encourus peuvent avoir des conséquences très importantes.</p>
<h3>We need Free hugs, free as software</h3>
<p>Je pense que la seule voix possible pour l&#8217;Internet des objets est le logiciel libre. </p>
<p>Les points évoqués dans les exemples précédents peuvent être résolu qu&#8217;à l&#8217;aide de deux méthodes :</p>
<ul>
<li>la formation des utilisateurs ;</li>
<li>et l&#8217;utilisation de logiciels libres.</li>
</ul>
<p>Le 1er point est évident, je vais donc développer le second.<br />
Comme le logiciel libre à largement prouvé sa supériorité en matière de sécurité  informatique.<br />
Il est donc le seul à pouvoir prétendre une place dans votre vie privé.<br />
C&#8217;est la seule solution pour faire adopter ces évolutions.</p>
<p>Il existe aussi une solution basée sur le logiciel propriétaire et des nombreuses lois semblables à HADOPI permettant de cacher ces lacunes en matière de sécurité, mais je n&#8217;ai vraiment pas envie d&#8217;essayer <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.csquad.org/2009/10/23/smart-by-accident/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>xPL Automatic Speech Recognition with Julius</title>
		<link>http://www.csquad.org/2009/10/23/xpl-automatic-speech-recognition-with-julius/</link>
		<comments>http://www.csquad.org/2009/10/23/xpl-automatic-speech-recognition-with-julius/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 14:26:26 +0000</pubDate>
		<dc:creator>cscm</dc:creator>
				<category><![CDATA[Home automation]]></category>
		<category><![CDATA[Julius]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Speech recognition]]></category>
		<category><![CDATA[xPL]]></category>

		<guid isPermaLink="false">http://www.csquad.org/?p=735</guid>
		<description><![CDATA[I&#8217;ve wrote a very small Perl module for interfacing my home automation  Speech Recognition Engine based on Julius with the xPL Network. 
The goal of this xpl-perl module, is to broadcast recognised speech.
I&#8217;ve described the ASR xPL schema on the project forum : ASR.BASIC Schema proposal
You need a working Julius installation running in monitor [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve wrote a very small Perl module for interfacing my home automation  <a href="http://en.wikipedia.org/wiki/Speech_Recognition">Speech Recognition Engine</a> based on <a href="http://julius.sourceforge.jp/en_index.php">Julius</a> with the <a href="http://xplproject.org.uk/">xPL Network</a>. </p>
<p>The goal of this <a href="http://www.xpl-perl.org.uk/">xpl-perl module</a>, is to broadcast recognised speech.</p>
<p>I&#8217;ve described the ASR xPL schema on the project forum : <a href="http://xplproject.org.uk/forums/viewtopic.php?f=2&#038;t=877">ASR.BASIC Schema proposal</a></p>
<p>You need a working Julius installation running in monitor mode (listening on the network) and an xpl-perl setup. </p>
<p>Here is an sample command output :<br />
<code>$ julius -input file -C julian.jconf<br />
...<br />
Stat: server-client: socket ready as server<br />
///////////////////////////////<br />
///  Module mode ready<br />
///  waiting client at 10500<br />
/////////////////////////////// </code><br />
In others windows, you must run <em>xpl-asr-julius</em> and <em>xpl-logger</em>.<br />
When you speak or send a wav file to Julius, the reconised text is broadcasted on the network :<br />
<code>### read waveform input<br />
enter filename->  test.wav<br />
Stat: adin_file: input speechfile: test.wav<br />
STAT: 180003 samples (3.75 sec.)<br />
STAT: ### speech analysis (waveform -> MFCC)<br />
STAT: 00 _default: 17 generated, 17 pushed, 6 nodes popped in 1123<br />
</code><br />
xpl-logger output :<br />
<code>10.0.0.242:53922 [xpl-trig/asr.basic: bnz-julius.nux -> * - &lt;s&gt; éteindre lumière chambre &lt;/s&gt;]</code></p>
<h3>Installation</h3>
<p>The setup is very simple on Debian GNU/Linux. Just fallow thoses instructions :<br />
<code>$ wget http://www.csquad.org/wp-content/contrib/xpl-asr-julius/xPL-ASR-Julius-0.01.tar.gz<br />
$ tar xzf xPL-ASR-Julius-0.01.tar.gz<br />
$ dh-make-perl xPL-ASR-Julius-0.01<br />
$ cd xPL-ASR-Julius-0.01<br />
$ dpkg-buildpackage -b<br />
# dpkg -i ../libxpl-asr-julius-perl*.deb<br />
</code></p>
<p>That&#8217;s all ! </p>
]]></content:encoded>
			<wfw:commentRss>http://www.csquad.org/2009/10/23/xpl-automatic-speech-recognition-with-julius/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Authentification à l&#8217;aide d&#8217;un lecteur RFID Phidgets</title>
		<link>http://www.csquad.org/2009/10/06/authentification-a-laide-dun-lecteur-rfid-phidgets/</link>
		<comments>http://www.csquad.org/2009/10/06/authentification-a-laide-dun-lecteur-rfid-phidgets/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 09:28:15 +0000</pubDate>
		<dc:creator>cscm</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Do it yourself]]></category>
		<category><![CDATA[pam]]></category>
		<category><![CDATA[phidgets]]></category>
		<category><![CDATA[rfid]]></category>

		<guid isPermaLink="false">http://www.csquad.org/?p=599</guid>
		<description><![CDATA[






J&#8217;ai découvert les modules Phidgets dans botmag. Il s&#8217;agit d&#8217;un ensemble de modules électroniques (capteurs, relais, servomoteurs) qui fonctionnent sur la plupart des systèmes d&#8217;exploitation et sont programmable à l&#8217;aide de nombreux langages. 

Je vais décrire dans cet article l&#8217;utilisation du Kit RFID pour l&#8217;authentification PAM sur une machine Debian GNU/Linux.



Présentation du PhidgetRFID Kit
Spécifications

L&#8217;interface lit [...]]]></description>
			<content:encoded><![CDATA[<table>
<tr>
<td valign='top'>
<a href="http://www.csquad.org/wp-content/uploads/2009/10/1023.jpg"><img src="http://www.csquad.org/wp-content/uploads/2009/10/1023-300x233.jpg" alt="PhidgetRFID 1023" title="PhidgetRFID 1023" width="300" height="233" class="alignleft size-medium wp-image-601" /></a>
</td>
<td valign='top'>
<p>
J&#8217;ai découvert les modules <a href="http://www.phidgets.com/">Phidgets</a> dans <a href="http://www.botmag.com/">botmag</a>. Il s&#8217;agit d&#8217;un ensemble de modules électroniques (capteurs, relais, servomoteurs) qui fonctionnent sur la plupart des systèmes d&#8217;exploitation et sont programmable à l&#8217;aide de nombreux langages. </p>
<p>
Je vais décrire dans cet article l&#8217;utilisation du <a href="http://www.phidgets.com/products.php?category=14&#038;product_id=2002">Kit RFID</a> pour l&#8217;authentification <a href="http://en.wikipedia.org/wiki/Pluggable_Authentication_Modules">PAM</a> sur une machine <a href="http://www.debian.org/">Debian GNU/Linux</a>.</p>
</td>
</tr>
</table>
<h3>Présentation du PhidgetRFID Kit</h3>
<h4>Spécifications</h4>
<p>
L&#8217;interface lit les badges qui se trouvent à proximité et est équipée de 2 sorties (une commande de Led et une commande de relais). . Elle se raccorde sur un port USB et renvoie le numéro d&#8217;identification de badge.<br />
Voici les spécifications du lecteur :</p>
<ul>
<li>Consommation maxi: 100 mA ;</li>
<li>Portée (5 à 11 cm) ;</li>
<li>Sortie commande TTL ou CMOS (relais) ;</li>
<li>Sortie 5 Vcc/250 ohms (pour led) ;</li>
<li>Protocole de communication: EM4102 ;</li>
<li>Fréquence: 125KHz </li>
<li>Échantillonnage: 30 lectures/sec ;</li>
<li>Dimensions: 81 x 68 x 16 mm.</li>
</ul>
<h4>Où trouver le kit?</h4>
<p>Le Kit est disponible chez :</p>
<ul>
<li><a href="http://www.phidgets.com/products.php?category=14&#038;product_id=2002">Phidgets</a> au Canada pour $90.00 ;</li>
<li><a href="http://www.gotronic.fr/catalog/micro/phidgets_rfid.htm">GoTronic</a> en France pour 83.50 €.</li>
</ul>
<h3>Installation</h3>
<h4>Matériel</h4>
<p>Rien de spécial, il suffit de brancher le module, et vérifier la détection à l&#8217;aide de <em>lsusb</em> :<br />
<code># lsusb<br />
Bus 002 Device 005: ID 06c2:0031 Phidgets Inc. (formerly GLAB)</code></p>
<h4>Logiciel</h4>
<p>L&#8217;ensemble des composants Phidgets utilisent un SDK unique, qui fourni une bibliothèque d&#8217;accès; dont voici la procédure d&#8217;installation :<br />
<code># cd /usr/src<br />
# wget http://www.phidgets.com/downloads/libraries/Phidgetlinux_2.1.6.20090928.tar.gz<br />
# tar xzvf Phidgetlinux_2.1.6.20090928.tar.gz<br />
# cd Phidgetlinux/phidget21<br />
# make<br />
# make install</code></p>
<h4>Test de fonctionnement du lecteur</h4>
<p>La 1ère étape consiste à tester le fonctionnement du lecteur à l&#8217;aide du programme <a href="http://www.cmatthew.net/wiki/index.php?title=Mhc_rfid">mhc_rfid</a> :<br />
<code># cd /usr/src<br />
# wget http://www.cmatthew.net/mhc_rfid/mhc_rfid.c<br />
# gcc -o mhc_rfid mhc_rfid.c -g -O0 -Wall  -lphidget21 -lm<br />
# ./mhc_rfid<br />
Waiting for RFID to be attached....Phidget RFID 2-output      78185 attached!<br />
Output: 0 > State: 0<br />
Output: 1 > State: 0<br />
PhidgetRFID<br />
Serial Number:      78185<br />
Version:      206<br />
# Outputs: 2<br />
Antenna Status: 1<br />
Onboard LED Status: 0<br />
Press any key to start.....<br />
Antenna ON Reading.....<br />
Press any key to end.....<br />
Got: 0107759322<br />
Output: 1 > State: 1<br />
Lost: 0107759322<br />
Output: 1 > State: 0<br />
Closing...</code><br />
L&#8217;identifiant de la carte est <em>0107759322</em>.</p>
<h4>Gestion des droits</h4>
<p>Par défaut l&#8217;accès aux périphériques USB est limité à l&#8217;utilisateur <em>root</em>.  Pour donner l&#8217;accès à un utilisateur simple. Il faut configurer <em>udev</em> à l&#8217;aide du fichier fourni dans le kit de développement :<br />
<code># cd /usr/src/Phidgetlinux/phidget21/udev<br />
# cp 99-phidgets.rules /etc/udev/rules.d/</code><br />
Débrancher et rebrancher le lecteur. Vous pourrez ensuite l&#8217;utiliser en tant que simple utilisateur.</p>
<h3>Configuration de PAM</h3>
<p>Pour utiliser ce lecteur comme système d&#8217;authentification, il faut installer et configurer un module PAM spécifique : <a href="http://www.cmatthew.net/wiki/index.php?title=Pam_mhcrfid">PAM mhcrfid</a></p>
<h4>Installation du module</h4>
<p><code><br />
# apt-get install libpam-dev<br />
# cd /usr/src<br />
# wget http://www.cmatthew.net/pam_mhcrfid/0.1.4/pam_mhcrfid.c<br />
# gcc -Wall -fPIC -c pam_mhcrfid.c<br />
# gcc -shared -o pam_mhcrfid.so pam_mhcrfid.o -lpam -lm -lphidget21<br />
# mv pam_mhcrfid.so /lib/security<br />
</code></p>
<h4>Configuration d&#8217;un service</h4>
<p>Voici un exemple de configuration pour <em>xscreensaver</em> :<br />
<code>$ cat  /etc/pam.d/xscreensaver<br />
#<br />
# /etc/pam.d/xscreensaver - PAM behavior for xscreensaver<br />
#<br />
auth     sufficient    pam_mhcrfid.so<br />
</code><br />
L&#8217;utilisateur qui lance le service doit avoir un fichier <em>.authtag</em> contenant l&#8217;identifiant du tag :<br />
<code>$ cat -e ~/.authtag<br />
0107759322$</code></p>
<p>Et voilà <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>Conclusion</h3>
<p>Le système d&#8217;authentification n&#8217;est pas très solide, il n&#8217;y a aucune protection contre le rejeux et il est possible de sniffer l&#8217;identifiant du tag, etc&#8230;<br />
Si vous cherchez une solution d&#8217;authentification plus forte, il faut regarder du côté du projet <a href="http://www.openpcd.org/">OpenPCD</a>.<br />
Mais cela peut être utile et très pratique dans certaines configurations, comme l&#8217;accès à certaines ressources de mon réseau domotique <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.csquad.org/2009/10/06/authentification-a-laide-dun-lecteur-rfid-phidgets/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
