# PathfinderCore PRO Panels & Quasar Consoles

Control **Lawo / Axia PathfinderCore PRO** user panels and **Lawo Quasar**
console faders from any Companion surface. Functional parity with the
Cloudcast Systems Stream Deck plugin (`com.cloudcastsystems.pathfinder`).

## Configuration

| Field | Meaning |
|---|---|
| **Panel URL** | Paste the user-panel URL exactly as the web client opens it, e.g. `https://syd-pfc/userpanelframemin.php?panel=Dans_Demo&page=index`. Credentials embedded in the URL (`user:pass@host`) are used as a fallback login. |
| **Host override** | Optional. Connect to this host instead of the one in the URL. |
| **Username / Password** | HTTP Basic + protocol login (defaults `panels` / `panels`). |
| **Accept self-signed TLS certificate** | Leave enabled for internal PathfinderCore boxes (default). |

One connection instance drives one panel page. Add another instance for
another panel or host. On save, the module discovers the page's controls over
HTTP — every dropdown below is populated from that discovery, and console
(GAINCONTROL) faders found on the page expose their Quasar device objects
automatically.

The module also polls the panel's save-version stamp every 15 s and
re-discovers when it changes, so edits made in the Pathfinder panel designer
(text, colours, new controls) show up on your buttons within ~15 s — no
connection restart needed.

## Actions

**Panel buttons**
- *Press* — tap (down + up edge), exactly like tapping the web panel.
- *Hold / Release* — the two edges separately, for momentary buttons (put
  "hold" on the down step and "release" on the up step).

**Panel faders & knobs**
- *Set value* — absolute, clamped and snapped to the control's range.
- *Adjust value* — relative ± change; assign to rotary left/right events.
- *Set to minimum* — parity with the Stream Deck dial-push default.

**Console (Quasar) faders**
- *Set gain (dB)* / *Nudge gain* — absolute or relative fader gain.
- *On-air* — toggle / ON / OFF (`ON_State`).
- *Function button* — PGM 1–4, PFL, ON, MUTE, TB, TALK (push-to-talk), AUX
  1–8, or a custom device property with your own active/inactive values.
  For TALK, put mode *Activate* on the button's down step and *Deactivate*
  on its up step.
- *Select source* / *Next/Previous source* — switch the fader's source
  profile; the list is read live from the console.

## Feedbacks

- **Use styling from panel** — paints the button with the control's colours
  and text captured from the panel CSS, and switches to the ON colours while
  the indicator is lit. Add this to any hand-built button to mirror the
  panel's look without dragging a preset.
- **Use text from panel** — replaces only the button text with the control's
  panel text (live if the text is bound in Pathfinder).
- **Indicator is ON** — panel button indicator lit (ON/TRUE/FLASH/PULSE).
  Presets use the on/off colours captured from the panel's own CSS.
- **Fader at minimum / value in range** — tally-style styling for panel
  faders and knobs.
- **On-air** — red while the console channel's `ON_State` is ON.
- **Function active** — while PGM/PFL/MUTE/… (or a custom property) is active.
- **Source selected** — while the fader has a given source selected.

## Variables

Per panel control: `text_<id>` (the control's visible text, live if bound in
Pathfinder), plus `state_<id>` (buttons/labels) or `value_<id>`
(faders/knobs). Per console fader: `gain_<id>`, `onair_<id>`, `source_<id>`,
and `func_<id>_<function>` for each catalogue function.

## Presets

Ready-made buttons are generated for everything discovered on the page:

- **Panel buttons** — painted with the panel's real on/off colours.
- **Panel faders & knobs** — rotary presets (rotate = adjust, push = min).
- **Console faders** — gain rotary (push toggles on-air) and a red-lit ON key.
- **Fader functions** — PGM 1–4, PFL, MUTE, TB keys plus a momentary TALK key.
- **Console sources** — rotary source stepper showing the live source name.

Rotary presets are for surfaces with encoders (Stream Deck+ dials via
Companion, Loupedeck, X-keys jog, …); on plain keys the push action still
works.

## Licensing

The module requires a Cloudcast Systems licence for **control**. Unlicensed
it runs read-only: feedbacks and variables keep mirroring the panel live,
but actions (button presses, fader moves, console control) are blocked and
the connection shows a warning status with the reason.

- Enter a **licence serial** in the connection settings and save — or an
  **email address** to start a trial (the licensing server emails a
  confirmation link).
- The licence binds to this machine's hardware ID and covers every
  Pathfinder connection in this Companion. It survives module upgrades
  (stored outside the module folder).
- **Requires the .NET 8 runtime** on the Companion host (matching the CPU
  architecture): https://dotnet.microsoft.com/download/dotnet/8.0. Without
  it, the status shows an install hint and the module stays read-only.
- Activation needs outbound HTTPS to the Treeks licensing server. To move a
  licence to another machine, deactivate first (contact Cloudcast Systems,
  or delete `~/.cloudcast-licensing/pathfinder-companion.bin` after
  deactivation).

## Troubleshooting

- **BadConfig / "Set a panel URL"** — the URL must include `?panel=…`.
- **Discovery failed** — check the username/password (HTTP 401) and that the
  panel name in the URL matches exactly; the module still connects, but
  dropdowns will be empty.
- **Sources dropdown empty** — source lists are read over the live
  connection; wait for the instance to show OK, then reopen the action.
- The connection retries every 3 s and re-subscribes automatically after a
  network drop or PathfinderCore restart.
