Überwachung des Zustands unserer Xiaomi Mi Staubsauger Roboter in Grafana

Wenn wir den wunderbaren und allmächtig Roboter-Staubsauger Xiaomi und Sie mögen, dass Ihre Daten in einem Armaturenbrett Grafana visualisieren, este es tu Post! Darin werden wir sehen, wie der Staubsauger anschließen, wie wir können Abfragen machen und alle Arten von interessanten Daten erhalten, und speichern Sie es dann in einer MySQL-Datenbank, die mit Grafana angreifen anzuzeigen und zu verarbeiten, diese Metriken.

 

wir begonnen, was am wichtigsten ist, wir eine große Bibliothek verwenden, die wir GitHub um das Vakuum zu steuern oder Informationen von Ihrem Zustand oder Verbrauchsmaterialien zu erhalten.

 

Wir beginnen wie immer mit den Anforderungen, Die erste und wichtigste ist Python haben 3.5, als Standard installiert, wenn Sie von einem Raspbian tun können Sie diese Schritte ausführen müssen, um installieren, und wählen Sie:

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.5 2

sudo update-alternatives --config python
python --version
python -m pip uninstall pip
pip install construct==2.9.31

 

installieren virtualenv, und wir verwenden dieses Verzeichnis als virtualenv Umgebung, bereits installiert mirobo Ende und einige Anforderungen, die auch brauchen:

sudo pip install virtualenv
mkdir mirobo
virtualenv -p /usr/bin/python3 mirobo
cd mirobo
source bin/activate
sudo apt-get install libffi-dev libssl-dev -y
pip install python-miio

 

vorrücken! und wir können laufen ‚mirobo entdecken’ unser Netzwerk Staubsauger suchen, wenn wir Glück (nicht) Wir sehen das Token wir brauchen, sonst werden wir Einfallsreichtum haben, es zu erhalten, in meinem Fall, die App installiert Xiaomi Startseite auf meinem Handy, um mit Android, mit einem Datei-Browser auf mobilen, iremos al-Pfad ‚/ Smarthome / logs / Plug_Devicemanager /’ und wir werden reine Textdateien mit YYYY-MM-DD.txt unserem Token-Format suchen, zeigt die neueste Datei es leicht zu sehen,.

 

Und schließlich können wir jetzt die Anwendung ohne Fehler zum Beispiel nachschauen ihres Status, Verbrauchsmaterial, Geschichte… könnten wir steuern es selbst und senden Sie es zu reinigen….

export MIROBO_IP=DIRECCION_IP_DE_LA_ASPIRADORA
export MIROBO_TOKEN=TOKEN_DE_AUTH_DE_LA_ASPIRADORA

mirobo
State: Charging
Battery: 100 %
Fanspeed: 60 %
Cleaning since: 0:33:27
Cleaned area: 35.48 m²

mirobo consumables
Main brush: 22:26:19 (left 11 days, 13:33:41)
Side brush: 22:26:19 (left 7 days, 9:33:41)
Filter: 22:26:19 (left 5 days, 7:33:41)
Sensor dirty: 22:26:19 (left 7:33:41)

mirobo cleaning-history
Total clean count: 301
Cleaned for: 10 days, 18:31:57 (area: 13288.1575 m²)

Clean #0: 2019-06-27 17:42:06-2019-06-27 18:15:33 (complete: True, error: No error)
Area cleaned: 35.48 m²
Duration: (0:33:27)

Clean #1: 2019-06-21 21:16:55-2019-06-21 21:59:12 (complete: True, error: No error)

...

 

Wenn Sie es zu einer MySQL-Datenbank exportieren möchten lasse ich das Skript Ich habe txurro, wenn das Tal. Dieses Skript ‚chekea_aspiradora_consumibles.sh’ cron wird von jeder ausgeführten 5 Minuten, und in einer Tabelle von Daten BD Interesse gespeichert wir dann mit Grafana behandelt, so ist der Zustand des Vakuums Xiaomi, Batteriestatus, cleanings, Reise… :

#! /bin/bash
cd /home/pi/mirobo
source bin/activate
export MIROBO_IP=DIRECCION_IP_DE_LA_ASPIRADORA
export MIROBO_TOKEN=TOKEN_DE_AUTH_DE_LA_ASPIRADORA

mirobo > mirobo_general.txt

estado=`cat mirobo_general.txt |grep State | awk '{print $2}'`
estado=\'$estado\'
bateria=`cat mirobo_general.txt |grep Battery | awk '{print $2}'`
velocidad=`cat mirobo_general.txt |grep Fanspeed | awk '{print $2}'`

mirobo cleaning-history > mirobo_historial.txt
limpiezas=`cat mirobo_historial.txt |grep 'Total clean count' | awk '{print $4}'`
recorrido=`cat mirobo_historial.txt |grep 'Cleaned for' | awk '{print $7}'`
dias=`cat mirobo_historial.txt |grep 'Cleaned for' | awk '{print $3}'`
dias=`echo $((dias*24*60*60))`
horas=`cat mirobo_historial.txt |grep 'Cleaned for' | awk '{print substr($5,1,2)}'`
horas=`echo $((horas*60*60))`
minutos=`cat mirobo_historial.txt |grep 'Cleaned for' | awk '{print substr($5,4,2)}'`
minutos=`echo $((minutos*60))`
segundos=`cat mirobo_historial.txt |grep 'Cleaned for' | awk '{print substr($5,7,2)}'`

total_tiempo=$((dias+horas+minutos+segundos))
hora_desde=`cat mirobo_historial.txt |grep 'Clean #0' | awk '{print substr($4,1,8)}'`
hora_hasta=`cat mirobo_historial.txt |grep 'Clean #0' | awk '{print substr($5,1,8)}'`
hora_desde=`date -d $hora_desde +%s`
hora_hasta=`date -d $hora_hasta +%s`
tiempo_limpieza=`echo $(( hora_hasta-hora_desde ))`

metros_limpieza=`cat mirobo_historial.txt |grep 'Area cleaned' | awk '{print $3; exit}'`
ultima_limpieza=`cat mirobo_historial.txt |grep 'Clean #0' | awk '{print $3, substr($4,1,8)}'`
ultima_limpieza=\'$ultima_limpieza\'

mirobo -d consumables &> mirobo_consumibles.txt

##### FILTRO
linea=`cat mirobo_consumibles.txt |grep filter_work_time`
filtro_ini=`cat mirobo_consumibles.txt |grep filter_work_time | grep -b -o filter_work_time`
filtro_ini=`echo $filtro_ini | cut -d ':' -f1`
filtro=`echo ${linea:$filtro_ini+19:15}| tr -dc '0-9'`
filtro_restante=$((540000-$filtro))

### ESCOBILLA LATERAL
linea=`cat mirobo_consumibles.txt |grep side_brush_work_time`
escobilla_lat_ini=`cat mirobo_consumibles.txt |grep side_brush_work_time | grep -b -o side_brush_work_time`
escobilla_lat_ini=`echo $escobilla_lat_ini | cut -d ':' -f1`
escobilla_lat=`echo ${linea:$escobilla_lat_ini+23:15}| tr -dc '0-9'`
escobilla_lat_restante=$((720000-$escobilla_lat))

 

### SENSOR
linea=`cat mirobo_consumibles.txt |grep sensor_dirty_time`
sensor_ini=`cat mirobo_consumibles.txt |grep sensor_dirty_time | grep -b -o sensor_dirty_time`
sensor_ini=`echo $sensor_ini | cut -d ':' -f1`
sensor=`echo ${linea:$sensor_ini+19:15}| tr -dc '0-9'`
sensor_restante=$((108000-$sensor))

### ESCOBILLA PRINCIPAL
linea=`cat mirobo_consumibles.txt |grep main_brush_work_time`
escobilla_pri_ini=`cat mirobo_consumibles.txt |grep main_brush_work_time | grep -b -o main_brush_work_time`
escobilla_pri_ini=`echo $escobilla_pri_ini | cut -d ':' -f1`
escobilla_pri=`echo ${linea:$escobilla_pri_ini+23:15}| tr -dc '0-9'`
escobilla_pri_restante=$((1080000-$escobilla_pri))

echo "INSERT INTO aspiradora (estado,bateria,velocidad,limpiezas,recorrido,total_tiempo,tiempo_limpieza,metros_limpieza,ultima_limpieza,filtro,filtro_restante,escobilla_lat,escobilla_lat_restante,sensor,sensor_restante,escobilla_pri,escobilla_pri_restante) VALUES ($estado,$bateria,$velocidad,$limpiezas,$recorrido,$total_tiempo,$tiempo_limpieza,$metros_limpieza,$ultima_limpieza,$filtro,$filtro_restante,$escobilla_lat,$escobilla_lat_restante,$sensor,$sensor_restante,$escobilla_pri,$escobilla_pri_restante);" | mysql -uUSUARIO -pCONTRASEÑA -h IP_SERVIDOR_MYSQL BASE_DE_DATOS;

 

 

Ich ein Beispiel-Code lassen, die Sie in MySQL verwenden können, um diese Tabelle zu erstellen namens ‚Staubsauger’ mit 18 Bereiche, in denen wir alles sind zu speichern, die uns das vorherige Skript spuckt. Wir können auch all diese interessanten Informationen speichern und später ausnutzen Grafana!

CREATE TABLE `aspiradora` (
`estado` CHAR(20) NULL DEFAULT NULL,
`bateria` FLOAT NULL DEFAULT NULL,
`velocidad` FLOAT NULL DEFAULT NULL,
`limpiezas` FLOAT NULL DEFAULT NULL,
`recorrido` FLOAT NULL DEFAULT NULL,
`total_tiempo` FLOAT NULL DEFAULT NULL,
`tiempo_limpieza` FLOAT NULL DEFAULT NULL,
`metros_limpieza` FLOAT NULL DEFAULT NULL,
`ultima_limpieza` DATETIME NULL DEFAULT NULL,
`filtro` FLOAT NULL DEFAULT NULL,
`filtro_restante` FLOAT NULL DEFAULT NULL,
`escobilla_lat` FLOAT NULL DEFAULT NULL,
`escobilla_lat_restante` FLOAT NULL DEFAULT NULL,
`sensor` FLOAT NULL DEFAULT NULL,
`sensor_restante` FLOAT NULL DEFAULT NULL,
`escobilla_pri` FLOAT NULL DEFAULT NULL,
`escobilla_pri_restante` FLOAT NULL DEFAULT NULL,
`fecha` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB;

 

und nichts, wie immer, und Daten in der Datenbank, wir können eine Datasource in Grafana gegen die MySQL-Datenbank erstellen und starten unsere Dashboards erstellen, die einige Panels hinzugefügt werden, Ich lasse diese Beispielabfragen und ich verwendet, um solche Daten zu erhalten:

  • Hauptbürste:
SELECT escobilla_pri_restante FROM aspiradora ORDER BY fecha DESC LIMIT 1
  • Seitenbürsten:
SELECT escobilla_lat_restante FROM aspiradora ORDER BY fecha DESC LIMIT 1
  • Filter:
SELECT filtro_restante FROM aspiradora ORDER BY fecha DESC LIMIT 1
  • sauber Sensoren:
SELECT sensor_restante FROM aspiradora ORDER BY fecha DESC LIMIT 1
  • letzte Reinigung:
SELECT timestamp(DATE_FORMAT(ultima_limpieza, '%Y/%m/%d %H:%i:%s')) as time_sec FROM aspiradora ORDER BY fecha DESC LIMIT 1
  • Wisch (wird abhängen von der gewählten Zeit seiner Zeit saugen sagen), Ich multiplizieren x 5 weil in meinem cron ich jeden 5 Minuten:
SELECT (COUNT(*) * 5) FROM aspiradora WHERE estado = 'Cleaning' and $__timeFilter(fecha)
  • Gesamt cleanings:
SELECT limpiezas FROM aspiradora ORDER BY fecha DESC LIMIT 1
  • Gesamtwegstrecke:
SELECT recorrido FROM aspiradora ORDER BY fecha DESC LIMIT 1
  • Gesamtreinigung:
SELECT total_tiempo FROM aspiradora ORDER BY fecha DESC LIMIT 1
  • Und in der Grafik dargestellt 2 Sachen, (ich) Gereinigt Quadratmeter und (ii) verbrachte Zeit, durch diese 2 wählt distintas:
SELECT UNIX_TIMESTAMP(ultima_limpieza) as time_sec, metros_limpieza as value, "Metros" as metric FROM aspiradora WHERE $__timeFilter(ultima_limpieza) ORDER BY ultima_limpieza, time_sec ASC
SELECT UNIX_TIMESTAMP(ultima_limpieza) as time_sec, tiempo_limpieza as value, "Tiempo" as metric FROM aspiradora WHERE $__timeFilter(ultima_limpieza) ORDER BY ultima_limpieza, time_sec ASC

 

gut, die Hoffnung ist interessant, kontrollierteren und andere pileup gequetscht! wie wir sehen,, mit Grafana und der Kombination mehrerer Produkte können wir unser klügstenes Haus wetzen, wo wir Schaltanlagen, wie üblich, Ich hoffe, Sie haben festgestellt, interessant!