Importer les données du Flower Power de Parrot en Bluetooth

Standard

Je me suis offert un Flower Power de Parrot. Cet objet connecté d’une valeur de 49 € permet de recueillir des données provenant de votre pot de fleur.

Je souhaite pouvoir accéder aux données disponibles grâce à l’API Bluetooth depuis Domoticz. En fonction de l’humidité ou de la luminosité je pourrai ensuite déclencher des actions automatiques, par exemple l’arrosage automatique ou l’ouverture d’un store électrique pour protéger mes plantes du soleil.

J’utilise un Raspberry PI B+ sur lequel j’ai installé Raspbian et Domoticz. Il me faudra un connecteur bluetooth USB.

Acquérir un adaptateur bluetooth

Voici la liste des connecteurs compatibles avec mon Raspberry Pi. Pour ma part, je me suis offert celui-ci.

Activer le bluetooth sur le Raspberry PI

Après branchement de votre dongle bluetooth, il faut activer le bluetooth de votre OS Rasbian et vérifier son bon fonctionnement. Voici un petit tuto très bien fait.

Installer NodeJS

NodeJS dispose de librairie simplifiant l’accès au Flower Power en Bluetooth. Cet autre tuto de Pierre Dandumont vous expliquera comment installer node et les librairies nécessaires.

Et si vous êtes curieux n’hésitez pas à consulter la documentation officielle de l’API bluetooth du Flower Power de Parrot.

Le script de test.js permet de se connecter au Flower Power et de vérifier l’état de la luminosité, de la température de l’air et du sol, de l’humidité dans le sol et de l’engrais.

  • sunlight = 2.26 mol/m²/d
  • soil electrical conductivity = 1021.00
  • soil temperature = 17.50°C
  • air temperature = 17.09°C
  • soil moisture = 31.43%

Alimenter Domoticz

Pour importer les données dans Domoticz, il est nécessaire de créer deux dispositifs dummy device :

  • 1 dispositif de type Température et Humidité,
  • 1 dispositif de type Lux.

Pour rappel, il vous faudra un matériel Dummy que l’on peut ajouter dans  Domoticz depuis l’interface Configuration > Matériels.

Le matériel Dummy ajouté, vous pouvez créer de nouveaux capteurs Dummy. Chaque capteur sera mis à jour depuis l’API JSON de Domoticz.

Dispositifs dummy pour le Flower Power

Le dispositif de température dont l’ID est 252 sera alimenté au travers de l’API JSON avec l’URL suivante :

http://domoticz:8080/json.htm?type=command&param=udevice&idx=252&nvalue=0&svalue=20;45;1

  • IDx : 252
  • Température : 20°
  • Humidité : 45 %
  • Statut :
    • 0=Normal
    • 1=Comfortable
    • 2=Dry
    • 3=Wet

Dispositif de Température et Humidité

Plus d’info sur l’API JSON de Domoticz pour alimenter un dispositif Température et Humidité ici.

Nous faisons de même avec le dispositif de luminosité. Mais la valeur recueillie avec le script est en mol/m²/d (Photosynthetically Active Radiation ou PAR). Il faut simplement multiplier la valeur par 53.93 pour obtenir une valeur en Lux ou Lumen (Plus d’info sur la méthode de conversion ici).

L’URL de l’API JSON sera la suivante :

http://domoticz:8080/json.htm?type=command&param=udevice&idx=253&svalue=7.0109

  • IDx : 253
  • Valeur recueillie : 0,13
  • Valeur envoyée à Domoticz : 7.010

Dispositif de luminosité

Automatiser la synchronisation avec un script NodeJS

Les données récoltées par le script de test peuvent être envoyées à Domoticz grâce à l’API JSON. J’ai apporté quelques petites adaptations pour effectuer deux requêtes HTTP dans le script NodeJS.



/* [...] */
var http = require('http');

var options = {
 host: '192.168.1.111',
 port: '8080',
 path: ''
};

var path = '/json.htm?type=command&param=udevice&idx=';
var AirTemperature = 0;
var Humidity = 0;

FlowerPower.discover(function(flowerPower) {
 async.series([
 function(callback) {
 flowerPower.on('disconnect', function() {
 console.log('disconnected!');
 process.exit(0);
 });


flowerPower.on('sunlightChange', function(sunlight) {
 console.log('sunlight = ' + sunlight.toFixed(2) + ' mol/m²/d');
 options.path = path + '253&svalue=' + (sunlight.toFixed(2) * 53.93);
 var req = http.request(options).end();
 });

 flowerPower.on('soilElectricalConductivityChange', function(soilElectricalConductivity) {
 console.log('soil electrical conductivity = ' + soilElectricalConductivity.toFixed(2));
 });

 flowerPower.on('soilTemperatureChange', function(temperature) {
 console.log('soil temperature = ' + temperature.toFixed(2) + '°C');
 options.path = path + '252&svalue=' + AirTemperature + ';' + Humidity + ';2' ;
 var req = http.request(options).end()
 });
/* [...] */

 function(callback) {
 console.log('readAirTemperature');
 flowerPower.readAirTemperature(function(temperature) {
 console.log('air temperature = ' + temperature.toFixed(2) + '°C');
 AirTemperature = temperature.toFixed(2);
 callback();
 });
 },
 function(callback) {
 console.log('readSoilMoisture');
 flowerPower.readSoilMoisture(function(soilMoisture) {
 console.log('soil moisture = ' + soilMoisture.toFixed(2) + '%');
 Humidity = soilMoisture.toFixed(2);
 callback();
 });
 },

/*[...]*/

Le script complet est téléchargeable ici >>.

L’ajout dans la crontab du user root :

sudo crontab -e
5 * * * * /usr/local/bin/node /home/pi/node_modules/flower-power/domoticz.js > /dev/null 2>&1

Voici la première étape, la suivante consistera à déclencher une action automatique d’arrosage. Pour toute proposition ou adaptation n’hésitez pas à me contacter ou à commenter cet article.

[Total : 0    Moyenne : 0/5]
Partagez sur les réseaux sociaux
  •  
  •  
  •  
  •  
  •  

22 thoughts on “Importer les données du Flower Power de Parrot en Bluetooth

  1. deennoo

    Super tuto !

    Dans un autre tuto j’ai vu qu’il est possible de lire l’État de la batterie.

    Il doit être possible de rajouter un device % juste pour elle non. ?

    • Olivier Portier

      Bonjour deennoo33,

      Effectivement le niveau de la batterie peut-aussi être audité et ainsi déclencher un scénario en cas de panne sèche. La fonction qui permet de récolter le niveau de la batterie dans le script de test.js est readBatteryLevel :
      battery level = 87

      A tester !
      Olivier

      • deennoo33

        Je viens enfin de recevoir mon dongke bt4.0…

        La premiere partie est ok a 100% je peux me connecter au flower power et lire les infos sans problemes.

        Tes modifications sont a ajouter dans le fichier test.js ? si oui y a t’il un ordre particulier ou comme cela en bout de fichier ?

  2. fredclo

    Bonjour,

    Merci pour ce tuto. Est-ce que la portée du bluetooth n’est pas un problème ? car j’ai 10 m entre les plantes et le RPi, 2 mur et une vitre. J’ai peur que ca ne marche pas …
    Merci
    fred

    • Olivier Portier

      Effectivement, la porté théorique des dongles bluetooth est d’environ 10m. Dans mon appart parisien, je n’ai pas eu à tester cette porté, mais avec deux mur et une vitre, il est peut-être préférable de mettre un raspberry-pi plus proche qui capte le signal bluetooth et fait les appels REST à Domoticz en Wifi.

      Olivier

    • Deennoo33

      Chez moi le PI est dans une vrai cage de faradet, j’ai du déplacer un peu le pot de fleur et ajouter une rallonge de 30cm en USB pour facilité la transmition.

      Il y a 7m avec un plafond, et 2 murs entre mon pi et le flower power.

  3. deennoo33

    Ce script fonctionne tres bien.

    j’essaye de rajouter le niveau de la batterie en ajoutant

    flowerPower.on(‘readBatteryLevel’, function(batteryLevel) {
    console.log(‘battery level = ‘ + batteryLevel);
    options.path = path + ‘1198&nvalue=0&svalue=’ + (batteryLevel) ;
    var req = http.request(options).end()

    aucune erreur le script s’execute sans probleme.

    mais mon device n’est pas mis a jour (que ce soit en text ou %)

    une idee ?

    • Olivier Portier

      As-tu testé la mise à jour en appelant directement l’URL REST de ton device ? Il y a aussi un peu de cache dans domoticz ce qui peut provoquer des erreurs d’interprétation.

      Olivier

      • deennoo33

        j’ai reussit

        Dans les callback il faut remplacer le pave batterylevel par :

        function(callback) {
        console.log(‘readBatteryLevel’);
        flowerPower.readBatteryLevel(function(batteryLevel) {
        options.path = path + ‘1232&nvalue=0&svalue=’ + (batteryLevel);
        console.log(‘battery level = ‘ + batteryLevel);
        var req = http.request(options).end();

        callback();
        });
        },

  4. Rémi

    Bonjour ;

    La première partie du tuto marche très bien chez moi. En revanche à partir de « Automatiser la synchronisation avec un script NodeJS » j’ai des problèmes. Le script NodeJS s’exécute sans problème mais rien n’est mis à jour dans domoticz. J’ai essayé de faire un programme simple juste pour envoyer la requête :

    « var http = require(‘http’);
    var options = {
    host: ‘192.168.1.10’,
    port: ‘8080’,
    path: ‘/json.htm?type=command&param=udevice&idx=8&svalue=25’,
    };
    http.request(options).end(); »

    Pourquoi ce script ne fait rien ?!

    Merci d’avance pour votre aide !

    Rémi

    • Olivier Portier

      Bonjour Rémi,

      As-tu simplement testé l’URL de mise à jour dans un navigateur connecté sur le même réseau. La mise à jour devrait se faire.
      Si ce n’est pas le cas, ton serveur domoticz n’est donc pas à l’adresse 192.168.1.10.

      Olivier

  5. geekdom

    Bonjour, je débute sous linux
    j’ai les erreurs suivantes quand j’installe noble (en suivant le tuto de Pierre Dandumont) :
    /usr/local/bin/node: /usr/lib/arm-linux-gnueabihf/libstdc++.so.6: version `GLIBCXX_3.4.20′ not found (required by /usr/local/bin/node)
    /usr/local/bin/node: /lib/arm-linux-gnueabihf/libc.so.6: version `GLIBC_2.16′ not found (required by /usr/local/bin/node)
    Que puis je faire?

  6. Miguel

    Salut,
    Je dois 2 flower power et quand je lance le script me détecte parfois l’un, tantôt l’autre. Cela pourrait changer la script pour surveiller les valeurs des deux à chaque fois?

  7. Romain

    Bonjour,

    Merci pour cet article et le script :).
    Quelqu’un connait la différence entre ces modes:

    enableCalibratedLiveMode
    enableLiveMode

    readSoilMoisture
    readCalibratedSoilMoisture

  8. jerem

    Bonjour,

    J’ai également l’erreur suivante :

    /usr/local/bin/node: /usr/lib/arm-linux-gnueabihf/libstdc++.so.6: version `GLIBCXX_3.4.20′ not found (required by /usr/local/bin/node)
    /usr/local/bin/node: /lib/arm-linux-gnueabihf/libc.so.6: version `GLIBC_2.16′ not found (required by /usr/local/bin/node)
    Une idée?

    • Cedric

      Je me retrouve dans la même situation, et malheureusement même sur le tuto en lien plus haut les deux personnes qui ont eux ce problème n’ont pas eux de réponse 🙁
      Pas toujours facile de trouver les réponses en étant débutant sur du linux. 🙂

  9. Greg

    Bonjour
    Depuis la mise à jour le scrip ne me retourne plus que :
    connectAndSetup
    readSystemId
    system id = 90:03:b7:00:00:e7:e1:bd
    readSerialNumber
    serial number = PI0000000000�����
    readFirmwareRevision
    firmware revision = 2016-07-06_hawaii-2.0.2_hardware-config-MP
    readHardwareRevision
    hardware revision = 2013-07-26_hawaiiProduction-1.2_protoDV-bootloader
    readManufacturerName
    manufacturer name = Parrot
    readBatteryLevel
    battery level = 42
    readFriendlyName
    friendly name = Flower power XXXX
    writeFriendlyName
    disconnected!

    L’API aurait-elle été modifiée ?

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *