Driver Type
Categories
- Recent Updates
- Access Control
- Amplifier
- A/V Receiver
- Climate and Pool Control
- Disc Player / Changer
- Display
- DSP
- DVR
- Irrigation / Sprinklers
- Lighting Control
- Matrix Switch
- Media Server and Player
- Multi-Room A/V
- Networking
- Power and Rack Management
- Security
- Surveillance
- Teleconferencing
- Training
- Tuner
- Utility
- Video Projector
Driver Type
Categories
- Recent Updates
- Access Control
- Amplifier
- A/V Receiver
- Climate and Pool Control
- Disc Player / Changer
- Display
- DSP
- DVR
- Irrigation / Sprinklers
- Lighting Control
- Matrix Switch
- Media Server and Player
- Multi-Room A/V
- Networking
- Power and Rack Management
- Security
- Surveillance
- Teleconferencing
- Training
- Tuner
- Utility
- Video Projector
RelayServer
By: QingHua Wang
Updated: July 25, 2026
Version: 1.1
RelayServer Driver for RTI
WHAT THIS IS
This driver lets a plain web app (any browser, or "Add to Home Screen" as a PWA on iOS/Android) control this system, without needing RTI's own official mobile app. There is no public specification for the protocol RTI's own app uses to talk to an XP Series processor, and the driver scripting SDK only supports outbound connections (no listen/accept API), so this driver cannot itself act as a server a browser connects to directly.
Instead, this driver is a WebSocket client that connects OUT to a small relay server you host yourself on your own network (see the relay-server/ folder shipped alongside this driver's source). The web app also connects to that same relay from any browser. The relay just forwards messages both ways.
SETUP
1. Run the relay server (Node.js) on a machine on your network - a Raspberry Pi, NAS, or always-on PC works. See relay-server/README for exact steps; in short: set XP8_TOKEN and CLIENT_TOKEN environment variables (two different shared secrets), then "npm install && npm start".
2. In this driver's Config, enter the relay machine's IP address, the port it's listening on (default 8181), and the same XP8_TOKEN value as "Panel Token".
3. Open the web app in a browser (the relay serves it directly, e.g. http://<relay-ip>:8181/) and enter the CLIENT_TOKEN when prompted.
4. Edit web-app/rooms.json (on the relay server) to define your own rooms and buttons - each button has a numbered "slot" (1-100) and a feedback "key". Sliders use their own separate numbering (1-24). Restart the relay after editing it.
WIRING BUTTONS TO MACROS
Each button in the web app sends its slot number to this driver, which - the same shape as the Slider case below - both writes a variable ("Web Button N Pressed", true) and fires the matching "Web Button N" event (1-100). In Integration Designer, bind each "Web Button N" event to whatever macro you want that button to run - exactly the same way you'd bind a physical keypad button. This driver never needs to know your macros' actual names. The "Web Button N Pressed" variable is there for anything that wants to react to button state directly (e.g. another driver subscribing to it) instead of binding the event.
WIRING SLIDERS TO MACROS
Each slider in the web app sends its slot number (1-24) and value (0-100) to this driver, which writes that value to the matching "Web Slider N Value" variable and fires the "Web Slider N Changed" event. Bind that event to a macro that reads the variable and passes it into the real device's own function (e.g. Set Brightness/Set Volume on whatever driver actually controls it) - the same way a slider bound directly to a driver command's integer parameter would work.
PUSHING FEEDBACK TO THE WEB APP
To make a button light up or a status line update in the web app, call this driver's "Push Feedback" function with the same "key" you gave that button/tile in rooms.json, from whatever macro or event binding already updates your touchpanel feedback for that device. For example, if a Hikvision NVR motion event macro already sets touchpanel feedback, add a "Push Feedback" call to that same macro with key "FrontDoorMotion" and value "true" - your rooms.json can then show a "Front Door Motion" tile bound to that key.
ADVANCED
"Send Custom Event" pushes an arbitrary named event with a JSON data payload to the web app, if you want to build custom UI behavior beyond simple button/feedback tiles (e.g. a live camera snapshot URL, a now-playing track name for a media room). The web app's app.js shows how to listen for these.
"Force Reconnect" closes and reopens the relay connection immediately, useful for troubleshooting.
TROUBLESHOOTING
Enable "Enable Trace" and open the RTI TraceViewer to see raw relay traffic. "Connected"/"Authenticated" System Variables confirm this driver's own link to the relay; "Connected Web Clients" shows how many browsers are currently connected to it. If a button press does nothing, check "Last Macro Triggered" and confirm you bound that slot's event to a macro in Integration Designer.
LICENSING
This driver includes a 2-hour free trial, starting the first time it connects. After the trial, go to https://goldknighttech.ca or email qinghuaatbc@yahoo.ca, with this driver's Mac Address (shown in this driver's own SystemVariables) to purchase a permanent authorization code. Enter the code into the "Authorization Code" config field and redeploy the driver.