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

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 »