{"id":889,"date":"2011-05-16T22:45:03","date_gmt":"2011-05-16T21:45:03","guid":{"rendered":"http:\/\/www.zigbe.net\/?p=889"},"modified":"2011-05-16T22:45:03","modified_gmt":"2011-05-16T21:45:03","slug":"presentaciones-digi-dia-manipulando-los-datos-en-el-gateway","status":"publish","type":"post","link":"https:\/\/blog.whatsbee.net\/?p=889","title":{"rendered":"Presentaciones Digi Dia: Manipulando los datos en el Gateway"},"content":{"rendered":"<p>Hasta el momento hemos dise\u00f1ado hardware que es capaz de recoger informaci\u00f3n del entorno y pasarla a una red Zigbee o que es capaz de tomar informaci\u00f3n de una red Zigbee y activar o desactivar el hardware. El coordinador de la red es un Gateway de Digi que es capaz de \u00abhablar\u00bb con la red Zigbee y almacenar los valores en su base de datos de canales. Desde un \u00a0punto de vista l\u00f3gico tenemos una serie de nodos y, en cada uno de ellos una colecci\u00f3n de canales que utilizan una nomenclatura Nodo.Canal. Para un nodo sensor cada canal contendr\u00e1 el valor de la caracter\u00edstica del entorno medida, el \u00abtimestamp\u00bb y las unidades, cada nodo tiene tantos canales como se definen en el driver (por ejemplo bater\u00eda, iluminaci\u00f3n, temperatura, etc). Para un nodo actuador en el driver se implementa el c\u00f3digo necesario para que una actualizaci\u00f3n 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\u00e9 modificando el valor del canal a ON u OFF conseguiremos que el rel\u00e9 se dispare o permanezca en reposo.<\/p>\n<p>Por supuesto los canales se pueden actualizar de una forma peri\u00f3dica o se pueden disparar con eventos, la iniciativa de la comunicaci\u00f3n puede ser del mote o del Gateway.<\/p>\n<p>Dentro de la estructura de la aplicaci\u00f3n Dia de Digi encontramos varias capas:<\/p>\n<div id=\"attachment_894\" style=\"width: 711px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/blog.whatsbee.net\/wp-content\/uploads\/2011\/05\/Dia.png\"><img aria-describedby=\"caption-attachment-894\" loading=\"lazy\" class=\"size-full wp-image-894\" title=\"Capas de aplicaci\u00f3n de Dia Digi\" src=\"http:\/\/blog.whatsbee.net\/wp-content\/uploads\/2011\/05\/Dia.png\" alt=\"\" width=\"701\" height=\"491\" srcset=\"https:\/\/blog.whatsbee.net\/wp-content\/uploads\/2011\/05\/Dia.png 701w, https:\/\/blog.whatsbee.net\/wp-content\/uploads\/2011\/05\/Dia-300x210.png 300w\" sizes=\"(max-width: 701px) 100vw, 701px\" \/><\/a><p id=\"caption-attachment-894\" class=\"wp-caption-text\">Capas de aplicaci\u00f3n de Dia Digi<\/p><\/div>\n<p>La capa inferior es la que hemos estado trabajando, en ella se encuentran los drivers, que convierten los valores el\u00e9ctricos de las radios en sus equivalentes f\u00edsicos.<\/p>\n<p>Encima de esta capa est\u00e1 la Channel Layer, que se encarga de recoger los valores de los controladores y almacenarlos en la base de datos de canales.<\/p>\n<p>La capa que hoy nos ocupa es la capa de presentaci\u00f3n. La presentaci\u00f3n es una porci\u00f3n de c\u00f3digo Python que se encarga de recoger la informaci\u00f3n de los canales y representarla en otros formatos. Los datos de la presentaci\u00f3n habitualmente se env\u00edan a trav\u00e9s 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\u00a0suscripci\u00f3n cuando cambian) y sirven para proveer la interacci\u00f3n entre dispositivos, generalmente externos a la propia red.<\/p>\n<p>En nuestro caso vamos a utilizar una presentaci\u00f3n para interactuar entre dos dispositivos de la red Zigbee. No es mi intenci\u00f3n en este momento entrar en el c\u00f3digo Python o en los detalles del Gateway, si alguien tiene inter\u00e9s que publique un comentario y lo amplio sin ning\u00fan problema \ud83d\ude09<\/p>\n<p>Los dos dispositivos que pretendo conectar son el Red Button y el Dimmer, en el primer caso tenemos cuatro canales: bater\u00eda (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\u00f3xima pulsaci\u00f3n subir\u00e1 la intensidad o la reducir\u00e1). Por supuesto los drivers est\u00e1n 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.<\/p>\n<p>Lo que hace la presentaci\u00f3n es muy sencillo:<\/p>\n<ol>\n<li>Se suscribe a la pulsaci\u00f3n del bot\u00f3n<\/li>\n<li>Cada vez que se pulsa el bot\u00f3n incrementa la intensidad en 1 (o la reduce si el valor del canal asc es 0)<\/li>\n<li>Cuando se llega a la intensidad m\u00e1xima el canal asc cambia de 1 a 0<\/li>\n<li>Si se llega a la intensidad m\u00ednima el canal asc cambia de 0 a 1<\/li>\n<\/ol>\n<p>Con todo esto lo que tenemos es que (considerando que el Dimmer inicialmente est\u00e1 a 0) tras cada pulsaci\u00f3n del bot\u00f3n la intensidad de la luz se incrementar\u00e1 hasta llegar a 7 (m\u00e1xima) si seguimos pulsando cana pulsaci\u00f3n la decrementar\u00e1 hasta llegar a 0 (m\u00ednima) si seguimos pulsando la volver\u00e1 a incrementar, y as\u00ed sucesivamente.<\/p>\n<p>Esto,\u00a0obviamente, es v\u00e1lido para un dimmer con 8 niveles de intensidad, en un m\u00e1ximo de 8 pulsaciones podemos conseguir cualquier intensidad luminosa. En un futuro tengo previsto un nuevo dise\u00f1o del dimmer en el que la regulaci\u00f3n sea continua (con una resoluci\u00f3n de 10 bits) en ese caso lo l\u00f3gico ser\u00eda utilizar un bot\u00f3n para subir y otro para bajar.<\/p>\n<p>A continuaci\u00f3n un enlace a un v\u00eddeo en el que se ve en funcionamiento:<\/p>\n<p><a href=\"http:\/\/youtu.be\/-FcI3iTVxso\" target=\"_blank\">http:\/\/youtu.be\/-FcI3iTVxso <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hasta el momento hemos dise\u00f1ado hardware que es capaz de recoger informaci\u00f3n del entorno y pasarla a una red Zigbee o que es capaz de tomar informaci\u00f3n de una red Zigbee y activar o desactivar el hardware. El coordinador de&hellip; <br \/><a class=\"read-more-button\" href=\"https:\/\/blog.whatsbee.net\/?p=889\">Leer m\u00e1s<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0},"categories":[14,16,2,21,9],"tags":[28,56,76,80,99,109,110,111,152,173,197],"_links":{"self":[{"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/posts\/889"}],"collection":[{"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=889"}],"version-history":[{"count":0,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/posts\/889\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=889"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=889"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=889"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}