Skip to content

feat: Only enable IC-9700 spectrum scope when a Web UI session is active #1904

Description

@AI7BQ

Summary

Problem statement

When running Rigplane in web mode connected to an Icom IC-9700 over LAN, Rigplane automatically enables the radio's waterfall display (Spectrum Scope). If I manually turn the scope off by pressing the M.SCOPE button on the radio, Rigplane automatically forces the waterfall back on after approximately a 30-second delay.

While this behavior is completely understandable when a user is actively viewing the Rigplane Web UI in a browser, it is problematic when the Web UI is not being accessed. The overriding of the radio's physical state prevents manual control of the radio's display when running Rigplane as a headless or background service.

Describe the solution you'd like

I would like Rigplane's web mode backend to dynamically manage the IC-9700's scope state based on client connectivity. Specifically:

  1. Scope On: Only send the CI-V commands to enable and poll the spectrum scope when there is at least one active, authenticated browser/WebSocket session open to the Web UI.
  2. Scope Off/Idle: When all browser sessions are closed (no active clients connected to the web server), Rigplane should stop forcing the scope state, allowing the radio's physical display settings to be controlled manually without being overridden by the 30-second background polling loop.

Describe alternatives you've considered

  • Manually turning off the scope repeatedly: This is ineffective as the background sync loop overrides the manual change every 30 seconds.

Additional context

  • Rig: Icom IC-9700 connected via LAN.
  • Observed Behavior: The 30-second reset cycle strongly points to a background state-enforcement or hydration loop that assumes the Web UI always requires scope data, regardless of whether a client is actually connected to ingest the stream.

Log output

WARNING scope-health: all-zero frames for 14s, re-enabling scope (attempt 1/3)
INFO radio-poller: scope enabled
INFO radio-poller: scope controls fetched (receiver=0)
WARNING scope-health: all-zero frames for 15s, re-enabling scope (attempt 1/3)
INFO radio-poller: scope enabled
INFO radio-poller: scope controls fetched (receiver=0)
WARNING scope-health: all-zero frames for 18s, re-enabling scope (attempt 1/3)
INFO radio-poller: scope enabled
INFO radio-poller: scope controls fetched (receiver=0)

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions