---
layout: page
title: "ISY994 Controller"
description: "Instructions how to setup the ISY994 controller within Home Assistant."
date: 2015-01-20 22:36
sidebar: true
comments: false
sharing: true
footer: true
logo: universal_devices.png
ha_category: Hub
ha_release: 0.28
ha_iot_class: "Local Push"
---

The ISY994 is a home automation controller that is capable of controlling Insteon and X10 devices. Some models of the ISY994 can even control Z-Wave devices.
The ISY994 controller is manufactured by [Universal Devices](https://www.universal-devices.com/residential/isy994i-series/).

### {% linkable_title Basic Configuration %}

Home Assistant is capable of communicating with any binary sensor, cover, fan, light, lock, sensor and switch that is configured on the controller. Using the programs on the controller, custom binary sensors, cover, fan, lock, and switches can also be created.

To integrate your ISY994 controller with Home Assistant, add the following section to your `configuration.yaml` file:

```yaml
# Example configuration.yaml entry
isy994:
  host: ISY_ADDRESS
  username: ISY_USERNAME
  password: ISY_PASSWORD
```
Configuration variables:

- **host** (*Required*): The host entry should be in full URL format, eg. http://192.168.10.100:80
- **username** (*Required*): The username that used to access the ISY interface.
- **password** (*Required*): The password that used to access the ISY interface.
- **sensor_string** (*Optional*): This is the string that is used to identify which devices are to be assumed to be sensors instead of lights of switches. By default, this string is 'sensor'. If this string is found in the device name or folder, Home Assistant will assume it is as a sensor or binary sensor (if the device has on/off or true/false states).
- **hidden_string** (*Optional*): The HIDDEN_STRING is a string that is used to identify which devices are to be hidden on Home Assistant's front page. This string will be stripped from the device's name before being used. By default, this value is '{HIDE ME}'.
- **tls** (*Optional*): This entry should reflect the version of TLS that the ISY controller is using for HTTPS encryption. This value can be either 1.1 or 1.2. If this value is not set, it is assumed to be version 1.1. This is the default for most users. ISY994 Pro users may likely be using 1.2. When using HTTPS in the host entry, it is best practice to set this value.

Once the ISY controller is configured, it will automatically import any binary sensors, covers, fans, lights, locks, sensors and switches it can locate.

### {% linkable_title Creating Custom Devices %}

Using the Programs tab in the controller's Administrative Console, custom devices can be created that will appear natively inside of Home Assistant. Home Assistant will scan the following folders and build the device to the associated domains:

```
My Programs
├── HA.binary_sensor
|   ├── Movement In House
|   |   └── status
|   └── Garage Open
|   |   └── status
├── HA.cover
|   ├── Left Garage Door
|   |   ├── actions
|   |   └── status
|   ├── Living Room Blinds
|   |   ├── actions
|   |   └── status
├── HA.fan
|   ├── Desk Fan
|   |   ├── actions
|   |   └── status
|   ├── Living Room Fan
|   |   ├── actions
|   |   └── status
├── HA.lock
|   ├── Front Door
|   |   ├── actions
|   |   └── status
|   ├── Back Door
|   |   ├── actions
|   |   └── status
├── HA.switch
|   ├── Dining Lights
|   |   ├── actions
|   |   └── status
|   ├── Sleep Mode
|   |   ├── actions
|   |   └── status
```

A device is created by creating a directory, with the name for the device, under any of the following root directories:
 * *HA.binary_sensor* will create a binary sensor (see [Customizing Devices](https://home-assistant.io/getting-started/customizing-devices/) to set the sensor class)
 * *HA.cover* will create a cover
 * *HA.fan* will create a fan
 * *HA.lock* will create a lock
 * *HA.switch* will create a switch

A program, named *status*, is required under the program device directory. A program, named *actions*, is required for all program devices except for binary_sensor. Any other programs in these device directories will be ignored.

<p class='img'>
  <img src='{{site_root}}/images/isy994/isy994_CoverExample.png' />
</p>

The *status* program in this directory is what indicates the state of the device:
 * *binary_sensor* on if the clause returns true, otherwise off
 * *cover* closed if the clause returns true, otherwise open
 * *fan* on if the clause returns true, otherwise off
 * *lock* locked if the clause returns true, otherwise unlocked
 * *switch* on if the clause returns true, otherwise off

<p class='img'>
  <img src='{{site_root}}/images/isy994/isy994_SwitchStatusExample.png' />
</p>

The *actions* program indicates what should be performed for the following device services:
 * *cover* the THEN clause is evaluated for the open_cover service, the ELSE clause is evaluated for the close_cover service
 * *fan* the THEN clause is evaluated for the turn_on service, the ELSE clause is evaluated for the turn_off service
 * *lock* the THEN clause is evaluated for the lock service, the ELSE clause is evaluated for the unlock service
 * *switch* the THEN clause is evaluated for the turn_on service, the ELSE clause is evaluated for the turn_off service

<p class='img'>
  <img src='{{site_root}}/images/isy994/isy994_SwitchActionsExample.png' />
</p>

The example program above shows how to control a legacy X10 device from Home Assistant using an ISY controller.
