Master dimmerHelt plötsligt behöver du dimma ett flertal dimmers i huset till samma nivå! Helgalet! Men hur gör du!?

Enkelt! Du skapar en virtuell enhet! Till denna behöver du endast ett slider-element, och följande kod klistras in i Lua-fönstret för denna:

myList = {372, 0}

-- Loop over device table
for loop = 1, #myList do

  -- Store current device ID
  device = myList[loop]

  -- If device is not dead, call setValue with sliderValue
  if fibaro:getValue(device, "dead") == "0" then
  	fibaro:call(device, "setValue", _sliderValue_)
  end
end

-- Done!

Kort sagt, myList är en lista som innehåller device ID för de enheter du vill ska styras av den allsmäktiga mästardimmern. Vi kör en loop över listan (kom ihåg, i Lua är första elementet 1 och inte 0 som i många andra språk!), och loopen körs lika många gånger som det finns element i myList (därav #myList som returnerar längden på listan).

I loopen kollar vi så att enheten inte är död (det är ju ingen idé att skicka kommandon till en enhet som inte lyssnar), och är den aktiv skickar vi ett kommando till den där vi vänligt men bestämt beordrar den att sätta sitt dimmer-värde till mästerdimmrardimmerns nuvarande slider-värde.

Men det blir bättre! Stoppa pressarna! Tänk dig det absolut extremaste dimmerfantastscenariot: du vill dimma ALLA lampor i hela huset med samma enhet. Det är nästan lika enkelt:

-- Put HC2 IP address here
myHC2 = Net.FHttp("192.168.5.17",80);

-- Put login info here (default admin/admin)
myHC2:setBasicAuthentication("admin","admin")

-- Get all devices of type multilevelSwitch (dimmer)
response, status, errorCode = myHC2:GET("/api/devices?type=com.fibaro.multilevelSwitch");

--Convert JSON response to table data
dimmers = json.decode(response)

-- Loop over device table
for loop = 1, #dimmers do
  -- Store current device ID
  device = dimmers[loop].id
  
  -- If device is not dead, call setValue with sliderValue
  if fibaro:getValue(device, "dead") == "0" then
    fibaro:call(device, "setValue", _sliderValue_)
  end
end

Här anropar vi HC2ans eget API och hämtar in en lista av alla “multilevelSwitch” (flerlägesbrytare, eller dimmer). Observera att login-informationen kan behöva ändras då admin/admin är standarduppgifterna.

Efter inhämtningen är förfarandet ungefär det samma. Loopa över listan, kolla om noden lever och dimma den om den är det. Klart som korvspad! 😀

Dimma allt med allt!?

För dig som är hardcore-dimmare förstår vi såklart att detta inte räcker. Man nöjer sig inte med det näst bästa, och det finns inga genvägar till det perfekta ljuset. Men misströsta icke! Med en enkel scen kan du få alla dimmers att dimma varandra, genom att anropa mästardimmern! Beskåda:

--[[
%% properties
372 value
%% globals
--]]

-- Virtual Device ID, needed. Also add triggers above!
VDID = 374

-- Save the device ID that triggered the scene.
call = fibaro:getSourceTrigger()

if call.type == "property" then
  caller = call['deviceID']

-- If not triggered by device property, should not run
else fibaro:abort()
end

-- Save dim value of caller
dimValue = fibaro:getValue(caller, "value")

-- Set dim value in Virtual Device (Master dimmer)
fibaro:call(VDID, 'setSlider', dimValue)

-- Done!

Under %%properties behöver du ange de enheter som ska trigga scenen, samt vilket attribut. I detta fall “value”, som för en multilevelSwitch är dimmervärdet. OBS! En enhet per rad!

Om du har etthundratjugotre dimmers kan det därmed ta en stund att förbereda scenen, men vad gör man inte?

Scenen kollar att den anropats från en dimmer och inte manuellt, vi vill ju inte att någon klåfingrig person ska dimma lamporna åt oss, och sen sätter den vår mästerdimmer till den aktuella dimmers värde, varpå mästerdimmern skickar ut dimmervärdet till alla berörda enheter.

Klart slut! 😀