Script lumière
Script lumière
Bonjour à tous,
Je fais appel à vous pour écrire un script que j'arrive pas à faire marcher.
C'est pour gérer la lumière de mon garage. Aujourd'hui j'ai un capteur d'ouverture de la porte, un capteur d'ouverture du garage, un détecteur de mouvement, et bientôt un deuxième (mon garage est grand et un ne suffit pas).
Je souhaite que lorsque j'ouvre la porte ou le garage la lumière s'allume pour une minute. Si en plus il détecte la présence sur un ou l'autre des capteurs de mouvement, il relance pour 10 minutes à chaque fois.
Si il y a des bonnes âmes pour m'aider, c'est volontiers.
Merci à tous
Je fais appel à vous pour écrire un script que j'arrive pas à faire marcher.
C'est pour gérer la lumière de mon garage. Aujourd'hui j'ai un capteur d'ouverture de la porte, un capteur d'ouverture du garage, un détecteur de mouvement, et bientôt un deuxième (mon garage est grand et un ne suffit pas).
Je souhaite que lorsque j'ouvre la porte ou le garage la lumière s'allume pour une minute. Si en plus il détecte la présence sur un ou l'autre des capteurs de mouvement, il relance pour 10 minutes à chaque fois.
Si il y a des bonnes âmes pour m'aider, c'est volontiers.
Merci à tous
Re: Script lumière
Aucun intérêt à écrire ton script. Le mieux c'est d'apprendre. Post ton script qui ne fonctionne pas et on t'aidera. Inspire toi des exemples qui sont dans le dossier /scripts/lua. Commence simple, si détecteur détecte , j'allume la lumière. Puis tu compliques au fur et à mesure.
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.
-
vil1driver
- Messages : 5661
- Inscription : 30 janv. 2015, 11:07
- Localisation : Rennes (35)
Re: Script lumière
Salut,
+1
+1
Dernière modification par vil1driver le 05 avr. 2018, 03:42, modifié 1 fois.
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua
Un ex domoticzien
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua
Un ex domoticzien
Re: Script lumière
Pas de soucis, je vous le met demain. La partie avec un détecteur de mouvement marche, j'ai adapté un script que j'ai trouvé, mais je ne sais pas comment intégrer l'allumage d'une minute lorsque j'ouvre la porte.
Re: Script lumière
Alors voici mon script qui ne gère qu'un seul capteur de mouvement.
et voici le Blocky que je voudrais ajouter dans mon code. Seulement je ne sais pas par quel bout le prendre.
Code : Tout sélectionner
--
-- Obtenir l'heure actuelle
t1 = os.time()
-- Obtenir l'heure / la date de la dernière mise à jour sur le capteur de mouvement
s = otherdevices_lastupdate['Détecteur de mouvement Garage']
-- Couper les données retournées avec la dernière mise à jour sur le détecteur de mouvement pour obtenir des valeurs individuelles
-- Source: https://www.domoticz.com/wiki/Event_script_examples#Send_a_warning_when_the_garage_door_has_been_open_for_more_than_10_minutes
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)
-- Set to false to disable print
debug=true
commandArray = {}
-- Convertir les données coupées en format d'heure
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
-- Différence entre l'heure actuelle et la dernière mise à jour du détecteur de mouvement
difference = (os.difftime (t1, t2))
-- Si le détecteur de mouvement change 'On'
if (devicechanged['Détecteur de mouvement Garage'] == 'On') then
if (debug) then
print("Motion on")
end
-- si la prise de la lumière est arrêtée 'Off'
if (otherdevices['Lumière Garage'] == 'Off') then
-- Allumer la Lumière
commandArray[1]={['Lumière Garage']='On'}
end
end
-- Si la lumière est 'On' et le détecteir de mouvement est 'Off' et la difference entre l'heure actuelle et le dernier mouvement détecté alors on arrète la lumière
-- Gardez en tête que l'ampoule s'éteindra après que le détecteur de mouvement s'éteindra + le temps que vous définissez avec la différence> 60
-- Par exemple, mon détecteur de mouvement s'éteint après 120 secondes, alors ajoutez le 60 et l'ampoule s'éteint après 120 + 60 = 180 secondes
if ((otherdevices['Lumière Garage'] == 'On') and otherdevices['Détecteur de mouvement Garage'] == 'Off' and difference > 600) then
if (debug) then
print('Arrêter Lumière Garage après '..difference..'.')
end
-- Arrêter la Lumière
commandArray['Lumière Garage']='Off'
end
return commandArray-
landaisbenj
- Messages : 695
- Inscription : 12 mars 2017, 19:24
Re: Script lumière
Comme je le dis a chaque fois il faut poser le cheminement de ce que tu veux à l’écrit. Une fois synthaxé c'est déjà beaucoup plus facile de le scripter.
Dans ton cas on voit bien qu'il y a beaucoup de commentaire donc ca à l'air d’être bon pour le lua. Pour le blockly écris le en vocabulaire. Apres tu traduit ça en LUA et après tu verra que c'est plus simple a intégrer dans un script.
En gros si on commence par le debut, ton blockly indique cela:
Pour ton premier script je te suggère aussi de le simplifier et de l'organiser. Quand il sera plus clair, tu repéreras peut être plus facilement où intégrer ton deuxième script.
[EDIT] En relisant un peu le premier script en LUA je le trouve etonnant. S'agit-il d'un script time ?
Dans ton cas on voit bien qu'il y a beaucoup de commentaire donc ca à l'air d’être bon pour le lua. Pour le blockly écris le en vocabulaire. Apres tu traduit ça en LUA et après tu verra que c'est plus simple a intégrer dans un script.
En gros si on commence par le debut, ton blockly indique cela:
Il y a deja un probleme dans les deux premiers arguments de la condition.SI (la porte du garage est a ON ou la porte du garage est a ON) ET (le mode absence est a OFF ET la lumiere est a OFF)
Pour ton premier script je te suggère aussi de le simplifier et de l'organiser. Quand il sera plus clair, tu repéreras peut être plus facilement où intégrer ton deuxième script.
[EDIT] En relisant un peu le premier script en LUA je le trouve etonnant. S'agit-il d'un script time ?
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
Re: Script lumière
Donc bonjour à tous,
je tiens à préciser que je n'ai jamais écris de script. je connais la logique, je connais le grafcet et la logique de par ma formation, mais j'ai jamais écrit en lua.
ce que je veux faire (et pour lequel j'ai besoin d'aide) est le code suivant:
Evidemment le code n'est pas abouti car je ne connais pas le langage ni comment m'y prendre. s'il y a une âme charitable pour m'aider, c'est volontiers.
Merci
je tiens à préciser que je n'ai jamais écris de script. je connais la logique, je connais le grafcet et la logique de par ma formation, mais j'ai jamais écrit en lua.
ce que je veux faire (et pour lequel j'ai besoin d'aide) est le code suivant:
Code : Tout sélectionner
-- Gestion de la lumière du GARAGE
--
-- otherdevices, otherdevices_lastupdate and otherdevices_svalues are arrays for all devices:
otherdevices['Porte Garage'] = "On"
otherdevices['Portail Garage'] = "On"
otherdevices['Detecteur de mouvement Garage 1'] = "On"
otherdevices['Detecteur de mouvement Garage 2'] = "On"
otherdevices['Lumière Garage'] = "On"
otherdevices['Mode Absence'] = "On"
commandArray = {}
-- Ecrire false pour désactiver le débug
debug=true
--Si je ne suis pas absent de la maison alors je déroule le script
if (otherdevices['Mode Absence'] == 'Off') then
-- Si la porte de garage OU le portail du garage s'ouvre ET que la lumière du garage est étteinte (le but est de ne pas relancer le compte à rebour en sortant du garage)
if ((deviceschanged['Porte Garage'] == 'On') or (otherdevices['Portail Garage'] == 'On') and otherdevices['Lumière Garage'] == 'Off') then
--Allumer la lumière du garage pour une minute
if (debug) then
print("Ouverture de porte et allumage de la lumière du garage")
end
if (otherdevices['Lumière Garage'] == 'Off') then
-- Allumer la Lumière
commandArray[1]={['Lumière Garage']='On'}
end
end
--si le détecteur de mouvement 1 OU le détecteur de mouvement 2 =ON alors
--Allumer la lumière du garage pour 10 minutes
end
return commandArray
Merci
-
landaisbenj
- Messages : 695
- Inscription : 12 mars 2017, 19:24
Re: Script lumière
Bah si tu a la logique, rien qu'avec la base du script que tu as tu peux y arriver...
Pour pas s’éterniser sur ça, ça doit être un truc comme ça:
Le changement d’état sur un device est declaré par la table: devicechanged
L’état à l'instant T d'un device est déclaré par la table: otherdevices
L'action sur un device est demandé par la table commandArray
Insérer un ordre dans la table commandArray peut se faire comme ça: commandArray[#commandArray+1]={'device'='ordre'}
Domoticz sachant lire certains ordre tordu, demander une temporisation se fait comme ca: commandArray[#commandArray+1]={'device'='On FOR 600'}
Pour pas s’éterniser sur ça, ça doit être un truc comme ça:
Le changement d’état sur un device est declaré par la table: devicechanged
L’état à l'instant T d'un device est déclaré par la table: otherdevices
L'action sur un device est demandé par la table commandArray
Insérer un ordre dans la table commandArray peut se faire comme ça: commandArray[#commandArray+1]={'device'='ordre'}
Domoticz sachant lire certains ordre tordu, demander une temporisation se fait comme ca: commandArray[#commandArray+1]={'device'='On FOR 600'}
Code : Tout sélectionner
--SI la LUMIERE est à OFF ALORS
if otherdevices['Lumiere']=='Off' then
--SI la PORTE change pour OPEN ou le PORTAIL change pour OPEN ALORS
if devicechanged['Portail Garage']=='On' or devicechanged['Porte Garage']=='On' then
--ALLUMER LA LUMIERE
commandArray[#commandArray+1]={['Lumière Garage']='On'}
end
--SI le DETECTEUR 1 passe à ON ou le DETECTEUR 2 passe à ON ALORS
if devicechanged['Detecteur de mouvement Garage 1']=='On' or devicechanged['Detecteur de mouvement Garage 2']=='On' then
--ALLUMER LA LUMIERE pendant 10minutes
commandArray[#commandArray+1]={['Lumière Garage']='On FOR 600'}
end
endRpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
Re: Script lumière
super, avec ça je devrais m'en sortir....
question bête, a quoi correspond le [#commandArray+1] ?
question bête, a quoi correspond le [#commandArray+1] ?
Re: Script lumière
Bonjour à tous,
je me suis servi de tous vos conseils, et j'ai réalisé mon code. Il est en "device".
il m'allume bien la lumière, MAIS, il ne l'arrête pas.
qu'il soit allumé par la porte (lumière = OFF ==> Ouverture de la porte ==> allumage pour 60 secondes) la lumière ne s'arrete pas.
par le détecteur de mouvement non plus (Lumière = ON ==> Détection de mouvement ==> allumage pour 600s)
cependant, le "ON FOR 600" remet l'état du switch initial après 600s soit "ON" donc ce serait normal que ça ne marche pas.
Ce que je veux mettre en place est vraiment une notion arret après 10 minutes si pas de détection de mouvement.
Si je passe 2 heures dans mon garage, je ne veux pas que la lumière s’éteigne pour se rallumer...
Or j'ai également l'impression que la commande "OFF AFTER 600" n'est pas annulée si elle est relancée quelques secondes après... il enverra 2 "OFF"
Voici mon code,
Je vous remercie d'avance pour votre aide. Je met toute la bonne volonté pour avancer tout seul et comprendre tout ça... 
je me suis servi de tous vos conseils, et j'ai réalisé mon code. Il est en "device".
il m'allume bien la lumière, MAIS, il ne l'arrête pas.
qu'il soit allumé par la porte (lumière = OFF ==> Ouverture de la porte ==> allumage pour 60 secondes) la lumière ne s'arrete pas.
par le détecteur de mouvement non plus (Lumière = ON ==> Détection de mouvement ==> allumage pour 600s)
cependant, le "ON FOR 600" remet l'état du switch initial après 600s soit "ON" donc ce serait normal que ça ne marche pas.
Ce que je veux mettre en place est vraiment une notion arret après 10 minutes si pas de détection de mouvement.
Si je passe 2 heures dans mon garage, je ne veux pas que la lumière s’éteigne pour se rallumer...
Or j'ai également l'impression que la commande "OFF AFTER 600" n'est pas annulée si elle est relancée quelques secondes après... il enverra 2 "OFF"
Voici mon code,
Code : Tout sélectionner
-- Gestion de la lumière du GARAGE
commandArray = {}
-- Ecrire false pour désactiver le débug
debug=true
--(Si je ne suis pas absent de la maison alors je déroule le script pour que la lumière s'allume)
--SI Le MODE ABSENCE est à OFF ALORS
if (otherdevices['Mode Absence'] == 'Off') then
--Si la lumière du garage est étteinte (le but est de ne pas relancer le compte à rebour en sortant du garage)
--SI la LUMIERE GARAGE est à OFF ALORS
if otherdevices['Lumière Garage']=='Off' then
-- Si la porte de garage OU le portail du garage s'ouvre
--SI la PORTE change pour OPEN ou le PORTAIL change pour OPEN ALORS
if (devicechanged['Portail Garage']=='On' or devicechanged['Porte Garage']=='On') then
--Allumer la lumière du garage pour 60 secondes
if (debug) then
print("Ouverture de porte et allumage de la lumière du garage")
end
-- Allumer la Lumière pour 60 secondes
commandArray[#commandArray+1]={['Lumière Garage']='On FOR 60'}
end
end
--SI le DETECTEUR passe à ON ALORS
if devicechanged['Détecteur de mouvement Garage']=='On' then
if (debug) then
print("Ouverture de porte et allumage de la lumière du garage")
end
--Allumer la lumière du garage pour 10 minutes
commandArray[#commandArray+1]={['Lumière Garage']='On FOR 600'}
end
end
return commandArray