Niveau Réservoir Parrot Pot

Bonjour,

Je découvre Jeedom en venant de NodeRed.
Sur NodeRed j’avais pu remonter via gattool le niveau du réservoir d’eau de mes Parrot Pot (après avoir cherché quelques temps).
Je ne trouve pas la remontée de cette information sur blea.
Existe il un moyen de créer une commande pour récupérer cette donnée ?

Merci de votre retour

C’est possible, mais il faut créer le fichier de configuration.
A vérifier si tu peux utiliser le format de Nodered.
Le plus simple, me semble de regarder une fichier déjà existant dans BLEA et voir si tu peux le faire.

Bonjour,

Quel est la valeur du handle que tu utilisais avec gattool ? Ça devrait être assez simple de le rajouter dans les fichiers existants pour le Parrot.

La valeur renvoyée est directement en litres ? Il y a une conversion à faire ?

Je pourrais éventuellement faire le test avec le mien.

Bonjour a tous,

Merci pour vos retour. C’est bien ce que je pensais, il doit « suffire » de rajouter la ligne dans le fichier de config du Parrot Pot mais je n’arrive pas à trouve ce fichier.
En tous cas je ne trouve pas le fichier ou sont spécifiés les handle à lire pour chacune des valeurs que l’on veut récupérer

Pour récupérer le niveau je passais par cette commande :
" gatttool --device=#MACAdress du pot# --char-read -a 0x8b "
Ca nous renvois une valeur en hexa qui correspond au niveau d’eau du réservoir en pourcentage.

C’est la seule info qu’il manque, si vous pouvez m’aider ca serait super !

Merci à vous

Thomas

Bonsoir,

Je testerai plus tard sur le mien mais tu peux déjà essayer çà :

Dans le fichier /plugins/blea/resources/blead/devices/parrotplant.py

il faudrait rajouter la ligne suivante dans la fonction read() pour aller lire l’info :

result['volume'] = self.__convertVolumeData(conn.readCharacteristic(self.characteristicHandles['volume']))

ce qui donnerait :

def read(self,mac):
		logging.debug('read: '+mac)
		result={}
		try:
			conn = Connector(mac)
			conn.connect()
			if not conn.isconnected:
				conn.connect()
				if not conn.isconnected:
					return
			result['sunlight'] = self.__convertSunlightData(conn.readCharacteristic(self.characteristicHandles['sunlight']))
			result['soilec'] = self.__convertSoilECData(conn.readCharacteristic(self.characteristicHandles['soilec']))
			result['soiltemp'] = self.__convertTempData(conn.readCharacteristic(self.characteristicHandles['soiltemp']))
			result['airtemp'] = self.__convertTempData(conn.readCharacteristic(self.characteristicHandles['airtemp']))
			result['soilmoisture'] = self.__convertSoilMoistureData(conn.readCharacteristic(self.characteristicHandles['soilmoisture']))
			result['calibratedsoilmoisture'] = self.__convertFloatData(conn.readCharacteristic(self.characteristicHandles['calibratedsoilmoisture']))
			result['calibratedairtemp'] = self.__convertFloatData(conn.readCharacteristic(self.characteristicHandles['calibratedairtemp']))
			result['calibratedli'] = self.__convertFloatData(conn.readCharacteristic(self.characteristicHandles['calibratedli']))
			result['color'] = self.__convertColorData(conn.readCharacteristic(self.characteristicHandles['color']))
            result['volume'] = self.__convertVolumeData(conn.readCharacteristic(self.characteristicHandles['volume']))
			result['battery'] = self.__convertBatteryData(conn.readCharacteristic(self.characteristicHandles['battery']))
			result['id'] = mac
			logging.debug(str(result))
			return result
		except Exception as e:
			logging.error(str(e))
		return result

Il faudra adapter si besoin la fonction de conversion (j’ai repris la même que la batterie dans l’exemple) :

def __convertVolumeData(self,data):
		return self.__safeUnpack('B', data)

Il faudrait déclarer le Handle dans la classe ParrotPot() comme ceci :

self.characteristicHandles = {
			'sunlight': '0x25',
			'soilec': '0x31',
			'soiltemp': '0x34',
			'airtemp': '0x37',
			'soilmoisture': '0x3a',
			'calibratedsoilmoisture': '0x41',
			'calibratedairtemp': '0x44',
			'calibratedli': '0x47',
			'color': '0x72',
			'volume': '0x8b',
			'battery': '0x4b'

Et aussi le mettre dans la classe FlowerPower() mais pas sur que le handle soit le même :

self.characteristicHandles = {
			'sunlight': '0x25',
			'soilec': '0x29',
			'soiltemp': '0x2d',
			'airtemp': '0x31',
			'soilmoisture': '0x35',
			'calibratedsoilmoisture': '0x3f',
			'calibratedairtemp': '0x43',
			'calibratedli': '0x47',
			'color': '0x85',
          	'volume': '0x8b',
			'battery': '0x4c'
		}

Pour la commande, il faudrait l’ajouter dans /plugins/blea/core/config/devices/parrotpot/parrotpot.json

{
                "name": "Volume",
                "type": "info",
                "subtype": "numeric",
                "display": {
					"icon": "<i class=\"fas fa-water\"><\/i>",
					"generic_type": "DONT"
				},
                "isVisible": 0,
                "isHistorized": 0,
                "unite": "%",
                "logicalId": "volume",
				"template": {
					"dashboard": "line",
					"mobile": "line"
				}
            },

Ensuite, il faudra redémarrer le plugin Blea.

Pour que la commande apparaisse sur ton équipement, un enregistrement de celui-ci devrait suffire. Sinon, ca devrait le faire en « Recréant les commandes ».

1 « J'aime »

Je viens de modifier selon tes indications.
Pour le moment j’ai les retours de commande RSSI, present et presentlocal.
Le reste me renvoie une valeur nulle.

La commande est bien créée ou pas ?

Pas d’erreur dans les logs (en mode debug) au démarrage du plugin ?

La commande se crée sans soucis.
Aucune erreur dans les logs blea

Par d’erreur au démarrage sur le ficher /plugins/blea/resources/blead/devices/parrotplant.py ? Tu as bien fait attention de respecter l’indentation dans le ficher python parrotpot.py ?

Tu peux peut être essayer de supprimer le fichier python correspondant au parrotpot (parrotpot*****.pyc) qui est en cache dans le répertoire plugins/blea/resources/blead/devices/__cache__ puis redémarrer le plugin. Ça devrait le recréer en prenant en compte les modifs.

Le fichier supprimé dans `plugins/blea/resources/blead/devices/pycache ne semble pas se recréer.
J’ai relance l’installation des dépendances et relancer le plugin, le fichier ne reapparait pas

Avec les logs du plugin en mode debug, au démarrage du plugin, il passe en revue tout les fichiers python. Pas d’erreur sur celui du Parrot ?

Il les passe tous en revu mais ne me signale rien.
Je viens de relance l’installation des dépendances, et je v relancer le plugin.
Quel log en mode debug souhaites tu que je te colle ici ?
Blea, Blea_local, Blea_syncconf, Blea_Update ?

blea_local

Il faut regarder dans celui-ci si tu n’as pas quelquechose comme ça :

2020-12-09 22:10:48.672][DEBUG] : Impossible d'importer devices.parrotplant : unindent does not match any outer indentation level (parrotplant.py, line 58)

Les seuls lignes que j’ai qui contiennent Parrot sont celles ci :

[2020-12-09 23:13:21.533][DEBUG] : No name in data but i know it is : parrotpot
[2020-12-09 23:13:21.535][DEBUG] : {'id': 'A0:14:3D:CD:9C:BD', 'type': 'default', 'name': 'parrotpot', 'rssi': -63, 'source': 'local', 'present': 1}
[2020-12-09 23:13:21.658][DEBUG] : Send to jeedom : {'devices': {'A0:14:3D:CD:9C:BD': {'id': 'A0:14:3D:CD:9C:BD', 'type': 'default', 'name': 'parrotpot', 'rssi': -63, 'source': 'local', 'present': 1}}}
[2020-12-09 23:13:45.855][DEBUG] : No name in data but i know it is : parrotpot
[2020-12-09 23:13:45.857][DEBUG] : {'id': 'A0:14:3D:CD:BC:5D', 'type': 'default', 'name': 'parrotpot', 'rssi': -84, 'source': 'local', 'present': 1}
[2020-12-09 23:13:45.902][DEBUG] : Send to jeedom : {'devices': {'80:EA:CA:88:B8:D3': {'present': 1, 'sunlight': 6, 'id': '80:EA:CA:88:B8:D3', 'type': 'miflora', 'name': 'miflora', 'rssi': -90, 'source': 'local'}, 'A0:14:3D:CD:BC:5D': {'id': 'A0:14:3D:CD:BC:5D', 'type': 'default', 'name': 'parrotpot', 'rssi': -84, 'source': 'local', 'present': 1}}}
[2020-12-09 23:13:47.595][DEBUG] : No name in data but i know it is : parrotpot
[2020-12-09 23:13:47.597][DEBUG] : {'id': 'A0:14:3D:CD:9C:BD', 'type': 'default', 'name': 'parrotpot', 'rssi': -64, 'source': 'local', 'present': 1}
[2020-12-09 23:13:47.708][DEBUG] : Send to jeedom : {'devices': {'80:EA:CA:88:D3:E0': {'present': 1, 'temperature': 21.9, 'id': '80:EA:CA:88:D3:E0', 'type': 'miflora', 'name': 'miflora', 'rssi': -74, 'source': 'local'}, 'A0:14:3D:CD:9C:BD': {'id': 'A0:14:3D:CD:9C:BD', 'type': 'default', 'name': 'parrotpot', 'rssi': -64, 'source': 'local', 'present': 1}}}
[2020-12-09 23:14:15.653][DEBUG] : No name in data but i know it is : parrotpot
[2020-12-09 23:14:15.654][DEBUG] : {'id': 'A0:14:3D:CD:9C:BD', 'type': 'default', 'name': 'parrotpot', 'rssi': -64, 'source': 'local', 'present': 1}
[2020-12-09 23:14:15.676][DEBUG] : Send to jeedom : {'devices': {'A0:14:3D:CD:9C:BD': {'id': 'A0:14:3D:CD:9C:BD', 'type': 'default', 'name': 'parrotpot', 'rssi': -64, 'source': 'local', 'present': 1}}}
[2020-12-09 23:14:21.944][DEBUG] : No name in data but i know it is : parrotpot
[2020-12-09 23:14:21.947][DEBUG] : {'id': 'A0:14:3D:CD:BC:5D', 'type': 'default', 'name': 'parrotpot', 'rssi': -83, 'source': 'local', 'present': 1}
[2020-12-09 23:14:21.998][DEBUG] : Send to jeedom : {'devices': {'A0:14:3D:CD:BC:5D': {'id': 'A0:14:3D:CD:BC:5D', 'type': 'default', 'name': 'parrotpot', 'rssi': -83, 'source': 'local', 'present': 1}}}
[2020-12-09 23:14:45.721][DEBUG] : No name in data but i know it is : parrotpot
[2020-12-09 23:14:45.723][DEBUG] : {'id': 'A0:14:3D:CD:9C:BD', 'type': 'default', 'name': 'parrotpot', 'rssi': -62, 'source': 'local', 'present': 1}
[2020-12-09 23:14:45.896][DEBUG] : Send to jeedom : {'devices': {'A0:14:3D:CD:9C:BD': {'id': 'A0:14:3D:CD:9C:BD', 'type': 'default', 'name': 'parrotpot', 'rssi': -62, 'source': 'local', 'present': 1}}}
[2020-12-09 23:14:56.022][DEBUG] : No name in data but i know it is : parrotpot
[2020-12-09 23:14:56.024][DEBUG] : {'id': 'A0:14:3D:CD:BC:5D', 'type': 'default', 'name': 'parrotpot', 'rssi': -82, 'source': 'local', 'present': 1}
[2020-12-09 23:14:56.264][DEBUG] : Send to jeedom : {'devices': {'A0:14:3D:CD:BC:5D': {'id': 'A0:14:3D:CD:BC:5D', 'type': 'default', 'name': 'parrotpot', 'rssi': -82, 'source': 'local', 'present': 1}}}

mais dans pycache je n’ai nulle part de fichier parrotplat.pyc qui est réapparu

La ligne que j’ai indiqué est au démarrage du plugin. Il se peut que le fichier de log soit écrasé rapidement si le nombre de lignes à conserver n’est pas élevé et qu’il y a beaucoup d’info dedans.

Alors oui, en effet, tu as bien raison :

[2020-12-09 23:19:48.705][DEBUG] : Impossible d’importer devices.parrotplant : unindent does not match any outer indentation level (parrotplant.py, line 59)

Je te copie colle les lignes de mon fichier autour de la ligne 59

la ligne 59 est celle qui correspond à la ligne du volume

		result['battery'] = self.__convertBatteryData(conn.readCharacteristic(self.characteristicHandles['battery']))
        result['volume'] = self.__convertVolumeData(conn.readCharacteristic(self.characteristicHandles['volume']))
		result['id'] = mac

Verifies qu’il y a bien des tabulations en début de ligne et pas des espaces pour toutes les lignes que tu as ajoutées.

Alors maintenant visiblement il arrive à charger le fichier de configuration :
Mon parrotplan.pyc est réapparu avec un petit cadenas en lecture seule

[2020-12-09 23:26:31.322][INFO] : LOADER------Import de la configuration devices.parrotplant
[2020-12-09 23:26:31.460][DEBUG] : Message read from socket: b'{"apikey":"76YL6pj82bmcFhatNTSfqhWjMAc677Gi","cmd":"add","device":{"id":"A0:14:3D:CD:9C:BD","delay":900,"needsrefresh":1,"name":"parrotpot","refreshlist":[],"islocked":0,"emitterallowed":"local","refresherallowed":"local","specificconfiguration":[],"absent":"","type":"","model":"parrotpot\/parrotpot"}}'
[2020-12-09 23:26:31.464][DEBUG] : Message read from socket: b'{"apikey":"76YL6pj82bmcFhatNTSfqhWjMAc677Gi","cmd":"add","device":{"id":"A0:14:3D:CD:BC:5D","delay":900,"needsrefresh":1,"name":"parrotpot","refreshlist":[],"islocked":0,"emitterallowed":"local","refresherallowed":"local","specificconfiguration":[],"absent":"","type":"","model":"parrotpot\/parrotpot"}}'
[2020-12-09 23:26:32.921][DEBUG] : SOCKET-READ------Add device : {'id': 'A0:14:3D:CD:9C:BD', 'delay': 900, 'needsrefresh': 1, 'name': 'parrotpot', 'refreshlist': [], 'islocked': 0, 'emitterallowed': 'local', 'refresherallowed': 'local', 'specificconfiguration': [], 'absent': '', 'type': '', 'model': 'parrotpot/parrotpot'}
[2020-12-09 23:26:33.222][DEBUG] : SOCKET-READ------Add device : {'id': 'A0:14:3D:CD:BC:5D', 'delay': 900, 'needsrefresh': 1, 'name': 'parrotpot', 'refreshlist': [], 'islocked': 0, 'emitterallowed': 'local', 'refresherallowed': 'local', 'specificconfiguration': [], 'absent': '', 'type': '', 'model': 'parrotpot/parrotpot'}
[2020-12-09 23:26:35.922][DEBUG] : No name in data but i know it is : parrotpot
[2020-12-09 23:26:35.925][DEBUG] : {'id': 'A0:14:3D:CD:9C:BD', 'type': 'default', 'name': 'parrotpot', 'rssi': -60, 'source': 'local', 'present': 1}
[2020-12-09 23:26:36.030][DEBUG] : Send to jeedom : {'devices': {'A0:14:3D:CD:9C:BD': {'id': 'A0:14:3D:CD:9C:BD', 'type': 'default', 'name': 'parrotpot', 'rssi': -60, 'source': 'local', 'present': 1}}}
[2020-12-09 23:26:42.241][DEBUG] : No name in data but i know it is : parrotpot
[2020-12-09 23:26:42.244][DEBUG] : {'id': 'A0:14:3D:CD:BC:5D', 'type': 'default', 'name': 'parrotpot', 'rssi': -90, 'source': 'local', 'present': 1}
[2020-12-09 23:26:42.354][DEBUG] : Send to jeedom : {'devices': {'A0:14:3D:CD:BC:5D': {'id': 'A0:14:3D:CD:BC:5D', 'type': 'default', 'name': 'parrotpot', 'rssi': -90, 'source': 'local', 'present': 1}}}
[2020-12-09 23:27:01.984][DEBUG] : No name in data but i know it is : parrotpot
[2020-12-09 23:27:01.986][DEBUG] : {'id': 'A0:14:3D:CD:9C:BD', 'type': 'default', 'name': 'parrotpot', 'rssi': -63, 'source': 'local', 'present': 1}
[2020-12-09 23:27:01.993][DEBUG] : Send to jeedom : {'devices': {'80:EA:CA:88:B8:D3': {'present': 1, 'sunlight': 3, 'id': '80:EA:CA:88:B8:D3', 'type': 'miflora', 'name': 'miflora', 'rssi': -88, 'source': 'local'}, 'A0:14:3D:CD:9C:BD': {'id': 'A0:14:3D:CD:9C:BD', 'type': 'default', 'name': 'parrotpot', 'rssi': -63, 'source': 'local', 'present': 1}}}
[2020-12-09 23:27:02.283][DEBUG] : No name in data but i know it is : parrotpot
[2020-12-09 23:27:02.285][DEBUG] : {'id': 'A0:14:3D:CD:BC:5D', 'type': 'default', 'name': 'parrotpot', 'rssi': -83, 'source': 'local', 'present': 1}
[2020-12-09 23:27:02.442][DEBUG] : Send to jeedom : {'devices': {'A0:14:3D:CD:BC:5D': {'id': 'A0:14:3D:CD:BC:5D', 'type': 'default', 'name': 'parrotpot', 'rssi': -83, 'source': 'local', 'present': 1}}}
[2020-12-09 23:27:30.366][DEBUG] : No name in data but i know it is : parrotpot

mais je n’ai toujours aucune info autre que Present et Present_Local et rssi qui ne me remonte

Vérifies les droits du fichier. Il y a des chances qu’il soit en root et pas avec les bons droits d’execution.

Si besoin :

chmod 775 parrotpot*.pyc
chown www-data:www-data parrotpot*.pyc