<?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: NORVI Controllers</title>
    <description>The latest articles on DEV Community by NORVI Controllers (@norvi_controllers).</description>
    <link>https://dev.to/norvi_controllers</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%2Forganization%2Fprofile_image%2F12053%2F7777c618-f991-404d-9c01-03f2b7575e29.png</url>
      <title>DEV Community: NORVI Controllers</title>
      <link>https://dev.to/norvi_controllers</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/norvi_controllers"/>
    <language>en</language>
    <item>
      <title>Build a Smart Building Automation Controller Using NORVI X</title>
      <dc:creator>Bhanuka Gamachchige</dc:creator>
      <pubDate>Fri, 27 Mar 2026 11:29:04 +0000</pubDate>
      <link>https://dev.to/norvi_controllers/build-a-smart-building-automation-controller-using-norvi-x-1m17</link>
      <guid>https://dev.to/norvi_controllers/build-a-smart-building-automation-controller-using-norvi-x-1m17</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Modern buildings are packed with systems — HVAC, lighting, access control, and energy metering — but most of them run on separate proprietary controllers that don't talk to each other. The result is a building that's instrumented but not truly intelligent.&lt;/p&gt;

&lt;p&gt;In this Instructable, you'll learn how to build a flexible, open-source smart building automation controller using the NORVI X platform. It's built on the ESP32-S3 microcontroller, supports industrial I/O, speaks Modbus RTU natively, and connects to the cloud over WiFi, Ethernet, or 4G — all at a fraction of the cost of traditional BMS hardware.&lt;/p&gt;

&lt;p&gt;This guide covers a practical HVAC zone control system with remote monitoring, but the same hardware can handle lighting automation, energy metering, and access control.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Understand the Problem With Traditional Building Automation
&lt;/h3&gt;

&lt;p&gt;Before building anything, it's worth knowing why this matters. Traditional Building Management Systems (BMS) come with some frustrating limitations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Proprietary controllers that need vendor-certified technicians to configure&lt;/li&gt;
&lt;li&gt;No interoperability between subsystems — each zone or floor operates in a silo&lt;/li&gt;
&lt;li&gt;Little to no native cloud/API connectivity&lt;/li&gt;
&lt;li&gt;High licensing costs that price out small-to-medium commercial buildings&lt;/li&gt;
&lt;li&gt;Long lead times and expensive replacement cycles when hardware reaches end-of-life&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal of this project is to replace that complexity with a single open platform that any engineer can program, configure, and scale.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Gather Your Components
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Hardware (per zone controller)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;1x NORVI CPU-ESPS3-X1 (ESP32-S3 with WiFi, Ethernet, RS-485)&lt;/li&gt;
&lt;li&gt;1x NORVI X-AI4 (4x analog inputs, 4–20 mA, 16-bit ADC)&lt;/li&gt;
&lt;li&gt;1x NORVI X-R4 (4x relay outputs)&lt;/li&gt;
&lt;li&gt;1x NORVI X-DI4 (fast digital inputs)&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Sensors &amp;amp; Actuators
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Temperature &amp;amp; humidity sensor (4–20 mA output)&lt;/li&gt;
&lt;li&gt;CO2 sensor (for demand-controlled ventilation)&lt;/li&gt;
&lt;li&gt;Fan coil unit (controlled via relay)&lt;/li&gt;
&lt;li&gt;Door/window contact sensors&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Tools &amp;amp; Software
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Arduino IDE or ESP-IDF&lt;/li&gt;
&lt;li&gt;MQTT broker (local or cloud — e.g., HiveMQ, Mosquitto, AWS IoT)&lt;/li&gt;
&lt;li&gt;Optional: Node-RED or Grafana for dashboarding
**
Estimated cost per zone controller: ~$135–145 USD**&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 3: Understand the System Architecture
&lt;/h3&gt;

&lt;p&gt;Here's how the layers of the system fit together:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;NORVI X Module&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Sensing&lt;/td&gt;
&lt;td&gt;Temp, Humidity, CO2 sensors&lt;/td&gt;
&lt;td&gt;X-AI4 (4–20 mA)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output Control&lt;/td&gt;
&lt;td&gt;HVAC relays, Fan Coil&lt;/td&gt;
&lt;td&gt;X-R4 relay module&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contact Monitoring&lt;/td&gt;
&lt;td&gt;Door/Window Sensors&lt;/td&gt;
&lt;td&gt;X-DI4 digital inputs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Communication&lt;/td&gt;
&lt;td&gt;Modbus RTU to BMS&lt;/td&gt;
&lt;td&gt;Built-in RS-485&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Connectivity&lt;/td&gt;
&lt;td&gt;WiFi / Ethernet / 4G&lt;/td&gt;
&lt;td&gt;Built-in on CPU&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Edge Logic&lt;/td&gt;
&lt;td&gt;Schedules, Alarms, Setpoints&lt;/td&gt;
&lt;td&gt;ESP32-S3 firmware&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Module&lt;/td&gt;
&lt;td&gt;NORVI X Module&lt;/td&gt;
&lt;td&gt;Core processing and integration layer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Each CPU module connects to I/O expansion boards via a dedicated expansion bus. You can stack up to 200 I/O points across a single controller — no rewiring, no new CPU needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Wire Up the Hardware
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Mount the NORVI CPU-ESPS3-X1 on a DIN rail in your control panel.&lt;/li&gt;
&lt;li&gt;Attach the X-AI4 expansion module — connect your 4–20 mA temperature, humidity, and CO2 sensors to the analog input terminals.&lt;/li&gt;
&lt;li&gt;Attach the X-R4 relay module — wire your fan coil unit switching circuits to the relay output terminals.&lt;/li&gt;
&lt;li&gt;Attach the X-DI4 — connect door/window contact dry contacts to the digital input terminals.&lt;/li&gt;
&lt;li&gt;Wire RS-485 A/B terminals to your upstream BMS or SCADA system (Modbus RTU).&lt;/li&gt;
&lt;li&gt;Connect Ethernet or configure WiFi for cloud/dashboard access.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Tip: For remote plant rooms or retrofit sites with no wired network, use the NORVI CPU-ESPS3-X2 or X3 variant, which adds 2G/4G cellular connectivity. No local network infrastructure needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Program the Controller
&lt;/h3&gt;

&lt;p&gt;All logic runs locally on the ESP32-S3. Use the Arduino framework or ESP-IDF — no proprietary IDE or vendor cloud dependency required. A basic control loop looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;ModbusMaster.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;PubSubClient.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
&lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="nf"&gt;readTemperature&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;raw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;analogRead&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AI4_CH0_PIN&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw&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="mi"&gt;65535&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="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 4-20mA to temperature&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;controlFanCoil&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;setpoint&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="n"&gt;temp&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;setpoint&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;digitalWrite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RELAY_CH1_PIN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;HIGH&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Fan coil ON&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nf"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;temp&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;setpoint&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;digitalWrite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RELAY_CH1_PIN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;LOW&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// Fan coil OFF&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;temperature&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;readTemperature&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;controlFanCoil&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;22.5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 22.5°C setpoint&lt;/span&gt;
  &lt;span class="n"&gt;publishToMQTT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"building/zone1/temp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5000&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;p&gt;Define your schedules, setpoints, alarm thresholds, and failsafe behaviour in firmware. Optionally expose configuration parameters over MQTT or a lightweight REST API.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6: Set Up Cloud / Remote Monitoring
&lt;/h3&gt;

&lt;p&gt;One NORVI X CPU isn't limited to HVAC. Add more expansion modules to cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lighting automation — X-Q4/X-Q8 transistor outputs for 0–10 V dimming&lt;/li&gt;
&lt;li&gt;Occupancy sensing — X-DI8/X-DI16 for PIR sensors and pushbutton overrides&lt;/li&gt;
&lt;li&gt;Daylight harvesting — X-AV4 analog inputs for photocell sensors&lt;/li&gt;
&lt;li&gt;Energy metering — RS-485 Modbus RTU to commercial energy meters&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A single NORVI X controller can simultaneously manage HVAC zone control, occupancy-based lighting, and access logging — eliminating the need for separate controllers per subsystem.&lt;/p&gt;

&lt;p&gt;For a 12-zone office building across three floors, deploy one NORVI X unit per zone and connect them all to a central data concentrator or SCADA system over Modbus RTU.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 8: Test and Deploy
&lt;/h3&gt;

&lt;p&gt;Before deploying to site, run through this checklist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Verify all analog input readings match expected sensor output ranges&lt;/li&gt;
&lt;li&gt;Test relay outputs — confirm fan coil switching responds to setpoint logic&lt;/li&gt;
&lt;li&gt;Verify Modbus RTU communication with your upstream BMS&lt;/li&gt;
&lt;li&gt;Confirm MQTT telemetry is flowing to your dashboard&lt;/li&gt;
&lt;li&gt;Simulate a network outage — confirm local failsafe logic holds&lt;/li&gt;
&lt;li&gt;Test OTA update path before final installation&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  NORVI X vs Traditional Smart Building Hardware
&lt;/h2&gt;

&lt;p&gt;Here's how NORVI X compares against the alternatives engineers typically Evaluate:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Traditional BMS&lt;/th&gt;
&lt;th&gt;Dev Boards&lt;/th&gt;
&lt;th&gt;IoT Gateways&lt;/th&gt;
&lt;th&gt;NORVI X&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Industrial I/O (DI/DO/AI/AO)&lt;/td&gt;
&lt;td&gt;✔✔✔&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;✖&lt;/td&gt;
&lt;td&gt;✔✔✔&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open Programming (C/C++)&lt;/td&gt;
&lt;td&gt;✖&lt;/td&gt;
&lt;td&gt;✔✔✔&lt;/td&gt;
&lt;td&gt;✖&lt;/td&gt;
&lt;td&gt;✔✔✔&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RS-485 / Modbus RTU&lt;/td&gt;
&lt;td&gt;✔✔✔&lt;/td&gt;
&lt;td&gt;Manual wiring&lt;/td&gt;
&lt;td&gt;✔✔&lt;/td&gt;
&lt;td&gt;Native built-in&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4G / LTE Cellular Option&lt;/td&gt;
&lt;td&gt;Requires add-on&lt;/td&gt;
&lt;td&gt;DIY&lt;/td&gt;
&lt;td&gt;✔✔&lt;/td&gt;
&lt;td&gt;✔✔✔&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Modular I/O Expansion&lt;/td&gt;
&lt;td&gt;Vendor-locked&lt;/td&gt;
&lt;td&gt;✖&lt;/td&gt;
&lt;td&gt;✖&lt;/td&gt;
&lt;td&gt;Up to 200 I/O&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Price Point&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Very Low&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;$80–$150 USD&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;With NORVI X, you get industrial-grade I/O, open ESP32 programming, native Modbus RTU, and cloud connectivity — all in a modular platform that scales from a single zone to hundreds of I/O points&lt;/p&gt;

&lt;p&gt;Estimated hardware cost per zone controller: ~$135–145 USD — a fraction of a traditional BMS controller, with full programming flexibility retained.&lt;/p&gt;

&lt;p&gt;This approach is ideal for system integrators, OEM machine builders, smart building startups, and retrofit projects where legacy BMS hardware needs to be replaced with something open and scalable.&lt;/p&gt;

&lt;p&gt;Note: NORVI X is not suitable for applications requiring strict IEC 61131-3 Ladder Logic compliance or certified safety functions (SIL/PLd). Those applications require dedicated safety PLCs.&lt;/p&gt;

&lt;h2&gt;
  
  
  More Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;NORVI X Product Page: &lt;a href="//norvi.io/norvi-x"&gt;norvi.io/norvi-x&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;NORVI Shop: &lt;a href="//shop.norvi.lk"&gt;shop.norvi.lk
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub (code examples): &lt;a href="//github.com/IndustrialArduino"&gt;github.com/IndustrialArduino&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Technical Support: &lt;a href="mailto:support@norvi.io"&gt;support@norvi.io&lt;/a&gt; | +94 77 111 1776&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>iot</category>
    </item>
    <item>
      <title>Building Multi-Year IoT Deployments: Inside the NORVI EC-M12-BC-C6-C-A LTE-M Logger</title>
      <dc:creator>Bhanuka Gamachchige</dc:creator>
      <pubDate>Fri, 13 Mar 2026 03:34:59 +0000</pubDate>
      <link>https://dev.to/norvi_controllers/building-multi-year-iot-deployments-inside-the-norvi-ec-m12-bc-c6-c-a-lte-m-logger-46m0</link>
      <guid>https://dev.to/norvi_controllers/building-multi-year-iot-deployments-inside-the-norvi-ec-m12-bc-c6-c-a-lte-m-logger-46m0</guid>
      <description>&lt;p&gt;Deploying a remote IoT data logger sounds straightforward — until you factor in power constraints, unpredictable weather, and the cost of maintenance visits to a location 200 km away.&lt;/p&gt;

&lt;p&gt;For engineers working on industrial remote monitoring, water utilities, environmental sensing, or agricultural automation, battery life and rugged connectivity are the two factors that make or break a deployment.&lt;/p&gt;

&lt;p&gt;This article breaks down how the NORVI EC-M12-BC-C6-C-A solves both — and what hardware decisions actually drive multi-year field life.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Most Remote Loggers Fail in the Field
&lt;/h2&gt;

&lt;p&gt;Here's the uncomfortable truth: most IoT sensors consume very little power during operation. The real power draw comes from cellular transmission — and this is where many logger designs fail.&lt;/p&gt;

&lt;p&gt;Older 2G/3G modems draw hundreds of milliamps during data bursts. On a standard 6,000 mAh lithium pack sending readings every 15 minutes, you're looking at months, not years.&lt;/p&gt;

&lt;p&gt;The root problems are almost always:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Wrong modem technology — GPRS/3G radios burn 5–10× more power than modern LPWAN alternatives.&lt;/li&gt;
&lt;li&gt;Aggressive MCU idle current — mainstream microcontrollers don't have true ultra-low-power sleep modes&lt;/li&gt;
&lt;li&gt;Wrong battery chemistry — alkaline and lithium-ion both suffer from high self-discharge and poor cold-weather performance&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Modern low-power IoT standards like LTE-M (Cat-M1) and NB-IoT were developed precisely to address the modem problem. Combined with the right MCU and battery chemistry, multi-year field life becomes achievable.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Hardware Stack: Key Decisions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  MCU: STM32L072CZT6TR
&lt;/h3&gt;

&lt;p&gt;The logger runs on the STM32L072 — part of STMicroelectronics' ultra-low-power L0 family. This is a deliberate choice. The L072 is not the fastest or most capable MCU you could put in an IoT device; it's the one that draws the least current between measurement cycles.&lt;/p&gt;

&lt;p&gt;Multiple low-power modes allow the processor to dramatically reduce draw while waiting to take the next reading. For a logger sampling every few minutes and transmitting every hour, the MCU spends the vast majority of its time in deep sleep. That idle current matters far more than clock speed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Battery: 38,000 mAh LiSOCl₂
&lt;/h3&gt;

&lt;p&gt;The device uses two ER34615H lithium thionyl chloride cells (19,000 mAh each) for a combined 38,000 mAh capacity.&lt;/p&gt;

&lt;p&gt;LiSOCl₂ is worth understanding if you're specifying hardware for field deployments:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Chemistry&lt;/th&gt;
&lt;th&gt;Self-Discharge / Year&lt;/th&gt;
&lt;th&gt;Cold Weather&lt;/th&gt;
&lt;th&gt;Capacity&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Alkaline&lt;/td&gt;
&lt;td&gt;~3–5%&lt;/td&gt;
&lt;td&gt;Poor (capacity drops sharply)&lt;/td&gt;
&lt;td&gt;Moderate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Li-ion&lt;/td&gt;
&lt;td&gt;~2–3%&lt;/td&gt;
&lt;td&gt;Moderate&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LiSOCl₂&lt;/td&gt;
&lt;td&gt;~1% or less&lt;/td&gt;
&lt;td&gt;Excellent&lt;/td&gt;
&lt;td&gt;Very high&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For a device that may sit in a field cabinet through 5–10 winters, LiSOCl₂ is the correct answer. The chemistry is non-rechargeable, which some engineers see as a limitation — but for a true low-power deployment, it's a feature: no charging circuitry, no charge cycle degradation, no BMS complexity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cellular Modem: SIMCOM A7672
&lt;/h2&gt;

&lt;p&gt;The A7672 supports LTE Cat-M1, NB-IoT (NB1 and NB2), and GSM/GPRS fallback — a multi-mode approach that matters for deployments where network availability varies by region or operator.&lt;/p&gt;

&lt;p&gt;Band support covers B1/B2/B3/B4/B5/B8/B12/B13/B18/B19/B20/B26/B28/B39, plus quad-band GSM. In practice, this means you're not locked to a single operator or region.&lt;/p&gt;

&lt;p&gt;Data rates are well-matched to the use case:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LTE Cat-M1: up to 588 kbps DL / 1,119 kbps UL&lt;/li&gt;
&lt;li&gt;NB-IoT: up to 26 kbps DL / 62.5 kbps UL&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a logger sending timestamped sensor readings every 15–60 minutes, NB-IoT bandwidth is more than sufficient. And NB-IoT's deep penetration characteristics make it valuable for underground or basement installations where LTE signal is weak.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 4–20 mA Inputs: Industrial Standard, Implemented Properly
&lt;/h2&gt;

&lt;p&gt;The 4–20 mA current loop is the backbone of industrial instrumentation — pressure transmitters, flow meters, level sensors, temperature probes, and hundreds of other field devices. Its noise immunity over long cable runs makes it ideal for outdoor deployments where signal integrity matters.&lt;/p&gt;

&lt;p&gt;The EC-M12-BC-C6-C-A provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;2 analog inputs (0–20 mA range, 26V DC max)&lt;/li&gt;
&lt;li&gt;ADS1115 16-bit ADC over I2C — high-resolution conversions&lt;/li&gt;
&lt;li&gt;Configurable sensor excitation supply: 12V / 5V / 3.3V outputs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last point is significant. Many loggers require separate field power supplies for 2-wire transmitters. Having a configurable excitation supply built into the logger simplifies wiring considerably and reduces the BoM for a deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Local Storage and Time Integrity
&lt;/h2&gt;

&lt;p&gt;Two features that often get overlooked in logger specifications — and that cause real pain in the field:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DS3231 RTC&lt;/strong&gt; — The DS3231 is a temperature-compensated real-time clock with ±2 ppm accuracy. Even through cellular outages or power interruptions, timestamps remain accurate. This matters when you're stitching together time series data from multiple loggers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MicroSD card slot (SPI)&lt;/strong&gt; — When connectivity is lost — due to network outage, coverage gaps, or cellular module failure — the logger buffers readings locally. When connectivity is restored, the buffered data uploads, preserving continuity in your time series. Without local storage, you get gaps. Gaps in environmental or industrial monitoring data are often unacceptable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RS-485 (half-duplex)&lt;/strong&gt; is also available, opening up Modbus RTU integration for deployments where you need to pull data from multiple sensors on a shared bus.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enclosure and Environmental Specs
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;IP Rating:&lt;/strong&gt;          IP67 (fully dustproof, 1m immersion)&lt;br&gt;
&lt;strong&gt;Operating Temp:&lt;/strong&gt;    –40°C to +85°C&lt;br&gt;
&lt;strong&gt;Enclosure:&lt;/strong&gt;          ABS + Polycarbonate&lt;br&gt;
&lt;strong&gt;Mounting:&lt;/strong&gt;           Wall / Pole&lt;br&gt;
&lt;strong&gt;Connector:&lt;/strong&gt;          M8 12-pin with cable gland&lt;br&gt;
&lt;strong&gt;Dimensions:&lt;/strong&gt;         146 × 90 × 50 mm&lt;br&gt;
&lt;strong&gt;Shock:&lt;/strong&gt;              30g operating / 50g non-operating (11ms)&lt;br&gt;
&lt;strong&gt;Certifications:&lt;/strong&gt;     CE (EN 61131-2:2007, EN 61010-1:2010)&lt;/p&gt;

&lt;p&gt;IP67 is the minimum you should specify for any outdoor exposed installation. The –40°C lower bound matters for cold-climate deployments — and it's where LiSOCl₂ chemistry earns its place, since alkaline cells lose a significant fraction of their rated capacity at sub-zero temperatures.&lt;/p&gt;

&lt;h2&gt;
  
  
  Checklist: Evaluating Any Long-Life IoT Logger
&lt;/h2&gt;

&lt;p&gt;When you're specifying a logger for a multi-year unattended deployment, five areas determine real-world performance:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Battery chemistry — LiSOCl₂ for long life and cold weather; check self-discharge spec&lt;/li&gt;
&lt;li&gt;Total capacity — calculate your expected current budget and verify runtime&lt;/li&gt;
&lt;li&gt;MCU idle current — look for dedicated ultra-low-power MCU families (STM32L0/L4, nRF9160, etc.)&lt;/li&gt;
&lt;li&gt;Modem technology — LTE-M or NB-IoT over GPRS/2G/3G for meaningful power reduction&lt;/li&gt;
&lt;li&gt;Local storage — microSD or equivalent; essential for maintaining data integrity through outages&lt;/li&gt;
&lt;li&gt;IP rating — IP67 minimum for outdoor; check operating temperature range against your environment&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Use Cases Where This Architecture Makes Sense
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Water utilities&lt;/strong&gt; — pressure and flow monitoring across distribution networks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environmental monitoring&lt;/strong&gt; — river level, soil moisture, air quality nodes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agriculture&lt;/strong&gt; — irrigation pump monitoring, tank level sensing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Oil &amp;amp; gas&lt;/strong&gt; — remote well-head pressure and temperature logging&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart cities&lt;/strong&gt; — utility metering, infrastructure health monitoring&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Industrial assets&lt;/strong&gt; — vibration, temperature, pressure on remote plant&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The common thread: locations with no mains power, intermittent maintenance access, and a requirement for continuous data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Genuine multi-year battery life in a cellular IoT logger requires every layer of the hardware stack to work together. The NORVI EC-M12-BC-C6-C-A shows what that looks like in practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;38,000 mAh LiSOCl₂ capacity (2× ER34615H)&lt;/li&gt;
&lt;li&gt;STM32L072 ultra-low-power MCU&lt;/li&gt;
&lt;li&gt;SIMCOM A7672 LTE-M / NB-IoT modem with GSM fallback&lt;/li&gt;
&lt;li&gt;2 × 4–20 mA industrial analog inputs with ADS1115 16-bit ADC&lt;/li&gt;
&lt;li&gt;1 x RS-485&lt;/li&gt;
&lt;li&gt;Built-in sensor excitation (12V/5V/3.3V)&lt;/li&gt;
&lt;li&gt;DS3231 RTC + microSD local storage&lt;/li&gt;
&lt;li&gt;IP67 enclosure, –40°C to +85°C operating range&lt;/li&gt;
&lt;li&gt;CE certified for industrial environments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For more details or to request a datasheet: &lt;a href="https://norvi.io/battery-powered-data-logger/" rel="noopener noreferrer"&gt;norvi.io&lt;/a&gt;&lt;/p&gt;

</description>
      <category>iot</category>
    </item>
    <item>
      <title>Building a Multi-Year Battery Life IoT Data Logger: A Deep Dive into Ultra-Low-Power Design</title>
      <dc:creator>Bhanuka Gamachchige</dc:creator>
      <pubDate>Tue, 10 Feb 2026 08:12:28 +0000</pubDate>
      <link>https://dev.to/norvi_controllers/building-a-multi-year-battery-life-iot-data-logger-a-deep-dive-into-ultra-low-power-design-47gg</link>
      <guid>https://dev.to/norvi_controllers/building-a-multi-year-battery-life-iot-data-logger-a-deep-dive-into-ultra-low-power-design-47gg</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Ever wondered how industrial IoT devices achieve multi-year battery life while transmitting data over cellular networks? In this article, I'll walk you through a real-world implementation of an ultra-low-power industrial data logger that monitors diesel fuel levels remotely and achieves an impressive 3-11 year battery life.&lt;/p&gt;

&lt;p&gt;We'll be using the &lt;a href="https://norvi.io/battery-powered-data-logger/" rel="noopener noreferrer"&gt;EC-M12-BC-C6-C-A&lt;/a&gt;, a battery-powered device with an STM32L0 series microcontroller and a SIM7070 LTE modem – a common setup in industrial monitoring applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Challenge
&lt;/h2&gt;

&lt;p&gt;Remote monitoring systems face a critical tradeoff: you need frequent data updates for real-time insights, but each transmission cycle drains your battery. Cellular modems are particularly power-hungry, with peak currents reaching 840mA during network initialisation.&lt;/p&gt;

&lt;p&gt;The goal? Design a system that can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read analog sensor data accurately&lt;/li&gt;
&lt;li&gt;Transmit to cloud dashboard via 4G/LTE-M&lt;/li&gt;
&lt;li&gt;Operate for years on primary lithium batteries&lt;/li&gt;
&lt;li&gt;Handle harsh industrial environments&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  System Architecture
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[4-20mA Fuel Sensor] → [STM32L0 MCU] → [SIM7070 Modem] → [4G Network] → [ThingsBoard Dashboard]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Hardware Components
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;MCU: STM32L0 &lt;/li&gt;
&lt;li&gt;Cellular: SIM7070 NB-IoT/LTE-M modem&lt;/li&gt;
&lt;li&gt;Power: 2× ER34615H lithium batteries (19,000mAh each)&lt;/li&gt;
&lt;li&gt;Sensor: 4-20mA diesel fuel tank level sensor&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Power Consumption Breakdown
&lt;/h2&gt;

&lt;p&gt;Here's where it gets interesting. The system operates in three distinct stages:&lt;/p&gt;

&lt;h3&gt;
  
  
  Stage 1: Modem Initialization (60 seconds)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Average Current: 17.71mA&lt;/li&gt;
&lt;li&gt;Peak Current: 840mA (during network registration)&lt;/li&gt;
&lt;li&gt;Energy: 3.93 J&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the power-hungry phase. The SIM7070 needs to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Power up the RF circuitry&lt;/li&gt;
&lt;li&gt;Search for cellular networks&lt;/li&gt;
&lt;li&gt;Register with the tower&lt;/li&gt;
&lt;li&gt;Establish GPRS/LTE connection&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Key Design Decision:&lt;/strong&gt; A 1000µF tantalum capacitor placed near the modem acts as a local energy reservoir, smoothing out the 30-40ms current spikes that can exceed 300mA.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stage 2: Sensor Read + Data Transmission (7.5 seconds)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Average Current: 11.24mA&lt;/li&gt;
&lt;li&gt;Energy: 0.31 J&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;During this phase:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Read 4-20mA sensor (fuel level)&lt;/li&gt;
&lt;li&gt;Read battery voltage&lt;/li&gt;
&lt;li&gt;Publish telemetry to ThingsBoard via MQTT&lt;/li&gt;
&lt;li&gt;Disable all peripherals&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Stage 3: Deep Sleep (15 minutes)
&lt;/h3&gt;

&lt;p&gt;Average Current: 1.05µA&lt;br&gt;
Energy: 0.0035 J&lt;/p&gt;

&lt;p&gt;This is where the magic happens. The STM32L0 enters shutdown mode:&lt;/p&gt;

&lt;p&gt;All peripherals powered down&lt;br&gt;
Only RTC remains active&lt;br&gt;
Occasional 2-3mA spikes for RTC maintenance (negligible impact)&lt;/p&gt;

&lt;p&gt;The Math Behind Battery Life&lt;/p&gt;

&lt;p&gt;With 38,000mAh capacity, here's the battery life estimation:&lt;/p&gt;

&lt;p&gt;Average Current Formula:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;I_avg = (I_sleep × T_sleep + I_active × T_active) / (T_sleep + T_active)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Results:&lt;/p&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%2Fjs5npbuk530q40cx5jbv.png" 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%2Fjs5npbuk530q40cx5jbv.png" alt="Current Usage Data EC-M12-BC-C6-C-A" width="800" height="276"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The 4× increase in sleep time gives you a 3.4× improvement in battery life. This demonstrates the power of duty cycling in embedded systems.&lt;/p&gt;
&lt;h2&gt;
  
  
  Software Implementation Highlights
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Low-Power Mode Configuration
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// STM32L0 shutdown mode configuration
#include &amp;lt;STM32LowPower.h&amp;gt;
void setup() {
  Serial.begin(9600);
  LowPower.begin();                   //Initiate low power mode
}
void loop() {
  Serial.println("Entering low power mode...");

  SPI.end();
  delay(1000);
  Wire2.end();
  delay(1000);


  digitalWrite(BOOST_EN, LOW);
  delay(1000);

  // === Fully cut power to GSM ===
  digitalWrite(GSM_POWER, HIGH);  // Depending on your wiring,   HIGH disables modem regulator
  delay(2000);

LowPower.shutdown(900000);
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Efficient MQTT Publishing
&lt;/h3&gt;

&lt;p&gt;The system uses MQTT over LTE for minimal protocol overhead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;void publishTelemetry() {
 int16_t adc0, adc1, adc2, adc3;

  adc1 = ads1.readADC_SingleEnded(1) * mA_Factor;
  adc2 = ads1.readADC_SingleEnded(2);


  float voltage2 = adc2 * 0.125 / 1000.0 / VOLTAGE_DIVIDER_RATIO;

  Serial.print("AIN1: "); Serial.print(adc0); Serial.println("  ");
  Serial.print("AIN2: "); Serial.print(adc1); Serial.println("  ");
  Serial.print("Voltage: "); Serial.print(voltage2); Serial.println("  ");


  float fuel_percent = (adc1 - 4.0) * 100.0 / 16.0;
  fuel_percent = constrain(fuel_percent, 0, 100);

  // Fuel height
  float fuel_level_mm = (fuel_percent / 100.0) * 1000;

  // Fault detection
  bool fuel_sensor_fault = false;
  if (adc1 &amp;lt; 3.6 || adc1 &amp;gt; 22.0) {
    fuel_sensor_fault = true;
  }

  StaticJsonDocument&amp;lt;200&amp;gt; doc;
  doc["fuel_level_percent"] = fuel_percent;
  doc["fuel_level_mm"]      = fuel_level_mm;
  doc["battery_voltage"]    = voltage2;
  doc["fuel_sensor_fault"]  = fuel_sensor_fault;

  String jsonStr;
  serializeJson(doc, jsonStr);

  mqtt.publish("v1/devices/me/telemetry", jsonStr.c_str());
  Serial.print("Published: ");
  Serial.println(jsonStr);

}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Sensor Fault Detection
&lt;/h3&gt;

&lt;p&gt;The system monitors for open/short circuits in the 4-20mA loop:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;lt; 3.8mA: Sensor fault (open circuit)&lt;/li&gt;
&lt;li&gt;&amp;gt; 20.5mA: Sensor fault (short circuit)&lt;/li&gt;
&lt;li&gt;4-20mA: Normal operation&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Real-World Considerations
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Cellular Signal Strength&lt;br&gt;
Poor signal = higher power consumption. The modem will retry connections and transmit at higher power levels, significantly reducing battery life.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sensor Current Impact&lt;br&gt;
The 4-20mA sensor itself consumes power proportional to the measured value. A full tank (20mA) drains more power than an empty tank (4mA).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Temperature Effects&lt;br&gt;
Lithium batteries lose capacity in extreme cold. Consider temperature-compensated battery life calculations for outdoor installations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Network Protocol Choice&lt;br&gt;
NB-IoT and LTE-M are specifically designed for IoT applications with lower power consumption than standard LTE. Choose wisely based on your region's network availability.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Lessons Learned
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Duty cycling is king: The difference between 15-minute and 1-hour intervals is massive (3.36 vs 11.4 years).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Modem initialization dominates: Even though it's only 1 minute per cycle, it consumes 85% of the total energy per transmission.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Hardware matters: The STM32L0's 1.05µA shutdown current makes multi-year operation possible. A standard MCU would drain batteries in months.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Future Improvements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Implement adaptive transmission intervals based on fuel level change rate&lt;/li&gt;
&lt;li&gt;Implement predictive maintenance alerts based on battery voltage trends&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Building ultra-low-power IoT devices requires careful consideration of every milliamp-hour. By combining:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Efficient duty cycling&lt;/li&gt;
&lt;li&gt;Ultra-low-power MCU sleep modes&lt;/li&gt;
&lt;li&gt;Optimized cellular communication&lt;/li&gt;
&lt;li&gt;Smart peripheral management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We achieved a system that can monitor remote industrial assets for over 3 years on battery power alone, with the potential to extend that to 11+ years with less frequent updates.&lt;/p&gt;

&lt;p&gt;The complete source code and detailed setup instructions are available on &lt;a href="https://github.com/IndustrialArduino/EC-M12-BC-C6-C-A" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Check the product (EC-M12-BC-C6-C-A) &lt;a href="https://norvi.io/docs/ec-m12-bc-c6-c-a-datasheet/" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>iot</category>
      <category>automation</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Introducing the NORVI M12-B: 5+ Years of Maintenance-Free Utility Telemetry</title>
      <dc:creator>Bhanuka Gamachchige</dc:creator>
      <pubDate>Thu, 18 Dec 2025 03:24:15 +0000</pubDate>
      <link>https://dev.to/norvi_controllers/introducing-the-norvi-m12-b-5-years-of-maintenance-free-utility-telemetry-5g88</link>
      <guid>https://dev.to/norvi_controllers/introducing-the-norvi-m12-b-5-years-of-maintenance-free-utility-telemetry-5g88</guid>
      <description>&lt;p&gt;NORVI is proud to announce the launch of the M12-B series battery-powered NB-IoT data logger, a breakthrough in remote utility monitoring. Designed for water, gas, and other utility applications, this device combines long-lasting battery life, rugged design, and reliable connectivity, offering a truly maintenance-free solution for developers and operators.&lt;/p&gt;

&lt;h2&gt;
  
  
  Long-Life Battery: Over 5 Years of Continuous Operation
&lt;/h2&gt;

&lt;p&gt;At the heart of the NORVI M12-B is a high-capacity, energy-optimized battery designed to power the device for more than five years without any maintenance. This means utilities and industrial operators can deploy telemetry devices in remote or hard-to-reach locations without worrying about frequent battery replacements. Developers can explore the life estimation to see real-world battery performance data and plan deployments with confidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Power Consumption Analysis: How NORVI Achieves Multi-Year Operation
&lt;/h2&gt;

&lt;p&gt;The long battery life of the M12-B is made possible by careful power optimization across two main stages:&lt;/p&gt;

&lt;h3&gt;
  
  
  Modem Initializing and Data Sending Stage
&lt;/h3&gt;

&lt;p&gt;During the active phase, the device performs critical operations such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Initializing the NB-IoT modem&lt;/li&gt;
&lt;li&gt;Connecting to the network&lt;/li&gt;
&lt;li&gt;Reading the DJLK ultrasonic level sensor via RS-485&lt;/li&gt;
&lt;li&gt;Transmitting data packets to the ThingsBoard cloud over MQTT&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On average, the system draws 31.78 mA for about 70 seconds. The SIM7070 LTE modem generates high-current spikes up to 0.56 A, which are handled by two lithium batteries connected in parallel.&lt;/p&gt;

&lt;p&gt;A 1000 µF tantalum capacitor placed near the modem acts as a local energy reservoir, supplying instantaneous surge current, while the batteries maintain the average load.&lt;/p&gt;

&lt;p&gt;According to the ER34615H(D) lithium battery datasheet, each cell can safely deliver 300 mA pulses for 100 milliseconds every 2 minutes. Observed modem pulses (30–40 milliseconds) stay within this safe operating range, ensuring reliable initialization without battery stress.&lt;/p&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%2Fq2n0a6vq9xfpgdwzrzhy.PNG" 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%2Fq2n0a6vq9xfpgdwzrzhy.PNG" alt="Modem Initializing and Data Sending Stage" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  MCU Sleep Mode (Shutdown Mode)
&lt;/h3&gt;

&lt;p&gt;After data transmission, the MCU enters shutdown mode, powering down most peripherals and system clocks. Only the Real-Time Clock (RTC) remains active to track time.&lt;/p&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%2F820m8eqk5lusvnnty27k.PNG" 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%2F820m8eqk5lusvnnty27k.PNG" alt="MCU Sleep Mode" width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this low-power state, the system draws approximately 1.22 µA for a duration of 15 minutes.&lt;/p&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%2F1o9s454xqr8l23f4r6zn.PNG" 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%2F1o9s454xqr8l23f4r6zn.PNG" alt="Power Consumption Table" width="800" height="205"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Battery Life Estimation
&lt;/h2&gt;

&lt;p&gt;EC-M12-BC-C6-C consists of two 19,000 mAh . So it has a total of 38,000 mAh battery power. As for the above collected data we have obtained battery life estimation when data is sent every 15 minutes and every 1 hour.&lt;/p&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%2F3dy42n4klpbce9mf8w7t.PNG" 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%2F3dy42n4klpbce9mf8w7t.PNG" alt="Battery Life Estimation Table" width="800" height="135"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Below shows the formula to calculate average current and battery life for different intervals which help you to estimate the battery life for your application.&lt;/p&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%2Fa20yvln24leohujhze9c.PNG" 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%2Fa20yvln24leohujhze9c.PNG" alt="Battery Life Estimation Calculation Formular" width="800" height="272"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Overall System Power Profile
&lt;/h2&gt;

&lt;p&gt;The average current flow across the full duty cycle is about 2.39 mA, with a charge consumption of 2.24 C, supporting multi-year operation on battery without maintenance.&lt;/p&gt;

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

&lt;p&gt;The M12-B leverages NB-IoT Cat NB1/NB2 connectivity, providing stable and secure data transmission even in challenging environments. Its deep coverage ensures that basements, underground meters, and remote infrastructure remain connected, while its low-power design ensures long-term operational efficiency.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rugged and Flexible Design
&lt;/h2&gt;

&lt;p&gt;Built for demanding utility environments, the NORVI M12-B is IP67-rated, fully protected against dust and water. It supports a wide range of sensors, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Flow meters and pressure sensors&lt;/li&gt;
&lt;li&gt;Pulse counters&lt;/li&gt;
&lt;li&gt;Analog voltage/current inputs&lt;/li&gt;
&lt;li&gt;RS-485 Modbus RTU devices&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This flexibility allows developers to integrate the device with existing infrastructure or design custom telemetry solutions with ease.&lt;/p&gt;

&lt;h2&gt;
  
  
  Maintenance-Free Deployment
&lt;/h2&gt;

&lt;p&gt;The combination of long-life battery, rugged housing, and NB-IoT connectivity enables true maintenance-free deployments. Once installed, the M12-B operates autonomously for 5+ years, transmitting real-time data without the need for field intervention. This drastically reduces operational costs and human resources, making it ideal for large-scale utility networks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Custom IoT Solutions and White-Labeling
&lt;/h2&gt;

&lt;p&gt;Looking to bring your own IoT product to market? NORVI offers end-to-end &lt;a href="https://norvi.io/iot-custom-product-development-industry-automation-solutions/" rel="noopener noreferrer"&gt;custom IoT product development&lt;/a&gt;, from hardware design to cloud integration. Whether it’s a smart water meter, gas monitoring solution, or industrial controller, our team can turn your ideas into reliable, ready-to-market products with NB-IoT, LoRaWAN, or Wi-Fi connectivity.&lt;/p&gt;

&lt;p&gt;Need a white-label solution? NORVI’s offerings let you launch branded IoT devices quickly, while we handle engineering, design, and manufacturing. Focus on your business, while we provide proven, maintenance-free devices optimized for long-term performance.&lt;/p&gt;

&lt;p&gt;Accelerate your projects further with rapid prototyping, flexible sensor interfaces, and developer-friendly platforms, ensuring seamless integration and faster time-to-market.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The NORVI M12-B NB-IoT Data Logger sets a new standard for utility telemetry. With 5+ years of maintenance-free operation, rugged IP67 design, and optimized power consumption, it empowers developers and businesses to deploy scalable, reliable, and long-term monitoring solutions.&lt;/p&gt;

&lt;p&gt;Explore the life estimation for battery performance and plan your deployments with confidence. NORVI makes smart utility monitoring maintenance-free, developer-friendly, and ready for real-world applications.&lt;/p&gt;

</description>
      <category>news</category>
      <category>automation</category>
    </item>
  </channel>
</rss>
