Ein Pi im Labor soll neue Hermetry-Alarme über einen Lautsprecher laut vorlesen
Von English mit KI übersetzt ·
Ich schon wieder. Unser Labor hat 6 Gefriergeräte und Inkubatoren, die über Hermetry mit Alarmregeln laufen und funktionieren, aber Meldungen gehen an die Glocke und niemand schaut auf den Bildschirm, wenn er Handschuhe trägt. Der PI hat gefragt, ob ein Lautsprecher einfach „Gefrierschrank 3 Temperatur zu hoch“ im Raum ausgeben könnte.Ich habe einen überzähligen Pi 4 und einen USB-Lautsprecher. Offline-Text-to-Speech funktioniert (ich habe piper und espeak-ng getestet, piper klingt deutlich besser). Was ich nicht verstehe, ist, wie der Pi von einem neuen Alarm erfährt. Ich habe in Hermetry einen Webhook auf den Pi eingerichtet, aber es kommt nichts an. Der Pi hängt im Uni-Netz hinter NAT, ohne öffentliche Adresse. Ist ein Webhook das falsche Werkzeug?
Me again. Our lab has 6 freezers and incubators on Hermetry with alarm rules and they work, but alerts go to the bell and nobody looks at the screen while wearing gloves. The PI asked if a speaker could just say „Freezer 3 temperature high“ in the room.
I have a spare Pi 4 and a USB speaker. Offline text to speech works (I tested piper and espeak-ng, piper sounds much nicer). The part I don’t get is how the Pi finds out about a new alarm. I set up a webhook in Hermetry pointing at the Pi and nothing ever arrives. The Pi is on the university network behind NAT, no public address. Is a webhook the wrong tool?
Von English mit KI übersetzt ·
Könntest du es irgendwie so einrichten, dass es per E-Mail ansagt? Also dass es den Posteingang liest?
Could you have it announce by e-mail somehow? Like read the inbox?
Von English mit KI übersetzt ·
Webhooks benötigen eine HTTPS-URL, die Hermetry von außen erreichen kann. Hinter NAT kommen sie daher nie an. Sie bräuchten einen Tunnel oder einen Reverse Proxy, und die IT der Uni wird wahrscheinlich Nein sagen.
Webhooks need an HTTPS URL Hermetry can reach from outside, so behind NAT they’ll never land. You’d need a tunnel or a reverse proxy, and uni IT will probably say no.
Von English mit KI übersetzt ·
Oder man dreht es um und lässt den Pi nachfragen. Pull ist besser als Push, wenn der Empfänger hinter NAT liegt.
Or turn it around and have the Pi ask. Pull beats push when the receiver is behind NAT.
Von English mit KI übersetzt ·
folge dem Thread, das will ich für mein Intercom-Ding auch lol
following, I want this for my intercom thing too lol
Von English mit KI übersetzt ·
Wir machen das auf unserer Produktionsfläche: Ein Pi mit einem Hornlautsprecher liest kritische Alarme über den Lärm hinweg vor. Ciaran hat recht, frag die Alarms-API ab.Bitte deinen Administrator um einen API-Schlüssel nur mit der Berechtigung zum Lesen von Alarmen (das Lesen von Alarmen ist standardmäßig eine Berechtigung auf Benutzerebene) und eine IP-Allowlist für die Adresse der Uni. Dann:
import requests, subprocess, time
H = {"Authorization": f"Bearer {API_KEY}"}
URL = f"https://{HOST}/tenant/{TENANT}/api/iot/alarms"
seen = set()
while True:
r = requests.get(URL, headers=H, params={"status": "OPEN", "severity": "CRITICAL,MAJOR",
"sort": "opened:desc", "pageSize": 20}, timeout=10)
for a in r.json()["items"]:
if a["alarmId"] not in seen:
seen.add(a["alarmId"])
subprocess.run(["sh", "-c", f'echo "{a["deviceName"]}: {a["title"]}" | piper --model en_GB-alan-medium.onnx --output-raw | aplay -r 22050 -f S16_LE'])
time.sleep(15)
Der Status OPEN bewirkt, dass bestätigte Alarme nicht mehr vorgelesen werden, was die Leute mögen: In der App bestätigen, und der Raum wird still. Gib deinen Alarmregeln lesbare Titel, denn genau das wird vorgelesen, z. B. „{{device.name}} Temperatur {{value}}“. Fünfzehn Sekunden sind ein höflicher Abfrageintervall, bleib deutlich unter den API-Limits. Falls du jemals einen öffentlichen Endpunkt bekommst, würde der Webhook alarm.created das Polling ersetzen: Webhooks.
We do this on our plant floor, a Pi with a horn speaker reads critical alarms over the noise. Ciaran’s right, poll the Alarms API.
Ask your admin for an API key with only the alarm read permission (reading alarms is a User-level permission by default) and an IP allowlist for the uni’s address. Then:
import requests, subprocess, time
H = {"Authorization": f"Bearer {API_KEY}"}
URL = f"https://{HOST}/tenant/{TENANT}/api/iot/alarms"
seen = set()
while True:
r = requests.get(URL, headers=H, params={"status": "OPEN", "severity": "CRITICAL,MAJOR",
"sort": "opened:desc", "pageSize": 20}, timeout=10)
for a in r.json()["items"]:
if a["alarmId"] not in seen:
seen.add(a["alarmId"])
subprocess.run(["sh", "-c", f'echo "{a["deviceName"]}: {a["title"]}" | piper --model en_GB-alan-medium.onnx --output-raw | aplay -r 22050 -f S16_LE'])
time.sleep(15)
Status OPEN means acknowledged alarms stop being read, which people like: ack it in the app and the room goes quiet. Give your alarm rules readable titles because that’s what gets spoken, e.g. „{{device.name}} temperature {{value}}“. Fifteen seconds is a polite poll rate, stay well under the API limits. If you ever do get a public endpoint, the alarm.created webhook would replace the polling: Webhooks.
Von English mit KI übersetzt ·
Gestern zum Laufen gebracht, alle im Labor sind begeistert. Ich musste die IT nicht um Hilfe bitten, das war ein Gewinn. Nur eine Sache: Zuerst habe ich status=active verwendet, und nach einem Neustart wiederholte er bestätigte Alarme immer wieder, weil mein seen-set leer war. Dann habe ich auf OPEN umgestellt, wie Sie geschrieben hatten. Außerdem musste ich die Gerätenamen von „frz-03“ in „freezer three“ ändern, weil piper „frz“ als „frz“ ausgesprochen hat.
Got it running yesterday, everyone in the lab loves it. Had to ask IT nothing, which was a win. Only thing: I first used status=active and it kept repeating acknowledged alarms after a restart because my seen-set was empty, switched to OPEN like you wrote. Also had to change device names from „frz-03“ to „freezer three“ because piper read it as „frz“.
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.
Mitdiskutieren
Melde dich an, um Fragen zu stellen und zu beantworten, hilfreiche Beiträge mit „Gefällt mir“ zu markieren und die Antwort zu kennzeichnen, die dein Problem gelöst hat. Jeder Beitrag bringt Punkte und Stufen.

