Kleine LUA Scripte Teil 1: Batterie-Check

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…
CPU Last
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…

Wow. Gute Idee

Hi,

kein Ding :wink:

Schöne Erweiterung. Das ist auch eins der Dinge, die wir mit der Serie erreichen wollen. Top.

Gruß

Hat jemand ein passendes Icon für die Szene? Mit Batterie und Lupe oder %-Zeichen vielleicht?

Grüße

Ich bekomme seit zwei Tagen immer wieder Mails von der Popp Sirene die mir sagen das die Batterie leer ist.
Das Script zeigt mir allerdings 255% an.

Woran kann das liegen?

Grüße
gringo

Was sagt denn die Weboberfläche? Das device hat kein Template, oder?

Glaub in früheren Versionen war 255% = 100%. Beim danalock-Schloss wird zum Beispiel auch 255 angezeigt, wenn es zu ist. Hat was mit der Binär-Rechnung zu tun. :wink:

die Popp Sirene macht auch kein Sinn in dem Script oder? Die wird ja via Solar gepowered.

Ach die ist das… Da geb ich Chris natürlich Recht :wink:

@ boomx
Das stimmt. Die Popp Sirene hat kein Template.

@ crissxcross
Das macht schon Sinn wenn das Wetter längere Zeit schlecht ist und die Sonne nicht scheint. Die HC2 zeigt mir auch an das die Batterie leer ist und schickt Mails.

Alles trotz Solar

Hallo,

sehr nettes Script. Ich habe das jetzt bei mir einmal ausprobiert und musste feststellen, dass er im Debug Fenster zwar alles anzeigt,
aber in der Mail nicht alle Verbraucher aufgeführt sind. Die Mail hört mitten im Satz auf. Kann man die Grösse da irgendwie verändern ?
Ansonsten würde ich das einfach in 2 Scripte teilen um die Geräte zu splitten.

Flamos

Schönes Script, soweit funktioniert auch alles, bis auf das keine Heizkörper abgefragt werden, weder die Danfoss noch von Devolo.
Die Benachrichtigung per Mail funktioniert ohne Probleme bei mir.

Ok habe es gefunden, es müssen die fehlenden Geräte in der Zeile 34 noch zugefügt werden.

Hallo,

hab das gleiche Problem das die email nur zum teil ankommt

Hallo, bei mir auch.

Hallo,

bei mir funktioniert das Script eigentlich wunderbar. Die Mail wir komplett versendet. Allerdings habe alle Bewegungssensoren und der Türkontakt angeblich einen Batteriestand von 0%. Nur das Danalock meldet korrekte Werte. Weiß jemand woran das liegen kann?

Grüße

Hi,

seid der Version 4.070 gibt es Probleme bei der Übermittlung von Batterieständen. So kommt es mir zumindest vor.

Gruß

Hi boomx,
tolles Script. Echt klasse.
Bei 1 von 4 Batterien zeigt er mir den falschen Status an. aber sonst läuft es klasse.

Vielen Dank dafür.

Gruss
Carsten

Hab das Skript gerade ausprobiert, bei mir kommen bei vielen Geräten falsche Werte an!
Und zwar hauptsächlich bei den Fibaro Rauchmeldern!
Auch einer der Türkontakte meldet eine leere Batterie, obwohl ich diese erst von Tagen NEU aus der Schachten genommen hab.
siehe Anhang

Liegt das an der Firmware 4.080 ?

2016-04-17-18.56.27.jpg

Schrieb ich bereits oben, dass es ein Problem seit 4.070 ist…

Gruß

Sorry Boomx, das hatte ich überlesen.
Hat schon jemand ausprobiert ob es mit der 4.081 wieder klappt?