Alarmanlage: Benachrichtigung über den Status der Fenster erhalten – Videoreihe Alarmanlage – Teil 5
Im heutigen Tutorial zu unserer Videoreihe erfährst Du, wie man den Status der Fenster überwachen kann. Dafür werden wir Szenen im Fibaro Home Center erstellen, sodass man über RGBW-Stripes oder eine Push-Mitteilung den Status mitgeteilt bekommt.
Info
Unsere Videoreihe geht weiter. Du hast bisher schon bei uns gelernt, wie man eine Struktur für die Alarmanlage erstellt in Form eines virtuellen Moduls sowie auch physische Geräte zum scharf Schalten des Alarmsystems verwenden kann. Heute geht es darum, was passiert, sobald die Alarmanlage aktiviert ist. Das umfasst vor allem die Benachrichtigung darüber, ob die Fenster offen oder geschlossen sind. Entsprechend werden wir im heutigen Tutorial auf verschiedenen Wegen den Status der Fenster überprüfen. Wir werden die Benachrichtigung nicht nur über Push-Mitteilungen fürs Smartphone einrichten, sondern auch über farbliche Meldungen mit einem RGBW-Stripe, eine Sirene oder Alexa Text-to-Speech. Am Ende soll man als Smart Home-Nutzer eine Information darüber erhalten, welches Fenster in welchem Raum geöffnet ist, sodass man darauf reagieren kann.
Info
Grafische Szenen für den Status der Fenster einrichten
Beginnen wollen wir mit zwei grafischen Szenen. Eine Szene soll den allgemeinen Status der Fenster überprüfen, ob diese geschlossen sind. Die zweite Szene wird danach entsprechend reagieren, sobald ein Fenster noch offen ist.
1. Als erstes müssen wir eine neue, grafische Szene im Fibaro Home Center über „Szenen“ – „Lösche oder Füge Gerät hinzu“ anlegen.
2. Innerhalb der Szene wählen wir zunächst in der Wenn-Bedingung unsere globale Variable für den Status der Alarmanlage aus („alarmanlage_status“) und setzen den Wert auf „1“. Immerhin soll die Szene immer dann auslösen, sobald die Alarmanlage aktiviert wird.
3. Da wir überprüfen wollen, ob alle Fenster geschlossen sind, müssen wir unsere dafür notwendigen Fenstersensoren ansprechen. Wir wählen also als nächstes eine „Und“-Bedingung aus und fügen als Modulgruppe die Fenstersensoren hinzu. Außerdem stellen wir diese auf „gesichert“ ein.
4. Als nächstes fügt man die Dann-Bedingung hinzu. Hier kann man nun festlegen, inwiefern der Status der geschlossenen Fenster übermittelt werden soll. Dabei können viele Möglichkeiten umgesetzt werden. Wir nutzen beispielsweise das Fibaro RGB-Modul, um RGBW-Stripes grün aufleuchten zu lassen. Um das umzusetzen, wählen wir das passende Modul aus und setzen die Aktion auf „Farbe einstellen“. Als Wert kann man nun 255 eingeben, damit der RGBW-Stripe grün aufleuchtet, sobald die Fenster alle geschlossen sind. Die anderen Werte bleiben bei „0“.
Wichtig ist, dass man hier noch eine “Und”-Bedingung hinzufügt, damit der RGBW-Stripe am Ende auch wieder ausgeht. Dafür fügt man das Modul innerhalb der Bedingung neu hinzu, wählt als Aktion “ausschalten” aus und einen Zeitraum, nach dem das Licht wieder ausgehen soll.
5. Außerdem müssen am Ende nach dem Speichern noch die überflüssigen Trigger entfernt werden. Nur die Variable für den Status der Alarmanlage soll getriggert werden. Anschließend funktioniert die Szene auch schon.
Benachrichtigung über geschlossene Fenster
Es wäre auch möglich, eine Benachrichtigung zu erhalten, dass alle Fenster geschlossen sind. Wir empfehlen diese Vorgehensweise zwar nur bei nicht geschlossenen Fenstern, aber möglich wäre dieser Schritt dennoch.
Möchtest Du solch eine Benachrichtigung umsetzen, geht dies wie folgt:
1. Klicke in Deinem Home Center auf „Steuerungen“ – „Benachrichtigungssteuerung“ und lege dort eine neue Benachrichtigung an. Du kannst einen passenden Text auswählen wie beispielsweise „Alle Fenster sind geschlossen“. Nach dem Speichern muss die Benachrichtigungsoption noch in unserer Szene ergänzt werden.
2. Füge innerhalb der grafischen Szene also noch eine weitere „Und“-Bedingung hinzu und wähle die entsprechende Benachrichtigungsfunktion aus. Hier kann man sich z.B. eine Push-Nachricht aufs Smartphone schicken lassen.
Grafische Szene über den Status geöffneter Fenster
Wir wollen nun noch die zweite grafische Szene erstellen, die mitteilen soll, sobald ein Fenster noch geöffnet ist. Diese Mitteilung soll über den RGBW-Stripe in rot signalisiert werden. Außerdem wollen wir uns eine Benachrichtigung darüber schicken lassen.
1. Dafür legen wir erneut eine neue Szene an, geben dieser einen Namen und fügen ein Icon hinzu.
2. In der Wenn-Bedingung fügen wir als Trigger unsere Variable „alarmanlage_status“ hinzu.
3. Danach folgt eine „Und-Bedingung“. Hier legen wir das erste Fenster fest und stellen die Aktion auf „ausgelöst“ ein, um zu sagen, dass das Fenster geöffnet ist.
4. Auch die anderen Fenster müssen alle zur Szene hinzugefügt werden. Über „Oder-Bedingungen“ fügen wir diese alle einzeln hinzu.
5. Sind anschließend alle Module in die Szene integriert worden, kann man als nächstes in der „Dann-Bedingung“ den RGBW-Stripe auswählen. Hier wieder als Aktion „Farbe einstellen“ auswählen und den Wert „255“ für die Farbe rot eintragen. Die anderen beiden Werte bleiben bei „0“.
6. Wie schon zuvor müssen wir auch hier innerhalb der „Benachrichtigungssteuerung“ den passenden Text einfügen, um eine Benachrichtigung über den Status zu erhalten. Dabei kann man als Text beispielsweise eingeben: „Es sind noch Fenster geöffnet“. Danach alles speichern und die Szene aktualisieren.
7. Nun kann in einer „Und-Bedingung“ die Benachrichtigung in Form einer Push-Mitteilung aufs eigene Smartphone ausgewählt werden.
8. Auch der RGBW-Stripe muss wieder ausgeschaltet sowie die überflüssigen Trigger entfernt werden – wie wir es in der ersten Szene auch getan haben. Die Szene sollte danach funktionieren.
LUA Szene über den Status der Fenster
Wie Du grafische Szenen nutzt, um den Status der Fenster zu ermitteln, hast Du nun gelernt. Man kann aber auch eine LUA Szene dafür nutzen. Dies ist allgemein auch sinnvoller, da man hier langfristig mehr von hat und es einfacher ist auch in Zukunft Änderungen vorzunehmen.
1. Um die LUA Szene zu erstellen, kannst Du einfach in Deinem Home Center 2 innerhalb der grafischen Szene ganz unten bei “Umschalten auf LUA basierte Szenenbearbeitung” auf “ändern” klicken und diese einschalten.
2. Füge anschließend den nachfolgenden Code in die Szene ein:
--[[ %% autostart %% properties %% weather %% events %% globals alarmanlage_status --]] local startSource = fibaro:getSourceTrigger(); local alarmanlage_status = tonumber(fibaro:getGlobalValue("alarmanlage_status")); local device_ids_zone_1 = {708,29,415,858,878}; local device_ids_zone_2 = {48,51,466,867}; local error_zone_1 = false; local error_zone_2 = false; fibaro:debug('Scene wurde gestartet'); if (alarmanlage_status == 1 ) then fibaro:debug('Alarmanlage aktiviert starte prüfung Fenster & Türen'); for i, device_id in pairs( device_ids_zone_1 ) do if(tonumber(fibaro:getValue(device_id,'value')) == 0) then --fibaro:debug("Zone 1: Fenster Sensor: "..device_id.." Name: " .. fibaro:getName(device_id).." im Raum "..fibaro:getRoomName( fibaro:getRoomID(device_id) ).." ist geschlossen") else error_zone_1 = ''..fibaro:getRoomName( fibaro:getRoomID(device_id) )..','; fibaro:debug("Zone 1: Fenster Sensor: "..device_id.." Name: " .. fibaro:getName(device_id).." im Raum "..fibaro:getRoomName( fibaro:getRoomID(device_id) ).." ist geöffnet!!") end end for i, device_id in pairs( device_ids_zone_2 ) do if(tonumber(fibaro:getValue(device_id,'value')) == 0) then --fibaro:debug("Fenster Sensor: "..device_id.." Name: " .. fibaro:getName(device_id).." im Raum "..fibaro:getRoomName( fibaro:getRoomID(device_id) ).." ist geschlossen"); else error_zone_2 = ''..fibaro:getRoomName( fibaro:getRoomID(device_id) )..','; fibaro:debug("Fenster Sensor: "..device_id.." Name: " .. fibaro:getName(device_id).." im Raum "..fibaro:getRoomName( fibaro:getRoomID(device_id) ).." ist geöffnet!") end end if(error_zone_1 == false and error_zone_2 == false) then fibaro:debug('Alle Fenster sind geschlossen'); -- RGBW auf Grün setzen! fibaro:call(579, "setBrightness", 100); fibaro:call(579, "setColor", 0,255,0,0); fibaro:call(579,'turnOn'); -- Push Meldung alles okay fibaro:call(495, "sendPush", "Alle Fenster sind geschlossen"); fibaro:setGlobal('tts_alexa_device', 'office'); fibaro:setGlobal('tts_alexa_text', 'Alle Fenster sind geschlossen'); fibaro:startScene(117); else fibaro:debug('Es sind Fenster geöffnet!'); fibaro:setGlobal('tts_alexa_device', 'office'); fibaro:setGlobal('tts_alexa_text', 'Folgende fenster sind geöffnet: '..error_zone_1..' '..error_zone_2..''); fibaro:startScene(117); if(error_zone_1 ~= false) then -- RGBW auf Rot setzen! fibaro:call(579, "setBrightness", 100); fibaro:call(579, "setColor", 255,0,0,0); fibaro:call(579,'turnOn'); -- Push Meldung Zone 1 fibaro:call(495, "sendPush", 'Zone1: '..error_zone_1..''); end if(error_zone_2 ~= false) then fibaro:debug('Ein Fenster in Zone2 ist offen'); -- Push Meldung Zone 1 fibaro:call(495, "sendPush", 'Zone2: '..error_zone_2..''); if(error_zone_1 == false) then -- RGBW auf Geld setzten fibaro:call(579, "setBrightness", 110); fibaro:call(579, "setColor", 242,210,0,0); fibaro:call(579,'turnOn'); end end end fibaro:sleep(10*1000); fibaro:call(579,'turnOff'); else fibaro:debug('nichts machen Alarm wurde deaktviert'); end
Nun müssen in der Szene noch ein paar Änderungen vorgenommen werden:
- die Device IDs der Fenstersensoren
- die Geräte ID Deines Smartphones für die Push-Benachrichtigungen
- Außerdem kannst Du innerhalb der Szene anpassen, ob Du eine Benachrichtigung erhalten willst oder ein Lichtfeedback über den RGBW-Stripe erhalten möchtest. Hier lassen sich auch andere Module integrieren wie beispielsweise eine Sirene.
Nach dem Speichern funktioniert die Szene auch schon. Diese wird anschließend nach der Aktivierung der Alarmanlage über die RGBW-Stripes den Status der Fenster in unterschiedlichen Farben übermitteln. Wir haben dafür die Farbe rot gewählt, sobald ein Fenster im Erdgeschoss geöffnet ist, gelb für geöffnete Fenster im Obergeschoss und grün, sobald alle Fenster geschlossen sind. Außerdem erhält man eine Push-Nachricht auf sein Smartphone.
Diese Funktionsweise hat sich bei uns schon sehr bewährt und funktioniert sehr gut. Zudem kann man auch eine Statusmitteilung über Alexa Text-to-Speech umsetzen. Wie das funktioniert, haben wir bereits detailliert in einem separaten Tutorial über Alexa TTS erklärt. Den LUA Code aus dem Tutorial kannst Du einfach in die aktuelle Szene einfügen und nur das passende Device eingeben sowie den Text ändern.
Tipp
Mithilfe der erstellen Szenen wirst Du nun immer darüber informiert, ob nach der Aktivierung der Alarmanlage auch der Status der Fenster in Ordnung ist. Sollte ein Fenster doch geöffnet sein, erhälst Du die entsprechenden Benachrichtigungen und kannst diesen Zustand beheben.
Hervorragende Anleitung!
Ich hab alles als Newbie, der von Homee abgewandert ist wegen Unzuverlässigkeit, Schritt für Schritt durchgeführt, hab viel gelernt, sogar die ersten Programmierschritte gehen schon . Grund eine Alarmanlage ins SnmartHome einzubinden war ein Einbruch in meinem Haus, ich wollte jetzt im Winter sowieso alles absichern, aber da war ich wohl einfach zu spät dran!! Es kursieren ja im Internet einige Ansätze für Alarmanlagen mit Fibaro HomeCenter 2, ich fand dieses Konzept am schlüssigsten und hab mich letztendlich dafür entschieden. Mit Grausen musste ich nach Folge 5 des Tutorials feststellen dass noch gar nicht alles besprochen war, und dass da mindestens noch ein oder zwei Tutorials fehlen.
Meine Frage… wann kommt das nächste Tutorial und wie lange wird es dauern bis die Alarmanlage vollständig rezensiert ist? Ich hab jetzt alles ready of state, die Alarmanlage ist scharf, aber was passiert wenn der Alarm ausgelöst wird? Spannendes Thema, wird hoffentlich bald behandelt.
Hallo Thomas,
vielen Dank, das freut uns sehr! Die Videoreihe wird auf jeden Fall noch weiter gehen. Momentan ist Nico mit anderen Dingen eingespannt, sobald wieder mehr Zeit ist, gehen wir auch neue Tutorials rund um die Alarmanlage an. LG
Hallo Maren,
ich bin total begeister von den Tutorials, jetzt habe ich das alles so gemacht und hänge jetzt. Gibt es denn wohl noch die angekündigten Tutorilas?
Liebe Grüße
Alex
Hallo Alexander,
leider haben wir aktuell kein Fibaro Home Center mehr zur Verfügung, wodurch hier leider erst mal keine weiteren Tutorials mehr erscheinen werden.
Liebe Grüße
Ralf
Hallo,
und danke für euer Skript hat mir sehr viel Arbeit erspart.
Einen Wunsch hätte ich noch:
Ich würde gerne in Abhängigkeit der “Schwere des Sicherheitsproblems ” die Farbe steuern .
Dazu habe ich mir auch schon eine Formel ausgedacht die einen Wert von 0 biss 255 für “Grün” ausgibt. Ich nenne sie mal Risiko.
also local Risiko = 0 für Hohes Risiko und 255 für “geringes” Risiko
Nur das funktioniert nicht so: fibaro:call(579, “setColor”, 242,Risiko,0,0).
Habt Ihr ein Idee wie ich die Farbe mit Variablen setzten kann?
Danke schon mal.
Gerhard
Nabend,
vielen Dank für das tolle Skript. Leider bekomme ich ein Problem, wenn mehere Fenster offen sind.
[DEBUG] 22:30:00: 2020-05-30 22:30:00.585201 [ fatal] Unknown exception: /opt/fibaro/scenes/201.lua:78: attempt to concatenate local ‘error_zone_2’ (a boolean value)
Wenn ich die “error_zone_2” aus dem Sprachausgabe-string nehme bekomme ich jedoch diese Fehlermeldung:
Unknown exception: /opt/fibaro/FibaroSceneAPI.lua:155: Assertion failed: Expected string
und ich bekomme nur den letzten Raum von den ID’s genannt, der ein offenes Fenster hat. Im Debug stehen aber alle geöffneten Fenster richtig drin.
Hast du eine Idee?
Hallo,
du übergibst scheinbar den falschen Dateityp, wenn ein String (also ein Text) erwartet wird, aber nicht ankommt bzw. ein boolscher Wert (true/false) concatisiert werden soll.
Hänge mal an dem Sprachausgabe-String einen Leerstring an (“”), um sicherzustellen, dass da immer ein String übergeben wird.
Ohne den ganzen Code zu sehen, wird das nur leider schwierig, den Fehler zu lokalisieren.
Beste Grüße
Ralf von Intelligentes-Haus.de