Inserción de Xiaomi Mi Smart Scale en Domoticz mediante Node Red

Josemi del grupo de Telegram «Domoticz a lo spain» nos explica cómo basándose en el tutorial: «Integración de los termómetros Xiaomi Mijia (bluetooth) en domoticz mediante Node Red» ha vinculado la báscula Mi Scale con nuestro domoticz.

Con 4 Custom Sensor dummies de Kg, nos almacena automáticamente el peso de cada miembro de la familia de 4, en cada dummy correspondiente. Simple.

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 una báscula Mi Scale 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 un sensor CUSTOM SENSOR por cada miembro de la familia que utilice la báscula clicando sobre Create Virtual Sensors:

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 de la báscula en el programa MQTT explorer

Abrimos de nuevo MQTT explorer. Buscamos la báscula.

OJO aquí. Si tienes varias líneas sobre la báscula, NO todas nos valen. El correcto para sacar lectura es la que envíe el dato del peso. Suele corresponder con el topic BTtoMQTT:

Al seleccionar la linea correcta, dentro de BTtoMQTT 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:

TOPIC:

NUMERO MAC:

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":"14bead0b.badb13","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"9651d194.179e5","type":"mqtt out","z":"14bead0b.badb13","name":"","topic":"domoticz/in","qos":"","retain":"","broker":"4b39ab5d.f906a4","x":850,"y":400,"wires":[]},{"id":"19eca189.ef7efe","type":"mqtt in","z":"14bead0b.badb13","name":"","topic":"home/OpenMQTTGateway_ESP32_BLE_B/BTtoMQTT/DFD89DHIDDEN","qos":"2","datatype":"auto","broker":"4b39ab5d.f906a4","x":340,"y":300,"wires":[["df04dea1.94cde"]]},{"id":"df04dea1.94cde","type":"json","z":"14bead0b.badb13","name":"","property":"payload","action":"","pretty":false,"x":170,"y":380,"wires":[["353601e8.87050e","f055ca34.de6af8"]]},{"id":"353601e8.87050e","type":"switch","z":"14bead0b.badb13","name":"Dispositivos (mac)","property":"payload.id","propertyType":"msg","rules":[{"t":"eq","v":"DF:D8:9D:HI:DD:EN","vt":"str"},{"t":"eq","v":"2","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":370,"y":380,"wires":[["ea1a3a5f.090bc8"],[]]},{"id":"f055ca34.de6af8","type":"debug","z":"14bead0b.badb13","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":390,"y":540,"wires":[]},{"id":"ea1a3a5f.090bc8","type":"function","z":"14bead0b.badb13","name":"Envio datos por mac","func":"\n value_peso= msg.payload.weight\n \n \nif (value_peso < 12) {\n idx_value=646;\n} else if ((value_peso >= 12) & (value_peso < 45)) {\n idx_value=645;\n} else if ((value_peso >= 45) & (value_peso < 65)) {\n idx_value=644;\n} else if (value_peso >= 65) {\n idx_value=647;\n} \n value_peso= value_peso.toString();\n \n var msg1 ={};\n\n msg1.payload = {\"command\":\"udevice\",\"idx\":idx_value,\"svalue\":value_peso };\n \n \nreturn [msg1];","outputs":1,"noerr":0,"x":480,"y":460,"wires":[["5f94948c.573f5c"]]},{"id":"5f94948c.573f5c","type":"json","z":"14bead0b.badb13","name":"","property":"payload","action":"","pretty":false,"x":610,"y":540,"wires":[["9651d194.179e5"]]},{"id":"4b39ab5d.f906a4","type":"mqtt-broker","z":"","name":"Domoticz mqqt client","broker":"192.168.1.12","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","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 Flow 1. 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_BLE_B/BTtoMQTT/DFD89DHIDDEN:

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_BLE_B/BTtoMQTT/DFD89DHIDDEN» por el Topic que hemos extraído antes de MQTT de nuestra báscula y aceptamos:

Clicamos sobre domoticz/in e introducimos la IP de nuestra raspberry, y USER y PASS de MQTT si tenemos:

Ahora clicamos sobre Dispositivos (mac):

Introducimos el número MAC copiado antes del programa MQTT explorer:

Volvemos a tener la pantalla inicial. Ahora configuramos los IDX de nuestros dummys creados anteriormente en domoticz clicando sobre Envío datos por mac:

Introducimos los IDX donde corresponde.

Y nos queda la siguiente pantalla:

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!