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.

