Faire lire à voix haute les nouvelles alarmes Hermetry par un haut-parleur via un Pi du labo
Traduit de English par IA ·
Me revoilà. Notre laboratoire dispose de 6 congélateurs et incubateurs sur Hermetry avec des règles d’alarme, et ça fonctionne, mais les alertes partent vers la cloche et personne ne regarde l’écran quand on porte des gants. Le PI a demandé si un haut-parleur pourrait simplement dire « Congélateur 3 température élevée » dans la pièce.J’ai un Pi 4 de rechange et un haut-parleur USB. La synthèse vocale hors ligne fonctionne (j’ai testé piper et espeak-ng, piper sonne bien mieux). Ce que je ne comprends pas, c’est comment le Pi apprend l’existence d’une nouvelle alarme. J’ai configuré un webhook dans Hermetry pointant vers le Pi, mais rien n’arrive jamais. Le Pi est sur le réseau de l’université derrière un NAT, sans adresse publique. Un webhook est-il le mauvais outil ?
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?
Traduit de English par IA ·
Pourrais-tu faire en sorte qu’il annonce cela par e-mail, d’une manière ou d’une autre ? Genre lire la boîte de réception ?
Could you have it announce by e-mail somehow? Like read the inbox?
Traduit de English par IA ·
Les webhooks nécessitent une URL HTTPS joignable par Hermetry depuis l’extérieur ; derrière un NAT, ils n’arriveront donc jamais. Il vous faudrait un tunnel ou un reverse proxy, et le service informatique de l’université refusera probablement.
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.
Traduit de English par IA ·
Ou alors inversez le sens et faites en sorte que le Pi interroge. Le pull est préférable au push lorsque le récepteur se trouve derrière un NAT.
Or turn it around and have the Pi ask. Pull beats push when the receiver is behind NAT.
Traduit de English par IA ·
je suis, je veux ça aussi pour mon truc d’interphone lol
following, I want this for my intercom thing too lol
Traduit de English par IA ·
Nous faisons cela sur notre atelier : un Pi avec un haut-parleur à pavillon lit les alarmes critiques par-dessus le bruit. Ciaran a raison, interrogez l’API Alarms.Demandez à votre administrateur une clé API avec uniquement l’autorisation de lecture des alarmes (la lecture des alarmes est une autorisation de niveau Utilisateur par défaut) et une liste blanche d’adresses IP pour l’adresse de l’université. Ensuite :
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)
Le statut OPEN signifie que les alarmes acquittées ne sont plus lues, ce qui plaît aux gens : acquittez-la dans l’application et la pièce se tait. Donnez à vos règles d’alarme des titres lisibles, car c’est ce qui sera énoncé, par exemple « {{device.name}} température {{value}} ». Quinze secondes est une cadence d’interrogation raisonnable, restez bien en dessous des limites de l’API. Si vous obtenez un jour un point d’accès public, le webhook alarm.created remplacerait l’interrogation : 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.
Traduit de English par IA ·
Mis en route hier, tout le monde au labo adore. Je n’ai eu besoin de demander rien à l’IT, ce qui était un gain. Seul bémol : j’ai d’abord utilisé status=active et il répétait sans cesse les alarmes acquittées après un redémarrage, car mon seen-set était vide. Je suis passé à OPEN, comme vous l’aviez écrit. Il a aussi fallu remplacer les noms d’appareils « frz-03 » par « freezer three », car piper lisait « frz » de travers.
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 ».
- 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.

