Echt klasse was du da machst.
Ich werde es morgen testen.
Danke gringo
Echt klasse was du da machst.
Ich werde es morgen testen.
Danke gringo
Moin Jeep,
hab grad mal das Script getestet. Ich bekomme allerdings keine Mail. Im Debug Fenster werden alle Geräte bis auf den ZME Wallc-s angezeigt.
Ich habe die userID auf 2 gelassen. Ein anderes Batterie Script läuft mit der Einstellung.
Grüße
gringo
Hi,
der Mailversand ist einmal pro Woche eingestellt, Variable checkday = 1 , bedeutet am Sonntag. Willst Du die Mail heute haben, musst du checkday = 6 setzen. Dies damit man nicht bei jedem manuellen Start eine Mail bekommt. Man sieht das Ergebniss ja im Debug-Fenster. Gecheckt wird trotzdem jeden Tag und im Fehlerfall kommt ja die Push-Meldung.
WEnn der ZME WALLc-s nicht angezeigt wird, kannst Du bei dem Gerät eine Softrekonfiguration versuchen, dann sollte es tun.
Ok. Danke.
Werde ich testen.
Grüße
Gringo
so, ich wollte ja zum Wochenende ein eigenes Script zum checken von dead devices liefern, aber
beim genaueren Hinsehen habe ich festgestellt das ich fast zu 90% den gleichen Code brauche.
Also habe ich alles im jetzigen Script reingepackt. Viel größer ist es nicht geworden.
Man könnte das script jetzt schon fast als “Health check” script bezeichnen da ja jetzt alle
devices irgendwie geprüft werden.
Werden “dead devices” erkannt, wird für jedes dead device eine Push Meldung verschickt und
alle als tot erkannten Geräte werden am Ende der Mail zusammengefasst.
Die Beschränkung von einer Mail pro Woche ist aufgehoben. In der Variable “days”, kann man
die gewünschten Tage eintragen an denen eine Mail verschickt werden soll.
Im Ergebnis sieht meine letzte Mail so aus(wenn 20 devices per Mail eingestellt sind):
Alert! device Küchenfenster - Device is dead!
Alert! device ZStecker Bügeleisen - Device is dead!
66 non battery devices checked.
Den Zwischenstecker Bügeleisen hab ich natürlich zur Simulation ausgesteckt.
Changelog für Version 0.8.1
– geänderter Mailversand
– die Variable “checkday” wurde entfernt
– neue Variable(Tabelle) “days” hinzugefügt
– neue Funktion hinzugefügt
– kleinere Codeoptimierungen
Und hier das neue Script:
--[[
%% autostart
%% properties
%% globals
--]]
-- file: Batterystatus.lua
-- version: 0.8.1
-- purpose: This script checks the batteries and sends reports via
-- email. Since version 0.6.1 and higher: The script also performs a check on
-- non battery devices and reports all devices marked as dead by HC2.
-- The batterie status is checked daily and several reports per week can be
-- emailed.
-- For batteries that are almost empty, or a dead device is recognized,
-- a push messages will be sent immediately.
-- A manual check is possible at any time. Simply press the Start button.
-- Copyleft 03-2017 {jeep}
local sourceTrigger = fibaro:getSourceTrigger();
local version = "0.8.2"
local oldnodeId = nil ;
local subject = "Battery status";
local userId = 2 -- primary email address
local devpEmail = 20 -- devices per email
local days = {1,3,6,7} -- 1=Sunday, 2=Monday, 3=Tuesday ...7=Saturday
local pushactiv = true; -- true = sendpush notification
local phoneID = {13} -- phone IDs for push notification
local checktime = "19:15" -- At this time the script runs
local full = 100 --between 50 and 100 the battery status is assumed to be good
local warning = 50 --between 30 and 50 battery is running low
local critical = 30 --below 30 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
local function contains(days, val)
for i=1,#days do
if days[i] == val then
return true
end
end
return false
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)
fibaro:call(userId, "sendEmail", subject, status)
--fibaro:call(5, "sendEmail", subject, status)
status = ' ';
print('Mail gesendet')
end
devices = fibaro:getDevicesId({visible = true, enabled = true, })
function checkBatteries()
status = '' ;
vstatus = '';
local n = 0;
local v = 0;
Debug('withe', os.date('%c')..', Version: '.. version );
for id = 1, #devices do
local batteryLevel = fibaro:get(devices[id], 'batteryLevel')
local nodeId = fibaro:get(devices[id], 'nodeId')
local isdead = fibaro:get(devices[id], 'dead')
if batteryLevel ~= nil and nodeId ~= nil and batteryLevel ~= '' 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..'%.')
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 tonumber(isdead) == 1 then
Debug('red', "Battery " ..name..' ('..room..') - Device is dead!')
status = status .. 'Alert! ' .. name..' ('..room..') - Device is dead \n';
vstatus = vstatus .. 'Alert! ' .. 'device '.. name ..' - Device is dead! \n';
sendPush(name ..' in room '.. room ..' '.. batteryLevel..'%. Device is dead!')
end
if (n % devpEmail == 0) and oldNodeId == nodeID
then
if contains(days, weekday) then
useremail(userId,subject,status)
fibaro:debug(status)
status = ' '
fibaro:sleep(500)
end
end
end
end
oldnodeId = nodeId
else
v= v+1
local name = fibaro:getName(devices[id])
local room = fibaro:getRoomNameByDeviceID(devices[id])
if tonumber(isdead) == 1 then
Debug('red', "Device " ..name..' ('..room..') - Device is dead!')
vstatus = vstatus .. 'Alert! ' .. 'device '.. name ..' - Device is dead! \n';
sendPush('Device: '.. name ..' in room '.. room .. ' - is dead!')
end
end
end --for
status = status .. 'Checked on: ' .. os.date('%c') ..'\n'
status = status ..n.. ' battery devices were checked.\n'
vstatus = vstatus ..v.. ' non battery devices checked.'
separator = '------------------------------------------------------------'
Debug('withe', os.date('%c'));
Debug('withe', separator)
Debug('withe', status)
Debug('withe', separator)
Debug('white', vstatus)
status = status..separator..'\n'..vstatus
if contains(days, weekday) 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
Vielen Dank, aber beim Starten kommt eine E-Mail aber auf dem Handy keine Push?
local phoneID = {914;631;971} – phone IDs for push notification
Hi,
hast Du im Debug-Fenster kritische Batterien oder dead devices, wenn ja versuch mal
local phoneID = {914,631,971}
Vielen Dank
Batterien sind alle voll.
55 battery devices were checked.
Aber es existieren 2 dead devices, die zeigt es weder in der Mail noch als Push an.
versuch mal local phoneID = {914,631,971}-- habe ich gemacht
[DEBUG] 16:07:03: 55 battery devices were
checked.
[DEBUG] 16:07:03:
[DEBUG] 16:07:03: ------------------------------------------------------------
[DEBUG] 16:07:03: 97 non battery devices checked.
[DEBUG] 16:07:03: Mail gesendet
Siehst Du die dead devices im Debug Fenster unter den anderen devices?
Nein die erscheinen nicht im Debug Fenster. Unter Module stehen sie aber da.
OK, ich vermute Du must für diese devices eine Softrekonfiguration machen. Auf dieses Problem sind wir schon ganz am Anfang gestoßen, wenn devices nicht erscheinen. Müsste in einem Beitrag von pblacky beschrieben sein(ca 2 Seite).
EDIT:
Eine Frage habe ich noch, sind diese dead devices Batteriedevices oder andere?
Moin moin,
also bei mir läuft es soweit. Ich habe zwei Strombetriebene Geräte die nicht angeschlossen sind und von denen bekomme ich eine Push Nachricht. Allerdings musste ich die Anzahl der Zeilen pro Mail von 20 auf 24 ändern, in der zweiten Mail fehlte wieder etwas aber es gab keine dritte Mail.
Kurze andere frage, wie macht man von einem Gerät eine Softwarekonfiguration?
Danke und Grüße
Gringo
Die leichte Geräte Neukonfiguration machst du in den Einstellungen des jeweiligen Gerätes. (siehe Anhang)
Danke pblacky
Hi gringo,
Allerdings musste ich die Anzahl der Zeilen pro Mail von 20 auf 24 ändern...Das kann ich mir ja gar nicht vorstellen, wenn was fehlt, muss man eher die Anzahl der Dev. pro Mails verringern. Die große unbekannte für mich ist wie lang die Geräte- und Raumnamen sind. Vielleicht postet man jemand seinen debug output (ohne Mailversand), also der grüne Bereich am Stück. Ich habe nur 23 Batteriedevices und habe es mit 10,15,20,21,22,23 24 dev. per Mail getestet. Gefehlt hat nie was. Durch diese Fibaro-Beschränkung habe ich aber zur Zeit keine andere Möglichkeit als mehrere Mails zu verschicken.
Kurze andere frage, wie macht man von einem Gerät eine Softwarekonfiguration?Da ich mein HC2 auf english eingestellt habe, nutze ich lieber die englischen Bezeichnungen Also dort heißt der Button dann: " Soft reconfigure device". Da Fibaro nicht durchgängig alles übersetzt hat und manches auch eher unverständlich ist, bin ich bei english geblieben.
Hallo zusammen,
habe heute festgestellt dass wenn man sich mehrere Mails schicken lassen muss, Fibaro oder mein Mailprovider
sich dafür manchmal unterschiedlich Zeit lässt. Bei 3 Mails kam die
Das sind 18 Minuten Unterschied und das finde ich doch recht lange. Damit man weiß wie viele Mails ankommen habe
ich jetzt im Betreff die Nr. der Email hinterlegt. Also z.B. “Batterie Status-1”, “Batterie Status-2” usw.
Auch im Debug-Fenster steht beim Mailversand immer eine Nummer. Wenn in der letzten Zeile, “Mail gesendet-3” steht,
werden 3 Mails erwartet.
Changelog für Version 0.8.3
– Mailnummerierung hinzugefügt.
--[[
%% autostart
%% properties
%% globals
--]]
-- file: Batterystatus.lua
-- version: 0.8.3
-- purpose: This script checks the batteries and sends reports via
-- email. Since version 0.6.1 and higher: The script also performs a check on
-- non battery devices and reports all devices marked as dead by HC2.
-- The batterie status is checked daily and several reports per week can be
-- emailed.
-- For batteries that are almost empty, or a dead device is recognized,
-- a push messages will be sent immediately.
-- A manual check is possible at any time. Simply press the Start button.
-- Copyleft 03-2017 {jeep}
local sourceTrigger = fibaro:getSourceTrigger();
local version = "0.8.3"
local oldnodeId = nil ;
local subject = "Battery status";
local userId = 2 -- primary email address
local devpEmail = 20 -- devices per email
local days = {1,3,6,7} -- 1=Sunday, 2=Monday, 3=Tuesday ...7=Saturday
local pushactiv = true; -- true = sendpush notification
local phoneID = {13} -- phone IDs for push notification
local checktime = "19:15" -- At this time the script runs
local full = 100 --between 50 and 100 the battery status is assumed to be good
local warning = 50 --between 30 and 50 battery is running low
local critical = 30 --below 30 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
local function contains(days, val)
for i=1,#days do
if days[i] == val then
return true
end
end
return false
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,m)
local subject = subject..'-'..m
fibaro:call(userId, "sendEmail", subject, status)
--fibaro:call(5, "sendEmail", subject, status)
status = ' ';
print('Mail gesendet-'.. m)
end
devices = fibaro:getDevicesId({visible = true, enabled = true, })
function checkBatteries()
status = '' ;
vstatus = '';
local n = 0; -- battery device counter
local v = 0; -- non battery device counter
local m = 0; -- mail counter
Debug('withe', os.date('%c')..', Version: '.. version );
for id = 1, #devices do
local batteryLevel = fibaro:get(devices[id], 'batteryLevel')
local nodeId = fibaro:get(devices[id], 'nodeId')
local isdead = fibaro:get(devices[id], 'dead')
if batteryLevel ~= nil and nodeId ~= nil and batteryLevel ~= '' 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..'%.')
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 tonumber(isdead) == 1 then
Debug('red', "Battery " ..name..' ('..room..') - Device is dead!')
status = status .. 'Alert! ' .. name..' ('..room..') - Device is dead \n';
vstatus = vstatus .. 'Alert! ' .. 'device '.. name ..' - Device is dead! \n';
sendPush(name ..' in room '.. room ..' '.. batteryLevel..'%. Device is dead!')
end
if (n % devpEmail == 0) and oldNodeId == nodeID then
if contains(days, weekday) then
m = m+1
useremail(userId,subject,status,m)
fibaro:debug(status)
status = ' '
fibaro:sleep(500)
end
end
end
end
oldnodeId = nodeId
else
v= v+1
local name = fibaro:getName(devices[id])
local room = fibaro:getRoomNameByDeviceID(devices[id])
if tonumber(isdead) == 1 then
Debug('red', "Device " ..name..' ('..room..') - Device is dead!')
vstatus = vstatus .. 'Alert! ' .. 'device '.. name ..' - Device is dead! \n';
sendPush('Device: '.. name ..' in room '.. room .. ' - is dead!')
end
end
end --for
status = status .. 'Checked at: ' .. os.date('%c') ..'\n'
status = status ..n.. ' battery devices were checked.\n'
vstatus = vstatus ..v.. ' non battery devices checked.'
separator = '------------------------------------------------------------'
Debug('withe', os.date('%c'));
Debug('withe', separator)
Debug('withe', status)
Debug('withe', separator)
Debug('white', vstatus)
status = status..separator..'\n'..vstatus..'\n'..os.date('%c')
if contains(days, weekday) then
m = m+1
useremail(userId,subject,status,m)
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
Hi Jeep,
ich hab auch die Anzahl auf 15 gestellt und drei Mails bekommen. Bei 24 packt er mehr in die erste Mail und die letzten beiden fehlenden Zeilen waren auch in der zweiten mail vorhanden.
Grüße
gringo
Ein super Script, habe es direkt neu mit eingebunden.
Ich bin wirklich sehr begeistert.
Es funktionierte super.
LG
Carsten
Hallo zusammen,
es gibt wieder ein Update. Die Idee kam mir durch einen anderen Thread hier im Forum (https://www.siio.de/board/thema/batterieanzeige-nicht-korrekt/#post-76267).
Der Hintergrund - ein Batteriedevice kann zwischen 2 WakeUp Zyklen ausfallen (das passiert bei Lithium Batterien häufiger als man denkt). In so einem Fall würde das HC2 den alten Batteriewert ewig reporten, obwohl das Gerät längst tot ist und sich nie mehr beim HC2 meldet. Es herrscht also eine trügerische Sicherheit.
Ich schweife mal ein wenig ab. Manuell könnte man Batteriedevices (von Fibaro) folgendermaßen testen:
Rauchsensor - 3 Sekunden auf den B-Button drücken, er wird dann die LED verschiedenfarblich blinken lassen
Wassersensor - kurz mal daran wackeln, der Tamper löst aus und der Sensor piept.
Bewegungsmelder - ebenfalls kurz wackeln, und die LED fängt an zu blinken. Immer in der Hoffnung das sie nicht per Parameter abgeschaltet wurde.
Fernbedienungen - irgendein Knopf drücken, kommt nicht die gewünschte Reaktion, werdet ihr erst mal 'ne neue Batterie versuchen.
Die größere Herausforderung (weil nicht immer in handlicher Reichweite) sind:
Tür- und Fenstersensoren - hier muss der Deckel abgemacht werden, B-Button gedrückt werden oder die Batterie per Messinstrument geprüft werden.
Das neue Script macht sich den Zustand zu nutze, dass eine sich öffnende oder schließende Tür/Fenster einen Eintrag im Controller (HC2) auslöst.
Die Abfrage dieses Eintrag wird mit 2 Variablen gesteuert. Erst ob überhaupt die Prüfung erfolgen soll (checklBreached false oder true) und dann
die Zeitspanne in der man erwartet dass Tür oder Fenster betätigt wurden (nBreacheds=24 Std).
Rauchmelder und Sensoren die noch nie gebreached wurden habe ich aktuell von der Prüfung ausgeschlossen. Denke aber das ich in zukünftigen Updates
mindestens eine jährliche Zeitspanne berücksichtigen werde.
Fazit - es muss die Summe aller denkbaren Faktoren überprüft werden um ein Höchstmass an Sicherheit zu gewährleisten.
Edit: Um also den Status der Batterie eines Kellerfensters das meistens zu ist, zu testen, genügt es das Fenster einmal auf und zu zu machen.
Changelog für Version 0.8.4b
– Prüfung auf lastBreached
--[[
%% autostart
%% properties
%% globals
--]]
-- file: Batterystatus.lua
-- version: 0.8.4b
-- purpose: This script checks the batteries and sends reports via
-- email. Since version 0.6.1 and higher: The script also performs a check on
-- non battery devices and reports all devices marked as dead by HC2.
-- The batterie status is checked daily and several reports per week can be
-- emailed.
-- For batteries that are almost empty, or a dead device is recognized,
-- a push messages will be sent immediately.
-- A manual check is possible at any time. Simply press the Start button.
-- Copyleft 03-2017 {jeep}
local sourceTrigger = fibaro:getSourceTrigger();
local version = "0.8.4b"
local oldnodeId = nil ;
local subject = "Battery status";
local userId = 2 -- primary email address
local devpEmail = 20 -- devices per email
local days = {1,3,7} -- 1=Sunday, 2=Monday, 3=Tuesday ...7=Saturday
local pushactiv = true; -- true - sendpush notification
local teleactiv = true; -- true - send message via telegram
local phoneID = {13} -- phone IDs for push notification
local checktime = "19:15" -- At this time the script runs
local full = 100 --between 50 and 100 the battery status is assumed to be good
local warning = 50 --between 30 and 50 battery is running low
local critical = 30 --below 30 battery status is asumed as critical
local empty = 255 --probably a completely empty battery
local nBreacheds= 24 --not Breached since nn hours
local checklBreached = true; -- Should lastBreached be checked
Debug = function ( color, message )
fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end
local function contains(days, val)
for i=1,#days do
if days[i] == val then
return true
end
end
return false
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,m)
local subject = subject..'-'..m
fibaro:call(userId, "sendEmail", subject, status)
--fibaro:call(5, "sendEmail", subject, status)
status = ' ';
print('Mail gesendet-'.. m)
end
function checklastBreached(uxtimeStamp, lbreached)
xseconds = (uxtimeStamp - lbreached)
xtime = (xseconds /60) / 60
xhours = math.floor(xtime)
return xhours
end
devices = fibaro:getDevicesId({visible = true, enabled = true, })
function checkBatteries()
uxtimeStamp = os.time(dt);
status = '';
vstatus = '';
bstatus = '';
local n = 0; -- battery device counter
local v = 0; -- non battery device counter
local m = 0; -- mail counter
Debug('withe', os.date('%c')..', Version: '.. version );
for id = 1, #devices do
local batteryLevel = fibaro:get(devices[id], 'batteryLevel')
local nodeId = fibaro:get(devices[id], 'nodeId')
local isdead = fibaro:get(devices[id], 'dead')
if batteryLevel ~= nil and nodeId ~= nil and batteryLevel ~= '' then
local name = fibaro:getName(devices[id])
if oldnodeId ~= nodeId then
local room = fibaro:getRoomNameByDeviceID(devices[id])
local lbreached = fibaro:get(devices[id], 'lastBreached')
--print(lbreached)
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..'%.')
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 tonumber(isdead) == 1 then
Debug('red', "Battery " ..name..' ('..room..') - Device is dead!')
status = status .. 'Alert! ' .. name..' ('..room..') - Device is dead \n';
vstatus = vstatus .. 'Alert! ' .. 'device '.. name ..' - Device is dead! \n';
sendPush(name ..' in room '.. room ..' '.. batteryLevel..'%. Device is dead!')
-- if teleactiv then
-- fibaro:setGlobal('telegram_text', name.. ' is dead! '.. os.date('%c'))
-- fibaro:startScene(61)
-- end
end
if lbreached ~= nil and checklBreached and tonumber(lbreached) > 0 then
xhours = checklastBreached(uxtimeStamp, lbreached)
if xhours > nBreacheds then
bstatus = bstatus .. name ..' not breached since: ' ..xhours.. ' hours\n'
end
end
if (n % devpEmail == 0) and oldNodeId == nodeID then
if contains(days, weekday) then
m = m+1
useremail(userId,subject,status,m)
fibaro:debug(status)
status = ' '
fibaro:sleep(500)
end
end
end
end
oldnodeId = nodeId
else
v= v+1
local name = fibaro:getName(devices[id])
local room = fibaro:getRoomNameByDeviceID(devices[id])
if tonumber(isdead) == 1 then
Debug('red', "Device " ..name..' ('..room..') - Device is dead!')
vstatus = vstatus .. 'Alert! ' .. 'device '.. name ..' - Device is dead! \n';
sendPush('Device: '.. name ..' in room '.. room .. ' - is dead!')
end
end
end --for
status = status .. 'Checked at: ' .. os.date('%c') ..'\n'
status = status ..n.. ' battery devices were checked.\n'
vstatus = vstatus ..v.. ' non battery devices checked.'
separator = '------------------------------------------------------------'
Debug('withe', os.date('%c'));
Debug('withe', separator)
Debug('withe', status)
Debug('withe', separator)
Debug('white', vstatus)
Debug('withe', separator)
Debug('withe', bstatus)
status = status..separator..'\n'..vstatus..'\n'
status = status..separator..'\n'..bstatus..'\n'..os.date('%c')
if contains(days, weekday) then
m = m+1
useremail(userId,subject,status,m)
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
Hi,
Sehr gute Idee!
Da die Fibaro Rauchmelder und ggf auch Fenstersensoren eine Temperatur liefern, sollte deine Idee dort auch greifen.
Viele Grüße Hoggle