{"id":2454,"date":"2017-06-01T23:36:37","date_gmt":"2017-06-01T21:36:37","guid":{"rendered":"https:\/\/www.fanjoe.be\/?p=2454"},"modified":"2018-01-29T21:47:56","modified_gmt":"2018-01-29T20:47:56","slug":"raspberry-pi-lire-les-donnees-dun-capteur-xiaomi-flower-care-miflora-en-bluetooth","status":"publish","type":"post","link":"https:\/\/www.fanjoe.be\/?p=2454","title":{"rendered":"Raspberry Pi : Lire les donn\u00e9es d&rsquo;un capteur Xiaomi Flower Care \/ MiFlora en Bluetooth"},"content":{"rendered":"<h1>Introduction<\/h1>\n<p>Il y a quelques temps, je vous avais parl\u00e9 de mon <em><a href=\"https:\/\/www.fanjoe.be\/?p=64\" target=\"_blank\" rel=\"noopener noreferrer\">Flower Power<\/a><\/em> de <em>Parrot<\/em> et de la mani\u00e8re de <a href=\"https:\/\/www.fanjoe.be\/?p=999\" target=\"_blank\" rel=\"noopener noreferrer\">le connecter \u00e0 un Raspberry Pi<\/a>.<\/p>\n<p>Malheureusement, apr\u00e8s une mise \u00e0 jour de l&rsquo;App sur iPhone, j&rsquo;ai perdu la possibilit\u00e9 d&rsquo;y r\u00e9cup\u00e9rer les donn\u00e9es.<\/p>\n<p>Je me suis alors tourn\u00e9 vers les produits chinois et plus sp\u00e9cialement vers le <em><a href=\"https:\/\/xiaomi-mi.com\/sockets-and-sensors\/xiaomi-huahuacaocao-flower-care-smart-monitor\/\" target=\"_blank\" rel=\"noopener noreferrer\">Xiaomi Flower Care<\/a><\/em> aussi appel\u00e9 <em>MiFlora<\/em> disponible sur <a href=\"http:\/\/amzn.to\/2EW3CwC\" target=\"_blank\" rel=\"noopener\">Amazon<\/a> pour un peu plus de 20\u20ac.<\/p>\n<p><a href=\"https:\/\/www.fanjoe.be\/wp-content\/uploads\/2017\/06\/MiFlora-01.jpg\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"2458\" data-permalink=\"https:\/\/www.fanjoe.be\/?attachment_id=2458\" data-orig-file=\"https:\/\/www.fanjoe.be\/wp-content\/uploads\/2017\/06\/MiFlora-01.jpg\" data-orig-size=\"1240,424\" data-comments-opened=\"1\" data-image-title=\"MiFlora-01\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/www.fanjoe.be\/wp-content\/uploads\/2017\/06\/MiFlora-01-620x212.jpg\" class=\"alignnone size-large wp-image-2458\" src=\"https:\/\/www.fanjoe.be\/wp-content\/uploads\/2017\/06\/MiFlora-01-620x212.jpg\" alt=\"\" width=\"620\" height=\"212\" srcset=\"https:\/\/www.fanjoe.be\/wp-content\/uploads\/2017\/06\/MiFlora-01-620x212.jpg 620w, https:\/\/www.fanjoe.be\/wp-content\/uploads\/2017\/06\/MiFlora-01-175x60.jpg 175w, https:\/\/www.fanjoe.be\/wp-content\/uploads\/2017\/06\/MiFlora-01-300x103.jpg 300w, https:\/\/www.fanjoe.be\/wp-content\/uploads\/2017\/06\/MiFlora-01.jpg 1240w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/><\/a><\/p>\n<p>Cette sonde permet de mesurer :<\/p>\n<ul>\n<li>La temp\u00e9rature ambiante<\/li>\n<li>La luminosit\u00e9 ambiante<\/li>\n<li>L&rsquo;humidit\u00e9 du sol<\/li>\n<li>La fertilit\u00e9 du sol<\/li>\n<\/ul>\n<h1>Installation<\/h1>\n<h2>Mat\u00e9riel utilis\u00e9<\/h2>\n<h3>Raspberry Pi<\/h3>\n<p>Pour la connexion, j&rsquo;ai utilis\u00e9 un Raspberry Pi 3 qui int\u00e8gre d&rsquo;origine le Wifi et le Bluetooth 4.1 LE.<\/p>\n<p>L&rsquo;OS utilis\u00e9 est <a href=\"https:\/\/www.raspberrypi.org\/downloads\/raspbian\/\" target=\"_blank\" rel=\"noopener noreferrer\">Raspbian Jessie with Pixel<\/a> avec toutes les mises \u00e0 jours au 01 juin 2017.<\/p>\n<h3>Flower Care<\/h3>\n<p><a href=\"https:\/\/www.fanjoe.be\/wp-content\/uploads\/2017\/06\/MiFlora-02.jpg\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"2460\" data-permalink=\"https:\/\/www.fanjoe.be\/?attachment_id=2460\" data-orig-file=\"https:\/\/www.fanjoe.be\/wp-content\/uploads\/2017\/06\/MiFlora-02.jpg\" data-orig-size=\"1242,2208\" data-comments-opened=\"1\" data-image-title=\"MiFlora-02\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/www.fanjoe.be\/wp-content\/uploads\/2017\/06\/MiFlora-02-620x1102.jpg\" class=\"size-thumbnail wp-image-2460 alignright\" src=\"https:\/\/www.fanjoe.be\/wp-content\/uploads\/2017\/06\/MiFlora-02-98x175.jpg\" alt=\"\" width=\"98\" height=\"175\" srcset=\"https:\/\/www.fanjoe.be\/wp-content\/uploads\/2017\/06\/MiFlora-02-98x175.jpg 98w, https:\/\/www.fanjoe.be\/wp-content\/uploads\/2017\/06\/MiFlora-02-300x533.jpg 300w, https:\/\/www.fanjoe.be\/wp-content\/uploads\/2017\/06\/MiFlora-02-620x1102.jpg 620w, https:\/\/www.fanjoe.be\/wp-content\/uploads\/2017\/06\/MiFlora-02.jpg 1242w\" sizes=\"auto, (max-width: 98px) 100vw, 98px\" \/><\/a>Le <em>Flower Care<\/em> de <em>Xiaomi<\/em> est une version chinoise (pas internationale) identifi\u00e9e comme telle par l&rsquo;<a href=\"https:\/\/itunes.apple.com\/us\/app\/flower-care\/id1095274672\" target=\"_blank\" rel=\"noopener noreferrer\">App iOS<\/a> et d\u00e9sactiv\u00e9e par d\u00e9faut hors de la Chine continentale. Allez savoir pourquoi, mais c&rsquo;est comme \u00e7a. Je vous ferai un billet plus complet sur le couple Flower Care \/ App Flower Care dans les semaines qui viennent.<\/p>\n<p>Pour comprendre le fonctionnement de l&rsquo;engin, je vous sugg\u00e8re de lire (en anglais) l&rsquo;excellent article sur le wiki d&rsquo;<a id=\"hs_header\" href=\"https:\/\/wiki.hackerspace.pl\/projects:xiaomi-flora\" target=\"_blank\" rel=\"noopener noreferrer\">Hackerspace<\/a>. Il y d\u00e9taille tous les composants que renferme la sonde.<\/p>\n<p>Pour pouvoir lire les donn\u00e9es avec l&rsquo;app que l&rsquo;on va voir plus bas, le firmware doit \u00eatre r\u00e9cent. Genre 2.6 ou plus r\u00e9cent. Faites une mise \u00e0 jour \u00e0 l&rsquo;aide de l&rsquo;<a href=\"https:\/\/itunes.apple.com\/us\/app\/flower-care\/id1095274672\" target=\"_blank\" rel=\"noopener noreferrer\">App iOS<\/a> si n\u00e9cessaire et\/ou possible.<\/p>\n<h2>Connexion au Raspberry Pi<\/h2>\n<p>De mon c\u00f4t\u00e9, je n&rsquo;ai eu \u00e0 installer ni pilote, ni outils de gestion du Bluetooth. Ceux int\u00e9gr\u00e9s \u00e0 l&rsquo;ISO de base de Raspbian ont sembl\u00e9 suffire. Je n&rsquo;ai pas eu non plus \u00e0 activer quoi que ce soit sur le RPi.<\/p>\n<h3>Premier test<\/h3>\n<p>On va commencer par v\u00e9rifier si le RPi \u00ab\u00a0voit\u00a0\u00bb le <em>Flower Care<\/em> :<\/p>\n<pre>$ sudo hcitool lescan<\/pre>\n<p>Cette commande devrait vous retourner un truc du genre :<\/p>\n<pre>LE Scan ...\r\nC4:7C:8D:63:85:B1 (unknown)\r\nC4:7C:8D:63:85:B1 Flower care<\/pre>\n<h3>Installation de l&rsquo;outil \u00ab\u00a0miflora\u00a0\u00bb<\/h3>\n<p>L&rsquo;outil \u00ab\u00a0<em>miflora<\/em>\u00a0\u00bb est publi\u00e9 par <em>BarnyBug<\/em> sur <em>GitHub<\/em> :<br \/>\n<a href=\"https:\/\/github.com\/barnybug\/miflora\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/barnybug\/miflora\/<\/a><\/p>\n<p>Deux possibilit\u00e9s s&rsquo;offrent \u00e0 vous :<\/p>\n<ol>\n<li>T\u00e9l\u00e9charger les sources et les compiler avec <em>GoLang<\/em><\/li>\n<li>T\u00e9l\u00e9charger l&rsquo;app d\u00e9j\u00e0 compil\u00e9e par mes soins<\/li>\n<\/ol>\n<h4>1. T\u00e9l\u00e9charger les sources et les compiler avec <em>GoLang<\/em><\/h4>\n<p>Il est recommand\u00e9 de compiler les sources sur un PC.<\/p>\n<h5>Installer GO<\/h5>\n<p>J&rsquo;ai install\u00e9 GO sur une machine virtuelle Debian Jessie 386 dans <em>Parallels Desktop<\/em>.<\/p>\n<p>Cette page peut vous aider \u00e0 installer GO :<br \/>\n<a href=\"https:\/\/www.digitalocean.com\/community\/tutorials\/how-to-install-go-1-7-on-debian-8\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.digitalocean.com\/community\/tutorials\/how-to-install-go-1-7-on-debian-8<\/a><\/p>\n<p>On va d&rsquo;abord d\u00e9terminer la version de GO \u00e0 installer en consultant cette page :<br \/>\n<a href=\"https:\/\/storage.googleapis.com\/golang\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/storage.googleapis.com\/golang\/<\/a><\/p>\n<p>Dans mon cas, j&rsquo;ai choisi cette version : go1.8.linux-386.tar.gz<\/p>\n<p>Dans le terminal :<\/p>\n<pre>$ sudo apt-get update &amp;&amp; sudo apt-get upgrade<\/pre>\n<pre>$ cd ~\/<\/pre>\n<pre>$ curl -O https:\/\/storage.googleapis.com\/golang\/go1.8.linux-386.tar.gz<\/pre>\n<pre>$ tar xvf go1.8.linux-386.tar.gz<\/pre>\n<p>Vous devriez maintenant avoir un dossier appel\u00e9 <code>go<\/code> dans votre dossier <code>home<\/code>.<\/p>\n<p>On va ensuite changer les droits de propri\u00e9taire et de groupe vers <code>root<\/code> et tout d\u00e9placer vers <code>\/usr\/local<\/code> :<\/p>\n<pre>$ sudo chown -R root:root .\/go<\/pre>\n<pre>$ sudo mv go \/usr\/local<\/pre>\n<p>Puis, on va modifier le PATH de l&rsquo;environnement :<\/p>\n<p>First, set Go&rsquo;s root value, which tells Go where to look for its files.<br \/>\nOn va d&rsquo;abord d\u00e9finir la valeur de racine de Go, qui indique \u00e0 Go o\u00f9 chercher ses fichiers.<\/p>\n<pre>$ sudo nano ~\/.profile<\/pre>\n<p>\u00c0 la fin du fichier, on ajoute ces lignes :<\/p>\n<pre>export GOPATH=$HOME\/work\r\nexport PATH=$PATH:\/usr\/local\/go\/bin:$GOPATH\/bin<\/pre>\n<h5>Compiler miflora<\/h5>\n<p>Puis, on lance la commande indiqu\u00e9e sur le <em>GitHub<\/em> de <em>BarnyBu<\/em>g :<\/p>\n<pre>$ go get github.com\/barnybug\/miflora\/cmd\/miflora<\/pre>\n<p>Dans mon cas, j&rsquo;ai rencontr\u00e9 l&rsquo;erreur suivante :<\/p>\n<pre>go: missing Git command. See https:\/\/golang.org\/s\/gogetcmd\r\npackage github.com\/barnybug\/miflora\/cmd\/miflora: exec: \"git\": executable file not found in $PATH<\/pre>\n<p>Git manque \u00e0 l&rsquo;appel. On va l\u2019installer :<\/p>\n<pre>$ sudo apt-get install git<\/pre>\n<p>Une fois que c&rsquo;est fait, on relance la commande :<\/p>\n<pre>$ go get github.com\/barnybug\/miflora\/cmd\/miflora<\/pre>\n<p>On va ensuite compiler l&rsquo;app avec les param\u00e8tres d&rsquo;environnement du RPi :<\/p>\n<pre>$ env GOOS=linux GOARCH=arm go build github.com\/barnybug\/miflora\/cmd\/miflora<\/pre>\n<p>L&rsquo;app obtenue devrait se trouver dans votre dossier <code>home<\/code> de Debian Jessie du PC :<\/p>\n<p><a href=\"https:\/\/www.fanjoe.be\/wp-content\/uploads\/2017\/06\/MiFlora-03.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"2465\" data-permalink=\"https:\/\/www.fanjoe.be\/?attachment_id=2465\" data-orig-file=\"https:\/\/www.fanjoe.be\/wp-content\/uploads\/2017\/06\/MiFlora-03.png\" data-orig-size=\"657,144\" data-comments-opened=\"1\" data-image-title=\"MiFlora-03\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/www.fanjoe.be\/wp-content\/uploads\/2017\/06\/MiFlora-03-620x136.png\" class=\"alignnone size-large wp-image-2465\" src=\"https:\/\/www.fanjoe.be\/wp-content\/uploads\/2017\/06\/MiFlora-03-620x136.png\" alt=\"\" width=\"620\" height=\"136\" srcset=\"https:\/\/www.fanjoe.be\/wp-content\/uploads\/2017\/06\/MiFlora-03-620x136.png 620w, https:\/\/www.fanjoe.be\/wp-content\/uploads\/2017\/06\/MiFlora-03-175x38.png 175w, https:\/\/www.fanjoe.be\/wp-content\/uploads\/2017\/06\/MiFlora-03-300x66.png 300w, https:\/\/www.fanjoe.be\/wp-content\/uploads\/2017\/06\/MiFlora-03.png 657w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/><\/a><\/p>\n<p>Rapatriez-la sur votre RPi comme on va le voir plus loin.<\/p>\n<h4>2. T\u00e9l\u00e9charger l&rsquo;app d\u00e9j\u00e0 compil\u00e9e par mes soins<\/h4>\n<p>Si vous n&rsquo;avez pas envie de vous coltiner l&rsquo;installation de GO et toutes les \u00e9tapes pr\u00e9alables \u00e0 la compilation de l&rsquo;app <em>miflora<\/em>, t\u00e9l\u00e9chargez-la directement depuis ce lien :<\/p>\n<ul>\n<li><a href=\"https:\/\/www.fanjoe.be\/wp-content\/uploads\/2017\/06\/miflora\" target=\"_blank\" rel=\"noopener noreferrer\">miflora<\/a> (1,9 Mo)<\/li>\n<li><a href=\"https:\/\/www.fanjoe.be\/wp-content\/uploads\/2017\/06\/miflora.zip\" target=\"_blank\" rel=\"noopener noreferrer\">miflora.zip<\/a> (705 Ko)<\/li>\n<\/ul>\n<h4>Installation de \u00ab\u00a0<em>miflora<\/em>\u00a0\u00bb dans son dossier<\/h4>\n<p>Sur le RPi, on va cr\u00e9er un dossier <code>\/home\/pi\/scripts\/miflora\/<\/code> dans lequel on va placer l&rsquo;app :<\/p>\n<pre>$ mkdir \/home\/pi\/scripts\/\r\n$ mkdir \/home\/pi\/scripts\/miflora\/<\/pre>\n<p>Avec un utilitaire comme <em><a href=\"https:\/\/cyberduck.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">CyberDuck<\/a><\/em>, on va d\u00e9poser l&rsquo;app <em>miflora<\/em> dans le dossier cr\u00e9\u00e9.<\/p>\n<p>On va se placer dans le dossier et rendre l&rsquo;app executable :<\/p>\n<pre>$ cd \/home\/pi\/scripts\/miflora\/\r\n$ chmod +x miflora<\/pre>\n<p>Puis, on execute l&rsquo;app <em>miflora<\/em> :<\/p>\n<pre>$ .\/miflora<\/pre>\n<p>On devrait avoir ce retour :<\/p>\n<pre>Usage: miflora MAC HCI_DEVICE\r\n\r\neg: miflora C4:7C:8D:XX:XX:XX hci0<\/pre>\n<p>Pour trouver la <span class=\"st\"><a href=\"https:\/\/fr.wikipedia.org\/wiki\/Adresse_MAC\" target=\"_blank\" rel=\"noopener noreferrer\"><em>MAC address<\/em><\/a> du <em>Flower Care<\/em>, on entre la commande vue en d\u00e9but d&rsquo;article :<\/span><\/p>\n<pre>$ sudo hcitool lescan<\/pre>\n<p>Et on la trouve (ici, en rouge) :<\/p>\n<pre>LE Scan ...\r\nC4:7C:8D:63:85:B1 (unknown)\r\n<span style=\"color: #ff0000;\">C4:7C:8D:63:85:B1<\/span> Flower care<\/pre>\n<p><span class=\"st\">Et on termine comme ceci (n&rsquo;oubliez pas de terminer par <code>hci0<\/code>) :<em><br \/>\n<\/em><\/span><\/p>\n<pre>$ .\/miflora C4:7C:8D:XX:XX:XX hci0<\/pre>\n<p>Si tout s&rsquo;est bien pass\u00e9, elle devrait vous retourner quelque chose comme \u00e7a :<\/p>\n<pre>Reading miflora...\r\nFirmware: {Version:2.7.0 Battery:100}\r\nSensors: {Temperature:20.3 Moisture:35 Light:14 Conductivity:411}<\/pre>\n<p><span style=\"text-decoration: underline;\"><em><strong>Autre m\u00e9thode :<\/strong><\/em><\/span><\/p>\n<p><a href=\"https:\/\/www.fanjoe.be\/?p=2741\" target=\"_blank\" rel=\"bookmark noopener\">Flower Care \/ MiFlora de Xiaomi : R\u00e9cup\u00e9rer les donn\u00e9es avec Gatttool sur un RPi 3<\/a><\/p>\n<p><span style=\"text-decoration: underline;\"><strong><em>R\u00e9f\u00e9rences :<\/em><\/strong><\/span><\/p>\n<p><a href=\"https:\/\/loads.pickle.me.uk\/2017\/03\/19\/raspberry-pi-zero-w-and-mi-flora-plant-monitor\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/loads.pickle.me.uk\/2017\/03\/19\/raspberry-pi-zero-w-and-mi-flora-plant-monitor\/<\/a><br \/>\n<a href=\"https:\/\/wiki.hackerspace.pl\/projects:xiaomi-flora\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/wiki.hackerspace.pl\/projects:xiaomi-flora<\/a><br \/>\n<a href=\"https:\/\/github.com\/barnybug\/miflora\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/barnybug\/miflora\/<\/a><br \/>\n<a href=\"https:\/\/www.digitalocean.com\/community\/tutorials\/how-to-install-go-1-7-on-debian-8\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.digitalocean.com\/community\/tutorials\/how-to-install-go-1-7-on-debian-8<\/a><br \/>\n<a href=\"https:\/\/git-scm.com\/download\/linux\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/git-scm.com\/download\/linux<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction <\/p>\n<p>Il y a quelques temps, je vous avais parl\u00e9 de mon <em><a href=\"https:\/\/www.fanjoe.be\/?p=64\" target=\"_blank\" rel=\"noopener noreferrer\">Flower Power<\/a><\/em> de <em>Parrot<\/em>&#8230;<\/p>\n","protected":false},"author":1,"featured_media":2468,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","jetpack_post_was_ever_published":false},"categories":[179,10,3,12],"tags":[13,17,279,281,16,22,280],"class_list":["post-2454","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-domotique","category-geek","category-informatique","category-raspberrypi","tag-bluetooth","tag-domotique","tag-flower-care","tag-miflora","tag-plantes","tag-raspberry-pi","tag-xiaomi","end"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.fanjoe.be\/wp-content\/uploads\/2017\/06\/MiFlora-00.jpg","_links":{"self":[{"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=\/wp\/v2\/posts\/2454","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2454"}],"version-history":[{"count":0,"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=\/wp\/v2\/posts\/2454\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=\/wp\/v2\/media\/2468"}],"wp:attachment":[{"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2454"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2454"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2454"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}