Eigenentwickelte Alarmkonsole - SmartAlarm

Liebes Forum,

nachfolgend möchte ich mein individuelles Alarmszenenprojekt vorstellen. Einer der Hauptgründe mir eine HC2 zuzulegen war der Wunsch eine Alarmanlage zu realisieren. Nach einigen praktischen Versuchen mit den bordeignen Mitteln der HC2 machte sich jedoch eine gewisse Ernüchterung breit.
Eines der Hauptprobleme (bei mir) war, dass nach ausgelöstem und dann beendetem Alarm die HC2 kaum noch funktionierte – Lichtszenen gingen mal – mal gingen sie nicht. Insgesamt half nur ein Neustart, um die HC2 wieder in einen „normalen“ Zustand zu versetzen.
Zudem wollte ich einige Features umsetzen, die sich so mit den eingebauten Mitteln nicht so ohne weiteres umsetzen lassen. Teilweise wurden hier im Forum für einige dieser Features mittlerweile Skripte gepostet, aber insgesamt ist mir der eingebaute Alarm zu statisch und zu intransparent. Daher habe ich mir eigene Alarmszenen programmiert, welche exakt meine Abforderungen erfüllen.
Grundlegende Anforderungen sind:

  • Optische Anzeige des Alarmstatus bei Aktivierung/Deaktivierung im Hauseingangsbereich mit zeitlicher Verzögerung bei Aktivierung, damit
  • Bei Alarmauslösung im Eingangsbereich (und nur dort) 10 Sek. Optische Anzeige als Erinnerung, damit der Alarm deaktiviert werden kann
  • Bei Alarmauslösung zunächst stiller Alarm durch Blinklicht bevor Sirenen geschaltet werden
  • Unterschiedliche Alarmmodi (z.B. Fensterüberwachung abwesend, Fensterüberwachung anwesend, Fenster und Bewegungsmelder, Panik, etc.)
  • Die Alarmanlage sollte in den täglichen Tagesablauf eingebunden werden können. Also nicht nur bei längerer Abwesenheit (Urlaub), sondern unkompliziert auch bei kurzen Abwesenheiten unkompliziert aktiviert werden können. RFID KeyPad und Co fielen daher aus. Auch die Fibaro App ist dazu nicht geeignet.
  • Wir haben zwei Kinder im Alter 10-11 und auch diese sollten Alarm aktivieren/deaktivieren können. Sprich: Die Alarmanlage sollte „Kinderkompatibel“ sein

Meine Wahl zur Aktivierung/Deaktivierung des Alarms fiel auf einen Wall-C der bei uns unauffällig im Eingangsbereich platziert ist. Neben den zahlreichen anderen Lichtschaltern weiß niemand, dass es sich hier um einen Alarmschalter handelt. Zudem ist ein Einbruch bei uns durch die Eingangstür eher unwahrscheinlich, weil zu massiv und zu gut einsehbar. Wahrscheinlicher wäre bei uns ein Einbruch über Keller/EG durch eines der zahlreichen Fenster oder über den Balkon, da es hier auch dunkle Bereiche gibt.

Die optischen Alarmanzeigen sollten über unsere HUE’s realisiert werden. Wir haben sowohl innen, als auch außen zahlreiche HUE GU10 verbaut, welche sich ideal eignen. Zunächst habe ich aber einige Programmierversuche unternommen, um herauszufinden, wie die Alarmszene(n) idealerweise strukturiert werden. Mir war wichtig möglichst eine „Riesenszene“ in der alle Features enthalten sind zu vermeiden und die Funktionalität möglichst auf mehrere einfache Szenen zu verteilen.

Herausgekommen ist eine Struktur bei der in jeweils getrennten Szenen die Alarmanlage aktiviert/deaktiviert, der Alarm festgestellt, sowie der Alarm tatsächlich ausgelöst wird – bei letzterem können auch unabhängige Szenen. Die Steuerung erfolgt über globale Variablen.

Folgende Szenen bilden die „Alarmkonsole“ – „SAlarm“ steht für „Smart Alarm“:

„SAlarm: SetStatus“
Abfrage des Wall-C und dann aktivieren der „Fensterüberwachung bzw. Deaktivierung des Alarms.

„SAlarm: LogWinStat“
Dies ist ein spezielles Feature des gewünschten Alarmmodus „Fensterüberwachung anwesend“ bei dem die Fenster überwacht werden, man aber beispielsweise nachts anwesend ist. Der Wunsch war, dass bei Alarmaktivierung der Status aller Fenster (geschlossen/offen) abgespeichert wird. Wenn man dann beispielsweise im Sommer im Schlafzimmer bei offenem/gekipptem Fenster schläft und dieses in der Nacht schließt, dann soll natürlich kein Alarm ausgelöst werden. Nur wenn ein Fenster geöffnet wird, dann soll Alarm ausgelöst werden.

„SAlarm: SetAlarm“
Feststellen, ob Alarm ausgelöst wurde und im positiven Fall setzen des globalen Alarmstatus = AN

„SAlarm: ExecAlarm“
Die eigentliche Szene, welche den Alarm regelt für den Fall, dass die globale Alarmstatus Variable auf AN gesetzt wurde. In Kombination mit dem gesetzten Alarmmodus können unterschiedliche Alarmszenen realisiert werden für beispielsweise „Fensterüberwachung anwesend“, „Panik“, etc. Wem die Alarmszene dann zu lang und unübersichtlich wird, der könnte aber auch je eine ExecAlarm-Szene je Alarmmodus programmieren. Diesen Weg bin ich gegangen – hier im Forum möchte ich der Einfachheit halber aber nur eine Beispielszene vorstellen.

Für die Alarmkonsole müssen folgende globale Variablen angelegt werden:

  • AlarmStatus (AN, AUS)
  • SmartAlarm (AUS, Fensterüberwachung, Panik, etc.)
  • ID_000 (zum Abspeichern der ID des Alarmauslösers)
  • Für jedes Fenster eine globale Variable nach dem Muster „ID_xxx“ wobei „xxx“ die ID des Fenstersensors sein sollte. Beispielsweise „ID_063“ für den Fenstersensor mit der ID 63.

Nachfolgend nun die einzelnen Alarmszenen.

Grüße
Arno

„SAlarm: SetStatus“
Abfrage des Wall-C und dann aktivieren der „Fensterüberwachung bzw. Deaktivierung des Alarms. Diese Szene fragt den Wall-C ab, der im Eingangsbereich platziert die Alarmkonsole aktiviert bzw. Deaktiviert. Aktuell wird dort nur der Alarmmodus „Fensterüberwachung“ aktiviert. Der linke Taster deaktiviert den Alarm und der rechte Taster aktiviert den Alarm. Ob der Taster einfach, mehrfach, oben oder unten betätigt wird ist unerheblich. Theoretisch könnten um der Wall-C auch verschiedene Alarmmodi aktiviert werden. Wir haben dies aktuell aber nicht umgesetzt, weil dies dann nicht mehr „Kinderkompatibel“ (weil zu kompliziert) wäre.

--[[
%% properties
214 sceneActivation
%% globals
--]]

local scene = 89
local hueID = 316 -- ID Hue Diele zur Anzeige Alarmstatus
local buttonStatus = fibaro:getValue(214, "sceneActivation"); -- Abfrage Wall-C

---------------------------------------------------------------------------
-- Lösche doppelte Szene(n) -----------------------------------------------
---------------------------------------------------------------------------
if (fibaro:countScenes()>1) 
then 
  fibaro:debug("Abbruch wegen doppelter Szene");
  fibaro:abort(); 
end

---------------------------------------------------------------------------
-- Ermitteln welches Device Auslöser der Szene war ------------------------
---------------------------------------------------------------------------
local startSource = fibaro:getSourceTrigger();
local trigger = 0;
if (startSource['type'] == 'property')
then
  trigger = startSource["deviceID"]
  elseif (startSource["type"] == "global")
  then
    trigger = startSource["name"]
    else
      trigger = "other"
end
fibaro:debug("Auslöser der Szene ="..trigger);

--------------------------------------------------------------------------
-- Setzen der Alarm Variablen entsprechend Wall-C Button 1,2,3,4
--------------------------------------------------------------------------
print("ButtonStatus Wert = "..buttonStatus);
if (buttonStatus == "11" or buttonStatus == "12" or buttonStatus == "13" or buttonStatus == "15" or buttonStatus == "31" or buttonStatus == "32" or buttonStatus == "33" or buttonStatus == "35")
then
  print("Button 1 OL: SmartAlarm = AUS und Alarm deaktiviert");
  fibaro:setGlobal("SmartAlarm", "AUS");
  fibaro:setGlobal("AlarmStatus", "AUS");
  fibaro:call(18, "sendDefinedPushNotification", "6");
  fibaro:call(251, "sendDefinedPushNotification", "6");
  -----------------------------------------------------------------------
  -- Diele HUE Bloom grün schalten = Alarm AUS
  -----------------------------------------------------------------------
  for i = 1, 10
  do
    fibaro:call(hueID, "changeSaturation", 255)
    fibaro:call(hueID, "changeBrightness", 255)
    fibaro:call(hueID, "changeHue", 23348)
    fibaro:call(hueID, "turnOn")
    fibaro:sleep(1000); 
  end
  fibaro:call(hueID, "turnOff")
  -----------------------------------------------------------------------
elseif (buttonStatus == "21" or buttonStatus == "22" or buttonStatus == "23" or buttonStatus == "25" or buttonStatus == "41" or buttonStatus == "42" or buttonStatus == "43" or buttonStatus == "45")
then
  print("Button 2 OR: SmartAlarm = Fensterüberwachung");
  -----------------------------------------------------------------------
  -- Diele HUE Bloom rot schalten = SmartAlarm = Fensterüberwachung
  -----------------------------------------------------------------------
  fibaro:call(hueID, "changeSaturation", 255)
  fibaro:call(hueID, "changeBrightness", 255)
  fibaro:call(hueID, "changeHue", 65535)
  fibaro:call(hueID, "turnOn")
  fibaro:sleep(20000);
  fibaro:call(hueID, "turnOff")
  -----------------------------------------------------------------------
  fibaro:setGlobal("SmartAlarm", "Fensterüberwachung");
  fibaro:call(18, "sendDefinedPushNotification", "7"); -- Pushnachricht Handy 1
  fibaro:call(251, "sendDefinedPushNotification", "7"); -- Pushnachricht Handy 2
end
print("Ende der Szene");

„SAlarm: LogWinStat“
Dies ist ein spezielles Feature des gewünschten Alarmmodus „Fensterüberwachung anwesend“ bei dem die Fenster überwacht werden, man aber beispielsweise nachts anwesend ist. Der Wunsch war, dass bei Alarmaktivierung der Status aller Fenster (geschlossen/offen) abgespeichert wird. Wenn man dann beispielsweise im Sommer im Schlafzimmer bei offenem/gekipptem Fenster schläft und dieses in der Nacht schließt, dann soll natürlich kein Alarm ausgelöst werden. Nur wenn ein Fenster geöffnet wird, dann soll Alarm ausgelöst werden.

--[[
%% properties
%% globals
SmartAlarm
--]]

local scene = 87 -- ID dieser Szene
local StatusSmartAlarm = fibaro:getGlobalValue("SmartAlarm")

-----------------------------------------------------------------------
-- Lösche doppelte Szene(n)
-----------------------------------------------------------------------
if (fibaro:countScenes()>1) 
  then 
    fibaro:debug("Abbruch wegen doppelter Szene");
    fibaro:abort(); 
end

-----------------------------------------------------------------------
-- Ermitteln welches Device Auslöser der Szene war
-----------------------------------------------------------------------
local startSource = fibaro:getSourceTrigger();
local trigger = 0;
if (startSource['type'] == 'property')
  then
    trigger = startSource["deviceID"]
  elseif (startSource["type"] == "global")
    then
      trigger = startSource["name"]
  else
    trigger = "other"
end
fibaro:debug("Auslöser der Szene ="..trigger);

-----------------------------------------------------------------------
-- Szene abbrechen wenn SmartAlarm = AUS
-----------------------------------------------------------------------
print("Status SmartAlarm = "..StatusSmartAlarm);
if 	(StatusSmartAlarm == "AUS")
  then
    print("SmartAlarm ist ausgeschaltet = "..StatusSmartAlarm);
end

-----------------------------------------------------------------------
-- Status Fenstersensoren globalen Variablen zuordnen
-----------------------------------------------------------------------
if 	(StatusSmartAlarm == "Fensterüberwachung")
  then
    print("Starte Szene = "..StatusSmartAlarm);
    ---------------------------------------------------------------------
    -- Schreibe Fensterstatus zum Zeitpunkt der Aktivierung der
    -- Fensterüberwachung in die globalen Variablen
    ---------------------------------------------------------------------
    fibaro:setGlobal("ID_021", fibaro:getValue(21, "value"));  -- EG Büro: Seite
    fibaro:setGlobal("ID_203", fibaro:getValue(203, "value")); -- EG Büro: Vorn
    
    fibaro:setGlobal("ID_208", fibaro:getValue(208, "value")); -- EG Diele: Garagentür
    fibaro:setGlobal("ID_210", fibaro:getValue(210, "value")); -- EG Diele: Haustür
    fibaro:setGlobal("ID_056", fibaro:getValue(56, "value"));  -- EG Diele: Gäste WC
  
    fibaro:setGlobal("ID_241", fibaro:getValue(241, "value")); -- EG Wohnen: Balkon Links
    fibaro:setGlobal("ID_245", fibaro:getValue(245, "value")); -- EG Wohnen: Balkon Rechts
    fibaro:setGlobal("ID_347", fibaro:getValue(347, "value")); -- EG Wohnen: Vorne Links
    fibaro:setGlobal("ID_350", fibaro:getValue(350, "value")); -- EG Wohnen: Vorne Rechts
    
    fibaro:setGlobal("ID_341", fibaro:getValue(341, "value")); -- EG Küche: Vorne Links
    fibaro:setGlobal("ID_344", fibaro:getValue(344, "value")); -- EG Küche: Vorne Rechts
    
    fibaro:setGlobal("ID_146", fibaro:getValue(46, "value"));  -- UG Diele: SL
    fibaro:setGlobal("ID_150", fibaro:getValue(150, "value")); -- UG Diele: VL
    fibaro:setGlobal("ID_148", fibaro:getValue(148, "value")); -- UG Diele: VR
    fibaro:setGlobal("ID_144", fibaro:getValue(144, "value")); -- UG Diele: SR

    fibaro:setGlobal("ID_097", fibaro:getValue(97, "value"));  -- UG Schlafen: SL
    fibaro:setGlobal("ID_095", fibaro:getValue(95, "value"));  -- UG Schlafen: VL
    fibaro:setGlobal("ID_062", fibaro:getValue(62, "value"));  -- UG Schlafen: VR 
  
    fibaro:setGlobal("ID_206", fibaro:getValue(206, "value"));  -- UG Bad: SR
    fibaro:setGlobal("ID_060", fibaro:getValue(60, "value"));  -- UG Bad: VL
    fibaro:setGlobal("ID_338", fibaro:getValue(338, "value"));  -- UG Bad: VR
  
    fibaro:setGlobal("ID_023", fibaro:getValue(23, "value"));  -- UG Umkleide
    fibaro:setGlobal("ID_058", fibaro:getValue(58, "value")); -- UG Durchgang
    fibaro:setGlobal("ID_064", fibaro:getValue(64, "value")); -- UG Waschen Tür
    fibaro:setGlobal("ID_152", fibaro:getValue(152, "value")); -- UG Werken: Vorne
  
    ---------------------------------------------------------------------
    -- Ausgabe zur Kontrolle
    ---------------------------------------------------------------------
    print("ID_021 EG Büro: Seite = "..fibaro:getGlobalValue("ID_021")); 
    print("ID_203 EG Büro: Vorne = "..fibaro:getGlobalValue("ID_203"));
  
    print("ID_208 EG Diele: Garagentür = "..fibaro:getGlobalValue("ID_208"));
    print("ID_210 EG Diele: Haustür = "..fibaro:getGlobalValue("ID_210"));
    print("ID_056 EG Diele: Gäste WC = "..fibaro:getGlobalValue("ID_056"));
  
    print("ID_241 EG Wohnen: Balkon Links = "..fibaro:getGlobalValue("ID_241"));
    print("ID_245 EG Wohnen: Balkon Rechts = "..fibaro:getGlobalValue("ID_245"));
    print("ID_347 EG Wohnen: Vorne Links = "..fibaro:getGlobalValue("ID_347"));
    print("ID_350 EG Wohnen: Vorne Rechts = "..fibaro:getGlobalValue("ID_350"));
  
    print("ID_341 EG Küche: Vorne Links = "..fibaro:getGlobalValue("ID_341"));
    print("ID_344 EG Küche: Vorne Rechts = "..fibaro:getGlobalValue("ID_344"));
    
    print("ID_146 UG Diele: SL = "..fibaro:getGlobalValue("ID_146"));
    print("ID_150 UG Diele: VL = "..fibaro:getGlobalValue("ID_150"));
    print("ID_148 UG Diele: VR = "..fibaro:getGlobalValue("ID_148"));
    print("ID_144 UG Diele: SR = "..fibaro:getGlobalValue("ID_144"));
  
    print("ID_097 UG Schlafen: SL = "..fibaro:getGlobalValue("ID_097"));
    print("ID_095 UG Schlafen: VL = "..fibaro:getGlobalValue("ID_095"));
    print("ID_062 UG Schlafen: VR = "..fibaro:getGlobalValue("ID_062"));
  
    print("ID_206 UG Bad: SR = "..fibaro:getGlobalValue("ID_206"));
    print("ID_060 UG Bad: VL = "..fibaro:getGlobalValue("ID_060"));
    print("ID_338 UG Bad: VR = "..fibaro:getGlobalValue("ID_338"));
  
    print("ID_023 UG Umkleide = "..fibaro:getGlobalValue("ID_023"));
    print("ID_058 UG Durchgang = "..fibaro:getGlobalValue("ID_058"));
    print("ID_064 UG Waschen Tür = "..fibaro:getGlobalValue("ID_064"));
    print("ID_152 UG Werken Vorne = "..fibaro:getGlobalValue("ID_152"));  
end

--------------------------------------------------------------------------
print("Ende der Szene");

„SAlarm: SetAlarm“
Feststellen, ob Alarm ausgelöst wurde und im positiven Fall setzen des globalen Alarmstatus = AN
In dieser Szene ist die gesamte „Logik“ enthalten, welche feststellt, ob ein Alarm ausgelöst wurde. Logik bzw. Funktionalität können theoretisch beliebig verändert oder erweitert werden. Wichtig ist, dass am Ende die Variable Alarmstatus auf „AN“ gesetzt wird. Dadurch wird dann die Szene zur Alarmausführung angestoßen.

--[[
%% properties
21 value
23 value
58 value
60 value
62 value
64 value
95 value
97 value

144 value
146 value
148 value
150 value
152 value

203 value
206 value
208 value
210 value
241 value
245 value

338 value
341 value
344 value
347 value
350 value

%% globals
--]]

local scene = 86 -- ID dieser Szene
---------------------------------------------------------------------------
-- Aktueller Status Fenstersensoren Variablen zuordnen
---------------------------------------------------------------------------
local ID021 = fibaro:getValue(21, "value"); -- EG Büro: Seite
local ID203 = fibaro:getValue(203, "value"); -- EG Büro: Vorne
local ID208 = fibaro:getValue(208, "value"); -- EG Diele: Garagentür
local ID210 = fibaro:getValue(210, "value"); -- EG Diele: Haustür
local ID056 = fibaro:getValue(56, "value"); -- EG Diele: Gäste WC
local ID241 = fibaro:getValue(241, "value"); -- EG Wohnen: Balkon Links
local ID245 = fibaro:getValue(245, "value"); -- EG Wohnen: Balkon Rechts
local ID347 = fibaro:getValue(347, "value"); -- EG Wohnen: Vorne Links
local ID350 = fibaro:getValue(350, "value"); -- EG Wohnen: Vorne Rechts
local ID341 = fibaro:getValue(341, "value"); -- EG Küche: Vorne Links
local ID344 = fibaro:getValue(344, "value"); -- EG Küche Vorne Rechts

local ID146 = fibaro:getValue(146, "value"); -- UG Diele: SL
local ID150 = fibaro:getValue(150, "value"); -- UG Diele: VL
local ID148 = fibaro:getValue(148, "value"); -- UG Diele: VR
local ID144 = fibaro:getValue(144, "value"); -- UG Diele: SR
local ID097 = fibaro:getValue(97, "value"); -- UG Schlafen: SL
local ID095 = fibaro:getValue(95, "value"); -- UG Schlafen: VL
local ID062 = fibaro:getValue(62, "value"); -- UG Schlafen: VR
local ID206 = fibaro:getValue(206, "value"); -- UG Bad: SR
local ID060 = fibaro:getValue(60, "value");  -- UG Bad: VL
local ID338 = fibaro:getValue(338, "value"); -- UG Bad: VR
local ID023 = fibaro:getValue(23, "value");  -- UG Umkleide
local ID058 = fibaro:getValue(58, "value");  -- UG Durchgang Keller
local ID064 = fibaro:getValue(64, "value");  -- UG Waschkeller Tür
local ID152 = fibaro:getValue(152, "value"); -- UG Werkzeugkeller Vorne

--------------------------------------------------------------------------
-- Globaler Variablenstatus lokalen Variablen zuordnen
--------------------------------------------------------------------------
local ID_021 = fibaro:getGlobalValue("ID_021"); -- EG Büro: Seite
local ID_203 = fibaro:getGlobalValue("ID_203"); -- EG Büro: Vorne
local ID_208 = fibaro:getGlobalValue("ID_208"); -- EG Diele: Garagentür
local ID_210 = fibaro:getGlobalValue("ID_210"); -- EG Diele: Haustür
local ID_056 = fibaro:getGlobalValue("ID_056"); -- EG Diele: Gäste WC
local ID_241 = fibaro:getGlobalValue("ID_241"); -- EG Wohnen: Balkon Links
local ID_245 = fibaro:getGlobalValue("ID_245"); -- EG Wohnen: Balkon Rechts
local ID_347 = fibaro:getGlobalValue("ID_347"); -- EG Wohnen: Vorne Links
local ID_350 = fibaro:getGlobalValue("ID_350"); -- EG Wohnen: Vorne Rechts
local ID_341 = fibaro:getGlobalValue("ID_341"); -- EG Küche: Vorne Links
local ID_344 = fibaro:getGlobalValue("ID_344"); -- EG Küche: Vorne Rechts

local ID_146 = fibaro:getGlobalValue("ID_146"); -- UG Diele: SL
local ID_150 = fibaro:getGlobalValue("ID_150"); -- UG Diele: VL
local ID_148 = fibaro:getGlobalValue("ID_148"); -- UG Diele: VR
local ID_144 = fibaro:getGlobalValue("ID_144"); -- UG Diele: SR
local ID_097 = fibaro:getGlobalValue("ID_097"); -- UG Schlafen: SL
local ID_095 = fibaro:getGlobalValue("ID_095"); -- UG Schlafen: VL
local ID_062 = fibaro:getGlobalValue("ID_062"); -- UG Schlafen: VR
local ID_206 = fibaro:getGlobalValue("ID_206"); -- UG Bad: SR
local ID_060 = fibaro:getGlobalValue("ID_060"); -- UG Bad: VL
local ID_338 = fibaro:getGlobalValue("ID_338"); -- UG Bad: VR
local ID_023 = fibaro:getGlobalValue("ID_023"); -- UG Umkleide
local ID_058 = fibaro:getGlobalValue("ID_058"); -- UG Durchgang Keller
local ID_064 = fibaro:getGlobalValue("ID_064"); -- UG Waschkeller Tür
local ID_152 = fibaro:getGlobalValue("ID_152"); -- UG Werkzeugkeller Vorne

--------------------------------------------------------------------------
-- Andere Variablen definieren
--------------------------------------------------------------------------
local StatusSmartAlarm = fibaro:getGlobalValue("SmartAlarm");
local AlarmStatus = fibaro:getGlobalValue("AlarmStatus");

---------------------------------------------------------------------------
-- Lösche doppelte Szene(n)
---------------------------------------------------------------------------
if (fibaro:countScenes()>1) 
  then 
    fibaro:debug("Abbruch wegen doppelter Szene");
    fibaro:abort(); 
end

---------------------------------------------------------------------------
-- Abbruch falls Alarm bereits aktiv
---------------------------------------------------------------------------
if (AlarmStatus == "AN")
  then
    fibaro:debug("Alarm ist bereits aktiviert - Abbruch!");
    fibaro:abort(); 
end

---------------------------------------------------------------------------
-- Ermitteln welches Device Auslöser der Szene war
---------------------------------------------------------------------------
local startSource = fibaro:getSourceTrigger();
local trigger = 0;
if (startSource['type'] == 'property')
  then
    trigger = startSource["deviceID"]
  elseif (startSource["type"] == "global")
    then
      trigger = startSource["name"]
    else
      trigger = "other"
end
fibaro:debug("Auslöser der Szene ="..trigger);
print("Status SmartAlarm = "..StatusSmartAlarm);

---------------------------------------------------------------------------
-- Keine Aktion nur Info wenn SmartAlarm = AUS
---------------------------------------------------------------------------
if 	(StatusSmartAlarm == "AUS")
  then
    print("SmartAlarm ist ausgeschaltet = "..StatusSmartAlarm);
end

--------------------------------------------------------------------------
-- Starte Szene Fensterüberwachung ---------------------------------------
--------------------------------------------------------------------------
if 	(StatusSmartAlarm == "Fensterüberwachung")
  then
    print("Starte Szene = Fensterüberwachung");
    
    if (ID021 < ID_021)
      then
        print("Fenster Büro Seite wurde nur geschlossen - kein Alarm!");
        fibaro:setGlobal("ID_021", ID021);
        local ID_021 = fibaro:getGlobalValue("ID_021");
      elseif (ID021 > ID_021)
        then
          fibaro:setGlobal("AlarmStatus", "AN");
          fibaro:setGlobal("ID_000", trigger);
          print("ALARM Fenstersensor Büro Seite!!");
    end
  
    if (ID203 < ID_203)
      then
        print("Fenster Büro Vorne wurde nur geschlossen - kein Alarm!");
        fibaro:setGlobal("ID_203", ID203);
        local ID_203 = fibaro:getGlobalValue("ID_203");
      elseif (ID203 > ID_203)
        then
          fibaro:setGlobal("AlarmStatus", "AN");
          fibaro:setGlobal("ID_000", trigger);
          print("ALARM Fenstersensor Büro Vorne!!");
    end
  
    if (ID021 < ID_208)
      then
        print("Garagentür wurde nur geschlossen - kein Alarm!");
        fibaro:setGlobal("ID_208", ID208);
        local ID_208 = fibaro:getGlobalValue("ID_208");
      elseif (ID208 > ID_208)
        then
          fibaro:setGlobal("AlarmStatus", "AN");
          fibaro:setGlobal("ID_000", trigger);
          print("ALARM Garagentür!!");
    end
  
    if (ID210 < ID_210)
      then
        print("Haustür wurde nur geschlossen - kein Alarm!");
        fibaro:setGlobal("ID_210", ID210);
        local ID_210 = fibaro:getGlobalValue("ID_210");
      elseif (ID210 > ID_210)
        then
          fibaro:setGlobal("AlarmStatus", "AN");
          fibaro:setGlobal("ID_000", trigger);
          print("ALARM Haustür!!");
    end
  
    if (ID056 < ID_056)
      then
        print("Fenster Gäste WC wurde nur geschlossen - kein Alarm!");
        fibaro:setGlobal("ID_056", ID056);
        local ID_056 = fibaro:getGlobalValue("ID_056");
      elseif (ID056 > ID_056)
        then
          fibaro:setGlobal("AlarmStatus", "AN");
          fibaro:setGlobal("ID_000", trigger);
          print("ALARM Fenstersensor Gäste WC!!");
    end
    
    if (ID241 < ID_241)
      then
        print("Fenster Balkon Links wurde nur geschlossen - kein Alarm!");
        fibaro:setGlobal("ID_241", ID241);
        local ID_241 = fibaro:getGlobalValue("ID_241");
      elseif (ID241 > ID_241)
        then
          fibaro:setGlobal("AlarmStatus", "AN");
          fibaro:setGlobal("ID_000", trigger);
          print("ALARM Fenstersensor Balkon Links!!");
    end
  
    if (ID245 < ID_245)
      then
        print("Fenster Balkon Rechts wurde nur geschlossen - kein Alarm!");
        fibaro:setGlobal("ID_245", ID245);
        local ID_245 = fibaro:getGlobalValue("ID_245");
      elseif (ID245 > ID_245)
        then
          fibaro:setGlobal("AlarmStatus", "AN");
          fibaro:setGlobal("ID_000", trigger);
          print("ALARM Fenstersensor Balkon Rechts!!");
    end
    
    if (ID146 < ID_146)
      then
        print("Fenster UG Diele SL wurde nur geschlossen - kein Alarm!");
        fibaro:setGlobal("ID_146", ID146);
        local ID_146 = fibaro:getGlobalValue("ID_146");
      elseif (ID146 > ID_146)
        then
          fibaro:setGlobal("AlarmStatus", "AN");
          fibaro:setGlobal("ID_000", trigger);
          print("ALARM Fenstersensor UG Diele SL!!");
    end
  
    if (ID150 < ID_150)
      then
        print("Fenster UG Diele VL wurde nur geschlossen - kein Alarm!");
        fibaro:setGlobal("ID_150", ID150);
        local ID_150 = fibaro:getGlobalValue("ID_150");
      elseif (ID150 > ID_150)
        then
          fibaro:setGlobal("AlarmStatus", "AN");
          fibaro:setGlobal("ID_000", trigger);
          print("ALARM Fenstersensor UG Diele VL!!");
    end
  
    if (ID148 < ID_148)
      then
        print("Fenster UG Diele VR wurde nur geschlossen - kein Alarm!");
        fibaro:setGlobal("ID_148", ID148);
        local ID_148 = fibaro:getGlobalValue("ID_148");
      elseif (ID148 > ID_148)
        then
          fibaro:setGlobal("AlarmStatus", "AN");
          fibaro:setGlobal("ID_000", trigger);
          print("ALARM Fenstersensor UG Diele VR!!");
    end
  
    if (ID144 < ID_144)
      then
        print("Fenster UG Diele SR wurde nur geschlossen - kein Alarm!");
        fibaro:setGlobal("ID_144", ID144);
        local ID_144 = fibaro:getGlobalValue("ID_144");
      elseif (ID144 > ID_144)
        then
          fibaro:setGlobal("AlarmStatus", "AN");
          fibaro:setGlobal("ID_000", trigger);
          print("ALARM Fenstersensor UG Diele SR!!");
    end
  
    if (ID097 < ID_097)
      then
        print("Fenster UG Schlafen SL wurde nur geschlossen - kein Alarm!");
        fibaro:setGlobal("ID_097", ID097);
        local ID_097 = fibaro:getGlobalValue("ID_097");
      elseif (ID097 > ID_097)
        then
          fibaro:setGlobal("AlarmStatus", "AN");
          fibaro:setGlobal("ID_000", trigger);
          print("ALARM Fenstersensor UG Bad SL!!");
    end
    
    if (ID095 < ID_095)
      then
        print("Fenster UG Schlafen VL wurde nur geschlossen - kein Alarm!");
        fibaro:setGlobal("ID_095", ID095);
        local ID_095 = fibaro:getGlobalValue("ID_095");
      elseif (ID095 > ID_095)
        then
          fibaro:setGlobal("AlarmStatus", "AN");
          fibaro:setGlobal("ID_000", trigger);
          print("ALARM Fenstersensor UG Schlafen VL!!");
    end
  
    if (ID062 < ID_062)
      then
        print("Fenster UG Schlafen VR wurde nur geschlossen - kein Alarm!");
        fibaro:setGlobal("ID_062", ID062);
        local ID_062 = fibaro:getGlobalValue("ID_062");
      elseif (ID062 > ID_062)
        then
          fibaro:setGlobal("AlarmStatus", "AN");
          fibaro:setGlobal("ID_000", trigger);
          print("ALARM Fenstersensor UG Schlafen VR!!");
    end
  
    if (ID206 < ID_206)
      then
        print("Fenster UG Bad SR wurde nur geschlossen - kein Alarm!");
        fibaro:setGlobal("ID_206", ID206);
        local ID_206 = fibaro:getGlobalValue("ID_206");
      elseif (ID206 > ID_206)
        then
          fibaro:setGlobal("AlarmStatus", "AN");
          fibaro:setGlobal("ID_000", trigger);
          print("ALARM Fenstersensor UG Bad SR!!");
    end
  
    if (ID060 < ID_060)
      then
        print("Fenster UG Bad VL wurde nur geschlossen - kein Alarm!");
        fibaro:setGlobal("ID_060", ID060);
        local ID_060 = fibaro:getGlobalValue("ID_060");
      elseif (ID060 > ID_060)
        then
          fibaro:setGlobal("AlarmStatus", "AN");
          fibaro:setGlobal("ID_000", trigger);
          print("ALARM Fenstersensor UG Bad VL!!");
    end
  
    if (ID338 < ID_338)
      then
        print("Fenster UG Bad VR wurde nur geschlossen - kein Alarm!");
        fibaro:setGlobal("ID_338", ID338);
        local ID_338 = fibaro:getGlobalValue("ID_338");
      elseif (ID338 > ID_338)
        then
          fibaro:setGlobal("AlarmStatus", "AN");
          fibaro:setGlobal("ID_000", trigger);
          print("ALARM Fenstersensor UG Bad VR!!");
    end
  
    if (ID023 < ID_023)
      then
        print("Fenster UG Umkleide wurde nur geschlossen - kein Alarm!");
        fibaro:setGlobal("ID_023", ID023);
        local ID_023 = fibaro:getGlobalValue("ID_023");
      elseif (ID023 > ID_023)
        then
          fibaro:setGlobal("AlarmStatus", "AN");
          fibaro:setGlobal("ID_000", trigger);
          print("ALARM Fenstersensor UG Umkleide!!");
    end
 
    if (ID058 < ID_058)
      then
        print("Fenster UG Durchgang wurde nur geschlossen - kein Alarm!");
        fibaro:setGlobal("ID_058", ID058);
        local ID_058 = fibaro:getGlobalValue("ID_058");
      elseif (ID058 > ID_058)
        then
          fibaro:setGlobal("AlarmStatus", "AN");
          fibaro:setGlobal("ID_000", trigger);
          print("ALARM Fenstersensor UG Durchgang Keller!!");
    end
  
    if (ID064 < ID_064)
      then
        print("Fenster UG Waschkeller Tür nur geschlossen - kein Alarm!");
        fibaro:setGlobal("ID_064", ID064);
        local ID_064 = fibaro:getGlobalValue("ID_064");
      elseif (ID064 > ID_064)
        then
          fibaro:setGlobal("AlarmStatus", "AN");
          fibaro:setGlobal("ID_000", trigger);
          print("ALARM Fenstersensor UG Waschkeller Tür!!");
    end
  
    if (ID152 < ID_152)
      then
        print("Fenster UG Werkzeugkeller Vorne nur geschlossen - kein Alarm!");
        fibaro:setGlobal("ID_152", ID152);
        local ID_152 = fibaro:getGlobalValue("ID_152");
      elseif (ID152 > ID_152)
        then
          fibaro:setGlobal("AlarmStatus", "AN");
          fibaro:setGlobal("ID_000", trigger);
          print("ALARM Fenstersensor UG Werkzeugkeller Vorne!!");
    end
    
    if (ID341 < ID_341)
      then
        print("Fenster EG Küche Vorne Links nur geschlossen - kein Alarm!");
        fibaro:setGlobal("ID_341", ID341);
        local ID_341 = fibaro:getGlobalValue("ID_341");
      elseif (ID341 > ID_341)
        then
          fibaro:setGlobal("AlarmStatus", "AN");
          fibaro:setGlobal("ID_000", trigger);
          print("ALARM Fenstersensor EG Küche Vorne Links!!");
    end
    
    if (ID344 < ID_344)
      then
        print("Fenster EG Küche Vorne Rechts nur geschlossen - kein Alarm!");
        fibaro:setGlobal("ID_344", ID344);
        local ID_344 = fibaro:getGlobalValue("ID_344");
      elseif (ID344 > ID_344)
        then
          fibaro:setGlobal("AlarmStatus", "AN");
          fibaro:setGlobal("ID_000", trigger);
          print("ALARM Fenstersensor EG Küche Vorne Rechts!!");
    end
    
    if (ID347 < ID_347)
      then
        print("Fenster EG Wohnen Vorne Links nur geschlossen - kein Alarm!");
        fibaro:setGlobal("ID_347", ID347);
        local ID_347 = fibaro:getGlobalValue("ID_347");
      elseif (ID347 > ID_347)
        then
          fibaro:setGlobal("AlarmStatus", "AN");
          fibaro:setGlobal("ID_000", trigger);
          print("ALARM Fenstersensor EG Wohnen Vorne Links!!");
    end
    
    if (ID350 < ID_350)
      then
        print("Fenster EG Wohnen Vorne Rechts nur geschlossen - kein Alarm!");
        fibaro:setGlobal("ID_350", ID350);
        local ID_350 = fibaro:getGlobalValue("ID_350");
      elseif (ID350 > ID_350)
        then
          fibaro:setGlobal("AlarmStatus", "AN");
          fibaro:setGlobal("ID_000", trigger);
          print("ALARM Fenstersensor EG Wohnen Vorne Rechts!!");
    end
    
    print("Ende der Szene Fensterüberwachung");
end

--------------------------------------------------------------------------
print("Ende der SetAlarm Szene");

„SAlarm: ExecAlarm“
Die eigentliche Szene, welche den Alarm regelt für den Fall, dass die globale Alarmstatus Variable auf AN gesetzt wurde. In Kombination mit dem gesetzten Alarmmodus können unterschiedliche Alarmszenen realisiert werden für beispielsweise „Fensterüberwachung anwesend“, „Panik“, etc. Wem die Alarmszene dann zu lang und unübersichtlich wird, der könnte aber auch je eine ExecAlarm-Szene je Alarmmodus programmieren. Diesen Weg bin ich gegangen – hier im Forum möchte ich der Einfachheit halber aber nur eine Beispielszene vorstellen.

--[[
%% properties
%% globals
AlarmStatus
--]]

local scene = 88 -- ID dieser Szene
local DieleHueID = 316; -- HUE die den stillen Alarm im Dielenbereich anzeigt
local StatusSmartAlarm = fibaro:getGlobalValue("SmartAlarm")
local AlarmStatus = fibaro:getGlobalValue("AlarmStatus");
local AlarmDevice = fibaro:getGlobalValue("ID_000");
local hueID = {309,305,310,306,314,315,307,308,311,312,313,317,316,364,365,366,367}; -- ID's der Fenstersensoren
local RollerID = {71,247,185,187,189,191,193,297,299,195,197}; -- ID's der Rolladensteuerungen
local StatusLicht = 0; -- Nicht ändern
local AlarmSireneID = {17,162,301,321}; -- ID's der Alarmsirenen
local AlarmMax = 50; -- Anzahl der maximalen Alarmsirenen Szenendurchläufe. Verhindert, dass der Alarm unendlich läuft

-------------------------------------------------------------------------
-- Lösche doppelte Szene(n)
-------------------------------------------------------------------------
if (fibaro:countScenes()>1) 
  then 
    print("Abbruch wegen doppelter Szene");
    fibaro:abort(); 
end
-------------------------------------------------------------------------
-- Ermitteln welches Device Auslöser der Szene war
-------------------------------------------------------------------------
local startSource = fibaro:getSourceTrigger();
local trigger = 0;
if (startSource["type"] == "property")
  then
    trigger = startSource["deviceID"]
  elseif (startSource["type"] == "global")
  then
    trigger = startSource["name"]
  else
    trigger = "other"
end
print("Auslöser der Szene ="..trigger);
-------------------------------------------------------------------------
-- Ausgabe wenn SmartAlarm = AUS
-------------------------------------------------------------------------
print("Status SmartAlarm = "..StatusSmartAlarm);
if 	(StatusSmartAlarm == "AUS")
  then
    print("SmartAlarm ist ausgeschaltet = "..StatusSmartAlarm);
end
-------------------------------------------------------------------------
-- Wartefunktion mit Abfrage des Alarmstatus
-------------------------------------------------------------------------
function wait(time)
  if (time < 1) then time = 1 end
  for i=1, (time*10) do
    AlarmStatus = fibaro:getGlobalValue("AlarmStatus");
    fibaro:sleep(100);
  end
end
-------------------------------------------------------------------------
-- Bei Alarm Rolladen hoch 
-------------------------------------------------------------------------
function RollerUp()
  for i=1, #RollerID do
    fibaro:call(RollerID[i], "open");
  end
end
-------------------------------------------------------------------------
-- Alarm Nachricht mit Möglichkeit zur Deaktivierung
-------------------------------------------------------------------------
function AlarmMessage()
  -- URL-Stream-JPEG
  local imgUrl = 'http://fibaro:fibaro@10.0.1.19/image/jpeg.cgi'
 
  -- pop-up call
  HomeCenter.PopupService.publish({
  -- Titel (benötigt)
  title = 'ALARM AUSGELÖST',
  -- Subtitel (optional), z.B. Uhrzeit und Datum
  subtitle = os.date("%I:%M:%S %p | %B %d, %Y"),
  -- Content header (optional)
  contentTitle = 'Alarm wurde ausgelöst!!!',
  -- Content (benötigt)
  contentBody = 'Soll der Alarm deaktiviert werden?',
  -- Notification-Image (optional)
  img = imgUrl,
  -- popUp-Typ (benötigt)
  type = 'Critical',
  -- definierte Buttons (optional; sollten keine definiert werden, wird ein OK-Button erzeugt)
  buttons = {
  { caption = 'Ja', sceneId = 111 },
  { caption = 'Nein', sceneId = 0 }
  }
 })
end
-------------------------------------------------------------------------
-- Blinklicht Funktion für stillen und lauten Alarm
-------------------------------------------------------------------------
function Blinklicht()
  wait(2);
  if AlarmStatus == "AN"
  then
    for i=1, #hueID do
      fibaro:call(hueID[i], "changeSaturation", 255)
      fibaro:call(hueID[i], "changeBrightness", 255)
      fibaro:call(hueID[i], "turnOn")
      fibaro:call(hueID[i], "changeHue", 65535) -- rot
    end
  end
  wait(2);
  if AlarmStatus == "AN"
  then
    for i=1, #hueID do
      fibaro:call(hueID[i], "changeSaturation", 255)
      fibaro:call(hueID[i], "changeBrightness", 255)
      fibaro:call(hueID[i], "turnOn")
      fibaro:call(hueID[i], "changeHue", 44309) -- blau
    end
  end
  -- wait(1);
end
------------------------------------------------------------------------
--  Alarmwarnung in der Diele wenn Garagentür oder Haustür Auslöser waren
------------------------------------------------------------------------
if (((AlarmDevice == "208") or (AlarmDevice == "210")) and AlarmStatus == "AN")
then
  print("Starte Alarmwarnung über HUE Diele...");
  for a=1, 10 do
    print("Variable A = "..a.."   AlarmStatus = "..AlarmStatus);
    if AlarmStatus == "AN"
    then
      fibaro:call(DieleHueID, "changeSaturation", 255)
      fibaro:call(DieleHueID, "changeBrightness", 255)
      fibaro:call(DieleHueID, "turnOn")
      fibaro:call(DieleHueID, "changeHue", 65535) -- rot
      wait(2);
    end
    if AlarmStatus == "AN"
    then
      fibaro:call(DieleHueID, "changeSaturation", 255)
      fibaro:call(DieleHueID, "changeBrightness", 255)
      fibaro:call(DieleHueID, "turnOn")
      fibaro:call(DieleHueID, "changeHue", 44309) -- blau
      wait(2);
    end
  end
  if AlarmStatus == "AUS" 
  then 
    print("Alarm AUS geschaltet");
    fibaro:call(DieleHueID, "changeHue", 23348) -- grün
    wait(2);
  end
  fibaro:call(DieleHueID, "turnOff")
end
-------------------------------------------------------------------------
-- Alarmszene für Fensterüberwachung
-------------------------------------------------------------------------
if (StatusSmartAlarm == "Fensterüberwachung" and AlarmStatus == "AN")
  then
    print("Alarm ausgelöst von Device = "..AlarmDevice);
    print("Starte stillen Alarm...");
    fibaro:call(18, "sendDefinedPushNotification", "234"); -- Pushnachricht Handy 1
	fibaro:call(251, "sendDefinedPushNotification", "234"); -- Pushnachricht Handy 2
    print("Push-Nachricht gesendet!");
    AlarmMessage();
    print("Alarm Nachricht gesendet!");
    ---------------------------------------------------------------------
    -- Starte Blinklicht im stillen Alarm
    ---------------------------------------------------------------------
    wait(2);
    local counter = 1;
    repeat
      Blinklicht();
      counter = counter + 1;
      print("Counter = "..counter.."/  AlarmStatus = "..AlarmStatus);
    until (counter >= 10) or (AlarmStatus == "AUS")
    if (AlarmStatus == "AUS")
    then
      print("Alarm während stillem Alarm deaktiviert!!");
      fibaro:call(DieleHueID, "changeHue", 23348) -- grün
      else
        print("Ende des stillen Alarm...");
    end
    ---------------------------------------------------------------------
    -- Wenn AlarmStatus noch AN dann starte lauten Alarm
    ---------------------------------------------------------------------
    if (AlarmStatus == "AN")
    then
      print("Starte lauten Alarm...");
      RollerUp();
      for i=1, #AlarmSireneID do
        fibaro:call(AlarmSireneID[i], "turnOn");  -- Alarmsirenen AN
      end
    end
    local AlarmZaehler = 1;
    while ((AlarmStatus == "AN") and (AlarmZaehler < tonumber(AlarmMax))) do -- Schleife bis Alarm deaktiviert wird
      Blinklicht();
      AlarmZaehler = AlarmZaehler + 1;
      print("Alarmzähler = "..AlarmZaehler);
    end
    for i=1, #AlarmSireneID do
      fibaro:call(AlarmSireneID[i], "turnOff");  -- Alarmsirenen AUS
    end
    ---------------------------------------------------------------------
    --- Deaktiviere Alarm, sende Push und schalte Hue's grün
    ---------------------------------------------------------------------
    fibaro:setGlobal("AlarmStatus", "AUS");
    fibaro:setGlobal("SmartAlarm", "AUS");
    fibaro:call(18, "sendDefinedPushNotification", "6");
    fibaro:call(251, "sendDefinedPushNotification", "6");
    print("Alarm deaktiviert !!");
    for i=1, #hueID do
      fibaro:call(hueID[i], "changeSaturation", 255)
      fibaro:call(hueID[i], "changeBrightness", 255)
      fibaro:call(hueID[i], "turnOn")
      fibaro:call(hueID[i], "changeHue", 23348) -- grün
    end
    wait(10);
    for i=1, #hueID do
      fibaro:call(hueID[i], "turnOff")
    end
  else
    print("Kein Alarm...");
end
print("Ende der Szene...");

Wie bereits oben beschrieben habe ich zusätzliche Alarmausführungsszenen über separate “ExecAlarm” Scenen abgebildet. Über den Fibaro Button setze ich z.B. die Variable Alarmstatus auf “Panic” und triggere damit eine Alarmszene, die exakt der o.g. gleicht - nur dass da der stille Alarm weggelassen ist und der Alarm unendlich geht - also ohne AlarmMax - da man den Button ja selbst auslöst und dann auch logischerweise zuhause ist.

Die oben genannten Szenen sollen eine Anregung sein und können nicht einfach 1:1 kopiert werden. Wer ein bischen herumbastelt kann diese aber einfach an die eigenen Bedürfnisse anpassen.

Wichtig!
Meine eigenentwickelte Alarmkonsole läuft mittlerweile seit 7-8 Monaten ohne Probleme und Fehlalarme bei uns in der Praxis. Der Alarm wird bei uns quasi bei jeder Abwesenheit - auch wenn es nur 20 Minuten zum Einkaufen sind - gesetzt. Auch die Kinder können beim Betreten der Wohnung über den Wall-C diese deaktivieren, wenn die HUE den Alarm anzeigt. Im Gegenzu habe ich in meiner HC2 alle Komponenten aus dem eingebauten Alarmpanel rausgenommen - etwas was der allgemeinen Stabilität sicherlich auch nicht abträglich ist.

Grüße und auch vielen Dank an das Forum für die Unterstützung beim einen oder anderen Problem :slight_smile:
Arno

Sieht sehr gut und sehr mächtig aus. Beeindruckend.
Vielen Dank, dass du das hier mit uns teilst!

Wie lange hast du von “Ich fange an das zu programmieren” bis “Es läuft stabil, dass ich mich drauf verlassen kann” gebraucht?

Hab’s zwar jetzt nicht getestet, aber finde es cool das du deine Scripte teilst. Top.

@Daniel
Habe Ende letzten Jahres angefangen. Allerdings kann ich berufsbedingt nur an Wochenenden mal etwas Programmieren - daher kriegen die Cracks hier im Forum das sicherlich schneller hin. :wink: Die ersten Praxistest fingen dann ca. ab Januar an und seitdem wurden die Skripte in der Praxis weiterentwickelt.

Grüße
Arno

Sehr hilfreiche Skripte.

Beim Durchlesen des SetAlarm Skripts ist mir aufgefallen, dass in Zeile 150 eventuell ein Kopierfehler ist:
if (ID021 < ID_208)
müsste wahrscheinlich heißen:
if (ID208 < ID_208)

Gruß, M.

Könntest du noch die Szene mit ID 111 anhängen, die in der Popup-Nachricht zum Deaktivieren des Alarms angesprochen wird?

Danke!

Hallo Mickey,

Klar! Sorry für die späte Antwort - war beruflich etwas eingespannt letzte Woche.

Hier die Szene “AlarmAUS”:

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

local scene = 111
local hueID = 316

---------------------------------------------------------------------------
-- Lösche doppelte Szene(n) -----------------------------------------------
---------------------------------------------------------------------------
if (fibaro:countScenes()>1) 
then 
  fibaro:debug("Abbruch wegen doppelter Szene");
  fibaro:abort(); 
end

---------------------------------------------------------------------------
-- Ermitteln welches Device Auslöser der Szene war ------------------------
---------------------------------------------------------------------------
local startSource = fibaro:getSourceTrigger();
local trigger = 0;
if (startSource['type'] == 'property')
then
  trigger = startSource["deviceID"]
  elseif (startSource["type"] == "global")
  then
    trigger = startSource["name"]
    else
      trigger = "other"
end
fibaro:debug("Auslöser der Szene ="..trigger);

-------------------------------------------------------------------------
-- Alarm Nachricht mit Möglichkeit zur Deaktivierung
-------------------------------------------------------------------------
function AlarmMessage()
  -- URL-Stream-JPEG
  local imgUrl = 'http://fibaro:fibaro@10.0.1.19/image/jpeg.cgi'
 
  -- pop-up call
  HomeCenter.PopupService.publish({
  -- Titel (benötigt)
  title = 'ALARM AUSGESCHALTET',
  -- Subtitel (optional), z.B. Uhrzeit und Datum
  subtitle = os.date("%I:%M:%S %p | %B %d, %Y"),
  -- Content header (optional)
  -- contentTitle = 'Alarm wurde deaktiviert!!!',
  -- Content (benötigt)
  contentBody = 'Alarm wurde deaktiviert!!',
  -- Notification-Image (optional)
  img = imgUrl,
  -- popUp-Typ (benötigt)
  type = 'Success',
  })
end

--------------------------------------------------------------------------
-- Setzen der Alarm Variablen entsprechend Button 1,2,3,4
--------------------------------------------------------------------------
print("SmartAlarm = AUS und Alarm deaktiviert");
fibaro:setGlobal("SmartAlarm", "AUS");
fibaro:setGlobal("AlarmStatus", "AUS");
fibaro:call(18, "sendDefinedPushNotification", "6");
fibaro:call(251, "sendDefinedPushNotification", "6");
AlarmMessage();
print("Push Nachricht versendet!!");
-----------------------------------------------------------------------
-- Diele HUE Bloom grün schalten
-----------------------------------------------------------------------
for i = 1, 10
do
  fibaro:call(hueID, "changeSaturation", 255)
  fibaro:call(hueID, "changeBrightness", 255)
  fibaro:call(hueID, "changeHue", 23348)
  fibaro:call(hueID, "turnOn")
  fibaro:sleep(1000); 
end
fibaro:call(hueID, "turnOff")
-----------------------------------------------------------------------
print("Ende der Szene");