Problème de récursivité dans les scenarios avec les GenericType

Bonjour,

J’ai fait un scenario qui fait des actions sur des lumières en tirant partie de la fonctionnalité de GenericType en applicant une action Light_Off sur l’objet Tous.


Tel que je l’ai compris, il devrait lancer un light_off sur tous les objets qui ont un objet Lumière. Malheureusement, ce n’est pas ce qu’il se passe.

Voici qq traces de log dans lequel j’ai fait varier l’objet , la première execution est sur Tous dans le champ objet

------------------------------------
[2022-07-03 19:17:43][SCENARIO] Start : Scenario lance manuellement.
[2022-07-03 19:17:43][SCENARIO] Exécution du sous-élément de type [condition] : if #[Systeme][Onduleur Jeedom][UPS MODE]# != 'OL' ET #[Systeme][Onduleur Serveur][UPS MODE]# != 'OL CHRG'  
[2022-07-03 19:17:43][SCENARIO] Evaluation de la condition : ["OL" != 'OL' ET "OL CHRG" != 'OL CHRG'  ] = Faux
[2022-07-03 19:17:43][SCENARIO] Exécution du sous-élément de type [action] : else
[2022-07-03 19:17:43][SCENARIO] Exécution du sous-élément de type [condition] : if #[Systeme][Onduleur Jeedom][UPS MODE]# = 'OL' ET #[Systeme][Onduleur Serveur][UPS MODE]# = 'OL CHRG'  
[2022-07-03 19:17:43][SCENARIO] Evaluation de la condition : ["OL" = 'OL' ET "OL CHRG" = 'OL CHRG'  ] = Vrai
[2022-07-03 19:17:43][SCENARIO] Exécution du sous-élément de type [action] : then
[2022-07-03 19:17:43][SCENARIO] Ajout du message suivant dans le centre de message : Dimanche 3 Juillet 2022 19:17 - Retour d'alimentation secteur sur les deux onduleurs
[2022-07-03 19:17:43][SCENARIO] Exécution d'un bloc élément : 307
[2022-07-03 19:17:43][SCENARIO] Exécution d'un bloc élément : 306
[2022-07-03 19:17:43][SCENARIO] Exécution du sous-élément de type [condition] : if variable(UPSStatus)="KO"
[2022-07-03 19:17:43][SCENARIO] Evaluation de la condition : ["KO"="KO"] = Vrai
[2022-07-03 19:17:43][SCENARIO] Exécution du sous-élément de type [action] : then
[2022-07-03 19:17:43][SCENARIO] Affectation de la variable UPSStatus => KO = KO
[2022-07-03 19:17:43][SCENARIO] Exécution de la commande [Chambre parentale][Lampe chevet Eliane][Off]
[2022-07-03 19:17:43][SCENARIO] Exécution de la commande [RdC][Xiaomi Gateway][illumination-off]
[2022-07-03 19:17:43][SCENARIO] Exécution de la commande [Véranda][Yeelight RVB Droite][Eteindre]
[2022-07-03 19:17:43][SCENARIO] Fin correcte du scénario
------------------------------------
[2022-07-03 19:18:07][SCENARIO] Start : Scenario lance manuellement.
[2022-07-03 19:18:07][SCENARIO] Exécution du sous-élément de type [condition] : if #[Systeme][Onduleur Jeedom][UPS MODE]# != 'OL' ET #[Systeme][Onduleur Serveur][UPS MODE]# != 'OL CHRG'  
[2022-07-03 19:18:07][SCENARIO] Evaluation de la condition : ["OL" != 'OL' ET "OL CHRG" != 'OL CHRG'  ] = Faux
[2022-07-03 19:18:07][SCENARIO] Exécution du sous-élément de type [action] : else
[2022-07-03 19:18:07][SCENARIO] Exécution du sous-élément de type [condition] : if #[Systeme][Onduleur Jeedom][UPS MODE]# = 'OL' ET #[Systeme][Onduleur Serveur][UPS MODE]# = 'OL CHRG'  
[2022-07-03 19:18:07][SCENARIO] Evaluation de la condition : ["OL" = 'OL' ET "OL CHRG" = 'OL CHRG'  ] = Vrai
[2022-07-03 19:18:07][SCENARIO] Exécution du sous-élément de type [action] : then
[2022-07-03 19:18:07][SCENARIO] Ajout du message suivant dans le centre de message : Dimanche 3 Juillet 2022 19:18 - Retour d'alimentation secteur sur les deux onduleurs
[2022-07-03 19:18:07][SCENARIO] Exécution d'un bloc élément : 307
[2022-07-03 19:18:07][SCENARIO] Exécution d'un bloc élément : 306
[2022-07-03 19:18:07][SCENARIO] Exécution du sous-élément de type [condition] : if variable(UPSStatus)="KO"
[2022-07-03 19:18:07][SCENARIO] Evaluation de la condition : ["KO"="KO"] = Vrai
[2022-07-03 19:18:07][SCENARIO] Exécution du sous-élément de type [action] : then
[2022-07-03 19:18:07][SCENARIO] Affectation de la variable UPSStatus => KO = KO
[2022-07-03 19:18:07][SCENARIO] Exécution de la commande [Véranda][Yeelight RVB Droite][Eteindre]
[2022-07-03 19:18:07][SCENARIO] Exécution de la commande [Véranda][Yeelight Centre][Eteindre]
[2022-07-03 19:18:07][SCENARIO] Exécution de la commande [Véranda][Yeelight RVB Gauche][Eteindre]
[2022-07-03 19:18:07][SCENARIO] Fin correcte du scénario
------------------------------------
[2022-07-03 19:22:02][SCENARIO] Start : Scenario lance manuellement.
[2022-07-03 19:22:02][SCENARIO] Exécution du sous-élément de type [condition] : if #[Systeme][Onduleur Jeedom][UPS MODE]# != 'OL' ET #[Systeme][Onduleur Serveur][UPS MODE]# != 'OL CHRG'  
[2022-07-03 19:22:02][SCENARIO] Evaluation de la condition : ["OL" != 'OL' ET "OL CHRG" != 'OL CHRG'  ] = Faux
[2022-07-03 19:22:02][SCENARIO] Exécution du sous-élément de type [action] : else
[2022-07-03 19:22:02][SCENARIO] Exécution du sous-élément de type [condition] : if #[Systeme][Onduleur Jeedom][UPS MODE]# = 'OL' ET #[Systeme][Onduleur Serveur][UPS MODE]# = 'OL CHRG'  
[2022-07-03 19:22:02][SCENARIO] Evaluation de la condition : ["OL" = 'OL' ET "OL CHRG" = 'OL CHRG'  ] = Vrai
[2022-07-03 19:22:02][SCENARIO] Exécution du sous-élément de type [action] : then
[2022-07-03 19:22:02][SCENARIO] Ajout du message suivant dans le centre de message : Dimanche 3 Juillet 2022 19:22 - Retour d'alimentation secteur sur les deux onduleurs
[2022-07-03 19:22:02][SCENARIO] Exécution d'un bloc élément : 307
[2022-07-03 19:22:02][SCENARIO] Exécution d'un bloc élément : 306
[2022-07-03 19:22:02][SCENARIO] Exécution du sous-élément de type [condition] : if variable(UPSStatus)="KO"
[2022-07-03 19:22:02][SCENARIO] Evaluation de la condition : ["KO"="KO"] = Vrai
[2022-07-03 19:22:02][SCENARIO] Exécution du sous-élément de type [action] : then
[2022-07-03 19:22:02][SCENARIO] Affectation de la variable UPSStatus => KO = KO
[2022-07-03 19:22:02][SCENARIO] Fin correcte du scénario
------------------------------------
[2022-07-03 19:24:30][SCENARIO] Start : Scenario lance manuellement.
[2022-07-03 19:24:30][SCENARIO] Exécution du sous-élément de type [condition] : if #[Systeme][Onduleur Jeedom][UPS MODE]# != 'OL' ET #[Systeme][Onduleur Serveur][UPS MODE]# != 'OL CHRG'  
[2022-07-03 19:24:30][SCENARIO] Evaluation de la condition : ["OL" != 'OL' ET "OL CHRG" != 'OL CHRG'  ] = Faux
[2022-07-03 19:24:30][SCENARIO] Exécution du sous-élément de type [action] : else
[2022-07-03 19:24:30][SCENARIO] Exécution du sous-élément de type [condition] : if #[Systeme][Onduleur Jeedom][UPS MODE]# = 'OL' ET #[Systeme][Onduleur Serveur][UPS MODE]# = 'OL CHRG'  
[2022-07-03 19:24:30][SCENARIO] Evaluation de la condition : ["OL" = 'OL' ET "OL CHRG" = 'OL CHRG'  ] = Vrai
[2022-07-03 19:24:30][SCENARIO] Exécution du sous-élément de type [action] : then
[2022-07-03 19:24:30][SCENARIO] Ajout du message suivant dans le centre de message : Dimanche 3 Juillet 2022 19:24 - Retour d'alimentation secteur sur les deux onduleurs
[2022-07-03 19:24:30][SCENARIO] Exécution d'un bloc élément : 307
[2022-07-03 19:24:30][SCENARIO] Exécution d'un bloc élément : 306
[2022-07-03 19:24:30][SCENARIO] Exécution du sous-élément de type [condition] : if variable(UPSStatus)="KO"
[2022-07-03 19:24:30][SCENARIO] Evaluation de la condition : ["KO"="KO"] = Vrai
[2022-07-03 19:24:30][SCENARIO] Exécution du sous-élément de type [action] : then
[2022-07-03 19:24:30][SCENARIO] Affectation de la variable UPSStatus => KO = KO
[2022-07-03 19:24:30][SCENARIO] Exécution de la commande [Cuisine][Eclairage Evier][Off]
[2022-07-03 19:24:30][SCENARIO] Exécution de la commande [Cuisine][Eclairage Cuisson][Off]
[2022-07-03 19:24:41][SCENARIO] Fin correcte du scénario

1ère execution: objet = Tous. Il ne trouve que 3 lumières dans 3 pièces différentes
2nde execution : objet = Véranda. Il trouve 3 lumières qui sont dans la véranda. Déjà, on voit qu’il a manqué 2 lumières de la véranda lorsqu’il était réglé sur Tous.
3ème execution : objet = Maison . Il ne trouve rien sachant que par exemple, RdC est « fils » de Maison, et que Cuisine et Chambre parentale sont enfants de Rdc.
4 èeme execution : objet = Cuisine. Cuisine n’a pas de sous-objet, il n’a trouvé que 2 des 3 lumières


Pour l’instant, je ne vois pas d’explication logique, problème dans la requête qui scanne les objets ???

Personne ne veut nous éclairer de ses lumières ? :frowning:

1 « J'aime »

@Loic
Bonsoir Loic, désolé d’insister mais je reviens sur ce sujet, ça ressemble à un bug (ou pas ?) mais je voudrais être certain que les équipes de dev l’ont au moins lu.
C’est quand même bizarre que dans ces exemples la commande LIGHT_OFF « manque » des équipements qui sont pourtant dans des sous-objets de la cible ou même dans le même objet.

Bonjour
Malheureusement c’est pas moi qui est dev cette partie donc c’est très complexe pour moi de comprendre ce qui a été fait et encore plus de savoir si ya un bug… Donc j’ai bien vu le sujet mais je suis incapable de te répondre

Bonsoir, ça ne va pas t’avancer beaucoup mais :

Phénomène inexplicable, je n’arrive pas a reproduire.

Lorsque tu applique un objet a un gentype, seul les éléments du l’objet en question sont extraits, les sous menu ne sont pas pris en compte, c’est un comportement normal.

2ème phénomène inexplicable.

@Phpvarious
Est-ce que ce sont des select SQL qui fournissent les objets sur lesquels appliquer les commandes ? On ne pourrait pas voir quelques requêtes SQL et leurs résultats dans phpMyadmin , pour essayer de comprendre ?
Sinon pour le fonctionnement théorique, si je résume :
Cible = tous , il prend tous les objets et cherche ceux qui ont cette commande (LIGHT_OFF) dans mon exemple
Cible = un objet précis : pas de recursivité, il reste au niveau utilisé et ne scanne pas les « fils » potentiels.
Est-ce toi qui est en charge de cette partie du code ?

J’avais remonté le même problème sur discord en novembre.

J’ai fini par faire un scénario avec chaque pièce et pas Tous.

1 « J'aime »

@sagitaz
ça me rassure de ne pas être le seul.
Ton exemple est très explicite. J’espère que le problème n’est pas lié qu’à la commande LIGHT_OFF et que si dans le test, tu avais mis le LIGHT_ON sur Tous, tu aurais eu le même problème. Il faudrait que je teste cela aussi de mon côté.
Mais bon, déjà, il faudrait que toutes les commandes pour un même objet soient bien toutes prises en compte (pas comme dans mon objet cuisine, où il a manqué 1 éclairage)

Hello,
J’ai pointé du doigt ,se que je pense, être le coupables :rofl:
Le problème intervient lorsque vous avez des équipements désactivés qui contient le générique type recherché. il pour effet de créer une erreur qui n’est pas visible dans les logs et qui bloque la suite du déroulement du scénario. Pour résoudre le problème plusieurs solutions :

Si vous avez l’occasion de tester la modif, se serait un plus :wink:

Bonne journée.

3 « J'aime »

Je test cela dans la soirée.

Je m’étais fait un scénario ce matin

$cmds = cmd::byGenericTypeObjectId('LIGHT_ON', NULL, NULL);
$n = 0;
foreach ($cmds as $cmd) {
  $n++;
$scenario->setLog($n . ' => ' .json_encode($cmd->getId()));
}

J’avais pas pris le temps de regarder pourquoi lui fonctionne et pas la fonction du core.

Bien joué :wink:

@Phpvarious
Bonjour,
J’ai mis à jour le code dans le fichier de class concerné et testé, ça se passe beaucoup mieux. Je n’ai pas fait l’inventaire mais il me semble bien avoir tout balayé.
J’ai d’ailleurs vu que j’avais des prises d’écrans que j’avais laissé en type lumière :frowning:

Du coup, cela m’inspire 2 suggestions :
Dans la manière de rechercher dans SQL les commandes, faire un tri à la volée sur nom_objet/nom_peripherique/nom_commande, ça permettrait une meilleure relecture du log et les commandes pourraient s’exécuter objet par objet.
Dans la grille du menu Outils / Type équipement avoir possibilité de filtrer ou de trier sur les commandes, ça m’aurait été pour trouver ma mauvaise définition de type sur les prises…

Et enfin, le genericType est dispo dans les scenarios en tant que commande, mais il est absent dans les actions sur valeur dans l’onglet configuration des équipements.
https://community.jeedom.com/t/demande-de-modification-du-plugin-ajout-de-laction-typegenerique/86561/4. Cela serait pourtant très pratique de faire un light_off de toutes les lumières d’une pièce par exemple quand on ferme sa porte sans devoir écrire de scenario.

Merci à tous pour votre attention.

La complexité c’est que l’ID de l’objet est stocker dans l’Eqlogic, hors la requête est basée sur les Cmd, se qui implique, si je ne me trompe pas, un sacré sac de nœud pour pouvoir en extraire les données triées par objet.

Pourquoi pas une idée d’évolution, je te rejoint sur cette idée, car j’ai déja eu besoin de cette option, je m’en suis sortie avec un bloc code en attendant.

Alors en faite elle est présente mais caché, il te suffit de taper le mot clé pour y avoir accès :

image

ou alors modifier la ligne 47 de desktop/modal/action.insert.php#L47 en suppriment la class scenarioOnly :

image

Je ne ferait pas de PR dans ce sens, car je ne connait pas la raison pour laquelle cette action est caché dans la liste. Peut-être un oubli lors du développement des GenType …

Dans tous les cas je ne doute pas que notre ami @kiboost, que je remercie encore pour ces évolutions, passera par ici pour éclairer nos lumières :wink:

2 « J'aime »

Je vais garder le sujet ouvert quelques jours.
@Phpvarious a fourni des explications et des débuts de solution mais il serait intéressant d’avoir les réponses définitives des dev : correction du pb avec le scan lors de l’objet tous et absence du type generique en dehors des scenarios.

@Phpvarious : tu dois bosser sur un Jeedom en anglais non ? Car dans ma version (Fr) , pour voir l’option, je dois taper « typ » et pas « gen ». Petite précision donc pour ceux qui voudraient taper gen dans un Jeedom en français.

Désolé pour le screenshots en mode smartphone mais en 4.2, pas besoin de taper quoi que ce soit, c’est disponible dans la liste :

Pour la requête cela ne doit pas être compliqué de faire un tri sur plusieurs endroits.

1 « J'aime »

Tu es sûr d’être sur une page de configuration d’une commande ? car si c’est le cas il y a un soucis. tu ne devrait pas pouvoir visualiser/sélectionner ,« Stop », « Retourner un texte/donnée », « icône » … qui sont réserver a être utilisés dans des scénarios

Je laisse les plus avancées que moi se pencher sur le sujet :wink:

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.