DEV Community

Cover image for Build An Object Tracking System using PubNub and AWS
PubNub Developer Relations for PubNub

Posted on

Build An Object Tracking System using PubNub and AWS

The Internet of Things (IoT) is rapidly expanding, connecting billions of devices and generating massive amounts of data. This explosion of connected devices presents opportunities to make more intelligent decisions but also comes with many new challenges. One challenge is efficiently collecting, processing, and analyzing data from a vast network of often resource-constrained IoT devices, such as ESP32 microcontrollers with sensors like IR and mmWave. Traditional server-based architectures can be costly and complex to manage, especially when dealing with the scale and real-time requirements of many IoT applications.

This is where a serverless architecture shines, offering scalability, cost-efficiency, and reduced operational overhead. In this post, I’ll dive into building a robust and scalable IoT solution for object tracking using PubNub, AWS SQS, and AWS Lambda. This combination allows me to leverage each service’s strengths to create a truly serverless system capable of handling real-time data from many devices without the need to manage my servers.

The Power of Real-time Data in IoT

Many IoT applications focus on real-time data, enabling independent insights and actions. In my object tracking scenario, real-time data processing allows me to:

  • Track object movement with precision: By processing distance and speed data from sensors in real-time using MQTT, I can accurately track object movement, enabling applications like inventory management, security systems, and even autonomous navigation.

  • Trigger immediate alerts: Real-time processing enables me to identify critical events, such as an object entering a restricted area or exceeding a speed limit, and trigger immediate alerts via SNS or other systems.

  • Enable dynamic adjustments: Real-time feedback loops allow us to adjust system parameters dynamically based on current conditions. For example, real-time data can adjust traffic light timings to optimize traffic flow in a smart traffic management system. In my project, it will build a tracking system to manage the movement of devices.

Why PubNub for IoT Data Ingestion?

PubNub is a real-time data streaming network specifically designed for large-scale IoT applications. Here’s why it’s an excellent choice for my object-tracking system:

  1. Massive Scalability and High Availability: PubNub’s globally distributed infrastructure can handle millions of devices and messages per second, ensuring my system scales as my needs grow.

  2. Ultra-Low Latency: PubNub’s global presence ensures data is delivered with minimal latency, which is crucial for accurate object tracking.

  3. Bi-Directional Communication: PubNub supports MQTT , pub/sub, and request/reply messaging patterns for seamless bi-directional communication.

  4. Secure Data Transmission: Security features include token authentication and encryption for safe data transport.

  5. Ease of Integration: PubNub provides JavaScript SDKs for ESP32 and other platforms, simplifying device integration.

Deep Dive into PubNub Events and Actions

PubNub Events and Actions allow me to trigger serverless functions in response to events on the PubNub network, eliminating the need for backend infrastructure.

  • Events: Events are triggered by specific conditions within the PubNub network. In my case, I'll configure an event to trigger when a message is published on a channel matching a specific pattern (e.g., device.*). This allows me to capture data from all our ESP32 devices publishing on channels like device.1, device.2, etc. This pattern-matching capability provides flexibility and scalability as you add more devices to my system.

  • Actions: Actions define what happens when an event is triggered. In my case, an action sends the message payload (JSON format) to AWS SQS for processing.

Leveraging AWS SQS for Reliable Message Queuing

AWS SQS (Simple Queue Service) is a fully managed message queuing service that provides a reliable and scalable way to decouple and buffer messages between different components of your application. In my architecture, SQS plays a crucial role in ensuring reliable data processing:

  • Message Durability: SQS stores messages redundantly across multiple availability zones, ensuring that messages are not lost even during hardware failures.

  • Buffering: SQS acts as a buffer between PubNub and AWS Lambda, allowing the system to handle data bursts and ensuring that messages are processed even if the Lambda function is temporarily unavailable.

  • Scalability: SQS can handle a virtually unlimited number of messages, making it ideal for my potential high-volume IoT application.

AWS Lambda: Serverless Compute for Data Processing

AWS Lambda is a serverless computing service that lets me run code without provisioning or managing servers. It's a perfect fit for processing data from my AWS SQS queue:

  • Automatic Scaling: Lambda automatically scales my function in response to incoming requests, ensuring that my data is processed quickly and efficiently, even during peak loads.

  • Cost-Efficiency: I only pay for the compute time used by my Lambda function, making it a cost-effective solution for processing data from a potentially large number of devices.

  • Ease of Use: Lambda integrates seamlessly with other AWS services, including SQS, making it easy to set up and manage.

Detailed Setup and Configuration

  1. Configure PubNub Event

  2. Navigate to the "Events and Actions" section in the PubNub Admin Portal.

  3. Create a new Event.

  4. Select "Message" as the event type and "Channel name matches regex pattern" as the trigger condition.

  5. Enter the regex pattern for the channels I want to listen to (e.g., device.*). This will capture messages from all devices publishing on channels matching this pattern.

  6. Configure PubNub Action:

-   Create a new Action.

-   Select "AWS SQS" as the action type.

-   Provide the URL of your AWS SQS queue.

-   In your AWS account, create an IAM role with the AmazonSQSFullAccess policy attached. This role will grant PubNub the necessary permissions to send messages to your SQS queue.

-   Provide the ARN of this IAM role in the PubNub Action configuration.
Enter fullscreen mode Exit fullscreen mode
  1. Set up AWS SQS:
-   In the AWS Management Console, navigate to the SQS service.

-   Create a new SQS queue.

-   Configure an access policy for the queue to allow the PubNub IAM role to send messages to it. 
Enter fullscreen mode Exit fullscreen mode
  1. Configure SQS to trigger Lambda:
-   In the SQS queue configuration, navigate to the "Access Policy" tab.

-   Add a trigger to invoke your Lambda function whenever a message is received in the queue.
Enter fullscreen mode Exit fullscreen mode
  1. Implement AWS Lambda Function:
-   In the AWS Lambda console, create a new Lambda function.

  • Choose my preferred runtime (e.g., Python, Node.js).

  • Write the code to process the data received from the SQS queue. This code will depend on my specific application requirements. But some things that may or will be done:

    • Parse the sensor data from the message payload.
    • Calculate the object's speed and direction.
    • Store the data in a database/cache (e.g., Amazon DynamoDB or ElastiCache).
    • Trigger alerts or other actions based on the data.
Enter fullscreen mode Exit fullscreen mode

Implementing Device Logic

While this article focuses on the serverless infrastructure, it's important to understand how the ESP32 devices interact with the system. Each device will:

  1. Collect sensor data: Use the IR and mmWave sensors to collect data about the object's distance and potentially other relevant information.

  2. Publish data to PubNub: Use the PubNub SDK to publish the sensor data to a unique channel, following the defined naming convention (e.g., device.1). The message payload should include relevant information like device ID, timestamp, and sensor readings.

  3. Subscribe to a channel: I can utilize the bi-directional communication to leverage the ability to make changes without needing to reflash the device, the device can subscribe to its own channel or a dedicated control channel to receive commands or updates from the cloud.

By keeping the device logic simple and focused on data acquisition and publishing, we ensure efficient resource utilization on the resource-constrained ESP32 devices.

Benefits of this Serverless Architecture

  • Cost-Efficiency: By leveraging serverless services, I avoid the costs associated with provisioning, managing, and maintaining servers. I only pay for the resources I will consume.

  • Scalability: The architecture automatically scales to handle fluctuations in data volume and processing requirements. As I add more devices or experience increased data traffic, the system scales seamlessly without manual intervention.

  • Reduced Development Time: PubNub Events and Actions simplify the integration with AWS services, allowing me to focus on developing my core application logic instead of managing infrastructure.

  • Increased Agility: I can easily modify and update my data processing logic by updating the Lambda function without requiring any changes to the devices themselves. This allows for rapid iteration and deployment of new features.

  • Enhanced Reliability: AWS SQS ensures reliable message delivery and buffers messages during peak loads, while PubNub's high availability guarantees data delivery even in the face of network disruptions. SQS and CloudWatch logs enhance system robustness.

Real-world Applications

This serverless architecture, with its ability to handle real-time data from a large number of devices, has applications across various industries:

  • Industrial Automation: Monitor equipment performance, track assets in real-time, and optimize production processes.

  • Smart Agriculture: Collect data from sensors monitoring soil conditions, crop health, and environmental factors to optimize irrigation and fertilization.

  • Smart Homes and Buildings: Monitor energy consumption, control lighting and appliances, and enhance security systems.

  • Healthcare: Track patient vital signs, monitor medical equipment, and enable remote patient monitoring.

By combining the power of PubNub and AWS Cloud, specifically AWS SQS, AWS IoT and AWS Lambda, I can create a truly serverless and scalable IoT solution capable of handling the demands of real-time data processing. This approach saves me time and money and provides the flexibility and agility to adapt to the many different Internet of Things applications I will use with my accurate near-distance real-time tracking system.

How can PubNub help you?

This article was originally published on PubNub.com

Our platform helps developers build, deliver, and manage real-time interactivity for web apps, mobile apps, and IoT devices.

The foundation of our platform is the industry's largest and most scalable real-time edge messaging network. With over 15 points-of-presence worldwide supporting 800 million monthly active users, and 99.999% reliability, you'll never have to worry about outages, concurrency limits, or any latency issues caused by traffic spikes.

Experience PubNub

Check out Live Tour to understand the essential concepts behind every PubNub-powered app in less than 5 minutes

Get Setup

Sign up for a PubNub account for immediate access to PubNub keys for free

Get Started

The PubNub docs will get you up and running, regardless of your use case or SDK

Top comments (0)