Bug évaluation d'une expression

Bonjour,

Depuis quelques jours, il semble qu’il y ait un bug dans l’évaluation d’une expression:
Dans un scénario, j’ai la condition suivante:
#time# > (#[Systeme][Soleil][Coucher du Soleil]# + 20) et variable(alarme) != 1 et variable(pos_volets) != 0 et #[Sécurité][Tile_Eric][Present]# == 1 & variable(OK_google) = 1

Cette condition dans le log du scénario est interprétée par:

[1900 > (1852 + 20) et 0 != 1 et 100 != 0 et 1 == 1 & 1 = 1] et il trouve comme résultat VRAI, alors qu’évidement, c’est faux.
La log du scénario

[2022-03-08 19:00:06][SCENARIO] - Exécution du sous-élément de type [condition] : if #time# > (#[Systeme][Soleil][Coucher du Soleil]# + 20) et variable(alarme) != 1 et variable(pos_volets) != 0 et #[Sécurité][Tile_Eric][Present]# == 1    & variable(OK_google) = 1
[2022-03-08 19:00:06][SCENARIO] Evaluation de la condition : [1900 > (1852 + 20) et 0 != 1 et 100 != 0 et 1 == 1    & 1 = 1] = Vrai

Le testeur d’expression me donne lui le résultat false.

Je suis sur une smart à jour, debian 10.4 jeedom 4.2.14.

Une idée ?

Eric

J’ai un doute sur ta syntaxe…
Pour moi le & devrait etre un &&

Apres ca ne m’explique pas ce qu’il arrive a evaluer du coup…

ton coucher du soleil +20 va aussi poser soucis a certaines heures
La par exemple 1852+20=1872, donc c’est inferieur a 1900.
Mais dans la logique tu veux surement faire un time_op (pas sur du nom exact de tete) pour que ca donne 1912

Bonsoir,

1900 > (1852 + 20) → 1900 > 1872 → vrai
0 != 1 → vrai
100 != 0 → vrai
1 == 1 → vrai
1 = 1 → vrai

le résultat true est normale !

Edit : par contre effectivement le testeur d’expression devrait donné la même chose !

Bonjour,

Pourquoi l’expression ne devrait pas donner vrai ?

Par ailleurs, c’est == qu’il faut mettre dans « variable(OK_google) = 1 ».

Je viens de comprendre, tu fait des operations sur des heures, c’est pas la bonne methode !
#time# > (#[Systeme][Soleil][Coucher du Soleil]# + 20)
remplace par
#time# > (time_op(#[Systeme][Soleil][Coucher du Soleil]#,+20))

1 « J'aime »

Merci à tous pour votre aide, ce qui me perturbe c’est que le testeur d’expression ne donne pas le même résultat.
@Phpvarious je retiens ta solution, merci.

@Madcow: dans tous mes scenarios, il n’y a que = et pas == et ça fonctionne correctement.

Eric

Bonjour,

Alors il faut changer tous vos scénarios :wink:

A = 1 : défini la valeur de 1 à A (cela sera donc toujours vrai)
A == 1 : vérifie si A est bien égale à 1 (c’est donc vrai ou faux)

L’usage de l’assistant du scénario ne commet pas cette erreur et cela est bien indiqué dans les documentations de Jeedom.

Pareils avec && et || (ou)

1 « J'aime »

Parce que le core remplace tes = par des ==

if $var = 3 renverra toujours true quelques soit $var en php puisque c’est une assignation …

1 « J'aime »

Ok, je ne savais pas, merci.

Eric

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