New: the AI firewall watches the whole platform and explains each incident in plain words. See how it works

Keisha S.

ops_keisha

@kstewart · Joined March 2025

Newcomer

Plant manager · food and beverage

Topics
8
Replies
64
Points
0
Newcomer10 points to Member

Forum Replies Created

Viewing 15 posts – 46 through 60 (of 64 total)

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.

Accepted solution♥ 4

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.

Accepted solution♥ 9

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.

Accepted solution♥ 2

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.

♥ 2
Viewing 15 posts – 46 through 60 (of 64 total)