
Suivi de l’état de notre aspirateur robot Xiaomi Mi Vacuum à Grafana
Si nous avons le merveilleux et tout-puissant aspirateur robot Xiaomi et que vous souhaitez visualiser ses données dans un tableau de bord Grafana, Ceci est votre message! Dans celui-ci, nous verrons comment se connecter à l’aspirateur, Comment nous pouvons vous poser des questions et obtenir toutes sortes de données intéressantes, puis le stocker dans une base de données MySQL que l’on va attaquer avec Grafana pour visualiser et traiter ces métriques.
Commencé, La chose la plus importante, Nous allons utiliser une excellente bibliothèque que nous avons dans Lien avec GitHub pour contrôler l’aspirateur ou pour obtenir des informations sur son état ou ses consommables.
Nous commençons comme toujours par les exigences, la première chose et la plus importante sera d’avoir Python 3.5, installé et par défaut, si vous le faites à partir d’un Raspbian, vous devrez peut-être suivre ces étapes pour l’installer et le sélectionner:
[Code source]sudo update-alternatives –Installer /usr/bin/python python /usr/bin/python2.7 1
sudo update-alternatives –Installer /usr/bin/python python /usr/bin/python3.5 2
sudo update-alternatives –Config Python
Python –Version
python -m pip désinstaller pip
pip install construct==2.9.31[/Code source]
Nous installons virtualenv, Et nous utilisons ce répertoire comme un environnement virtuel., Nous avons finalement installé Mirobo et certaines exigences dont nous aurons également besoin:
[Code source]sudo pip install virtualenv
Mkdir mirobo
virtualenv -p /usr/bin/python3 mirobo
Temps de recharge Miro
source bin/activate
sudo apt-get install libffi-dev libssl-dev -y
PIP Installer python-MIIO[/Code source]
Bouger! Nous allons maintenant pouvoir lancer 'Mirobo Discover’ pour rechercher notre aspirateur sur le net, Si nous avons de la chance (J’ai dit non) Nous verrons le jeton dont nous avons besoin, sinon, il faudra trouver un moyen de l’obtenir, Dans mon cas, en installant l’application Xiaomi Home sur mon téléphone mobile Android, avec un explorateur de fichiers sur mobile, nous irons au chemin '/SmartHome/logs/Plug_Devicemanager/’ et effectuer une recherche dans des fichiers texte brut formatés AAAA-MM-DD.txt notre jeton, Affichez facilement le fichier le plus récent que vous verrez.
Et enfin, nous pourrons utiliser l’application sans aucun problème pour, par exemple, voir son état, Consommables, L’histoire… Nous pourrions même le contrôler et l’envoyer se faire nettoyer….
[Code source]exporter MIROBO_IP=DIRECCION_IP_DE_LA_ASPIRADORA
exporter MIROBO_TOKEN=TOKEN_DE_AUTH_DE_LA_ASPIRADORA
Miro
État: Charge
Pile: 100 %
Vitesse du ventilateur: 60 %
Nettoyage depuis: 0:33:27
Zone nettoyée: 35.48 m²
Consommables Mirobo
Brosse principale: 22:26:19 (Gauche 11 Jours, 13:33:41)
Brosse latérale: 22:26:19 (Gauche 7 Jours, 9:33:41)
Filtre: 22:26:19 (Gauche 5 Jours, 7:33:41)
Capteur sale: 22:26:19 (Gauche 7:33:41)
Nettoyage Mirobo - Histoire
Nombre total de clean: 301
Nettoyé pour: 10 Jours, 18:31:57 (Aire: 13288.1575 m²)
Propre #0: 2019-06-27 17:42:06-2019-06-27 18:15:33 (Complet: Vrai, erreur: Aucune erreur)
Zone nettoyée: 35.48 m²
Durée: (0:33:27)
Propre #1: 2019-06-21 21:16:55-2019-06-21 21:59:12 (Complet: Vrai, erreur: Aucune erreur)
…[/Code source]
Si vous voulez exporter cela vers une base de données MySQL, je vous laisse le script txurro que j’ai fait, Juste au cas où vous vous en soucieriez. Ce texte chekea_aspiradora_consumibles.sh’ S’exécute à l’aide de cron tous les 5 compte-rendu, et stocke dans une table de base de données les données qui nous intéresseront et les traite ensuite avec Grafana, quel est l’état de l’aspirateur Xiaomi, État de la batterie, Nettoyages, route… :
[Code source]#! /bin/bash
cd /accueil/pi/mirobo
source bin/activate
exporter MIROBO_IP=DIRECCION_IP_DE_LA_ASPIRADORA
exporter MIROBO_TOKEN=TOKEN_DE_AUTH_DE_LA_ASPIRADORA
Miro > mirobo_general.txt
state='chat mirobo_general.txt |État grep | aw '{imprimer $2}’`
state='$estado’
battery='cat mirobo_general.txt |Batterie grep | aw '{imprimer $2}’`
speed='cat mirobo_general.txt |grep Fanspeed | aw '{imprimer $2}’`
Nettoyage Mirobo - Histoire > mirobo_historial.txt
nettoyage='chat mirobo_historial.txt |grep 'Nombre total de nettoyages’ | aw '{imprimer $4}’`
route='chat mirobo_historial.txt |grep 'Nettoyé pour’ | aw '{imprimer $7}’`
dias='chat mirobo_historial.txt |grep 'Nettoyé pour’ | aw '{imprimer $3}’`
Jours='echo $((jours*24*60*60))`
hours='chat mirobo_historial.txt |grep 'Nettoyé pour’ | aw '{Imprimer substr($5,1,2)}’`
hours='echo $((heures*60*60))`
minutes='chat mirobo_historial.txt |grep 'Nettoyé pour’ | aw '{Imprimer substr($5,4,2)}’`
minutes='echo $((minutes*60))`
seconds='chat mirobo_historial.txt |grep 'Nettoyé pour’ | aw '{Imprimer substr($5,7,2)}’`
total_tiempo=$((jours+heures+minutes+secondes))
hora_desde='chat mirobo_historial.txt |grep 'propre #0’ | aw '{Imprimer substr($4,1,8)}’`
hora_hasta='chat mirobo_historial.txt |grep 'propre #0’ | aw '{Imprimer substr($5,1,8)}’`
hora_desde='date -d $hora_de___+ %s'
hora_hasta='date -d $hora_jusqu’à + %s'
tiempo_limpieza='écho $(( hora_hasta-hora_desde ))`
metros_limpieza='chat mirobo_historial.txt |grep 'Zone nettoyée’ | aw '{imprimer $3; sortie}’`
ultima_limpieza='chat mirobo_historial.txt |grep 'propre #0’ | aw '{imprimer $3, Sous-strat($4,1,8)}’`
ultima_limpieza='$ultima_nettoyage’
consommables mirobo -d &> mirobo_consumibles.txt
##### FILTRO
linea='chat mirobo_consumibles.txt |grep filter_work_time
filtro_ini='chat mirobo_consumibles.txt |grep filter_work_time | grep -b -o filter_work_time'
filtro_ini='echo $filtro_ini | coupe -d ':’ -f1'
filtro='echo ${Linea:$filtro_ini+19:15}| tr -dc ‘0-9’`
filtro_restante=$((540000-$Filtro))
### ESCOBILLA LATÉRAL
linea='chat mirobo_consumibles.txt |grep side_brush_work_time'
escobilla_lat_ini='chat mirobo_consumibles.txt |grep side_brush_work_time | grep -b -o side_brush_work_time'
escobilla_lat_ini='echo $escobilla_lat_ini | coupe -d ':’ -f1'
escobilla_lat='écho ${Linea:$escobilla_lat_ini+23:15}| tr -dc ‘0-9’`
escobilla_lat_restante=$((720000-$escobilla_lat))
### CAPTEUR
linea='chat mirobo_consumibles.txt |grep sensor_dirty_time'
sensor_ini='chat mirobo_consumibles.txt |grep sensor_dirty_time | grep -b -o sensor_dirty_time'
sensor_ini='echo $sensor_ini | coupe -d ':’ -f1'
sensor='echo ${Linea:$sensor_ini+19:15}| tr -dc ‘0-9’`
sensor_restante=$((108000-$capteur))
### ESCOBILLA PRINCIPAL
linea='chat mirobo_consumibles.txt |grep main_brush_work_time'
escobilla_pri_ini='chat mirobo_consumibles.txt |grep main_brush_work_time | grep -b -o main_brush_work_time'
escobilla_pri_ini='echo $escobilla_pri_ini | coupe -d ':’ -f1'
escobilla_pri='écho ${Linea:$escobilla_pri_ini+23:15}| tr -dc ‘0-9’`
escobilla_pri_restante=$((1080000-$escobilla_pri))
echo "INSERT INTO aspirateur (état,Bateria,vitesse,Nettoyages,route,total_tiempo,tiempo_limpieza,metros_limpieza,ultima_limpieza,Filtro,filtro_restante,escobilla_lat,escobilla_lat_restante,capteur,sensor_restante,escobilla_pri,escobilla_pri_restante) VALEURS ($état,$Bateria,$vitesse,$Nettoyages,$route,$total_tiempo,$tiempo_limpieza,$metros_limpieza,$ultima_limpieza,$Filtro,$filtro_restante,$escobilla_lat,$escobilla_lat_restante,$capteur,$sensor_restante,$escobilla_pri,$escobilla_pri_restante);" | mysql -uUSERNAME -pPASSWORD -h IP_SERVIDOR_MYSQL BASE_DE_DATOS;[/Code source]
Voici un exemple de code que vous pouvez utiliser dans MySQL pour créer cette table appelée 'aspirateur'’ avec 18 champs où nous allons stocker tout ce que le script précédent a craché. Nous pourrons alors stocker toutes ces informations intéressantes et les exploiter plus tard avec Grafana!
[Code source]CRÉER UNE TABLE 'ASPIRATEUR' (
CHAR 'status'(20) NULL VALEUR PAR DÉFAUT NULL,
'battery' FLOAT NULL DEFAULT NULL,
'speed' FLOAT NULL VALEUR PAR DÉFAUT NULL,
'cleanups' FLOAT NULL DEFAULT NULL,
'path' FLOAT NULL DEFAULT NULL,
'total_tiempo' FLOAT NULL VALEUR PAR DÉFAUT NULL,
'tiempo_limpieza' FLOAT NULL VALEUR NULLE PAR DÉFAUT,
'metros_limpieza' FLOAT NULL VALEUR PAR DÉFAUT NULL,
'ultima_limpieza' DATETIME NULL VALEUR PAR DÉFAUT NULL,
'filter' FLOAT NULL PAR DÉFAUT NULL,
'filtro_restante' FLOAT NULL VALEUR NULLE PAR DÉFAUT,
'escobilla_lat' FLOAT NULL VALEUR PAR DÉFAUT NULL,
'escobilla_lat_restante' FLOAT NULL VALEUR PAR DÉFAUT NULL,
'sensor' FLOAT NULL DEFAULT NULL,
'sensor_restante' FLOAT NULL VALEUR PAR DÉFAUT NULL,
'escobilla_pri' FLOAT NULL VALEUR NULLE PAR DÉFAUT,
'escobilla_pri_restante' FLOAT NULL VALEUR NULLE PAR DÉFAUT,
'date' horodatage non null CURRENT_TIMESTAMP PAR DÉFAUT LORS DE LA MISE À JOUR CURRENT_TIMESTAMP
)
COLLATE='utf8mb4_general_ci’
MOTEUR=InnoDB;[/Code source]
Et rien, comme d'habitude, déjà avec des données dans la base de données, nous pouvons créer une DataSource sur cette base de données MySQL dans Grafana et commencer par créer notre tableau de bord auquel nous ajouterons quelques panneaux, Je vous laisse avec ces exemples et les requêtes que j’ai utilisées pour obtenir ces données:
- Brosse principale:
[Code source]SÉLECTIONNER escobilla_pri_restante DE L’ASPIRATEUR COMMANDER PAR DATE hors limite 1[/Code source]
- Brosse latérale:
[Code source]SÉLECTIONNER escobilla_lat_restante DE L’ASPIRATEUR COMMANDER PAR DATE hors limite 1[/Code source]
- Filtre:
[Code source]SÉLECTIONNER filtro_restante DE L’ASPIRATEUR COMMANDER PAR DATE hors limite 1[/Code source]
- Capteurs propres:
[Code source]SÉLECTIONNER sensor_restante DE L’ASPIRATEUR COMMANDER PAR DATE hors LIMITE 1[/Code source]
- Dernier nettoyage:
[Code source]Horodatage SELECT(DATE_FORMAT(ultima_limpieza, '%Y/%m/%d %H:%Je:%s’)) comme time_sec DE L’ASPIRATEUR COMMANDER par date DESC LIMITE 1[/Code source]
- Nettoyage (En fonction de l’heure sélectionnée, il vous indiquera combien de temps vous avez passé l’aspirateur), Je le multiplie x 5 puisque dans mon chron je l’exécute tous les 5 compte-rendu:
[Code source]CHOISIR (COMPTER(*) * 5) FROM aspirateur WHERE status='Nettoyage'’ et __timeFilter $(date)[/Code source]
- Nettoyages totaux:
[Code source]SELECT nettoyages DE l’aspirateur COMMANDER PAR DATE hors LIMITE 1[/Code source]
- Distance totale parcourue:
[Code source]SÉLECTIONNER L’ITINÉRAIRE DE aspirateur COMMANDER PAR DATE DESC LIMITE 1[/Code source]
- Nettoyage total:
[Code source]SÉLECTIONNER total_tiempo DE L’ASPIRATEUR COMMANDER PAR DATE HORS LIMITE 1[/Code source]
- Et le graphique montre 2 bourrer, (Je) les mètres carrés nettoyés et (Ii) le temps passé, grâce à ces 2 Différentes sélections:
[Code source]SÉLECTIONNEZ UNIX_TIMESTAMP(ultima_limpieza) Alors time_sec, metros_limpieza comme valeur, "Mètres" comme métrique DE l’aspirateur OÙ $__timeFilter(ultima_limpieza) COMMANDE PAR ultima_limpieza, time_sec ASC[/Code source]
[Code source]SÉLECTIONNEZ UNIX_TIMESTAMP(ultima_limpieza) Alors time_sec, tiempo_limpieza comme valeur, « Le temps" comme métrique DE l’aspirateur OÙ $__timeFilter(ultima_limpieza) COMMANDE PAR ultima_limpieza, time_sec ASC[/Code source]
Puits, J’espère que vous le trouverez intéressant, Un autre maladroit plus contrôlé et pressé! Comme nous le voyons, avec Grafana et la combinaison de plusieurs produits, nous pouvons rendre notre maison plus intelligente, où nous avons des panneaux de contrôle, L’habituel, J’espère que vous l’avez trouvé intéressant!