Blue Iris NVR
Integrates a Blue Iris video-management server (the Windows PC application) into GEM over its local JSON HTTP API. Each camera becomes a GEM zone you can enable, disable, pause, resume, force-trigger, and — for PTZ models — pan/tilt/zoom or recall presets. System-wide, the driver can switch the active profile (Blue Iris's schedule/arming modes) and the signal / hold state, which makes it a natural target for security macros ("Arm Away → Blue Iris profile 2").
This is a LAN integration: GEM talks directly to the Blue Iris PC, no cloud account required.
Prerequisites
- Blue Iris 5 with the web server enabled: Options → Web server → Enable. Note the port (default
81). - A dedicated web-server user: Options → Users → Add. Give it admin (or at least the permissions for the commands you'll use). The JSON API authenticates as this user.
- If GEM runs on a different subnet than the Blue Iris PC, allow the web-server port through the Windows Defender Firewall.
Create a GEM-only Blue Iris user rather than reusing your personal login — it keeps the audit trail clean and lets you revoke access without changing your own password.
Setup steps
- In GEM, go to Devices → Add Device and choose the Blue Iris NVR driver.
- Fill in:
- Blue Iris PC IP — the LAN IP or hostname of the Windows machine running Blue Iris.
- Web Server Port — default
81. - Username / Password — the web-server user you created.
- Protocol — leave
httpunless you enabled SSL on the Blue Iris web server.
- Save. The driver performs the two-step login handshake and marks the device connected.
- Run the get_cameras command (Script Console, or the device command panel) to list every camera and its short name.
- For each camera you want to control, create a zone whose Address is that camera's short name.
Login handshake
Blue Iris uses a nonce-style login rather than HTTP basic auth. The driver handles it automatically; it's documented here for troubleshooting:
If the server later replies {"result":"fail"} to a command (session aged out), the driver re-runs this handshake once and retries the command transparently.
Attribute reference
Device attributes
| Attribute | Required | Default | Description |
|---|---|---|---|
ip | yes | — | LAN IP / hostname of the Blue Iris PC. |
username | yes | — | Blue Iris web-server user. |
password | yes | — | That user's password. Stored encrypted. |
port | no | 81 | Blue Iris web-server port. |
protocol | no | http | http, or https if SSL is enabled on the web server. |
poll_interval | no | 5000 | State-refresh interval in milliseconds. |
Zone attributes (runtime, set by the driver)
| Attribute | Description |
|---|---|
state | on when the camera is enabled, off when disabled. |
motion | true while Blue Iris reports active motion. |
recording | true while the camera is recording. |
online | false when Blue Iris reports "no signal" for the camera. |
The device also exposes profile (active profile 0–7) and signal (hold state 0–2) as device attributes, refreshed each poll.
Zone address format
The zone Address is the Blue Iris camera short name — the code in Camera settings → General → Short name (e.g. front, gar, drive). It is case-sensitive and contains no spaces. Use get_cameras to read the exact short names; the display name is not accepted.
Commands
| Command | Args | Effect |
|---|---|---|
on / off | address | Enable / disable the camera. |
pause / resume | address | Temporarily pause / resume the camera. |
trigger | address | Force a motion/alert trigger (recording, alerts, macros). |
ptz | address, button | Send a raw PTZ button code. |
ptz_preset | address, preset | Recall a stored PTZ preset (1–20). |
set_profile | profile | Switch the active Blue Iris profile (0–7). |
set_signal | signal | Set the signal / hold state (0 = red, 1 = green, 2 = yellow). |
get_cameras | — | List cameras and their short-name addresses. |
get_status | — | Read current profile, signal and system status. |
PTZ button codes
ptz sends the raw Blue Iris button integer. The common directional codes are:
| Code | Action | Code | Action |
|---|---|---|---|
| 0 | Pan left | 3 | Tilt down |
| 1 | Pan right | 5 | Zoom in |
| 2 | Tilt up | 6 | Zoom out |
Preset recall uses ptz_preset (which sends 100 + preset under the hood). PTZ support and the exact code set depend on the camera and its Blue Iris PTZ configuration — verify against your hardware.
Known limitations
- Snapshots and video streams are not exposed through this driver. Blue Iris serves JPEG/MJPEG/H.264 on separate image URLs (
/image/<short>,/mjpg/<short>); wire those into a camera widget directly rather than through the JSON API. - Alert/clip retrieval (
cmd=alertlist,cmd=cliplist) is not implemented — this driver focuses on live control, not media browsing. - Profile and signal are system-wide, not per-camera. Setting a profile affects the whole Blue Iris instance.
- Camera state is polled (default every 5 s), so motion/recording flags lag real events by up to one poll interval. Lower
poll_intervalfor snappier state at the cost of more requests.
Troubleshooting
| Symptom | Cause / check |
|---|---|
| Login failed | Username/password don't match a Blue Iris web-server user, or the web server is disabled. Re-check Options → Users and Options → Web server. |
| Commands do nothing | The zone address isn't the exact camera short name (case-sensitive). Run get_cameras and copy the id value. |
| Connection timeout | Wrong port, or the Windows firewall is blocking the web-server port from GEM's host. |
| PTZ ignored | The camera isn't PTZ-capable in Blue Iris, or the button code isn't mapped for that model. |
| Repeated re-logins in the log | The Blue Iris session timeout is very short, or another client is invalidating the session. Increase the session lifetime in Options → Web server. |