<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Smrati</title>
    <description>The latest articles on DEV Community by Smrati (@smrati_verma).</description>
    <link>https://dev.to/smrati_verma</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3896217%2F617a46f9-c536-46ee-a5ec-a77babd4ef8d.png</url>
      <title>DEV Community: Smrati</title>
      <link>https://dev.to/smrati_verma</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/smrati_verma"/>
    <language>en</language>
    <item>
      <title>Storing IoT time-series data: InfluxDB vs TimescaleDB for asset tracking</title>
      <dc:creator>Smrati</dc:creator>
      <pubDate>Fri, 08 May 2026 11:21:35 +0000</pubDate>
      <link>https://dev.to/smrati_verma/storing-iot-time-series-data-influxdb-vs-timescaledb-for-asset-tracking-p3d</link>
      <guid>https://dev.to/smrati_verma/storing-iot-time-series-data-influxdb-vs-timescaledb-for-asset-tracking-p3d</guid>
      <description>&lt;p&gt;Millions of data points per day in your asset tracking solution? Location logs, sensor readings, status messages – all generate millions. The way you store your data influences dashboard performance, querying capabilities, and even your infrastructure bill. Check out which of the two below can help you make the right choice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Two options&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  InfluxDB
&lt;/h2&gt;

&lt;p&gt;Custom-built time-series database&lt;br&gt;
A completely new database optimized to handle time-series workloads. Own query language, own storage engine, own everything – specifically tailored to writing a lot of data.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Built from scratch&lt;/li&gt;
&lt;li&gt;Query language – Flux&lt;/li&gt;
&lt;li&gt;TSM engine&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  TimescaleDB
&lt;/h2&gt;

&lt;p&gt;PostgreSQL time-series extension&lt;br&gt;
A PostgreSQL database extension with hypertables and built-in time-series optimization features. SQL support – all your joins, foreign keys and other advanced SQL stuff.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PostgreSQL based&lt;/li&gt;
&lt;li&gt;SQL support&lt;/li&gt;
&lt;li&gt;Hypertables&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Asset location data writing — InfluxDB&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;InfluxDB utilizes the line protocol for its writing operations — small, quick, and built to handle a massive number of devices all streaming at once:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Writing to InfluxDB v2 using the JS client&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;InfluxDB&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Point&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@influxdata/influxdb-client&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;InfluxDB&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;http://localhost:8086&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;token&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;INFLUX_TOKEN&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;writeApi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getWriteApi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;myorg&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;asset-tracking&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;// Write a location + sensor reading point&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;point&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Point&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;asset_location&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;asset_id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;truck-01&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;fleet&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;north-region&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;floatField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;lat&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;43.6532&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;floatField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;lng&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;79.3832&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;floatField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;speed_kmh&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;62.4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;floatField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;temp_c&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4.2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

&lt;span class="nx"&gt;writeApi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writePoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;point&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;writeApi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;flush&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Asset location data writing — TimescaleDB&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;TimescaleDB makes use of traditional SQL insert statements on a hypertable — familiar territory for any PostgreSQL developer. The partitioning and compression are handled seamlessly behind the scenes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Create hypertable (run once)&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;asset_locations&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nb"&gt;time&lt;/span&gt;       &lt;span class="n"&gt;TIMESTAMPTZ&lt;/span&gt;      &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;asset_id&lt;/span&gt;   &lt;span class="nb"&gt;TEXT&lt;/span&gt;            &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;lat&lt;/span&gt;        &lt;span class="nb"&gt;DOUBLE&lt;/span&gt; &lt;span class="nb"&gt;PRECISION&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;lng&lt;/span&gt;        &lt;span class="nb"&gt;DOUBLE&lt;/span&gt; &lt;span class="nb"&gt;PRECISION&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;speed_kmh&lt;/span&gt;  &lt;span class="nb"&gt;DOUBLE&lt;/span&gt; &lt;span class="nb"&gt;PRECISION&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;temp_c&lt;/span&gt;     &lt;span class="nb"&gt;DOUBLE&lt;/span&gt; &lt;span class="nb"&gt;PRECISION&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;create_hypertable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'asset_locations'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'time'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;-- Insert a reading (standard SQL)&lt;/span&gt;
&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;asset_locations&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;time&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;asset_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lng&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;speed_kmh&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;temp_c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;VALUES&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NOW&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="s1"&gt;'truck-01'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;43&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;6532&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;79&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;3832&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;62&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Querying — that's where the rubber meets the road&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Both databases excel at querying a range of times but differ when trying to relate the asset data with your business environment. Here is the same query — "average speed by asset for the past 24 hours" — in both:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// InfluxDB — Flux query
from(bucket: "asset-tracking")
  |&amp;gt; range(start: -24h)
  |&amp;gt; filter(fn: (r) =&amp;gt; r._measurement == "asset_location")
  |&amp;gt; filter(fn: (r) =&amp;gt; r._field == "speed_kmh")
  |&amp;gt; group(columns: ["asset_id"])
  |&amp;gt; mean()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- TimescaleDB — standard SQL&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt;
  &lt;span class="n"&gt;asset_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="k"&gt;AVG&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;speed_kmh&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;avg_speed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;time_bucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'1 hour'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;time&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;bucket&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;asset_locations&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="nb"&gt;time&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;NOW&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;INTERVAL&lt;/span&gt; &lt;span class="s1"&gt;'24 hours'&lt;/span&gt;
&lt;span class="k"&gt;GROUP&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;asset_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bucket&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;bucket&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Head-to-head comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Criteria&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;InfluxDB&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;TimescaleDB&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Write throughput&lt;/td&gt;
&lt;td&gt;Extremely high (&lt;em&gt;better&lt;/em&gt;)&lt;/td&gt;
&lt;td&gt;High (with tuning)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Query language&lt;/td&gt;
&lt;td&gt;Flux (learning curve)&lt;/td&gt;
&lt;td&gt;Full SQL (&lt;em&gt;better&lt;/em&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Relational joins&lt;/td&gt;
&lt;td&gt;Not supported&lt;/td&gt;
&lt;td&gt;Full JOIN support (&lt;em&gt;better&lt;/em&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compression&lt;/td&gt;
&lt;td&gt;Automatic (TSM) (&lt;em&gt;better&lt;/em&gt;)&lt;/td&gt;
&lt;td&gt;Manual policy setup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Retention policies&lt;/td&gt;
&lt;td&gt;Built-in, simple (&lt;em&gt;better&lt;/em&gt;)&lt;/td&gt;
&lt;td&gt;Via PostgreSQL jobs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ecosystem / tooling&lt;/td&gt;
&lt;td&gt;Grafana native&lt;/td&gt;
&lt;td&gt;Full PostgreSQL ecosystem (&lt;em&gt;better&lt;/em&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Existing PostgreSQL stack&lt;/td&gt;
&lt;td&gt;Separate system&lt;/td&gt;
&lt;td&gt;Drop-in extension (&lt;em&gt;better&lt;/em&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operational complexity&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Low (if you know Postgres) (&lt;em&gt;better&lt;/em&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Tip on compression for TimescaleDB:&lt;/strong&gt; &lt;br&gt;
Activate column-level compression for chunks older than 7 days – IoT data compresses by 90-95% using the default compression policy in TimescaleDB. A 100GB raw database is typically reduced to less than 8GB. Configure it once and forget about it: SELECT add_compression_policy('asset_locations', INTERVAL '7 days');&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Asset tracking-specific requirement – joining&lt;/strong&gt;&lt;br&gt;
This is where TimescaleDB shines over almost any other asset tracking solution. Your time-series data is not an island and needs to be joined with other asset data, such as metadata, asset fleet membership, geofencing details, and maintenance history. This is a single SQL command in TimescaleDB:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Join location data with asset metadata — trivial in TimescaleDB&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt;
  &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;asset_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vehicle_type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;assigned_driver&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="k"&gt;AVG&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;speed_kmh&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;avg_speed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="k"&gt;MAX&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;temp_c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;max_temp&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;asset_locations&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;
&lt;span class="k"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;assets&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;asset_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;asset_id&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;time&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;NOW&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;INTERVAL&lt;/span&gt; &lt;span class="s1"&gt;'1 hour'&lt;/span&gt;
  &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fleet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'north-region'&lt;/span&gt;
&lt;span class="k"&gt;GROUP&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;asset_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vehicle_type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;assigned_driver&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;However, InfluxDB requires two separate systems to pull data from and join the results at the application level. Works, but not as efficiently as TimescaleDB.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quick decisions chart&lt;/strong&gt;&lt;br&gt;
IoT ingest only, highest write speeds → &lt;strong&gt;InfluxDB&lt;/strong&gt;&lt;br&gt;
Grafana, basic time range queries → &lt;strong&gt;InfluxDB&lt;/strong&gt;&lt;br&gt;
PostgreSQL already up and running → &lt;strong&gt;TimescaleDB&lt;/strong&gt;&lt;br&gt;
Joining assets to metadata, maintenance, users → &lt;strong&gt;TimescaleDB&lt;/strong&gt;&lt;br&gt;
Complex analytics, reports, SQL knowledge → &lt;strong&gt;TimescaleDB&lt;/strong&gt;&lt;br&gt;
Large scale, metrics-only ingestion without relations → &lt;strong&gt;InfluxDB&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most asset tracking applications need to combine location information with other types of data like asset metadata, geofencing conditions, and maintenance records. For such use cases, TimescaleDB should be used. Pure telemetry ingestion pipelines, without any need for relational features, will find InfluxDB more suitable because of its throughput.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AssetTrackPro's platform has built-in support for time series ingestion, storage, and querying at scale, so you won't have to build your own database layer from the ground up. &lt;a href="https://assettrackpro.com/" rel="noopener noreferrer"&gt;Check out our platform →&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Are you developing an IoT data pipeline? Then let us do the work for you – we provide a scalable asset telemetry backend so that you can focus on your core functionality.&lt;br&gt;
Explore &lt;a href="https://assettrackpro.com/" rel="noopener noreferrer"&gt;AssetTrackPro &lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>iot</category>
      <category>database</category>
      <category>influxdb</category>
      <category>backend</category>
    </item>
    <item>
      <title>IoT protocols for asset tracking: MQTT vs HTTP vs CoAP — what to use when</title>
      <dc:creator>Smrati</dc:creator>
      <pubDate>Thu, 07 May 2026 14:22:09 +0000</pubDate>
      <link>https://dev.to/smrati_verma/iot-protocols-for-asset-tracking-mqtt-vs-http-vs-coap-what-to-use-when-496g</link>
      <guid>https://dev.to/smrati_verma/iot-protocols-for-asset-tracking-mqtt-vs-http-vs-coap-what-to-use-when-496g</guid>
      <description>&lt;p&gt;Choosing an unsuitable protocol in an asset tracking stack does not lead to immediate failure but to massive failures. There will be higher latencies, shorter than expected battery life, and even the message broker might be unable to handle thousands of concurrent connections. &lt;br&gt;
The following is the right choice criterion.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Overview of three protocols&lt;/strong&gt;
&lt;/h2&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;MQTT&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Message Queuing Telemetry Transport&lt;/strong&gt;&lt;br&gt;
Pub/sub over TCP. Designed for unreliable networks and constrained devices. There is a broker that mediates communication between publisher and subscriber; peer-to-peer communication is never used.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pub/Sub properties&lt;/li&gt;
&lt;li&gt;Based on TCP&lt;/li&gt;
&lt;li&gt;Persistent connections&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;HTTP&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Hypertext Transfer Protocol&lt;/strong&gt;&lt;br&gt;
Client-server request/response mechanism over TCP. In HTTP, each device establishes a connection, sends the data, waits for a response and closes the connection. High level of compatibility allows communication to happen everywhere.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Req/Response features&lt;/li&gt;
&lt;li&gt;Stateless&lt;/li&gt;
&lt;li&gt;Universal application&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;CoAP&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Constrained Application Protocol&lt;/strong&gt;&lt;br&gt;
HTTP semantics over UDP. Created especially for IoT constrained devices with low latency, multicast abilities, and an observe option for asynchronous delivery of messages.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;UDP based&lt;/li&gt;
&lt;li&gt;Lightweight&lt;/li&gt;
&lt;li&gt;Multicast&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;MQTT vs HTTP vs CoAP&lt;/strong&gt;
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criteria&lt;/th&gt;
&lt;th&gt;MQTT&lt;/th&gt;
&lt;th&gt;HTTP&lt;/th&gt;
&lt;th&gt;CoAP&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Transport&lt;/td&gt;
&lt;td&gt;TCP&lt;/td&gt;
&lt;td&gt;TCP&lt;/td&gt;
&lt;td&gt;UDP &lt;em&gt;(lightest)&lt;/em&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overhead&lt;/td&gt;
&lt;td&gt;2 byte header &lt;em&gt;(wins)&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;~800 byte headers&lt;/td&gt;
&lt;td&gt;4 byte header&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Connection&lt;/td&gt;
&lt;td&gt;Persistent &lt;em&gt;(wins)&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;Per-request&lt;/td&gt;
&lt;td&gt;Connectionless&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Battery impact&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Lowest &lt;em&gt;(wins)&lt;/em&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reliability&lt;/td&gt;
&lt;td&gt;QoS 0/1/2 &lt;em&gt;(wins)&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;TCP guaranteed&lt;/td&gt;
&lt;td&gt;Optional ACK&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scalability&lt;/td&gt;
&lt;td&gt;High (broker fans out) &lt;em&gt;(wins)&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;High (multicast)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ecosystem&lt;/td&gt;
&lt;td&gt;Strong IoT support&lt;/td&gt;
&lt;td&gt;Universal &lt;em&gt;(wins)&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;Niche IoT only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Firewall-friendly&lt;/td&gt;
&lt;td&gt;Port 1883/8883&lt;/td&gt;
&lt;td&gt;Port 80/443 &lt;em&gt;(wins)&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;Port 5683 (UDP)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  MQTT
&lt;/h2&gt;

&lt;p&gt;: location update publication&lt;br&gt;
The use of an ongoing connection means that the handshaking process per each message is no longer relevant, which makes it very effective in cases when thousands of tags report their location every few seconds.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mqtt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mqtt&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;mqtt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mqtts://broker.assettrackpro.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;clientId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;asset-tag-7821&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;username&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;device&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MQTT_TOKEN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;clean&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;                 &lt;span class="c1"&gt;// persist session across reconnects&lt;/span&gt;
  &lt;span class="na"&gt;reconnectPeriod&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="c1"&gt;// Publish with QoS 1 — at least once delivery&lt;/span&gt;
&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;publish&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;assets/7821/location&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;43.65&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lng&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;79.38&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;ts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;qos&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;retain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  HTTP
&lt;/h2&gt;

&lt;p&gt;: simplicity beats efficiency&lt;br&gt;
If the update interval is quite long (every five minutes or even longer), if the backend system is built on REST architecture, or if the updates have to go through firewalls which do not allow access to nonstandard ports, then HTTP may be preferred. While the overhead is significant, it becomes reasonable in low update frequency cases.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Simple HTTP POST — works everywhere, no broker needed&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.assettrackpro.com/v1/location&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Authorization&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;TOKEN&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;assetId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;7821&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;43.65&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lng&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;79.38&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;ts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;toISOString&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  CoAP
&lt;/h2&gt;

&lt;p&gt;: when low power consumption comes first&lt;br&gt;
CoAP, being based on UDP, does not require connection setup and skips roundtrips inherent to TCP connections. In case the tag consumes energy from a battery designed to function for decades with one charge and updates location every fifteen minutes, then the number of transmitted bytes could make a difference in terms of extended functionality. The next code sample shows an example of CoAP POST with node-coap module.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;coap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;coap&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;coap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;request&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;hostname&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;coap.assettrackpro.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;pathname&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/location&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;confirmable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;      &lt;span class="c1"&gt;// CON message — expects ACK&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;7821&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;43.65&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lng&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;79.38&lt;/span&gt;
&lt;span class="p"&gt;}))&lt;/span&gt;

&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;response&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;code&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;end&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;QoS recommendations for MQTT messages&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;QoS level 0 works well for high frequency location pings if some data loss is acceptable (position updates every five seconds with acceptable loss of one message).&lt;/li&gt;
&lt;li&gt;QoS 1 can be used to send alerts, breach messages, and other events for which the delivery of every message is crucial.&lt;/li&gt;
&lt;li&gt;QoS 2 (Exactly Once) will rarely be necessary for asset tracking purposes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Protocol to be Selected for a Particular Situation: An Empirical Decision Approach&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The following decision model highlights how different communication protocols can be assigned to certain applications. According to empirical observations, the following protocol assignments take place:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Large amounts of data to be updated within thousands of devices: &lt;strong&gt;MQTT&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Real-time dashboard applications and alerts: &lt;strong&gt;MQTT&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Limited pinging through firewall: &lt;strong&gt;HTTP&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Back-end API integration and fast interoperability: &lt;strong&gt;HTTP&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Extremely low power consumption with decades-long battery lifespans: &lt;strong&gt;CoAP&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Restricted environments with low RAM in microcontrollers: &lt;strong&gt;CoAP&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For practical asset tracking stacks, usually, MQTT is used for devices' communications, whereas HTTP interfaces are created for integrations with other services and systems. As far as CoAP is concerned, it still plays a rather specialized role and proves extremely useful when focusing on the maximum possible battery lifespan in the case of LoRaWAN or NB-IoT.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Empirical evidence suggests that AssetTrackPro allows devices to send their data through MQTT, HTTP, and CoAP.&lt;br&gt;
Learn More about &lt;a href="https://assettrackpro.com/" rel="noopener noreferrer"&gt;AssetTrackPro↗&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>iot</category>
      <category>mqtt</category>
      <category>backend</category>
      <category>networking</category>
    </item>
    <item>
      <title>NB-IoT vs LoRaWAN for industrial asset tracking: a technical breakdown</title>
      <dc:creator>Smrati</dc:creator>
      <pubDate>Wed, 06 May 2026 17:56:55 +0000</pubDate>
      <link>https://dev.to/smrati_verma/nb-iot-vs-lorawan-for-industrial-asset-tracking-a-technical-breakdown-14me</link>
      <guid>https://dev.to/smrati_verma/nb-iot-vs-lorawan-for-industrial-asset-tracking-a-technical-breakdown-14me</guid>
      <description>&lt;p&gt;NB-IoT and LoRaWAN networks have been built for the deployment of IoT applications requiring low power consumption and wide coverage area. While on the face of it both technologies address the same need, opting for the wrong technology for your use case can result in insufficient coverage, high power consumption, and unexpected costs.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;NB-IoT&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Narrowband IoT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cellular technology standard (3GPP) operating in licensed spectrum, using the same infrastructure as your current 4G or 5G connection. Deployed by carriers such as Verizon, AT&amp;amp;T, Vodafone. You will be charged per unit per month.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Licensed spectrum&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Managed by carriers&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;LoRaWAN&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Long Range Wide Area Network&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Protocol operating in unlicensed ISM bands (868MHz EU, 915MHz US). You can set up your own gateways or rely on a shared network such as The Things Network. No carrier charges per device.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unlicensed spectrum&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deploy independently&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Direct head-to-head technical comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criteria&lt;/th&gt;
&lt;th&gt;NB-IoT&lt;/th&gt;
&lt;th&gt;LoRaWAN&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Coverage&lt;/td&gt;
&lt;td&gt;Carrier network (roaming across the globe) &lt;em&gt;(better)&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;Self-deployed or community network&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Downlink support&lt;/td&gt;
&lt;td&gt;Bidirectional capability &lt;em&gt;(better)&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;Class A/B/C restrictions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data throughput&lt;/td&gt;
&lt;td&gt;~200kbps &lt;em&gt;(better)&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;0.3 to 50kbps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Latency&lt;/td&gt;
&lt;td&gt;Time of 1 to 10 seconds &lt;em&gt;(better)&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;Time of 2 to 30+ seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Battery lifetime&lt;/td&gt;
&lt;td&gt;2 to 5 years&lt;/td&gt;
&lt;td&gt;5 to 10+ years &lt;em&gt;(better)&lt;/em&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost of the network&lt;/td&gt;
&lt;td&gt;Pay per device per SIM card&lt;/td&gt;
&lt;td&gt;Gateway capex only &lt;em&gt;(better)&lt;/em&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Indoor penetration&lt;/td&gt;
&lt;td&gt;Good&lt;/td&gt;
&lt;td&gt;Excellent &lt;em&gt;(better)&lt;/em&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deployment control&lt;/td&gt;
&lt;td&gt;Carrier-dependent&lt;/td&gt;
&lt;td&gt;Full control &lt;em&gt;(better)&lt;/em&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;LoRaWAN uplink payload structure&lt;/strong&gt;&lt;br&gt;
LoRaWAN uplinks are purposely small, usually less than 51 bytes per uplink. An example of an asset tracking payload that fits in this limit is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Encode asset tracking data into minimal bytes&lt;/span&gt;
&lt;span class="c1"&gt;// lat/lng as int32 (÷1e6), temp as int16 (÷100), battery as uint8&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;encodePayload&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lng&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;tempC&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;batteryPct&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;buf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;alloc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="nx"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeInt32BE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lat&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="nx"&gt;e6&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;// 4 bytes&lt;/span&gt;
  &lt;span class="nx"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeInt32BE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lng&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="nx"&gt;e6&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;// 4 bytes&lt;/span&gt;
  &lt;span class="nx"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeInt16BE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tempC&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// 2 bytes&lt;/span&gt;
  &lt;span class="nx"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeUInt8&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;batteryPct&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;            &lt;span class="c1"&gt;// 1 byte&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;buf&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Total: 11 bytes — well under LoRaWAN's 51-byte SF7 limit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Registration of NB-IoT devices with AT commands&lt;/strong&gt;&lt;br&gt;
The following command set can be used on NB-IoT modules for device attachment and sending an uplink:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cisco_ios"&gt;&lt;code&gt;&lt;span class="k"&gt;//&lt;/span&gt; Attach to NB-IoT network and send a UDP packet
&lt;span class="k"&gt;AT+CFUN=1&lt;/span&gt;                   // full functionality mode
&lt;span class="k"&gt;AT+CEREG=1&lt;/span&gt;                  // enable network registration URC
&lt;span class="k"&gt;AT+CGDCONT=1,"IP","nbiot.apn"&lt;/span&gt; // set APN
&lt;span class="k"&gt;AT+CGACT=1,1&lt;/span&gt;               // activate PDP context

&lt;span class="k"&gt;//&lt;/span&gt; Open UDP socket and send payload
&lt;span class="k"&gt;AT+CSOC=1,2,1&lt;/span&gt;               // create UDP socket
&lt;span class="k"&gt;AT+CSOCON=0,"your-server.io",5683&lt;/span&gt;
&lt;span class="k"&gt;AT+CSOSEND=0,0,"AABBCCDD..."&lt;/span&gt;  // send hex payload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Which to choose and when&lt;/strong&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  NB-IoT
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Fleet management&lt;/strong&gt;&lt;br&gt;
Cross-border assets requiring carrier roaming service&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frequent data transmission&lt;/strong&gt;&lt;br&gt;
Assets communicating every few minutes with two-way commands&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Field asset tracking&lt;/strong&gt;&lt;br&gt;
Oil &amp;amp; gas and utility sectors with carrier network and no infrastructure requirements&lt;/p&gt;

&lt;h2&gt;
  
  
  LoRaWAN
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Campus/Building&lt;/strong&gt;&lt;br&gt;
Static location, full control, no recurring carrier charges&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;10-year battery assets&lt;/strong&gt;&lt;br&gt;
Assets that infrequently move requiring decades of deployments&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;High density sensors&lt;/strong&gt;&lt;br&gt;
1,000+ sensors where SIM cards per device are unaffordable&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Dual radio hybrid tip: *&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;For assets that are mostly static on the campus but need transport from time to time, use a dual radio tag – LoRaWAN while inside (cheap, long battery) and NB-IoT once it exits the geofence (carrier network automatically activates).&lt;/p&gt;

&lt;h2&gt;
  
  
  The economics of scale
&lt;/h2&gt;

&lt;p&gt;For small-scale deployments, the $2 per month SIM card cost for NB-IoT is not a factor. For 5,000 assets, the annual connectivity cost alone is $120,000. A LoRaWAN solution with 10 gateways could cost $15,000 initially and virtually nothing annually. The point of convergence, at which LoRaWAN becomes economically superior, is about 500 to 1,000 devices per site.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to make a decision&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;Moving assets over large geographical areas? Use NB-IoT.&lt;br&gt;
Need two-way communication and OTA updates? Use NB-IoT.&lt;br&gt;
Fixed site, more than 500 assets, budget considerations? Use LoRaWAN.&lt;br&gt;
Require 10 years of battery life? Use LoRaWAN.&lt;br&gt;
Devices that perform both functions? Hybrid tag radio&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Both technologies are commercially available. &lt;a href="https://assettrackpro.com/" rel="noopener noreferrer"&gt;AssetTrackPro &lt;/a&gt;provides NB-IoT and LoRaWAN asset tracking solutions for industrial applications, including hybrid tags for mixed environments.&lt;br&gt;
Find out more about &lt;a href="https://assettrackpro.com/" rel="noopener noreferrer"&gt;AssetTrackPro &lt;/a&gt;↗&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>iot</category>
      <category>lorawan</category>
      <category>nbiot</category>
      <category>hardware</category>
    </item>
    <item>
      <title>Cold chain monitoring: how multi-sensor IoT devices protect high-value assets</title>
      <dc:creator>Smrati</dc:creator>
      <pubDate>Tue, 05 May 2026 16:56:00 +0000</pubDate>
      <link>https://dev.to/smrati_verma/cold-chain-monitoring-how-multi-sensor-iot-devices-protect-high-value-assets-59b2</link>
      <guid>https://dev.to/smrati_verma/cold-chain-monitoring-how-multi-sensor-iot-devices-protect-high-value-assets-59b2</guid>
      <description>&lt;p&gt;Temperature alone isn’t enough. Your vaccine cargo could have stayed in range all the way to the destination, yet be compromised due to lack of monitoring of parameters such as humidity, shock or light. Here’s how IoT tracking devices help ensure end-to-end control by covering all bases.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why single parameter monitoring is inadequate
&lt;/h2&gt;

&lt;p&gt;Single parameter loggers typically monitor temperature only. This may be sufficient for simple food shipments. But in case of biologics, mRNA vaccines, blood products and precise pharmaceuticals, more than one condition affects integrity.&lt;/p&gt;

&lt;p&gt;Even when your blood bag is kept at proper temperature levels, it can still be compromised due to shock from being constantly moved around. Even when you keep your insulin vial chilled but it is exposed to sunlight in a warehouse, it becomes ineffective.&lt;/p&gt;

&lt;h2&gt;
  
  
  The five sensors that matter
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Temperature&lt;/strong&gt;&lt;br&gt;
Essential sensor for pharmaceuticals. Must record continuously at 30-60 second intervals for the entire trip.&lt;br&gt;
Range: -80°C to +60°C&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Humidity&lt;/strong&gt;&lt;br&gt;
Required for lyophilized products and packaging integrity.&lt;br&gt;
Range: 0-100% Relative Humidity&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shock and vibration&lt;/strong&gt;&lt;br&gt;
Tracks accidental drops, bumps, and excessive vibration.&lt;br&gt;
Threshold: adjustable G-forces&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Light exposure&lt;/strong&gt;&lt;br&gt;
Triggers when a package is opened without authorization or exposed to UV radiation.&lt;br&gt;
Measures lux and UV light range&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GPS location&lt;/strong&gt;&lt;br&gt;
Links each sensor reading to an accurate GPS location — crucial for breach analysis.&lt;br&gt;
Accuracy: 3-5 meters outdoors&lt;/p&gt;

&lt;p&gt;Example of payload from multi-sensor cold chain tag&lt;/p&gt;

&lt;p&gt;All data points collected from a well-designed cold chain tag should be part of the payload structure, including all sensor readings, location, and the breach flag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"assetId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"VIAL-7821-B"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2025-03-14T09:32:11Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sensors"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"tempC"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;4.2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"humidityPct"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;58.3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"shockG"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"lightLux"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"lat"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;43.6532&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"lng"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;-79.3832&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"breach"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"breachType"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;How a breach flag is calculated on the edge device&lt;br&gt;
The breach flag must be calculated on the device itself prior to sending. Below is a simplified example of Node.js code for how this can be done:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;evaluateBreach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;reading&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;thresholds&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;breaches&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;reading&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tempC&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;thresholds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;maxTemp&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
      &lt;span class="nx"&gt;reading&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tempC&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;thresholds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;minTemp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;breaches&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;TEMPERATURE&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;reading&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;humidityPct&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;thresholds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;maxHumidity&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;breaches&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;HUMIDITY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;reading&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shockG&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;thresholds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;maxShock&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;breaches&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;SHOCK&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;reading&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lightLux&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;thresholds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;maxLight&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;breaches&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;LIGHT_EXPOSURE&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;breach&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;breaches&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;breachType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;breaches&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;allBreaches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;breaches&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Warning Severity Matrix
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type of Breach&lt;/th&gt;
&lt;th&gt;Severity&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Temperature excursion&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;td&gt;Send immediate SMS + webhook + ship notification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Humidity breach&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;td&gt;Send alert + hold shipment until investigation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shock exceeded threshold&lt;/td&gt;
&lt;td&gt;Moderate&lt;/td&gt;
&lt;td&gt;Log event + contact receiving team&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Light exposure detected&lt;/td&gt;
&lt;td&gt;Moderate&lt;/td&gt;
&lt;td&gt;Send alert to inspect on receipt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Route deviance from GPS path&lt;/td&gt;
&lt;td&gt;Monitor&lt;/td&gt;
&lt;td&gt;Log incident + contact logistics coordinator&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Compliance tip:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To meet FDA 21 CFR Part 11 and EU GDP requirements, all readings must be timestamped with tamper-proof timestamps, and an unbroken chain of custody must be maintained in the logs. Design your data architecture such that records cannot be altered after being written; append-only database or blockchain anchoring can work here.&lt;br&gt;
Connectivity options for cold chain tags&lt;br&gt;
All cold chain environments aren’t always covered by reliable cellular networks. Select your connectivity based on the deployment:&lt;/p&gt;

&lt;p&gt;Cellular (LTE-M / NB-IoT) - optimal when used for cold chain transportation over long distances and large geographies. Global coverage, near-real-time monitoring, moderate power consumption. BLE + Gateway - best option when you have fixed gateways in your warehouse/facilities. Lowest power consumption. LoRaWAN - best suited for remote cold storage and rural/distance-based distribution centers. Satellite (Iridium/Starlink) - backup connectivity for locations beyond the reach of terrestrial networks.&lt;/p&gt;

&lt;p&gt;AssetTrackPro’s cold chain tags are equipped with multiple sensors to monitor temperature, humidity, shock, lighting, and location (GPS). Threshold configuration, breach alerts, and automatic compliance report generation are included. Cold chain deployments at various companies, including pharmaceuticals, hospitals, and blood banks. Learn more →&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Building a cold chain monitoring system? AssetTrackPro's IoT devices cover every sensor that matters — with compliance reporting ready out of the box.&lt;br&gt;
Explore &lt;a href="https://assettrackpro.com/" rel="noopener noreferrer"&gt;AssetTrackPro ↗&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>iot</category>
      <category>coldchain</category>
      <category>embedded</category>
      <category>assettracking</category>
    </item>
    <item>
      <title>How edge computing in smart tags reduces latency in asset monitoring</title>
      <dc:creator>Smrati</dc:creator>
      <pubDate>Mon, 04 May 2026 17:04:48 +0000</pubDate>
      <link>https://dev.to/smrati_verma/how-edge-computing-in-smart-tags-reduces-latency-in-asset-monitoring-1kab</link>
      <guid>https://dev.to/smrati_verma/how-edge-computing-in-smart-tags-reduces-latency-in-asset-monitoring-1kab</guid>
      <description>&lt;p&gt;Transmitting all data to the cloud seems like an easy task until you realize that the sensor network for your asset tracking system will have 10,000 nodes sending data at one-second intervals. &lt;br&gt;
This is why moving processing to the tag itself makes such a difference when it comes to latency, bandwidth, and battery drain.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;The issue with cloud-first IoT&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The standard IoT approach is simple: read sensor data → send to the cloud → process it in the cloud → send out alert. Looks great on paper. Hard to implement.&lt;/p&gt;

&lt;p&gt;Each step takes time. A round-trip trip from your tag to the cloud and back to decide whether the temperature of the asset is higher than 8°C could range from 200ms to 2 seconds. In cold chain logistics or on high-speed assembly lines, this is not "slow." This is a failure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloud first vs edge first&lt;/strong&gt;: how it plays out in reality&lt;/p&gt;
&lt;h2&gt;
  
  
  Cloud first (conventional)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;All decisions go to the server&lt;/strong&gt;&lt;br&gt;
→Tag reads sensor&lt;br&gt;
→Data is transmitted&lt;br&gt;
→Processed in the cloud&lt;br&gt;
→Warning sent back&lt;br&gt;
→Response initiated&lt;br&gt;
Latency: 200ms – 2 seconds&lt;/p&gt;
&lt;h2&gt;
  
  
  Edge first (smart tag)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Decisions occur on the tag&lt;/strong&gt;&lt;br&gt;
→Tag reads sensor&lt;br&gt;
→Onboard computing executes&lt;br&gt;
→Local alert is generated&lt;br&gt;
→Summary is transmitted to cloud&lt;br&gt;
→(only when there’s an exception)&lt;br&gt;
Latency: &amp;lt;5ms&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What "edge computing on a tag" really means&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Today’s smart tags have onboard processors such as the Nordic nRF52 or STM32 family – low power ARM cores capable of processing decision-making locally. Here is what a basic threshold alert might look like in firmware:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Runs on-chip — no cloud needed for this decision&lt;/span&gt;
&lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;check_temperature&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;float&lt;/span&gt; &lt;span class="nx"&gt;temp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;read_sensor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;temp&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;THRESHOLD_MAX&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;trigger_local_alert&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  &lt;span class="c1"&gt;// buzzer, LED, or BLE broadcast&lt;/span&gt;
    &lt;span class="nf"&gt;queue_cloud_event&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;TEMP_BREACH&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;ts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;get_timestamp&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="c1"&gt;// No breach? Nothing sent. Zero bandwidth used.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The crucial point is that exceptions are all that matter. An RFID sensor reading the temperature every 10 seconds in a 12-hour transport will send 4,320 readings. But if three of those 4,320 exceed the limit, you send 3 events – not 4,320. The savings in bandwidth will be 99.9%.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What edge computing makes possible&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Sub-5 ms notification&lt;br&gt;
Decisions made locally without the need to communicate with a distant server&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Offline capability&lt;br&gt;
RFID tags will continue functioning regardless of connection loss&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Battery life extension x3-x5&lt;br&gt;
Sending exceptions instead of entire streams means lower power consumption&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reduced bandwidth expenses&lt;br&gt;
Savings on mobile network bandwidth or LoRaWAN&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The tradeoffs you need to know
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Factor&lt;/th&gt;
&lt;th&gt;Edge compute&lt;/th&gt;
&lt;th&gt;Cloud-first&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Alert latency&lt;/td&gt;
&lt;td&gt;&amp;lt;5ms&lt;/td&gt;
&lt;td&gt;200ms–2s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Firmware complexity&lt;/td&gt;
&lt;td&gt;Higher&lt;/td&gt;
&lt;td&gt;Lower&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OTA update risk&lt;/td&gt;
&lt;td&gt;Logic lives on device&lt;/td&gt;
&lt;td&gt;Update server only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Offline resilience&lt;/td&gt;
&lt;td&gt;Full&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Battery life&lt;/td&gt;
&lt;td&gt;3–5× longer&lt;/td&gt;
&lt;td&gt;Baseline&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data bandwidth&lt;/td&gt;
&lt;td&gt;Up to 99% less&lt;/td&gt;
&lt;td&gt;Full stream&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;OTA note&lt;/strong&gt;: If logic runs on the tag, a firmware rollout gone wrong can render thousands of deployed tags useless. Make sure to implement a rollback partition and test on a staging group prior to rolling out edge logic updates to production tags.&lt;/p&gt;

&lt;h2&gt;
  
  
  Edge vs. Cloud - Where Logic Should Live
&lt;/h2&gt;

&lt;p&gt;Use edge compute in the tag whenever you need: sub-second latency, assets operating in offline environments, or cost-effective bandwidth management on cell or LoRaWAN connections. Cold chain monitoring, manufacturing lines, remote facilities - all are good candidates.&lt;/p&gt;

&lt;p&gt;Cloud-first is the way to go when you have: complex logic, frequently changing logic, or need to correlate data across several assets in order to compute (e.g., fleet-wide anomaly detection). Best-in-class systems combine both - edge for immediate decisions locally, cloud for analytics and insights.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Experience edge computing in action. &lt;a href="https://assettrackpro.com/" rel="noopener noreferrer"&gt;AssetTrackPro’s &lt;/a&gt;intelligent tags leverage on-chip edge logic in cold chain, manufacturing, and logistics applications.&lt;br&gt;
Learn about &lt;a href="https://assettrackpro.com/%E2%86%97" rel="noopener noreferrer"&gt;https://assettrackpro.com/↗&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>iot</category>
      <category>edgecomputing</category>
      <category>hardware</category>
      <category>assettracking</category>
    </item>
    <item>
      <title>RTLS vs GPS: choosing the right location tech for indoor vs outdoor tracking</title>
      <dc:creator>Smrati</dc:creator>
      <pubDate>Fri, 01 May 2026 07:17:07 +0000</pubDate>
      <link>https://dev.to/smrati_verma/rtls-vs-gps-choosing-the-right-location-tech-for-indoor-vs-outdoor-tracking-4h4l</link>
      <guid>https://dev.to/smrati_verma/rtls-vs-gps-choosing-the-right-location-tech-for-indoor-vs-outdoor-tracking-4h4l</guid>
      <description>&lt;p&gt;&lt;em&gt;GPS is universal&lt;/em&gt; – until you enter a building. &lt;br&gt;
RTLS is great inside – until the asset exits through the front gate. Making the wrong choice is expensive, but it also jeopardises the precision your entire tracking solution relies upon.&lt;/p&gt;

&lt;p&gt;What they actually are&lt;br&gt;
&lt;strong&gt;GPS&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Global Positioning System&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A satellite-based positioning technology in which a GPS module embedded within a tracker uses satellite signals to pinpoint location. Needs direct visibility of satellites – walls, ceilings, and other dense materials interfere greatly with the signal.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Accuracy range of 3-5m outdoors&lt;/li&gt;
&lt;li&gt;Satellite-dependent&lt;/li&gt;
&lt;li&gt;RTLS&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Real-Time Locating System&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;An indoor positioning infrastructure utilizing Bluetooth Low Energy (BLE), Ultra-Wideband (UWB), WiFi, or RFID anchors to locate assets through communication between tags and readers/anchors positioned throughout the building premises using RSSI, TDOA, and AoA algorithms.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Accuracy range of 10cm to 3m indoors&lt;/li&gt;
&lt;li&gt;Infrastructure-dependent&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Head-to-head comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criteria&lt;/th&gt;
&lt;th&gt;GPS&lt;/th&gt;
&lt;th&gt;RTLS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Indoor accuracy&lt;/td&gt;
&lt;td&gt;Poor (signal loss)&lt;/td&gt;
&lt;td&gt;High (10cm–3m) _wins _&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Outdoor accuracy&lt;/td&gt;
&lt;td&gt;High (3–5m) &lt;em&gt;wins&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;Not applicable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Infrastructure cost&lt;/td&gt;
&lt;td&gt;Low (satellite-based) &lt;em&gt;wins&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;Medium–High (anchor install)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tag/device cost&lt;/td&gt;
&lt;td&gt;$15–$80&lt;/td&gt;
&lt;td&gt;$5–$50 (BLE) / $30–$150(UWB)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Battery life&lt;/td&gt;
&lt;td&gt;Days–weeks&lt;/td&gt;
&lt;td&gt;Months–years (BLE) &lt;em&gt;wins&lt;/em&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Update frequency&lt;/td&gt;
&lt;td&gt;Every 5–60 sec&lt;/td&gt;
&lt;td&gt;Near-continuous &lt;em&gt;wins&lt;/em&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Setup complexity&lt;/td&gt;
&lt;td&gt;Low &lt;em&gt;wins&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;High (site survey needed)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Usage for each technology
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;RTLS&lt;/strong&gt; -  indoor application&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Hospitals&lt;br&gt;
Intravenous infusion devices, wheelchairs, emergency medical kits in various floors&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Warehouses&lt;br&gt;
Forklifts, pallets, bins within huge warehouses&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Manufacturing facilities&lt;br&gt;
Work-in-progress inventory tracking in different manufacturing process stages&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;GPS&lt;/strong&gt; - outdoor application&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Fleet management&lt;br&gt;
Trucks, vans, delivery trucks traveling on roads&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Construction site&lt;br&gt;
Heavy machinery used at open construction sites&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Yard management&lt;br&gt;
Cargo containers and trailers in open yards&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The hybrid solution
&lt;/h2&gt;

&lt;p&gt;– what the majority of enterprise implementations utilize&lt;br&gt;
Logistical and manufacturing operations do not operate within environments where assets remain exclusively indoors or outdoors. A pallet moves out of a warehouse, is put into a vehicle, travels to a distribution facility, and then heads back indoors. No single technology will account for the entire journey.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The solution&lt;/strong&gt;: Utilize GPS for the outdoor/travel segments, while relying on BLE-based RTLS for the indoor segments, with the transfer occurring automatically when the asset crosses into a geofenced area. This transition doesn’t require any changes to the tag; today’s hybrid tags can accommodate both technologies and automatically switch between them based on signal strength.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deployment advice&lt;/strong&gt;: Always conduct a site survey before installing any anchor points in an RTLS deployment. The multipath effect caused by metal racks, machinery, and concrete floors can reduce precision by 40%–60% if anchors are placed without taking into account the RF environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing an RTLS technology for indoors
&lt;/h2&gt;

&lt;p&gt;RTLS isn’t created equally. If precision is your priority, then UWB is best, delivering up to 10-30 cm precision. However, it will cost you more upfront with higher costs per tag and infrastructure setup. BLE provides a good balance between performance and budgeting, offering a range of 1-3 meters, affordable tags, extended battery life, and versatile gateways which can serve as general IoT infrastructure. Wi-Fi RTLS utilizes pre-existing network components; however, the accuracy is lower (3-10 meters) and consumes network resources heavily.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Decision-making&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Outdoor/mobile assets → GPS&lt;br&gt;
Indoor assets → RTLS (BLE/UWB)&lt;br&gt;
Indoor and outdoor/mobile assets → hybrid GPS/BLE tag&lt;br&gt;
Indoor sub-30cm precision → UWB&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Check out RTLS and GPS in practice. AssetTrackPro specializes in designing hybrid indoor and outdoor asset tracking solutions using BLE, UWB, and GPS technologies for logistics, manufacturing, and healthcare.&lt;/p&gt;

&lt;p&gt;Learn more about &lt;a href="https://assettrackpro.com/" rel="noopener noreferrer"&gt;AssetTrackPro &lt;/a&gt;↗&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>iot</category>
      <category>gps</category>
      <category>rtls</category>
      <category>hardware</category>
    </item>
    <item>
      <title>Building a Real-Time Asset Tracking Dashboard with IoT Data Streams</title>
      <dc:creator>Smrati</dc:creator>
      <pubDate>Thu, 30 Apr 2026 17:13:25 +0000</pubDate>
      <link>https://dev.to/smrati_verma/building-a-real-time-asset-tracking-dashboard-with-iot-data-streams-2c8m</link>
      <guid>https://dev.to/smrati_verma/building-a-real-time-asset-tracking-dashboard-with-iot-data-streams-2c8m</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Constructing a Real-Time Dashboard for IoT Asset Tracking Using Data Streams&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In this day and age, real-time tracking of assets is no longer optional; this is something that keeps chaos at bay. And if your business involves tracking any assets ranging from laptops, warehouse stock to delivery fleets, then you need to utilize data streams provided by IoT to have a real-time view.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Basic Concept&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In essence, an IoT data stream-based real-time dashboard collects continuous streams of data from IoT-enabled assets and presents such in a useful and readable way. The type of data presented may include location, status, and even alerts depending on your requirements.&lt;br&gt;
Basic Components&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;IoT Devices (Sources of Raw Data)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These are the hardware sources which are responsible for collecting raw data. This could be RFID tags, Bluetooth beacons, GPS receivers or other sensors that collect required information.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Data Collection (Ingestion) Layer&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Use various tools that will collect data stream in real time, some of these tools may be MQTT brokers or other similar APIs. It is recommended to use MQTT since it is a light-weight protocol and perfect for IoT.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Data Stream Processing&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is where it really gets fun. You need to look into real time processing of data by software tools like Apache Kafka or Apache Flink. These types of tools allow you to filter out the information passing through them, to cleanse it and also to activate some kind of action such as sending alerts for assets that should not have left their location.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Backend and Database&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To save the structured data, you will want to use an actual database such as MongoDB (which gives you a lot of flexibility) or PostgreSQL. If you are monitoring something that changes over time, you can use a time series database like InfluxDB to store those data points.&lt;br&gt;
The Frontend Dashboard&lt;br&gt;
You will use either React, Vue, or plain JS to display the data you saved to the backend above. Some useful JavaScript libraries include Chart.js or D3.js for creating live graphs, maps or status indicators.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Flow of Data&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A piece of IoT hardware sends data → the IoT device connects to an MQTT broker which receives the data → a stream processor checks the data and runs analytics on the data stream → the backend saves the data for future retrieval → the dashboard showing the user the data updates in real time.&lt;br&gt;
Ta-da! No delays or guess work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Features that Matter&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Most Important Feature is Real Time Asset Location Tracking (being able to visually see the location of your assets on a map is essential).&lt;/li&gt;
&lt;li&gt;Immediate Alert Notifications (alerts for theft, movement, or an anomalous condition).&lt;/li&gt;
&lt;li&gt;Monitoring the Health of Your Assets.&lt;/li&gt;
&lt;li&gt;Usage Analytics (who used what and when).&lt;/li&gt;
&lt;li&gt;Don't just dump nothing into a systems - turn that nothing into value.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Don't over complicate your architecture at first. Start with something simple then build on that.&lt;br&gt;
Latency is King - optimise your data pipeline for speed; this is a critical aspect of an IoT solution.&lt;br&gt;
Security is Not Optional - be sure to encrypt your data and that users authenticate before accessing your solution.&lt;br&gt;
Test Your Solution in Real-World Scenarios - not in a perfect setting.&lt;br&gt;
Here's Where It Comes in Handy&lt;/p&gt;

&lt;p&gt;Think about an organization dealing with dozens of assets scattered around different places. Rather than resorting to the chaos of Excel sheets and estimation, they can see everything right before their eyes. This is where solutions such as &lt;a href="https://assettrackpro.com/" rel="noopener noreferrer"&gt;AssetTrackPro&lt;/a&gt;-like platforms make all the difference, organizing the chaos without burdening anyone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bottom Line&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The moment your assets start moving, they need tracking. The moment you start tracking them, you need the data to be real-time. The moment it becomes real-time, you definitely need a useful dashboard.&lt;br&gt;
Otherwise, what's the point?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;See this in production. AssetTrackPro builds enterprise-grade IoT tracking systems with real-time dashboards for logistics, manufacturing, and healthcare.&lt;br&gt;
Explore &lt;a href="https://assettrackpro.com/" rel="noopener noreferrer"&gt;AssetTrackPro ↗&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>iot</category>
      <category>javascript</category>
      <category>mqtt</category>
      <category>dashboard</category>
    </item>
    <item>
      <title>RFID vs BLE vs NFC: Which asset tracking tech should you build on?</title>
      <dc:creator>Smrati</dc:creator>
      <pubDate>Wed, 29 Apr 2026 13:00:18 +0000</pubDate>
      <link>https://dev.to/smrati_verma/rfid-vs-ble-vs-nfc-which-asset-tracking-tech-should-you-build-on-4jbi</link>
      <guid>https://dev.to/smrati_verma/rfid-vs-ble-vs-nfc-which-asset-tracking-tech-should-you-build-on-4jbi</guid>
      <description>&lt;p&gt;Selecting an improper radio technology can cost you several months of time spent on re-engineering the solution. So below we offer our recommendations on when to choose RFID, BLE, and NFC technologies in terms of asset tracking solutions.&lt;/p&gt;

&lt;h2&gt;
  
  
  RFID
&lt;/h2&gt;

&lt;p&gt;Radio Frequency ID&lt;br&gt;
Uses electromagnetic fields to auto-identify tags attached to objects. Passive tags need no battery — they draw power from the reader.&lt;/p&gt;

&lt;p&gt;10cm–10m range&lt;br&gt;
No battery needed&lt;/p&gt;

&lt;h2&gt;
  
  
  BLE
&lt;/h2&gt;

&lt;p&gt;Bluetooth Low Energy&lt;br&gt;
Broadcasts beacon signals continuously. Gateways or phones pick them up and triangulate position with RSSI. Low power, long battery life.&lt;/p&gt;

&lt;p&gt;Up to 100m range&lt;br&gt;
1–3 yr battery&lt;/p&gt;

&lt;h2&gt;
  
  
  NFC
&lt;/h2&gt;

&lt;p&gt;Near Field Comm.&lt;br&gt;
Short-range, tap-to-read protocol. Ideal for manual check-in/out workflows where a human physically scans an asset tag.&lt;/p&gt;

&lt;p&gt;Under 10cm&lt;br&gt;
Passive tags&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criteria&lt;/th&gt;
&lt;th&gt;RFID&lt;/th&gt;
&lt;th&gt;BLE&lt;/th&gt;
&lt;th&gt;NFC&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Read range&lt;/td&gt;
&lt;td&gt;10cm – 10m&lt;/td&gt;
&lt;td&gt;Up to 100m&lt;/td&gt;
&lt;td&gt;&amp;lt;10cm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tag cost&lt;/td&gt;
&lt;td&gt;$0.10 – $2&lt;/td&gt;
&lt;td&gt;$3 – $15&lt;/td&gt;
&lt;td&gt;$0.10 – $1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Power source&lt;/td&gt;
&lt;td&gt;Passive (reader-powered)&lt;/td&gt;
&lt;td&gt;Battery (active)&lt;/td&gt;
&lt;td&gt;Passive&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Real-time location&lt;/td&gt;
&lt;td&gt;Partial (gate-based)&lt;/td&gt;
&lt;td&gt;Yes (continuous)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Infrastructure cost&lt;/td&gt;
&lt;td&gt;Medium–High&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best use case&lt;/td&gt;
&lt;td&gt;Inventory gates, warehouses&lt;/td&gt;
&lt;td&gt;Live location, large sites&lt;/td&gt;
&lt;td&gt;Check-in/out workflows&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Which technology to choose?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Choose RFID when you need to scan hundreds of things at once — be it conveyor belts, docking stations, or storerooms of any retail shop. UHF RFID readers can scan 200+ tags within a second. It's perfect for automated warehouses and other logistics centers.&lt;/p&gt;

&lt;p&gt;Choose BLE when you need precise continuous localization across your facility — hospitals tracking devices, manufacturing companies controlling tools usage on multiple floors, logistics centers monitoring assets movement. Simply deploy BLE gateways with an interval of 10-30m, and you'll get your own indoor positioning system.&lt;/p&gt;

&lt;p&gt;Choose NFC when you don't need continuous localization but want to have audit trails. Tool checkout operations, asset transfers between different shifts, logging some compliance activities — NFC tags are relatively inexpensive, tamper-proof, and don't require any infrastructure whatsoever except for smartphones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Quick decision support&lt;br&gt;
Scanning many objects at choke points → &lt;strong&gt;RFID&lt;/strong&gt;&lt;br&gt;
Tracking live objects in open spaces → &lt;strong&gt;BLE&lt;/strong&gt;&lt;br&gt;
No infrastructure budget for check-in/check-out → &lt;strong&gt;NFC&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Want to see these technologies in action?&lt;br&gt;
&lt;a href="https://assettrackpro.com/" rel="noopener noreferrer"&gt;AssetTrackPro &lt;/a&gt;builds end-to-end RFID, BLE, and NFC tracking systems for logistics, manufacturing, and healthcare.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>iot</category>
      <category>hardware</category>
      <category>devto</category>
      <category>rfid</category>
    </item>
    <item>
      <title>Why RFID-Based Asset Tracking is a Game-Changer for Growing Businesses</title>
      <dc:creator>Smrati</dc:creator>
      <pubDate>Tue, 28 Apr 2026 13:35:05 +0000</pubDate>
      <link>https://dev.to/smrati_verma/why-rfid-based-asset-tracking-is-a-game-changer-for-growing-businesses-5dpo</link>
      <guid>https://dev.to/smrati_verma/why-rfid-based-asset-tracking-is-a-game-changer-for-growing-businesses-5dpo</guid>
      <description>&lt;p&gt;The emergence of businesses is directly related to the increase in complexity of asset management. Managing laptops, machinery, inventory, and tools without an advanced system could lead to a nightmare. The introduction of the RFID system solves this problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Is RFID &amp;amp; How It Works?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;RFID involves placing tags on assets that will be scanned wirelessly by RFID scanners. In contrast to barcodes, RFID doesn't have any requirement of line-of-sight for asset tracking.&lt;br&gt;
As an illustration, whereas it takes a lot of time to scan each product one-by-one, an RFID scanner allows scanning multiple products in just a few seconds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Old Methods Aren't Effective&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While some companies still use such methods in order to keep track of their assets, it is a solution that might help in the initial stage only.&lt;/p&gt;

&lt;p&gt;This approach results in:&lt;br&gt;
-Human mistakes&lt;br&gt;
-Misplaced assets&lt;br&gt;
-Tiresome auditing process&lt;br&gt;
-No real-time asset tracking capabilities&lt;br&gt;
Take the case of a company with 200+ employees attempting to track their laptops through Excel. One wrong digit and you'll spend days or even weeks looking for those laptops.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How Does RFID Change Everything?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Using RFID-based tracking of assets changes everything by making it completely automated and instant.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Instant Inventory Audits
Businesses will now be able to perform audits almost instantly using RFID.&lt;/li&gt;
&lt;li&gt;Instant Tracking
Assets will be easily traceable in real-time, avoiding any cases of theft and loss.&lt;/li&gt;
&lt;li&gt;More Precise Data
Using automation will help minimize mistakes in data collection and reporting.&lt;/li&gt;
&lt;li&gt;Better Decisions
With better quality data, organizations will be capable of making sound decisions on assets.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Example of How It Works&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imagine a medium-sized company managing its office equipment. Without RFID, it experienced frequent issues with equipment loss and out-of-date records. Using RFID for asset tracking, it was able to avoid losses and save time while performing audits.&lt;br&gt;
Products such as &lt;a href="https://assettrackpro.com/" rel="noopener noreferrer"&gt;AssetTrackPro &lt;/a&gt;provide great assistance in this process, as they use RFID technology together with an effective platform for managing assets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Growth-oriented Businesses Should Pay Attention&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Growth creates opportunities, but chaos occurs when processes remain unoptimized. This is where RFID comes into play, enabling companies to maintain scalability, efficiency, and proper organization. Rather than spend unnecessary resources managing their assets, businesses could concentrate on more important aspects: growing and achieving higher performance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Asset management using RFID technologies is no longer an option, but an urgent necessity for growth-oriented enterprises looking to develop effectively. The benefits of automation and process optimization cannot be overstated, and RFID makes that possible.&lt;/p&gt;

&lt;p&gt;Still using outdated methods? Maybe it's time to reconsider.&lt;/p&gt;

</description>
      <category>asset</category>
      <category>productivity</category>
      <category>rfid</category>
      <category>startup</category>
    </item>
    <item>
      <title>Lost Assets = Lost Money: How RFID Fixes What Spreadsheets Can't</title>
      <dc:creator>Smrati</dc:creator>
      <pubDate>Mon, 27 Apr 2026 14:03:09 +0000</pubDate>
      <link>https://dev.to/smrati_verma/lost-assets-lost-money-how-rfid-fixes-what-spreadsheets-cant-24oo</link>
      <guid>https://dev.to/smrati_verma/lost-assets-lost-money-how-rfid-fixes-what-spreadsheets-cant-24oo</guid>
      <description>&lt;p&gt;&lt;strong&gt;Missing Assets = Missing Money: Why RFID Can Fix What Spreadsheets Cannot&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Many companies use spreadsheets for asset management. Initially, it looks easy - just input all the data and keep updating it. But with growth comes complexity, and missing devices, stale data, and human error start becoming a problem.&lt;br&gt;
Why? Because the moment you lack the ability to manage your assets effectively, you are missing out on profits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Problem With Spreadsheets&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;They are manual. They are prone to human error.&lt;br&gt;
Think about an organization with 500 laptops, scattered across various departments. With every assignment, relocation, and repair, the spreadsheet has to be updated. Just visualize the amount of work involved daily.&lt;/p&gt;

&lt;p&gt;Problems faced:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Human mistakes while entering data&lt;/li&gt;
&lt;li&gt;No live updates&lt;/li&gt;
&lt;li&gt;Slow auditing process&lt;/li&gt;
&lt;li&gt;Lack of visibility regarding asset movement&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As a business develops, its managers begin to face such problems as missing equipment, purchasing duplicates, and unneeded expenditures since the system fails to work properly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is RFID? How Does RFID Work?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This technology is based on tags and readers that help track assets automatically.&lt;br&gt;
An RFID tag is attached to each asset. When scanned, it immediately registers information in the system, without any input.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br&gt;
A company's warehouse implements RFID technology to track their assets. There's no need for manual asset counting - just scan everything right away.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why RFID is Revolutionary for Your Business&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;RFID helps solve all those spreadsheet-based problems we talked about earlier.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Real-Time Asset Updates
Any changes are registered immediately after asset scanning.&lt;/li&gt;
&lt;li&gt;Increased Accuracy
Human errors become a thing of the past.&lt;/li&gt;
&lt;li&gt;Improved Audit Processes
An audit used to take a few hours; now it can be done in minutes.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Scenario in Real Life&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Consider an example of asset management in a hospital, where they monitor medical equipment.&lt;br&gt;
In spreadsheet-based systems, one may spend hours looking for particular pieces or order something that they already have.&lt;/p&gt;

&lt;p&gt;By using RFID:&lt;br&gt;
-Assets are monitored in real time&lt;br&gt;
-Faster location of needed items&lt;br&gt;
-Lower costs&lt;/p&gt;

&lt;p&gt;This is where modern solutions kick in. Software such as &lt;a href="https://assettrackpro.com/" rel="noopener noreferrer"&gt;AssetTrackPro &lt;/a&gt;utilizes RFID combined with intelligent dashboards to streamline asset management, without increasing its complexity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A spreadsheet-based method may be used only in cases when there are not many assets to manage.&lt;br&gt;
But with growing business comes greater number of assets, and therefore managing them requires proper software to avoid a complete mess. RFID helps automate the process and bring precision to it.&lt;br&gt;
As the saying goes, every lost asset is lost money - and no sensible business allows that.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>business</category>
      <category>beginners</category>
      <category>asset</category>
    </item>
    <item>
      <title>How RFID is Quietly Replacing Manual Asset Tracking (And Why Businesses Love It)</title>
      <dc:creator>Smrati</dc:creator>
      <pubDate>Mon, 27 Apr 2026 12:44:21 +0000</pubDate>
      <link>https://dev.to/smrati_verma/how-rfid-is-quietly-replacing-manual-asset-tracking-and-why-businesses-love-it-1468</link>
      <guid>https://dev.to/smrati_verma/how-rfid-is-quietly-replacing-manual-asset-tracking-and-why-businesses-love-it-1468</guid>
      <description>&lt;p&gt;&lt;strong&gt;What's Wrong with Manual Asset Tracking?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's be real - manual tracking sounds simple, but it breaks down fast.&lt;br&gt;
Human errors (wrong entries, missed updates)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Time-consuming audits&lt;/li&gt;
&lt;li&gt;No real-time visibility&lt;/li&gt;
&lt;li&gt;Assets getting "lost" but actually just misplaced&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br&gt;
Imagine a company with 500 laptops. Every time one is moved, someone has to update it manually. Miss one entry, and suddenly… no one knows where it is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So, What Exactly is RFID?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;RFID (Radio Frequency Identification) uses small tags attached to assets. These tags send signals to scanners, which automatically update the system.&lt;br&gt;
No typing. No guessing. No chasing people for updates.&lt;br&gt;
You just scan - and boom, the system knows what's where.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Businesses Are Switching to RFID?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This isn't just a tech upgrade - it's a relief.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Real-Time Tracking
You always know where your assets are. Not yesterday. Not "last updated." Right now.&lt;/li&gt;
&lt;li&gt;Faster Audits
What used to take hours (or days) can now be done in minutes.
Example:
 A warehouse can scan hundreds of items in seconds instead of checking them one by one.&lt;/li&gt;
&lt;li&gt;Fewer Errors
Since everything is automated, there's way less chance of mistakes.&lt;/li&gt;
&lt;li&gt;Saves Money
Lost assets = lost money. RFID cuts that problem down a lot.
Enter the Need for Software Solutions Such As AssetTrackPro&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Femklvpkvg3ofck9qy2uw.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Femklvpkvg3ofck9qy2uw.jpg" alt=" " width="612" height="344"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But here's the kicker - the problem with RFID technology is that once you have the data, how do you manage it?&lt;br&gt;
This is where software solutions such as &lt;a href="https://assettrackpro.com/" rel="noopener noreferrer"&gt;AssetTrackPro&lt;/a&gt; come in behind the scenes. These software solutions take the raw RFID data and convert it into a format that can be analyzed and used to make decisions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Big Step: From Reactive Management to Smart Management&lt;/strong&gt;&lt;br&gt;
Manual systems are reactive; issues are sorted out after they occur.&lt;br&gt;
But RFID changes that.&lt;br&gt;
Problems can be prevented from occurring&lt;br&gt;
Usage trends can be tracked&lt;br&gt;
Planning is improved&lt;br&gt;
Instead of asking where it went, you simply say that you already know.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Closing Notes&lt;/strong&gt;&lt;br&gt;
RFID is not very noticeable, but it sure makes a lot of difference for business asset management. It is more convenient and actually makes life much easier.&lt;br&gt;
Once you've adopted RFID systems in your company, switching back to manual tracking is like returning to the use of flip phones in 2026.&lt;/p&gt;

&lt;p&gt;Not difficult, but why would you want to?&lt;/p&gt;

</description>
      <category>assets</category>
      <category>ai</category>
      <category>productivity</category>
      <category>startup</category>
    </item>
    <item>
      <title>Why Spreadsheets Fail For Asset Management</title>
      <dc:creator>Smrati</dc:creator>
      <pubDate>Sat, 25 Apr 2026 12:40:00 +0000</pubDate>
      <link>https://dev.to/smrati_verma/why-spreadsheets-fail-for-asset-management-4pjd</link>
      <guid>https://dev.to/smrati_verma/why-spreadsheets-fail-for-asset-management-4pjd</guid>
      <description>&lt;p&gt;In many companies, using spreadsheets had been considered the primary solution to asset management for decades. Such tools are cheap, available, easy to use. It might seem that using spreadsheets could be effective and beneficial at first sight. But as businesses continue to grow and evolve, there comes a realization that spreadsheets may be far from being a viable solution to any asset tracking problems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No Real-Time Updates&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the major disadvantages of using spreadsheets is that they lack real-time accuracy. Asset tracking data changes regularly when items move to a new location, undergo some repairs, replacements, get assigned to different staff members. With the help of a spreadsheet system, all of these events would require human input to update information. Even the slightest delay may make asset information invalid since asset tracking data gets modified very frequently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;High Probability of Human Errors&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Spreadsheet software is highly susceptible to human error due to its nature. Any mistakes, such as accidentally deleting rows, changing cells, or even misplacing files, can cause serious harm to a business. Spreadsheets lack the advanced validation features and automation tools that would make them less dependent on human intervention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inadequate Scalability&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As businesses expand, so do their requirements for managing a greater number of assets. Spreadsheets cannot effectively accommodate large quantities of information. It becomes difficult to track numerous assets spread across various locations, especially with the growing file sizes that slow down operations. Solutions that work well for a smaller organization do not scale up to accommodate larger organizations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Poor Collaboration and Security&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While collaborative tools make it possible for multiple people to use the same file in the cloud, there is still no effective way to collaborate. There may be conflicts due to simultaneous editing, or sensitive information may get lost when different people edit the file simultaneously. Moreover, spreadsheets do not offer security measures, so there is always a risk of leaks and data loss.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Absence of Automation and Insights&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Efficiency is enhanced by automation and insights. However, spreadsheet software does not offer any form of automation. It depends on the manual entry and verification of information in order to get accurate results. No alert or asset life cycle system is available. On the other hand, there are tools that automate and simplify all such tasks easily. For example, &lt;a href="https://assettrackpro.com/" rel="noopener noreferrer"&gt;AssetTrackPro&lt;/a&gt; helps organizations manage their resources efficiently with automatic monitoring systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ineffective Auditing and Report Generation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Spreadsheets cannot facilitate effective auditing of assets because it is a laborious process involving many errors. The task becomes complex when one needs to verify the spreadsheet information against the actual asset data. Similarly, report generation becomes an arduous job in case of such software.&lt;/p&gt;

&lt;p&gt;Although spreadsheets could be considered an easy place to begin when it comes to asset management, they do not possess capabilities that suit the requirements of current businesses. Inaccurate, inefficient, insecure, and manual, spreadsheets cannot become a viable option in the future. For businesses to keep up with their growth and development, it is vital for them to move from spreadsheet-based asset management to more modern systems.&lt;/p&gt;

</description>
      <category>assetmanagement</category>
      <category>rfid</category>
      <category>businessstraategy</category>
      <category>security</category>
    </item>
  </channel>
</rss>
