Sobre la plataforma de harware del X4 corre un intérprete de Python, sobre este lenguaje funcionan unos scripts a los que Digi llama DIA. Su función es manejar el stack de Digi/Xbee y crear las capas que abtraen del hardware y convierten los paquetes Zigbee en lecturas de sensores.
Python es un lenguaje interpretado, con tipado dinámico, multiplataforma y orientado a objetos. Su nombre está inspirado en el grupo de cómicos ingleses «Monty Python» y fué creado a principios de los 90.
Personalmente estoy más acostumbrado a la programación funcional, aunque reconozco que la programación orientada a objetos es mucho más intuitiva, la verdad es que me ha costado un poco entenderlo todo, los scripts están programados por otras personas, con unos criterios de nombre que seguramente serían diferentes a los míos y que no conozco.
En todo caso resumo como funciona…
El IDE de desarrollo es una versión personalizada de Eclipse, en él se escribe el código de la solución, y el propio IDE se encarga de hacer el Build, meterlo en un fichero.zip (el X4 no tiene sistema de ficheros), crear un archivo de configuración (Dia.yml), subirlo al gateway y ejecutarlo. El gateway no tiene mucha capacidad de proceso y entremedias tiene que botar, por lo que se hace un poco pesado. Tiene además una opción para hacer debug en el X4, funciona, pero es un poco lento.
En el fichero de configuración se crean:
- Devices -> Son los scripts que permiten hacer la abtracción del HW (los drivers)
- Loggers -> Una capa que sirve para almacenar las lecturas
- Presentations -> Esta capa sirve para manejarlos y enviarlos a un dispositivo de visualización, a otro equipo, a una página web, a un puerto, etc.
- Services -> Solo hay configurado uno, un Watchdog que permite reiniciar el sistema cada cierto tiempo.
Hasta ahora para los dicersos dispositivos habíamos creado devices, para el Panel tenemos que crear, además del driver, un script de presentación, en ello estoy, la idea (bastante avanzada en este momento) es crear un script de presentación al que se le puedan dar como parámetros:
- El dispositivo que va a representar los datos (el panel)
- La lista de canales a la que se va a suscribir
- El intervalo de tiempo en el que se van a mostrar los datos.
Por otro lado, si recordais el montaje lo que hicimos para cubrir los huecos es enviar la hora a intervalos regulares y mostrarla como si fuera un reloj, por ahorro de recursos estamos haciendo funcionar el micro del panel con su oscilador interno que no es muy preciso, lo que provoca ajustes de tiempo aunque el intervalo de actualización sea de menos de un minuto. La solcuión a esto será añadir a la placa un reloj en tiempo real, en la línea de la contención de precios no vamos a ponerle batería de bakup, en lugar de eso lo que haré es que cuando se inicie el driver se actualice la hora y que cuando se actualice desde la red Zigbee se compare con al del reloj, y si es diferente se actualice el reloj. De esta forma conseguimos evitar la batería de backup, mantener el relos sincronizado con una base de tiempos ntp por Internet y que mantenga la hora aunque no pueda conectar a la red.
Sigo en ello…..