Just Add Power (AV-over-IP)
Just Add Power (often shortened to "JAP" or "J+P") is an AV-over-IP video distribution
system. Instead of a fixed-size matrix box, every source is plugged into an encoder (a
transmitter, named like TX2) and every display is plugged into a decoder (a receiver, named
like RX4), and all of them live on a managed network switch. "Route source 2 to display 4" means
telling decoder 4 to subscribe to encoder 2's multicast stream — the network is the matrix, so it
grows to as many endpoints as the switch fabric allows.
This GEM driver is a coordinator, not one device per box. You add a single GEM device — it
appears in the driver list as Just Add Power — and point it at the IP of any one JAP unit. On
connect it talks to that unit's directory, discovers every encoder and decoder on the system,
and auto-creates one GEM zone per decoder so each display shows up ready to control. Routing is
done with one command, set_input, which switches a decoder to a chosen encoder by number.
GEM routes streams; it does not configure the JAP boxes or the switch. Provision the encoders and decoders (IP addresses, transmit settings) in Just Add Power's own tooling, and configure the network switch for multicast — IGMP snooping on, an IGMP querier active, and the JAP units on a dedicated multicast-capable VLAN. Without proper multicast handling, decoders show snow or freeze on every route change. Once each box has a reachable IP and the switch passes multicast cleanly, GEM can discover and route between them.
How GEM models Just Add Power
| In the real world | In GEM |
|---|---|
| The whole JAP system (many encoders + decoders) | One coordinator device |
A display's decoder (e.g. RX4) | An auto-created zone, address = the decoder's number (4) |
A source's encoder (e.g. TX2) | An input number (2) you route with set_input |
| "Route this source to this display" | A set_input command on the decoder's zone |
The driver only auto-creates zones for decoders (displays). Encoders are discovered too, but they're not given zones — they're the inputs you route, identified by their number. You point the coordinator at one reachable JAP IP; it does not need to be any particular unit, it's just the anchor GEM queries to read the system directory.
Prerequisites
- Encoders and decoders fully commissioned in Just Add Power's tooling and reachable by IP from the GEM controller.
- A multicast-capable VLAN for the JAP traffic: IGMP snooping configured and an IGMP querier active on the switch. This is the single most common cause of JAP problems — a switch that floods or drops multicast makes decoders freeze or show snow on route changes.
- DHCP reservations (or static IPs) for every JAP unit, so encoder and decoder IPs never move. The coordinator re-reads each unit's IP on every sync, but stable addressing keeps things predictable.
- The JAP units serve control over plain HTTP on port 80 with no authentication — there is no login to set in GEM.
Setup
- Open Devices, add a device, and choose the Just Add Power driver. It suggests the AV subsystem and a controller device type — accept those. This one device stands in for the whole JAP system; you do not add a device per encoder or decoder.
- Set the Coordinator IP Address (
ip) to the IP of any reachable JAP unit. This is the anchor GEM queries to read the system directory. - Save and enable the device. On connect the driver runs a sync automatically — it reads the JAP
directory, then for every decoder it finds it creates a GEM zone in the AV subsystem,
filling in:
- Address = the decoder's number (the digits in its JAP ID, e.g.
RX4→4). - Unit IP (
ip) = that decoder's own IP address. - JAP Mode (
jap_mode) =decoder.
- Address = the decoder's number (the digits in its JAP ID, e.g.
- Open Zones and confirm one zone per display appeared, each named after the device
and decoder number (for example
<device>_4) with the decoder's reported name as its label. Rename the labels to room-friendly names ("Great Room TV", "Bar Left") so they read well on touch panels.
If you add JAP units later, or the first sync didn't see everything, send the sync_devices
command to the coordinator (from the device's Commands tab, a macro, or a button). It re-reads the
directory and creates zones for any new decoders. Discovery only works within the coordinator's own
VLAN — JAP units on other subnets are not found.
Routing AV — set_input
Switching what a display shows is one command: set_input, sent to the decoder's zone, with
the encoder's number.
| Argument | Required | What it is |
|---|---|---|
encoder | yes | The encoder (input) number to route to this decoder — the digits in the encoder's JAP ID (e.g. TX2 → 2). |
address | auto | The decoder number identifying the target zone. GEM fills this in automatically when you send the command to a JAP zone; you only set it by hand when targeting the device directly. |
For example, to show encoder 2 on the decoder that GEM created as zone "Great Room TV", send
set_input to that zone with encoder = 2. GEM tells the JAP system to route transmitter 2 to
that receiver, and records the choice as the zone's input attribute so the UI reflects what's
playing.
Where you issue the command
- From the device's Commands tab — handy for testing a route during commissioning. Set the
command to
set_input, pick the decoder zone, and enter the encoder number. See Commands. - From a UI button — wire a control to run
set_inputon a fixed decoder zone with a fixed encoder number ("Watch Cable" on the Great Room TV). - In a macro / as an AV source — the standard way to give users a source menu per room. See the next section.
Building source selection with AV Sources and AV Zones
The auto-created entries are plain Zones, not AV Zones. To present each display as a viewing area with a source menu on a touch panel, layer the AV system on top — this is the same matrix pattern GEM uses for any switcher:
-
For each decoder, create an AV Zone (Open AV Zones) linked to that decoder's zone. Set the AV Zone's Address to the decoder number (its matrix output).
-
For each encoder/source, create an AV Source (Open AV Sources). Set the AV Source's Address to the encoder number (its matrix input), and give it an On Macro that routes it.
-
The On Macro is a single Send Command to the JAP coordinator with command
set_input, targeting the AV zone and passing the encoder via the address placeholders, so one macro serves every source:encoder=[@av_source.address]— the selected source's encoder number.address=[@av_zone.address]— the target display's decoder number.
Mark these in the macro step's arg options so GEM substitutes the live source/zone numbers at run time. (
[@av_zone.address]resolves to the matrix output;[@av_source.address]to the matrix input — see AV Sources.)
With that in place, selecting a source in a room runs its On Macro, which fires set_input, and the
display switches. Sources shared across every room (a cable headend, a streaming encoder) are good
candidates for Global AV sources; gear feeding a single display can be a zone-specific source.
Other commands
All of these except sync_devices operate on a decoder zone (GEM resolves the target unit from
the zone's IP), so send them to a zone — address is filled in for you.
| Command | Arguments | Action |
|---|---|---|
sync_devices | (none) | Re-read the JAP directory and auto-create zones for any new decoders. Targets the coordinator, not a zone. |
set_input | encoder (+ address) | Route the encoder to this decoder. |
reboot | (uses address) | Reboot the JAP unit behind the addressed zone. |
get_details | item (+ address) | Read a live status section from the unit (for example video, device, system). Diagnostic. |
get_settings | item (+ address) | Read a settings section from the unit. Diagnostic. |
cli | command (+ address) | Pass a raw Just Add Power CLI command straight through to the addressed unit. For advanced use against JAP's own command set. |
Because GEM only auto-creates zones for decoders, the per-unit commands (reboot, get_details,
get_settings, cli) target decoders out of the box. To run one of these against an encoder,
create a zone manually, set its Unit IP (ip) to the encoder's address and JAP Mode
(jap_mode) to encoder, then send the command to that zone.
Live status
While connected, the coordinator polls every decoder zone's video status on an interval (default 30 seconds, set by Status Poll Interval below) and writes what it reads back onto the zone as attributes — so the zone reflects the decoder's current signal without you asking. This is also why a freshly switched display updates its state shortly after a route change.
Attributes
Device
| Attribute | Type | Required | Description |
|---|---|---|---|
ip | string | yes | Coordinator IP Address — the IP of any reachable JAP unit, used as the sync anchor. |
status_interval | integer | no | Status Poll Interval (ms) — how often decoder video status is polled. Default 30000 (30 s). |
request_timeout | integer | no | Request Timeout (ms) — per-request HTTP timeout to a JAP unit. Default 30000. |
Zone (auto-populated during sync)
| Attribute | Type | Description |
|---|---|---|
ip | string | Unit IP — the IP of the encoder or decoder this zone represents. |
jap_mode | string | JAP Mode — decoder or encoder. Set automatically on auto-created decoder zones; set it yourself on a hand-made encoder zone. |
input | integer | The encoder number currently routed to this decoder. Set by set_input; reflects the live route. |
The zone's Address field (not an attribute) holds the JAP decoder number — this is what identifies the unit to route to. It is populated automatically during sync.
Known limitations
- Decoders get zones; encoders don't. Encoders are discovered and used as input numbers, but
GEM doesn't create a zone or list them for you. Identify an encoder by the number in its JAP ID
(
TX3→3), which you can read from the Just Add Power tooling. - Discovery is VLAN-local.
sync_devicesonly finds units the coordinator IP can reach on its own VLAN. JAP units on other subnets won't appear. - GEM does not configure the JAP boxes or the network. Encoder/decoder provisioning, transmit settings, and the switch's multicast configuration are done on the hardware, not through GEM.
- No login. The driver assumes the JAP units' default unauthenticated HTTP control interface.
Troubleshooting
| Symptom | Check |
|---|---|
sync_devices comes back empty / no zones created | Confirm the coordinator IP can reach the JAP units on the same VLAN; units are not discovered across subnets. Check the unit is powered and its web interface is reachable from the GEM host. |
| Decoder image freezes or shows snow on switch | Multicast misconfiguration on the switch — turn on IGMP snooping and ensure an IGMP querier is active, with the JAP units on a dedicated multicast-capable VLAN. This is by far the most common JAP issue and is a network fix, not a GEM one. |
set_input returns 404 | The zone's Unit IP is wrong, or the unit is in the wrong role (an encoder where a decoder is expected). Verify the zone's ip and jap_mode. |
set_input says "invalid encoder or decoder address" | The encoder argument or the zone's Address isn't a number. Both must be the numeric part of the JAP ID. |
| A new JAP unit doesn't appear | Run sync_devices again after the unit is on the network; only decoders auto-create zones. |
| A zone's address looks like an IP, not a number | Older auto-created zones used the unit IP as the address; the driver migrates these to the numeric decoder number on the next sync. Run sync_devices once and re-check. |
Related documentation
- Devices — add and configure the coordinator device.
- Zones — the per-decoder zones the driver auto-creates.
- Subsystems — the AV subsystem the coordinator and its zones belong to.
- Commands — the Commands tab and Test runner for
set_input/sync_devices. - AV Sources and AV Zones — build per-room source menus on top of the auto-created zones.
- Macros — the per-source On Macro that issues
set_input. - Crestron NVX — another AV-over-IP coordinator driver, command-driven rather than zone-discovering.