Probleme CentralSceneEvent Smart Implant

Hallo Gemeinde,

bin neu hier und möchte erstmal “Hallo” sagen. :raising_hand_man:

Ich habe digge Probleme den FGBS222 mit dem CentralSceneEvent zum Laufen zu bekommen. Ich möchte die Klicks, Holds und Released nutzen um z.B. Sonos zu steuern. Habe auch schon ein Austauschgerät bekommen, leider weiterhin die gleichen Probleme mit dem CentralSceneEvent.

Falscher LUA?
Fehler im FGBS222?

Das Forum habe ich schon sehr stark durchsucht ohne Erfolg.

Mein Problem:
Die Attribute “HeldDown” und “Released” werden bei mir immer gleichzeitig gesendet!!

Also wenn ich meinen Taster (Monostabil) halte dann kommen direkt beide Befehle zeitgleich. Wenn ich den Taster dann loslasse kommt der “Released” Befehl ein weiteres mal.

Die Attribute “Pressed”; “Pressed2” und “Pressed3” funktionieren ohne Probleme. Außer das der DEBUG mit sehr großer Verzögerung ausgelöst wird.

Wo kann der Fehler sein.
Habe bereits mehrere LUAs ausprobiert die ich in dieversen Foren gefunden habe.
Ich hoffe einer von euch hat den Richtigen.

P.S.
HC2 Update auf 4.570 habe ich durchgeführt.

Danke für den Support

MfG

Mike

Hallo Mike,

willkommen im Forum. Die Attribute sollten passen. Hab ich bei einem Button ebenfalls erfolgreich am Laufen. Dort ist es ja die gleiche Vorgehensweise. Vielleicht ist der Implant noch nicht richtig konfiguriert? Sind die Eingänge als Digitaleingang definiert? Als Analogeingang dauert es u.U. etwas bis die Änderung erkannt wird.

Hallo Ändy,

danke das du unterstützen magst.
Die Eingänge sind auf “Monostable Button” definiert.
Laut Anleitung läuft die Central Scene nur mit “Monostable Button” und “Bistable button” - da ich einen Taster habe muss das so passen mit Monostable (Parameter 20+21).

Habe beide Implants jetzt mehrfach gelöscht und neu eingelernt, alles ohne Erfolg.

Gibt es weitere Ideen/Erfahrungen?

MfG Mike

Hallo Mike,

ich habe 2 Implants im Einsatz jedoch ohne diese Funktionalität die bei Dir nicht klappt. Leider sind die gut verbaut und nicht so ohne Weiteres zu erreichen um es zu testen.
Parameter 40+41 hast Du vermutlich schon aktiviert (Attribute an Szenen senden)?
EIn weiterer Gedanke: Vielleicht bringt es was die Eingangsempfindlichkeit = Kontaktprellen Parameter 150+151 zu erhöhen.
Am Besten wäre es, wenn es noch jemand probieren könnte…

Grüße

Ja genau, 40+41 habe ich angepasst.
150+151 ist laut Anleitung nicht relevant wenn man Monostable Button benutzt.
Habe ich dennoch mal getestet, jedoch ohne Erfolg.
Habe bei 40+41 auch zum testen mal nur “Hold/Release” ausgewählt, bringt aber alles nix :pensive:
Werde mit dem Ding nie meine Laustärke Sliden können…

Hat jemand Erfahrung mit dem RGBW 2, der soll auch SceneActivatiion haben.

Hab jetzt doch mal meinen Aufbau geöffnet und getestet. Ich kann das Problem leider bestätigen. Scheint ein Fehler in der Firmware zu sein und würde ich Fibaro melden.
Ansonsten ginge evtl. ein Workaround indem man den nahezu zeitgleichen Release ignoriert wenn vorher ein HeldDown gekommen ist. Ist aber vermutlich etwas getrickse in Lua notwendig. Ansatz: Eine Globale Variable für die Attribute definieren. In der Szene: Wenn Zeitpunkt Zustandsänderung der Globalen (+1s) < “Jetzt” dann setze Globale = Attribut. Deine eigentliche Szene triggerst Du dann mit der Globalen. Ist jetzt aber sehr aus der Hüfte geschossen :innocent:

Hallo Mike,

jetzt ist mir noch ein zweiter vielleich einfacherer Absatz eingefallen. Bei der Szene mit den üblichen Mitteln verhindern dass eine zweite Instanz aufgerufen wird. Bei Aufruf mit Attribut “gehalten” einfach ein fibaro:sleep(500) ausführen. Das sollte den 2. unnützen Trigger unterdrücken. Beim Loslassen gibt es wieder einen neuen Trigger der ganz normal ausgewertet werden kann. Falls Du Hilfe brauchst poste mal den bisherigen Code.

Vielen Dank für deine starke Anteilnahme. Echt super.
Dein erster Vorschlag ist sicher umsetztbar mit viel gebastel, aber irgendwie ja nicht im Sinne des Erfinders.
Dein zweiter Vorschlag funzt leider auch nicht. Die Attribute Hold und Release kommen zeitgleich rein. Keine Chance das unnütze “Release” tot zu bekommen.

Grundsätzlich soll dieser LUA dann starten:

– Funktion Lautstärke Sonos Wohnzimmer senken
–83=Sonos

local scene = 101 – ID dieser Szene

if
(tostring(button_source[“keyAttribute”]) == “HeldDown”)
then
repeat
local volume= (tonumber(fibaro:getValue(83, “volume”)));
local volumeneu = (tonumber(volume -5))
fibaro:call(83, “setVolume”, volumeneu);
fibaro:debug("Button gehalten Lautstärke gesenkt von: " … volume … " auf: " … volumeneu);
fibaro:sleep(1000)
until (tonumber(fibaro:getValue(83, “volume”))) == 0
fibaro:killScenes(scene);
end

–> der Release würde dann die Scene killen und das senken der Lautstärke abbrechen

Ich kenne die Sonosszene und deren Funktionsweise nicht aber ich meine es sollte eigentlich funktionieren. Es muss dafür gesorgt werden den 2. Trigger zu ignorieren und die Szene vorzeitig zu beenden.
Füge mal am Anfang, vor deiner Szene, das hier ein (374 CentralSceneEvent auf deine ID anpassen. Der Triggerblock war bei Dir nicht dabei, sonst hätte ich das gleich geändert):

--[[
%% properties
%% events
374 CentralSceneEvent
%% globals
--]]

--Instanzen prüfen. Ab 2. Instanz abbrechen
if (fibaro:countScenes()>1) then -- nur eine Instanz zulassen
	fibaro:debug('Kill the second scene!')
	fibaro:abort()
end

--Verzögerung bei Attribut "HeldDown" einbauen und zweite Instanz beenden
local startSource = fibaro:getSourceTrigger() -- wie wurde getriggert
if startSource["type"] ~= "event" then --Wenn Trigger ungültig...
	fibaro:debug('Trigger ungültig. Szene wird beendet!')
	fibaro:abort()
else --Wenn Trigger durch INPUT...
 	local button_source = fibaro:getSourceTrigger()["event"]["data"]
	if tostring(button_source["keyAttribute"]) == "HeldDown" then
  		fibaro:sleep(100) --unnützen Trigger abwarten
	end
end

local button_source = fibaro:getSourceTrigger()["event"]["data"]
fibaro:debug(os.date("%x").." | Triggerattribut: "..tostring(button_source["keyAttribute"]))

--HIER DEN WEITEREN CODE DER SZENE EINFÜGEN--

Debugfenster sieht dann so aus:

[DEBUG] 23:00:19: 12/29/19 | Triggerattribut: HeldDown
[DEBUG] 23:00:19: Kill the second scene!
[DEBUG] 23:00:25: 12/29/19 | Triggerattribut: Released

Bin jetzt soweit gekommen.
Das senken der Lautstärke funktioniert wunderbar.
Nur leider wird der “Release” zum “killen” der Scene jetzt ignoriert. Somit senkt er die Lautstärke bis zum “until”.
Hab es mit diversen Umstellungen versucht, leider ohne Erfolg.

Der Debug sieht eigentlich schon mal ganz brauchbar aus.

--[[
%% properties
%% events
172 CentralSceneEvent
%% globals
--]]



--Instanzen prüfen. Ab 2. Instanz abbrechen
if (fibaro:countScenes()>1) then -- nur eine Instanz zulassen
	fibaro:debug('Kill the second scene!')
	fibaro:abort()
end
--Verzögerung bei Attribut "HeldDown" einbauen und zweite Instanz beenden

local scene = 103 -- ID dieser Szene
local startSource = fibaro:getSourceTrigger() -- wie wurde getriggert

if startSource["type"] ~= "event"
then --Wenn Trigger ungültig...
	fibaro:debug('Trigger ungültig. Szene wird beendet!')
	fibaro:abort()
else --Wenn Trigger durch INPUT...
local button_source = fibaro:getSourceTrigger()["event"]["data"]
if tostring(button_source["keyAttribute"]) == "HeldDown"
    then
  	fibaro:sleep(200)--unnützen Trigger abwarten
    repeat
  		local volume= (tonumber(fibaro:getValue(83, "volume")));
		local volumeneu = (tonumber(volume -5))
		fibaro:call(83, "setVolume", volumeneu);	
		fibaro:debug("Button gehalten Lautstärke gesenkt von: " .. volume .. " auf: " .. volumeneu);
 		fibaro:sleep(1000)
		until (tonumber(fibaro:getValue(83, "volume"))) <= 10
    	fibaro:killScenes(scene);
      	end
end

local button_source = fibaro:getSourceTrigger()["event"]["data"]
fibaro:debug(os.date("%x").." | Triggerattribut: "..tostring(button_source["keyAttribute"]))

grafik

Ohh mann, hab jetzt eine Lösung. Nicht schön… aber ich kann erstmal wieder schlafen!

Szene 1 (deine Bausteine mit dem killen der zweiten Instanz):
Diese Szene löst nur eine weitere 2. Szene aus. So ist diese Szene schnell wieder gekillt und ich kann den zweiten “Release” in Ruhe abfragen. Dein “fibaro:abort()” sorgt dafür das der falsche “Release” ignoriert wird.

Szene 2:
Hier ist einfach nur der LUA zum Sliden der Lautstärke drin. Szene 2 wird durch Szene 1 gekillt sobald der echte “Release” kommt.

--[[
%% properties
%% events
172 CentralSceneEvent
%% globals
--]]

--Instanzen prüfen. Ab 2. Instanz abbrechen
if (fibaro:countScenes()>1) then -- nur eine Instanz zulassen
	fibaro:debug('Kill the second scene!')
	fibaro:abort()
end
--Verzögerung bei Attribut "HeldDown" einbauen und zweite Instanz beenden

local scene = 103 -- ID dieser Szene
local startSource = fibaro:getSourceTrigger() -- wie wurde getriggert
local button_source = fibaro:getSourceTrigger()["event"]["data"]

if 	tostring(button_source["keyAttribute"]) == "HeldDown"
    then
  	fibaro:sleep(200) --unnützen Trigger abwarten
	fibaro:startScene(101)
  	fibaro:debug("Button gehalten, Scene 101 aktiv")
  	fibaro:killScenes(scene);
end

if 	tostring(button_source["keyAttribute"]) == "Released"
    then
  	fibaro:killScenes(101)	
  	fibaro:debug('Lautstärke halten')
  	fibaro:killScenes(scene);
  	end
--[[
%% properties
%% events
%% globals
--]]

local scene = 101 -- ID dieser Szene
local startSource = fibaro:getSourceTrigger();

if startSource["type"] == "other" then
  	repeat
  	local volume= (tonumber(fibaro:getValue(83, "volume")));
	local volumeneu = (tonumber(volume -5))
	fibaro:call(83, "setVolume", volumeneu);	
	fibaro:debug("Button gehalten Lautstärke gesenkt von: " .. volume .. " auf: " .. volumeneu);
 	fibaro:sleep(1000)
	until (tonumber(fibaro:getValue(83, "volume"))) <= 5
	fibaro:killScenes(scene);
end

Soweit so gut erstmal.
Werde mal schauen das ich den RGBW 2 ran bekomme. Eventuell läuft der ja ordnungsgemäß und ich kann die Funktion perfekt machen.

Was hast du mit deinen Implants den gesteuert, inspiriere mich mal ein bisschen. Habe meine ja ggfs bald über :smiley:

Cool dass es nun funktioniert. Die gleiche Idee hatte ich auch. Leider bekomme ich beim Forum einen Zertifikatfehler an meinem Labtop angezeigt und tippe nun am Handy.
Die alten RGBWs habe ich für solche Zwecke wieder entfernt da es immer wieder Probleme gegeben hat und es in der GUI nicht schön ausgesehen hat. Evtl ist es bei den neuen besser.
Irgendwo im Forum gibt’s nen Ideenthread zum Smartimplant.
Gruß

Zertifikatfehler kann ich an meinem Dell ignorieren :man_shrugging:

Mit diesem LUA/Lösung möchte ich der Welt heute gute Nacht sagen.

Sonos per Doppeltaster steuern:
1 Smart Implant (mit Firmware Fehler oder was damit nicht stimmt…)
3 Szenen

je eine Szene für die Slider Funktion Laut und Leise (siehe oben)
eine Szene für Play, Pause und das aktivieren der Laut/Leise Szene (siehe im Folgendem)

Riesen Dank an Ändy, er hat die nötige Hürde gemeistert :handshake:

--[[
%% properties
%% events
172 CentralSceneEvent
%% globals
--]]

--Instanzen prüfen. Ab 2. Instanz abbrechen
if (fibaro:countScenes()>1) then -- nur eine Instanz zulassen
	fibaro:debug('Kill the second scene!')
	fibaro:abort()
end
--Verzögerung bei Attribut "HeldDown" einbauen und zweite Instanz beenden

local scene = 103 -- ID dieser Szene
local startSource = fibaro:getSourceTrigger() -- wie wurde getriggert
--local button_source = fibaro:getSourceTrigger()["event"]["data"]
local pressSource = fibaro:getSourceTrigger()["event"]["data"]

-- Button An/Aus
if
(tostring(pressSource["keyAttribute"]) == "Pressed")
then
  if (fibaro:getValue(83, "state") == "STOPPED")
	then
	fibaro:debug("Sonos WZ ist: " .. fibaro:getValue(83, "state"));
	fibaro:call(83, "play");
  elseif (fibaro:getValue(83, "state") == "PLAYING")
	then
	fibaro:debug("Sonos WZ ist: " .. fibaro:getValue(83, "state"));
	fibaro:call(83, "stop");
  end
fibaro:sleep (2000)
fibaro:debug("S1 ode S2 1x gedrückt, daher Sonos WZ jetzt: " .. fibaro:getValue(83, "state"));
fibaro:killScenes(scene);
end
-- Button An/Aus

-- Button Leiser
if  (tostring(pressSource["keyId"]) == "1") then
  	if (tostring(pressSource["keyAttribute"]) == "HeldDown") then
    	fibaro:sleep(200) --unnützen Trigger abwarten    
    	fibaro:startScene(101)
  		fibaro:debug("S1 gehalten, Scene 101 aktiv")
  		fibaro:killScenes(scene);
    elseif (tostring(pressSource["keyAttribute"]) == "Released") then
        fibaro:killScenes(101)	
  		fibaro:debug('S1 - Lautstärke halten')
  		fibaro:killScenes(scene);
    end
-- Button Leiser
elseif
-- Button Lauter
	(tostring(pressSource["keyId"]) == "2") then
  	if (tostring(pressSource["keyAttribute"]) == "HeldDown") then
        fibaro:sleep(200) --unnützen Trigger abwarten    
    	fibaro:startScene(104)
  		fibaro:debug("S2 gehalten, Scene 104 aktiv")
  		fibaro:killScenes(scene);
    elseif (tostring(pressSource["keyAttribute"]) == "Released") then
        fibaro:killScenes(104)	
  		fibaro:debug('S2 - Lautstärke halten')
  		fibaro:killScenes(scene);
    end
-- Button Lauter
end

Nun kann ich mich um die anderen Taster kümmern :rofl: