Root des aspirateurs Xiaomi pour se libérer du cloud avec Valetudo

Petit article rapide sur comment root les aspirateurs Xiaomi avec le firmware Valutedo ou Valutedo re ( Nous ajouterons les différences avec @Clemalex et @Duncan-Valleix qui lui, est passé sur la version re)

Un grand merci à @Duncan-Valleix qui m’a aidé a l’installer sur le mien.

Sources : GitHub - Hypfer/Valetudo: Cloud replacement for vacuum robots enabling local-only operation ou sur le site https://valetudo.cloud.

Ce qu’il vous faut :

  • Un pc sous linux avec une carte Wifi. (J’ai pris un Raspberry sous raspbian mais un live ou une VM devrait marcher).

Récupération de la version du robot.

Récupérer votre version de votre firmware dans :

Xiaomi Home :arrow_forward: paramètre du robot :arrow_forward: mise a jour firmware

Les derniers chiffres (pour moi 2008) vous donne la version :

Réinitialisation du robot.

Il faut réinitialiser son Aspirateur via un reset factory. (un vrai reset, votre robot parlera en chinois).

Pour le Roborock S50 :

  • Appuyer sur les deux boutons de chaque coté du bouton power tout en appuyant sur le bouton reset sous le capot pendant 5 secondes

  • Relâcher seulement le bouton reset
  • Quand le bouton power clignote rapidement relâcher les tous.

Le robot est réinitialisé.

Télécharger les fichiers et préparer l’environnement de travail.

Le plus simple et d’aller sur le site https://builder.dontvacuum.me/

  • Cliquer sur le groupe de photos correspondant à votre robot.
  • Dans Voucher laisser par défaut,
  • Mettre un mail valide (le fichier vous sera envoyé par mail donc un mail valide mais un mail poubelle marche aussi).
  • Cocher Let DustBuilder generate a SSH etctec. (Il créé pour vous une clée SSH)
  • Ensuite Cocher :
    • Replace Xiaomi adbd etc
    • Preinstall Valetudo 0.6 (OU RE 0.9.8 pour vlutedo Re)
    • Preinstall Nano texteditor etc
    • Fixresets patch etc
  • Sélectionner votre version de Robot (S5 ver 2008 pour moi)
  • Puis valider le Captcha et cliquer sur Create Job.

Vous allez recevoir dans un premier temps un mail expliquant que la génération est en cours (vérifier vos spams)

Il faut attendre environ 5 à 10 minutes pour recevoir deux autres mails dont l’un contient le lien de téléchargement du firmware, le lien de téléchargement de la clé ssh et le code d’extraction de la clé ssh.

:warning: Si vous téléchargez un fichier en .bin il faut changer de navigateur ou d’appareil (croyez moi :sweat_smile:) car vous devez avoir un .pkg.

Nous avons les fichiers nécessaires.

Installer les dépendances.

Pour pouvoir envoyer le firmware vers le robot, plusieurs outils sont nécessaires. Ne vous inquiétez pas, si des outils sont déjà installés, ils seront ignorés.

Commençons par les outils bash, openssh, ccrypt,sed, dos2unix:

  • Open-ssh : Déjà installé sur Raspberry Pi il vous suffit seulement de l’activer via raspi-config,
  • Pour les autres outils, taper cette commande dans un terminal :
    sudo apt-get install bash ccrypt sed dos2unix

Puis les outils python3 python3-pip python3-venv avec la commande suivante:
sudo apt-get install python3 python3-pip python3-venv

Création de l’environnement

Taper ces commandes dans un terminal :

cd ~
mkdir flasher
cd flasher
python3 -m venv venv
source venv/bin/activate
pip3 install wheel
pip3 install python-miio

L’environnement est maintenant installé, ne fermez pas la fenêtre du terminal, nous allons devoir passer d’autres commandes.

Transfert vers le robot :

Suite à l’étape de Réinitialisation du robot, le robot est en attente de configuration et à créé un réseau wifi.

Connectez vous au réseau de votre aspirateur (pour moi roborock.vacuum.s5) (déconnectez vous de tous les autres réseaux, attention de ne pas avoir de prise ethernet de branchée)



Taper cette première commande qui permet d’afficher tous les matériels sur les réseaux avec leurs token. Récupérer le votre.
mirobo --debug discover --handshake true

Avec la commande suivante vous installez le nouveau firmware.
mirobo --ip 192.168.8.1 --token XXXXXXXXXXXXXXXX update-firmware --ip YOUR_IP_ADDRESS path/to/built/image.pkg

  • 192.168.8.1 correspond a l’adresse de votre robot aspirateur.
  • YOUR_IP_ADRESS correspond a l’adresse de votre machine (raspberry pi ici)

Attendez et dés que le réseau de votre aspirateur est de nouveau disponible connectez vous dessus et allez sur 192.168.8.1 pour vous retrouver sur l’interface web de Valutedo.

Configuration du Wi-Fi

Connectez vous à l’interface puis dans le menu hamburger en haut a gauche, sélectionner settings puis Wifi.
Rentrer vos informations de connexions dans la partie basse.

ValutedoSettingsWifiConf
Redemarrer votre robot.
Vous pouvez maintenant vous reconnecter à votre réseau WiFi et vous connecter cette fois à la nouvelle adresse du robot.

Interface en français.

Allez sur Vacuum Robot Overview puis récupérer le fichier correspondant à votre robot dans la colonne Soundfiles.

Puis dans l’interface Web de votre Aspirateur dans settings puis sound & voice en bas, importer votre fichier langue.
ValutedoSettingsSoudVoice

Intégration à Home Assistant.

Nous voici dans la partie intéressante.
Le robot utilise le protocole MQTT, donc il va falloir installer un broker MQTT si ce n’est pas déjà fait.

Puis allez dans settings puis MQTT

Partie MQTT Connection.

  • Cocher enable,
  • Entrer votre serveur (IP de Home Assistant si Brocker Integré),
  • Port 1883 par défaut.
  • Username et password (de l’utilisateur MQTT)

Si vous utilisez le chiffrement activer SSL/TLS puis les différents certificats.

Partie MQTT Settings.

  • identifier : nom de votre robot sur le réseaux,
    Le reste par défaut suffit.
    Valider vos réglages avec Save MQTT configuration.

Dans votre Home Assistant ConfigurationIntégrationMQTT vous devriez voir votre aspirateur.
(Peut apparaître dans le discovery dans Notifications en détection automatique.)

Interface Lovelace.

Interface de contrôle

Nous allons utiliser une carte personnalisé Vacuum Card qui se trouve dans HACS.
Rendez vous dans HACS puis dans Front End et chercher Vacuun Card, installez la, puis redémarrer Home Assistant.
ValetudoHACSVacuunCard.

Dans votre interface Lovelace ajouter une carte. Vous devriez avoir la carte Vacuum Carte.
ValetudoCartePersonlisé

Sélectionner votre entité correspondant au robot puis enregistrer.
Vous pouvez a présent commander votre robot aspirateur.

Maps.

Ajoutons la carte faite par le robot.
Pour cela toujours pareil direction HACS puis dans Front End et chercher Valutedo Map Card, installez la.
ValetudoHACSMapCard

Maintenant il va falloir ajouter dans configuration.yaml ou sensors.yaml en fonction de votre gestion du fichier de configuration les lignes suivantes.

sensor:
  - platform: mqtt
    state_topic: "valetudo/rockrobo/state"
    json_attributes_topic: "valetudo/rockrobo/map_data"
    name: xiaomi_map
    value_template: 'OK'

Redemrrer votre Home Assistant.

Dans Aperçus ajouter une nouvelle carte et sélectionner Manuel puis rentrer le code suivant.

type: 'custom:valetudo-map-card'
entity: sensor.xiaomi_map
rotate: 0
crop:
  top: 0
  bottom: 0
  left: 0
  right: 0
min_height: 0
title: Carte RDC

Vous devez vous retrouver avec une carte comme ci-dessous.
ValetudoMapCarte

To Do List
N’hésitez pas à participer dans les commentaires on ajoutera au tutoriel.

  • Différence rapide entre valetudo et valetudo re
  • Accès ssh
  • Mise a jour ssh
  • Carte de contrôle avec accès au zone directement
  • Montrer comment ajouter des zones où points.
  • Cliquer sur la carte pour envoyer sur une zone.

Merci à @Clemalex @Duncan-Valleix pour leurs aides sur le tuto.

MAJ :
21/10/2020 : Suppression du pré-requis Token.

4 « J'aime »

Bonjour,

Si vous rencontrez des problèmes pour récupérer votre Token il existe cette application sous windows. Il suffit de se connecter en wifi sur le point d’accès de l’aspi après la réinitialisation.

Token Windows

Par contre une question comment faire pour que l’aspi apparaisse dans appareil. Moi je l’ai uniquement dans entites.



1 « J'aime »

Salut moi je l’ai dans appareil et entité.

Merci pour ton retour. Donc J ai un problème de paramétrage de mon mqtt.

Tu peux me partager ta config, j’utilise mosquito intégrer à Hassio.

la config de l’addon MQTT ?

logins:
  - username: username        
    password: password
anonymous: false
customize:
  active: false
  folder: mosquitto
certfile: fullchain.pem
keyfile: privkey.pem
require_certificate: false

Rien dans mon configuration.yaml

Petite question :
Est-ce que l’application flolevac fonctionne toujours suite au root ?

j’ai vérifié, j’ai les même paramètre.

Je ne comprends pas ce qui ne va pas. Ensuite j’ai une intégration automatique de MQTT.

Salut, suite à notre conversation @McFly et aussi mon envie de bidouillé le fichier config, j’ai voulu me connecté en SSH sur mon robot (le mien étant un Gen1 sur le firmware ValetudoRE et comme base le firmware 4018), bon après quelque galère, la cle ssh ne fonctionnant pas, le mdp root ne fonctionnant pas non plus j’ai lache l’affaire et aujourd’hui j’ai voulu retenté, avec la cle ssh impossible avec une fraichement importé impossible aussi et je me suis souvenue que le firmware ValetudoRE active par-défaut la connexion par MDP via root, le MDP en question est cleaner et la miracle sa fonctionne donc je me retrouve connecté en SSH a mon robot, il me donne gracieusement tout les identifiant nécessaire à sont bon fonctionnement
photo si dessous

ensuite j’ai lu précédemment que pour connecté l’application FloleVAC au robot il fallait un DID, donc ayant obtenu un DID lors de la connexion je me suis dit pourquoi ne pas essayé.

la page de connexion au robot, en config manuelle

la page d’accueil

et la page des stats

c’est tout se que j’ai réussi a avoir avec l’application, ne pas oublié que je suis sur le firmware ValetudoRE peut etre que le firmware Valetudo fonctionne mieux avec, sachant que avec Valetudo j’arrive a avoir la map via MQTT et pas avec ValetudoRE.
petite dédicace pour toi @Clemalex

1 « J'aime »

il ne reste plus qu’ @McFly d’essayer car lui est en Valetudo et avec FloleVac pour savoir si on peux avoir la carte.

Je suis tenace avec la carte car sinon, comment faire pour définir des zones dans des scripts HA ?

@McFly et @Duncan-Valleix : Y a t’il un moyen de retourner vers un firmware stock ?

:rofl:

Tu l’as déjà fait ?

et toi @McFly

non je n’ai jamais testé, par contre le Hard-Reset si plusieurs fois.

Oui je l’avais vu :wink:

Ce que je demande, c’est que actuellement en firmware officiel, j’utilise flolevac pour obtenir les coordonnées de zone ou de cible.

Du coup, un fois passé root, et avec le dernier commentaire de @Duncan-Valleix et de ce qui marche (avec une version RE) dans flolevac, j’ai l’impression que l’on ne peux plus accéder à la carte…

Du coup la question est : Une fois passé root, comment obtenir les coordonnées d’une zone ?

@McFly @Duncan-Valleix

critère pour le prochain aspi, sois il est possible de le bidouille avec valetudo, sois il a la reconnaissance des objet et surtout des crotte :smiley:

oui tu l’auras, voici quelque statuts remonté @McFly @Clemalex


image
image
image

1 « J'aime »

Pas encore fait dans le tutoriel désolé lol

1 « J'aime »

et pourquoi pas ça :

et vous la cachez quand le robot n’est pas sur son dock pour afficher la carte réelle ?

je sors → [ ]

Retrouvée :

C’était sur Discord. Suivant l’état de mon input_select (j’avais pris un au pif), le graph n’affiche pas la même période… Mais en fait ce sont 2 cartes conditions qui pour l’un s’affiche quand le input_select==choix1 et une autre carte qui s’affiche quand ==choix 2…

Mais avec la rapidité d’affichage, bein ca donne l’impression d’avoir une seule carte…

chrome-capture

PS: j’avais oublié de modifier le titre du graph pour l’exemple

2 « J'aime »

@McFly Je viens de voir que dans les pré-requis, il n’est pas nécessaire de parler du token car tu explique la methode de de récupération (et de toute façon, si tu as le token, vu qu’on fait un reset, il va probablement changer)

1 « J'aime »

Article modifié merci pour l’info

1 « J'aime »

Voici ma config Node Red. Je suis en « VALETUDO RE »

Lancement automatique le Lundi/Mecredi/Vendredi à 16h00.

Notification de fin avec le temps et le nombre de m² aspiré. La notification se déclenche uniquement si un minimum de 20m² est fait car mon fils de 1an s’amuse à le lancer de temps en temps.

Notification pour vider le bac à poussière quand je rentre ou que je suis présent à la maison. Je suis partie sur 3 passages pour le vider. Il faut répondre à la notification soit « C’est fait » le compteur repart à zéro soit « Pas maintenant » une nouvelle notification est renvoyé dans 15min.

Notification pour les consommable. Même procédé que le bac il faut répondre à la notification. Si ok cela reset le compteur via command MQTT.
Il faut pour cela créer 4 sensors je suis partie sur le total passé et non le reste pour éviter les fausses notifs.

- platform: template
  sensors:
    # Brosse Principale
    vacuum_cleanmainbrush:
      friendly_name: "Brosse Principale"
      unit_of_measurement: "h"
      value_template: >-
        {{ (300-float(state_attr('vacuum.xiaomi_vacuum_cleaner', 'mainBrush'))) | round(0) }}

    # Filtre
    vacuum_cleanfilter:
      friendly_name: "Filtre"
      unit_of_measurement: "h"
      value_template: >-
        {{ (150-float(state_attr('vacuum.xiaomi_vacuum_cleaner', 'filter'))) | round(0) }}

    # Brosse Latérale
    vacuum_cleansidebrush:
      friendly_name: "Brosse Latérale"
      unit_of_measurement: "h"
      value_template: >-
        {{ (200-float(state_attr('vacuum.xiaomi_vacuum_cleaner', 'sideBrush'))) | round(0) }}

    # Capteurs
    vacuum_sensordirtyleft:
      friendly_name: "Capteurs"
      unit_of_measurement: "h"
      value_template: >-
        {{ (30-float(state_attr('vacuum.xiaomi_vacuum_cleaner', 'sensor'))) | round(0) }}

[{"id":"bd8f8e8.c53177","type":"tab","label":"Aspirateur","disabled":false,"info":""},{"id":"c7a80ad7.6f8648","type":"comment","z":"bd8f8e8.c53177","name":"[Aspirateur] Nettoyage semaine","info":"","x":150,"y":40,"wires":[]},{"id":"f13e3869.4d5a68","type":"inject","z":"bd8f8e8.c53177","name":"16h00","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"00 16 * * 1,3,5","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":90,"y":120,"wires":[["4b5e4e1c.e3775"]]},{"id":"4b5e4e1c.e3775","type":"api-call-service","z":"bd8f8e8.c53177","name":"Démarrage","server":"a8c279c8.be8be8","version":1,"debugenabled":false,"service_domain":"vacuum","service":"start","entityId":"vacuum.xiaomi_vacuum_cleaner","data":"","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":270,"y":120,"wires":[["2891418e.80a02e"]]},{"id":"2891418e.80a02e","type":"debug","z":"bd8f8e8.c53177","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":460,"y":120,"wires":[]},{"id":"9bd42e9f.638fa","type":"comment","z":"bd8f8e8.c53177","name":"[Aspirateur] Notification Fin de Nettoyage","info":"","x":180,"y":180,"wires":[]},{"id":"c7a92e8c.3675b","type":"api-call-service","z":"bd8f8e8.c53177","name":"Notication Aurélien","server":"a8c279c8.be8be8","version":1,"debugenabled":false,"service_domain":"notify","service":"mobile_app_smartphone_aurelien","entityId":"","data":"{\"title\":\"Aspirateur\",\"message\":\"J'ai fini d'aspirer {{ states.vacuum.xiaomi_vacuum_cleaner.attributes['currentCleanArea'] }} m² en {{ states.vacuum.xiaomi_vacuum_cleaner.attributes['currentCleanTime'] |int|multiply(60)|timestamp_custom('%H:%M:%S', false) }}\"}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":true,"x":630,"y":220,"wires":[["bea8b440.c0f328"]]},{"id":"7f90cea7.d1e1e","type":"api-call-service","z":"bd8f8e8.c53177","name":"Notication Siham","server":"a8c279c8.be8be8","version":1,"debugenabled":false,"service_domain":"notify","service":"mobile_app_smartphone_siham","entityId":"","data":"{\"title\":\"Aspirateur\",\"message\":\"J'ai fini d'aspirer {{ states.vacuum.xiaomi_vacuum_cleaner.attributes['currentCleanArea'] }} m² en {{ states.vacuum.xiaomi_vacuum_cleaner.attributes['currentCleanTime'] |int|multiply(60)|timestamp_custom('%H:%M:%S', false) }}\"}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":true,"x":630,"y":320,"wires":[["bea8b440.c0f328"]]},{"id":"bea8b440.c0f328","type":"debug","z":"bd8f8e8.c53177","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":830,"y":280,"wires":[]},{"id":"d012e6a.0d7c418","type":"server-state-changed","z":"bd8f8e8.c53177","name":"Brosse latérale avant 200h","server":"a8c279c8.be8be8","version":1,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.vacuum_cleansidebrush","entityidfiltertype":"exact","outputinitially":false,"state_type":"num","haltifstate":"199","halt_if_type":"num","halt_if_compare":"gte","outputs":2,"output_only_on_state_change":true,"for":"","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"x":130,"y":880,"wires":[["ed8af3ba.10a9d"],[]]},{"id":"bfa33d2d.a7576","type":"server-state-changed","z":"bd8f8e8.c53177","name":"Remplacement du filtre avant 150h","server":"a8c279c8.be8be8","version":1,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.vacuum_cleanfilter","entityidfiltertype":"exact","outputinitially":false,"state_type":"num","haltifstate":"149","halt_if_type":"num","halt_if_compare":"gte","outputs":2,"output_only_on_state_change":true,"for":"","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"x":160,"y":1000,"wires":[["ed8af3ba.10a9d"],[]]},{"id":"dd32dbf.1131728","type":"server-state-changed","z":"bd8f8e8.c53177","name":"remplacement brosse principale avant 300h","server":"a8c279c8.be8be8","version":1,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.vacuum_cleanmainbrush","entityidfiltertype":"exact","outputinitially":false,"state_type":"num","haltifstate":"299","halt_if_type":"num","halt_if_compare":"gte","outputs":2,"output_only_on_state_change":true,"for":"","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"x":190,"y":820,"wires":[["ed8af3ba.10a9d"],[]]},{"id":"381b3915.9ec636","type":"server-state-changed","z":"bd8f8e8.c53177","name":"Nettoyage des capteurs","server":"a8c279c8.be8be8","version":1,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.vacuum_sensordirtyleft","entityidfiltertype":"exact","outputinitially":false,"state_type":"num","haltifstate":"29","halt_if_type":"num","halt_if_compare":"gte","outputs":2,"output_only_on_state_change":true,"for":"","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"x":120,"y":940,"wires":[["ed8af3ba.10a9d"],[]]},{"id":"4d5be847.405ee8","type":"comment","z":"bd8f8e8.c53177","name":"[Aspirateur] Notification Maintenance","info":"","x":160,"y":340,"wires":[]},{"id":"6af22337.a497dc","type":"function","z":"bd8f8e8.c53177","name":"msg object","func":"msg.decrement = 1;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":610,"y":380,"wires":[["75246cdb.0e29e4"]]},{"id":"75246cdb.0e29e4","type":"counter","z":"bd8f8e8.c53177","name":"Compteur","init":"1","step":1,"lower":null,"upper":null,"mode":"increment","outputs":"1","x":780,"y":380,"wires":[["3c295d54.1896b2"]]},{"id":"3c295d54.1896b2","type":"function","z":"bd8f8e8.c53177","name":"Après nettoyage -1","func":"msg.decrement = 1;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":970,"y":380,"wires":[["636dbc45.bf7c64"]]},{"id":"636dbc45.bf7c64","type":"counter","z":"bd8f8e8.c53177","name":"Compteur","init":"3","step":1,"lower":null,"upper":null,"mode":"increment","outputs":"1","x":1160,"y":380,"wires":[["84210305.d101f"]]},{"id":"84210305.d101f","type":"switch","z":"bd8f8e8.c53177","name":"","property":"count","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":1310,"y":380,"wires":[["535997d3.9969c8"]]},{"id":"535997d3.9969c8","type":"ha-wait-until","z":"bd8f8e8.c53177","name":"Aurélien Présent","server":"a8c279c8.be8be8","outputs":1,"entityId":"person.aurelien","entityIdFilterType":"exact","property":"state","comparator":"is","value":"home","valueType":"str","timeout":0,"timeoutType":"num","timeoutUnits":"seconds","entityLocation":"payload","entityLocationType":"msg","checkCurrentState":true,"blockInputOverrides":true,"x":1480,"y":380,"wires":[["ce2d69a8.13ad18"]]},{"id":"ce2d69a8.13ad18","type":"delay","z":"bd8f8e8.c53177","name":"","pauseType":"delay","timeout":"30","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":1660,"y":380,"wires":[["e08d0352.d19e1"]]},{"id":"e08d0352.d19e1","type":"api-call-service","z":"bd8f8e8.c53177","name":"Notication Aurélien","server":"a8c279c8.be8be8","version":1,"debugenabled":false,"service_domain":"notify","service":"mobile_app_smartphone_aurelien","entityId":"","data":"{\"title\":\"Aspirateur\",\"message\":\"Il faut vider le bac à poussière\",\"data\":{\"actions\":[{\"action\":\"bacvide_ok\",\"title\":\"C'est fait\"},{\"action\":\"bacvide_nok\",\"title\":\"Pas maintenant\"}]}}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":1850,"y":380,"wires":[[]]},{"id":"c88bdefa.8584c","type":"server-events","z":"bd8f8e8.c53177","name":"Réponse notification","server":"a8c279c8.be8be8","event_type":"mobile_app_notification_action","exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"waitForRunning":true,"x":510,"y":640,"wires":[["2c7e830b.18b24c"]]},{"id":"2c7e830b.18b24c","type":"switch","z":"bd8f8e8.c53177","name":"","property":"payload.event.action","propertyType":"msg","rules":[{"t":"eq","v":"bacvide_ok","vt":"str"},{"t":"eq","v":"brossep_ok","vt":"str"},{"t":"eq","v":"brossel_ok","vt":"str"},{"t":"eq","v":"capteur_ok","vt":"str"},{"t":"eq","v":"filtre_ok","vt":"str"},{"t":"eq","v":"bacvide_nok","vt":"str"},{"t":"eq","v":"brossep_nok","vt":"str"},{"t":"eq","v":"brossel_nok","vt":"str"},{"t":"eq","v":"capteur_nok","vt":"str"},{"t":"eq","v":"filtre_nok","vt":"str"}],"checkall":"true","repair":false,"outputs":10,"x":690,"y":640,"wires":[["1b9b645b.ad157c"],["c9c026ba.bc57d8"],["c76a26b3.fd6a58"],["5e317c42.8bf714"],["40167e9e.38dd6"],["4cb67a4f.dd3f74"],["8f6e606a.5c3fa"],["1ea6257b.c4ad9b"],["5672739f.2e519c"],["b33e11f8.2188c"]]},{"id":"8e9736f9.2d0fe8","type":"api-call-service","z":"bd8f8e8.c53177","name":"Notication Aurélien","server":"a8c279c8.be8be8","version":1,"debugenabled":false,"service_domain":"notify","service":"mobile_app_smartphone_aurelien","entityId":"","data":"{\"title\":\"Aspirateur\",\"message\":\"{{{maintenance}}}\",\"data\":{\"actions\":[{\"action\":\"{{action1}}\",\"title\":\"{{{title1}}}\"},{\"action\":\"{{action2}}\",\"title\":\"{{title2}}\"}]}}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":1370,"y":700,"wires":[[]]},{"id":"4aabc381.22272c","type":"delay","z":"bd8f8e8.c53177","name":"","pauseType":"delay","timeout":"15","timeoutUnits":"minutes","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":1170,"y":700,"wires":[["8e9736f9.2d0fe8"]]},{"id":"1b9b645b.ad157c","type":"function","z":"bd8f8e8.c53177","name":"Réinitialiser compteur","func":"msg.reset = true;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":959,"y":442,"wires":[["636dbc45.bf7c64"]]},{"id":"f1c8505e.3fd71","type":"change","z":"bd8f8e8.c53177","name":"Brosse latérale","rules":[{"t":"set","p":"maintenance","pt":"msg","to":"Prévoir changement de la brosse latérale","tot":"str"},{"t":"set","p":"title1","pt":"msg","to":"C'est fait","tot":"str"},{"t":"set","p":"action1","pt":"msg","to":"brossel_ok","tot":"str"},{"t":"set","p":"title2","pt":"msg","to":"Pas maintenant","tot":"str"},{"t":"set","p":"action2","pt":"msg","to":"brossel_nok","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":620,"y":880,"wires":[["cfb85d1d.9778a"]]},{"id":"ed8af3ba.10a9d","type":"switch","z":"bd8f8e8.c53177","name":"","property":"data.entity_id","propertyType":"msg","rules":[{"t":"eq","v":"sensor.vacuum_cleanmainbrush","vt":"str"},{"t":"eq","v":"sensor.vacuum_cleansidebrush","vt":"str"},{"t":"eq","v":"sensor.vacuum_sensordirtyleft","vt":"str"},{"t":"eq","v":"sensor.vacuum_cleanfilter","vt":"str"}],"checkall":"true","repair":false,"outputs":4,"x":450,"y":900,"wires":[["82c21475.bd8578"],["f1c8505e.3fd71"],["3b1065d0.0ded7a"],["5e766134.5d2ae"]]},{"id":"5e766134.5d2ae","type":"change","z":"bd8f8e8.c53177","name":"Filtre","rules":[{"t":"set","p":"maintenance","pt":"msg","to":"Prévoir changement du filtre","tot":"str"},{"t":"set","p":"title1","pt":"msg","to":"C'est fait","tot":"str"},{"t":"set","p":"action1","pt":"msg","to":"filtre_ok","tot":"str"},{"t":"set","p":"title2","pt":"msg","to":"Pas maintenant","tot":"str"},{"t":"set","p":"action2","pt":"msg","to":"filtre_nok","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":590,"y":1000,"wires":[["cfb85d1d.9778a"]]},{"id":"82c21475.bd8578","type":"change","z":"bd8f8e8.c53177","name":"Brosse principale","rules":[{"t":"set","p":"maintenance","pt":"msg","to":"Prévoir changement de la brosse principale","tot":"str"},{"t":"set","p":"action1","pt":"msg","to":"brossep_ok","tot":"str"},{"t":"set","p":"title1","pt":"msg","to":"C'est fait","tot":"str"},{"t":"set","p":"action2","pt":"msg","to":"brossep_nok","tot":"str"},{"t":"set","p":"title2","pt":"msg","to":"Pas maintenant","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":630,"y":820,"wires":[["cfb85d1d.9778a"]]},{"id":"3b1065d0.0ded7a","type":"change","z":"bd8f8e8.c53177","name":"Capteurs","rules":[{"t":"set","p":"maintenance","pt":"msg","to":"Nettoyer les capteurs","tot":"str"},{"t":"set","p":"title1","pt":"msg","to":"C'est fait","tot":"str"},{"t":"set","p":"action1","pt":"msg","to":"capteur_ok","tot":"str"},{"t":"set","p":"title2","pt":"msg","to":"Pas maintenant","tot":"str"},{"t":"set","p":"action2","pt":"msg","to":"capteur_nok","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":940,"wires":[["cfb85d1d.9778a"]]},{"id":"b4506e92.30a5f","type":"api-render-template","z":"bd8f8e8.c53177","name":"Minimum 20m²","server":"a8c279c8.be8be8","template":"{{ states.vacuum.xiaomi_vacuum_cleaner.attributes['currentCleanArea'] | float > 20 }}","resultsLocation":"payload","resultsLocationType":"msg","templateLocation":"template","templateLocationType":"msg","x":280,"y":280,"wires":[["60ec8a84.2e67a4"]]},{"id":"60ec8a84.2e67a4","type":"switch","z":"bd8f8e8.c53177","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"True","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":450,"y":280,"wires":[["c7a92e8c.3675b","7f90cea7.d1e1e","6af22337.a497dc"]]},{"id":"9041d36f.d3fc5","type":"api-call-service","z":"bd8f8e8.c53177","name":"Notication Aurélien","server":"a8c279c8.be8be8","version":1,"debugenabled":false,"service_domain":"notify","service":"mobile_app_smartphone_aurelien","entityId":"","data":"{\"title\":\"Aspirateur\",\"message\":\"{{{maintenance}}}\",\"data\":{\"actions\":[{\"action\":\"{{action1}}\",\"title\":\"{{{title1}}}\"},{\"action\":\"{{action2}}\",\"title\":\"{{title2}}\"}]}}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":1210,"y":900,"wires":[[]]},{"id":"cfb85d1d.9778a","type":"ha-wait-until","z":"bd8f8e8.c53177","name":"Aurélien Présent","server":"a8c279c8.be8be8","outputs":1,"entityId":"person.aurelien","entityIdFilterType":"exact","property":"state","comparator":"is","value":"home","valueType":"str","timeout":0,"timeoutType":"num","timeoutUnits":"seconds","entityLocation":"payload","entityLocationType":"msg","checkCurrentState":true,"blockInputOverrides":true,"x":840,"y":900,"wires":[["3dffc2c4.cec72e"]]},{"id":"3dffc2c4.cec72e","type":"delay","z":"bd8f8e8.c53177","name":"","pauseType":"delay","timeout":"30","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":1020,"y":900,"wires":[["9041d36f.d3fc5"]]},{"id":"8f6e606a.5c3fa","type":"change","z":"bd8f8e8.c53177","name":"Brosse principale","rules":[{"t":"set","p":"maintenance","pt":"msg","to":"Prévoir changement de la brosse principale","tot":"str"},{"t":"set","p":"action1","pt":"msg","to":"brossep_ok","tot":"str"},{"t":"set","p":"title1","pt":"msg","to":"C'est fait","tot":"str"},{"t":"set","p":"action2","pt":"msg","to":"brossep_nok","tot":"str"},{"t":"set","p":"title2","pt":"msg","to":"Pas maintenant","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":932,"y":669,"wires":[["4aabc381.22272c"]]},{"id":"1ea6257b.c4ad9b","type":"change","z":"bd8f8e8.c53177","name":"Brosse latérale","rules":[{"t":"set","p":"maintenance","pt":"msg","to":"Prévoir changement de la brosse latérale","tot":"str"},{"t":"set","p":"title1","pt":"msg","to":"C'est fait","tot":"str"},{"t":"set","p":"action1","pt":"msg","to":"brossel_ok","tot":"str"},{"t":"set","p":"title2","pt":"msg","to":"Pas maintenant","tot":"str"},{"t":"set","p":"action2","pt":"msg","to":"brossel_nok","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":922,"y":700,"wires":[["4aabc381.22272c"]]},{"id":"5672739f.2e519c","type":"change","z":"bd8f8e8.c53177","name":"Capteurs","rules":[{"t":"set","p":"maintenance","pt":"msg","to":"Nettoyer les capteurs","tot":"str"},{"t":"set","p":"title1","pt":"msg","to":"C'est fait","tot":"str"},{"t":"set","p":"action1","pt":"msg","to":"capteur_ok","tot":"str"},{"t":"set","p":"title2","pt":"msg","to":"Pas maintenant","tot":"str"},{"t":"set","p":"action2","pt":"msg","to":"capteur_nok","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":902,"y":731,"wires":[["4aabc381.22272c"]]},{"id":"b33e11f8.2188c","type":"change","z":"bd8f8e8.c53177","name":"Filtre","rules":[{"t":"set","p":"maintenance","pt":"msg","to":"Prévoir changement du filtre","tot":"str"},{"t":"set","p":"title1","pt":"msg","to":"C'est fait","tot":"str"},{"t":"set","p":"action1","pt":"msg","to":"filtre_ok","tot":"str"},{"t":"set","p":"title2","pt":"msg","to":"Pas maintenant","tot":"str"},{"t":"set","p":"action2","pt":"msg","to":"filtre_nok","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":892,"y":762,"wires":[["4aabc381.22272c"]]},{"id":"4cb67a4f.dd3f74","type":"change","z":"bd8f8e8.c53177","name":"Bac à poussière","rules":[{"t":"set","p":"maintenance","pt":"msg","to":"Prévoir changement de la brosse principale","tot":"str"},{"t":"set","p":"action1","pt":"msg","to":"bacvide_ok","tot":"str"},{"t":"set","p":"title1","pt":"msg","to":"C'est fait","tot":"str"},{"t":"set","p":"action2","pt":"msg","to":"bacvide_nok","tot":"str"},{"t":"set","p":"title2","pt":"msg","to":"Pas maintenant","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":922,"y":638,"wires":[["4aabc381.22272c"]]},{"id":"fb4170f.8e3d59","type":"trigger-state","z":"bd8f8e8.c53177","name":"Aspirateur","server":"a8c279c8.be8be8","exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityid":"vacuum.xiaomi_vacuum_cleaner","entityidfiltertype":"exact","debugenabled":false,"constraints":[{"targetType":"this_entity","targetValue":"","propertyType":"current_state","comparatorType":"is","comparatorValueDatatype":"str","comparatorValue":"returning","propertyValue":"new_state.state"}],"outputs":3,"customoutputs":[{"messageType":"default","messageValue":"","messageValueType":"json","comparatorPropertyType":"previous_state","comparatorType":"is","comparatorValue":"cleaning","comparatorValueDataType":"str","comparatorPropertyValue":"old_state.state"}],"outputinitially":false,"state_type":"str","x":90,"y":280,"wires":[[],[],["b4506e92.30a5f"]]},{"id":"6488b784.44bc38","type":"mqtt out","z":"bd8f8e8.c53177","name":"Xiaomi Vacuum Cleaner","topic":"valetudo/xiaomi_vacuum_cleaner/custom_command","qos":"0","retain":"","broker":"5ba105b9.e9681c","x":1210,"y":560,"wires":[]},{"id":"5e317c42.8bf714","type":"change","z":"bd8f8e8.c53177","name":"Reset capteurs","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"command\":\"reset_consumable\",\"consumable\":\"sensor_dirty_time\"}","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":920,"y":576,"wires":[["6488b784.44bc38"]]},{"id":"c9c026ba.bc57d8","type":"change","z":"bd8f8e8.c53177","name":"Reset brosse principale","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"command\":\"reset_consumable\",\"consumable\":\"main_brush_work_time\"}","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":950,"y":514,"wires":[["6488b784.44bc38"]]},{"id":"c76a26b3.fd6a58","type":"change","z":"bd8f8e8.c53177","name":"Reset brosse latérale","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"command\":\"reset_consumable\",\"consumable\":\"side_brush_work_time\"}","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":940,"y":545,"wires":[["6488b784.44bc38"]]},{"id":"40167e9e.38dd6","type":"change","z":"bd8f8e8.c53177","name":"Reset filtre","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"command\":\"reset_consumable\",\"consumable\":\"filter_work_time\"}","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":910,"y":607,"wires":[["6488b784.44bc38"]]},{"id":"a8c279c8.be8be8","type":"server","z":"","name":"Home Assistant","legacy":false,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true},{"id":"5ba105b9.e9681c","type":"mqtt-broker","z":"","name":"mosquitto","broker":"192.168.2.195","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]
1 « J'aime »