Fil de discussion du [TUTO] Utiliser Valetudo RE et le contrôler via MQTT

Yes je veux bien s’il te plait.
Par contre sur mihome l’aspi me prevenait quand il fallait vider le bac. Je n’ai pas l’impression que ce soit le cas avec Valetudo.

Pour le second point, j’ai fait un scénario qui gère cela et je n’ai jamais rencontré de message avec mihome comme quoi il fallait vider le bac à poussière

Alors en étant basé sur valetudo/rockrobo/attributes{valetudo_state}{name}

Idle (Arrêt)/ Charging (En charge) / Room cleaning (Nettoyage de pièce) / Cleaning (Nettoyage) / Spot cleaning (Nettoyage spot) / Returning to dock (Retour à la base) / Going to target (Aller à la cible) / Paused (En pause) / Charger disconnected (Chargeur déconnecté) / Docking (je ne sais pas trop à quoi il sert, il intervient alors que mon aspirateur est en charge et que j’éteins le chargeur)

Cliff sensors alarm, carry the robot to different place (les roues sont dans le vide, il faut déplacer l’aspirateur) / Dust collector missing or bad filter (bac à poussière manquant ou problème avec le filtre)

Merci
Ça me disait pas exactement de vider le bac mais de nettoyer le filtre alirs que le timer était bon. Je pense qu’il calculait la pression d’aspiration et qu’il savait que c’était bouché.

Bizarre j’ai jamais eu ça non plus :thinking:

C’est que c’est très sale chez moi alors :sweat_smile::sweat_smile::sweat_smile:
Je crois que c’était du genre: veuillez nettoyer le bac à poussière.

Hello,

En détaillant les étapes.

1 - Avoir créer les zones sur valetudo et les avoir récupérer sur jeedom via mqtt et avoir récupérer les commande pour régler la puissance

2 - Ensuite, il faut créer un virtuel et reprendre les commandes que l’on souhaite intégrés à notre virtuel. Pour les zones, j’ai crée une commande action de type liste :

Cela va créé une commande info, dans mon cas Zone aspiration

Dans les options mettres toutes les zones que vous souhaiter voir dans votre liste, le format est le suivant :

valeur | affichage;

Exemple pour moi : bureau|bureau;chambre|chambre;couloir1|couloir1;couloir2|couloir2;cuisine|cuisine;dressing|dressing;entrée|entrée;salle de bain|salle de bain;salon|salon;

Pour la puissance, j’ai crée une commande action de type curseur :

Cela va créé une commande info, dans mon cas Puissance

Dans les options mettre en minimum 0 et en maximum 4 (si vous avez 5 niveau de puissance) ou 3 en max (si vous avez 4 niveau de puissance)

Vous devriez avoir un widget qui ressemble plus ou moins à ça :

image

3 - Maintenant, il faut créer un scénario qui va nous permettre de déclencher une action quand on choisit une zone ou une puissance

Le mode du scénario est provoqué et les déclencheurs sont les 2 commandes infos que nous venons de créer, dans mon cas Puissance et Zone aspiration.

Pour le scénario, je me suis fortement inspiré de ce site https://www.ladomopratique.com/zone-aspirateur-robot-dans-jeedom/

  • J’ai commencé par les blocs si/alors pour la puissance. un bloc par puissance qui ressemble à ça :

On compare la valeur du virtuel info Puissance créer plus haut puis on applique l’action depuis la commande récupérer par mqtt. Puis, on stop le scénario.

  • Après un bloc action, qui met en pause l’aspirateur si celui-ci n’est pas sur le dock


    J’ai mit une pause de 5s car j’ai remarqué que sans pause parfois la commande suivante ne passait pas

  • Ensuite un bloc code pour les fonctions :

//fonctions



    //On vérifie si le scénario a été provoqué par l’api (HTTP)
    $trigger = $scenario->getRealTrigger();
    if ($trigger=='api'){
        //On récupère le tag zone
        $cmd = $scenario->getTags();
        $zone = $cmd['#[Aspirateur][Roborock][Zone apsiration]#'];
      //si contient table
          if(stripos($zone,"table")!== FALSE) {
    $zone = "table";$scenario->setLog($zone);
    } else {
    $zone=substr($zone,strrpos($zone,' ')+1);}
        //On récupère le dernier mot du tag
        $zone=substr($zone,strrpos($zone,' ')+1);
    } else {
        //Si ce n’est pas l’api alors on récupère la valeur zone de la commande du virtuel
        $zone = cmd::byString('#[Aspirateur][Roborock][Zone apsiration]#')->execCmd();
    }
    //On met en minuscule
    $zone = strtolower($zone);
    //On mets à jour la variable zone
    $scenario->setData('zone',$zone);

Cela servira surtout pour ajouter le contrôle par google home.

Remplacer #[Aspirateur][Roborock][Zone apsiration]# par le virtuel info créer au point 2

$zone est la variable que nous allons utilisé pour la suite du scénario. La variable se créée automatiquement au premier lancement du scénario

  • Après, on crée autant de bloque Si\Alors que de zones :
    Pour chaque zone nous aurons :

On regarde la valeur de la variable et si elle correspond on continue le scénario sinon cela passe au bloc suivant.

Ensuite, dans le alors, on lance la commande de zone désiré depuis l’équipement mqtt puis on remet la variable zone à aucun (pour éviter que le nettoyage de zone se relance si on modifie la puissance) et on remet l’info du virtuel à Aucun également (car j’ai remarqué que si on relançait le virtuel avec la même valeur que précédemment, la commande n’était pas prise en compte) et pour finir on stop le scénario.

On peut très bien se passer de la variable zone et faire directement une comparaison du virtuel info Zone d’aspiration créé au point 2.

Normalement, votre virtuel devrait être fonctionnel.

Si vous avez des questions, n’hésitez pas. Il y a peut-être moyen de faire plus simple

1 « J'aime »

J’avais effectivement déjà eu un message de ce type avec MiHome (j’avais les voix en Anglais, c’était « please clean the filter »), je ne sais plus si c’était lors du retour au dock, ou lors de l’extraction ou l’insertion du bac à poussière…

Pas encore eu ce type de message depuis ma migration sur Valetudo :slight_smile:

Ah je suis pas fou!!
Pour ma part c’etait au lancement d’un nettoyage et au retour au dock il me semble.

Hello
Existe-t-il un moyen de ne pas avoir la fanfare qui se met en route à l’allumage du robot ?

A mon avis il suffit de trouver ou se situe le fichier audio, après j’avoue qu’il ne me dérange pas car je n’éteint jamais mon robot :wink:

Edit : Trouvé dans /opt/rockrobo/resources/sounds et /mnt/updbuf/opt/rockrobo/resources/sounds/, le fichier s’appelle power_on.wav

Bonjour en effet il faut faire service valetudo restart après avoir modifié le fichier json, peux être faudrait il le mettre dans le post du tuto :slight_smile:

@Ricardo j’aimerais bien reproduire ton widget pour les heure de démarrage et d’arrêt mais je n’y arrive pas, pourrai tu mettre tous le code du widget ? Le format doit être en numérique dans Jmqtt je pense ?

Merci d’avance

Hello @mib68

le voici (Attention pour Jeedom V3) :

<script>
		jeedom.cmd.update['#id#'] = function(_options){
          	    var valeur=parseInt('#state#',10);
          	    var currentDate = new Date(valeur);
                    var week = ['Dim.', 'Lun.', 'Mar.', 'Mer.', 'Jeu.', 'Ven.', 'Sam.'];
          	    //console.log(valeur);
                    $(".cmd[data-cmd_id=#id#] .label#uid#").empty();
                   // Formatage de la jour, date, heure
                   $(".cmd[data-cmd_id=#id#] .label#uid#").append(week[currentDate.getDay()]+' '+currentDate.toLocaleDateString()+' '+currentDate.toLocaleTimeString());
	           $('.cmd[data-cmd_id=#id#]').attr('title','Valeur du '+_options.valueDate+', collectée le '+_options.collectDate);
		}
		jeedom.cmd.update['#id#']({display_value:'#state#',valueDate:'#valueDate#',collectDate:'#collectDate#',alertLevel:'#alertLevel#'});
</script>

Je suis passé en V4 depuis ce week-end et avant de migrer de la V3 à la V4 j’ai cubé tous mes widgets pour ne migrer que l’essentiel.
Il faut que je code de nouveau tous mes widgets perso :crazy_face:
Effectivement dans ce bout de code il manque toutes les balises et le css.

@+

a mince je suis en V4 c’est peut etre pour ca

Hello tout le monde ,

je suis entrain de me faire un widget pour mon roborock.
Par contre, je sèche, j’aimerais changer la fan_speed à chaque clique sur un bouton (les états changent à chaque clic pour revenir au 1er … )

image

en fait, j’aimerais que l’état change lorsqu’on clique sur le ventilateur en haut.

Salut, tu peux faire un scénario qui s’active quand tu appuis sur le bouton.

Le scénario compare la valeur et met la valeur suivante. Par exemple si valeur = medium alors mettre en turbo

1 « J'aime »

Petit souci aujourd’hui avec mon V1 sous Valetudo-RE 0.9.4

Après plusieurs semaines d’utilisation sans souci, l’aspi est resté bloqué par un obstacle, je l’ai « libéré » et il a terminé son nettoyage sans problème.

Par contre, lorsque j’ai vérifié la carte, celle-ci avait tourné de 45°, donc désormais mon nettoyage par zones ne fonctionne plus, l’aspi est complétement perdu :frowning:

J’ai utilisé la fonction « Load Map » pour restaurer la carte sauvegardée. La carte est correcte, mais l’emplacement du chargeur ne l’est pas, du coup, le zoned cleanup ne marche pas non plus.

La procédure de chargement restaure les fichiers valutudo.json, ChargerPos.data et last_map (et fait une copie sous user_map0). Les autres fichiers (StartPos.data, etc, sont supprimés). Le process watchdog est ensuite redémarré.

Vu le nom, je suppose que les coordonnées du dock sont dans le fichier ChargerPos.data
Savez-vous s’il est possible de trouver manuellement les coordonnées à mettre dans ce fichier pour voir si je peux remettre le chargeur à la bonne place ? Le système de coordonnées a l’air différent de celui des zones dans valetudo.json…

Sinon, je referai un nettoyage complet pour refaire une carte propre (et je repositionnerai toutes mes zones :sob:). J’en profiterai pour mettre à jour en 9.5.2…

K.

En lisant ton post je me disais que le plus simple est de relancer un nettoyage complet mais je vois que tu y as pensé :slight_smile:

Par contre, qu’est ce que Watchdog vient faire dans l’affaire ?

Le redémarrage du watchdog force le rechargement des fichiers de configuration depuis /mnt/data/rockrobo. C’est un moyen d’éviter le reboot (mais évidemment le reboot a le même effet).

C’est ce que décrivent les procédures manuelles pour recharger la carte, et c’est ce que fait automatiquement Valetudo-RE lors d’un load-map (pour les curieux : https://github.com/rand256/valetudo/blob/0.9.4/lib/MapManager.js#L119)

K.

ha ok tu ne parles pas du plugin watchdog :slight_smile: