Alerte batteries faibles en lua

Une fois n’est pas coutume, voici un script dont je ne suis pas l’auteur, mais que j’ai légèrement modifié et francisé pour faciliter sa compréhension.
Il est issue du wiki domoticz
Il a pour but de tester chaque jour si les niveaux de batteries des équipements actifs ne sont pas en dessous
du seuil mini « SeuilBatterie ». Il permet aussi un résumé hebdomadaire de l’ensemble des seuils batteries (optionnel)


Un mode debbugging vous permet d’afficher dans la console dz le bon déroulement du script. Une fois le débogage réalisé pensez à mettre la variable debugging à false afin de ne pas surcharger vos logs.

--[[
Script Originel https://www.domoticz.com/wiki/Battery_level_check
Check battery level for all used devices
Modifié par papoo
MAJ : 08/03/2017
Principe : Ce script a pour but de tester chaque jour si les niveaux de batteries des équipements actifs ne sont pas en dessous
du seuil mini "SeuilBatterie". Il permet aussi un résumé hebdomadaire de l'ensemble des seuils batteries (optionnel)
]]--
--------------------------------------------
------------ Variables à éditer ------------
-------------------------------------------- 
local nom_script = "Verification du niveau des batteries"
local version = "1.00"
local debugging = false				-- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local SeuilBatterie = 15			-- seuil en dessous duquel la batterie figurera dans le rapport journalier
local ResumSemaine = true			-- true ou false, active ou désactive le résumé hebdomadaire
local ResumJour= 1 					-- dimanche est 1, jour du résumé hebdomadaire
local EmailTo = "adresse1@gmail.com;adresse2@gmail.com" -- adresse mail, séparées par un ; si plusieurs (sans espace)
local HeureRapport = 19				-- heure pour la génération du rapport
local MinuteRapport = 10			-- minute pour la génération du rapport
local Domoticz = "127.0.0.1"		-- adresse domoticz
local DomoticzPort = "8080"			-- port domoticz
local system = "linux"				-- Systeme d'exploitation sur lequel est éxécuté ce script : linux, windows, synology pour le  chemin vers JSON.LUA	
--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
local Message = ''
--------------------------------------------
---------------- Fonctions -----------------
-------------------------------------------- 
function voir_les_logs (s, debugging)
	if (debugging) then 
		if s ~= nil then
		print ("".. s .."")
		else
		print ("aucune valeur affichable")
		end
	end
end	
--------------------------------------------
-------------- Fin Fonctions ---------------
--------------------------------------------
--json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- linux
--json = (loadfile "C:\\Domoticz\\scripts\\lua\\json.lua")() -- windows
if system == "windows" then
	json = (loadfile "c:\\Domoticz\\scripts\\lua\\json.lua")()  -- For Windows
elseif system == "synology" then
	json = (loadfile "/volume1/@appstore/domoticz/var/scripts/lua/JSON.lua")()  -- For Synology
else
	json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()  -- For Linux
end

commandArray = {}
local time = os.date("*t")
 
-- Résumé hebdomadaire de l'ensemble des appareils comportant une batterie 
if ResumSemaine == true and time.wday == ResumJour and time.hour == HeureRapport and time.min == MinuteRapport then
	voir_les_logs("=========== ".. nom_script .." (v".. version ..") ===========",debugging)
 
    -- Recuperation de la liste des èquipements comportant une batterie
    handle = io.popen("curl 'http://" .. Domoticz .. ":" .. DomoticzPort .. "/json.htm?type=devices&order=name'")
    devicesJson = handle:read('*all')
    handle:close()
    devices = json:decode(devicesJson)
    for i,device in ipairs(devices.result) do
        if device.BatteryLevel <= 100 and device.Used == 1 then
            Message = Message .. ' niveau batterie ' .. device.Name .. ' : ' .. device.BatteryLevel .. '%
' voir_les_logs('--- --- --- Niveau batterie ' .. device.Name .. ' : ' .. device.BatteryLevel .. '%',debugging) end end commandArray['SendEmail']='Niveaux Batteries Domoticz#'.. Message .. '#' .. EmailTo voir_les_logs("========= Fin ".. nom_script .." (v".. version ..") =========",debugging) -- Résumé journalier des batteries faibles elseif time.hour == HeureRapport and time.min == MinuteRapport then voir_les_logs("=========== ".. nom_script .." (v".. version ..") ===========",debugging) -- 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) BatterieFaible = true for i,device in ipairs(devices.result) do if device.BatteryLevel < SeuilBatterie and device.Used == 1 then Message = Message .. ' niveau batterie ' .. device.Name .. ' : ' .. device.BatteryLevel .. '%
' voir_les_logs('--- --- --- Niveau batterie ' .. device.Name .. ' : ' .. device.BatteryLevel .. '%',debugging) end end if (BatterieFaible) then commandArray['SendEmail']='Niveaux Batteries Domoticz#'.. Message .. '#' .. EmailTo end -- mail seulement si une ou plusieurs batteries sont en dessous du seuil voir_les_logs("========= Fin ".. nom_script .." (v".. version ..") =========",debugging) end return commandArray

Laisser un commentaire