J'avoue que j'ai galeré à pondre ça. Et le pire c'est que ce n'est qu'une phrase lolJeff a écrit :Sympa la fonction, ca devient complexe comme code
Table et condition
-
landaisbenj
- Messages : 695
- Inscription : 12 mars 2017, 19:24
Re: Table et condition
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
Re: Table et condition
pour une alarme,comme dans ton exemple, il serait à mon sens plus sécure de tester la condition Closed plutôt que Open
-
landaisbenj
- Messages : 695
- Inscription : 12 mars 2017, 19:24
Re: Table et condition
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.
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
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
-
landaisbenj
- Messages : 695
- Inscription : 12 mars 2017, 19:24
Re: Table et condition
D'ailleurs, je trouve le dzvent vraiment pas mal, mais je ne m'y suis pas faitpapoo 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/
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'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
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
Re: Table et condition
j'ai testé ton script su mon install de test.landaisbenj a écrit :Ah? Ça se discute. Il faudrait que tu argument pour que je comprenne.
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' thenj'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
+1 papoo 
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
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
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' thenMAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua
Un ex domoticzien
/!\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
Attention je rappels ma methode: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"
Code : Tout sélectionner
string.match(table.concat(contact),'Open')- 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.
Du coup on est d'accord la dessustu 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.
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
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
Re: Table et condition
j'ai marqué ça vite fait, désolé.vil1driver a écrit :Code : Tout sélectionner
if maison == 'Open' or 'On' then
c'est bien évidemment
Code : Tout sélectionner
if maison == 'Open' or maison == 'On' then