
Surveillance de notre tondeuse à gazon Bosch Indego avec Grafana
Venir, On continue avec un post un peu geek, Mais si vous avez un jardin, vous pourriez être intéressé… Le truc, c’est que j’ai un de ces robots qui tondent la pelouse à la maison, plus précisément un Bosch Indego 350, et grâce à une API qui nous est donnée par le fabricant, nous serons en mesure de connaître l’état de la tondeuse à gazon à tout moment, ainsi que d’avoir accès à des valeurs intéressantes; Et d’ailleurs, avec cette API, nous pourrons également le contrôler, À la fin de l’article, nous verrons comment vérifier la météo et s’il ne pleut pas, Eh bien, nous l’avons envoyé pour qu’il soit coupé 😉
Pas mal, Nous utiliserons cette application cool Application de contrôleur et API pour Bosch Indego Connect, La première chose à faire sera d’installer les exigences, Maven, Nous téléchargeons la dernière version, Nous le compilons et l’installons. Nous verrons qu’il génère un binaire entièrement fonctionnel pour notre distribution, dans ce cas, il me semble me rappeler que j’utilise un Raspbian Stretch, Je vous laisse les étapes pour qu’il soit prêt:
[Code source]sudo apt-get install maven
wget https://github.com/zazaz-de/iot-device-bosch-indego-controller/archive/bosch-indego-controller-0.8.fermeture éclair
Décompresser bosch-indego-controller-0.8.fermeture éclair
cd IoT-device-bosch-indego-controller-bosch-indego-controller-0.8/
Compilation MVN
Package MVN
Installation MVN
cd bosch-indego-controller-dist/target
Décompresser bosch-indego-controller-dist-0.8-bin.zip
cd bosch-indego-controller-dist-0.8/Poubelle/
./IndegoController[/Code source]
Allons dans le répertoire où le binaire nous a laissé, Et nous avons essayé de l’exécuter, Nous vous enverrons en paramètres avec -u notre nom d’utilisateur avec lequel nous avons enregistré la tondeuse à gazon Indego et -p le mot de passe du compte, Avec -Q, nous pouvons faire une requête et voir les données de notre appareil, Nous verrons la consommation, Fois, terminé… Avec -C, nous pouvons envoyer des commandes, comme MOW pour que vous puissiez vous promener et couper l’herbe.
[Code source]cd ~/iot-device-bosch-indego-controller-bosch-indego-controller-0.8/bosch-indego-controller-dist/target/bosch-indego-controller-dist-0.8/poubelle
./IndegoController -u NOUS*****@MA**. EtSOUS -p MOT DE PASSE -Q
./IndegoController -u NOUS*****@MA**. EtSOUS -p MOT DE PASSE -C TONDEUSE -Q[/Code source]
Si nous rencontrons des problèmes lors de son exécution en raison de problèmes de certificat, nous devrons importer les certificats Bosch Indego dans le magasin de clés Java. Nous abaissons le 3 Certificats de chaîne CA https://https://api.indego.iot.bosch-si.com même avec un Internet Explorer, nous les enregistrons au format DER X.509.
Et nous les importons dans le magasin de clés Java, Il nous demandera le mot de passe, Le mot de passe par défaut pour Keystore Cacerts est ChangeIt:
[Code source]keytool -import -alias INDEGO_CER -keystore $JAVA_HOME/jre/lib/security/cacerts -file /home/pi/indego.cer
keytool -import -alias INDEGO_CA1 -keystore $JAVA_HOME/jre/lib/security/cacerts -file /home/pi/indegoCA1.cer
keytool -import -alias INDEGO_CA2 -keystore $JAVA_HOME/jre/lib/security/cacerts -file /home/pi/indegoCA2.cer[/Code source]
Et nous ne testons pas à nouveau le script et nous verrons comment nous obtenons nos données! Si nous voulons les exploiter, Je vous laisse un exemple d’un scénario merdique que j’ai appelé 'cortacesped_estado.sh', Eh bien, ce que ce script va faire, c’est rechercher certains mots dans cette sortie précédente et enregistrer les valeurs obtenues dans une base de données avec MySQL, que nous pouvons ensuite facilement attaquer depuis Grafana et obtenir un tableau de bord très mignon.
[Code source]#!/bin/bash
/accueil/pi/indego/bin/IndegoController -u NOUS*****@MA**. EtSOUS -p MOT DE PASSE -Q > /Accueil/PI/Indego/estado.txt
completed='chat /maison/pi/indego/estado.txt | GREP terminé| aw '{imprimer $2}’`
completed='echo"${terminé///.}"`
session_operate='chat /maison/pi/indego/estado.txt | grep 'Session d’exécution / opérer:’| aw '{imprimer $5}’`
session_operate='echo "${session_operate//,/.}"`
session_charge='chat /maison/pi/indego/estado.txt | grep 'Session d’exécution / accusation'| aw '{imprimer $5}’`
session_charge='echo "${session_charge//,/.}"`
total_operate='chat /maison/pi/indego/estado.txt | grep' Durée totale d’exécution / exploiter'| aw '{imprimer $5}’`
total_operate='echo "${total_operate//,/.}"`
total_charge='chat /maison/pi/indego/estado.txt | grep' Durée totale d’exécution / accusation'| aw '{imprimer $5}’`
total_charge='echo "${total_charge//,/.}"`
state='chat /maison/pi/indego/estado.txt | grep 'DeviceStatus'| aw '{imprimer $4}’ |sed -e 's#.*=(\)#\1#’ | Rev | COUPE-C 2- | rev'
state="'$estado'"
echo "INSÉRER DANS LA TONDEUSE À GAZON (terminé, session_operate, session_charge, total_operate, total_charge, état) VALEURS ($terminé,$session_operate,$session_charge,$total_operate,$total_charge,$état);" | mysql -uUSERNAME -pPASSWORD -h SERVIDOR_MYSQL NOMBRE_BD;
[/Code source]
Il ne faut pas oublier de créer en cron la programmation qui nous intéresse pour que le script soit exécuté, Dans mon cas, chaque 5 minutes de collecte des informations.
Mais bien sûr, d’abord, nous devons créer la table dans une base de données de notre serveur MySQL, Comme vous pouvez le voir, c’est très simple, A 7 champs qui stockeront les données que vous envoyez, Je vous laisse le code MySQL au cas où vous voudriez voir le type de colonnes:
[Code source]CRÉER UNE TABLE 'TONDEUSE À GAZON' (
'completed' FLOAT NULL DEFAULT NULL,
'session_operate' FLOAT NULL VALEUR NULLE PAR DÉFAUT,
'session_charge' FLOAT NULL VALEUR PAR DÉFAUT NULL,
'total_operate' FLOAT NULL VALEUR NULLE PAR DÉFAUT,
'total_charge' FLOAT NULL VALEUR PAR DÉFAUT NULL,
CHAR 'status'(20) NULL VALEUR PAR DÉFAUT NULL,
'date' horodatage non null CURRENT_TIMESTAMP PAR DÉFAUT LORS DE LA MISE À JOUR CURRENT_TIMESTAMP
)
COLLATE='utf8mb4_general_ci’
MOTEUR=InnoDB
ROW_FORMAT=COMPACT;[/Code source]
Et c’est tout! Avec l’alimentation BD, Nous pourrons configurer un tableau de bord avec les panneaux qui nous intéressent, Je vous laisse avec cet exemple, Je vais vous donner les requêtes que j’ai utilisées. Oh et au fait, si vous n’avez pas la DataSource dans Grafana créée sur le serveur MySQL, N’oubliez pas de le faire avant 😉
- Dernière tonte:
[Code source]Horodatage SELECT(DATE_FORMAT(date, '%Y/%m/%d %H:%Je:%s’)) comme time_sec DE la tondeuse où status = 'Tonte’ ORDRE PAR DATE DATE DESC LIMITE 1[/Code source]
- Tondre le jardin:
[Code source]SELECT complété À PARTIR DE TONDEUSE À GAZON COMMANDER par date HORS LIMITE 1[/Code source]
- Rechercher le dernier graphique 15 Jours, où nous voyons le % Avancé dans le temps:
[Code source]SÉLECTIONNEZ UNIX_TIMESTAMP(date) Alors time_sec, complété en tant que valeur, « Le temps" comme métrique FROM cortacésped OÙ $__timeFilter(date) et status = 'Tonte’ TRIER PAR DATE, time_sec ASC[/Code source]
- Tonte totale:
[Code source]SÉLECTIONNEZ COMPTER(*) FROM tondeuse où state='Tonte’ et terminé = 0[/Code source]
- Coupe totale:
[Code source]SÉLECTIONNER total_operate DE LA TONDEUSE À GAZON COMMANDER PAR DATE D’EXÉCUTION 1[/Code source]
Et pendant que nous y sommes,, Si vous êtes intéressé, Il s’agit d’un script txorra que j’utilise pour programmer le robot pour qu’il aille tondre la pelouse, d’abord en cron, je dois l’exécuter le lundi, Mercredi et vendredi à 8:30SUIS, Et ce qu’il fait en premier, c’est vérifier l’heure, Regardez la météo actuelle et ce qu’elle fera tout au long de la journée, Si vous allez mal faire (pluie, neige, grêle…) car il ne sortira pas pour moissonner, Je l’appelle enciende_cortacesped.sh:
[Code source]#!/bin/bash
boucles wttr.in/Bilbao?1 > /TMP/eltiempo.txt
if grep 'pluie|bruine|snow\|sleet\|FreezThunder’ /TMP/eltiempo.txt > /dev/null
alors
echo "Fera ou fait du mal"
autre
echo "Fera ou fait du bien"
/accueil/pi/indego/bin/IndegoController -u NOUS*****@MA**. EtSOUS -p MOT DE PASSE -C TONDRE
Fi[/Code source]
J’espère que vous l’avez trouvé intéressant, Beaucoup plus de choses peuvent être faites que nous verrons avec le temps, Alors ce que j’ai dit, J’espère que vous l’avez aimé!