LM DALI gateway
Puerta de enlace DALI
res, err = dalicmd(gwid, cmd, params)
Envía un comando DALI a la puerta de enlace especificada. Devuelve true
cuando se ejecuta con éxito y no espera respuesta, string
cuando se ejecuta con éxito y se espera respuesta, nil
y un mensaje de error en caso de falla.
Parámetros
gwid
(numero/string) id de la puerta de enlace: numero de puerta de enlace ointernal
cuando exista un DALI internocmd
(string) comando a enviar, ver tabla de comandos para los valores posiblesparams
(tabla) parámetros de comando
Params (Tabla Lua):
addrtype
(string) tipo de dirección, requerido solo para comandos direccionables, valores posibles:short
group
broadcast
address
(numero) dirección corta o de grupovalue
(numero) valor adicional a enviar
3 modos de direccionamiento soportados
broadcast
todos los esclavos deberían reaccionar:{ addrtype = 'broadcast' }
short
solo un esclavo con una dirección corta única debería reaccionar:{ addrtype = 'short', address = SLAVE_ID }
group
los esclavos pertenecientes a un grupo deberían reaccionar:{ addrtype = 'group', address = GROUP_ID }
Tipos de comandos
Si el comando es direccionable, debe proporcionar el tipo de dirección y la dirección en la tabla params
.
Si el comando espera una respuesta, debe ser direccionada para que sólo un esclavo pueda responder, de lo contrario se producirá una colisión. En caso de éxito, la respuesta es una cadena binaria, generalmente consistente en un solo byte. Puede convertirlo a un número como este:
-- consultar el estado de esclavo con dirección corta 5 en el bus interno DALI res, err = dalicmd('internal', 'querystatus', { addrtype = 'short', address = 5 }) -- Lectura correcta if res then status = res:byte() end
Si el comando tiene un rango de valores, la tabla params
debe tener un campo value
el cual es un integer en el rango especificado. Por ejemplo, el comando arc
acepta un valor de 0 a 254:
-- establecer el nivel a 42 para todos esclavo en el bus interno DALI dalicmd('internal', 'arc', { addrtype = 'broadcast', value = 42 })
Cambio de los parametros internos del esclavo
La mayoría de los parámetros se cambian a través de DTR (registro de transferencia de datos), por lo que primero debe ajustar el valor DTR a través de setdtr
y, a continuación, establecer el parámetro requerido a través de una segunda petición
-- establecer el nivel máximo de 200 para esclavo con dirección corta 5 en el bus interno DALI dalicmd('internal', 'setdtr', { addrtype = 'short', address = 5, value = 200 }) dalicmd('internal', 'storemax', { addrtype = 'short', address = 5 })
Ejemplo (usar la puerta de enlace con id 1, apagar todos los balastos, enciende al 100% el balasto con dirección corta 5):
require('user.dali') dalicmd(1, 'arc', { addrtype = 'broadcast', value = 0 }) dalicmd(1, 'arc', { addrtype = 'short', address = 5, value = 254 })
Comandos DALI
Comando | Descripción | Direccionable | Respuesta del esclavo | Rango de valor |
---|---|---|---|---|
arc | control de potencia por arco directo | 0..254 | ||
off | apagar sin fundido | |||
up | aumentar potencia usando la tasa de fundido seleccionada | |||
down | disminuir potencia usando la tasa de fundido seleccionada | |||
stepup | paso arriba | |||
stepdown | paso abajo | |||
recallmax | ir a nivel máximo | |||
recallmin | ir a nivel mínimo | |||
stepdownoff | reducir y apagar | |||
stepupon | encender y aumentar | |||
gotoscene | ir a escena | 0..15 | ||
reset | reset | |||
storeactual | almacenar nivel actual en dtr | |||
storemax | almacenar el dtr como nivel máximo | |||
storemin | almacenar el dtr como nivel mínimo | |||
storesystemfailure | almacenar el dtr como nivel de falla de sistema | |||
storepoweron | almacenar el dtr como nivel de encendido | |||
storefadetime | almacenar el dtr como tiempo de fundido | |||
storefaderate | almacenar el dtr como tasa de fundido | |||
storescene | almacenar el dtr como escena | 0..15 | ||
removescene | remover de la escena | 0..15 | ||
addtogroup | agregar al grupo | 0..15 | ||
removefromgroup | eliminar del grupo | 0..15 | ||
storeshortaddress | almacenar dtr como dirección corta | |||
querystatus | consultar estado | |||
queryballast | consultar balasto | |||
querylampfailure | consultar falla de lampara | |||
querylamppoweron | consultar alimentación de lampara | |||
querylimiterror | query limit error | |||
queryresetstate | consultar estado del reset | |||
querymissingshort | consultar falta de dirección corta | |||
queryversion | consultar numero de versión | |||
querydtr | consultar contenido del dtr | |||
querydevicetype | consultar tipo de dispositivo | |||
queryphysicalmin | consultar nivel mínimo físico | |||
querypowerfailure | consultar falla de alimentacion | |||
queryactual | consultar nivel actual | |||
querymax | consultar nivel maximo | |||
querymin | consultar nivel minimo | |||
querypoweron | consultar nive de encendido | |||
querysystemfailure | consultar nivel de falla de sistema | |||
queryfadetimerate | consultar tiempo/tasa de fundido | |||
queryscene | consultar nivel de escena (escenas 0-15) | 0..15 | ||
querygroupslow | consultar grupos 0-7 | |||
querygroupshigh | consultar grupos 8-15 | |||
queryrandomaddrh | consultar direccion al azar (alta) | |||
queryrandomaddrm | consultar direccion al azar (media) | |||
queryrandomaddrl | consultar direccion al azar (baja) | |||
terminate | terminar | |||
setdtr | establecer registro de transferencia de datos (dtr) | 0..255 | ||
initialise | inicializar | |||
randomise | aleatorizar | |||
compare | comparar | |||
withdraw | retirar | |||
searchaddrh | establecer direccion de busqueda (alto) | 0..255 | ||
searchaddrm | establecer direccion de busqueda (medio) | 0..255 | ||
searchaddrl | establecer direccion de busqueda (bajo) | 0..255 | ||
programshortaddr | programar dirección corta | 0..63 | ||
verifyshortaddr | verificar dirección corta | 0..63 | ||
queryshortaddr | consultar dirección corta | |||
physicalselection | selección física | |||
enabledevicetype | habilitar dispositivo x | 0..255 |