Termostato Raspberry

Termostato Raspberry
Índice

Con la reciente muerte de termostato inteligente de NetAtmo a causa de una simple pila sulfatada me he decidido a crear el mio propio con la raspberry y un poco de Python. Iré escribiendo aquí los procesos con el mismo.

Archivo de configuración

Puesto que la idea es construir un script que se ejecute cada determinado tiempo, necesito un archivo que dote al sistema de persistencia de algunas variables. Después de barajar varias alternativas, he optado por guardar los datos de configuración en un archivo “config.json” ubicado en la carpeta raiz del usario que ejecuta el script.

El manejo de este tipo de archivos en python es muy sencillo y queda sentenciado con sólo seis líneas de código.

import json

with open('/home/pi/config.json', 'r') as archivo_json:
    data=archivo_json.read()

datos_json = json.loads(data)

...
...
... 
...
...

with open("config.json", "w") as archivo_json:
    json.dump(datos_json, archivo_json, indent = 4)

Al principio del script hay que importar la librería “json”, abrir el archivo en modo de lectura, leer el contenido y asignar este al dicionario “json_data”. Una vez realizadas las modificaciones necesarias en el diccionario a lo largo del script principal hay que abrir nuevamente el archivo “config.json”, aunque esta vez en modo de escritura, y volcar sobre el el contenido del diccionario “datos_json” modificado.

La variables utilizadas en el almacenamiento externo de variables son:

  • data - Lectura del archivo json
  • datos_json - Diccionario de datos con variables

Captura de la temperatura interior

Para tomar la temperatura que tengo en casa voy a utilizar un DHT22 (sensor de humedad y temperatura) que, aunque no es lo más preciso del mundo, es suficientemente barato como para empezar a hacer pruebas. En el artículo de atareao se explica perfectamente como llevar a cabo esta medición. El propio sensor DHT22, una resistencia de 10k y tres cables para conectar al puerto GPIO de la Raspberry es odo lo que he necesitado.

Imagen_01

Necesitamos una librería para capturar los datos del sensor. Esta se instalará en la raspberry medianta el comando sudo pip3 install Adafruit_DHT siempre y cuando tengamos instalado Python3 y el gestos de paquetes pip.

import Adafruit_DHT as dht

datos_dht = dht.read_retry(dht.DHT22,4)

while datos_dht[0] > 100:
    time.sleep(5)
    datos_dht = dht.read_retry(dht.DHT22,4)
    
real_hume = round(datos_dht[0],2)
real_temp = round(datos_dht[1],2)

Sobre estas líneas aparece la parte de código en Python involucrada en la medición de la temperatura. Importación de la libreria ADAfruit-DHT, captura de los datos del sensor y un redondeo a dos decimales que es más que suficiente.

Alguna vez me ha dado un dato inválido la medición por lo que le he incrustado una condición de que siempre que la medición de humedad sea mayor del 100% (dato no válido) que espere 5 segundos y vuelva a medir.

Las variables utilizadas en la adquisición de temperatura son las siguientes:

  • datos_dht - Tupla con los valores de la medida del sensor
  • real_hume - Humedad medida y redondeada
  • real_temp - Temperatura medida y redondeada

El relé de la caldera

Para poder enceder la caldera es necesario un relé. Lo más sencilo hubiera sido colocar uno que, a través del puerto GPIO, fuera directamente gobernado por la Raspberry pero tengo una serie de limitaciones en casa que no me han permitido hacerlo. Por eso necesito un relé que cumpla con lo siguiente:

  • Alimentación de 220V
  • Conexión wifi
  • Relé seco (Sin tensión en lo contactos)
  • Disponibilidad de API

Aunque no son muchas las limitaciones que le he impuesto, no me ha resultado fácil enontrar un relé que se adapte a ellas y el resultado es este.

Imagen_02

Una combinación casera de un relé wifi sonoff, un transformador de 220V a 5V y un relé de 5V (todo perfectamente unido con cinta adhesiva) que si no quieres esperar y los compras en Amazon te constarán en total poco más de 20€ pero que si no tienes prisa se pueden encontar en Aliexpress por menos de la mitad.

Según lo he montado, la Raspberry menda a través de wifi el comando de activación al relé Sonnoff y, cuando este se activa alimenta al mini transformador que a su vez hace lo mismo con el relé seco de 5V. A través del contacto de este segundo relé activamos los contactos del termostato de la caldera. una combinación efectiva, fiable y económica.