Sélection multi-pièces aspirateur

Bonjour à tous, tout d’abord désolé si le sujet est mal référencé, dans mon idée j’aimerai réaliser un widget mais je ne sais pas trop par quel côté attaquer.

Les faits :
Je dispose d’un robot aspirateur STYJ02M qui fonctionne avec le plugin Xiaomi. Je peux lui demander d’aspirer une pièce particulière avec la commande #[Maison][aspi][Mode Pièces]# suivi du message 0,1,1,14 correspondant à la dite pièce.

Mon souhait :
Créer un widget (ou autre chose ?) me permettant de sélectionner plusieurs pièces puis de lancer la tâche d’aspiration. L’aspirateur enchainerait alors pièce après pièce.
C’est le principe de fonctionnement de l’application Mi home.

Ma piste :
J’imagine créer des variables ou tags pour chaque pièce que je passerai à 1 pour demander l’aspiration de la pièce puis de créer un scénario qui enchainerait les pièces en fonction des variables/tags à 1. À la fin les variables/tags repassent à 0.

Le souci c’est qu’avec 6 pièces cartographiées par l’aspirateur, ça me donne déjà 64 combinaisons possibles, donc le scénario va vite devenir lourd.
Sans compter sur d’autres fonctionnalités que j’aimerai aussi intégrer comme la vitesse d’aspiration et le doublement de la tâche d’aspiration…

Bref, j’ai parcouru beaucoup de littératures sur le community sur ce sujet et sur l’enchainement d’actions mais je n’ai rien trouvé de concluant.

Bj,
Pourquoi pas un virtuel qui reprendrait tes pièces sous forme de switch ON/OFF combiné avec un scénario qui boucle sur chaque pièce:
Si Pièce1=ON >Aspire Pièce1
Si Pièce2=OFF>pas d’action
Si Pièce3=ON>Aspire Pièce3
Il suffirait de rajouter un bouton lancer la séquence pour appeler le scénario

1 « J'aime »

Oui c’est déjà plus simple que ce que j’imaginais, un scénario en cascade qui enchaine les pièces.

Par contre le souci c’est pour l’enchainement des pièces, comment être sûr que l’aspirateur a bien terminé une pièce avant de l’envoyer sur la suivante, en sachant que le temps d’aspiration varie en fonction des obstacles. ( par exemple une chaise mal positionnée peut engendré un obstacle plus ou moins long à contourner par l’aspirateur.)

Je ne pense pas que l’aspirateur ne retourne une information « travail accompli » à la fin d’une pièce.

Pour le coup ne connaissant pas les infos que peut te remonter ton aspirateur, je ne peux pas t’aider de manière précise.
L’ idée qui me vient serait de rajouter une tempo (avec une marge de sécurité pour gérer les obstacles, les retours à la base pour recharge…)
Une autre idée, si tu peux récupérer l’état de ton robot (exemple: en mode aspiration, au repos…), tu conditionne le passage à la pièce suivante sur le statut au repos

Je peux effectivement récupérer l’info lorsque le robot à finis une zone, le statut passe à ‹ Retour à la base ›.
Reste plus qu’à bien écrire le scénario pour bien séquencer les pièces…

juste un petit point de vigilance: le retour à la base peut être causé par une nécessité de recharge du robot. Il faut donc checker le niveau de batterie pour s’assurer que la pièce est bien finie de nettoyer.
Unz alternative serait d’attendre le retour réel sur la base (avec l’évènement qui va bien) avant de lancer le nettoyage de la pièce suivante

Bien vu :wink: !

J’aimerais éviter les allers retours à la base, certaines pièces en sont éloignées…

J’ai créé 2 variables correspondantes à 2 pièces et j’ai commencé un scénario, pour l’instant ça ne marche pas, j’ai l’impression que les taches sont exécutées en même temps et non pas consécutivement…

Que donne les log du scénario?

Si tu crées un virtuel, tu n’as pas besoin de variables pour tes pièces.

Le scénario tel que je le verrai bien (pour une pièce):

Si {Pièce 1] ==1 alors
   Action: lancer le nettoyage
   Wait "Retour à la base"
          Si {Niveau batterie} <= 30% alors
                wait {Niveau batterie} >=90% 
          Fin Si
Fin Si
Si Si {Pièce 2] ==1 alors....(copier / coller)

pour peaufiner, tu peux rajouter une commande infos par pièce dans ton virtuel pour savoir quand a été réalisé le dernier nettoyage de la pièce.
Dans ton scénario tu ajoute une ligne event {Info dernier nettoyage pièce x} et dans le champs value tu met date et heure

avec un visuel jeedom:

Super cool ! Et merci pour tes idées (batterie, dernier nettoyage) !

Je vais essayer ça ce soir !

Bon j’ai recommencé en essayant de suivre ce que tu m’indiques…

Plus de variables, j’ai créé un virtuel dans lequel j’ai mis un Etat on/off qui servira à lancer le scénario.

Dans ce virtuel j’ai aussi ajouter 2 commandes pièces (pour les besoins des tests, j’ajouterai les autres quand ça fonctionnera). Ces 2 commandes se nomment BVS et BVF et correspondent à 2 zones d’aspiration. Ces 2 commandes me permettront d’effectuer la sélection des pièces à aspirer.

Ensuite vient le scénario, pour l’instant je n’ai pas mis la gestion de la batterie car je ne sais pas comment le robot réagira et j’ai peur de parasiter mon test.
Concernant la commande info de la dernière aspiration, j’ai composé un peu au feeling mais je doute que ça ne me retourne quelque chose de concret…

Malheureusement il est un peu tard pour jouer avec l’aspirateur et je dois attendre demain pour faire un test :frowning:

La suite au prochain épisode !

Bonjour,

Pour le virtuel, il manque une commande de type « Info » Dernier nettoyage Pièce.

Pour le scénario:

  • ramène le deuxième « Si » au niveau du premier, pas comme un sous test. Si tu ne le fais pas, ta pièce BVF ne sera jamais nettoyée si BVS est à 0
  • pour l’enregistrement de la date de dernier nettoyage, remplace la commande « last… » par la commande info dernier nettoyage de ta pièce (voir commentaire sur le virtuel). Pour la valeur, tu peux indiquer #day#/#mounth#/#year#

Bonjour, j’ai déplacé le second bloc en dessous comme tu me l’as conseillé et j’ai lancé la tache avec les 2 pièces sélectionnées.

Il a aspiré la première puis il a un peu galéré en tournant autour de sa base pendant quelques minutes puis il s’est posé pour recharger… 2 heures plus tard il est repartit pour faire la seconde zone… !?

Par contre dans le log il n’y a rien qui s’affiche et du coup c’est difficile de comprendre ce qu’il s’est passé. Je vais approfondir mes tests.

Bonsoir, j’ai lancé le scénario avec les 2 pièces sélectionnées et il m’a refait comme ce matin :
aspiration de la première zone puis cafouillage autour de la base puis il se charge sans passer à la seconde zone. J’ai correctement configuré le log et on voit qu’il prend bien les commandes mais je ne comprend pas pourquoi il temporise sur sa base de recharge…? Il a encore 90% de batterie…

[2021-10-28 23:09:20][SCENARIO] Start : Scenario execute automatiquement sur evenement venant de : [TEST][(v) Commande aspirateur][Etat].
[2021-10-28 23:09:20][SCENARIO] Exécution du sous-élément de type [condition] : if
[2021-10-28 23:09:20][SCENARIO] Evaluation de la condition : [1 == 1] = Vrai
[2021-10-28 23:09:20][SCENARIO] Exécution du sous-élément de type [action] : then
[2021-10-28 23:09:20][SCENARIO] Exécution de la commande [Maison][Sidéro2][Mode Pièces] avec comme option(s) : {"background":"0","title":"","message":"0,1,1,13"}
[2021-10-28 23:26:19][SCENARIO] [Wait] Condition valide : "Retour à la base" == 'Retour à la base' => 1
[2021-10-28 23:26:19][SCENARIO] Exécution de la commande [TEST][(v) Commande aspirateur][BVS off]
[2021-10-28 23:26:19][SCENARIO] Exécution du sous-élément de type [condition] : if
[2021-10-28 23:26:19][SCENARIO] Evaluation de la condition : [1 == 1] = Vrai
[2021-10-28 23:26:19][SCENARIO] Exécution du sous-élément de type [action] : then
[2021-10-28 23:26:19][SCENARIO] Exécution d'un bloc élément : 1250
[2021-10-28 23:26:19][SCENARIO] Exécution du sous-élément de type [action] : action
[2021-10-28 23:26:19][SCENARIO] Exécution de la commande [Maison][Sidéro2][Mode Pièces] avec comme option(s) : {"background":"0","title":"","message":"0,1,1,14"}
[2021-10-28 23:26:20][SCENARIO] [Wait] Condition valide : "Retour à la base" == 'Retour à la base' => 1
[2021-10-28 23:26:20][SCENARIO] Exécution de la commande [TEST][(v) Commande aspirateur][BVF off]
[2021-10-28 23:26:20][SCENARIO] Fin correcte du scénario

bonjour,
de ce que je comprend des log, le scénario semble s’être correctement déroulé.
La condition Retour à la base a été détectée et agit comme un détecteur « pièce aspirée », que la pièce est été aspirée entièrement ou non.
Dans le cas présent je pencherai pour un problème de batterie déchargée. Cela expliquerait que le robot est galéré quelques minutes: le scénario lui demande d’aspirer la pièce 2 mais il pleure famine. Du coup il a été se rechargé et a fini le taff ensuite

il semble donc nécessaire d’inclure la gestion des recharges dans ton scénario. A noter que je me suis trompé dans l’ébauche de scénario que je t’ai proposé:

wait 'Retour à la base'
Si batterie <30%
     wait batterie>90%
Fin Si

à revoir par un truc du genre:

wait 'Retour à la base'
Si batterie <30%
     wait "batterie rechargée"
     wait "Retour à la base"
Fin Si

Bonjour, aujourd’hui pas eu l’occasion de chercher…

Pour la batterie déchargée, je ne pense pas que ce soit ça, il avait encore 90% de charge…

( @ Kyoshi En lisant d’autres sujets j’ai vu que tu avais implémenté le « multi-pièces » si jamais tu passes par ici, je serai intéressé de connaitre ta technique)