Veinte sondas DS18B20 en una sola Pi: caídas más allá de ocho sensores y cómo nombrar las claves
Traducido del English por IA ·
Vale, probablemente son dos preguntas en una, perdón.Estoy monitorizando una bodega pequeña donde guardo queso y algo de cerveza casera. Raspberry Pi 4, Raspberry Pi OS Bookworm, 1-wire en GPIO4 con dtoverlay=w1-gpio. Quiero 20 sondas DS18B20 (estante superior/medio/inferior, etc.). Con hasta 8 va bien. A partir de ahí, algunos sensores desaparecen de /sys/bus/w1/devices y vuelven, y de vez en cuando algunos leen exactamente 85.0.Segunda cuestión: los envío a Hermetry con paho-mqtt, una publicación por sensor, clave = el ID ROM como 28-0316a2794bff. ¿Es mala idea? Mi panel parece una guía telefónica.Cableado: pull-up de 4,7k en la Pi, cable cat5 hasta los estantes y luego cortos tramos hasta cada sonda, unos 15 m en total.
ok so this is probably two questions in one, sorry.
I’m monitoring a small cellar where I keep cheese and some homebrew. Raspberry Pi 4, Raspberry Pi OS Bookworm, 1-wire on GPIO4 with dtoverlay=w1-gpio. I want 20 DS18B20 probes (rack top/middle/bottom etc). With up to 8 it is fine. Past that some sensors vanish from /sys/bus/w1/devices and come back, and a few read exactly 85.0 now and then.
Second thing: I send them to Hermetry with paho-mqtt, one publish per sensor, key = the ROM id like 28-0316a2794bff. Is that a bad idea? My dashboard looks like a phone book.
Wiring: 4.7k pull-up at the Pi, cat5 run out to the racks, then short legs to each probe, about 15 m total.
Traducido del English por IA ·
¿Las sondas están conectadas con 3 cables o con alimentación parásita? Y cuando dice patas cortas, ¿cuán cortas?
Are the probes on 3 wires or parasite power? And when you say short legs, how short?
Traducido del English por IA ·
3 cables, 3.3V desde la Pi. Los cables miden de 30 cm a 1 m, es más una estrella que una línea, creo.
3 wires, 3.3V from the Pi. Legs are 30 cm to 1 m, it’s more of a star than a line I guess.
Traducido del English por IA ·
La topología en estrella es el origen de tu problema de caídas. 1-wire no tolera los stubs, cada derivación refleja la señal. O bien pasas una sola línea junto a cada sonda con stubs muy cortos, o la divides: puedes cargar el overlay dos veces en dos pines y tener dos buses más cortos. Con tanto cable, yo también probaría 2.2k en lugar de 4.7k.
The star is your dropout problem. 1-wire hates stubs, every leg reflects. Either run one line past every probe with tiny stubs, or split it: you can load the overlay twice on two pins and have two shorter buses. I’d also try 2.2k instead of 4.7k with that much cable.
Traducido del English por IA ·
¿No sería más fácil poner simplemente un ESP32 barato en cada rack? Es lo que haría yo, pero no soy un experto en hardware.
Would it be easier to just put a cheap ESP32 on each rack? That’s what I’d do but I’m not a hardware guy.
Traducido del English por IA ·
James tiene bien el cableado. Dos buses, 2.2k cada uno, y te irá bien. Nosotros usamos 14 sondas por bus en una casa de bombas de esa forma.85.0 es el valor de encendido del DS18B20; significa que la lectura se hizo antes de terminar una conversión, normalmente una caída de tensión en el bus. Descártalo en el código, nunca lo envíes.En cuanto a las claves, cámbialo ahora, antes de tener historial. Las claves cuentan como nombres distintos en toda la organización (Starter limita a 250), así que los ID ROM por sensor consumirán ese límite muy rápido en cuanto montes una segunda bodega. Nómbralas por posición, guarda un mapa de ID ROM a posición en un archivo en la Pi y envía los 20 en un solo mensaje. Un mensaje con 20 puntos cuesta la misma cuota que uno con un solo punto.
import glob, json, paho.mqtt.client as mqtt
MAP = {"28-0316a2794bff": "rack1.top", "28-0316a27a11ff": "rack1.mid"} # etc
vals = {}
for p in glob.glob("/sys/bus/w1/devices/28-*/temperature"):
rom = p.split("/")[-2]
t = int(open(p).read()) / 1000
if rom in MAP and t != 85.0:
vals["cellar." + MAP[rom]] = round(t, 2)
c.publish("v1/telemetry", json.dumps(vals), qos=1)
Las reglas de las claves están en Telemetry keys.
James has the wiring right. Two buses, 2.2k each, and you’ll be fine. We run 14 probes per bus in a pump house that way.
85.0 is the power-on value of the DS18B20, it means the read happened before a conversion finished, usually a brown-out on the bus. Drop it in code, never send it.
On the keys, change it now before you have history. Keys count as distinct names across the whole organisation (Starter caps you at 250), so ROM ids per sensor will eat that fast once you build a second cellar. Name them by position, keep a map from ROM id to position in a file on the Pi, and send all 20 in one message. One message with 20 points costs the same quota as one with one.
import glob, json, paho.mqtt.client as mqtt
MAP = {"28-0316a2794bff": "rack1.top", "28-0316a27a11ff": "rack1.mid"} # etc
vals = {}
for p in glob.glob("/sys/bus/w1/devices/28-*/temperature"):
rom = p.split("/")[-2]
t = int(open(p).read()) / 1000
if rom in MAP and t != 85.0:
vals["cellar." + MAP[rom]] = round(t, 2)
c.publish("v1/telemetry", json.dumps(vals), qos=1)
Key rules are on Telemetry keys.
Traducido del English por IA ·
Dos buses en GPIO4 y GPIO17, 2.2k cada uno, y rehice el cableado como una sola línea a lo largo de los racks. 20 de 20 desde hace dos días, ni un solo 85. También renombré las claves, eliminé el dispositivo y empecé de nuevo, ya que solo había una semana de datos. El panel ahora se lee como una bodega en lugar de una lista de números de serie. Gracias a todos, Kevin quizás en la próxima build 😉
Two buses on GPIO4 and GPIO17, 2.2k each, and I re-did the run as a line along the racks. 20 of 20 for two days now, not a single 85. Renamed the keys too, deleted the device and started fresh since there was only a week of data. Dashboard reads like a cellar now instead of a serial number list. Thanks all, Kevin maybe next build 😉
Traducido del English por IA ·
Una pequeña cosa mientras estás en ello: pon el token del dispositivo en un archivo que solo pueda leer tu usuario de servicio, no en el script. He visto demasiados de esos en repositorios de git.
One small thing while you’re in there: put the device token in a file only your service user can read, not in the script. Saw too many of those in git repos.
- Debes estar registrado para responder a este debate.
Únete a la conversación
Inicia sesión para preguntar y responder, dar me gusta a las publicaciones útiles y marcar la respuesta que resolvió tu problema. Cada aportación suma puntos y niveles.

