Skip to main content

Universal Devices ISY / IoX

Controls Universal Devices controllers — the legacy ISY994 and the current IoX platforms (eisy, Polisy) — over their on-LAN REST interface. Each ISY node (INSTEON, Z-Wave or UPB device) or scene becomes a GEM zone, and ISY programs can be run or stopped from macros and the command surface.

The driver talks HTTP(S) basic auth to /rest and polls /rest/status for node state. No cloud account and no Universal Devices portal login are involved.

One device, many zones

Add a single GEM device for the ISY controller itself — not one per light. Each INSTEON, Z-Wave or UPB node and each scene you want to control then becomes its own zone bound to that one device, addressed by its ISY node id.

Prerequisites​

  • An ISY/IoX admin account (username + password) with local access. On a fresh ISY994 this is admin / admin — change it before deploying.
  • Network reachability from the GEM server to the controller.
  • Know which platform you have — it decides the protocol and port:
PlatformProtocolDefault port
ISY994http80
eisy / Polisyhttps8443
note

The eisy/Polisy HTTPS certificate is self-signed. GEM accepts it automatically — you do not need to install or trust anything.

Setup steps​

  1. In Admin → Devices, create a device with driver isy_iox.

  2. Set the required attributes:

    • IP Address — the controller's LAN IP.
    • Admin Username / Admin Password — the ISY/IoX local account.
  3. If you have an eisy or Polisy, set Protocol = https and Port = 8443. Leave the defaults for an ISY994.

  4. Save the device, then open it and switch to the Commands tab (it appears once the device is saved with its isy_iox command set, which GEM assigns automatically). Select get_devices, run it, and read the response console — it lists every INSTEON / Z-Wave / UPB node and every scene with its address and name. If you prefer code, run the same call from System → Script Console: await gem.command({device_id: <device_id>, command: 'get_devices'}).

  5. For each node or scene you want to control, go to Admin → Zones and add a zone:

    • Device — select this ISY controller. Picking it makes the Address field show the ISY addressing hint.
    • Subsystem — Lights for dimmers and switches, Switches for relay / appliance modules. The subsystem sets the zone's on / off / level controls and iconography.
    • Address — the ISY address exactly as get_devices reports it (see the zone-address notes below).

    GEM does not create zones automatically from get_devices — the command only lists what is available; you add each zone yourself and bind it to this device.

Attribute reference​

Device attributes​

AttributeRequiredDefaultDescription
ipyes—LAN IP or hostname of the controller.
usernameyes—ISY/IoX admin account username.
passwordyes—ISY/IoX admin account password (stored encrypted).
portno8080 for ISY994, 8443 for eisy/Polisy.
protocolnohttphttp or https.
status_intervalno15000Milliseconds between /rest/status polls.

Zone address​

The zone Address is the ISY node address, entered exactly as get_devices reports it:

  • INSTEON — four space-separated hex bytes, e.g. 1D 3C 5B 1.
  • Z-Wave — e.g. ZW002_1.
  • Scene (group) — the numeric scene id, e.g. 29051.

The driver URL-encodes the address, so the embedded spaces are handled for you — enter them verbatim, do not substitute %20.

Commands​

CommandArgsISY action
onaddressDON
offaddressDOF
set_leveladdress, levelDON/<raw> (see scaling below)
fast_onaddressDFON (INSTEON fast-on)
fast_offaddressDFOF (INSTEON fast-off)
brightenaddressBRT (one step brighter)
dimaddressDIM (one step dimmer)
run_programprogram_id/rest/programs/<id>/run
stop_programprogram_id/rest/programs/<id>/stop
get_devices—Enumerate nodes + scenes
get_status—Read all node states from /rest/status

Dimmer level scaling​

ISY dimmers use a raw 0–255 on-level (128 ≈ 50%). GEM zones use 0–100, so set_level scales your 0–100 value to the nearest 0–255 raw value before sending DON. Values outside 0–100 are clamped; a missing or non-numeric level is sent as 0. Reported state is scaled back the same way.

warning

The 0–255 scale is the INSTEON convention. UPB and Z-Wave nodes may interpret the DON on-level parameter as a 0–100 percentage or a 0–99 range instead. If a dimmer lands at the wrong brightness, verify the node's expected range against Universal Devices' documentation and adjust the level you send.

State polling​

The driver polls /rest/status every status_interval milliseconds and reflects each node's ST property onto its zone:

  • state → on when the raw value is greater than 0, otherwise off.
  • level → the raw 0–255 value scaled to 0–100.

It does not subscribe to the ISY real-time event stream, so a change made at the switch or in another app appears in GEM within one poll interval rather than instantly. Lower status_interval for snappier feedback at the cost of more requests.

Known limitations​

  • Polling, not events. Real-time subscription (the ISY WebSocket / SOAP event stream) is not yet wired; state is reconciled by polling.
  • No node/scene management. The driver controls existing nodes, scenes and programs; it does not add, remove, link or rename them — do that in ISY's Admin Console.
  • Program addressing. run_program / stop_program take the numeric program id shown in the ISY program tree, not the program name.
  • On-level scale for non-INSTEON dimmers is unverified against real UPB/Z-Wave hardware — see the warning above.

Troubleshooting​

SymptomCheck
authentication failed (401) in the logUsername/password wrong, or the account lacks local access. Re-enter credentials.
Connects but no zones ever updateConfirm each zone's Address matches a real node id from get_devices, including the spaces.
Timeouts / never connectsWrong protocol/port for the platform (ISY994 = http/80, eisy/Polisy = https/8443), or a firewall between GEM and the controller.
Dimmer goes to the wrong brightnessNon-INSTEON node interpreting the on-level differently — see the dimmer scaling warning.
eisy/Polisy shows a certificate error elsewhere but works in GEMExpected — GEM accepts the self-signed cert; other tools may not.
  • Devices — adding and configuring the ISY controller device
  • Zones — creating one zone per node or scene and setting its address
  • Subsystems — placing the zones under Lights or Switches
  • Commands — the full driver-managed command list
  • Macros — running ISY programs and scenes from automations
  • Triggers — reacting to node state changes polled from the ISY