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 de configurar. De hecho, puede ser francamente frustrante.

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

En la parte 1 de la guía, te guié Instalar OpenHAB en una Raspberry Pi Comenzando con OpenHAB Home Automation en Raspberry PiOpenHAB es una plataforma de automatización del hogar madura y de código abierto que se ejecuta en una variedad de hardware y es independiente del protocolo, lo que significa que se puede conectar a casi cualquier hardware de domótica en el mercado hoy. Lee mas , introdujo los conceptos básicos de OpenHAB y le mostró cómo agregar sus primeros elementos al sistema. Hoy iremos más allá:

instagram viewer
  • Agregar dispositivos ZWave
  • Agregar un controlador Harmony Ultimate
  • Introduciendo reglas
  • Presentamos MQTT e instalamos un broker MQTT en su Pi, con sensores en un Arduino
  • Grabar datos y graficarlos

Introducción a Z-Wave

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

Si está considerando comprar una casa llena de sensores Z-Wave específicamente para usar con OpenHAB, le insto a que lo reconsidere. 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% establecido en OpenHAB, y le gustaría dejar sus opciones abiertas en el futuro: Z-Wave, por ejemplo, funciona con Samsung SmartThings ¿Qué Smart Hub para domótica es mejor para usted?Durante un tiempo, la gente pensó en la idea como nada más que un truco, pero los lanzamientos recientes de productos han demostrado que la automatización del hogar inteligente está comenzando a cumplir sus promesas. Lee mas hub, así como hubs específicos de Z-Wave como Homeseer, y una gama de otras opciones de software como Domoticz.

Aunque OpenHAB incluye un enlace Z-Wave, aún necesita configure primero la red Z-Wave, antes de que OpenHAB pueda comenzar a consultar datos. Si tiene una placa controladora Rasberry, tiene un software suministrado para configurar la red, por lo que no lo trataremos aquí. Si compraste un controlador Aeotec USB Z-Stick o similar, es probable que no tengas ningún software incluido, así que sigue leyendo.

Aeotec Z-Stick Gen5, Z-Wave Plus USB para crear puerta de enlaceAeotec Z-Stick Gen5, Z-Wave Plus USB para crear puerta de enlace Compre ahora en Amazon $44.95

Si ya tiene una configuración de red Z-Wave, puede conectar su controlador a la 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 emparejamiento 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 desconectarlo 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 en eso también (esto también variará: mi conector Everspring requiere que el botón se presione 3 veces seguidas, por lo que la lección aquí es leer el manual de su dispositivo).

El Z-Stick parpadea brevemente para indicar el éxito. Esto presenta problemas al volver a enchufarlo a la Pi, ya que se asigna un nuevo puerto. Reinicie su Pi para que se restablezca al puerto estándar si descubre que se le ha reasignado dinámicamente uno diferente. Mejor aún: no lo conecte a la Pi hasta que haya hecho todos los emparejamientos de hardware primero.

Instalación de enlaces HABmin y Z-Wave

Como OpenHAB no es realmente una utilidad de configuración para Z-Wave, vamos a instalar otra herramienta de administración web que sí lo hace, algo llamado HABmin. Dirígete a la Repositorio HABmin Github Descargue la versión actual. Una vez que lo haya descomprimido, encontrará 2 .tarro archivos en el directorio de complementos: estos deben colocarse en el directorio de complementos correspondiente en su recurso compartido Inicio de OpenHAB (si también está usando el Aotec gen5 Z-Stick, asegúrese de tener al menos la versión 1.8 del enlace Z-Wave).

Luego, cree una nueva carpeta en el directorio webapps y llámela "habmin" (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 parecida pero con un complemento .jar adicional. Puede valer la pena probar ambos solo para ver cuál prefiere.

Si aún no lo ha hecho, conecte su controlador a su 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 enchufarlo, y una vez después, para que pueda ver qué cambios si no está seguro.

despiadado

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

sudo usermod -a -G dialout openhab

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

reinicio de sudo service openhab

Con suerte, si está revisando el registro de depuración, verá algo como esto. Felicidades, ahora estás hablando de Z-Wave. También puede encontrar el registro de depuración inundado con mensajes de varios nodos de Z-Wave. Comencemos comprobando 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 iniciando en el registro de openhab

Hay mucho que ver en HABMIN, pero solo estamos realmente preocupados por el Configuración -> Enlaces -> Z-Wave -> Dispositivos pestaña, como puedes ver a continuación. Expanda el nodo para editar la ubicación y la etiqueta de nombre para facilitar su referencia.

editar el nombre del dispositivo

Configurar elementos de Z-Wave

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

Primero, tengo un interruptor de alimentación Everspring AN158 básico y un medidor en el Nodo 3. Una búsqueda rápida en Google me llevó a una publicación de blog en Wetwa.re, con una configuración de elemento de muestra. Adapte esto de la siguiente manera:

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

Perfecto.

El siguiente es un multisensor Aeotec Gen5.

Aeon Labs Aeotec Z-Wave Gen5 multisensor (Z-Wave Plus)Aeon Labs Aeotec Z-Wave Gen5 multisensor (Z-Wave Plus) Compre ahora en Amazon $69.27

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

Number Hallway_Temperature "Hallway Temperature [% .1f ° C]" (Hallway, Temperature) {zwave = "2: 0: command = sensor_multilevel, sensor_type = 1, sensor_scale = 0"} Número Humedad del pasillo "Humedad del pasillo [% .0f %%]" (Pasillo, Humedad) {zwave = "2: 0: command = sensor_multilevel, sensor_type = 5"} Número Hallway_Luminance "Luminancia del pasillo [% .0f Lux]" (Pasillo) {zwave = "2: 0: command = sensor_multilevel, sensor_type = 3"} Póngase en contacto con Hallway_Motion "Hallway Motion [% s]" (Hallway, Motion) {zwave = "2: 0: command = sensor_binary, respond_to_basic = true"} Número sensor_1_batería "Batería [% s %%]" (Movimiento) {zwave = "2: 0: comando = batería"}

Si el formato de esto le parece extraño, por favor regrese al primero Guía para principiantes Comenzando con OpenHAB Home Automation en Raspberry PiOpenHAB es una plataforma de automatización del hogar madura y de código abierto que se ejecuta en una variedad de hardware y es independiente del protocolo, lo que significa que se puede conectar a casi cualquier hardware de domótica en el mercado hoy. Lee mas , específicamente la sección de enlace 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 nuevo dispositivo, la documentación vinculante detalla todos los comandos.

Enlace de armonía de Logitech

Antes de saltar a las reglas, quería agregar una nota rápida sobre cómo trabajar con el enlace Harmony. Soy un gran admirador de Serie Harmony de controles remotos definitivos Logitech Harmony Ultimate Review y SorteoTu sala de estar es un caos, admítelo. Se le perdona preguntarse qué control remoto controla qué dispositivo. Con el televisor, el amplificador, el TiVO, el reproductor de BluRay, tal vez incluso la iluminación, las actividades de cambio se vuelven largas ... Lee mas para simplificar la experiencia del centro multimedia hogareño, pero a menudo se destacan como un sistema separado dentro del hogar 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 utilizando apt-cache para buscar "armonía":

búsqueda de openhab apt-cache para la unión de armonía

No te olvides de chown el directorio de enlaces de nuevo cuando haya terminado:

sudo apt-get install openhab-addon-action-harmonyhub. sudo apt-get install openhab-addon-binding-harmonyhub. sudo apt-get install 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:

########## CONTROLES REMOTOS DE ARMONÍA ########## harmonyhub: host = 192.168.1.181o tu ip
harmonyhub: nombre de usuario =tu-armonía-email-login
harmonyhub: contraseña =tu 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 datos de inicio de sesión, los que ingrese cuando inicie la utilidad de configuración estándar de Harmony. Eso es. Al reiniciar su Hue, 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 se pueden enviar. Es una buena idea copiar esto para referencia futura. puede facilitar aún más la lectura con nodos plegables pegando en un formateador JSON en línea como este.

Salida json formateada openhab

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

/ * Harmony Hub * / String Harmony_Actividad "Armonía [% s]" (Living_Room) {harmonyhub = "* [currentActivity]"}

Esto es un enlace de cadena bidireccional, que puede obtener la actividad actual y ordenar que la actividad actual sea otra cosa. Ahora podemos crear un botón para ello, en el archivo del mapa del sitio.

Cambiar elemento = Asignaciones de Harmony_Activity = [PowerOff = 'Off', Exercise = 'Exercise', 13858434 = 'TV', Karaoke = 'Karaoke']

En el corchete verá 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 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 Harmony 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 Armonía vinculante.

Una introducción general a las reglas

La mayoría de los centros domésticos inteligentes incluyen algún tipo de creación de reglas para que pueda reaccionar automáticamente a los datos y eventos del sensor en el hogar. De hecho, diría que una casa verdaderamente inteligente no es la que necesita para pasar tiempo interactuando con las aplicaciones móviles, es invisible para el usuario final y completamente automatizada. Con este fin, OpenHAB también incluye un poderoso lenguaje de programación de reglas que puede programar, superando con creces la complejidad de la mayoría centros de casas inteligentes Battle of the Smart Home Hubs: ¿Qué hay afuera y qué viene? Lee mas o Recetas IFTTT IFTTT ahora se conecta a cualquier cosa: Presentación del canal MakerLos usos potenciales de IFTTT son infinitos. Pero hasta ahora, ha sido difícil interactuar con sus propios proyectos de hardware. Hoy, todo eso ha cambiado. Lee mas .

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

regla "Luz de oficina encendida cuando James presente" cuando Item JamesInOffice cambió de OFF a ON. luego sendCommand (Office_Hue, ON) regla final "La luz de la oficina se apaga cuando James se va" cuando el artículo JamesInOffice cambió de ON a OFF. luego sendCommand (Office_Hue, OFF) fin

Primero, nombramos la regla: sea descriptivo, para que sepa qué evento se está activando. A continuación, definimos nuestra regla simple diciendo cuando x es verdadero, entonces y. Fin significa el cierre de esa regla en particular. Hay una serie de palabras especiales que puede usar en las reglas, pero por ahora estamos tratando con dos bits simples de sintaxis: Articulo, que le permite consultar el estado de algo; y sendCommand, que hace exactamente lo que crees que hará. Te dije que esto era 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 para determinar si soy entrar o salir del área, y podría ser una buena idea agregar un sensor de luz en algún lugar de la ecuación para que no se active innecesariamente luces.

Veamos otro ejemplo para crear una regla programada.

regla "Hacer ejercicio todas las mañanas" cuando Time cron "0 0 8 1/1 *? *" luego harmonyStartActivity ("Ejercicio") fin.

Nuevamente, nombramos la regla, establecemos las condiciones en las que 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 a un CRONtab normal). solía cronmaker.com para ayudar a crear la expresión, pero también puede leer la guía de formato [Ya no está disponible] para obtener una explicación detallada y más ejemplos.

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

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

Lamentablemente, OpenHAB todavía no puede hacer el ejercicio por mí.

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

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

El núcleo de la regla está en el ¿Humedad? línea. La humedad es un nombre de grupo para mis sensores de humedad; .members agarra todos los elementos de ese grupo; para cada itera sobre ellos (con un curioso formato de corchetes con el que probablemente no esté familiarizado). La sintaxis de las reglas es una derivada de Xtend, por lo que puede leer el Documentación Xtend si no puedes encontrar un ejemplo para adaptarte.

Sin embargo, probablemente no necesite hacerlo: hay cientos de reglas de ejemplo:

  • Explicación detallada de las reglas. en la wiki oficial
  • los ejemplos de reglas oficiales 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 ligero para la comunicación de máquina a máquina, un tipo de Twitter para su Arduinos o Raspberry Pis para hablar entre sí (aunque, por supuesto, funciona con mucho más que solo aquellos). Está ganando popularidad rápidamente y se está convirtiendo en un hogar con dispositivos de Internet de las cosas, que generalmente son bajos microcontroladores de recursos que necesitan una forma confiable de transmitir datos del sensor a su concentrador o recibir control remoto comandos Eso es exactamente lo que haremos con él.

¿Pero por qué reinventar la rueda?

MQ Telemetry Transport se inventó en 1999 para conectar oleoductos a través de satélites lentos conexiones, específicamente diseñadas para minimizar el uso de la batería y el ancho de banda, al tiempo que proporciona un servicio confiable entrega de datos. A lo largo de 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 generales de Internet de las cosas. En 2010, el protocolo se lanzó libre de regalías, abierto para que cualquiera lo use e implemente. Nos gusta gratis.

Tal vez se pregunte por qué nos estamos molestando con otro protocolo más, ya tenemos el HTTP, después de todo, que puede se utilizará para enviar mensajes rápidos entre todo tipo de sistemas conectados a la web (como OpenHAB e IFTTT, en particular con el nuevo canal de creador IFTTT ahora se conecta a cualquier cosa: Presentación del canal MakerLos usos potenciales de IFTTT son infinitos. Pero hasta ahora, ha sido difícil interactuar 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 puede ejecutar fácilmente uno en un microcontrolador integrado como el Arduino (al menos, puedes, pero no te quedará mucha memoria para nada más). MQTT es, por otro lado, es liviano, por lo que enviar mensajes alrededor de su 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 tanto un servidor (llamado "intermediario") como uno o más clientes. El servidor actúa como intermediario, recibe mensajes y los retransmite a los clientes interesados.

Sigamos con el Twitter para máquinas analogía sin embargo. Del mismo modo que los usuarios de Twitter pueden tuitear sus propios 140 caracteres sin sentido, y los usuarios pueden "seguir" a otros usuarios para ver una secuencia curada de publicaciones, Los clientes MQTT pueden suscribirse a un canal en particular para recibir todos los mensajes desde allí, así como publicar sus propios mensajes en ese canal. canal. Este patrón de publicación y suscripción se conoce como pub / sub, a diferencia de la tradición Servidor de cliente modelo de HTTP.

HTTP requiere que se comunique con la máquina con la que se está comunicando, diga Hola, y luego tenga un intercambio constante de reconocimiento mutuo mientras obtiene o coloca datos. Con pub / sub, el cliente que realiza la publicación no necesita saber qué clientes están suscritos: simplemente envía 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 por toda la casa, reportando constantemente.

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

Instale Mosquitto en su 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 agente MQTT basado en la web (pago o gratuito) o instalar el software gratuito en su Pi. Me gustaría mantenerlo todo en casa, así que instalé Mosquitto en el Pi.

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

wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key. sudo apt-key agregar 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 necesitamos hacer para tener un servidor MQTT en funcionamiento en la red local. Su corredor se está ejecutando en el puerto 1883 de forma predeterminada.

Verifique que su servidor MQTT esté funcionando usando 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 el nombre de su Raspberry Pi. Guarda y presiona conectar. Si el pequeño semáforo en la esquina superior derecha se vuelve verde, está listo para comenzar.

Perfil de ejemplo de mqttfx

Para una prueba rápida, haga clic en la pestaña "suscribirse" y escriba inTopic / en el cuadro de texto, luego presione el Suscribir botón. Ahora está suscrito para recibir mensajes sobre el tema nombrado en Topic, 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. Golpear Publicar algunas veces y mira hacia atrás en la pestaña de suscripción. Debería ver algunos mensajes que han aparecido en ese tema.

Prueba inTopic MQTT

Antes de agregar algunos sensores reales a nuestra red, necesitamos aprender sobre los niveles de temas, que nos permiten estructurar y filtrar la red MQTT. Los nombres de tema distinguen entre mayúsculas y minúsculas, no deberían 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 / temperatura. myHome / livingRoom / humedad. myHome / cocina / temperatura. myHome / cocina / humedad

Ya debería estar viendo cómo esta estructura de árbol es perfecta para un hogar inteligente lleno de sensores y dispositivos. La mejor práctica para usar con múltiples sensores en una sola habitación es publicar cada variable de sensor como su propio nivel de tema: ramificando a una mayor especificidad (como en los ejemplos anteriores), en lugar de intentar publicar múltiples tipos de sensores en el mismo canal.

Luego, 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 más arriba en el árbol.

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

myHome / + / temperatura

suscribiría al cliente a ambos

myHome / livingRoom / temperatura. myHome / cocina / temperatura

... pero no los niveles de humedad.

El # es un comodín de varios niveles, por lo que puede obtener cualquier cosa de la matriz de sensores de livingRoom con:

myHome / livingRoom / #

Técnicamente, también puede suscribirse al nivel de raíz #, que le proporciona absolutamente todo lo que necesita. pasar por el corredor, pero eso puede ser como meterle una manguera contra incendios en la cara: un poco abrumador. Intente conectarse al agente público MQTT de 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 a "mi hogar/" - incluir una barra al comienzo 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, vamos a probar Arduino, Ethernet Shield y un sensor de temperatura y humedad DHT11. probablemente tenga uno en su kit de inicio, pero si no, simplemente cambie el sensor ambiental por un sensor de movimiento (o incluso un botón).

Publicación de 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 barata 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 biblioteca pubsubclient de Github. Si ha utilizado el botón "Descargar como ZIP", la estructura es un poco incorrecta. Descomprima, cambie el nombre de la carpeta a solo pubsubclient, luego saque los dos archivos del src carpeta y subirlos un nivel a la raíz de la carpeta descargada. Luego mueva toda la carpeta a su Arduino / bibliotecas directorio.

Aquí está mi código de muestra que puedes adaptar: la salida de 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 Arduino es muy simplista y agregar el código para nombrar 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:

tampón de char [10]; dtostrf (t, 0, 0, buffer); cliente.publish ("openhab / himitsu / temperature", buffer); dtostrf (h, 0, 0, buffer); cliente.publish ("openhab / himitsu / humedad", 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 por allí y verá que puede controlar fácilmente un LED o un relé, por ejemplo, enviando comandos a canales específicos. En el código de ejemplo, simplemente envía un mensaje confirmando la recepción del comando.

Cargue su código, conecte su Arduino a la red y, utilizando 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 mensajes entrando; y si envía ACTIVADO o DESACTIVADO al tema del comando, también verá los reconocimientos.

los mensajes de mqtt arduino regresan

Enlace MQTT para OpenHAB

El último paso en la ecuación es conectar esto a 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

Reiniciar OpenHAB

reinicio de sudo service openhab

Luego agreguemos uno o dos elementos:

/ * Sensores MQTT * / Número Himitsu_Temp "Himitsu Temperatura [% .1f ° C]"(Himitsu, Temperature) {mqtt = " (Himitsu, Humedad) {mqtt = "

A estas alturas ya deberías entender el formato; está recibiendo un Elemento de número del enlace MQTT, sobre 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 tienes la base de una matriz de sensores barata basada en Arduino. Revisaremos esto en el futuro y colocaremos los Arduino en su propia red de RF completamente separada. También he creado una versión idéntica para tableros Wizwiki 7500 si tienes uno de esos.

Persistencia y datos gráficos

En este momento, probablemente haya configurado un grupo de sensores, ya sea de Z-Wave o Arduinos personalizados que ejecutan MQTT, por lo que puede ver el estado actual de esos sensores en cualquier momento, y también debe reaccionar a su valor en reglas. Pero lo interesante de los valores de los sensores es que generalmente cambian con el tiempo: ahí es donde intervienen la persistencia y los gráficos. Persistencia en OpenHAB significa guardar los datos con el tiempo. Avancemos y configuremos RRD4J (Round Robin Database para Java), llamado así porque los datos se guardan en un modo de operación por turnos: los datos más antiguos se descartan para comprimir el tamaño de la base de datos.

Instala paquetes rrd4j con los siguientes comandos.

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

Luego cree un nuevo archivo llamado rrd4j.persist en el configuraciones / persistencia carpeta. Pega lo siguiente:

Estrategias {cada minuto: "0 * * * *?" everyHour: "0 0 * * *?" everyDay: "0 0 0 * *?" default = everyChange. } Los elementos {// persisten todo cuando se actualiza el valor, solo por defecto, y los restauran de la base de datos al inicio *: estrategia = cada Cambio, restoreOnStartup // a continuación definimos estrategias específicas de cada hora para cualquier cosa en el grupo de temperatura, y cada minuto para temperatura de humedad *: estrategia = cada hora Humedad *: estrategia = cada minuto // alternativamente, puede agregar elementos específicos aquí, como // Bedroom_Humidity, JamesInOffice: estrategia = cada minuto. }

En la primera parte de este archivo, estamos definiendo estrategias, lo que solo significa dar un nombre a una expresión CRON. Esto es lo mismo que ya hicimos con My. OpenHAB, pero esta vez estamos creando algunas estrategias nuevas que podemos usar de everyDay, everyHour y everyMinute. Todavía no los he usado todos, pero podría estar en el futuro.

En la segunda mitad del archivo, le decimos a rr4dj qué valores de datos guardar. Por defecto, 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 preocupan demasiado, así que lo configuré para ahorrar solo cada hora, 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 en los horarios establecidos, 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 debe decirle a rr4dj que lo almacene una vez por minuto.

Con eso definido, debería comenzar a ver algunos resultados de depuración que le dicen que se están almacenando valores.

rrd4j almacenando datos

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

Elemento del gráfico = dormitorio_período de humedad = h

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

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

Elemento del gráfico = Período de humedad = h
gráfico

También puede interesarle saber que puede usar este gráfico en otro lugar; está generando una imagen usando la siguiente URL: http://YOUROPENHABURL: 8080 / gráfico? grupos = Humedad y periodo = h

Como esta Tu ¿Viene el sistema OpenHAB?

Eso es todo para esta entrega de la guía, pero no esperes que sea la última vez que nos escuches sobre OpenHAB. Esperemos que esto y la guía para principiantes le hayan dado una base sólida para desarrollar su propio sistema OpenHAB completo, pero es un proceso que nunca ha finalizado por completo.

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

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

James tiene una licenciatura en Inteligencia Artificial y está certificado por CompTIA A + y Network +. Es el desarrollador principal de MakeUseOf, y pasa su tiempo libre jugando VR paintball y juegos de mesa. Ha estado construyendo computadoras desde que era un niño.