Customization
The Custom tab lets you program the joystick's buttons to perform network commands, serial commands, HTTP requests, or camera preset recalls.
Overview
The Custom page displays the custom buttons available for configuration. Each button has its own tab, and you can switch between them to configure different sets of commands.
| Button Tab | Notes |
|---|---|
| Custom1 | General-purpose custom button |
| Custom2 | General-purpose custom button |
| Custom3 | General-purpose custom button |
| Custom4 | General-purpose custom button |
| Joystick (Custom5) | Mapped to the physical trigger/button on a hardware joystick controller |
Each button tab is configured independently with its own command type and command list.
Adding and Deleting Custom Buttons
Adding a Button
Click the Custom Add button (displayed alongside the existing button tabs) to create a new custom button. New buttons are appended in sequence: Custom6, Custom7, and so on.
Deleting a Button
Each user-added button (Custom6 and above) displays a Delete button in its tab. Click it to permanently remove that button and all its configured commands.
Deleting a custom button is permanent and cannot be undone. All commands configured on that button will be lost.
Command Types
Each button has a Type selector. The available types are:
Only one command type can be selected per custom button. Once you configure a button with a given type, all commands on that button must use that same type.
TCP Commands
TCP sends one or more raw TCP socket commands to a network device when the button is pressed. Commands are sent in order from top to bottom.
Configuration Fields
| Field | Description |
|---|---|
| IP Address | IPv4 address of the target device |
| Port | TCP port number on the target device |
| Command Type | HEX Command — bytes entered as hexadecimal valuesASCII Command — plain text string |
| Command | The command payload to send |
| Delay | Time in seconds to wait after sending this command before sending the next (minimum: 0) |
Managing Command Rows
- Click
+to add a new command row below the last row. - Click
-on a row to remove that individual command. - Rows are numbered sequentially (1, 2, 3 …) and execute in that order.
UDP Commands
UDP is functionally identical to TCP in its configuration interface but sends commands over the UDP (connectionless) transport instead.
Configuration Fields
| Field | Description |
|---|---|
| IP Address | IPv4 address of the target device |
| Port | UDP port number on the target device |
| Command Type | HEX Command or ASCII Command |
| Command | The command payload to send |
| Delay | Seconds to wait after sending before proceeding to the next command (minimum: 0) |
Use + / - to add or remove rows. Rows execute top to bottom.
UART (Serial) Commands
UART sends commands over the system's serial interface. This is useful for controlling devices connected via RS-232/RS-485 rather than over a network.
Baud Rate
A Baud Rate selector at the top of the UART configuration applies to all commands on this button:
| Available Baud Rates |
|---|
| 1200 |
| 2400 |
| 4800 |
| 9600 |
| 19200 |
| 38400 |
| 115200 |
Configuration Fields
| Field | Description |
|---|---|
| Command Type | HEX Command or ASCII Command |
| Command | The serial command payload |
| Delay | Seconds to wait after sending before proceeding to the next command (minimum: 0) |
UART commands have no IP Address or Port fields — the serial interface is a direct hardware connection, not a network connection.
Use + / - to add or remove rows. Rows execute top to bottom in the configured baud rate.
HTTP Trigger Commands
HTTP Trigger is the most advanced command type. It sends HTTP GET or POST requests to defined network devices and supports toggle behavior (different commands on first press vs. second press).
Step 1: Define HTTP Devices
Before configuring commands, you must define the HTTP devices (targets) this button will communicate with. The HTTP Devices table at the top of the HTTP Trigger configuration is a shared pool of devices available to all commands on this button.
HTTP Devices Table
| Column | Description |
|---|---|
| ID | Auto-assigned identifier. Read-only. |
| Name | A friendly label for the device (e.g., Camera_1) |
| IP | IPv4 address of the device |
| Port | HTTP port (typically 80 for HTTP, 443 for HTTPS) |
| Authentication | Authentication method |
| Username | Credential username (if authentication is enabled) |
| Password | Credential password (if authentication is enabled) |
| Secure (HTTPS) | Whether to use HTTPS for all requests to this device |
| Delete | Removes the device from the pool |
| Edit | Opens the device editor dialog |
Adding an HTTP Device
Click Add to open the device editor. Fill in the following fields:
| Field | Description |
|---|---|
| ID | Auto-assigned. Read-only. |
| Name | Friendly label for the device |
| IP Address | IPv4 address |
| Port | Port number |
| Authentication | Basic, Digest, or Off |
| Username | Required if Authentication is not Off |
| Password | Required if Authentication is not Off |
| Secure (HTTPS) | Check to use HTTPS |
PTZOptics cameras use Digest authentication by default. The interface's default Authentication method in the Add Device dialog is Basic. For better security, select Digest unless the target device requires Basic.
Current_Cam
Current_Cam is a permanent entry that is always present in the HTTP Devices table. Unlike manually added devices, it does not use a static IP address or authentication configuration. Instead, it dynamically pulls the IP address and credentials from whichever device is currently selected on the Devices page.
This makes Current_Cam useful when you want a custom button to always target the active camera, regardless of which camera is selected at the time the button is pressed. If the active camera changes on the Devices page, any command pointed at Current_Cam will automatically target the new selection.
Current_Cam will appear as ID 1 in the HTTP Devices table. It can be selected as the Device in any command row just like a manually added device.
Click Save to add the device to the pool. It will appear in the HTTP Devices table and become available in the Device dropdown when configuring commands.
Step 2: Configure Commands
Commands are organized into one or two press sections depending on whether toggle mode is enabled.
Single Press (Default)
By default, one FIRST PRESS section is shown. All commands in this section fire when the button is pressed.
Toggle Mode (Enable Two-Press Behavior)
Check the Enable toggle checkbox to activate toggle mode. A SECOND PRESS section appears alongside the FIRST PRESS section.
| Press | Behavior |
|---|---|
| First Press | Executes all commands in the FIRST PRESS section |
| Second Press | Executes all commands in the SECOND PRESS section |
| Third Press | Reverts to First Press behavior, and so on |
This is useful for on/off toggles — for example, turning auto-tracking on with the first press and off with the second press. Each press can have its own independent set of commands.
Command Table (FIRST PRESS / SECOND PRESS)
Each press section has a command table with the following columns:
| Column | Description |
|---|---|
| Type | The kind of command: GET, POST, or Delay |
| Device | The HTTP device from the pool to send this command to |
| Command | The URL path or query string for GET/POST requests |
| Delete | Removes this command row |
| Modify | Opens the command editor dialog |
Click Add within a press section to open the command editor.
Command Editor — GET
| Field | Description |
|---|---|
| Type | GET |
| Device | Select from defined HTTP devices |
| Command | URL path and query string e.g., /cgi-bin/ptzctrl.cgi?ptzcmd&recallpos&1 |
The full request URL is composed as:
http[s]://<device IP>:<device Port><Command>
Command Editor — POST
| Field | Description |
|---|---|
| Type | POST |
| Device | Select from defined HTTP devices |
| Command | URL path (endpoint) |
| Content-Type | Text/HTML, JSON, or URL Encoded |
| Body | The POST request body |
Command Editor — Delay
| Field | Description |
|---|---|
| Type | Delay |
| Delay Length | Time in seconds to wait before executing the next command |
Use Delay rows to insert a pause between commands — for example, waiting for a device to process a command before sending the next one.
Super Preset
Super Preset allows a single button press to simultaneously recall presets on up to 8 cameras across different groups, plus an optional HTTP-CGI command.
Camera Preset Rows (Rows 1–8)
Each of the 8 rows represents one camera preset to recall. Enable a row by checking its checkbox.
| Field | Description |
|---|---|
| Checkbox | Enable this row. Disabled rows are ignored when the button is pressed. |
| Group | The camera group — GROUP1 through GROUP4 |
| Camera ID | The camera slot within the group — 1 through 7 |
| Preset | The preset number to recall — 0 through 253 |
Super Preset supports Groups 1–4 only. Group 5 is not available in this view.
Row 9: HTTP-CGI Command
Row 9 is a special row for sending a single HTTP-CGI string command alongside the preset recalls.
| Field | Description |
|---|---|
| Checkbox | Enable this row |
| HTTP-CGI String | A full URL to call e.g., http://ip:port/cgi-bin/ptzctrl.cgi?ptzcmd&zoomin&7 |
The HTTP-CGI string is a complete URL including protocol, host, port, and query parameters. It is sent as a simple HTTP GET request.
Use Case Example
You can use Super Preset to create a "scene" button that simultaneously:
- Recalls preset 5 on Camera 1 in Group 1 (a wide shot)
- Recalls preset 2 on Camera 3 in Group 2 (a close-up on a second camera)
- Sends an HTTP-CGI command to trigger an external device (e.g., a video switcher)
All actions fire simultaneously when the button is pressed.