# How to Connect Seeed SenseCAP Sensors to TagoIO

> How to connect Seeed SenseCAP LoRaWAN sensors to TagoIO. Covers SenseCAP S21xx series, the SenseCAP portal bypass via TTN, payload decoding, and use cases for smart agriculture, environmental monitoring, and smart buildings.

![How to Connect Seeed SenseCAP Sensors to TagoIO](https://tago.io/og/blog/how-to-connect-seeed-sensecap-sensors-to-tagoio.png)

Seeed SenseCAP produces some of the most widely deployed industrial LoRaWAN sensors on the market. The S21xx series covers temperature, humidity, CO2, light, barometric pressure, soil moisture, and more, all in weatherproof enclosures rated for outdoor deployment.

SenseCAP sensors come pre-configured to join any standard LoRaWAN network. While Seeed operates its own SenseCAP portal, you can bypass it entirely and send data straight to TagoIO via The Things Network or any LoRaWAN network server that supports HTTPS webhooks.

This guide covers the full integration: from registering a SenseCAP sensor on TTN to seeing clean, decoded data in a TagoIO dashboard.

## What you need before you start

- A TagoIO account ([free plan available](https://tago.io/pricing))
- A Seeed SenseCAP sensor (S2101, S2103, S2104, S2105, S2107, or similar S21xx device)
- A LoRaWAN gateway compatible with TTN or your preferred network server
- A The Things Network (TTN) account at [console.cloud.thethings.network](https://console.cloud.thethings.network)

## How SenseCAP sensors communicate

SenseCAP S21xx sensors use standard LoRaWAN Class A communication. They send uplinks at configurable intervals (default 15 minutes, adjustable down to 1 minute via AT commands or the SenseCAP Mate app).

Each uplink is a binary payload. The payload format is documented in the [Seeed SenseCAP decoder repository on GitHub](https://github.com/Seeed-Solution/SenseCAP-Decoder). You will need this decoder to write the TagoIO payload parser.

## Step 1: Register the SenseCAP sensor on TTN

1. Log in to [console.cloud.thethings.network](https://console.cloud.thethings.network).
2. Open or create an Application.
3. Click **Register end device**.
4. Select **Enter end device specifics manually**.
5. Set the frequency plan for your region (EU868, US915, etc.).
6. Set LoRaWAN version to **1.0.3** (used by SenseCAP S21xx).
7. Enter the **JoinEUI (AppEUI)**, **DevEUI**, and **AppKey** from the SenseCAP sensor label or SenseCAP Mate app.
8. Save the device.

The sensor will join the TTN network on its next transmission.

## Step 2: Create a device in TagoIO

1. Log in to [admin.tago.io](https://admin.tago.io).
2. Click **Devices → Add Device**.
3. Search for **The Things Network v3** and select it.
4. Name the device to match your SenseCAP sensor.
5. Copy the **Webhook URL** and **Authorization Token** that TagoIO generates.

Device documentation: [docs.tago.io/docs/tagoio/devices](https://docs.tago.io/docs/tagoio/devices/)

## Step 3: Connect TTN to TagoIO via webhook

1. In your TTN application, go to **Integrations → Webhooks**.
2. Click **Add webhook → Custom webhook**.
3. Set **Base URL** to the TagoIO webhook URL.
4. Add header: `Authorization: <your_token>`.
5. Enable **Uplink message** events.
6. Save.

## Step 4: Write the Payload Parser

SenseCAP S21xx sensors send a structured binary payload. If you configure a TTN payload formatter using the [Seeed-provided decoder](https://github.com/Seeed-Solution/SenseCAP-Decoder), TTN will decode the payload before sending it to TagoIO. In that case, the decoded fields arrive in `payload.uplink_message.decoded_payload`.

**Option A: Use TTN's payload formatter + TagoIO parser**

Configure the Seeed decoder as a TTN Application-level payload formatter. Then in TagoIO, your parser simply maps the decoded fields:

```javascript
const decoded = payload.uplink_message.decoded_payload;

if (!decoded || !decoded.messages) {
  payload = [];
  return;
}

payload = decoded.messages.map(msg => ({
  variable: msg.measurementId.toString().toLowerCase().replace(/ /g, "_"),
  value: msg.measurementValue,
  unit: msg.unit || ""
}));
```

**Option B: Decode raw bytes in TagoIO**

If you prefer to keep all decoding in TagoIO, read the raw base64 payload from `payload.uplink_message.frm_payload` and implement the Seeed binary format parser in JavaScript.

For a SenseCAP S2101 (Temperature + Humidity):

```javascript
const raw = Buffer.from(payload.uplink_message.frm_payload, "base64");
// Seeed S2101 measurement payload starts at byte 3
const temperature = raw.readInt16LE(3) / 10;
const humidity = raw.readUInt16LE(5) / 10;

payload = [
  { variable: "temperature", value: temperature, unit: "C" },
  { variable: "humidity", value: humidity, unit: "%" }
];
```

Adjust byte offsets based on the sensor model using the [official Seeed decoder spec](https://github.com/Seeed-Solution/SenseCAP-Decoder).

Payload Parser documentation: [docs.tago.io/docs/tagoio/devices/payload-parser](https://docs.tago.io/docs/tagoio/devices/payload-parser/)

## Step 5: Verify in the Live Inspector

Open the **Live Inspector** tab on your TagoIO device page. Wait for the next sensor uplink (or force one by pressing the button on the SenseCAP device). Confirm that decoded variables appear correctly before building the dashboard.

Live Inspector docs: [docs.tago.io/docs/tagoio/devices/live-inspector](https://docs.tago.io/docs/tagoio/devices/live-inspector)

## Step 6: Build the dashboard

From **Dashboards → +**, create a new dashboard. For a SenseCAP environmental deployment:

- **Line charts** for temperature, humidity, and CO2 over time
- **Gauge widgets** showing current readings
- **Alert status card** showing whether the environment is in range
- **Map widget** if you have multiple sensors across a site

For multi-sensor deployments, use a [Blueprint Dashboard](https://docs.tago.io/docs/tagoio/dashboards/blueprint-dashboard) to apply one layout across all devices. Each sensor gets its own dashboard view via device tags, no duplication needed.

Dashboard docs: [docs.tago.io/docs/tagoio/dashboards](https://docs.tago.io/docs/tagoio/dashboards/)

## Step 7: Set up threshold alerts

Use [Actions](https://docs.tago.io/docs/tagoio/actions/) to notify your team when values go out of range. Common SenseCAP alert patterns:

- CO2 above 1000 ppm in a meeting room → email occupants
- Soil moisture below 15% → SMS to irrigation team
- Temperature above 35°C in a greenhouse → trigger a cooling relay via API call

Actions documentation: [docs.tago.io/docs/tagoio/actions](https://docs.tago.io/docs/tagoio/actions/)

## Use case examples

### Smart agriculture

SenseCAP S2105 (soil moisture + temperature) and S2101 (air temperature + humidity) nodes deployed across crop rows. Readings every 15 minutes to TagoIO. Analysis scripts calculate vapor pressure deficit (VPD) and write it back as a computed variable. Irrigation triggers automatically when soil moisture and VPD conditions are met.

### Environmental monitoring in offices and schools

SenseCAP S2103 (CO2, temperature, humidity) in classrooms and conference rooms. A Blueprint Dashboard gives building managers a per-room view. Actions send a Slack notification when CO2 levels in a room exceed 1000 ppm, prompting ventilation.

### Industrial outdoor sensing

SenseCAP S2101 in weatherproof enclosures on a construction site or logistics yard. TagoIO stores readings and shows trend charts. The facility team uses the mobile-responsive dashboard to check conditions on their phones.

## Taking it further with AI

TagoIO's MCP server lets AI assistants like Claude query your SenseCAP data directly. Ask questions like "Which zone had the highest CO2 last week?" or "Show me temperature anomalies across all sensors in the last 48 hours" without writing a query manually.

MCP documentation: [docs.tago.io/docs/tagoio/tago-ai/tagoio-mcp-ai-powered-iot-data-integration](https://docs.tago.io/docs/tagoio/tago-ai/tagoio-mcp-ai-powered-iot-data-integration)

## Summary

SenseCAP sensors connect to TagoIO through TTN in four steps: register on TTN, create a TagoIO device with the TTN connector, configure the webhook, and write the payload parser. The hardest part is getting the binary decode right: Seeed's open-source decoder takes most of the guesswork out of that.

Once the data flows, TagoIO handles storage, visualization, and alerting with no additional infrastructure needed.

- TagoIO Devices: [docs.tago.io/docs/tagoio/devices](https://docs.tago.io/docs/tagoio/devices/)
- Payload Parser: [docs.tago.io/docs/tagoio/devices/payload-parser](https://docs.tago.io/docs/tagoio/devices/payload-parser/)
- Dashboards: [docs.tago.io/docs/tagoio/dashboards](https://docs.tago.io/docs/tagoio/dashboards/)
- Blueprint Dashboards: [docs.tago.io/docs/tagoio/dashboards/blueprint-dashboard](https://docs.tago.io/docs/tagoio/dashboards/blueprint-dashboard)
- Actions: [docs.tago.io/docs/tagoio/actions](https://docs.tago.io/docs/tagoio/actions/)
- TagoIO MCP: [docs.tago.io/docs/tagoio/tago-ai/tagoio-mcp-ai-powered-iot-data-integration](https://docs.tago.io/docs/tagoio/tago-ai/tagoio-mcp-ai-powered-iot-data-integration)

[llms.txt](https://tago.io/llms.txt)
