Und noch ein Batterie check scipt

Hallo zusammen,

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

Super Script! Danke :slight_smile:

Schön gemacht.
Gefällt mir auch.
Bisher hatte ich nämlich genau den wöchentlichen versand nicht umgesetzt…

VG Hoggle

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?

Welches Firmware nutzt Du derzeit?

Hallo Hoggle,
Habe derzeit noch die 4.110.

Hallo pblacky,

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

2017-03-18-21_31_12-Home-Center-2.jpg

Hi,

ja das ist Ok so (ist ein ZWave+ device) aber noch mal die Frage von vorhin, siehst Du den grünen ode roten Batterie Status Balken im Advanced Tab?

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 :wink:

2017-03-18-21_39_58-Home-Center-2.jpg

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…

Wie sieht der Wert in der API aus? Hat dieser dort auch die 0? Das hat doch nichts damit zu tun, dass DEIN HC2 damit nichts anfangen kann…

Gruß

Hallo Boomx,
Danke für den Tipp.
Kannst du mir genauer Infos geben, wie ich an diesen Wert rankomme?
Mit API bin ich noch nicht so bewandert…

Hi,
gute Idee in der api nachzuschauen. Die Frage war zwar an Boomx adressiert, ich denke er meint das:
http://IPdeinesHC2/api/devices/ID_des_Rauchmelder

In dem output nach “batteryLevel” suchen, da sollte rechts daneben der Wert stehen.

Dort steht bei den meisten Geräten die im Skript mit 0% ausgeworfen werden:
"batteryLevel":100

Ein Türsensor hat:
"batteryLevel":90

Es sind übrigens NUR Fibaro Komponenten!
1 x Motion Sensor
1 x Tür/Fenster Sensor
3 x Rauchmelder

Hi pblacky,

könntest Du mal die komplette api-Ausgabe eines Rauchmelders posten? Würde es dann mit meinen vergleichen. Eventuell gibt es da Unterschiede.

Gerne!
Habe die alle Komponenten abgefragt, die falsche Werte anzeigen (siehe Anhang).
Würde mich freuen wenn wir das lösen können…

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.

DiffRM.jpg

DiffTFS.jpg

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 :wink:
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 :wink:
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….