Von Zeit zu Zeit werden wir euch in dieser neuen Serie ein paar kleine, nützliche LUA-Skripte zeigen. Hier erfahrt Ihr mehr.
In der ersten Folge der neuen Serie stellen wir euch ein kleines Skript vor, mit welchem Ihr den Status aller batteriebetriebenen Geräte prüfen könnt. Das Skript zeigt euch an, ob der Batterie-Status noch in Ordnung ist, oder ob Ihr darüber nachdenken solltet, die Batterien vielleicht in der nächsten Zeit auszutauschen. Die unterschiedlichen Status werden in Grün (Batterie in Ordnung) und in Rot (Batterie unter 25% Kapazität) aufgelistet. Auf dem folgenden Bild könnt Ihr das veranschaulicht erkennen:
Das LUA Skript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
--[[ %% properties %% globals --]] local minBatteryLevel = 25 local maxID = 1000 Debug = function ( color, message ) fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span")) end for id = 1, maxID do local batteryLevel = fibaro:get(id, 'batteryLevel') 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.FGSS001') then if tonumber(batteryLevel) <= minBatteryLevel then Debug( 'red', "ACHTUNG! " ..name.." ("..room..")/Batterie: "..batteryLevel.." %") else Debug( 'green', name.." ("..room..")/Batterie: "..batteryLevel.." %") end end end end end |
- com.fibaro.remoteSwitch (z.B. Wall-C)
- com.fibaro.doorLock (z.B. RFID-Sensor, danalock)
- com.fibaro.FGMS001 (MotionSensor)
- com.fibaro.windowSensor (Doorsensor)
- com.fibaro.doorSensor (Doorsensor)
- com.fibaro.binarySwitch (z.B. Batteriebetriebene Sirene)
- com.fibaro.FGSS001 (SmokeSensor v1 & v2)
- com.fibaro.FGFS101 (FloodSensor)
Sollten euch beim Test noch weitere device-Typen auffallen, welche nicht durch das oben gezeigte Skript abgedeckt sind, dann schaut doch bitte in der API nach dem device-Type. Dies könnt Ihr über die URL http://IP-HC2/api/devices?=ID_des_devices. Hier sucht Ihr dann nach der ID, welche nicht im Skript auftaucht. In der darauf erscheinenden Ansicht, kopiert euch bitte den Reiter "type"
Stellt uns diesen bitte in den Kommentaren zur Verfügung, dann können wir das Skript immer weiter updaten. Vielen Dank für eure Mithilfe und nun viel Spass mit dem Skript :)
Gute Idee. Gefällt mir gut.
In welchem Zeitraum werden denn die Batteriestände der Devices ausgelesen?
Unterscheidet sich der WALL-C vom WALL-S?
Hab noch eine POPP Aussensirene, die ist ja nicht aufgeführt oder ist das der binäre Switch?
Werde es testen und Feedback geben sobald ich Zeit hab.
TOP UND DANKE
gringo
Hi gringo :)
Die Szene ist bisher so eingerichtet, dass sie nur beim manuellen Ausführen startet. Man könnte natürlich weitergehen, die Werte in globale Variablen und sich ein VD erstellen, in der dann die Batteriestati aufgeführt sind. Wäre eigentlich ne coole Idee.
Denke nicht, dass sich der Wall-C vom Wall-S unterscheidet, diese dürften beide unter remoteSwitch laufen. Die POPP Aussensirene sollte über den binarySwitch geprüft werden, sofern diese einen Status batteryLevel besitzt.
Gruß
Hi Boomx,
die Sirene besitzt ein Batterie Level. Werde Bescheid geben ob sie aufgeführt wird.
Ich fänds cool, wenn das Script einmal die Woche oder einmal im Monat den Status der Batterien prüft und ausgibt.
Sollte eine oder mehrere Batterien unter die 25% gelangen, könnte man sich noch benachrichtigen lassen. Obwohl, man bekommt ja eine Mail ist die Batterie leer.
Grüße
Gringo
Hi, gute Idee. Sehr praktisch.
Btw. die Mehrzahl von Status ist Status und nicht Stati ;)
Gruß
Clark
Hi,
danke für den Hinweis, ist korrigiert ;)
Gruß
Die Popp Sirene wird angezeigt. TOP.
Wie bekomme ich es denn hin, das mir die Batteriezustände in der iPhone/iPad App angezeigt werden?
Grüße
Gringo
Super :)
In der App kann das glaub ich nicht angezeigt werden.
Hallo,
dazu müsstest du dir ein virtuelles modul erstellen in dem du dann eben die stände abfragst, in diverse variablen schreibst und dir dann anzeigen lässt, wird aber je nach anzahl der module die du hast wohl nicht ganz einfach. bin grad dabei an sowas zu basteln. ob ichs so hinbekomm wie ich mir denke bin ich noch nicht ganz sicher.
Grüsse
Hi,
leider scheint die Szene so nicht 1zu1 in einem VD zu funktionieren. Und mit Szenen kann man sich leider keine Variablene automatisch erstellen lassen. Das heißt, du musst dir für jedes Modul eine Variable erstellen.
Gruß
Ich habe einen Fenstersensor der mir schon seit langer Zeit eine leere Batterie anzeigt aber ohne Probleme läuft.
Da bekomme ich im Script folgende Meldung zu:
[DEBUG] 09:52:40: Dachfenster rechts (Dach)/Batterie: 255 %
Irgendeine Idee warum?
Hi,
hast du mal versucht den Sensor zu wecken. Scheint so, als ob da nichts übertragen wurde. Welche Version hast du auf dem HC?
Gruß
Hallo,
echt klasse Idee, hab die Szene ein wenig Verfeinert.
- Danfoss Thermostate integriert
- Szene wird bei mir einmal am Tag über die Tageszeitvariable (Morgen) ausgeführt
- Bei niedrigem Batteriestand geht dann noch eine Push an mein Handy
- Mehrfaches Auslösen der Szene wird abgefangen
Trigger und Variable für Handy müssen natürlich dann jeweils angepasst werden.
Hier die veränderte Szene:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--[[
%% properties
%% globals
Tageszeit
--]]
local scene = 295 -- ID dieser Szene
local htc = 17 -- ID Handy (HTC)
----------------------------------------------------------------------------------
fibaro:debug("Start - Module Batteriecheck")
if (fibaro:countScenes()>1) then
fibaro:debug("stop scene");
fibaro:abort();
end
----------------------------------------------------------------------------------
if (fibaro:getGlobalValue("Tageszeit") == "Morgen") then
local minBatteryLevel = 25
local maxID = 500
Debug = function ( color, message )
fibaro:debug(string.format('%s', "span", color, message, "span"))
end
for id = 1, maxID do
local batteryLevel = fibaro:get(id, 'batteryLevel')
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.FGSS001' or deviceType == 'com.fibaro.thermostatDanfoss') then
if tonumber(batteryLevel) <= minBatteryLevel then
Debug( 'red', "ACHTUNG! " ..name.." ("..room..")/Batterie: "..batteryLevel.." %")
fibaro:call(htc, "sendPush", "!!! "..name.." ("..room..")/Batterie: "..batteryLevel.." %")
else
Debug( 'green', name.." ("..room..")/Batterie: "..batteryLevel.." %")
end
end
end
end
end
end
----------------------------------------------------------------------------------
fibaro:debug("Ende - Module Batteriecheck");
fibaro:killScenes(scene);
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Viel spass und Danke
Hi,
danke für deinen Beitrag.
Sowas wollten wir damit erreichen ;)
Gruß
Hey dei script geht bei mir nicht ich bekommen ein Fehler :
line 1: unexspected symbol near char(226)
ich weiß nur nicht was für ein Symbol
Kopier es nochmal neu in dein HC2. Da gab es wahrscheinlich ein Problem. Ansonsten poste mal deine ersten 4-5 Zeilen.
Gruß
Für alle die das Fibaro Swipe noch abfragen wollen: deviceType == 'com.fibaro.FGGC001'
Und für alle, welche die Sensative Strips noch abfragen wollen: deviceType == 'com.fibaro.stripsMaZw'
Diese sind seit gestern Abend installiert und laufen soweit ganz gut ;-) Die Platzierung ist etwas fummelig, aber dafür sieht diese am Ende keiner. Jetzt bin ich gespannt was die Batterielaufzeit angeht.
Morgen,
ich hab ein kleines Porblem mit dem Batteriescript von siio. Vor kurzem hab ich ein neuen Motionsensor (FGMS001 Motion Sensor 3.2) im Kinderzimmer angelernt. Das Batteriescript erkennt diesen aber nicht. Der Sensor im Flur (FGMS001 Motion Sensor EU / Version 2.7) funktioniert ohne Probleme. Ist dort irgendwas anderes?
Der Raum ist zugeordnet und bennant. In einem Virtuellen Device, was ich aus dem netzt habe wird er auch nicht erkannt? Jemand ne Idee?
Gruß
Hi,
ja, der neue "type" vom MotionSensor ist nicht mit in dem Skript hinterlegt. Dadurch wird dieser nicht erkannt. Kannst du einfach in der langen if-Abfrage hinzufügen. Den type findest du über die API des HomeCenters raus. Dazu einfach die http://IP-HC2/api/devices?id=ID_MS aufrufen und nachschauen, was bei type steht.
Gruß
Hallo zusammen,
ich habe dazu mal 2 Fragen.
1. Ist es normal das nach ca 4 Monaten alle batteriebetriebenen Geräte noch einen Status von 100% melden?
2. Ich habe 2 neue Rauchsensoren gekauft und diese hinzugefügt.
Eine Meldung erhalte ich auch per Mail.
Alleridings mit einem Batteriestatus von 0%.
Mache ich heir was falsch? (Aufgeweckt habe ich die Geräte schon mehrmals)
Danke für eure Unterstützung.
Viele Grüße
TomB.
Hi,
seit einer der neusten Firmware-Version ist das Handling der Batterielevel unglaublich schlecht. Laut API sind bei mir alle Batterien der Rauchmelder leer. Auf der Weboberfläche sind alle noch voll. Hoffentlich wird das mit der nächsten Version wieder besser.
Gruß
Eigenartig, einige werden normal angezeigt aber andere mit 0 % obwohl sie voll sind und funktionieren
[DEBUG] 07:24:07: ACHTUNG! Rauchmelder (Esszimmer)/Batterie: 0 %
[DEBUG] 07:24:07: ACHTUNG! Rauchmelder (Wohnzimmer)/Batterie: 0 %
[DEBUG] 07:24:07: Rauchmelder (Flur unten)/Batterie: 100 %
[DEBUG] 07:24:07: ACHTUNG! Rauchmelder (Kinderzimmer Alissa)/Batterie: 0 %
[DEBUG] 07:24:07: ACHTUNG! Rauchmelder (Schlafzimmer)/Batterie: 0 %
[DEBUG] 07:24:07: ACHTUNG! Rauchmelder (Kinderzimmer Samira)/Batterie: 0 %
[DEBUG] 07:24:07: Rauchmelder (Flur oben)/Batterie: 100 %
Hallo,
habe das Script bei mir seit einigen Wochen im Einsatz. Bei meinen Fibaro Motions sind die Angaben aber nicht korrekt. Folgendes fällt mir auf:
- Alle meine 5 MS werden mit Batteriestatus 0% angezeigt
- Wenn ich eine Batterie wechsele ändert sich der Status trotzdem nicht
Bei allen anderen Komponenten scheint das Script tadellos zu funktionieren.
Hat jemand eine Idee?
Grüße
Arno
Seit der Firmware-Version 4.070 gibt es Probleme mit der Anzeige des Batteriestatus.
Gruß
Hallo boomx, gibt es schon eine neue Version dieses Batteriscipts? Bei mir läuft es leider unter 4.090 irgendwie nicht korrekt, da der Batteriestatus mit 0% angezeigt wird.
Hi,
das ist ein Problem mit der API des HC2. Dort werden die Batteriezustände nicht mehr korrekt angezeigt. Bei mir sind 4 SmokeSensoren auf 0 ;) In der Weboberfläche wird es korrekt dargestellt.
Gruß
Ist hier was von Seiten Fibaro angedacht diesen Umstand zu fixen?
Bestimmt ;) Schaue mir das bei Gelegenheit nochmal an und gebe das dann an Fibaro weiter. :)
Gruß
Hallo boomx, kann man hier auch außer der Debugmeldung eine einzige EMail Nachricht über den Zustand der jeweilligen Batteriestände zukommen lassen?
Ich habe dies in das bestehende Skript eingefügt bekomme aber 20 EMails, da ich ja 20 Sensoren überwache. Geht diese Information aller 20 Sensoren auch in einer einzigen EMail?
Komme nicht drauf, wie man dies einfügt.
fibaro:call(4, "sendEmail", 'green', name.." ("..room..")/Batterie: "..batteryLevel.." %")
Hi,
mit LUA geht eigentlich alles ;) Du kannst die Batteriemeldungen in eine lokale Variable schreiben, immer am Ende mit einem Zeilenumbruch. Am Ende des Skriptes schickst du dir dann einmalig eine Mail mit dem Inhalt der Variablen.
Gruß
http://www.controlliving.nl/fibaro-weekly-battery-e-mail/
Das habe ich gefunden kannst du das Skript nicht Anpassen, weil in der E-Mailausgabe
steht immer nur folgendes:
--Weekly summary--
-Battery Status-
Low Battery:
Bat level: 85% Device: Bewegungssensor[43]
Bat level: 85% Device: Temperatursensor[44]
bei deiner Version steht sofort welchers Gerät das ist
[DEBUG] 17:45:33: Bewegungssensor (Küche)/Batterie: 100 %
[DEBUG] 17:45:34: Bewegungssensor (Flur)/Batterie: 85 %
[DEBUG] 17:45:34: Bewegungssensor (Schlafzimmer)/Batterie: 100 %
[DEBUG] 17:45:34: Bewegungssensor (Büro)/Batterie: 100 %
[DEBUG] 17:45:34: Thermo Büro (Büro)/Batterie: 60 %
[DEBUG] 17:45:34: Thermostat (Schlafzimmer)/Batterie: 44 %
[DEBUG] 17:45:34: Thermostat (Bad)/Batterie: 41 %
[DEBUG] 17:45:34: Thermostat (Kinderzimmer)/Batterie: 58 %
[DEBUG] 17:45:34: Bewegungssensor (Bad)/Batterie: 100 %
[DEBUG] 17:45:34: Bewegungssensor (Wohnzimmer)/Batterie: 100 %
[DEBUG] 17:45:35: ACHTUNG! Bewegungssensor (Kinderzimmer)/Batterie: 0 %
Nur eine ID Angezeigt zu bekommen ist nicht der HIT.
Das wäre meiner meinung alltagstauglich, man würde jede Woche eine Mail bekommen wo drin steht wie der Batterystatus ist.
Man brauch auch nicht extra an den PC. Und man bekommt die Information für alle Batterygeräte in einer Mail.
Hi,
mach doch einfach eine Szene, welche 1x die Woche das Skript startet. Da muss dann nichts angepasst werden.
Gruß
Ja das habe ich aber die Ausgabe bei dem Skript von dem Link ist nich so wie bei deinem Skript.Hatte ich doch so geschrieben ???
Vielleicht mal in einem kleinen Update-Artikel. :) Derzeit bin ich mit anderen Skripten beschäftigt. ^^
Kann es sein dass das Script nicht mehr läuft? Ich bekomme eine Fehlermeldung in Zeile 22 "attempt to compare nil with number" Das Script versucht Zahlen zu vergleichen, kann es aber wohl nicht.
Ja, da kommt wohl von bestimmten Modulen kein BatteryLevel zurück. Muss ich mir mal anschauen.
Gruß
Ich habe die Device-Liste komplett rausgenommen und einfach die Nicht-Batterie-Module rausgefischt, um einen Fehler im Script zu vermeiden. Dann kann man jegliches Modul abfragen, ohne die Liste neu zu schreiben: Das nicht verwendete Device erscheint mit dem Devicenamen in blauer Schrift. So hat man den Überblick, was aussortiert wurde.
local minBatteryLevel = 25
local maxID = 1000
Debug = function ( color, message )
fibaro:debug(string.format('%s', "span", color, message, "span"))
end
for id = 1, maxID do
local batteryLevel = fibaro:get(id, 'batteryLevel')
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.FGWP101') then
print("Das nachfolgende Device ist kein Batteriegerät!")
Debug ('blue',deviceType)
else
if tonumber(batteryLevel) <= minBatteryLevel then
Debug( 'red', "ACHTUNG! " ..name.." ("..room..")/Batterie: "..batteryLevel.." %")
else
Debug( 'green', name.." ("..room..")/Batterie: "..batteryLevel.." %")
end
end
end
end
end
print("Alle Geräte wurden erfasst. Ende der Funktion.")
[DEBUG] 16:57:55: span
[DEBUG] 16:57:55: span
[DEBUG] 16:57:55: span
[DEBUG] 16:57:55: span
[DEBUG] 16:57:55: span
[DEBUG] 16:57:55: span
[DEBUG] 16:57:56: line 20: attempt to compare nil with number
is the result
Hallo,
da bei den meisten Geräten fast nur "com.fibaro.zwaveDevice" angegeben wird, habe ich nur folgende Typen verwendet:
com.fibaro.remoteController
com.fibaro.thermostatDanfoss
com.fibaro.temperatureSensor
Skript funktioniert im Grunde gut, bis auf folgende Ausgabe am Ende:
[DEBUG] 04:10:31: line 22: attempt to compare nil with number
Dies wird aber sicherlich daran liegen, dass der Aeon MultiSensor 6 beim Temperatursensor leider kein batteryLevel Eintrag besitzt.
Alle anderen Geräte werden korrekt ausgegeben (Fibaro Motion Sensor, Fibaro CO2 Sensor, Danfoss Stellglied, Danfoss LC-13).
Das Gerät Remotec Szenen Master wird auch nicht ausgegeben, wird aber sicherlich daran liegen, dass dem Aeon MultiSensor 6 die Eigenschaft/Variable batteryLevel fehlt und somit das Skript abbricht.
Könnte man dies umgehen, indem das Skript bei Fehler weiter läuft?
mir fehlt noch der "Button" im Skript. das Gerät ist auch batteriebetrieben.