<?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: Александр Ларионов</title>
    <description>The latest articles on DEV Community by Александр Ларионов (@__b4cc59).</description>
    <link>https://dev.to/__b4cc59</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%2F3933543%2Fc82ace76-d622-4a30-96fa-cf56ea32de5b.jpg</url>
      <title>DEV Community: Александр Ларионов</title>
      <link>https://dev.to/__b4cc59</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/__b4cc59"/>
    <language>en</language>
    <item>
      <title>I Built a Full Industrial SCADA System That Runs From a Single HTML File</title>
      <dc:creator>Александр Ларионов</dc:creator>
      <pubDate>Fri, 15 May 2026 16:24:08 +0000</pubDate>
      <link>https://dev.to/__b4cc59/i-built-a-full-industrial-scada-system-that-runs-from-a-single-html-file-4lcj</link>
      <guid>https://dev.to/__b4cc59/i-built-a-full-industrial-scada-system-that-runs-from-a-single-html-file-4lcj</guid>
      <description>&lt;h2&gt;
  
  
  How a single HTML file replaces million-dollar SCADA software
&lt;/h2&gt;

&lt;p&gt;After 20+ years in industrial automation — working with PLCs, RTUs, SCADA systems, and digital substations — I was frustrated. Every SCADA platform I used required:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Heavy installation (2-4 GB)&lt;/li&gt;
&lt;li&gt;Dedicated server infrastructure&lt;/li&gt;
&lt;li&gt;Annual license fees ($5,000-50,000/year)&lt;/li&gt;
&lt;li&gt;Vendor lock-in&lt;/li&gt;
&lt;li&gt;Windows-only deployment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I built &lt;strong&gt;BitSCADA&lt;/strong&gt; — a complete industrial SCADA system that runs entirely from a &lt;strong&gt;single HTML file&lt;/strong&gt;. Open it in Chrome, Firefox, or Safari — and you have a fully functional SCADA with real-time visualization, function blocks, and industrial protocol support.&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%2Faxgz5418oa5gjfxzpj1u.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%2Faxgz5418oa5gjfxzpj1u.png" alt="BitSCADA Overview"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What makes it unique?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Literally one file
&lt;/h3&gt;

&lt;p&gt;The entire SCADA — graphic editor, runtime engine, 53 function blocks, 65 graphic elements — lives inside a single HTML file (~240 KB online, ~3 MB offline with embedded React). No installation. No server. No database server (SQLite is built into the Gateway).&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Full IEC 61850 support in a browser
&lt;/h3&gt;

&lt;p&gt;This is the part I'm most proud of. &lt;strong&gt;No other browser-based SCADA supports IEC 61850.&lt;/strong&gt; BitSCADA implements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MMS client&lt;/strong&gt; — read/write data objects, datasets, reports&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GOOSE subscriber&lt;/strong&gt; — real-time event subscription&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sampled Values receiver&lt;/strong&gt; — phasor measurement streams&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This means you can connect to digital substations directly from your browser.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. 9 industrial protocols
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IEC 61850 (MMS, GOOSE, Sampled Values)
OPC UA (browsing, subscriptions, read/write)
OPC DA (via COM/DCOM bridge)
Modbus TCP (holding/input registers, coils)
MQTT
SNMP
REST API (15 endpoints)
WebSocket (real-time)
Custom protocols via Python Gateway
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. 53 function blocks
&lt;/h3&gt;

&lt;p&gt;Not just visualization — BitSCADA has a complete &lt;strong&gt;FBD (Function Block Diagram) engine&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Logic: AND, OR, NOT, XOR, SR flip-flop, edge detectors&lt;/li&gt;
&lt;li&gt;Math: add, subtract, multiply, divide, abs, min, max, formula&lt;/li&gt;
&lt;li&gt;Timers: on-delay, off-delay, pulse&lt;/li&gt;
&lt;li&gt;Counters: up, down, up/down with preset&lt;/li&gt;
&lt;li&gt;PID controller with anti-windup&lt;/li&gt;
&lt;li&gt;Filters: exponential, sliding window, RMS&lt;/li&gt;
&lt;li&gt;Comparators, limiters, multiplexers&lt;/li&gt;
&lt;li&gt;Database write, alarm generators, signal generators&lt;/li&gt;
&lt;/ul&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%2Fgljk5sl517nprhz7qqw9.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%2Fgljk5sl517nprhz7qqw9.png" alt="Runtime Mode"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5. 65 graphic elements
&lt;/h3&gt;

&lt;p&gt;Drag &amp;amp; drop from the palette:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Process equipment:&lt;/strong&gt; pumps, motors, fans, compressors, conveyors&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Valves:&lt;/strong&gt; gate valves, ball valves, check valves, control valves&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vessels:&lt;/strong&gt; tanks, columns, separators, heat exchangers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Piping:&lt;/strong&gt; horizontal/vertical pipes, elbows, tees, reducers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Electrical:&lt;/strong&gt; contactors, fuses, transformers, grounding&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sensors:&lt;/strong&gt; pressure, temperature, level, flow meters&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Indicators:&lt;/strong&gt; gauges, bar charts, traffic lights, lamps&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Displays:&lt;/strong&gt; trends, sliders, buttons, switches&lt;/li&gt;
&lt;/ul&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%2Femkelc195edgffbccpvy.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%2Femkelc195edgffbccpvy.png" alt="Mimic Diagram"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;The system has two components:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Browser (any modern browser)
└── BitSCADA HTML file
        ├── Graphic Editor (drag &amp;amp; drop, multi-page, popups)
        ├── Runtime (fullscreen, password protection, alarms)
        ├── Function Block Engine (53 blocks, 100ms cycle)
        └── WebSocket ←→ SCADA Gateway (Python)
                            ├── IEC 61850 (asyncua + custom)
                            ├── OPC UA (asyncua library)
                            ├── Modbus TCP (pymodbus)
                            ├── MQTT / SNMP
                            ├── SQLite Database
                            └── REST API (15 endpoints)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;strong&gt;Browser&lt;/strong&gt; handles all visualization and logic. The &lt;strong&gt;Python Gateway&lt;/strong&gt; handles protocol communication and database storage. They communicate via WebSocket.&lt;/p&gt;

&lt;h2&gt;
  
  
  Performance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Scan rate&lt;/td&gt;
&lt;td&gt;10,000 tags/sec&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Update cycle&lt;/td&gt;
&lt;td&gt;100 ms minimum&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parallel threads&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browser tabs&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Startup time&lt;/td&gt;
&lt;td&gt;&amp;lt; 3 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;File size&lt;/td&gt;
&lt;td&gt;240 KB (online) / 3 MB (offline)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Tech stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; React 18, JSX, Babel (transpiled in-browser)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Python 3.10+, asyncio, aiohttp&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protocols:&lt;/strong&gt; asyncua (OPC UA), pymodbus, custom IEC 61850&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database:&lt;/strong&gt; SQLite3&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build:&lt;/strong&gt; Custom Python build script, Base64 encoding, XOR protection&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The build process
&lt;/h2&gt;

&lt;p&gt;One thing I'm particularly proud of is the build system. The JSX source (~175 KB) gets:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Base64 encoded&lt;/li&gt;
&lt;li&gt;SHA256 integrity hash computed&lt;/li&gt;
&lt;li&gt;XOR-encrypted author watermark embedded&lt;/li&gt;
&lt;li&gt;Unique Build ID and License Key generated&lt;/li&gt;
&lt;li&gt;Everything injected into the HTML template&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The result is a self-contained, tamper-protected HTML file that works offline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it yourself
&lt;/h2&gt;

&lt;p&gt;🌐 &lt;strong&gt;&lt;a href="https://larionovavi-stack.github.io/bitscada/" rel="noopener noreferrer"&gt;Live Demo &amp;amp; Documentation&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;📥 &lt;strong&gt;&lt;a href="https://github.com/larionovavi-stack/bitscada/releases/download/v1.0-en/BitSCADA_Demo_EN.zip" rel="noopener noreferrer"&gt;Download Free Demo&lt;/a&gt;&lt;/strong&gt; — 2-hour trial, no registration&lt;/p&gt;

&lt;p&gt;💻 &lt;strong&gt;&lt;a href="https://github.com/larionovavi-stack/bitscada" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;💰 &lt;strong&gt;&lt;a href="https://avlarion.gumroad.com/l/mcmeyl" rel="noopener noreferrer"&gt;Buy Full Source Code&lt;/a&gt;&lt;/strong&gt; — complete source with build system&lt;/p&gt;

&lt;h2&gt;
  
  
  About me
&lt;/h2&gt;

&lt;p&gt;I'm an industrial automation engineer (IACS/SCADA) with 20+ years of experience:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Process automation systems design and deployment&lt;/li&gt;
&lt;li&gt;PLC/RTU programming and commissioning&lt;/li&gt;
&lt;li&gt;Network equipment configuration (Cisco, MikroTik, Huawei)&lt;/li&gt;
&lt;li&gt;SCADA/HMI development and integration&lt;/li&gt;
&lt;li&gt;IEC 61850 digital substation projects&lt;/li&gt;
&lt;li&gt;Technical documentation per industrial standards (GOST, IEC)&lt;/li&gt;
&lt;li&gt;Full-stack development (Python, JavaScript, React)&lt;/li&gt;
&lt;li&gt;AI/ML engineering (PyTorch, custom model training)&lt;/li&gt;
&lt;li&gt;AutoCAD, electrical schematics design&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I built BitSCADA because I needed a lightweight, portable SCADA that I could deploy anywhere — from a USB stick at a remote substation to a tablet on the factory floor.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next?
&lt;/h2&gt;

&lt;p&gt;I'm currently working on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Genesis-1&lt;/strong&gt; — an AI model trained on 32 IT specializations that can autonomously manage infrastructure&lt;/li&gt;
&lt;li&gt;Expanding BitSCADA protocol support&lt;/li&gt;
&lt;li&gt;Mobile-optimized runtime&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;What do you think? Would you use a browser-based SCADA in your projects? Let me know in the comments!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>scada</category>
      <category>javascript</category>
      <category>python</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
