Plugin BLEA et Jeedom, oui mais…

Mon installation domotique est, je dois dire, assez stable et je n’y touche plus beaucoup… En tout cas, plus de gros chantiers.

Je suis néanmoins confronté un problème récurrent avec le plugin BLEA: les données de mes capteurs miplant ne sont régulièrement plus remontées. Après analyse des traces, j’ai le message d’erreur “Failed cmd le on”.

J’ai lu sur les forums que ce message d’erreur apparait lorsque le dongle Bluetooth n’est pas compatible. Or, le dongle que je possède est le bien recommandé SENA… qui fonctionne de manière générale assez bien.

Lorsque je suis dans le cas, le redémarrage du daemon BLEA ne suffit pas et il faut que je déconnecte la dongle pendant quelques secondes et puis le reconnecte.

En utilisant le nombre de minutes de dernière collecte et le statut des miplants, j’ai créé un scenario qui me prévient quand les données ne sont plus transmises depuis plus de 20 minutes et je tente de redémarrer le daemon. Si au delà de 40 minutes, donc après plusieurs tentatives de redémarrage, une notification part pour m’informer qu’il faut déconnecter et reconnecter le dongle.

Mais ce n’est pas très WAF même si mon épouse va volontiers faire la petite manipulation quand je suis absent de la maison.

Je me suis dit après qu’il y avait peut-être un moyen pour simuler cette opération via des commandes linux, à savoir, couper et rallumer l’alimentation du port USB où est connecté le dongle.

J’ai donc fait appel à un ami pour savoir comment je pouvais faire cela (Attention, mon petit script est fonctionnel sur une Jeedom SMART sous Jessie)

Il est d’abord nécessaire de connaitre le bus et le port sur lequel le dongle est connecté… Mais la SMART a une petite particularité, les 4 ports usb sont considérés comme un hub et ce n’est donc pas aussi simple que ça.

Tout d’abord, il faut exécuter les commandes suivantes après s’être connecté en ssh avec l’utilisateur root: lsusb

Bus 001 Device 005: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
Bus 001 Device 004: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)
Bus 001 Device 049: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 001 Device 002: ID 05e3:0610 Genesys Logic, Inc. 4-port hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

On peut donc voir que mon dongle est sur le bus 001 mais on ne voit pas le port. On peut d’ailleurs remarquer qu’il y a un bien un hub 4 ports, qui correspond bien aux 4 ports de la SMART.

Il faut donc ensuite exécuter la commande lsusb -t

/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
   |__ Port 1: Dev 49, If 0, Class=Wireless, Driver=btusb, 12M
   |__ Port 1: Dev 49, If 1, Class=Wireless, Driver=btusb, 12M
|__ Port 3: Dev 4, If 0, Class=Vendor Specific Class, Driver=ftdi_sio, 12M
|__ Port 4: Dev 5, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M

On retrouve ici, par rapport au device, que le port utilisé est le port 1. Mais là où cela se complique, c’est que le port 1 est également lié au hub.

Je ne peux donc pas désactiver le port 1, sinon, je coupe le hub et donc les autres périphériques connectés sur les autres ports. On peut voir un “sous-port” qui est le 1.

Voici donc le script en question qu’il faudra appeler dans Jeedom (en utilisant le plugin script) sera à écrire pour couper et rallumer le bon port USB.

Il faut donc exécuter le script et y ajouter l’action (bind ou unbind) ainsi que le bus, port et sous-port si nécessaire.

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# Script reset_usb.sh V1.0, écrit par La Geek Attitude

#V1 Création du script

################ Utilisation ################
#
# Ce script permet d’agir sur les ports USB de votre box domotique
# utilisation : reset_usb.sh $1 $2 $3 $4
# exemple : reset_usb.sh Etat Bus Port Sous-port
# Etat: unbind pour couper / bind pour allumer
# le quatrième paramètre est utilisé si le port est derrière un hub.
# le fichier de log se trouvre dans l’onglet logs de Jeedom
#
# La raison de ce script est qu’il m’arrive de devoir retirer le dongle bluetooth de ma box
# pour que mes capteurs fonctionnent à nouveau. J’ai voulu pouvoir reproduire la déconnexion
# et reconnection du dongle sans devoir le faire physiquement.
#
##############################################

## Définition des variables passées au script
StateToSet=$1
Bus=$2
Port=$3
SubPort=$4

function WEBSRV_TCHECK()
# Vérifie si apache ou nginx est installé
# Définie le dossier Log
{
ls /etc/init.d/ | grep -q apache2
if [ $? -eq 0 ] ; then
WebSrv=”apache2″
LogDir=”/var/www/html/log/script_reset_usb”
else
WebSrv=”nginx”
LogDir=”/usr/share/nginx/www/jeedom/log/script_reset_usb”
fi
}

##########################################
## Début du Script
##########################################

WEBSRV_TCHECK

(
echo
echo “##################################################################”
echo “##”
echo “## Execution du script reset_usb : `date +%d-%m-%Y_%H-%M-%S`”
echo “##”
echo “##################################################################”
echo “##”
echo “## $StateToSet $Bus-$Port.$SubPort”

if [ -z $SubPort ]
then
sudo su -c “echo $Bus-$Port > /sys/bus/usb/drivers/usb/$StateToSet”
else
sudo su -c “echo $Bus-$Port.$SubPort > /sys/bus/usb/drivers/usb/$StateToSet”
fi
) >> $LogDir 2>&1
exit 0

Publié le 26 octobre 2018
Mis à jour le 8 septembre 2022

4 réflexions sur “Plugin BLEA et Jeedom, oui mais…”

    1. Arf, c’est un peu compliqué car j’ai changé de routeur wifi et le wemos ne s’appaire plus avec le nouveau alors que cela fonctionne bien avec le nouveau. Le montage électronique est fait et j’espère faire quelques tests très prochainement. Cela m’a tellement pris la tête que je me suis focalisé sur l’assistant vocal snips.

Laisser un commentaire

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