jueves, 3 de agosto de 2017

Sensores de temperatura con HomeAssistant en OrangePi

Ahora que tenemos instalado HomeAssistant en nuestra Orange Pi Zero, vamos a ver un ejemplo práctico de cómo conectarle unos cuantos de sensores de temperatura.
Utilizaremos para ello sensores Dallas DS18B20 que ya vimos en esta entrada del blog. Son pequeños, muy baratos y tienen la característica de que funcionanpor medio del protocolo 1Wire, que nos permite establecer un bus lineal (un único cable, para entendernos) en el que podemos colocar varios sensores en distintas posiciones. Si tenemos la posibilidad de hacer llegar un cable de un rincón a otro de la casa, podemos tener sensores en todas las habitaciones de una manera fácil.
DS18B20
HomeAssistant tiene soporte nativo para este protocolo, y la OrangePi Zero permite conectarlos por medio de sus pines GPIO (General Purpose Input Output - Entradas y salidas de propósito general), pero antes tenemos que activar su utilización. Utilizaremos para ello cualquier distribución de armbian para la OPI Zero, como Debian o Ubuntu.

Activar módulos 1Wire

El kernel de armbian soporta el protocolo 1Wire para la OPI Zero, pero hay que activar los módulos correspondientes. Para ello, editaremos el fichero /etc/modules-load.d/modules.conf y descomentaremos todas las líneas que comienzan por w1, quedando de la siguiente manera:
w1-sunxi
w1-gpio
w1-therm
#sunxi-cir
xradio_wlan
g_serial
xradio_wlan
Al reiniciar el sistema, deberían quedar activados los drivers del protocolo 1Wire. Para comprobarlo, basta con acceder al directorio /sys/bus/w1. Si existe este directorio, es que todo ha ido bien.

Comprobar GPIO

Ahora tenemos que comprobar dónde conectar los terminales de los sensores de temperatura.
Vamos a utilizar varios sensores en el mismo cable, siguiendo el esquema que vimos en la entrada citada del blog. Todos ellos utilizan un sólo pin o GPIO, dado que se trata de un bus serie.
El driver de 1Wire que está ahora habilitado en el kernel utiliza un GPIO concreto, y para averiguar cuál es, nos vamos al directorio /boot y ejecutamos el siguiente comando:
$ bin2fex script.bin script.fex
Este comando nos convierte el fichero binario a uno de texto (script.fex) que podemos abrir con un editor y buscaremos en él la cadena “w1”.
En mi OPI Zero, la sección tiene el siguiente contenido:
[w1_para]
w1_used = 1
gpio = 10
Lo que quiere decir que el driver utiliza en este caso el GPIO10.
Podríamos elegir otro GPIO de los que están disponibles en el conector modificando el fichero fex y compilándolo de nuevo con el comando fex2bin, pero en principio nos puede valer el 10 tal y como está.

Conexionado

Siguiendo el esquema de conectores extraído de linux-sunsi, el GPIO10 está disponible en el terminal número 26 (esquina inferior derecha) del bus de GPIO de la OPI Zero:
img
Por tanto, utilizando la alimentación tradicional (no parasitaria) del sensor de temperatura, las conexiones a realizar serían las tres siguientes:
  • Pin 2: VDD (5V).
  • Pin 6: GND.
  • Pin 26: Datos E/S.
Como se indica en el esquema siguiente (obtenido del proyecto MySensors), podemos establecer un bus llevando a la distancia deseada los tres cables y colocando en los puntos de interes distintos sensores conectados en paralelo:
img
Entre la línea de alimentación y la de datos conectaremos una resistencia de 4K7 ohmios, al principio del bus.
El cable del bus puede ser bastante largo (hay gente que lo ha llevado más alla de los 500m), y dependerá del tipo de cable (se recomienda par trenzado UTP de clase 5 o superior), de las interferencias, del voltaje empleado en la alimentación, etc.
La alimentación del sensor en teoría se podría hacer a 3,3V, pero como admite un voltaje entre 3 y 5,5V, vamos a hacerlo a 5V para evitar que la caída de potencial a lo largo del bus nos cree un problema de alimentación.
A continuación, unas fotos para ver cómo quedan los sensores en el cable UTP que yo he utilizado:
Sensor 1
Conexión del primer sensor (con la resistencia de 4K7)
Sensor 2
Conexión de sensor intermedio
Conexión OPIZ
Conexión del bus a la Orange Pi Zero
Una vez que conectemos los sensores, nos deben aparecer varios subdirectorios en /sys/bus/w1,con el nombre “28-xxxx“. Cada uno de ellos es un sensor distinto, y el “xxxxx” es el ID único del dispositivo.
Para comprobar que las lecturas de temperatura funcionan, podemos ejecutar en cada uno de ellos el siguiente comando:
$ cat 28-XXXXXXXXXXXXX/w1_slave
Si todo va bien, nos deberá devolver algo parecido a esto:
49 01 4b 46 7f ff 07 10 f6 : crc=f6 YES
49 01 4b 46 7f ff 07 10 f6 t=28355
Esto indica dos cosas:
  1. El dispositivo transmite correctamente (el CRC está bien, sin errores).
  2. La temperatura actual es de 28,355ºC

Activación del sensor en HomeAssistant

Una vez que tenemos todo el cableado conectado y los sensores son detectados a nivel de sistema operativo, nos queda activarlos dentro de Home Assistant.
Para ello, utilizaremos la plataforma onewire, definiendo de esta manera todos nuestros sensores, dentro del fichero de configuración configuration.yaml:
# Sensores de temperatura Dallas 18B20
# Todos conectados en paralelo en el bus 1Wire
- platform: onewire
  names:
    28-000006769469: Temperatura pasillo
    28-0000067761dc: Temperatura salón
    28-000006775fde: Temperatura exterior
Como podemos ver, hacemos una correspondencia entre el identificador de cada sensor (el que aparece en el directorio /sys/bus/w1) y el nombre que le queramos dar a cada sensor.
Por defecto, Home Assistant nos mostrará el sensor como un sensor de temperatura, no tenemos que especificar ni un icono ni la unidad de medida, y nos aparecerá de esta manera:
Home Assistant - Temperatura
Related Posts Plugin for WordPress, Blogger...

No hay comentarios:

Publicar un comentario