Hilfe "to many instances"

Hallo zusammen,
ich habe ein Problem, was ich einfach nicht in den Griff bekomme. Bei mir wird bei einer Szenen immer wieder “to many instances - Number of instances of scene has been reduced due to exceeding limit.” angezeigt.

Ich habe auch schon einiges im Forum etc gelesen, jedoch kann ich den Fehler einfach nicht beheben.

Zur Ausganssituation Szene Bad:
Ich habe im Bad ein elektrisches Fenster welches mit einem Qubino ZMNHOD1 Flush Shutter betrieben wird. Die Szene soll auslösen, wenn mehr als 3W am Aktor anliegen und dann das Fenster nach 240 Sek. schließen = ich drücke auf Fenster öffnen -> mehr als 3W liegen am Aktor an = Fenster schließt nach 240 Sek.
An sich funktioniert die Szene ohne Probleme, jedoch komme ich immer die Meldung “to many instances”

meine Fehlerbehenungsversuche:

  • max. ausgeführten Instanzen: 1,2,3 (hat alles nichts geändert!)
  • Parameter kann ich irgendwie garkeine einstellen?!

Zur Ausganssituation Szene Kino:
Ich habe an meiner TV Wand einen Fibaro Wall Plug der bei mehr als 3W und 15 Min nach Sonnenuntergang das Licht im Wohnzimmer + eine Stehlampe (dort hängt ebenfalls ein Wall Plug dran) einschalten soll. Das funktioniert soweit auch ganz gut, was jedoch nicht ohne “to many instances” funktioniert ist das ausschalten.

meine Fehlerbehenungsversuche:

  • max. ausgeführten Instanzen: 1,2,3 (hat alles nichts geändert!)
  • es gibt keinen Parameter 6, Parameter 3 ist auch nicht richtig

Ich bin mit meinem Latein am Ende, vielleicht kann mir irgendjemand helfen?!

Vielen Dank schon einmal für eure Mühe!

Bildschirmfoto-2019-09-20-um-13.06.14.png

Bildschirmfoto-2019-09-20-um-13.06.45.png

Hi @donaldinho,

man sollte es vermeiden, dass mehrere Szenen in einer Warteschleife fest hängen. Alternativ kann man die max. Instanzen schon mal auf 10 hochsetzen und schauen ob die Probleme beseitigt sind. Erfahrungsgemäß ist das aber eher “unsauber”.

Bei Blockszenen könnte man in die If-Abfrage die Bedingung invertiert mitrein nehmen, die ausgelöst werden soll. Also wenn Last > 3W UND Lampe NICHT AN dann Lampe an/Wartezeit… (nur ein Beispiel). Beim nächsten Aufruf ist die Lampe bereits an und die Szene kann sofort ohne Wartezeit beendet werden.

Bei Luaszenen hilft meist folgender Codeschnipsel zu Beginn der Szene:

if (fibaro:countScenes()>1) then -- nur eine Instanz zulassen
	fibaro:debug('Kill the second scene!')
	fibaro:debug('-')
	fibaro:abort()
end

Falls man die Blockszene nicht mit entsprechender Bedingung umstellen kann, könnte man sie in Lua umwandeln.

Vielen Dank für dein Feedback!
Wo genau muss ich den Luacodeschnipsel denn einfügen? Direkt hinter dem “IF”?

--[[
%% properties
305 power
%% weather
%% events
%% globals
--]]

local startSource = fibaro:getSourceTrigger();
if (
 ( tonumber(fibaro:getValue(305, "power")) > 3 )
or
startSource["type"] == "other"
)
then
	setTimeout(function()
		fibaro:call(305, "close");
	end, 240000)
end


achso, das ist jetzt der LUA Code für das elektrische Fenster. Will es erst einmal dort probieren, ist wahrscheinlich einfacher :slight_smile:

ich hab mal versucht deinen Vorschlag in der Blockszene zu verarbeiten, aber leider kommt der Fehler immer noch :frowning:

Der Schnippsel muss nach dem Block mit den --[…–] und vor Local…

Probier mal…

also quasi in Zeile 8?

Richtig!

also so wie es aktuell aussieht, funktioniert es. Ich habe es jetzt seit ca. 10 Min eingefügt und bekomme bis jetzt keine Fehlermeldung, weder beim Fenster noch bei der Kino Szene!

Vielen Dank für deine Hilfe!!!

oh nein, zu früh gefreut! Da kam der Fehler doch wieder :frowning:

hier mal der Code von beiden Szenen:
Szene BADFENSTER

--[[
%% properties
305 power
%% weather
%% events
%% globals
--]]
if (fibaro:countScenes()>1) then -- nur eine Instanz zulassen
	fibaro:debug('Kill the second scene!')
	fibaro:debug('-')
	fibaro:abort()
end
local startSource = fibaro:getSourceTrigger();
if (
 ( tonumber(fibaro:getValue(305, "power")) > 3 )
or
startSource["type"] == "other"
)
then
	setTimeout(function()
		fibaro:call(305, "close");
	end, 240000)
end

und Szene KINO AUS:


--[[
%% properties
377 power
%% weather
%% events
%% globals
--]]
if (fibaro:countScenes()>1) then -- nur eine Instanz zulassen
	fibaro:debug('Kill the second scene!')
	fibaro:debug('-')
	fibaro:abort()
end
local startSource = fibaro:getSourceTrigger();
if (
 ( tonumber(fibaro:getValue(377, "power")) < 20 )
or
startSource["type"] == "other"
)
then
	fibaro:call(47, "turnOff");
	fibaro:call(60, "turnOff");
	setTimeout(function()
		fibaro:call(380, "turnOff");
	end, 120000)
	setTimeout(function()
		fibaro:call(27, "turnOff");
	end, 180000)
end

Ok. Auf wieviel hast Du “max ausführbare Instanzen” jetzt stehen? Ich würde das trotz der Sicherheitsabfrage im Code mindestens auf 4 oder höher stellen.

Was mir aufgefallen war, die Fehlermeldung kam nach der Umstellung nicht mehr so häufig!

…hatte ich auf 1 stehen, hab sie jetzt mal auf 10 gestellt. Mal sehen ob’s was bringt.

juhu… Fehlermeldung kommt nicht mehr!!

Schön dass es nun klappt.

Anscheinend gibt es kurz nacheinander Triggerereignisse, die bewirken, dass deine Szenen mehrfach starten. Das ist mit dem Codeschnippsel nun nicht mehr weiter schlimm. Evtl. könnte man dies mit Parametern des Gerätes noch ein wenig einschränken wenn es zu sehr ausufert (Stichwort Z-Wave Traffic). Aber das ist von Gerät zu Gerät sehr unterschiedlich und nicht immer einfach zu lösen.

Wenn Du möchtest kannst Du interessehalber anzeigen lassen wie oft es vorkommt, dass die Szene schnell nacheinander getriggert wird und mehrere Instanzen auf einmal laufen:

fibaro:debug('Anzahl laufender Szenen: '..fibaro:countScenes())
if (fibaro:countScenes()>1) then -- nur eine Instanz zulassen
	fibaro:debug('Kill the second scene!')
	fibaro:debug('-')
	fibaro:abort()
end

Ist das Fenster eigentlich ein Kippfenster? Wenn ja würde mich der Hersteller interessieren.