Revision for “La configuración desde el broker MQTT” created on 9 de noviembre de 2016 a las 18:30:59
Título | La configuración desde el broker MQTT |
---|---|
Contenido | Además de la gran cantidad de cosas que podemos hacer desde la plataforma de WhatsBee también podremos configurar el nodo y ejecutar comandos desde el broker MQTT. Podemos enviar comandos a mano escribiendo en un topic o podemos automatizar las tareas de configuración desde otros dispositivos, desde node-red, etc.
Sin olvidarnos de la seguridad, solo se pueden cambiar la configuraciones que previamente se hayan autorizado desde el portal, recordamos que la comunicación entre el broker y los nodos es encriptada con SSL y no se puede alterar la configuración de seguridad desde el broker, eso crea un entorno seguro.
Cada vez que se conecta un nuevo dispositivo a WhatsBee automáticamente se crean una serie de topics que contienen cada una de las configuraciones del dispositivo, por defecto el propietario del dispositivo tiene acceso de lectura y escritura a las ramas de configuración y a una rama que permite ejecutar comandos. Para cambiar una configuración en un dispositivo (o conocerla) se ejecuta un comando, los permisos de ejecución de comandos se definen en el portal del dispositivo. la rama en la que hay que escribir para ejecutar un comando es la siguiente:
<span class="topic">$DEV/[Nombre usuario]/[Id dispositivo]/CMD/#</span>
Dónde [Nombre Usuario] es nuestro nombre de usuario de WhatsBee y [Id dispositivo] es el identificador único del dispositivo que podremos obtener en el portal de configuración del dispositivo.
Por debajo de este topic escribiremos set[Config] o get[Config] en función de lo que queramos hacer, leer o escribir el valor, para recibir una config no es necesario escribir ningún payload, para cambiarla en el payload escribiremos el nuevo contenido. Las variables que se pueden modificar (en función de los permisos asignados) son:
<ul>
<li><strong>WifiSSID1</strong> Es el identificador (SSID o nombre de la WiFi) del primer punto de acceso al que se conecta el dispositivo</li>
<li><strong>WifiPassword1</strong> Es el password del primer punto de acceso al que se conecta el dispositivo</li>
<li><strong>WifiSSID2</strong> Es el identificador (SSID o nombre de la WiFi) del segundo punto de acceso al que se conecta el dispositivo</li>
<li><strong>WifiPassword2</strong> Es el password del segundo punto de acceso al que se conecta el dispositivo</li>
<li><strong>WifiSSID3</strong> Es el identificador (SSID o nombre de la WiFi) del tercer punto de acceso al que se conecta el dispositivo</li>
<li><strong>WifiPassword3</strong> Es el password del tercer punto de acceso al que se conecta el dispositivo</li>
<li><strong>MQTTServer</strong> Nobre de host o dirección Ip del servidor de WhatsBee, en función de los permisos del dispositivo puede no ser actualizable (normalmente www.whatsbee.com)</li>
<li><strong>MQTTPort</strong> Puerto que utiliza el servidor de WhatsBee para la comunicación con el dispositivo (para configuración SSL normalmente es el 8883, sin SSL el 1883)</li>
<li><strong>MQTTUser</strong> Nombre de usuario del servidor Whatsbee, es necesario tener una cuenta xcreada previamente, más información en http://www.whatsbee.com.</li>
<li><strong>MQTTPassword</strong> Es el password para el usuario de WhatsBee, es necesario tener una cuenta xcreada previamente, más información en http://www.whatsbee.com.</li>
<li><strong>MQTTTopic</strong> Es el Topic en el que el dispositivo escribirá el feed principal de datos. El usuario tiene que tener permisos sobre el topic a utilizar, habitualmente es [nombre de usuario]/[texto descriptivo del dispositivo], por ejemplo juan/termostato</li>
<li><strong>NodeName</strong> Es un nombre descriptivo para el nodo a elección del usuario.</li>
<li><strong>NodeType</strong> Un código que hace referencia al tipo de nodo.</li>
<li><strong>NodeDescr</strong> Descripción breve (texto libre) del dispositivo.</li>
<li><strong>AdminName</strong> Nombre de la persona de contacto, responsable del dispositivo.</li>
<li><strong>AdminMail</strong> Dirección de correo eletrónico de la persona de contacto, responsable del dispositivo.</li>
<li><strong>AdminAddress</strong> Dirección postal en la que está ubicado el dispositivo</li>
<li><strong>NodeLat</strong> Latitud en la que se ubica el dispositivo, se puede obtener en http://maps.google.com/ o en http://www.coordenadas-gps.com/</li>
<li><strong>NodeLon</strong> Longitud en la que se ubica el dispositivo, se puede obtener en http://maps.google.com/ o en http://www.coordenadas-gps.com/</li>
<li><strong>SendDataInterval</strong> Intervalo de tiempo (en milisegundos) transcurrido el cual el dispositivo envia los datos de los sensores al servidor de WhatsBee. El intervalo depende mucho del tipo de sensor, en un sensor de nivel de un depósito de combustible un par de veces al día es suficiente.</li>
<li><strong>SendConfigInterval</strong> Intervalo de tiempo (en milisegundos) transcurrido el cual el dispositivo envia los datos de configuración al servidor de WhatsBee. El envio de los datos de configuración consume ancho de banda, no es necesario enviarlos con mucha frecuencia.¡</li>
<li><strong>ReadSensorInterval</strong> Intervalo de tiempo (en milisengundos) transcurrido el cual el dispositivo leerá el sensor. Generalmente es un intervalo inferior al de envio de los datos. En función de la configuración del umbral si hay una variación grande de los datos el dispositivo enviará las lecturas aunque el intervalo sea inferior al programado.</li>
<li><strong>SleepInterval</strong> Intervalo en el que el nodo duerme (bajo consumo)</li>
<li><strong>SendDataThreshold</strong> Porcentaje de variación en el feed de datos principal en el que se enviarán las lecturas del nodo aunque no le toque por el intervalo de envio de datos. Es un valor porcentual.</li>
<li><strong>APPassword</strong> Password del portal de configuración del dispositivo. Es la clave que pide para poder conectarse al portal de configuración local si pulsamos durante más de 4 segundos. En caso de pérdida del password pulsando el botón durante un tiempo superior a 20 segundos el dispositivo se reiniciará con los valores por defecto. en este caso el password es password.</li>
<li><strong>SysLogHost</strong> Host al que el dispositivo enviará el log (en formato syslog) si está configurado un nivel de log.</li>
<li><strong>SysLogLevel</strong> Nivel de log que en envia al servidor de syslog</li>
<li><strong>SerialLogLevel</strong> Nivel de los que se envia al puerto serie</li>
<li><strong>MqttLogLevel</strong> Nivel de log que en envia al servidor de MQTT</li>
</ul>
Una vez enviamos el comando el dispositivo lo recibirá, comprobará si están configurados los permisos necesarios y lo ejecutará, en función de los permisos pueden ocurrir dos cosas:
Si el usuario tiene permisos suficientes: el dispositivo aceptará su nueva configuración y, si tiene permisos, notificará a todos sus suscriptores que la ha cambiado. Esto lo podremos ver en el dashboard de dispositivos porque la configuración se pintará de verde unos segundos.
[caption id="attachment_7718" align="alignleft" width="366"]<a href="http://blog.whatsbee.net/wiki/caracteristicas-del-firmware-de-whatsbee/la-configuracion-desde-el-broker-mqtt/configuracionaceptada/" rel="attachment wp-att-7718"><img class="size-full wp-image-7718" src="http://blog.whatsbee.net/wp-content/uploads/2016/11/ConfiguracionAceptada.png" alt="Configuración aceptada" width="366" height="585" /></a> Configuración aceptada[/caption]
Si el usuario no tiene permisos para escribir en la configuración no se cambiará y el dispositivo (en función de su configuración de niveles de log) anunciará un error de una de las tres siguientes formas:
<ul>
<li>Mediante el envío de un topic si tiene configurado el log por mqtt, el error se publicará en: <span class="topic">$DEV/[Nombre usuario]/[Id dispositivo]/LOG/#</span></li>
<li>Mediante el puerto serie si está configurado el log por Serial.</li>
<li>A través de un servidor Syslog si está configurado el log por Syslog.</li>
</ul>
El cambio en la configuración se ejecutará inmediatamente.
<h4>...y ¿para qué sirve esto?</h4>
Siguiendo con el ejemplo que hemos cogido desde el principio tenemos un termostato sencillo de ambiente para una impresora 3D, que es capaz de mantener la temperatura entre dos valores encendiendo y apagando una lámpara infraroja (<a href="http://www.zigbe.net/archivos/8211">recuerdo el ejemplo para los que no hayáis empezado desde el principio</a>). Si somos capaces de cambiar desde el broker la temperatura a la que el termostato enciende o apaga la lámpara podemos hacer un script que la cambie en varios momentos prefijados del día. Con eso habremos convertido un termostato sencillo en un cronotermostato, es decir, lo podríamos utilizar en casa para tener unos perfiles de temperatura diferentes en función del momento del día (de la temperatura de otro sensor, de nuestro estado de ánimo, del resultado de unas elecciones o de si hay alguien fuera o dentro de casa).
Con los permisos adecuados podríamos sobrevivir (sin visitar la instalación) a un cambio de contraseña de la Wifi, podríamos cambiar las contraseñas del portal si tenemos sospechas de que alguien puede conectarse o el topic en el que escribe un dispositivo.
<h3>...y ¿es necesario que utilice este "rollo"?</h3>
En absoluto, el sistema está concebido como algo sencillo de utilizar para cualquier tipo de usuario, pero también lo hemos hecho pensando en los usuarios más avanzados. Un usuario básico puede cambiar una configuración simplemente escribiendo en un control en el Widget del dashboard de dispositivos, un usuario avanzado puede hacerlo desde cualquier sitio (una vez más... en cualquier parte del mundo). |
Extracto |