Full Modbus/TCP integration for ComAp InteliLite / IL-NT generator controllers. 128 entities, 49 registers, alarm decoding, phase imbalance, an alert tier system, and a self-test suite.
There does not appear to be another ComAp integration for Home Assistant.
Unofficial. Not affiliated with, endorsed by, or supported by ComAp a.s. Developed against IL-NT-AMF26-P. Read Safety before you enable any write. Generators are dangerous machinery.
Do not trust register 8455 for breaker position. On the hardware tested it returned a constant value regardless of whether the breaker was open or closed, and the MCB feedback bit in the binary input word was no better.
Those are the two signals you would naturally reach for to detect a generator running without feeding the load, and on this controller neither works. A register that returns a plausible constant is worse than one that errors, because the monitor you build on it reports healthy forever.
docs/04-breaker-detection.md is how to detect that condition anyway, by keying off the downstream load rather than the breaker.
Engine: RPM, battery voltage, alternator D+, water temperature, oil pressure, fuel level, run hours, number of starts, maintenance hours due.
Generator output: per-phase voltage L-N and L-L, per-phase current, per-phase kW, total kW, kVA, kVAr, power factor, frequency, energy and reactive energy counters, earth fault current.
Mains: per-phase voltage, frequency.
State: controller mode (OFF / MAN / AUT / TEST), engine state (13 values), breaker state, active alarm count, red and yellow alarm flags decoded individually, binary input and output words.
Derived: phase current imbalance and phase voltage imbalance (the controller trips at 50%, so this gives early warning), a rolled-up health summary, and a delivering flag that replaces the unreliable breaker feedback.
Alerting: a two-tier system. Two conditions are iOS critical and bypass Do Not Disturb. Everything else is a normal notification. See docs/06-alerting.md.
Control, optional: fault reset, horn reset, engine start and stop, ECU fault reset, mode change. All writes, all off by default in the guidance here. See docs/05-control-and-safety.md.
Tests: comap_tests.yaml exercises the decodes and thresholds, so a decode that stops
working surfaces as a notification rather than as silence.
| 01 Set up the controller | LiteEdit and IB-Lite settings, and the register addressing convention. |
| 02 Register reference | Every register, what it is, scaling, and which ones misreport. |
| 03 Home Assistant setup | Packages, hubs, entities, scan intervals. |
| 04 Breaker detection | Why the obvious register is useless, and what to use instead. |
| 05 Control and safety | The write block, the command codes, and why most people should not enable this. |
| 06 Alerting | Two-tier alerts, debounce windows, and why the 15 minute delay is deliberate. |
| 07 Testing | The self-test suite, and running a scheduled generator exercise. |
You need: a ComAp IL-NT controller with an IB-Lite (or equivalent Ethernet interface) on your LAN, and Home Assistant.
-
Configure the controller. COM2 must be MODBUS at 57600 baud, and Modbus/TCP must be enabled on the IB-Lite. Full steps in docs/01-setup-the-controller.md. Nothing works until this is right.
-
Confirm you can read it before touching Home Assistant:
python3 -c " from pymodbus.client import ModbusTcpClient c = ModbusTcpClient('192.0.2.47', port=502) c.connect() print('RPM:', c.read_holding_registers(8209, 1, slave=1).registers) c.close()"
A number back means you are ready. An error means go back to step 1.
-
Copy the packages into
/config/packages/and make sureconfiguration.yamlhas:homeassistant: packages: !include_dir_named packages
-
Edit the hub hosts at the top of
comap_modbus.yamlto your controllers' real addresses, and repoint the notification targets. Then restart.
The packages ship configured for two controllers (comap_north and comap_south).
If you have one, delete the second hub and its entities. If you have five, copy the
pattern.
Generators start without warning, produce lethal voltages, and have moving parts. This software can be configured to start one remotely.
- Monitoring is safe. Control is not. Read-only Modbus polling cannot hurt anything. Writes can start an engine.
- Do not enable remote start unless you are certain nobody can be working on the machine, the exhaust is safe, and the electrical changeover is correct. The engine start command in this repo is gated on the controller being in MAN mode as a deliberate speed bump, not as a safety system.
- This is not a protection system. It does not replace the controller's own protections, an emergency stop, correct isolation, or a licensed electrician. If a monitoring script is what stands between you and an incident, the design is wrong.
- Alerting is best-effort. It depends on Home Assistant running, your network, and a push notification service. Do not rely on it as the only safeguard on a system that matters.
- Automatic mode changes and dispatch are deliberately out of scope. The watchdog in this repo reports mode; it does not switch modes or start engines on its own.
If you are responsible for a genset serving critical load, treat this as an extra pair of eyes, not as the thing keeping you safe.
Register addresses and command codes come from ComAp's own published communication guides for the IL-NT / InteliLite range, cross-checked against a live AMF26-P.
No ComAp documentation, firmware or software is redistributed here. What is documented is the register numbers and scaling needed to read your own controller, and the decodes that turned out to be wrong on real hardware.
Register behaviour varies across the IL-NT family and firmware revisions, and only one model has been tested. Corrections from other models are welcome: open an issue with your controller model and firmware version.
MIT. See LICENSE.