Repository navigation
GridGhost v1.1.0-beta
GridGhost v1.1.0-beta (Windows Installer)
GridGhost is a lightweight, high-performance Modbus TCP device simulator (BACnet coming soon) built for BMS testing, commissioning, and Niagara development.
This first beta release focuses on correct addressing, Niagara-friendly scans, and strict register compliance.
✨ What’s new
Niagara-ready Modbus mapping
- Niagara-style addressing supported in the UI (e.g.,
40001,30001,10001,00001) - 0-based Modbus alignment:
00001 → offset 0(consistent across UI + server)
Stable scanning behavior
- Coils/Discretes support sparse maps and return
False/0for unmapped bits
→ ideal for Niagara block scans (no scan-breaking exceptions)
Strict register compliance (no silent ACKs)
- Holding/Input registers are strictly validated
→ unmapped addresses are rejected reliably
✅ Fixes included
Correct Modbus exception semantics (critical for Niagara)
Unmapped register requests now return:
- Exception Code
0x02— Illegal Data Address
Verified for:
0x03Read Holding Registers0x04Read Input Registers0x06Write Single Register0x10Write Multiple Registers
UI: Point Map value display
- Fixed the blank value issue when setting Static/Manual points
→ manual register values now appear correctly in the Niagara Point Map
Addressing consistency
- Confirmed Niagara formatting (
40001 + offset, etc.) matches actual server offsets - Sparse register gaps remain strict (illegal addresses → code
0x02)
🧩 Tech stack
- .NET 8
- Avalonia UI
- NModbus 3.0.81
- MVVM (CommunityToolkit)
⚠️ Known limitations
- Windows only (installer targets Windows)
- BACnet not included yet (roadmap)
- If a point uses a generator (Random/Sine/Ramp), it may overwrite manual writes
→ use Static/Manual for persistent values
📦 Installation
- Download the installer from the Assets section below
- Run the
.exeinstaller
Windows SmartScreen warning?
This beta build may show “unknown publisher”.
Select More info → Run anyway (expected if not code-signed yet).
🐞 Feedback / Issues
Please open a GitHub Issue and include:
- Template name / JSON snippet
- Port +
device_id - Addresses involved (Niagara & offset)
- Steps to reproduce (or your
pymodbuscommands)