Table et condition

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
landaisbenj
Messages : 695
Inscription : 12 mars 2017, 19:24

Re: Table et condition

Message 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
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: Table et condition

Message 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
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
landaisbenj
Messages : 695
Inscription : 12 mars 2017, 19:24

Re: Table et condition

Message 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.
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
landaisbenj
Messages : 695
Inscription : 12 mars 2017, 19:24

Re: Table et condition

Message 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.
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: Table et condition

Message 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.
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
Jeff
Messages : 1007
Inscription : 17 nov. 2016, 20:54
Localisation : Rennes (35)

Re: Table et condition

Message par Jeff »

+1 papoo :D
Version: 2023.1 sur VM Synology, docker Zwave Js UI (Z-stick GEN5, Fibaro...), Zigbeefordomoticz. Nextion RGB Led Screen
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Table et condition

Message 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
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
landaisbenj
Messages : 695
Inscription : 12 mars 2017, 19:24

Re: Table et condition

Message 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.
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: Table et condition

Message 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
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
Répondre