ops_keisha
@kstewart · Membre depuis mars 2025
Plant manager · food and beverage
- Sujets
- 8
- Réponses
- 64
- Points
- 0
Toutes mes réponses sur les forums
Traduit de English par IA ·
Les cartes monocanal écoutent une seule fréquence et un seul facteur d’étalement. Une vraie passerelle LoRaWAN écoute huit canaux et tous les SF en même temps. Les nœuds LoRaWAN changent de canal volontairement, donc une carte monocanal ne capte que les trames qui tombent sur sa fréquence.Laura, deux choses distinctes se produisent.Joins : sur EU868, les requêtes de join utilisent les trois canaux par défaut, 868,1, 868,3 et 868,5. Votre nœud en choisit un au hasard, donc une carte monocanal sur 868,1 entend environ un tiers des joins. C’est votre « un sur quatre ». La join accept donne ensuite au nœud cinq canaux supplémentaires (867,1 à 867,9), puis il saute sur huit canaux après le join.Vous pouvez le figer après le join pour un test sur banc. Dans MCCI LMIC, dans le gestionnaire EV_JOINED :
case EV_JOINED:
// banc uniquement : garder le canal 0 (868,1), désactiver les autres
for (int ch = 1; ch < 9; ch++) {
LMIC_disableChannel(ch);
}
LMIC_setLinkCheckMode(0);
break;
Ne modifiez pas lmic_eu868.c et ne livrez pas cela sur le terrain. Cela ne peut rien changer au join lui-même.La partie UDP est en revanche le vrai blocage. Hermetry ne prend pas du tout en charge l’ancien packet forwarder UDP ; les passerelles se connectent avec Basics Station ou en tant que routeur sous licence. Cette carte n’aurait donc jamais pu être une passerelle dans votre organisation, ce qui explique qu’elle ne figure pas dans la liste. Ce que vous avez vu dans le journal des trames venait d’ailleurs. Y a-t-il une autre passerelle dans le bâtiment ? La nôtre a capté les trames d’un voisin avant que nous ajoutions la nôtre.Option de banc qui fonctionne dès aujourd’hui : n’importe quelle passerelle intérieure bon marché à 8 canaux qui exécute Basics Station. La nôtre a coûté moins cher que les capteurs de la chambre froide.
Single-channel boards listen on one frequency and one spreading factor. A real LoRaWAN gateway listens on eight channels and all SFs at once. LoRaWAN nodes hop channels on purpose, so a single-channel board only catches the frames that happen to land on its frequency.
Laura, two separate things are going on.
Joins: on EU868, join requests use the three default channels, 868.1, 868.3 and 868.5. Your node picks one of the three at random, so a single-channel board on 868.1 hears roughly a third of the joins. That’s your « one in four ». The join accept then hands the node five more channels (867.1 to 867.9), so after joining it hops over eight.
You can pin it after the join for a bench test. In MCCI LMIC, in the EV_JOINED handler:
case EV_JOINED:
// bench only: keep channel 0 (868.1), drop the others
for (int ch = 1; ch < 9; ch++) {
LMIC_disableChannel(ch);
}
LMIC_setLinkCheckMode(0);
break;
Don’t edit lmic_eu868.c, and don’t ship this to the field. It can’t help the join itself.
The UDP part is the real blocker though. Hermetry doesn’t support the legacy UDP packet forwarder at all, gateways connect with Basics Station or as a licensed router. So that board was never going to be a gateway in your organisation, which is why it isn’t listed. What you saw in the frames log came from somewhere else. Is there another gateway in the building? Ours picked up a neighbour’s frames before we added our own.
Bench option that works today: any cheap 8-channel indoor gateway that runs Basics Station. Ours cost less than the cold room sensors.
Traduit de English par IA ·
C’est la bibliothèque LoRa simple, Kevin. LMIC gère LoRaWAN, il choisit lui-même les canaux.
That’s the plain LoRa library, Kevin. LMIC does LoRaWAN, it picks channels itself.
The baud is right, otherwise plain AT wouldn’t answer OK either. ERROR:(0) is the HC-05’s code for a command it couldn’t parse, and with this module that almost always means the line ending. It wants every command to end with CR+LF. If the Serial Monitor is on « No line ending » or « Newline » only, the short « AT » sometimes gets through and the longer commands don’t.
Set the monitor to « Both NL & CR ». Also type the commands in capitals, and on some firmware versions AT+NAME only works while the KEY/EN pin is held high the whole time, not only at power-up. If NAME still fails, tie KEY to 3.3 V with a wire while you send it.
AT+UART=9600,0,0 then sets the data mode baud. AT mode stays at 38400 regardless.
Traduit de English par IA ·
Quoi que vous fassiez, placez un fin de course à chaque extrémité. Au travail, un store motorisé s’est enroulé tout seul autour de la barre.
Whatever you do, put a limit switch at both ends. We had a motorized shade at work wrap itself around the bar.
Couldn’t you wake on the watchdog every 8 s, read the ADC, and go back to sleep? That’s what our door counters do.
Which baud rate is the meter on? The SDM120 ships at 2400 if I remember right, lots of people miss that.
Traduit de English par IA ·
Nous avons eu la même question d’audit dans notre usine l’année dernière. La liste des réseaux autorisés est ce qui a permis de calmer les auditeurs, et elle vaut la peine d’être mise en place même avec le profil TLS.
We got the same audit question at our plant last year. The allowed networks list was the thing that got the auditors off our backs, worth doing even on the TLS profile.
Do you need dimming at all? If it’s just on and off, a relay is the cheapest thing there is.
Stealing the zone_id idea for the forklifts, thanks.
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.
+1 from a food plant. Same wish for our forklifts, especially the polygon part for the allergen area.
Encoders fitted Friday. With the correction it stays within about 5 cm over the 30 m, full or low battery. The swap test result turned out to be a slightly squashed right wheel, so Ciaran was right that it wasn’t only the motors. Trip counts and encoder difference now go to the dashboard.
They tried that. It’s straight for a few runs, then it drifts the other way when the battery drops.
Traduit de English par IA ·
Par curiosité, combien de sauts obtenez-vous à travers tout cet acier ?
Out of curiosity, how many hops do you get through all that steel?
Traduit de English par IA ·
Les deux, en fait. mraa.Uart(0) a configuré les broches, et j’avais inversé TX et RX. Les comptages arrivent maintenant chaque seconde et augmentent avec les données de remplissage. caps_rej est sur la carte de ligne, et le chef d’équipe a déjà demandé pourquoi il avait grimpé à 14 h.
Both, as it turns out. mraa.Uart(0) set up the pins, and I had TX and RX the wrong way round. Counts now arrive every second and go up with the filler data. caps_rej is on the line board and the shift lead already asked why it jumped at 2 pm.

