Überwachung des Status unseres Xiaomi Mi Vacuum Roboterstaubsaugers in Grafana

Wenn wir den wunderbaren und allmächtigen Xiaomi-Staubsaugerroboter haben und Sie seine Daten in einem Grafana-Dashboard visualisieren möchten, Das ist dein Beitrag! Darin werden wir sehen, wie Sie eine Verbindung zum Staubsauger herstellen, wie wir Ihnen Fragen stellen und alle Arten von interessanten Daten erhalten können, und speichern Sie es dann in einer MySQL-Datenbank, die wir mit Grafana angreifen, um diese Metriken zu visualisieren und zu verarbeiten.

 

Gestartet, Das Wichtigste, Wir werden ein großartiges Bücherregal verwenden, das wir in GitHub (Englisch) um den Staubsauger zu steuern oder um Informationen über seinen Zustand oder seine Verbrauchsmaterialien zu erhalten.

 

Wir beginnen wie immer mit den Anforderungen, Das erste und wichtigste wird sein, Python zu haben 3.5, installiert und standardmäßig, Wenn Sie dies von einem Raspbian aus tun, müssen Sie möglicherweise die folgenden Schritte ausführen, um es zu installieren und auszuwählen:

[Quellcode]sudo update-alternatives –installiere /usr/bin/python python /usr/bin/python2.7 1
sudo update-alternatives –installiere /usr/bin/python python /usr/bin/python3.5 2

sudo update-alternatives –Konfiguration Python
Python –Version
python -m pip pip deinstallieren pip
pip install construct==2.9.31[/Quellcode]

 

Wir installieren virtualenv, Und wir verwenden dieses Verzeichnis als virtuelle Umgebung., Wir haben endlich Mirobo installiert und einige Anforderungen, die wir auch brauchen werden:

[Quellcode]sudo pip install virtualenv
Mkdir mirobo
virtualenv -p /usr/bin/python3 mirobo
Abklingzeit Miro
Quell-Bin/Aktivieren
sudo apt-get install libffi-dev libssl-dev -y
PIP Install Python-MIIO[/Quellcode]

 

Bewegen! Wir werden jetzt in der Lage sein, 'Mirobo Discover’ um im Internet nach unserem Staubsauger zu suchen, Wenn wir Glück haben (Ich sagte nein) Wir werden den Token sehen, den wir brauchen, Andernfalls müssen wir herausfinden, wie wir es bekommen können, In meinem Fall, indem ich die Xiaomi Home App auf meinem Android-Handy installiert habe, mit einem Datei-Explorer auf Mobilgeräten, Wir gehen auf den Pfad '/SmartHome/logs/Plug_Devicemanager/’ und suchen Sie in Nur-Text-Dateien, die AAAA-MM-DD.txt unserem Token formatiert sind, Zeigen Sie die neueste Datei an, die Sie leicht sehen können.

 

Und endlich werden wir in der Lage sein, die Anwendung ohne Probleme zu verwenden, um beispielsweise ihren Status zu sehen, Verbrauchsartikel, Die Geschichte… Wir könnten es sogar kontrollieren und es zur Reinigung schicken….

[Quellcode]exportieren MIROBO_IP=DIRECCION_IP_DE_LA_ASPIRADORA
exportieren MIROBO_TOKEN=TOKEN_DE_AUTH_DE_LA_ASPIRADORA

Miro
Zustand: Aufladung
Batterie: 100 %
Lüfterdrehzahl: 60 %
Reinigung seit: 0:33:27
Gereinigter Bereich: 35.48 m²

Mirobo-Verbrauchsmaterialien
Hauptbürste: 22:26:19 (Links 11 Tage, 13:33:41)
Seitenbesen: 22:26:19 (Links 7 Tage, 9:33:41)
Filter: 22:26:19 (Links 5 Tage, 7:33:41)
Verschmutzter Sensor: 22:26:19 (Links 7:33:41)

Mirobo Reinigungs-Geschichte
Gesamte Anzahl der Säuberungen: 301
Gereinigt für: 10 Tage, 18:31:57 (Fläche: 13288.1575 m²)

Sauber #0: 2019-06-27 17:42:06-2019-06-27 18:15:33 (Vollständig: STIMMT, Fehler: Kein Fehler)
Gereinigte Fläche: 35.48 m²
Dauer: (0:33:27)

Sauber #1: 2019-06-21 21:16:55-2019-06-21 21:59:12 (Vollständig: STIMMT, Fehler: Kein Fehler)

…[/Quellcode]

 

Wenn Sie dies in eine MySQL-Datenbank exportieren möchten, überlasse ich Ihnen das Skript txurro, das ich erstellt habe, Nur für den Fall, dass es Sie interessiert. Dieses Skript 'chekea_aspiradora_consumibles.sh’ Läuft mit cron alle 5 Protokoll, und speichert in einer Datenbanktabelle die Daten, die uns interessieren und verarbeitet sie dann mit Grafana, Wie ist der Status des Xiaomi Staubsaugers?, Batteriestatus, Reinigungen, Route… :

[Quellcode]#! /Mülleimer/Bash
cd /home/pi/mirobo
Quell-Bin/Aktivieren
exportieren MIROBO_IP=DIRECCION_IP_DE_LA_ASPIRADORA
exportieren MIROBO_TOKEN=TOKEN_DE_AUTH_DE_LA_ASPIRADORA

Miro > mirobo_general.txt

state='Katze mirobo_general.txt |GREP-Zustand | Aww '{drucken $2}’`
Zustand='$estado’
bateria=`cat mirobo_general.txt |grep Battery | Aww '{drucken $2}’`
velocidad=`cat mirobo_general.txt |grep Fanspeed | Aww '{drucken $2}’`

Mirobo Reinigungs-Geschichte > mirobo_historial.txt
limpiezas=`cat mirobo_historial.txt |grep ‘Total clean count’ | Aww '{drucken $4}’`
recorrido=`cat mirobo_historial.txt |grep ‘Cleaned for’ | Aww '{drucken $7}’`
dias=`cat mirobo_historial.txt |grep ‘Cleaned for’ | Aww '{drucken $3}’`
dias=`echo $((dias*24*60*60))`
hours='Katze mirobo_historial.txt |grep ‘Cleaned for’ | Aww '{print substr($5,1,2)}’`
hours='Echo $((Stunden*60*60))`
minutes='Katze mirobo_historial.txt |grep ‘Cleaned for’ | Aww '{print substr($5,4,2)}’`
Minuten='Echo $((Minuten*60))`
seconds='Katze mirobo_historial.txt |grep ‘Cleaned for’ | Aww '{print substr($5,7,2)}’`

total_tiempo=$((Tage+Stunden+Minuten+Sekunden))
hora_desde='Katze mirobo_historial.txt |grep 'sauber #0’ | Aww '{print substr($4,1,8)}’`
hora_hasta='Katze mirobo_historial.txt |grep 'sauber #0’ | Aww '{print substr($5,1,8)}’`
hora_desde='Datum -d $hora_von_+%s'
hora_hasta='Datum -d $hora_bis +%s'
tiempo_limpieza='Echo $(( hora_hasta-hora_desde ))`

metros_limpieza='Katze mirobo_historial.txt |grep 'Bereich gereinigt’ | Aww '{drucken $3; Ausgang}’`
ultima_limpieza='Katze mirobo_historial.txt |grep 'sauber #0’ | Aww '{drucken $3, Substr($4,1,8)}’`
ultima_limpieza='$ultima_Aufräumen’

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-$Filter))

### SEITENBÜRSTE
linea=`cat mirobo_consumibles.txt |grep side_brush_work_time'
escobilla_lat_ini='Katze 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='Katze 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))

### HAUPTPINSEL
linea=`cat mirobo_consumibles.txt |Grep main_brush_work_time"
escobilla_pri_ini='Katze 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 "IN STAUBSAUGER EINSETZEN (Zustand,Batterie,Geschwindigkeit,Reinigungen,Route,total_tiempo,tiempo_limpieza,metros_limpieza,ultima_limpieza,Filter,filtro_restante,escobilla_lat,escobilla_lat_restante,Sensor,sensor_restante,escobilla_pri,escobilla_pri_restante) WERTE ($Zustand,$Batterie,$Geschwindigkeit,$Reinigungen,$Route,$total_tiempo,$tiempo_limpieza,$metros_limpieza,$ultima_limpieza,$Filter,$filtro_restante,$escobilla_lat,$escobilla_lat_restante,$Sensor,$sensor_restante,$escobilla_pri,$escobilla_pri_restante);" | mysql -uUSERNAME -pPASSWORD -h IP_SERVIDOR_MYSQL BASE_DE_DATOS;[/Quellcode]

 

 

Hier ist ein Beispiel für den Code, den Sie in MySQL verwenden können, um diese Tabelle mit dem Namen "Staubsauger" zu erstellen’ mit 18 Felder, in denen wir alles speichern, was das vorherige Skript ausspuckt. Wir werden dann in der Lage sein, all diese interessanten Informationen zu speichern und sie später mit Grafana zu verwerten!

[Quellcode]CREATE TABLE 'Staubsauger' (
'status' ZEICHEN(20) NULL DEFAULT NULL,
'battery' FLOAT NULL DEFAULT NULL,
'speed' FLOAT NULL DEFAULT NULL,
'cleanups' FLOAT NULL DEFAULT NULL,
'Pfad' FLOAT NULL STANDARD 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,
'filter' 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 STANDARD NULL,
'sensor_restante' FLOAT NULL DEFAULT NULL,
'escobilla_pri' FLOAT NULL STANDARD NULL,
'escobilla_pri_restante' FLOAT NULL STANDARD NULL,
'date' TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP BEI UPDATE CURRENT_TIMESTAMP
)
COLLATE='utf8mb4_general_ci’
ENGINE=InnoDB;[/Quellcode]

 

Und nichts, wie gewöhnlich, bereits mit Daten in der DB, Wir können eine DataSource für diese MySQL-Datenbank in Grafana erstellen und damit beginnen, unser Dashboard zu erstellen, zu dem wir einige Panels hinzufügen werden, Ich verlasse Sie mit diesen Beispielen und den Abfragen, die ich verwendet habe, um diese Daten zu erhalten:

  • Hauptbürste:

[Quellcode]AUSWÄHLEN escobilla_pri_restante AUS Staubsauger BESTELLEN NACH DATUM AUS LIMIT 1[/Quellcode]

  • Seitenbesen:

[Quellcode]WÄHLEN SIE escobilla_lat_restante AUS Staubsauger BESTELLEN SIE NACH DATUM AUS DEM LIMIT 1[/Quellcode]

  • Filter:

[Quellcode]WÄHLEN SIE filtro_restante AUS Staubsauger BESTELLEN SIE NACH DATUM AUS DEM LIMIT 1[/Quellcode]

  • Saubere Sensoren:

[Quellcode]WÄHLEN SIE sensor_restante AUS Staubsauger BESTELLEN SIE NACH DATUM AUS DEM LIMIT 1[/Quellcode]

  • Letzte Reinigung:

[Quellcode]SELECT-Zeitstempel(DATE_FORMAT(ultima_limpieza, '%Y/%m/%d %H:%Ich:%s’)) als time_sec VON Staubsauger BESTELLUNG BIS DATUM DESC LIMIT 1[/Quellcode]

  • Reinigung (Abhängig von der gewählten Zeit wird Ihnen angezeigt, wie lange Sie gesaugt haben), Ich multipliziere es x 5 denn in meiner Chronik führe ich es jedes Mal aus 5 Protokoll:

[Quellcode]AUSWÄHLEN (ZÄHLEN(*) * 5) FROM Staubsauger WHERE status='Reinigung'’ und $__timeFilter(Datum)[/Quellcode]

  • Säuberungen insgesamt:

[Quellcode]REINIGUNG AUSWÄHLEN VOM Staubsauger BESTELLEN NACH DATUM AUSSERHALB DES LIMITS 1[/Quellcode]

  • Zurückgelegte Gesamtstrecke:

[Quellcode]ROUTE AUSWÄHLEN AUS Staubsauger BESTELLEN NACH DATUM DESC LIMIT 1[/Quellcode]

  • Komplette Reinigung:

[Quellcode]WÄHLEN SIE total_tiempo AUS Staubsauger BESTELLEN NACH DATUM OFF LIMIT 1[/Quellcode]

  • Und die Grafik zeigt 2 stopfen, (Ich) die Quadratmeter gereinigt und (Ii) Die aufgewendete Zeit, durch diese 2 Verschiedene Auswahlmöglichkeiten:

[Quellcode]WÄHLEN SIE UNIX_TIMESTAMP(ultima_limpieza) Also time_sec, metros_limpieza als Wert, "Meter" als Metrik VON Staubsauger WOBEI $__timeFilter(ultima_limpieza) SORTIEREN NACH ultima_limpieza, time_sec ASC[/Quellcode]

[Quellcode]WÄHLEN SIE UNIX_TIMESTAMP(ultima_limpieza) Also time_sec, tiempo_limpieza als Wert, "Zeit" als Metrik VON Staubsauger WOBEI $__timeFilter(ultima_limpieza) SORTIEREN NACH ultima_limpieza, time_sec ASC[/Quellcode]

 

Brunnen, Ich hoffe, Sie finden es interessant, Ein weiterer, kontrollierterer und gequetschterer Klunker! Wie wir sehen, Mit Grafana und der Kombination mehrerer Produkte können wir unser Zuhause intelligenter machen, wo wir Bedienfelder haben, Das Übliche, Ich hoffe, Sie fanden es interessant!

 

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!!!