Hallo zusammen,
da ja bekanntlich Batterien oft unberechenbar sind, habe ich das script folgendermaßen noch ein wenig verfeinert
und die Versionsnummer auf v0.05 angepasst:
- Der Check läuft jetzt täglich.
- Für Geräte deren Batterie im kritischen Zustand (also <30%) angelangt ist, oder leer sind, wird sofort eine Push Nachricht verschickt.
- Die Mail(s) werden wie üblich einmal in der Woche verschickt.
So kann man noch effizienter auf langsam zur Neige gehende Batterien reagieren.
Setzt man die Variable ‘pushactiv’ auf false, wird keine Pushnachricht verschickt.
In dem Variablen Array phoneID, können die IDs der Handys oder Tablets eingetragen werden, die die Push Nachricht erhalten sollen.
Und zu guter Letzt, in der Variablen ‘devpEmail’, kann man die Anzahl der Geräte pro Mail einstellen.
Und wer das obige script V 0.4 nutzt, da hat sich ein Tippfehler in Zeile 67 eingeschlichen. Das “useremail(useriD,…)”, sollte in “useremail(userId,…)” abgeändert werden.
--[[
%% autostart
%% properties
%% globals
--]]
-- file: Batterystatus.lua
-- version: 0.05
-- purpose: Check the batteries and email status.
-- Batteries are checked daily and once per week the status is emailed (Sunday on checktime)
-- For batteries that are almost empty, a push messages will be send.
-- Copyleft 03-2017 {jeep}
local sourceTrigger = fibaro:getSourceTrigger();
local oldnodeId = nil ;
local subject = "Battery status";
local userId = 2 -- primary email address
local devpEmail = 20 -- devices per email
local checkday = 1 -- 1=Sunday 2=Monday ...
local pushactiv = true; -- true = sendpush notification
local phoneID = {n1,n2,n3,..} -- phone IDs for push notification
local checktime = "19:15"
local full = 100 --between 50 and 100 the battery status is assumed to be good
local warning = 60 --between 30 and 50 battery is running low
local critical = 30 --below 25 battery status is asumed as critical
local empty = 255 --probably a completely empty battery
Debug = function ( color, message )
fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end
function sendPush(text)
if (phoneID[1] ~= nil) then
for i=1, #phoneID do
if phoneID[i] ~= nil then
fibaro:debug('Versende Push an ID ' ..phoneID[i])
fibaro:call(phoneID[i],'sendPush', text)
end
end
end
end
function useremail(userId,subject,status)
if (weekday == checkday) then
fibaro:call(userId, "sendEmail", subject, status)
--fibaro:call(5, "sendEmail", subject, status)
status = ' ';
end
end
devices = fibaro:getDevicesId({interfaces = {"battery"}, visible = true, enabled = true})
function checkBatteries()
status = ' ' ;
local n = 0;
Debug('withe', os.date('%c'));
for id = 1, #devices do
local batteryLevel = fibaro:get(devices[id], 'batteryLevel')
local nodeId = fibaro:get(devices[id], 'nodeId')
if batteryLevel ~= nil and nodeId ~= nil
then
local name = fibaro:getName(devices[id])
if oldnodeId ~= nodeId then
local room = fibaro:getRoomNameByDeviceID(devices[id])
if not(room == "unassigned") then
n = n+1
if tonumber(batteryLevel) >= warning and tonumber(batteryLevel) <= full then
Debug('green', "Battery " ..name..' ('..room..') - Battery: '..batteryLevel..' % OK')
status = status .. n .. ") " ..name..' ('..room..') ' ..batteryLevel..' % OK\n';
elseif
tonumber(batteryLevel) >= critical and tonumber(batteryLevel) <= warning then
Debug('yellow', "Battery " ..name..' ('..room..') - Battery: '..batteryLevel..' % Warning')
status = status .. n .. ") " ..name..' ('..room..') ' ..batteryLevel..' % Warning\n';
elseif
tonumber(batteryLevel) < critical then
Debug('red', "Battery " ..name..' ('..room..') - Battery: '..batteryLevel..' %')
if pushactiv then
sendPush('Batterie: '.. name ..' in room '.. room ..' '.. batteryLevel..'%.')
fibaro:sleep(500)
end
status = status .. n .. ") " ..name..' ('..room..') ' ..batteryLevel..' % Critical\n';
elseif
tonumber(batteryLevel) > full or tonumber(batteryLevel) == empty then
Debug('red', "Battery " ..name..' ('..room..') - Battery: '..batteryLevel..' % probably empty!')
if pushactiv then
sendPush('Batterie: '.. name ..' in room '.. room ..' '.. batteryLevel..'%.')
end
status = status .. n .. ") " ..name..' ('..room..') ' ..batteryLevel..' % Error\n';
end
if (n % devpEmail == 0) and oldNodeId == nodeID then
useremail(userId,subject,status)
fibaro:debug(status)
status = ' '
fibaro:sleep(500)
end
end
end
oldnodeId = nodeId
end
end --for
status = status .. 'Checked on: ' .. os.date('%c') ..'\n'
status = status ..n.. ' devices were checked. '
Debug('withe', os.date('%c'));
Debug('withe', '------------------------------------------------------------')
Debug('withe', status)
if (weekday == checkday) then
useremail(userId,subject,status)
status = ' ';
end
end -- function
function main()
local currentDate = os.date("*t");
local currenthour = string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min)
weekday = currentDate.wday
local startSource = fibaro:getSourceTrigger();
if currenthour == checktime then
checkBatteries()
end
setTimeout(main, 60*1000)
end
if (sourceTrigger["type"] == "autostart") then
main()
else
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
weekday = currentDate.wday
if (startSource["type"] == "other") then
checkBatteries()
end
end
So, ich hoffe dass das script auch bei Euch funktioniert und wünsche immer volle Batterien.