indoor floor-level tracker with rak wisblock and blues notecard

Track indoor floor levels with RAK WisBlock and Blues Notecard. A LoRaWAN-based IoT solution for precise altitude tracking in indoor environments.

Indoor Floor-Level Tracker with RAK WisBlock and Blues Notecard
Indoor Floor-Level Tracker with RAK WisBlock and Blues Notecard

Tracking people or equipment across multiple floors indoors is challenging, especially when vertical location is more important than exact coordinates. Traditional positioning technologies perform poorly in these environments. 

  • GPS signals are obstructed by walls.

  • WiFi and Ethernet depend on existing building networks.

  • Bluetooth lacks the range needed for building-wide coverage.

A more effective approach is to focus on relative altitude rather than absolute position. By observing air pressure changes from a known reference point, floor-level movement can be detected without relying on fixed indoor infrastructure.

This article explains how to build an indoor floor-level tracking solution using RAK WisBlock and Blues Notecard, designed for multi-story indoor environments and emergency response scenarios.

What This Indoor Floor-Level Tracking Solution Does

This solution determines indoor floor level by measuring relative altitude using the RAK1902 barometric pressure sensor. Pressure changes are calculated from an initial reference point and transmitted wirelessly via LoRaWAN or cellular networks (NB-IoT) to cloud dashboards. The system operates independently of GPS, WiFi, Ethernet, or building-installed infrastructure.

🔑
KEY TAKEAWAYS
  • Indoor floor tracking works reliably by measuring relative altitude instead of relying on GPS or building-installed infrastructure.
  • Barometric sensors require periodic recalibration at known reference points to compensate for weather and HVAC-induced pressure fluctuations.
  • Combining LoRaWAN and cellular connectivity ensures continuous data delivery even when one network is unavailable.
  • Modular WisBlock hardware enables faster deployment compared to designing custom PCBs for indoor tracking solutions.
  • Floor-level awareness is more actionable than precise coordinates for emergency teams operating within multi-story buildings.
  • Power planning directly affects data transmission reliability, especially for cellular modules with high peak current demands.

Accurate dashboards depend on proper payload decoding and consistent data structures across IoT platforms.

Indoor Floor-Level Tracker Solution
Figure 1: Indoor Floor-Level Tracker Solution

Use Case: Indoor Emergency Response Floor-Level Tracking

The purpose of this project is to illustrate a real-world scenario where it can be applied effectively. We will replicate the project developed in the Blues Wireless Accelerator. It develops a solution in which a coordinator must monitor the exact positions of response team members during an emergency.

We will reproduce the project as outlined in its official repository, beginning with the hardware configuration depicted in Figure 4.

System Components and Hardware Requirements

Hardware Components

Required hardware for the Indoor Floor-Level Solution
Figure 2: Required hardware for the Indoor Floor-Level Solution

LoRaWAN Gateway

Cloud and Network Services

Modular Hardware Assembly Using WisBlock

The hardware uses a modular WisBlock approach. The complete firmware is developed and available in the official RAKwireless GitHub repository, and the IoT data visualization platforms are cloud-ready. Additionally, we will replicate the project developed by Blues Wireless, using JSON to access the data.

Connecting the WisBlock elements is straightforward:

  1. Mount the core module in the core slot, and attach the RAK1902 to sensor slot A. In this example, the RAK19001 base board, but you can select another WisBlock base board.

  2. The Blues Notecard can be connected via the WisBlock Blues Carrier Module and then plugged into the baseboard's IO slot.

  3. Lastly, to prepare your product for deployment, you can use the WisBlock enclosure designed for this purpose.

Final project installation view
Figure 3: Final project installation view

Now that the devices are connected, you can begin programming.  

‼️
IMPORTANT

The Notecard requires a peak current of 2 A to send data. The VDD pin of the WisBlock cannot provide this current, so it is recommended to use a battery or connect an additional USB cable to the Notecard during your project testing.

 

Blues Notecard Hardware Assembly and Integration 

After completing the instructions outlined in the hardware configuration and uploading the code provided by Blues on GitHub to the notecard, the final assembly is shown in the image below:

BluesWireless version final result
Figure 4: Blues Wireless version final result

Firmware Development and Configuration

The code can be downloaded from our official GitHub repository. It was developed using Visual Studio Code and PlatformIO, two widely used tools for firmware development. 

In case the libraries are not available on PlatformIO, you can find them from the following sources:

If you need more information about how to configure and code your WisBlock setup with PlatformIO, check the following guide for Setting up WisBlock on PlatformIO

Data Transmission and Cloud Integration

Sending Data to the Cloud

This project supports transmitting sensor data using either LoRaWAN or cellular connectivity via Blues Notecard. Both communication paths ultimately forward data to cloud dashboards for visualization and monitoring.

LoRaWAN Data Transmission via TTN

LoRaWAN communication can be achieved through a public network (such as Helium) or by deploying a private LoRaWAN gateway. In this guide, a private LoRaWAN network is used.

To enable LoRaWAN data transmission, the following are required:

This process is straightforward and can be completed in just a few minutes. For a step-by-step configuration example, refer to the RAK7268V2 gateway documentation.

After the successful configuration and connection of the gateway to the TTN LNS, use the following payload decoder to extract sensor measurements from uplink messages.

TTN Payload Decoding and Field Mapping

This decoder extracts temperature, pressure, altitude, and link metadata from uplink messages sent on port 2.

function Decoder(bytes, port) {
    
    // Basic dictionary that holds all the decoded measurement values
    var decoded = {};
    
    // Working with bytes for decoding of payload
    if (port === 2) {
        
        // Adapt this to the payload byte structure of the messages your device is sending
        var temperature = ((bytes[0] << 16)|(bytes[1] << 8)|(bytes[2]))/100;
        var pressure = ((bytes[3] << 16)|(bytes[4] << 8)|(bytes[5]))/100;
        var altitude= ((bytes[6] << 16)|(bytes[7] << 8)|(bytes[8]))/100;
        
        console.log("received sensor data");
        
        // Working with Location
        decoded.Temperature = temperature;
        
        // Working with battery
        decoded.Pressure = pressure
        
        // Working with Sensor data
        decoded.Altitude = altitude;
        
        // Working with status and booleans
        decoded.leakage_detected = false;
        
        // Working with Configuration Fields
        
        
    } else if (port === 100) {
        
        console.log("received configuration data");
    }    

    // Extract Gateway Metadata and LoRaWAN statistics
    // We are encapsulating this with a Try-Block in case the Gateway does not provide metadata such as RSSI, SNR, etc.
    try {
        decoded.lorawan_rssi = (!!normalizedPayload.gateways && !!normalizedPayload.gateways[0] && normalizedPayload.gateways[0].rssi) || 0;
        decoded.lorawan_snr = (!!normalizedPayload.gateways && !!normalizedPayload.gateways[0] && normalizedPayload.gateways[0].snr) || 0;
        decoded.lorawan_datarate = normalizedPayload.data_rate;           
    } catch (e) {
        console.log("Failed to read gateway metadata");
    }

    // Return data to datacake
    return decoded;

}

 

Cellular Data Transmission via Blues Notehub

Create an account on the Notehub page and start a new project. For step-by-step instructions, refer to the Blues documentation.

Blues Payload Decoding and Data Structure

🗒️
NOTE

This payload decoder is used when the transmitted data is sent via the Blues Wireless hardware.

 

function Decoder(request) {
    
    var data = JSON.parse(request.body);
    var device = data.device;
    
    var file = data.file;
    
    var decoded = {};
    
    if (file === "_track.qo") {
        
        decoded.voltage = data.body.voltage;
        decoded.motion = data.body.motion;
        decoded.seconds = data.body.seconds;
        
    } else if (file === "_session.qo") {
        
        decoded.voltage = data.voltage;

    } else if (file === "data.qo") {
        
        decoded.altitude = data.body.altitude;
        decoded.pressure = data.body.pressure;
        decoded.temperature = data.body.temperature;
    } else if (file === "sensors.qo") {
        
        decoded.temperature = data.body.temp;
        decoded.humidity = data.body.humidity;
    }
    
    if (("tower_lat" in data) && ("tower_lon" in data)) {
        decoded.tower_location = "(" + data.tower_lat + "," + data.tower_lon + ")";
    }
    if (("where_lat" in data) && ("where_lon" in data)) {
        decoded.device_location = "(" + data.where_lat + "," + data.where_lon + ")";
    }
    
    decoded.rssi = data.rssi;
    decoded.bars = data.bars;
    decoded.orientation = data.orientation;
    decoded.card_temperature = data.body.temperature;
    
    // Array where we store the fields that are being sent to Datacake
    var datacakeFields = []
    
    // take each field from decodedElsysFields and convert them to Datacake format
    for (var key in decoded) {
        if (decoded.hasOwnProperty(key)) {           
            datacakeFields.push({field: key.toUpperCase(), value: decoded[key], device: device})
        }
    }      
    
    // forward data to Datacake
    return datacakeFields;
    
}

Cloud Integration and Data Visualization with Datacake

The connection to Datacake will be established by integrating the TTN and Notehub with the platform. You can create two devices in DataCake or configure a single device to receive data from multiple platforms. 

  1. After configuring your device on the Datacake platform, check if the payload fields are being received correctly. If so, start configuring the field with the appropriate name and variable.

Datacake Fields configuration
Figure 5: Datacake Fields configuration

2. If everything has been set up correctly, you should see a data history display similar to the following image: 

Datacake history of data
Figure 6: Datacake history of data

After completing the Notehub and TTN integration using Datacake’s official guides, your dashboard should look similar to Figure 7:

Datacake dashboard result
Figure 7: Datacake dashboard result

You can now send data to DataCake using LoRaWAN or NB-IoT/BLE/Cat-1. 

Why WisBlock Is Suitable for Indoor Floor-Level Tracking

 

Comparison of RAKwireless vs Blues Wireless Indoor Floor-Level monitoring device
Figure 8: Comparison of RAKwireless vs Blues Wireless Indoor Floor-Level monitoring device

Hardware Design and Build Quality

  • Production-Ready: Not just a prototype, this is a finished product ready for real-world use.

  • Modular Design: Easy and fast to set up thanks to WisBlock’s plug-and-play modular architecture.

  • Clean & Professional: Produces a polished, compact final product with minimal assembly.

  • Space-Efficient: Small form factor ideal for installations with limited space.

Firmware and Developer Experience

  • Developer-Friendly Firmware: Compatible with Arduino and PlatformIO; no need for complex IDEs.

Network Flexibility and Integration

  • Multi-Network Communication: Supports LoRaWAN and cellular connectivity (NB-IoT, LTE-M, CAT-1).

  • Quick Integration with Dashboards: Easily connected to IoT platforms; no advanced front-end/backend coding required.

Availability Considerations

  • Stock Notice: Some components used in Blues' reference solution may no longer be available.

Solution Summary and Deployment Considerations

As presented in this tutorial, WisBlock is a modular hardware solution developed by RAKwireless that simplifies the development of industrial-grade IoT applications. 

When paired with Blues Wireless components, it enables rapid deployment without the need for a custom PCB design and offers some good features, such as:

  • Plug-and-Play Hardware: There's no need to design your PCBs. Just stack the modules and go.

  • Industrial Application Ready: Designed for reliable use in professional and commercial environments.

  • Prebuilt Firmware: Core functionality is already developed and ready for deployment, saving time and effort.

  • Developer-Friendly: Works seamlessly with platforms like Arduino and PlatformIO.

FAQs

  1. How does the Indoor Floor-Level Tracker measure floor height without GPS?
    The tracker uses the RAK1902 barometric pressure sensor to calculate relative altitude based on air pressure changes. A known reference altitude is required to translate pressure differences into floor-level positioning indoors.

     

  2. Why is LoRaWAN used instead of WiFi or Bluetooth for this indoor tracking solution?
    WiFi and Ethernet require existing building infrastructure, while Bluetooth has a limited range. LoRaWAN provides long-range, low-power communication that works reliably across multiple indoor floors without local network dependencies.

     

  3. How is sensor data transmitted to cloud platforms in this project?
    Data is sent either via LoRaWAN to The Things Network (TTN) or via cellular connectivity through Blues Notecard. Both paths forward decoded data to Datacake using protocol-specific payload decoders.

     

  4. Why isn't my Notecard transmitting data even though the WisBlock is powered on?
    The Blues Notecard requires a peak current of 2A during transmission, which exceeds what the WisBlock VDD pin can provide. Connect a Li-ion battery to the system or use an additional USB cable directly to the Notecard during testing. Without sufficient power, the Notecard will fail to establish a cellular connection or send data.

     

  5. My TTN gateway shows the device is connected, but I'm not receiving decoded payload data. What's wrong?
    Verify that you've added the payload decoder function to your TTN application and that your device is transmitting on port 2 (for sensor data). Check the TTN console's live data tab to confirm raw bytes are arriving. If raw data appears but decoded fields don't, there may be a syntax error in your decoder function or a mismatch between your payload structure and the decoder logic.

     

  6. What's causing inconsistent or drifting altitude readings from the RAK1902?
    Barometric pressure sensors measure altitude based on air pressure, which fluctuates with weather conditions and HVAC systems. Establish a calibration reference point at a known floor level each time you deploy the system. Temperature changes also affect readings. The RAK1902 includes temperature compensation, but rapid environmental changes can still cause drift. Allow the sensor to stabilize for 2-3 minutes after powering on.

harold-duarte.png

Harold Duarte

Harold is an electronics engineer and senior technical content writer at RAKwireless. He is passionate about learning and developing new solutions for IoT, making it #IoTMadeEasy.

 


Changelog
  • Version 2 - Optimized the guide and added FAQs
    • Reviewer: Karla Jimenez
    • Date Published: 03/13/2026
  • Version 1 - Added Indoor Floor-Level Tracker with RAK WisBlock and Blues Notecard guide
    • Author: Harold Duarte
    • Reviewer: Caryl Enanor
    • Date Published: 12/07/2025

Updated