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.

Art-Net DMX
#21
(04.02.2020, 13:09)admin Wrote: You can run the sending script on the same device. Just set IP to 127.0.0.1


Thanks that works perfectly, now to get an art net to dmx converter to test with. Once again thank you so much for your help
Reply
#22
I finally installed at the clients site, Using an Enttec DMX to Artnet. The script works well for presets , ie setting dmx 1 to 255, however if a slider is used eg sliding up from 0 to 255, where eg value 1,5,7,10,14 etc are sent out, the shac(LM) has trouble keeping up with all the packets of data being sent. This results in at first the light matching the slider but very quickly it starts lagging, so by the time the slider reaches 255, it may be a few second before the shac(LM) changes the light level to 255. Is there any way of speeding up the script?
Reply
#23
(03.02.2020, 12:51)admin Wrote: An example of Art-Net receiver. It ignores sequence and universe numbers which are not needed for general use. Edit mapping table to select which groups addresses are mapped to DMX channel numbers starting from 1. Output value for each channel is 1 byte (0..255).

Code:
if not server then
  mapping = {
    [1] = '32/1/1',
    [2] = '32/1/2',
    [3] = '32/1/3',
  }

  server = require('socket').udp()
  server:settimeout(1)
  server:setsockname('*', 0x1936)

  header = 'Art-Net' .. string.char(0, 0, 0x50)
  values = {}

  function parse(data)
    local count, value

    if data:sub(1, #header) ~= header then
      return
    end

    count = #data - 18

    for i = 1, count do
      value = data:byte(i + 18)

      if value ~= values[ i ] then
        values[ i ] = value

        if mapping[ i ] then
          grp.update(mapping[ i ], value)
        end
      end
    end
  end
end

data = server:receive()
if data then
  parse(data)
end
Regarding this. Is there any way to have the LM separate commands based on Universe? My client  want's to use universe 3 on art-net to control KNX lights on/off and value dim. Universe 1 and 2 are used for stagelights.
Reply
#24
Try this:
Code:
if not server then
  mapping = {
    [1] = '32/1/1',
    [2] = '32/1/2',
    [3] = '32/1/3',
  }

  server = require('socket').udp()
  server:settimeout(1)
  server:setsockname('*', 0x1936)

  header = 'Art-Net' .. string.char(0, 0, 0x50)
  values = {}

  function parse(data)
    local count, value

    if #data < 19 or data:sub(1, #header) ~= header then
      return
    end

    local univlo, univhi = data:byte(15, 16)
    local universe = univhi * 256 + univlo

    if universe ~= 3 then
      return
    end

    count = #data - 18

    for i = 1, count do
      value = data:byte(i + 18)

      if value ~= values[ i ] then
        values[ i ] = value

        if mapping[ i ] then
          grp.update(mapping[ i ], value)
        end
      end
    end
  end
end

data = server:receive()
if data then
  parse(data)
end
Reply
#25
(07.05.2024, 13:07)admin Wrote: Try this:
Code:
if not server then
  mapping = {
    [1] = '32/1/1',
    [2] = '32/1/2',
    [3] = '32/1/3',
  }

  server = require('socket').udp()
  server:settimeout(1)
  server:setsockname('*', 0x1936)

  header = 'Art-Net' .. string.char(0, 0, 0x50)
  values = {}

  function parse(data)
    local count, value

    if #data < 19 or data:sub(1, #header) ~= header then
      return
    end

    local univlo, univhi = data:byte(15, 16)
    local universe = univhi * 256 + univlo

    if universe ~= 3 then
      return
    end

    count = #data - 18

    for i = 1, count do
      value = data:byte(i + 18)

      if value ~= values[ i ] then
        values[ i ] = value

        if mapping[ i ] then
          grp.update(mapping[ i ], value)
        end
      end
    end
  end
end

data = server:receive()
if data then
  parse(data)
end

When logging the "server" variable i get this status: udp{unconnected}: 0xb6e42ac0
Reply
#26
This is correct, UDP server cannot be in a connected state, only UDP client can.
Consider changing grp.update() to grp.checkupdate().
Reply
#27
(07.05.2024, 13:20)admin Wrote: This is correct, UDP server cannot be in a connected state, only UDP client can.
Consider changing grp.update() to grp.checkupdate().

I still do not get any values. Is there any other diagnostics I can add?
the variable "data" returns NIL
Reply
#28
You should check the sending side settings.
Reply


Forum Jump: