Ü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! wir können ausführen ‚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, Wir werden den Weg gehen ‚/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. es ist 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 hinterlasse Ihnen ein Beispiel für den Code, den Sie in MySQL verwenden können, um diese Tabelle mit dem Namen zu erstellen ‚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!
empfohlene Beiträge:
- JumpServer - 17 von Oktober von 2023
- CrowdSec-Konsole - 10 von Oktober von 2023
- Gophisch – Ethisches Phishing in unserem Unternehmen - 3 von Oktober von 2023