Programación LUA

linkey

  • *****
  • 609
    • Ver Perfil
Re:Programación LUA
« Respuesta #30 en: Abril 25, 2015, 14:09:45 pm »

--[[
%% properties
442 puerta
170 persiana
%% globals
--]]
442 puerta
170 persiana
Esto está mal, hay que poner id propiedad ej.
--[[
%% properties
170 value
%% globals
--]]
Además te sobraría una de las dos líneas, no se muy bien lo que quieres, parece que cuando se intendente abrir la persiana se compruebe que la ventana está cerrada y detenga la acción?.
Si es así solo pones que la escena se active cuando hay un cambio de estado en la persiana, en ese momento compruebe que la ventana está cerrada y si no es así pare la persiana.

if tonumber(fibaro:getValue(442, 'value')) <> 0 then
  fibaro:call(170, "stop")
end

Habréis observado que he tenido que poner "< 1" en vez de "= 0". Esto es porque si pongo "= 0" me da un error. Y como el valor es 0 para cerrada la puerta y 1 para abierta la puerta, no se me ha ocurrido otra forma de solucionarlo. Al menos no me da error y me lee "fibaro:debug  (fibaro:getValue(puerta, "value") )" dándome el valor de 0 o 1 dependiendo el estado de la puerta.
Puedes consultar las funciones de los dispositivos, durante la programación de la escena en el propio interfaz web, mientras editas la escena, en la columna de la izquierda te aparece toda la casa con sus dispositivos y sus opciones que puedes añadir a la escena

Re:Programación LUA
« Respuesta #31 en: Abril 27, 2015, 09:53:53 am »
Me podrías poner un pantallazo que mostrara dónde está esa información sobre las opciones que puedo añadir a una escena? No lo encuentro.


Enviado desde mi iPhone utilizando Tapatalk

Re:Programación LUA
« Respuesta #32 en: Abril 27, 2015, 09:57:07 am »
Aún me queda mucho por aprender en Lua. Hay algo que no debo hacer bien con la escena de la persiana. Lo único que quiero es poder abrir y cerrar una persiana teniendo en cuenta que tengo un controlador de apertura de la puerta que contiene la persiana. Lo que no sé es cómo activar el módulo de persiana para que éste se cierre o se abra.


Enviado desde mi iPhone utilizando Tapatalk

linkey

  • *****
  • 609
    • Ver Perfil
Re:Programación LUA
« Respuesta #33 en: Abril 27, 2015, 10:09:40 am »
Me podrías poner un pantallazo que mostrara dónde está esa información sobre las opciones que puedo añadir a una escena? No lo encuentro.


Enviado desde mi iPhone utilizando Tapatalk

linkey

  • *****
  • 609
    • Ver Perfil
Re:Programación LUA
« Respuesta #34 en: Abril 27, 2015, 10:12:00 am »
Me podrías poner un pantallazo que mostrara dónde está esa información sobre las opciones que puedo añadir a una escena? No lo encuentro.


Enviado desde mi iPhone utilizando Tapatalk
Cuando está editando una escena en la pantalla 'Avanzado', a la izquierda aparece una lista de los dispositivos agrupados por habitaciones, si pasas el puntero del ratón se despliegan las opciones

linkey

  • *****
  • 609
    • Ver Perfil
Re:Programación LUA
« Respuesta #35 en: Abril 27, 2015, 10:17:48 am »
Aún me queda mucho por aprender en Lua. Hay algo que no debo hacer bien con la escena de la persiana. Lo único que quiero es poder abrir y cerrar una persiana teniendo en cuenta que tengo un controlador de apertura de la puerta que contiene la persiana. Lo que no sé es cómo activar el módulo de persiana para que éste se cierre o se abra.


Enviado desde mi iPhone utilizando Tapatalk
Cuando queres abrir/cerrar la persiana?, quieres hacer una escena que al pulsar el botón ejecutar se abra la persiana?.
Lo que yo te planteé anteriormente era una escena que impidiera que se bajara la persiana si la ventana estaba abierta, suponía que la persiana se abriría o cerraría por diferentes motivos, incluso accionando el pulsador manual.
Que controlador de persianas usas, yo tengo un FGRM222 de fibaro y las funciones son:
subir open()
baja close()
parar stop()

Re:Programación LUA
« Respuesta #36 en: Abril 27, 2015, 10:30:53 am »
Gracias  de nuevo, en concreto lo que quisiera es que todas las persianas de la casa, que son siete, se cerrarán al ocaso. Así lo tengo para seis de ellas sin programación en Lua porque aún no lo sé hacer. Pero lo que me gustaría es incluir también la puerta que se puede abrir hacia fuera dentro de esa escena general para que se cerrara al ocaso. Lo que ocurre es que me da miedo que alguien se haya dejado la puerta abierta y se estropee el motor de la persiana. Por eso lo que me gustaría es que el cierre de la persiana de la puerta esté condicionado al estado de apertura o no de la puerta.
Gracias por el pantallazo y por la información de la función. La verdad es que toiene mucho sentido lo de Open y  Close. Cómo me iba a funcionar si yo ponía TurnOn y TurnOff.


Enviado desde mi iPhone utilizando Tapatalk

javifrechi

  • ****
  • 322
  • Trasegando
    • Ver Perfil
    • Domótica Doméstica
Re:Programación LUA
« Respuesta #37 en: Abril 27, 2015, 13:49:20 pm »
Como se que te gusta el arroz con leche, por debajo de la puerta te meto un adobe.

Jokin

  • *****
  • 1920
  • Meliorem domum
    • Ver Perfil
Re:Programación LUA
« Respuesta #38 en: Abril 27, 2015, 14:08:28 pm »
Así da gusto!
Gracias javifrechi.

A ti Linkey, pero si hasta te informa del ID del dispositivo con un simple pasar por encima. Sorprendente la de acciones que se muestran para hacer. Yo, antes, cada vez que quería conocer el ID, me tenía que volver desde la escena, buscar el dispositivo y ver el ID que tenía. Ahora todo es infinitamente más fácil. Lo que retrasa la ignorancia...
Gracias!

Jokin

  • *****
  • 1920
  • Meliorem domum
    • Ver Perfil
Re:Programación LUA
« Respuesta #39 en: Mayo 02, 2015, 14:27:54 pm »
Linkey,

Cómo se podría poner para hacer que el "anochecer" lo considerara, 30 min antes sobre la programación que mandaste? En particular quiero que la escena actúe al 30 min antes del anochecer.
También me pusiste para poner una hora concreta y funciona bien pero lo que me interesa es que la hora vaya cambiando con el anochecer pero que el evento ocurra un poco antes (30 min).

 -- anochecer
  local anochecer = fibaro:getValue(1, 'sunsetHour')
  miInstante.min = tonumber(string.format("%1d", anochecer:sub(4,5)))
  miInstante.hour = tonumber(string.format("%1d", anochecer:sub(1,2)))
  local sunsetTime = os.time(miInstante)

Gracias,
Jokin

linkey

  • *****
  • 609
    • Ver Perfil
Re:Programación LUA
« Respuesta #40 en: Mayo 03, 2015, 23:25:18 pm »
Jokin
No entiendo muy bien la pregunta, lo que te pasé era una función que devuelve si un instante determinado es de noche o no.
Si lo que quieres saber es si dentro de un determinado tiempo será de noche pasa a la función el instante actual mas el tiempo en segundos que quieres añadir.

ej. para 30min.:
Código: [Seleccionar]
if _esNoche(os.time()+(30*60)) then
  código
end

os.time() es una función lúa que devuelve un número determinado de segundos que han transcurrido desde un instante determinado por el sistema, lo que representa el instante actual.

Jokin

  • *****
  • 1920
  • Meliorem domum
    • Ver Perfil
Re:Programación LUA
« Respuesta #41 en: Mayo 04, 2015, 07:03:25 am »
Gracias Linkey,

Es justo lo que quería. Ya lo he cambiado. Ahora sólo esperar a que esta noche todo se active 30 min antes.

Jokin

  • *****
  • 1920
  • Meliorem domum
    • Ver Perfil
Re:Programación LUA
« Respuesta #42 en: Mayo 04, 2015, 11:18:09 am »
Linkey,
No quiero abusar de tu bondad y Lua's sabiduría pero podrías explicar cómo hacer que una acción afecte a un grupo de dispositivos y que este grupo sea variable para poder cambiar los dispositivos ad hoc. Me explico. Yo quiero que un montón de luces de mi casa se apaguen a los 15 min de haberse encendido. Pero quiero decidir qué luces entrarían dentro de la escena a medida que voy instalando o dependiendo de otras razones varias. Lo que quiero evitar es hacer una escena por cada luz. Tengo más 25 luces diferentes controladas por dispositivos FIBARO.
Lo que yo había pensado es hacer una escena para que pasara lo que pasara el grupo de luces X1, X2, X3, X4 se apagara a los 15 min de haberse encendido y que este grupo de luces X1, X2, X3 yo lo fuera cambiando bien quitando luces del grupo o añadiendo luces al mismo.
A mí lo que me complica es que al querer que se apaguen a los 15 min de estar encendidas, en el grupo de luces seleccionadas habrá luces que están apagadas y otras luces que se habrán encendido a distintos tiempos por lo que el tiempo de apagado de cada luz (a los 15 min desde su encendido) es diferente para cada una de las luces del grupo.
Muchas gracias.

linkey

  • *****
  • 609
    • Ver Perfil
Re:Programación LUA
« Respuesta #43 en: Mayo 04, 2015, 18:07:24 pm »
Lo más sencillo sería decirle a cada interruptor en el parámetro correspondiente que se apague de forma automática a los 15min y no hacer ninguna escena.
Pero si quieres hacer una única escena , lo primero que hay que tener claro son tres cosas
 evento que dispara la escena
  acciones
   dispositivos afectados

La acción sería apagar “fibaro:call(id, "turnOff”)”
Los dispositivos x1,x2,x3
El evento 15 minutos después de que se enciendan el dispositivo.

Lo primero, en la cabecera de la escena tienes que declarar todos los posibles dispositivos que pueden disparar la escena, y es en la cabecera donde tendrás que añadir o quitar los dispositivos implicados en cada momento, de tal forma que no hará falta que toques el resto de la escena, solo cambia los dispositivos en la cabecera.
Código: [Seleccionar]
--[[
%% properties
x1 value
x2 value
x3 value
--]]

Cuando cambie el valor de cualquiera de los dispositivos implicados se iniciará una instancia de la escena, con esto quiero decir que se puede ejecutar varias veces la escena y puede que en un momento dado se estén ejecutando varias instancias.

Necesitarás saber que dispositivo a cambiado en cada momento, esto lo consigues con fibaro:getSourceTrigger(), te devuelve una tabla que, dependiendo de como se ha iniciado la escena contiene diferentes valores, si la escena se disparó por cambio de alguna propiedad de los dispositivos indicados en la cabecera (que es tu caso), la tabla contiene ‘deviceID’ y ‘propertyName’, justamente lo que necesitas para saber sobre que dispositivo actual.

Así, cuando se activa uno de los dispositivos por encendido solo queda esperar el tiempo estipulado y justo antes de intentar apagar comprobar que el tiempo desde su último cambio sigue siendo mayor, de esta forma puedes encender y apagar y solo se apagará cuando pase el tiempo definido desde la última vez que se encendió.
Código: [Seleccionar]
local valor, instante = fibaro:get(deviceID, 'value')
Todo junto:
Código: [Seleccionar]
--[[
%% properties
x1 value
x2 value
x3 value
--]]

local elapTime = 15 -- minutos
local startSource = fibaro:getSourceTrigger()

if startSource['type'] == 'property' then
  local deviceID = startSource['deviceID']
  local propertyName = startSource['propertyName']
  local value = fibaro:getValue(deviceID, 'value')
  --fibaro:debug('accionado id '..deviceID..' '..propertyName..' '..value)
  if propertyName == 'value' and tonumber(value) > 0 then
    --fibaro:debug('esperando...')
    fibaro:sleep(elapTime*60*1000)
    -- calcular el tiempo que lleva el dispositivo sin cambiar de estado
    local valor, instante = fibaro:get(deviceID, 'value')
    local diferenciaTiempo = os.time() - instante
    --fibaro:debug('ha pasado '..diferenciaTiempo..'seg')
    -- si el tiempo sin cambiar es mayor o igual al tiempo indicado
    if tonumber(valor) > 0 and  diferenciaTiempo >= (elapTime*60) then
      -- apagar el dispositivo
      --fibaro:debug('Apagar '..deviceID)
      fibaro:call(deviceID, 'turnOff')
    end
  end
end

Jokin

  • *****
  • 1920
  • Meliorem domum
    • Ver Perfil
Re:Programación LUA
« Respuesta #44 en: Mayo 05, 2015, 07:26:31 am »
Wow!
Linkey, estoy impresionado.
Esto sí que es está siendo un curso de Lua a fascículos... ;)
Muchas gracias.