mercoledì 7 agosto 2019

La salute dei nostri sensori: Controlliamo le Batterie (Lesson 09) - #Domoticz #Domotica #Homebridge #Corso

Glauco Silvestri
Per controllare la salute dei nostri dispositivi, e nel dettaglio, il livello delle batterie, dobbiamo ricorrere per la prima volta alla 'programmazione' vera e propria.

Domoticz include al suo interno diversi sistemi di programmazione. 

  • Il più semplice è Blockly, un linguaggio strutturato a 'tessere di puzzle' che possono essere agganciate l'una all'altra in modo da creare funzioni specifiche (n.d.r. Se il sensore di movimento rileva qualcosa, accendi la luce).
  • LUA Scripts è un linguaggio strutturato capace di funzioni complesse, con una sintassi semplice e di facile comprensione.
  • dzVents Scripts è una versione più sofisticata di LUA.
  • Phyton è un linguaggio script molto potente e usato tantissimo per l'elaborazione dati.
Tutti questi script possono essere controllati in base a:
  • Device: Ovvero in base al cambio di stato di un dispositivo;
  • Time: Ovvero in base al tempo. Gli script di questo tipo vengono eseguiti ogni minuto;
  • Security: Non abbiamo ancora affrontato l'argomento Sicurezza (n.d.r. Come far sì che Domoticz ci faccia da Allarme), ma gli script di questo tipo si attivano a ogni cambio di stato del livello di sicurezza di Domoticz;
  • User Variables: Sono script che vengono eseguiti ogni qual volta una variabile utente da noi impostata cambia stato;
  • All: Sono script che intervengono in ognuna delle soprastanti categorie.
In Bibliografia, al termine di questo corso, troverete molti link riguardanti ognuno di questi linguaggi.

Ora concentriamoci sul nostro scopo, ovvero quello di ottenere una funzione capace di fornirci un report sullo stato delle batterie di ogni sensore in nostro possesso.
A questo scopo creeremo uno Script LUA che lavorerà sotto il dominio del tempo (n.d.r. Time).
Andiamo in Configurazione, Più Opzioni, Eventi. Si apre una schermata con un'area editabile sulla destra, e alcuni comandi sulla sinistra.


In Event Name scriviamo il nome del nostro script (n.d.r. Per esempio Battery_check).
Andiamo a scegliere LUA come tipologia di Script. E impostiamo Time come base di controllo dello script.

Nel momento in cui abbiamo scelto LUA come tipo di script la schermata editabile si è popolata con uno script di esempio. Questo sarà utile quando vorremo scrivere altri automatismi, per ora cancelliamo tutto quanto.

Inseriamo il seguente codice:


-- =========================================
-- Check battery level for all used devices
-- =========================================

-- User Configuration
BatteryThreshold = 20
WeeklySummary = true
SummaryDay = 1 -- Sunday is 1
EmailTo = "email@example.com"
ReportHour = 9
ReportMinute = 01
Domoticz = "localhost"
DomoticzPort = "8080"
Message = ''

json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- linux
--json = (loadfile "C:\\Domoticz\\scripts\\lua\\json.lua")() -- windows
commandArray = {}
time = os.date("*t")

-- Weekly Device Battery Summary
if WeeklySummary == true and time.wday == SummaryDay and time.hour == ReportHour and time.min == ReportMinute then
 
    -- Get a list of all devices
    handle = io.popen("curl 'http://" .. Domoticz .. ":" .. DomoticzPort .. "/json.htm?type=devices&order=name'")
    devicesJson = handle:read('*all')
    handle:close()
    devices = json:decode(devicesJson)
    BattToReplace = false
    for i,device in ipairs(devices.result) do
        if device.BatteryLevel < 100 and device.Used == 1 then
            Message = Message .. device.Name .. ' battery level is ' .. device.BatteryLevel .. '%<br>'
            print(device.Name .. ' battery level is ' .. device.BatteryLevel .. '%')
        end
    end
    commandArray['SendEmail']='Domoticz Battery Levels#'.. Message .. '#' .. EmailTo

-- Daily Low Battery Report
elseif time.hour == ReportHour and time.min == ReportMinute then
 
    -- Get a list of all devices
    handle = io.popen("curl 'http://" .. Domoticz .. ":" .. DomoticzPort .. "/json.htm?type=devices&order=name'")
    devicesJson = handle:read('*all')
    handle:close()
    devices = json:decode(devicesJson)
    BattToReplace = false
    for i,device in ipairs(devices.result) do
        if device.BatteryLevel < BatteryThreshold and device.Used == 1 then
            Message = Message .. device.Name .. ' battery level is ' .. device.BatteryLevel .. '%<br>'
            print(device.Name .. ' battery level is ' .. device.BatteryLevel .. '%')
        end
    end
    commandArray['SendEmail']='Domoticz Battery Levels#'.. Message .. '#' .. EmailTo
 
end

return commandArray

Lo script esegue sia un report settimanale in cui sono indicati tutti i dispositivi con valore di batteria sotto il 100%, sia un report quotidiano in cui sono indicati solo i dispositivi con livello di batteria sotto una certa soglia da noi impostata. E' sufficiente settare i seguenti parametri in base ai nostri desideri:

  • WeeklySummary: se è uguale a True lo script esegue sia il report settimanale, sia quello quotidiano, se è False lavora tutti i giorni. 
  • SummaryDay: Se WeeklySummary è True, questo parametro indica quale giorno fare il report settimanale. Il valore è numerico da 1 a 7 dove 1 è Domenica.
  • ReportHour: Definisce l'ora in cui inviare il rapporto.
  • ReportMinute: Definisce il minuto in cui inviare il rapporto. Se ReportHour è 10, e ReportMinute è 30, il rapporto sarà inviato alle 10:30.
  • BatteryThreshold: è la soglia di controllo per il report quotidiano. Nello script è impostato al 20%, per cui il report visualizzerà solo i dispositivi con livello di carica inferiore al 20 %.
  • EmailTo: è il nostro indirizzo email. Ricordarsi di scriverlo tra virgolette.
  • Domoticz: va settato con l'indirizzo ip del nostro Raspberry. L'indirizzo va scritto tra virgolette.

Lo script esegue due rapporti uguali, uno via mail e uno sul file di Log di Domoticz. Ciò permette di andare a consultare i report ricevuti anche nel caso si siano cancellate le email ricevute (n.d.r. Ricordatevi che Domoticz azzera i files di log ogni 30 giorni).

Dopo aver preparato lo script, e aver impostato le variabili in base alle nostre esigenze, abilitiamo Event Active per attivare lo script, e salviamo il file cliccando su Salva.
Da questo momento lo script è funzionante. 
Possiamo fare una verifica inserendo come ora e minuti l'orario attuale e attendere che la mail arrivi (n.d.r. Oppure consultare il Log per verificare che lo script non abbia un errore da qualche parte).



Scopri i miei ebook cliccando QUI




About the Author

Glauco Silvestri / Author & Editor

Vivo a Bologna. Vivo per le mie passioni. Scrivo, leggo, amo camminare. Adoro il cinema, amo tantissimo le montagne. Sono cresciuto a suon di cartoni di Go Nagai e Miyazaki.
Mi guadagno da vivere grazie all'elettronica. Lavoro nella domotica, e nell'illuminazione d'emergenza, per una grossa azienda italiana. Ci occupiamo di sicurezza, salute, emergenza... ma anche di energia pulita. Il mio sogno sarebbe vivere grazie ai miei libri, ai miei disegni, alle mie fotografie... Ma onestamente, suppongo di essere più bravo nel mio attuale lavoro. Ciò non significa che io rinunci a provare, tutt'altro, faccio di tutto per migliorare, crescere, ottenere il meglio che posso nei miei lavori, che siano racconti, digital painting, fotografie...
Ovviamente, oltre a ciò, sono anche un blogger, ma se state leggendo questa breve nota, vuol dire che già lo sapete.

0 commenti:

Posta un commento

Post Recenti



Powered by Blogger.

Popular Posts

Cerca sul Blog

')