LUA : créer un premier script simple

Vous avez des questions concernant les scripts dans Domoticz, posez vos questions ici, quelque soit le langage nous tenterons des réponses pertinentes ...
Répondre
vad
Messages : 10
Enregistré le : 21 janv. 2018, 19:09

LUA : créer un premier script simple

Message 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 :?

Thierry_06
Messages : 89
Enregistré le : 02 janv. 2017, 11:02
Localisation : Alpes maritimes

Re: LUA : créer un premier script simple

Message 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.
Modifié en dernier par Thierry_06 le 29 juin 2019, 09:39, modifié 1 fois.

Wolfen38
Messages : 1457
Enregistré le : 19 oct. 2017, 14:49

Re: LUA : créer un premier script simple

Message 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

vad
Messages : 10
Enregistré le : 21 janv. 2018, 19:09

Re: LUA : créer un premier script simple

Message 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

vad
Messages : 10
Enregistré le : 21 janv. 2018, 19:09

Re: LUA : créer un premier script simple

Message par vad »

J'ai nommé mon script en script_device mais je n'aurai pas du le nommer en script_time ?

landaisbenj
Messages : 695
Enregistré le : 12 mars 2017, 19:24

Re: LUA : créer un premier script simple

Message 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.
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway

Répondre