This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm that you accept these cookies being set.

DMX lighting control
#1
This is again a work in progress that might be used as inspiration. I have this as a user script that I include in KNX objects to turn DMX lights on/off or to a specific value. All DMX in my home are eldoleds. The user script I use is called user.mydmx

What I am working on is the dimming part... not really sure why it is not working. 


Code:
-- set of variables for zones in the apartment
-- these are the DMX channels to be set
alllights = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}
bathroomlights = {7,8}
bathroomheadlight = {7}
bathroomfloor = {20}
livinglights = {5,6,9,10,11,12,14,15,16,17,18,19}
kitchenlights = {13}
bedroomlights = {1,2,3}
entrancelights = {4}

-- turns DMX stripe to full on or off based on two groups

function dmxtoggle(channel, state)
  -- group that contains the value for ON. I use a slider to define the intensity of on/off
  on = grp.getvalue('5/7/17')
  -- group that contains the value for OFF
  off = grp.getvalue('5/7/18')
  
  if (state == true) then
    DMX.set(channel, on)
    return on
  else
    DMX.set(channel, off)  
    return off
  end
end

-- loops through all lights
-- lights is an array of the channel(s) to be set
-- state is the state of the group
-- stategroup is the group that holds the state of this light
-- slider is the group of a slider for setting the light level
function dmxlooptoggle(lights, state, stategroup, slider)
  
  for index, value in ipairs(lights) do
    sliderstate = dmxtoggle(value, state)
  end
  
  -- write state to state group (that way pushbuttons know the state)
  grp.write(stategroup, state)
    
  -- if a slider object was provided, then update the internal value
  -- this helps keep the visualization consistent

  grp.update(slider, sliderstate)
  
end

function dmxloopset(lights, value)
  for index, channel in ipairs(lights) do
    DMX.set(channel, value)
  end
end

-- dimm light up
function dmxdimmup(lights, intencity)
  for index, value in ipairs(lights) do
    intencity = intencity + 1
    DMX.set(value, intencity)
  end
end

-- dimm light down
function dmxdimmup(lights, intencity)
  for index, value in ipairs(lights) do
    intencity = intencity - 1
    DMX.set(value, intencity)
  end
end

-- make it easy to show if a light is on off when also using sliders
function onoffvisu(onoffgroup, state)
  if (state > 0) then
    -- set on/off to on
    grp.write(onoffgroup, true)
  else
    -- set on/off to off
    grp.write(onoffgroup, false)
  end
end

An example of usage:

Code:
require('user.mydmx')
dmxlooptoggle(livinglights, event.getvalue(),'5/7/21','5/1/21')

This turns the lights in the living room on or off depending on the value of the KNX object.
Reply
#2
Hi, very nice work and thanks for sharing. Did you ever get the dimming part to work?
(Bump)
Reply


Forum Jump: