LUA - Condition d'heure dans un script_device

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 <\>.
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

LUA - Condition d'heure dans un script_device

Message 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 :-)
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
thier
Messages : 807
Inscription : 26 sept. 2015, 10:32
Localisation : charente

Re: LUA - Condition d'heure dans un script_device

Message 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.
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.
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: LUA - Condition d'heure dans un script_device

Message 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 ;)
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: LUA - Condition d'heure dans un script_device

Message 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
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
djksage
Messages : 190
Inscription : 16 déc. 2015, 19:42

Re: LUA - Condition d'heure dans un script_device

Message 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
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: LUA - Condition d'heure dans un script_device

Message 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. ;)
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
ogulf
Messages : 445
Inscription : 15 juin 2017, 14:41

Re: LUA - Condition d'heure dans un script_device

Message 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)
Domoticz Stable sur RPi3 + RFPlayer + ZWave+ + RFLink R48 :
- 11 x RF660P
- 1 x FGSD-002
- 10 x F007TH
- 5 x Emcoluxr EV1527 + 4 x NAS-DS01Z
- 4 x NAS-PD02Z
- 1 x Shelly 1PM
Répondre