Desarrollo Back-end
📟

Desarrollo Back-end


Con nuestro producto mínimo viable listo podemos iniciar el proceso de desarrollo, en este caso tomaremos nuestros objetivos y utilizaremos cada objetivo para desarrollar la aplicación. Para recordar, nuestros objetivos son los siguientes:

  • Codificar un script en Ignition para encender y apagar las luces.
  • Escribir un código en Ignition para cambiar la intensidad de las luces.
  • Desarrollar una interfaz de usuario para el control de las luces.
  • Codificar un script en Ignition para cambiar el color de las luces.
  • Desarrollar la aplicación con la facilidad de permitir al usuario controlar sus propias luces.

En el proceso de desarrollo tenemos el back-end y el front-end, el back-end se encarga del funcionamiento interno de la aplicación, o sea de la "magia" que sucede detrás de la interfaz visible al usuario, y el front-end es la interfaz de usuario o la interacción con el usuario.

Información de luces de usuario

El primer paso para controlar las luces de un usuario es obtener la información de sus luces, y aunque en papel ya tenemos resuelto nuestro primer objetivo, no lo estamos integrando realmente a Ignition, y con esto no hablamos de la parte de interfaz, sino que los códigos pueden usar funciones de Ignition como las etiquetas, bases de datos, entre otros, es posible que los códigos no requieran una integración con otras funciones de Ignition, pero en este caso nuestro código actual por sí solo presenta varios problemas y tenemos herramientas de Ignition que lo pueden solucionar.

El primer problema que encontramos es que esta instrucción da la información de todas las luces en un solo diccionario, esta información debemos procesarla, y también hay mucha información que no necesariamente utilizaremos.

También, la información de IP y nombre de usuario sería siempre la misma para un mismo usuario, por lo que estarla ingresando con cada instrucción no tiene sentido.

Estos dos puntos pueden resolverse de forma similar utilizando etiquetas de Ignition, el primero se puede resolver procesando la información e ingresando la información de las luces a etiquetas en Ignition, y el último también se puede resolver permitiendo al usuario ingresar la información en etiquetas para guardarla, esto también podemos hacerlo con bases de datos, Ignition también nos da esa posibilidad de integración, pero en este ejemplo utilizaremos etiquetas.

El primer punto que atacaremos será el de ingresar la IP y nombre de usuario, para esto crearemos una nueva función, y al igual que cuando empezamos nuestro producto mínimo viable desarrollaremos primero en el Script Console.

Lo primero que debemos hacer es investigar si no sabemos lo que necesitamos para desarrollar, en este caso vamos a suponer que ya pasamos la investigación para este punto y descubrimos que necesitamos la instrucción system.tag.configure(), esta instrucción recibe de entradas la ruta de las etiquetas, el cuerpo de las etiquetas y el método de creación.

La ruta de las etiquetas además requiere de ingresar el nombre del proveedor de tags, y queremos que cualquier usuario pueda utilizar esta aplicación en sus distintos sistemas de Ignition, por lo que vamos a hacerlo dinámico obteniendo con funciones de sistema el nombre del proveedor, por lo que nuestro código quedaría de la siguiente forma:

Con esta función el usuario puede ingresar la IP y el nombre de usuario y se guardarán en dos etiquetas separadas para utilizar en nuestras otras funciones o en nuestra aplicación.

Ahora centraremos la atención en el código de obtención de la información, este código es similar al anterior en la parte de creación de las etiquetas, pero lo que debemos hacer es recorrer la información que nos devuelve nuestro producto mínimo viable, la respuesta de este código como vimos anteriormente es en formato JSON por lo que podemos recorrerlo con un for para obtener las llaves de acceso, y estas llaves de acceso si analizamos la información es el número de nuestras luces.

Cada luz dentro de la información que devuelven vemos que tienen su nombre, su tipo, el nombre del producto, si son alcanzables (conexión correcta), su brillo, su estado y si la luz lo permite, su color (hue). Las luces tienen muchos más valores, pero nos centraremos en esos, ya que son los básicos para lo que necesitamos.

Este código es más grande, pero su base se mantiene de forma similar, aquí en este código también cambiamos la ip y el usuario para obtenerlos de las etiquetas que creamos en el código anterior, este código también se desarrolló primero en el Script Console para probarlo y quitarle pulgas y luego se pasó a la biblioteca de scripts de Ignition.


Encendido y apagado de luces

Para iniciar este desarrollo iremos a nuestro recurso principal del API de Philips Hue para determinar la instrucción que debemos utilizar, en este caso sería lo siguiente:

Podemos ver que el método ya no es del tipo get, sino que ahora es del tipo put, nuestra url cambia y ahora tenemos que enviar un cuerpo en el mensaje.

Nuevamente, el manual nos da información sobre el cuerpo del mensaje, en este caso el cuerpo es un diccionario y en los parámetros del método put podemos ver que se pueden enviar datos, por lo que probaremos nuestro código inicialmente en el Script Console para verificar su funcionamiento.

Con este código funcionando podemos integrarlo al desarrollo que ya realizamos anteriormente viéndose de la siguiente forma:

                                 

En este código además de obtener las etiquetas de los códigos anteriores, y además de obtener también el nombre del proveedor de tags de forma dinámica, también agregamos la actualización de la etiqueta de estado y la revisión del código de estado, esto ya que si el envío falla así no cambiamos el valor de la etiqueta de estado, esto se descubrió que era necesario mediante las pruebas realizadas en el Script Console, ya que se enviaron muchas consultas en un corto periodo de tiempo y varias fallaron dejando el estado de la etiqueta con el estado real de la luz desincronizados y por esto es de gran importancia probar los códigos realizados.


Cambiar brillo y color de las luces

El código para cambiar el brillo y el color de las luces es muy similar a lo ya realizado para el estatus por lo que los códigos son los siguientes:

Y con estas funciones programadas ya tenemos nuestro Back-end listo.