Page 1 sur 1

LUA - Condition d'heure dans un script_device

Publié : 12 janv. 2017, 17:17
par deennoo
Bonjour a tous,

J'ai un soucis que je n'arrive pas a regler, pas assez d'experience en LUA.

Je souhaite allumer un spot en mode nuit si un detecteur trouve une presence de 21H a 6H

j'ai realiser ce script qui ne fonctionne pas du tout :

Code : Tout sélectionner

-- chargement des modules
package.path = package.path..";/home/nico/domoticz/scripts/lua/?.lua"
require "modules"

commandArray = {}
if (tonumber(os.date('%H')) > 21 and tonumber(os.date('%H')) < 6 ) and devicechanged['Mouvement Salle de Bains'] == 'On' and otherdevices['Spot sdb mode nuit'] == 'Off' then -- de 21h & 6h
switchOn('Spot sdb mode nuit')
elseif  (tonumber(os.date('%H')) > 21 and tonumber(os.date('%H')) < 6  ) and  devicechanged['Mouvement Salle de Bains'] == 'Off' and otherdevices['Spot sdb mode nuit'] == 'On' then
switchOff('Spot sdb mode nuit')
end 
return commandArray
je n'ai aucune erreur dans les logs ni dans l'editeur de script...je suis planter, merci de vos lumieres :-)

Re: LUA - Condition d'heure dans un script_device

Publié : 12 janv. 2017, 18:09
par thier
Je mettrais local heure = os.date("%H:%M") et dans le script If (heure >'23:00' and heure < '06:00') then
Après ça passe peut-être avec local time=os.time() et dans le script if (tonumber(os.date('%H',time)) >23 and tonumber(os.date('%H',time)) < 6 ) then
Autre solution qui se rapproche de la tienne if (os.date('%H') > '23' and os.date('%H') < '6' ) then
Une remarque générale, pour debugger un script tu mets des print un peu partout. Dans ton cas tu n'a pas d'erreur mais tu aurais vu que ton script ne passe pas la comparaison de l'heure. ça permet de cibler les endroits ou ça bug.

Re: LUA - Condition d'heure dans un script_device

Publié : 12 janv. 2017, 20:52
par Neutrino
De mémoire, je dirais :

Code : Tout sélectionner

time = os.date("*t")
if ((time.hour >= 21 and time.hour <=23) or (time.hour >= 0 and time.hour <6)) and devicechanged['Mouvement Salle de Bains'] == 'On' and otherdevices['Spot sdb mode nuit'] == 'Off' then -- de 21h & 6h 
A tester ;)

Re: LUA - Condition d'heure dans un script_device

Publié : 12 janv. 2017, 21:08
par deennoo
Merci @thier de ton aide

Voici le script qui fonctionne

Code : Tout sélectionner

--Script_device_spotsdbveilleuse.lua
--Ce script actionne une veilleuse dans la salle de bain si une presence est detectée entre 22h et 6h


-- chargement des modules speedupdomoticz
package.path = package.path..";/home/nico/domoticz/scripts/lua/?.lua"
require "modules"

commandArray = {}
if (os.date('%H') > '21' and os.date('%H') < '6' ) and devicechanged['Mouvement Salle de Bains']=='On' then 
    switchOn('Spot sdb mode nuit')
    elseif (os.date('%H') > '21' and os.date('%H') < '6' ) and devicechanged['Mouvement Salle de Bains']=='Off' then 
    switchOff('Spot sdb mode nuit')
 end 
return commandArray

Re: LUA - Condition d'heure dans un script_device

Publié : 05 nov. 2017, 16:34
par djksage
Bonjour,

j'essaie en vain de modifier ton script pour coller à mes besoin mais j'y arrive pas :(

j'utilise dans la chambre de mon fils un xiaomi wireless bouton qui fonctionne avec le script suivant :

Code : Tout sélectionner

-- chargement des modules
dofile('/var/packages/domoticz/target/var/scripts/lua/modules.lua')

commandArray = {}
 if (devicechanged['BP Xiaomi CH Alex']=='Click' and otherdevices['Chambre Alexandre']=='Off') then
 switchOn('Chambre Alexandre',100) 
 elseif (devicechanged['BP Xiaomi CH Alex']=='Click' and otherdevices['Chambre Alexandre']~='Off') then
 switchOff('Chambre Alexandre')
 
 end

 return commandArray
je voulais ajouter une condition d'heure pour allumer les lumières à 30% entre 21h et 6h

mais ça ne fonctionne pas

Code : Tout sélectionner

commandArray = {}
 if (devicechanged['BP Xiaomi CH Alex']=='Click' and otherdevices['Chambre Alexandre']=='Off') then
    if (os.date('%H') > '21' and os.date('%H') < '6' ) then
    switchOn('Chambre Alexandre',30)
    elseif (os.date('%H') > '6' and os.date('%H') < '21' ) then
    switchOn('Chambre Alexandre',100)
 elseif (devicechanged['BP Xiaomi CH Alex']=='Click' and otherdevices['Chambre Alexandre']~='Off') then
 switchOff('Chambre Alexandre')
    end
 end

 return commandArray
ou

Code : Tout sélectionner

commandArray = {}
if (os.date('%H') > '21' and os.date('%H') < '6' ) and (devicechanged['BP Xiaomi CH Alex']=='Click' and otherdevices['Chambre Alexandre']=='Off') then
    switchOn('Chambre Alexandre',30)
    elseif (os.date('%H') > '6' and os.date('%H') < '21' ) and (devicechanged['BP Xiaomi CH Alex']=='Click' and otherdevices['Chambre Alexandre']=='Off') then
    switchOn('Chambre Alexandre',100)
    elseif (devicechanged['BP Xiaomi CH Alex']=='Click' and otherdevices['Chambre Alexandre']~='Off') then
    switchOff('Chambre Alexandre')
 end
return commandArray
j'avais dans l'idée de d'initier une variable
Si + 21h variable Lumière = 30
Si non + 6h variable Lumière = 100

puis à la ligne switchOn('Chambre Alexandre',$Lumière)

est ce que mon raisonnement est juste?

Bref je ne suis pas au top avec le LUA (ça doit ce voir :lol: ) si vous avez des conseils ou des pistes je suis preneur ;)

Merci

Re: LUA - Condition d'heure dans un script_device

Publié : 05 nov. 2017, 23:09
par Neutrino
Bonjour,

Le problème n'est pas le LUA, mais la logique.
Il faut penser de 0h00 à 23h59 et non de 21h00 à 06h00.
L'heure ne peut pas être supérieure à 21 et inférieure à 6 en même temps. ;)

Re: LUA - Condition d'heure dans un script_device

Publié : 06 nov. 2017, 17:48
par ogulf
J'allais le dire !!
Le test suivant suffit dans ce cas précis :

Si heure >= 21 ou heure <= 6
Alors ....
Sinon ...
Fin si

Inutile de tester par rapport à minuit (0h)