Programación LUA

linkey

  • *****
  • 609
    • Ver Perfil
Programación LUA
« en: Febrero 07, 2015, 00:41:16 am »
He abierto este hilo con la intención de iniciar un sitio donde consultar y compartir dudas sobre programación de escenas y dispositivos virtuales en LUA, y sobre todo, que podamos hablar en nuestro idioma a ver si así me entero al mejor.
Sería interesante conocer que ideas tenemos para dar solución a las diferentes situaciones del mundo de la automatización y como implementarlas.
Para empezar voy compartiendo un problema y como creo que se puede solucionar programando un dispositivo.
¿No os has ocurrido nunca situaciones como estas?:
Citar
Papa déjame la luz de la mesilla dada un ratito hasta que me duerma, con mi sistema domótico no tengo problema, desde mi cama la apago con el móvil. Pasados unos minutos... click apago.
 !PAPA se ha apagado¡. es pronto…
Espera que la enciendo, pasados otros minutos te quedas dormido y la luz no se apaga en toda la noche.
Podría haber programado una escena, pero justo en ese momento que me hacía falta y por la noche.
Cariño deja encendido el humidificador que está la habitación muy seca, cuando te vayas a la cama lo apagas, es que me iba ya. Pero con mi interruptor Wall Plug lo podría apagar.
Necesitaría un temporizador que me permita apagar cualquier dispositivo de una habitación pasado un periodo de tiempo determinado, rápido de  programar y si tuviera uno en cada habitación mejor, pero eso es una pasta, no se podría programar.
Os dejo mi temporizador, espero que os guste y sobre todo que lo mejoremos entre todos.

linkey

  • *****
  • 609
    • Ver Perfil
Re:Programación LUA
« Respuesta #1 en: Febrero 07, 2015, 19:00:53 pm »
Dejo un par de iconos para el temporizador.

phroc

  • *
  • 5703
  • Belle époque
    • Ver Perfil
    • PR-DOMOTICA
Re:Programación LUA
« Respuesta #2 en: Febrero 09, 2015, 10:49:05 am »
Yo LUA, de lejos... jeje

Alguna cosa hice cuando estaba en Vera Lite, pero poco.

A ver si alguien entendido en la materia nos puede ayudar. Antonio, redactor de Domótica Doméstica, le da bastante a LUA tengo entendido.

¡Muy chulo el temporizador!
https://pr-domotica.es/

Communication Manager & Business Manager Spain at  NodOn
Consultoría en domótica inalámbrica e IoT
Formación Oficial Jeedom
Formación LoRa

Re:Programación LUA
« Respuesta #3 en: Febrero 09, 2015, 21:52:11 pm »
Jajajaja

La verdad es que yo no puedo entender la domótica sin LUA. Creo que no tengo una sola escena o dispositivo virtual sin LUA. Será que me gusta complicarme.

En cuanto al temporizador la verdad es que una cosa que nunca me había planteado. Me parece que está bastante bien la idea. No he entrado a valorar el código porque no he tenido un minuto para ponerme a ello. Es más, Philippe, te debo un artículo sobre BT4 que te confirmo que funciona muy bien.

A lo que iba, que si queremos incorporar este tipo de temporizadores en escenas os recomiendo GEA.

¿Qué es GEA? Es una navaja suiza, que hace de todo. Lo mejor es que busquéis GEA Fibaro LUA en Google y leáis la explicación que da su creador (Steven).

Re:Programación LUA
« Respuesta #4 en: Febrero 10, 2015, 08:17:05 am »
A mi me haría falta un cursillo de LUA.

linkey

  • *****
  • 609
    • Ver Perfil
Re:Programación LUA
« Respuesta #5 en: Febrero 10, 2015, 22:47:25 pm »
¿Qué es GEA? Es una navaja suiza, que hace de todo. Lo mejor es que busquéis GEA Fibaro LUA en Google y leáis la explicación que da su creador (Steven).
He mirado por encima que es GEA y me parece una pasada Bueno yo estoy empezando, tengo un par de escenas para controlar todas las situaciones sin tener que repetir escenas y algún dispositivo todo con LUA pero nada que ver con esto.
Me gustaría hacer desarrollos en este sentido y documentados es Español.
No he entrado a valorar el código porque no he tenido un minuto para ponerme a ello
Gracias por tu comentario, el código no creo que sea nada especial y supongo que bastante mejorable, si algún día lo puedes mirar te agradeceré tus comentarios.

Saludos
 

linkey

  • *****
  • 609
    • Ver Perfil
Re:Programación LUA
« Respuesta #6 en: Febrero 10, 2015, 22:48:04 pm »
Yo LUA, de lejos... jeje

Alguna cosa hice cuando estaba en Vera Lite, pero poco.

A ver si alguien entendido en la materia nos puede ayudar. Antonio, redactor de Domótica Doméstica, le da bastante a LUA tengo entendido.

¡Muy chulo el temporizador!
Gracias.

linkey

  • *****
  • 609
    • Ver Perfil
Re:Programación LUA
« Respuesta #7 en: Marzo 03, 2015, 13:58:00 pm »
Hola, un saludo a toda@s,  a ver si me podéis ayudar (V4.033 Net.Http)

Tengo un dispositivo virtual para poder desde el móvil forzar la programación del panel de calefacción cambiando el valor del modo vacaciones 'vacationTemperature' y desde que he actualizado el HC2 a v4.033 me ha dejado de funcionar.

Sabe alguien si ha cambiado la manera de modificar los valores de los paneles?:

HC2 = Net.FHttp("IP",80)
HC2:setBasicAuthentication("USER", "PASSWORD")
-- Obtener valor de temperatura vacaciones
response ,status, errorCode = HC2:GET("/api/panels/heating?id=2")
jsonTable = json.decode(response)
-- cambiar tabla en Lua
jsonTable.properties.vacationTemperature = nuevaTemp;
-- enviar valor de temperatura
json = json.encode(jsonTable);
HC2:PUT("/api/panels/heating?id=2", json)


linkey

  • *****
  • 609
    • Ver Perfil
Re:Programación LUA
« Respuesta #8 en: Marzo 18, 2015, 21:15:45 pm »
Hola, un saludo a toda@s,  a ver si me podéis ayudar (V4.033 Net.Http)

Tengo un dispositivo virtual para poder desde el móvil forzar la programación del panel de calefacción cambiando el valor del modo vacaciones 'vacationTemperature' y desde que he actualizado el HC2 a v4.033 me ha dejado de funcionar.

Sabe alguien si ha cambiado la manera de modificar los valores de los paneles?:

HC2 = Net.FHttp("IP",80)
HC2:setBasicAuthentication("USER", "PASSWORD")
-- Obtener valor de temperatura vacaciones
response ,status, errorCode = HC2:GET("/api/panels/heating?id=2")
jsonTable = json.decode(response)
-- cambiar tabla en Lua
jsonTable.properties.vacationTemperature = nuevaTemp;
-- enviar valor de temperatura
json = json.encode(jsonTable);
HC2:PUT("/api/panels/heating?id=2", json)

Me auto respondo por si le sirve a alguien más.
en la version 4 hay que cambiar el código donde se usaba "?id=nn" hay que usar /nn.
Ejemplo:
v3.xx
HC2:PUT("/api/panels/heating?id=2", json)
v4.xx
HC2:PUT("/api/panels/heating/2", json)

linkey

  • *****
  • 609
    • Ver Perfil
Re:Programación LUA
« Respuesta #9 en: Marzo 18, 2015, 21:20:39 pm »
He visto que en las v4.xx de HC2 no funcionan del todo bien los mensajes de log del dispositivo virtual Temporizador que colgué, así que añado el parche.
Hay que cambiar el código del main loop por este.
Saludos

Jfco

  • ****
  • 293
  • Mas de 10 años con X10 y ahora me paso a Z-Wave!!
    • Ver Perfil
    • La Séptima Ruta
Re:Programación LUA
« Respuesta #10 en: Marzo 19, 2015, 14:29:27 pm »
Pues vaya!!
Creo que lo de Lúa que quería aprender lo voy a dejar para cuando saquen una versión estable que no cambie a cada actualización.



Enviado desde mi iPhone utilizando Tapatalk
Mas de 10 años con X10 y ahora me paso a Z-Wave!! Ya me vale..

linkey

  • *****
  • 609
    • Ver Perfil
Re:Programación LUA
« Respuesta #11 en: Marzo 22, 2015, 23:01:41 pm »
Por si le interesa a alguien.
Las funciones json.decode y json.encode que solo se podían usar en dispositivos virtuales, ahora también funcionan en las escenas, al menos en la versión v4.037 que es la que tengo instalada.

linkey

  • *****
  • 609
    • Ver Perfil
Re:Programación LUA
« Respuesta #12 en: Abril 21, 2015, 13:59:15 pm »
Para lo de los extractores (creo que hay que usar 'power', pruébalo) y para cualquier otro caso parecido en el que:
Si se activa un dispositivo y se cumple una condición, pasado (o no) un tiempo si se sigue cumpliendo la condición, se activa ortro dispositivo que finalmente pasado otro tiempo se apaga, puedes usar una escena como esta:

Código: [Seleccionar]
--[[
%% properties
xx value
--]]

local dispActuador = xx --pon aquí el número id del dispositivo que inicia la acción
local dispActuado = yy --pon aquí el número id del dispositivo destino de la accion
local tiempoEncendido = t --pon aquí el tiempo(seg)de espera hasta comprobar encendido
local tiempoApagado = t --pon aquí el tiempo(seg) para apagar a partir del encendido
local propiedad = 'power'
local valor = vvv -- pon el valor que ha de superar para complir la condición.
--[[ Por ejemplo si en propiedad es 'value' y en valor 0 significa que el
dispositivo está encendido, si la propiedad es 'power' y el valor es 190, significa
que ha superado un consumo de 190Wats (por defecto la placa pude tener un consumo
de energía reactiva ]]--

local startSource = fibaro:getSourceTrigger()

-- funciona para indicar si una condición se cumple
function _condicion()
  if tonumber(fibaro:getValue(dispActuador, propiedad)) > valor then return true end
  return false
end

-- solo se actua si se cumple la condición principal
-- o se pulsa a mano
if (_condicion()) or
   (startSource["type"] == "other") then
  fibaro:sleep(tiempoEncendido*1000)
  -- si se inicia otra escena igual esta se suicida
  if fibaro:countScenes() > 1 then
    fibaro:abort()
  end
  if _condicion() then
    fibaro:call(dispActuado, "turnOn")
    fibaro:sleep(tiempoApagado*1000)
    fibaro:call(dispActuado, "turnOff")
  end
end

Re:Programación LUA
« Respuesta #13 en: Abril 21, 2015, 22:19:15 pm »
Hola, linkey:
Mejor en este hilo.
Yo sigo leyendo sobre Lua.
He probado lo de la placa de inducción y no funciona pero no parece un problema de programación. El problema es que el dispositivo cuando la placa se enciende no reporta cambio alguno en power. Aunque si cambio en energy. El problema es que energy es el consumo acumulado en Kw/h por lo que un simple cambio de 0.1 requiere de bastante tiempo la placa funcionando. El por qué no reporta el cambio de power no lo sé. Podría ser un problema de compatibilidad entre el Aeon y Fibaro.
Me gustaría intentarlo con energy pero además de lo que te comentaba del cambio lento de este valor es que necesito conocer el valor de inicio. Por eso te pregunto si se puede hacer con Lua el que una variable coja el valor de energy al principio y luego compare con ese valor+ 0.1, por ejemplo.


Sent from my iPad using Tapatalk

Jokin

  • *****
  • 1920
  • Meliorem domum
    • Ver Perfil
Re:Programación LUA
« Respuesta #14 en: Abril 23, 2015, 12:51:34 pm »
Más sobre Lua.

Yo sigo intentando hacer mis pinitos en Lua.
A la escena que me escribió linkey relacionada con que se encendiera una luz con la presencia pero que se apagara si se encendían otras luces, le he querido añadir el factor tiempo y que esta escena sólo esté active por la noche. Y he añadido:

local LuzMovCocina = fibaro:getGlobal('LuzMovCocina')

-- ver si la escena tiene que estar activa o no

if LuzMovCocina == "Desactivada" then
     fibaro:debug('Escena desactivada')
  fibaro:abort()
  else
-- aquí me dice cómo está la variable LuzMovCocina
       fibaro:debug(fibaro:getGlobal('LuzMovCocina'))
end

Parece que funciona. Pero quería saber si esta es la forma correcta de hacerlo.
LuzMovCocina es una variable que dice "Activa" o "Desactivada" dependiendo el horario pero requiere de hacer otra escena para definir la variable.

Habría alguna forma de hacerlo sin crear una variable y una escena que definiera la variable?
En otras palabras, hay alguna forma de crear en Lua algo así como:

If "son más de las 7:00am y menos de 08:00pm" then fibaro:abort () else todo continua...

Esto simplificaría mucho pensando en aplicar este método a cada escena que no comparte las mismas variables.
Gracias.