OmniLink Binding - vpjuslin/openhab GitHub Wiki

Introduction

This is a OpenHab binding for HAI/Leviton Omni and Lumina home automation controllers.

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

Installation

Copy the binding jar (org.openhab.omnilink*.jar) to the addons directory

add the following to your openhab.cfg

#################################Omnilink##################################################
#
#Enter the port (4369) host ip or name and the two crypto keys for your omni panel.  The
#two keys 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)
#
#if generateItems is set to true then the binding will print all known items and a sample
#sitemap to the log file (INFO).  Useful when setting up for the first time. 
#
omnilink:port=4369
omnilink:host=panel.yourdomain.com
omnilink:key1=00:AA:BB:CC:DD:EE:FF:11
omnilink:key2=00:AA:BB:CC:DD:EE:FF:11
omnilink:generateItems=true

The two keys are hex characters separated by colons, they can be found in the installer menu on your panel.

if generateItems is true then a items configuration and simple sitemap will be printed to the log. This is useful for an initial setup, but adds a little time to the binding startup.

Items

if you want to manually add a item, the following types are supported:

format is {omnilink:"type:number"}

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)

Item 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 Playing: [%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"}