
Security News
Microsoft Releases Open Source Toolkit for AI Agent Runtime Security
Microsoft has released an open source toolkit for enforcing runtime security policies on AI agents as adoption accelerates faster than governance controls.
node-red-ermangizer-modbus
Advanced tools
A custom Node-RED node for decoding ERMANGIZER frequency converter Modbus RTU protocol messages according to the official protocol specification.
The node decodes all registers defined in the ERMANGIZER Modbus RTU protocol:
output_frequency - Current output frequency (0.1 Hz)output_current - Current output current (0.1 A)input_voltage - Current input voltage (V)temperature - Current temperature (°C)pressure - Actual pressure value (0.01 bar)error_code - Error code with descriptionsstatus_code - Status code with bit-level decodingfactory_reset - Restore factory settingsinitial_pressure_diff - Initial pressure difference (0.01 bar)water_shortage_pressure - Pressure value during water shortage (0.01 bar)water_shortage_time - Water shortage time (s)carrier_frequency - Carrier frequency selectionaccel_decel_time - Acceleration and deceleration time (0.1 ms)pressure_tolerance - Allowable pressure error (0.01 bar)min_shutdown_freq - Minimum shutdown frequency (0.1 Hz)continuous_operation - Enable continuous operationmeasurement_range - Measurement range selection (bar)overheat_setting - Overheat setting (°C)direction_setting - Set rotation directionlocal_address - Local Modbus addressset_pressure - Set pressure value (0.01 BAR)status_command - Command status codecd ~/.node-red
npm install node-red-ermangizer-modbus
Then restart Node-RED.
The node accepts three input formats:
// From serial port or TCP Modbus connection
msg.payload = buffer; // Raw Buffer object
// Hexadecimal string (spaces optional)
msg.payload = "3f0300010016911a";
// or
msg.payload = "3f 03 00 01 00 16 91 1a";
// Array of byte values
msg.payload = [0x3f, 0x03, 0x00, 0x01, 0x00, 0x16, 0x91, 0x1a];
{
"slave_address": 63,
"function_code": 3,
"function_name": "Read Holding Registers",
"raw_data": "3F0300010016911A",
"timestamp": "2024-01-15T10:30:00.000Z",
"registers": {
"output_frequency": {
"value": 50.0,
"raw_value": 500,
"unit": "0.1 Hz",
"description": "Current output frequency value",
"address": 1,
"read_only": true
},
"error_code": {
"code": 0,
"description": "No error",
"raw_value": 0
}
// ... more registers
}
}
{
"slave": 63,
"function": "Read Holding Registers",
"timestamp": "2024-01-15T10:30:00.000Z",
"output_frequency": 50.0,
"error_code": 0,
"temperature": 45,
"pressure": 2.5
// ... more register values
}
// Input message (hex string example)
msg.payload = "3f03002c3f032c01f4000100ea0020000000000001000000000001001e000a001e004c0014000a00f00000000600550000003f38ee";
// Output (simplified format):
{
"slave": 63,
"function": "Read Holding Registers",
"output_frequency": 50.0,
"output_current": 5.0,
"input_voltage": 234,
"temperature": 32,
"pressure": 0.0,
"error_code": 0,
"status_code": 0
}
// Error response example
msg.payload = "3f8302a13d";
// Output:
{
"slave_address": 63,
"function_code": 131,
"function_name": "Error Response",
"error": {
"code": 2,
"description": "Modbus Error: Illegal Data Address",
"modbus_error": true
}
}
The node decodes all ERMANGIZER error codes:
| Code | Description |
|---|---|
| 0 | No error |
| 1 | Equipment overcurrent, short circuit |
| 2 | Overload |
| 3 | Low pressure (no pressure sensor) |
| 4 | Overpressure |
| 5 | Low pressure |
| 6 | Overpressure |
| 7 | Phase loss (power phase loss) |
| 8 | Overheating |
| 9 | Insufficient power |
| 10 | Software current overload |
| 11 | Communication failure |
| 12 | Default |
| 13 | Motor locked |
| 14 | Motor phase loss |
| 15 | Motor overspeed |
| 16 | Memory failure (FLASH failure) |
The status register (0x0007) is decoded into individual bits:
{
"water_shortage": false, // Bit 0: 0=no water shortage, 1=water shortage
"running": true, // Bit 1: 0=stopped, 1=running
"raw_value": 2 // Original register value
}
If you're modifying the TypeScript source:
Install dependencies:
npm install
Build the project:
npm run build
For development with auto-rebuild:
npm run dev
"CRC check failed"
"Message too short"
"Unsupported input type"
Node not appearing in palette
Enable Node-RED debug output to see detailed processing information:
This node implements the ERMANGIZER Modbus RTU protocol as specified in:
protocol_modbus_eg-g-220-03.pdf https://www.ermangizer.ru/image/pdf/protocol_modbus_eg-g-220-03.pdfThis project is licensed under the MIT License.
For issues and feature requests, please contact the maintainers or refer to the ERMANGIZER protocol documentation.
FAQs
Node-RED node for ERMANGIZER Modbus RTU protocol decoding
We found that node-red-ermangizer-modbus demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Microsoft has released an open source toolkit for enforcing runtime security policies on AI agents as adoption accelerates faster than governance controls.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.