39

Kleine LUA Scripte Teil 1: Batterie-Check

by boomx30. November 2015

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:

battery_check

Unter einem bestimmten Batterie-Wert (25 %) wird der Debug in Rot dargestellt

Das LUA Skript

Das LUA Skript prüft alle Geräte, welche Ihr auf eurem Fibaro HomeCenter 2 eingerichtet – und einem Raum zugeordnet habt in einer Schleife und erkennt, ob es sich um ein batteriebetriebenes Gerät handelt. Damit zum Beispiel bei einem MotionSensor nicht noch die LUX und Temperatur extra angezeigt werden, erfolgt noch eine Prüfung um welche Modulart es sich handelt. Unterstützt werden derzeit folgende device-Typen:

  • 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

battery_check_neuerType

 

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

siio-App
About The Author
boomx
39 Comments
  • gringo1
    30. November 2015 at 22:49

    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

    • 30. November 2015 at 22:54

      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ß

      • gringo1
        30. November 2015 at 23:36

        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

  • clark2309
    1. Dezember 2015 at 0:27

    Hi, gute Idee. Sehr praktisch.
    Btw. die Mehrzahl von Status ist Status und nicht Stati ;)
    Gruß
    Clark

  • gringo1
    1. Dezember 2015 at 9:36

    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

    • 1. Dezember 2015 at 13:12

      Super :)

      In der App kann das glaub ich nicht angezeigt werden.

    • Ninia
      4. Dezember 2015 at 3:32

      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

      • 4. Dezember 2015 at 12:17

        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ß

  • fs1997
    fs1997
    1. Dezember 2015 at 9:56

    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?

    • 1. Dezember 2015 at 13:13

      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ß

  • Ninia
    1. Dezember 2015 at 16:59

    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

    • 1. Dezember 2015 at 18:16

      Hi,

      danke für deinen Beitrag.

      Sowas wollten wir damit erreichen ;)

      Gruß

    • dannyw
      17. Juli 2016 at 23:05

      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

      • 18. Juli 2016 at 0:30

        Kopier es nochmal neu in dein HC2. Da gab es wahrscheinlich ein Problem. Ansonsten poste mal deine ersten 4-5 Zeilen.

        Gruß

    • Cannon_82
      Cannon_82
      18. November 2016 at 9:38

      Für alle die das Fibaro Swipe noch abfragen wollen: deviceType == ‚com.fibaro.FGGC001‘

      • Cannon_82
        Cannon_82
        30. Dezember 2016 at 11:58

        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.

  • 25. März 2016 at 9:55

    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ß

    • 25. März 2016 at 14:08

      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ß

  • TomB.
    28. März 2016 at 10:54

    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.

    • 28. März 2016 at 12:57

      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ß

      • Oliver
        Oliver
        29. Mai 2016 at 7:25

        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 %

  • ArnoNym
    29. Mai 2016 at 10:40

    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

    • 29. Mai 2016 at 19:41

      Seit der Firmware-Version 4.070 gibt es Probleme mit der Anzeige des Batteriestatus.

      Gruß

      • Trixxon
        3. September 2016 at 20:19

        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.

        • 4. September 2016 at 0:19

          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ß

  • Trixxon
    11. September 2016 at 22:29

    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..“ %“)

    • 11. September 2016 at 23:41

      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ß

  • Splinter
    23. September 2016 at 17:49

    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.

  • Splinter
    24. September 2016 at 14:49

    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 ???

  • dannyw
    22. Januar 2017 at 22:47

    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.

  • 31. Januar 2017 at 13:36

    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.")

    • stefan
      1. Februar 2017 at 17:01

      [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

  • FreshEleph
    2. Februar 2018 at 4:38

    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?

Leave a Response