Utilizar una sonda de temperatura NTC en H.A.

¿Has conseguido solucionar algún problema en Home Assistant y quieres compartirlo? ¿Alguna automatización para ayudar al resto? ¡Comparte!
juanvmtz
Mensajes: 1
Registrado: Vie Sep 04, 2020 12:01 pm

Utilizar una sonda de temperatura NTC en H.A.

Mensaje por juanvmtz » Sab Sep 05, 2020 7:09 pm

Buenas:

Por si le sirve de interés a alguien, voy a comentar como integrar una sonda de temperatura NTC en HA, aunque podría integrarse sin problemas en cualquier otra plataforma.

En mi caso tengo una sonda NTC integrada en el termosifón. Inicialmente estaba conectada a un termostato, que únicamente mostraba la temperatura del agua del termosifón, y en función de la temperatura había que abrir o cerrar diferentes válvulas para tener agua caliente en los grifos, bien del termosifón, bien de un acumulador calentado por una caldera de gasoil.

Hace unos años lo automaticé mediante varias Raspberrys que se encargaban de leer la temperatura, con un programa hecho en Java. Como llevo un tiempo con Home Assistant, y ya tengo unos cuantos SonOff y ESP en la instalación, he decidido integrar la gestión del Agua Caliente Sanitaria en Home Assistant.

Hasta ahora, las Raspberry, en función de la temperatura del agua del termosifón, controlan diferentes electro-válvulas de tal forma que el acs provenga del termosifón o de un acumulador calentado por la caldera de gasoil.

Para comenzar a migrar a HA, primero he comenzado por la sonda NTC (Resistencia con coeficiente negativo) integrada en el Termosifón, de la cual tengo los valores característicos, a saber:
  • RZP o R0: Rated Zero Power. Valor de la resistencia a temperatura nominal (10K)
  • T0: Temperatura nominal (25ºC)
  • B: Coeficiente Beta del thermistor: 3435
Para leer el valor de la sonda, he cambiado la RPi por un D1 mini en el que he instalado el firmware Tasmota Sensors, y al que he conectado por I2C el ADC ADS1115. Tras instalar Tasmota, solo hay que configurarlo, aparte de para conectarlo al servidor mqtt, como dispositivo genérico y los pines D1 y D2 como pines I2C (SCL y SDA respectivamente).

Para medir la resistencia que proporciona la sonda, he utilizado un divisor de tensión con una resistencia conocida (20K).

Código: Seleccionar todo

    Vcc  ----- R (20K)  ---------  Rt ------- GND
                              |
                             V0
El ADS1115 nos devuelve un valor que se corresponde a la tensión que existe en los pines de medida (A0 en este caso), y que es proporcional a la ganancia y la resolución del ADS1115 (6,144 por defecto y 32768). Así si el valor que devuelve en A0 es 1024, el voltaje es:

V0 = Adc * Ganancia / resolución = 1400 * 6.144 / 32768 = 0.192v (0.1929 medidos con el polímetro)

El valor de la resistencia de la sonda en ese momento será:

Rt = (R x V0) / ( Vcc - V0) = (20000x0.192) / (3.3 - 0.192) = 1235.52 Ohm

Nota: Aunque el ADS1115 puede alimentarse a 5V, en mi caso he utilizado 3.3

Ahora solo queda convertir la resistencia de la sonda en temperatura. Para ello, conociendo los valores característicos de la sonda B y R0, se puede utilizar la ecuación simplificada de Steinhart-Hart:
1/T = 1/T0 + 1/B * Ln(R/R0)
Nota: Las temperaturas van en ºKelvin

En HA dicha formula me queda:

Código: Seleccionar todo

    - platform: mqtt
      name: "Temperatura agua Solar"
      state_topic: "tele/tasmota_xx/SENSOR"
      unit_of_measurement: '°C'
      value_template:  '{{ ((1/ (((log((value_json["ADS1115"]["A0"] *3.75)/(33000 - (value_json["ADS1115"]["A0"] * 1.1875))))/ 3435) + (1/(25+273.15))))-273.15 ) | round (2) }}'
Algunas operaciones se podrían reducir, pero las dejo "largas" para acordarme pasado un tiempo porque se hacían así.

Con esto ya tengo la temperatura proporcionada por la sonda NTC en HA. Sirve para cualquier sonda NTC con solo cambiar los valores característicos en la formula: 3435, 25 y 33000 (que son 3.3V por R0)

Responder