OpenHAB #08 (Temperatura y humedad sobre MQTT)

Ya tenemos comprobado que nuestro broker mosquitto está funcionando y ahora vamos a hacer que un sensor remoto envíe los datos de temperatura y humedad para poder visualizarlos desde nuestro teléfono.

Lo único que necesitamos es un sensor de temperatura y humedad (DHT11 en mi caso) y un nodeMCU

DHT11–Temperature-Sensor-Pinout                NodeMCU_ESP8266_development_board_1024x1024

Las conexiones son las siguientes:

  • DHT11 – Vcc        –>        NodeMCU – 3v
  • DHT11 – Data      –>        NodeMCU – D4
  • DHT11 – Gnd       –>        NodeMCU – G

Ahora tenemos que programar el NodeMCU con el sketch de ejemplo que puedes descargar de aquí – Ejemplo

Antes de programar el NodeMCU debes editar algunas líneas del código:

  • #define DHTPIN D4 – Cambia D4 por cualquier otro pin al que quieras conectar el pin de datos del DHT11
  • #define wifi_ssid «Nombre de tu WiFi» – Escribe el nombre de tu WiFi entre las comillas
  • #define wifi_password «Password de tu WiFi» – Escribe la password de tu WiFi entre las comillas
  • #define mqtt_server «IP de tu Raspberry» – Escribe la IP de tu raspberry entre las comillas
  • Opcionalmente puedes incluir los datos de usuario y contraseña de mosquitto en caso de que lo tengas configurado de esa manera
  • Puedes cambiar el nombre de los topics de temperatura y humedad por los que te sean más fáciles de recordar

ejemplo

Una vez editado el programa ya lo puedes grabar en tu NodeMCU y con el software MQTTfx podemos ver los mensajes que nos manda a través de MQTT.

Mqttok

Y por último si queremos añadir los nuevos datos a nuestra plataforma OpenHAB debemos incluir las siguientes líneas al archivo home.items:

Number Tempcasa "Temperatura interior [%.0f °C]" <temperature> { mqtt="<[mosquitto:topicName/temperature:state:default]" }
Number Humcasa "Humedad relativa [%.0f %%]" <humidity> { mqtt="<[mosquitto:topicName/humidity:state:default]" }

Y estas otras en el archivo home.sitemap:

Text item=Tempcasa
Text item=Humcasa

Y el resultado en nuestro teléfono será algo así:

Screenshot_2018-03-12-20-55-22

14 Comentarios Agrega el tuyo

  1. He configurado el esp8266 con vuestro codigo, cambiando ip y wifi. Pero en el MQTTfx no me aparece nada.
    En el monitor del IDE, pone que esta conectado a la wifi y a mqtt, pero no muestra nada con el DHT22 conectado.

    Alguna solucion?

    Gracias

    Me gusta

    1. recretron dice:

      Hola Sergio.
      Me confirmas que el esp8266 se conecta a la wifi y al servidor MQTT con lo cual el problema es que, o bien no lee el dato correctamente del DHT22 o sí que lo lee pero no lo envía.
      El segundo caso me parece el menos probable ya que no hay ninguna modificación que hacer en el código así que me voy a centrar en el primer caso que es el que puede tener algún problema.
      Entiendo que en el monitor IDE no te aparecen las líneas «New temperature: xx» o «New humidity; xx» así que sea cual sea el valor que lee el programa no está cambiando y por eso no se envían nuevos valores al MQTT.
      Me comentas que usas un DHT22 en vez del DHT11. Supongo que has puesto como comentario la línea del DHT11 y habilitado la del DHT22 en el código.
      Finalmente sólo se me ocurre que la librería dht.h que estas usando es la de Adafruit que ya me dió problemas en alguna ocasión con el DHT22. Recomendaría usar esta otra librería (https://github.com/beegee-tokyo/DHTesp) y ver si se soluciona el problema.
      Si nada de lo anterior funciona yo quitaría al final del código el condicional «if (checkBound(newTemp, temp, diff)) { }» de forma que cada 10 segundos forzamos al código a enviar la lectura sea cual sea.

      Me gusta

  2. Isra Dávila dice:

    Estimado,
    muy agradecido de su ayuda, al principio no funciono por un problema de libreria «dht.h», la cual cambie por , pero luego de eso a través del monitor mqtt puedo ver la información, ahora solo falta openhab y nuevamente gracias.

    Me gusta

  3. silvestre dice:

    Estou usando o dht11, aparece os dados no moitor serial e no mqtt.fx mas na interface do openhab naõ aparece nada de temperatura e umidade, o que pode ser?

    Me gusta

    1. recretron dice:

      Claramente es un problema de configuración en OpenHAB. Necesito saber que versión de MQTT BINDING estás usando. Casi seguro que es la versión 2.4 y los ejemplos de los archivos .items no te funcionarán.
      Revisa el post «OpenHAB 2019 #2» en el que se explica como se configura correctamente un dispositivo con el MQTT 2.4

      Me gusta

  4. diego godoy aranda dice:

    Hola tengo una consulta yo trate de publicar los datos en una interfaz de openhab, sin embargo use un arduino uno con ethernet shield, aunque no se publica nada pero si lo puedo ver en la terminal de la raspberry usando un comando y quisiera saber si tu hiciste algun cambio en la programacion del archivo thing de openhab o en el de item o el de mqtt.cfg

    Me gusta

    1. recretron dice:

      Si la raspberry recibe el dato es que el mqtt está funcionando. Comprueba el log de Openhab por si hubiera errores en algún archivo.

      Me gusta

  5. diego godoy aranda dice:

    Yo tengo una duda tu para la programacion en openhab lo agregaste como nuevo dispositvo en el archivo thing, porque yo hice eso mismo pero con arduino y ethernet shield y los valores si se publican pero no los puedo observar en la interfaz de usuario de openhab

    Me gusta

    1. recretron dice:

      Si los valores se publican correctamente por MQTT, entonces tu error está en el archivo items o en el archivo sitemap. Comprueba el log de openhab para saber si hay algún error en esos archivos.

      Me gusta

  6. diego godoy aranda dice:

    Mira yo estoy enviando los datos del sensor primero por modulos RF 433Mhz y como los datos ahora estan en una variable string tengo problemas para publicar los datos en el topico asi que quisiera saber si es posible publicar ese string en openhab y despues modificarlo a traves de una rule o debo hacer primero la conversion en arduino y luego publicar el dato

    Me gusta

    1. recretron dice:

      Se podría hacer de las dos maneras. Para ayudarte debería saber primero que error es el que tienes concretamente.

      Me gusta

  7. diego godoy aranda dice:

    Como se debe hacer para que los datos publicados en la inertaz de usuario se actualicen solos, porque debo estar actualizando yo mismo la pagina para observar el cambio del dato

    Me gusta

    1. recretron dice:

      Tanto si accedes a través del CLASSIC UI como si usas la app, los datos se actualizan sólos.

      Me gusta

Replica a diego godoy aranda Cancelar la respuesta