A visual, colorful command-line application for monitoring KNX/EIB bus activity with Terminal.Gui V2 interface.
- π¨ Terminal.Gui V2 Interface: Beautiful, interactive TUI with real-time updates
- π Dual-Mode Architecture: Automatic switching between TUI and logging modes
- π Modern Web Interface: Real-time browser-based monitoring with live updates and filtering
- π Multiple Connection Types: Support for IP Tunneling, IP Routing, and USB
- π Real-time Monitoring: Live display of all KNX bus activity with zero flickering
- π― Advanced Filtering: Interactive filter dialogs with pattern matching
- π Rich Status Display: Connection status, message count, and uptime tracking
- π§ Advanced DPT Decoding: Falcon SDK-powered data point type decoding with auto-detection
- π¨ Smart Value Formatting: Context-aware display of decoded values (temperatures, percentages, etc.) with KNX group address database support
- π³ Docker Ready: Development and production Docker containers
- β‘ Hot Reload: Development mode with automatic code reloading
- πΉ Keyboard Shortcuts: Full keyboard navigation and shortcuts
- π€ Export Functionality: Export messages to CSV format
- π¨ Color Coding: Age-based and type-based color coding for messages
KNX Monitor features sophisticated Data Point Type (DPT) decoding using the Falcon SDK:
- DPT 1.xxx: Boolean values with context-aware formatting
1.001Switch:On/Off1.008Up/Down:Up/Down1.009Open/Close:Open/Close
- DPT 5.xxx: 8-bit unsigned values
5.001Scaling:75%5.003Angle:180Β°
- DPT 9.xxx: 2-byte float values with proper units
9.001Temperature:21.5Β°C9.004Illuminance:1500 lux9.005Wind Speed:5.2 m/s9.006Pressure:1013 Pa9.007Humidity:65.0%
- DPT 14.xxx: 4-byte IEEE 754 float values
14.019Electric Current:16.5 A14.027Frequency:50.0 Hz14.056Power:1500.0 W14.076Voltage:230.0 V
When running in an interactive terminal, KNX Monitor automatically launches the Terminal.Gui V2 interface:
KNX Monitor includes a modern web interface that provides real-time monitoring through your browser:
- Automatic activation: Starts when running in containers, with redirected output, or using
-l/--logging-mode - Manual activation: Use
-l/--logging-modeto force web interface mode - Default URL:
http://localhost:8671(configurable via--http-port) - Features:
- π Live message table with real-time updates
- π Advanced filtering (supports patterns like
1/2/*and exact matches) - π€ CSV export functionality
- π Connection status and message count display
- π¨ Clean, responsive design
Access the web interface: Open http://localhost:8671 in your browser when running in non-TUI mode.
When output is redirected or running in containers, automatically switches to logging mode:
[14:32:15.123] Write 1.1.5 -> 1/2/1 = 75 (Normal)
[14:32:15.456] Read 1.1.10 -> 1/2/5 = Empty (Normal)
[14:32:15.789] Response 1.1.5 -> 1/2/5 = false (Normal)
# Install dependencies
dotnet restore
# Run with default settings (connects to knxd via tunneling)
dotnet run
# Run with custom settings
dotnet run -- --connection-type tunnel --gateway 192.168.2.8 --verbose| Option | Short | Description | Default | Example |
|---|---|---|---|---|
--gateway |
-g |
KNX gateway IP address | localhost |
--gateway 192.168.1.100 |
--connection-type |
-c |
Connection type | tunnel |
--connection-type router |
--port |
-p |
Gateway port | 3671 |
--port 3672 |
--multicast-address |
-m |
Multicast address (router mode) | 224.0.23.12 |
--multicast-address 224.0.23.13 |
--verbose |
-v |
Enable verbose logging | false |
--verbose |
--filter |
-f |
Group address filter | None | --filter "1/2/*" |
--csv |
Path to ETS CSV export | None | --csv addresses.csv |
|
--xml |
Path to ETS XML export | None | --xml project.xml |
|
--logging-mode |
Logging mode | auto |
--logging-mode console |
|
--http-port |
Web UI port | 8080 |
--http-port 8671 |
The --verbose flag enables detailed logging for debugging and development:
Normal Mode (default):
dotnet run -- --gateway 192.168.1.100
# Clean output - only KNX monitoring messages
[22:01:24.022] Write 1.1.40 -> 5/1/40 = 22.80Β°C (Raw: 0891)Verbose Mode:
dotnet run -- --gateway 192.168.1.100 --verbose
# Detailed logging including:
# - Full exception stack traces
# - ASP.NET Core Kestrel startup messages
# - Connection debugging information
# - Internal component logging| Shortcut | Action | Description |
|---|---|---|
| F1 | Help | Show keyboard shortcuts help |
| F2 | Filter | Open filter dialog |
| F3 | Clear | Clear all messages |
| F5 | Refresh | Refresh display |
| F9 | Export | Export messages to CSV |
| F10 | Quit | Exit application |
| Ctrl+C | Quit | Exit application |
| Ctrl+R | Refresh | Refresh display |
| Ctrl+F | Filter | Open filter dialog |
| Ctrl+E | Export | Export messages |
| Arrow Keys | Navigate | Navigate table |
| Page Up/Down | Scroll | Scroll through messages |
| Home/End | Jump | Go to first/last message |
- π’ Green: Recent messages (< 1 second), Write operations, Connected status
- π‘ Yellow: Medium age messages (< 5 seconds), Response operations, Values
- π Orange: Older messages (< 30 seconds), Urgent priority
- π΅ Cyan: Read operations, IP Tunneling connection
- π£ Magenta: IP Routing connection
- π΄ Red: System priority, Disconnected status, Errors
- βͺ White/Dim: Normal priority, Very old messages
| Option | Short | Description | Default |
|---|---|---|---|
--connection-type |
-c |
Connection type: tunnel, router, or usb |
tunnel |
--gateway |
-g |
KNX gateway address (required for tunnel/router) | knxd |
--port |
-p |
KNX gateway port | 3671 |
--verbose |
-v |
Enable verbose logging | false |
--filter |
-f |
Filter group addresses (e.g., 1/2/* or 1/2/3) |
None |
--csv |
Path to KNX group address CSV file (ETS export format) | None | |
--xml |
Path to KNX group address XML export (KNX GA Export 01) | None | |
--logging-mode |
-l |
Force simple logging mode instead of TUI | false |
--http-port |
HTTP port for the web UI (non-TUI mode) | 8671 |
|
--test |
-t |
Run DPT decoding tests and exit | false |
KNX Monitor supports loading group address databases from ETS exports in two formats:
- Use
--csv path/to/addresses.csv - Requires ETS export format with semicolon separation
- Expected columns: Main, Middle, Sub, Address, Central, Unfiltered, Description, DatapointType, Security
- Use
--xml path/to/addresses.xml - Supports KNX GA XML export format with namespace
http://knx.org/xml/ga-export/01 - Automatically extracts group addresses, names, descriptions, and DPT information
- Handles hierarchical group names with automatic splitting
Note: --csv and --xml options are mutually exclusive - use only one at a time.
# Monitor KNX bus via IP tunneling to knxd
dotnet run
# Monitor with verbose logging
dotnet run -- --verbose
# Monitor with group address database (CSV)
dotnet run -- --csv ~/Documents/knx-addresses.csv
# Monitor with group address database (XML)
dotnet run -- --xml ~/Documents/knx-groupaddress.xml
# Monitor specific group addresses
dotnet run -- --filter "1/2/*"
# Use web interface (force non-TUI mode)
dotnet run -- --logging-mode
# Then open http://localhost:8671 in your browser
# Web interface on custom port
dotnet run -- --logging-mode --http-port 9000
# Then open http://localhost:9000 in your browser# IP Tunneling (most common)
dotnet run -- --connection-type tunnel --gateway 192.168.1.100
# IP Routing (multicast)
dotnet run -- --connection-type router --gateway 224.0.23.12
# USB Interface
dotnet run -- --connection-type usb# Connect to real KNX/IP gateway
dotnet run -- --connection-type tunnel --gateway 192.168.1.100 --port 3671
# Monitor only lighting controls
dotnet run -- --gateway 192.168.1.100 --filter "1/1/*"
# Monitor with IP routing (multicast)
dotnet run -- --connection-type router --gateway 224.0.23.12- Knx.Falcon.Sdk: KNX/EIB communication
- Terminal.Gui V2: Terminal User Interface
- System.CommandLine: Command-line argument parsing
- Spectre.Console: Beautiful console output for logging mode
- Microsoft.Extensions.Hosting: Dependency injection and hosting
- Microsoft.Extensions.Logging: Structured logging
# Restore dependencies
dotnet restore
# Build project
dotnet build
# Build Docker images
docker build .This project is part of SnapDog2 and is licensed under the GNU GPL v3.0.
- Fork the repository
- Create a feature branch
- Make your changes
- Test with both development and production Docker builds
- Submit a pull request
Happy KNX Monitoring! π