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?
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 ».
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.
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!
[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
[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
Faut déjà trouver pourquoi l’expression plante avant d’aller plus loin dans l’optimisation
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
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
Edit: je n’ai pas regardé ce scénario donc je ne peux pas dire si ici c’était judicieux.
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.
!?
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