Page 2 sur 3
Re: Script lumière
Publié : 05 avr. 2018, 11:40
par thier
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.
Re: Script lumière
Publié : 05 avr. 2018, 17:14
par vwolive
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...

)
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
Publié : 05 avr. 2018, 17:43
par thier
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)
Re: Script lumière
Publié : 05 avr. 2018, 17:56
par landaisbenj
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.
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.
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.
vwolive a écrit :...
question bête, a quoi correspond le [#commandArray+1] ?
Il faudrait tout un cours rien que pour répondre a ça.
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.
Re: Script lumière
Publié : 05 avr. 2018, 18:14
par landaisbenj
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.
Re: Script lumière
Publié : 05 avr. 2018, 18:16
par thier
fonction dater viens du téléphone qui corrige tout seul after en dater...
Re: Script lumière
Publié : 05 avr. 2018, 18:24
par landaisbenj
thier a écrit :fonction dater viens du téléphone qui corrige tout seul after en dater...
A ok xD. Mais je n'ai pas vu de fonction after dans son script ?
Re: Script lumière
Publié : 05 avr. 2018, 18:28
par thier
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
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 commandArray
Re: Script lumière
Publié : 05 avr. 2018, 18:31
par thier
@landaisbenj j'ai lu trop vite le On FOR 60.
Re: Script lumière
Publié : 05 avr. 2018, 23:38
par vwolive
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...