Skip to main content

Bluetooth Indoor Positioning System with LoRaWAN

Introduction

Overview

Indoor positioning is a common challenge for many industries. While high-precision systems like UWB exist, they can be costly and complex. This solution offers a flexible and cost-effective alternative by combining two powerful wireless technologies: Bluetooth Low Energy (BLE) for location sensing and LoRaWAN for long-range, low-power data transmission.

The system is built around the SenseCAP T1000 Tracker and supports two distinct positioning modes, allowing you to balance precision with battery life based on your needs:

  1. High-Precision Tracking (Trilateration): When a tracker detects signals from three or more BLE beacons, it can calculate its precise (x, y) coordinates on a map. This mode is ideal for tracking the movement of assets or personnel, providing accurate location updates periodically or whenever movement occurs.

  2. Zone-Based Positioning (Proximity): When a tracker is in range of only one or two beacons, it identifies its location based on proximity to the nearest beacon. This mode is perfect for simpler use cases like automated check-ins, confirming an asset is in a designated room, or conserving battery life by reporting location less frequently.

By supporting both methods, this solution provides a versatile and easy-to-deploy system for a wide range of indoor tracking applications, from simple presence detection to more detailed coordinate-based monitoring.

Navigate to our bundle page

Check out our Indoor & Outdoor Integrated Positioning bundle page for all the products you need to implement this solution.

Key Features & Benefits

  • Cost-Effective & Scalable: Leverages affordable BLE beacons and avoids the need for expensive gateway installations in every room.
  • Long-Range Data Transmission: A single LoRaWAN gateway can cover an entire building or campus, drastically reducing infrastructure costs.
  • Instant SOS Alert: Trackers include a panic button that, when pressed, immediately sends an SOS alert via LoRaWAN for rapid emergency response.
  • Intelligent Power Management: By using a built-in accelerometer, the tracker can report only when movement is detected and send periodic "heartbeat" signals otherwise. This dramatically extends battery life to up to 6 months with optimal settings for many asset tracking applications.
  • Simple Deployment: Setting up BLE beacons and LoRaWAN gateways is straightforward, getting your positioning system online quickly.
  • Open-Source Software: The project is fully open-source, allowing you to build and customize your own backend server using our GitHub repository.

Use Cases

Use Cases

This solution is ideal for a wide range of zone-based tracking and safety applications:

  • Campus & School Safety

    Provide students and staff with a wearable tracker. The built-in SOS button allows them to instantly send an emergency alert with their last known location from anywhere on campus, providing peace of mind and enabling faster response times.

  • Asset Management

    Track the location of valuable assets, both indoors and outdoors (e.g., vehicles in a parking lot). Configure the tracker to only report when it moves, conserving battery while ensuring you are alerted to unauthorized movement.

  • Automated Check-In & Personnel Management

    By adjusting the signal strength of a BLE beacon, you can create a "check-in" zone for offices or nursing homes. When a person wearing a tracker enters the zone, their presence is automatically logged.

System Architecture

The system operates on a simple yet powerful principle. Mobile trackers listen for signals from fixed beacons and report what they hear to a central server.

System Architecture Diagram

Prerequisites

The main components are:

  1. BLE Beacons: These are small, fixed transmitters placed at known locations (e.g., room entrances, key zones). They continuously broadcast a unique ID.
  2. SenseCAP T1000 Tracker: This is the mobile device attached to the asset or person you want to track. It scans for nearby BLE beacons and identifies the one with the strongest signal.
  3. LoRaWAN Gateway: The tracker sends a data packet containing the ID of the nearest BLE beacon to the gateway via LoRaWAN.
  4. Network & Application Server: The gateway forwards the data to a LoRaWAN Network Server(SenseCraft Data), which then routes it to an application server. The application server holds a map of the beacon IDs and their real-world locations, allowing it to determine the tracker's position (e.g., "Tracker #58 is near Beacon #12, which is in Conference Room 3").

Before you begin, make sure you have the following:

  • A SenseCAP T1000 Tracker
  • One or more BLE beacons
  • A LoRaWAN gateway connected to the internet
  • A server or computer with Docker installed

SenseCAP T1000 Tracker

LoRaWAN® mobile tracker with BLE scanning capabilities

  • BLE Beacon Detection: Supports BLE 5.1 for precise indoor and outdoor positioning.

  • Wide Area Network: LoRaWAN® Class A(v1.0.4) connectivity for long-range, low-power communication.

  • Motion Detection: Built-in accelerometer for real-time motion and stationary status sensing.

  • Emergency Button: Independent SOS button to trigger emergency alerts with one press.

BLE Beacons

Regular Bluetooth Broadcasting

  • Protocol Compatible: Bluetooth® LE 5.0 | Full support for iBeacon and Eddystone formats.

  • Flexible Deployment: Configurable transmission power for adjustable coverage radius.

  • Long-lasting: Up to 2 years of battery life with standard settings.

  • Easy Installation: Comes with adhesive backing for easy mounting on walls or other surfaces.

  • Broadcasting Range: Up to 75 meters outdoors, 120 meters indoors in open areas.

SenseCAP M2 Multi-Platform Gateway

LoRaWAN® Network Infrastructure

  • Wide Coverage: Indoor coverage radius of up to 2 km, ensuring stable signal.

  • Massive Connectivity: Supports over 200 concurrent devices with excellent performance.

  • Multiple Backhauls: Provides multiple network backhaul options including Ethernet, Wi-Fi, and 4G.

  • Integrated Solution: Built-in local LoRaWAN server capabilities to simplify network deployment and management.

Getting Started Guide

Indoor positioning 2d map
  1. Deploy Beacons: Place BLE beacons at strategic locations throughout your facility. Create a map or list documenting the unique ID of each beacon and its physical location (e.g., Beacon_ID_01: "Main Entrance", Beacon_ID_02: "Warehouse Zone A").
  2. Set up the Gateway: Connect your LoRaWAN gateway to the internet and configure it to forward packets to your chosen LoRaWAN Network Server.
  3. Deploy the Application: On your application server, create the logic to map the reported beacon IDs back to the physical locations you documented in Step 3.
  4. Configure the Tracker: Activate the SenseCAP T1000 and onboard it to your LoRaWAN Network Server. Ensure it is configured for BLE scanning mode.
  5. Visualize: As the tracker moves through the facility, it will report the nearest beacon, and your application can display its location on a dashboard or map.

Step 1: Set Up Your Hardware

First, you need to set up the physical devices in your facility.

1a. Deploy Beacons

info

For full technical specifications, please refer to the BC01 Indoor Bluetooth Beacon documentation.

Begin by placing BLE (Bluetooth Low Energy) beacons at strategic locations within your facility—such as the main entrance, warehouse, and office areas.

Indoor positioning 2d map

Refer to the video below for a step-by-step guide on adding your beacon information to the system. You can also check the Tips section for additional help.

Quick view of the parameters of BC01 beacon
ParametersDefault Value
UUIDFDA50693-A4E2-4FB1-AFCF-C6EB07647825
Major10001
Minor19641
Measured power-59dBm
Tx Power-30 - +4dBm, default 0dBm
Adv Interval100ms~10s, default 500ms
Passwordseeed123 (Letters and numbers)
Device NameBC01 (1-7 characters)
Soft Rebootseeed123 (same with the password)

1b. Set Up the Gateway

Power on your LoRaWAN gateway and connect it to the internet.
Next, follow the instructions below according to the network server you are using.

By default, the LoRaWAN gateway forwards data to the SenseCraft Data platform (formerly SenseCAP Portal).

  1. Follow the official user manual to ensure your gateway is online and linked to your account.
  2. Once the connection is verified, you can proceed to next step(Step 2).

Step 2: Install the Positioning Application

Install the SenseCraft Indoor Positioning application on your server using Docker. If you’d like to explore the interface first, you can check out the live demo.

Indoor positioning application preview

Run the Installation Command

Open a terminal on your server and run the following command:

docker run -p 5173:5173 -p 8022:8022 \
--name indoor-positioning \
--restart unless-stopped \
-v $PWD/db:/app/db/ \
-v $PWD/config:/app/server/config/json \
-d seeedcloud/sensecraft-indoor-positioning

💡 Note: Use PowerShell instead of a CMD terminal if you are running the command on Windows.

What this command does:

  • Downloads and starts the SenseCraft Indoor Positioning application container.
  • -p 5173:5173 makes the web dashboard accessible on port 5173.
  • Mounts the local directories:
    • /app/db/ → stores databases and maps.
    • /app/server/config/json → stores configuration files.
  • -d runs the application in the background.

Once the container starts successfully, open your web browser and navigate to:

👉 http://<your_server_ip>:5173

You should now see the SenseCraft Indoor Positioning dashboard running on your server.

Step 3: Configure the Application

app-configuration-management

3a. Runtime Configuration (Connecting to LoRaWAN)

Use this setting to connect the application to your LoRaWAN Network Server and receive tracker data. The application can connect to both SenseCraft Data and Local ChirpStack server at the same time.

app-server-runtime-configuration

Enable one or both MQTT sources in the dashboard:

Connect to SenseCraft Data
  1. Turn on SenseCAP OpenStream MQTT.
  2. Enter your Username and API Key - Get these from the Data OpenStream API Quickstart guide.
Connect to ChirpStack
  1. Turn on ChirpStack MQTT.
  2. Enter the server address and Application ID - The MQTT topic will auto-fill. You can find the Application ID on your ChirpStack application page.
chirpstack-application-id

Note: The {clientID} field is auto-generated; do not edit it.
Important: After any changes, restart the Docker container for updates to take effect.

Other Settings

These options can be changed anytime (no restart required):

  • Authentication – Update dashboard login credentials.
  • Area Positioning – Estimate approximate tracker location when beacon signals are weak or sparse.
  • Tracker Access Control – Limit which devices can be positioned (open to all or by whitelist).
  • Webhook – Push location data to your service via HTTP POST.

3b. Map and Beacon Configuration

Click Create to create your first map.

Application Configuration Management

Upload your map data in this panel. Currently, the demo version only supports importing files in a GeoJSON-like format that contains polyline entities. Below is a sample JSON template for reference:

{
"map": {
"width": 29.53000000000094,
"height": 22.212853765822828,
"entities": [
{
"type": "polyline",
"points": [
[12.894968342021272, 17.07477114091087],
[12.894968342021272, 17.114771140910868]
],
"closed": false
},
{
"type": "polyline",
"points": [
[12.944968342021284, 17.114771140910868],
[12.894968342021272, 17.07477114091087]
],
"closed": false
}
]
},
"beacons": {}
}

This JSON defines a 2D floor layout using coordinate-based polylines, which represent map elements such as walls or boundaries. Other geometry types are not supported in the current demo version.

import-map-geo-json
  1. Add Beacons

In the Beacons section, add each beacon’s MAC address, ID, and location. You can place them directly on the uploaded map using the list you created in Step 1a.

maps-add-beacons
  1. Adjust Environmental Factor (Optional)

Fine-tune location accuracy by adjusting how signal strength (RSSI) is converted into distance.

  • Default value (~2.0) works well for open areas.
  • For complex indoor environments, try values between 1.8 and 4.0.
  • Start with the default setting and adjust later if needed.

Step 4: Activate and Visualize Your Tracker

The final step is to turn on your tracker and see it on the map.

tracker-visualize-on-map
  1. Activate the SenseCAP T1000 Tracker and onboard it to your LoRaWAN Network Server. Ensure your gateway is online and the tracker devices is 'registered' on the LNS server. check Step 1b for details.
  2. Ensure it is set to BLE scanning mode so it can detect the beacons. Check the video below for help.
  3. Visualize: As the tracker moves through your facility, it will detect the nearest beacons and report its location. You will see its icon moving across the map on your dashboard.

Opt for Other Platform, When using ChirpStack.

Retain the default platform settings (SenseCAP for The Things Network), When using SenseCraft Data.

Application Features Overview

Feature 1: Data Pushing (Webhook & WebSocket)

You can get real-time data from the system in two ways:

  • Webhook: As mentioned in the configuration, this pushes data to a URL you provide.
  • WebSocket: For real-time applications, you can connect to the /ws endpoint using Basic HTTP Authentication. The data formats for sos, tracker_update (trilateration), and tracker_location_approximate (proximity) are detailed in the JSON examples provided in the original document.

Data Formats

{
"type": "tracker_sos",
"data": {
"2CF7F1C0530004AD": {
"timestamp": 1756967508000,
"sos": 0
}
}
}

Feature 2: Two Positioning Modes

The system supports two positioning methods:

  1. Trilateration: When the tracker detects three or more beacons, it calculates a precise (x, y) coordinate. This is the default and most accurate mode.
  2. Proximity (Area Positioning): If you enable this and the tracker can only detect one beacon, it will report its position as being "near" that beacon within a calculated radius. This is useful for ensuring coverage in all areas.

Trilateration

TrilaterationTrilateration(SOS)
area-positioning-normal
area-positioning-sos

Area Positioning

Area PositioningArea Positioning(SOS)
area-positioning-normal
area-positioning-sos

Feature 3: Viewing Alert History

You can view the alert history (e.g., SOS button presses) for any tracker by clicking on its icon on the map. The system logs each new alert and will continue to push notifications for an active alert until it is resolved.

alert-history-records

Feature 4: Filter by Beacon UUID

You can filter the displayed trackers on the map by their associated beacon UUIDs. This allows for more focused monitoring of specific areas or assets. it is valued not to be hacked.

sensecraft-ble-filter

Reference & Resource

Tips

Here are some useful tips to help you deploy and configure your beacons more efficiently:

1. Record Beacon Information

It is strongly recommended to record each beacon’s unique MAC address together with its installation location.
This will be crucial during the software configuration step and will help you easily identify and select the correct beacon during mapping or troubleshooting.

MAC AddressLocationBeacon ID
c30000564b31Main Entrance01
c30000564b32Warehouse Zone A02
c30000564b33Corner Office03

2. Use a Consistent UUID for All Beacons

For easier management, you can use the SenseCraft app to assign a consistent UUID to all your beacons.
This ensures that your tracker only listens to your own devices and ignores other nearby beacons.
Check out Feature 4: Filter by Beacon UUID for more details.

3. Choose Stable Mounting Locations

Install beacons in fixed, open, and unobstructed areas to ensure a stable Bluetooth signal.
Avoid placing them near metal surfaces, electrical panels, or Wi-Fi routers that may cause interference.

4. Label and Secure Each Beacon

Attach a visible label (e.g., Beacon-01, Beacon-02) matching the record table to avoid confusion during maintenance.
Ensure the device is firmly mounted to prevent accidental displacement.

5. Verify Signal Range

Before finalizing placement, test the signal coverage using a BLE scanner app or configuration tool to ensure consistent detection in your target zones.

6. Quickly Add or Adjust Beacon Data

If you’re using a GeoJSON-like configuration file, you can also edit the exported map file directly to quickly add or adjust beacon data, and then re-import it into the application.

{
"map": {
"width": 29.53000000000094,
"height": 22.212853765822828,
"entities": [
{
"type": "polyline",
"points": [
[12.894968342021272, 17.07477114091087],
[12.894968342021272, 17.114771140910868]
],
"closed": false
},
{
"type": "polyline",
"points": [
[12.944968342021284, 17.114771140910868],
[12.894968342021272, 17.07477114091087]
],
"closed": false
}
]
},
"beacons": {
"beacon-01": {
"uuid": "FDA50693-A4E2-4FB1-AFCF-C6EB07647825",
"major": 10001,
"minor": 19641,
"x": 26.38,
"y": 4.4,
"txPower": -59,
"displayName": "Corner",
"macAddress": "C3:00:00:58:4B:38",
}
}
}

Tip: Editing the JSON directly is useful when adding multiple beacons at once or fine-tuning their coordinates outside the dashboard.

FAQ

Why is my tracker not reporting its location?
  • Probable Cause: There may be an issue with the LoRaWAN connectivity.
  • Solution: Check the status of your LoRaWAN gateway to ensure it's online and connected. Also, verify that the tracker's Device EUI is correctly registered on your network server.
Why is the tracker's position inaccurate?
  • Probable Cause: The placement of your BLE beacons might be causing interference or weak signal coverage.
  • Solution: Try adjusting the transmission power of the beacons. You may also need to relocate them to reduce signal obstruction from walls or machinery.
Why is the tracker's battery draining so quickly?
  • Probable Cause: The reporting frequency is set too high, causing the device to transmit data more often than necessary.
  • Solution: Optimize the motion detection settings to only report when the tracker is moving. You can also increase the reporting interval (the time between location updates) to conserve power.
Why is location data missing or not showing up?
  • Probable Cause: There could be a problem with the database or API, often related to how the data payload is being interpreted.
  • Solution: First, verify that the payload decoder on your application server is correct and working. If the decoder is correct, check the application server logs for any errors or connectivity issues.
Why are SOS alerts not being received promptly?
  • Probable Cause: The LoRaWAN network may be congested, or the device class isn't suitable for urgent messages.
  • Solution: For time-critical applications like SOS alerts, ensure your tracker is configured to use Class C mode. This keeps the device's receiver on continuously, allowing for immediate reception of messages from the server.
How do I adjust the advertising interval and transmission power of a BC01 beacon?

You can use the SenseCraft app to configure the BC01 beacon.

  1. Install the SenseCraft app from the Google Play Store or Apple App Store.
  2. Open the app and enable Bluetooth on your phone.
  3. Scan for nearby beacons and select the one you wish to configure.
  4. Enter the default password "seeed123" to access the settings.
  5. Adjust the advertising interval (100ms to 10s) and transmission power (-30dBm to +4dBm) to your needs.
  6. Save the changes.

CHANGELOG

2025-11-10:

  • Reworked the beacon deployment and gateway setup guidance to clarify placement best practices, reference materials, and network-server specific instructions for SenseCraft Data and ChirpStack.
  • Expanded the runtime configuration plus map/beacon setup sections with clearer UI guidance, GeoJSON import samples, and optional tuning tips for environmental factors.
  • Added a dedicated Tips section covering beacon record keeping, UUID management, mounting, validation, and bulk editing so deployments are easier to scale and troubleshoot.
Loading Comments...