brooksdata
@megan_b40 · Mitglied seit September 2025
Data analyst · water and wastewater
- Themen
- 2
- Antworten
- 45
- Punkte
- 0
Erstellte Forenantworten
Von English mit KI übersetzt ·
Wenn später ein geteilter Platz frei wird, kann ich dann ein Board teilen, das wegen des Limits als persönliches angelegt wurde?
If a shared slot frees up later, can I share a board that came out personal because of the limit?
Von English mit KI übersetzt ·
Kann ich das Profil „Cold room controller“ für einen zweiten Standort mit engeren Grenzwerten kopieren, ohne das erste zu verändern?
Can I copy the Cold room controller profile for a second site with tighter limits, without touching the first?
Von English mit KI übersetzt ·
Haha, ich nehme es zurück. Habe auch etwas dazugelernt.
Ha, I stand corrected. Learned something too.
Von English mit KI übersetzt ·
Ich denke, man muss sich für eines von beiden entscheiden? Ich ziehe das USB-Kabel immer ab, wenn ich ein Netzteil benutze.
I think you have to choose one or the other? I always unplug the USB when I use an adapter.
Von English mit KI übersetzt ·
Wie hast du die grünen Abzeichen in der Statusspalte hinbekommen? Bei mir wird nur einfacher Text angezeigt.
How did you get the green badges in the status column? Mine shows plain text.
We had the same with tank level boxes in a pump yard and our network guy walked me through it.
Mechanism: with distance the signal-to-noise ratio drops. Wi-Fi then picks a slower, safer modulation and coding rate (rate adaptation), each symbol carries fewer bits, so the data rate falls from tens of Mbps to 1-6 Mbps. On top of that, weaker frames fail more often and get retried, and each retry costs airtime and backs off. So „weaker“ turns into „slower“, and twilson’s point is real: at 1 Mbps your sensors use far more of the channel per byte than a laptop.
What helped us, in order of effect:
Fewer, bigger messages. Batch 2-4 readings into one telemetry array with their ts and send every couple of minutes. Same data, a fraction of the frames. Each message also counts once against the monthly quota whatever it holds.
Keepalive at 60-120 s, not 15. The docs recommend something between 30 and 300 s, and a short keepalive on a slow link is what gives you the odd keepalive_timeout.
Wait for PUBACK before deleting a buffered reading. Hermetry acks only after the message is safely queued, and a device can only have a limited number of unacknowledged QoS 1 messages in flight (20 by default), so on a slow link don’t fire them off blindly.
Fix the radio path properly: a point-to-point bridge to a small AP in the yard, or one gateway in the yard collecting the boxes over RS-485 or a short-range radio and sending on its own link. We did the bridge, the boxes now connect at 65 Mbps.
MQTT has the keepalive and in-flight numbers.
For the water network we use battery loggers that last years on a few readings a day. That is what „no wires“ looks like in practice.
Von English mit KI übersetzt ·
James hat die Verkabelung richtig gemacht. Zwei Busse, jeweils 2.2k, dann passt das. Wir betreiben so in einem Pumpenhaus 14 Sonden pro Bus.85.0 ist der Einschaltwert des DS18B20, das bedeutet, dass die Messung vor Abschluss einer Wandlung erfolgte, meist ein Brown-out am Bus. Im Code verwerfen, niemals senden.Bei den Keys jetzt ändern, bevor Historie entsteht. Keys zählen als eindeutige Namen über die gesamte Organisation (Starter begrenzt auf 250), daher verbrauchen ROM-IDs pro Sensor dieses Kontingent schnell, sobald Sie einen zweiten Keller aufbauen. Benennen Sie sie nach Position, führen Sie eine Zuordnung von ROM-ID zu Position in einer Datei auf dem Pi und senden Sie alle 20 in einer Nachricht. Eine Nachricht mit 20 Datenpunkten kostet dasselbe Kontingent wie eine mit einem.
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)
Die Regeln für Keys stehen unter 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.
Von English mit KI übersetzt ·
Wie oft brauchst du Messwerte? Wenn es langsam sein darf, werden viele Workarounds akzeptabel.
How often do you need readings? If it’s slow, a lot of hacks become acceptable.
Von English mit KI übersetzt ·
Schau dir den Host in deiner Logzeile an. Das ist der Broker-Host aus der US-Firmware.Hermetry läuft als getrennte Deployments pro Region (EU, US, TR), und jede Organisation gehört zu genau einer Heimatregion. Geräte müssen sich mit dem Geräte-Host der Region ihrer eigenen Organisation verbinden, dem Host auf der Karte Connection details jedes Geräts. Ich wette, die Organisation des US-Werks liegt in der Region US, und deine, die deine IT aus dem UK angelegt hat, liegt in der Region EU. Deine UK-Geräte klopfen mit Tokens am US-Broker an, die nur in der Region deiner Organisation existieren. Für diesen Broker sind das unbekannte Tokens, daher bekommst du eine 4. Nichts erreicht deinen Log-Tab, weil deine Organisation nie gefragt wurde.Genau das ist mir passiert, als wir ein Projekt zwischen zwei unserer Versorger kopiert haben, einer in jeder Region. Lösung:
- Öffne eines deiner Geräte, Tab Credentials, Connection details. Notiere dir den MQTT-Broker-Host.
- Ersetze den Host in der Firmware (und den HTTPS-Host, falls sie ihn verwenden).
- Verbinde weiterhin über den Hostnamen. SNI ist erforderlich, also keine IP aus einer DNS-Abfrage fest eintragen.
Owner und Admins können die Heimatregion auch unter den Organisationseinstellungen sehen, Residency. Die Seite ist Regions and data residency.Und da du 4er bekommst: Die Firmware wartet 5 Minuten, gut. Behalte das bei. Wiederholt fehlgeschlagene Logins von einer Adresse sperren diese Adresse für eine Weile, und das ganze Werk steht hinter einem NAT.
Look at the host in your log line. That’s the broker host from the US firmware.
Hermetry runs as separate deployments per region (EU, US, TR) and every organisation lives in one home region. Devices have to connect to the device host of their own organisation’s region, the one on each device’s Connection details card. I’d bet the US plant’s organisation is in the US region and yours, created by your IT from the UK, is in the EU. Your UK devices are knocking on the US broker with tokens that only exist in your organisation’s region. To that broker they’re unknown tokens, so you get a 4. Nothing reaches your Log tab because your org was never asked.
I hit exactly this when we cloned a project between two of our utilities, one in each region. Fix:
- Open any of your devices, Credentials tab, Connection details. Note the MQTT broker host.
- Replace the host in the firmware (and the HTTPS host if they use it).
- Keep connecting by host name. SNI is required, so don’t hardcode an IP from a DNS lookup.
Owners and admins can also see the home region under the organisation settings, Residency. The page is Regions and data residency.
And since you’re getting 4s: the firmware backs off 5 minutes, good. Keep that. Repeated failed logins from one address block that address for a while, and the whole plant is behind one NAT.
Von English mit KI übersetzt ·
Ich arbeite in der Wasser- und Abwasserwirtschaft, und wir haben vor zwei Jahren dasselbe durchgemacht.Zu City: Es gibt dafür keine Dokumentationsseite, daher kann ich nicht sagen, was es für Zähler ergänzt. Was ich dir sagen kann, ist, wie die Zähler selbst angebunden werden, und das ist die übliche IoT-Seite mit dem eigenen LoRaWAN-Netzwerkserver von Hermetry. Der Frequenzplan richtet sich nach deinem Gateway, also EU868-Geräte in Europa, mit OTAA oder ABP und Klasse A oder C. Es gibt eine Codec-Bibliothek (beim letzten Nachsehen 106 Codecs), sodass viele Zähler ohne eigenes Schreiben von Code dekodiert werden, und der Pairing-Modus hilft, wenn du Hunderte Geräte desselben Modells hinzufügst.Was wir für Zähler eingerichtet haben:
- Unbestätigte Uplinks. Jede Bestätigung kostet Gateway-Duty-Cycle, und auf 1-%-Teilbändern ist der schnell aufgebraucht.
- Das Volumen des Zählers als Zähler. In Diagrammen und der History-API liefert das increase-Aggregat den Verbrauch pro Stunde oder Tag, auch wenn ein Zähler überläuft.
- Eine Regel „Device offline“, damit stumme Zähler sichtbar werden, mit einer Zeitspanne, die länger ist als das Meldeintervall.
Falls der Kunde doch auf dem Whitespace-Funkgerät besteht, müsste dessen eigenes Gateway die Zähler als Child-Devices über MQTT auf den v1/gw-Topics melden. Das ist möglich, aber ihr müsstet diese Gateway-Software selbst schreiben.Die Codec-Liste findest du hier: The codec library
I work in water and wastewater and we went through the same thing two years ago.
On City: there’s no doc page for it, so I can’t tell you what it adds for meters. What I can tell you is how the meters themselves go in, which is the regular IoT side with Hermetry’s own LoRaWAN network server. The frequency plan follows your gateway, so EU868 gear in Europe, with OTAA or ABP and Class A or C. There’s a codec library (106 codecs last time I looked) so many meters decode without you writing anything, and pairing mode helps when you’re adding hundreds of the same model.
Things we set up for meters:
- Unconfirmed uplinks. Every ack costs gateway duty cycle, and on 1 % sub-bands that runs out fast.
- The meter’s volume as a counter. On charts and the history API the increase aggregate gives you consumption per hour or day, including when a meter rolls over.
- A Device offline rule so silent meters show up, set longer than the reporting interval.
If the client ever insists on the white space radio, its own gateway would have to report the meters as child devices over MQTT on the v1/gw topics. Possible, but you’d be writing that gateway software yourselves.
The codec list is here: The codec library
Von English mit KI übersetzt ·
Zum Sichtbarmachen: Lege alle vier Schlüssel in ein einziges Liniendiagramm, rh und die Prozentwerte auf die rechte Achse. Die Phasenbeziehung springt ins Auge, sobald sie eine gemeinsame Zeitachse teilen.
For the seeing part: put all four keys on one line chart, rh and the percentages on the right axis. The phase relationship jumps out once they share a time axis.
How often do you need the position? Once a second per cart is very different from once a minute, both for the radio and for what you store.
The Log tab saves so much guessing. +1
Same experience, two of my backpacks from the same seller were 0x3F.

