Page 1 sur 1
LUA : créer un premier script simple
Publié : 28 juin 2019, 15:57
par vad
Je cherche a créer un script, plutôt simple, mais je suis totalement perdu, et je ne trouve aucune info qui me permette de débuter. Je ne suis pas développeur et je n’y comprends pas grand-chose, alors les scripts ultra compliqués ne m’aident pas vraiment a comprendre la structure
Je fonctionne uniquement avec un RFXCom en 433Mhz, donc sans retour d’état. L’automatisation de mes volets fonctionne parfaitement en fonction des heures de coucher et de lever du soleil, mais le climat actuel m’oblige ensuite a les refermer en partie afin de garder une température supportable dans la maison.
Le fonctionnement que je voudrais mettre en place, dans ma tête il ressemble a ça :
Code : Tout sélectionner
- Si l’interrupteur virtuel « Mode ETE» est sur ON (s’il est sur OFF il ne se passe rien du tout)
- A une heure dite, par exemple a 8h30
- Le script envoie une impulsion « off » sur l’interrupteur « Volets » (ce qui active la descente des volets roulants)
- le script fait une pause d’un temps donné (en l’occurrence 9 secondes le temps que les volets descendent a la position voulue, méthode empirique puisque je n’ai aucun retour d’état)
- le script envoie une impulsion « on » sur l’interrupteur « Volets » (afin de stopper la descente)
- Fin (le script ne doit pas se relancer avant le lendemain sans quoi en l’absence de retour d’état, les volets seraient complètement fermés)
Bref, cela ne me semble pas irréalisable, mais je n’arrive pas a trouver par quel bout commencer

Re: LUA : créer un premier script simple
Publié : 29 juin 2019, 09:21
par Thierry_06
Bonjour
Pour ma part pas de script . J'ai fait un groupe avec tous mes volets que j'ai appelé ouverture 1/4 Dans ce groupe une ligne par volet pour le demarrage de l'ouverture ( Off) et une ligne pour l''arret (Stop) avec un delai d'allumage (6 ) pour moi ca correspond a un volet relevé de 40 cm.
Re: LUA : créer un premier script simple
Publié : 29 juin 2019, 09:33
par Wolfen38
Sans garanti, car j'ai jamais essayé de passer un inter à off, toujours on, mais essaie.
Si tu n'as pas le fichier modules.lua, il est la :
https://github.com/vil1driver/lua/blob/ ... odules.lua
Code : Tout sélectionner
-- chargement des modules
dofile('/home/pi/domoticz/scripts/lua/modules.lua')
local debug = true -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local heure = (heure == '08:30')
local mode = otherdevices['Mode ETE'] == 'On'
commandArray = {}
if heure and mode then
commandArray['Volets'] = 'Off FOR 9 SECONDS'
end
return commandArray
Re: LUA : créer un premier script simple
Publié : 29 juin 2019, 14:26
par vad
Merci a tout les deux pour vos réponses

Du coup j'ai testé les deux
Dans l'ordre. J'ai testé vite fait le scénario, c'est une partie que je n'avais jamais explorée. La solution avec les délais semble convenir, mais j'ai visiblement loupé un détail puisque le scénario créé se contente d'ouvrir ou de fermer entièrement les volets, j'ai l'impression qu’après la commande qui lance la descente, il n'envoie pas la commande retardée qui stoppe la descente.
Pour le script, mille mercis puisque la j'y comprends enfin (un peu) quelque chose

Mais cela ne fonctionne pas. Mes commandes de volets sont a impulsion, et quant ils sont en mouvement une impulsion dans le sens contraire les stoppe. Si je garde le doigt quelques secondes sur le bouton, il ne se passe rien.
Je pense qu'il faudrait une séquence du style :
Code : Tout sélectionner
if heure and mode then
commandArray['Volets'] = 'Off'
commandArray['Volets'] = 'On AFTER 9'
Je me suis inspiré de ce topic pour le délai :
https://www.domoticz.com/forum/viewtopic.php?t=16165 j'espère ne pas trop m'être planté.
Mais pour le moment j'ai un autre problème : j'ai testé le script en le simplifiant comme ceci (l'heure a été modifiée juste pour que le test se passe maintenant)
Code : Tout sélectionner
-- chargement des modules
dofile('/home/pi/domoticz/scripts/lua/modules.lua')
local debug = true -- true pour voir les logs dans la console log Dz ou false $
local heure = (heure == '14:15')
local mode = otherdevices['Mode ETE'] == 'On'
commandArray = {}
if heure and mode then
commandArray['Volets'] = 'Off'
end
return commandArray
Le bouton 'Mode ETE' est bien sur ON, donc logiquement les 'Volets' auraient du se fermer entièrement a 14h30, hors il ne se passe rien. Les boutons 'Mode ETE' et 'Volets' sont bien créés avec le même nom dans Domoticz
Re: LUA : créer un premier script simple
Publié : 29 juin 2019, 14:41
par vad
J'ai nommé mon script en script_device mais je n'aurai pas du le nommer en script_time ?
Re: LUA : créer un premier script simple
Publié : 09 oct. 2019, 12:48
par landaisbenj
Le probleme ici c'est de savoir quand est déclencher le script.
Imaginons n'importe quel script:
Si la porte est ouverte alors:
Activer l'alarme.
Fin.
Un script n'est jamais automatique.
La condition que tu y ecris ("si la porte s'ouvre") n'est pas un declencheur du script. Ce n'est qu'une condition pour lire la suite. Par exemple, ici le script sera declenché quoi que soit l'etat de la porte, ouverte ou fermée.
Donc quand le declencher?
Au moment ou elle s'ouvre, au moment ou elle est ouverte, n'importe quand...
Ca fait beaucoup de possibilité sauf que domoticz lui n'en connait pas beaucoup...
Du coup il faut determiner quand declencher ton script par rapport a ce que tu mets dedans. On pourrait par exemple le declencher toutes les minutes (script time) et verifier les bonnes conditions a chaque fois. Mais imaginons que tu as moins d'une minute activer l'alarme, si la porte s'ouvre a 11h02min et 01seconde alors l'alarme se declenchera dans 59s...
Ici je devrais donc dire que je veux declencher l'alarme au moment du changement d'etat d'un equipement (script device). Sauf que imaginons que j'ai un equipement (temperature) qui change quand ma porte est ouverte. Au moment ou il y a un changement de temperature, mon script sera declenché, si ma porte est ouverte a ce moment là alors l'alarme s'activera...
Du coup dans le script on precise la condition suivante:
Si la porte s'ouvre, et non pas si la porte est ouverte. (difference entre if devicechanged['porte']=='Open' et if otherdevice['porte']=='Open')
En contre exemple, je ne peux pas avoir un script time qui se declenche toutes les minutes, en demandant de verifier si la porte s'ouvre, car au moment ou le script est declenché, il n'y aura peut etre pas d'action sur un equipement au meme moment que le declenchement du script...
Ca c'est pour la difference entre un script time et un script device.
Sauf que c'est problematique dans ton cas...
Tu veux qu'a 8h30 pile, le volet se ferme a moitié.
Donc un script time. Condition si heure est 8h30 mode ete egal on, (et pourquoi pas si volet ouvert), alors fermer les volets a moitie.
Pour fermer un volet tu appuie sur ON mais pour l'arreter tu réappuye sur le meme bouton je crois.