Eigene FW für Xiaomi Vacuum und DustCloud

Begonnen von MadMax-FHEM, 02 April 2018, 18:50:38

Vorheriges Thema - Nächstes Thema

MadMax-FHEM

Hallo,

ich habe ja bereits seit einiger Zeit einen Xiaomi Sauger V1.

Grund ihn zu nehmen waren die Berichte und nat. das Modul von Markus, vielen Dank (noch mal) an dieser Stelle!

Allerdings würde ich dem Sauger gerne das "Nachhause-Telefonieren" verbieten.
Wenn ich das jedoch in meinem Router einstelle, also "keine Kommunikation nach außen", dann ist der Sauger "beleidigt"...
...zumindest bei mir...

Bin schon vor längerem auf den Link zu "eigener FW für den Sauger" und zu "DustCloud" gestoßen (http://dontvacuum.me/ bzw. https://github.com/dgiese/dustcloud).
Seither überlege ich das mal anzugehen... :)
(wollte mir schon einen extra Sauger dafür ordern aber aktuell sind mir die zu teuer für den "Spaß")

Bevor ich das nun angehe hätte ich ein paar Fragen:

Nutzt schon nur die "eigene FW" etwas bzgl. "Nachhause-Telefonieren" oder nur in "Zusammenarbeit" mit der DustCloud?

Wer hat das bereits umgesetzt?
Und natürlich: wie "gefällt es"? ;)

Und dann noch bzgl. DustCloud:

Zitat#replace the 123.123.123.123 with your own external ip address

d.h. ich brauche eine Portfreigabe/-weiterleitung und sowas wie dynDNS (hätte ich schon), wenn ich DustCloud beispielsweise auf einem PI in meinem Netz betreiben will?

EDIT: und nat. ob der Sauger nach dem Flashen mit "eigener FW" (und DustCloud) immer noch mit dem Modul läuft. (denke aber ja)

Vielen Dank schon mal!

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Markus M.

Läuft noch mit FHEM, da dafür nur lokal kommuniziert wird.
Ich hab meinen nur gerooted, für mehr ist aktuell keine Zeit vorhanden.
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

MadMax-FHEM

#2
Hallo Markus,

vielen Dank für die Antwort.

Muss aber doch noch mal nachhaken:

Kommuniziert der gerootete (= "eigene FW"!?) Vacuum dann noch mit China oder sonst irgendwas außerhalb des lokalen Netztes?
(vermute/hoffe mal: nein :)  )

Braucht man dann noch den Token?
Und wenn ja: wie bekommt man den dann raus?

Die Anleitung hier: https://github.com/dgiese/dustcloud/wiki/VacuumRobots-manual-update-root-Howto ist etwas "widersprüchlich"...
...wenn ich der "allgemeinen" Anleitung folge, dann kommt folgender Schritt:

Zitat
3.    mirobo discover --handshake true

    You'll retrieve the token (copy hash represented by placholder #Token for further use):
    INFO:miio.device: IP 192.168.8.x (ID: $) - token: b'#Token'

Bei der "reinen Linux" Anleitung kommt nirgends ein Token vor...
...gut, man kann ja vermutlich (trotzdem) "einfach" den Aufruf machen, die Tools sind ja installiert... ;)

EDIT: auch mit diesem Aufruf bekomme ich nur lauter 'f' als Token (war abzusehen, da ja verbunden und nicht in 'unprovisioned mode (press WiFi button)' / aber das mache ich erst, wenn ich ganz sicher bin und die Vorteile der "Root-FW" kenne...

Danke, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

MadMax-FHEM

#3
So kleiner Zwischenstand:

ich hab mal die Anleitung bzgl. Linux auf einem PI3+ mit neuem Raspian Stretch ("Desktop") durchgeführt:

https://github.com/dgiese/dustcloud/wiki/VacuumRobots-manual-update-root-Howto

Zum Erzeugen des public keys habe ich einfach nur:

ssh-keygen -t rsa

ohne Passwort verwendet...

Und von hier: https://python-miio.readthedocs.io/en/latest/discovery.html#installation hab ich sicherheitshalber mal folgendes installiert:

sudo apt-get install libffi-dev libssl-dev

Diesen Befehl dann auf die aktuell heruntergeladene FW angepasst:

sudo ./dustcloud/devices/xiaomi.vacuum/firmwarebuilder/imagebuilder.sh -f v11_001228.pkg -k id_rsa.pub

bei mir also:

sudo ./dustcloud/devices/xiaomi.vacuum/firmwarebuilder/imagebuilder.sh -f v11_003194.pkg -k id_rsa.pub

Meine gerootete FW hab ich also schon mal "gebastelt"... :)

Die Device-Discovery hat auch funktioniert...
...da meine Sauger aber ja bereits mit der App und nat. fhem verbunden sind, waren die Token lauter 'f'...

So nun stehe ich vor dem Schritt: flashen oder nicht...

Auslesen des Token ist deutlich schwieriger geworden (aktuell habe ich FW 3.3.9_003077 danach dann ja wohl 3.3.9_003194, wenn auch gerooted)...

Daher die Frage(n): welchen Vorteil bzw. welche Vorteile hat die gerootete FW (konnte nichts genaues finden)

Wenn ich den Token schon habe (aktuell habe ich den ja, da ja verbunden mit fhem), kann ich dann direkt flashen und der Token bleibt?
(werde mal ein wenig "rumspielen" mit den Möglichkeiten von "mirobo" ;)  )

DurstCloud scheint ja nicht notwendig zu sein...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Markus M.

Beide Male: ja.
Root heißt erst mal nur SSH Zugang, sonst noch nichts.
Du kannst DNS umbiegen und Dustcloud irgendwo laufen lassen um die externen Anfragen zu unterbinden. Dazu sollte es eine Anleitung geben.
Den Token brauchst du trotzdem. Den kannst du aber mit Root direkt aus dem Gerät auslesen.
Ist dort ein kürzerer String, den du direkt so ins Modul eintragen kannst. Beim Update sollte er sich aber sowieso nicht ändern.
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

MadMax-FHEM

#5
Hallo Markus,

danke noch mal!

Ich war nun so "mutig" und hab gerootet, allerdings ohne zurücksetzen, sondern (da ich ja IP und Token kenne) direkt per update_firmware Befehl:

mirobo --ip 192.168.1.11 --token 12345678901234567890123456789012 update_firmware ./output/v11_003194.pkg

EDIT: vorher immer in das Verzeichnis dc (bzw. wie immer es genannt wurde wo die "Umgebung" hin "installiert" wurde) und ins "virtuelle Environment" wechseln: . .venv/bin/activate

EDIT2: wenn man den Sauger noch nicht mit fhem gekoppelt hatte (also den Token [noch] nicht [mehr] kennt), dann einfach folgendes ausführen (vorher mit dem vom Sauger aufgespannten WLAN verbinden, daher ausnahmsweise Desktop-System, da geht das schneller ;)  ): python dustcloud/devices/xiaomi.vacuum/firmwarebuilder/flasher.py -f output/v11_001228.pkg (FW-Name nat. entsprechend anpassen). Dabei wird der Sauger gesucht (mind. WLAN zurücksetzen oder er ist "frisch aus dem Laden") und dann eben die FW aufgespielt. Anschließend kann er dann per MII-App ins WLAN integriert werden und man kommt per ssh drauf. Ohne Passwort weil dazu hat man ja den ssh-Schlüssel in die FW eingebaut. D.h. von dem Rechner wo man die FW gebaut hat kommt man einfach so drauf (ssh -l root IP) will man auch von anderen Rechnern drauf dann entweder passwortlosen Zugang einrichten (Anleitungen gibt es genug)oder eben für den Zugang ein Passwort auf dem Sauger einrichten (wenn per ssh eingeloggt: passwd und dann halt das Passwort setzen).

EDIT3: Auslesen des Token geht dann (wenn man per ssh eingelogt ist) wie folgt: printf $(cat /mnt/data/miio/device.token) | xxd -p

Da die älteren FW-Stände auch auf dem Repository liegen kann/könnte man so wohl auch auf eine ältere zurück...

Ich werde mal sehen, ob ich DustCloud auch noch aufsetze oder es erst mal "gut sein lasse"...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Markus M.

Dustcloud ist für mich Overkill, ich möchte die App ja weiterhin nutzen können und Xiaomi hat meinen Grundriss eh schon :)

Was für uns interessant wäre, wäre eine Möglichkeit, direkt auf dem Sauger die Karte und die Positionen von Ladestation und Robo abzufragen.
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

MadMax-FHEM

#7
Hallo Markus,

also die Karten sollen ja unter:

/var/run/shm/

liegen, konnte bei mir aber keine finden :-|
(laut dem Scrit hier [und auch anderswo gelesen]: https://github.com/dgiese/dustcloud/blob/master/dustcloud/upload_map.sh)

Unter:

/mnt/data/rockrobo/

liegen bei mir u.a. folgende Dateien:


-rw-r--r--   1 root root     40 Apr  3 13:42 ChargerPos.data
-rw-r--r--   1 root root    348 Apr  3 13:21 RoboController.cfg
-rw-r--r--   1 root root     39 Apr  3 13:42 StartPos.data
-rw-r--r--   1 root root    282 Apr  3 12:06 Update.pkg.inf
-rw-r--r--   1 root root     43 Dec 25 13:24 VacuumAndBrush.cfg
-rw-r--r--   1 root root  31316 Apr  3 13:45 appproxy.map
-rw-r--r--   1 root root    149 Jun 14  2017 apptimer.cfg
-rw-r--r--   1 root root 121016 Apr  3 13:45 last_map


ChargerPos.data bzw. StartPos.data sieht doch so aus?
(interessanterweise hat sich ChargerPos von X=0 und Y=0 [glaube ich zumindest im Kopf zu haben] seit dem letzen Abfragen wohl geändert [aktuell]: X=4 ; Y=-14)

Ups, Reinigungsvorgang angestossen und: weg sind die beiden Dateien...

Auch "last_map" wird nach jedem Reinigen angelegt (und auch zwischendrin mal upgedated)...
...aber mit dem Format kann ich nix anfangen... :-|

EDIT:
Hier steht auch was bzgl. der Karten:
https://github.com/dgiese/dustcloud/blob/master/devices/xiaomi.vacuum.gen1/mapextractor/extractor.py
bzw.
https://github.com/marcelrv/XiaomiRobotVacuumProtocol/blob/master/RRMapFile/RRFileFormat.md
Die Datei "robot.db" liegt auch unter /mnt/data/rockrobo/
End-EDIT

EDIT2:
nach einem manual move (remote controls) habe ich beide Dateien (ChargerPos.data und StartPos.data) wieder, mit folgendem Inhalt (diesmal):

root@rockrobo:/mnt/data/rockrobo# cat ChargerPos.data
x = 33;
y = -190;
angle = -2.982336521;
root@rockrobo:/mnt/data/rockrobo# cat StartPos.data
x = -386;
y = -257;
angle = 0.1592561324;

End EDIT2

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

MadMax-FHEM

Ich hab das mit dem extractor.py mal ausprobiert.
Also 'robot.db' Datei per scp runter kopiert und dann dem extractor.py "vor die Füße geworfen"...
...und raus kam die Karte... :)
Gut an den Farben kann man noch etwas arbeiten ;)
Aber sonst: toll!

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Ma_Bo

Klingt sehr interessant, ich lese mal mit...
Grüße Marcel
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

mark79

Bzgl. des rooten und upgraden der FW, das geht mit der flasher.py <firmware> recht einfach, das Python Script holt sich den Token automatisch.
Dafür muss man nur vorher das WLAN zurück setzten und sich mit dem Laptop/PC auf dem Robi verbinden.
Hat man root Zugang, kriegt man den Token über folgenden Befehl: printf $(cat /mnt/data/miio/device.token) | xxd -p

Was ich ganz cool finde, ist die Zonereinigung.
Die Funktion gab es bisher nur für den neuen Robi mit Wischfunktion, aber seit der FW 3.3.9_003194 soll das auch in der V1 FW implementiert sein: https://meinsmarthome.blog/xiaomi-mi-robot-vacuum-v1-zone-cleanup/

Das konnte ich nur nicht testen, da ich noch eine ältere FW drauf habe...

Für iobroker gibt es schon was: https://forum.iobroker.net/viewtopic.php?p=138421#p138421
https://github.com/ioBroker/ioBroker.mihome-vacuum#zoneclean

Es wäre toll, wenn das irgendwann auch für Fhem gibt. :)
Rock64 4GB mit Debian Strech, FHEM im LXC, Sonoff Switches/Touch, HM Thermostate, HMUART/Zigbee2MQTT@MapleCUN, ESP RGBWW Wifi Controller, ESP8266 Door Sensor/Briefkastenwächter, BT CSL Stick, BT iTags, Alexa, FireTV, RPi2 mit Kodi, Xiaomi Vacuum v1/Smarthome Komponenten

Markus M.

Zitat von: mark79 am 03 April 2018, 20:05:28Was ich ganz cool finde, ist die Zonereinigung.
Es wäre toll, wenn das irgendwann auch für Fhem gibt. :)
Für alle die das normale Update verwenden, ist irgendwann schon morgen ;)
Demnächst kommen dann auch noch ein paar Hilfsattribute um Name für Punkte und Zonen zu vergeben.
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

MadMax-FHEM

Wenn ich die Tage mal Zeit habe werde ich mal ein Script basteln was die Map(s) holt, "konvertiert" und dann anzeigt...
...mal sehen.

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

timmmmmey

Zitat von: MadMax-FHEM am 04 April 2018, 20:42:45
Wenn ich die Tage mal Zeit habe werde ich mal ein Script basteln was die Map(s) holt, "konvertiert" und dann anzeigt...
...mal sehen.

Gruß, Joachim

Wirklich nicht hübsch, aber manchmal hilft es ja zu sehen, wie andere es nicht hübsch gemacht haben :)

set -x
set -e
ip=192.168.x.x
key=/opt/id_rsa_xiaomi
user=root

mkdir -p /dust
current=$(ssh -i ${key} ${user}@${ip} find /run/shm/ -iname "*.ppm")

pushd /dust
if [[ -n $current ]] ; then
newest=$(ssh -i ${key} ${user}@${ip} find /run/shm/ -iname '*.ppm' -printf '%T+#%p\\n' | sort -r  | head -n 1 | cut -d '#' -f 2)
scp  -i ${key} ${user}@${ip}:${newest} /dust/newest.ppm
else
newest=$(ssh -i ${key} ${user}@${ip} find /mnt/data/ -iname 'navmap*ppm*' -and -not -iname '*log*' -printf '%T+#%p\\n' | sort -r  | head -n 1 | cut -d '#' -f 2)
scp  -i ${key} ${user}@${ip}:${newest} /dust/newest.gz
zcat newest.gz > newest.ppm
fi

mogrify -format png   -monochrome -negate -noise 3  newest.ppm
chmod 666 /dust/* &> /dev/null
filename=/dust/newest.png

perl /opt/fhem/fhem.pl 7072 'set telegramBot sendPhoto @xyz '${filename};
popd

drhirn

Zitat von: MadMax-FHEM am 04 April 2018, 20:42:45
Wenn ich die Tage mal Zeit habe werde ich mal ein Script basteln was die Map(s) holt, "konvertiert" und dann anzeigt...
...mal sehen.

Gruß, Joachim

So wie hier?
https://github.com/dgiese/dustcloud/pull/95