Statusmeldung für Fibaro Alarmanlage

Hallo,

Ich nutze bereits seit einiger Zeit des erstellten LUA Skript „Alarm schalten mit Zipato RFID“. Nun wollte ich mir einen Status LED mit Hilfe des WallPlug zulegen um die folgenden Statis zu erkennen:

Alarmanlage Scharf: LED Farbe „rot“
Alarmanlage Scharf und Fenster ist offen: LED Farbe „Magenta“
Alarmanlage entschärft und Fenster ist offen: LED Farbe „gelb“
Alarmanlage entschärft: LED Farbe „grün“

Leider bekomme ich die Farben nicht umgeschaltet. Ich wollte die Funktion in das Skript mit einbauen. Eine separate Szene bekomme ich leider nicht hin.
Hat jemand eine Idee wie ich den Status der Alarmanlage über den LED Ring des WallPlug steuern kann.

Vielen Dank für die Unterstützung


--[[
%% properties
177 userCodes
%% globals
--]]
 
-- HIER DIE ARRAYS ANPASSEN (neue IDs können einfach hinzugefügt werden)
local tagReader = 177 -- ID des RFID-Leser (bitte auch in dem Header ändern)
local sensorID = {22, 26, 30, 34, 38, 46, 50, 13, 84, 88, 147} -- IDs der Sensoren
--local phoneID = {70, 81} -- IDs der Handys, an die eine Push geschickt werden soll
local phoneID = {fibaro:getGlobal("var_mareen_handy"), fibaro:getGlobal("var_daniel_handy")} -- Handy-IDs
local countID = 200 -- Anzahl eurer devices (Muss nicht zwangsläufig geändert werden)
local wallplug = 189
 
-- OPTIONEN
-- Prüfung einer globalen Variable für Chip 3/4, ob diese gültig ist.
-- Bei nicht Nutzung dieser Funktion müsst Ihr nichts weiter einrichten.
-- Solltet Ihr diese nutzen wollen, dann müsst Ihr für jeden Chip eine Variable anlegen (z.B rfid_active1)
local rfid_active3 = fibaro:getGlobalValue('rfid_active3') -- Variable zum Prüfen ob RFID-Chip3 gültig ist oder nicht (active = gültig/inactive = ungültig)
local rfid_active4 = fibaro:getGlobalValue('rfid_active4') -- Variable zum Prüfen ob RFID-Chip4 gültig ist oder nicht (active = gültig/inactive = ungültig)
 
-- Hier könnt Ihr mit der 1 setzen, dass die RFID-Tags nur zum entschärfen genutzt werden sollen
local rfid_use1 = 0 -- Wenn Ihr mit dem RFID-Tag1 nur entschärfen wollt, bitte auf 1 setzen
local rfid_use2 = 0 -- Wenn Ihr mit dem RFID-Tag2 nur entschärfen wollt, bitte auf 1 setzen
local rfid_use3 = 0 -- Wenn Ihr mit dem RFID-Tag3 nur entschärfen wollt, bitte auf 1 setzen
local rfid_use4 = 0 -- Wenn Ihr mit dem RFID-Tag4 nur entschärfen wollt, bitte auf 1 setzen
 
-- Prüfung, ob Ihr eigene Aktionen ausführen möchtet (Siehe FUNKTIONEN FÜR AKTIONEN)
local own_action = 0 -- Bitte auf 1 setzen, wenn Ihr eigene Aktionen ausführen wollt.
 
-- 10-stellige Byte-Array's (Bytes, weil RFID-Tags auch Zeichen ausserhalb des lesbaren Bereichs liefern)
local rfid1 = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}		--RFID Daniel
local rfid2 = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}			--RFID Mareen
local rfid3 = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0} -- <--ANPASSEN: Byte-Array eines RFID-Tags
local rfid4 = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0} -- <--ANPASSEN: Byte-Array eines RFID-Tags
local code =  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0} -- <--ANPASSEN: Byte-Array für Zahlencode (1234 als Unicode)

-- WIDGET-Support
-- Solltet Ihr die Widget-Funktion der App nutzen wollen, dann könnt Ihr die Option hier aktivieren
-- ACHTUNG: Solltet Ihr die Szene manuell ausführen, dann wird der Alarm gesetzt
local widget = true -- false = Widget wird nicht genutzt; true = Widget wird genutzt
 
-- DOORLOCK-Integration
-- Hier kann ein Doorlock hinzugefügt werden, was die Tür nach schärfen/entschärfen automatisch auf/zu schließt.
-- Die Option kann über die Variable doorlock auf true/false (Standart ist false) gesetzt werden
-- ACHTUNG: Die Funktion zum Öffnen mit RFID/Code funktioniert nur, wenn PresentState auf 'home' steht; NUTZUNG AUF EIGENE GEFAHR
local doorlock = false -- false = Kein Doorlock im Einsatz; true = Doorlock soll über das Skript geschaltet werden
local doorlockID = 211 -- ID des Doorlocks
-- Wie soll der doorlock geöffnet werden (Falls jemand zu Hause ist und Ihr kommt zusätzlich nach Hause und wollt keinen Schlüssel nutzen)
-- rfid = Über den RFID-Chip (dann kann dieser aber nicht mehr zum schärfen der Alarmanlage verwendet werden)
-- pin = Dann könnt Ihr mit einem zusätzlichen Code (open_code) die Tür öffnen
local doorlock_open = 'pin'
local open_code =  {50, 50, 50, 50, 0, 0, 0, 0, 0, 0} -- <--ANPASSEN: Byte-Array für Zahlencode (1234 als Unicode)
local rfid_doorlock1 = 1 -- Wenn Ihr mit dem RFID-Tag1 die Tür aufschließen wollt, bitte auf 1 setzen
local rfid_doorlock2 = 1 -- Wenn Ihr mit dem RFID-Tag2 die Tür aufschließen wollt, bitte auf 1 setzen
local rfid_doorlock3 = 0 -- Wenn Ihr mit dem RFID-Tag3 die Tür aufschließen wollt, bitte auf 1 setzen
local rfid_doorlock4 = 0 -- Wenn Ihr mit dem RFID-Tag4 die Tür aufschließen wollt, bitte auf 1 setzen
 
local readerCode = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0} -- leeres Byte-Array, in dem nachher der gelesene Code steht (RFID-Tag oder Zahlencode)
 
-- FUNKTIONEN FÜR AKTIONEN (z.B. TTS, LICHT AUS)
------------------------------------------------
-- Aktionen nach dem Schärfen mit Delay, bvor die Sensoren geschäft sind
function actionsbeforeArmed()
  fibaro:debug('Führe eigene Funktionen vor Schärfen aus')
 
end
-- Aktionen nach dem endgültigen Schärfen
function actionsafterArmed()
  fibaro:debug('Führe eigene Funktionen nach dem Schärfen aus')
 
end
-- Aktionen nach dem Entschärfen
function actionsafterDisarmed()
  fibaro:debug('Führe eigene Funktionen nach dem Entschärfen aus')
 
end
-------------------------------------------------
-- OPTIONEN ENDE -- AB HIER NICHTS MEHR ÄNDERN --
 
fibaro:debug('RFID-Scene  -Version 1.5 RC-  gestartet');
 
Debug = function ( color, message )
  fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", color, message, "span"))
end
 
if (rfid_active3 == nil) then
  fibaro:debug('Keine Variable für RFID3 gesetzt; Funktion wird nicht genutzt')
  local rfid_active3 = 'active'
end
 
if (rfid_active4 == nil) then
  fibaro:debug('Keine Variable für RFID4 gesetzt; Funktion wird nicht genutzt')
  local rfid_active4 = 'active'
end
 
-- FUNKTIONEN (bitte nicht ändern)
function compareCodes(array1, array2)
  if (#array1 ~= 10 or #array2 ~= 10) then
    fibaro:debug('Grösse der Arrays ungültig...')
    return false
  end
  for i = 1, #array1 do
    if (array1[i] ~= array2[i]) then
      return false
    end
  end
  return true
end
 
function armedcheckSensorID(array)
  for j=1, countID do
    if sensorID[j] ~= nil then
      if (tonumber(fibaro:getValue(sensorID[j], 'armed')) == 0) then
          return false
      end
    end
  end
  return true
end
 
local startSource = fibaro:getSourceTrigger()
 
if (startSource['deviceID'] == tagReader) then
 
  local delay = 0
 
  -- RFID auslesen
  local userCodes = fibaro:get(tagReader, 'userCodes')
  jsontbl = json.decode(userCodes)
 
  -- nach dem Code mit der ID 0 suchen
  for i = 1, #jsontbl do
    if (jsontbl[i].id == 0) then
   
      -- die 10 Zeichen lesen und in das leere Byte-Array abfüllen
      for b = 1, string.len(jsontbl[i].code) do
        readerCode[b] = string.byte(jsontbl[i].code,b)
      end
 
      if (compareCodes(rfid1, readerCode) or compareCodes(rfid2, readerCode) or (compareCodes(rfid3, readerCode) and rfid_active3 == 'active') or (compareCodes(rfid4, readerCode) and rfid_active4 == 'active')) then
        if (fibaro:getGlobal('PresentState') == 'Home') then
             
            -- Prüfung, ob RFID zum Schärfen genutzt werden darf/Zum Öffnen der Tür
            if (compareCodes(rfid1, readerCode) and rfid_use1 == 1) then
              fibaro:debug('Scene abgebrochen. Mit diesem RFID-Tag 1 dürfen die Sensoren nicht geschärft werden.')
               if (doorlock and rfid_doorlock1 == 1) then
                 fibaro:debug('Doorlock vorhanden, Tür wird geöffnet.')
                 fibaro:call(doorlockID, 'unsecure')
               end
              fibaro:abort()
            end
            ---------------ENDE PRÜFUNG--------------------------
            -- Prüfung, ob RFID zum Schärfen genutzt werden darf/Zum Öffnen der Tür
            if (compareCodes(rfid2, readerCode) and rfid_use2 == 1) then
              fibaro:debug('Scene abgebrochen. Mit diesem RFID-Tag 2 dürfen die Sensoren nicht geschärft werden.')
                if (doorlock and rfid_doorlock2 == 1) then
                 fibaro:debug('Doorlock vorhanden, Tür wird geöffnet.')
                 fibaro:call(doorlockID, 'unsecure')
               end
              fibaro:abort()
            end
            ---------------ENDE PRÜFUNG--------------------------
            -- Prüfung, ob RFID zum Schärfen genutzt werden darf/Zum Öffnen der Tür
            if (compareCodes(rfid3, readerCode) and rfid_use3 == 1) then
              fibaro:debug('Scene abgebrochen. Mit diesem RFID-Tag 3 dürfen die Sensoren nicht geschärft werden.')
                if (doorlock and rfid_doorlock3 == 1) then
                 fibaro:debug('Doorlock vorhanden, Tür wird geöffnet.')
                 fibaro:call(doorlockID, 'unsecure')
               end
              fibaro:abort()
            end
            ---------------ENDE PRÜFUNG--------------------------
            -- Prüfung, ob RFID zum Schärfen genutzt werden darf/Zum Öffnen der Tür
            if (compareCodes(rfid4, readerCode) and rfid_use4 == 1) then
              fibaro:debug('Scene abgebrochen. Mit diesem RFID-Tag 4 dürfen die Sensoren nicht geschärft werden.')
                if (doorlock and rfid_doorlock4 == 1) then
                 fibaro:debug('Doorlock vorhanden, Tür wird geöffnet.')
                 fibaro:call(doorlockID, 'unsecure')
               end
              fibaro:abort()
            end
           
            fibaro:debug('RFID-Tag akzeptiert - Haus wurde verlassen')
            fibaro:setGlobal('PresentState', 'Away')
            if (own_action == 1) then
               actionsbeforeArmed()
            end
            local delay = tonumber(fibaro:getValue(sensorID[1], "armDelay"))
            if (delay ~= 0) then
            fibaro:debug('Arm-Delay erkannt. Arm-Delay: ' ..delay)
            end
            for j=1, countID do
              if sensorID[j] ~= nil then
                if (tonumber(fibaro:getValue(sensorID[j], 'value')) == 0) then
                  fibaro:call(sensorID[j], 'setArmed', '1')
                else
                  local sensorname = fibaro:getName(sensorID[j])
                  local sensorroom = fibaro:getRoomNameByDeviceID(sensorID[j])
                  fibaro:debug('ACHTUNG: ' .. sensorname .. ' im Raum: ' .. sensorroom .. ' nicht sicher. Sende Push.')
                  for k=1, countID do
                      if phoneID[k] ~= nil then
                        fibaro:call(phoneID[k], 'sendPush', 'ACHTUNG: ' .. sensorname .. ' im Raum: ' .. sensorroom .. ' nicht sicher.')
                      end
                  end
                end
              end
            end
            fibaro:debug('Warte ' .. delay .. ' Sekunden')
            delay = delay + 1
            fibaro:sleep(delay*1000)
            if (fibaro:getGlobal('PresentState') == 'Away') then
              if (armedcheckSensorID(sensorID)) then
                if (own_action == 1) then
                  actionsafterArmed()
                end
                for l=1, countID do
                      if phoneID[l] ~= nil then
                        fibaro:call(phoneID[l], 'sendPush', 'RFID: Alarmanlage SCHARF')
                      end
                end
                fibaro:debug('Alle Sensoren geschärft. Sende Push')
                if (doorlock) then
                  fibaro:call(doorlockID, 'secure')
                  fibaro:debug('doorlock vorhanden, Tür wurde geschlossen!')
                end
              else
                fibaro:debug('Es konnten nicht alle Sensoren scharf geschaltet werden')
            end
            else
              fibaro:debug('Alarm wurde während der Delay-Time deaktiviert')
            end
       
        elseif (fibaro:getGlobal('PresentState') == 'Away') then
            fibaro:debug('RFID-Tag akzeptiert - Welcome@Home')
            fibaro:setGlobal('PresentState', 'Home')
			fibaro:call(wallplug, "pressButton", "4")
            for m=1, countID do
              if sensorID[m] ~= nil then
                fibaro:call(sensorID[m], 'setArmed', '0')
              end
            end
           
            if (armedcheckSensorID(sensorID)) then              
                fibaro:debug('Es konnten nicht alle Sensoren entschäft werden');
                for t=1, countID do
                if sensorID[t] ~= nil then
                  if (tonumber(fibaro:getValue(sensorID[t], 'armed')) == 1) then
                    local sensorname = fibaro:getName(sensorID[t])
                    local sensorroom = fibaro:getRoomNameByDeviceID(sensorID[t])
                    fibaro:debug('ACHTUNG: ' .. sensorname .. ' im Raum: ' .. sensorroom .. ' konnte nicht entschärft werden. Sende Push.')
                    for o=1, countID do
                      if phoneID[o] ~= nil then
                        fibaro:call(phoneID[o], 'sendPush', 'ACHTUNG: ' .. sensorname .. ' im Raum: ' .. sensorroom .. ' nicht entschärft.')
                      end
                    end
                  end
                end
                end
            else
              fibaro:debug('Alle Sensoren entschärft. Sende Push')
              if (doorlock) then
                fibaro:call(doorlockID, 'unsecure')
                fibaro:debug('doorlock vorhanden, Tür wurde geöffnet')
              end
              for l=1, countID do
                      if phoneID[l] ~= nil then
                        fibaro:call(phoneID[l], 'sendPush', 'RFID: Alarmanlage entschärft')
                      end
                  end
            if (own_action == 1) then
              actionsafterDisarmed()
            end
            end            
 
        else
          fibaro:debug('RFID-Tag akzeptiert - Variablen nicht korrekt gesetzt.')
        end
       
      elseif (compareCodes(code, readerCode)) then
        fibaro:debug('PIN-Code akzeptiert.')
        fibaro:setGlobal('PresentState', 'Away')
            for z=1, countID do
              if sensorID[z] ~= nil then
                if (tonumber(fibaro:getValue(sensorID[z], 'value')) == 0) then
                  fibaro:call(sensorID[z], 'setArmed', '1')
                else
                  local sensorname = fibaro:getName(sensorID[z])
                  local sensorroom = fibaro:getRoomNameByDeviceID(sensorID[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.')
                      end
                  end
                end
              end
            end
            if (own_action == 1) then
               actionsbeforeArmed()
            end
            local delay = tonumber(fibaro:getValue(sensorID[1], "armDelay"))
            if (delay ~= 0) then
              fibaro:debug('Arm-Delay erkannt. Arm-Delay: ' ..delay)
            end
            fibaro:debug('Warte ' .. delay .. ' Sekunden')
            delay = delay + 1
            fibaro:sleep(delay*1000)
            if (fibaro:getGlobal('PresentState') == 'Away') then
              if (armedcheckSensorID(sensorID)) then
                if (own_action == 1) then
                  actionsafterArmed()
                end
                for l=1, countID do
                      if phoneID[l] ~= nil then
                        fibaro:call(phoneID[l], 'sendPush', 'PIN-CODE: Alarmanlage SCHARF')
                      end
                end
                fibaro:debug('Alle Sensoren geschärft. Sende Push')
                if (doorlock) then
                  fibaro:call(doorlockID, 'secure')
                  fibaro:debug('doorlock vorhanden, Tür wurde geschlossen')
                end
              else
                fibaro:debug('Es konnten nicht alle Sensoren scharf geschaltet werden');
            end
            else
              fibaro:debug('Alarm wurde während der Delay-Time deaktiviert');
            end
           
        elseif (compareCodes(open_code, readerCode) and fibaro:getGlobal('PresentState') == 'Home' and doorlock_open == 'pin') then
          fibaro:debug('PIN-Code zum Öffnen der Tür akzeptiert.')
                if (doorlock) then
                  fibaro:call(doorlockID, 'unsecure')
                  fibaro:debug('doorlock vorhanden, es war schon jemand zu Hause, Tür wird geöffnet')
                for r=1, countID do
                      if phoneID[r] ~= nil then
                        fibaro:call(phoneID[r], 'sendPush', 'Tür würde mit PIN geöffnet')
                      end
                  end
                end
      else
        fibaro:debug('RFID-Tag/PIN-Code wurde abgelehnt. Manipulation oder Karte inaktiv? Push versendet')
        for r=1, countID do
                      if phoneID[r] ~= nil then
                        fibaro:call(phoneID[r], 'sendPush', 'ACHTUNG: Code falsch eingegeben/RFID inaktiv')
                      end
                  end
      end
    end
  end
else
 if (widget) then
   if (fibaro:getGlobal('PresentState') == 'Home') then
      fibaro:debug('Szene durch Widget gestartet - Haus wurde verlassen')
      fibaro:setGlobal('PresentState', 'Away')
	  fibaro:call(wallplug, "pressButton", "3")
      if (own_action == 1) then
        actionsbeforeArmed()
      end
      local delay = tonumber(fibaro:getValue(sensorID[1], "armDelay"))
      if (delay ~= 0) then
        fibaro:debug('Arm-Delay erkannt. Arm-Delay: ' ..delay)
      end
      for j=1, countID do
        if sensorID[j] ~= nil then
        if (tonumber(fibaro:getValue(sensorID[j], 'value')) == 0) then
          fibaro:call(sensorID[j], 'setArmed', '1')
        else
          local sensorname = fibaro:getName(sensorID[j])
          local sensorroom = fibaro:getRoomNameByDeviceID(sensorID[j])
          fibaro:debug('ACHTUNG: ' .. sensorname .. ' im Raum: ' .. sensorroom .. ' nicht sicher. Sende Push.')
          for k=1, countID do
            if phoneID[k] ~= nil then
              fibaro:call(phoneID[k], 'sendPush', 'ACHTUNG: ' .. sensorname .. ' im Raum: ' .. sensorroom .. ' nicht sicher.')
            end
          end
          end
      end
      end
      fibaro:debug('Warte ' .. delay .. ' Sekunden')
      delay = delay + 1
      fibaro:sleep(delay*1000)
      if (fibaro:getGlobal('PresentState') == 'Away') then
        if (armedcheckSensorID(sensorID)) then
          if (own_action == 1) then
            actionsafterArmed()
          end
        for l=1, countID do
        if phoneID[l] ~= nil then
          fibaro:call(phoneID[l], 'sendPush', 'Widget: Alarmanlage SCHARF')
        end
        end
      fibaro:debug('Alle Sensoren geschärft. Sende Push')
      if (doorlock) then
        fibaro:call(doorlockID, 'secure')
        fibaro:debug('doorlock vorhanden, Tür wurde geschlossen!')
      end
      else
        fibaro:debug('Es konnten nicht alle Sensoren scharf geschaltet werden')
      end
      else
       fibaro:debug('Alarm wurde während der Delay-Time deaktiviert')
      end
   elseif (fibaro:getGlobal('PresentState') == 'Away') then
      fibaro:debug('Szene durch Widget gestartet - Welcome@Home')
      fibaro:setGlobal('PresentState', 'Home')
        for m=1, countID do
          if sensorID[m] ~= nil then
            fibaro:call(sensorID[m], 'setArmed', '0')
          end
        end
      if (armedcheckSensorID(sensorID)) then              
        fibaro:debug('Es konnten nicht alle Sensoren entschäft werden');
        for t=1, countID do
          if sensorID[t] ~= nil then
            if (tonumber(fibaro:getValue(sensorID[t], 'armed')) == 1) then
              local sensorname = fibaro:getName(sensorID[t])
              local sensorroom = fibaro:getRoomNameByDeviceID(sensorID[t])
              fibaro:debug('ACHTUNG: ' .. sensorname .. ' im Raum: ' .. sensorroom .. ' konnte nicht entschärft werden. Sende Push.')
              for o=1, countID do
                if phoneID[o] ~= nil then
                  fibaro:call(phoneID[o], 'sendPush', 'ACHTUNG: ' .. sensorname .. ' im Raum: ' .. sensorroom .. ' nicht entschärft.')
                end
              end
            end
          end
        end
        else
        fibaro:debug('Alle Sensoren entschärft. Sende Push')
        if (doorlock) then
          fibaro:call(doorlockID, 'unsecure')
          fibaro:debug('doorlock vorhanden, Tür wurde geöffnet')
        end
        for l=1, countID do
          if phoneID[l] ~= nil then
            fibaro:call(phoneID[l], 'sendPush', 'Widget: Alarmanlage entschärft')
          end
        end
        if (own_action == 1) then
         actionsafterDisarmed()
        end
      end            
   end
 
 else
  fibaro:debug('Szene manuell gestartet. Auslesen der Informationen')
  local userCodes = fibaro:get(tagReader, 'userCodes')
  jsontbl = json.decode(userCodes)
 
  -- nach dem Code mit der ID 0 suchen
  for i = 1, #jsontbl do
    if (jsontbl[i].id == 0) then
   
      -- die 10 Zeichen lesen und in das leere Byte-Array abfüllen
      for b = 1, string.len(jsontbl[i].code) do
        readerCode[b] = string.byte(jsontbl[i].code,b)
      end
      fibaro:debug('RFID-INFO: {' .. readerCode[1] .. ', ' .. readerCode[2] .. ', ' .. readerCode[3] .. ', ' .. readerCode[4] .. ', ' .. readerCode[5] .. ', ' .. readerCode[6] .. ', ' .. readerCode[7] .. ', ' .. readerCode[8] .. ', ' .. readerCode[9] .. ', ' .. readerCode[10] .. '}')
    end
  end
  fibaro:debug('Diese Info in die lokalen Arrays rfid1,rfid2,code eintragen')
  if (fibaro:getGlobal('PresentState') ~= nil) then
    local PresentState = fibaro:getGlobal('PresentState')
    Debug( 'green', 'Die Variable PresentState wurde gefunden. Status: ' ..PresentState)
  else
    Debug( 'red', 'Die Variable PresentState wurde nicht gefunden. Bitte einrichten! rfid_alarm wird nicht mehr unterstützt.')
  end
  local delay = tonumber(fibaro:getValue(sensorID[1], 'armDelay'))
    if (delay ~= 0) then
        fibaro:debug('Arm-Delay erkannt. Arm-Delay: ' ..delay)
    else
        fibaro:debug('Kein Arm-Delay erkannt.')
    end
    if (doorlock) then
        Debug( 'green', 'doorlock mit der ID ' ..doorlockID.. ' erkannt');
    else
        fibaro:debug('Kein doorlock erkannt')
    end
    if (doorlock) then
      if (doorlock_open == 'rfid') then
        Debug( 'white', 'doorlock soll mit den RFID-Tags geöffnet werden können. Prüfe Abhängigkeiten.')
        local error_rfid = 0
          if (rfid_use1 == 0 and rfid_doorlock1 == 1) then
            Debug( 'red', 'RFID-Tag 1 soll zum Schärfen und zum Öffnen genutzt werden. Dies ist nicht möglich. Bitte ändern!')
            error_rfid = 1
          end
          if (rfid_use2 == 0 and rfid_doorlock2 == 1) then
            Debug( 'red', 'RFID-Tag 2 soll zum Schärfen und zum Öffnen genutzt werden. Dies ist nicht möglich. Bitte ändern!')
            error_rfid = 1
          end
          if (rfid_use3 == 0 and rfid_doorlock3 == 1) then
            Debug( 'red', 'RFID-Tag 3 soll zum Schärfen und zum Öffnen genutzt werden. Dies ist nicht möglich. Bitte ändern!')
            error_rfid = 1
          end
          if (rfid_use4 == 0 and rfid_doorlock4 == 1) then
            Debug( 'red', 'RFID-Tag 4 soll zum Schärfen und zum Öffnen genutzt werden. Dies ist nicht möglich. Bitte ändern!')
            error_rfid = 1
          end
          if (error_rfid == 0) then
            Debug( 'green', 'Abhängigkeiten bei den RFID-Tags in Ordnung')
          end
      elseif (doorlock_open == 'pin') then
        Debug( 'white', 'doorlock soll mit einem PIN geöffnet werden. Prüfe PINs.')
        if (compareCodes(code, open_code)) then
          Debug( 'red', 'Die PINs zum öffnen und schärfen sind gleich, bitte einen ändern.')
        else
        Debug( 'green', 'Die PINs sind in Ordnung')
        end
      end
    end
   end
  end


Hi,

du kannst das virtuelle Drücken der Buttons für den Farbwechsel in den eigenen Aktionen durchführen. Wie das funktioniert ist in den beiden Artikeln ausführlich erklärt :slight_smile:

Gruß

Brain,

habe das ähnlich realisiert.
Habe ein RGB Modul in eine Deckenleuchte mit Farbv Ledstreifen und weissen LED Strahlern eingebaut. (Innenleben in Bastelarbeit getauscht)
Die Deckenleuchte hängt im Eingangsbereich und ist mit den anderen Leuchten zusammenschalten (177 value)
Wenn die anderen Leuchten ein sind und Farbe grün, dann leuchtet sie Weiss, wenn aus dann Grün.
Ist die Alarmanlage scharf, damm ist sie ROT und im Nachtmodus Magenta (Nachts werden nur Türen und Fenster überwacht und mit Schalter aktiviert)

Ich verwende eine Variable um die Farben umzuschalten. (Variable mit allen Farben anlegen)
Ein LUA script steuert den Farbwechsel bei jeder Variablen änderung.
Somit brauchst nur die Variable in den Scripts anpassen.
z.b. Vor dem Schärfen setzt Du die Farbe Rot, wenn ein Fehler auftritt änderst Du auf Magenta.
Vorteil des eigenen LUA scripts ist auch dass Du den Farbwechsel auch aus anderen Scripts steuern kannst.
Ich habe z.B. das RFID script und ein eigenes für die Nacht(mit Schalter).

--[[
%% properties
177 value
%% events
%% globals
RGBALARM
--]]

fibaro:debug("TRIGGER")
fibaro:debug(fibaro:getGlobalValue("RGBALARM"))

local startSource = fibaro:getSourceTrigger();
if ( fibaro:getGlobalValue("RGBALARM") == "ROT" )
then
	fibaro:call(156, "setR", "255");
	fibaro:call(156, "setG", "0");
	fibaro:call(156, "setB", "0");
	fibaro:call(156, "setW", "0");
	fibaro:call(156, "turnOn");
end

if ( fibaro:getGlobalValue("RGBALARM") == "GRUEN" )
then
  	if   tonumber(fibaro:getValue(177, "value")) > 0
	then
		fibaro:call(156, "setR", "0");
		fibaro:call(156, "setG", "0");
		fibaro:call(156, "setB", "0");
		fibaro:call(156, "setW", "255");
		fibaro:call(156, "turnOn");
 	else
		fibaro:call(156, "setR", "0");
		fibaro:call(156, "setG", "255");
		fibaro:call(156, "setB", "0");
		fibaro:call(156, "setW", "0");
		fibaro:call(156, "turnOn");  
	end
end
    
if  (fibaro:getGlobalValue("RGBALARM") == "MAGENTA" )
then
	fibaro:call(156, "setR", "235");
	fibaro:call(156, "setG", "0");
	fibaro:call(156, "setB", "235");
	fibaro:call(156, "setW", "0");
	fibaro:call(156, "turnOn");
end
  

  
  


Hallo,

vielen Dank für das Skript, das werde ich gleich einmal probieren. Das geht ja in die Richtung wie ich es nutzen möchte. Immer auf das Handy zu schauen um zu sehen ob die Alarmanlage scharf oder unscharf ist, ist auf Dauer recht umständlich.

THX
LG Daniel

@mdietinger, du hast was von einem Schlater ( ZWave Schalter) erwähnt, mit welchem Du bestimmte Sensoren (Teilbereiche) Nachts scharf schaltest, wenn ich es richtig verstanden habe. Kannst Du mir hier das fertige Skript posten, denn soetwas möchte ich auch realisieren. Bevor ich ins Bett gehe, Schalter betätigt, Teilbereiche sind scharf, Früh den Schalter wieder betätigt, Alarm ist aus.

Trixxon,

gerne.
Ich habe zwei Scripts welche mit der Farbsteuerung von oben und der RFID Steuerung zusammenarbeiten.
179 ist mein Schalter, bitte durch Deinen ersetzen und auch die Door ID’s ändern. (Sind bei mir Türen und Fenster plus Bewegungsmelder im Keller)
Zusätzlich habe ich auch mein Alarm Skript angehängt.
Wenn in der Nacht ein Fenster oder eine Tür geöffnet wird gibt es einen kurzen Piep bevor nach 30" der Alarm losgeht.
Falls irtümmlicherweise nicht entschärft wurde hast Du 30" Zeit dies zu tun.

Wichtig, du musst allen Scripts erlauben bei Alarm zu laufen!

Nachts scharf:

--[[
%% properties
179 value
%% events
%% globals
--]]

local doorID = {174, 171, 173, 172, 202, 203, 132} -- IDs der Sensoren
local countID = 50 -- Anzahl eurer devices (Muss nicht zwangsläufig geändert werden)
 
local startSource = fibaro:getSourceTrigger();
if (
 ( fibaro:getGlobal("RGBALARM") == 'GRUEN'
)
or
startSource["type"] == "other"
)
then
	fibaro:setGlobal("rfid_alarm", "1");
	fibaro:setGlobal("RGBALARM", "MAGENTA");
  	fibaro:debug('Nacht scharf') 	
  
			-- SCHÄRFEN
            for j=1, countID do
              	if doorID[j] ~= nil then
    			if (tonumber(fibaro:getValue(doorID[j], 'value')) == 0) then
                           fibaro:call(doorID[j], 'setArmed', '1')
                        else
        		end
              end
            end
end


Nachts unscharf:

--[[
%% properties
179 value
%% events
%% globals
--]]

local doorID = {174, 171, 173, 172, 138, 117, 202, 203, 132} -- IDs der Sensoren
local countID = 50 -- Anzahl eurer devices (Muss nicht zwangsläufig geändert werden)
 
local startSource = fibaro:getSourceTrigger();
if (
 ( fibaro:getGlobal("RGBALARM") == 'MAGENTA')
or
startSource["type"] == "other"
)
then
	fibaro:setGlobal("rfid_alarm", "0");
	fibaro:setGlobal("RGBALARM", "GRUEN");
  	fibaro:debug('Nacht unscharf') 	
  
			-- ENTSCHÄRFEN
            for j=1, countID do
              	if doorID[j] ~= nil then
    			if (tonumber(fibaro:getValue(doorID[j], 'value')) == 0) then
                            fibaro:call(doorID[j], 'setArmed', '0')
                        else
        		end
              end
            end
end

Alarm Script: (Wird durch Alarmpannel gestartet)
43 ist bei mir die Sirene, bitte ändern und auch die Email und Push ID’s ändern/oder löschen)

local start_alarm = 30
local max_alarm = 600
local count = 1 
 
-- Infinite loop
while true do
  
  if (fibaro:getGlobalValue("rfid_alarm") ~= '1' ) then
    fibaro:debug('Alarm Stop')
      fibaro:call(43, "turnOff")
    if (count > start_alarm) then
      local subject = "ALARM Gelöscht"
	  local message = "Sirene in-aktiv"

	  fibaro:call(204, "sendEmail", subject, message);
	  fibaro:call(205, "sendEmail", subject, message);
	  fibaro:call(234,  "sendPush", message);
    end
      fibaro:abort()
  end  
  
  if (fibaro:getGlobalValue("rfid_alarm") == '1' and count == 1) then
    fibaro:debug('Alarm Start')
     fibaro:call(43, "turnOn")
     fibaro:sleep(500)
     fibaro:call(43, "turnOff") 
       
  end
  

 
  if (count == start_alarm) then
      
    fibaro:debug('Sirene Ein')
    	fibaro:call(43, "turnOn")
    local subject = "Einbruchs ALARM !!!!"
	local message = "Alarm wurde ausgelöst, Sirene aktiv"
	  fibaro:call(204, "sendEmail", subject, message);
	  fibaro:call(205, "sendEmail", subject, message);
      fibaro:call(234,  "sendPush", message);
  end
 
  if (count == max_alarm) then
    fibaro:debug('Maximale Alarmzeit, Siren Aus')
      fibaro:call(43, "turnOff")
      local subject = "max ALARM Zeit"
	  local message = "Sirene in-aktiv"
	  fibaro:call(204, "sendEmail", subject, message);
	  fibaro:call(205, "sendEmail", subject, message);
	  fibaro:call(234,  "sendPush", message);
      fibaro:abort()

    
  end
 
  -- Increase the value of a by 1
  count = count + 1
 
  -- Wait 1 second (1000 milliseconds)
  fibaro:sleep(1000)
 
end

Danke @mdietinger,

es ist nur sehr schwer für mich alles nachzuvollziehen, wenn man des Programmierens nicht mächtig ist. Daher ist leider nur copy and paste angesagt.

Ich beschränke mich jetzt erstmal auf die beiden Skripte “scharf” und “unscharf”. Dies müsste doch dann mit einem weiteren Fensterkontakt und angeschlossenem Kipp-Schalter funktionieren? Schalterstellung an wird der Fensterkontakt aktiviert z.b. ID85 und diese ID setze ich dann in Dein Skript “Nachts scharf” in Zeile 3 ein. Die gleiche ID85 setze in Dein Skript “Nachts unscharf” ein. ( Natürlich noch die jeweilligen Ids meiner Fenster in Zeile8)

Mehr ist nicht zu tun und die Alarmanlage sollte hier Abends scharf und morgens mit dem Schalter wieder entschärft werden, richtig?

Trixxon,

schwer zu sagen ob es nur Copy und Paste wird.
Habe kein Problem das Script für Dich anzupassen.
Genau der Schalter gehört in Zeile 3.
Der Fensterkontakt und etwaige weitere Tür, Fensterkontakte gehören in Zeile 8, den Rest einfach löschen.
Hast Du eine Lampe oder Farbgeber welche den Status ob scharf - unscharf signalisieren sollte?
Hast Du eine Sirene welche im Alarmfall auslösen sollte? (ID?)
Hast Du ein anderes Alarmscript bereits in Anwendung? (z.B. RFID)

lg,

Markus

Hi,

warum fasst du die beiden ersten Szenen nicht zu einer zusammen? Oder hat das einen bestimmten Grund?

Gruß

Hab ich nur getrennt angelegt um auch über Mobiler App die Szenen getrennt ausführen zu können. (Kein Ratespiel ob ein oder aus)

@mdietinger, eine Lampe für die Signalgebung habe ich leider noch nicht, auch noch keine Sirene und ein weiteres Alarmskript läuft auch nicht.

So, habe erstmal ganz einfach angefangen mit dem Skript “Alarm Nachts scharf”. Habe hier mal zwei Melder eingebunden, in Zeile 3 (einen Türkontakt) ID 54, und einen Fensterkontakt ID 27 in Zeile 8.
Frage 1
Wenn ich nun die Tür öffne sollte sich doch der Alarm aktivieren, macht er aber leider nicht. Drücke ich aber in der Webgui auf das Skript auf start, dann wird der Alarm scharf gestellt, so wie es soll. Er triggert den Türkontakt allerdings bei mir nicht.

Frage2
Bei dem zweiten Skript “Nachts unscharf” ist ja bei mir eine Pin für das deaktivieren der Alarmfunktion eingestellt. Kann man diese Pin noch in dem Programm unterbringen, bzw, wie hast Du dies gelöst?

Hast Du im Header die ID Deines Triggers vermerkt?

see http://www.siio.de/fibaro-homecenter-einsteigerguide-teil-2-getriggerte-szenen/

In Zeile 3 gehört Dein Schalter.

Tür und Fenster in Zeile 8.
Entweder legst Du eine Vordefinierte Variable RGBALARM mit Farbe GRUEN und MAGENTA an, oder wir müssen die Farben entfernen und auf Schalter 1 oder 0 prüfen. (Falls du eine Statuslampe in Zukunft hast würde ich sie lassen)
Die Zeilen mit rfid_alarm kannst alle löschen.

lg,

Markus

@mdietinger, Hallo Markus,

ich hoffe ich nerve nicht, aber irgendwie schaltet sich bei mir der Alarm nicht ein, wenn ich den Türsensor betätige.Hier mein geändertes Skript.

–[[
%% properties
54 value --Türsensor
%% events
%% globals
–]]

local doorID = {27} – ID Fenster
local countID = 50 – Anzahl eurer devices (Muss nicht zwangsläufig geändert werden)

local startSource = fibaro:getSourceTrigger();
if (
( fibaro:getGlobal(“RGBALARM”) == ‘GRUEN’
)
or
startSource[“type”] == “other”
)
then

fibaro:setGlobal("RGBALARM", "MAGENTA");
fibaro:debug('Nacht scharf') 	

		-- SCHÄRFEN
        for j=1, countID do
          	if doorID[j] ~= nil then
			if (tonumber(fibaro:getValue(doorID[j], 'value')) == 0) then
                       fibaro:call(doorID[j], 'setArmed', '1')
                    else
    		end
          end
        end

end

Hast du das

–[[
%% properties
54 value –Türsensor

so im Skript eingetragen? Dann wird die Szene nicht getriggert. Der Kommentar muss entfernt werden.

@boomx Ok, mein Fehler. Jetzt klappts.

Jetzt brauche ich nur noch die Info, wie man den Pincode hinterlegt, damit auch das entschärfen über den Schalter klappt.

Danke trotzdem für eure Geduld.

Kein Problem :slight_smile:

Für das Entschärfen über eine Szene mit

fibaro:call(doorID[j], 'setArmed', '0')

benötigst du kein PIN-Code. Dieser wird lediglich für die App benötigt.

Gruß

Trixxon,

Ich habe nur noch Probleme zu verstehen warum Du den Türsensor zum Triggern verwendest.
Hast Du einen Schalter an den Türsensor angeschalten um scharf/unscharf zu schalten, oder sollte der mitüberwacht werden.
Eine Anmerkung zum derzeitigen Scripts:
Es ist keine bestimmte Schalterposition mit scharf/unscharf verbunden und es werden nur Wechsel im Status zum umschalten verwendet.
zb. Ist Schalterstellung ein-scharf, dann ist nach manueller Ausführung des Scripts Schalterstellung aus-scharf.
Wenn dies OK oder gewünscht ist funktioniert das Script perfekt, nur eine visuelle Rückmeldung wäre noch gut.
Wenn nicht könnten wir dir das Script noch umschreiben.

@boomx, ok, habe verstanden.

@mdietinger, den Türsensor habe ich nur als Test verwendet um zu testen ob es bei mir überhaupt funktioniert. Ich muss mir hierfür noch einen Fibaro Fenster/Türkontakt besorgen, den ich dann mit einem Schalter verbinden wollte. Schalter oben Alarm aus, schalter unten Alarm an.
So, hier das schärfen, allerdings muss ich ab und zu die Tür auf und zu machen, bis sich ein scharf stellen aktiviert. Hängt das mit deiner Aussage der Schalterposition zusammen?

–[[
%% properties
54 value
%% events
%% globals
–]]

local doorID = {27} – ID Fenster
local countID = 100 – Anzahl eurer devices (Muss nicht zwangsläufig geändert werden)

local startSource = fibaro:getSourceTrigger();

		-- SCHÄRFEN
  for j=1, countID do
          	if doorID[j] ~= nil then
			if (tonumber(fibaro:getValue(doorID[j], 'value')) == 0) then
                       fibaro:call(doorID[j], 'setArmed', '1')
                       fibaro:debug('Nacht scharf') 	
                    else
    		end
          end
        end

Eine Visuelle Rückmeldung wäre schon noch gut, allerdings brauche ich da ja noch ein paar Fibaro Teile dazu. Kommt aber noch.

Mit fixer Schalterpostion ist untenstehendes Script besser. (Ein = Scharf und Aus=Unscharf)

–[[
%% properties
54 value
%% events
%% globals
–]]

local doorID = {27} — ID Fenster
local countID = 100 — Anzahl eurer devices (Muss nicht zwangsläufig geändert werden)
	if tonumber(fibaro:getValue(54 "value") > 0 then
			-- SCHÄRFEN
            for j=1, countID do
              	if doorID[j] ~= nil then
					if (tonumber(fibaro:getValue(doorID[j], 'value')) == 0) then
                           fibaro:call(doorID[j], 'setArmed', '1')
					else
					end
				end
            end
	else
			-- ENTSCHÄRFEN
            for j=1, countID do
              	if doorID[j] ~= nil then
					if (tonumber(fibaro:getValue(doorID[j], 'value')) == 0) then
                           fibaro:call(doorID[j], 'setArmed', '0')
					else
					end
				end
            end
	end