ops_keisha
@kstewart · Se unió el marzo 2025
Plant manager · food and beverage
- Temas
- 8
- Respuestas
- 64
- Puntos
- 0
Respuestas de foro creadas
Traducido del English por IA ·
Las placas de un solo canal escuchan una frecuencia y un factor de propagación. Una pasarela LoRaWAN real escucha ocho canales y todos los SF a la vez. Los nodos LoRaWAN cambian de canal a propósito, así que una placa de un solo canal solo capta las tramas que caen en su frecuencia.Laura, están ocurriendo dos cosas distintas.Joins: en EU868, las solicitudes de join usan los tres canales por defecto, 868,1, 868,3 y 868,5. Su nodo elige uno de los tres al azar, así que una placa de un solo canal en 868,1 oye aproximadamente un tercio de los joins. Ese es su «uno de cada cuatro». La join accept entrega al nodo cinco canales más (867,1 a 867,9), así que tras unirse salta entre ocho.Puede fijarlo después del join para una prueba de banco. En MCCI LMIC, en el manejador EV_JOINED:
case EV_JOINED:
// solo banco: mantener el canal 0 (868,1), desactivar los demás
for (int ch = 1; ch < 9; ch++) {
LMIC_disableChannel(ch);
}
LMIC_setLinkCheckMode(0);
break;
No edite lmic_eu868.c y no envíe esto al campo. No puede ayudar al join en sí.Sin embargo, la parte UDP es el verdadero bloqueo. Hermetry no admite en absoluto el antiguo packet forwarder UDP; las pasarelas se conectan con Basics Station o como router con licencia. Así que esa placa nunca iba a ser una pasarela en su organización, por eso no aparece en la lista. Lo que vio en el registro de tramas llegó de otro lugar. ¿Hay otra pasarela en el edificio? La nuestra captó tramas de un vecino antes de que añadiéramos la nuestra.Opción de banco que funciona hoy: cualquier pasarela interior económica de 8 canales que ejecute Basics Station. La nuestra costó menos que los sensores de la cámara fría.
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.
Traducido del English por IA ·
Eso es la biblioteca LoRa normal, Kevin. LMIC implementa LoRaWAN y elige los canales por sí mismo.
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.
Traducido del English por IA ·
Hagas lo que hagas, pon un final de carrera en ambos extremos. En el trabajo, una persiana motorizada se enrolló sola alrededor de la barra.
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.
Traducido del English por IA ·
El año pasado recibimos la misma pregunta de auditoría en nuestra planta. La lista de redes permitidas fue lo que hizo que los auditores nos dejaran en paz, y vale la pena hacerlo incluso con el perfil 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.
Traducido del English por IA ·
Hacemos esto en nuestra planta: una Pi con un altavoz de bocina lee las alarmas críticas por encima del ruido. Ciaran tiene razón, consulta la API de Alarms.Pide a tu administrador una clave de API solo con el permiso de lectura de alarmas (leer alarmas es un permiso de nivel Usuario por defecto) y una lista de IP permitidas para la dirección de la universidad. Luego:
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)
El estado OPEN significa que las alarmas reconocidas dejan de leerse, lo que a la gente le gusta: reconócela en la app y la sala se queda en silencio. Pon a tus reglas de alarma títulos legibles, porque eso es lo que se lee en voz alta, por ejemplo «{{device.name}} temperatura {{value}}». Quince segundos es una frecuencia de sondeo razonable; mantente muy por debajo de los límites de la API. Si algún día obtienes un endpoint público, el webhook alarm.created sustituiría el sondeo: 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.
Traducido del English por IA ·
Por curiosidad, ¿cuántos saltos consigues atravesando todo ese acero?
Out of curiosity, how many hops do you get through all that steel?
Traducido del English por IA ·
Las dos cosas, como resulta. mraa.Uart(0) configuró los pines, y yo tenía TX y RX cambiados. Los recuentos llegan ahora cada segundo y suben con los datos de relleno. caps_rej está en la placa de línea, y el jefe de turno ya preguntó por qué subió a las 14:00.
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.

