<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>IIoT on blanpa</title><link>https://blanpa.github.io/series/iiot/</link><description>Recent content in IIoT on blanpa</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>© 2026 blanpa</copyright><lastBuildDate>Sat, 18 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blanpa.github.io/series/iiot/index.xml" rel="self" type="application/rss+xml"/><item><title>Securing OT Networks — The Purdue Model, OPC-UA Encryption &amp; Segmentation</title><link>https://blanpa.github.io/blog/securing-ot-networks-opcua-purdue/</link><pubDate>Sat, 18 Jul 2026 00:00:00 +0000</pubDate><guid>https://blanpa.github.io/blog/securing-ot-networks-opcua-purdue/</guid><description>&lt;p&gt;Every other post in this series has been about &lt;em&gt;connecting&lt;/em&gt; things — &lt;a href="https://blanpa.github.io/blog/siemens-s7-opcua-node-red/" &gt;PLCs to dashboards&lt;/a&gt;, &lt;a href="https://blanpa.github.io/blog/mqtt-vs-sparkplug-vs-nats-vs-opcua/" &gt;protocols to brokers&lt;/a&gt;, &lt;a href="https://blanpa.github.io/blog/nats-edge-to-cloud-pipeline/" &gt;edge to cloud&lt;/a&gt;. This one is about the uncomfortable flip side: every connection you add is also an attack surface. Industrial systems were designed in an era of physical isolation, and we&amp;rsquo;ve spent the last decade enthusiastically networking them without always asking what that means for security. This is the post I wish more IIoT developers read &lt;em&gt;before&lt;/em&gt; their first deployment, not after their first incident.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://blanpa.github.io/blog/securing-ot-networks-opcua-purdue/featured.webp"/></item><item><title>Modbus in Node-RED — The 47-Year-Old Protocol Everyone Still Uses</title><link>https://blanpa.github.io/blog/modbus-node-red/</link><pubDate>Sat, 11 Jul 2026 00:00:00 +0000</pubDate><guid>https://blanpa.github.io/blog/modbus-node-red/</guid><description>&lt;p&gt;I&amp;rsquo;ve written about &lt;a href="https://blanpa.github.io/blog/siemens-s7-opcua-node-red/" &gt;OPC-UA&lt;/a&gt;, &lt;a href="https://blanpa.github.io/blog/allen-bradley-ethernet-ip-node-red/" &gt;EtherNet/IP&lt;/a&gt;, and &lt;a href="https://blanpa.github.io/blog/mqtt-vs-sparkplug-vs-nats-vs-opcua/" &gt;a whole zoo of modern protocols&lt;/a&gt;. But if I had to bet on which protocol you&amp;rsquo;ll actually encounter most often on a real shop floor, my money is on the oldest one in the room: &lt;strong&gt;Modbus&lt;/strong&gt;. Designed by Modicon in 1979, it&amp;rsquo;s on power meters, VFDs, temperature controllers, flow meters, HVAC gear, and ten thousand other devices. It&amp;rsquo;s gloriously simple, slightly maddening, and absolutely everywhere. Here&amp;rsquo;s how to talk to it from Node-RED.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://blanpa.github.io/blog/modbus-node-red/featured.webp"/></item><item><title>Talking to Allen-Bradley PLCs from Node-RED — EtherNet/IP &amp; CIP Explained</title><link>https://blanpa.github.io/blog/allen-bradley-ethernet-ip-node-red/</link><pubDate>Sat, 27 Jun 2026 00:00:00 +0000</pubDate><guid>https://blanpa.github.io/blog/allen-bradley-ethernet-ip-node-red/</guid><description>&lt;p&gt;I&amp;rsquo;ve written about getting a &lt;a href="https://blanpa.github.io/blog/siemens-s7-opcua-node-red/" &gt;Siemens S7 onto a dashboard via OPC-UA&lt;/a&gt;. But walk into a North American plant and you&amp;rsquo;re far more likely to find an Allen-Bradley PLC — a ControlLogix in the big cells, a CompactLogix on the smaller machines, maybe a dusty SLC 500 still running a line nobody dares touch. And Allen-Bradley doesn&amp;rsquo;t speak OPC-UA out of the box. It speaks &lt;strong&gt;EtherNet/IP&lt;/strong&gt; and &lt;strong&gt;CIP&lt;/strong&gt;. This is the guide to bridging that gap with Node-RED.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://blanpa.github.io/blog/allen-bradley-ethernet-ip-node-red/featured.webp"/></item><item><title>Apache Kafka on the Shop Floor — Event Streaming for Manufacturing</title><link>https://blanpa.github.io/blog/kafka-shop-floor-event-streaming/</link><pubDate>Sat, 20 Jun 2026 00:00:00 +0000</pubDate><guid>https://blanpa.github.io/blog/kafka-shop-floor-event-streaming/</guid><description>&lt;p&gt;Kafka has a reputation problem in manufacturing. Half the people I talk to think it&amp;rsquo;s the answer to everything; the other half think it&amp;rsquo;s a heavyweight cloud thing that has no business near a PLC. Both are wrong. Kafka is a fantastic tool for a &lt;em&gt;specific&lt;/em&gt; set of shop-floor problems — and a terrible choice for the rest. This post is about telling the two apart, and then actually wiring Kafka into a Node-RED stack once you&amp;rsquo;ve decided it fits.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://blanpa.github.io/blog/kafka-shop-floor-event-streaming/featured.webp"/></item><item><title>Lessons Learned: Publishing 7 npm Packages for Industrial IoT</title><link>https://blanpa.github.io/blog/lessons-learned-publishing-npm-packages/</link><pubDate>Sat, 23 May 2026 00:00:00 +0000</pubDate><guid>https://blanpa.github.io/blog/lessons-learned-publishing-npm-packages/</guid><description>&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Update (July 2026):&lt;/strong&gt; the family has since grown to eight packages — &lt;a href="https://github.com/blanpa/node-red-contrib-kafka-suite" target="_blank" rel="noreferrer"&gt;node-red-contrib-kafka-suite&lt;/a&gt; joined after this post was written. Everything below still applies.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;Since November 2025 I&amp;rsquo;ve published seven npm packages for Node-RED, all targeting the IIoT space. Some took off, some needed multiple rewrites, and all taught me things I couldn&amp;rsquo;t have learned from tutorials alone. This post is the honest rundown: what worked, what didn&amp;rsquo;t, and what I&amp;rsquo;d do differently.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://blanpa.github.io/blog/lessons-learned-publishing-npm-packages/featured.webp"/></item><item><title>From Process Engineer to IIoT Developer — My Career Switch</title><link>https://blanpa.github.io/blog/from-process-engineer-to-iiot-developer/</link><pubDate>Sat, 16 May 2026 00:00:00 +0000</pubDate><guid>https://blanpa.github.io/blog/from-process-engineer-to-iiot-developer/</guid><description>&lt;p&gt;Two years ago, I was a process engineer in a manufacturing plant. I wore steel-toed boots, carried a clipboard, and spent my days optimizing cycle times and reducing scrap rates. Today, I build Node-RED modules for industrial IoT, maintain open-source packages, and write code that connects factory machines to dashboards and analytics systems.&lt;/p&gt;
&lt;p&gt;This is the story of how I switched — what pushed me to leave, what I had to learn, what transferred surprisingly well, and what I&amp;rsquo;d tell someone considering the same move.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://blanpa.github.io/blog/from-process-engineer-to-iiot-developer/featured.webp"/></item><item><title>CI/CD for Node-RED Flows — Automated Testing and Deployment</title><link>https://blanpa.github.io/blog/cicd-node-red-flows/</link><pubDate>Sat, 09 May 2026 00:00:00 +0000</pubDate><guid>https://blanpa.github.io/blog/cicd-node-red-flows/</guid><description>&lt;p&gt;Node-RED is fantastic for building IIoT integrations quickly. Drag, drop, wire, deploy — you have a working MQTT-to-database pipeline in minutes. But then comes the question every production deployment forces you to answer: &lt;em&gt;how do I version this? How do I test it? How do I deploy it without clicking buttons?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The answer is treating Node-RED flows as code — putting them in Git, writing automated tests, building Docker images, and deploying through CI/CD pipelines. This post shows the complete setup, from repo structure to GitHub Actions.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://blanpa.github.io/blog/cicd-node-red-flows/featured.webp"/></item><item><title>CAN Bus Reverse Engineering with Node-RED and Raspberry Pi</title><link>https://blanpa.github.io/blog/can-bus-reverse-engineering-node-red/</link><pubDate>Sat, 02 May 2026 00:00:00 +0000</pubDate><guid>https://blanpa.github.io/blog/can-bus-reverse-engineering-node-red/</guid><description>&lt;p&gt;If you&amp;rsquo;ve ever stared at a VFD or servo drive and thought &amp;ldquo;I know this thing has useful data — I just can&amp;rsquo;t get to it,&amp;rdquo; CAN bus is probably the answer. Most industrial drives, controllers, and even some sensors speak CAN internally. With a Raspberry Pi, a $15 CAN hat, and some patience, you can tap into that data stream and make it visible in Node-RED.&lt;/p&gt;
&lt;p&gt;This post walks through the entire process: hardware setup, Linux socketcan configuration, traffic sniffing, frame decoding, Python scripting, and finally Node-RED integration for real-time dashboards.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://blanpa.github.io/blog/can-bus-reverse-engineering-node-red/featured.webp"/></item><item><title>Siemens S7 + OPC-UA + Node-RED — From PLC to Dashboard in 30 Minutes</title><link>https://blanpa.github.io/blog/siemens-s7-opcua-node-red/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><guid>https://blanpa.github.io/blog/siemens-s7-opcua-node-red/</guid><description>&lt;p&gt;This is the tutorial I wish I had when I first tried connecting a Siemens PLC to Node-RED. It took me two days of frustration — fighting with certificates, firewall rules, and data type mismatches — before I got a single value to appear on a dashboard. With this guide, you&amp;rsquo;ll do it in 30 minutes.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;Prerequisites
 &lt;div id="prerequisites" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#prerequisites" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Before starting, make sure you have:&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://blanpa.github.io/blog/siemens-s7-opcua-node-red/featured.webp"/></item><item><title>Docker vs K3s on the Shop Floor — Edge Deployment Strategies</title><link>https://blanpa.github.io/blog/docker-vs-k3s-edge-deployment/</link><pubDate>Sat, 18 Apr 2026 00:00:00 +0000</pubDate><guid>https://blanpa.github.io/blog/docker-vs-k3s-edge-deployment/</guid><description>&lt;p&gt;Containers on the shop floor used to be a hard sell. &amp;ldquo;Why not just install the software directly?&amp;rdquo; plant engineers would ask. After rolling back a failed manual update at 2 AM for the third time, the answer becomes obvious: reproducibility, isolation, and the ability to roll back in seconds instead of hours.&lt;/p&gt;
&lt;p&gt;The real question isn&amp;rsquo;t &lt;em&gt;whether&lt;/em&gt; to use containers in industrial environments — it&amp;rsquo;s whether to use &lt;strong&gt;Docker Compose&lt;/strong&gt; or go all in with &lt;strong&gt;K3s&lt;/strong&gt; (lightweight Kubernetes). I&amp;rsquo;ve deployed both. Here&amp;rsquo;s when each makes sense.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://blanpa.github.io/blog/docker-vs-k3s-edge-deployment/featured.webp"/></item><item><title>REST vs OPC-UA vs GraphQL for Manufacturing Data</title><link>https://blanpa.github.io/blog/rest-vs-opcua-vs-graphql-manufacturing/</link><pubDate>Sat, 11 Apr 2026 00:00:00 +0000</pubDate><guid>https://blanpa.github.io/blog/rest-vs-opcua-vs-graphql-manufacturing/</guid><description>&lt;p&gt;&amp;ldquo;Just give me the temperature and status of that machine&amp;rdquo; — simple enough, right? But the &lt;em&gt;how&lt;/em&gt; matters enormously. Do you poll a REST endpoint? Subscribe via OPC-UA? Query a GraphQL schema? Each paradigm makes different trade-offs between simplicity, performance, and expressiveness, and in manufacturing those trade-offs have real consequences.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve used all three in production factories. Here&amp;rsquo;s what I&amp;rsquo;ve learned.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;The Same Query, Three Ways
 &lt;div id="the-same-query-three-ways" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-same-query-three-ways" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s start with a concrete example. We want to get the current temperature and status of a CNC machine with ID &lt;code&gt;cnc-001&lt;/code&gt;.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://blanpa.github.io/blog/rest-vs-opcua-vs-graphql-manufacturing/featured.webp"/></item><item><title>Node-RED vs Kepware vs Ignition — IIoT Platforms Compared</title><link>https://blanpa.github.io/blog/node-red-vs-kepware-vs-ignition/</link><pubDate>Sat, 04 Apr 2026 00:00:00 +0000</pubDate><guid>https://blanpa.github.io/blog/node-red-vs-kepware-vs-ignition/</guid><description>&lt;p&gt;Choosing an IIoT platform is one of those decisions that haunts you for years. Pick the wrong one, and you&amp;rsquo;re locked into expensive licenses, limited integrations, or a tool that doesn&amp;rsquo;t scale. Pick the right one — or the right &lt;em&gt;combination&lt;/em&gt; — and you&amp;rsquo;ve built a foundation that grows with your factory.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve worked with all three platforms extensively: Node-RED as my daily driver for data transformation, Kepware as the connectivity workhorse, and Ignition as the SCADA powerhouse. Here&amp;rsquo;s my honest comparison.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://blanpa.github.io/blog/node-red-vs-kepware-vs-ignition/featured.webp"/></item><item><title>Building a NATS-based Edge-to-Cloud Pipeline for Industrial IoT</title><link>https://blanpa.github.io/blog/nats-edge-to-cloud-pipeline/</link><pubDate>Sat, 21 Mar 2026 00:00:00 +0000</pubDate><guid>https://blanpa.github.io/blog/nats-edge-to-cloud-pipeline/</guid><description>&lt;p&gt;MQTT got us far. Every IIoT project I&amp;rsquo;ve worked on started with Mosquitto, some topics, and QoS 1. It works — until you need message replay, exactly-once delivery, or synchronizing configuration across 30 factory sites. Then you start bolting on Kafka for persistence, Redis for key-value state, and a custom sync mechanism for edge-to-cloud. Three systems to operate, three failure modes to debug at 2 AM.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NATS&lt;/strong&gt; replaces all three. It&amp;rsquo;s a single binary that handles pub/sub messaging, persistent streams (JetStream), key-value stores, and edge-to-cloud synchronization (leaf nodes) — all with built-in clustering and zero external dependencies.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://blanpa.github.io/blog/nats-edge-to-cloud-pipeline/featured.webp"/></item><item><title>Running ML Models at the Edge with ONNX and Node-RED</title><link>https://blanpa.github.io/blog/ml-inference-edge-onnx-node-red/</link><pubDate>Sat, 14 Mar 2026 00:00:00 +0000</pubDate><guid>https://blanpa.github.io/blog/ml-inference-edge-onnx-node-red/</guid><description>&lt;p&gt;Every time I hear &amp;ldquo;just send the data to the cloud for inference,&amp;rdquo; I think about the CNC spindle that threw a bearing 200 ms after the anomaly appeared. The round-trip to AWS takes 150 ms on a good day — and that&amp;rsquo;s assuming the factory Wi-Fi doesn&amp;rsquo;t drop the packet. By the time the cloud responds, the spindle is already damaged.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Edge inference&lt;/strong&gt; means running ML models directly on the device next to the machine. No cloud latency. No bandwidth costs. No dependency on internet connectivity. This post covers how to train a model, export it to ONNX, and deploy it on an edge device through Node-RED.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://blanpa.github.io/blog/ml-inference-edge-onnx-node-red/featured.webp"/></item><item><title>Predictive Maintenance with Node-RED — From Vibration Sensor to Health Score</title><link>https://blanpa.github.io/blog/predictive-maintenance-node-red/</link><pubDate>Sat, 07 Mar 2026 00:00:00 +0000</pubDate><guid>https://blanpa.github.io/blog/predictive-maintenance-node-red/</guid><description>&lt;p&gt;A bearing doesn&amp;rsquo;t fail without warning. It screams — in frequencies you can&amp;rsquo;t hear. The trick is listening at the right frequency, recognizing the pattern, and acting before the $80 bearing destroys the $40,000 spindle.&lt;/p&gt;
&lt;p&gt;This post walks through building a &lt;strong&gt;complete predictive maintenance pipeline&lt;/strong&gt; in Node-RED: from raw accelerometer data to a health score your maintenance team can act on.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;Why Predictive Maintenance?
 &lt;div id="why-predictive-maintenance" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#why-predictive-maintenance" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Three maintenance strategies exist. Only one saves money without accepting unplanned downtime:&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://blanpa.github.io/blog/predictive-maintenance-node-red/featured.webp"/></item><item><title>i3x — The Open Manufacturing API That Breaks Data Silos</title><link>https://blanpa.github.io/blog/i3x-open-manufacturing-api/</link><pubDate>Thu, 05 Mar 2026 00:00:00 +0000</pubDate><guid>https://blanpa.github.io/blog/i3x-open-manufacturing-api/</guid><description>&lt;p&gt;Every factory I&amp;rsquo;ve worked in has the same problem: data is everywhere, but accessible nowhere. The historian speaks SQL. The MES has a SOAP API. The SCADA system uses OPC-UA. The new IoT platform wants REST. Connecting all of them means writing custom adapters for each combination — and maintaining them forever.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;i3x&lt;/strong&gt; changes this. It&amp;rsquo;s an open REST API specification that gives you &lt;strong&gt;one interface to all manufacturing data&lt;/strong&gt;, regardless of what platform stores it. I built a &lt;a href="https://github.com/blanpa/node-red-contrib-i3x" target="_blank" rel="noreferrer"&gt;Node-RED integration&lt;/a&gt; for it, and in this post I&amp;rsquo;ll explain what i3x is, how it works, and why it matters.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://blanpa.github.io/blog/i3x-open-manufacturing-api/featured.webp"/></item><item><title>MQTT vs Sparkplug B vs NATS vs OPC-UA — Which Protocol for Industrial IoT?</title><link>https://blanpa.github.io/blog/mqtt-vs-sparkplug-vs-nats-vs-opcua/</link><pubDate>Thu, 05 Mar 2026 00:00:00 +0000</pubDate><guid>https://blanpa.github.io/blog/mqtt-vs-sparkplug-vs-nats-vs-opcua/</guid><description>&lt;p&gt;Choosing the right messaging protocol for an Industrial IoT project is one of the most impactful architectural decisions you&amp;rsquo;ll make. Pick the wrong one and you&amp;rsquo;ll spend months working around its limitations. Pick the right one and data flows effortlessly from sensor to cloud.&lt;/p&gt;
&lt;p&gt;In this post I compare &lt;strong&gt;MQTT&lt;/strong&gt;, &lt;strong&gt;Sparkplug B&lt;/strong&gt;, &lt;strong&gt;NATS&lt;/strong&gt;, and &lt;strong&gt;OPC-UA&lt;/strong&gt; — four protocols I work with daily in industrial environments. No theoretical fluff — just practical differences, real trade-offs, and concrete examples.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://blanpa.github.io/blog/mqtt-vs-sparkplug-vs-nats-vs-opcua/featured.webp"/></item></channel></rss>