UplinkWatch

Guides

How to get notified when a The Things Stack device goes quiet

The Things Stack Community Edition has no device-offline alerting. How to build it with a webhook, and what the paid tiers actually include.

If you run The Things Stack — Community Edition on The Things Network, or your own deployment — and you are looking for the setting that emails you when a device stops sending, it is not there. Community Edition has no alerting of any kind.

The Things Industries offer network operations and alerting features on their paid Cloud tiers. If you are already paying for Cloud, look there first. If you are on Community Edition, or self-hosting Open Source, you need to build it or buy it separately.

Build it with a webhook

Under Integrations ▸ Webhooks ▸ Add webhook ▸ Custom webhook, set a base URL and enable the uplink message event. The Things Stack will POST JSON to that URL on every uplink.

{
  "end_device_ids": {
    "device_id": "ls101sm",
    "dev_eui": "24E124126C005678"
  },
  "uplink_message": {
    "f_cnt": 9,
    "rx_metadata": [
      { "gateway_ids": { "gateway_id": "eui-2cf7f12001a10000" },
        "rssi": -83, "snr": 9 }
    ],
    "decoded_payload": { "distance": 420, "battery": 71 }
  }
}

Note the shape differs from ChirpStack's: identifiers live under end_device_ids, the frame counter is f_cnt rather than fCnt, and gateway ids are nested one level deeper inside gateway_ids. If you run both network servers, normalise them to a common structure at the door rather than scattering the difference through your code.

Anything that receives those POSTs and remembers a timestamp per device can alert you when one stops. Our uplink-watchdog script handles both shapes and is a single file with no dependencies.

Enable only the events you mean

Webhook configuration lets you subscribe to join accepts, downlink events and several others alongside uplinks. Enable uplinks for this purpose and be careful about treating anything else as a sign of health. A join accept means a device is trying; it does not mean it is delivering data. A device stuck in a join loop can look busy while sending you nothing.

How long is too long?

Do not use one global timeout for every device. Devices on the same network routinely differ in reporting interval by a factor of a hundred, and a single window either floods you with false alarms from the slow ones or misses real failures on the fast ones.

Track each device's own average interval and alert after about three missed reports. Exclude outage-length gaps when computing that average, or one long outage quietly doubles the time it takes to detect the next one.

Fair warning about self-hosting the watchdog

Whatever you build, it runs somewhere, and that somewhere is not itself monitored. A watchdog that has silently died is worse than no watchdog, because you believe you are covered. Decide deliberately whether that risk is acceptable for the fleet you are responsible for.

Or use a hosted one

We run UplinkWatch for exactly this: paste our ingest URL into the webhook base URL field, and device and gateway monitoring happens on our infrastructure. It reads both The Things Stack and ChirpStack payloads on the same endpoint, which is useful if you run a mixed estate. Free for 5 devices.

Hosted in the EU: our servers are in Helsinki, Finland, run by Hetzner. Your uplink metadata does not leave the EU.

Stop finding out from your client

UplinkWatch alerts you the moment a device or gateway goes quiet. Paste one URL into your network server. Free for 5 devices.

Start free What it does

Last updated 2026-09-03.