Skip to main content

Bogen Nyquist

Bogen Nyquist is a REST-controlled paging, mass-notification, and audio-distribution platform used in K-12 schools, hospitals, warehouses, and corporate campuses. This driver targets the Nyquist appliance families (NQ-GA10PV, NQ-E7000, NQ-S1000) exposing the /api/v1/* REST endpoints, letting GEM send pages, all-calls, chime tests, and read live zone status from macros and UI controls.

The Nyquist server itself owns the audio, the message store, and the endpoints (IP speakers, amplifiers, station intercoms). GEM triggers pages against it — it does not replace it.

Prerequisites

  • A Nyquist appliance reachable from the GEM controller (open TCP 443 for HTTPS, or 80 for legacy HTTP).
  • Firmware new enough to expose /api/v1 — most 3.x and later builds. Older 2.x builds shipped a different API and are not supported.
  • An admin account with the REST API role enabled. Nyquist ships with the API disabled for read-write access, so this is a manual step in the Nyquist Web UI.
  • Zones and stations already provisioned in Nyquist. This driver does not create zones — it dispatches against zones you have already defined.
  • Pre-recorded messages loaded into the Nyquist message store, each with a stable numeric message_id you can pass into GEM commands.

Setup steps

  1. Enable REST. Sign into the Nyquist Web UI as a super-admin. Under Admin → Users, create a dedicated integration user (e.g. gem-integration), assign it a strong password, and grant it the REST API role. Save.
  2. Create the GEM device. In the GEM admin console under Devices, add a new device with driver Bogen Nyquist and fill in:
    • Server IP or Hostname — the same host you use in the admin URL.
    • API Username / API Password — the credentials from step 1.
    • Leave HTTPS Port at 443 unless the server exposes a non-standard port.
    • Set Protocol to http only if this is a legacy install running plain HTTP on port 80.
  3. Confirm connectivity. Save and reload the device row — the driver hits GET /api/v1/system/version on connect. On success the device shows connected and populates firmware_version / product_name / hostname attributes.
  4. Enumerate zones. Run the get_zones command from Script Console or the device page. Nyquist returns the list of paging zones with their zone_id values. Note the numeric IDs — those are the zone.address values GEM uses.
  5. Create a GEM zone per Nyquist zone. For each Nyquist zone you want to control, create a GEM zone under the appropriate subsystem (typically an "Audio / Paging" subsystem you have already provisioned) and set zone.address = <numeric zone_id>.
  6. (Optional) Preset a message. On any GEM zone, set the default_message_id attribute to the Nyquist message-store ID you want a bare page_zone (no message_id argument) to play in that zone. This is convenient for one-shot buttons that always trigger the same announcement.

Attribute reference

Device attributes

AttributeRequiredDefaultPurpose
ipNyquist server IP or hostname.
usernameNyquist admin account with the REST API role enabled.
passwordPassword for the API user. Stored encrypted.
port443HTTPS (or HTTP) port.
protocolhttpsSet http for legacy servers on port 80.
api_base/api/v1Override only if the server exposes the API at a non-default path.
status_interval15000Milliseconds between active-page polls.

Zone attributes

AttributeRequiredPurpose
addressNumeric Nyquist zone ID from get_zones.
default_message_idNyquist message-store ID to use when a page_zone command omits message_id.

Commands

CommandArgsWhat it does
page_zoneaddress, message_id, priorityPost a page request to a single zone. Priority defaults to 5; values >9 typically require a Nyquist emergency license.
page_allmessage_id, priorityAll-call across every zone.
stop_pageaddress (optional)Cancel the active page in a zone (or every cached page if no address is given).
test_zoneaddressPlay the built-in chime test in a zone.
get_zonesEnumerate paging zones. Use to populate GEM zone.address values.
get_stationsEnumerate IP endpoints (speakers, amps).
get_statusRead server heartbeat + active-page count.
get_messagesList pre-recorded messages available for paging.
raw_commandpath, method, bodyEscape-hatch pass-through to any /api/v1/* endpoint — useful for endpoints this driver does not model directly (schedules, bells, CAP alerts).

Zone address format

zone.address is the numeric zone_id reported by Nyquist. Enter it as a plain integer string (e.g. 3). The driver accepts both Number and String forms and normalizes to Number when posting to Nyquist.

What we don't yet support

  • Bell schedules — Nyquist manages its own scheduler; use raw_command against /bell-schedules if you need to trigger one from a macro.
  • Emergency / CAP alerts — the driver passes a priority arg through but does not translate CAP category codes. Use raw_command against /emergency-notifications for structured CAP payloads.
  • Multi-message playlists — this driver plays one message per page_zone.
  • Live-mic paging — the Nyquist Web UI supports live-mic from a station; this driver does not open an RTP session.
  • Station-level LED / mute / volume overrides — station endpoints exist under /stations/{id} but the schemas vary between Nyquist server revs; use raw_command until we can verify against a specific hardware set.

Troubleshooting

  • 401 Unauthorized on connect. The API user does not have the REST API role, or the password is wrong. Reset in the Nyquist Web UI under Admin → Users.
  • 403 Forbidden on page_zone. The API user has the REST API role but the paging-scope permission is off. Grant "Paging" permission on the account in Nyquist.
  • 404 on test_zone. Server firmware exposes the chime test under a different path — try raw_command with path=/zones/{id}/test (older builds) or /zones/{id}/actions/test (3.x+).
  • get_zones returns an empty list. No paging zones are defined on the server. Provision at least one in the Nyquist Web UI before mapping addresses in GEM.
  • HTTPS handshake failures. Some Nyquist appliances still ship a self-signed cert; the driver accepts these by default. If you have a genuine cert-chain problem check the appliance clock — an off-clock server drops HTTPS handshakes silently.
  • Pages stop reporting active state. The driver polls /page-requests?state=active on status_interval. If the server is under heavy load, back that off (e.g. 30000) so polling does not starve real paging traffic.

References

  • Nyquist REST API notes: https://nyquist.bogen.com/support/ — vendor-hosted developer portal.
  • Bogen Nyquist product line: https://www.bogen.com/nyquist/