ich habe an einem der vorhanden Scripte weitergebastelt, so dass es bei Geräten mit mehreren Endpoints nur eine Zeile ausgibt.
Das Ergebnis wird/kann per Mail an die UserId geschickt (der einzige Wert den man ändern muss). Eingestellt ist 1 x pro Woche
am Sonntag, 18:00 Uhr. Die Batterien werden als OK, Warnung, Kritsich und Fehler eingestuft.
Was mir aufgefallen ist, die erhaltene Mail kann höchtens 20 Zeilen verarbeiten. Ich vermute das der Fibaro-Server die Anzahl der
Zeichen begrenzt. Ab Zeile 21 fehlen immer die letzten Zeichen. Kann das jemand bestätigen?
Wer weniger als 20 Batterie devices hat, sollte die Mail in Gänze erhalten. Alternativ könnte man die Statusmeldungen kürzen.
Viel Spass damit.
--[[
%% autostart
%% properties
%% globals
--]]
-- file: Batteriestatus.lua
-- Batteriestatus checken und mailen
-- Copyleft 03-2017 {jeep}
local sourceTrigger = fibaro:getSourceTrigger();
local oldnodeId = nil ;
local status = ' ' ;
local n = 0;
local subject = "Batterien Status";
local userId = 2
Debug = function ( color, message )
fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end
devices = fibaro:getDevicesId({interfaces = {"battery"}, visible = true, enabled = true})
--print(json.encode(devices))
function checkBatteries()
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) >= 50 and tonumber(batteryLevel) <=100 then
Debug('green', "Batterie " ..name..' ('..room..') - Batterie: '..batteryLevel..' % OK')
status = status .. n .. ") " ..name..' ('..room..') - Batterie: '..batteryLevel..' % OK\n';
elseif
tonumber(batteryLevel) >= 25 and tonumber(batteryLevel) <= 50 then
Debug('yellow', "Batterie " ..name..' ('..room..') - Batterie: '..batteryLevel..' % Warnung')
status = status .. n .. ") " ..name..' ('..room..') - Batterie: '..batteryLevel..' % Warnung\n';
elseif
tonumber(batteryLevel) < 25 then
Debug('red', "Batterie " ..name..' ('..room..') - Batterie: '..batteryLevel..' % Kritisch')
status = status .. n .. ") " ..name..' ('..room..') - Batterie: '..batteryLevel..' % Kritisch\n';
elseif
tonumber(batteryLevel) > 100 then
Debug('red', "Batterie " ..name..' ('..room..') - Batterie: '..batteryLevel..' % vermutlich leer!')
status = status .. n .. ") " ..name..' ('..room..') - Batterie: '..batteryLevel..' % Fehler\n';
end
end
end
oldnodeId = nodeId
end
end
status = status .. 'Am :' .. os.date('%c') ..'\n'
status = status .. 'Gecheckt wurden ' ..n.. ' devices.'
Debug('withe', os.date('%c'));
Debug('withe', '------------------------------------------------------------')
Debug('withe', status)
fibaro:call(userId, "sendEmail", subject, status)
--fibaro:call(5, "sendEmail", subject, status)
end
function main()
local currentDate = os.date("*t");
local currenthour = string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min)
local weekday = currentDate.wday
local startSource = fibaro:getSourceTrigger();
if ((weekday == 1) and currenthour == "18:00") then
checkBatteries()
end
setTimeout(main, 60*1000)
end
if (sourceTrigger["type"] == "autostart") then
main()
else
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (startSource["type"] == "other") then
checkBatteries()
end
end
Danke Jeep für deine Mühe!!
Habe es gerade getestet, funktioniert zwar gut, aber ich bekomme immer 3 Fibaro Brandmelder mit “0% kritisch” gemeldet.
Auch nach einem Batrterietausch und einem Test bleiben die auf 0%.
War bei allen bisherigen Skripten auch so, dass Geräte mit vollen Batterien als “leer” angezeigt wurden.
Die Frage ist nur, welche Aussagekraft hat es dann.
Oder muss ich da was spezielles einrichten, damit es funktioniert?
habe auch die 4.110 und meine beiden FGSD-002 melden vernünftige Werte. Am Script kann es nicht liegen, da ich bis jetzt noch 3 andere HC2 mit dem Script abfrage und auch da kommen plausible Werte.
Wenn bei Dir alle anderen Scripte auch 0% melden, stimmt wohl was anderes nicht. Hab aber keine Erklärung dafür denn ich denke das Du alles schon gecheckt hast, wakeup gemacht, Assoziation zum HC2, etc.
PS: was zeigt den der “Batterie level” im HC2 im Advanced Tab an? Ist der Wert dort vorhanden?
Hallo jeep,
Ja einen Wakeup habe ich nach dem Batterietausch gemacht.
Habe auch die Parameter geprüft, der Melder sollte eigentlich ein Email schicken wenn er leer ist.
Assoziation zum HC2 hab ich mir angesehen, ist in Group1 mit “S” angelegt (siehe Anhang).
Ist das OK? Habe da nix rumgetan, weil ich nicht 100% verstanden hab wozu das gut ist ;-O
Ja, der ist mit beiden Batterien grün (siehe Anhang).
Sehr eigenartig!
Ich lass jetzt mal die neue Batterie bei einem der Melder drinnen und werde das beobachten…
Morgen ist eh schon Sonntag
Skript ist heute Abend gelaufen, aber der Melder nit der neuen Batterie hat trotzdem “0%” angezeigt.
Somit kann meine HC2 mit dem Skript nichts anfangen, Schade hätte mich gefreut…
Hi,
also richtig fündig geworden bin ich nicht. Was mir aufgefallen ist, dass Deine Rauchmelder keine Seriennummern anzeigen(siehe Anhänge). Das dürfte aber nicht der Grungd sein. Ich habe darauf hin einen älteren Tür/Fenstersensor verglichen (ohne ZWave+) da gibts natürlich keine Seriennummer, aber auch der funktioniert ja bei mir.
Außer Unterschiede bei den Parameter un bei den IDs (was ja normal ist), habe ich aber Unterschiede bei der Eigenschaft “actions” festgestellt. Nur kann ich nicht so recht glauben dass es das ist. So tief stecke da auch nicht drin.
Danke Jeep für deine Mühe, So genau hat sich das noch niemand angesehen!
Ich kann leider nicht viel dazu beitragen, da ich weit weniger “tief drinnen” bin wie du
Finde es schade denn dein Skript ist wirklich TOLL gemacht!
Vielleicht gibt es ja noch Tipps von den Spezialisten hier, ich kann gerne weitere Infos hier zur Verfügung stellen, falls nötig…
Danke Jeep für deine Mühe, So genau hat sich das noch niemand angesehen!
Ich kann leider nicht viel dazu beitragen, da ich weit weniger „tief drinnen“ bin wie du
Finde es schade denn dein Skript ist wirklich TOLL gemacht!
Vielleicht gibt es ja noch Tipps von den Spezialisten hier, ich kann gerne weitere Infos hier zur Verfügung stellen, falls nötig….