atlascopco-elektronikon
v1.1.1
Published
Node.js SDK & Client for Atlas Copco Elektronikon Controllers (Air Dryer & Air Compressor) over HTTP / MCProtocol
Downloads
426
Maintainers
Readme
atlascopco-elektronikon
Node.js SDK & Client for Atlas Copco Elektronikon Controllers (Air Dryer & Air Compressor) over direct HTTP CGI / MCProtocol polling.
An ultra-fast, lightweight Node.js library to query live industrial parameters directly from Atlas Copco Elektronikon Web Controllers (MK4, MK5, MKV) without browser scraping or headless Selenium overhead.
Bahasa Indonesia Documentation (README-id.md)
⚡ Key Features
- 🚀 Direct HTTP CGI Communication: Interrogates
/cgi-bin/mkv.cgibinary endpoints directly with response times under 50ms. - 🤖 Automatic Device Profile Detection: Auto-detects whether the connected controller is an Air Dryer (
regulationType === 21) or an Air Compressor (regulationType === 11) and maps parameters accordingly. - 📊 Complete Data Coverage:
- Analog Inputs: Condensing Pressure, Evaporating Pressure, Vessel Pressure, Dryer LAT 1, Temperatures, Ambient Air.
- Counters: Running Hours, Module Hours, Dryer Starts, Fan Starts, VSD RPM Histogram Bands (0-20%, 20-40%, etc.).
- Converters / VSD: Inverter Type (ABB ACS580, NEOS, etc.), Motor Speed (RPM), Current (Amps).
- Machine State: Primary Operating Status (Running, Standby, Dryer Running, Stopped).
- Digital Inputs & Outputs: Fan Motor, Blowoff, High Pressure Dryer, Emergency Stop, Overload, Valves.
- Special Protections: Motor Converter Alarms, High Dewpoint, No Valid Pressure Control.
- Service Plan: Maintenance Intervals, Remaining Hours, Percentage Used.
- Internal Data: Dryer PDP, LAT Setpoint, Relative Humidity, VSD Derating Status.
- 🛡️ Pure Node.js & Zero-Browser Heavy Dependencies: Built on lightweight HTTP requests (Axios) using binary buffer decoders.
📦 Installation
npm install atlascopco-elektronikon🚀 Quick Start
const { AtlasCopco } = require("atlascopco-elektronikon");
(async () => {
// 1. Initialize controller instance (Air Dryer or Air Compressor IP)
const host = "http://10.14.170.29";
const device = new AtlasCopco(host);
// 2. Query all machine parameters in one call (Profile auto-detected)
const data = await device.readAll();
console.log("=== Machine State ===");
console.table(data.machineState);
console.log("\n=== Analog Inputs ===");
console.table(data.analogInputs);
console.log("\n=== Counters ===");
console.table(data.counters);
console.log("\n=== Converters (VSD) ===");
console.table(data.converters);
console.log("\n=== Digital Inputs ===");
console.table(data.digitalInputs);
console.log("\n=== Digital Outputs ===");
console.table(data.digitalOutputs);
console.log("\n=== Special Protections ===");
console.table(data.specialProtections);
console.log("\n=== Service Plan ===");
console.table(data.servicePlan);
console.log("\n=== Internal Data ===");
console.table(data.internalData);
})();📖 API Reference
new AtlasCopco(host, [options])
Creates a new Atlas Copco Elektronikon client instance.
host(string, required): The URL or IP address of the Elektronikon web server (e.g."http://10.14.170.29").options(object, optional):profile(string): Force profile override:"dryer"or"compressor". If omitted, profile is auto-detected.mplMap(object): Custom MPL ID to human-readable name overrides.absAtmPres(number): Absolute atmospheric pressure in mBar (default1013).
Reader Methods
Each method returns a Promise resolving to formatted data structures identical to the Elektronikon Web Interface.
device.readAll([options])
Reads all machine sections sequentially with profile detection.
device.readMachineInfo()
Reads machine identity metadata including Model (FD300V19J, GA75VP_16), Serial Number (ITJ366615), Regulation Type, OS version, and App version.
device.readAnalogInputs([options])
Reads all active analog sensors (pressures, temperatures, dewpoints, humidity).
device.readCounters([options])
Reads operational counters, running hours, start counts, and VSD histogram load percentages.
device.readConverters([options])
Reads active drive/inverter parameters (VSD speed RPM and motor current Amps).
device.readMachineState()
Reads machine status code and primary state description (e.g. "Dryer Running", "Standby", "Running").
device.readDigitalInputs([options])
Reads status of hardware digital input switches.
device.readDigitalOutputs([options])
Reads state of relay outputs (Fan Motor, Valves, Dryer Fan 1).
device.readSpecialProtections([options])
Reads active alarm protection statuses.
device.readServicePlan()
Reads maintenance level intervals, remaining service hours, and overdue flags.
device.readInternalData([options])
Reads internal setpoints and status parameters (PDP, LAT Setpoint, VSD Derating).
🔬 Protocol & Binary Architecture
The Elektronikon web controller communicates over an HTTP POST CGI endpoint (/cgi-bin/mkv.cgi).
Requests are formatted as serialized 6-character hex question items representing PLC memory registers (INDEX + SUBINDEX):
Request: POST /cgi-bin/mkv.cgi
Body: QUESTION=300201300202300203
Response: 07F500801FBC008000320080
│──────││──────││──────│
Sensor1 Sensor2 Sensor3This SDK handles question batching, hexadecimal positional decoding, 16/32-bit integer scaling, unit conversions, and automatic device profiling natively.
📄 License
MIT License © 2026 ANDIN Developer
⚠️ Legal Disclaimer
This is an independent open-source SDK developed solely for IoT system interoperability and monitoring purposes. Atlas Copco® and Elektronikon® are registered trademarks of Atlas Copco AB / Atlas Copco Airpower n.v. This project is not affiliated with, endorsed by, or officially associated with Atlas Copco.
