HAI/Leviton Omni and Lumina Binding

The HAI/Leviton Omni is a popular home automation system in the US. 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 relays and exposes them through a single TCP based API.

The binding is fairly complete and supports the following functionality.

  • Auto item discovery and site map generation
    • if enabled, upon connect the binding will discover all devices on a system and print out to the log a complete items list as well as a crude site map file.
  • Items
    • Security
      • Alarm status monitoring (burglary, fire, police, etc..)
      • Alarm mode activation (Off/Day/Night/Away/Vacation)
      • Door, Window, Fire and CO2 contacts
    • Lights
      • On, Off and Dimming commands
      • UPB and HLC rooms
      • UPB Scenes
    • Thermostats
      • Cool and heat set points
      • System modes (off, cool, heat, auto)
      • Fan modes
      • Celsius and Fahrenheit support
      • Auxiliary temperature and humidity sensors.
    • Audio Controls
      • Track and Artist info
      • Key commands (play, pause, etc..)
      • source inputs
    • Buttons/Macros
    • Supported Hardware (connected directly through a Omni or Lumina Panel)
      • Z-Wave (lighting and thermostats)
      • X10
      • Lightolier Compose PLC
      • UPB (lighting)
      • NuVo (AudioVideo)
      • Russound (AudioVideo)
      • HAI HiFI (AudioVideo)
      • Xantech (AudioVideo)
      • Speakercraft (AudioVideo)
      • Proficient(AudioVideo)
      • HAI Sensors and Thermostats

More information about the Leviton line of controllers can be found at their site.

Binding Configuration

The binding can be configured in the file services/omnilink.cfg.

Property Default Required Description
port 4369 No TCP/IP port number of the Omni panel
host   Yes IP address or host name of the Omni panel
key1   Yes crypto key 1 for your omni panel. The key may be found in the installer menu on a HAI keypad or touchscreen. Each key is 16 hex characters in pairs separated by colons (aa:bb:cc)
key2   Yes crypto key 2 for your omni panel. The key may be found in the installer menu on a HAI keypad or touchscreen. Each key is 16 hex characters in pairs separated by colons (aa:bb:cc)
generateItems true No if set to true, the binding will print all known items and a sample sitemap to the log file (INFO). Useful when setting up for the first time. Adds a little time to the binding startup.

Item Configuration

The format is

omnilink="<type>:<index>"

where <type> is from the list below.

Types and Supported Items

Some types can be read (get) or read and set (get/set).

  • unit (get/set)
    • Dimmer
    • Switch
    • String (will display on,off,level or scene, can be sent a scene command like ‘scene a’)
  • thermo_heat_point (get/set)
    • Number
  • thermo_cool_point (get/set)
    • Number
  • thermo_system_mode (get/set)
    • Number ([0”=Off, “1”=Heat, “2”=Cool,”3”=Auto,”4”=Emergency)
  • thermo_fan_mode (get/set)
    • Number (“0”=Auto, “1”=On, “2”=Cycle)
    • Switch
  • thermo_hold_mode (get/set)
    • Number (“0”=Off, “1”=On)
    • Switch
  • thermo_temp (get)
    • Number
  • zone_status_current (get)
    • Contact
  • zone_status_latched (get)
    • String
  • zone_status_arming (get)
    • String
  • zone_status_all (get)
    • String
  • area_status_mode (get/set)
    • String ( “Day”=”Day”,”Night”=”Night”, “Away”=”Away”,”Vacation”=”Vacation”)
  • area_status_alarm (get)
    • String
  • area_status_exit_delay (get)
    • Number
  • area_status_entry_delay (get)
    • Number
  • area_status_exit_timer (get)
    • Number
  • area_status_entry_timer (get)
    • Number
  • aux_status (get)
    • Number
  • aux_current (get)
    • Number
  • aux_low (get)
    • Number
  • aux_hi (get)
    • Number
  • audiozone_power (get/set)
    • Switch
    • Number
  • audiozone_source (get/set)
    • Number
  • audiozone_volume (get/set)
    • Number
  • audiozone_mute (get/set)
    • Switch
    • Number
  • audiozone_key (get/set)
    • Number
  • audiozone_text (get)
    • String
  • audiozone_field1 (get)
    • String
  • audiozone_field2 (get)
    • String
  • audiozone_field3 (get)
    • String
  • audiosource_text (get)
    • String
  • audiosource_field1 (get)
    • String
  • audiosource_field2 (get)
    • String
  • audiosource_field3 (get)
    • String
  • button (set)
    • String (send any non empty string to push)

Examples

Dimmer for unit 2

Dimmer  Lights_Kitchen_Lights_Switch  "Lights [%d%%]" (Lights_Kitchen)  {omnilink="unit:2"}

Thermostat 1

Number  Thermostats_MasterBed_Temp  "Temperature [%d °F]" (Thermostats_MasterBed) {omnilink="thermo_temp:1"}
Number  Thermostats_MasterBed_CoolPoint "Cool Point [%d°F]" (Thermostats_MasterBed) {omnilink="thermo_cool_point:1"}
Number  Thermostats_MasterBed_HeatPoint "Heat Point [%d°F]" (Thermostats_MasterBed) {omnilink="thermo_heat_point:1"}
Number  Thermostats_MasterBed_System  "System Mode [%d]"  (Thermostats_MasterBed) {omnilink="thermo_system_mode:1"}
Number  Thermostats_MasterBed_Fan "System Fan [%d]" (Thermostats_MasterBed) {omnilink="thermo_fan_mode:1"}
Number  Thermostats_MasterBed_Hold  "System Hold [%d]"  (Thermostats_MasterBed) {omnilink="thermo_hold_mode:1"}

Audio Zone 1

Switch  AudioZones_Basement_Power "Power" (AudioZones_Basement) {omnilink="audiozone_power:1"}
Switch  AudioZones_Basement_Mute  "Mute"  (AudioZones_Basement) {omnilink="audiozone_mute:1"}
Number  AudioZones_Basement_Source  "Source: [%d]"  (AudioZones_Basement) {omnilink="audiozone_source:1"}
Dimmer  AudioZones_Basement_Volume  "Voulme: [%d %%]" (AudioZones_Basement) {omnilink="audiozone_volume:1"}
String  AudioZones_Basement_Text  "Now Playing: [%s]" (AudioZones_Basement) {omnilink="audiozone_text:1"}
String  AudioZones_Basement_Field1  "Field 1 [%s]"  (AudioZones_Basement) {omnilink="audiozone_field1:1"}
String  AudioZones_Basement_Field2  "Field 2 [%s]"  (AudioZones_Basement) {omnilink="audiozone_field2:1"}
String  AudioZones_Basement_Field3  "Field 3 [%s]"  (AudioZones_Basement) {omnilink="audiozone_field3:1"}
Number  AudioZones_Basement_Key "Key [%d]"  (AudioZones_Basement) {omnilink="audiozone_key:1",autoupdate="false"}

Audio Source 1

String  AudioSources_XM_Text  "Now Playeing: [%s]"  (AudioSources_XM) {omnilink="audiosource_text:1"}
String  AudioSources_XM_Field1  "Field 1 [%s]"  (AudioSources_XM) {omnilink="audiosource_field1:1"}
String  AudioSources_XM_Field2  "Field 2 [%s]"  (AudioSources_XM) {omnilink="audiosource_field2:1"}
String  AudioSources_XM_Field3  "Field 3 [%s]"  (AudioSources_XM) {omnilink="audiosource_field3:1"}

Area (security) 1

Number  Areas_Main_ExitDelay  "Exit Delay: [%d]"  (Areas_Main)  {omnilink="area_status_exit_delay:1"}
Number  Areas_Main_EntryDelay "Exit Delay: [%d]"  (Areas_Main)  {omnilink="area_status_entry_delay:1"}
Number  Areas_Main_ExitTimer  "Exit Delay: [%d]"  (Areas_Main)  {omnilink="area_status_exit_timer:1"}
Number  Areas_Main_EntryTimer "Exit Delay: [%d]"  (Areas_Main)  {omnilink="area_status_entry_timer:1"}
String  Areas_Main_Mode "Mode: [%s]"  (Areas_Main)  {omnilink="area_status_mode:1"}
String  Areas_Main_Alarm  "Alarm: [%s]" (Areas_Main)  {omnilink="area_status_alarm:1"}

Contact zone number 17

Contact Zones_FrontDoor_Current "Current: [%s]" (Zones_FrontDoor) {omnilink="zone_status_current:17"}
String  Zones_FrontDoor_Latched "Latched [%s]"  (Zones_FrontDoor) {omnilink="zone_status_latched:17"}
String  Zones_FrontDoor_Arming  "Arming [%s]" (Zones_FrontDoor) {omnilink="zone_status_arming:17"}
String  Zones_FrontDoor_All "Status  [%s]"  (Zones_FrontDoor) {omnilink="zone_status_all:17"}

Button 1

String Buttons_MusicOn "Music On"  (Buttons) {omnilink="button:1",autoupdate="false"}