Fehler im Alarmscript über Fibaro Alarm Panel

Hallo,

ich habe neuerdings eine Fehlermeldung in meinem Alarmscript die ich nicht nachvollziehen kann:

[DEBUG] 09:13:26: ___________________________
[DEBUG] 09:13:39: Alarm-Szene 2.0 wurde ausgelöst.
[DEBUG] 09:13:39: Aktionen werden ausgeführt.
[DEBUG] 09:13:39: 2019-04-20 09:13:39.247069 [ fatal] Unknown exception: /opt/fibaro/FibaroSceneAPI.lua:258: Assertion failed: Expected number

Das Alarmscript hat eigentlich die gesamte Zeit gut funktioniert. Bei der Fehlermeldung finde ich auch eigenaartig, das es Zeile 258 im Script nicht gibt und damit die Fehlersuche in der Zeile nciht geht. Kann mir hier jemand weiterhelfen woher der Fehler kommt?

Script welches ich nutze:

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

-- Einstellungen für die Sensoren (Zwingend erforderlich)
local sensorID = {171,119,217,390,223,36,242,387,229,226,65,72,419,393,96}
-- Einstellungen für die Sirene(n) (Wenn keine IDs eingetragen sind, wird die Funktion nicht genutzt)
local sireneID = {453} -- ID der Sirene(n)

-- Einstellungen für Push-Benachrichtigungen (Wenn keine IDs eingetragen sind, wird die Funktion nicht genutzt)
local phoneID = {324,384} -- ID der Handys 324 Amrei S8, 384 Sebastian Pixel 3

-- 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 = true

-- an welche Mail soll ein Bild der Kamera gesendet werden
local email = 'sebastianbuchholz.79@googlemail.com'

-- 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()
  -- eigene Aktion bei Alarm
  fibaro:call(188, "turnOn")
  fibaro:call(180, "turnOn")
  fibaro:call(184, "turnOn")  
  fibaro:debug('Eigene Aktionen bei Alarm ausgeführt')
end

function ownaction_afteralarm()
  -- eigene Aktion nach dem Alarm
  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 Kamera-------------------
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 Sensor Check----------------
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')
--DEBUG ('white', 'Sensor im Raum ' .. windowName .. ' im Raum: ' .. roomName .. ' ausgelöst') 
sendPush('ACHTUNG: 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
	api.post('/mobile/push', {["mobileDevices"]={324,384}, ["message"]=[[Alarmanlage ausschalten?]], ["title"]='Alarm aus?', ["category"]='RUN_CANCEL', ["data"]={["sceneId"]=185}});
  	fibaro:setGlobal("Alarm", "Ausgelöst")  
  	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.')
  if (own_action) then
    ownaction_afteralarm()
  end
fibaro:setGlobal("AlarmStatus", "Unarmed") 
fibaro:setGlobal("Alarm", "Aus")  
emergencyRGBW(false)
onoffSirene(false)

@buche11: Ich habe nun den gleichen Fehler. Konntest du diesen lösen?

Hi, kann mich leider nicht mehr genau dran erinnern aber ich meine bei mir war das ein Fehler mit einer Geräte ID. Ich hab es dann irgendwann selbst gefunden und nutze das Script seit dem auch ohne Probleme. Ich stell mal mein aktuelles Script ein (allerdings inzwischen mit HomeTable anstatt mit einzelnen IDs für die Geräte). Den Kamera-Teil nutze ich nicht mehr da ich die Netatmo von damals aussortiert habe:

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

local jT = json.decode(fibaro:getGlobalValue("HomeTable"))

-- alarm 2-0 rc Script
-- Einstellungen für die Sensoren (Zwingend erforderlich)
local sensorID = {jT.Eingang.Eingang_Tuer, jT.HWR.HWR_Tuer, jT.HWR.HWR_Fenster,
jT.Kueche.Kueche_Fenster, jT.Kueche.Kueche_Tuer, jT.Wohnzimmer.WZ_Tuer1, 
jT.Wohnzimmer.WZ_Tuer2,jT.Wohnzimmer.WZ_Tuer_West, jT.Arbeitszimmer.AZ_Tuer,
jT.Wohnzimmer.WZ_Tuer1, jT.Bad_OG.Bad_OG_Fenster_Nord, 
jT.Bad_OG.Bad_OG_Fenster_Ost, jT.Arvid.Arvid_Tuer_Balkon, 
jT.Jesper.Jesper_Tuer_Balkon,
jT.Carport.Carport_Tuer_1, jT.Carport.Carport_Tuer_2, jT.Carport.Carport_Tuer_3}

--local lights = {jT.Galerie.Galerie_Licht, jT.Wohnzimmer.WZ_Licht, 
  --jT.Kueche.Kueche_Licht}

-- Einstellungen für die Sirene(n) (Wenn keine IDs eingetragen sind, wird die Funktion nicht genutzt)
local sireneID = {jT.Alarmfunktionen.Flur_Sirene} -- ID der Sirene(n)

-- Einstellungen für Push-Benachrichtigungen (Wenn keine IDs eingetragen sind, wird die Funktion nicht genutzt)
local phoneID = {991, 324} -- ID der Handys 324, 911 

-- 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 = 'xxxxxxx'

-- 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()
  --function lightson()
    --for f=1, #lights do  
         -- fibaro:call(lights[f],"turnOn")
        --debug("yellow", "Es wurden "..lights[f].." Geräte ausgeschaltet!")
    --end
--end
  
  -- eigene Aktion bei Alarm
 -- fibaro:call(lights, "turnOn")
  fibaro:call(jT.Kueche.Kueche_Licht, "turnOn") -- Licht Küche
  fibaro:call(jT.Wohnzimmer.WZ_Licht, "turnOn") -- Licht Wohnzimmer
  fibaro:call(jT.Galerie.Galerie_Licht, "turnOn") -- Licht Galerie 
  fibaro:debug('Eigene Aktionen bei Alarm ausgeführt')
end

function ownaction_afteralarm()
  -- eigene Aktion nach dem Alarm
  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')
       fibaro:call(966, "pressButton", "2") --Rauchmelder Flur OG
      fibaro:call(965, "pressButton", "2") --Rauchmelder Küche
     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')
       fibaro:call(966, "pressButton", "3")
       fibaro:call(965, "pressButton", "3")
      end
    end
   end
  end
 end
end

-- Funktion zum Ein-/Ausschalten der RGBW-Notfallbeleuchtung


------------------Function Sensor Check----------------
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')
--DEBUG ('white', 'Sensor im Raum ' .. windowName .. ' im Raum: ' .. roomName .. ' ausgelöst') 
sendPush('ACHTUNG: 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
	api.post('/mobile/push', {["mobileDevices"]={991,324}, ["message"]=[[Alarmanlage ausschalten?]], ["title"]='Alarm aus?', ["category"]='RUN_CANCEL', ["data"]={["sceneId"]=274}});
  	fibaro:setGlobal("Alarm", "Ausgelöst")  
  	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.')
  if (own_action) then
    ownaction_afteralarm()
  end
fibaro:setGlobal("AlarmStatus", "Deaktiviert") 
fibaro:setGlobal("Alarm", "Aus")  
--emergencyRGBW(false)
onoffSirene(false)