# HAI by Leviton OmniLink Binding
This binding integrates the Omni and Lumina (opens new window) line of home automation systems. At its core the Omni is a hardware board that provides security and access features. It connects to many other devices through serial ports or wired contacts and exposes them through a single TCP based API.
# Supported Things
The OmniPro/Lumina controller acts as a "bridge" for accessing other connected devices.
Omni type | Hardware Type | Things |
---|---|---|
Controller | Omni (Pro II, IIe, LTe), Lumina | controller (omni, lumina) |
Lights | Built-in, UPB, HLC | unit , dimmable , upb , room |
Thermostats | Omnistat, Omnistat2 | thermostat |
Temperature Sensors | 31A00-1/31A00-7 | temp_sensor |
Humidity Sensors | 31A00-2 | humidity_sensor |
Zones | Built-in/Hardwire, GE Wireless | zone |
Audio Zones/Sources | HAI Hi-Fi, Russound, NuVo, Xantech, Speakercraft | audio_zone , audio_source |
Consoles | HAI Omni Console, HAI Lumina Console | console |
Areas | Built-in | area , lumina_area |
Buttons | Built-in | button |
Flags | Built-in | flag |
Output | Built-in/Hardwire | output |
Access Control Reader Lock | Leviton Access Control Reader | lock |
# Discovery
# Controller
Omni and Lumina controllers must be manually added using the IP and port of the controller as well as the 2 encryption keys required for network access.
# Devices
Once a connection can be established to a controller, all connected devices will be automatically discovered and added to the inbox.
# Thing Configuration
An Omni or Lumina controller requires the IP address (ipAddress
), optional port (port
defaults to 4369), and 2 encryption keys (key1
, key2
).
The hexadecimal pairs in the encryption keys are typically delimited using a colon:
, but dashes -
, spaces or no delimiter may be used.
In the thing file, this looks like:
Bridge omnilink:controller:home [ ipAddress="127.0.0.1", port=4369, key1="XXXXXXXXXXXXXXXX", key2="XXXXXXXXXXXXXXXX" ] {
// Add your things here
}
The devices are identified by the device number that the OmniLink bridge assigns to them, see the Full Example section below for a manual configuration example.
# Channels
The devices support some of the following channels:
Channel Type ID | Item Type | Description | Thing types supporting this channel |
---|---|---|---|
activate_keypad_emergency | Number | Activate a burglary, fire, or auxiliary keypad emergency alarm on Omni based models. | area |
alarm_burglary | Switch | Indicates if a burglary alarm is active. | area |
alarm_fire | Switch | Indicates if a fire alarm is active. | area |
alarm_gas | Switch | Indicates if a gas alarm is active. | area |
alarm_auxiliary | Switch | Indicates if an auxiliary alarm is active. | area |
alarm_freeze | Switch | Indicates if a freeze alarm is active. | area |
alarm_water | Switch | Indicates if a water alarm is active. | area |
alarm_duress | Switch | Indicates if a duress alarm is active. | area |
alarm_temperature | Switch | Indicates if a temperature alarm is active. | area |
mode | Number | Represents the area security mode. | area , lumina_area |
disarm | String | Send a 4 digit user code to disarm the system. | area |
day | String | Send a 4 digit user code to arm the system to day. | area |
night | String | Send a 4 digit user code to arm the system to night. | area |
away | String | Send a 4 digit user code to arm the system to away. | area |
vacation | String | Send a 4 digit user code to arm the system to vacation. | area |
day_instant | String | Send a 4 digit user code to arm the system to day instant. | area |
night_delayed | String | Send a 4 digit user code to arm the system to night delayed. | area |
home | String | Send a 4 digit user code to set the system to home. | lumina_area |
sleep | String | Send a 4 digit user code to set the system to sleep. | lumina_area |
away | String | Send a 4 digit user code to set the system to away. | lumina_area |
vacation | String | Send a 4 digit user code to set the system to vacation. | lumina_area |
party | String | Send a 4 digit user code to set the system to party. | lumina_area |
special | String | Send a 4 digit user code to set the system to special. | lumina_area |
source_text_{1,2,3,4,5,6} | String | A line of metadata from this audio source. | audio_source |
polling | Switch | Enable or disable polling of this audio source. | audio_source |
zone_power | Switch | Power status of this audio zone. | audio_zone |
zone_mute | Switch | Mute status of this audio zone. | audio_zone |
zone_volume | Dimmer | Volume level of this audio zone. | audio_zone |
zone_source | Number | Source for this audio zone. | audio_zone |
zone_control | Player | Control the audio zone, e.g. start/stop/next/previous. | audio_zone |
system_date | DateTime | Controller date/time. See Rule Actions for how to set controller date/time. | controller |
last_log | String | Last log message on the controller, represented in JSON. | controller |
enable_disable_beeper | Switch | Enable/Disable the beeper for this/all console(s). | controller , console |
beep | Switch | Send a beep command to this/all console(s). | controller , console |
press | Switch | Sends a button event to the controller. | button |
low_setpoint | Number | The current low setpoint for this humidity/temperature sensor. | temp_sensor , humidity_sensor |
high_setpoint | Number | The current high setpoint for this humidity/temperature sensor. | temp_sensor , humidity_sensor |
temperature | Number:Temperature | The current temperature at this thermostat/temperature sensor. | thermostat , temp_sensor |
humidity | Number:Dimensionless | The current relative humidity at this thermostat/humidity sensor. | thermostat , humidity_sensor |
freeze_alarm | Contact | Closed when freeze alarm is triggered by this thermostat. | thermostat |
comm_failure | Contact | Closed during a communications failure with this thermostat. | thermostat |
outdoor_temperature | Number:Temperature | The current outdoor temperature detected by this thermostat. | thermostat |
heat_setpoint | Number:Temperature | The current low/heating setpoint of this thermostat. | thermostat |
cool_setpoint | Number:Temperature | The current high/cooling setpoint of this thermostat. | thermostat |
humidify_setpoint | Number:Dimensionless | The current low/humidify setpoint for this thermostat. | thermostat |
dehumidify_setpoint | Number:Dimensionless | The current high/dehumidify setpoint for this thermostat. | thermostat |
system_mode | Number | The current system mode of this thermostat. | thermostat |
fan_mode | Number | The current fan mode of this thermostat. | thermostat |
hold_status | Number | The current hold status of this thermostat. | thermostat |
status | Number | The current numeric status of this thermostat. | thermostat |
level | Dimmer | Increase/Decrease the level of this unit/dimmable unit/UPB unit. | unit , dimmable , upb |
switch | Switch | Turn this unit/dimmable unit/flag/output/room on/off. | unit , dimmable , upb , flag , output , room |
on_for_seconds | Number | Turn on this unit for a specified number of seconds. | unit , dimmable , upb , flag , output |
off_for_seconds | Number | Turn off this unit for a specified number of seconds. | unit , dimmable , upb , flag , output |
on_for_minutes | Number | Turn on this unit for a specified number of minutes. | unit , dimmable , upb , flag , output |
off_for_minutes | Number | Turn off this unit for a specified number of minutes. | unit , dimmable , upb , flag , output |
on_for_hours | Number | Turn on this unit for a specified number of hours. | unit , dimmable , upb , flag , output |
off_for_hours | Number | Turn off this unit for a specified number of hours. | unit , dimmable , upb , flag , output |
upb_status | String | Send a UPB status request message for this UPB unit to the controller. | upb |
value | Number | Numeric value of this flag. | flag |
scene_{a,b,c,d} | Switch | Turn this scene on/off. | room |
state | Number | The current state of this room. | room |
contact | Contact | Contact state information of this zone. | zone |
current_condition | Number | Current condition of this zone. | zone |
latched_alarm_status | Number | Latched alarm status of this zone. | zone |
arming_status | Number | Arming status of this zone. | zone |
bypass | String | Send a 4 digit user code to bypass this zone. | zone |
restore | String | Send a 4 digit user code to restore this zone. | zone |
# Trigger Channels
The devices support some of the following trigger channels:
Channel Type ID | Description | Thing types supporting this channel |
---|---|---|
all_on_off_event | Event sent when an all on/off event occurs. | area , lumina_area |
phone_line_event | Event sent when the phone line changes state. | controller |
ac_power_event | Event sent when AC trouble conditions are detected. | controller |
battery_event | Event sent when battery trouble conditions are detected. | controller |
dcm_event | Event sent when digital communicator trouble conditions are detected. | controller |
energy_cost_event | Event sent when the cost of energy changes. | controller |
camera_trigger_event | Event sent when a camera trigger is detected. | controller |
upb_link_activated_event | Event sent when a UPB link is activated. | controller |
upb_link_deactivated_event | Event sent when a UPB link is deactivated. | controller |
activated_event | Event sent when a button is activated. | button |
switch_press_event | Event sent when an ALC, UPB, Radio RA, or Starlite switch is pressed. | dimmable , upb |
# Rule Actions
This binding includes a rule action, which allows synchronizing the controller time to match the openHAB system time with a user specified zone. There is a separate instance for each contoller, which can be retrieved through:
where the first parameter always has to be omnilink
and the second is the full Thing UID of the controller that should be used.
Once this action instance is retrieved, you can invoke the synchronizeControllerTime(String zone)
method on it:
# Full Example
# Example omnilink.things
Bridge omnilink:controller:home [ ipAddress="127.0.0.1", port=4369, key1="XXXXXXXXXXXXXXXX", key2="XXXXXXXXXXXXXXXX" ] {
Thing area MainArea "Main Area" @ "Home" [ number=1 ]
Thing upb UpKitTable "Table Lights" @ "Upstairs Kitchen" [ number=4 ]
Thing upb UpOfcDesk "Desk Lights" @ "Upstairs Office" [ number=10 ]
Thing thermostat UpstrsThermo "Upstairs Temperature" @ "Upstairs Entry" [ number=1 ]
Thing zone FrontDoor "Front Door" @ "Upstairs Entry" [ number=2 ]
Thing zone GarageDoor "Garage Door" @ "Laundry Room" [ number=3 ]
Thing zone BackDoor "Back Door" @ "Upstairs Kitchen" [ number=4 ]
Thing zone OneCarGarageDo "One Car Garage" @ "Garage" [ number=5 ]
Thing zone TwoCarGarageDo "Two Car Garage" @ "Garage" [ number=6 ]
Thing zone BsmtBackDoor "Back Door" @ "Basement Workout Room" [ number=8 ]
Thing zone MBRDeckDoor "Deck Door" @ "Master Bedroom" [ number=9 ]
Thing zone MBRMotion "Motion" @ "Master Bedroom" [ number=10 ]
Thing zone PorchDoor "Porch Door" @ "Upstairs Office" [ number=11 ]
Thing zone UpOffMotion "Motion" @ "Upstairs Office" [ number=12 ]
Thing zone UpLivMotion "Motion" @ "Upstairs Living Room" [ number=13 ]
Thing zone BsmtWORMotion "Motion" @ "Basement Workout Room" [ number=14 ]
Thing zone GarageMotion "Motion" @ "Garage" [ number=15 ]
Thing console UpstrsConsole "Console" @ "Laundry Room" [ number=1 ]
Thing button MainButton "Button" @ "Home" [ number=1 ]
}
# Example omnilink.items
/*
* Alarms / Areas
*/
Group:Switch:OR(ON, OFF) Alarms "All Alarms [%s]"
String AlarmMode "Alarm [%s]" <alarm> {channel="omnilink:area:home:MainArea:mode" [profile="transform:MAP", function="area-modes.map", sourceFormat="%s"]}
Switch AlarmBurglary "Burglary Alarm [%s]" (Alarms) {channel="omnilink:area:home:MainArea:alarm_burglary"}
Switch AlarmFire "Fire Alarm [%s]" (Alarms) {channel="omnilink:area:home:MainArea:alarm_fire"}
Switch alarm_gas "Gas Alarm [%s]" (Alarms) {channel="omnilink:area:home:MainArea:alarm_gas"}
Switch AlarmAuxiliary "Auxiliary Alarm [%s]" (Alarms) {channel="omnilink:area:home:MainArea:alarm_auxiliary"}
Switch AlarmFreeze "Freeze Alarm [%s]" (Alarms) {channel="omnilink:area:home:MainArea:alarm_freeze"}
Switch AlarmWater "Water Alarm [%s]" (Alarms) {channel="omnilink:area:home:MainArea:alarm_water"}
Switch AlarmDuress "Duress Alarm [%s]" (Alarms) {channel="omnilink:area:home:MainArea:alarm_duress"}
Switch AlarmTemperature "Temperature Alarm [%s]" (Alarms) {channel="omnilink:area:home:MainArea:alarm_temperature"}
Number AlarmModeDisarm {channel="omnilink:area:home:MainArea:disarm"}
Number AlarmModeDay {channel="omnilink:area:home:MainArea:day"}
Number AlarmModeNight {channel="omnilink:area:home:MainArea:night"}
Number AlarmModeAway {channel="omnilink:area:home:MainArea:away"}
Number AlarmModeVacation {channel="omnilink:area:home:MainArea:vacation"}
Number AlarmModeDayInstant {channel="omnilink:area:home:MainArea:day_instant"}
Number AlarmModeNightDelayed {channel="omnilink:area:home:MainArea:night_delayed"}
/*
* Lights
*/
Switch UpKitTable "Table Lights [%s]" <switch> {channel="omnilink:upb:home:UpKitTable:level"}
Dimmer UpOfcDesk "Desk Lights [%d]" <slider> {channel="omnilink:upb:home:UpOfcDesk:level"}
/*
* Thermostat
*/
Group UpstrsThermo "Upstairs Thermostat"
Number:Temperature UpstrsThermo_Temp "Temperature [%.1f %unit%]" <temperature> (UpstrsThermo) {channel="omnilink:thermostat:home:UpstrsThermo:temperature"}
Number UpstrsThermo_Status "Status [MAP(therm-status.map):%s]" <heating> (UpstrsThermo) {channel="omnilink:thermostat:home:UpstrsThermo:status"}
Number UpstrsThermo_System "System Mode [MAP(therm-tempmode.map):%s]" <temperature> (UpstrsThermo) {channel="omnilink:thermostat:home:UpstrsThermo:system_mode"}
Number UpstrsThermo_Fan "Fan Mode [MAP(therm-fanmode.map):%s]" <fan> (UpstrsThermo) {channel="omnilink:thermostat:home:UpstrsThermo:fan_mode"}
Number UpstrsThermo_Hold "Hold Mode [MAP(therm-holdmode.map):%s]" <fan> (UpstrsThermo) {channel="omnilink:thermostat:home:UpstrsThermo:hold_mode"}
Number UpstrsThermo_HeatPoint "System HeatPoint [%d]" <temperature_hot> (UpstrsThermo) {channel="omnilink:thermostat:home:UpstrsThermo:heat_setpoint"}
Number UpstrsThermo_CoolPoint "System CoolPoint [%d]" <temperature_cool> (UpstrsThermo) {channel="omnilink:thermostat:home:UpstrsThermo:cool_setpoint"}
/*
* Motion and Doors
*/
Group:Contact:OR(OPEN, CLOSED) Doors "All Doors [%s]"
Contact FrontDoor "Front Door" <door> (Doors) {channel="omnilink:zone:home:FrontDoor:contact"}
Contact GarageDoor "Garage Door" <door> (Doors) {channel="omnilink:zone:home:GarageDoor:contact"}
Contact BackDoor "Back Door" <door> (Doors) {channel="omnilink:zone:home:BackDoor:contact"}
Contact BsmtBackDoor "Back Door" <door> (Doors) {channel="omnilink:zone:home:BsmtBackDoor:contact"}
Contact MBRDeckDoor "Deck Door" <door> (Doors) {channel="omnilink:zone:home:MBRDeckDoor:contact"}
Contact PorchDoor "Porch Door" <door> (Doors) {channel="omnilink:zone:home:PorchDoor:contact"}
Group:Contact:OR(OPEN, CLOSED) GarageDoors "All Garage Doors [%s]"
Contact TwoCarGarageDo "Two Car Garage Door" <garagedoor> (GarageDoors) {channel="omnilink:zone:home:TwoCarGarageDo:contact"}
Contact OneCarGarageDo "One Car Garage Door" <garagedoor> (GarageDoors) {channel="omnilink:zone:home:OneCarGarageDo:contact"}
Group:Contact:OR(OPEN, CLOSED) Motion "All Motion Sensors [%s]"
Contact MBRMotion "Motion" <presence> (Motion) {homekit="MotionSensor", channel="omnilink:zone:home:MBRMotion:contact"}
Contact UpOffMotion "Motion" <presence> (Motion) {homekit="MotionSensor", channel="omnilink:zone:home:UpOffMotion:contact"}
Contact UpLivMotion "Motion" <presence> (Motion) {homekit="MotionSensor", channel="omnilink:zone:home:UpLivMotion:contact"}
Contact BsmtWORMotion "Motion" <presence> (Motion) {homekit="MotionSensor", channel="omnilink:zone:home:BsmtWORMotion:contact"}
Contact GarageMotion "Motion" <presence> (Motion) {homekit="MotionSensor", channel="omnilink:zone:home:GarageMotion:contact"}
/*
* Console
*/
String UpstrsConsole_Beeper "Enable/Disable Beeper [%s]" {channel="omnilink:console:home:UpstrsConsole:enable_disable_beeper"}
Number UpstrsConsole_Beep "Beep Console" {channel="omnilink:console:home:UpstrsConsole:beep"}
/*
* Button
*/
Switch MainButton "Toggle button [%s]" <switch> {channel="omnilink:button:home:MainButton:press"}
/*
* Other OmniPro items
*/
DateTime OmniProTime "Last Time Update [%1$ta %1$tR]" <time> {channel="omnilink:controller:home:system_date"}
# Example therm-status.map
0=Idle
1=Heating
2=Cooling
# Example therm-tempmode.map
0=Off
1=Heat
2=Cool
3=Auto
5=Emergency heat
# Example therm-fanmode.map
0=Auto
1=On
2=Cycle
# Example therm-holdmode.map
0=Off
1=Hold
2=Vacation hold
# Example area-modes.map
0=Off
1=Day
2=Night
3=Away
4=Vacation
5=Day instant
6=Night delayed
9=Arming day
10=Arming night
11=Arming away
12=Arming vacation
13=Arming day instant
14=Arming night delay
=Unknown