{"id":3407,"date":"2021-04-04T14:35:51","date_gmt":"2021-04-04T19:35:51","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/girni\/?p=3407"},"modified":"2021-07-30T09:36:43","modified_gmt":"2021-07-30T14:36:43","slug":"lorawan-sensor-humedad-y-temperatura-gateway-y-broker","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/girni\/lorawan-sensor-humedad-y-temperatura-gateway-y-broker\/","title":{"rendered":"LoRaWan \u2013 Sensor Humedad y Temperatura. Gateway y Broker"},"content":{"rendered":"<p>El dispositivo que env\u00eda el mensaje con los datos de Humedad y temperatura debe registrarse en ChirpStack. La trama del mensaje se decodifica en al perfil del dispositivo (Device-profile) que permite al servidor de aplicaciones (Application-Server) integrar el mensaje en Home Assistant.<\/p>\n<h2>Decodificador de Trama - ChirpStack\/Device-Profile<\/h2>\n<p>En el men\u00fa \"Device-profile\" se crea el perfil del dispositivo con datos principales semejantes a los usados en el dispositivo b\u00e1sico. La secci\u00f3n que cambia es la de CODEC que se describe en Java Script.<\/p>\n<p>La decodificaci\u00f3n se realiza usando LSB, es decir el orden es byte menos significativo primero. En este caso los datos se reconvierten a n\u00famero real (float) y se trunca a dos decimales (+NumReal.toFixed(2)).<\/p>\n<p>Con los datos decodificados se integran como un diccionario de resultados.<\/p>\n<pre>\/\/ Decode decodes an array of bytes into an object.\r\n\/\/  - fPort contains the LoRaWAN fPort number\r\n\/\/  - bytes is an array of bytes, e.g. [225, 230, 255, 0]\r\n\/\/  - variables contains the device variables e.g. {\"calibration\": \"3.5\"} (both the key \/ value are of type string)\r\n\/\/ The function must return an object, e.g. {\"temperature\": 22.5}\r\n\/\/function Decode(fPort, bytes, variables) {\r\n\/\/  return {};\r\n\/\/}\r\nfunction Decode(fPort, bytes, variables) {\r\n\r\n  \/\/ usando LSB  (least significant byte first)\r\n  var unalectura = bytes[3]&lt;&lt;24 | bytes[2]&lt;&lt;16 | bytes[1]&lt;&lt;8 | bytes[0]; var unsigno = (unalectura&gt;&gt;&gt;31 === 0) ? 1.0 : -1.0;\r\n  var exponente = unalectura&gt;&gt;&gt;23 &amp; 0xff;\r\n  var mantisa = (exponente === 0) ? (unalectura &amp; 0x7fffff)&lt;&lt;1 : (unalectura &amp; 0x7fffff) | 0x800000;\r\n  var NumReal = unsigno * mantisa * Math.pow(2, exponente - 150);\r\n  NumReal = +NumReal.toFixed(2);\r\n  \r\n  \/\/ usando LSB  (least significant byte first)\r\n  var unalectura = bytes[7]&lt;&lt;24 | bytes[6]&lt;&lt;16 | bytes[5]&lt;&lt;8 | bytes[4]; var unsigno = (unalectura&gt;&gt;&gt;31 === 0) ? 1.0 : -1.0;\r\n  var exponente = unalectura&gt;&gt;&gt;23 &amp; 0xff;\r\n  var mantisa = (exponente === 0) ? (unalectura &amp; 0x7fffff)&lt;&lt;1 : (unalectura &amp; 0x7fffff) | 0x800000;\r\n  var NumReal2 = unsigno * mantisa * Math.pow(2, exponente - 150);\r\n  NumReal2 = +NumReal2.toFixed(2);\r\n  \r\n  var appData = {'temperaturaC': NumReal, 'humedad': NumReal2};\r\n  return appData;\r\n}\r\n<\/pre>\n<h2>Configuraci\u00f3n en Home-Assistant<\/h2>\n<p>La configuraci\u00f3n se realiza en el archivo configuration.yaml con la instrucci\u00f3n:<\/p>\n<pre>sudo nano \/home\/homeassistant\/.homeassistant\/configuration.yaml\r\n<\/pre>\n<p>al archivo se a\u00f1ade en la secci\u00f3n de sensores las instrucciones de cada lectura.<\/p>\n<p>El t\u00f3pico a observar se construye tomando los datos de chirpstack para cada dispositivo, observando el n\u00famero de aplicaci\u00f3n y el identificador de dispositivo.<\/p>\n<p>Los valores de los sensores se decodificaron en un diccionario, que se transfiri\u00f3 como un valor tipo texto, por\u00a0 lo que primero se lo convierte en un diccionario antes de seleccionar el valor a usar. La selecci\u00f3n del valor se realiza en value_template.<\/p>\n<pre>  - platform: mqtt\r\n    name: 'DHT_S01_temperatura'\r\n    unit_of_measurement: '\u00b0C'\r\n    state_topic: 'application\/1\/device\/01200893df803774\/event\/up'\r\n    value_template: \"{% set valores = value_json.objectJSON |from_json %} {{valores.temperaturaC}}\"    \r\n    #json_attributes_topic: 'application\/1\/device\/01200893df803774\/event\/up'\r\n\r\n  - platform: mqtt\r\n    name: 'DHT_S01_humedad'\r\n    unit_of_measurement: '%'\r\n    state_topic: 'application\/1\/device\/01200893df803774\/event\/up'\r\n    value_template: \"{% set valores = value_json.objectJSON |from_json %} {{valores.humedad}}\"\r\n\r\n  - platform: mqtt\r\n    name: 'DHT_S01_rssi'\r\n    unit_of_measurement: 'dB'\r\n    state_topic: 'application\/1\/device\/01200893df803774\/event\/up'\r\n    value_template: \"{{ value_json.rxInfo[0].rssi}}\"\r\n\r\n  - platform: mqtt\r\n    name: 'DHT_S01_snr'\r\n    unit_of_measurement: 'dB'\r\n    state_topic: 'application\/1\/device\/01200893df803774\/event\/up'\r\n    value_template: \"{{ value_json.rxInfo[0].loRaSNR}}\"\r\n<\/pre>\n<p>El resultado se observa como:<\/p>\n<p><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/04\/LoraWanBaseDHT_01_HA.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-3417 aligncenter\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/04\/LoraWanBaseDHT_01_HA.png\" alt=\"\" width=\"315\" height=\"223\" srcset=\"https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/04\/LoraWanBaseDHT_01_HA.png 315w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/04\/LoraWanBaseDHT_01_HA-300x212.png 300w\" sizes=\"auto, (max-width: 315px) 100vw, 315px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>El dispositivo que env\u00eda el mensaje con los datos de Humedad y temperatura debe registrarse en ChirpStack. La trama del mensaje se decodifica en al perfil del dispositivo (Device-profile) que permite al servidor de aplicaciones (Application-Server) integrar el mensaje en Home Assistant. Decodificador de Trama - ChirpStack\/Device-Profile En el men\u00fa \"Device-profile\" se crea el perfil &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/blog.espol.edu.ec\/girni\/lorawan-sensor-humedad-y-temperatura-gateway-y-broker\/\" class=\"more-link\">Continuar leyendo<span class=\"screen-reader-text\"> \"LoRaWan \u2013 Sensor Humedad y Temperatura. Gateway y Broker\"<\/span><\/a><\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1465790],"tags":[],"class_list":["post-3407","post","type-post","status-publish","format-standard","hentry","category-lorawan-humedad-y-temperatura"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/3407","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/users\/8043"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/comments?post=3407"}],"version-history":[{"count":6,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/3407\/revisions"}],"predecessor-version":[{"id":3643,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/3407\/revisions\/3643"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/media?parent=3407"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/categories?post=3407"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/tags?post=3407"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}