Inserción de MiFlora en domoticz mediante Node Red conectándolo mediante wifi

En este tutorial vamos a vincular los Xiaomi MiFlora con nuestro domoticz. Para ello NO VAMOS A UTILIZAR el bluetooth de nuestra propia raspberry, eso apenas nos daría alcance, puesto que el bluetooth tiene una cobertura muy escasa. Por ello, vamos a aprovechar la cobertura del Wifi utilizando un sistema mixto: los MiFlora enviarán datos y un esp32 captará estos datos, los transformará en MQTT y los enviará a través de nuestro wifi a la raspberry.

Dividimos esta guía en varios apartados

Requisitos inciales

Para poder seguir este tutorial es necesario tener instalado Node Red en nuestra Raspberry, además de Domoticz, MQTT y demás.

También es fundamental, lógicamente, disponer de un xiaomi MiFlora y un esp32 con bluetooth en nuestro poder.

Os dejamos el listado de tutoriales para poder instalar lo que necesitéis antes de empezar esta guía:

  1. Material necesario para poner en marcha domoticz
  2. Instalación de domoticz desde cero
  3. Instalación de Mosquitto MQTT Broker en Raspberry Pi 
  4. Configurar MQTT con usuario y contraseña (opcional)
  5. Cargamos MQTT en nuestro domoticz
  6. Instalar Watchdog en domoticz (opcional)
  7. Crear usuario y contraseña para domoticz (opcional)
  8. Cómo instalar node red en nuestra raspberry pi

Descarga del software necesario

Vamos a necesitar, a parte del software necesario a consecuencia del seguimiento de los tutoriales anteriores para instalar Node red, los siguientes programas:

OJO a los que tenéis USER y PASS en MQTT de la raspberry y en MQTT de domoticz. Debéis tenerlo en cuenta a la hora de seguir el tutorial.

Flasheo del ESP32

Después de haber instalado el programa Flash Download Tool lo ejecutamos. Tardará unos segundos y seleccionaremos DEVELOPER MODE y, a continuación, ESP32 DOWNLOAD TOOL.

Enchufamos el esp32 con un cable miniUSB al ordenador y comprobamos en qué COM se ha conectado. Si no sabes cómo averiguarlo, sigue este tutorial: «Comprobación de puerto COM para los flasheos por USB TTL«

En el programa ESP32 DOWNLOAD TOOL, clicamos sobre el COM correcto, BAUD 115200 y ERASE.

Después adjuntamos los archivos que hemos descargado en el primer paso de este tutorial redactando el código que os enseñamos en las imágenes. Para seleccionar los archivos clica sobre los tres puntitos al final de cada línea.

Copiamos las características del flasheo del esp32 con los archivos que ponemos a continuación:

Si te da error y ya has probado varios cables y puertos, comprueba que tienes el ESP Download Tool en la raíz de C.

Una vez cubierto todo tal y como aparece en la imagen, clicaremos sobre START.

Veremos que se va completando el proceso. Puede tardar un par de minutos, no desesperes que ya casi lo tenemos.

Una vez ha completado el flasheo, nos aparecerá FINISH. 

Ya podemos desenchufar el ESP32 y enchufarlo en el lugar en que vayamos a tenerlo instalado.

Buscamos redes wifi con nuestro móvil y nos conectamos al ESP32. Si te pide contraseña (en algunos casos la solicita), deberás introducir la siguiente:

your_password
Cuidado en esta fase. Si metemos algún dato mal tendremos que reflashear para corregirlo. Fíjate bien en los datos que introduces.

Nos conectamos a él, metemos nuestro wifi y pass, nuestro mqtt con user y pass si tenemos, modificamos el nombre del gateway con el que queremos que aparezca cuando envíe la información y el topic con el q envíe la inforomación:

Al guardar se conectará a nuestra wifi y no sabremos más de él hasta más adelante.

Visualización con el programa MQTT explorer

Ejecutamos el programa MQTT explorer en el ordenador introduciendo los datos de nuestro MQTT.

Veremos que nos aparecen todos los topics que recibimos por mqtt. Entre ellos estará el nombre del gateway que le hayamos puesto al esp32 con la información que recibe de los dispositivos Bluetooth que tenga cerca:

Creamos los Dummys (sensores) en domoticz

Iniciamos domoticz, y vamos a:

Domoticz > Setup > Hardware

Creamos uno por uno varios sensores, en total 4, clicando sobre Create Virtual Sensors:

Serán los siguientes:

  • Un dummy tipo Temperature,
  • Un dummy tipo Humidity,
  • Un dummy tipo Custom
  • Y un dummy tipo Lux.

Nos vamos a:

Domoticz > Setup > Devices

Nos aparecen los dummys que acabamos de crear:

Anotamos los IDX y los nombres. Nos harán falta posteriormente.

Localizamos el topic del MiFlora en el programa MQTT explorer

Abrimos de nuevo MQTT explorer. Buscamos el MiFlora. Asegúrate de que la línea que seleccionas tenga la información decodificada de temperatura, humedad, fertilidad y lux.

Al seleccionar la linea del MiFlora con la información descodificada nos aparecerá el TOPIC que deberemos copiar y pegar más adelante en Node Red. Tenlo a mano. Necesitaremos también el número MAC completo que tienes en la lista que carga MQTT explorer. Cópialo también y tenlo a mano:

Configuramos Node Red

Abrimos node red (Recuerda que accedemos a ella introduciendo la IP de nuestra raspberry seguido de :1880). Sigue las indicaciones de las imágenes:

A continuación cargamos el flow que os adjuntamos de la siguiente manera:

Introducimos en el recuadro siguiente texto (lo copiamos con control +c) y lo pegamos en el recuadro (con control + v):

[{"id":"b765fff8.d23f","type":"tab","label":"MiFloraCasa","disabled":false,"info":""},{"id":"3c4efc2a.885c84","type":"json","z":"b765fff8.d23f","name":"","property":"payload","action":"","pretty":false,"x":550,"y":180,"wires":[["e3252cfc.e976e","6aa5365d.8b93c8"]]},{"id":"a10dd052.d5acd","type":"function","z":"b765fff8.d23f","name":"MiFlora Comedor","func":"idx_tem=710\nidx_moi=736\nidx_fer=709\nidx_lux=707\nvar message=0\n//temperatura\nif(msg.payload.tem!=null){\n \nmessage= msg.payload.tem.toString();\nmsg.payload = {\"command\": \"udevice\", \"idx\": idx_tem, \"nvalue\":0,\"svalue\":message };\n}\n//humedad\nif(msg.payload.moi!=null){\n var HUM_STAT=0;\n value_hum= msg.payload.moi\nif (value_hum < 30) {\n HUM_STAT=2;\n} else if ((value_hum >= 30) & (value_hum < 45)) {\n HUM_STAT=0;\n} else if ((value_hum >= 45) & (value_hum < 70)) {\n HUM_STAT=1;\n} else if (value_hum >= 70) {\n HUM_STAT=3;\n}\n\n value_hum_stat=HUM_STAT.toString();\n\nmessage= msg.payload.moi\nmsg.payload = {\"command\":\"udevice\",\"idx\":idx_moi,\"nvalue\":message,\"svalue\":value_hum_stat };\n\n}\n//fertilidad\n if(msg.payload.fer!=null){\n \nmessage= msg.payload.fer.toString();\nmsg.payload = {\"command\": \"udevice\", \"idx\": idx_fer, \"nvalue\":0,\"svalue\":message };\n}\n //lux\nif(msg.payload.lux!=null){\n \nmessage= msg.payload.lux.toString();\nmsg.payload = {\"command\": \"udevice\", \"idx\": idx_lux, \"nvalue\":0,\"svalue\":message };\n}\n \n\n\n\n\nreturn msg;\n\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","x":910,"y":360,"wires":[["e4fdc350.110df","2389a07b.dd1b9"]]},{"id":"e3252cfc.e976e","type":"switch","z":"b765fff8.d23f","name":"Dispositivos (mac)","property":"payload.id","propertyType":"msg","rules":[{"t":"eq","v":"80:EA:CA:89:64:7B","vt":"str"},{"t":"eq","v":"80:EA:CA:89:66:D9","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":590,"y":420,"wires":[["73c15ce2.22b924","a10dd052.d5acd"],["fe64a96c.29f6d8"]]},{"id":"a023cbc4.7608b8","type":"mqtt out","z":"b765fff8.d23f","name":"","topic":"domoticz/in","qos":"","retain":"","broker":"9cd488aa.0faac8","x":1310,"y":260,"wires":[]},{"id":"e4fdc350.110df","type":"json","z":"b765fff8.d23f","name":"","property":"payload","action":"","pretty":false,"x":1130,"y":240,"wires":[["a023cbc4.7608b8","e9dfc4cf.250e08"]]},{"id":"6aa5365d.8b93c8","type":"debug","z":"b765fff8.d23f","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":730,"y":180,"wires":[]},{"id":"e9dfc4cf.250e08","type":"debug","z":"b765fff8.d23f","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1270,"y":100,"wires":[]},{"id":"ead5a4d3.7359d8","type":"debug","z":"b765fff8.d23f","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1150,"y":460,"wires":[]},{"id":"73c15ce2.22b924","type":"debug","z":"b765fff8.d23f","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":950,"y":240,"wires":[]},{"id":"cb7ebb83.38c2e8","type":"mqtt in","z":"b765fff8.d23f","name":"","topic":"home/OpenMQTTGateway_ESP32_BLEDespacho/BTtoMQTT/#","qos":"2","datatype":"auto","broker":"9cd488aa.0faac8","x":230,"y":300,"wires":[["3c4efc2a.885c84"]]},{"id":"5fb81ba8.5863d4","type":"mqtt in","z":"b765fff8.d23f","name":"","topic":"home/OpenMQTTGateway_ESP32_BLEGaleria/BTtoMQTT/#","qos":"2","datatype":"auto","broker":"9cd488aa.0faac8","x":220,"y":360,"wires":[["3c4efc2a.885c84"]]},{"id":"2389a07b.dd1b9","type":"debug","z":"b765fff8.d23f","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1150,"y":360,"wires":[]},{"id":"61afba06.ad94e4","type":"mqtt in","z":"b765fff8.d23f","name":"","topic":"home/OpenMQTTGateway_ESP32_BLEComedor/BTtoMQTT/#","qos":"2","datatype":"auto","broker":"9cd488aa.0faac8","x":240,"y":240,"wires":[["3c4efc2a.885c84"]]},{"id":"fe64a96c.29f6d8","type":"function","z":"b765fff8.d23f","name":"MiFlora Patio","func":"idx_tem=723\nidx_moi=725\nidx_fer=737\nidx_lux=721\nvar message=0\n//temperatura\nif(msg.payload.tem!=null){\n \nmessage= msg.payload.tem.toString();\nmsg.payload = {\"command\": \"udevice\", \"idx\": idx_tem, \"nvalue\":0,\"svalue\":message };\n}\n//humedad\nif(msg.payload.moi!=null){\n var HUM_STAT=0;\n value_hum= msg.payload.moi\nif (value_hum < 30) {\n HUM_STAT=2;\n} else if ((value_hum >= 30) & (value_hum < 45)) {\n HUM_STAT=0;\n} else if ((value_hum >= 45) & (value_hum < 70)) {\n HUM_STAT=1;\n} else if (value_hum >= 70) {\n HUM_STAT=3;\n}\n\n value_hum_stat=HUM_STAT.toString();\n\nmessage= msg.payload.moi\nmsg.payload = {\"command\":\"udevice\",\"idx\":idx_moi,\"nvalue\":message,\"svalue\":value_hum_stat };\n\n}\n//fertilidad\n if(msg.payload.fer!=null){\n \nmessage= msg.payload.fer.toString();\nmsg.payload = {\"command\": \"udevice\", \"idx\": idx_fer, \"nvalue\":0,\"svalue\":message };\n}\n //lux\nif(msg.payload.lux!=null){\n \nmessage= msg.payload.lux.toString();\nmsg.payload = {\"command\": \"udevice\", \"idx\": idx_lux, \"nvalue\":0,\"svalue\":message };\n}\n \n\n\n\n\nreturn msg;\n\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","x":870,"y":440,"wires":[["e4fdc350.110df","ead5a4d3.7359d8"]]},{"id":"9cd488aa.0faac8","type":"mqtt-broker","name":"","broker":"192.168.100.4","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]

Y tras pegar el texto clicamos sobre IMPORT:

Veremos que se nos carga una pestaña nueva denominada MiFloraCasa. Clicamos sobre ella:

Y veremos que se nos carga el flow completo. Vamos a configurarlo con nuestros datos:

Efectuamos doble click en home/OpenMQTTGateway_ESP32_BLEComedor/BTtoMQTT/#:

Clicamos en el lapiz:

Introducimos la IP de nuestro domoticz. Si tenemos USER y PASS de MQTT lo introducimos en Security y aceptamos con Add:

Nos aparecerá la IP correctamente cargada seguida del :1883 y clicamos en DONE.

Al volver a la pantalla anterior sustituiremos el texto «home/OpenMQTTGateway_ESP32_BLEComedor/BTtoMQTT/#» por el Topic que hemos extraído antes de MQTT de nuestro MiFlora, quitaremos el número MAC del final y pondremos un «#«, y aceptamos:

Repetiremos el proceso para los demas home/OpenMQTTGateway_ESP32_BLEXXXXXXXX/BTtoMQTT/# si los tenemos:

Ahora nos vamos a Domoticz/in y buscaremos en el desplegable si aparece la IP de nuestra raspberry (que hemos introducido anteriormente) y lo seleccionamos:

Si no aparece clicamos sobre el lápiz y lo introducimos manualmente como en el paso anterior. Recuerda añadir el USER y PASS de MQTT si lo tienes habilitado.

Ahora clicamos sobre Dispositivos (mac):

Introducimos el número MAC copiado antes del programa MQTT explorer. Si tenemos mas de un MiFlora introducimos una MAC tras otra, como en nuestro ejemplo.

Volvemos a tener la pantalla inicial. Ahora muy importante configurar los IDX de nuestros dummys creados anteriormente en domoticz clicando sobre MiFlora Comedor. Ten en cuenta que el primer nodo que sale de Dispositivos (mac) (en nuestro ejemplo MiFlora Comedor) ha de corresponder con el primer número MAC que hemos introducido en la lista de Dispositivos (mac). Los IDX que introduzcas ahora harán referencia a ese número MAC.

Introducimos los IDX donde corresponde en función de si es temperatura (tem), humedad (moi), custom (fer) o lux (lux) y clicamos DONE.

Repetimos el proceso para el resto de MiFloras que tengamos.

Vamos a comprobar fácilmente si hemos introducido bien los datos. Para ello, clicamos sobre DEPLOY a la derecha:

Pueden ocurrir dos cosas, que nos cargue correctamente (lo ideal) o que nos aparezca desconectado. Si aparece desconectado revisa el server. Asegúrate de que has introducido correctamente la IP de tu raspberry- Y recuerda el USER y PASS de MQTT, tienes?  Lo has introducido correctamente?

Comprobamos el funcionamiento en domoticz

Una vez hemos clicado en DEPLOY y nos aparece domoticz/in como connected, nos vamos a domoticz y comprobamos que está funcionando correctamente:

Cómo localizar errores en node red

Os damos un truquito para vuestra información. Tenemos un node en el listado de la izquierda que se llama DEBUG. Cuando lo llevamos a la pantalla principal, lo conectamos a un node y lo activamos, nos dá mucha información (como un LOG) en la columna de la derecha del todo. Os explicamos con unas cuantas imágenes cómo conseguirlo:

Mantén el cursor pulsando la bola del final del recuadro del mqtt/in y arrástrala hasta la bola del inicio del recuadro del debug:

Clicamos sobre deploy:

Activamos la cucaracha y a la derecha nos aparecerá el debug con info de errores /( y así podremos analizar qué estamos haciendo mal) o info correcta:

Inicio automático de Node RED con Raspberry Pi

Recordar que por defecto Node RED está apagado. Podemos iniciarlo de dos formas diferentes: manual o automático.

Para inicio manual introducimos en puTTY:

node-red-start

Para que Node Red inicie de forma automática (tras caídas de red, o tras apagar y encender la raspberry) lanzamos el siguiente comando en puTTY:

sudo systemctl enable nodered.service

Agradecimientos

Agradecer especialmente a DrBoom y a @damian_rguez del grupo de Telegram «Domoticz a lo spain«. Ambos forman un equipo perfecto. Sin ellos NADA de este tutorial habría sido posible. GRACIAS, GRACIAS y GRACIAS!

Para cualquier duda o consulta tienes disponible el grupo de telegram «Domoticz a lo Spain» para entrar, ponerte cómodo y participar cuanto quieras.

Clica aquí para entrar en él

Cualquier duda, sugerencia o comentario será bien recibida en la web!