Releases: zEhmsy/gridghost
GridGhost v2.1.0 — Niagara-grade Modbus + UX upgrades
GridGhost is a lightweight, high-performance Modbus TCP device simulator for BMS testing, commissioning, and Niagara development.
This release focuses on protocol correctness, stability, and workflow speed.
Highlights
- Niagara-grade Modbus compliance
- Correct exception codes:
- 02 – Illegal Data Address for unmapped addresses
- 03 – Illegal Data Value for writes to read-only points
- Verified write function codes:
- FC05 / FC0F (single/multiple coil writes)
- FC06 / FC10 (single/multiple register writes)
- Correct exception codes:
- 32-bit register support
- Proper handling for values spanning two Modbus registers (Float/Int32/UInt32), including safe partial updates.
- Instance isolation (deep copy)
- Device instances no longer share point references in memory.
- Port collision prevention
- DeviceManager blocks starting multiple devices on the same TCP port with a clear message.
- Faster UX
- Points grouped by device (Expander)
- Start/Stop device directly from Points view
- Quick navigation icons in Devices list:
- ✏️ Edit Points
- 🗺️ Niagara Point Map
- Unsaved changes prompt (Save / Discard / Cancel)
- Column resize enabled across main tables
Persistence & diagnostics
- Atomic template save (prevents file corruption)
- Auto-save config in
%APPDATA%\GridGhost\config.json - Structured logs in
%APPDATA%\GridGhost\logs\(JSONL) - Built-in SmokeRunner regression harness
Known limitations
- Windows installer only in this release (Linux/macOS roadmap; Avalonia + .NET 8 makes it feasible).
- If a point uses a generator (Random/Sine/Ramp), it may overwrite manual edits unless configured with override mode (when enabled).
Download / Install (Windows)
- Download the Windows installer ZIP from the Assets section:
GridGhost-1.3.0-Setup-win.zip
- Extract it and run:
GridGhost-1.3.0-Setup.exe
SmartScreen warning (“Unknown publisher”): this is a beta tool and may not be code-signed yet.
If you downloaded from this official GitHub Release, you can proceed via More info → Run anyway.
Verification
This build was validated with:
dotnet build -c Release- SmokeRunner protocol regression suite (FC05/0F/06/10 + Code 02/03 behaviors)
Feedback
Please open an Issue with:
- template used
- port + device_id
- addresses involved
- steps to reproduce (or pymodbus/Niagara screenshots)
v1.3.0 - UI Template editing implementation
[1.3.0] - UI Template editing implementation + Linux AppImage installer👻
Added ✨
- Visual Template Editor 🛠️: A full-featured form-based editor for Modbus templates.
- Create, duplicate, and modify templates directly within the UI.
- Integrated point mapping with Niagara-style address preview (0x, 1x, 3x, 4x) 🏷️.
- Validation engine to prevent duplicate keys and Modbus register collisions/overlaps 🛡️.
- Improved Repository Engine 💾: Atomic save operations for templates to ensure data integrity.
- Import/Export 📥: Support for importing JSON templates into the local repository via the UI.
Changed ⚙️
- Refactored Templates view into a modern split-pane layout (List + Editor) 💎.
- Upgraded installer script to ensure seamless updates for existing installations 🆙.
- Standardized internal 0-based addressing logic while maintaining 1-based display compliance for Niagara parity 🗺️.
Fixed 🐛
- Improved exception handling for sparse register reads in large templates ⚡.
- Resolved minor UI glitches during device instantiation 🎨.
v1.2.0 Hardening & Persistence Update
Release v1.2.0 - Hardening & Persistence Update 👻
This release focuses on stability, workspace persistence, and strict Modbus protocol compliance for BMS integrations (especially Niagara).
🚀 Key New Features
- Automatic Persistence: Device and point configurations are now automatically saved in
%APPDATA%\GridGhost\config.json. When the app is restarted, your workspace is restored exactly as you left it. - Structured Logging: Implemented a rotating log system in JSONL format (
%APPDATA%\GridGhost\logs\) for advanced diagnostics. - Protocol Hardening:
- Implemented proactive return of Exception Code 2 (Illegal Data Address) for unmapped registers, eliminating supervisor timeouts.
- Thread-safety guaranteed in device Start/Stop operations via semaphores.
- Template Standardization: All included templates have been migrated to 16-bit (int16/uint16) to maximize Modbus standard compatibility.
🛠 Technical Improvements
- Renamed template properties (simulator -> generator) to align with the C# simulation engine.
- Introduced
DeviceSim.SmokeRunner: an internal regression service to automatically test protocol compliance. - Optimized the lifecycle of devices with explicit states (Starting, Running, Stopping, Faulted).
📦 Installation
Download and run GridGhost-1.2.0-Setup.exe to update your existing installation.
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)
GridGhost - First Release
GridGhost — v1.0.0 (First Release)
GridGhost is a lightweight, high-performance Modbus (and soon BACnet) device simulator designed for BMS (Building Management System) testing, commissioning, and development. It allows engineers to simulate complex field devices with dynamic data generators without physical hardware.
Platform Support
- Windows only (current release)
- Cross-platform support (Linux/macOS) is planned as the project matures.
Logo
GridGhost Logo
Features
Multi-Protocol Support
- Modbus TCP (Fully implemented)
- BACnet/IP (Roadmap)
Direct Store Integration
- No polling loops.
- Modbus registers map directly to the internal simulation store for real-time reactivity.
Dynamic Data Generators
- Sine Wave: Perfect for temperature and CO₂ simulation
- Ramp: For testing high/low alarms
- Random: For simulating sensor noise
- Static: For manual command/status testing
Template System
- Quickly create devices from JSON templates (Energy Meters, AHUs, VAVs, etc.).
Editable Device Config
- Change ports and point types on the fly
(requires stop/start for stability).
Modern UI
- Dark-themed, responsive Avalonia UI.
Tech Stack
- Framework: .NET 8, Avalonia UI
- Protocols: NModbus4
- MVVM: CommunityToolkit.Mvvm
Roadmap 🗺️
Phase 1: Core & Modbus (Completed)
- Basic Simulation Engine
- Modbus TCP Server implementation
- Template-based device instantiation
- Direct binding loop-free architecture
Notes
- Default Modbus port in examples is often 1502 (recommended for local testing to avoid privileged port 502).
- BACnet support will be introduced in upcoming releases.