Page 2 sur 2

Re: Table et condition

Publié : 25 févr. 2018, 21:50
par landaisbenj
Jeff a écrit :Sympa la fonction, ca devient complexe comme code :geek:
J'avoue que j'ai galeré à pondre ça. Et le pire c'est que ce n'est qu'une phrase lol

Re: Table et condition

Publié : 25 févr. 2018, 22:24
par papoo
pour une alarme,comme dans ton exemple, il serait à mon sens plus sécure de tester la condition Closed plutôt que Open

Re: Table et condition

Publié : 25 févr. 2018, 23:15
par landaisbenj
Ah? Ça se discute. Il faudrait que tu argument pour que je comprenne.

On test les contact pour l'intrusion et le départ. Et on parle de porte fermé, de porte ouverte, ou de porte qui se ferme et de porte qui s'ouvre.

Dans mon cas (a cause de cette méthode) je ne peux pas tester le 'closed' car je test si je trouve un etat different parmis tous les devices.

Et comme l'état de toutes les portes au moment où je part de la maison est 'closed', je suis obligé de rechercher si il y a une porte 'Open'.
En gros ma methode recherche 'Open' parmis tous les closed, et retourne 'Open' si elle en trouve un et nil si elle n'en trouve pas. Et comme je n'aime pas chercher le nil je prefere ne pas chercher le 'Open'

Mais de tout façon, il n'y a aucune différence entre device=='Closed' et device~='Open' ???

Par contre je me fiche de savoir si la porte s'ouvre ou se ferme.

Re: Table et condition

Publié : 26 févr. 2018, 12:15
par landaisbenj
papoo a écrit : sinon un script dzvents va te permettre d'appeler l'ensemble de tes devices "contact" directement sans passer par la création d'une table

exemple ici avec PIR_*
https://easydomoticz.com/scripts-dzvent ... s-details/
D'ailleurs, je trouve le dzvent vraiment pas mal, mais je ne m'y suis pas fait
Je voulais du coup faire partager ca qui fait pareil en lua simple sur un changement d'un des device 'PIR':

Code : Tout sélectionner

string.match(next(devicechanged), '(%a+)_', 0)=='PIR'
Pour l'etat du device c'est l'autre methode que j'ai rapporté ici.

Si ca peut en aider quelques un.

Re: Table et condition

Publié : 26 févr. 2018, 21:54
par papoo
landaisbenj a écrit :Ah? Ça se discute. Il faudrait que tu argument pour que je comprenne.
j'ai testé ton script su mon install de test.
n'ayant que deux portes et deux fenêtres avec des contacts je les ai ajouté pour tester.
portes Open /Closed, fenêtres On/Off j'ai donc vite fait modifier ta condition pour ajouter un or "On"
ce qui donne

Code : Tout sélectionner

if maison == 'Open' or 'On' then
et malgré le fait que tout soit fermé le script me retourne Maison ouverte alors que si j'inverse la condition ça fonctionne normalement.
j'en déduis que l'état Closed / Off fonctionne mieux
tu souhaites savoir si tes portes sont fermées pour partir tranquille et ou mettre l'alarme (c'est du moins ce que moi je souhaiterais savoir) cela me gene de tester la condition inverse à ce que je souhaite. Mais ce n'est effectivement qu'une question de point de vue.
mais c'est pour moi ce que qui ressemble le plus à une boucle fermée en alarme. je teste si c'est fermé, quelque soit le ou les autres état disponible.

Re: Table et condition

Publié : 26 févr. 2018, 22:08
par Jeff
+1 papoo :D

Re: Table et condition

Publié : 27 févr. 2018, 08:49
par vil1driver
heu non...

Papoo tu me surprends, tu ne peux pas écrire cela car c'est systématiquement vrai quelque soit la valeur de maison

pour exemple

Code : Tout sélectionner

local maison = nil
if maison == 'Open' or 'On' then
print('pass 0')
end
maison = 'Open'
if maison == 'Open' or 'On' then
print('pass 1')
end
maison = 'On'
if maison == 'Open' or 'On' then
print('pass 2')
end
maison = 'Off'
if maison == 'Open' or 'On' then
print('pass 3')
end
;)

Code : Tout sélectionner

if maison == 'Open' or maison == 'On' then

Re: Table et condition

Publié : 27 févr. 2018, 11:21
par landaisbenj
papoo a écrit :n'ayant que deux portes et deux fenêtres avec des contacts je les ai ajouté pour tester.
portes Open /Closed, fenêtres On/Off j'ai donc vite fait modifier ta condition pour ajouter un or "On"
Attention je rappels ma methode:

Code : Tout sélectionner

string.match(table.concat(contact),'Open')
Si je décompose:
- table.concat(table), concatène en chaîne, la table. (Donc ici l’état de mes devices)
- string.match('string', pattern) cherche dans une chaîne, le pattern (en deuxième position, ici Open).
S'il le trouve, il retourne le pattern, si il ne le trouve pas il retourne nil.

Code : Tout sélectionner

test = { 'Closed', 'Closed', 'Closed', 'Closed', 'Closed', 'Closed',}
concatenation=table.concat(test ,'; ')
print(concatenation) --Closed; Closed; Closed; Closed; Closed; Closed
maison = string.match(concatenation, 'Open')
print(maison) --nil

test = { 'Closed', 'Open', 'Closed', 'Open', 'Closed', 'Closed',}
concatenation=table.concat(test ,'; ')
print(concatenation) --Closed; Open; Closed; Open; Closed; Closed
maison = string.match(concatenation, 'Open')
print(maison) --Open


Dans ton cas, il faut que tu recherche et Open et On, et je doute que string.match sache rechercher un pattern ou un autre... En tout cas pas écrit comme cela.
Donc de toute façon, malgré la correction de vil1driver, je ne suis pas sur que cela fonctionnerai avec ma méthode, le retour de maison ne serait qu’égale a un seul pattern.
tu souhaites savoir si tes portes sont fermées pour partir tranquille et ou mettre l'alarme (c'est du moins ce que moi je souhaiterais savoir) cela me gene de tester la condition inverse à ce que je souhaite. Mais ce n'est effectivement qu'une question de point de vue.
mais c'est pour moi ce que qui ressemble le plus à une boucle fermée en alarme. je teste si c'est fermé, quelque soit le ou les autres état disponible.
Du coup on est d'accord la dessus :). Syntaxiquement, moi je souhaite être sur que mes portes ne soit pas ouverte (vu que le danger c'est quel soit ouverte et non quel ne soit pas fermé xD). Donc on en reviens au même.

Mais encore une fois, suite à ma méthode, je ne peux, de toute façon, pas chercher une porte fermé, car je cherche dans la table: celle qui est differente.
Au moment ou je cherche, elle doivent toutes être en Closed donc je ne peux pas vérifier l’état closed... C'est une obligation du à la méthode et non a ce que je veux.

J’espère que c'est pas trop incompréhensible.

Re: Table et condition

Publié : 27 févr. 2018, 12:20
par papoo
vil1driver a écrit :

Code : Tout sélectionner

if maison == 'Open' or  'On' then
j'ai marqué ça vite fait, désolé.
c'est bien évidemment

Code : Tout sélectionner

if maison == 'Open' or maison == 'On' then