SSH-toegang verkrijgen bij een Xiaomi Roborock S5

In dit artikel leggen we uit hoe je SSH-toegang kunt krijgt op de Xiaomi Roborock S5. SSH-toegang is onder andere nodig als je een andere taal op de stofzuiferrobot wilt installeren of alle verbindingen met de Chinese servers een halt wilt toeroepen.

Benodigdheden

Software installatie

In de PuTTy terminal geef je onderstaande commando’s in om de benodigde software te installeren:

sudo su
apt-get install python-miio
apt-get install ccrypt
apt-get install git
apt-get install wget
apt-get install dos2unix

Kloon/kopieer de Dustcloud Repository met Git:

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

Ga naar de firmwarebuilder folder:

cd dustcloud/devices/xiaomi.vacuum/firmwarebuilder/

Download op de Dustcloud site de firmware. Het is belangrijk dat je de juiste firmware download, anders kan het zomaar einde verhaal zijn! Roborock S5 (S50/S51/S52/S55) is Gen2. Als je firmware 3.3.9_001720 wilt gebruiken krijg je bijvoorbeeld als link https://cdn.awsbj0.fds.api.mi-img.com/rubys/updpkg/v11_001720.fullos.pkg. Op dit moment staan de firmware-bestanden van Gen1 op twee servers en de firmware-bestanden van Gen2 op vier verschillende servers. Niet alle firmware-bestanden staan op alle servers. Dit is een kwestie van proberen.

wget https://cdn.awsbj0.fds.api.mi-img.com/rubys/updpkg/v11_001720.fullos.pkg

Download het Engelse taalpakket:

wget https://dustbuilder.xvm.mit.edu/pkg/voice/english.pkg

Maak nu de SSH-keys aan (het maakt niet uit wat voor een mailadres gebruikt wordt):

ssh-keygen -t rsa -b 4096 -C "jouw@emailadres.com"

Er zal nu gevraagd worden waar je de key wilt opslaan. Druk alleen op Enter. Vervolgens wordt er gevraagd om een wachtwoord in te geven. Vul niets in, maar druk twee keer op Enter.

Kopieer de public key:

cp ~/.ssh/id_rsa.pub .

Nu is het tijd om de firmware met SSH-toegang te maken. Let erop dat je eventueel de versie van de firmware aanpast:

./imagebuilder.sh -f v11_001720.fullos.pkg -s english.pkg -k id_rsa.pub -t Europe/Amsterdam

Na een minuut of vijf krijg je de MD5 (b70357a6ced2ce739ccad248e42abd52) en het bestand (output/v11_001720.fullos.pkg) te zien. Controleer nog even of er geen foutmeldingen voorbij gekomen zijn.

Nu de aangepaste firmware gemaakt gaan we de Xiaomi Roborock S5 flashen. Let erop dat je eventueel de versie van de firmware aanpast:

python3 flasher.py -a 192.168.2.79 -t 4465545864276348674c684875546731 -f output/v11_001720.fullos.pkg

Het flashen zal 5 tot 10 minuten duren. De led op de Xiaomi Roborock S5 zal snel knipperen. Zodra het flashen klaar is zal de led langzamer knipperen.

Je kunt nu in PuTTY inloggen op de Xiaomi Roborock S5 met onderstaand commando. Het IP-adres moet je uiteraard wel aanpassen naar het IP-adres van jouw Roborock S5.

ssh root@192.168.2.79

Je krijgt de eerste keer onderstaand tekst te zien:

The authenticity of host '192.168.2.79 (192.168.2.79)' can't be establish.
ECDSA key fingerprint is SHA256:EGsRjY6aCPmt4JoTxMzN3vxfj1UrXkw/r78tWgMBQ
Are you sure you want to continue connection (yes/no)?

Typ nu yes in en je bent ingelogd als root@rockrobo !

SSH-toegang met password

Indien gewenst kun je een password voor SSH-toegang instellen, zodat je met PuTTY snel op de Roborock S5 kunt inloggen:

passwd

Typ nu twee keer het wachtwoord in (en vergeet het niet!).

SSH-toegang met key

Op zich heb je vanaf de gebruikte Raspberry Pi al SSH-toegang via een SSH-key. Echter, het kan ook handig zijn om vanaf je Windows PC (met PuTTY, of WinSCP) in te kunnen loggen op de Xiaomi Roborock S5. Hiervoor moeten we de private key kopieren.

Eerst moeten we de SSH-verbinding verbreken (indien deze nog in stand was):

exit

Ga nu naar de folder waar de key opgeslagen is:

cd /root/.ssh

Aangezien de key in de /root.ssh/ folder staat kopiëren we de key eerst naar /home/pi/.

cp id_rsa /home/pi

Pas de eigenaar van het bestand aan:

cd /home/pi
chown pi id_rsa

Nu kun je de key (bestand id_rsa) eenvoudig van de Raspberry Pi naar de Windows PC downloaden met WinSCP of FileZilla.

Op nu op de PC het programma PuTTYgen en klik op Load om de private key te laden. Je krijgt een melding dat de key in het oude PEM formaat is. Dat is geen probleem. Klik op Ok en vervolgens op Save private key. Je krijgt de vraag of je de private key wilt opslaan zonder een (extra) wachtwoord. Beantwoord deze vraag met Ja. Sla de private key (.pkk formaat) op een locatie op je PC op.

Open PuTTY en geeft het IP-adres van je Xiaomi Roborock S5 in. Zorg er ook voor dat bij Port de waarde 22 staat en bij Connection type SSH is geselecteerd. Ga nu naar Connection > SSH > AUTH. Klik op Browse onder “Private key file for authentication”. Selecteer de private key die je eerder op je PC hebt opgeslagen. Tot slot ga je nu aan de linkerkant weer terug naar Session (helemaal bovenaan) en klik je op Save.

Token opvragen

Nu je SSH-toegang op de Xiaomi Roborock S5 hebt kun je ook heel eenvoudig de token opvragen:

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

 

Tip!

Mocht je een foutmelding tegenkomen als “UnicodeEncodeError: ‘ascii codec can’t encode characters in position xx-xx” geef dan onderstaande in de terminal in en volg de stappen opnieuw:

export LC_CTYPE=C.UTF-8

 

16 gedachten over “SSH-toegang verkrijgen bij een Xiaomi Roborock S5

  • 19 augustus 2019 om 22:46
    Permalink

    Hey Joost, thanks voor deze guide! Ik ontkom alleen niet onder de indruk dat je hierbij -naast de bovenstaande requirements – ook je token nodig hebt. Is die namelijk niet gegeven in onderstaand commando:
    “python3 flasher.py -a 192.168.2.79 -t 4465545864276348674c684875546731 -f output/v11_001720.fullos.pkg”?
    Ik had de guide vluchtig bekeken en wilde hem juist volgen omdat je hierna zo eenvoudig het token kunt achterhalen met je laatste toevoeging, zou echt top zijn!

    Beantwoorden
    • 20 augustus 2019 om 18:33
      Permalink

      Ja, printf $(cat /mnt/data/miio/device.token) | xxd -p is alleen nuttig als je op een later moment je token nog een keer op wilt vragen.

      Beantwoorden
      • 20 augustus 2019 om 22:16
        Permalink

        Geen probleem, heb de token inmiddels via een de ‘oude app methode’ (server EU werkt ook/was nodig). Als ik je nog met een vraagje mag lastig vallen:
        De laatste versie van gen2 firmware lijkt 1820 te zijn maar deze staat (nog) niet op de 4 servers.
        Zou ik deze ook direct kunnen downloaden, via winScp in de juiste map kunnen zetten en deze vervolgens in het flashcommand kunnen meenemen?

        ./imagebuilder.sh -f v11_001820.fullos.pkg -s english.pkg -k id_rsa.pub -t Europe/Amsterdam
        En als t even meezit de NL versie van language package meenemen natuurlijk (zoals in je andere guide beschreven staat met mirobo)

        Normaal zou ik gewoon 1720 flashen maar bij de eerste run zat R2D2 vast onder de bank, na een firmware update was dit verholpen dus ik hoop dat met dit truukje te vermijden.

        Beantwoorden
        • 20 augustus 2019 om 22:30
          Permalink

          Geen idee of dat gaat lukken, heb ik nooit geprobeerd…

          Beantwoorden
  • 22 augustus 2019 om 00:14
    Permalink

    Joost nogmaals bedankt! Het is gelukt, wel met de oude 1720 versie eerst nog. Misschien probeer ik de 1820 later eens en laat ik t je weten.
    Ik kreeg nog een error omdat python nog niet juist was geïnstalleerd op mn pi. “ImportError: No module named miio” Voor degene met t zelfde probleem, dat was met deze commando’s opgelost (geen idee of ik dubbel/te veel heb installed, maar dat lost zich vanzelf op). Hierna werkte de flash wel:
    sudo apt-get install libpython3.5-dev
    sudo apt-get install python3 python3-dev python3-pip
    sudo apt-get install libffi-dev libssl-dev
    sudo pip3 install python-miio

    Morgen de maps naar domiticz overzetten!

    Beantwoorden
  • 25 september 2019 om 22:45
    Permalink

    Joost,

    Heb je beeld of dit op de nieuwe S6 ook uit te rollen is?
    Met name de kamer functies spreken me erg aan.

    Alvast bedankt voor je reactie

    Beantwoorden
  • 27 september 2019 om 11:28
    Permalink

    Joost,

    Bedankt voor de geweldige handleiding van de pi en domoticz. Nu met de roborock zit ik vast.
    Bij het flashen om ssh toegang te krijgen, loopt het vast.
    python3 flasher.py -a 192.168.1.22 -t 5a5553714e507478624f79664a52764d -f output/v11_001720.fullos.pkg
    Flasher for Xiaomi Vacuum
    Connecting to device 192.168.1.22…
    Starting local http server…
    Serving http server at 192.168.1.28:39345
    Sending ota command with parameters: {“app_url”: “http://192.168.1.28:39345/v11_001720.fullos.pkg”, “proc”: “dnld install”, “install”: “1”, “mode”: “normal”, “file_md5”: “f45665365ef0ee8b4bfc4d5f88747018”}
    Ota started!
    Traceback (most recent call last):—————————| 0.0%
    File “flasher.py”, line 210, in
    main()
    File “flasher.py”, line 199, in main
    printProgressBar(ota_progress, 100, prefix = ‘Progress:’, length = 50)
    File “flasher.py”, line 54, in printProgressBar
    print(‘\r%s |%s| %s%% %s’ % (prefix, bar, percent, suffix), end = ‘\r’)
    UnicodeEncodeError: ‘latin-1′ codec can’t encode characters in position 12-61: ordinal not in range(256)
    Kun je me richting geven hoe dat op te lossen?

    Beantwoorden
    • 27 september 2019 om 18:17
      Permalink

      Eerst in de terminal onderstaande ingeven:

      export LC_CTYPE=C.UTF-8

      en dan:

      python3 flasher.py -a 192.168.1.22 -t 5a5553714e507478624f79664a52764d -f output/v11_001720.fullos.pkg

      Beantwoorden
  • 27 september 2019 om 18:28
    Permalink

    Joost,

    Weer een stap verder: Image is gelukt met wat hulp van een Duitse video.
    Nu wil ik flashen en krijg ik een error 🙁

    python3 flasher.py -a 192.168.X.X -t #token -f output/v11_001720.fullos.pkg
    Flasher for Xiaomi Vacuum
    Connecting to device 192.168.X.X…

    Unable to discover a device at address 192.168.X.X
    error while checking device: Unable to discover the device 192.168.X.X

    mirobo –ip=192.168. X.X –token=#token status; functioneert perfect? handshake kan worden gemaakt.

    Kun je me verder helpen?

    Erik

    Beantwoorden
    • 27 september 2019 om 18:39
      Permalink

      je gebruikt #token, maar dat moet je wel vervangen door jouw echte token

      Beantwoorden
      • 27 september 2019 om 20:32
        Permalink

        om veiligheidsredenen weggehaald evenals de ipadressen

        Beantwoorden
  • 27 september 2019 om 20:31
    Permalink

    Joost,

    Wellicht dat we buiten de site om moeten mailen?
    Steeds verder, maar nog niet rond.
    mirobo commando’s gaven aan dat ik versie v3.3.9_001886 heb.
    deze 001886 gedownload en na de export LC_CTYPE=C.UTF-8 image laten opbouwen
    Voor de flash opnieuw het export commando opgevoerd.
    Flash heeft nu contact maar heb de latin error terug:
    File “flasher.py”, line 54, in printProgressBar
    print(‘\r%s |%s| %s%% %s’ % (prefix, bar, percent, suffix), end = ‘\r’)
    UnicodeEncodeError: ‘latin-1′ codec can’t encode characters in position 12-61: ordinal not in range(256)

    Bedankt voor al het meedenken!

    Beantwoorden
    • 27 september 2019 om 20:39
      Permalink

      Even opnieuw export LC_CTYPE=C.UTF-8 ingeven.

      Beantwoorden
  • 25 oktober 2019 om 18:21
    Permalink

    Joost,
    Ik loop al gelijk vast met het commando:
    apt-get install python-miio

    Ik krijg dan als antwoord:
    E: Kan pakket python-miio niet vinden

    Ik heb een raspberry pi 3b+ en hierop staat raspbian buster v10 geinstalleerd.

    Gr, Rudi

    Beantwoorden
  • 28 oktober 2019 om 20:34
    Permalink

    Joost,
    Ik heb dit inmiddels opgelost d.m.v. het commando ‘pip3 install python-miio’

    is dus gelukt,

    Beantwoorden

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *