GET Http via LUA su domoticz
In un articolo precedente ho parlato in maggiore dettaglio di come domoticz gestisce gli eventi.
Stavolta, invece di un script DZ Events, illustrerò uno script nel linguaggio LUA.
Lo script ha come obiettivo quello di generare una richiesta Http verso il database che raccoglie i dati meteo quando cambia il valore di un altro parametro. Il motivo dietro questo script sta nel fatto che in questo modo il sensore (realizzato con ESP 32 e quindi molto meno conservativo in termini di utilizzo della batteria rispetto ad altri ) non ha bisogno di aprire due connessioni HTTP, ma invia solo i dati a domoticz che, sfruttando questo script, apre una connessione verso il web server su cui si trova lo script php che raccoglie i dati meteo.
Questa istruzione controlla se i valori di temperatura sono cambiati for deviceName,deviceValue in pairs(devicechanged)
Se lo sono allora richiama, a seconda del valore cambiato una stringa per l’inserimento nel database meteo.
if (deviceName=='Temperature') then commandArray['OpenURL']='http://192.168.1.112/meteostation/insertmeteostation.php?idx=50&tempdata='..tostring(deviceValue) end
idx=50 è il valore con cui viene indicato il sensore in domoticz. Nel database meteo questo valore viene sfruttato per distinguere i dati provenienti dai sensori.
Nella parte iniziale dello script vengono illustrate le variabili globali che possono essere passate allo script.
Per installare gli script LUA ci sono due modalità:
La prima è quella di accedere alle pagine Web di Domoticz e di usare quelle per attivarlo. In quel caso lo script verrà conservato in un db interno.
La seconda modalità (che ho seguito) consiste nel copiarli nella directory /home/pi/domoticz/scripts/lua
-- -- Domoticz passes information to scripts through a number of global tables -- -- otherdevices, otherdevices_lastupdate and otherdevices_svalues are arrays for all devices: -- otherdevices['yourotherdevicename'] = "On" -- otherdevices_lastupdate['yourotherdevicename'] = "2015-12-27 14:26:40" -- otherdevices_svalues['yourotherthermometer'] = string of svalues -- -- uservariables and uservariables_lastupdate are arrays for all user variables: -- uservariables['yourvariablename'] = 'Test Value' -- uservariables_lastupdate['yourvariablename'] = '2015-12-27 11:19:22' -- -- other useful details are contained in the timeofday table -- timeofday['Nighttime'] = true or false -- timeofday['SunriseInMinutes'] = number -- timeofday['Daytime'] = true or false -- timeofday['SunsetInMinutes'] = number -- globalvariables['Security'] = 'Disarmed', 'Armed Home' or 'Armed Away' -- -- To see examples of commands see: http://www.domoticz.com/wiki/LUA_commands#General -- To get a list of available values see: http://www.domoticz.com/wiki/LUA_commands#Function_to_dump_all_variables_supplied_to_the_script -- -- Based on your logic, fill the commandArray with device commands. Device name is case sensitive. -- commandArray = {} print ("All based event fired"); -- loop through all the changed devices for deviceName,deviceValue in pairs(devicechanged) do print ("Device based event fired on '"..deviceName.."', value '"..tostring(deviceValue).."'"); if (deviceName=='Temperature') then commandArray['OpenURL']='http://192.168.1.112/meteostation/insertmeteostation.php?idx=50&tempdata='..tostring(deviceValue) end if (deviceName=='TemperaturaEsterna') then commandArray['OpenURL']='http://192.168.1.112/meteostation/insertmeteostation.php?idx=41&tempdata='..tostring(deviceValue) end end return commandArray