Skip to content

omkardongre/SentinelDeskPlugin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SentinelDesk Plugin

A Logitech Actions SDK plugin that turns the MX Creative Console, MX Master 4, and Actions Ring into a tactile surveillance control surface for Frigate NVR.

Built for the Logitech DevStudio 2026 challenge — Actions SDK category.


Features

Dialpad

  • Timeline Scrub — dial rotation sends Up/Right arrows to Chrome (velocity-scaled: slow = 1s, fast = 10s)
  • Next / Prev AI Event — jump across Frigate review events in the same Chrome tab via CDP
  • Review Mode / Live View — one-press browser navigation

Keypad (9-tile LCD grid)

  • Camera Rack — dynamic folder with live camera thumbnails, tap to switch camera while preserving exact playback timestamp
  • Play / Pause — sends Win32 Space key to active Chrome window (zero latency)
  • Speed — folder with 0.5x / 1x / 2x / 4x / 8x / 16x tiles, active tile highlighted green
  • Filters — toggle person / car / motorcycle labels via /review?labels=... URL
  • Export — folder with 1h / 4h / 8h / 24h buttons; exports recordings and haptic-notifies on completion
  • Show Reviewed — CDP click on Radix UI switch (locale-independent)
  • Event Type — cycles severity tabs (Alerts → Detections → Motion)

Actions Ring

  • 8 ring slots mapped to plugin actions; nested folder with Camera CH1–CH9 tiles (plugin supports CH1–CH13)

MX Master 4

  • Haptic alerts — MQTT-driven vibrations on zone violation AI detections
  • Ctrl+Alt+N / P / R / L hotkeys — bound to side buttons via Logi Options+, handled by a Win32 RegisterHotKey listener inside the plugin (Next / Prev / Review Mode / Live View)
  • Horizontal scroll — thumb wheel tilt redirected to Frigate 24h timeline scroll by the companion Chrome extension

Requirements

Component Version / Notes
Logi Options+ Required for all Logi devices
Frigate NVR Running on localhost:5000 (HTTP, not 8971 HTTPS)
Mosquitto MQTT broker localhost:1883
Google Chrome Launched with --remote-debugging-port=9222
.NET 8 SDK For building the plugin
LogiPluginTool dotnet tool install --global LogiPluginTool

Setup (5 steps)

1. Clone & build the plugin

git clone https://github.com/omkardongre/SentinelDeskPlugin.git
cd SentinelDeskPlugin
dotnet build src/SentinelDeskPlugin.csproj

The build auto-installs a .link file into %LocalAppData%\Logi\LogiPluginService\Plugins\ for hot-reload. Restart Logi Options+ → the SentinelDesk group appears under All Actions.

2. Start Frigate + Mosquitto

Minimum frigate/config/config.yml:

mqtt:
  enabled: true
  host: localhost
  port: 1883

Start both services:

docker-compose up -d

Verify: http://localhost:5000 loads the Frigate UI.

3. Launch Chrome with CDP enabled (REQUIRED)

The plugin drives Chrome via the Chrome DevTools Protocol. Close all Chrome instances, then launch:

# Windows PowerShell
& "C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222

Open http://localhost:5000 in this Chrome window and leave it open.

4. Install the companion Chrome extension (REQUIRED — don't skip)

Several features will silently fail without the extension — exact timestamp preservation on camera switch, Export at current playback position, and MX Master 4 horizontal scroll → timeline.

  1. Open chrome://extensions
  2. Enable Developer mode (top-right toggle)
  3. Click Load unpacked
  4. Select the folder: SentinelDeskPlugin/frigate-extension/
  5. Reload the Frigate tab

The extension injects a tiny reader for React's internal playback state and redirects horizontal wheel events to the Frigate timeline. It only runs on localhost:5000.

5. Map actions on your devices

Open Logi Options+ → pick your device → drag actions from the SentinelDesk group. See CHECKLIST.md for the tested mapping (Dialpad 4 buttons + dial, Keypad 9 tiles, Actions Ring 8 slots, MX Master 4 hotkeys Ctrl+Alt+N/P/R/L).


How it works (brief)

Concern Mechanism
Navigate Chrome without new tabs CDP Page.navigate on the existing localhost:5000 tab
Toggle video play/pause Win32 keybd_event sending VK_SPACE (sub-ms latency)
Read exact playback timestamp Chrome extension walks React fiber, exposes window.__sentinel.currentTime
Switch camera without losing scrub position document.querySelector('[data-camera="x"]').click() via CDP
Real-time haptic alerts MQTT subscribe to frigate/events, raise Logi PluginEvents
MX Master 4 side buttons Win32 RegisterHotKey listener on Ctrl+Alt+N/P/R/L

See ARCHITECTURE.md for the non-trivial design decisions and FEATURES.md for every test → implementation mapping.


Repository layout

SentinelDeskPlugin/
├── src/
│   ├── SentinelDeskPlugin.cs       # Plugin entry, event registration
│   ├── BrowserNav.cs               # All CDP interactions
│   ├── FrigateClient.cs            # Frigate REST client
│   ├── MqttListener.cs             # MQTT → haptic events
│   ├── CdpWatcher.cs               # Persistent CDP Network.enable watcher
│   ├── HotkeyManager.cs            # Win32 RegisterHotKey (MX Master 4 bridge)
│   ├── EventNavigator.cs           # Shared Next/Prev navigation
│   ├── PlaybackState.cs            # Thread-safe state
│   └── Actions/                    # 12 commands + folders
├── frigate-extension/              # Chrome MV3 extension (REQUIRED)
│   ├── manifest.json
│   ├── content.js                  # Injects page script + wheel redirect
│   └── injected.js                 # React fiber reader
└── package/                        # Loupedeck metadata, icons, event YAML

License

MIT

About

A working Logitech Actions SDK plugin that turns MX Creative Console, MX Master 4 & Actions Ring into a tactile cockpit for CCTV — dial-scrub Frigate NVR, feel AI alerts.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors