[Python] Parrot flower Power

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
Jihem
Messages : 337
Inscription : 19 sept. 2014, 13:04
Localisation : Finistère Sud

Re: Parrot flower Power

Message par Jihem »

Bonjour
Merci Pierre pour ta réponse mais ça ne change rien.
Toujours les identifiants du capteur mais pas les données interessants :twisted:
Est ce que ça marche chez toi?
merci
Hard:Raspberry Pi4 + SSD Arduino Tablette murale Archos
Soft: Domoticz WireGuard vpn Homebridge Tradfri Ikea
Devices:[/colore]Rfxtrx433 DI-O Chacon Sonoff touch Anémomètre, pluviometre, sondes Orégon, capteurs humidité Miflora, téléinfo
totof60
Messages : 373
Inscription : 29 avr. 2016, 09:31

Re: Parrot flower Power

Message par totof60 »

hello Jihem

J'ai (de) commenté les lignes suivantes dans test.js

Code : Tout sélectionner

 //console.log('writeFriendlyName');
        //flowerPower.writeFriendlyName(friendlyName, callback);
J'ai maintenant le retour des valeurs de mon parrot
Domoticz V2022.2
sous Buster, Homebridge,RfLink
Raspberry pi3, Google home mini
plein de truc wifi !! de l'esp-01 jusque le nodemcu en passant par le wemos et même du DIY
totof60
Messages : 373
Inscription : 29 avr. 2016, 09:31

Re: Parrot flower Power

Message par totof60 »

Par contre la modif de Deennoo pour le niveau de la pile ne fonctionne pas pour moi .

En ssh avec Putty le script me renvoie bien les infos du Flower-power

  • connectAndSetup
    readSystemId
    system id = 90:03:b7:00:00:e8:26:4d
    readSerialNumber
    serial number = PI040297AA3L018662�����
    readFirmwareRevision
    firmware revision = 2016-09-14_hawaii-2.0.3_hardware-config-MP
    readHardwareRevision
    hardware revision = 2013-07-26_hawaiiProduction-1.2_protoDV-bootloader
    readManufacturerName
    manufacturer name = Parrot
    readBatteryLevel
    battery level = 89
    readFriendlyName
    friendly name = Flower power 264D���
    readColor
    color = brown
    readSunlight
    sunlight = 6.24 mol/m²/d


Mais si j'ajoute la modif de Deennoo j'ai une erreur :
  • pi@raspberrypi:~/node_modules/flower-power$ sudo node test.js
    /home/pi/node_modules/flower-power/test.js:123
    options.path = path + ‘52&nvalue=52&svalue=’ + batteryLevel;
    ^
    SyntaxError: Unexpected token ILLEGAL
    at Object.exports.runInThisContext (vm.js:76:16)
    at Module._compile (module.js:513:28)
    at Object.Module._extensions..js (module.js:550:10)
    at Module.load (module.js:458:32)
    at tryModuleLoad (module.js:417:12)
    at Function.Module._load (module.js:409:3)
    at Module.runMain (module.js:575:10)
    at run (bootstrap_node.js:352:7)
    at startup (bootstrap_node.js:144:9)
    at bootstrap_node.js:467:3
    pi@raspberrypi:~/node_modules/flower-power$

Mon code :

Code : Tout sélectionner

function(callback) {
      console.log('readBatteryLevel');
      flowerPower.readBatteryLevel(function(error,batteryLevel) {
options.path = path + ‘52&nvalue=52&svalue=’ + batteryLevel;
        console.log('battery level = ' + batteryLevel);

var req = http.request(options).end();

        callback();
      });
    },
Merci d'avance
Domoticz V2022.2
sous Buster, Homebridge,RfLink
Raspberry pi3, Google home mini
plein de truc wifi !! de l'esp-01 jusque le nodemcu en passant par le wemos et même du DIY
totof60
Messages : 373
Inscription : 29 avr. 2016, 09:31

Re: Parrot flower Power

Message par totof60 »

Finalement ça fonctionne
Deux petits symboles qui n’étaient pas les bons et deux jours à se faire piquer les yeux avec ce p****n de code :roll:
Image

Le bon code :

Code : Tout sélectionner

function(callback) {
      console.log('readBatteryLevel');
      flowerPower.readBatteryLevel(function(error,batteryLevel) {
options.path = path + '52&nvalue=0&svalue=' + (error,batteryLevel);
        console.log('battery level = ' + batteryLevel);

var req = http.request(options).end();

        callback();
      });
    },
Domoticz V2022.2
sous Buster, Homebridge,RfLink
Raspberry pi3, Google home mini
plein de truc wifi !! de l'esp-01 jusque le nodemcu en passant par le wemos et même du DIY
totof60
Messages : 373
Inscription : 29 avr. 2016, 09:31

Re: Parrot flower Power

Message par totof60 »

Je n'ai pas réussi a faire des notification avec un device qui a deux valeurs ( température et humidité)

J'ai donc créé deux devices ; un pour la température et un pour l'humidité.
Les notifications fonctionnent.

Pour ceux que cela intéresse voici le code en entier
Il vous restera à le modifier avec votre IP de Domoticz : host:
Le port de votre Domoticz : port:
Et les IDX de vos devices (pour moi 50, 51, 52, 66, 68)

Pour avoir température et humidité dans le même device il faudra de-commenter la ligne

Code : Tout sélectionner

//options.path = path + '50&svalue=' + AirTemperature + ';' + Humidity + ';2' ;
le code

Code : Tout sélectionner

var async = require('async');

var FlowerPower = require('./index');

var hasCalibratedData = false;

var http = require('http');

var options = {
  host: '192.168.0.236',
  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 + '51&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 + '50&svalue=' + AirTemperature + ';' + Humidity + ';2' ;

options.path = path + '66&svalue=' + AirTemperature + ';2' ;
        var req = http.request(options).end()
      });

      flowerPower.on('airTemperatureChange', function(temperature) {
        console.log('air temperature = ' + temperature.toFixed(2) + '°C');
      });

      flowerPower.on('soilMoistureChange', function(soilMoisture) {
        console.log('soil moisture = ' + soilMoisture.toFixed(2) + '%');
options.path = path + '68&svalue=' + Humidity + ';2' ;

var req = http.request(options).end()

      });

      flowerPower.on('calibratedSoilMoistureChange', function(soilMoisture) {
        console.log('calibrated soil moisture = ' + soilMoisture.toFixed(2) + '%');
      });

      flowerPower.on('calibratedAirTemperatureChange', function(temperature) {
        console.log('calibrated air temperature = ' + temperature.toFixed(2) + '°C');
      });

      flowerPower.on('calibratedSunlightChange', function(sunlight) {
        console.log('calibrated sunlight = ' + sunlight.toFixed(2) + ' mol/m²/d');
      });

      flowerPower.on('calibratedEaChange', function(ea) {
        console.log('calibrated EA = ' + ea.toFixed(2));
      });

      flowerPower.on('calibratedEcbChange', function(ecb) {
        console.log('calibrated ECB = ' + ecb.toFixed(2) + ' dS/m');
      });

      flowerPower.on('calibratedEcPorousChange', function(ecPorous) {
        console.log('calibrated EC porous = ' + ecPorous.toFixed(2)+ ' dS/m');
      });

      console.log('connectAndSetup');
      flowerPower.connectAndSetup(callback);
    },
    function(callback) {
      console.log('readSystemId');
      flowerPower.readSystemId(function(error, systemId) {
        console.log('\tsystem id = ' + systemId);
        callback();
      });
    },
    function(callback) {
      console.log('readSerialNumber');
      flowerPower.readSerialNumber(function(error, serialNumber) {
        console.log('\tserial number = ' + serialNumber);
        callback();
      });
    },
    function(callback) {
      console.log('readFirmwareRevision');
      flowerPower.readFirmwareRevision(function(error, firmwareRevision) {
        console.log('\tfirmware revision = ' + firmwareRevision);

        var version = firmwareRevision.split('_')[1].split('-')[1];

        hasCalibratedData = (version >= '1.1.0');

        callback();
      });
    },
    function(callback) {
      console.log('readHardwareRevision');
      flowerPower.readHardwareRevision(function(error, hardwareRevision) {
        console.log('\thardware revision = ' + hardwareRevision);
        callback();
      });
    },
    function(callback) {
      console.log('readManufacturerName');
      flowerPower.readManufacturerName(function(error, manufacturerName) {
        console.log('\tmanufacturer name = ' + manufacturerName);
        callback();
      });
    },
     function(callback) {
      console.log('readBatteryLevel');
      flowerPower.readBatteryLevel(function(error,batteryLevel) {
options.path = path + '52&nvalue=0&svalue=' + (error,batteryLevel);
        console.log('battery level = ' + batteryLevel);

var req = http.request(options).end();

        callback();
      });
    },
	  function(callback) {
      console.log('readFriendlyName');
      flowerPower.readFriendlyName(function(error, friendlyName) {
        console.log('\tfriendly name = ' + friendlyName);

        //console.log('writeFriendlyName');
        //flowerPower.writeFriendlyName(friendlyName, callback);

callback();
      });
    },
    function(callback) {
      console.log('readColor');
      flowerPower.readColor(function(error, color) {
        console.log('\tcolor = ' + color);

      callback();
      });
    },
    function(callback) {
      console.log('readSunlight');
      flowerPower.readSunlight(function(error, sunlight) {
        console.log('sunlight = ' + sunlight.toFixed(2) + ' mol/m²/d');

        callback();
      });
    },
    // function(callback) {
    //   console.log('readSoilElectricalConductivity');
    //   flowerPower.readSoilElectricalConductivity(function(error, soilElectricalConductivity) {
    //     console.log('soil electrical conductivity = ' + soilElectricalConductivity.toFixed(2));

    //     callback();
    //   });
    // },
    function(callback) {
      console.log('readSoilTemperature');
      flowerPower.readSoilTemperature(function(error, temperature) {
        console.log('soil temperature = ' + temperature.toFixed(2) + '°C');

        callback();
      });
    },
    function(callback) {
      console.log('readAirTemperature');
      flowerPower.readAirTemperature(function(error, temperature) {
        console.log('air temperature = ' + temperature.toFixed(2) + '°C');
	AirTemperature = temperature.toFixed(2);

        callback();
      });
    },
    function(callback) {
      console.log('readSoilMoisture');
      flowerPower.readSoilMoisture(function(error, soilMoisture) {
        console.log('soil moisture = ' + soilMoisture.toFixed(2) +'%' );
Humidity = soilMoisture.toFixed(2);

        callback();
      });
    },
    function(callback) {
      if (hasCalibratedData) {
        async.series([
          function(callback) {
            console.log('readCalibratedSoilMoisture');
            flowerPower.readCalibratedSoilMoisture(function(error, soilMoisture) {
              console.log('calibrated soil moisture = ' + soilMoisture.toFixed(2) + '%');

              callback();
            });
          },
          function(callback) {
            console.log('readCalibratedAirTemperature');
            flowerPower.readCalibratedAirTemperature(function(error, temperature) {
              console.log('calibrated air temperature = ' + temperature.toFixed(2) + '°C');

              callback();
            });
          },
          function(callback) {
            console.log('readCalibratedSunlight');
            flowerPower.readCalibratedSunlight(function(error, sunlight) {
              console.log('calibrated sunlight = ' + sunlight.toFixed(2) + ' mol/m²/d');

              callback();
            });
          },
                   function() {
            callback();
          }
        ]);
      } else {
        callback();
      }
    },
    function(callback) {
      console.log('enableLiveMode');
      flowerPower.enableLiveMode(callback);
    },
    function(callback) {
      console.log('live mode');
      setTimeout(callback, 5000);
    },
    function(callback) {
      console.log('disableLiveMode');
      flowerPower.disableLiveMode(callback);
    },
    function(callback) {
      if (hasCalibratedData) {
        async.series([
          function(callback) {
            console.log('enableCalibratedLiveMode');
            flowerPower.enableCalibratedLiveMode(callback);
          },
          function(callback) {
            console.log('calibrated live mode');
            setTimeout(callback, 5000);
          },
          function(callback) {
            console.log('disableCalibratedLiveMode');
            flowerPower.disableCalibratedLiveMode(callback);
          },
          function() {
            callback();
          }
        ]);
      } else {
        callback();
      }
    },
    function(callback) {
      console.log('ledPulse');
      flowerPower.ledPulse(callback);
    },
    function(callback) {
      console.log('delay');
      setTimeout(callback, 2000);
    },
    function(callback) {
      console.log('ledOff');
      flowerPower.ledOff(callback);
    },
    function(callback) {
      console.log('disconnect');
      flowerPower.disconnect(callback);
    }
  ]);
});
Ne m'en demandez pas plus !! je n'ai fais que pomper des trucs existants ( merci Deennoo)
Domoticz V2022.2
sous Buster, Homebridge,RfLink
Raspberry pi3, Google home mini
plein de truc wifi !! de l'esp-01 jusque le nodemcu en passant par le wemos et même du DIY
Répondre