Die Szene für den Alarmpanel ist der Hammer und funktioniert soweit sehr gut. Nun habe ich vier Sirenen im Haus, bei Alarmauslösung blinken drei nur und bei einer ertönt der Alarm. Gerne möchte ich die Sirene mit dem Alarm etwas verzögert schalten, wie könnte ich hier vorgehen?
Bin für jede Hilfe dankbar…
Gruss fastsnake
--[[
%% properties
%% value
%% events
%% globals
--]]
-- Einstellungen für die Sensoren (Zwingend erforderlich)
local sensorID = {28,101,134,165,182,118,222,226,230,234,244,247} -- ID der Sensoren(n)
-- Einstellungen für die Sirene(n) (Wenn keine IDs eingetragen sind, wird die Funktion nicht genutzt)
local sireneID = {8,23,115,132} -- ID der Sirene(n)
-- Einstellungen für Push-Benachrichtigungen (Wenn keine IDs eingetragen sind, wird die Funktion nicht genutzt)
local phoneID = {189,192} -- ID der Handys
-- soll ein stiller Alarm genutzt werden? (true = ja/false = nein; silent_alarm_time: Sekunden wie lang der stille Alarm bestehen soll)
-- hier werden die Sirenen/Licht erst nach einer bestimmten Zeit aktiv. Bild der Kamera, Push und Meldung des Alarmpanels wird VOR dem stillen Alarm ausgeführt
local silent_alarm = false
local silent_alarm_time = 30
-- soll ein Bild der Kamera versendet werden (true = ja/false = nein)
local camera_support = false
-- an welche Mail soll ein Bild der Kamera gesendet werden
local email = 'MAIL'
-- Einstellungen für RGBW-Notfallbeleuchtung (Wenn keine IDs eingetragen sind, wird die Funktion nicht genutzt)
local rgbwID = {} -- ID RGBW
local mode = 'programm' -- Auswahl: color = Farbwert setzen; programm = Programm starten
local programm = 5
local color = '255,255,255,255' -- welche Farbe eingestellt werden soll
-- Sollen eigene Aktionen ausgeführt werden? (true = ja/false = nein; Bei true müssen die beiden nächsten Funktionen befüllt werden)
local own_action = true
function ownaction_alarm()
local switel = 214
local licht = 128
fibaro:call(switel, "sendPush",os.date("Einbruchalarm!"));
-- Licht einschalten wenn benötigt
if fibaro:getGlobalValue("Tageslicht") == "Dunkel"
and (tonumber(fibaro:getValue(licht, "value")) < 1)
then
function DT(DATETIME)
local WD = {'Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'}
local M = {'Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'}
local tableDT= (os.date('*t', tonumber(DATETIME)))
tableDT.month = M[tonumber(tableDT.month)]
tableDT.wday = WD[tonumber(tableDT.wday)]
return ""..tableDT.wday ..', ' ..tableDT.day ..'. ' ..tableDT.month ..' ' ..tableDT.year ..' '..os.date " / %H:%M Uhr"
end
x= DT(os.date())
fibaro:debug (x)
fibaro:call(licht, "turnOn");
--fibaro:debug("----------------------------------------------------------------------------------------------------");
Debug("yellow",(os.date("Es ist dunkel")));
Debug("yellow",(os.date("Licht wurde mit Alarm eingeschaltet..!")));
fibaro:debug("----------------------------------------------------------------------------------------------------");
end
fibaro:debug('Eigene Aktionen bei Alarm ausgeführt')
end
function ownaction_afteralarm()
-- Restart Autoszenen
---------------------------------------------------
--------- Schleifenschutz -------------------------
if (fibaro:countScenes()>2) then
fibaro:debug('Kill the third scene!');
fibaro:abort();
end
---------------------------------------------------
------------- Config ------------------------------
advDebug = true
version = 'v1.0'
---------------------------------------------------
--------- Farbiges Debug --------------------------
function debug( color, message )
fibaro:debug(string.format('<%s style="color:%s;">%s<!--%s-->', "span", color, message, "span"));
end
---------------------------------------------------
--------- Farbiges Debug --------------------------
function getAutoScenes()
--fibaro:sleep(180000); -- Zeit nach Alarm auslösung
sceneData = api.get('/scenes')
for i=1, #sceneData do
if sceneData[i].autostart and sceneData[i].runConfig == "TRIGGER_AND_MANUAL" and sceneData[i] then
debug('green','Autostart-Szene gefunden: '..sceneData[i].name..' (ID:'..sceneData[i].id..')')
if sceneData[i].runningInstances == 0 then
debug('red','Autostart-Szene wird nicht ausgeführt. Starte diese erneut.')
if sceneData[i].maxRunningInstances ~= 1 then sceneData[i].maxRunningInstances = 1 else sceneData[i].maxRunningInstances = 2 end
api.put('/scenes/'..sceneData[i].id, sceneData[i])
end
end
end
end
getAutoScenes()
fibaro:debug('Eigene Aktionen nach dem Alarm ausgeführt')
end
local countID = 500
-- AB HIER NICHTS MEHR ÄNDERN
Debug = function ( color, message )
fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", color, message, "span"))
end
-- Funktion zum Versenden der Push
function sendPush(text)
if (phoneID[1] ~= nil) then
for k=1, countID do
if phoneID[k] ~= nil then
fibaro:call(phoneID[k],'sendPush', text, 'alarm')
end
end
end
end
-- Funktion zum Ein-/Ausschalten der Sirene
function onoffSirene(status)
if (sireneID[1] ~= nil) then
if (status) then
fibaro:debug('Sirenen einschalten')
for a=1, countID do
if sireneID[a] ~= nil then
fibaro:call(sireneID[a],'turnOn')
end
end
else
if (sireneID[1] ~= nil) then
fibaro:debug('Sirenen ausschalten')
for a=1, countID do
if sireneID[a] ~= nil then
fibaro:call(sireneID[a],'turnOff')
end
end
end
end
end
end
-- Funktion zum Ein-/Ausschalten der RGBW-Notfallbeleuchtung
function emergencyRGBW(status)
if (rgbwID[1] ~= nil) then
if (status) then
if (mode == 'color') then
fibaro:debug('RGBW-Notfallbeleuchtung einschalten - Setze Farbe')
local RGBWTable = {}
local i = 1
for value in string.gmatch(color,"(%d+)") do
RGBWTable[i] = value
i = i + 1
end
for o=1, countID do
if rgbwID[o] ~= nil then
fibaro:call(rgbwID[o], "setColor", RGBWTable[1], RGBWTable[2], RGBWTable[3], RGBWTable[4])
end
end
elseif (mode == 'programm') then
fibaro:debug('RGBW-Notfallbeleuchtung einschalten - Starte Programm')
for o=1, countID do
if rgbwID[o] ~= nil then
fibaro:call(rgbwID[o], 'startProgram', programm)
end
end
end
else
if (rgbwID[1] ~= nil) then
fibaro:debug('RGBW-Notfallbeleuchtung ausschalten')
for o=1, countID do
if rgbwID[o] ~= nil then
fibaro:call(rgbwID[o], "setColor", 255,0,0,0)
end
end
end
end
end
end
function cameracheck(roomID)
for x=1, countID do
if (fibaro:getType(x) == 'com.fibaro.ipCamera') then
if (roomID == fibaro:getRoomID(x)) then
fibaro:debug('Kamera ' ..x.. ' im betroffenen Raum erkannt. Sende Mail an ' ..email)
fibaro:call(x, 'sendPhotoToEmail', email)
else
fibaro:debug('Keine Kamera im betroffenden Raum gefunden.')
end
end
end
end
function checkSensor()
for j=1, countID do
if sensorID[j] ~= nil then
if (tonumber(fibaro:getValue(sensorID[j], 'value')) == 1) then
return sensorID[j]
end
end
end
end
function checkSensorArmed()
local armed_counter = 0
for j=1, countID do
if sensorID[j] ~= nil then
if (tonumber(fibaro:getValue(sensorID[j], 'armed')) == 1) then
armed_counter = armed_counter+1
end
end
end
if (armed_counter == 0) then
return false
elseif (armed_counter > 0) then
fibaro:debug(armed_counter..' Sensoren noch nicht entschärft ...')
return true
end
end
Debug( 'red', '___________________________')
Debug( 'red', 'Alarm-Szene 2.0 wurde ausgelöst.')
Debug( 'white', 'Aktionen werden ausgeführt.')
Debug( 'white', 'Sensor im Raum ' ..fibaro:getRoomNameByDeviceID(checkSensor()).. ' ausgelöst')
sendPush('Achtung! EINBRUCH-ALARM ausgelöst!')
if camera_support then
cameracheck(fibaro:getRoomID(checkSensor()))
else
Debug( 'red', 'Keine Kameras im Einsatz')
end
if silent_alarm then
fibaro:debug('Stiller Alarm wurde aktiviert. Dauer: ' ..silent_alarm_time)
counter = 0
while (counter <= silent_alarm_time and checkSensorArmed()) do
counter = counter + 1
fibaro:sleep(1*1000)
end
else
Debug( 'white', 'Stiller Alarm wird nicht genutzt.')
end
if checkSensorArmed() then
if (own_action) then
ownaction_alarm()
end
onoffSirene(true)
emergencyRGBW(true)
elseif silent_alarm then
Debug('green', 'Stiller Alarm beendet, Geräte entschärft.')
end
while checkSensorArmed() do
Debug( 'red', 'Alarm weiterhin ausgelöst.')
fibaro:sleep(2*1000)
end
fibaro:debug('Alle Sensoren entschärft.')
Debug('green', 'Alarm wurde beendet.')
sendPush('Alarm AUSGESCHALTET!')
if (own_action) then
ownaction_afteralarm()
end
emergencyRGBW(false)
onoffSirene(false)