Script lumière

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 <\>.
thier
Messages : 807
Inscription : 26 sept. 2015, 10:32
Localisation : charente

Re: Script lumière

Message 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.
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.
vwolive
Messages : 27
Inscription : 07 janv. 2018, 12:17

Re: Script lumière

Message 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... :mrgreen: :mrgreen: )

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
thier
Messages : 807
Inscription : 26 sept. 2015, 10:32
Localisation : charente

Re: Script lumière

Message 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)
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

Message 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.
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: Script lumière

Message 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.
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
thier
Messages : 807
Inscription : 26 sept. 2015, 10:32
Localisation : charente

Re: Script lumière

Message par thier »

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

Message 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 ?
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
thier
Messages : 807
Inscription : 26 sept. 2015, 10:32
Localisation : charente

Re: Script lumière

Message 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
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.
thier
Messages : 807
Inscription : 26 sept. 2015, 10:32
Localisation : charente

Re: Script lumière

Message par thier »

@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.
vwolive
Messages : 27
Inscription : 07 janv. 2018, 12:17

Re: Script lumière

Message 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...
Répondre