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

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