New: Read this article in english
This article is now available in english on siio.com.[/vc_column_text][/vc_column_inner][/vc_row_inner][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]Hat man mehrere Fibaro RGB Module im Einsatz, so kann es sinnvoll sein diese zu synchron zu steuern. Hier ein kleines LUA Script für das Fibaro Home Center 2, welches genau das löst.
In unserem Wohnzimmer mit offener Küche Amerikanischer Art verwende ich inzwischen drei Fibaro RGB Module, welche ein LED Stripe in der Küche, ein LED Stripe hinter dem Treppengeländer und eine LED Wofi Leuchte ansteuern. Da ich mich von meiner eigenen Wohnung penetriert fühle, wenn alle LEDs eine andere Farbe haben, musste eine Lösung her.
Mit folgendem LUA Script können beliebig viele LED Stripes auf die gleiche Farbe synchronisiert werden wie ein zuvor definierter "MASTER" - Bitte beachte, auch der ein- bzw. ausschalt- Zustand wird synchronisiert, sowie auch die Programme.
Folgendes Script einfach in eine LUA Szene kopieren und mit den eigenen Variablen für den Master und den bzw. die Slaves befüllen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
--[[ %% properties 155 color %% globals --]] local id_master = 155; -- ID des Master (bitte ID aendern) local id_slaves = {125,184}; -- ID des Slaves, getrennt durch Komma {1}, {1,2,3} local debug = true; -- Debug an oder aus if debug then fibaro:debug("Syncing RGB"); end function split(s, pattern, maxsplit) local pattern = pattern or ' ' local maxsplit = maxsplit or -1 local s = s local t = {} local patsz = #pattern while maxsplit ~= 0 do local curpos = 1 local found = string.find(s, pattern) if found ~= nil then table.insert(t, string.sub(s, curpos, found - 1)) curpos = found + patsz s = string.sub(s, curpos) else table.insert(t, string.sub(s, curpos)) break end maxsplit = maxsplit - 1 if maxsplit == 0 then table.insert(t, string.sub(s, curpos - patsz - 1)) end end return t end local result = split(fibaro:getValue(id_master, "color"), ',') if debug then fibaro:debug(result[1]..","..result[2]..","..result[3]..","..result[4]); end for i = 1, #id_slaves do if (result[1] == "0" and result[2] == "0" and result[3] == "0" and result[4] == "0" and (tonumber(fibaro:getValue(id_master, "currentProgramID")) > 0)) then if debug then fibaro:debug(fibaro:getValue(id_master, "currentProgramID")); end fibaro:call(id_slaves[i], "startProgram", fibaro:getValue(id_master, "currentProgramID")); else fibaro:call(id_slaves[i], "setColor", result[1], result[2], result[3], result[4]) end end |
Damit die Szene auch in der HC2 Oberfläche hübsch aussieht hier noch ein passendes Icon
[/vc_column_text][/vc_column][/vc_row]
Hallo, vielen Dank für das tolle Tutorial! Leider bekomme ich eine Fehlermeldung sobald ich beim Master RGB die Farben anpasse. Könntet Ihr mir helfen? Danke schon mal im Voraus [ERROR] 17:00:23: line 11: unexpected symbol near '&'
Hallo hallo,
ich hab das Script auch laufen, mit zwei RGBW Modulen.
Wenn ich bei dem Master ein Programm starte z.b. LAPD u d das dann wieder beende, übernimmt das nicht der Slave. Der blinkt dann munter weiter im LAPD Modus.
Woran kann das liegen.
Ansonsten klasse Script.
Grüße
gringo
Hi,
versuch mal folgendes Skript. Das funktioniert bei mir ohne Probleme :)
--[[
%% properties
33 color
%% globals
--]]
local fromID = 33;
local toID = 26;
function setTheColour (deviceID, colourString)
local RGBWTable= {}
local i = 1
for value in string.gmatch(colourString,"(%d+)") do
RGBWTable[i] = value
i = i + 1
end
fibaro:call(deviceID, "setColor", RGBWTable[1], RGBWTable[2], RGBWTable[3], RGBWTable[4])
end
local trigger = fibaro:getSourceTrigger()
if (trigger['type'] == 'property') then
if (trigger['propertyName'] == 'currentProgramID') then
fibaro:call(toID, 'startProgram', fibaro:getValue(fromID, 'currentProgramID'))
if (fibaro:getValue(fromID, 'currentProgramID') == '0') then
setTheColour(toID, fibaro:getValue(fromID, 'color'));
end
elseif (trigger['propertyName'] == 'color') then
if (fibaro:getValue(fromID, 'currentProgramID') == '0') then
setTheColour(toID, fibaro:getValue(fromID, 'color'));
end
end
end
hi boomx,
erstmal riesen dank.
hab das script grad installiert. läuft gut. allerdings macht es das fast gleiche wie das von crissxceoss.
bei deinem script startet nur ein RGBW modul ein programm. das andere behält die eingestellte farbe bei.
bei crissxcross script, starten ja beide das programm.
gleich bei beiden scripten ist das nicht beide RGBW module. beim beenden des programmes des master RGBW modul die in diesem eingestellte farbe annehmen, das slave modul muss separat geändert werden.
grüße
gringo
Eigentlich sollte er das machen; hat er zumindest mal ;) . Muss es mir nachher mal anschauen und testen. Meld mich dann nochmal.
Hab den Fehler gefunden. Läuft jetzt ohne Probleme :)
Findest du hier: http://siio.de/board/thema/rgbw-sync/
Viel Spass :)
[DEBUG] 00:18:20: RGBW-Programm gestartet. Sync
[DEBUG] 00:18:42: Color gesetzt. Sync
[DEBUG] 00:22:44: RGBW-Programm gestartet. Sync