Vingt sondes DS18B20 sur un seul Pi : pertes au-delà de huit capteurs et comment nommer les clés
Traduit de English par IA ·
Bon, ça fait probablement deux questions en une, désolé.Je surveille une petite cave où je garde du fromage et de la bière maison. Raspberry Pi 4, Raspberry Pi OS Bookworm, 1-wire sur GPIO4 avec dtoverlay=w1-gpio. Je veux 20 sondes DS18B20 (étagère haut/milieu/bas, etc.). Jusqu’à 8, ça fonctionne. Au-delà, certains capteurs disparaissent de /sys/bus/w1/devices puis reviennent, et quelques-uns affichent parfois exactement 85.0.Deuxième point : je les envoie vers Hermetry avec paho-mqtt, une publication par capteur, clé = l’identifiant ROM comme 28-0316a2794bff. Est-ce une mauvaise idée ? Mon tableau de bord ressemble à un annuaire téléphonique.Câblage : pull-up de 4,7k côté Pi, câble cat5 jusqu’aux étagères, puis de courtes dérivations vers chaque sonde, environ 15 m au 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.
Traduit de English par IA ·
Les sondes sont-elles câblées sur 3 fils ou en alimentation parasite ? Et quand vous dites pattes courtes, c’est combien court ?
Are the probes on 3 wires or parasite power? And when you say short legs, how short?
Traduit de English par IA ·
3 fils, 3.3V depuis le Pi. Les branches font de 30 cm à 1 m, c’est plutôt une étoile qu’une ligne je pense.
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.
Traduit de English par IA ·
L’étoile est à l’origine de ton problème de décrochages. Le 1-wire n’aime pas les stubs, chaque branche réfléchit le signal. Soit tu fais passer une seule ligne à côté de chaque sonde avec de minuscules stubs, soit tu la scindes : tu peux charger l’overlay deux fois sur deux broches et obtenir deux bus plus courts. Avec autant de câble, j’essaierais aussi 2.2k au lieu 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.
Traduit de English par IA ·
Ne serait-il pas plus simple de mettre simplement un ESP32 bon marché sur chaque rack ? C’est ce que je ferais, mais je ne suis pas un spécialiste du matériel.
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.
Traduit de English par IA ·
James a le bon câblage. Deux bus, 2.2k chacun, et ça ira. Nous faisons tourner 14 sondes par bus dans un local de pompage de cette façon.85.0 est la valeur à la mise sous tension du DS18B20 : cela signifie que la lecture a eu lieu avant la fin d’une conversion, généralement une chute de tension sur le bus. Écartez-la dans le code, ne l’envoyez jamais.Pour les clés, changez-les maintenant, avant d’avoir un historique. Les clés sont des noms distincts à l’échelle de toute l’organisation (Starter est limité à 250), donc les ID ROM par capteur vont épuiser ce quota rapidement dès que vous construirez une deuxième cave. Nommez-les par position, gardez dans un fichier sur le Pi une correspondance entre l’ID ROM et la position, et envoyez les 20 dans un seul message. Un message contenant 20 points coûte le même quota qu’un message avec un seul point.
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)
Les règles relatives aux clés figurent dans 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.
Traduit de English par IA ·
Deux bus sur GPIO4 et GPIO17, 2.2k chacun, et j’ai refait le câblage en une seule ligne le long des baies. 20 sur 20 depuis deux jours, pas un seul 85. J’ai aussi renommé les clés, supprimé l’appareil et repris à zéro puisqu’il n’y avait qu’une semaine de données. Le tableau de bord ressemble maintenant à une cave plutôt qu’à une liste de numéros de série. Merci à tous, Kevin peut-être pour le prochain 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 😉
Traduit de English par IA ·
Un petit point pendant que vous y êtes : placez le jeton de l’appareil dans un fichier que seul votre utilisateur de service peut lire, et non dans le script. J’en ai vu trop dans des dépôts 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.
- Vous devez être connecté pour répondre à ce sujet.
Rejoignez la discussion
Connectez-vous pour poser et répondre à des questions, aimer les messages utiles et marquer la réponse qui a résolu votre problème. Chaque contribution rapporte des points et des niveaux.

