Aplicación personalizada para dispositivos IoT

octubre 18, 2022

Hace poco nos pidieron que desarrolláramos un prototipo de aplicación personalizada para dispositivos IoT. (IoT es «internet de las cosas»). La aplicación personalizada necesitaba controlar un conjunto de lámparas en el hogar. En este artículo explico cómo lo conseguimos y cómo podría utilizarse la misma técnica para controlar cualquier dispositivo IoT.

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, 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.

The test setup consisting of three lamps joined to three switches joined to three power supplies. (The power supplies are not shown in the photo.)

El montaje de prueba, consistente en tres luces conectadas a tres interruptores WiFi conectados a tres fuentes de alimentación (que no aparecen en la foto). Foto de Anthony Lambert. Foto del botón de interruptor simple en la parte superior de la página por Szabo Viktor/Unsplash.

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, pero otra aplicación popular que hace el mismo trabajo es Postman.

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.

Este vídeo muestra cómo nos fue:

Un vídeo que muestra el envío de una solicitud a través de la API de Sonoff. Vídeo de Anthony Lambert.

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’.

A screenshot of the Insert from URL script step in Claris Pro and FileMaker Pro.

Una captura de pantalla del paso de guión «Insertar desde URL» en Claris Pro y FileMaker Pro. Captura de pantalla de Anthony Lambert.

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 que hace la mayor parte del trabajo de conversión por ti.

The FileMaker extension highlighted in the main window of the Paw application.

Una captura de pantalla de la extensión FileMaker visible en la ventana principal de la aplicación Paw. Captura de pantalla de Anthony Lambert.

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 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:

Un vídeo que muestra la prueba de encendido y apagado de luces mediante una aplicación FileMaker personalizada que envía peticiones a través de la API de Sonoff. Vídeo de Anthony Lambert.

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.