Programación LUA

linkey

  • *****
  • 609
    • Ver Perfil
Re:Programación LUA
« Respuesta #75 en: Julio 30, 2015, 13:21:44 pm »
Tengo un Nilox UPS VALUE LCD 1120VA-560W.
Aunque no sea igual me ayuda infinito ver cómo has hecho los VDs para los tuyos porque es más fácil hacer pequeños cambios. Si podrías enviarlos, sería genial.
Gracias.
Lo primero lee el artículo de Antonio, para que entiendas el funcionamiento, resumiendo:
El NAS ejecuta un script cada cierto tiempo que solicita información tanto al SAI como al propio NAS y escribe estos valores en variables globales del HC2. Necesitarás que el SAI soporte SNMP y obtener documentación al respecto para poder interrogar sobre su estado desde el NAS.
Luego los dispositivos virtuales leen esta variables y presentan los datos o actúan según su valor.
Adjunto el script que ejecuta mi NAS.

Jokin

  • *****
  • 1920
  • Meliorem domum
    • Ver Perfil
Re:Programación LUA
« Respuesta #76 en: Septiembre 02, 2015, 23:39:05 pm »
Alguien sabe cómo enviar con Lua y en HC2 un mensaje a un email que contenga:
1. Una frase y luego el contenido de una variable.
y si esto no se puede:
2. El contenido de una variable.

Mandar una frase es fácil:

   fibaro:call(54, "sendDefinedEmailNotification", "199");

Siendo "54" el recipiente de email y "199" la frase creada en el panel de notificaciones. Pero lo que no sé hacer es que me mande un email que tenga el valor de una variable global cuyo valor se ha generado durante la escena.
Lo mismo aplicaría para una notificación Push.
Gracias.

linkey

  • *****
  • 609
    • Ver Perfil
Re:Programación LUA
« Respuesta #77 en: Septiembre 06, 2015, 22:19:10 pm »
Alguien sabe cómo enviar con Lua y en HC2 un mensaje a un email que contenga:
1. Una frase y luego el contenido de una variable.
y si esto no se puede:
2. El contenido de una variable.

Mandar una frase es fácil:

   fibaro:call(54, "sendDefinedEmailNotification", "199");

Siendo "54" el recipiente de email y "199" la frase creada en el panel de notificaciones. Pero lo que no sé hacer es que me mande un email que tenga el valor de una variable global cuyo valor se ha generado durante la escena.
Lo mismo aplicaría para una notificación Push.
Gracias.
Código: [Seleccionar]
--[[
%% properties
%% globals
--]]
local emailUser = 2
local message = 'Hola Jokin para enviar email utiliza esto'
local emailSubject = 'enviar mail desde Hc2'
fibaro:call(emailUser, "sendEmail", emailSubject, message)

Jokin

  • *****
  • 1920
  • Meliorem domum
    • Ver Perfil
Re:Programación LUA
« Respuesta #78 en: Septiembre 07, 2015, 06:37:52 am »
Gracias Linkey,
Pero lo que yo necesito es enviar el contenido de una variable.
Por ejemplo:
local message = getValue(54,"power") o similar (esto es un ejemplo).
donde 54 es mi lavadora

Se puede?
Quisiera recibir un mensaje que dijera: "Su lavadora ha terminado y ha consumido 'X' vatios", siendo 'X' una variable global.
He intentado mandar por email una variable global pero no he sabido.
Utilicé tu recomendación para calcular el consumo de un proceso, generando una variable global de inicio, una de término y la variable de consumo final que sería la resta de la de término menos la de inicio. Y funciona. Me calcula cuánto consume en un determinado tiempo un electrodoméstico pero no sé cómo enviarme esta información por email, es decier, no sé cómo enviarme el valor de la variable global de consumo final.
Gracias.

linkey

  • *****
  • 609
    • Ver Perfil
Re:Programación LUA
« Respuesta #79 en: Septiembre 07, 2015, 12:25:18 pm »
Gracias Linkey,
Pero lo que yo necesito es enviar el contenido de una variable.
Por ejemplo:
local message = getValue(54,"power") o similar (esto es un ejemplo).
donde 54 es mi lavadora

Se puede?
Quisiera recibir un mensaje que dijera: "Su lavadora ha terminado y ha consumido 'X' vatios", siendo 'X' una variable global.
He intentado mandar por email una variable global pero no he sabido.
Utilicé tu recomendación para calcular el consumo de un proceso, generando una variable global de inicio, una de término y la variable de consumo final que sería la resta de la de término menos la de inicio. Y funciona. Me calcula cuánto consume en un determinado tiempo un electrodoméstico pero no sé cómo enviarme esta información por email, es decier, no sé cómo enviarme el valor de la variable global de consumo final.
Gracias.
obtén el valor de la variable global con fibaro:getGlobalValue y ponlo en el mensaje
ejemplo
Código: [Seleccionar]
local consumo = fibaro:getGlobalValue('consumo')
local message = "Su lavadora ha terminado y ha consumido "..consumo.." vatios"
local emailUser = 2
local emailSubject = 'Lavadora'
fibaro:call(emailUser, "sendEmail", emailSubject, message)

Jokin

  • *****
  • 1920
  • Meliorem domum
    • Ver Perfil
Re:Programación LUA
« Respuesta #80 en: Septiembre 07, 2015, 21:45:39 pm »
Gracias Linkey,
Como estoy siendo un buen alumno tuyo, todo eso lo estaba haciendo bien pero lo que no sabía es que para enlazar un texto a una variable había que poner "texto"..XXXX.."texto", siendo XXXX, la variable. Lo de los dos puntitos es definitivo. Todo perfecto ahora. La verdad es que sin tu ayuda, no sé qué habría hecho. Porque lo de los puntitos no lo he leído en ningún lugar.

Jokin

  • *****
  • 1920
  • Meliorem domum
    • Ver Perfil
Re:Programación LUA
« Respuesta #81 en: Septiembre 08, 2015, 07:52:02 am »
Linkey, sabes si se pueden introducir "retornos de carro" en los mensajes que se envían por email? Ya sé que esto ya es un poco fino, pero así se podrían enviar mensajes super completos del estado de los consumos generales, etc, por ejemplo.
Gracias.

linkey

  • *****
  • 609
    • Ver Perfil
Re:Programación LUA
« Respuesta #82 en: Septiembre 08, 2015, 11:38:18 am »
Linkey, sabes si se pueden introducir "retornos de carro" en los mensajes que se envían por email? Ya sé que esto ya es un poco fino, pero así se podrían enviar mensajes super completos del estado de los consumos generales, etc, por ejemplo.
Gracias.
Código: [Seleccionar]
local message = "Su lavadora ha terminado y ha consumido "..consumo..
" vatios\r\rUn saludo\r\rManuel"

Manual de referencia Lua
"Los strings literales pueden ser delimitados por comillas simples (apóstrofes) o dobles, y pueden contener las siguientes secuencias de escape de C: '\a' (pitido, bell) '\b' (retroceso, backspace), '\f' (salto de página, form feed), '\n' (nueva línea, newline), '\r' (retorno de carro, carriage return), '\t' (tabulador horizontal, horizontal tab), '\v' (tabulador vertical, vertical tab), '\\' (barra inversa, backslash), '\"' (comilla doble, quotation mark o double quote) y '\'' (apóstrofe, apostrophe o single quote). Además, una '\newline' (esto es, una barra inversa seguida por un salto de línea real) produce un salto de línea en el string."

Jokin

  • *****
  • 1920
  • Meliorem domum
    • Ver Perfil
Re:Programación LUA
« Respuesta #83 en: Septiembre 08, 2015, 15:31:48 pm »
Me quito el sombrero!
Voy a leerme el manual de referencia para ver si encuentro nuevas ideas en la programación Lua.
Gracias.

rls46

  • ****
  • 321
    • Ver Perfil
Re:Programación LUA
« Respuesta #84 en: Diciembre 09, 2015, 10:46:15 am »
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)


una pequeña aportación, modificación para hacerlo en varias zonas.
en idzonas, los ids de tantas zonas como se tengan.
para anular el modo vacaciones cambiar esta linea
jsonTable.properties.vacationTemperature = 12;
por esta
jsonTable.properties.vacationTemperature = 0;
las 3 ultimas lineas modificar según el id el móvil y los nombres de las etiquetas y variables o quitar/comentar si no se va a utilizar.

idzonas = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
for i=1, #idzonas do
-- llama a la zona
HC2 = Net.FHttp("127.0.0.1",11111);
urlapiheat = "/api/panels/heating/".. idzonas
fibaro:debug(urlapiheat)
response ,status, errorCode = HC2:GET(urlapiheat);
jsonTable = json.decode(response);
-- cambia el valor
jsonTable.properties.vacationTemperature = 12;
-- graba nuevo valor en el panel
jsonstr = json.encode(jsonTable);
response2, status2, errorCode2 = HC2:PUT(urlapiheat,jsonstr)
end
-- extras
-- envia popup a movil
fibaro:call(999, "sendPush", "Calefacción en modo AUSENTE.");
-- cambia la etiqueta del VD
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label2.value", "AUSENTE");
-- cambia la variable global
fibaro:setGlobal("Modo_calefaccion", "Ausente");
« Última modificación: Diciembre 09, 2015, 10:47:47 am por rls46 »

linkey

  • *****
  • 609
    • Ver Perfil
Re:Programación LUA
« Respuesta #85 en: Diciembre 09, 2015, 14:27:41 pm »
HC2 sin memoria libre
Con el uso,  mi controlador HC2 va consumiendo memoria que en un principio debería recuperar pero por algún motivo (quizás por mis propias escenas o dispositivos virtuales), la memoria libre llega a reducirse por debajo del 2% 0 3% y el dispositivo llega a colgarse. En ocasiones incluso es imposible realizar un soft-reset con lo que esto conlleva (desconectar el caliente).
Mas de un susto me he llevado al realizar una desconexión en caliente y ver que el dispositivo tarda en volver a arrancar del todo.
He creado un dispositivo virtual para reiniciar el sistema antes de que se colapse por si alguien tiene el mismo problema dejo aquí el proyecto completo porque pesa demasiado para ponerlo en adjuntos, el manual está en en la carpeta /bin

RToz99

  • ***
  • 219
    • Ver Perfil
Re:Programación LUA
« Respuesta #86 en: Marzo 04, 2016, 22:44:27 pm »
HC2 sin memoria libre
Con el uso,  mi controlador HC2 va consumiendo memoria que en un principio debería recuperar pero por algún motivo (quizás por mis propias escenas o dispositivos virtuales), la memoria libre llega a reducirse por debajo del 2% 0 3% y el dispositivo llega a colgarse. En ocasiones incluso es imposible realizar un soft-reset con lo que esto conlleva (desconectar el caliente).
Mas de un susto me he llevado al realizar una desconexión en caliente y ver que el dispositivo tarda en volver a arrancar del todo.
He creado un dispositivo virtual para reiniciar el sistema antes de que se colapse por si alguien tiene el mismo problema dejo aquí el proyecto completo porque pesa demasiado para ponerlo en adjuntos, el manual está en en la carpeta /bin

increíble aporte y super UTIL! Es una lástima que queden ocultos en hilos más genéricos. Creo que se debería abrir un hilo único cada vez para estas joyas! en realidad con la versión 4.0.80 no me muestra valores de mem% ni puedo variar el porcentaje, pero si funciona el botón de reinicio. He seguido las instrucciones y la única cosa que he visto diferente ha sido que cuando importaba tu el VD, mi archivo descargado se llamaba Reiniciar_HC2.vfib.json (pero no se si es una extensión añadida por github?). En cualquier caso no me funciona bien...

Gracias por compartirlo igualmente!!Tienes más cositas así? De verdad que es super últil. Una vez leí algo tuyo de temporizador, pero me cuesta mucho encontrarlo en el foro y es por eso porque queda eclipsado entre miles de mensajes menos importantes.

¿Os parece buena idea hacer un repositorio de todas estas joyas? Tal vez un hilo con últimas versiones?

linkey

  • *****
  • 609
    • Ver Perfil
Re:Programación LUA
« Respuesta #87 en: Marzo 04, 2016, 23:43:26 pm »
Para importar quita la extensión .json del nombre del fichero, yo lo tengo instalado con la version 4.080 y me funciona bien.
La verdad es que lo tenía instalado antes de actualizar a la versión.

Si no te funcionan los botones para cambiar el %, puedes ir al a las propiedades del VD, pestaña avanzado y bajas hasta el botón  '◀  downButton', pulsas el botón 'depurar' y a continuación 'comenzar', luego pruebas a pulsar el botón '◀' y en la consola te debería aparece algo como esto:
"[DEBUG] 23:42:13: 13% / 03%".
Si te devuelve algún error, dime cual es a ver si puedo depurarlo.

Un Saludo.

RToz99

  • ***
  • 219
    • Ver Perfil
Re:Programación LUA
« Respuesta #88 en: Marzo 05, 2016, 12:06:10 pm »
Para importar quita la extensión .json del nombre del fichero, yo lo tengo instalado con la version 4.080 y me funciona bien.
La verdad es que lo tenía instalado antes de actualizar a la versión.

Si no te funcionan los botones para cambiar el %, puedes ir al a las propiedades del VD, pestaña avanzado y bajas hasta el botón  '◀  downButton', pulsas el botón 'depurar' y a continuación 'comenzar', luego pruebas a pulsar el botón '◀' y en la consola te debería aparece algo como esto:
"[DEBUG] 23:42:13: 13% / 03%".
Si te devuelve algún error, dime cual es a ver si puedo depurarlo.

Un Saludo.

gracias, probado debug y pone esto
[ERROR] 12:03:52: line 10: attempt to compare number with nil

Parece claro que no puede encontrar el valor de memoria... Perdón si me he despistado con algo pero creo que no había que configurar nada. Lo he instalado después de tener la 4.0.80 operativa, por si esto ayuda.

Gracias

RToz99

  • ***
  • 219
    • Ver Perfil
Re:Programación LUA
« Respuesta #89 en: Marzo 05, 2016, 12:17:02 pm »
ampliando lo de antes de "[ERROR] 12:03:52: line 10: attempt to compare number with nil"

tampoco me notifica los mensajes (por si acaso tenía viejos, desde configuración / accesos, he eliminado todos los dispositivos del sistema por si había alguno "huérfano") y si bien el botón reinicia el HC2, no notifica al dispositivo "seleccionado".

Pienso que debe ser algo de la 4.0.80?

Gracias