Le robot est rooté, Valetudo est installé dessus et vous pouvez désormais  faire nettoyer votre appartement en toute intimité et sécurité mais il reste un problème : que faire quand vous vous rendez compte que vous avez oublié de lancer le robot avant de partir de la maison ?

Avoir le robot accessible de l’extérieur c’est facile, il vous suffit de configurer votre routeur (opération assez simple dans la plupart des box françaises – et encore mieux avec un vrai routeur tournant sous OpenWRT !) pour rediriger un port quelconque inutilisé de celui-ci vers le port 80 du robot (là où Valetudo écoute).
Et éventuellement, si vous n’avez pas d’IP fixe, utiliser un service de Dynamic DNS tel que votre registrar (OVH/…) via un nom de domaine vous appartenant ou un service dédié comme no-ip.com ou dyndns.com (pareil, votre box/routeur propose certainement une option pour gérer ce DynDNS)

Mais le gros problème c’est que n’importe qui entrant votre domaine/IP avec le bon port dans son navigateur aura accès directement au robot (et qu’une IP publique se fera scanner ses ports ouverts plus tôt que tard) et que, pour l’instant, Valetudo ne propose aucun système d’authentification. Heureusement il est facile de placer Valetudo derrière un reverse-proxy comme Nginx qui nous fournira la sécurité nécessaire !

Connectez vous au robot par SSH (toujours avec le compte root) puis commencez par installer nginx (la version « core » suffit vu qu’elle contient le module d’authentification qui nous intéresse)

apt update && apt install nginx-core

Après nous allons créer l’utilisateur qui pourra se connecter à Valetudo via nginx (en remplacant roborock par ce que vous voulez)

echo -n 'roborock:' >> /etc/nginx/.htpasswd

Puis le mot de passe (qui vous sera demandé dans le shell après avoir exécuté cette commande)

openssl passwd -apr1 >> /etc/nginx/.htpasswd

Vous pouvez répéter les deux commandes au dessus plusieurs vous si vous voulez plusieurs comptes. Maintenant créons le fichier de configuration (port 8880 et domaine fictif pour l’exemple, changez à ce que vous voulez/avez)

echo "server {
    listen 8880;
    server_name monroborock.mamaison.com;

    location / {
        auth_basic \"Restricted Content\";
        auth_basic_user_file /etc/nginx/.htpasswd;
        proxy_pass http://127.0.0.1:80;
    }
}" > /etc/nginx/sites-available/roborock

Puis on le place dans les serveurs actifs :

ln -s /etc/nginx/sites-available/roborock /etc/nginx/sites-enabled/

Il nous faut aussi modifier le serveur par défaut de Nginx qui va rentrer en conflit avec Valetudo sur le port 80 sinon. On en profite pour mettre un catch all qui affichera une page d’erreur pour tout autre domaine que ceux configuré (ou ce que vous voulez tant que ça n’écoute pas sur le port 80)

echo "server {
	listen 8880 default_server;
	server_name _;
	return 403;
}" > /etc/nginx/sites-available/default

Il ne reste plus qu’à redémarrer nginx pour prendre en compte les modifications

service nginx restart

Et voilà votre robot est accessible depuis l’extérieur via le domaine/port choisi ! Et il va sans dire que la technique marche pour n’importe quelle interface de contrôle via navigateur que vos appareils peuvent avoir, vous avez juste à créer d’autres serveurs (sur d’autres port ou d’autres domaines) et éventuellement d’autres fichiers de mots de passe si vous ne voulez pas avoir le même pour tous vos appareils.