Einbruchalarm Script

Hi boomx,

erstmal danke für die ganze Arbeit!!! Mit dem Sonos ist bei mir aktuell so geregelt, dass er den Slider für die Lautstärke auf den gewünschten Wert setzt, dann die mp3 Variable (ich verwende den Sonos Commander VD) auf die entsprechende Audio-File z.b. Terrassentür geöffnet.mp3 oder Schlafzimmerfenster geöffnet.mp3 stellt und dann den Play Button drückt. Aktuell funktioniert, dass aber eben nicht über eine Abfrage beim Schärfen der Anlage und das wäre das ultimative Sahnehäubchen :slight_smile:

Sprich ich halte den Tag vor den Reader, er setzt die Variable rfid_alarm auf “on” und meldet mir auf Grund des Fensterkontakts Küche Wert=1 über die entsprechend auf der NAS hinterlegten mp3 mit dem Sonos, dass das Fenster noch offen ist. Dazu muss ich beim Sonos Commander die Variable mit der entsprechenden mp3 angelegt haben und das Script folglich diesen Wert entsprechend der benötigten mp3 setzten bevor es play drückt.
Das Schärfen wird unterbrochen und nachdem ich das Fenster geschlossen habe sowie erneut den Tag benutze quittiert mir mein Sonos mit einem “Alarmsystem aktiviert” das alles okay ist :wink:

Hi,

das ist eher kein Thema für das Skript. Das könnte aber so mit dem RFID-Skript umgesetzt werden. Hier geht es nur um das Skript, welches durch das Alarmpanel im Einbruchsfall ausgelöst wird.

Gruß

Hm, macht Sinn. Kannst du mir dennoch mit ein paar Code-Zeilen weiterhelfen, wie ich das mit dem Prüfen und bestätigen über die Sonos-Boxen in einer Arming-Scene realisieren kann? Im Moment helfe ich mir so, dass die Arming-Scene bei der Änderung der Variable rfid_alarm on/off anspringt bzw die Disarming-Scene ausgelöst wird. Diese Szenen schärfen und entschärfen die entsprechenden Sensoren. Aktuell sieht die Arming-Scene so aus:


--[[
%% properties
%% events
%% globals
rfid_alarm
--]]

local startSource = fibaro:getSourceTrigger();
if (
 ( fibaro:getGlobalValue("rfid_alarm") == "On" )
)
then
	fibaro:setGlobal("SONOS_MUSIC", "192.168.178.36/Fibaro/arming.mp3");
    fibaro:call(134, "setSlider", "6", "30");
	fibaro:call(134, "pressButton", "2");
    fibaro:call(135, "setSlider", "6", "30");
	fibaro:call(135, "pressButton", "2");
    fibaro:call(138, "setSlider", "6", "30");
	fibaro:call(138, "pressButton", "2");
	fibaro:call(54, "setArmed", "1");
	fibaro:call(106, "setArmed", "1");
	fibaro:call(81, "setArmed", "1");
	fibaro:call(65, "setArmed", "1");
	fibaro:call(122, "setArmed", "1");
  	fibaro:call(152, "setArmed", "1");
  	fibaro:call(154, "setArmed", "1");
end


Jetzt müsste “nur” noch die Überprüfung der Sensoren vorm Schärfen durchgeführt und ggf. auf eine mp3 durch den Sonos zurückgegriffen werden.

Danke für eure Hilfe :slight_smile:

Hi,

nutzt du das RFID Skript? Oder etwas komplett anderes? Wollte da kein Update mehr von veröffentlichen, da sich nach unseren Informationen die Einbindung des Keypads mit der neuen Version grundsätzlich verändert.

Gruß

Nein, benutze nicht das Skript von hier. Ich habe das RFID über zusätzlichen Raspberry mit Z-Wave-Stick (wie hier im Forum beschrieben) eingebunden. Dann schärfe ich alles mit der Scene weiter oben im Beitrag. In dieser Scene müsste er jetzt die Zustandsabfrage der jeweiligen Kontakte machen und z.B. ggf. mit:


fibaro:setGlobal("SONOS_MUSIC", "192.168.178.36/Fibaro/haustueroffen.mp3");
    fibaro:call(134, "setSlider", "6", "30");
	fibaro:call(134, "pressButton", "2");

antworten, wenn die Bedingung “Haustür offen” erfüllt ist. Das Schärfen sollte dann unterbrochen werden bis ich es erneut (nach dem schließen der Tür/Fenster) starte. Bei dieser Abfrage komme ich wie gesagt nicht weiter :frowning: Ziel soll es sein, dass er das für alle 5 Kontakte macht und jeweils mit einer anderen mp3 auf den Sonos antwortet.

So, habe jetzt boomx’s Skript eingerichtet und der Alarm funktioniert auch inkl. der Einbindung meiner Sonos Boxen als Sirene. Bleibt für mich nur noch das Thema mit dem Status-Check der Tür-/Fensterkontakte, um alles so zu haben wie ich es gern möchte. Daher noch einmal die Bitte, wer kann mir mit ein paar Code-Beispielen weiterhelfen?
Wie gesagt, nachdem die Variable rfid_alarm sich geändert hat, soll eine Zustandsabfrage der Kontakte erfolgen und mit einer mp3 Ausgabe über die Sonos Boxen quittiert werden. Ist ein beispielsweise ein Fenster noch offen, dann soll das Skript das schärfen der Sensoren verhindern und die Variable rfid_alarm wieder auf Off setzen. Ist kein Fenster offen, dann bleibt die Variable auf On und das Schärfen der Sensoren wird ausgeführt.

Danke schonmal für eure Hilfe.

Hi,

mal eine Frage off Topic. Die MP3 Files die Ihr nutzt habt Ihr die selbst besprochen oder gibt es da schon was fertiges was man adaptieren kann?

Gruß
ChrisBeat

Hi,

mit MacOS kann man sich selbst Sprach-Files erstellen. Diese kann man dann für Ansagen nutzen.

Im dem RFID-Skript findest du eine Code-Vorlage für die Prüfung von offenen Fenstern/Türen. Du wirst dann per Push darüber benachrichtigt. Hier kannst du dann das Skript erweitern. Schau es dir mal an. Das Skript kannst du dir hier laden:

http://www.siio.de/sicherheitalarm/alarm-schalten-mit-zipato-rfid-tagreader-im-fibaro-hc2-update-3/

Gruß

@chrisbeat: Google mal nach TTS to mp3. Es gibt diverse Seiten wo meine einen Text als mp3 speichern und herunterladen kann. So habe ich das gemacht.

@boomx: Das Skript hatte ich früher auch mal laufen. Ich habe jetzt 30min versucht es auch zu verstehen - vergebens :frowning: Ich finde die Stelle nicht, die für mich interessant sein könnte. Kannst du mir bitte nochmal helfen?

for z=1, 1000 do
              if doorID[z] ~= nil then
                if (tonumber(fibaro:getValue(doorID[z], 'value')) == 0) then
                  fibaro:call(doorID[z], 'setArmed', '1')
                else
                  local sensorname = fibaro:getName(doorID[z])
                  local sensorroom = fibaro:getRoomNameByDeviceID(doorID[z])
                  fibaro:debug('ACHTUNG: ' .. sensorname .. ' im Raum: ' .. sensorroom .. ' nicht sicher. Sende Push.')
                  for y=1, countID do
                      if phoneID[y] ~= nil then
                        fibaro:call(phoneID[y], 'sendPush', 'ACHTUNG: ' .. sensorname .. ' im Raum: ' .. sensorroom .. ' nicht sicher.')

Danke :slight_smile:

Ich habe das Ganze jetzt mal auf meine Bedürfnisse angepasst. Im Moment checkt das folgende Skript zu Testzwecken meine Terrassentür und mein Schlafzimmerfenster. Wenn diese Sensoren zu sind werden diese geschärft. Meldet einer der Sensoren “offen” wird die eine Sonos Box mit der entsprechenden mp3 versorgt und der Sensor wird nicht geschärft. Was jetzt noch fehlt: Ich möchte gern, dass nun auch der andere Sensor (der “zu” gemeldet hat) nicht geschärft wird solange der andere Sensor noch offen ist und das Skript die Variable rfid_alarm zum erneuten schärfen wieder auf “off” setzt. Wie realisiere ich das am besten? Danke für eure Hilfe!!!

--[[
%% properties
%% events
%% globals
--]]
local startSource = fibaro:getSourceTrigger();

     if 154 ~= nil then
        if (tonumber(fibaro:getValue(154, 'value')) == 0) then
           fibaro:call(154, 'setArmed', '1')
                else
                  local sensorname = fibaro:getName(154)
                  local sensorroom = fibaro:getRoomNameByDeviceID(154)
                  fibaro:debug('ACHTUNG: ' .. sensorname .. ' im Raum: ' .. sensorroom .. ' nicht sicher.')
                  fibaro:setGlobal("SONOS_MUSIC", "192.168.178.36/Fibaro/schlafzimmerfenstergeoeffnet.mp3");
                  fibaro:call(138, "setSlider", "6", "15");
	              fibaro:call(138, "pressButton", "2");
        end
      end
     
      if 54 ~= nil then
        if (tonumber(fibaro:getValue(54, 'value')) == 0) then
           fibaro:call(54, 'setArmed', '1')
                else
                  local sensorname = fibaro:getName(54)
                  local sensorroom = fibaro:getRoomNameByDeviceID(54)
                  fibaro:debug('ACHTUNG: ' .. sensorname .. ' im Raum: ' .. sensorroom .. ' nicht sicher.')
                  fibaro:setGlobal("SONOS_MUSIC", "192.168.178.36/Fibaro/terrassentuergeoeffnet.mp3");
                  fibaro:call(138, "setSlider", "6", "15");
	              fibaro:call(138, "pressButton", "2");
        end
      end

Könntest du für sowas beim nächsten Mal ein neues Thema aufmachen?

Das if 154 ungleich nil kannst du weglassen. Die Prüfung ist nur in einer for-Schleife nötig, bei dir wird sie nie erfüllt.

Bei dir wird nur ein Sensor geprüft, wie soll da ein anderer was melden? Die Prüfung müsste dann schon in einem Skript durchlaufen. In dem neusten Artikel findest du eine Funktion, welche prüft, ob die Sensoren geschärft sind und einen bestimmten Wert zurückliefert. Dies könntest du leicht umbauen und einsetzen. Wenn dann nicht alle Sensoren sicher sind, könnte man die Szene abbrechen und die Variable zurücksetzen. Sollte die Bedingung erfüllt sein, alle schärfen.

Hm, das verstehe ich nicht. Wie meinst du das mit nur einem Sensor? Das Skript unterscheidet aktuell schon zwischen Terrassentür und Schlafzimmerfenster. Wird beides auch im Debug ausgegeben und ggf. die passende mp3 gespielt, sind für mein Verständnis also zwei Sensoren?!

Wo ist denn die Stelle im aktuellen Skript die checkt, ob die Sensoren armed sind und ggf. abbricht bzw. die Variable zurücksetzt? Entschuldige mein laienhaftes LUA-Wissen :confused:

Was du umsetzen willst ist aber ein wenig komplizierter als einzeln die Sensoren abzufragen :wink:

Ist die Funktion checkedArmedStatus (hab derzeit kein Zugriff auf das Skript, könnte also ein wenig anders heißen)…

Ich gebe es auf! Komme mit dem Skript nicht klar. Ich steige da einfach nicht mehr durch bzw. sind die Variable PresentState und die rfid-Sachen einfach überall :frowning: Ich denke, dass der Ansatz das jeder Sensor einzeln abgefragt wird notwendig ist, da jeder Sensor auch eine eigene mp3 hat. Es fehlt ja auch nur noch sowas wie: wenn nach 5 Sekunden Terrassentür und Fenster nicht armed=1 dann Variable rfid_alarm=off. Das sollte ja schon reichen, da wenn rfid_alarm=off alle Sensoren armed=0 sind.
Also Fenster zu und neu schärfen -> das Skript läuft dann durch, schärft die Sensoren und die Variable rfid_alarm bleibt auf on. Wichtig wäre dabei eben nur, dass die zu überprüfenden Sensoren kein Delay beim Schärfen haben.

Nein, notwendig ist es nicht. Würde sich auch anders und eleganter lösen lassen. Als einfache Alternative kann das aber natürlich so umgesetzt werden. Möglicherweise muss ich das RFID-Skript nochmal aktualisieren, dann bau ich so eine Funktion mit ein.

Gruß

Funktionier! Hier das Skirpt:

--[[
%% properties
%% globals
rfid_alarm
--]]

local startSource = fibaro:getSourceTrigger();
if (
 ( fibaro:getGlobalValue("rfid_alarm") == "On" )
)
then    
   fibaro:debug('Überprüfe Sensoren')     
        if (tonumber(fibaro:getValue(154, 'value')) == 0) then
           fibaro:call(154, 'setArmed', '1')
                else
                  local sensorname = fibaro:getName(154)
                  local sensorroom = fibaro:getRoomNameByDeviceID(154)
                  fibaro:debug('ACHTUNG: ' .. sensorname .. ' im Raum: ' .. sensorroom .. ' nicht sicher.')
                  fibaro:setGlobal("SONOS_MUSIC", "192.168.178.36/Fibaro/schlafzimmerfenstergeoeffnet.mp3");
                  fibaro:call(138, "setSlider", "6", "15");
	              fibaro:call(138, "pressButton", "2");
        end
        if (tonumber(fibaro:getValue(54, 'value')) == 0) then
           fibaro:call(54, 'setArmed', '1')
                else
                  local sensorname = fibaro:getName(54)
                  local sensorroom = fibaro:getRoomNameByDeviceID(54)
                  fibaro:debug('ACHTUNG: ' .. sensorname .. ' im Raum: ' .. sensorroom .. ' nicht sicher.')
                  fibaro:setGlobal("SONOS_MUSIC", "192.168.178.36/Fibaro/terrassentuergeoeffnet.mp3");
                  fibaro:call(138, "setSlider", "6", "15");
	              fibaro:call(138, "pressButton", "2");
        end
----Motion Sensoren und Haustür aktivieren---- 
   fibaro:call(65, 'setArmed', '1')
   fibaro:call(81, 'setArmed', '1')
   fibaro:call(106, 'setArmed', '1') 
   fibaro:call(122, 'setArmed', '1') 
   fibaro:call(152, 'setArmed', '1') --Haustür--
  
if (tonumber(fibaro:getValue(54, 'armed')) == 1 and 
    tonumber(fibaro:getValue(154, 'armed')) == 1) then
    fibaro:debug('Alle Sensoren sicher - Alarm aktiviert')
    fibaro:setGlobal("SONOS_MUSIC", "192.168.178.36/Fibaro/arming.mp3");
    fibaro:call(138, "setSlider", "6", "15");
	fibaro:call(138, "pressButton", "2");
else 
if (tonumber(fibaro:getValue(54, 'armed')) == 0 or 
    tonumber(fibaro:getValue(154, 'armed')) == 0) then 
    fibaro:setGlobal('rfid_alarm', 'Off')
    fibaro:debug('Sensoren nicht sicher - deaktiviere Alarm')
  end
 end
end
if (
 ( fibaro:getGlobalValue("rfid_alarm") == "Off" )
)
then  
    fibaro:call(54, 'setArmed', '0')
    fibaro:call(154, 'setArmed', '0')
----Motion Sensoren und Haustür deaktivieren----
   fibaro:call(65, 'setArmed', '0')
   fibaro:call(81, 'setArmed', '0')
   fibaro:call(106, 'setArmed', '0') 
   fibaro:call(122, 'setArmed', '0') 
   fibaro:call(152, 'setArmed', '0') --Haustür-- 
   fibaro:debug('Alarm deaktiviert')
end

Funktionsweise: Ich halte den Tag-Reader davor -> Variable wird gesetzt -> Szene startet -> Wenn Fenster/ Tür offen Rückmeldung mit entsprechender mp3 auf der Sonos -> Variable wird zurückgesetzt -> alle Sensoren deaktiviert -> erneutes schärfen -> Fenster/Türen alle zu -> schärfen aller Sensoren und Bestätigung über Sonos, dass Alarm aktiviert

Verbesserung am Skript sind jederzeit willkommen