Una vez superado el tema del Python, de la red Zigbee y del gateway me he decidido a intentar empezar un interfaz de usuario. Me he visto abrumado por la cantidad de opciones, intentaré resumirlas…
Tal como comentábamos en el entorno Digi Dia las presentaciones son los scripts responsables de comunicarse con el exterior. Podemos crear las presentaciones que necesitemos, pero hay una serie de presentaciones que vienen en los scripts de Dia que son altamente aprovechables, hay presentaciones que devuelven páginas web, que devuelven una cónsola Telnet, etc. Nos centraremos en aquellas más pensadas para comunicarse con otras aplicaciones:
- IdigiDB: Pensada para interactuar con los servicios en la nube de Digi.
- XMLRPC: proporciona un interfaz para una serie de comandos, básicamente los comandos están relacionados con los canales y su actualización.
- RCI: permite los mismos comandos que el anterior, además añade otros comandos para trabajar más directamente con el HW, permite realizar descubrimientos en la red Zigbee, interactuar con los parámetros de los módulos, etc.
Los dos últimos casos son los que nos ocupan, y con los que he hecho las primeras pruebas. Desde mi punto de vista tienen un inconveniente importante, la iniciativa de la comunicación siempre es del software que utilizamos como interfaz, eso no permite que un evento en un mote informe a la aplicación. La inciativa es siempre de la aplicación que hace un «request» al gateway y este le da una respuesta.
Evidentemente una solución sería interrogar cada x segundos al gateway, con los inconvenientes de consumo de ancho de banda. Se me ocurre que para minimizar esto se podría crear una presentación, suscrita a todos los canales que tenga un canal propio del estado de la acualización. En lugar solicitar información de todos los canales cada x segundos solicitaríamos información de si se ha actualizado alguno, si hay una respuesta positiva pediríamos un chanel_dump para obtener la de todos.
La solución definitiva es crear otra presentación que haga un push de la información en un servicio web, pero eso lo dejaremos para más adelante.
La aplicación utiliza la librería de VB.NET XMLRPC.NET, como se puede apreciar claramente es una aplicación de pruebas, he ido poniendo botones para ir viendo las opciones. Soy capaz de cargar un listado de los motes en una listBox, un listado de los canales en un Tree View, de leer periódicamente el valor de los canales, de actualizar la imagen de un termómetro en función de la temperatura, de averiguar los permisos da ceda canal y de actualizarlos, etc.
Con las posibilidades que da el XMLRPC y el VB.net se podría resolver cualquier necesidad (exceptuando la de las actualizaciones a iniciativa del Gateway) para una aplicación comercial. la aplicación está hecha con Visual Studio 2005 y VB.NET, la verdad es que he trabajado muy poco con este lenguaje de programación, pero no parece complicado.
Los siguientes pasos:
- Averiguar como funciona el RCI y probarlo, con el objetivo de ser capaz de capturar el identificador de cada dispositivo en cada una de las radios y poder configurar los controles en función de eso.
- Hacer alguna prueba con servicios web, la intención es crear una capa de almacenamiento intermedio en la nube, de forma que se tenga acceso a los datos desde cualquier punto con conexión a Internet, en línea o fuera de línea.
- Crear alguna solución sin gateway basada en un API para encontrar una solución económica para redes de pocos nodos.
- Crear interfaces para Android, Iphone, etc.
Supongo que me iré cansando y alternando con el diseño de HW…..
Hola Carlos, para esas soluciones sin gateway que buscas puedes encontrar interesante estas librerías para XBee.
http://mftoolkit.codeplex.com/
Hola,
probaré las librerías, la verdad es que la parte del SW es la que más me está costando, gracias por el consejo.
Ok, pues mucho ánimo. Me acabo de incorporar a la comunidad pero tenemos bastantes proyectos en marcha con XBee algunos, esperamos poder aportar cosas.
Un saludo.
Te animo a hacerlo y a publicar en este blog, que ptende ser participativo.
Carlos