Page 1 sur 1
LUA et ordre d'exécution du "CommandArray"
Publié : 06 janv. 2022, 11:48
par piafou31
Bonjour à tous,
Voici plusieurs jours que je me casse les dents sur un code LUA.
Mon besoin est le suivant:
- au déclenchement d'un certain événement je veux
* attendre 7 sec.
* passer un bouton à l'état ON
* attendre 7 sec
* passer un autre bouton à l'état ON
Voici un extrait du code:
Code : Tout sélectionner
KONICS_FBX_HC_POWER_value = uservariables['KONICS_FBX_HC_POWER'] ;
if (KONICS_FBX_HC_POWER_value == 0 ) then
commandArray[0]={['RADIO']='On AFTER 7'}
commandArray[1]={['CH.ButtonTests']='On AFTER 7'}
end
Mon problème est le suivant:
Les 2 boutons passent à "OFF en même temps.
Donc au lieu d'avoir la séquence suivante:
TRIGGER - 7s - Bouton RADIO ON - 7s - Bouton TESTS ON
Voici la séquence telle qu'exécutée:
TRIGGER - 7s - Boutons RADIO et TESTS à ON en mm tps
Merci beaucoup !
Re: LUA et ordre d'exécution du "CommandArray"
Publié : 06 janv. 2022, 11:55
par Wolfen38
Et avec cette syntaxe ?
Code : Tout sélectionner
commandArray['RADIO']='On AFTER 7'
commandArray['CH.ButtonTests']='On AFTER 14'
Re: LUA et ordre d'exécution du "CommandArray"
Publié : 06 janv. 2022, 15:16
par piafou31
Oui en effet, ça fait le job, merci
Alors j'en profite pour continuer de dérouler la pelote, si maintenant j'insère aussi dans mon CommandArray d'autres actions qui ne concernent plus des boutons, mais le lancement d'une URL par exemple.
Voici la séquence
- le bouton "RADIO" démarre un webserver
- une fois que le webserver a fini de démarrer (~10sec), je lance une URL
Code : Tout sélectionner
commandArray[#commandArray+ 1] ={['RADIO']='On AFTER 5'}
commandArray[#commandArray+ 1] = {['CH.ButtonTests']='On AFTER 14'}
commandArray[#commandArray+ 1] = {['OpenURL'] = "https://monwebserver:XXX/tvhcfb/radio_generic.php"} ;
Avec le code ci-dessus, j'utilise le "'CH.ButtonTests" comme pour faire une pause, sauf que malheureusement le "OpenURL" est déclenché en mm temps que "RADIO On" et "'CH.ButtonTests On" ==> le lancement de l'URL est fait alors que le webserver n'est pas démarré
Je ne crois pas que la commande "OpenURL" support un "AFTER xx", correct ?
Donc plus généralement, si je souhaite exécuter les "sous-commandes" du Command Array dans un certain order, comment faire ?
Encore merci d'avance

Re: LUA et ordre d'exécution du "CommandArray"
Publié : 07 janv. 2022, 08:13
par denis_brasseur
piafou31 a écrit : 06 janv. 2022, 15:16
Avec le code ci-dessus, j'utilise le "'CH.ButtonTests"
comme pour faire une pause, sauf que malheureusement le "OpenURL" est déclenché en mm temps que "RADIO On" et "'CH.ButtonTests On" ==> le lancement de l'URL est fait alors que le webserver n'est pas démarré
Il ne s'agit pas d'une pause dans le script, mais d'un lancement différé du changement d'état de ton device "'CH.ButtonTests"
piafou31 a écrit : 06 janv. 2022, 15:16
Donc plus généralement, si je souhaite exécuter les "sous-commandes" du Command Array dans un certain order, comment faire ?
Tu peux exécuter ton OpenURL sur le changement d'état de ton device "'CH.ButtonTests"
Code : Tout sélectionner
if devicechanged["'CH.ButtonTests"] == 'On' then
commandArray[#commandArray+ 1] = {['OpenURL'] = "https://monwebserver:XXX/tvhcfb/radio_generic.php"}
end
Attention, la commande devicechanged ne fonctionne pas pour un script de type time
Re: LUA et ordre d'exécution du "CommandArray"
Publié : 08 janv. 2022, 14:11
par piafou31
Excellent, ça fonctionne avec cette approche, merci

D'un point de vue "généralisation / industrialisation", c'est un peu "chaud" car ça m'obligerait à avoir autant de "CH.ButtonTests" que j'ai de "OpenURL" à déclencher...
Je vais continuer de creuser, encore merci !
Re: LUA et ordre d'exécution du "CommandArray"
Publié : 08 janv. 2022, 15:45
par Neutrino
Sinon en DzVents, on peut faire
Code : Tout sélectionner
domoticz.openURL("https://monwebserver:XXX/tvhcfb/radio_generic.php").afterSec(10)
Re: LUA et ordre d'exécution du "CommandArray"
Publié : 10 janv. 2022, 22:14
par piafou31
Merci à tous pour vos différents conseils. Voici quelques retours, en mode "capitalisation":
- Faire une pause d'exécution en "LUA" ne semble pas faisable de manière répétée / industrielle
- Utilisation donc du script en "python" avec
A. utilisation de la lib "time"
B. utilisation de la lib "DomoticzEvents"
Code : Tout sélectionner
import DomoticzEvents as DEVS
DEVS.Command('OpenURL',urlTest)