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/


Ejemplo con un controlador eedomus cuya dirección IP local es 192.168.0.30:


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:

for while if switch foreach


La creación de tablas está permitida:

array


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:

Eedomus_scripts_samples.zip

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.


Archivo:eedomus_script_codificacion_esp.png


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.