El sensor DHT del Shelly Add-on deja de leer a las pocas horas: DHT21 frente a DHT22

El caso: un Shelly 2PM Gen4 con Add-on y un DHT21 de temperatura y humedad. Funciona unas tres horas y deja de mostrar nada; al cortar la corriente del 2PM, vuelve a leer otras pocas horas. El patrón tiene una causa reconocible y una solución directa: el DHT22, que es el que el Add-on soporta.

Qué se ve desde la API

El sensor configurado en el Add-on aparece como dos componentes, temperature:100 y humidity:100. Mientras lee, Temperature.GetStatus devuelve la medida en tC; cuando el sensor se cuelga, el valor desaparece y el componente pasa a reportar error de lectura.

http://<ip>/rpc/Temperature.GetStatus?id=100

Qué periférico tiene configurado el Add-on —y con qué tipo— lo dice SensorAddon.GetPeripherals. Es lo primero que conviene mirar: si ahí pone dht22 y lo conectado es un DHT21, ya tienes la explicación.

http://<ip>/rpc/SensorAddon.GetPeripherals

Por qué se cuelga

  • El DHT21 no está soportado. El Add-on admite el DHT22, el DS18B20 (hasta cinco), entradas digitales y analógicas, pero no el DHT21 ni el DHT11. Comparten el protocolo de un hilo, con tolerancias de tiempo distintas: el DHT21 funciona a ratos y acaba bloqueado.
  • Un DHT bloqueado solo se libera quitándole la alimentación. Por eso revive al cortar la luz al 2PM: es el único momento en que el sensor se queda sin tensión.
  • La alimentación va justa. El Add-on da al sensor 3,3 V y un máximo de 10 mA. Un sensor fuera de soporte, en ese margen y con cable, se vuelve inestable con las horas.

La solución: DHT22 (AM2302)

Mismo cableado —VCC, DATA, GND—, misma función, temperatura y humedad, y soportado. Cambias el sensor y, de paso, el firmware del 2PM Gen4 al día. Si el periférico estaba dado de alta con otro tipo, elimínalo y vuelve a añadirlo como dht22:

http://<ip>/rpc/SensorAddon.AddPeripheral?type="dht22"

Ten en cuenta que el Add-on admite o un DHT22, o hasta cinco DS18B20, no ambos a la vez: comparten la línea de datos. Si más adelante quieres añadir sondas DS18B20, el DHT22 tiene que salir.

Si el cable es largo

A unos 10 m, el cable pasa a ser parte del problema: el protocolo de un hilo de los DHT no está pensado para tiradas largas. Si necesitas esa distancia:

  • Par trenzado DATA con GND, mejor apantallado y con la malla a GND solo en el extremo del Shelly.
  • Pull-up más fuerte en DATA a 3,3 V, del orden de 1–2,2 kΩ frente a los 4,7–10 kΩ habituales: carga antes la capacidad del cable y los flancos suben más rápido. A 3,3 V, 1 kΩ son 3,3 mA con la línea abajo, dentro del margen del Add-on.
  • 100 nF junto al sensor entre VCC y GND, y sección suficiente en la alimentación.

Aun así, a 10 m un DHT va al límite. Para esa distancia lo fiable es otro sensor: una DS18B20, cuyo 1-Wire sí está pensado para tiradas largas (solo temperatura), o un BLU H&T por Bluetooth en el punto de medida, que el propio 2PM Gen4 lee como pasarela (temperatura y humedad).

¿Y reiniciar el sensor cada 20 minutos?

Técnicamente se puede programar, pero no reinicia el sensor: el Add-on no permite cortar por software la alimentación del DHT. Lo único automatizable es Shelly.Reboot del 2PM entero, que interrumpe también sus relés —persianas, luces—, tira la conexión unos segundos y es un parche que mantener para siempre. Cortar solo el VCC del sensor exigiría un relé aparte. No compensa: el DHT22 soportado lo resuelve.

SensorSoportadoMideDistancia
DHT11 / DHT21NoT + HR—
DHT22 (AM2302)Sí, unoT + HRCorta
DS18B20Sí, hasta cincoTLarga
BLU H&TPor BluetoothT + HRSin cable

Resumen: un DHT colgado solo revive sin tensión; el Add-on solo soporta el DHT22, a 3,3 V y 10 mA; comprueba el tipo con SensorAddon.GetPeripherals; y para tiradas largas, DS18B20 o BLU H&T.