Rauchmelder Script

Hi,

ich habe das LUA Script von crissxcross für die Rauchmelder ein wenig an meine Bedarfe angepasst um folgendes zu erreichen:

Bei Auslösung (bei mir zum Test mit Fenstersensor) identifiziere Raum mit Rauch, schicke Nachricht an Handy, Schalte Lichter ein, Fahre Rolläden hoch und schalte die Sirene

--[[
%% properties
311 value
%% globals
--]]
if fibaro:countScenes() > 1 then
  fibaro:debug("stop scene");
  fibaro:abort();
end

local sireneID = 321 -- ID der Sirene
local handyID = 51 -- ID des Handys
 
local trigger = fibaro:getSourceTrigger()
local smokeID = tonumber(trigger['deviceID'])
local smoke = tonumber(fibaro:getValue(smokeID, "value"))
 
if (smoke == 1) then
  	local room = fibaro:getRoomNameByDeviceID(smokeID)
  	fibaro:debug('Rauch im Raum: ' .. room .. ' erkannt.')
    fibaro:call(handyID, 'sendPush', 'ACHTUNG! Rauch im Raum: ' .. room .. ' erkannt!', 'smoke')
	-- Licht AN
  	fibaro:call(302, "turnOn");
  	fibaro:call(307, "turnOn");
  	fibaro:call(328, "turnOn");
  	fibaro:call(410, "turnOn");
  	fibaro:call(310, "turnOn");
  	fibaro:call(317, "turnOn");
  	fibaro:call(303, "turnOn");
  
  -- Rollläden UP
  	fibaro:call(423, "open");
	fibaro:call(425, "open");
    fibaro:call(458, "open");
  	fibaro:call(406, "open");
    fibaro:call(408, "open");
 -- Sirene AN
  	fibaro:call(sireneID, 'turnOn');
 
  
else
  	fibaro:debug('Kein Rauch erkannt. Fehlalarm');
        end

Starte ich die Szene erhalte ich als erstes

[DEBUG] 12:56:11: line 91: attempt to concatenate local ‘deviceId’ (a nil value)

Nach auslösen der Szene ist es vom Zufall abhängig wie weit sie läuft. In der Regel immer bis “fibaro:call(302, “turnOn”);”. Der Rest ist Glücksache ob es durchläuft.

Sorry für das Format. Weiss nicht wie man formatierten Code einfügt! Cut and Paste sah dann doch sehr unübersichtlich aus :wink:

Irgendeine Idee?

Hi,

hab es mal formatiert. Beim Posten hast du oben den Button “code”. Damit kannst du Quellcode posten.

So wie ich das sehe, versuchst du die Szene manuell zu starten. Dies funktioniert mit dem Skript nicht, sondern nur, wenn es durch ein Sensor ausgelöst wurde. Zum Testen kannst du auch einfach einen Türsensor nehmen. Geht auch… Oder einfach lang auf den Knopf von dem Rauchmelder drücken. Dann löst dieser auch aus.

Gruß

Hmm, ich löse die Szene zum Testen über einen Tür/Fenstersensor aus! Trotzdem das gleiche Verhalten…

Gruß

Hast du 4.081 installiert? Dort gibt es einen Bug, welcher dieses Verhalten erklären könnte…

Gruß

Nein, bin auf 4.080. Auch umstellen und Syntaxänderungen bringen das gleiche Ergebnis. Mal läuft die Szene durch, mal stoppt sie mit Einschalten des ersten Lichtes (Zeile 23). Echt strange…

Gruß

Die Szene kann nicht laufen, diese sollte durch den oben geposteten Fehler abbrechen.

Bau mal weitere Fibaro:debug’s ein. Dann sollte es klar werden.

Gruß

Ich erhalte keine Fehlermeldung wenn ich für den Test über den Türsensor auslösen. Teste jetzt mal verschiedene Debugs

Gruß

Die Debugs laufen sauber durch und die IDs sind alle korrekt. Die Aktoren schalten aber nicht zuverlässig! Wenn es grundsätzlich nicht funktioniert ist das ja OK. Aber so weiß ich echt nicht wo ich ansetzen soll.

Gruß

Scheint so als wenn sich die HC2 an den Befehlen “verschluckt”. Habe jetzt mit fibaro:sleep(60); zwischen den Anweisungen gearbeitet. Siehe da es funktioniert!!

--[[
%% properties
311 value
%% globals
--]]
if fibaro:countScenes() > 1 then
  fibaro:debug("stop scene");
  fibaro:abort();
end
 
local sireneID = 321 -- ID der Sirene
local handyID = 51 -- ID des Handys
 
local trigger = fibaro:getSourceTrigger()
local smokeID = tonumber(trigger['deviceID'])
local smoke = tonumber(fibaro:getValue(smokeID, "value"))
 
if (smoke == 1) then
  	local room = fibaro:getRoomNameByDeviceID(smokeID)
  	fibaro:debug('smoke: '.. smoke .. ' erkannt.')
  	fibaro:debug('Rauch im Raum: ' .. room .. ' .')
    fibaro:call(handyID, 'sendPush', 'ACHTUNG! Rauch im Raum: ' .. room .. ' erkannt!', 'smoke')
-- Licht AN
  	fibaro:call(302, "turnOn");
  	fibaro:sleep(60);
  	fibaro:call(307, "turnOn");
  	fibaro:sleep(60);
  	fibaro:call(328, "turnOn");
  	fibaro:sleep(60);
  	fibaro:call(410, "turnOn");
  	fibaro:sleep(60);
  	fibaro:call(310, "turnOn");
  	fibaro:sleep(60);
  	fibaro:call(317, "turnOn");
  	fibaro:sleep(60);
  	fibaro:call(303, "turnOn");
  	fibaro:sleep(60);
-- Rollläden UP
  	fibaro:call(423, "open");
  	fibaro:sleep(60);
  	fibaro:call(425, "open");
  	fibaro:sleep(60);
  	fibaro:call(458, "open");
  	fibaro:sleep(60);
  	fibaro:call(406, "open");
  	fibaro:sleep(60);
  	fibaro:call(408, "open");
  	fibaro:sleep(60);
  -- Sirene AN
  	-- fibaro:call(sireneID, 'turnOn');
  	fibaro:debug('Sirene: '.. sireneID ..'.')
 	
  
else
  	fibaro:debug('Kein Rauch erkannt. Fehlalarm. smoke: ' .. smoke .. ' .');
        end