YESLY Smart Home

Kleine LUA Scripte Teil 2: Sturmwarnung

Geschrieben von boomx
siio-App

Die Serie geht weiter. Diesmal stellen wir euch ein kleines Skript vor, welches im Sturmfall den Status der Tür- und Fenstersensoren prüft und euch eine Nachricht auf euer Handy schickt, sofern diese noch offen sind.

Dieses Skript wird durch die Yahoo-Wettervorhersage, welches bereits im Fibaro HomeCenter 2 integriert ist, gestartet und prüft alle vorhandenen Tür- und Fenstersensoren, ob diese geschlossen oder geöffnet sind. Sollte einer oder mehrere Sensoren nicht geschlossen sein, dann erhaltet Ihr eine Push-Mitteilung, welche Sensoren in welchem Raum nicht geschlossen sind. So habt Ihr die Möglichkeit diese noch zu schließen, bevor der Sturm beginnt.

Dazu müsst Ihr in dem unten geposteten Skript folgende Änderungen in den Zeilen 6 und 7 vornehmen.

In diesen Zeilen werden zum Einen die IDs eurer Handys und zum Anderen die Windgeschwindigkeit, ab wann Ihr eine Push-Mitteilung über geöffnete Fenster, bzw. Türen erhalten wollt, eingestellt. Die lokale Variable „sturm“ ist mit dem Wert 62 km/h vorbelegt. Dies ist der offizielle Wert, ab dem in Deutschland eine Sturmwarnung ausgesprochen wird. Hier könnt Ihr natürlich jeden anderen beliebigen Wert in km/h eintragen. Dies ist komplett euch überlassen. In das Array „phoneID“ müssen die IDs eurer Handys, an die Ihr die Push-Nachrichten verschicken wollt, eingetragen werden.

Solltet Ihr die IDs eurer Handys nicht kennen, so könnt Ihr diese über die API des Fibaro HomeCenters 2 herausfinden. Ruft dazu die Webseite http://IP-HC2/api/devices auf und sucht zum Beispiel nach iPhone.

api_iphone

Hier könnt Ihr erkennen, welche ID euer Handy besitzt. In diesem Fall wäre dies die 68. Hier wäre die Installation einer JSON-Erweiterung für den Browser von Vorteil. In dem Artikel von AlphaX2 wurde darauf bereits eingegangen. Diesen findet Ihr hier.

Und hier findet Ihr die gesamte Szene:

Das Skript ist so eingerichtet, dass es normalerweise über die Windgeschwindigkeitsvorhersage des HomeCenter 2 getriggert wird. Es gibt aber auch die Möglichkeit, dass Skript manuell auszuführen. Im Debug werdet Ihr bei der manuellen Ausführung in weiß die Zeile „SZENE MANUELL GESTARTET“ erhalten. Damit habt Ihr die Möglichkeit die Push-Mitteilungen auf eure Handys und die Erkennung der Sensoren zu testen. Sollte die Szene durch die Windgeschwindigkeitsvorhersage getriggert werden, dann steht in grün im Debug „SZENE DURCH WIND-VORHERSAGE GESTARTET„. Die Push-Mitteilungen unterscheiden sich nicht.

Nach der vollständigen Einrichtung der Szene erhaltet Ihr dann bei vorhergesagtem Sturm folgende Push-Mitteilung:

image

Push-Nachricht bei Sturm-Vorhersage

An ein Icon für das HomeCenter haben wir natürlich auch noch gedacht:

sturm_icon

Solltet Ihr noch weitere Ideen für unsere Serie besitzen, dann hinterlasst doch gerne einen Kommentar. Wir hören uns jede Idee gerne an und versuchen diese dann auch umzusetzen :)

Diesen Blogpost hat geschrieben ...

boomx

42 Kommentare

      • Hier schmeißt mir das Script lauter Pushmeldungen raus, dass z.B. der Wallplug TV noch geöffnet ist und für alle anderen Wallplugs auch…. Ich habe bestimmt 25 Pushmeldungen bekommen, aber nur eine für die geöffnete Tür….

          • Moin Daniel!

            Nein, habe ich nicht. Nur die IDs für den Windmesser und die Handys angepasst.

            Gruß

            Christian

            P.S. Nach diversen Umbauten am Haus, werde ich mich demnächst mal hinsetzen und alle Aktoren bereinigen und mich auf Fehlersuche begeben… :-)

  • Hallo und vielen Dank für das Tolle Skript.
    Kann dieses noch um die Funktion „es Regnet, Fenster XY ist noch offen“ erweiteret werden? Wenn ja wie muss ich dieses machen, bin kein LUA Experte.

    Vielen Dank für die Anregungen
    MfG Daniel

    • Hi,

      kannst mal testen :) Weiß aber nicht, wie genau die Vorhersage ist.

      –[[
      %% properties
      3 WeatherConditionConverted
      %% globals
      –]]

      local phoneID = {68, 113} — Handy-IDs
      local maxID = 1000

      Debug = function ( color, message )
      fibaro:debug(string.format(‚<%s style="color:%s;">%s‘, „span“, color, message, „span“))
      end

      local startSource = fibaro:getSourceTrigger();

      if (fibaro:getValue(3, „WeatherConditionConverted“) == „rain“ or startSource[‚type‘] == ‚other‘) then
      if (startSource[‚type‘] == ‚other‘) then
      Debug(‚white‘, „SZENE MANUELL GESTARTET“)
      else
      Debug(‚green‘, „SZENE DURCH REGEN-VORHERSAGE GESTARTET“)
      end
      Debug(‚red‘, „ACHTUNG! Es könnte regnen“)
      Debug(‚white‘, „Prüfe offene Fenster“)
      for id = 1, maxID do
      local deviceType = fibaro:getType(id)
      if (deviceType == ‚com.fibaro.windowSensor‘ or deviceType == ‚com.fibaro.doorSensor‘) then
      if (tonumber(fibaro:getValue(id, ‚value‘)) == 1) then
      local name = fibaro:getName(id)
      local room = fibaro:getRoomNameByDeviceID(id)
      Debug(‚red‘, „ACHTUNG! Regen vorhergesagt. “ ..name.. “ im Raum “ ..room.. “ ist offen!“)
      for k=1, maxID do
      if phoneID[k] ~= nil then
      fibaro:call(phoneID[k], ’sendPush‘, ‚ACHTUNG: Regen vorhergesagt! ‚ ..name.. ‚ im Raum ‚ ..room.. ‚ ist offen!‘)
      end
      end
      end
      end
      end
      end

      Gruß

      • Moin Daniel!

        Deine Code scheint falsch formatiert zu sein – unabhängig von den beiden Bindestrichen….. Es zieht sich von Zeile zu Zeile! Könntest Du das nochmals im Forum posten?

        Lieben Dank. :-)

        Viele Grüße

        Christian

        • --[[
          %% properties
          3 Wind
          %% globals
          --]]
          local sturm = 62 -- km/h nach dem Sturm erkannt werden soll
          local phoneID = {68, 113} -- Handy-IDs
          local maxID = 1000

          Debug = function ( color, message )
          fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
          end

          local startSource = fibaro:getSourceTrigger();
          local wind = fibaro:getValue(3, 'Wind')

          if ((tonumber(fibaro:getValue(3, 'Wind')) > tonumber(sturm)) or startSource['type'] == 'other') then
          if (startSource['type'] == 'other') then
          Debug('white', "SZENE MANUELL GESTARTET")
          else
          Debug('green', "SZENE DURCH WIND-VORHERSAGE GESTARTET")
          end
          Debug('red', "ACHTUNG! Sturm erkannt. Geschwindikeit: " ..wind.. " km/h")
          Debug('white', "Prüfe offene Fenster")
          for id = 1, maxID do
          local deviceType = fibaro:getType(id)
          if (deviceType == 'com.fibaro.windowSensor' or deviceType == 'com.fibaro.doorSensor') then
          if (tonumber(fibaro:getValue(id, 'value')) == 1) then
          local name = fibaro:getName(id)
          local room = fibaro:getRoomNameByDeviceID(id)
          Debug('red', "ACHTUNG! Sturm erkannt. " ..name.. " im Raum " ..room.. " ist offen!")
          for k=1, maxID do
          if phoneID[k] ~= nil then
          fibaro:call(phoneID[k], 'sendPush', 'ACHTUNG: Sturm erkannt! ' ..name.. ' im Raum ' ..room.. ' ist offen!')
          end
          end
          end
          end
          end
          end

  • Hallo, Ihr leistet wirklich eine tolle Arbeit. Habe von LUA leider auch keine Ahnung, dafür aber das Problem, dass abends schon mal eine Tür oder ein Fenster offen bleibt. Wie kann ich das Script so ergänzen oder abändern, dass abends zu einer gewünschten Uhrzeit wie zum Beispiel 22:00 Uhr geprüft wird, ob sämtliche Fenster und Türen geschlossen sind? Schon mal herzlichen Dank für Eure Mühe :-)

  • Klasse Script boomx,
    aber da ja momentan das Yahoo Wetter nicht angezeigt wird (bzw. nicht richtig funktioniert),
    wie sieht das Script dann für Netatmo bzw. die Openweathermap aus ?

    Gruss
    Carsten

    • Danke für das Lob. :)

      Das Skript kann eigentlich genauso bleiben. Du musst nur anstatt dem Yahoo-Wetter die Variable nehmen, in welche die Windstärke geschrieben wird. Die Änderungen müssen dann in Zeile 3, 15 & 17 vorgenommen werden.

      Gruß

  • Starkes Skript. Es funktioniert einwandfrei.
    Wie genau funktioniert denn die Wettervorhersage? Ist es eine Vorhersage oder eine Momentbetrachtung?

    Schön wäre es ja, wenn man bereits am Morgen eine Push-Nachricht bekäme („Heute zieh ein Sturm auf.“). Dann könnte man alle Fenster schließen, bevor man zur Arbeit fährt. Auch könnte ich mir eine Push-Nachricht vorstellen „Heute wird es regnen. Pack den Schirm ein.“

    Geht etwas in der Art?

    Danke.

    • Hi,

      das ist die Vorhersage der Wetteranbindung (rechts oben im HC2). Durch den Wind wird das Skript getriggert. Eine Vorhersage des Windes ist schwierig. So eine Push wäre morgens möglich :) Vielleicht setz ich es mal um, find die Idee ganz cool ;)

      Gruß

  • Ich hatte mich mal dafür interessiert, nicht in Abhängigkeit vom Sturm, sondern in Abhängigkeit von einer Uhrzeit den Öffnungszustand von Türen und Fenstern zu prüfen. Danke an Hans-Ulrich Tag für den Vorschlag, dies mit Variablen zu realisieren. Das schöne an dem Sturmwarnungsscript ist aber, dass es automatisch nach Tür-/Fenstersensoren sucht. Füge ich also neue Tür-/Fenstersensoren hinzu, muss ich keine Scriptanpassung mehr vornehmen. Ich bekomme immer auch sofort angezeigt, welches Fenster/ welche Tür offen steht.

    Habe mich jetzt mal selbst an dem Script versucht und habe ein bisschen Bastelarbeit aus diesem Script und einem Script, welches in Abhängigkeit von der Uhrzeit triggert, betrieben. Hat sogar funktioniert :-) . Ist wie gesagt durch „Copy-Paste“ – Technik entstanden, kann daher überflüssige Angaben enthalten.

    Es ist im Prinzip einzurichten wie das Sturmwarnungsscript. Die Uhrzeit ist hier auf 22:00 eingestellt, es prüft also abends um 22:00 Uhr, ob noch eine Tür oder ein Fenster offen ist. Wird eine andere Zeit gewünscht, einfach 22:00 gegen eine andere gewünschte Uhrzeit austauschen. Gruß, Norbert

  • Hallo, kann es sein das der Gen2 Fenstersensor von Fibaro eine andere Abfrage (oder) hat, denn alle Gen1 fenstersensoren funktionieren bei der Abfrage nur der Neue Fenstersensor wird nicht richtig abgefragt. ( wird nicht angezeigt wenn dieser offen ist.)

    • Hi,

      es kann sein, dass der Sensor Gen.2 einen anderen devicetype besitzt. Dies müsstest du hier ergänzen:

      deviceType == 'com.fibaro.windowSensor' or deviceType == 'com.fibaro.doorSensor'

      Gruß

  • Guten morgen… bin auf dem Gebiet komplett neu. Habe den Script von oben kopiert und die ID vom Handy geändert aber nichts passiert wenn ich den Script starte. Im Fenster steht zwar was für Meldungen er schickt aber auf meinem Handy kommt nichts an. Oder liegt es daran das ich noch keine Fensterkontakte dran habe?

    Gruß

Gib deinen Senf dazu!