Hi Leute!
Da man im Blog nur eingeschränkte Möglichkeiten hat zu antworten, mache ich hier ein Thema dazu auf.
@boomx - herzlichen Dank für das sehr nützliche Script!
Ich habe es um den WALLC-S Wandtaster erweitert (com.fibaro.remoteController), und lasse mir nun jeden Freitag den Batteriestatus per eMail übermitteln.
--[[
%% autostart
%% properties
%% globals
--]]
local sourceTrigger = fibaro:getSourceTrigger();
local minBatteryLevel = 25
local maxID = 1000
local subject = "Häuschen Batterie-Check"
local message =""
Debug = function ( color, message )
fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end
--[[
Debug('red', "Starte Batteriecheck")
if (fibaro:countScenes()>1) then
Debug('red', "Stoppe Szene - zu viele Instanzen")
fibaro:abort();
end
--]]
function checkBatLevel()
for id = 1, maxID do
local batteryLevel = fibaro:get(id, 'batteryLevel')
fibaro:sleep(500) -- Verzögerungszeit, da hier die CPUs mit bis zu 50% Last fahren!
if batteryLevel ~= nil
then
local name = fibaro:getName(id)
local room = fibaro:getRoomNameByDeviceID(id)
if not(room == "unassigned") then
local deviceType = fibaro:getType(id)
if (deviceType == 'com.fibaro.FGFS101' or deviceType == 'com.fibaro.remoteSwitch' or deviceType == 'com.fibaro.doorLock' or deviceType == 'com.fibaro.FGMS001' or deviceType == 'com.fibaro.windowSensor' or deviceType == 'com.fibaro.doorSensor' or deviceType == 'com.fibaro.binarySwitch' or deviceType == 'com.fibaro.remoteController' or deviceType == 'com.fibaro.FGSS001') then
if tonumber(batteryLevel) <= minBatteryLevel then
Debug( 'red', "ACHTUNG! " ..name.." ("..room..")/Batterie: "..batteryLevel.." %")
message = message .."ACHTUNG! " ..name.." ("..room..")/Batterie: "..batteryLevel.."%\n"
else
Debug( 'green', name.." ("..room..")/Batterie: "..batteryLevel.." %")
message = message .."OK : " ..name.." ("..room..")/Batterie: "..batteryLevel.."%\n"
end
end
end
end
end
--Debug('blue',message)
fibaro:call(2, "sendEmail", subject, message)
message =""
end
function tempFunc()
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if ((((currentDate.wday == 6) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "10:00"))) then
checkBatLevel()
end
setTimeout(tempFunc, 60*1000)
end
if (sourceTrigger["type"] == "autostart") then
tempFunc()
else
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (startSource["type"] == "other") then
checkBatLevel()
end
end
Die eMail kommt formatiert bei mir an:
OK : PIR_WZ (Wohnzimmer)/Batterie: 100% OK : Tuer_Kammerl (Kammerl)/Batterie: 88% OK : Tuer_WZ (Wohnzimmer)/Batterie: 96% OK : TUER_BAD (Bad)/Batterie: 99% OK : CAT_TUER (Kammerl)/Batterie: 84% OK : HAUPTSCHALTER_1 (Wohnzimmer)/Batterie: 100%
Ich checke bei allen Scripten immer die CPU-Last und den Speicherverbrauch.
Dabei habe ich festgestellt, dass dieses Script eine kurzfristige Spitzenlast von fast 50% generiert.
Es scheint die Schleife zu sein, die alle ZWave Nodes innnerhal kürzester Zeit abfragt…
Ich habe in Zeile 27 eine Wartezeit von 500ms eingebaut.
Durch die Wartezeit sind die Spitzen wieder etwas flacher geworden…
btw:
Die Anzeige der CPU Last ist nicht über den gesamten Zeitbereich gleich, da gibt es einen Fehler in der Darstellung.
Zumindest die Ausschläge der Analoganzeigen dürften wohl passen.
Ich werde ein Ticket im Fibaro Bug Tracker aufmachen…