Überwachung unseres Bosch Indego Rasenmähers mit Grafana

Druckfreundlich, PDF & Email

Kommen, Weiter geht es mit einem etwas geekigen Beitrag, Aber wenn Sie einen Garten haben, könnten Sie interessiert sein… Die Sache ist die, ich habe einen dieser Roboter, die zu Hause den Rasen mähen, speziell ein Bosch Indego 350, und durch eine API, die uns der Hersteller zur Verfügung stellt, können wir jederzeit den Status des Rasenmähers kennen, sowie Zugang zu einigen interessanten Werten zu haben; Übrigens:, mit dieser API werden wir auch in der Lage sein, es zu steuern, Am Ende des Beitrags werden wir sehen, wie man das Wetter überprüfen kann und ob es nicht regnet, Nun, wir haben es zum Schneiden 😉 geschickt

 

Nicht schlecht, utilizaremos esta genial aplicación Controller application and API for Bosch Indego Connect, lo primero será instalar los requisitos, Maven, nos descargamos la última build, la compilamos y la instalamos. Veremos que nos genera un binario totalmente funcional para nuestra distribución, en este caso creo recordar que estoy usando una Raspbian Stretch, os dejo los pasos para tenerlo listo:

[Quellcode]sudo apt-get install maven
wget https://github.com/zazaz-de/iot-device-bosch-indego-controller/archive/bosch-indego-controller-0.8.zip
unzip bosch-indego-controller-0.8.zip
cd iot-device-bosch-indego-controller-bosch-indego-controller-0.8/
mvn compile
mvn package
mvn install
cd bosch-indego-controller-dist/target
unzip bosch-indego-controller-dist-0.8-bin.zip
cd bosch-indego-controller-dist-0.8/bin/
./IndegoController[/Quellcode]

 

Vamos al directorio donde nos dejó el binario, Und wir haben versucht, es umzusetzen, le enviaremos como parámetros con -u nuestro usuario con el que hayamos registrado el cortacesped Indego y -p la contraseña de la cuenta, con -q podemos hacer un query y ver los datos de nuestro aparato, veremos consumos, tiempos, completadocon -c podremos enviarle comandos, como por ejemplo MOW para que salga a dar el paseo y corte la hierba.

[Quellcode]cd ~/iot-device-bosch-indego-controller-bosch-indego-controller-0.8/bosch-indego-controller-dist/target/bosch-indego-controller-dist-0.8/bin
./IndegoController -u

US*****@MA**.ESO











-p CONTRASEÑA -q
./IndegoController -u

US*****@MA**.ESO











-p CONTRASEÑA -c MOW -q[/Quellcode]

 

Si tenemos problemas a la hora de ejecutarlo por temas de certificados, deberemos importar los certificados de Bosch Indego al keystore de Java. Bajamos los 3 certificados de la cadena de las CA de https://https://api.indego.iot.bosch-si.com mismamente con un Internet Explorer, los guardamos con formato DER X.509.

Y los importamos en el keystore de Java, nos pedirá password, la contraseña por defecto del keystore cacerts es changeit:

[Quellcode]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[/Quellcode]

 

Y nada probamos de nuevo el script y veremos cómo obtenemos nuestros datos! Si queremos explotarlos, os dejo un ejemplo de un script cutrecillo lque tengo llamado ‘cortacesped_estado.sh’, bien este script lo que hará es buscar ciertas palabras en ese output anterior y guardará los valores obtenidos en una base de datos con MySQL, que luego podremos atacar fácilmente desde Grafana y obtener algún dashboard muy cuco.

[Quellcode]#!/Mülleimer/Bash
/home/pi/indego/bin/IndegoController -u

US*****@MA**.ESO











-p CONTRASEÑA -q > /home/pi/indego/estado.txt
completado=`cat /home/pi/indego/estado.txt | grep Completed| Aww '{drucken $2}’`
completado=`echo "${completado//\,/.}"`
session_operate=`cat /home/pi/indego/estado.txt | grep ‘Runtime session / operate:’| Aww '{drucken $5}’`
session_operate=`echo "${session_operate//\,/.}"`
session_charge=`cat /home/pi/indego/estado.txt | grep ‘Runtime session / charge’| Aww '{drucken $5}’`
session_charge=`echo "${session_charge//\,/.}"`
total_operate=`cat /home/pi/indego/estado.txt | grep ‘Runtime total / operate’| Aww '{drucken $5}’`
total_operate=`echo "${total_operate//\,/.}"`
total_charge=`cat /home/pi/indego/estado.txt | grep ‘Runtime total / charge’| Aww '{drucken $5}’`
total_charge=`echo "${total_charge//\,/.}"`
estado=`cat /home/pi/indego/estado.txt | grep ‘DeviceStatus’| Aww '{drucken $4}’ |sed -e ‘s#.*=\(\)#\1#’ | auf Touren bringen | cut -c 2- | rev`
estado="’$estado’"
echo "INSERT INTO cortacesped (completado, session_operate, session_charge, total_operate, total_charge, Zustand) WERTE ($completado,$session_operate,$session_charge,$total_operate,$total_charge,$Zustand);" | mysql -uUSUARIO -pCONTRASEÑA -h SERVIDOR_MYSQL NOMBRE_BD;
[/Quellcode]

 

No debemos olvidar crear en cron la programación que nos interese para que se ejecute el script, en mi caso se ejecuta cada 5 minutos para recolectar información.

 

Pero claro, antes debemos crear la tabla en alguna base de datos de nuestro servidor MySQL, como veis es muy sencillica, Hat 7 campos que almacenarán los datos que le mande, os dejo el código de MySQL por si queréis ver el tipo de columnas:

[Quellcode]CREATE TABLE `cortacesped` (
`completado` FLOAT NULL DEFAULT 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' ZEICHEN(20) NULL DEFAULT NULL,
'date' TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP BEI UPDATE CURRENT_TIMESTAMP
)
COLLATE='utf8mb4_general_ci’
ENGINE=InnoDB
ROW_FORMAT=KOMPAKT;[/Quellcode]

Und das ist es! Con la BD alimentándose, ya podremos configurar un dashboard con los paneles que nos interese, Ich verabschiede mich mit diesem Beispiel, os paso las querys que utilicé. Ah y por cierto, si no tienes el DataSource en Grafana creado contra el servidor MySQL, acuérdate de hacerlo antes 😉

  • Último segado:

[Quellcode]SELECT-Zeitstempel(DATE_FORMAT(Datum, '%Y/%m/%d %H:%Ich:%s’)) as time_sec FROM cortacesped where estado = ‘MowingORDER BY fecha DESC LIMIT 1[/Quellcode]

  • Jardín segado:

[Quellcode]SELECT completado FROM cortacesped ORDER BY fecha DESC LIMIT 1[/Quellcode]

  • Query para la gráfica de los últimos 15 Tage, donde vemos el % avanzado a lo largo del tiempo:

[Quellcode]WÄHLEN SIE UNIX_TIMESTAMP(Datum) Also time_sec, completado as value, "Zeit" as metric FROM cortacesped WHERE $__timeFilter(Datum) and estado = ‘MowingORDER BY fecha, time_sec ASC[/Quellcode]

  • Segados totales:

[Quellcode]ANZAHL AUSWÄHLEN(*) FROM cortacesped where estado = ‘Mowingand completado = 0[/Quellcode]

  • Total cortando:

[Quellcode]SELECT total_operate FROM cortacesped ORDER BY fecha DESC LIMIT 1[/Quellcode]

 

Und wenn wir schon dabei sind,, si os interesa, este es un script txorra que utilizo para programar que salga el robot a cortar el césped, primeramente en cron le tengo que se ejecute los Lunes, Miercoles y Viernes a las 8:30BIN, y lo que hace primero es checkear el tiempo, mira el tiempo actual y el que hará a lo largo del día, si va a hacer malo (lluvia, nieve, granizo…) pues no saldrá a segar, le llamo enciende_cortacesped.sh:

[Quellcode]#!/Mülleimer/Bash
curl wttr.in/Bilbao?1 > /tmp/eltiempo.txt
if grep ‘rain\|drizzle\|snow\|sleet\|freez\thunder’ /tmp/eltiempo.txt > /dev/null
then
echo "Hará o hace malo"
oder
echo "Hará o hace bueno"
/home/pi/indego/bin/IndegoController -u

US*****@MA**.ESO











-p CONTRASEÑA -c MOW
Fi[/Quellcode]

 

Ich hoffe, Sie fanden es interessant, se pueden hacer muchas cosas más que iremos viendo con el tiempo, así que lo dicho, espero que os haya gustado!

 

Empfohlene Beiträge

Verfasser

nheobug@bujarra.com
Autor del blog Bujarra.com Cualquier necesidad que tengas, Zögern Sie nicht, mich zu kontaktieren, Ich werde versuchen, dir zu helfen, wann immer ich kann, Teilen ist Leben ;) . Genießen Sie Dokumente!!!