Scripts
De eedomus - Documentación
Contenido |
Los scripts HTTP en el controlador eedomus
Este componente del SDK eedomus le permite alojar y ejecutar su propio código en el controlador eedomus.
En primer lugar, debe conectarse a su cuenta eedomus en http://secure.eedomus.com/.
A continuación, vaya a la siguiente URL:
http://ip_de_su_controlador_eedomus/script/
Uso
Los scripts de usuario creados se pueden invocar de distintas maneras:
- Manualmente, para probarlos: haciendo clic en Ejecutar en la página de scripts de eedomus.
- Manualmente: introduciendo una URL del tipo http://ip_de_su_controlador_eedomus/script/?exec=MiScript.php en un navegador o cualquier otro software o equipo capaz de realizar llamadas HTTP.
- Mediante un sensor HTTP eedomus: éste se puede actualizar de forma regular o a través de una regla.
- Mediante un actuador HTTP eedomus que usted puede activar manualmente o a través de una regla.
Limitaciones
Para evitar riesgos de desbordamiento de los scripts eedomus, se aplican algunas limitaciones:
- El tamaño de cada script está limitado a 50 Kb
- El tiempo de ejecución de los scripts está limitado a 30 segundos
- El uso de la memoria por parte de los scripts está limitado.
Lenguaje de script
La sintaxis utilizada en los scripts está basada en el lenguaje PHP. Los scripts deben tener la extensión ".php".
Por consiguiente, las variables se definen de la siguiente forma:
$pi = 3.145916; /*Declaración de mi variable "Pi"*/
Las structuras permitidas son las siguientes:
La creación de tablas está permitida:
Las siguientes funciones están permitidas:
abs, acos, addslashes, array, array_key_exists, array_merge, array_reverse, asin, atan, base64_encode, bcpow, ceil, chr, chunk_split, cos, count, currentdate, dechex, define, deg2rad, die, echo, empty, exp, explode, floor, fmod, hexdec, http_build_query, implode, in-array, isset, key, , log, md5, microtimemktime, next, , ord, parse_str, pow, preg_match, preg_match_all, preg_replace, printf, rad2deg, rand, rawurlencode, round, sha1, sin, sizeof, sqrt, stripslashesstrlen, str_pad, strpos, strrchr, str_repeat, str_replace, strtolower, strtotime, strtoupper, substr, tan, time, trim, uniqid, urlencode, usleep, utf8_decodeutf8_encode, var_dump, error_reporting
Sólo en eedomus+:
socket_bind, socket_close, socket_create, socket_connect, socket_last_error, socket_recvfrom, socket_sendto, socket_set_option, socket_strerror, socket_writegetprotobyname
Funciones específicas
getArg($var, $mandatory = true, $default = ' ')
- Obtiene un argumento $_GET[$var] y devuelve un mensaje de error si el argumento no se indica.
- El código API del periférico actual se puede obtener mediante getArg('eedomus_controller_module_id')
httpQuery($url, $action = 'GET'/*GET,POST,PUT,DELETE*/, $post = NULL, $oauth_token = NULL, $headers = NULL, $use_cookies = false, $ignore_errors = false)
- Ejecuta una llamada HTTP/HTTPS y devuelve el resultado en forma de cadena de caracteres.
- Los argumentos $action y $post se pueden omitir; se pueden usar en el caso de llamadas HTTP avanzadas, como un POST.
- El argumento $oauth_token se usa en los scripts de objetos conectados; por consiguiente, en los scripts personales se puede omitir o establecer en NULL
- El argumento $headers debe indicarse en forma de tabla. Ejemplo :
$headers = array("X-Fbx-App-Auth: xxxx");
- El argumento cookies le permite activar la gestión de los cookies para la primera llamada y las siguientes.
saveVariable($variable_name, $variable_content)
- Guarda el contenido de una variable, la cual se puede volver a utilizar más tarde cuando se vuelve a ejecutar el script (mediante loadVariable).
- Nota: Las variables que llevan el mismo nombre no son visibles entre distintos scripts. $variable_name de ser una cadena de caracteres.
loadVariable($variable_name)
- Carga el contenido de una variable previamente guardada con saveVariable()
- Nota: Las variables que llevan el mismo nombre no son visibles entre distintos scripts. $variable_name debe ser una cadena de caracteres.
jsonToXML($json)
- Convierte una cadena de caracteres con formato JSON al formato XML (es especialmente útil para procesar rutas xpath() a posteriori)
xpath($xml, $path)
- Se trata de las mismas expresiones de acceso xpath/xquery que para los sensores HTTP eedomus
- Se puede usar el siguiente validador xpath para realizar pruebas:
- http://doc.eedomus.com/xpath/
setValue($periph_id /*Código API*/, $value, $verify_value_list = false, $update_only= false)
- Solicita una acción en un periférico mediante su código API
- Nota 1: la acción se ejecuta de forma asíncrona, "en el plazo más breve". En caso de fracaso, se realiza un nuevo intento posteriormente (ejemplo: enchufe Z-Wave al límite de su alcance)
- Nota 2: el parámetro $verify_value_list es operativo. Si es true, el valor sólo será aceptado si está en la lista de valores referenciados (ejemplo: On/Off). La activación de este parámetro hace que esta función sea ligeramente más lenta ya que deben realizarse comprobaciones previas.
- update_only elija true si desea actualizar el valor del periférico eedomus sin solicitar una acción física en el equipo correspondiente.
setMacro($periph_id /*Código API*/, $macro_id /*Code API Macro*/, $dynamic_value = 0)
- Activa un periférico mediante su código API y el código API de su macro.
- El argumento $dynamic_value se puede omitir; permite definir la duración de una macro variable, en su caso.
getPeriphList($show_notes = false)
- Devuelve una tabla que contiene la lista de sus periféricos (añadiendo las notas de usuario cuando $show_notes es igual a 1)
- El formato es similar al de la petición API get -> periph.list
getPeriphValueList($periph_id /*Código API*/)
- Devuelve una tabla que contiene la lista de valores de un periférico (válido sólo para los periféricos de tipo Lista)
- Devuelve una tabla con la siguiente forma:
resultat[0] = array('value' => 0, 'state' => 'Off', 'state_img' => 'lamp_off.png')
getValue($periph_id /*Código API*/, $value_text = false)
- Devuelve una tabla que contiene el valor de un periférico mediante su código API.
- La tabla es del tipo array(["full_name"] => 'my device', ["value"] => xx, ["change"] => 'AAAA-MM-JJ HH:MM:SS')
- Si $value_text es igual a true, la tabla contiene también ["value_text"]=> xx, que es la descripción del valor (ejemplo: "On")
sdk_json_decode($json)
- Devuelve una tabla que contiene el JSON decodificado (similar a la función json_decode() de PHP)
sdk_header($content_type)
- Personaliza el header de la respuesta HTTP del script. De momento, sólo están soportados $content_type = 'text/xml' y 'image/jpg'
netSend($ip, $port, $data)
- Envía un dato a un periférico de red (experimental).
- Devuelve la respuesta del periférico, en su caso.
- Sólo disponible en eedomus+ a día de hoy.
ftpUpload($ftp_server, $ftp_user, $ftp_pass, $content, $file_name)
- Sube un archivo a un FTP en modo binario (se utiliza, por ejemplo, para subir imágenes del portero Doorbird a un periférico de cámara).
- Devuelve el resultado de la subida en formato json
sendUPNP($ip, $param)
- Envía una acción UPnP a la IP (o a varias IP's separadas por comas) de un reproductor UPnP
- Los parámetros tienen el mismo formato que los de un actuador UPnP (ejemplo: para reproducir un sonido previamente cargado &play).
Ejemplos
Encontrará estas funciones especificas en los distintos ejemplos que ponemos a su disposición:
Scripts de "Objetos conectados"
Algunos "Objectos Conectados" preconfigurados para eedomus funcionan con scripts especialmente desarrollados por Connected Object. Estos scripts se instalan automáticamente en su controlador eedomus. Puede consultar su contenido en los siguientes enlaces.
Tiene plena libertad para inspirarse en estos scripts, para modificarlos e incluso para volver a publicarlos en el foro oficial eedomus.
Funciones de usuario
Usted puede definir sus propias funciones de usuario siempre y cuando las prefije con sdk_:
Ejemplo:
function sdk_add($a, $b) { return $a + $b; }
Variables personales
Existen dos maneras distintas para definir variables personales:
Definición de las variables directamente en el script
Es el método más directo. Sin embargo, no permite compartir el script con la Comunidad eedomus.
$mi_lampara = 1234;
Definición de las variables a través de un argumento del script
Con este método, los códigos API de sus periféricos no parecen directamente en el código, por lo que el script es más "genérico" y más fácil de compartir.
$mi_lampara = getArg('mi_lampara');
Después, debe invocar al script de la siguiente manera (en este ejemplo, la IP del controlador eedomus es 192.168.0.30):
http://192.168.0.30/script/?exec=mon_script.php&mi_lampara=1234
Codificación
Los archivos de sus scripts deben codificarse en el formato ISO-8859-1 o ANSI, de lo contrario los caracteres acentuados podrían ser incorrectos.
Un editor de texto como NotePad2 resulta muy práctico para modificar o comprobar la codificación.
Nota: En caso de problema con los acentos de cadenas contenidas en argumentos, debe usar la función utf8_decode()
$mi_texto_debidamente_acentuado = utf8_decode(getArg('mi_argumento_acentuado'));
Información complementaria
¿Cómo probar el script?
Para descargar el script, debe estar conectado no sólo al controlador eedomus, sino también a la plataforma eedomus (en el mismo navegador).
No dude en probar el script en caso de problema. Si el script le devuelve "1", por lo general significa que está ausente o que no se ha cargado completamente.
¿Dónde se guardan los scripts?
Los scripts se guardan en la plataforma eedomus (además de en el propio controlador eedomus). Por consiguiente se pueden recuperar en caso de que restaure o actualice el controlador.