# Enigma2 Binding

The binding integrates Enigma2 devices.

# Supported Things

# Enigma2 devices

Enigma2 based set-top boxes with an installed OpenWebIf are supported.

# Device Settings

The Device must be connected to the same network as openHAB.

# Discovery

Devices are auto discovered through HTTP in the local network.

If automatic discovery is not possible you may still manually configure a device based on the hostname.

# Thing Configuration

Enigma2 has the following configuration parameters:

Name Description Mandatory
host Hostname or IP address of the Enigma2 device yes
refreshInterval The refresh interval in seconds yes
timeout The timeout for reading from the device in seconds yes
user Optional: The Username of the Enigma2 Web API no
password Optional: The Password of the Enigma2 Web API no

# Configuration in .things file

Set the parameters as in the following example:

Thing enigma2:device:192_168_0_3 [host="192.168.1.3", refreshInterval="5", timeout="5", user="usename" , password="***"]

# Channels

Channel Type ID Item Type Description Read/Write
power Switch Current power setting. RW
mute Switch Current mute setting. RW
volume Dimmer Current volume setting. RW
channel String Current channel. Use only the channel text as command to update the channel. RW
title String Current program title of the current channel. R
description String Current program description of the current channel. R
mediaPlayer Player Media control player. RW
mediaStop Switch Media control stop. RW
answer String Receives an answer to a send question of the device. R

# Example

demo.things:

Thing enigma2:device:192_168_0_3 [host="192.168.1.3", refreshInterval="5"]

demo.items:

Switch  Enigma2_Power              "Power: [%s]"          <switch>           { channel="enigma2:device:192_168_0_3:power" }
Dimmer  Enigma2_Volume             "Volume: [%d %%]"      <soundvolume>      { channel="enigma2:device:192_168_0_3:volume" }
Switch  Enigma2_Mute               "Mute: [%s]"           <soundvolume_mute> { channel="enigma2:device:192_168_0_3:mute" }
Switch  Enigma2_Stop               "Stop: [%s]"           <mediacontrol>     { channel="enigma2:device:192_168_0_3:mediaStop", autoupdate="false" }
Player  Enigma2_PlayerControl      "Mode: [%s]"           <mediacontrol>     { channel="enigma2:device:192_168_0_3:mediaPlayer" }
String  Enigma2_Channel            "Channel: [%s]"        <receiver>         { channel="enigma2:device:192_168_0_3:channel" }
String  Enigma2_Title              "Title: [%s]"          <receiver>         { channel="enigma2:device:192_168_0_3:title" }
String  Enigma2_Description        "Description: [%s]"    <receiver>         { channel="enigma2:device:192_168_0_3:description" }
String  Enigma2_Answer             "Answer: [%s]"         <text>             { channel="enigma2:device:192_168_0_3:answer" }
String  Enigma2_RemoteKeys         "[]"                   <receiver>         { autoupdate="false" }
String  Enigma2_SendError          "Error"                <text>             { autoupdate="false" }
String  Enigma2_SendWarning        "Warning"              <text>             { autoupdate="false" }
String  Enigma2_SendInfo           "Info"                 <text>             { autoupdate="false" }

demo.sitemap:

sitemap demo label="Enigma2 Demo"
{
  Frame label="Enigma2" { 
     Switch    item=Enigma2_Power        
     Slider    item=Enigma2_Volume step=5 minValue=0 maxValue=100
     Setpoint  item=Enigma2_Volume step=5 minValue=0 maxValue=100
     Switch    item=Enigma2_Mute
     Default   item=Enigma2_PlayerControl
     Switch    item=Enigma2_Stop mappings=[ON="Stop"]
     Text      item=Enigma2_Channel
     Text      item=Enigma2_Title
     Text      item=Enigma2_Description
  }
  Frame label="Enigma2 Remote" {
     Switch    item=Enigma2_RemoteKeys mappings=[POWER="POWER"]
     Switch    item=Enigma2_RemoteKeys mappings=[TEXT="[=]", SUBTITLE="[_]", MUTE="MUTE"]
     Switch    item=Enigma2_RemoteKeys mappings=[KEY_1="1", KEY_2="2", KEY_3="3"]
     Switch    item=Enigma2_RemoteKeys mappings=[KEY_4="4", KEY_5="5", KEY_6="6"]
     Switch    item=Enigma2_RemoteKeys mappings=[KEY_7="7", KEY_8="8", KEY_9="9"]
     Switch    item=Enigma2_RemoteKeys mappings=[ARROW_LEFT="<", KEY_0="0", ARROW_RIGHT=">"]
     Switch    item=Enigma2_RemoteKeys mappings=[RED="R", GREEN="G", YELLOW="Y", BLUE="B"]
     Switch    item=Enigma2_RemoteKeys mappings=[UP="Up"]
     Switch    item=Enigma2_RemoteKeys mappings=[LEFT="Left", OK="Ok", RIGHT="Right"]
     Switch    item=Enigma2_RemoteKeys mappings=[DOWN="Down"]
     Switch    item=Enigma2_RemoteKeys mappings=[VOLUME_UP="+", EXIT="Exit", CHANNEL_UP="+"]
     Switch    item=Enigma2_RemoteKeys mappings=[VOLUME_DOWN="-", EPG="Epg", CHANNEL_DOWN="-"]
     Switch    item=Enigma2_RemoteKeys mappings=[MENU="Menu", VIDEO="[=R]", AUDIO="Audio", HELP="Help"]
     Switch    item=Enigma2_RemoteKeys mappings=[FAST_BACKWARD="<<", PLAY=">", PAUSE="||", FAST_FORWARD=">>"]
     Switch    item=Enigma2_RemoteKeys mappings=[TV="TV", RECORD="O", STOP="[]", RADIO="Radio"]
     Switch    item=Enigma2_RemoteKeys mappings=[INFO="INFO"]
  }   
  Frame label="Enigma2 Messages" {   
     Switch    item=Enigma2_SendError mappings=[SEND="SEND"]
     Switch    item=Enigma2_SendWarning mappings=[SEND="SEND"]
     Switch    item=Enigma2_SendInfo mappings=[SEND="SEND"]
     Switch    item=Enigma2_SendQuestion mappings=[SEND="SEND"]
     Text      item=Enigma2_Answer
  }
}

demo.rules:

rule "Enigma2_KeyS"
when Item Enigma2_RemoteKeys received command
then
   val actions = getActions("enigma2","enigma2:device:192_168_0_3")
   if(null === actions) {
      logInfo("actions", "Actions not found, check thing ID")
      return
   }
   actions.sendRcCommand(receivedCommand.toString)
end

rule "Enigma2_SendError"
when Item Enigma2_SendError received command
then
   val actions = getActions("enigma2","enigma2:device:192_168_0_3")
   if(null === actions) {
      logInfo("actions", "Actions not found, check thing ID")
      return
   }
   actions.sendError(receivedCommand.toString, 10)
end

rule "Enigma2_SendWarning"
when Item Enigma2_SendWarning received command
then
   val actions = getActions("enigma2","enigma2:device:192_168_0_3")
   if(null === actions) {
      logInfo("actions", "Actions not found, check thing ID")
      return
   }
   actions.sendWarning(receivedCommand.toString, 10)
end

rule "Enigma2_SendInfo"
when Item Enigma2_SendInfo received command
then
   val actions = getActions("enigma2","enigma2:device:192_168_0_3")
   if(null === actions) {
      logInfo("actions", "Actions not found, check thing ID")
      return
   }
   actions.sendInfo(receivedCommand.toString, 10)
end

rule "Enigma2_SendQuestion"
when Item Enigma2_SendQuestion received command
then
   val actions = getActions("enigma2","enigma2:device:192_168_0_3")
   if(null === actions) {
      logInfo("actions", "Actions not found, check thing ID")
      return
   }
   actions.sendQuestion(receivedCommand.toString, 10)
end

rule "Enigma2_Answer"
when Item Enigma2_Answer received update
then
   val actions = getActions("enigma2","enigma2:device:192_168_0_3")
   if(null === actions) {
      logInfo("actions", "Actions not found, check thing ID")
      return
   }
   logInfo("actions", "Answer is " + Enigma2_Answer.state)
end

# Rule Actions

Multiple actions are supported by this binding. In classic rules these are accessible as shown in this example (adjust getActions with your ThingId):

Example

 val actions = getActions("enigma2","enigma2:device:192_168_0_3")
 if(null === actions) {
        logInfo("actions", "Actions not found, check thing ID")
        return
 }

# sendInfo(text)

Sends an info message to the device with will be shown on the TV screen for 30 seconds.

Parameters:

Name Description
text The text to display

Example:

actions.sendInfo("Hello World")

# sendInfo(text, timeout)

Sends an info message to the device with will be shown on the TV screen.

Parameters:

Name Description
text The text to display
timeout The timeout in seconds

Example:

actions.sendInfo("Hello World", 10)

# sendWarning(text)

Sends a warning message to the device with will be shown on the TV screen for 30 seconds.

Parameters:

Name Description
text The text to display

Example:

actions.sendWarning("Hello World")

# sendWarning(text, timeout)

Sends a warning message to the device with will be shown on the TV screen.

Parameters:

Name Description
text The text to display
timeout The timeout in seconds

Example:

actions.sendWarning("Hello World", 10)

# sendError(text)

Sends an error message to the device with will be shown on the TV screen for 30 seconds.

Parameters:

Name Description
text The text to display

Example:

actions.sendError("Hello World")

# sendError(text, timeout)

Sends an error message to the device with will be shown on the TV screen.

Parameters:

Name Description
text The text to display
timeout The timeout in seconds

Example:

actions.sendError("Hello World", 10)

# sendQuestion(text)

Sends a question message to the device with will be shown on the TV screen for 30 seconds. The answer is provided to the "answer"-channel.

Parameters:

Name Description
text The text to display

Example:

actions.sendQuestion("Say hello?")

# sendQuestion(text, timeout)

Sends a question message to the device with will be shown on the TV screen. The answer is provided to the "answer"-channel.

Parameters:

Name Description
text The text to display
timeout The timeout in seconds

Example:

actions.sendQuestion("Say hello?", 10)

# sendRcCommand(button)

Sends a button press event to the device.

Parameters:

Name Description
button see the supported buttons in chapter 'Remote Control Buttons'

The button parameter has only been tested on a Vu+Solo2 and this is a list of button codes that are known to work with this device.

Code String
POWER
KEY_0
KEY_1
KEY_2
KEY_3
KEY_4
KEY_5
KEY_6
KEY_7
KEY_8
KEY_9
ARROW_LEFT
ARROW_RIGHT
VOLUME_DOWN
VOLUME_UP
MUTE
CHANNEL_UP
CHANNEL_DOWN
LEFT
RIGHT
UP
DOWN
OK
EXIT
RED
GREEN
YELLOW
BLUE
PLAY
PAUSE
STOP
RECORD
FAST_FORWARD
FAST_BACKWARD
TV
RADIO
AUDIO
VIDEO
TEXT
INFO
MENU
HELP
SUBTITLE
EPG

Example:

actions.sendRcCommand("KEY_1")