Sensor de temperatura personalizado
En Aliexpress puedes encontrar infinidad de sensores zigbee pero no uno al que conectar varias sondas de temperatura a un precio razonable. Por esto me he decidido a crear el mio propio.
Materiales
Vamos a partir de un pequeño y económico CC2530 que no es difícil encontrar por menos de 5€ con antena incluida
Hay varias alternativas para programar el controlador, personalmente me he decantado por usar el CC-DEBUGGER con un coste inferior a 10€
Por poco más de 1€ podemos encontrar la sonda de temperatura DS18B20 que conectaremos al controlador zigbee.
Para un primer prototipo, lo anterior junto a alguna resistencia y unos cables dupont va a ser todo lo necesario. Posteriormente lo meteremos todo en una caja con una fuente de alimentación.
Firmware
En ningún momento me he planteado desarrollar mi propio software para controlar este dispositivo. Buscando información he encontrado (Pvto), un firmware para controlar el CC2530 personalizable desde un entorno gráfico. Parece que la última actualización es de hace más de tres años, con todo creo que puede funcionar.
Problema, El software de configuración de ptvo sólo corre en windows por lo que para ejecutarlo en Linux Mint he necesitado el uso de Wine ejecutando los siguientes comandos en la carpeta donde haya descargado y descomprimido el instalador de Ptvo.
sudo apt update
sudo apt install wine
sudo wine FirmwareConfig.exe
Aunque salen algunos errores a la hora de lanzar el ejecutable de windows mediante Wine, termina arrancando y es completamente funcional.
- Seleccionamos el CC2530 como tipo de placa sobre el que vamos a trabajar
- La seleccionamos como dispositivo final
- La selección o no del “Status led” es irrelevante
- Seleccionamos la salida 1
- Le asignamos un pin de la placa
- Seleccionamos nuestra sonda y que la vamos a colocar con una resistencia externa.
Con esto ya podemos guardar el firmware que hemos creado en una carpeta de nuestro pc. Se generará un archivo *.txt con la información de la configuración y otro archivo *.hex con el contenido del firmware que debemos volcar al CC2530.
Volcando el firmware al CC2530
Como ya he comentado anteriormente, voy a usar un CC-DEBUGGER para programar el CC2530 desde mi ordenador. Para hacerlo desde linux es necesario tener instalado cc-tool lo que puede llegar a ser un fuerte dolor de cabeza tal y como puedes ver en esta nota.
Ahora necesitamos conectar el CC2530 al cc-debugger mediante unos puentes con cables dupont según el siguiente esquema.
Pin | CCdebugger | CC2530 |
---|---|---|
1 | GND | GND |
3 | Degug Clock | P2.2 |
4 | Debug Data | P2.1 |
7 | Reset | Reset |
9 | Vcc | Vcc |
Con unos cuantos cables conectamos el cc-debugger al cc2530
Conectamos el ccdebugger al pc y volcamos el firmware que hemos generado anteriormente mediante la siguiente instrucción.
sudo cc-tool -e -w custom_zigbee.hex
Si todo ha ido bien, el resultado será algo parecido a esto.
Programmer: CC Debugger
Target: CC2530
Erasing flash...
Completed
Writing flash (236 KB)...
Completed (16.62 s.)
Montando el prototipo
Finalmente mi prototipo tendrá tres sondas de temperatura para el control de la caldera y el agua caliente sanitaria, dos relés para el termostato y encendido de la propia caldera y finalmente un led que indique el funcionamiento. Según esto el firmware generado tiene estas características:
Board type: CC2530
Device type: End device without routing
Status LED: P11, Periodic (every 5 seconds)
Output pins:
P14: Output 1, DS18B20, External pull-up (Sensor ID (optional, hex): AA-BB-CC-DD-EE-FF-01-02, Mode: Multiple on bus, Auto-detect)
P15: Output 2, DS18B20, External pull-up (Sensor ID (optional, hex): AA-BB-CC-DD-EE-FF-01-02, Mode: Multiple on bus, Auto-detect)
P16: Output 3, DS18B20, External pull-up (Sensor ID (optional, hex): AA-BB-CC-DD-EE-FF-01-02, Mode: Multiple on bus, Auto-detect)
P00: Output 4, GPIO, External pull-up (Role: Generic), Remember state
P01: Output 5, GPIO, External pull-up (Role: Generic), Remember state
La teoría queda muy despejada pero a la hora de llevar este prototipo a la práctica este es el resultado que he conseguido con una placa de pruebas pequeña, un poco de pegamento, una caja de conexiones eléctricas de superficie, cables y paciencia…
He intentado usar un módulo con los dos relés pero aunque los leds del módulo indicaban un correcto funcionamiento, los relés no llegaban a hacer el movimiento mecánico.
El módulo estará conectado a la red eléctrica de 220v con un modulo de alimentación de 3V dará alimentación a todos los componentes.
Añadiendo a Home Assistant
Para añadir el módulo que he creado sólo hay que acceder a la extensión Zigbee2Mqtt, permitir unirse a todos los dispositivos durante 5 minutos y entonces conectar el prototipo a la corriente. Obtendremos un dispositivo en HA como el siguiente.