Guía para principiantes de OpenHAB, Parte 2: ZWave, MQTT, reglas y gráficos

OpenHAB, el software de automatización del hogar de código abierto, supera con creces las capacidades de otros sistemas de automatización del hogar en el mercado, pero no es fácil configurarlo. De hecho, puede ser francamente frustrante.

OpenHAB, el software de automatización del hogar de código abierto, supera con creces las capacidades de otros sistemas de automatización del hogar en el mercado, pero no es fácil configurarlo.  De hecho, puede ser francamente frustrante.
Anuncio

Gratis no siempre significa "no tan bueno como pagado", y OpenHAB no es una excepción. El software de automatización del hogar de código abierto supera con creces las capacidades de cualquier otro sistema de automatización del hogar en el mercado, pero no es fácil configurarlo. De hecho, puede ser francamente frustrante.

Esta guía está disponible para descargar en formato PDF gratuito. Descargue ahora la Guía para principiantes de OpenHAB, Parte 2: ZWave, MQTT, Reglas y Gráficos . Siéntase libre de copiar y compartir esto con sus amigos y familiares.

En la parte 1 de la guía, lo guié en la instalación de OpenHAB en un Raspberry Pi. Comenzando con OpenHAB Home Automation en Raspberry Pi. Comenzando con OpenHAB Home Automation en Raspberry Pi. OpenHAB es una plataforma de automatización del hogar madura y abierta que funciona en una variedad de hardware y es independiente del protocolo, lo que significa que se puede conectar a casi cualquier hardware de automatización del hogar en el mercado hoy en día. Lea más, presentó los conceptos básicos de OpenHAB y le mostró cómo agregar sus primeros elementos al sistema. Hoy vamos a ir más lejos:

  • Agregar dispositivos ZWave
  • Agregar un controlador Harmony Ultimate
  • Introduciendo reglas
  • Presentamos MQTT e instalamos un intermediario MQTT en tu Pi, con sensores en un Arduino
  • Grabar datos y graficarlo

Introducción a Z-Wave

Z-Wave ha sido el protocolo de automatización del hogar dominante durante años: es confiable, ha sido ampliamente desarrollado y funciona en un rango mucho más largo que cualquier otro producto inteligente para el hogar. Hay cientos de sensores Z-Wave disponibles para usted que realizan una amplia gama de tareas. OpenHAB puede funcionar con Z-Wave, pero es una tarea complicada de configurar y su fiabilidad no está garantizada.

Si está considerando comprar una casa llena de sensores Z-Wave específicamente para su uso con OpenHAB, le insto a que reconsidere su decisión. Puede funcionar bien para usted, o puede estar plagado de problemas pequeños pero persistentes. Al menos, no compre una casa llena de sensores hasta que haya tenido la oportunidad de probar algunos. La única razón para elegir Z-Wave es si no está 100% satisfecho con OpenHAB, y le gustaría dejar sus opciones abiertas en el futuro: Z-Wave por ejemplo funciona con SmartThings de Samsung. Qué Smart Hub para Automatización del Hogar es mejor para usted ? ¿Qué Smart Hub para Home Automation es el mejor para usted? Por un tiempo, la gente pensó en la idea como nada más que un truco, pero los lanzamientos de productos recientes han demostrado que la domótica inteligente está empezando a cumplir sus promesas. Lea más hub, así como concentradores específicos de Z-Wave, como Homeseer, y una gama de otras opciones de software, como Domoticz.

Aunque OpenHAB incluye un enlace Z-Wave, usted todavía necesita configurar la red Z-Wave primero, antes de que OpenHAB pueda comenzar a consultar los datos. Si tiene una placa controladora de Rasberry, tiene algún software suministrado para configurar la red, por lo que no lo cubriremos aquí. Si compró un controlador Aeotec USB Z-Stick o similar, es probable que no tenga ningún software incluido, así que siga leyendo.

Aeotec Z-Stick Gen5, Z-Wave Plus USB para crear gateway Aeotec Z-Stick Gen5, Z-Wave Plus USB para crear gateway Comprar ahora En Amazon $ 44.95

Si ya tiene una configuración de red Z-Wave, puede simplemente conectar su controlador al Pi y comenzar a configurar el enlace y los elementos. Si esta es tu primera incursión en Z-Wave, es un poco más complejo.

Primero, en el lado del hardware: cada controlador tiene su propia forma de vincularse con dispositivos (técnicamente conocido como "modo de inclusión" en el que se asigna una ID de nodo). En el caso del Aotec Z-Stick, esto significa desenchufarlo del puerto USB y presionar el botón una vez para colocarlo en modo de inclusión. Luego, acérquelo al dispositivo que está emparejando y presione el botón de inclusión también (esto también variará: mi socket Everspring requiere que el botón presione 3 veces en sucesión rápida, por lo que la lección aquí es leer el manual de tu dispositivo) .

El Z-Stick parpadea brevemente para indicar el éxito. Esto presenta problemas cuando se vuelve a enchufar en el Pi, ya que se asigna un nuevo puerto. Reinicie su Pi para que vuelva a restablecer al puerto estándar si encuentra que ha sido reasignado dinámicamente a uno diferente. Mejor aún: no lo conecte al Pi hasta que haya hecho todos los emparejamientos de hardware primero.

Instalación de enlaces HABmin y Z-Wave

Dado que OpenHAB no es realmente una utilidad de configuración para Z-Wave, vamos a instalar otra herramienta de administración web que lo haga, algo llamado HABmin. Dirígete al repositorio HABmin Github descarga la versión actual. Una vez que lo haya descomprimido, encontrará 2 archivos .jar en el directorio de complementos; estos deben colocarse en el directorio de complementos correspondiente en su compartimiento de inicio de OpenHAB (si también está usando el Z-Stick genote Aotec, asegúrese de Tengo al menos la versión 1.8 del enlace Z-Wave) .

A continuación, cree una nueva carpeta en el directorio webapps, y llámala "habmin" (la minúscula es importante). Copie el resto de los archivos descargados allí.

Nota: También hay un HABmin 2 en desarrollo activo. La instalación es muy similar, pero con un complemento .jar adicional. Puede valer la pena probar ambos solo para ver cuál prefieres.

Si aún no lo has hecho, conecta tu controlador a tu Pi. Escriba lo siguiente para encontrar el puerto correcto.

 ls / dev / tty * 

Está buscando algo con USB en el nombre, o en mi caso particular, el Z-stick se presentó como / dev / ttyACM0 (un módem). Puede ser más fácil hacer el comando una vez antes de conectarlo, y una vez después, para que pueda ver qué cambia si no está seguro.

devtty

Abra el archivo de configuración de OpenHAB y modifique la sección en Z-Wave, eliminando el comentario de ambas líneas y poniendo la dirección de su dispositivo real. Un último paso para mí fue permitir que el usuario de OpenHAB accediera al módem.

 sudo usermod -a -G dialout openhab 

Ahora, para poner todo en acción, reinicie OpenHAB

 sudo service openhab restart 

Con suerte, si está revisando el registro de depuración, verá algo como esto. Felicitaciones, ahora estás hablando Z-Wave. También puede encontrar el registro de depuración inundado con mensajes de varios nodos Z-Wave. Comencemos por verificar HABMIN para ver qué se encuentra: http: //openhab.local: 8080 / habmin / index.html (reemplazando openhab.local con su nombre de host o dirección IP de Raspberry Pi).

zwave comenzando en el registro openhab

Hay mucho que ver en HABMIN, pero solo nos preocupamos por la configuración -> Vinculaciones -> Z-Wave -> pestaña Dispositivos, como puede ver a continuación. Expanda el nodo para editar la ubicación y la etiqueta del nombre para su fácil referencia.

edita el nombre del dispositivo

Configuración de elementos Z-Wave

Cada dispositivo Z-Wave tendrá una configuración específica para OpenHAB. Afortunadamente, la mayoría de los dispositivos ya se han explorado y ya habrá ejemplos de los tuyos. La configuración de dispositivos personalizados que no se reconocen va más allá del alcance de esta guía, pero supongamos que es compatible por ahora.

En primer lugar, tengo un conmutador de encendido Everspring AN158 básico y un medidor en el nodo 3. Un Google rápido me llevó a una publicación de blog en Wetwa.re, con una configuración de elemento de muestra. Lo adapté de la siguiente manera:

 Interruptor Deshumidificador_ Interruptor "Deshumidificador" {zwave = "3: comando = interruptor_binario"} Número Deshumidificador_Watts "Consumo de energía del deshumidificador [% .1f W]" {zwave = "3: comando = metro"} 

Perfecto.

El siguiente es un Multi-Sensor Aeotec Gen5.

Aeon Labs Aeotec Z-Wave Gen5 Multi-Sensor (Z-Wave Plus) Aeon Labs Aeotec Z-Wave Gen5 Multi-Sensor (Z-Wave Plus) Comprar ahora En Amazon

Para este, encontré una configuración de muestra en iwasdot.com, y mi multisensor está en el Nodo 2.

 Número Hallway_Temperature "Hallway Temperature [% .1f ° C]" (Pasillo, temperatura) {zwave = "2: 0: comando = sensor_multilevel, sensor_type = 1, sensor_scale = 0"} Number Hallway_Humidity "Hallway Humidity [% .0f %% ] "(Pasillo, humedad) {zwave =" 2: 0: comando = sensor_multilevel, sensor_type = 5 "} Number Hallway_Luminance" Luminancia del pasillo [% .0f Lux] "(Pasillo) {zwave =" 2: 0: comando = sensor_multilevel, sensor_type = 3 "} Contact Hallway_Motion" Pasillo Movimiento [% s] "(Pasillo, Movimiento) {zwave =" 2: 0: comando = sensor_binary, responda_ a_base = verdadero "} Número sensor_1_battery" Batería [% s %%] "( Movimiento) {zwave = "2: 0: comando = batería"} 

Si el formato le parece extraño, vuelva a la primera guía para principiantes Introducción a OpenHAB Home Automation en Raspberry Pi Introducción a OpenHAB Home Automation en Raspberry Pi OpenHAB es una plataforma de automatización del hogar madura y abierta que se ejecuta en una variedad de hardware y es independiente del protocolo, lo que significa que puede conectarse a casi cualquier hardware de automatización del hogar en el mercado hoy en día. Lea más, específicamente la sección de enlace de Hue, donde explico cómo se agregan los elementos. Probablemente solo necesite copiar ejemplos de pegado como este, pero en caso de que tenga un dispositivo nuevo, la documentación de enlace detallará todos los comandos.

Logitech Harmony Binding

Antes de saltar a las reglas, quería agregar una nota rápida sobre cómo trabajar con el enlace de Harmony. Soy un gran admirador de la serie Harmony de controles remotos definitivos Logitech Harmony Ultimate Review y Giveaway Logitech Harmony Ultimate Review y Giveaway Tu sala de estar es un caos, admítelo. Estás perdonado por preguntarte qué control remoto qué dispositivo. Con el televisor, amplificador, TiVO, reproductor BluRay, tal vez incluso las actividades de cambio de iluminación se convierten en un largo ... Leer más para simplificar la experiencia del centro de medios hogareños, pero a menudo se destacan como un sistema separado dentro de la casa inteligente. Con OpenHAB, las actividades de Logitech Harmony y el control total del dispositivo ahora pueden ser parte de su sistema centralizado e incluso incluirse en las reglas de automatización.

Comience instalando los tres archivos de enlace que encuentre usando apt-cache para buscar "armonía":

openhab apt-cache búsqueda de enlace de armonía

No olvide volver a cerrar el directorio de enlaces cuando haya terminado:

 sudo apt-get instalar openhab-addon-action-harmonyhub sudo apt-get instalar openhab-addon-binding-harmonyhub sudo apt-get instalar openhab-addon-io-harmonyhub sudo chown -hR openhab: openhab / usr / share / openhab 

Para configurar el enlace, abra el archivo openhab.cfg y agregue una nueva sección de la siguiente manera:

 ########## HARMONY CONTROLES REMOTOS ########## harmonyhub: host = 192.168.1.181 o su IP harmonyhub: username = your-harmony-email-login harmonyhub: password = your- contraseña 

La dirección IP es la de su hub Harmony. Use un escáner de red para descubrirlo. También deberá ingresar sus detalles de inicio de sesión, los que ingresa cuando inicia la utilidad de configuración estándar de Harmony. Eso es. Al reiniciar su tono, su registro de depuración debería tener una explosión repentina de salida del enlace.

Esta es una lista con formato JSON de todas sus actividades, dispositivos y comandos que pueden enviarse. Es una buena idea copiar esto para referencia futura. puede hacer que sea aún más fácil de leer con nodos contraíbles pegando en un formateador JSON en línea como este.

json formato de salida openhab

Además de la actividad estándar de PowerOff que es un valor predeterminado, encontrará sus propias actividades definidas enumeradas aquí por su nombre. Ahora vamos a crear un control simple de un botón para comenzar las actividades. Primero, en su archivo de elementos, agregue la siguiente línea. Cambie el grupo y el icono si lo desea.

 / * Harmony Hub * / String Harmony_Activity "Harmony [% s]" (Living_Room) {harmonyhub = "* [currentActivity]"} 

Se trata de un enlace de cadena bidireccional, que es capaz de recuperar la actividad actual y ordenar que la actividad actual sea otra cosa. Ahora podemos crear un botón para él, en el archivo del mapa del sitio.

 Cambiar elemento = asignaciones Harmony_Activity = [PowerOff = 'Off', Ejercicio = 'Ejercicio', 13858434 = 'TV', Karaoke = 'Karaoke'] 

En el corchete, verás cada actividad junto con la etiqueta. En general, puede referirse directamente a las actividades como las ha nombrado en su control remoto, pero la excepción a esto que encontré fue cualquier cosa con un espacio en el nombre de la actividad, como "Ver TV". En este caso, deberá usar la ID de la actividad. Nuevamente, puede encontrar la ID en la salida de depuración JSON. Guarde y actualice su interfaz, debería ver algo similar a esto:

openhab armonía en el mapa del sitio

También puede consultar las actividades en sus reglas, como veremos a continuación. Lea la página wiki para obtener más información sobre el enlace Harmony.

Una introducción general a las reglas

La mayoría de los centros hogareños inteligentes incluyen algún tipo de creación de reglas para que pueda reaccionar automáticamente ante los datos y eventos del sensor en el hogar. De hecho, yo diría que una casa verdaderamente inteligente no es una que necesita para pasar el tiempo interactuando con aplicaciones móviles, es una que es invisible para el usuario final y completamente automatizada. Con este fin, OpenHAB también incluye un potente lenguaje de scripting de reglas que usted puede programar, que supera con creces la complejidad de la mayoría de los hubs hogareños inteligentes. Battle of the Smart Home Hubs: ¿Qué hay allí y qué viene? Battle of the Smart Home Hubs: ¿Qué hay allí y qué viene? Leer más o recetas IFTTT IFTTT ahora se conecta a cualquier cosa: presentando el canal Maker IFTTT ahora se conecta a cualquier cosa: presentando el canal Maker Los usos potenciales para IFTTT son infinitos. Pero hasta ahora, ha sido difícil relacionarlo con sus propios proyectos de hardware. Hoy, todo ha cambiado. Lee mas .

Las reglas de programación suenan peor de lo que son. Comencemos simple con un par de reglas que encienden o apagan la luz dependiendo del sensor de presencia:

 rule "Luz de oficina encendida cuando James presente" cuando Artículo JamesInOffice cambió de OFF a ON luego sendCommand (Office_Hue, ON) regla final "Luz de oficina apagada cuando James se va" cuando Item JamesInOffice cambió de ON a OFF luego sendCommand (Office_Hue, OFF) final 

Primero, nombramos la regla: sea descriptivo, para que sepa qué evento está disparando. A continuación, definimos nuestra regla simple diciendo cuando x es verdadero, luego hacemos y . End significa el cierre de esa regla en particular. Hay una serie de palabras especiales que puede usar en las reglas, pero por ahora estamos lidiando con dos simples bits de sintaxis: Item, que le permite consultar el estado de algo; y sendCommand, que hace exactamente lo que crees que hará. Te dije que esto fue fácil.

Probablemente sea innecesario usar un par de reglas, pero a medida que mi lógica se vuelva más compleja, será beneficioso separarlas, ya sea para entrar o salir de la zona, y podría ser una buena idea agregar un sensor de luz en algún lugar. en la ecuación para que no estemos encendiendo luces innecesariamente.

Veamos otro ejemplo para crear una regla programada.

 regla "Ejercicio todas las mañanas" cuando Time cron "0 0 8 1/1 *? *" luego harmonyStartActivity ("Exercise") end 

De nuevo, nombramos la regla, las condiciones del estado cuando debería disparar y las acciones a tomar. Pero en este caso, estamos definiendo un patrón de tiempo. El código divertido que ves en las comillas es una expresión CRON para Quartz Scheduler (el formato es ligeramente diferente de un CRONtab normal). Utilicé cronmaker.com para ayudar a crear la expresión, pero también puede leer la guía de formato para obtener una explicación detallada y más ejemplos.

generador cron
CronMaker.com solía generar la expresión de Cron correctamente formateada

Mis reglas dicen simplemente "8 a.m. todas las mañanas, todos los días de la semana, le digo a mi sistema Harmony Ultimate que comience la actividad de Ejercicio", que a su vez activa el televisor, la Xbox, el amplificador y presiona el botón A después de un minuto para iniciar el disco en la unidad.

Tristemente, OpenHAB aún no puede hacer el ejercicio por mí.

Una regla más que quiero mostrar es algo que utilizo para administrar los niveles de humedad en mi hogar. Tengo un solo deshumidificador que necesito mover cuando sea necesario, así que decidí mirar todos mis sensores de humedad, encontrar cuál es el más alto y almacenarlo en una variable. Actualmente se activa cada minuto, pero puede reducirse fácilmente. Eche un vistazo primero:

 import org.openhab.core.library.types. * import org.openhab.model.script.actions. * import java.lang.String rule "Humidity Monitor" cuando Time cron "0 * * * *?" entonces var prevHigh = 0 var highHum = "" ¿Humedad? .members.forEach [hum | logDebug ("humidity.rules", hum.name); if (hum.state como DecimalType> prevHigh) {prevHigh = hum.state highHum = hum.name + ":" + hum.state + "%"}] logDebug ("humidity.rules", highHum); postUpdate (Dehumidifier_Needed, highHum); fin 

El núcleo de la regla está en la línea Humedad? .members.foreach . La humedad es un nombre de grupo para mis sensores de humedad; .members toma todos los elementos en ese grupo; foreach los repite (con un curioso formato de corchete cuadrado con el que probablemente no estés familiarizado). La sintaxis de las reglas es una derivación de Xtend, por lo que puede leer la documentación de Xtend si no puede encontrar un ejemplo para adaptar.

Sin embargo, probablemente no necesites: hay cientos de reglas de ejemplo por ahí:

  • Explicación detallada de las reglas en la wiki oficial
  • Las reglas oficiales muestran la página wiki
  • Llevando las reglas a nuevas alturas
  • Muestras avanzadas en IngeniousFool.net

MQTT para OpenHAB e Internet de las cosas

MQTT es un sistema de mensajería liviano para la comunicación de máquina a máquina, una especie de Twitter para que Arduinos o Raspberry Pis hablen entre sí (aunque, por supuesto, funciona con mucho más que solo eso). Está ganando popularidad rápidamente y se está convirtiendo en un hogar con dispositivos de Internet de las cosas, que generalmente son microcontroladores de bajo recurso que necesitan una forma confiable de transmitir datos de los sensores a su centro o recibir comandos remotos. Eso es exactamente lo que haremos con él.

Pero, ¿por qué reinventar la rueda?

MQ Telemetry Transport se inventó allá por 1999 para conectar oleoductos a través de conexiones lentas por satélite, diseñado específicamente para minimizar el uso de la batería y el ancho de banda, al tiempo que proporciona una entrega de datos confiable. Con los años, los principios de diseño se han mantenido igual, pero el caso de uso ha cambiado de sistemas integrados especializados a dispositivos de Internet de las cosas en general. En 2010, el protocolo fue lanzado libre de regalías, abierto para que cualquiera pueda usarlo e implementarlo. Nos gusta gratis

Tal vez se pregunte por qué nos molestamos con otro protocolo, ya que tenemos el HTTP después de todo, que se puede usar para enviar mensajes rápidos entre todo tipo de sistemas conectados a la web (como OpenHAB e IFTTT, en particular con el nuevo canal creador IFTTT ahora se conecta a cualquier cosa: presentando el canal Maker IFTTT ahora se conecta a cualquier cosa: presentando el canal Maker Los usos potenciales de IFTTT son infinitos. Pero hasta ahora, ha sido difícil relacionarlo con sus propios proyectos de hardware. Hoy, todo eso ha cambiado. Lee mas ). Y estarías en lo cierto. Sin embargo, la sobrecarga de procesamiento de un servidor HTTP es bastante grande, tanto que no puedes ejecutar fácilmente uno en un microcontrolador integrado como el Arduino (al menos, puedes, pero no tendrás mucha memoria para nada más) ) Por otra parte, MQTT es liviano, por lo que enviar mensajes por la red no obstruirá las tuberías, y puede caber fácilmente en nuestro pequeño espacio de memoria Arduino.

¿Cómo funciona MQTT?

MQTT requiere un servidor (llamado "intermediario") y uno o más clientes. El servidor actúa como intermediario, recibiendo mensajes y retransmitiéndolos a cualquier cliente interesado.

Sin embargo, sigamos con la analogía de Twitter por máquinas . Así como los usuarios de Twitter pueden twittear sus propios 140 caracteres sin sentido y los usuarios pueden "seguir" a otros usuarios para ver una secuencia seleccionada de publicaciones, los clientes de MQTT pueden suscribirse a un canal en particular para recibir todos los mensajes y publicar sus propios mensajes. a ese canal Este patrón de publicación y suscripción se conoce como pub / sub, en oposición al modelo tradicional de cliente / servidor de HTTP.

HTTP requiere que te comuniques con la máquina con la que te estás comunicando, por ejemplo, "Hola", y luego tengas un vaivén de reconocimiento mutuo mientras obtienes o colocas datos. Con pub / sub, el cliente que realiza la publicación no necesita saber a qué clientes se suscriben: simplemente bombea los mensajes y el intermediario los redistribuye a los clientes suscritos. Cualquier cliente puede publicar y suscribirse a temas, al igual que un usuario de Twitter.

Sin embargo, a diferencia de Twitter, MQTT no está limitado a 140 caracteres. Es independiente de los datos, por lo que puede enviar números pequeños o bloques de texto grandes, datagramas con formato JSON o incluso imágenes y archivos binarios.

No es que MQTT sea mejor que HTTP para todo, pero es más adecuado si vamos a tener muchos sensores en toda la casa, informando constantemente.

También es importante saber que OpenHAB no actuará como su intermediario MQTT; lo abordaremos más adelante. Sin embargo, OpenHAB actuará como un cliente: puede publicar su registro de actividad de OpenHAB, así como vincular canales particulares a los dispositivos, por lo que puede, por ejemplo, tener un interruptor controlado por mensajes MQTT en un canal en particular. Esto es ideal para crear una casa llena de sensores.

Instala Mosquitto en tu Pi

Aunque OpenHAB incluye un cliente MQTT para que pueda suscribirse a un tema y también publicar mensajes, no actuará como servidor. Para eso, debe utilizar un intermediario MQTT basado en la web (pagado o gratis) o instalar el software gratuito en su Pi. Me gustaría mantener todo en la casa, así que he instalado Mosquitto en el Pi.

Lamentablemente, la versión disponible a través del habitual apt-get está completamente desactualizada. En cambio, agreguemos las últimas fuentes.

 wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key sudo apt-key add mosquitto-repo.gpg.key cd /etc/apt/sources.list.d/ sudo wget http: // repo.mosquitto.org/debian/mosquitto-wheezy.list sudo apt-get install mosquitto 

Eso es todo lo que tenemos que hacer para tener un servidor MQTT en funcionamiento en la red local. Su corredor se está ejecutando en el puerto 1883 de forma predeterminada.

Compruebe que su servidor MQTT funciona con el MQTT.fx gratuito, que es multiplataforma. Haga clic en el icono de configuración para crear un nuevo perfil e ingrese la dirección IP o nombre de su Raspberry Pi. Guarde, y presione conectar. Si el pequeño semáforo en la parte superior derecha se pone verde, está listo para ir.

perfil de ejemplo mqttfx

Para una prueba rápida, haga clic en la pestaña "suscribirse" y escriba " Tópico" en el cuadro de texto, luego presione el botón Suscribir . Ahora está suscrito para recibir un mensaje sobre el tema llamado inTopic, aunque mostrará 0 mensajes. Vuelva a la pestaña de publicación, escriba "Tópico" en el cuadro pequeño y un mensaje corto en el cuadro de texto grande a continuación. Pulse Publicar un par de veces y mire hacia atrás en la pestaña de suscripción. Debería ver algunos mensajes que aparecieron en ese tema.

prueba inTopic MQTT

Antes de agregar algunos sensores reales a nuestra red, necesitamos aprender sobre los niveles de los temas, lo que nos permite estructurar y filtrar la red MQTT. Los nombres de los temas distinguen entre mayúsculas y minúsculas, no deben comenzar con $, o incluir un espacio, o caracteres que no sean ASCII, prácticas de programación estándar para nombres de variables, realmente.

El / separador indica un nivel de tema, que es jerárquico, por ejemplo, los siguientes son todos los niveles de tema válidos.

 inTopic / smallSubdivision / evenSmallerSubdivision myHome / livingRoom / temperature myHome / livingRoom / humidity myHome / cocina / temperatura myHome / cocina / humedad 

Ya debería estar viendo cómo esta estructura de árbol es perfecta para una casa inteligente llena de sensores y dispositivos. La mejor práctica para su uso con múltiples sensores en una habitación individual es publicar cada variable del sensor como su propio nivel de tema, diversificándose más (como en los ejemplos anteriores) en lugar de intentar publicar múltiples tipos de sensores en el mismo canal .

Los clientes pueden publicar o suscribirse a cualquier número de niveles de temas individuales o usar algunos caracteres comodín especiales para filtrar desde un nivel superior en el árbol.

El comodín + sustituye cualquier nivel de tema. Por ejemplo:

 myHome / + / temperatura 

suscribiría al cliente a ambos

 myHome / livingRoom / temperature myHome / cocina / temperatura 

... pero no los niveles de humedad.

El # es un comodín de varios niveles, por lo que podría obtener cualquier cosa del conjunto de sensores del livingroom con:

 myHome / livingRoom / # 

Técnicamente, también puedes suscribirte al nivel de raíz # en el que obtienes absolutamente todo lo que pasa por el intermediario, pero eso puede ser como poner una manguera de incendios en tu cara: un poco abrumador. Intente conectarse al agente público de MQTT desde HiveMQ y suscríbase a #. Recibí unos 300 mensajes en unos segundos antes de que mi cliente se bloqueara.

Consejo para principiantes de MQTT: " / myHome /" es un tema diferente de " myHome /", que incluye una barra al principio que crea un nivel de tema en blanco, que aunque técnicamente válido, no se recomienda porque puede ser confuso.

Ahora que conocemos la teoría, demos un vistazo con un Arduino, Ethernet Shield y un sensor de temperatura y humedad DHT11; probablemente hay uno en su kit de inicio, pero si no, simplemente cambie el sensor ambiental por un movimiento. sensor (o incluso un botón).

Publicar MQTT desde un Arduino con conexión Ethernet

Si tiene un dispositivo híbrido compatible con Arduino con Wi-Fi o Ethernet incorporado, eso también debería funcionar. Eventualmente, querremos una forma mejor / más económica de comunicar que tener que usar una conexión de red en cada habitación, pero esto sirve para aprender los conceptos básicos.

Comience por descargar la biblioteca pubsubclient de Github. Si usó el botón "Descargar como ZIP", la estructura está un poco mal. Descomprime, cambia el nombre de la carpeta a solo pubsubclient, luego saca los dos archivos de la carpeta src y muévelos un nivel hacia la raíz de la carpeta descargada. A continuación, mueva toda la carpeta a su directorio Arduino / libraries .

Aquí está mi código de muestra que puede adaptar: la salida de la señal DHT11 está en el pin 7. Cambie la IP del servidor por la de su Pi en la siguiente línea:

 client.setServer ("192.168.1.99", 1883); 

Desafortunadamente, no podemos usar su nombre descriptivo (OpenHAB.local en mi caso) ya que la pila TCP / IP en el Arduino es muy simplista y agregar el código para el nombramiento de Bonjour sería una gran cantidad de memoria que no queremos desperdiciar . Para cambiar los temas en los que se transmiten los datos del sensor, desplácese hacia abajo a estas líneas:

 búfer de caracteres [10]; dtostrf (t, 0, 0, memoria intermedia); client.publish ("openhab / himitsu / temperature", buffer); dtostrf (h, 0, 0, memoria intermedia); client.publish ("openhab / himitsu / humidity", buffer); 

El código también incluye suscripción a un canal de comando. Encuentre y ajuste la siguiente línea:

 client.subscribe ("openhab / himitsu / command"); 

Examine el código que hay alrededor y verá que puede controlar fácilmente un LED o relé, por ejemplo, enviando comandos a canales específicos. En el código de ejemplo, simplemente envía un mensaje de vuelta acusando recibo del comando.

Suba su código, conecte su Arduino a la red y, usando MQTT.fx, suscríbase a # o openhab / himitsu / # (o lo que sea que haya cambiado el nombre de la habitación, pero no olvide incluir el # al final). Muy pronto deberías ver los mensajes entrando; y si envía ENCENDIDO o APAGADO al tema del comando, verá que también regresan los agradecimientos.

mqtt arduino mensajes regresando

Encuadernación MQTT para OpenHAB

El último paso en la ecuación es enganchar esto en OpenHAB. Para eso, por supuesto, necesitamos un enlace.

 sudo apt-get install openhab-addon-binding-mqtt sudo chown -hR openhab: openhab / usr / share / openhab 

Y edite el archivo de configuración para habilitar el enlace.

 mqtt: broker.url = tcp: // localhost: 1883 mqtt: broker.clientId = openhab 

Reinicie OpenHAB

 sudo service openhab restart 

Entonces agreguemos un artículo o dos:

 / * Sensores MQTT * / Número Himitsu_Temp "Temperatura Himitsu [% .1f ° C]" (Himitsu, Temperatura) {mqtt = "<[intermediario: openhab / himitsu / temperatura: estado: predeterminado]"} Número Himitsu_Humidity "Humedad Himitsu [ % .1f %%] "(Himitsu, Humedad) {mqtt =" <[broker: openhab / himitsu / humidity: state: default] "} 

Por ahora deberías entender el formato; es obtener un elemento Número del enlace MQTT, en un tema específico. Este es un ejemplo simple, es posible que desee consultar la página wiki donde puede ser mucho más complejo.

Enhorabuena, ahora tiene la base de un conjunto de sensores baratos basados ​​en Arduino. Volveremos a visitar esto en el futuro y colocaremos los Arduino en su propia red de RF por separado. También he creado una versión idéntica para las placas Wizwiki 7500 si tienes una de esas.

Persistencia y gráficos de datos

A estas alturas, es probable que haya configurado un conjunto de sensores, ya sea de Z-Wave o Arduinos personalizados que ejecuten MQTT, para que pueda ver el estado actual de esos sensores en cualquier momento, y también debe reaccionar a su valor en las reglas. Pero lo interesante de los valores de los sensores es que generalmente cambian con el tiempo: ahí es donde entran la persistencia y la representación gráfica. La persistencia en OpenHAB significa guardar los datos a lo largo del tiempo. Avancemos y configuremos RRD4J (Base de datos Round Robin para Java), llamado así porque los datos se guardan de manera rutinaria: los datos anteriores se descartan para comprimir el tamaño de la base de datos.

Instale los paquetes rrd4j con los siguientes comandos.

 sudo apt-get install openhab-addon-persistence-rrd4j sudo chown -hR openhab:openhab /usr/share/openhab 

A continuación, cree un nuevo archivo llamado rrd4j.persist en la carpeta configuraciones / persistencia . Pega lo siguiente:

 Estrategias {everyMinute: "0 * * * *?" cada hora: "0 0 * * *?" todos los días: "0 0 0 * *?" default = everyChange} Items {// persisten todo cuando se actualiza el valor, solo un valor predeterminado, y restaurarlos desde la base de datos al inicio *: strategy = everyChange, restoreOnStartup // a continuación definimos estrategias específicas de everyHour para cualquier cosa en el grupo Temperature, y cada minuto para Temperatura de Humedad *: estrategia = cada Humedad Humana *: estrategia = cada Mínimo // alternativamente puede agregar elementos específicos aquí, como // Humedad de la Habitación, JamesInOffice: estrategia = cada Minuto} 

En la primera parte de este archivo, estamos definiendo estrategias, lo que simplemente significa dar un nombre a una expresión CRON. Es lo mismo que ya hicimos con My.OpenHAB, pero esta vez creamos algunas estrategias nuevas que podemos usar cada día, cada hora y cada minuto. Todavía no los he usado todos, pero podría ser en el futuro.

En la segunda mitad del archivo, le informamos a rr4dj qué valores de datos desea guardar. Como opción predeterminada, vamos a guardar todo cada vez que se actualice, pero también he especificado algunas estrategias basadas en el tiempo para sensores específicos. Las temperaturas no me molestan demasiado, así que lo he configurado para ahorrar cada hora solamente, pero la humedad es una gran preocupación para mí, así que quiero ver cómo está cambiando cada minuto. Si hay otros datos que desea guardar específicamente a horas determinadas, agréguelos aquí ahora o ajústelos según sea necesario.

Nota: si también desea graficar los datos, DEBE almacenarlos al menos una vez por minuto. No importa si los datos de su sensor se actualizan tan rápido, simplemente necesita decirle a rr4dj que lo almacene una vez por minuto.

Con eso definido, debería comenzar a ver algún resultado de depuración que le indique que los valores se están almacenando.

rrd4j almacenando datos

A continuación, hagamos algunos gráficos bonitos de todos estos datos. Es realmente fácil. Para hacer un gráfico de un sensor individual, agregue lo siguiente a su mapa del sitio:

 Ítem ​​del gráfico = período de humedad del dormitorio = h 

Eso es literalmente todo lo que necesitas. Los valores válidos para el período son h, 4 h, 8 h, 12 h, D, 3D, W, 2 W, M, 2 M, 4 M, Y ; debería ser obvio lo que significan. De forma predeterminada, es D para un día completo de datos si no se especifica.

Para crear un gráfico con múltiples elementos, simplemente grafica el nombre del grupo en su lugar:

 Elemento de gráfico = período de humedad = h 

gráfico

También podría interesarte saber que puedes usar este gráfico en otro lugar; está generando una imagen usando la siguiente URL: http: // YOUROPENHABURL: 8080 / chart? groups = Humedad & período = h

¿Cómo está llegando tu sistema OpenHAB?

Eso es todo por esta entrega de la guía, pero no espere que sea la última vez que nos cuente sobre OpenHAB. Esperemos que esta y la guía para principiantes te hayan proporcionado una sólida base para desarrollar tu propio sistema OpenHAB completo, pero es un proceso que nunca está completamente terminado.

Afortunadamente, OpenHAB puede escalar bien desde unos pocos dispositivos hasta cientos, desde una simple complejidad de reglas hasta lo último en automatización doméstica, entonces, ¿cómo está avanzando su sistema? ¿Qué dispositivos elegiste? ¿Cuál es el próximo gran proyecto que vas a abordar?

Hablemos en los comentarios, y si esta guía le resultó útil, haga clic en los botones para compartir para decirles a sus amigos cómo ellos también pueden configurar su propio sistema OpenHAB.

In this article