Horaire ET OU

image_2021-07-20_083314

bonjour,

ça doit être simple comme problème, merci d’avance.

je veux juste que quand j’ouvre ma porte OU que le détecteur mouvement ext. détecte, il allume ma lumiére de dehors.

avec ce scenario actuelle la lumière s’allume meme la journée.

(et Heliotrope me dit qu’il fait nuit :frowning: )

Bonjour,

Il faut utiliser des parenthèses :

SI (… OU …) ET (… OU …)

Bison

Bonjour

En complément de la réponse de Bison, il y une commande plus logique pour comparer l’heure.

time_between(#time#,2100,600)

Vous pouvez aussi pimenter tout cela, avec vraies heures de coucher / lever du soleil :

time_between(#time#,#[Météo][Ville_a_vous][Coucher du Soleil]#,#[Météo][Ville_a_vous][Lever du Soleil]#)
3 « J'aime »

comme ça :

(#time# >= 2100 OU #time# <0600)  ET (#[Jardin principal][PIR Façade][Présence]# == 1)  OU  (#[Hall][DO  Porte entrée][Etat]# == 1)

Non :

(#time# >= 2100 OU #time# <0600) ET (#[Jardin principal][PIR Façade][Présence]# == 1 OU #[Hall][DO Porte entrée][Etat]# == 1)
1 « J'aime »

C’est plutôt :

(#time# >= 2100 OU #time# < 0600) ET (#[Jardin principal][PIR Façade][Présence]# == 1 OU #[Hall][DO Porte entrée][Etat]# == 1)

Il faut raisonner en Français :
Si (l’heure est comprise entre xx OU yy) ET (présence == 1 OU porte == 1)

Pour être raccord avec mon message précédent, il faut donc écrire :

(time_between(#time#,2100,600)) ET (#[Jardin principal][PIR Façade][Présence]# == 1 OU #[Hall][DO Porte entrée][Etat]# == 1)

Petite remarque, il faut « à l’avenir » éviter les ET/OU, mais préférer les && ou ||, ce qui donne :

(time_between(#time#,2100,600)) && (#[Jardin principal][PIR Façade][Présence]# == 1 || #[Hall][DO Porte entrée][Etat]# == 1)

Si vous voulez une heure de lever et coucher qui soit dynamique (et surtout, qui correspond à la réalité=.

(time_between(#time#,#[Météo][Ville_a_vous][Coucher du Soleil]#,#[Météo][Ville_a_vous][Lever du Soleil]#)) && (#[Jardin principal][PIR Façade][Présence]# == 1 || #[Hall][DO Porte entrée][Etat]# == 1)

@Mips : Merci pour la correction.

1 « J'aime »

Franchement je te remercie bcp pour ce petit cours !!

Attention, j’ai corrigé entre temps, il y avait des erreurs de () de ma part ;

(#time# >= 2100 OU #time# <0600) ET (#[Jardin principal][PIR Façade][Présence]# == 1 OU #[Hall][DO Porte entrée][Etat]# == 1)

Mais préférez cela :

(time_between(#time#,2100,600)) && (#[Jardin principal][PIR Façade][Présence]# == 1 || #[Hall][DO Porte entrée][Etat]# == 1)

il ne manque pas une parenthèse a la fin :

(time_between(#time#,2100,600)) ET (#[Jardin principal][PIR Façade][Présence]# == 1 OU #[Hall][DO Porte entrée][Etat]# == 1)

Non,

Pour moi c’est ok.

(time_between(#time#,2100,600)) && (#[Jardin principal][PIR Façade][Présence]# == 1 || #[Hall][DO Porte entrée][Etat]# == 1)

Rappel ; utilisez le testeur d’expression de Jeedom pour contrôler tout cela.

Moi j’ai ça :

2021-07-20 11:36:37	scenario	**Expression non valide** [(time_between(#time#,2100,600)) && (#542# == 1 || #[Hall][DO Porte entrée][Etat]# == 1)] trouvée dans le scénario : [Eclairage][Jardin principal][Eclairage auto façade], résultat : (0) && (0 == 1 || #[Hall][DO Porte entrée][Etat]# == 1)

Salut @Romus,
à première vue je dirais qu’il y a un souci avec ton #[Hall][DO Porte entrée][Etat]#, si la formulation était correcte dans le testeur d’expression, le résultat aurais dû être 0 ou 1 mais si il remets ce que tu as écris dans le scénario il y a de grande chance que ça viennes de la saisie.

je n’y arrive pas ! :frowning:

Il faut le log du scénario pour comprendre.
L’erreur semble être le #542# qui doit représenter quelque chose qui ne semble pas exister.
Pourtant, plus bas, l’expression indique que c’est le hall porte d’entrée qui n’est pas correcte.

Sélectionnez vos équipements à l’aide du bouton prévue pour, car il semble qu’il y ai une erreur de saisie.

Youpi ca fonctionne !!! Merci !!

Effectivement le copier coller il n’aime pas !!

Donc, maintenant que vous avez compris cela.

Passez aux bonnes résolution, entre autre, utilisation du time_between() :
time_between(#time#,2100,600)

Il faut le lire ainsi :
heure_comprise_entre(#heure qu’il est#,heure_de_debut,heure_de_fin)

=> hop hop

Et on remplace les et/and par des && (c’est la norme php)
Et on remplace les ou par des || (c’est la norme php)

Dans Jeedom, les ET/AND/OU ne sont que des alias des commandes PHP, rien ne dis qu’elles vont durer dans le temps.

1 « J'aime »

Encore merci, et oui j’ai noté toutes possibilités :+1:

Bonjour,

Juste pour pinailler :wink: les parenthèses autour de time_between ne sont pas utiles

time_between(#time#,2100,600) && (#[Jardin principal][PIR Façade][Présence]# == 1 || #[Hall][DO Porte entrée][Etat]# == 1)
2 « J'aime »

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