Hasta el momento hemos diseñado hardware que es capaz de recoger información del entorno y pasarla a una red Zigbee o que es capaz de tomar información de una red Zigbee y activar o desactivar el hardware. El coordinador de la red es un Gateway de Digi que es capaz de «hablar» con la red Zigbee y almacenar los valores en su base de datos de canales. Desde un punto de vista lógico tenemos una serie de nodos y, en cada uno de ellos una colección de canales que utilizan una nomenclatura Nodo.Canal. Para un nodo sensor cada canal contendrá el valor de la característica del entorno medida, el «timestamp» y las unidades, cada nodo tiene tantos canales como se definen en el driver (por ejemplo batería, iluminación, temperatura, etc). Para un nodo actuador en el driver se implementa el código necesario para que una actualización del canal (en la web por ejemplo) provoque una respuesta en el hardware que ha sido definida en el driver. De esta forma, en un nodo que sea un relé modificando el valor del canal a ON u OFF conseguiremos que el relé se dispare o permanezca en reposo.
Por supuesto los canales se pueden actualizar de una forma periódica o se pueden disparar con eventos, la iniciativa de la comunicación puede ser del mote o del Gateway.
Dentro de la estructura de la aplicación Dia de Digi encontramos varias capas:
La capa inferior es la que hemos estado trabajando, en ella se encuentran los drivers, que convierten los valores eléctricos de las radios en sus equivalentes físicos.
Encima de esta capa está la Channel Layer, que se encarga de recoger los valores de los controladores y almacenarlos en la base de datos de canales.
La capa que hoy nos ocupa es la capa de presentación. La presentación es una porción de código Python que se encarga de recoger la información de los canales y representarla en otros formatos. Los datos de la presentación habitualmente se envían a través de una red, se almacenan en un dispositivo de almacenamiento, etc. Las presentaciones recogen los datos de los canales (a intervalos de tiempo regular o por suscripción cuando cambian) y sirven para proveer la interacción entre dispositivos, generalmente externos a la propia red.
En nuestro caso vamos a utilizar una presentación para interactuar entre dos dispositivos de la red Zigbee. No es mi intención en este momento entrar en el código Python o en los detalles del Gateway, si alguien tiene interés que publique un comentario y lo amplio sin ningún problema 😉
Los dos dispositivos que pretendo conectar son el Red Button y el Dimmer, en el primer caso tenemos cuatro canales: batería (double no utilizado ahora), pulsador (boolean indica el estado del pulsador), led1 (boolean primera tira de leds) y led2 (boolean segunda tira de leds). El el Dimmer solo tenemos dos canales: intensidad (un entero del 0 al 7 que contiene la intensidad luminosa que queremos configurar) y asc (boolean indica si la próxima pulsación subirá la intensidad o la reducirá). Por supuesto los drivers están configurados para que un cambio en el pulsador actualice el canal inmediatamente, un cambio en led1 o en led2 encienda o apague los leds y un cambio en el canal intensidad configure la intensidad deseada de forma inmediata en el Dimmer.
Lo que hace la presentación es muy sencillo:
- Se suscribe a la pulsación del botón
- Cada vez que se pulsa el botón incrementa la intensidad en 1 (o la reduce si el valor del canal asc es 0)
- Cuando se llega a la intensidad máxima el canal asc cambia de 1 a 0
- Si se llega a la intensidad mínima el canal asc cambia de 0 a 1
Con todo esto lo que tenemos es que (considerando que el Dimmer inicialmente está a 0) tras cada pulsación del botón la intensidad de la luz se incrementará hasta llegar a 7 (máxima) si seguimos pulsando cana pulsación la decrementará hasta llegar a 0 (mínima) si seguimos pulsando la volverá a incrementar, y así sucesivamente.
Esto, obviamente, es válido para un dimmer con 8 niveles de intensidad, en un máximo de 8 pulsaciones podemos conseguir cualquier intensidad luminosa. En un futuro tengo previsto un nuevo diseño del dimmer en el que la regulación sea continua (con una resolución de 10 bits) en ese caso lo lógico sería utilizar un botón para subir y otro para bajar.
A continuación un enlace a un vídeo en el que se ve en funcionamiento:
Saludos.
Muy buenos tus post.
Podrías referenciarme para encontrar más informaciòn de como hacer:
-drivers
-presentaciones
-iDigi dia
No encuentro en la documentación de Digi informaciòn precisa para desarrollar estas partes del sistema.
Tengo el kit iDigi Dia, con el connectport X4, una sensor de luz y temperatura y un wall router pero quiero crear mis motes.
Agradezco cualquier ayuda.
Éxitos.
Hola Julián,
la verdad es que en en Digi hay tanta información que es un poco oscuro. A mi me costó llegar a entender como está organizada, el Dia (lo que está funcionando en el gateway) es una cosa el idigi Dia (la plataforma en la nube de Digi es otra cosa diferente aunque funciona a martir del Dia) los nombres son parecidos y se tiende a confundir la información.
Si entras en la página http://www.idigi.com, y te das de alta como desarrollador accederás a una página que en la columna de la izquierda tiene un link, «Resources». En la zona de idigi Dia tienes un acceso a la documentación en línea o puedes descargartela entera.
Sí, te confirmo que es toda la que he encontrado, si tienes nociones de Python (o las adquieres en el proceso) lo irás entendiendo cada vez más como me ha pasado a mi, pero desde mi punto de vista es un poco complicado y ralentiza mucho el tener que depurar en el gateway, ya que cada vez tienes que hacer el build, transferir los ficheros, reiniciar el gateway, etc.
En todo caso, que tengas suerte, si necesitas ayuda pídemela sin problemas y, si tienes algún proyecto interesante date de alta en el blog y compártelo, nuestra intención es crear un foro de intercambio.