Expression invalide dans un scénario

Bonjour,

j’ai récemment tenté de modifier une condition dans un scénario pour la fermeture de mes screens. Comme on pourrait s’y attendre, il s’agit de comparaisons sur les prévisions météo et différentes températures (je passe ici le nom des variables parce que ça ne me semble pas utile). Malheureusement, le résultat n’est pas conforme à mes attentes:

[2021-09-19 10:00:04][SCENARIO] Start : Scenario execute automatiquement sur programmation.
[2021-09-19 10:00:04][SCENARIO] Exécution du sous-élément de type [condition] : if
[2021-09-19 10:00:04][SCENARIO] Evaluation de la condition : [(804 >= 801 AND 804 <= 804 AND 20.3 >= 17) OR (804 >= 800 AND 804 <= 804 AND (20.3 >= 20 OR 22.3 >= 23))] = (804 >= 801 AND 804 <= 804 AND 20.3 >= 17) OR (804 >= 800 AND 804 <= 804 AND (20.3 >= 20 OR 22.3 >= 23))
[2021-09-19 10:00:04][SCENARIO] Expression non valide : (804 >= 801 AND 804 <= 804 AND 20.3 >= 17) OR (804 >= 800 AND 804 <= 804 AND (20.3 >= 20 OR 22.3 >= 23))
[2021-09-19 10:00:04][SCENARIO] Fin correcte du scénario

J’ai tenté plusieurs variantes:

  • remplacement des opérateurs par ET et OU
  • diminution et augmentation du nombre de parenthèses
  • arrondissement des valeurs

Rien n’y fait. J’ai essayé avec les 2 blocs principaux séparément:

  • (804 >= 801 AND 804 <= 804 AND 20.3 >= 17)
  • (804 >= 800 AND 804 <= 804 AND (20.3 >= 20 OR 22.3 >= 23))

Tous les 2 renvoient le booléen FAUX attendu. Par contre, (FAUX) OR (FAUX) ne semble pas être compris.

Y a-t-il quelque chose de très évident que je suis en train de manquer ou bien y a-t-il un bug?

Merci pour vos retours

Bonjour,

Veuillez utilisez les balises Texte préformaté parce que là le test est illisible.
Vous avez du faire une erreur dans vos parenthèses mais comme c’est illisible…

Deuxièmement, on ne tag pas bug tant que ce n’est pas reproductible ni confirmé.

Et pour finir veuillez faire attention de poster dans la catégorie adéquate et pas dans « Discussion générale » pour une question précise sur jeedom.

Bonsoir, un screen du scénario serai le bienvenu, car la seule chose qui me choque dans tes log c’est les , de mémoires il devraient englobés la totalité de ta condition.
J’ai testé cette expression (en enlevant les et le testeur d’expression me renvoie bien « true ».

Désolé, les erreurs de débutants :innocent:

Il n’y a pas de [] dans l’expression de base, ils apparaissent juste dans les logs:

Bonjour,

Sans avoir testé ton expression sur mon Jeedom.

Quand il y a trop de parenthèses parfois Jeedom perd pied.
Et parfois également dans ce cas ce qui marche dans le testeur d’expression ne fonctionne pas dans le scénario.

Bonsoir,
Je ne vois pas comment une expression de cette nature peut fonctionner sans aucune parenthèse.
C’est la base.
Il y a ce que l’on appelle la préséance des opérateurs à respecter sinon aucun test ne serait intelligible.

En fait, la proposition de Madcow fonctionne. J’ai fait 2 bloc si/alors/sinon identiques avec la moitié de mon expression pour chacun des blocs et là, ça fonctionne.

Ce n’est pas très satisfaisant, mais je suppose que je peux me contenter de ça.

Merci pour vos idées!

hier j’avais tester ta 1ere expression (via outils/ testeur expressions), les 1er tests étaient KO puis il sont passés à true

donc assez bizarre …

plutot que de faire 2 block pourquoi est ce que tu n’essaies pas un truc comme ca :

  • créer 2 tag, chacun avec un bout de ton test
  • ton unique SI fait ton test OR sur les 2 tags

c’est déjà un chouya plus propre, et ca permet d’avoir ta liste d’actions écrites qu’une seule fois.

1 « J'aime »

C’est vrai que c’est beaucoup plus propre comme ça. Merci!

En fait, ça ne marche qu’à moitié :face_with_raised_eyebrow:

J’ai donc 2 scénarios pratiquement identiques (un pour les screens au Sud et l’autre pour l’Ouest) et la condition fonctionne pour l’un et pas pour l’autre! C’est juste du copié-coller!

le Sud est OK:

[2021-09-24 10:00:04][SCENARIO] Start : Scenario execute automatiquement sur programmation.
[2021-09-24 10:00:04][SCENARIO] Exécution du sous-élément de type [action] : action
[2021-09-24 10:00:04][SCENARIO] Mise à jour du tag #cond1# => 803 >= 801 ET 803 <= 804 ET 19.1 >= 17
[2021-09-24 10:00:04][SCENARIO] Mise à jour du tag #cond2# => 803 >= 800 ET 803 <= 804 ET (19.1 >= 20 OU 21.7 >= 23)
[2021-09-24 10:00:04][SCENARIO] Exécution d'un bloc élément : 27
[2021-09-24 10:00:04][SCENARIO] Exécution du sous-élément de type [condition] : if
[2021-09-24 10:00:04][SCENARIO] Evaluation de la condition : ["803 >= 801 ET 803 <= 804 ET 19.1 >= 17" OU "803 >= 800 ET 803 <= 804 ET (19.1 >= 20 OU 21.7 >= 23)"] = Vrai
[2021-09-24 10:00:04][SCENARIO] Exécution du sous-élément de type [action] : then
[2021-09-24 10:00:04][SCENARIO] Exécution d'un bloc élément : 28
[2021-09-24 10:00:04][SCENARIO] Exécution du sous-élément de type [condition] : if
[2021-09-24 10:00:04][SCENARIO] Evaluation de la condition : [1 == 0  ] = Faux
[2021-09-24 10:00:04][SCENARIO] Exécution du sous-élément de type [action] : else
[2021-09-24 10:00:04][SCENARIO] Exécution de la commande [Home][Scenarios][Fermeture Sud]
[2021-09-24 10:00:37][SCENARIO] [Wait] Condition valide par dépassement de temps :  =>
[2021-09-24 10:00:37][SCENARIO] Exécution de la commande [Home][Scenarios][Fermeture Sud]
[2021-09-24 10:00:37][SCENARIO] Fin correcte du scénario

Par contre celui de l’Ouest est … à l’ouest:

[2021-09-24 13:30:03][SCENARIO] Start : Scenario execute automatiquement sur programmation.
[2021-09-24 13:30:03][SCENARIO] Exécution du sous-élément de type [action] : action
[2021-09-24 13:30:03][SCENARIO] Mise à jour du tag #cond1# => 804 >= 801 ET 804 <= 804 ET 19.1 >= 17
[2021-09-24 13:30:03][SCENARIO] Mise à jour du tag #cond2# => 804 >= 800 ET 804 <= 804 ET (19.1 >= 20 OU 21.9 >= 23)
[2021-09-24 13:30:03][SCENARIO] Exécution d'un bloc élément : 3
[2021-09-24 13:30:03][SCENARIO] Exécution du sous-élément de type [condition] : if
[2021-09-24 13:30:03][SCENARIO] Evaluation de la condition : ["804 >= 801 ET 804 <= 804 ET 19.1 >= 17" OU "804 >= 800 ET 804 <= 804 ET (19.1 >= 20 OU 21.9 >= 23)"] = "804 >= 801 ET 804 <= 804 ET 19.1 >= 17" OU "804 >= 800 ET 804 <= 804 ET (19.1 >= 20 OU 21.9 >= 23)"
[2021-09-24 13:30:03][SCENARIO] Expression non valide : "804 >= 801 ET 804 <= 804 ET 19.1 >= 17" OU "804 >= 800 ET 804 <= 804 ET (19.1 >= 20 OU 21.9 >= 23)"
[2021-09-24 13:30:03][SCENARIO] Fin correcte du scénario

Le résultat est le même si je lance les 2 scénarios pratiquement au même moment (et donc avec les mêmes valeurs).

Sud:

[2021-09-24 17:41:10][SCENARIO] Start : Scenario lance manuellement.
[2021-09-24 17:41:10][SCENARIO] Exécution du sous-élément de type [action] : action
[2021-09-24 17:41:10][SCENARIO] Mise à jour du tag #cond1# => 804 >= 801 ET 804 <= 804 ET 18.4 >= 17
[2021-09-24 17:41:10][SCENARIO] Mise à jour du tag #cond2# => 804 >= 800 ET 804 <= 804 ET (18.4 >= 20 OU 22.3 >= 23)
[2021-09-24 17:41:10][SCENARIO] Exécution d'un bloc élément : 27
[2021-09-24 17:41:10][SCENARIO] Exécution du sous-élément de type [condition] : if
[2021-09-24 17:41:10][SCENARIO] Evaluation de la condition : ["804 >= 801 ET 804 <= 804 ET 18.4 >= 17" OU "804 >= 800 ET 804 <= 804 ET (18.4 >= 20 OU 22.3 >= 23)"] = Vrai
[2021-09-24 17:41:10][SCENARIO] Exécution du sous-élément de type [action] : then
[2021-09-24 17:41:10][SCENARIO] Exécution d'un bloc élément : 28
[2021-09-24 17:41:10][SCENARIO] Exécution du sous-élément de type [condition] : if
[2021-09-24 17:41:10][SCENARIO] Evaluation de la condition : [1 == 0  ] = Faux
[2021-09-24 17:41:10][SCENARIO] Exécution du sous-élément de type [action] : else
[2021-09-24 17:41:10][SCENARIO] Exécution de la commande [Home][Scenarios][Fermeture Sud]
[2021-09-24 17:41:41][SCENARIO] [Wait] Condition valide par dépassement de temps :  =>
[2021-09-24 17:41:41][SCENARIO] Exécution de la commande [Home][Scenarios][Fermeture Sud]
[2021-09-24 17:41:41][SCENARIO] Fin correcte du scénario

Ouest:

[2021-09-24 17:40:56][SCENARIO] Start : Scenario lance manuellement.
[2021-09-24 17:40:56][SCENARIO] Exécution du sous-élément de type [action] : action
[2021-09-24 17:40:56][SCENARIO] Mise à jour du tag #cond1# => 804 >= 801 ET 804 <= 804 ET 18.4 >= 17
[2021-09-24 17:40:56][SCENARIO] Mise à jour du tag #cond2# => 804 >= 800 ET 804 <= 804 ET (18.4 >= 20 OU 22.3 >= 23)
[2021-09-24 17:40:56][SCENARIO] Exécution d'un bloc élément : 3
[2021-09-24 17:40:56][SCENARIO] Exécution du sous-élément de type [condition] : if
[2021-09-24 17:40:56][SCENARIO] Evaluation de la condition : ["804 >= 801 ET 804 <= 804 ET 18.4 >= 17" OU "804 >= 800 ET 804 <= 804 ET (18.4 >= 20 OU 22.3 >= 23)"] = "804 >= 801 ET 804 <= 804 ET 18.4 >= 17" OU "804 >= 800 ET 804 <= 804 ET (18.4 >= 20 OU 22.3 >= 23)"
[2021-09-24 17:40:56][SCENARIO] Expression non valide : "804 >= 801 ET 804 <= 804 ET 18.4 >= 17" OU "804 >= 800 ET 804 <= 804 ET (18.4 >= 20 OU 22.3 >= 23)"
[2021-09-24 17:40:56][SCENARIO] Fin correcte du scénario

Des idées?

Faut bien avouer que c’est surprenant.

Essaye voir avec des tags différents sur celui de l’ouest cond 3 et cond4 ? Il y a peut être un truc lié au « wait » même si je ne vois pas trop quoi.

Surtout etonnant de voir un wait sans condition … autant utiliser un sleep !

Et plutot que repeter 3 fois les meme cmd, ca vaudrait aussi le coup d utiliser un bloc boucle :slight_smile:

Faut déjà trouver pourquoi l’expression plante avant d’aller plus loin dans l’optimisation :slight_smile:

Par curiosité j’ai repris l’expression et remplacé par 2 commandes qui donnes heures et températures et en une fois je n’ai pas de problèmes.

#[Maison][HeliotropeMaison][Lever du Soleil]# >= 801 ET #[Maison][HeliotropeMaison][Lever du Soleil]# <= 804 ET #[Maison][Temperatures MQTT][Bureau]# >= 17 OU #[Maison][HeliotropeMaison][Lever du Soleil]# >= 800 ET #[Maison][HeliotropeMaison][Lever du Soleil]# <= 804 ET (#[Maison][Temperatures MQTT][Bureau]# >= 20 OU #[Maison][Temperatures MQTT][Bureau]# >= 23)
[2021-09-24 19:27:39][SCENARIO] Start : Scenario lance manuellement.
[2021-09-24 19:27:39][SCENARIO] Exécution du sous-élément de type [condition] : if
[2021-09-24 19:27:39][SCENARIO] Evaluation de la condition : [729 >= 801 ET 729 <= 804 ET 25.4 >= 17 OU 729 >= 800 ET 729 <= 804 ET (25.4 >= 20 OU 25.4 >= 23)] = Faux
[2021-09-24 19:27:39][SCENARIO] Exécution du sous-élément de type [action] : else
[2021-09-24 19:27:39][SCENARIO] Fin correcte du scénario

Il doit y avoir un problème lié à la longueur des commandes à la base. Faudrait voir ce que ça donne en passant par un bloc code.

OU si c’est ça, faire 2 virtuels qui reprennent les commandes en question et donner des noms plus court afin de les réutiliser dans le scénario. Astuce de sioux :sweat_smile:

1 « J'aime »

Le wait a l’avantage de ne pas forcément attendre le maximum du temps.
Tu peux vouloir faire une pause dans un scénario (sleep) le temps que l’action se fasse avant d’enchaîner (par exemple envoyer plein d’ordre de fermeture de volet peut noyer la fréquence radio et donc certains ordres peuvent ne pas arriver) mais passer par un wait va optimiser le temps total: si le retour d’état est ok on peut continuer, sinon on attend plus longtemps :wink:

Edit: je n’ai pas regardé ce scénario donc je ne peux pas dire si ici c’était judicieux.

1 « J'aime »

Je suis d accord avec toi @Mips, à la seule condition de mettre une condition dans ce fameux wait !
S il ny a pas de condition tu vas donc ‹ attendre le temps max › ! Ce qui a (pour moi) aucun interet donc.
!?

Bonjour, et entièrement d’accord !

Si c’est un bug, il faudrait demander à l’équipe Jeedom si elle a un avis / une correction possible.
Mais est-ce un bug ?
___Je vote pour OUI !

@csu3333:
En attendant: Tu peux faire un
SI: Condition 1
____alors Tag1 == 1
SI: Condition 2
____alors Tag2 == 1

Si: tag(Tag1,0) + tag(Tag2,0) >= 1
____alors: …
____sinon: …

Ah oui je viens de voir le scénario. Il faut mettre une condition.
Je pensais que tu parlais d’un bloc SI après le WAIT.

Pour mettre tout le monde d’accord: l’intérêt du wait sans condition est probablement nul dans un environnement où le scénario dispose de toutes les bonnes informations. Malheureusement, l’état de mes volets est toujours open, même quand ils sont fermés. Du coup, je suis contraint de faire des choix inélégants comme d’attendre un temps déterminé et de répéter 2 fois une commande qui passe correctement dans 90% des cas.

Pareil pour le délai de 180 secondes: je n’ai pas vraiment d’indicateur qui me permette de vérifier la disponibilité du controleur Tahoma, donc j’attends suffisamment longtemps pour que ça soit toujours le cas. Ce n’est pas comme si j’étais à 10s près non plus. Le soleil ne tourne que de 15°/h :yum:

Bingo, ceci fonctionne:

J’ai aussi trouvé autre chose qui fonctionne: dupliquer mon scénario et revenir à ma condition initiale :face_with_raised_eyebrow:

Donc oui, pour moi, c’est clairement un bug. Par contre, en dupliquant mon scénario, je l’ai fait disparaître :expressionless: