Script lumière
Re: Script lumière
Pas facile je suis sur mon téléphone. Tu utilises les fonction dater qui viennent du fichier module.lua hors dans ton script tu ne lui dit pas de s'en servir. Tu utilise mal la fonction debug, regarde dans ĺe fichier module.lua l'exemple.
PI3+, Buster, Domoticz V2020.2, rflink, zwave, chauffage piloté par qubino, sondes oregon et Vil1d, boite aux lettres détection passage facteur, volets roulants qubino fibaro.
Re: Script lumière
J'avance bien sur le sujet,
j'essaye mon script ce soir et je vous dis ce qu'il en est:
(Je sais, il y a beaucoup de commentaires pour pas grand chose mais ça me permet de m'y retrouver...
)
j'essaye mon script ce soir et je vous dis ce qu'il en est:
(Je sais, il y a beaucoup de commentaires pour pas grand chose mais ça me permet de m'y retrouver...
Code : Tout sélectionner
-----------------------------------------------------------------------------------------------------
-- Gestion de la Lumière du Garage ------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------
-- Ce script permet d'allumer la lumière du garage 1 minute à l'ouverture d'une des portes si la mumière est étteinte (le but est de ne pas relancer le compte à rebour en sortant du garage)
-- De rajouter 10 minutes d'allumage à chaque détection de mouvement
-- Le script ne fonctionne pas si je suis absent de la maison
----------------------------------------------------------------------------------------------------
------ Variables à éditer --------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
local absent = 'Mode Absence' -- Nom de l'interrupteur dans Domoticz
local porte = 'Porte Garage' -- Nom de l'interrupteur dans Domoticz
local portail = 'Portail Garage' -- Nom de l'interrupteur dans Domoticz
local motion1 = 'Détecteur de mouvement Garage' -- Nom de l'interrupteur dans Domoticz
local lumiere = 'Lumière Garage' -- Nom de l'interrupteur dans Domoticz
local current_date = (os.date("%d/%m/%Y")) -- Date courante
local current_heure = (os.date("%X")) -- Heure courante
----------------------------------------------------------------------------------------------------
-- Fin des variables à éditer ----------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
-------- Fonction time -----------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
time = os.date("*t")
function timedifference(d)
s = otherdevices_lastupdate[d]
year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)
t1 = os.time()
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = os.difftime (t1, t2)
return difference
end
-----------------------------------------------------------------------------------------------------
-- Mode Débug ---------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------
debug=false
-----------------------------------------------------------------------------------------------------
-- Gestion de la Lumière ----------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------
commandArray = {}
--SI Le MODE ABSENCE est à OFF ALORS
if (otherdevices[absent] == 'Off') then
--SI la LUMIERE GARAGE est à OFF ALORS
if otherdevices[lumiere]=='Off' then
--Si la porte de garage OU le portail du garage s'ouvre alors
if (devicechanged[portail]=='On') or (devicechanged[porte]=='On') then
if (debug) then print("Ouverture de la porte ou du portail et allumage de la lumière du garage 60s") end
-- Allumer la Lumière pour 60 secondes
commandArray[#commandArray+1]={[lumiere]='On FOR 60'}
end
end
-- Si le détecteur de mouvement change 'On'
if (devicechanged[motion1] == 'On') then
if (debug) then print("Le Détecteur de mouvement Garage passe à ON") end
-- Si la lumière est arrêtée 'Off'
if (otherdevices[lumiere] == 'Off') then
-- Allumer la Lumière
commandArray[#commandArray+1]={[lumiere]='On'}
end
end
-- Si la lumière est 'On' et le détecteur de mouvement est 'Off' et la difference entre l'heure actuelle et le dernier mouvement détecté alors on arrète la lumière
if ((otherdevices[lumiere] == 'On') and otherdevices[motion1] == 'Off' and difference > 600) then
if (debug) then print('Arrêter Lumière Garage après '..difference..'.') end
-- Arrêter la Lumière
commandArray[#commandArray+1]={[lumiere]='Off'}
end
end
return commandArray
Re: Script lumière
Je dirais ['lumiere'] à la place de [lumiere] ce qui donnerait
commandArray[#commandArray+1]={[lumiere]='On FOR 60'} devrait être commandArray[#commandArray+1]={['lumiere']='On FOR 60'}.
Quand je test On FOR 60, 60 c'est des minutes pas des secondes donc j'utiliserai
commandArray[#commandArray+1]={['lumiere']='On FOR 1'}
Après tu utilises la fonction timedifference qui ne se script pas comme "difference > 600" mais comme ça timedifference('nom de ton device') > 600 (ici ceux sont des secondes)
commandArray[#commandArray+1]={[lumiere]='On FOR 60'} devrait être commandArray[#commandArray+1]={['lumiere']='On FOR 60'}.
Quand je test On FOR 60, 60 c'est des minutes pas des secondes donc j'utiliserai
commandArray[#commandArray+1]={['lumiere']='On FOR 1'}
Après tu utilises la fonction timedifference qui ne se script pas comme "difference > 600" mais comme ça timedifference('nom de ton device') > 600 (ici ceux sont des secondes)
PI3+, Buster, Domoticz V2020.2, rflink, zwave, chauffage piloté par qubino, sondes oregon et Vil1d, boite aux lettres détection passage facteur, volets roulants qubino fibaro.
-
landaisbenj
- Messages : 695
- Inscription : 12 mars 2017, 19:24
Re: Script lumière
Je ne vois pas de fonction dater propre au module.lua ??? C'est une fonction date propre à l'os... Il s'en sert tres bien.thier a écrit :Tu utilises les fonction dater qui viennent du fichier module.lua hors dans ton script tu ne lui dit pas de s'en servir. Tu utilise mal la fonction debug, regarde dans ĺe fichier module.lua l'exemple.
Quant a debug ce n'est pas une fonction non plus. Il s'en sert juste de variable. Cela lui sert dans les conditions if debug = true. Du coup il ne doit meme pas savoir ce qu'est le module.lua.
Il faudrait tout un cours rien que pour répondre a ça.vwolive a écrit :...
question bête, a quoi correspond le [#commandArray+1] ?
Sans aller trop loin pour l'instant, en admettant que tu sais ce qu'est une table, alors # permet d'avoir le nombre de valeur d'une table. Comme ça quand tu insère une nouvelle valeur elle se met a la suite et non la ou sa clef existe déjà.
Et en y réfléchissant bien ce n'est pas bon d'avoir un script avec ce type de démarche.
C'est a dire créer un timer a chaque fois que tu fait un commandArray.
Je pense d'ailleurs qu'il y a un probleme. Je crois que cela créé un cron a chaque fois, sans supprimer les anciens. Il doit y avoir une coquille quelque part si tu te retrouve avec plusieur timer pour le meme device. Il faudrait verifier.
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: Script lumière
vwolive a écrit :Code : Tout sélectionner
-- Si la lumière est 'On' et le détecteur de mouvement est 'Off' et la difference entre l'heure actuelle et le dernier mouvement détecté alors on arrète la lumière if ((otherdevices[lumiere] == 'On') and otherdevices[motion1] == 'Off' and difference > 600) then if (debug) then print('Arrêter Lumière Garage après '..difference..'.') end -- Arrêter la Lumière commandArray[#commandArray+1]={[lumiere]='Off'} end end return commandArray
Ca ca ne peut pas bien fonctionner, car c'est un script device.
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: Script lumière
fonction dater viens du téléphone qui corrige tout seul after en dater...
PI3+, Buster, Domoticz V2020.2, rflink, zwave, chauffage piloté par qubino, sondes oregon et Vil1d, boite aux lettres détection passage facteur, volets roulants qubino fibaro.
-
landaisbenj
- Messages : 695
- Inscription : 12 mars 2017, 19:24
Re: Script lumière
A ok xD. Mais je n'ai pas vu de fonction after dans son script ?thier a écrit :fonction dater viens du téléphone qui corrige tout seul after en dater...
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: Script lumière
le problème avec if ((otherdevices[lumiere] == 'On') and otherdevices[motion1] == 'Off' and difference > 600) then, comme c'est un script_device, c'est qu'à chaque changement d'état d'un device ton script va être lu. Et donc à chaque fois que ta condition sera ok tu enverras la commande off pour ta lumière!
En plus si ton difference se rapporte à motion1, ça veut dire que tu éteins ta lumière 10 minutes après avoir quitter la pièce.
j'essairai ça comme code mais il faut revoir la dernière partie
En plus si ton difference se rapporte à motion1, ça veut dire que tu éteins ta lumière 10 minutes après avoir quitter la pièce.
j'essairai ça comme code mais il faut revoir la dernière partie
Code : Tout sélectionner
-----------------------------------------------------------------------------------------------------
-- Gestion de la Lumière du Garage ------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------
-- Ce script permet d'allumer la lumière du garage 1 minute à l'ouverture d'une des portes si la mumière est étteinte (le but est de ne pas relancer le compte à rebour en sortant du garage)
-- De rajouter 10 minutes d'allumage à chaque détection de mouvement
-- Le script ne fonctionne pas si je suis absent de la maison
----------------------------------------------------------------------------------------------------
------ Variables à éditer --------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
local current_date = (os.date("%d/%m/%Y")) -- Date courante
local current_heure = (os.date("%X")) -- Heure courante
----------------------------------------------------------------------------------------------------
-- Fin des variables à éditer ----------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
time = os.date("*t")
function timedifference(d)
s = otherdevices_lastupdate[d]
year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)
t1 = os.time()
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = os.difftime (t1, t2)
return difference
end
-----------------------------------------------------------------------
debug=false
-----------------------------------------------------------------------------------------------------
-- Gestion de la Lumière ----------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------
commandArray = {}
--Si la porte de garage OU le portail du garage s'ouvre et SI Le MODE ABSENCE est à OFF et SI la LUMIERE GARAGE est à OFF alors
if ( devicechanged['Portail Garage']=='On' or devicechanged['Porte Garage']=='On' and otherdevices['Mode Absence'] == 'Off' and otherdevices['Lumière Garage']=='Off' ) then
if (debug) then print("Ouverture de la porte ou du portail et allumage de la lumière du garage 60s") end
-- Allumer la Lumière pour 60 secondes
commandArray[#commandArray+1]={['Lumière Garage']='On FOR 1'}
end
end
-- Si le détecteur de mouvement change 'On' je renvoi l'ordre d'allumage
if (devicechanged[motion1] == 'On') then
if (debug) then print("Le Détecteur de mouvement Garage passe à ON") end
-- Allumer la Lumière
commandArray[#commandArray+1]={['Lumière Garage']='On'}
end
end
--partie à revoir en dessous
-- Si la lumière est 'On' et le détecteur de mouvement est 'Off' et la difference entre l'heure actuelle et le dernier mouvement détecté alors on arrète la lumière
if (otherdevices['Mode Absence'] == 'Off' and otherdevices['Détecteur de mouvement Garage'] == 'Off' and otherdevices['Lumière Garage'] == 'On' and timedifference('Détecteur de mouvement Garage') > 600) then
if (debug) then print('Arrêter Lumière Garage après '..difference..'.') end
-- Arrêter la Lumière
commandArray[#commandArray+1]={[lumiere]='Off'}
end
end
return commandArrayPI3+, Buster, Domoticz V2020.2, rflink, zwave, chauffage piloté par qubino, sondes oregon et Vil1d, boite aux lettres détection passage facteur, volets roulants qubino fibaro.
Re: Script lumière
@landaisbenj j'ai lu trop vite le On FOR 60.
PI3+, Buster, Domoticz V2020.2, rflink, zwave, chauffage piloté par qubino, sondes oregon et Vil1d, boite aux lettres détection passage facteur, volets roulants qubino fibaro.
Re: Script lumière
Bon je m'en sort pas....
il y a un problème avec le différence time, lorsque la lumière est éteinte depuis longtemps, il ne veux pas l'allumer puisque le délais pour extinction est passé, donc la condition est vrai, donc il éteint.
je ne sais pas comment faire, j'ai essayé 6 versions différentes, et je n'arrive pas à le faire marcher...
il y a un problème avec le différence time, lorsque la lumière est éteinte depuis longtemps, il ne veux pas l'allumer puisque le délais pour extinction est passé, donc la condition est vrai, donc il éteint.
je ne sais pas comment faire, j'ai essayé 6 versions différentes, et je n'arrive pas à le faire marcher...