Protected_HTTP method for this endpoint.
Protected_ProtectedlogProtectedrequestPerform the HTTP request configured for this service.
The HTTP method, Authorization header (when basicAuth is enabled),
and signal are always controlled by this method and cannot be
overridden via init: an explicit init.method is ignored, and a
caller-supplied init.signal is composed (via AbortSignal.any) with
the internal timeout signal rather than replacing it. An external abort
re-throws the original AbortError so callers can distinguish it from
a timeout.
Any other fetch init field (body, headers, cache, etc.) is
passed through to fetch; caller headers are merged on top of the
service's _requestHeaders.
Optional fetch init plus a params shortcut. params,
if provided, is serialised as key=value&key=value and appended to
the URL without URL-encoding — values must already be URL-safe
(numbers and ASCII letters are fine; spaces / special chars are not).
This matches the wire format the controller's legacy endpoints expect
(e.g. literal commas in ?MAN_DOSAGE=0,60).
The raw Response for the caller to parse.
BadCredentialsError on HTTP 401 or 403.
BadStatusCodeError on any other 4xx/5xx response.
RequestTimeoutError if the request exceeds the configured timeout.
Turn relay relayNo on for duration seconds via the controller's on-timer.
Two error modes, distinguished:
duration): throws ProconIpError
immediately, before any HTTP traffic. The caller's bug, surface it.debug; after the third attempt the method returns -1.Target relay number (1-based, matches the controller UI).
Timer duration in seconds. Fractional inputs are truncated; the returned value reflects the truncated seconds that were actually sent to the controller.
The (truncated) duration on success, or -1 after three failures.
ProconIpError if duration is not a finite number.
Endpoint path relative to IServiceConfig.controllerUrl.