Eseguire lo stesso comando LUA più volte in Domoticz

Eseguire lo stesso comando LUA più volte in Domoticz

Domoticz offre la possibilità di eseguire script in vari linguaggi di programmazione in relazione allo scatenarsi di eventi.

Ricordiamo che ci sono vari tipi di eventi:

All: Lo script verrà eseguito ogni volta che accade qualcosa che attiva il sistema di eventi per eseguire uno script
Device: Verrà eseguito ogni volta che QUALSIASI stato del dispositivo/valore cambia
Security: verrà eseguito ogni volta che si verifica un evento di sicurezza
Time: verrà eseguito una volta al minuto. Gli script vengono eseguiti uno alla volta.
Variabile utente: verrà eseguito quando le variabili utente vengono aggiornate

Tra i linguaggi di programmazione che è possibile utilizzare vi sono python e LUA.

Qui si possono leggere maggiori informazioni su LUA. Nello script che andremo ad analizzare vedremo come si esegue lo stesso comando LUA più volte. L’obiettivo è quello di mandare una notifica se sussistono particolari condizioni.

time = os.date("*t")
commandArray = {}

print ("All based event fired");

 if (devicechanged['SensoreFinestraTerrazzo'] == 'Open') then
        if (not (globalvariables["Security"] == "Disarmed") or (time.hour >= 0 and time.hour <= 6)) then
         commandArray = {}
         commandArray[1]={['SendNotification']='Sensore Finestra TERRAZZO PIENA NOTTE!' }
         commandArray[2]={['SendNotification']='Sensore Finestra TERRAZZO PIENA NOTTE!' }
         commandArray[3]={['SendNotification']='Sensore Finestra TERRAZZO PIENA NOTTE!' }
         commandArray[4]={['SendNotification']='Sensore Finestra TERRAZZO PIENA NOTTE!' }
         return commandArray
        end
 end

return commandArray

Anzitutto viene prelevato il tempo del server.
time = os.date("*t")

Domoticz è in grado di passare informazioni allo script mediante molte informazioni liberamente contenute in tabelle liberamente accedibili.

Tra queste ricordiamo:

timeofday
uservariables
uservariables_lastupdate

globalvariables

otherdevices
otherdevices_idx
otherdevices_lastlevel
otherdevices_lastupdate
otherdevices_svalues

Nel nostro caso devicechanged['SensoreFinestraTerrazzo'] permette di identificare il cambiamento di stato di un sensore collegato ad una finestra. Nello script controlliamo che il device abbia assunto lo stato “Open”.

Inoltre è possibile accedere alle variabili globali (nel nostro caso alla variabile “Security” e alle variabili definite dall’utente mediante uservariables[‘nomevariabileutente’].

Ogni script deve restituire un commandArray, che viene riempito in base alla corretta esecuzione dello script. I comandi in commandArray verranno eseguiti solo dopo che l’array è stato restituito a Domoticz per essere eseguito alla fine dello script. Ciò significa che non è possibile che uno script Lua esegua più azioni sullo stesso dispositivo.

C’è un modo per aggirare il problema: CommandArray supporta anche le tabelle nidificate per inviare lo stesso tipo di comando più volte. Per fare ciò, occorre al comando un indice numerico e posizionare l’azione richiesta in una tabella annidata:

commandArray = {} 
commandArray[1]={['SendNotification']='Sensore Finestra TERRAZZO PIENA NOTTE!' } 
commandArray[2]={['SendNotification']='Sensore Finestra TERRAZZO PIENA NOTTE!' } 
commandArray[3]={['SendNotification']='Sensore Finestra TERRAZZO PIENA NOTTE!' } 
commandArray[4]={['SendNotification']='Sensore Finestra TERRAZZO PIENA NOTTE!' } 
return commandArray

L’indice commandarray parte da 1. Qualora scrivessimo commandArray[0], il corrispondente comando non verrà eseguito.

Ribadiamo che i comandi non vengono eseguiti fino a che lo script non arriva alla riga di ritorno commandArray. Solo allora vengono emessi tutti nello stesso momento.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.