Problème remontée d'infos programmateur d’arrosage Jardibric BLP-NR avec le plugin BLEA

plugin-blea

Bonjour, @Kaktusatomik,
Je reviens vers toi sur le sujet du programmateur d’arrosage Jardibric BLP-NR avec le plugin BLEA.
De mon coté je n’ai pas encore trouvé une solution pour avoir la remontée de l’état et le niveau de batterie du programmateur.
(je ne connais pas bien le programme et suis novice pour ce type de programmation)
As-tu eu pu revoir de ton coté ?
Éventuellement, si tu n’as pas eu le temps, peux tu m’aiguiller juste sur la partie du code à regarder pour les remontées d’infos vers jeedom stp ? Je pourrais continuer un peu.
Je te remercie pour ton aide
Cordialement

PS : peut être le même souscis que pour la remontée d’infos des milflora ?

Salut,
Désolé je n’ai pas eu le temps de creuser le problème.
Voici le fichier : plugins/blea/resources/blead/devices/blpnr.py
C’est le système de notification et de souscription qui pose problème. Il faudrait refaire des captures de trame bluetooth entre l’appli et le blpnr mais je manque cruellement de temps.
Je pense que la partie decodage de la fonction handlenotification est bonne.

Bonjour, @Kaktusatomik,
Je déterre ce sujet, je n’ai pas eu le temps de me pencher sur la question, mais maintenant que le confinement nous oblige a rester chez soi, je vais pouvoir m’occuper ;). Je te sollicite pour savoir quel logiciel et dongle tu as utilisé pour scanner/capter les trames bluetooth entre l’appli et le blpnr stp ?
Je te remercie.
PS : Je ferais un retour dès que j’aurai un peu avancé
Cordialement,

Salut,

J’utilise une fonction native d’android :

Bon courage :slight_smile:

Bonjour @ tous,

Je suis également à la recherche d’une solution pour avoir la remontée de l’état de la batterie, si un membre a réussi ce tour de force, je suis preneur…

Merci d’avance pour vos réponses.

Salut @AUSE2284, @luc06,

Du nouveau sur le BLP :smiley:

J’ai fait une PR sur le github.

En attendant si vous voulez tester, il faut remplacer le fichier blpnr.py dans plugins/blea/resources/blead/devices/
Par celui ci et redémarrer le démon.

from bluepy import btle
import logging
import globals
import utils
from multiconnect import Connector
from notification import Notification

class Blpnr():
	def __init__(self):
		self.name = 'blpnr'
		self.ignoreRepeat = False

	def isvalid(self,name,manuf='',data='',mac=''):
		if name.lower().startswith('blnr') or name.lower() in [self.name]:
			return True
			
	def parse(self,data,mac,name,manuf):
		logging.debug('PARSE BLPNR')
		action={}
		action['present'] = 1
		if mac not in globals.LAST_STORAGE:
			logging.debug('MODE IS ? READ BLPNR')
			globals.LAST_STORAGE[mac]={}
			self.getStatus(mac)
		return action

			  
	def action(self,message):
		logging.debug('ACTION BLPNR')
		mac = message['device']['id']
		logging.debug('MAC BLPNR '+mac)
		action = message['command']['action']
		if mac not in globals.LAST_STORAGE:
			globals.LAST_STORAGE[mac]={}
		logging.debug('action BLPNR '+action)
		handle = '0X0011'
		conn = Connector(mac)
		conn.connect(type='random')
		if not conn.isconnected:
			conn.connect(type='random')
			if not conn.isconnected:
				return
		logging.debug('connected BLPNR')
		if action == 'refresh':
			logging.debug('refresh BLPNR')
			self.getStatus(mac)
			return
		if action == 'off':
			message = '050400900000009900'
		if action == 'on':
			value = message['command']['value']
			logging.debug('value BLPNR ' + str(value))
			liste = [5,4,0,10,0,int(value),0]
			checksum1 = sum(liste)%256
			checksum2 = sum(liste)/256
			liste.append(checksum1)
			liste.append(int(checksum2))
			message = utils.tuple_to_hex(liste)
		conn.writeCharacteristic(handle,message)
		conn.disconnect()
		self.getStatus(mac)
			  
	def getStatus(self,mac):
		logging.debug('STATUS BLPNR')
		try:
			conn = Connector(mac)
			if not conn.isconnected:
				conn.connect(type='random')
				if not conn.isconnected:
					return
			conn.writeCharacteristic('0x000f','2902')
			conn.disconnect()
		except Exception as e:
			logging.error(str(e))
		try:
			conn = Connector(mac)
			if not conn.isconnected:
				conn.connect(type='random')
				if not conn.isconnected:
					return
			logging.debug('READ notif BLPNR')
			notification = Notification(conn,Blpnr)
			conn.writeCharacteristic('0x0011','0d00000d00',response=True)
			notification.subscribe(10)
		except Exception as e:
			logging.error(str(e))

	def read(self,mac):
		logging.debug('READ BLPNR')
		if mac not in globals.LAST_STORAGE:
			logging.debug('MODE IS ? READ BLPNR')
			globals.LAST_STORAGE[mac]={}
			self.getStatus(mac)
		elif mac in globals.LAST_STORAGE and globals.LAST_STORAGE[mac][0] == 1:
			logging.debug('MODE IS ON READ BLPNR')
			self.getStatus(mac)
		else:
			logging.debug('MODE IS OFF DONT READ BLPNR')
	
	def handlenotification(self,conn,handle,data={},action={}):
		logging.debug('NOTIFI BLPNR ')
		conn.disconnect()
		result={}
		result['id'] = conn.mac
		logging.debug('BLPNR id : '+result['id'])
		size = len(data)
		logging.debug('BLPNR data : '+str(size))
		result['source'] = globals.daemonname
		logging.debug('BLPNR source : '+result['source'])
		if (size <= 6):
			result['mode'] = 'False'
		else:
			result['temps'] = int(data[6])
			logging.debug('BLPNR temps : '+str(result['temps']))
			tension = int(data[7])
			logging.debug('BLPNR tension : '+str(tension))
			battery = 0			  
			if tension >= 80:
				battery = 5
			elif tension >= 75:
				battery = 4	  
			elif tension >= 70:
				battery = 3	  
			elif tension >= 65:
				battery = 2	  
			elif tension >= 60:
				battery = 1
			result['battery'] = battery * 20			 
			logging.debug('BLPNR battery : '+str(result['battery']))
			result['mode'] = str(data[4] > 0)
			logging.debug('BLPNR mode : '+result['mode'])
			globals.LAST_STORAGE[conn.mac][0] = 1
		if result['mode'] == 'False':
			result['temps'] = '0'
			logging.debug('BLPNR temps : '+result['temps'])
			logging.debug('BLPNR mode : '+result['mode'])
			globals.LAST_STORAGE[conn.mac][0] = 0
		globals.JEEDOM_COM.add_changes('devices::'+conn.mac,result)
			  
globals.COMPATIBILITY.append(Blpnr)

https://github.com/jeedom/plugin-blea/pull/111

Dites moi si ça fonctionne chez vous.

1 « J'aime »

Salut @kaktusatomik,
Désolé de ma réponse tardive, j’ai pris le temps de tester sur quelques jours ton nouveau script
En ce qui me concerne : Impec ! pour moi les remontées d’infos se font parfaitement
l’état de batterie : OK conforme (pile qui est neuve) et même retour que sur l’appli
temps de marche : OK * (voir commentaire en bas)
Mode en cours : OK * (voir commentaire en bas)
(quelques screenshot ci dessous pour preuve)
image
image
image

Super boulot de mise à jour et un grand merci encore pour ton implication !!! :+1: :+1: :+1:
(J’ai vu tes modifs je suis trop novice en programmation python, j’aurai mis un temps pas possible pour faire ça tout seul ! ;))
Commentaire général :

  • concernant le retour d’état : chez moi l’option de jeedom « refresh forcé » est activée par défaut à l’inclusion du BLP…pratique pour avoir des remontées régulières et précises mais attention le BLP est alors très gourmand en pile)

  • Pour ma part , j’ai désactiver l’option « refresh forcé » et procède à un refresh de l’état des batteries et du mode en cours via un scénario => permet d’économiser considérablement les piles lorsque celui ci n’est pas en fonctionnement. Sinon consommation de pile tous les mois assurée et c’est pas bon pour la planète !**

Salut,
Merci pour ton retour.
En ce qui concerne le refresh forcé, je fais en sorte de n’interroger le blp que si il a été mis en mode arrosage depuis jeedom :wink:. Donc normalement ça ne devrait pas réduire la durée de vie de la pile.
Tu peux le voir dans les logos en debug. Avec un log du genre BLP is off do not read.

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.