đź“‘ Como fazer root de um aspirador Xiaomi (V1 ou V2)


(Tiago Veloso) #1

Como fazer root a um aspirador Xiaomi (V1 ou V2)

Este tutorial pretende explicar os passos necessários para fazer root num aspirador da Xiaomi, tanto a V1 como a V2. Depois de feito o root ao aspirador é possivel expor os mapas que o mesmo gera enquanto está a trabalhar para o Home Assistant.

Antes demais quero deixar o aviso do costume. Estre procedimento implica trocar o firmware de origem do aspirador. Pelo que a garantia do aspirador provavelmente vai á vida.

Ora bem, mãos á obra.

Para fazer o root do aspirador vamos usar as ferramentas fornecidas pelo projecto Dustcloud (https://github.com/dgiese/dustcloud). Numa primeira fase vamos compilar um firmware customizado para o aspirador. Em seguida temos de “enganar” o aspirador a instalar este firmware customizado.

O firmware que vamos compilar nĂŁo Ă© muito diferente do firmware original da Xiaomi. Apenas acrescenta a nossa chave SSH para que possamos mais tarde entrar no aspirador com acesso root.

No site do Dustcloud tem lá os passos todos de forma mais explicita e detalhada. Na wiki encontram passos para compilar o firmware em macOS, contudo foram reportados alguns problemas pelo que se aconselha a compilar o firmware em Linux. Eu criei uma VM com Ubuntu Server para compilar o firmware.

Compilar o Firmware

Ficam aqui os passos que segui em Linux para compilar o firmware:

  1. Instalar os pacotes necessários para compilar o firmware:

sudo apt-get install ccrypt git wget

  1. Criem uma pasta para colocarem os ficheiros necessários

mkdir dustcloud && cd dustcloud

  1. Façam clone do repositório do duscloud para dentro da pasta

git clone https://github.com/dgiese/dustcloud.git

  1. Façam download do firmare mais recente para o vosso aspirador

    4a. Para a V1:

    https://dustcloud.seemoo.de/public/xiaomi.vacuum.gen1/original/encrypted/

    4b. Para a V2:

    https://dustcloud.seemoo.de/public/xiaomi.vacuum.gen2/original/

  2. Saquem o pacote da lingua inglesa:

wget https://github.com/dgiese/dustcloud/raw/master/devices/xiaomivacuum/original-soundpackages/encrypted/english.pkg

  1. Coloquem também na pasta a vossa chave SSH, p.ex: cp ~/.ssh/id_rsa.pub .. (Se estão a usar uma VM, podem ter que copiar a vossa chave SSH do vosso host.)

  2. Corram o script para compilar o firmware:

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

Uns minutos depois deve aparecer uma pasta output com o firmware que vamos utilizar.

Actualizar o Aspirador

Depois de compilado o firmware customizado temos de actualizar o aspirador com o mesmo.
Ficam aqui as instruções:

  1. Instalem os pacotes necessários para comunicar com o aspirador

    1a. Instalem um ambiente python:

    sudo apt-get install python3 python3-pip python3-venv python3-dev

    1b. Iniciem um ambiente virtual:

    python3 -m venv .venv

    . .venv/bin/activate

    1c. Instalem os pacotes necessários de python.

    pip install wheel

    pip install python-miio

  2. Ponham o aspirador em modo de configuração (Premir Home + Power durante uns segundos)

  3. Liguem-se á rede que o aspirador cria, qqer coisa como roborock-vacuum-XPTO

  4. Usem o script do dustcloud para enviar o firmware para o aspirador.

python dustcloud/devices/xiaomi.vacuum/firmwarebuilder/flasher.py -f output/v11_00xxxx.pkg

Este processo pode demorar alguns minutos. Mantenham o PC perto do aspirador para evitarque perca o sinal do mesmo.

Terminado todo este calvário terão acesso root ao aspirador por ssh. Se ainda estiverem ligados á rede do aspiradore basta fazerem ssh root@192.168.8.1.

Configurar o Aspirador

Tendo acesso SSH ao aspirador podem configura-la para se ligar á vossa rede. Como fariam com a app da Xiaomi.

Liguem a vossa máquina á rede do aspirador e corram o seguinte comando para obter o token de configuração do aspirador:

mirobo --debug discover --handshake true

Com o token digam ao aspirador para se ligar á vossa rede:

mirobo --ip=192.168.8.1 --token=token configure_wifi <Nome da Rede> <Password da Rede>

Quando o aspirador se ligar á vossa rede ele vai mudar de token. Para obter o novo token façam SSH para o aspirador ssh root@192.168.x.y e corram o seguinte comando:

printf $(cat /mnt/data/miio/device.token) | xxd -p

Devem usar este novo token para configurar o aspirador no Home Assistant.

Instalar o Valetudo

Para extrair os mapas do Aspirador vamos utilizar o Valetudo (https://github.com/Hypfer/Valetudo).

O vale tudo é uma espécia de mini web server que corre no aspirador e expõe uma API sobre agumas funcões do aspirador.

Ficam aqui os passos para instalr o Valetudo no vosso aspirador.

  1. Fazer download do binário do Valetudo que está na releases do projecto no GitHub.

  2. Copiem o binário para o aspitador, para a pasta /usr/local/bin/.

$ scp valetudo root@&lt;IP.ASPIRADOR&gt;:/usr/local/bin/

  1. Saquem o ficheiro de configuração do Valetudo que está na pasta deployment. O ficheiro valetudo.conf. O ficheiro deve conter o seguinte:

#!upstart

description "Valetudo"

start on filesystem

stop on runlevel [06]

oom score 1000

exec /usr/local/bin/valetudo

respawn

respawn limit 10 90

  1. Copiem o ficheiro valetudo.conf para a pasta /etc/init/valetudo.conf

$ scp valetudo root@&lt;IP.ASPIRADOR&gt;:/etc/init/valetudo.conf

  1. Arranquem os processos todos. Liguem-se ao aspirador por SSH. Deiam permissões de execução ao binário e arranquem o valetudo como um serviço.

# ssh root@&lt;IP.ASPIRADOR&gt;

# chmod +x /usr/local/bin/valetudo

# service start valetudo

  1. Num browser tentem abrir o url http://&lt;IP.ASPIRADOR&gt;. Se tudo tiver corrido bem, devem ver um interface web com algumas funções do aspirador.

Extrair os Mapas do Aspirador para o Home Assistant

Para além de um interface web o Valetudo expõe uma API REST que podemos usar no Home Assistant para mostrar os mapas.

Eu usei um sensor REST e o componente de camera genérico.


sensor:

- platform: rest

resource: http://&lt;IP.ASPIRADOR&gt;/api/remote/map

name: Vacuum Map

value_template: '{{ value_json.mapsrc }}'

camera:

- platform: generic

name: Vacuum Map

limit_refetch_to_url_change: true

still_image_url: http://&lt;IP.ASPIRADOR&gt;{{ states.sensor.vacuum_map.state | string }}

content_type: image/png

Basta adicionar o componente de camera ao vosso UI e tá feito :slight_smile:


Como fazer root a um aspirador Xiaomi (V1 ou V2)
(Jorge Assunção) #2

Uma mensagem foi unida em um tĂłpico existente: Como fazer root a um aspirador Xiaomi (V1 ou V2)


(Jorge Assunção) #5

(system) #6

Para comentares este tĂłpico por favor clica em: