Recientemente nos hemos involucrado en un proyecto muy interesante. Nos pidieron que creáramos un prototipo de aplicación personalizada que pudiera utilizarse para controlar un conjunto de lámparas. Para conseguirlo, necesitábamos encontrar un interruptor que formara parte del «internet de las cosas» (IoT), con el que pudiéramos comunicarnos desde una app personalizada desarrollada en la Plataforma Claris/FileMaker. El interruptor se utilizaría para interrumpir, o permitir, el flujo de electricidad a cada lámpara, controlando así las lámparas.
Investigamos sobre dispositivos IoT adecuados y finalmente elegimos el interruptor BasicR3 (Inglés), fabricado por Sonoff. Tiene las características que necesitábamos, a saber:
- Una conexión de red Wi-Fi.
- Una API RESTful basada en HTTP. (Para una explicación de esta frase, visita las páginas de Wikipedia sobre«RESTful» y«API«).
Configurar los conmutadores
Necesitábamos controlar tres bombillas desde la app personalizada del prototipo, así que preparamos un espacio con una bombilla conectada a cada uno de los tres interruptores BasicR3.
Los tres interruptores estaban conectados a la red Wi-Fi. Utilizamos un escáner de red para identificar los conmutadores de la red y obtener sus direcciones IP. Si hubiéramos instalado las lámparas de forma permanente, habríamos utilizado el panel de administración de nuestro router de red para asignar una dirección IP reservada a cada conmutador. Sin embargo, para nuestras pruebas no fue necesario; simplemente anotamos las direcciones IP actuales.
Comunicación con los Interruptores
Al desarrollar una aplicación personalizada para controlar dispositivos IoT, la tarea principal es codificar la conexión entre la aplicación personalizada y el dispositivo. Antes de trabajar en una interfaz de una aplicación personalizada, siempre probamos la conexión con una herramienta creada para ese trabajo. En nuestro caso, probamos cada conmutador, y si podíamos comunicarnos con él, utilizando una herramienta de software que nos permitía crear varias peticiones HTTP y enviarlas a través de APIs a los conmutadores. La aplicación específica que utilizamos se llama Paw (Inglés), pero otra aplicación popular que hace el mismo trabajo es Postman (Inglés).
Utilizando Paw, probamos primero si podíamos obtener información de cada uno de los tres interruptores. Para ayudarnos a compilar correctamente las peticiones HTTP, hemos utilizado la página que Sonoff ha dedicado a explicar su API RESTful (Inglés).
Este vídeo muestra cómo nos fue:
Después de obtener con éxito la información de cada interruptor, utilizamos Paw para enviar una solicitud de apagado de cada interruptor y, a continuación, volver a encender cada interruptor. Esto también fue un éxito.
Ahora que sabíamos que podíamos controlar los interruptores mediante Paw, conocíamos la estructura de las peticiones HTTP que podían implementar ese control. Nuestra siguiente tarea era transferir esas peticiones a nuestra app personalizada basada en Claris/FileMaker.
Nuestra aplicación personalizada basada en Claris/FileMaker
El paso de guión que se puede utilizar para enviar peticiones HTTP es ‘Insertar desde URL’.
El ‘Objetivo’ para nuestros propósitos era una variable que puede capturar el código de resultado devuelto por la petición HTTP. En el script que contenía este paso de script ‘Insertar desde URL’, evaluamos el código devuelto y nos bifurcamos en consecuencia, mostrando un mensaje de error si es necesario.
A partir de Paw, supimos que en «Especificar URL» debíamos introducir «http://[IP Address 1]:8081/zeroconf/info» como URL del conmutador 1, donde «[IP Address 1]» se sustituye por algo así como «10.0.1.15», que representaba la ubicación real del conmutador 1 en la red.
Para nuestros fines, «Verificar certificados SSL» no era necesario.
Para ‘Especificar opciones cURL’, necesitábamos hacer algún procesamiento para convertir la petición HTTP que enviamos en Paw en una petición que funcionara en Claris/FileMaker. En esto nos ayudó enormemente un gran trabajo realizado por un socio de Claris con sede en EE.UU. llamado Proof+Geist. Han desarrollado una extensión para Paw (Inglés) que hace la mayor parte del trabajo de conversión por ti.
Para que el guión sea más fácil de seguir, editar y corregir errores, hemos utilizado variables para almacenar diversos elementos del paso «Insertar desde URL». Los pasos resultantes en el script tenían este aspecto:
Set Variable: $url =
"http://[IP Address]:8081/zeroconf/info"
Set Variable: $json =
JSONSetElement ( "{}" ;
[ "data" ; "" ; JSONString ] ;
[ "deviceid" ; "" ; JSONString ]
)
Set Variable: $curl =
"curl -X POST --trace-ascii $trace --dump-header $header
-H "Content-Type: application/json; charset=utf-8"
-d " & $json & "
"
Insert from URL [ $result; $url; cURL options: $curl ] [ Select; No dialog ]
Como puedes ver, estas variables se correspondían estrechamente con el contenido de la extensión FileMaker de la aplicación Paw. Para obtener más información sobre cURL, consulta el sitio web de cURL (Inglés) y la página de ayuda de Claris FileMaker 19 sobre las opciones de cURL compatibles.
Probar nuestra aplicación personalizada
Ahora estábamos listos para probar la aplicación personalizada. Creamos una interfaz de usuario (IU) sencilla. Este vídeo muestra el resultado de nuestra prueba:
Conclusión
Puedes utilizar una app personalizada desarrollada en la plataforma Claris/FileMaker para controlar cualquier dispositivo IoT. Siempre que un dispositivo utilice un método abierto de comunicación, como una API RESTful, en lugar de un sistema cerrado y propietario, conectarse a ese dispositivo es razonablemente sencillo. Dada la enorme variedad de dispositivos IoT disponibles, el alcance de lo que se puede hacer con una aplicación personalizada como este prototipo es enorme.