
Monitoraggio del nostro tosaerba Bosch Indego con Grafana
Venire, Continuiamo con un post un po' geek, ma se hai un giardino potrebbe interessarti… Il fatto è che ho uno di quei robot che falciano il prato di casa, in particolare un Bosch Indego 350, e attraverso un'API fornitaci dal produttore saremo in grado di conoscere in ogni momento lo stato del rasaerba, oltre ad avere accesso ad alcuni valori interessanti; E a proposito, con questa API saremo anche in grado di controllarlo, Alla fine del post vedremo come controllare il meteo e se non piove, Beh, l'abbiamo mandato a tagliarlo 😉
Non male, Useremo questa fantastica app Applicazione controller e API per Bosch Indego Connect, La prima cosa sarà installare i requisiti, Intenditore, Scarichiamo l'ultima build, Lo compiliamo e lo installiamo. Vedremo che genera un binario completamente funzionante per la nostra distribuzione, in questo caso mi sembra di ricordare che sto usando un Raspbian Stretch, Vi lascio i passaggi per averlo pronto:
[Codice sorgente]sudo apt-get install maven
wget https://github.com/zazaz-de/iot-device-bosch-indego-controller/archive/bosch-indego-controller-0.8.zip
Decomprimere il controller bosch-indego-0.8.zip
cd iot-device-bosch-indego-controller-bosch-indego-controller-0.8/
Compilazione MVN
Pacchetto MVN
Installazione MVN
cd bosch-indego-controller-dist/target
Decomprimere bosch-indego-controller-dist-0.8-bin.zip
cd bosch-indego-controller-dist-0.8/Bidone/
./IndegoController[/Codice sorgente]
Andiamo nella directory dove il binario ci ha lasciato, e abbiamo cercato di eseguirlo, Ti invieremo come parametri con -u il nostro nome utente con cui abbiamo registrato il rasaerba Indego e -p la password dell'account, Con -Q possiamo fare una query e vedere i dati del nostro dispositivo, Vedremo i consumi, Tempi, finito… Con -C possiamo inviare comandi, come MOW per farti fare una passeggiata e tagliare l'erba.
[Codice sorgente]cd ~/iot-device-bosch-indego-controller-bosch-indego-controller-0.8/bosch-indego-controller-dist/target/bosch-indego-controller-dist-0.8/bidone
./IndegoController -u NOI*****@MA**. ESOTTO -p PASSWORD -q
./IndegoController -u NOI*****@MA**. ESOTTO -p PASSWORD -c MOW -q[/Codice sorgente]
Se abbiamo problemi durante l'esecuzione a causa di problemi con il certificato, dovremo importare i certificati Bosch Indego nel keystore Java. Abbassiamo il 3 Certificati della catena CA https://https://api.indego.iot.bosch-si.com anche con un Internet Explorer, li salviamo in formato DER X.509.
E li importiamo nel keystore Java, Ci chiederà la password, La password predefinita per i Cacert dell'archivio chiavi è ChangeIt:
[Codice sorgente]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[/Codice sorgente]
E non testiamo di nuovo lo script e vedremo come otteniamo i nostri dati! Se vogliamo sfruttarli, Vi lascio un esempio di uno script schifoso che ho chiamato 'cortacesped_estado.sh', Bene, quello che farà questo script è cercare determinate parole in quell'output precedente e salvare i valori ottenuti in un database con MySQL, che possiamo quindi facilmente attaccare da Grafana e ottenere una dashboard molto carina.
[Codice sorgente]#!/bin/bash
/casa/pi/indego/bin/IndegoController -u NOI*****@MA**. ESOTTO -p PASSWORD -q > /Home/PI/Indego/estado.txt
completed='cat /home/pi/indego/estado.txt | grep completato| aw '{Stampare $2}’`
completado='echo "${completado//,/.}"`
session_operate='gatto /casa/pi/indego/estado.txt | grep 'Sessione di runtime / operare:’| aw '{Stampare $5}’`
session_operate='echo "${session_operate//,/.}"`
session_charge='gatto /casa/pi/indego/estado.txt | grep 'Sessione di runtime / Carica»| aw '{Stampare $5}’`
session_charge='echo "${session_charge//,/.}"`
total_operate='gatto /casa/pi/indego/estado.txt | grep 'Totale tempo di esecuzione / operare»| aw '{Stampare $5}’`
total_operate='echo "${total_operate//,/.}"`
total_charge='gatto /casa/pi/indego/estado.txt | grep 'Totale tempo di esecuzione / Carica»| aw '{Stampare $5}’`
total_charge='echo "${total_charge//,/.}"`
estado='gatto /casa/pi/indego/estado.txt | grep 'Stato del dispositivo'| aw '{Stampare $4}’ |sed -e 's#.*=(\)#\1#’ | Rev | cut -c 2- | rev`
estado="’$estado’"
echo "INSERT INTO cortacesped (finito, session_operate, session_charge, total_operate, total_charge, stato) VALORI ($finito,$session_operate,$session_charge,$total_operate,$total_charge,$stato);" | mysql -uUSUARIO -pCONTRASEÑA -h SERVIDOR_MYSQL NOMBRE_BD;
[/Codice sorgente]
Non dobbiamo dimenticare di creare in cron la programmazione che ci interessa in modo che lo script venga eseguito, nel mio caso ogni 5 minuti per raccogliere informazioni.
Ma ovviamente, per prima cosa dobbiamo creare la tabella in qualche database del nostro server MySQL, Come puoi vedere, è molto semplice, Ha 7 Campi che memorizzeranno i dati inviati, Vi lascio il codice MySQL nel caso vogliate vedere il tipo di colonne:
[Codice sorgente]CREA TAVOLO 'tosaerba' (
'completato' FLOAT NULL PREDEFINITO NULL,
'session_operate' FLOAT NULL DEFAULT NULL,
'session_charge' FLOAT NULL DEFAULT NULL,
'total_operate' FLOAT NULL DEFAULT NULL,
'total_charge' FLOAT NULL DEFAULT NULL,
'status' CHAR(20) NULL DEFAULT NULL,
'date' TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)
COLLATE='utf8mb4_general_ci’
ENGINE=InnoDB
ROW_FORMAT=COMPATTO;[/Codice sorgente]
E questo è tutto! Con l'alimentazione BD, Potremo configurare una dashboard con i pannelli che ci interessano, Vi lascio con questo esempio, Ti darò le query che ho usato. Oh e a proposito, se non si dispone di DataSource in Grafana creato per il server MySQL, Ricordati di farlo prima 😉
- Ultimo taglio:
[Codice sorgente]SELEZIONA timestamp(DATE_FORMAT(dattero, '%Y/%m/%d %H:%io:%s’)) come time_sec FROM tosaerba dove status = 'Falciatura’ ORDINA PER DATA LIMITE DI SCONTO 1[/Codice sorgente]
- Falciare il giardino:
[Codice sorgente]SELEZIONA completato DA tosaerba ORDINA PER data OFF LIMIT 1[/Codice sorgente]
- Eseguire una query per il grafico più recente 15 Giorni, dove vediamo il % Avanzato nel tempo:
[Codice sorgente]SELEZIONA UNIX_TIMESTAMP(dattero) Quindi time_sec, completato come valore, "Tempo" come metrico FROM cortacésped WHERE $ __timeFilter(dattero) e stato = 'Falciatura’ ORDINA PER DATA, time_sec ASC[/Codice sorgente]
- Falciatura totale:
[Codice sorgente]SELEZIONA CONTEGGIO(*) FROM tosaerba dove state='Falciatura’ e completato = 0[/Codice sorgente]
- Taglio totale:
[Codice sorgente]SELEZIONA total_operate DA tosaerba ORDINA PER DATA LIMITE DI DEVENDITA 1[/Codice sorgente]
E già che ci siamo,, Se sei interessato, Questo è uno script txorra che uso per programmare il robot per uscire a falciare il prato, prima in cron devo eseguirlo il lunedì, Mercoledì e venerdì alle 8:30SONO, e quello che fa prima è controllare l'ora, Guarda il tempo attuale e cosa farà durante il giorno, Se hai intenzione di fare del male (pioggia, neve, grandine…) perché non uscirà a mietere, Lo chiamo enciende_cortacesped.sh:
[Codice sorgente]#!/bin/bash
arricciare wttr.in/Bilbao?1 > /TMP/eltiempo.txt
if grep 'pioggia|drizzle\|snow\|sleet\|freez\thunder’ /TMP/eltiempo.txt > /dev/null
allora
echo "Hará o hace malo"
altro
echo "Hará o hace bueno"
/casa/pi/indego/bin/IndegoController -u NOI*****@MA**. ESOTTO -p CONTRASEÑA -c MOW
Fi[/Codice sorgente]
Spero che tu l'abbia trovato interessante, se pueden hacer muchas cosas más que iremos viendo con el tiempo, así que lo dicho, espero que os haya gustado!