updated generated content

Signed-off-by: Kai Kreuzer <kai@openhab.org>
pull/378/merge
Kai Kreuzer 2017-06-07 13:49:25 +02:00
parent 6d420ddbea
commit 179de7ea04
No known key found for this signature in database
GPG Key ID: 5110767B6248D3C0
75 changed files with 1722 additions and 553 deletions

View File

@ -19,8 +19,8 @@ This binding integrates devices compatible with [Qualcomm AllPlay](https://www.q
The binding uses native libraries for the AllJoyn framework. Libraries for the following platforms are already included in the binding:
* Linux ARM
* Linux x86 (32 bit)
* Linux x86-64 (64 bit)
* Linux x86 (32 bit, AllJoyn v16.04a)
* Linux x86-64 (64 bit, AllJoyn v16.04a)
* Windows x86 (32 bit, AllJoyn v16.04a)
* Windows x86-64 (64 bit, AllJoyn v16.04a)

View File

@ -22,7 +22,7 @@ The binding integrates the AHA ( [AVM Home Automation](http://avm.de/ratgeber/sm
### FRITZ!Box
The well known FRITZ!Boxes are supported as bridge for accessing other AHA devices. It is planned to support some channels directly at the bridge like call monitoring and others - but these things are under current development by now. The Box has to run at least on firmware FRITZ!OS 6.00 and hast to support the "Smart Home" service.
The well known FRITZ!Boxes are supported as bridge for accessing other AHA devices. It is planned to support some channels directly at the bridge like call monitoring and others - but these things are under current development by now. The Box has to run at least on firmware FRITZ!OS 6.00 and has to support the "Smart Home" service.
### FRITZ!DECT 200 / FRITZ!DECT 210
@ -36,6 +36,10 @@ This [DECT repeater](https://avm.de/produkte/fritzdect/fritzdect-repeater-100/)
This [powerline adapter](http://avm.de/produkte/fritzpowerline/fritzpowerline-546e/) can be used via the bridge or in standalone mode. It supports switching the outlet and current power and energy consumption readings. This device does not contain a temperature sensor.
### FRITZ!DECT 300 / Comet DECT
These two devices [FRITZ!DECT 300](https://avm.de/produkte/fritzdect/fritzdect-300/) and [Comet DECT](https://www.eurotronic.org/produkte/comet-dect.html) ( [EUROtronic Technology GmbH](https://www.eurotronic.org) ) are used to regulate radiators via DECT protocol. The FRITZ!Box can handle up to twelve heating thermostats. The binding provides channels for reading and setting the temperature. Additionally you can check the eco temperature, the comfort temperature and the battery level of the device. The FRITZ!Box has to run at least on firmware FRITZ!OS 6.35.
## Discovery
The FRITZ!Box and the powerline adapter are discovered through UPNP in the local network. When added as things, a username/password has eventually to be set depending on your Box/Powerline security configuration. The credentials given in the settings must have HomeAuto permissions.
@ -70,23 +74,33 @@ If correct credentials are set in the bridge configuration, connected AHA device
* AIN (mandatory), no default (AIN number of device)
## Channels
| Channel Type ID | Item Type | Description | Available on thing |
|-------------|--------|-----------------------------|------------------------------------|
| temperature | Number | Actual measured temperature (in °C) | FRITZ!DECT 210, FRITZ!DECT 200, FRITZ!DECT Repeater 100 |
| energy | Number | Accumulated energy consumption (in Wh) | FRITZ!DECT 210, FRITZ!DECT 200, FRITZ!Powerline 546E |
| power | Number | Current power consumption (in W) | FRITZ!DECT 210, FRITZ!DECT 200, FRITZ!Powerline 546E |
| outlet | Switch | Switchable outlet (ON/OFF) | FRITZ!DECT 210, FRITZ!DECT 200, FRITZ!Powerline 546E |
## Supported Channels
| Channel Type ID | Item Type | Description | Available on thing |
|-----------------|-----------|--------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|
| temperature | Number | Actual measured temperature (in °C) | FRITZ!DECT 210, FRITZ!DECT 200, FRITZ!DECT Repeater 100, FRITZ!DECT 300, Comet DECT |
| energy | Number | Accumulated energy consumption (in kWh) | FRITZ!DECT 210, FRITZ!DECT 200, FRITZ!Powerline 546E |
| power | Number | Current power consumption (in W) | FRITZ!DECT 210, FRITZ!DECT 200, FRITZ!Powerline 546E |
| outlet | Switch | Switchable outlet (ON/OFF) | FRITZ!DECT 210, FRITZ!DECT 200, FRITZ!Powerline 546E |
| actual_temp | Number | Actual Temperature of heating thermostat (in °C) | FRITZ!DECT 300, Comet DECT |
| set_temp | Number | Set Temperature of heating thermostat (in °C) | FRITZ!DECT 300, Comet DECT |
| eco_temp | Number | Eco Temperature of heating thermostat (in °C) | FRITZ!DECT 300, Comet DECT |
| comfort_temp | Number | Comfort Temperature of heating thermostat (in °C) | FRITZ!DECT 300, Comet DECT |
| next_change | DateTime | Next change of the Set Temperature if scheduler is activated in the FRITZ!Box settings - FRITZ!OS 6.80 | FRITZ!DECT 300, Comet DECT |
| next_tmep | Number | Next Set Temperature if scheduler is activated in the FRITZ!Box settings (in °C) - FRITZ!OS 6.80 | FRITZ!DECT 300, Comet DECT |
| battery_low | Switch | Battery Level Low (ON/OFF) - FRITZ!OS 6.80 | FRITZ!DECT 300, Comet DECT |
## Full Example
demo.Things:
demo.things:
```
Bridge avmfritz:fritzbox:1 [ ipAddress="192.168.xxx.xxx", password ="xxx", user="xxx" ] {
FRITZ_DECT_200 DECT1 [ ain="xxxxxxxxxxx" ]
FRITZ_Powerline_546E PL1 [ ain="yy:yy:yy:yy:yyy" ]
Comet_DECT CD1 [ ain="aaaaaabbbbbb" ]
}
```
@ -99,6 +113,12 @@ Number Energy1 "Accumulated energy consumption [%.3f Wh]" { channel="avmfritz:FR
Number Power1 "Current power consumption [%.2f W]" { channel="avmfritz:FRITZ_DECT_200:1:DECT1:power" }
Switch Outlet2 { channel="avmfritz:FRITZ_Powerline_546E:1:PL1:outlet" }
Group gCOMETDECT "Comet DECT heating thermostat" <temperature>
Number COMETDECTActualTemp "Actual measured temperature [%.1f °C]" (gCOMETDECT) { channel="avmfritz:Comet_DECT:1:CD1:actual_temp" }
Number COMETDECTSetTemp "Thermostat temperature setpoint [%.1f °C]" (gCOMETDECT) { channel="avmfritz:Comet_DECT:1:CD1:set_temp" }
Switch COMETDECTBattery "Battery low" (gCOMETDECT) { channel="avmfritz:Comet_DECT:1:CD1:battery_low" }
```
demo.sitemap:
@ -115,5 +135,10 @@ sitemap demo label="Main Menu"
Frame label="FRITZ!Powerline 546E switchable outlet" {
Switch item=Outlet2
}
Frame "Comet DECT heating thermostat" {
Text item=COMETDECTActualTemp icon="temperature"
Setpoint item=COMETDECTSetTemp minValue=8.0 maxValue=28.0 step=0.5 icon="temperature"
Switch item=COMETDECTBattery icon="battery"
}
}
```

View File

@ -0,0 +1,126 @@
---
id: bigassfan
label: BigAssFan
title: BigAssFan - Bindings
type: binding
description: "The [BigAssFan](http://www.bigassfans.com/) binding is used to enable communication between openHAB and Big Ass Fans' Haiku family of residential fans that implement the SenseME technology."
since: 2x
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# BigAssFan Binding
The [BigAssFan](http://www.bigassfans.com/) binding is used to enable communication between openHAB and Big Ass Fans' Haiku family of residential fans that implement the SenseME technology.
## Overview
Fans are discovered dynamically. There is a single thing created for each fan connected to the network. Each thing has channels that allow control of the fan and the optional LED light, as well as to monitor the status of the fan. When the fan is controlled from the remote control, Wall Controller, or smartphone app, the openHAB items linked to the fan's channels will be updated to reflect the fan's status.
## Device Discovery
The BigAssFan binding discovers Haiku fans on the network, and creates an inbox entry for each discovered device. Once added as a thing, the user can control the fan and optional LED light kit, similarly to how the fan is controlled using the remote, Wall Controller, or smartphone app.
Background discovery polls the network every few minutes for fans. Background discovery is **enabled** by default. To **disable** background discovery, add the following line to the *conf/services/runtime.cfg* file:
```
org.openhab.binding.bigassfan.discovery.BigAssFanDiscoveryService:backgroundDiscovery.enabled=false
```
## Thing Configuration
The fan's IP address, MAC address, and name is set at time of discovery. However, in the event that any of this information changes, the fan's configuration must be updated.
#### Manual Thing Creation
Fans can be manually created in the *PaperUI* or *HABmin*, or by placing a *.things* file in the *conf/things* directory. See example below.
## Channels
The following channels are supported:
All devices support some of the following channels:
| Channel Name | Item Type | Description |
|-------------------------|--------------|-------------------------------------------------|
| fan-power | Switch | Power on/off the fan |
| fan-speed | Dimmer | Adjust the speed of the fan |
| fan-direction | Switch | Change the direction in which the fan turns |
| fan-auto | Switch | Enable/disable fan auto mode |
| fan-whoosh | Switch | Enable/disable fan "whoosh" mode |
| fan-smartmode | String | Set Smartmode to HEATING, COOLING, or OFF |
| fan-speed-min | Dimmer | Set minimum fan speed for Smartmode COOLING |
| fan-speed-max | Dimmer | Set maximum fan speed for Smartmode COOLING |
| light-power | Switch | Power on/off the fan |
| light-level | Dimmer | Adjust the brightness of the light from |
| light-auto | Switch | Enable/disable light auto mode |
| light-smarter | String | Enable/disable Smarter Lighting |
| light-level-min | Dimmer | Set minimum light level for Smarter Lighting |
| light-level-max | Dimmer | Set maximum light level for Smarter Lighting |
| motion | Switch | Motion was detected |
| time | DateTime | Fan's date and time |
## Items
The following item definitions would be used to control the fan.
```
Switch PorchFanPower { channel="bigassfan:fan:20F85EDAA56A:fan-power" }
Dimmer PorchFanSpeed { channel="bigassfan:fan:20F85EDAA56A:fan-speed" }
Switch PorchFanDirection { channel="bigassfan:fan:20F85EDAA56A:fan-direction" }
Switch PorchFanAuto { channel="bigassfan:fan:20F85EDAA56A:fan-auto" }
Switch PorchFanWhoosh { channel="bigassfan:fan:20F85EDAA56A:fan-whoosh" }
String PorchFanSmartmode { channel="bigassfan:fan:20F85EDAA56A:fan-smartmode" }
Dimmer PorchFanSpeedMin { channel="bigassfan:fan:20F85EDAA56A:fan-speed-min" }
Dimmer PorchFanSpeedMax { channel="bigassfan:fan:20F85EDAA56A:fan-speed-max" }
```
The following item definitions would be used to control the light.
```
Switch PorchFanLightPower { channel="bigassfan:fan:20F85EDAA56A:light-power" }
Dimmer PorchFanLightLevel { channel="bigassfan:fan:20F85EDAA56A:light-level" }
Switch PorchFanLightAuto { channel="bigassfan:fan:20F85EDAA56A:light-auto" }
Switch PorchFanLightSmarter { channel="bigassfan:fan:20F85EDAA56A:light-smarter" }
Dimmer PorchFanLightLevelMin { channel="bigassfan:fan:20F85EDAA56A:light-level-min" }
Dimmer PorchFanLightLevelMax { channel="bigassfan:fan:20F85EDAA56A:light-level-max" }
```
The following readonly items are provided by the fan.
```
Switch PorchFanMotionSensor { channel="bigassfan:fan:20F85EDAA56A:motion" }
DateTime PorchFanTime { channel="bigassfan:fan:20F85EDAA56A:time" }
```
### Sitemap
This is an example of how to set up your sitemap.
```
Frame label="Control My BigAssFan" {
Switch item=PorchFanPower label="Fan Power [%s]"
Slider item=PorchFanSpeed label="Fan Speed [%s %%]"
Switch item=PorchFanLightPower label="Light Power [%s]"
Slider item=PorchFanLightSpeed label="Light Brightness [%s %%]"
}
```
### Manual Thing Creation
Place a file named *bigassfan.things* in the *conf/things* directory. The file should contain lines formatted like this.
```
bigassfan:fan:20F85EDAA56A [ label="Porch Fan", ipAddress="192.168.12.62", macAddress="20:F8:5E:DA:A5:6A" ]
```
#### Unsupported Features
Wall Controllers are not supported. Standalone lights are not supported.

View File

@ -0,0 +1,67 @@
---
id: dlinksmarthome
label: D-Link Smart Home
title: D-Link Smart Home - Bindings
type: binding
description: "A binding for D-Link Smart Home devices."
since: 2x
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# D-Link Smart Home Binding
A binding for D-Link Smart Home devices.
## Supported Things
### DCH-S150 (WiFi motion sensor)
The binding has been tested with hardware revisions A1 and A2 running firmware version 1.22.
## Discovery
The binding can automatically discover devices that have already been added to the Wifi network. Please refer to your mydlink Home app for instructions on how to add your device to your Wifi network.
## Binding Configuration
The binding does not require any special configuration.
## Thing Configuration
It is recommended to let the binding discover and add devices. Once added the configuration must be updated to specify the PIN code located on the back of the device.
### DCH-S150
* **ipAddress** - Hostname or IP of the device
* **pin** - PIN code from the back of the device
To manually configure a DCH-S150 Thing you must specify its IP address and PIN code.
In the thing file, this looks like e.g.
```
Thing dlinksmarthome:DCH-S150:mysensor [ ipAddress="192.168.2.132" pin="1234" ]
```
## Channels
### DCH-S150
* **motion** - Triggered when the sensor detects motion.
## Example usage
### DCH-S150
```
rule "Landing motion"
when
Channel "dlinksmarthome:DCH-S150:90-8D-78-XX-XX-XX:motion" triggered
then
println("Motion has been detected")
end
```

View File

@ -3,7 +3,7 @@ id: dscalarm
label: DSC Alarm
title: DSC Alarm - Bindings
type: binding
description: "This is an openHAB binding for a DSC PowerSeries Alarm System utilizing the EyezOn Envisalink 3/2DS interface or the DSC IT-100 RS-232 interface."
description: "The DSC PowerSeries Alarm System is a popular do-it-yourself home security system, which can be monitored and controlled remotely through a standard web-browser or mobile device."
since: 2x
logo: images/addons/dscalarm.png
install: auto
@ -15,11 +15,9 @@ install: auto
# DSC Alarm Binding
This is an openHAB binding for a DSC PowerSeries Alarm System utilizing the EyezOn Envisalink 3/2DS interface or the DSC IT-100 RS-232 interface.
The DSC PowerSeries Alarm System is a popular do-it-yourself home security system, which can be monitored and controlled remotely through a standard web-browser or mobile device.
The openHAB DSC Alarm binding provides connectivity to the DSC Alarm panel via a TCP socket connection to the EyesOn Envisalink 3/2DS interface or a RS-232 serial connection to the DSC IT-100 interface.
This is the binding for the DSC PowerSeries Alarm System, utilizing either the EyezOn Envisalink 4/3/2DS interface or the DSC IT-100 RS-232 interface. It provides connectivity to the DSC Alarm panel via a TCP socket connection to the EyesOn Envisalink 4/3/2DS interface or a RS-232 serial connection to the DSC IT-100 interface. Additionally, their is provision to connect to the DSC IT-100 interface through a TCP serial server.
## Supported Things
@ -42,7 +40,11 @@ There are essentially no overall binding configuration settings that need to be
## Discovery
The DSC Alarm binding incorporates several discovery modes in order to find DSC Alarm systems. First, there is the Envisalink bridge discovery mode which performs a network query for any Envisalink adapters and adds them to the discovery inbox. Second, there is The IT-100 bridge discovery mode which will search serial ports for any IT-100 adapters and add them to the discovery inbox. The bridge discovery modes are started manually through PaperUI. Third, after a bridge is discovered and available to openHAB, the binding will attempt to discover DSC Alarm devices and add them to the discovery inbox. The TCP Server bridge does not implement bridge discovery but will utilize device discovery once it is online.
The DSC Alarm binding incorporates several discovery modes in order to find DSC Alarm systems. First, there is the Envisalink bridge discovery mode which performs a network query for any Envisalink adapters and adds them to the discovery inbox. Second, there is The IT-100 bridge discovery mode which will search serial ports for any IT-100 adapters and add them to the discovery inbox. The bridge discovery modes are started manually through PaperUI. Third, after a bridge is discovered and available to openHAB, the binding will attempt to discover DSC Alarm things and add them to the discovery inbox. The TCP Server bridge does not implement bridge discovery but will utilize thing discovery once it is online.
Note: The Envisalink Bridge discovery does a TCP scan across your local network to find the interface. This may create issues on the network so it is suggested that caution be used when trying this discovery. The recommended method would be to manually add and configure the bridge through the 'dscalarm.thing' file or the PaperUI. And then allow the binding to discover the DSC Alarm things.
## Thing Configuration
@ -52,7 +54,7 @@ DSC Alarm things can be configured either through the online configuration utili
<tr><td><b>Thing</b></td><td><b>Configuration Parameters</b></td></tr>
<tr><td>envisalink</td><td><table><tr><td><b>ipAddress</b> - IP address for the Envisalink adapter - Required.</td></tr><tr><td><b>port</b> - TCP port for the Envisalink adapter - Not Required - default = 4025.</td></tr><tr><td><b>password</b> - Password to login to the Envisalink bridge - Not Required.</td></tr><tr><td><b>connectionTimeout</b> - TCP socket connection timeout in milliseconds - Not Required - default=5000.<br/></td></tr><tr><td><b>pollPeriod</b> - Period of time in minutes between the poll command being sent to the Envisalink bridge - Not Required - default=1.</td></tr></table></td></tr>
<tr><td>it100</td><td><table><tr><td><b>serialPort</b> - Serial port for the IT-100s bridge - Required.</td></tr><tr><td><b>baud</b> - Baud rate of the IT-100 bridge - Not Required - default = 9600.</td></tr><tr><td><b>pollPeriod</b> - Period of time in minutes between the poll command being sent to the IT-100 bridge - Not Required - default=1.</td></tr></table></td></tr>
<tr><td>tcpserver</td><td><table><tr><td><b>ipAddress</b> - IP address for the TCP Server - Required.</td></tr><tr><td><b>port</b> - TCP port for the TCP Server - Required.</td></tr><tr><td><b>connectionTimeout</b> - TCP socket connection timeout in milliseconds - Not Required - default=5000.<br/></td></tr><tr><td><b>pollPeriod</b> - Period of time in minutes between the poll command being sent to the TCP Server bridge - Not Required - default=1.</td></tr></table></td></tr>
<tr><td>tcpserver</td><td><table><tr><td><b>ipAddress</b> - IP address for the TCP Server - Required.</td></tr><tr><td><b>port</b> - TCP port for the TCP Server - Required.</td></tr><tr><td><b>connectionTimeout</b> - TCP socket connection timeout in milliseconds - Not Required - default=5000.<br/></td></tr><tr><td><b>pollPeriod</b> - Period of time in minutes between the poll command being sent to the TCP Server bridge - Not Required - default=1.</td></tr><tr><td><b>protocol</b> - The protocol used to interact with the DSC Alarm. Valid values are 1 for IT100 API or 2 for Envisalink TPI. The default is 1. - Not Required.</td></tr></table></td></tr>
<tr><td>panel</td><td><table><tr><td><b>userCode</b> - User code for the DSC alarm panel - Not Required.</td></tr><tr><td><b>suppressAcknowledgementMsgs</b> - Suppress the display of acknowledgement messages when received - Not Required - default = false.</td></tr></table></td></tr>
<tr><td>partition</td><td><b>partitionNumber</b> - Partition number (1-8) - Required.</td></tr>
<tr><td>zone</td><td><table><tr><td><b>partitionNumber</b> - Partition number (1-8) - Not Required - default=1.</td></tr><tr><td><b>zoneNumber</b> - Zone number (1-64) - Required.</td></tr></table></td></tr>
@ -89,6 +91,7 @@ DSC Alarm things support a variety of channels as seen below in the following ta
<table>
<tr><td><b>Channel</b></td><td><b>Item Type</b></td><td><b>Description</b></td></tr>
<tr><td>bridge_reset</td><td>Switch</td><td>Reset the bridge connection.</td></tr>
<tr><td>send_command</td><td>Switch</td><td>Send a DSC Alarm command.</td></tr>
<tr><td>panel_message</td><td>String</td><td>Event messages received from the DSC Alarm system.</td></tr>
<tr><td>panel_system_error</td><td>String</td><td>DSC Alarm system error.</td></tr>
<tr><td>panel_trouble_message</td><td>String</td><td>Displays any trouble messages the panel might send.</td></tr>
@ -99,7 +102,7 @@ DSC Alarm things support a variety of channels as seen below in the following ta
<tr><td>panel_ftc_trouble</td><td>Switch</td><td>Failure to communicate with monitoring station.</td></tr>
<tr><td>panel_zone_fault</td><td>Switch</td><td>There is a fault condition on a zone/sensor.</td></tr>
<tr><td>panel_zone_tamper</td><td>Switch</td><td>There is a tamper condition on a zone/sensor.</td></tr>
<tr><td>panel_time_low_battery</td><td>Switch</td><td>There is a low battery condition on a zone/sensor.</td></tr>
<tr><td>panel_zone_low_battery</td><td>Switch</td><td>There is a low battery condition on a zone/sensor.</td></tr>
<tr><td>panel_time_loss</td><td>Switch</td><td>Loss of time on the panel.</td></tr>
<tr><td>panel_time</td><td>DateTime</td><td>DSC Alarm system time and date.</td></tr>
<tr><td>panel_time_stamp</td><td>Switch</td><td>Turn DSC Alarm message time stamping ON/OFF.</td></tr>
@ -198,6 +201,7 @@ Group:Contact:OR(OPEN, CLOSED) DSCAlarmSmoke <smokeDetector>
/* DSC Alarm Items */
Switch BRIDGE_CONNECTION {channel="dscalarm:envisalink:MyBridgeName:bridge_reset"}
String SEND_DSC_ALARM_COMMAND "Send a DSC Alarm Command" {channel="dscalarm:envisalink:MyBridgeName:send_command"}
/* DSC Alarm Panel Items */
String PANEL_MESSAGE "Panel Message: [%s]" (DSCAlarmPanel) {channel="dscalarm:panel:MyBridgeName:panel:panel_message"}
@ -394,20 +398,20 @@ Here is an example sitemap:
```
Frame label="Alarm System" {
Text label="DSC Alarm System" icon="DSC" {
Text label="DSC Alarm System" {
Frame label="Panel" {
Switch item=BRIDGE_CONNECTION label="Panel Connection" mappings=[ON="Connected", OFF="Disconnected"]
Text item=PANEL_MESSAGE icon="returnpipe"
Selection item=PANEL_COMMAND icon="flowpipe" mappings=[0="Poll", 1="Status Report", 2="Labels Request (Serial Only)", 8="Dump Zone Timers (TCP Only)", 10="Set Time/Date", 200="Send User Code"]
Text item=PANEL_MESSAGE
Selection item=PANEL_COMMAND mappings=[0="Poll", 1="Status Report", 2="Labels Request (Serial Only)", 8="Dump Zone Timers (TCP Only)", 10="Set Time/Date", 200="Send User Code"]
Text item=PANEL_TIME {
Switch item=PANEL_TIME_STAMP label="Panel Time Stamp"
Switch item=PANEL_TIME_BROADCAST label="Panel Time Broadcast"
}
Text item=PANEL_SYSTEM_ERROR icon="systemError"
Text item=PANEL_SYSTEM_ERROR
Text item=PANEL_TROUBLE_LED label="Panel Trouble Condition" {
Text item=PANEL_TROUBLE_MESSAGE icon="shieldRed"
Text item=PANEL_TROUBLE_MESSAGE
Text item=PANEL_SERVICE_REQUIRED label="Service Required"
Text item=PANEL_AC_TROUBLE label="AC Trouble"
Text item=PANEL_TELEPHONE_TROUBLE label="Telephone Line Trouble"
@ -420,14 +424,14 @@ Here is an example sitemap:
}
Frame label="Partitions" {
Text item=PARTITION1_STATUS icon="shieldGreen" {
Switch item=PARTITION1_ARM_MODE label="Partition 1 Arm Options" icon="shieldGreen" mappings=[0="Disarm", 1="Away", 2="Stay", 3="No Entry Delay", 4="With User Code"]
Text item=PARTITION1_OPENING_CLOSING_MODE icon="shieldGreen"
Text item=PARTITION1_STATUS {
Switch item=PARTITION1_ARM_MODE label="Partition 1 Arm Options" mappings=[0="Disarm", 1="Away", 2="Stay", 3="No Entry Delay", 4="With User Code"]
Text item=PARTITION1_OPENING_CLOSING_MODE
}
}
Frame label="Keypad" {
Text label="Keypad LED Status" icon="DSCKeypad" {
Text label="Keypad LED Status" {
Text item=KEYPAD_READY_LED label="Ready LED Status"
Text item=KEYPAD_ARMED_LED label="Armed LED Status"
Text item=KEYPAD_MEMORY_LED label="Memory LED Status"
@ -441,150 +445,150 @@ Here is an example sitemap:
}
Frame label="Zones" {
Text label="All Zones" icon="ZoneAlarm" {
Text label="All Zones" {
Text item=ZONE1_STATUS {
Switch item=ZONE1_BYPASS_MODE icon="ZoneAlarm" mappings=[OFF="Armed", ON="Bypassed"]
Switch item=ZONE1_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE1_IN_ALARM icon="statusWarning"
Switch item=ZONE1_TAMPER icon="statusWarning"
Switch item=ZONE1_FAULT icon="statusWarning"
Switch item=ZONE1_IN_ALARM
Switch item=ZONE1_TAMPER
Switch item=ZONE1_FAULT
}
}
Text item=ZONE9_STATUS {
Switch item=ZONE9_BYPASS_MODE icon="ZoneAlarm" mappings=[OFF="Armed", ON="Bypassed"]
Switch item=ZONE9_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE9_IN_ALARM icon="statusWarning"
Switch item=ZONE9_TAMPER icon="statusWarning"
Switch item=ZONE9_FAULT icon="statusWarning"
Switch item=ZONE9_IN_ALARM
Switch item=ZONE9_TAMPER
Switch item=ZONE9_FAULT
}
}
Text item=ZONE10_STATUS {
Switch item=ZONE10_BYPASS_MODE icon="ZoneAlarm" mappings=[OFF="Armed", ON="Bypassed"]
Switch item=ZONE10_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE10_IN_ALARM icon="statusWarning"
Switch item=ZONE10_TAMPER icon="statusWarning"
Switch item=ZONE10_FAULT icon="statusWarning"
Switch item=ZONE10_IN_ALARM
Switch item=ZONE10_TAMPER
Switch item=ZONE10_FAULT
}
}
Text item=ZONE11_STATUS {
Switch item=ZONE11_BYPASS_MODE icon="ZoneAlarm" mappings=[OFF="Armed", ON="Bypassed"]
Switch item=ZONE11_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE11_IN_ALARM icon="statusWarning"
Switch item=ZONE11_TAMPER icon="statusWarning"
Switch item=ZONE11_FAULT icon="statusWarning"
Switch item=ZONE11_IN_ALARM
Switch item=ZONE11_TAMPER
Switch item=ZONE11_FAULT
}
}
Text item=ZONE12_STATUS {
Switch item=ZONE12_BYPASS_MODE icon="ZoneAlarm" mappings=[OFF="Armed", ON="Bypassed"]
Switch item=ZONE12_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE12_IN_ALARM icon="statusWarning"
Switch item=ZONE12_TAMPER icon="statusWarning"
Switch item=ZONE12_FAULT icon="statusWarning"
Switch item=ZONE12_IN_ALARM
Switch item=ZONE12_TAMPER
Switch item=ZONE12_FAULT
}
}
Text item=ZONE13_STATUS {
Switch item=ZONE13_BYPASS_MODE icon="ZoneAlarm" mappings=[OFF="Armed", ON="Bypassed"]
Switch item=ZONE13_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE13_IN_ALARM icon="statusWarning"
Switch item=ZONE13_TAMPER icon="statusWarning"
Switch item=ZONE13_FAULT icon="statusWarning"
Switch item=ZONE13_IN_ALARM
Switch item=ZONE13_TAMPER
Switch item=ZONE13_FAULT
}
}
Text item=ZONE14_STATUS {
Switch item=ZONE14_BYPASS_MODE icon="ZoneAlarm" mappings=[OFF="Armed", ON="Bypassed"]
Switch item=ZONE14_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE14_IN_ALARM icon="statusWarning"
Switch item=ZONE14_TAMPER icon="statusWarning"
Switch item=ZONE14_FAULT icon="statusWarning"
Switch item=ZONE14_IN_ALARM
Switch item=ZONE14_TAMPER
Switch item=ZONE14_FAULT
}
}
Text item=ZONE15_STATUS {
Switch item=ZONE15_BYPASS_MODE icon="ZoneAlarm" mappings=[OFF="Armed", ON="Bypassed"]
Switch item=ZONE15_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE15_IN_ALARM icon="statusWarning"
Switch item=ZONE15_TAMPER icon="statusWarning"
Switch item=ZONE15_FAULT icon="statusWarning"
Switch item=ZONE15_IN_ALARM
Switch item=ZONE15_TAMPER
Switch item=ZONE15_FAULT
}
}
Text item=ZONE21_STATUS {
Switch item=ZONE21_BYPASS_MODE icon="ZoneAlarm" mappings=[OFF="Armed", ON="Bypassed"]
Switch item=ZONE21_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE21_IN_ALARM icon="statusWarning"
Switch item=ZONE21_TAMPER icon="statusWarning"
Switch item=ZONE21_FAULT icon="statusWarning"
Switch item=ZONE21_IN_ALARM
Switch item=ZONE21_TAMPER
Switch item=ZONE21_FAULT
}
}
Text item=ZONE22_STATUS {
Switch item=ZONE22_BYPASS_MODE icon="ZoneAlarm" mappings=[OFF="Armed", ON="Bypassed"]
Switch item=ZONE22_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE22_IN_ALARM icon="statusWarning"
Switch item=ZONE22_TAMPER icon="statusWarning"
Switch item=ZONE22_FAULT icon="statusWarning"
Switch item=ZONE22_IN_ALARM
Switch item=ZONE22_TAMPER
Switch item=ZONE22_FAULT
}
}
Text item=ZONE23_STATUS {
Switch item=ZONE23_BYPASS_MODE icon="ZoneAlarm" mappings=[OFF="Armed", ON="Bypassed"]
Switch item=ZONE23_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE23_IN_ALARM icon="statusWarning"
Switch item=ZONE23_TAMPER icon="statusWarning"
Switch item=ZONE23_FAULT icon="statusWarning"
Switch item=ZONE23_IN_ALARM
Switch item=ZONE23_TAMPER
Switch item=ZONE23_FAULT
}
}
Text item=ZONE24_STATUS {
Switch item=ZONE24_BYPASS_MODE icon="ZoneAlarm" mappings=[OFF="Armed", ON="Bypassed"]
Switch item=ZONE24_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE24_IN_ALARM icon="statusWarning"
Switch item=ZONE24_TAMPER icon="statusWarning"
Switch item=ZONE24_FAULT icon="statusWarning"
Switch item=ZONE24_IN_ALARM
Switch item=ZONE24_TAMPER
Switch item=ZONE24_FAULT
}
}
Text item=ZONE25_STATUS {
Switch item=ZONE25_BYPASS_MODE icon="ZoneAlarm" mappings=[OFF="Armed", ON="Bypassed"]
Switch item=ZONE25_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE25_IN_ALARM icon="statusWarning"
Switch item=ZONE25_TAMPER icon="statusWarning"
Switch item=ZONE25_FAULT icon="statusWarning"
Switch item=ZONE25_IN_ALARM
Switch item=ZONE25_TAMPER
Switch item=ZONE25_FAULT
}
}
Text item=ZONE51_STATUS {
Switch item=ZONE51_BYPASS_MODE icon="ZoneAlarm" mappings=[OFF="Armed", ON="Bypassed"]
Switch item=ZONE51_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE51_IN_ALARM icon="statusWarning"
Switch item=ZONE51_TAMPER icon="statusWarning"
Switch item=ZONE51_FAULT icon="statusWarning"
Switch item=ZONE51_IN_ALARM
Switch item=ZONE51_TAMPER
Switch item=ZONE51_FAULT
}
}
Text item=ZONE52_STATUS {
Switch item=ZONE52_BYPASS_MODE icon="ZoneAlarm" mappings=[OFF="Armed", ON="Bypassed"]
Switch item=ZONE52_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE52_IN_ALARM icon="statusWarning"
Switch item=ZONE52_TAMPER icon="statusWarning"
Switch item=ZONE52_FAULT icon="statusWarning"
Switch item=ZONE52_IN_ALARM
Switch item=ZONE52_TAMPER
Switch item=ZONE52_FAULT
}
}
Text item=ZONE53_STATUS {
Switch item=ZONE53_BYPASS_MODE icon="ZoneAlarm" mappings=[OFF="Armed", ON="Bypassed"]
Switch item=ZONE53_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE53_IN_ALARM icon="statusWarning"
Switch item=ZONE53_TAMPER icon="statusWarning"
Switch item=ZONE53_FAULT icon="statusWarning"
Switch item=ZONE53_IN_ALARM
Switch item=ZONE53_TAMPER
Switch item=ZONE53_FAULT
}
}
Text item=ZONE54_STATUS {
Switch item=ZONE54_BYPASS_MODE icon="ZoneAlarm" mappings=[OFF="Armed", ON="Bypassed"]
Switch item=ZONE54_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE54_IN_ALARM icon="statusWarning"
Switch item=ZONE54_TAMPER icon="statusWarning"
Switch item=ZONE54_FAULT icon="statusWarning"
Switch item=ZONE54_IN_ALARM
Switch item=ZONE54_TAMPER
Switch item=ZONE54_FAULT
}
}
Text item=ZONE55_STATUS {
Switch item=ZONE55_BYPASS_MODE icon="ZoneAlarm" mappings=[OFF="Armed", ON="Bypassed"]
Switch item=ZONE55_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE55_IN_ALARM icon="statusWarning"
Switch item=ZONE55_TAMPER icon="statusWarning"
Switch item=ZONE55_FAULT icon="statusWarning"
Switch item=ZONE55_IN_ALARM
Switch item=ZONE55_TAMPER
Switch item=ZONE55_FAULT
}
}
}
@ -598,18 +602,23 @@ Here is an example sitemap:
}
```
## Change Log
Sample Rules for Sending a DSC Alarm Command
### openHAB 2.0.0 Beta 1
```
rule "SendKeystrokeStringCommand"
when
Item SwitchItemName received command ON
then
sendCommand(SEND_DSC_ALARM_COMMAND, "071,1*101#")
end
* Initial commit of the DSC Alarm Binding. ([#324](https://github.com/openhab/openhab2-addons/pull/324))
rule "SendPollingCommand"
### openHAB 2.0.0 Beta 3
when
Item SwitchItemName received command ON
then
sendCommand(SEND_DSC_ALARM_COMMAND, "000")
end
```
* Added support for the DSC Alarm binding to communicate with an IT-100 through a TCP/IP serial server. Also, fixed a bug where the IT-100 serial interface requires a 6 digit usercode but was only receiving 4 digits. The channel named `PANEL_COMMAND` was changed from type String to type Number. Fixed bug where the IT-100 bridge would not connect. ([#846](https://github.com/openhab/openhab2-addons/pull/846))
### openHAB 2.0.0 Beta 4
* Fixed bug where the binding would prematurely set the channel `PARTITION_ARM_MODE` when issuing a partition arm command.
* Fixed issue where the binding stopped handling incoming messages from the DSC Alarm system.
* Disabled background discovery of DSC Alarm bridges as this may create network issues. Manual discovery is still available.
Notice the command variations in the examples. If a command has data, there needs to be a comma between the command and the data as seen above in the first example. If there is no data then it would only require the command itself as in the second example.

View File

@ -53,10 +53,13 @@ where `<eventType>` is one of the following values:
| Außentemperatur | temperature_outside | number | |
| Außentemperatur gemittelt über 1h | temperature_outside_1h | number | |
| Außentemperatur gemittelt über 24h | temperature_outside_24h | number | |
| Quelleneintrittstemperatur | temperature_source_in | number | |
| Quellenaustrittstemperatur | temperature_source_out | number | |
| Quelleneintrittstemperatur | temperature_source_in | number | | Ai1 Geo only |
| Quellenaustrittstemperatur | temperature_source_out | number | | Ai1 Geo only |
| Umgebungstemperatur | temperature_surrounding | number | | Ai1 Air only |
| Verdampfungstemperatur | temperature_evaporation | number | |
| Sauggastemperatur | temperature_suction | number | |
| Sauggastemperatur | temperature_suction | number | | Ai1 Geo only |
| Sauggas | temperature_suction_air | number | | Ai1 Air only |
| Ölsumpf | temperature_sump | number | | Ai1 Air only |
| Verdampfungsdruck | pressure_evaporation | number | |
| Temperatur Rücklauf Soll | temperature_return_set | number | |
| Temperatur Rücklauf | temperature_return | number | |
@ -114,7 +117,7 @@ where `<eventType>` is one of the following values:
| Handabschaltung Kühlbetrieb | enable_cooling | switch | yes |
| Handabschaltung Warmwasserbetrieb | enable_warmwater | switch | yes |
| Handabschaltung Pool_Heizbetrieb | enable_pool | switch | yes |
| Status der Wärmepumpenkomponenten | state | number | |
| Status der Wärmepumpenkomponenten | state | number | | State as a number, see below for possible mapping. |
| Status Quellenpumpe | state_sourcepump | switch | |
| Status Heizungsumwälzpumpe | state_heatingpump | switch | |
| Status Freigabe Regelung EDV / Magnetventil | state_evd | switch | |
@ -139,6 +142,28 @@ where `<eventType>` is one of the following values:
| Handschaltung Vierwegeventil | manual_4wayvalve | | yes | (H-0-A)
| Handschaltung Multiausgang Ext. | manual_multiext | | yes | (H-0-A)
### Mappings
Heatpump event type "state" can be mapped to strings. Different heatpump models seem to have slightly different state values.
Mappings for the Ai1 Geo have been copied from [here](http://www.haustechnikdialog.de/Forum/t/173357/Waterkotte-via-Ethernet-OpenHAB-und-Android-App?page=6).
| State | Ai1 Geo | Ai1 Air |
| ----- | ----- | ----- |
| 0 | aus | aus |
| 1 | nur Solepumpe 1 | |
| 2 | nur Heizkreispumpe 2 | Standby |
| 3 | unbekannt | |
| 7 | unbekannt | |
| 10 | | Heizbetrieb |
| 15 | Heizbetrieb | |
| 131 | Naturkühlung | |
| 256 | Vorlauf Warmwasser | Vorlauf Warmwasser |
| 258 | Nachlauf Warmwasser | Nachlauf Warmwasser |
| 259 | unbekannt 259 vor WW Bereitung | |
| 263 | unbekannt 263 vor WW Bereitung | |
| 266 | | Warmwasserbereitung |
| 271 | Warmwasserbereitung | |
## Examples

View File

@ -46,16 +46,16 @@ No binding configuration required.
The binding supports following channels
| Channel Type ID | Item Type | Description |
|------------------|------------------------|--------------|----------------- |------------- |
| latest-title | String | Contains the title of the last feed entry. |
| latest-description | String | Contains the description of last feed entry. |
| latest-date | DateTime | Contains the published date of the last feed entry. |
| author | String | The name of the feed author, if author is present |
| title | String | The title of the feed |
| description | String | Description of the feed |
| last-update | DateTime | The last update date of the feed |
| number-of-entries | Number | Number of entries in the feed |
| Channel Type ID | Item Type | Description |
|--------------------|-----------|-----------------------------------------------------|
| latest-title | String | Contains the title of the last feed entry. |
| latest-description | String | Contains the description of last feed entry. |
| latest-date | DateTime | Contains the published date of the last feed entry. |
| author | String | The name of the feed author, if author is present |
| title | String | The title of the feed |
| description | String | Description of the feed |
| last-update | DateTime | The last update date of the feed |
| number-of-entries | Number | Number of entries in the feed |
## Full Example

View File

@ -27,14 +27,19 @@ This binding supports the following thing types:
| phone | Thing | The phone wired to the Freebox Revolution. |
| net_device | Thing | A network device on the local network. |
| net_interface | Thing | A network interface from a device on the local network. |
| airplay | Thing | An AirPlay device in the local network. |
## Discovery
The Freebox Revolution server is discovered automatically through mDNS in the local network. After a Freebox Revolution is discovered and available to openHAB, the binding will automatically discover phone and network devices / interfaces on the local network.
The Freebox Revolution server is discovered automatically through mDNS in the local network. After a Freebox Revolution is discovered and available to openHAB, the binding will automatically discover phone, network devices / interfaces and AirPlay devices with video capability in the local network. Note that the discovered thing will be setup to use only HTTP API (and not HTTPS) because only an IP can be automatically determined while a domain name is required to use HTTPS with a valid certificate.
## Binding configuration
There are no overall binding configuration settings that need to be set. All settings are through thing configuration parameters.
The binding has the following configuration options, which can be set for "binding:freebox":
| Parameter | Name | Description | Required |
|-------------|--------------|--------------------------------------------------------------------------|----------|
| callbackUrl | Callback URL | URL to use for playing notification sounds, e.g. http://192.168.0.2:8080 | no |
## Thing Configuration
@ -47,6 +52,7 @@ The _server_ bridge thing requires the following configuration parameters:
| Freebox Network Address | fqdn | The IP address / FQDN of the Freebox Server (can include port number).| false | mafreebox.freebox.fr |
| Application token | appToken | Token generated by the Freebox Server. | false | |
| Refresh Interval | refreshInterval | The refresh interval in seconds which is used to poll given Freebox Server.| false | 30 |
| Use only HTTP API | useOnlyHttp | Use HTTP API even if HTTPS is available. | false | false |
If the parameter _ipAddress_ is not set, the binding will use the default address used by Free to access your Freebox Server (mafreebox.freebox.fr). The bridge thing will initialize only if a valid application token (parameter _appToken_) is filled.
@ -75,6 +81,83 @@ The _net_interface_ thing requires the following configuration parameters:
|------------------------------|--------------------------|----------------------------------------------------|----------|
| IP Address | ipAddress | The IP address (v4 or v6) of the network interface.| true |
### AirPlay device
The _airplay_ thing requires the following configuration parameters:
| Parameter Label | Parameter ID | Description | Required |
|-----------------|--------------|-----------------------------|----------|
| Name | name | Name of the AirPlay device | true |
| Password | password | AirPlay password | false |
| Accept all MP3 | acceptAllMp3 | Accept any bitrate for MP3 audio or only bitrates greater than 64 kbps | false |
## HTTPS Access
Each Freebox server is now automatically assigned a random domain name (in addition to mafreebox.freebox.fr that can be used inside the local network), and an associated TLS certificate to enable secure access to API. This certificate is also valid for the domain name mafreebox.freebox.fr too.
You must validate the certificate chain, by using the following Freebox ECC Root CA and Freebox RSA Root CA:
```
-----BEGIN CERTIFICATE-----
MIICWTCCAd+gAwIBAgIJAMaRcLnIgyukMAoGCCqGSM49BAMCMGExCzAJBgNVBAYT
AkZSMQ8wDQYDVQQIDAZGcmFuY2UxDjAMBgNVBAcMBVBhcmlzMRMwEQYDVQQKDApG
cmVlYm94IFNBMRwwGgYDVQQDDBNGcmVlYm94IEVDQyBSb290IENBMB4XDTE1MDkw
MTE4MDIwN1oXDTM1MDgyNzE4MDIwN1owYTELMAkGA1UEBhMCRlIxDzANBgNVBAgM
BkZyYW5jZTEOMAwGA1UEBwwFUGFyaXMxEzARBgNVBAoMCkZyZWVib3ggU0ExHDAa
BgNVBAMME0ZyZWVib3ggRUNDIFJvb3QgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNi
AASCjD6ZKn5ko6cU5Vxh8GA1KqRi6p2GQzndxHtuUmwY8RvBbhZ0GIL7bQ4f08ae
JOv0ycWjEW0fyOnAw6AYdsN6y1eNvH2DVfoXQyGoCSvXQNAUxla+sJuLGICRYiZz
mnijYzBhMB0GA1UdDgQWBBTIB3c2GlbV6EIh2ErEMJvFxMz/QTAfBgNVHSMEGDAW
gBTIB3c2GlbV6EIh2ErEMJvFxMz/QTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
/wQEAwIBhjAKBggqhkjOPQQDAgNoADBlAjA8tzEMRVX8vrFuOGDhvZr7OSJjbBr8
gl2I70LeVNGEXZsAThUkqj5Rg9bV8xw3aSMCMQCDjB5CgsLH8EdZmiksdBRRKM2r
vxo6c0dSSNrr7dDN+m2/dRvgoIpGL2GauOGqDFY=
-----END CERTIFICATE-----
```
```
-----BEGIN CERTIFICATE-----
MIIFmjCCA4KgAwIBAgIJAKLyz15lYOrYMA0GCSqGSIb3DQEBCwUAMFoxCzAJBgNV
BAYTAkZSMQ8wDQYDVQQIDAZGcmFuY2UxDjAMBgNVBAcMBVBhcmlzMRAwDgYDVQQK
DAdGcmVlYm94MRgwFgYDVQQDDA9GcmVlYm94IFJvb3QgQ0EwHhcNMTUwNzMwMTUw
OTIwWhcNMzUwNzI1MTUwOTIwWjBaMQswCQYDVQQGEwJGUjEPMA0GA1UECAwGRnJh
bmNlMQ4wDAYDVQQHDAVQYXJpczEQMA4GA1UECgwHRnJlZWJveDEYMBYGA1UEAwwP
RnJlZWJveCBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
xqYIvq8538SH6BJ99jDlOPoyDBrlwKEp879oYplicTC2/p0X66R/ft0en1uSQadC
sL/JTyfgyJAgI1Dq2Y5EYVT/7G6GBtVH6Bxa713mM+I/v0JlTGFalgMqamMuIRDQ
tdyvqEIs8DcfGB/1l2A8UhKOFbHQsMcigxOe9ZodMhtVNn0mUyG+9Zgu1e/YMhsS
iG4Kqap6TGtk80yruS1mMWVSgLOq9F5BGD4rlNlWLo0C3R10mFCpqvsFU+g4kYoA
dTxaIpi1pgng3CGLE0FXgwstJz8RBaZObYEslEYKDzmer5zrU1pVHiwkjsgwbnuy
WtM1Xry3Jxc7N/i1rxFmN/4l/Tcb1F7x4yVZmrzbQVptKSmyTEvPvpzqzdxVWuYi
qIFSe/njl8dX9v5hjbMo4CeLuXIRE4nSq2A7GBm4j9Zb6/l2WIBpnCKtwUVlroKw
NBgB6zHg5WI9nWGuy3ozpP4zyxqXhaTgrQcDDIG/SQS1GOXKGdkCcSa+VkJ0jTf5
od7PxBn9/TuN0yYdgQK3YDjD9F9+CLp8QZK1bnPdVGywPfL1iztngF9J6JohTyL/
VMvpWfS/X6R4Y3p8/eSio4BNuPvm9r0xp6IMpW92V8SYL0N6TQQxzZYgkLV7TbQI
Hw6v64yMbbF0YS9VjS0sFpZcFERVQiodRu7nYNC1jy8CAwEAAaNjMGEwHQYDVR0O
BBYEFD2erMkECujilR0BuER09FdsYIebMB8GA1UdIwQYMBaAFD2erMkECujilR0B
uER09FdsYIebMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqG
SIb3DQEBCwUAA4ICAQAZ2Nx8mWIWckNY8X2t/ymmCbcKxGw8Hn3BfTDcUWQ7GLRf
MGzTqxGSLBQ5tENaclbtTpNrqPv2k6LY0VjfrKoTSS8JfXkm6+FUtyXpsGK8MrLL
hZ/YdADTfbbWOjjD0VaPUoglvo2N4n7rOuRxVYIij11fL/wl3OUZ7GHLgL3qXSz0
+RGW+1oZo8HQ7pb6RwLfv42Gf+2gyNBckM7VVh9R19UkLCsHFqhFBbUmqwJgNA2/
3twgV6Y26qlyHXXODUfV3arLCwFoNB+IIrde1E/JoOry9oKvF8DZTo/Qm6o2KsdZ
dxs/YcIUsCvKX8WCKtH6la/kFCUcXIb8f1u+Y4pjj3PBmKI/1+Rs9GqB0kt1otyx
Q6bqxqBSgsrkuhCfRxwjbfBgmXjIZ/a4muY5uMI0gbl9zbMFEJHDojhH6TUB5qd0
JJlI61gldaT5Ci1aLbvVcJtdeGhElf7pOE9JrXINpP3NOJJaUSueAvxyj/WWoo0v
4KO7njox8F6jCHALNDLdTsX0FTGmUZ/s/QfJry3VNwyjCyWDy1ra4KWoqt6U7SzM
d5jENIZChM8TnDXJzqc+mu00cI3icn9bV9flYCXLTIsprB21wVSMh0XeBGylKxeB
S27oDfFq04XSox7JM9HdTt2hLK96x1T7FpFrBTnALzb7vHv9MhXqAT90fPR/8A==
-----END CERTIFICATE-----
```
First copy and paste on your server running openHAB these two public certificates in 2 files named for example /freeboxECC.crt and /freeboxRSA.crt. Then you have to import these two certificate as trusted public certificate for your installed Java Runtime Environment. On Linux server, the command is:
```
sudo keytool -import -trustcacerts -file /freeboxECC.crt -alias Freebox -keystore $JAVA_HOME/jre/lib/security/cacerts
sudo keytool -import -trustcacerts -file /freeboxRSA.crt -alias Freebox -keystore $JAVA_HOME/jre/lib/security/cacerts
sudo rm /freeboxECC.crt /freeboxRSA.crt
```
## Authentication
You'll have to authorise openHAB to connect to your Freebox. Here is the process described :
@ -149,28 +232,32 @@ The following channels are supported:
| phone | outgoing#call_name | String | R | Last outgoing call: called name |
| net_device | reachable | Switch | R | Indicates whether the network device is reachable |
| net_interface | reachable | Switch | R | Indicates whether the network interface is reachable |
| airplay | playurl | String | W | Play an audio or video media from the given URL |
| airplay | stop | Switch | W | Stop the media playback |
## Example
### Things
Here is an example with minimal configuration parameters (using default values):
Here is an example with minimal configuration parameters (using default values). It will first connect to mafreebox.freebox.fr using HTTPS (and will failback to HTTP if HTTPS access is not available).
```
Bridge freebox:server:fb "Freebox Revolution" [ appToken="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ] {
Thing phone Phone "Phone"
Thing net_device tv1 "TV living room" [ macAddress="XX:XX:XX:XX:XX:XX" ]
Thing net_interface tv2 "TV bedroom" [ ipAddress="192.168.0.100" ]
Thing airplay player "Freebox Player (AirPlay)" [ name="Freebox Player" ]
}
```
Here is another example overwritting default configuration parameters:
```
Bridge freebox:server:fb "Freebox Revolution" [ fqdn="192.168.0.254", appToken="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", refreshInterval=20 ] {
Bridge freebox:server:fb "Freebox Revolution" [ fqdn="abcdefgh.fbxos.fr", appToken="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", refreshInterval=20, useOnlyHttp=false ] {
Thing phone Phone "Phone" [ refreshPhoneInterval=10, refreshPhoneCallsInterval=120 ]
Thing net_device tv1 "TV living room" [ macAddress="XX:XX:XX:XX:XX:XX" ]
Thing net_interface tv2 "TV bedroom" [ ipAddress="192.168.0.100" ]
Thing airplay player "Freebox Player (AirPlay)" [ name="Freebox Player", password="1111", acceptAllMp3=false ]
}
```
@ -224,4 +311,7 @@ DateTime Freebox_outcall_ts "TimeStamp [%1$tA %1$td %1$tR]" <calendar> {channel=
Switch TVLivingRoom "TV living room" <television> {channel="freebox:net_device:fb:tv1:reachable"}
Switch TVBedroom "TV bedroom" <television> {channel="freebox:net_interface:fb:tv2:reachable"}
String freebox_player_playurl "URL [%s]" { channel="freebox:airplay:fb:player:playurl" }
Switch freebox_player_stop "Stop playback" { channel="freebox:airplay:fb:player:stop" }
```

View File

@ -19,7 +19,12 @@ This binding integrates internet radios based on the [Frontier Silicon chipset](
## Supported Things
Successfully tested are internet radios [Hama IR100](https://de.hama.com/00054823/hama-internetradio-ir110), [Medion MD87180](http://internetradio.medion.com/), and [MEDION MD86988](http://internetradio.medion.com/).
Successfully tested are internet radios
* [Hama IR100](https://de.hama.com/00054823/hama-internetradio-ir110)
* [Medion MD87180](http://internetradio.medion.com/)
* [MEDION MD86988](http://internetradio.medion.com/)
* [Roberts Stream 93i](https://www.robertsradio.com/uk/products/radio/smart-radio/stream-93i)
* [auna Connect 150](http://www.auna.de/HiFi-Geraete/Radios/Internetradios/auna-Connect-150-BK-2-1-Internetradio-Mediaplayer-schwarz.html)
But in principle, all internet radios based on the [Frontier Silicon chipset](http://www.frontier-silicon.com/) should be supported because they share the same API.

View File

@ -35,11 +35,12 @@ Currently supported devices include:
* iTach Flex WiFi
* GC-100-6
* GC-100-12
* ZMOTE Wi-Fi Universal Remote
## Device Discovery
GlobalCache GC-100 and iTach devices emit an **announcement beacon** every 10-20 seconds on multicast address 239.255.250.250:9131. The GlobalCache binding will automatically detect those devices, then add them to the inbox.
GlobalCache GC-100, iTach, and Zmote devices emit an **announcement beacon** every 10-20 seconds on multicast address 239.255.250.250:9131. The GlobalCache binding will automatically detect those devices, then add them to the inbox.
Background discovery is **enabled** by default. To disable background discovery, add the following line to the *conf/services/runtime.cfg* file:
@ -52,7 +53,7 @@ Note that automatic device discovery **will not work** with GC-100's running fir
## Thing Configuration
The iTach IR, iTach SL, and GC-100 devices require a MAP file in order to transform the openHAB command to an IR command or to a serial command. In the thing configuration, enter the name of the MAP file containing the IR and/or serial codes (). The MAP file should be placed in the *conf/transform* directory. See example below.
The iTach IR, iTach SL, GC-100, and Zmote devices require a MAP file in order to transform the openHAB command to an IR command or to a serial command. In the thing configuration, enter the name of the MAP file containing the IR and/or serial codes (). The MAP file should be placed in the *conf/transform* directory. See example below.
For iTach SL and GC-100 devices that support serial connections, you must use the GlobalCache device web application to set the serial port parameters for **baud rate**, **flow control**, and **parity**. These settings must match the serial port settings of the AV device being controlled.
@ -152,7 +153,7 @@ String RS232ME "My RS232-controlled Device" { channel="globalcache:gc100_
Serial commands strings are contained in a MAP file contained within the conf/transform directory. Serial command strings can contain URL-encoded characters in order to represent special characters such as spaces, tabs, carriage returns, line feeds, etc. See example below.
## Serial Direct (SL) Channel
## Serial (SL) Direct Channel
The Serial Direct channel type enables serial commands to be sent directly to the device without attempting to map the command using the transformation service. This is useful in rules where the serial command might be constructed "on the fly" in the body of the rule.
@ -162,6 +163,28 @@ For example, the following item links to the module 1 connector 1 channel on an
String RUSSCAA66 "Russound CAA66" { channel="globalcache:itachFlex:000C45D530B9:sl-m1#c1-direct" }
```
## Serial (SL) Receive Channel
The Serial Receive channel receives feedback from the device connected to the GlobalCache's serial port. You enable
this functionality by setting the **Enable Two Way** switch to ON in the thing configuration. In addition, you must
set the **End-of-Message Delimiter** in the thing configuration. The End-of-Message can be a single character,
or a sequence of characters. Use URL encoding for non-printable characters.
For example, the following item links to the receive channel on module 1 connector 1 on a GC-100. A rule that looks for
updates on this item will be able to process messages sent from the device connected to the GlobalCache's serial port.
```
String RUSSCAA66_Receive "Russound CAA66 Receive" { channel="globalcache:gc100_06:000C1EFFF039:sl-m1#c1-receive" }
```
Here are some examples of common **End-ofMessage** delimiters.
```
%0D%0A Carriage return / Line feed
%0D Carriage return
%F7 Russound RNET message terminator
```
## Example Configuration
### MAP File
@ -215,6 +238,8 @@ String SAMSUNGHLS "Samsung HL-S DLP TV" { channel="globalcac
String RS232ME "Preamp" { channel="globalcache:itachIR:000C7720B39F:sl-m1#c1" }
String RUSSCAA66 "Russound CAA66" { channel="globalcache:itachFlex:000C45D530B9:sl-m1#c1-direct" }
String ZSAMSUNGHLS "Samsung HL-S DLP TV" { channel="globalcache:zmote:CI00073306:ir-m1-c1#c1" }
```
### Sitemap File
@ -314,4 +339,5 @@ globalcache:itachFlex:000C07BA7E11 [ ipAddress="192.168.12.66", mapFilename="ser
globalcache:itachFlex:000CED0B3402 [ ipAddress="192.168.12.67", activeCable="FLEX_RELAY"]
globalcache:gc100_06:000C1065AE17 [ ipAddress="192.168.12.68", mapFilename="ir-serial-codes.map" ]
globalcache:gc100_12:000C162D7902 [ ipAddress="192.168.12.69", mapFilename="ir-serial-codes.map" ]
globalcache:zmote:CI00073306 [ ipAddress="192.168.12.142", mapFilename="ir-serial-codes.map" ]
```

View File

@ -83,10 +83,10 @@ _NOTE: These options are optional, in most circumstances you don't have to speci
Allowed item types are `Contact` and `Switch`. Type `Contact` is used for input pins, `Switch` - for output pins. The configuration string is following:
```
gpio="pin:PIN_NUMBER [debounce:DEBOUNCE_INTERVAL] [activelow:yes|no] [force:yes|no]"
gpio="pin:PIN_NUMBER [debounce:DEBOUNCE_INTERVAL] [activelow:yes|no] [force:yes|no] [initialValue:high|low]"
```
Key-value pairs are separated by space; their order isn't important. Character's case is also insignificant. Key-value pair `pin` is mandatory, `debounce` and `activelow` are optional. If omitted `activelow` is set to `no`, `debounce` - to global option in configuration file (`debounce`) or 0 (zero) if neither is specified.
Key-value pairs are separated by space; their order isn't important. Character's case is also insignificant. Key-value pair `pin` is mandatory, `debounce`, `activelow` and `initialValue` are optional. If omitted `activelow` is set to `no`, `debounce` - to global option in configuration file (`debounce`) or 0 (zero) if neither is specified, initialValue is set to LOW.
`PIN_NUMBER` is the number of the GPIO pin as seen by the kernel (not necessarily the same as the physical pin number).
@ -94,13 +94,15 @@ Key-value pairs are separated by space; their order isn't important. Character's
When `activelow` is set to `no` (or omitted) the pins behaves normally: output pins will be set `high` on `ON` command and `low` on `OFF`, input pins will generate `OPEN` event when they are `high` and `CLOSED` when are `low`. However, if `activelow` is set to `yes` the logic is inverted: when `ON` command is sent to output pin it will be set to `low`, on `OFF` command - to `high`. Input pins will generate `OPEN` event when they are `low` and `CLOSED` event on `high`.
`initialValue` is the state of the pin which is set during initialization. It is applicable only for oputput pins (item Switch) and can be HIGH or LOW.
The "force" option can be used to forcefully get hold of the configured pin even if it is currently in use, so it automatically gets unexported and exported again.
Examples:
```
Switch LED "LED" { gpio="pin:1" }
Switch NormallyClosedRelay "Normally Closed Relay" { gpio="pin:2 activelow:yes" }
Switch NormallyClosedRelay "Normally Closed Relay" { gpio="pin:2 activelow:yes initialValue:high" }
Contact NormallyOpenPushButton "Normally Open Push Button" { gpio="pin:3 debounce:10" }
Contact PIR "PIR" { gpio="pin:4 activelow:yes" }
Contact NormallyClosedPushButton "Normally Closed Push Button" { gpio="pin:5 debounce:10 activelow:yes" }

View File

@ -74,7 +74,7 @@ There are several settings for a bridge:
Network address of the Homematic gateway
- **gatewayType**
Hint for the binding to identify the gateway type (auto|ccu) (default = auto)
Hint for the binding to identify the gateway type (auto|ccu|noccu) (default = auto).
- **callbackHost**
Callback network address of the openHAB server, default is auto-discovery

View File

@ -117,14 +117,16 @@ Bridge hue:bridge:1 [ ipAddress="192.168.0.64" ] {
```
// Bulb1
Switch Light1_Toggle { channel="hue:0210:1:bulb1:color" }
Dimmer Light1_Dimmer { channel="hue:0210:1:bulb1:color" }
Color Light1_Color { channel="hue:0210:1:bulb1:color" }
Dimmer Light1_ColorTemp { channel="hue:0210:1:bulb1:color_temperature" }
Dimmer Light1_Dimmer { channel="hue:0210:1:bulb1:color" }
Color Light1_Color { channel="hue:0210:1:bulb1:color" }
Dimmer Light1_ColorTemp { channel="hue:0210:1:bulb1:color_temperature" }
String Light1_Alert { channel="hue:0210:1:bulb1:alert" }
Switch Light1_Effect { channel="hue:0210:1:bulb1:effect" }
// Bulb2
Switch Light2_Toggle {channel="hue:0220:1:bulb2:brightness"}
Dimmer Light2_Dimm {channel="hue:0220:1:bulb2:brightness"}
Dimmer Light2_ColorTemp {channel="hue:0220:1:bulb2:color_temperature"}
Switch Light2_Toggle { channel="hue:0220:1:bulb2:brightness" }
Dimmer Light2_Dimm { channel="hue:0220:1:bulb2:brightness" }
Dimmer Light2_ColorTemp { channel="hue:0220:1:bulb2:color_temperature" }
```
Note: The bridge ID is in this example **1** but can be different in each system.
@ -136,15 +138,17 @@ sitemap demo label="Main Menu"
{
Frame {
// Bulb1
Switch item= Light1_Toggle
Slider item= Light1_Dimmer
Colorpicker item= Light1_Color
Slider item= Light1_ColorTemp
Switch item= Light1_Toggle
Slider item= Light1_Dimmer
Colorpicker item= Light1_Color
Slider item= Light1_ColorTemp
Switch item= Light1_Alert mappings=[NONE="None", SELECT="Alert", LSELECT="Long Alert"]
Switch item= Light1_Effect
// Bulb2
Switch item= Light2_Toggle
Slider item= Light2_Dimmer
Slider item= Light2_ColorTemp
Switch item= Light2_Toggle
Slider item= Light2_Dimmer
Slider item= Light2_ColorTemp
}
}
```

106
_bindings/isy1/readme.md Normal file
View File

@ -0,0 +1,106 @@
---
id: isy
label: Description
title: Description - Bindings
type: binding
description: "This is a openHAB binding for the Universal Devices ISY 994i router and PLM. Universal Devices offers a Java SDK for"
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.isy/README.md
since: 1x
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
## Description
This is a openHAB binding for the Universal Devices ISY 994i router and PLM. Universal Devices offers a Java SDK for
external programs to communicate with the router. Alternatives include an extensive REST API. See details at
https://www.universal-devices.com/isy-developers/.
## Items Configuration with ISY Binding Details
The following settings can be added to the Items definition.
* ctrl - Controller address in the format "x.y.z.w". This can be the address of a ISY Insteon Scene. Insteon addresses use the first three bytes and the last byte identified a particular capability of the device.
* type - This can be used to select device types with special configuration needs. See the "Device Types" section below.
* cmd - Specific ISY control to send to the ISY router as a command, **ST** is the default if left out
* addr - The Insteon address to monitor for the change. A scene does not report a status change, only the devices in the scene do. Specify the controller of the scene here. Defaults to the controller address if left out
## Device Types
You can specify a specific device type to let the binding know that a device is a special type. This is done using the "type=" configuation item in the binding.
There are currently 3 types available:
* thermostat - required to perform temperature calculations properly
* lock - locks use the security command instead of the normal off/on commands
* heartbeat - several battery powered sensors send a heartbeat. This is just a ST (status) with value 255, and it means that the sensor is still alive. To make rules easier, you can define these as type=heartbeat with an item type of DateTime, and it will update with the current time every time the heartbeat is received. You can then check the item using a rule to see if the DateTime item is too old.
## OpenHAB Item Examples
/* Insteon-enabled thermostat. Note "type=thermostat" to ensure proper temp calculations, and cmd=CLISPH to use the ISY setpoint heat value instead of status */
Number Temperature_Indoor "Inside [%.2f °F]" <temperature> (All) {isy="ctrl=29.24.98.1,type=thermostat,cmd=ST"}
Number Temperature_Setpoint "Desired Temperature [%.2f °F]" <temperature> (All) {isy="ctrl=29.24.98.1,type=thermostat,cmd=CLISPH"}
/* Regular ISY scene id #12220, but look at device 30.CB.66.1 to get the scene status */
Switch Light_Hallway2 "Hallway" <switch> (GroundFloor,Lights) {isy="ctrl=12220,addr=30.CB.66.1"}
/* Regular ISY device, controlled directly (won't update scenes!)
Switch K_DiningRoom_Light "Dining Room Light" (GroundFloor,Lights) {isy="ctrl=F.C3.7C.1"}
/* ZWave lock. Note type=lock (makes it use the security commands necessary). The second (Number) entry watches the BATLVL value, which battery-powered devices use to report battery level in percent */
Switch BDoorLock "Back Door Lock" <lock> (Locks) {isy="ctrl=ZW004_1,type=lock"}
Number BDoorLock_Battery "Back Door Lock Battery [%d]" <battery> (Locks,BattLevels) {isy="ctrl=ZW004_1,cmd=BATLVL"}
/* Insteon FanLinc, set up with a Keypadlinc. 4 scenes - Off, Low, Med, High */
Switch LR_Fan_Off "LR Fan Off" (ISYScenes) {isy="ctrl=4622,addr=1c.e2.d1.3", autoupdate="false"}
Switch LR_Fan_Low "LR Fan Low" (ISYScenes) {isy="ctrl=20771,addr=1c.e2.d1.4", autoupdate="false"}
Switch LR_Fan_Med "LR Fan Med" (ISYScenes) {isy="ctrl=22031,addr=1c.e2.d1.5", autoupdate="false"}
Switch LR_Fan_High "LR Fan High" (ISYScenes) {isy="ctrl=11187,addr=1c.e2.d1.6", autoupdate="false"}
/* Insteon water sensor - it has 3 subdevices: 1 = dry, 2 = wet, 4 = heartbeat
The heartbeat device sends an "ON" (255) ST code as a heartbeat. With type=heartbeat, the binding
sends a DateTime value. You can use a rule to check that DateTime to see if you have received
a heartbeat recently */
Contact Water_Heater_Dry "Water Heater Sensor [MAP(watersensor-en.map):%s]" (Sensors) {isy="addr=25.AD.4F.1"}
DateTime Water_Heater_Heartbeat "Water Heater HB [%1$td.%1$tm.%1$tY %1$tH:%1$tM]" (Sensors) {isy="addr=25.AD.4F.4", type=heartbeat}
The transform file (watersensor-en.map) for the water sensor is:
CLOSED=Wet
OPEN=Dry
undefined=Unknown
-=Unknown
## ISY Binding Configuration
The following settings configure the ISY binding in the openhab.cfg file.
* isy:refresh=60000 # refresh interval in milliseconds (optional, defaults to 60000 [1 minute])
* isy:upnp=true # if true, use UPNP to communicate with the ISY 994i
* isy:uuid=uuid:%your_uudid% # UUID of the ISY router
* isy:ip=192.168.x.x # the hostname of the ISY router
* isy:port=80 # the port of the ISY router
* isy:user=user # the user of the ISY router
* isy:password=password # the password of the ISY router
## Disclaimer
There is no guarantee for the function of the binding or its correctness. Use at your own risk.
## Development Upgrade Instructions
To build and install the isy binding, you need to first download the Java SDK that corresponds with the firmware version
of your ISY 994i.
1. [Download](https://www.universal-devices.com/isy-developers/.) the latest Java SDK zip file, e.g. ISY-WSDK-4.2.21.zip
1. Unzip it to some local folder
1. Copy the isy_inst.jar file into the org.openhab.binding.isy/lib folder
1. Provided that the API and the file name have not changed, there should not be a need to change the source code. Watch for
compilation errors and adjust accordingly.
The Lib is pushed with the binding, if you are using a older firmware version than the bundled version you may have issues. The SDK used should work with all newer version.

View File

@ -57,7 +57,7 @@ The following configuration options are available for the Kodi binding:
| `callbackUrl` | Callback URL | URL to use for playing notification sounds, e.g. `http://192.168.0.2:8080` | no |
## Thing Configuration
### Thing Configuration
The Kodi thing requires the IP address of the device hosting your Kodi media center instance and the TCP port to access it on (default: `9090`).
These parameters will be found by the auto-discovery feature.
@ -83,11 +83,29 @@ The Kodi thing supports the following channels:
| album | String | Album name of the currently played song |
| artist | String | Artist name of the currently played song or director of the currently played movie|
| playuri | String | Plays the file with the provided URI |
| pvr-open-tv | String | Opens the PVR TV channel with the provided name |
| pvr-open-radio | String | Opens the PVR Radio channel with the provided name |
| pvr-channel | String | Title of the currently played PVR channel |
| shownotification | String | Shows the provided notification message on the screen |
| input | String | Allows to control Kodi. Valid values are: `Up`, `Down`, `Left`, `Right`, `Select`, `Back`, `Home`, `ContextMenu`, `Info`, `ShowCodec`, `ShowOSD` |
| inputtext | String | This channel emulates a keyboard input |
| systemcommand | String | This channel allows to send commands to `shutdown`, `suspend`, `hibernate`, `reboot` kodi |
| mediatype | String | The media type of the current file. e.g. song or movie |
| mediatype | String | The media type of the current file. Valid return values are: `unknown`, `channel`, `episode`, `movie`, `musicvideo`, `picture`, `radio`, `song`, `video` |
### Channel Configuration
**group** The PVR channels can be put into user-defined PVR channel groups. There are two default PVR channel groups. One for PVR TV channels and one for PVR radio channels. The default labels are "All channels" (in german systems "Alle Kanäle"). You have to adjust this configuration to use the `pvr-open-tv` and `pvr-open-radio` channels properly. You can optionally configure an user-defined PVR channel group.
A manual setup through a `things/kodi.things` file could look like this:
```
kodi:kodi:myKodi [ipAddress="192.168.1.100", port="9090"] {
Channels:
Type pvropentv : pvr-open-tv [
group="All channels"
]
}
```
## Item Configuration
@ -102,8 +120,11 @@ String myKodi_title "Title [%s]" { channel="kodi:kodi:myKodi:
String myKodi_showtitle "Show title [%s]" { channel="kodi:kodi:myKodi:showtitle" }
String myKodi_album "Album [%s]" { channel="kodi:kodi:myKodi:album" }
String myKodi_artist "Artist [%s]" { channel="kodi:kodi:myKodi:artist" }
String myKodi_playuri "PlayerURI [%s]" { channel="kodi:kodi:myKodi:playuri" }
String myKodi_notification "Notification [%s]" { channel="kodi:kodi:myKodi:shownotification" }
String myKodi_playuri "PlayerURI" { channel="kodi:kodi:myKodi:playuri" }
String myKodi_pvropentv "PVR TV channel" { channel="kodi:kodi:myKodi:pvr-open-tv" }
String myKodi_pvropenradio "PVR Radio channel" { channel="kodi:kodi:myKodi:pvr-open-radio" }
String myKodi_pvrchannel "PVR channel [%s]" { channel="kodi:kodi:myKodi:pvr-channel" }
String myKodi_notification "Notification" { channel="kodi:kodi:myKodi:shownotification" }
String myKodi_input "Input" { channel="kodi:kodi:myKodi:input" }
String myKodi_inputtext "Inputtext" { channel="kodi:kodi:myKodi:inputtext" }
String myKodi_systemcommand "Systemcommand" { channel="kodi:kodi:myKodi:systemcommand" }
@ -127,7 +148,9 @@ sitemap demo label="myKodi"
Text item=myKodi_showtitle
Text item=myKodi_album
Text item=myKodi_artist
Text item=myKodi_playuri
Selection item=myKodi_pvropentv mappings=[Add your PVR TV channels here ...]
Selection item=myKodi_pvropenchannel mappings=[Add your PVR radio channels here ...]
Text item=myKodi_pvrchannel
Selection item=myKodi_input mappings=[Up='Up', Down='Down', Left='Left', Right='Right', Select='Select', Back='Back', Home='Home', ContextMenu='ContextMenu', Info='Info', ShowCodec='ShowCodec', ShowOSD='ShowOSD']
Selection item=myKodi_systemcommand mappings=[Shutdown='Herunterfahren', Suspend='Bereitschaft', Reboot='Neustart']
Text item=myKodi_mediatype

View File

@ -31,22 +31,24 @@ The following table lists the thing types of the supported LIFX devices:
| Color 1000 BR30 | colorlight |
| LIFX A19 | colorlight |
| LIFX BR30 | colorlight |
| LIFX Z | colorlight |
| | |
| LIFX+ A19 | colorirlight |
| LIFX+ BR30 | colorirlight |
| | |
| LIFX Z | colormzlight |
| | |
| White 800 (Low Voltage) | whitelight |
| White 800 (High Voltage) | whitelight |
| White 900 BR30 (Low Voltage) | whitelight |
The thing type determines the capability of a device and with that the possible ways of interacting with it. The following matrix lists the capabilities (channels) for each type:
| Thing Type | On/Off | Brightness | Color | Color Temperature | Infrared |
|--------------|:------:|:----------:|:-----:|:-----------------:|:--------:|
| colorlight | X | | X | X | |
| colorirlight | X | | X | X | X |
| whitelight | X | X | | X | |
| Thing Type | On/Off | Brightness | Color | Color Zone | Color Temperature | Color Temperature Zone | Infrared |
|--------------|:------:|:----------:|:-----:|:----------:|:-----------------:|:----------------------:|:--------:|
| colorlight | X | | X | | X | | |
| colorirlight | X | | X | | X | | X |
| colormzlight | X | | X | X | X | X | |
| whitelight | X | X | | | X | | |
## Discovery
@ -71,21 +73,29 @@ The *fadetime* is an optional thing configuration parameter which configures the
All devices support some of the following channels:
| Channel Type ID | Item Type | Description | Thing Types |
|-----------------|-----------|--------------------------------------------------------------------------------------|--------------------------------------|
| brightness | Dimmer | This channel supports adjusting the brightness value. | whitelight |
| color | Color | This channel supports full color control with hue, saturation and brightness values. | colorlight, colorirlight |
| Channel Type ID | Item Type | Description | Thing Types |
|-----------------|-----------|--------------------------------------------------------------------------------------|----------------------------------------|
| brightness | Dimmer | This channel supports adjusting the brightness value. | whitelight |
| color | Color | This channel supports full color control with hue, saturation and brightness values. | colorlight, colorirlight, colormzlight |
| colorzone | Color | This channel supports full zone color control with hue, saturation and brightness values. | colormzlight |
| infrared | Dimmer | This channel supports adjusting the infrared value. *Note:* IR capable lights only activate their infrared LEDs when the brightness drops below a certain level. | colorirlight |
| temperature | Dimmer | This channel supports adjusting the color temperature from cold (0%) to warm (100%). | colorlight, colorirlight, whitelight |
| signalstrength | Number | This channel represents signal strength with values 0, 1, 2, 3 or 4; 0 being worst strength and 4 being best strength. | colorlight, colorirlight, colormzlight, whitelight |
| temperature | Dimmer | This channel supports adjusting the color temperature from cold (0%) to warm (100%). | colorlight, colorirlight, colormzlight, whitelight |
| temperaturezone | Dimmer | This channel supports adjusting the zone color temperature from cold (0%) to warm (100%). | colormzlight |
The *color* and *brightness* channels have a "Power on brightness" configuration option that is used to determine the brightness when a light is switched on. When it is left empty, the brightness of a light remains unchanged when a light is switched on or off.
MultiZone lights (*colormzlight*) have serveral channels (e.g. *colorzone0*, *temperaturezone0*, etc.) that allow for controlling specific zones of the light. Changing the *color* and *temperature* channels will update the states of all zones. The *color* and *temperature* channels of MultiZone lights always return the same state as *colorzone0*, *temperaturezone0*.
## Full Example
In this example **living** is a Color 1000 light that has a *colorlight* thing type which supports *color* and *temperature* channels.
The **porch** light is a LIFX+ BR30 that has a *colorirlight* thing type which supports *color*, *temperature* and *infrared* channels.
The **ceiling** light is a LIFX Z with 2 strips (16 zones) that has a *colormzlight* thing type which supports *color*, *colorzone*, *temperature* and *temperaturezone* channels.
Finally, **kitchen** is a White 800 (Low Voltage) light that has a *whitelight* thing type which supports *brightness* and *temperature* channels.
Either create a single *Color* item linked to the *color* channel and define *Switch*, *Slider* and *Colorpicker* entries with this item in the sitemap.
@ -96,22 +106,23 @@ Or create items for each type (*Color*, *Switch*, *Dimmer*) and define the corre
```
Thing lifx:colorlight:living [ deviceId="D073D5A1A1A1" ] {
Channels:
Type color : color [ powerOnBrightness= ]
Channels:
Type color : color [ powerOnBrightness= ]
}
Thing lifx:colorlight:living2 [ deviceId="D073D5A2A2A2" ] {
Channels:
Type color : color [ powerOnBrightness= ]
Channels:
Type color : color [ powerOnBrightness= ]
}
Thing lifx:colorirlight:porch [ deviceId="D073D5B2B2B2", fadetime=0 ] {
Channels:
Type color : color [ powerOnBrightness=75 ]
Channels:
Type color : color [ powerOnBrightness=75 ]
}
Thing lifx:whitelight:kitchen [ deviceId="D073D5C3C3C3", fadetime=150 ]
Thing lifx:colormzlight:ceiling [ deviceId="D073D5C3C3C3" ]
Thing lifx:whitelight:kitchen [ deviceId="D073D5D4D4D4", fadetime=150 ]
```
### demo.items:
@ -131,12 +142,20 @@ Dimmer Living2_Temperature { channel="lifx:colorlight:living2:temperature" }
Color Porch_Color { channel="lifx:colorirlight:porch:color" }
Dimmer Porch_Infrared { channel="lifx:colorirlight:porch:infrared" }
Dimmer Porch_Temperature { channel="lifx:colorirlight:porch:temperature" }
Number Porch_Signal_Strength { channel="lifx:colorirlight:porch:signalstrength" }
// Ceiling
Color Ceiling_Color { channel="lifx:colormzlight:ceiling:color" }
Dimmer Ceiling_Temperature { channel="lifx:colormzlight:ceiling:temperature" }
Color Ceiling_Color_Zone_0 { channel="lifx:colormzlight:ceiling:colorzone0" }
Dimmer Ceiling_Temperature_Zone_0 { channel="lifx:colormzlight:ceiling:temperaturezone0" }
Color Ceiling_Color_Zone_15 { channel="lifx:colormzlight:ceiling:colorzone15" }
Dimmer Ceiling_Temperature_Zone_15 { channel="lifx:colormzlight:ceiling:colorzone15" }
// Kitchen
Switch Kitchen_Toggle { channel="lifx:whitelight:kichen:brightness" }
Dimmer Kitchen_Brightness { channel="lifx:whitelight:kitchen:brightness" }
Dimmer Kitchen_Temperature { channel="lifx:whitelight:kitchen:temperature" }
```
### demo.sitemap:
@ -144,32 +163,44 @@ Dimmer Kitchen_Temperature { channel="lifx:whitelight:kitchen:temperature" }
```
sitemap demo label="Main Menu"
{
Frame label="Living" {
Switch item=Living_Color
Slider item=Living_Color
Colorpicker item=Living_Color
Slider item=Living_Temperature
}
Frame label="Living2" {
Switch item=Living2_Toggle
Slider item=Living2_Dimmer
Colorpicker item=Living2_Color
Slider item=Living2_Temperature
Frame label="Living" {
Switch item=Living_Color
Slider item=Living_Color
Colorpicker item=Living_Color
Slider item=Living_Temperature
}
Frame label="Porch" {
Switch item=Porch_Color
Slider item=Porch_Color
Colorpicker item=Porch_Color
Slider item=Porch_Temperature
Slider item=Porch_Infrared
}
Frame label="Living2" {
Switch item=Living2_Toggle
Slider item=Living2_Dimmer
Colorpicker item=Living2_Color
Slider item=Living2_Temperature
}
Frame label="Kitchen" {
Switch item=Kitchen_Toggle
Slider item=Kitchen_Brightness
Slider item=Kitchen_Temperature
}
Frame label="Porch" {
Switch item=Porch_Color
Slider item=Porch_Color
Colorpicker item=Porch_Color
Slider item=Porch_Temperature
Slider item=Porch_Infrared
Text item=Porch_Signal_Strength
}
Frame label="Ceiling" {
Switch item=Ceiling_Color
Slider item=Ceiling_Color
Colorpicker item=Ceiling_Color
Slider item=Ceiling_Temperature
Colorpicker item=Ceiling_Color_Zone_0
Slider item=Ceiling_Temperature_Zone_0
Colorpicker item=Ceiling_Color_Zone_15
Slider item=Ceiling_Temperature_Zone_15
}
Frame label="Kitchen" {
Switch item=Kitchen_Toggle
Slider item=Kitchen_Brightness
Slider item=Kitchen_Temperature
}
}
```

View File

@ -22,14 +22,14 @@ This binding allows you to integrate, view and control the MAX! Thermostats in t
This binding support 6 different things types
| Thing | Type | Description |
|----------------|---------|-----------------------------------|
| bridge | Bridge | This is the MAX! Cube LAN gateway |
| thermostat | Thing | This is for the MAX! Heating Thermostat. This is also used for the powerplug switch "Zwischenstecker-Schaltaktor". |
| thermostatplus | Thing | This is for the MAX! Heating Thermostat+. This is the type that can hold the program by itself |
| wallthermostat | Thing | MAX! Wall Thermostat. |
| ecoswitch | Thing | MAX! Ecoswitch. |
| shuttercontact | Thing | MAX! Shuttercontact / Window Contact. |
| Thing | Type | Description |
|----------------|--------|--------------------------------------------------------------------------------------------------------------------|
| bridge | Bridge | This is the MAX! Cube LAN gateway. |
| thermostat | Thing | This is for the MAX! Heating Thermostat. This is also used for the powerplug switch "Zwischenstecker-Schaltaktor". |
| thermostatplus | Thing | This is for the MAX! Heating Thermostat+. This is the type that can hold the program by itself. |
| wallthermostat | Thing | MAX! Wall Thermostat. |
| ecoswitch | Thing | MAX! Ecoswitch. |
| shuttercontact | Thing | MAX! Shuttercontact / Window Contact. |
Generally one does not have to worry about the thing types as they are automatically defined.
If for any reason you need to manually define the Things and you are not exactly sure what type of thermostat you have, you can choose `thermostat` for both the thermostat and thermostat+, this will not affect their working.
@ -37,7 +37,7 @@ If for any reason you need to manually define the Things and you are not exactly
## Discovery
The discovery process for the MAX! binding works in 2 steps.
When the binding is started or when manually triggered, the network is queried for the existence of a MAX! Cube lan gateway. When the Cube is found, it will become available in the discovery inbox. Periodically the network is queried again for a Cube.
When the binding is started or when manually triggered, the network is queried for the existence of a MAX! Cube LAN gateway. When the Cube is found, it will become available in the discovery inbox. Periodically the network is queried again for a Cube.
Once the Cube is available in openHAB, all the devices connected to it are discovered and added to the discovery inbox. No scan is needed to trigger this.
@ -48,9 +48,9 @@ All the configuration settings are now per MAX! Cube, hence in case you have mul
## Thing Configuration
All the things are identified by their Serial number, hence this is mandatory.
The Cube (`bridge` thing) also requires the IP address to be defined.
All other configuration is optional.
All the things are identified by their serial number, hence this is mandatory.
The Cube (`bridge` thing) also requires the IP address to be defined.
All other configuration is optional.
Note that several configuration options are automatically populated. Later versions of the binding may allow you to update this information. These properties can be found in the `Device Settings` section of parameters.
@ -59,22 +59,22 @@ Note that several configuration options are automatically populated. Later versi
Depending on the thing it supports different Channels
| Channel Type ID | Item Type | Description |
|------------------|------------------------|--------------|----------------- |------------- |
| mode | String | This channel indicates the mode of a thermostat |
| battery_low | Switch | This channel indicates if the device battery is low |
| set_temp | Number | This channel indicates the sets temperature of a thermostat. |
| actual_temp | Number | This channel indicates the measured temperature of a thermostat. see below for more details|
| valve | Number | This channel indicates the valve opening in %. Note this is an advaned setting, normally not visible |
| contact_state | Contact | This channel indicates the contact state for a shutterswitch |
| free_mem | Number |This channel indicates the free available memory on the cube to hold send commands. Note this is an advanced setting, normally not visible |
| duty_cycle | Number | This channel indicates the duty cycle (due to regulatory compliance reasons the cube is allowed only to send for a limited time. Duty cycle indicates how much of the available time is consumed) Note this is an advanced setting, normally not visible. |
| Channel Type ID | Item Type | Description | Available on thing |
|-----------------|-----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------|
| mode | String | This channel indicates the mode of a thermostat (AUTOMATIC/MANUAL/BOOST/VACATION). | thermostat, thermostatplus, wallthermostat |
| battery_low | Switch | This channel indicates if the device battery is low (ON/OFF). | thermostat, thermostatplus, wallthermostat, ecoswitch, shuttercontact |
| set_temp | Number | This channel indicates the sets temperature (in °C) of a thermostat. | thermostat, thermostatplus, wallthermostat |
| actual_temp | Number | This channel indicates the measured temperature (in °C) of a thermostat (see below for more details). | thermostat, thermostatplus, wallthermostat |
| valve | Number | This channel indicates the valve opening in %. Note this is an advanced setting, normally not visible. | thermostat, thermostatplus, wallthermostat |
| locked | Contact | This channel indicates if the thermostat is locked for adjustments (OPEN/CLOSED). Note this is an advanced setting, normally not visible. | thermostat, thermostatplus, wallthermostat |
| contact_state | Contact | This channel indicates the contact state for a shutterswitch (OPEN/CLOSED). | shuttercontact |
| free_mem | Number | This channel indicates the free available memory on the cube to hold send commands. Note this is an advanced setting, normally not visible. | bridge |
| duty_cycle | Number | This channel indicates the duty cycle (due to regulatory compliance reasons the cube is allowed only to send for a limited time. Duty cycle indicates how much of the available time is consumed) Note this is an advanced setting, normally not visible. | bridge |
## Full Example
In most cases no Things need to be defined manually. In case your Cube can't be discovered you need a `max:bridge` definition incl the right IP address of the Cube. Only in exceptional cases you would need to define the thermostats etc.
In most cases no Things need to be defined manually. In case your Cube can't be discovered you need a `max:bridge` definition incl. the right IP address of the Cube. Only in exceptional cases you would need to define the thermostats etc.
max.things:
@ -91,8 +91,8 @@ Group gMAX "MAX Heating" <temperature> [ "home-group" ]
Switch maxBattery "Battery Low" (gMAX) {channel="max:thermostat:KEQ0565026:KEQ0648949:battery_low"}
String maxMode "Thermostat Mode Setting" (gMAX) {channel="max:thermostat:KEQ0565026:KEQ0648949:mode"}
Number maxActual "Actual measured room temperature [%.1f <EFBFBD>C]" (gMAX) {channel="max:thermostat:KEQ0565026:KEQ0648949:actual_temp"}
Number maxSetTemp "Thermostat temperature setpoint [%.1f <EFBFBD>C]" (gMAX) {channel="max:thermostat:KEQ0565026:KEQ0648949:set_temp"}
Number maxActual "Actual measured room temperature [%.1f °C]" (gMAX) {channel="max:thermostat:KEQ0565026:KEQ0648949:actual_temp"}
Number maxSetTemp "Thermostat temperature setpoint [%.1f °C]" (gMAX) {channel="max:thermostat:KEQ0565026:KEQ0648949:set_temp"}
```
@ -115,24 +115,27 @@ sitemap demo label="Main Menu"
## Actual Temperature Update
Please be aware that the actual temperature measure for thermostats is only updated after the valve moved position or the thermostats mode has changed. Hence the temperature you see may be hours old. In that case you can update the temperature by changing the mode, wait approx. 2 minutes and change the mode back.
There is an experimental mode that does this automatically. This can be enabled by showing the "advanced settings"(e.g. in Habmin UI. Than the "Actual Temperature Refresh Rate" can be set. Minimum refresh rate once/10 minutes, recommended 60min to avoid excessive battery drain.
There is an experimental mode that does this automatically. This can be enabled by showing the "advanced settings" (e.g. in HABmin UI. Than the "Actual Temperature Refresh Rate" can be set. Minimum refresh rate once/10 minutes, recommended 60min to avoid excessive battery drain.
## New Device Inclusion
When clicking the discovery button for MAX! devices manually in the UI, you will start New Device Inclusion mode for 60s. During this time holding the _boost_ button on your device will link it to the Cube.
## Device configuration
In the _Configuration Parameters_ section of the device things you can update some of the device configuration parameters. Currently the following parameters can be updated:
* _name_ Name of the thermostat stored in the Cube (also used by the eq3 software).
* _name_ Name of the thermostat stored in the Cube (also used by the eQ-3 software).
_Cube device configurable parameters_
* _ntpServer1_ The hostname for NTP Server 1 used by the Cube to get the time
* _ntpServer2_ The hostname for NTP Server 2 used by the Cube to get the time
## Action Buttons (visible in Habmin)
In the Habmin thing configuration screen several action buttons are available to trigger special actions on the Cube
## Action Buttons (visible in HABmin)
In the HABmin thing configuration screen several action buttons are available to trigger special actions on the Cube
* _Reset Cube Configuration_. This resets the MAX! Cube room and device information. Devices will need to be included again! To use this button you need to enable 'Advanced settings'
@ -142,4 +145,4 @@ On the MAX! devices you can trigger the following action
* _Delete Device from Cube_. Deletes the device from the MAX! Cube. Device will need to be included again! To use this button you need to enable 'Advanced settings'
Note: In PaperUI there are no action buttons. You can trigger these actions changing from 'No Action' in the dropdown to the action value.
Note: In Paper UI there are no action buttons. You can trigger these actions changing from 'No Action' in the dropdown to the action value.

View File

@ -6,7 +6,7 @@ type: binding
description: "The Milight binding allows openHAB to send commands to multiple Milight bridges."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.milight/README.md
since: 1x
install: auto
install: legacy
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->

View File

@ -175,7 +175,7 @@ The extended format looks like:
(for write)
```ini
[slaveName:writeIndex:trigger=TRIGGER, transformation=TRANSFORMATION, valueType=VALUETYPE]
>[slaveName:writeIndex:trigger=TRIGGER, transformation=TRANSFORMATION, valueType=VALUETYPE]
```
Read and write entries can be combined, and there can be zero or more read/write entries. All the keyword arguments after index are optional. Defaults are such that they correspond to binding behaviour currently. Multiple read/write definitions can be specified with commas (whitespace allowed as well).

View File

@ -3,7 +3,7 @@ id: mqtt
label: MQTT
title: MQTT - Bindings
type: binding
description: "This binding allows openHAB to act as an MQTT client, so that openHAB items can send and receive [MQTT](http://mqtt.org/) messages to/from an MQTT broker. It does not provide MQTT broker functionality, for this you may want to have a look at [Mosquitto](http://mosquitto.org/) or others. There are test servers available at m2m.eclipse.org and test.mosquitto.org."
description: "This binding allows openHAB to act as an MQTT client, so that openHAB items"
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.mqtt/README.md
since: 1x
logo: images/addons/mqtt.png
@ -16,9 +16,13 @@ install: auto
# MQTT Binding
This binding allows openHAB to act as an MQTT client, so that openHAB items can send and receive [MQTT](http://mqtt.org/) messages to/from an MQTT broker. It does not provide MQTT broker functionality, for this you may want to have a look at [Mosquitto](http://mosquitto.org/) or others. There are test servers available at m2m.eclipse.org and test.mosquitto.org.
This binding allows openHAB to act as an MQTT client, so that openHAB items
can send and receive [MQTT](http://mqtt.org/) messages to/from an MQTT broker.
It does not provide MQTT broker functionality, for this you may want to have a
look at [Mosquitto](http://mosquitto.org/) or others. There are test servers
available at m2m.eclipse.org and test.mosquitto.org.
OpenHAB provides MQTT support on different levels. The table below gives a quick overview:
openHAB provides MQTT support on different levels. The table below gives a quick overview:
| Level | Description | Usage | Configuration |
|-------|-------------|-------|--------|
@ -33,18 +37,20 @@ The OwnTracks (formerly Mqttitude) binding is also available, which is an extens
In order to consume or publish messages to an MQTT broker, you need to define all the brokers which you want to connect to, in your `services/mqtt.cfg` file.
| Property | Default | Description |
|----------|------------|-------------|
| `<broker>`.url | | Required. URL to the MQTT broker, e.g. tcp://localhost:1883 or ssl://localhost:8883 |
| `<broker>`.clientId | | Client id (max 23 chars) to use when connecting to the broker. If not provided a default one is generated. |
| `<broker>`.user | | User ID to authenticate with the broker. |
| `<broker>`.pwd | | Password to authenticate with the broker. |
| `<broker>`.qos | 0 | Set the quality of service level for sending messages to this broker. Possible values are 0 (Deliver at most once),1 (Deliver at least once) or 2 (Deliver exactly once). |
| `<broker>`.retain | false | true or false. Defines if the broker should retain the messages sent to it. |
| `<broker>`.async | true | true or false. Defines if messages are published asynchronously or synchronously. |
| `<broker>`.keepAlive | 60 | Integer. Defines the keep alive interval in seconds. |
| Property | Default | Required | Description |
|----------------------|---------|:--------:|-------------------------------------------------------------|
| `<broker>`.url | | Yes | URL to the MQTT broker, e.g. tcp://localhost:1883 or ssl://localhost:8883 |
| `<broker>`.clientId | random | No* | Client ID to use when connecting to the broker. If not provided a random default is generated. Usually restricted to 23 characters in length. (see the `allowLongerClientIds` setting) |
| `<broker>`.user | | Yes | User ID to authenticate with the broker. |
| `<broker>`.pwd | | Yes | Password to authenticate with the broker. |
| `<broker>`.qos | 0 | No | Set the quality of service level for sending messages to this broker. Possible values are 0 (Deliver at most once), 1 (Deliver at least once) or 2 (Deliver exactly once). |
| `<broker>`.retain | false | No | True or false. Defines if the broker should retain the messages sent to it. |
| `<broker>`.async | true | No | True or false. Defines if messages are published asynchronously or synchronously. |
| `<broker>`.keepAlive | 60 | No | Integer. Defines the keep alive interval in seconds. |
| `<broker>`.allowLongerClientIds | false | No | True or false. If set to true, allows the use of clientId values up to 65535 characters long. NOTE: clientId values longer than 23 characters may not be supported by all MQTT servers. Check the server documentation. |
where `<broker>` is an alias name for the MQTT broker. This is the name you can use in the item binding configurations afterwards.
`<broker>` is an alias name for the MQTT broker. This is the name you can use in the item binding configurations afterwards.<br>
\* `<broker>`.clientId is not required to be provided because a random value will be generated if a value is not provided.
### Example Configurations
@ -54,7 +60,7 @@ Example configuration of a simple broker connection:
m2m-eclipse.url=tcp://m2m.eclipse.org:1883
```
Example configuration of a encrypted broker connection with authentication:
Example configuration of an encrypted broker connection with authentication:
```
mosquitto.url=ssl://test.mosquitto.org:8883
@ -67,14 +73,16 @@ mosquitto.async=false
## Item Configuration for Inbound Messages
Below you can see the structure of the inbound mqtt configuration string. Inbound configurations allow you to receive MQTT messages into an openHAB item.
Every item is allowed to have multiple inbound (or outbound) configurations.
Below you can see the structure of the inbound MQTT configuration string.
Inbound configurations allow you to receive MQTT messages into an openHAB
item. Every item is allowed to have multiple inbound (or outbound)
configurations.
```
Item myItem {mqtt="<direction>[<broker>:<topic>:<type>:<transformer>], <direction>[<broker>:<topic>:<type>:<transformation>], ..."}
```
Since 1.6 it is possible to add an optional 5th configuration like:
Since 1.6 it is possible to add an optional fifth configuration like:
```
Item myItem {mqtt="<direction>[<broker>:<topic>:<type>:<transformer>:<regex_filter>], <direction>[<broker>:<topic>:<type>:<transformation>], ..."}
@ -83,11 +91,11 @@ Item myItem {mqtt="<direction>[<broker>:<topic>:<type>:<transformer>:<regex_filt
| Property | Description |
|----------|-------------|
| direction | This is always "&lt;" for inbound messages. |
| broker | The broker alias as it is defined in the openHab configuration. |
| broker | The broker alias as it is defined in the openHAB configuration. |
| topic | The MQTT Topic to subscribe to. |
| type | Describes what the message content contains: a status update or command. Allowed values are 'state' or 'command'. |
| transformation | Rule defining how to transform the received message content into something openHab recognizes. Transformations are defined in the format of TRANSFORMATION_NAME(transformation_function). Allowed values are 'default' or any of the transformers provided in the org.openhab.core.transform bundle. Custom transformations can be contributed directly to the transform bundle by making the Transformation available through Declarative Services. Any other value than the above types will be interpreted as static text, in which case the actual content of the message is ignored. |
| regex_filter(optional, since 1.6) | A string representing a regular expression. Only messages that match this expression will be further processed. All other messages will be dropped. Use Case: If multiple different data is sent over one topic (for example multiple sensors of one device), it is possible to distinguish the messages for different items. Example ".*" (excluding the quotes) will match every message, ".*\"type\"=2\n.*" (excluding the quotes) will match every message including type=2. |
| transformation | Rule defining how to transform the received message content into something openHAB recognizes. Transformations are defined in the format of TRANSFORMATION_NAME(transformation_function). Allowed values are 'default' or any of the transformers provided in the org.openhab.core.transform bundle. Custom transformations can be contributed directly to the transform bundle by making the Transformation available through Declarative Services. Any value other than the above types will be interpreted as static text, in which case the actual content of the message is ignored. |
| regex_filter (optional, since 1.6) | A string representing a regular expression. Only messages that match this expression will be further processed. All other messages will be dropped. Use Case: If multiple different data is sent over one topic (for example multiple sensors of one device), it is possible to distinguish the messages for different items. Example ".*" (excluding the quotes) will match every message, ".*\"type\"=2\n.*" (excluding the quotes) will match every message including type=2. |
### Example Inbound Configurations
@ -101,7 +109,11 @@ Number humidity "humidity [%.1f%%] {mqtt="<[broker:weatherstation/readings:state
## Item Configuration for Outbound Messages
Below you can see the structure of the outbound mqtt configuration string. Outbound configurations allow you to publish (send) an MQTT message to the MQTT broker when an item receives a command or state update, and other MQTT clients that are subscribed to the given topic on the same broker, like Arduino devices for example, will receive those messages.
Below you can see the structure of the outbound MQTT configuration string.
Outbound configurations allow you to publish (send) an MQTT message to the
MQTT broker when an item receives a command or state update, and other MQTT
clients that are subscribed to the given topic on the same broker, like
Arduino devices for example, will receive those messages.
```
Item itemName { mqtt="<direction>[<broker>:<topic>:<type>:<trigger>:<transformation>]" }
@ -113,11 +125,11 @@ Item itemName { mqtt="<direction>[<broker>:<topic>:<type>:<trigger>:<transformat
| broker | The broker alias as it was defined in the openHAB configuration. |
| topic | The MQTT Topic to publish messages to. |
| type | 'state' or 'command'. Indicates whether the receiving of a status update or command triggers the sending of an outbound message. |
| trigger | Specifies a specific OpenHAB command or state (e.g. ON, OFF, a DecimalType, ..) which triggers the sending of an outbound message. Use `*` to indicate that any command or state should trigger the sending. |
| transformation | Rule defining how to create the message content. Transformations are defined in the format of TRANSFORMATION_NAME(transformation_function). Allowed values are 'default' or any of the transformers provided in the org.openhab.core.transform bundle. Custom transformations can be contributed directly to the transform bundle by making the Transformation available through Declarative Services. Any other value than the above types will be interpreted as static text, in which case this text is used as the message content. |
| trigger | Specifies an openHAB command or state (e.g. ON, OFF, a DecimalType, ..) which triggers the sending of an outbound message. Use `*` to indicate that any command or state should trigger the sending. |
| transformation | Rule defining how to create the message content. Transformations are defined in the format of TRANSFORMATION_NAME(transformation_function). Allowed values are 'default' or any of the transformers provided in the org.openhab.core.transform bundle. Custom transformations can be contributed directly to the transform bundle by making the Transformation available through Declarative Services. Any value other than the above types will be interpreted as static text, in which case this text is used as the message content. |
When the message content for an outbound message is created, the following variables are replaced with their respective value:
When the message content for an outbound message is created, the following variables are replaced with their respective values:
- ${itemName} : name of the item which triggered the sending
- ${state} : current state of the item (only for type 'state')
@ -132,9 +144,13 @@ Switch mySwitch {mqtt=">[mybroker:myhouse/office/light:command:ON:1],>[mybroker:
## Event Bus Binding Configuration
In addition to configuring MQTT publish/subscribe options for specific openHAB items, you can also define a generic configuration in the `services/mqtt-eventbus.cfg` file which will act on **ALL** status updates or commands on the openHAB event bus.
In addition to configuring MQTT publish/subscribe options for specific openHAB
items, you can also define a generic configuration in the `services/mqtt-eventbus.cfg`
file which will act on **ALL** status updates or commands on the openHAB event
bus.
The following properties can be used to configure MQTT for the openHAB event bus in the file `services/mqtt-eventbus.cfg`:
The following properties can be used to configure MQTT for the openHAB event
bus in the file `services/mqtt-eventbus.cfg`:
```
broker=<broker>
@ -144,7 +160,8 @@ stateSubscribeTopic=<stateSubscribeTopic>
commandSubscribeTopic=<commandSubscribeTopic>
```
The properties indicated by `<...>` need to be replaced with an actual value. The table below lists the meaning of the different properties.
The properties indicated by `<...>` need to be replaced with an actual value.
The table below lists the meaning of the different properties.
| Property | Description |
|----------|-------------|
@ -156,8 +173,12 @@ The properties indicated by `<...>` need to be replaced with an actual value. T
### Example Configurations
Example configuration for a event bus binding, which sends all commands to an MQTT broker and receives status updates from that broker.
This scenario could be used for example to link 2 openHAB instances together where the master instance sends all commands to the slave instance and the slave instance sends all status updates back to the master. The example below shows an example configuration for the master node.
Example configuration for an event bus binding, which sends all commands to an
MQTT broker and receives status updates from that broker. This scenario could
be used, for example, to link 2 openHAB instances together where the master
instance sends all commands to the slave instance and the slave instance sends
all status updates back to the master. The example below shows an example
configuration for the master node.
```
broker=m2m-eclipse
@ -167,12 +188,22 @@ stateSubscribeTopic=/openHAB/in/${item}/state
## Using the transport (org.openhab.io.transport.mqtt) bundle
When the default MQTT binding configuration options are not sufficient for your needs, you can also use the MQTT transport bundle directly from within your own binding.
When the default MQTT binding configuration options are not sufficient for
your needs, you can also use the MQTT transport bundle directly from within
your own binding.
## MqttService
Using the MqttService, your binding can add custom message consumers and publishers to any of the defined MQTT brokers. You don't have to worry about (re)connection issues, all of this is done by the transport.mqtt bundle. The MqttService class is available to your binding through Declarative Services. A good example on how to use the MqttService can be found in the persistence (org.openhab.persistence.mqtt) bundle.
Using the MqttService, your binding can add custom message consumers and
publishers to any of the defined MQTT brokers. You don't have to worry about
(re)connection issues; all of this is done by the transport.mqtt bundle. The
MqttService class is available to your binding through Declarative Services.
A good example on how to use the MqttService can be found in the org.openhab.persistence.mqtt
bundle.
## Eclipse Paho
If the above service doesn't provide all the flexibility you need, you can also use the Eclipse Paho library directly in your binding. To make the library available, it's sufficient to add a dependency to the org.openhab.io.transport.mqtt bundle and to add org.eclipse.paho.client.mqtttv3 to your list of imported packages.
If the above service doesn't provide all the flexibility you need, you can
also use the Eclipse Paho library directly in your binding. To make the
library available, it's sufficient to add a dependency to the org.openhab.io.transport.mqtt
bundle and to add org.eclipse.paho.client.mqtttv3 to your list of imported packages.

View File

@ -30,7 +30,7 @@ For this reason, the binding does not do an automatic background discovery, but
## Thing Configuration
```
network:device:devicename [ hostname="192.168.0.64", port="0", retry="1", timeout="5000", refresh_interval="60000", use_system_ping="false", dhcplisten="true" ]
network:device:devicename [ hostname="192.168.0.64", port=0, retry=1, timeout=5000, refresh_interval=60000, use_system_ping="false", dhcplisten="true" ]
```
- **hostname:** IP address or hostname of the device
@ -102,7 +102,7 @@ All devices support some of the following channels:
demo.Things:
```xtend
network:device:devicename [ hostname="192.168.0.42", port="0", retry="1", timeout="5000", refresh_interval="60000", use_system_ping="false", dhcplisten="true" ]
network:device:devicename [ hostname="192.168.0.42", port=0, retry=1, timeout=5000, refresh_interval=60000, use_system_ping="false", dhcplisten="true" ]
```
demo.items:

View File

@ -66,13 +66,13 @@ Apple provides build-in FTDI drivers for OS X, which need to be disabled to get
FTDI driver disabling can be done by the following command
```
sudo kextload -b com.apple.driver.AppleUSBFTDI
sudo kextunload -b com.apple.driver.AppleUSBFTDI
```
FTDI driver can be enabled by the following command
```
sudo kextunload -b com.apple.driver.AppleUSBFTDI
sudo kextload -b com.apple.driver.AppleUSBFTDI
```
If you have any problems with JD2XX or you don't want to disable FTDI driver on OS X, you can also configure RFXCOM transceivers/receivers manually.
@ -100,32 +100,69 @@ Bridge rfxcom:tcpbridge:sunflower [ host="sunflower", port=10001 ] {
}
```
## Protocol specific details
### Lighting 4
The support for lighting 4 in RFXCOM is less complete because a lot of different devices use the same chips and can not easily be distinguished.
So some extra configuration can be used for fine tuning the behavior of your Lighting4 devices. For configuration via the PaperUI three extra fields are available, being the the pulse length and a commmand id for on and off commands. If your item is auto-discovered normally the on or off command should be recognized properly.
For a usb attached RFXCOM on Windows the configuration could look like this (note that the `onCommandId`, `offCommandId` and `pulse` are all optional):
```
Bridge rfxcom:bridge:238adf67 [ serialPort="COM4" ] {
Thing lighting4 17745 [deviceId="17745", subType="PT2262", onCommandId=7, offCommandId=4, pulse=800]
Thing lighting4 motion [deviceId="286169", subType="PT2262", onCommandId=9, pulse=392]
}
```
Your items file could look like this:
```
Switch Switch {channel="rfxcom:lighting4:238adf67:17745:command"}
Number SwitchCommandId "Command ID [%d]" {channel="rfxcom:lighting4:238adf67:17745:commandId"}
```
And if you want random actions on your relay you could for example do like this:
```
rule "Set random relay variations"
when
System started or
Time cron "/20 * * * * ?"
then
SwitchCommandId.sendCommand((Math::random * 15.9).intValue)
end
```
## Channels
This binding currently supports following channels:
| Channel Type ID | Item Type | Description |
|-----------------|------------------------|--------------|
| batteryLevel | Number | Battery level. |
| command | Switch | Command channel. |
| contact | Contact | Contact channel. |
| dimmingLevel | Dimmer | Dimming level channel. |
| humidity | Number | Relative humidity level in percentages. |
| humidityStatus | String | Current humidity status. |
| instantamp | Number | Instant current in Amperes. |
| instantpower | Number | Instant power consumption in Watts. |
| status | String | Status channel. |
| setpoint | Number | Requested temperature. |
| mood | Number | Mood channel. |
| motion | Switch | Motion detection sensor state. |
| rainRate | Number | Rain fall rate in millimeters per hour. |
| rainTotal | Number | Total rain in millimeters. |
| rawMessage | String | Hexadecimal string of the raw RF message. |
| rawPayload | String | Hexadecimal string of the message payload, without header. |
| shutter | Rollershutter | Shutter channel. |
| signalLevel | Number | Received signal strength level. |
| temperature | Number | Current temperature in degree Celsius. |
| totalUsage | Number | Used energy in Watt hours. |
| totalAmpHour | Number | Used "energy" in ampere-hours. |
| windDirection | Number | Wind direction in degrees. |
| windSpeed | Number | Average wind speed in meters per second. |
| Channel Type ID | Item Type | Description |
|-----------------|---------------|------------------------------------------------------------|
| batteryLevel | Number | Battery level. |
| command | Switch | Command channel. |
| commandId | String | Id of the command. |
| contact | Contact | Contact channel. |
| dimmingLevel | Dimmer | Dimming level channel. |
| humidity | Number | Relative humidity level in percentages. |
| humidityStatus | String | Current humidity status. |
| instantamp | Number | Instant current in Amperes. |
| instantpower | Number | Instant power consumption in Watts. |
| status | String | Status channel. |
| setpoint | Number | Requested temperature. |
| mood | Number | Mood channel. |
| motion | Switch | Motion detection sensor state. |
| rainRate | Number | Rain fall rate in millimeters per hour. |
| rainTotal | Number | Total rain in millimeters. |
| rawMessage | String | Hexadecimal string of the raw RF message. |
| rawPayload | String | Hexadecimal string of the message payload, without header. |
| shutter | Rollershutter | Shutter channel. |
| signalLevel | Number | Received signal strength level. |
| temperature | Number | Current temperature in degree Celsius. |
| totalUsage | Number | Used energy in Watt hours. |
| totalAmpHour | Number | Used "energy" in ampere-hours. |
| windDirection | Number | Wind direction in degrees. |
| windSpeed | Number | Average wind speed in meters per second. |

View File

@ -3,7 +3,7 @@ id: russound
label: Russound
title: Russound - Bindings
type: binding
description: "This binding provides integration with any Russound system that support the RIO protocol (all MCA systems, all X systems). This binding provides compatibility with RIO Protocol v1.7 (everything but the Media Managment functionality). The protocol document can be found in the Russound Portal ('RIO Protocol for 3rd Party Integrators.pdf'). Please update to the latest firmware to provide full compatibility with this binding. This binding does provide full feedback from the Russound system if events occur outside of openHAB (such as keypad usage)."
description: "This binding provides integration with any Russound system that support the RIO protocol (all MCA systems, all X systems). This binding provides compatibility with RIO Protocol v1.10. The protocol document can be found in the Russound Portal ('RIO Protocol for 3rd Party Integrators.pdf'). Please update to the latest firmware to provide full compatibility with this binding. This binding does provide full feedback from the Russound system if events occur outside of openHAB (such as keypad usage)."
since: 2x
logo: images/addons/russound.png
install: auto
@ -15,20 +15,27 @@ install: auto
# Russound Binding
This binding provides integration with any Russound system that support the RIO protocol (all MCA systems, all X systems). This binding provides compatibility with RIO Protocol v1.7 (everything but the Media Managment functionality). The protocol document can be found in the Russound Portal ("RIO Protocol for 3rd Party Integrators.pdf"). Please update to the latest firmware to provide full compatibility with this binding. This binding does provide full feedback from the Russound system if events occur outside of openHAB (such as keypad usage).
This binding provides integration with any Russound system that support the RIO protocol (all MCA systems, all X systems). This binding provides compatibility with RIO Protocol v1.10. The protocol document can be found in the Russound Portal ("RIO Protocol for 3rd Party Integrators.pdf"). Please update to the latest firmware to provide full compatibility with this binding. This binding does provide full feedback from the Russound system if events occur outside of openHAB (such as keypad usage).
*Warning:* Russound becomes unstable if you have two IP based clients connected to the same system. Do NOT run multiple instances of this binding against the same system - this definitely causes unstability. Running this binding in addition to the MyRussound application seems to work fine however.
*Warning:* Try to avoid having multiple media management functions open in different clients (keypads, My Russound app, HABPanel, etc). Although it seems to work a majority of the times, there have been instances where the sessions become confused.
## Supported Bridges/Things
* Bridge: Russound System (usually the main controller)
* Bridge: Russound Controller (1-6 controllers supported)
* Bridge: Russound Source (1-12 sources supported)
* Bridge: Russound Bank (1-6 banks supported for any tuner source)
* Thing: Russound Bank Preset (1-6 presets supported for each bank)
* Thing: Russound System Favorite (1-32 favorites supported)
* Bridge: Russound Zone (1-6 zones supported for each controller)
* Thing: Russound Zone Favorite (1-2 zone favorites for each zone)
* Thing: Russound Zone Presets (1-36 presets for each zone [corresponds to banks 1-6, presets 1-6 for each bank])
* Thing: Russound Source (1-8 sources supported)
* Thing: Russound Zone (1-8 [depending on the controller] zones supported for each controller)
## Device Discovery
The Russound binding does support devices discovery via the paperUI. When you start device discovery, the system will scan all network interfaces and **all IP Addresses in the subnet on each interface** looking for a Russound system device. If found, the device will be added to the inbox. Adding the device will then start a scan of the device to discover all the controllers, sources, and zones attached defined on the device. As these are found, they will be added to the inbox.
## HABPANEL or other UI
All media management functions are supported to allow building of a dynamic UI for the various streaming sources. All media management channels begin with "mm". An example HABPanel implementation can be found in the HABPanel forum.
## Thing Configuration
The following configurations occur for each of the bridges/things:
@ -40,12 +47,7 @@ The following configurations occur for each of the bridges/things:
| ipAddress | string | IP Address or host name of the russound system (usually main controller) |
| ping | int | Interval, in seconds, to ping the system to keep connection alive |
| retryPolling | int | Interval, in seconds, to retry a failed connection attempt |
### Russound System Favorite
| Name | Type | Description |
|--------------|---------------|--------------------------------------------------------------------------|
| favorite | int | The favorite # (1-32) |
| scanDevice | boolean | Whether to scan device at startup and discover controllers/sources/zones |
### Russound Source
@ -53,18 +55,6 @@ The following configurations occur for each of the bridges/things:
|--------------|---------------|--------------------------------------------------------------------------|
| source | int | The source # (1-12) |
### Russound Bank
| Name | Type | Description |
|--------------|---------------|--------------------------------------------------------------------------|
| bank | int | The bank # (1-6) |
### Russound Bank Preset
| Name | Type | Description |
|--------------|---------------|--------------------------------------------------------------------------|
| preset | int | The preset # (1-6) |
### Russound Controller
| Name | Type | Description |
@ -77,18 +67,6 @@ The following configurations occur for each of the bridges/things:
|--------------|---------------|--------------------------------------------------------------------------|
| zone | int | The zone # (1-6) |
### Russound Zone Favorite
| Name | Type | Description |
|--------------|---------------|--------------------------------------------------------------------------|
| favorite | int | The zone favorite # (1-2) |
### Russound Zone Preset Commands
| Name | Type | Description |
|--------------|---------------|--------------------------------------------------------------------------|
| preset | int | The zone preset # (1-36 - corresponds to bank 1-6, preset 1-6) |
## Channels
@ -98,82 +76,83 @@ The following channels are supported for each bridge/thing
| Channel Type ID | Read/Write | Item Type | Description |
|--------------------|------------|--------------|--------------------------------------------------------------------- |
| version | R | String | The firmware version of the system |
| status | R | Switch | Whether any controller/zone is on (or if all are off) |
| language | RW | String | System language (english, chinese and russian are supported) |
| lang | RW | String | System language (english, chinese and russian are supported) |
| allon | RW | Switch | Turn on/off all zones |
| controller | R | String | JSON representation of all controllers in the system |
| sources | R | String | JSON representation of all sources in the system |
### Russound System Favorite
| Channel Type ID | Read/Write | Item Type | Description |
|--------------------|------------|--------------|--------------------------------------------------------------------- |
| name | R | String | The name of the system favorite (changed by zone favorites) |
| valid | R | Switch | If system favorite is valid or not (changed by zone favorites) |
#### Notes
1. The JSON will look like: `[{"id":1, "name":"XXX"},...]`. The controller channel will contain up to 6 controllers and the sources will contain up to 8 sources (depending on how the system is configured).
### Russound Source (please see source cross-reference below for what is supported by which sources)
| Channel Type ID | Read/Write | Item Type | Description |
|--------------------|------------|--------------|--------------------------------------------------------------------- |
| name | R | String | The name of the source |
| type | R | String | The type of source |
| ipaddress | R | String | The IP Address of the source |
| composername | R | String | The currently playing composer name |
| channel | R | String | The currently playing channel (usually tuner frequency) |
| channelname | R | String | The currently playing channel name |
| genre | R | String | The currently playing genre |
| artistname | R | String | The currently playing artist name |
| albumname | R | String | The currently playing album name |
| coverarturl | R | String | The currently playing URL to the cover art |
| coverart | R | Image | The currently playing cover art image |
| playlistname | R | String | The currently playing play list name |
| songname | R | String | The currently playing song name |
| mode | R | String | The provider mode or streaming service |
| shufflemode | R | String | The current shuffle mode |
| repeatmode | R | String | The current repeat mode |
| rating | R | String | The rating for the currently played song (can be changed via zone) |
| programservicename | R | String | The program service name (PSN) |
| radiotext | R | String | The radio text |
| radiotext2 | R | String | The radio text (line 2) |
| radiotext3 | R | String | The radio text (line 3) |
| radiotext4 | R | String | The radio text (line 4) |
| volume | R | String | The source's volume level (undocumented) |
| Channel Type ID | Read/Write | Item Type | Description |
|----------------------|------------|--------------|--------------------------------------------------------------------- |
| name | R | String | The name of the source |
| type | R | String | The type of source |
| channel | R | String | The currently playing channel (usually tuner frequency) |
| channelname | R | String | The currently playing channel name |
| composername | R | String | The currently playing composer name |
| genre | R | String | The currently playing genre |
| artistname | R | String | The currently playing artist name |
| albumname | R | String | The currently playing album name |
| coverarturl | R | String | The currently playing URL to the cover art |
| playlistname | R | String | The currently playing play list name |
| songname | R | String | The currently playing song name |
| rating | R | String | The rating for the currently played song (can be changed via zone) |
| mode | R | String | The provider mode or streaming service |
| shufflemode | R | String | The current shuffle mode |
| repeatmode | R | String | The current repeat mode |
| programservicename | R | String | The program service name (PSN) |
| radiotext | R | String | The radio text |
| radiotext2 | R | String | The radio text (line 2) |
| radiotext3 | R | String | The radio text (line 3) |
| radiotext4 | R | String | The radio text (line 4) |
| volume | R | String | The source's volume level (undocumented) |
| banks | RW | String | JSON representation of all banks in the system |
| mmscreen | R | String | The media management screen id |
| mmtitle | R | String | The media management screen title |
| mmmenu | R | String | The media management screen menu json |
| mmattr | R | String | The media management attribute |
| mmmenubuttonoktext | R | String | The media management OK button text |
| mmmenubuttonbacktext | R | String | The media management Cancel button text |
| mminfotext | R | String | The media management information text |
| mmhelptext | R | String | The media management help text |
| mmtextfield | R | String | The media management text field |
### Russound Bank
#### Notes
| Channel Type ID | Read/Write | Item Type | Description |
|--------------------|------------|--------------|--------------------------------------------------------------------- |
| name | R | String | The name of the bank (changed by SCS-C5 software) |
1. Banks are only supported tuner sources and the JSON array will have exactly 6 banks in it (with IDs from 1 to 6). For non-tuner sources, an empty JSON array (`[]`) will be returned. For tuner sources, the JSON will look like: `[{"id":1, "name":"XXX"},...]`. A bank's name can be updated by sending the representation back to the channel. Example: `[{"id":1,"name":"FM1"},{"id":3,"name":"FM3"}]` will set the name of bank #1 to "FM1 and bank#3 to "FM3" (leaving all other bank names the same). After an update, the banks channel will be refreshed with the full JSON representation of all banks. If the name has not been changed in the refreshed value, the russound rejected the name change for some reason (generally too long of a name or a duplicate name).
### Russound Preset
| Channel Type ID | Read/Write | Item Type | Description |
|--------------------|------------|--------------|--------------------------------------------------------------------- |
| name | R | String | The name of the Preset (changed by zone preset commands) |
| valid | R | Switch | If preset is valid or not (changed by zone preset commands) |
2. All media management channels are ONLY valid on streaming sources (not tuners). All channels will return a JSON representation like `{"id":xxx, "value":"yyy"}` where 'xxx' will be a sequential identifier of the message and 'yyy' will be the payload. The payload will be a simple string in all cases. However, the mmmenu string will be a raw JSON string representing the menu structure. Please review the media management section in the RIO protocol document from russound for the specifications.
### Russound Controller
| Channel Type ID | Read/Write | Item Type | Description |
|--------------------|------------|--------------|--------------------------------------------------------------------- |
| type | R | String | The model type of the controller (i.e. "MCA-C5") |
| ipaddress | R | String | The IPAddress of the controller (only if it's the main controller) |
| macaddress | R | String | The MAC Address of the controller (only if it's the main controller) |
| Channel Type ID | Read/Write | Item Type | Description |
|-----------------|------------|--------------|--------------------------------------------------------------------- |
| zones | R | String | The JSON representation of all zones in the controller |
#### Notes
* The JSON will look like: `[{"id":1, "name":"XXX"},...]`
### Russound Zone
| Channel Type ID | Read/Write | Item Type | Description |
|--------------------|------------|--------------|--------------------------------------------------------------------- |
| status | RW | Switch | Whether the zone is on or off |
| name | R | String | The name of the zone (changed by SCS-C5 software) |
| source | RW | Number | The (physical) number for the current source |
| volume | RW | Number | The current volume of the zone (0 to 50) |
| mute | RW | Switch | Whether the zone is muted or not |
| bass | RW | Number | The bass setting (-10 to 10) |
| treble | RW | Number | The treble setting (-10 to 10) |
| balance | RW | Number | The balance setting (-10 [full left] to 10 [full right]) |
| loudness | RW | Switch | Set's the loudness on/off |
| turnonvolume | RW | Number | The initial volume when turned on (0 to 50) |
| turnonvolume | RW | Dimmer | The initial volume when turned on (0 to 100) |
| donotdisturb | RW | String | The do not disturb setting (on/off/slave) |
| partymode | RW | String | The party mode (on/off/master) |
| status | RW | Switch | Whether the zone is on or off |
| volume | RW | Dimmer | The current volume of the zone (0 to 100) |
| mute | RW | Switch | Whether the zone is muted or not |
| page | R | Switch | Whether the zone is in paging mode or not |
| sharedsource | R | Switch | Whether the zone's source is being shared or not |
| sleeptimeremaining | RW | Number | Sleep time, in minutes, remaining (0 to 60 in 5 step increments) |
@ -187,47 +166,57 @@ The following channels are supported for each bridge/thing
| keyhold | W | String | (Advanced) Send a keyhold from the zone |
| keycode | W | String | (Advanced) Send a keycode from the zone |
| event | W | String | (Advanced) Send an event from the zone |
| systemfavorites | RW | String* | The JSON representation for system favorites |
| zonefavorites | RW | String** | The JSON representation for zone favorites |
| presets | RW | String*** | The JSON representation for zone presets |
| mminit | W | Switch**** | Whether to initial a media management session (ON) or close an existing one (OFF) |
| mmcontextmenu | W | Switch**** | Whether to initial a media management context session (ON) or close an existing one (OFF) |
* As of the time of this document, rating ON (like) produced an error in the firmware from the related command. This has been reported to Russound.
* keypress/keyrelease/keyhold/keycode/event are advanced commands that will pass the related event string to Russound (i.e. "EVENT C[x].Z[y]!KeyPress [stringtype]"). Please see the "RIO Protocol for 3rd Party Integrators.pdf" (found at the Russound Portal) for proper string forms.
* If you send a OnOffType to the volume will have the same affect as turning the zone on/off (ie sending OnOffType to "status")
* The volume PercentType will be scaled to Russound's volume of 0-50 (ie 50% = volume of 25, 100% = volume of 50)
#### Notes:
1. As of the time of this document, rating ON (like) produced an error in the firmware from the related command. This has been reported to Russound.
2. keypress/keyrelease/keyhold/keycode/event are advanced commands that will pass the related event string to Russound (i.e. "EVENT C[x].Z[y]!KeyPress [stringtype]"). Please see the "RIO Protocol for 3rd Party Integrators.pdf" (found at the Russound Portal) for proper string forms.
3. If you send a OnOffType to the volume will have the same affect as turning the zone on/off (ie sending OnOffType to "status")
4. The volume PercentType will be scaled to Russound's volume of 0-50 (ie 50% = volume of 25, 100% = volume of 50)
5. Initialize a media management session by sending ON to the channel. The related source thing will then start sending out media management information in the MM channels. To close the session - simply send OFF to the channel. Sending OFF to the channel when a session has not been initialized does nothing. Likewise if the related source is a tuner, this command does nothing.
### Russound Zone Favorite
##### System Favorites
| Channel Type ID | Read/Write | Item Type | Description |
|--------------------|------------|--------------|----------------------------------------------------------------------------- |
| name | RW | String | The name of the zone favorite (only saved when the 'savexxx' cmd is issued) |
| valid | R | Switch | If favorite is valid or not ('on' when favorite is saved, 'off' when deleted |
| cmd | W | String | The favorite command (see note below) |
The JSON will look like `[{"id":xxx,"valid":true,"name":"yyyy"},...]` and will have a representation for each VALID favorite on the system (ie where "valid" is true). You will have up to 32 system favorites in the JSON array (the ID field will be between 1 and 32). System favorites will be the same on ALL zones (because they are system level). This channel appears on the zone because when you send a system favorite representation to zone channel, it sets the system favorite to what is playing in the zone.
The favorite command channel ("cmd") supports the following
There are three different ways to use this channel:
| Command Text | Description |
|--------------|-----------------------------------------------------|
| savesys | Save the associated zone as the a system favorite |
| restoresys | Restores the system favorite to the associated zone |
| deletesys | Deletes the system favorite |
| savezone | Save the associated zone as the a zone favorite |
| restorezone | Restores the zone favorite to the associated zone |
| deletezone | Deletes the zone favorite |
1. Save a system favorite. Send a representation with "valid" set to true. Example: to set system favorite 3 to what is playing in the zone: `[{"id":3,"valid":true,"name":"80s Rock"}]`. If system favorite 3 was invalid, this would save what is currently playing and make it valid. If system favorite 3 was already valid, this would overlay the favorite with what is currently playing and change it's name.
2. Update the name of a system favorite. Send a representation of an existing ID with "valid" set to true and the new name. Example: we could update system favorite 3 (after the above statement) by sending: `[{"id":3,"valid":true,"name":"80s Rock Even More"}]`. Note this will ONLY change the name (this will NOT save what is currently playing to the system favorite).
3. Delete a system favorite. Send a representation with "valid" as false. Example: deleting system favorite 3 (after the above statements) by sending: `[{"id":3","valid":false"}]`
### Russound Zone Preset Commands
The channel will be refreshed with the new representation after processing. If the refreshed representation doesn't include the changes, the russound system rejected them for some reason (generally length of the name).
| Channel Type ID | Read/Write | Item Type | Description |
|--------------------|------------|--------------|-----------------------------------------------------------------------------------------|
| name | RW | String | The name of the preset (only saved when the 'save' preset cmd is issued) |
| valid | R | Switch | If favorite is valid or not ('on' when a preset is saved, 'off' when preset is deleted) |
| cmd | W | String | The preset command (see note below) |
##### Zone Favorites
The preset command channel ("cmd") supports the following
The JSON will look like `[{"id":xxx,"valid":true,"name":"yyyy"},...]` and will have a representation for each VALID favorite in the zone (ie where "valid" is true). You will have up to 2 zone favorites in the JSON array (the ID field will be between 1 and 2).
| Command Text | Description |
|--------------|--------------------------------------------|
| save | Save the associated zone as the preset |
| restore | Restores the preset to the associated zone |
| delete | Deletes the preset |
There are two different ways to use this channel:
1. Save a zone favorite. Send a representation with "valid" set to true. Example: to set zone favorite 2 to what is playing in the zone: `[{"id":2,"valid":true,"name":"80s Rock"}]`.
2. Delete a zone favorite. Send a representation with "valid" as false. Example: deleting zone favorite 2 (after the above statement) by sending: `[{"id":2","valid":false"}] `
There is no ability to change JUST the name. Sending a new name will save the new name AND set the favorite to what is currently playing.
The channel will be refreshed with the new representation after processing. If the refreshed representation doesn't include the changes, the russound system rejected them for some reason (generally length of the name).
##### Zone Presets
The JSON will look like `[{"id":xxx,"valid":true,"name":"yyyy", "bank": xxx, "bankPreset":yyyy},...]` and will have a representation for each VALID preset in the zone (ie where "valid" is true). Please note that this channel is only valid if the related source is a tuner. If not a tuner, an empty json array will be returned. You will have up to 36 presets to choose from (ID from 1 to 36). The "bank" and "bankPreset" are readonly (will be ignored if sent) and are informational only (i.e. specify the bank and the preset within the bank for convenience).
There are two different ways to use this channel:
1. Save a preset. Send a representation to an ID that is invalid with "valid" set to true. Example: to set a zone pret 2 to what is playing in the zone: `[{"id":2,"valid":true,"name":"103.7 FM"}]`.
2. Save a preset with default name. Send a representation to an ID that is invalid with "valid" set to true. Example: to set a zone pret 2 to what is playing in the zone: `[{"id":2,"valid":true,"name":"103.7 FM"}]`.
2. Delete a zone favorite. Send a representation with "valid" as false. Example: deleting zone favorite 2 (after the above statement) by sending: `[{"id":2","valid":false"}]`
There is no ability to change JUST the name. Sending a new name will save the new name AND set the favorite to what is currently playing.
The channel will be refreshed with the new representation after processing. If the refreshed representation doesn't include the changes, the russound system rejected them for some reason (generally length of the name).
### Source channel support cross reference
@ -262,49 +251,28 @@ The preset command channel ("cmd") supports the following
The following is an example of
1. Main controller (#1) at ipaddress 192.168.1.24
2. Two Sources connected to it (#1 is the internal AM/FM and #2 is a DMS 3.1)
3. Two System favorites (#1 FM 102.9, #2 Pandora on DMS)
4. One bank (called "FM-1")
5. Two presets within the bank (#1 FM 100.7, #2 FM 105.1)
6. Four zones on the controller (1-4 in various rooms)
7. Zone 1 has two favorites (#1 Spotify on DMS, #2 Airplay on DMS)
8. Zone 2 has two presets (#1 corresponds to bank 1/preset 1 [102.9], #2 corresponds to bank1/preset 2 [Pandora])
2. One Sources connected to it (#1 is the internal AM/FM)
3. Four zones on the controller (1-4 in various rooms)
.things
```
russound:rio:home [ ipAddress="192.168.1.24", ping=30, retryPolling=10 ]
russound:sysfavorite:1 (russound:rio:home) [ favorite=1 ]
russound:sysfavorite:2 (russound:rio:home) [ favorite=2 ]
russound:controller:1 (russound:rio:home) [ controller=1 ]
russound:source:1 (russound:rio:home) [ source=1 ]
russound:source:2 (russound:rio:home) [ source=2 ]
russound:bank:1 (russound:source:1) [ bank=1 ]
russound:bankpreset:1 (russound:bank:1) [ preset=1 ]
russound:bankpreset:2 (russound:bank:1) [ preset=2 ]
russound:zone:1 (russound:controller:1) [ zone=1 ]
russound:zone:2 (russound:controller:1) [ zone=2 ]
russound:zone:3 (russound:controller:1) [ zone=3 ]
russound:zone:4 (russound:controller:1) [ zone=4 ]
russound:zonefavorite:1 (russound:zone:1) [ favorite=1 ]
russound:zonefavorite:2 (russound:zone:1) [ favorite=2 ]
russound:zonepreset:1 (russound:zone:2) [ preset=1 ]
russound:zonepreset:2 (russound:zone:2) [ preset=2 ]
```
This is an example of all the items that can be included (regardless of the above setup)
.items
```
String Rio_Version "Version [%s]" { channel="russound:rio:home:version" }
String Rio_Lang "Language [%s]" { channel="russound:rio:home:lang" }
Switch Rio_Status "Status [%s]" { channel="russound:rio:home:status" }
Switch Rio_AllOn "All Zones" { channel="russound:rio:home:allon" }
String Rio_Ctl_Type "Model [%s]" { channel="russound:controller:1:type" }
String Rio_Ctl_IPAddress "IP Address [%s]" { channel="russound:controller:1:ipaddress" }
String Rio_Ctl_MacAddress "MAC [%s]" { channel="russound:controller:1:macaddress" }
String Rio_Zone_Name "Name [%s]" { channel="russound:zone:1:name" }
Switch Rio_Zone_Status "Status" { channel="russound:zone:1:status" }
Number Rio_Zone_Source "Source [%s]" { channel="russound:zone:1:source" }
@ -328,7 +296,6 @@ Switch Rio_Zone_Rating "Rating" { channel="russound:zone:1:rating", autoupdate="
String Rio_Src_Name "Name [%s]" { channel="russound:source:1:name" }
String Rio_Src_Type "Type [%s]" { channel="russound:source:1:type" }
String Rio_Src_IP "IPAddress [%s]" { channel="russound:source:1:ipaddress" }
String Rio_Src_Composer "Composer [%s]" { channel="russound:source:1:composername" }
String Rio_Src_Channel "Channel [%s]" { channel="russound:source:1:channel" }
String Rio_Src_ChannelName "Channel Name [%s]" { channel="russound:source:1:channelname" }
@ -348,27 +315,7 @@ String Rio_Src_RadioText2 "Radio Text #2 [%s]" { channel="russound:source:1:radi
String Rio_Src_RadioText3 "Radio Text #3 [%s]" { channel="russound:source:1:radiotext3" }
String Rio_Src_RadioText4 "Radio Text #4 [%s]" { channel="russound:source:1:radiotext4" }
String Rio_Sys_Favorite_Name "Name1 [%s]" { channel="russound:sysfavorite:1:name" }
Switch Rio_Sys_Favorite_Valid "Valid1 [%s]" { channel="russound:sysfavorite:1:valid" }
String Rio_Sys_Favorite_Name2 "Name2 [%s]" { channel="russound:sysfavorite:2:name" }
Switch Rio_Sys_Favorite_Valid2 "Valid2 [%s]" { channel="russound:sysfavorite:2:valid" }
String Rio_Zone_Favorite_Name "Name [%s]" { channel="russound:zonefavorite:1:name" }
Switch Rio_Zone_Favorite_Valid "Valid [%s]" { channel="russound:zonefavorite:1:valid", autoupdate="false" }
String Rio_Zone_Favorite_Cmd "Command" { channel="russound:zonefavorite:1:cmd" }
String Rio_Zone_Favorite_Name2 "Name2 [%s]" { channel="russound:zonefavorite:2:name" }
Switch Rio_Zone_Favorite_Valid2 "Valid2 [%s]" { channel="russound:zonefavorite:2:valid", autoupdate="false" }
String Rio_Zone_Favorite_Cmd2 "Command2" { channel="russound:zonefavorite:2:cmd" }
String Rio_Src_Bank_Name "Name [%s]" { channel="russound:bank:1:name" }
String Rio_Bank_Preset_Name "Name [%s]" { channel="russound:bankpreset:1:name" }
Switch Rio_Bank_Preset_Valid "Valid [%s]" { channel="russound:bankpreset:1:valid" }
String Rio_Bank_Preset_Name2 "Name2 [%s]" { channel="russound:bankpreset:2:name" }
Switch Rio_Bank_Preset_Valid2 "Valid2 [%s]" { channel="russound:bankpreset:2:valid" }
String Rio_Zone_Preset_Cmd "Command" { channel="russound:zonepreset:1:cmd" }
String Rio_Zone_Preset_Cmd2 "Command2" { channel="russound:zonepreset:2:cmd" }
```
.sitemap
@ -376,38 +323,16 @@ String Rio_Zone_Preset_Cmd2 "Command2" { channel="russound:zonepreset:2:cmd" }
```
Frame label="Russound" {
Text label="System" {
Text item=Rio_Version
Text item=Rio_Status
Selection item=Rio_Lang mappings=[ENGLISH="English", RUSSIAN="Russian", CHINESE="Chinese"]
Switch item=Rio_AllOn
Text label="Favorites" {
Text item=Rio_Sys_Favorite_Name
Text item=Rio_Sys_Favorite_Valid
Text item=Rio_Sys_Favorite_Name2
Text item=Rio_Sys_Favorite_Valid2
}
}
Text label="Source 1" {
Text label="Bank 1" {
Text item=Rio_Src_Bank_Name
Text label="Presets" {
Text item=Rio_Bank_Preset_Name
Text item=Rio_Bank_Preset_Valid
Text item=Rio_Bank_Preset_Name2
Text item=Rio_Bank_Preset_Valid2
}
}
}
Text label="Controller 1" {
Text item=Rio_Ctl_Type
Text item=Rio_Ctl_IPAddress
Text item=Rio_Ctl_MacAddress
Text label="Zone 1" {
Text item=Rio_Zone_Name
Switch item=Rio_Zone_Status
Selection item=Rio_Zone_Source mappings=[1="Room1", 2="Room2", 3="Room3", 4="Room4"]
Selection item=Rio_Zone_Source mappings=[1="AM/FM", 2="Stream #1", 3="Stream #2", 4="Stream #3"]
Setpoint item=Rio_Zone_Bass
Setpoint item=Rio_Zone_Treble
Setpoint item=Rio_Zone_Balance
@ -437,7 +362,6 @@ Frame label="Russound" {
Text item= Rio_Src_ArtistName
Text item= Rio_Src_AlbumName
Text item= Rio_Src_Cover
Image item= Rio_Src_Cover
Text item= Rio_Src_PlaylistName
Text item= Rio_Src_SongName
Text item= Rio_Src_Mode
@ -449,21 +373,7 @@ Frame label="Russound" {
Text item= Rio_Src_RadioText2
Text item= Rio_Src_RadioText3
Text item= Rio_Src_RadioText4
}
Text label="Favorite" {
Text item=Rio_Zone_Favorite_Name
Text item=Rio_Zone_Favorite_Valid
Selection item=Rio_Zone_Favorite_Cmd mappings=[savezone="Save Zone", restorezone="Restore Zone", deletezone="Delete Zone", savesys="Save System", restoresys="Restore System", deletesys="Delete System"]
Text item=Rio_Zone_Favorite_Name2
Text item=Rio_Zone_Favorite_Valid2
Selection item=Rio_Zone_Favorite_Cmd2 mappings=[savezone="Save Zone", restorezone="Restore Zone", deletezone="Delete Zone", savesys="Save System", restoresys="Restore System", deletesys="Delete System"]
}
Text label="Preset" {
Selection item=Rio_Zone_Preset_Cmd mappings=[save="Save", restore="Restore", delete="Delete"]
Selection item=Rio_Zone_Preset_Cmd2 mappings=[save="Save", restore="Restore", delete="Delete"]
}
}
}
}
}

View File

@ -63,6 +63,8 @@ Number items can be used only if `<object_number>` is not given, and the number
| doors | defines doors |
| status | defines a status item |
| module | defines connection status item |
| trouble | defines a trouble |
| trouble_memory | defines memory of a trouble |
### Valid state_type values for "zone" objects
@ -111,7 +113,7 @@ Number items can be used only if `<object_number>` is not given, and the number
| Type | Notes |
|-------------|-------|
| opened | ON command opens the doors. |
| opened | ON command opens the door. |
| opened_long | |
@ -137,6 +139,118 @@ Number items can be used only if `<object_number>` is not given, and the number
| connection_errors | number of consecutive connection errors; clears on successful connection |
### Valid `state_type` values for "trouble" objects
| Type | Notes |
|------|-------|
| technical_zone | object number range: 1-128 |
| expander_ac | object number range: 1-64 |
| expander_batt | object number range: 1-64 |
| expander_nobatt | object number range: 1-64 |
| system | object number range: 1-24, see table below |
| ptsa_ac | AC trouble of CA-64 PTSA modules, object number range: 1-8 |
| ptsa_batt | BATT trouble of CA-64 PTSA modules, object number range: 1-8 |
| ptsa_nobatt | NO BATT trouble of CA-64 PTSA modules, object number range: 1-8 |
| ethm1 | object number range: 1-8 |
| proximity_a | object number range: 1-64 |
| proximity_b | object number range: 1-64 |
| expander_overload | object number range: 1-64 |
| jammed_acu100 | object number range: 1-16 |
| device_lobatt | object number range: 1-120 |
| device_nocomm | object number range: 1-120 |
| output_nocomm | object number range: 1-120 |
| expander_nocomm | object number range: 1-64 |
| expander_switcherooed | object number range: 1-64 |
| keypad_nocomm | object number range: 1-8 |
| keypad_switcherooed | object number range: 1-8 |
| ethm1_nolan | object number range: 1-8 |
| expander_tamper | object number range: 1-64 |
| keypad_tamper | object number range: 1-8 |
| keypad_init | object number range: 1-8 |
| auxiliary_stm | object number range: 1-8 |
| master_keyfob | object number range: 1-8 |
| user_keyfob | object number range: 1-240 |
| device_lobatt1 | for Integra 256 Plus - last 120 devices, object number range: 1-120 |
| device_nocomm1 | for Integra 256 Plus - last 120 devices, object number range: 1-120 |
| output_nocomm1 | for Integra 256 Plus - last 120 devices, object number range: 1-120 |
| technical_zone1 | for Integra 256 Plus - zones 129..256, object number range: 1-128 |
### Valid `state_type` values for "trouble_memory" objects
| Type | Notes |
|------|-------|
| technical_zone | object number range: 1-128 |
| expander_ac | object number range: 1-64 |
| expander_batt | object number range: 1-64 |
| expander_nobatt | object number range: 1-64 |
| system | object number range: 1-24, see table below |
| ptsa_ac | AC trouble of CA-64 PTSA modules, object number range: 1-8 |
| ptsa_batt | BATT trouble of CA-64 PTSA modules, object number range: 1-8 |
| ptsa_nobatt | NO BATT trouble of CA-64 PTSA modules, object number range: 1-8 |
| ethm1 | object number range: 1-8 |
| proximity_a | object number range: 1-64 |
| proximity_b | object number range: 1-64 |
| expander_overload | object number range: 1-64 |
| jammed_acu100 | object number range: 1-16 |
| lcd_restart | object number range: 1-8 |
| expander_restart | object number range: 1-64 |
| device_lobatt | object number range: 1-120 |
| device_nocomm | object number range: 1-120 |
| output_nocomm | object number range: 1-120 |
| expander_nocomm | object number range: 1-64 |
| expander_switcherooed | object number range: 1-64 |
| keypad_nocomm | object number range: 1-8 |
| keypad_switcherooed | object number range: 1-8 |
| ethm1_nolan | object number range: 1-8 |
| expander_tamper | object number range: 1-64 |
| keypad_tamper | object number range: 1-8 |
| keypad_init | object number range: 1-8 |
| auxiliary_stm | object number range: 1-8 |
| long_violation | object number range: 1-128 |
| no_violation | object number range: 1-128 |
| zone_tamper | object number range: 1-128 |
| technical_zone1 | for Integra 256 Plus - zones 129..256, object number range: 1-128 |
| user_keyfob | object number range: 1-240 |
| device_lobatt1 | for Integra 256 Plus - last 120 devices, object number range: 1-120 |
| device_nocomm1 | for Integra 256 Plus - last 120 devices, object number range: 1-120 |
| output_nocomm1 | for Integra 256 Plus - last 120 devices, object number range: 1-120 |
| long_violation1 | for Integra 256 Plus - zones 129..256, object number range: 1-128 |
| no_violation1 | for Integra 256 Plus - zones 129..256, object number range: 1-128 |
| zone_tamper1 | for Integra 256 Plus - zones 129..256, object number range: 1-128 |
### System troubles
| Number | Description |
|------|-------------|
| 1 | OUT1 trouble |
| 2 | OUT2 trouble |
| 3 | OUT3 trouble |
| 4 | OUT4 trouble |
| 5 | +KPD trouble |
| 6 | +EX1 or +EX2 trouble |
| 7 | BATT trouble |
| 8 | AC trouble |
| 9 | DT1 trouble |
| 10 | DT2 trouble |
| 11 | DTM trouble |
| 12 | RTC trouble |
| 13 | no DTR signal |
| 14 | no BATT present |
| 15 | external modem initialization trouble |
| 16 | external model command (ATE0V1Q0H0S0=0) trouble |
| 17 | no voltage on telephone line (INTEGRA 24, 32, 64 and 128) |
| 17 | auxiliary ST processor trouble (INTEGRA 128-WRL) |
| 18 | bad signal on telephone line |
| 19 | no signal on telephone line |
| 20 | monitoring to station 1 trouble |
| 21 | monitoring to station 2 trouble |
| 22 | EEPROM or access to RTC trouble |
| 23 | RAM memory trouble |
| 24 | INTEGRA main panel restart memory |
### Valid options
| Name | Description |
@ -415,7 +529,7 @@ To control Integra partitions and outputs, you need to provide security code of
### Disarming and clearing alarms
Although this binding allows you to configure disarming a partition and clearing alarms for a partion, this should be used only in cases when security is not the priority. Don't forget both these operations can be executed in openHAB without specifying a user code, which is required to disarm or clear alarms using Integra panel. Consider adding a keypad in your sitemap to temporarily change user code to execute sensitive operations. You can find such keypad in the [examples](#examples) section.
Although this binding allows you to configure disarming a partition and clearing alarms for a partition, this should be used only in cases when security is not the priority. Don't forget both these operations can be executed in openHAB without specifying a user code, which is required to disarm or clear alarms using Integra panel. Consider adding a keypad in your sitemap to temporarily change user code to execute sensitive operations. You can find such keypad in the [examples](#examples) section.
## Media
@ -423,4 +537,4 @@ Although this binding allows you to configure disarming a partition and clearing
## Future
* troubles support (detailed)
* OH2 version

View File

@ -0,0 +1,120 @@
---
id: sensebox
label: senseBox
title: senseBox - Bindings
type: binding
description: "The senseBox binding integrates environment data from the [senseBox](https://sensebox.de/)"
since: 2x
logo: images/addons/sensebox.png
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# senseBox Binding
The senseBox binding integrates environment data from the [senseBox](https://sensebox.de/)
Citizen Science Toolkit.
## Prerequisites
The API server uses Letsencrypt certificates. Therefore, one needs to either import the Letsencrypt
root certificates into the local keystore (see the description in the
[netatmo addon](http://docs.openhab.org/addons/bindings/netatmo/readme.html)).
Another way would be to simply update the JDK to at least JDK 1.8.0_111
## Supported Things
This binding supports a generic "senseBox" API endpoint which is a representation of the physical box.
## Discovery
This binding provides no discovery. The desired senseBox must be configured manually or via a things file.
## Binding configuration
The binding has no configuration options itself, all configuration is done at 'Things' level.
## Thing configuration
The senseBox thing requires the box Id (which can be obtained on the map) and an interval in seconds
for the API polling. The senseBox support team wrote in an email that polling even every five minutes
is still o.k., therefore the minimum is hardcoded to be 300 seconds.
```
Thing sensebox:box:home [ senseBoxId = "foothesmurfingbar", refreshInterval = 600 ]
```
## Channels
In the table is shown more detailed information about each Channel type.
The binding introduces the following channels:
| Channel ID | Channel Description | Supported item type | Advanced |
|-------------------------------------------------|--------------------------------------------------------------|---------------------|----------|
| descriptors#location | Location of the box | Point | False |
| measurements#uvIntensity | Intensity of Ultraviolet radiation | Number | False |
| measurements#luminance | Illuminance | Number | False |
| measurements#pressure | Air pressure | Number | False |
| measurements#humidity | Humidity | Number | False |
| measurements#temperature | Temperature | Number | False |
| measurements#particulateMatter2dot5 | Particulate Matter 2.5 µm in diameter | Number | False |
| measurements#particulateMatter10 | Temperature Matter 10 µm in diameter | Number | False |
| lastReported#uvIntensityLastReported | The timestamp when uv radiation intensity was last reported | DateTime | True |
| lastReported#luminanceLastReported | The timestamp when illuminance was last reported | DateTime | True |
| lastReported#pressureLastReported | The timestamp when pressure was last reported | DateTime | True |
| lastReported#humidityLastReported | The timestamp when humidity was last reported | DateTime | True |
| lastReported#temperatureLastReported | The timestamp when temperature was last reported | DateTime | True |
| lastReported#particulateMatter2dot5LastReported | The timestamp when particulate matter 2.5 was last reported | DateTime | True |
| lastReported#particulateMatter10LastReported | The timestamp when particulate matter 10 was last reported | DateTime | True |
The channels starting with "descriptors" are defined on the API server.
## Full example
sensebox.things:
```
Thing sensebox:box:zugspitze [ senseBoxId = "578cf2ccccff9d1000bd9198", refreshInterval = 900 ]
```
sensebox.items:
```
Location Zugspitze_Location (Zugspitze) { channel="sensebox:box:zugspitze:descriptors#location" }
Number Zugspitze_Humidity "Zugspitze Humidity [%.1f %%]" <humidity> (Zugspitze, Weather) { channel="sensebox:box:zugspitze:measurements#humidity" }
Number Zugspitze_Luminance "Zugspitze Light Level [%.1f lx]" <light> (Zugspitze, Weather) { channel="sensebox:box:zugspitze:measurements#luminance" }
Number Zugspitze_Pressure "Zugspitze Pressure [%.1f hPa]" <pressure> (Zugspitze, Weather) { channel="sensebox:box:zugspitze:measurements#pressure" }
Number Zugspitze_Temperature "Zugspitze Temperature [%.1f °C]" <temperature> (Zugspitze, Weather) { channel="sensebox:box:zugspitze:measurements#temperature" }
Number Zugspitze_UVIntensity "Zugspitze UvIntensity [%.1f μW/cm²]" <light> (Zugspitze, Weather) { channel="sensebox:box:zugspitze:measurements#uvIntensity" }
Number Zugspitze_PM2dot5 "Zugspitze PM2.5 [%.1f µg/m³]" (Zugspitze, Weather) { channel="sensebox:box:zugspitze:measurements#particulateMatter2dot5" }
Number Zugspitze_PM10 "Zugspitze PM10 [%.1f µg/m³]" (Zugspitze, Weather) { channel="sensebox:box:zugspitze:measurements#particulateMatter10" }
```
sensebox.sitemap:
```
sitemap sensebox label="SenseBox Zugspitze" {
Text item=Zugspitze_Temperature
Text item=Zugspitze_Pressure
Text item=Zugspitze_Humidity
Text item=Zugspitze_Luminance
Text item=Zugspitze_UVIntensity
Text item=Zugspitze_PM2dot5
Text item=Zugspitze_PM10
Mapview item=Zugspitze_Location height=10
}
```
## senseBox API
* https://docs.opensensemap.org/
* https://docs.opensensemap.org/#api-Boxes-findBox
* https://docs.opensensemap.org/#api-Measurements-getMeasurements
* https://api.opensensemap.org/boxes/:boxId
* https://api.opensensemap.org/boxes/:senseBoxId/sensors

View File

@ -64,20 +64,24 @@ This binding does not have a configuration.
## Item Configuration
The format has three variations:
The format has the following variations:
```
serial="<port>@<baudrate>"
serial="<port>@<baudrate>,REGEX(<regular expression>)"
serial="<port>@<baudrate>,BASE64
serial="<port>@<baudrate>,ON(<On string>),OFF(<Off string>)"
serial="<port>@<baudrate>,REGEX(<regular expression>), UP(<Up string>),DOWN(<Down string>), STOP(<Stop string>)"
```
where:
* `<port>` is the identification of the serial port on the host system, e.g. `COM1` on Windows, `/dev/ttyS0` on Linux or `/dev/tty.PL2303-0000103D` on Mac. The same `<port>` can be bound to multiple items.
* `<baudrate>` is the baud rate of the port. Backward compatibility is given; if no baud rate is specified the serial binding defaults to 9600 baud.
* `REGEX(<regular expression>)` allows parsing for special strings or numbers in the serial stream. This is based on the [RegEx Service](https://github.com/openhab/openhab1-addons/wiki/Transformations#regex-transformation-service). This is optional.
* `REGEX(<regular expression>)` allows parsing for special strings or numbers in the serial stream. You can use a capture group (e.g. REGEX(Position:([0-9.]*)) to capture 12 in "Position:12" or substitution (e.g. REGEX(s/Position:100/ON/) or REGEX(s/Position:100/ON/g)) to replace (FIRST or ALL) "Position:100" strings in response with "ON". This is based on the [RegEx Service](https://github.com/openhab/openhab1-addons/wiki/Transformations#regex-transformation-service) and [ESH RegExTransformationService](https://github.com/eclipse/smarthome/tree/master/extensions/transform/org.eclipse.smarthome.transform.regex). This is optional.
* `BASE64` enables the Base64 mode. With this mode all data received on the serial port is saved in Base64 format. In this mode also all data that is sent to the serial port has to be Base64 encoded. (This was implemented because some serial devices are using bytes that are not supported by the REST interface).
* `ON(<On string>),OFF(<Off string>)` if used in conjunction with a Switch this mapping will send specific commands to serial port and also match a serial command to specific ON/OFF state. This way you don't have to use a rule to send a command to serial
* `UP(<Up string>),DOWN(<Down string>),STOP(<Stop string>)` if used in conjunction with a Rollershutter this mapping will send specific commands to serial port. Use REGEX to parse Rollershutter postion (0-100%) comming as feedback over serial link
Base64 can be decoded in the rules by importing `javax.xml.bind.DatatypeConverter` and then decoding the value like this:
@ -90,7 +94,10 @@ For encoding use the `printBase64Binary` method of the `DatatypeConverter`. This
As a result, your lines in the items file might look like these:
```
Switch HardwareButton "Bell" (Entrance) { serial="/dev/ttyS0" }
String AVR "Surround System" (Multimedia) { serial="/dev/ttyS1@115200" }
Number Temperature "My Temp. Sensor" (Weather) { serial="/dev/ttyS1@115200,REGEX(ID:2.*,T:([0-9.]*))" }
Switch HardwareButton "Bell" (Entrance) { serial="/dev/ttyS0" }
String AVR "Surround System" (Multimedia) { serial="/dev/ttyS1@115200" }
Number Temperature "My Temp. Sensor" (Weather) { serial="/dev/ttyS1@115200,REGEX(ID:2.*,T:([0-9.]*))" }
Switch SerialRelay "Relay Q1" (Entrance) { serial="/dev/ttyS0,ON(Q1_ON\n),OFF(Q1_OFF\n)" }
Rollershutter SerialRollo "Entrance Rollo" (Entrance) { serial="/dev/ttyS0,REGEX(Position:([0-9.]*)),UP(Rollo_UP\n),DOWN(Rollo_Down\n),STOP(Rollo_Stop\n)" }
Switch RoloAt100 "Rolo at 100" (Entrance) { serial="/dev/ttyS0,REGEX(s/Position:100/ON/)" }
```

View File

@ -0,0 +1,71 @@
---
id: synopanalyzer
label: Synop Analyzer
title: Synop Analyzer - Bindings
type: binding
description: "This binding integrates the possibility to download and interpret Synop messages."
since: 2x
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Synop Analyzer Binding
This binding integrates the possibility to download and interpret Synop messages.
## Binding Configuration
The binding has no configuration options itself, all configuration is done at 'Things' level.
## Supported Things
There is exactly one supported thing, which represents a Synop message. It has the id `synopanalyzer`.
## Thing Configuration
Besides the Synop Station Number (as ```synopID``` as a [StationID](http://www.ogimet.com/gsynop_nav.phtml.en) string), the second configuration parameter is ```refreshInterval``` which defines the refresh interval in minutes. Synop message are typically updated every hour.
## Channels
The weather information that is retrieved is available as these channels:
| Channel Type ID | Item Type | Description |
|---------------------|-----------|--------------------------------------------|
| temperature | Number | The current temperature in degrees Celsius |
| pressure | Number | The current pressure in millibar (mb) |
| wind-angle | Number | Wind angle in degrees |
| wind-direction | String | Wind direction |
| wind-speed-ms | Number | Wind speed in m/s |
| wind-speed-knots | Number | Wind speed in knots |
| wind-speed-beaufort | Number | Wind speed according to Beaufort scale |
| overcast | String | Appreciation of the cloud cover |
| octa | Number | Part of the sky covered by clouds (in 8th) |
| time-utc | DateTime | Observation time of the Synop message |
## Example
### Things
Here is an example of thing definition :
```
synopanalyzer:synopanalyzer:orly [ stationId="07149"]
```
### Items
```
Number Synop_Temperature "Temperature [%.1f °C]" <temperature> { channel = "synopanalyzer:synopanalyzer:trappes:temperature" }
Number Synop_Pressure "Pressure [%.1f mb]" <pressure> { channel = "synopanalyzer:synopanalyzer:trappes:pressure" }
Number Synop_Wind_Angle "Wind Angle [%d°]" <wind> { channel = "synopanalyzer:synopanalyzer:trappes:wind-angle"}
String Synop_Wind_Direction "Direction [%s]" { channel = "synopanalyzer:synopanalyzer:trappes:wind-direction"}
Number Synop_Wind_Speed "Wind Speed [%.2f m/s]" <wind> { channel = "synopanalyzer:synopanalyzer:trappes:wind-speed-ms"}
Number Synop_Octa "Octa [%d]/8" { channel = "synopanalyzer:synopanalyzer:trappes:octa"}
DateTime Synop_time "Observation Time [%1$ta %1$tR]" <clock> { channel = "synopanalyzer:synopanalyzer:trappes:time-utc"}
```

View File

@ -25,7 +25,7 @@ System information Binding provides operating system and hardware information in
- Battery information - estimated remaining time, capacity, name;
- Sensors information - CPU voltage and temperature, fan speeds;
- Display information;
- Network IP,name and adapter name, mac, data sent and received, packages sent and received;
- Network IP,name and adapter name, mac, data sent and received, packets sent and received;
- Process information - size of RAM memory used, CPU load, process name, path, number of threads.
The binding uses [OSHI](https://github.com/oshi/oshi) API to access this information regardless of the underlying platform and does not need any native parts.
@ -77,11 +77,11 @@ The binding support several channel group. Each channel group, contains one or m
**thing** `computer`
* **group** `memory`
**channel** `available, total, used, available_percent`
**channel** `available, total, used, availablePercent, usedPercent`
* **group** `swap`
**channel** `available, total, used, available_percent`
**channel** `available, total, used, availablePercent, usedPercent`
* **group** `storage` (deviceIndex)
**channel** `available, total, used, available_percent, name, description, type`
**channel** `available, total, used, availablePercent, usedPercent, name, description, type`
* **group** `drive` (deviceIndex)
**channel** `name, model, serial`
* **group** `display` (deviceIndex)
@ -93,7 +93,7 @@ The binding support several channel group. Each channel group, contains one or m
* **group** `sensors`
**channel** `cpuTemp, cpuVoltage, fanSpeed`
* **group** `network` (deviceIndex)
**channel** `ip, mac, networkDisplayName, networkName, packagesSent, packagesReceived, dataSent, dataReceived`
**channel** `ip, mac, networkDisplayName, networkName, packetsSent, packetsReceived, dataSent, dataReceived`
* **group** `process` (pid)
**channel** `load, used, name, threads, path`
@ -107,6 +107,8 @@ The groups marked with "deviceIndex" may have device index attached to the Chann
The binding uses this index to get information about a specific device from a list of devices.
(e.g on a single computer could be installed several local disks with names C:\, D:\, E:\ - the first will have deviceIndex=0, the second deviceIndex=1 ant etc). If device with this index is not existing, the binding will display an error message on the console.
Unfortunately this feature can't be used at the moment without manually adding these new channel groups to the thing description (located in ESH-INF/thing/computer.xml).
In the table is shown more detailed information about each Channel type.
The binding introduces the following channels:
@ -124,6 +126,7 @@ The binding introduces the following channels:
| used | Used size in MB | Number | High | False |
| total | Total size in MB | Number | Low | False |
| availablePercent | Available size in % | Number | High | False |
| usedPercent | Used size in % | Number | High | False |
| model | The model of the device | String | Low | True |
| serial | The serial number of the device | String | Low | True |
| description | Description of the device | String | Low | True |
@ -138,8 +141,8 @@ The binding introduces the following channels:
| mac | MAC address | String | Low | True |
| networkName | The name of the network | String | Low | False |
| networkDisplayName | The display name of the network | String | Low | False |
| packagesSent | Number of packages sent | Number | Medium | True |
| packagesReceived | Number of packages received | Number | Medium | True |
| packetsSent | Number of packets sent | Number | Medium | True |
| packetsReceived | Number of packets received | Number | Medium | True |
| dataSent | Data sent in MB | Number | Medium | True |
| dataReceived | Data received in MB | Number | Medium | True |
@ -198,8 +201,8 @@ String Network_IP { channel="systeminfo:computer:work:network#
String Network_Mac { channel="systeminfo:computer:work:network#mac" }
Number Network_DataSent { channel="systeminfo:computer:work:network#dataSent" }
Number Network_DataRecevied { channel="systeminfo:computer:work:network#dataReceived" }
Number Network_PackagesSent { channel="systeminfo:computer:work:network#packagesSent" }
Number Network_PackagesRecevied { channel="systeminfo:computer:work:network#packagesReceived" }
Number Network_PacketsSent { channel="systeminfo:computer:work:network#packetsSent" }
Number Network_PacketsRecevied { channel="systeminfo:computer:work:network#packetsReceived" }
/* CPU information*/
String CPU_Name { channel="systeminfo:computer:work:cpu#name" }
@ -224,18 +227,21 @@ Number Storage_Available { channel="systeminfo:computer:work:storage
Number Storage_Used { channel="systeminfo:computer:work:storage#used" }
Number Storage_Total { channel="systeminfo:computer:work:storage#total" }
Number Storage_Available_Percent { channel="systeminfo:computer:work:storage#availablePercent" }
Number Storage_Used_Percent { channel="systeminfo:computer:work:storage#usedPercent" }
/* Memory information*/
Number Memory_Available { channel="systeminfo:computer:work:memory#available" }
Number Memory_Used { channel="systeminfo:computer:work:memory#used" }
Number Memory_Total { channel="systeminfo:computer:work:memory#total" }
Number Memory_Available_Percent { channel="systeminfo:computer:work:memory#availablePercent" }
Number Memory_Used_Percent { channel="systeminfo:computer:work:memory#usedPercent" }
/* Swap memory information*/
Number Swap_Available { channel="systeminfo:computer:work:swap#available" }
Number Swap_Used { channel="systeminfo:computer:work:swap#used" }
Number Swap_Total { channel="systeminfo:computer:work:swap#total" }
Number Swap_Available_Percent { channel="systeminfo:computer:work:swap#availablePercent" }
Number Swap_Used_Percent { channel="systeminfo:computer:work:swap#usedPercent" }
/* Battery information*/
String Battery_Name { channel="systeminfo:computer:work:battery#name" }
@ -251,9 +257,9 @@ Number Sensor_CPUVoltage { channel="systeminfo:computer:work:sensors
Number Sensor_FanSpeed { channel="systeminfo:computer:work:sensors#fanSpeed" }
/* Process information*/
Number Process_load { channel="systeminfo:computer:SvilenV-L540:process#load" }
Number Process_used { channel="systeminfo:computer:SvilenV-L540:process#used" }
String Process_name { channel="systeminfo:computer:SvilenV-L540:process#name" }
Number Process_threads { channel="systeminfo:computer:SvilenV-L540:process#threads" }
String Process_path { channel="systeminfo:computer:SvilenV-L540:process#path" }
Number Process_load { channel="systeminfo:computer:work:process#load" }
Number Process_used { channel="systeminfo:computer:work:process#used" }
String Process_name { channel="systeminfo:computer:work:process#name" }
Number Process_threads { channel="systeminfo:computer:work:process#threads" }
String Process_path { channel="systeminfo:computer:work:process#path" }
```

View File

@ -144,10 +144,11 @@ The following channels represent universial channels if no further device inform
| switchBinary | Switch | Switch | SwitchBinary |
| switchMultilevel | Dimmer | - | SwitchMultilevel |
| switchColor | Color | ColorLight | SwitchRGBW |
| switchControl | Switch | Switch | SwitchControl |
| switchControl | Switch | Switch | SwitchControl, ToggleButton, SwitchToggle |
| thermostat | Number | Temperature | Thermostat |
| sensorDiscrete | Number | - | SensorDiscrete |
Currently unsupported Z-Way device types: SwitchToggle, ToggleButton.
Unsupported Z-Way device types: Camera, SensorMultiline, Text. The integration of these types isn't planned.
### Channels for the Z-Way Server (Bridge)
@ -185,7 +186,7 @@ Because textual configuration isn't useful, follow the instructions in the [Gett
### Restrictions
- Z-Way device types (especially the probe types) supported by openHAB channels with detailed information (scale types and so on) are not complete.
- Configuration of the Z-Wave network by the binding is currently not possible (device inclusion or physical device configuration)
- Configuration of the Z-Wave network by the binding is currently not possible (physical device configuration)
- Z-Way App "openHAB Connector" is required. Further versions will contain other mechanisms under usage of the WebSocket implementation of Z-Way or MQTT.
<br>

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 B

View File

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" style="enable-background:new 0 0 64 64">
<path d="m57 39.5c-.3 0-.5-.2-.5-.5v-14c0-.3.2-.5.5-.5h5c.8 0 1.5.7 1.5 1.5v12c0 .8-.7 1.5-1.5 1.5h-5" style="fill:#bebec8"/>
<path d="m62 25c.6 0 1 .4 1 1v12c0 .6-.4 1-1 1h-5v-14h5m0-1h-5c-.6 0-1 .4-1 1v14c0 .6.4 1 1 1h5c1.1 0 2-.9 2-2v-12c0-1.1-.9-2-2-2z" style="fill:#34383f"/>
<path d="m3 46.5c-1.4 0-2.5-1.1-2.5-2.5v-24c0-1.4 1.1-2.5 2.5-2.5h51c1.4 0 2.5 1.1 2.5 2.5v24c0 1.4-1.1 2.5-2.5 2.5h-51" style="fill:#f0f0f0"/>
<path d="m54 18c1.1 0 2 .9 2 2v24c0 1.1-.9 2-2 2h-51c-1.1 0-2-.9-2-2v-24c0-1.1.9-2 2-2h51m0-1h-51c-1.7 0-3 1.3-3 3v24c0 1.7 1.3 3 3 3h51c1.7 0 3-1.3 3-3v-24c0-1.7-1.3-3-3-3z" style="fill:#34383f"/>
<path d="m50 46h-47c-1.1 0-2-.9-2-2v-24c0-1.1.9-2 2-2h47v28" style="fill:#00c83c"/>
<path d="m49 18h1v28h-1z" style="fill:#00b22a"/>
</svg>

After

Width:  |  Height:  |  Size: 898 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 B

View File

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" style="enable-background:new 0 0 64 64">
<path d="m57 39.5c-.3 0-.5-.2-.5-.5v-14c0-.3.2-.5.5-.5h5c.8 0 1.5.7 1.5 1.5v12c0 .8-.7 1.5-1.5 1.5h-5" style="fill:#bebec8"/>
<path d="m62 25c.6 0 1 .4 1 1v12c0 .6-.4 1-1 1h-5v-14h5m0-1h-5c-.6 0-1 .4-1 1v14c0 .6.4 1 1 1h5c1.1 0 2-.9 2-2v-12c0-1.1-.9-2-2-2z" style="fill:#34383f"/>
<path d="m3 46.5c-1.4 0-2.5-1.1-2.5-2.5v-24c0-1.4 1.1-2.5 2.5-2.5h51c1.4 0 2.5 1.1 2.5 2.5v24c0 1.4-1.1 2.5-2.5 2.5h-51" style="fill:#f0f0f0"/>
<path d="m54 18c1.1 0 2 .9 2 2v24c0 1.1-.9 2-2 2h-51c-1.1 0-2-.9-2-2v-24c0-1.1.9-2 2-2h51m0-1h-51c-1.7 0-3 1.3-3 3v24c0 1.7 1.3 3 3 3h51c1.7 0 3-1.3 3-3v-24c0-1.7-1.3-3-3-3z" style="fill:#34383f"/>
<path d="m9 46h-6c-1.1 0-2-.9-2-2v-24c0-1.1.9-2 2-2h6v28" style="fill:#f00014"/>
<path d="m8 18h1v28h-1z" style="fill:#d6001a"/>
</svg>

After

Width:  |  Height:  |  Size: 894 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -0,0 +1,15 @@
<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" style="enable-background:new 0 0 64 64">
<path d="m1.14 40.27c1.52 5.68 4.11 10.17 8.27 14.32l11.28-11.28c-1.96-1.96-3.39-4.42-4.13-7.18l-15.42 4.14" style="fill:#3d01a4"/>
<path d="m62.86 23.73l-15.42 4.13c.35 1.32.56 2.71.56 4.14s-.21 2.82-.56 4.14l15.42 4.13c1.52-5.68 1.52-10.86 0-16.54" style="fill:#fefe33"/>
<path d="m20.69 20.69l-11.28-11.28c-4.16 4.16-6.75 8.64-8.27 14.32l15.42 4.13c.74-2.75 2.17-5.22 4.13-7.17" style="fill:#a7194b"/>
<path d="m16 32c0-1.43.21-2.82.56-4.14l-15.42-4.13c-1.52 5.68-1.52 10.86 0 16.54l15.42-4.13c-.35-1.32-.56-2.71-.56-4.14" style="fill:#8601af"/>
<path d="m32 48c-1.43 0-2.82-.21-4.14-.56l-4.13 15.42c5.68 1.52 10.86 1.52 16.54 0l-4.13-15.42c-1.32.35-2.71.56-4.14.56" style="fill:#0391ce"/>
<path d="m47.44 36.14c-.74 2.75-2.17 5.22-4.13 7.18l11.28 11.28c4.16-4.16 6.75-8.64 8.27-14.32l-15.42-4.14" style="fill:#d0ea2b"/>
<path d="m43.31 43.31c-1.96 1.96-4.42 3.39-7.18 4.13l4.13 15.42c5.68-1.52 10.17-4.11 14.32-8.27l-11.27-11.28" style="fill:#66b032"/>
<path d="m20.69 43.31l-11.28 11.28c4.16 4.16 8.64 6.75 14.32 8.27l4.13-15.42c-2.75-.74-5.22-2.17-7.17-4.13" style="fill:#0247fe"/>
<path d="m32 16c1.43 0 2.82.21 4.14.56l4.13-15.42c-5.68-1.52-10.86-1.52-16.54 0l4.13 15.42c1.32-.35 2.71-.56 4.14-.56" style="fill:#fd5308"/>
<path d="m27.86 16.56l-4.13-15.42c-5.68 1.52-10.16 4.11-14.32 8.27l11.28 11.28c1.95-1.96 4.42-3.39 7.17-4.13" style="fill:#fe2712"/>
<path d="m43.31 20.69l11.28-11.28c-4.16-4.16-8.64-6.75-14.32-8.27l-4.13 15.42c2.75.74 5.22 2.17 7.17 4.13" style="fill:#fb9902"/>
<path d="m62.86 23.73c-1.52-5.68-4.11-10.17-8.27-14.32l-11.28 11.28c1.96 1.96 3.39 4.42 4.13 7.18l15.42-4.14" style="fill:#fabc02"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 893 B

After

Width:  |  Height:  |  Size: 893 B

View File

Before

Width:  |  Height:  |  Size: 993 B

After

Width:  |  Height:  |  Size: 993 B

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

Before

Width:  |  Height:  |  Size: 156 B

After

Width:  |  Height:  |  Size: 156 B

View File

Before

Width:  |  Height:  |  Size: 695 B

After

Width:  |  Height:  |  Size: 695 B

View File

Before

Width:  |  Height:  |  Size: 716 B

After

Width:  |  Height:  |  Size: 716 B

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -54,9 +54,8 @@ ImperiHome must be configured to connect to your openHAB instance.
Start ImperiHome, open the menu and go to My Systems. Add a new system (+) and choose 'ImperiHome Standard System' as the object type. Now enter the URL to your openHAB instance
as Local URL, followed by _/imperihome/iss_. For example, if your openHAB instance is running at _http://192.168.1.10:8080/_, the Local URL would be _http://192.168.1.10:8080/imperihome/iss_.
If you have port forwarding or similar set up to access your OH form the internet, you can also fill the Remote URL in the same way. For example:
_http://my-openhab-url.dyndns.org:8080/imperihome/iss_. Please be aware that this service provides no authentication mechanism, so anyone could use the API to control your
system when accessible from the internet.
If you have port forwarding or similar set up to access your openHAB from the internet, you can also fill the Remote URL in the same way. For example:
_http://my-openhab-url.dyndns.org:8080/imperihome/iss_. <b>Warning</b>: this service provides no authentication mechanism, so anyone could use the API to control your system when accessible from the internet. Add a secure proxy or use the openHAB Cloud proxy to protect your system ([more information](http://docs.openhab.org/installation/security.html)).
Click Next to let ImperiHome validate the URL. After validation succeeded the system is added and you can continue to configure your Items for use in ImperiHome.
@ -225,7 +224,7 @@ the Item types you can use them on are listed.
<td>DevDimmer</td>
<td>Dimmable light</td>
<td>Yes</td>
<td>Dimmer</td>
<td>Dimmer, Number</td>
<td>energy</td>
</tr>
<tr>
@ -343,8 +342,8 @@ the Item types you can use them on are listed.
<tr>
<td>DevShutter</td>
<td>Shutter actuator</td>
<td>No</td>
<td></td>
<td>Yes</td>
<td>Dimmer, Number</td>
<td>-</td>
</tr>
<tr>
@ -377,10 +376,10 @@ the Item types you can use them on are listed.
</tr>
<tr>
<td>DevThermostat</td>
<td>Thermostat</td>
<td>No</td>
<td></td>
<td>-</td>
<td>Thermostat <sup>(2)</sup></td>
<td>Yes</td>
<td>Number</td>
<td>curmode, curtemp</td>
</tr>
<tr>
<td>DevUV</td>
@ -398,7 +397,9 @@ the Item types you can use them on are listed.
</tr>
</table>
<sup>(1)</sup> When using a String Item for trippable devices, any non-empty value other than 'ok' will set the device to tripped. This makes it compatible with the Nest Protect binding.
<sup>(1)</sup> When using a String Item for trippable devices, any non-empty value other than 'ok' will set the device to tripped. This makes it compatible with the Nest Protect binding.
<sup>(2)</sup> Thermostat devices require additional tags. See [Thermostat](#thermostat) for details.
<a name="deviceLinks"></a>
@ -411,8 +412,7 @@ The _link_ tag refers to the name of the Item it should link to. The item must b
### Switch energy consumption
ImperiHome allows you to show the current energy consumption for a _DevDimmer_, _DevRGBLight_ and _DevSwitch_.
This example links the _MyLightEnergy_ Number Item to the _MyLight_ Switch Item,
so the _DevSwitch_ device will also report the energy consumption value to ImperiHome:
This example links the _MyLightEnergy_ Number Item to the _MyLight_ Switch Item, so the _DevSwitch_ device will also report the energy consumption value to ImperiHome:
```
Switch MyLight "My Light" ["iss:type:DevSwitch", "iss:link:energy:MyLight_Energy"] { channel="zwave:device:1:node14:switch_binary1" }
@ -421,8 +421,7 @@ Number MyLightEnergy "My Light Usage [%.1f W]" ["iss:type:DevElectricity"]
### Total energy consumption
The _DevElectricity_ devices main value is the current consumption in Watts. To add the total consumption in KWh, link your electricity device to
a generic sensor device containing the total energy consumption value:
The _DevElectricity_ devices main value is the current consumption in Watts. To add the total consumption in KWh, link your electricity device to a generic sensor device containing the total energy consumption value:
```
Number MyLight_Energy "My Light Usage [%.1f W]" ["iss:type:DevElectricity", "iss:link:kwh:MyLight_Total_Energy"] { channel="zwave:device:1:node14:meter_watts1" }
@ -447,8 +446,7 @@ Number MyHum "Humidity [%d%%]" ["iss:type:DevTempHygro", "iss:link:temp
### Rain accumulation
The _DevRain_ devices main value is the current instant rain value (default in mm per hour). To add the total rain accumulation value, link your rain device to
a generic sensor device:
The _DevRain_ devices main value is the current instant rain value (default in mm per hour). To add the total rain accumulation value, link your rain device to a generic sensor device:
```
Number RainCurrent "Rain current [%.1f mm/h]" ["iss:type:DevRain", "iss:link:accum:RainAccumulation"] { channel="..." }
@ -457,14 +455,27 @@ Number RainAccumulation "Rain accumulation [%.1f mm]" ["iss:type:DevGenericSe
### Wind direction
The _DevWind_ devices main value is the current wind speed (default in km per hour). To add the wind direction value (default in degrees), link your wind device to
a generic sensor device:
The _DevWind_ devices main value is the current wind speed (default in km per hour). To add the wind direction value (default in degrees), link your wind device to a generic sensor device:
```
Number WindSpeed "Wind speed [%.1f km/h]" ["iss:type:DevWind", "iss:link:direction:WindDirection"] { channel="..." }
Number WindDirection "Wind direction [%d deg]" ["iss:type:DevGenericSensor", "iss:unit:deg"] { channel="..." }
```
<a name="thermostat"></a>
### Thermostat
The _DevThermostat_ combines a setpoint, current temperature and mode in one ImperiHome device. To accomplish this using openHAB items, it uses a _curtemp_ and _curmode_ link and a few additional tags.
```
Number Thermos_Setpoint "Thermostat" ["iss:room:Test", "iss:type:DevThermostat", "iss:step:0.5", "iss:minVal:15", "iss:maxVal:24", "iss:modes:Home,Away,Comfort,Sleeping", "iss:link:curmode:Thermos_Mode", "iss:link:curtemp:Thermos_Temp"] { channel="..." }
Number Thermos_Temp "Thermos temp" ["iss:room:Test", "iss:type:DevTemperature", "iss:unit:K"] { channel="..." }
String Thermos_Mode "Thermos mode" ["iss:room:Test", "iss:type:DevGenericSensor"] { channel="..." }
```
The main _DevThermostat_ device must be the Item holding the setpoint. Using tags, this device specifies the minimum and maximum setpoint value, the setpoint step and the available modes. The two links specify what Items contain the current temperature and current mode. If you want to use a custom unit, set the _unit_ tag on the current temperature device.
## Items example
```

@ -1 +1 @@
Subproject commit d16d4a02a30e1dedb36874d8bb8847d4602c84e5
Subproject commit 4ed5f59a5783b099accbf7256a628e891077a771

@ -1 +1 @@
Subproject commit 5b4477181f86efd252138227019d3497316fb2df
Subproject commit eba0094465c37d42089c26ada127e734a4ba0e56

@ -1 +1 @@
Subproject commit c6fc306e9f4fab0fb9a1540f0589720e94a44b28
Subproject commit c4abbeecb9810bff01ed2b96fba7733672e2ef35

@ -1 +1 @@
Subproject commit 8b94f811511e0a62bc9973612c8dbfb3860e99f4
Subproject commit 7b76fc69415a4d478aa0e0016ba49a5bc9fd6a64

@ -1 +1 @@
Subproject commit 463e6601ef9c744a15f461e8192d776d16da37f9
Subproject commit 3d7f34d40d79e7cc9666bf477a03e40eb68f7001

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

270
_uis/habpanel/doc/index.md Normal file
View File

@ -0,0 +1,270 @@
# Designing dashboard interfaces with HABPanel
The [HABPanel]({{base}}/addons/ui/habpanel/readme.html) user interface is installed by default when choosing any initial setup package, and allows the creation of user-friendly dashboards, particularly suited for (e.g. wall-mounted) tablets. These dashboards can be designed interactively in the embedded designer, rather than using configuration files.
Despite being similar, HABPanel's dashboards and [sitemaps]({{base}}/configuration/sitemaps.html) are separate concepts, and can be designed independently as they aren't related to each other; however, they rely and act on [items]({{base}}/concepts/items.html) which must therefore be [defined]({{base}}/configuration/items.html) first. The [demo setup package]({{base}}/configuration/packages.html#demo-package-sample-setup), available for installation when starting openHAB for the first time, defines a series of sample items and configures HABPanel with a comprehensive set of dashboards to showcase a possible end result. It's the same as the one installed on the [openHAB Demo Server](https://demo.openhab.org/){:target="_blank"}, and it may be modified without risk of breaking anything: it's the best playground to discover HABPanel's features.
## Concepts
HABPanel has its own terminology of entities presented below:
![HABPanel concepts](habpanel-concepts.png)
- The **Panel Registry** is the central storage used by HABPanel on a given openHAB instance, it contains several **Panel Configurations**;
- A **Panel Configuration** is a container holding a **Panel** along with its **Settings** and the definition of **Custom Widgets**. Each device HABPanel runs on (desktop browser, tablet...) has an active panel configuration and displays the panel associated with it;
- A **Panel** is a set of **Dashboards** (or pages) which can be presented to end users, who can also easily switch between them using the menu.
- A **Dashboard** is comprised of discrete **Widgets** positioned on the dashboard's surface at design time. There are several types of built-in *standard widgets*, configured separately, and the administrator can also develop (or import) *custom widgets*.
## About data persistence
By default, when running HABPanel on a new browser or device, a tutorial will be displayed allowing the user to start from scratch, or switch to an previously defined panel configuration. **Until a panel configuration is created (or chosen), HABPanel will run in "local storage" mode for this device: the settings will be retained in the browser's local storage only and nothing will be persisted on the server.** By contrast, when an active panel configuration is set, each change performed on the device will update the panel configuration on the server. This allows the sharing of panel configuration among devices, because other browsers and devices using this panel configuration will pick up the changes with a page refresh - this is useful for instance to design a panel comfortably on a computer, then use it on a tablet.
To switch from the local storage to a server-hosted panel configuration, go to the Settings page from the main menu or the side drawer (see below). A list of panel configurations will be presented in the _Current storage configuration_ section; if only the _"Local storage"_ option is available, click on the **Save the current configuration to a new panel configuration** link, give it a name to identify it (avoid spaces or special characters), and it should be added to the list. The radio button is also automatically checked, meaning it is now the active panel configuration.
Even when there is an active panel configuration, HABPanel uses the browser's storage to sync a locally-managed copy. With the **Edit the local panel configuration (experts only)** link under the _"Local storage"_ storage configuration option in the settings screen, the raw structure of the panel configuration can be inspected, modified, and exported or imported from/to a .json file. It is also an alternative way to backup, restore and share the configuration.
HABPanel uses service configuration variables to store its data on the openHAB server. They can be accessed using Paper UI (_Configuration > Services > UI > HABPanel > Configure_) or in the openHAB Karaf console:
```
openhab> config:edit org.openhab.habpanel
openhab> config:property-get <property>
```
The following properties are defined:
- `panelsRegistry`: contains the entire registry serialized in JSON, it is maintained by the application and shouldn't be modified directly (editing it by hand, while possible, is strongly discouraged);
- `lockEditing`: when enabled, all HABPanel instances will hide their editing features (a page refresh is necessary). When panels are complete and stable, it is advisable to turn on this setting so they cannot be easily modified by end users;
- `initialPanelConfig`: if this option is unset and no prior local configuration is detected, the tutorial will be displayed until some dashboards are added or a panel configuration is selected. This setting allows to bypass the tutorial and switch directly to the existing panel configuration with the given name.
## Major interface elements and features
### The main menu
The main menu is HABPanel's home page. It contains tiles linking to the panel's dashboards, and an icon to switch between the run mode and the edit mode (if available).
![Main menu - run mode](main-menu-run.png)
Use the gears icon in the top-right corner to switch between the two modes.
![Main menu - edit mode](main-menu-edit.png)
When in edit mode, several features are available:
* Add a new empty dashboard with the **Add new dashboard** link;
* Go to the settings screen (for instance, to switch from local storage to a server-managed panel configuration) by clicking on the **Advanced settings** link;
* Adjust the number of columns for the grid of main menu tiles with the slider, from 1 (the default) to 6;
* Drag the arrow icons in the top-left corner of each tile to move it;
* Resize tiles with the chevron (triangle) in the bottom-right corner of each tile;
* Configure the tiles and the dashboards themselves with the gears icons in the top-right corner of each tile;
* Enter the dashboard designer by clicking inside a tile.
The configuration dialog when clicking on a tile's gear icon contains the following settings:
| Setting | Description
|---------|-------------|
| Name | The name of the dashboard, also displayed on the tile
| Background URL | The URL of a background image *for the main menu tile*
| Backdrop Icon | Iconset and icon displayed on the tile as a Backdrop
| Center backdrop horizontally | When unchecked, the backdrop is aligned to the right of the tile; when checked, it is centered
| Icon | Icon associated with the dashboard, currently only used in the side drawer
| Size (icon) | _(currently unused)_
| Title Text Color | Color for the name of the dashboard on the tile
| Advanced tab | Contains settings currently unstable or buggy, for advanced users only
It also contains a **Delete** button which will delete the entire dashboard and its contents - this happens immediately and cannot be undone!
### The side drawer
![Side drawer](side-drawer.png)
The side drawer can be accessed from any screen by a swipe or drag to the right (on most elements where there isn't a conflict with this gesture), or with the "hamburger icon" ☰ in the top-left corner.
It is comprised of three parts:
1. A **header** - clicking on it returns to the main menu. Note: if defined, the title of the panel is displayed instead of the default "HABPanel" label, it is configured in the settings (see below);
2. A **list of dashboards** for quick switching bettween dashboards without going back to the main menu - they are presented in the order of the menu (sorted by row, then by column);
3. A **footer** displaying the current date & time and featuring a link to the settings screen (if available).
### The dashboard designer
![Dashboard designer](dashboard-designer.png)
The dashboard designer is where widgets can be added, positioned, resized and configured. Placeholders are displayed where actual widgets would be on the running dashboard.
To add a widget, use the **Add widget** button and choose among the list of standard widgets, or eventual custom widgets in the panel configuration.
See below for a description of the standard widgets.
![Add widget menu](add-widget.png)
Use the header of a widget placeholder (with the four-arrow icon and the widget type) to move the widget. Moving a widget over other widgets do not push them away to make room (contrary to the main menu tiles), so ensure there is sufficient room for your widget before moving it.
![Widget placeholder features](dashboard-designer-placeholder-menu.png)
When hovering over a placeholder (or tapping inside it if on a touch interface), a chevron appears in the bottom-right corner allowing to resize it.
Use the ellipsis icon **⁝** to bring up the widget's contextual menu, offering the following options:
- **Edit...:** Displays the configuration dialog for the widget. The options available in the dialog depend on the type of the widget and are detailed in the Widgets section;
- **Copy/move to...**: Displays a dialog allowing to clone the widget with its configuration, to the current dashboard or another, or move it to another dashboard (the target widget will retain its size of the source widget but it will be placed where there is available room, use the target dashboard's designer to find it and reposition it);
- **Delete**: Deletes the widget.
Modifications to the dashboard are not saved automatically, use the **Save** button in the header to commit the changes to the panel configuration (or local storage). The **Run** button also saves, then runs the dashboard.
### Running dashboards
![A running dashboard](running-dashboard.png)
When a dashboard is running, widgets can be interacted with, and server-sent events are received when items' states are updated, so widgets update automatically in HABPanel.
The icons in the top-right corner perform the following:
- the **speech balloon** activates the speech recognition feature and send the results as text to openHAB's default human language interpreter. This implies [some configuration on the server]({{base}}/configuration/multimedia.html#human-language-interpreter), and this icon might not be displayed if the browser doesn't support voice recognition ([currently only in Chrome on desktops and Android](http://caniuse.com/#feat=speech-recognition){:target="_blank"}). It can also be configured in the panel configuration to appear on the bottom of the screen;
- the **refresh** button forces HABPanel to retrieve the current state of all items;
- the **fullscreen** button tells the browser to go fullscreen, if supported.
## Additional features and settings
Apart from the storage configuration discussed above, the settings screen contains several settings kept as part of the panel configuration (meaning they are set separately):
| Setting | Description
|---------|-------------|
| Panel name | An user-friendly name for the panel. It will be displayed in the header of the side drawer.
| Theme | HABPanel comes with a number of built-in themes, with this setting a different theme may applied to the panel. Themes are not user-modifiable.
| Background image | Sets the specified URL as background image for the whole panel. *Tip: the background image works best with the 'translucent' theme!*
| No clock on the home menu | _(Deprecated)_
| Prevent scrolling (when not editing) | When enabled, it is impossible to scroll the dashboard on a tablet (and it prevents the "elastic" bouncing effect on iOS/Safari)
| Manage > | Goes to the list of custom widget definitions for the active panel configuration
| Voice | Selects a voice from the detected list for text-to-speech*
| Speak the new value of the following item when it changes | When the selected String item change to a new text, HABPanel will use the browser's text-to-speech engine and the selected voice to read it aloud*
| Display a floating speech button at the bottom of the screen | Use an alternative style for the Speak (voice input) button in dashboards
| When this item changes to a dashboard's name, switch to it | This allows controlling the currently displayed dashboard by an openHAB item (useful with rules and as a side-effect to commands)
*Note: the text-to-speech functionality featured in HABPanel is unrelated to the [TTS services]({{base}}/configuration/multimedia.html#text-to-speech) defined on the openHAB server, and they are not compatible (this is why a String item is required and the `say()` function cannot be used). However, HABPanel will play audio streamed through the ['webaudio' sink]({{base}}/configuration/multimedia.html#audio), including spoken text.
## Widgets
### Standard widgets
The following built-in widgets are available:
#### Dummy (dummy)
![Dummy widget](widget-dummy.png)
The so-called dummy widget (whose name is explained by historical reasons - it evolved from the first developed widget) displays the current state of an item without any interactivity, along with a label and an optional icon.
#### Switch (switch)
![Switch widget](widget-switch.png)
The switch widget is a simple widget to control a Switch item as defined in openHAB - it reports its state and is able to toggle it between ON and OFF.
#### Label (label)
![Label widget](widget-label.png)
The label widget is straightforward: it simply displays a fixed text and has a few appeareance options (color, font). It can for example be used as a header for a group of widgets below it.
#### Button (button)
![Button widget](widget-button.png)
The button widget can be clicked (or tapped) and will perform an action, like sending commands to an item or navigating to another dashboard. It can also adjust its colors depending on the state of the underlying item.
Multiple buttons are often used together to present different options for an item.
#### Slider (slider)
![Slider widget](widget-slider.png)
The slider widget can reflect the state of, and update, numerical items within a range of values. Several options are available to alter its appearance and behavior.
#### Knob (knob)
![Knob widget](widget-knob.png)
The knob widget is similar in essence to the slider, but in a rotary fashion. It also offers extensive configurability over its appearance and behavior.
#### Color picker (colorpicker)
![Color picker widget](widget-colorpicker.png)
The color picker widget offers several ways of displaying and updating the state of an openHAB Color item (or group).
#### Image (image)
![Image widget](widget-image.png)
The image widget can display an image, directly or via an openHAB String item, and can refresh it at regular intervals.
#### Frame (frame)
![Frame widget](widget-frame.png)
The frame widget displays an external web page in a HTML `<iframe>`.
#### Clock (clock)
![Clock widget](widget-clock.png)
The clock widget displays an analog or digital clock. It can also be used to display the current date.
#### Chart (chart)
![Chart widget](widget-chart.png)
The chart widget can leverage openHAB persistence services to plot numerical series over a time period. It can also display server-generated chart images (default or rrd4j variants).
#### Timeline (timeline)
![Timeline widget](widget-timeline.png)
The timeline widget is the chart widget's counterpart for non-numerical items. It can display multiple "swimlanes" of items with color-coded slices representing their state changes during the selected period. Hovering or tapping inside a color slice displays details on the state of the item at the time.
#### Template (template)
The template widget allows an user-configured AngularJS HTML template to be rendered and hosted inside the widget boundaries; it exposes several helper functions and other facilities to retrieve and update openHAB's items from the template's markup.
Refer to the _Developing templates and custom widgets_ section below for more information on template development.
Templates are defined inline, for each particular instance, and thus are not optimized for sharing and re-use. For those cases, developing a _custom widget_ is more appropriate.
### Custom widgets
Custom widgets are similar to (and based on) the template widget but are designed to be reused, shared, and configured. A custom widget is an AngularJS template with an associated set of configuration settings. It can be added to dashboards and configured individually, like a built-in widget. Definitions of custom widgets are stored in the registry at the panel configuration level; this means they are specific to a panel configuration and each panel configuration has its own custom widgets (see the _Concepts_ section above).
#### Managing custom widgets
([Community thread about this feature](https://community.openhab.org/t/custom-widgets-feature-walkthrough/16670/1))
The list of custom widgets either via the dashboard designer (click/tap the gears icon in the _Add Widget_ dropdown menu), or with the "Manage" button in the settings screen.
From the list, custom widgets can be created from scratch, or imported from a previously exported .json file. Members of the openHAB community present their custom widgets on the forum. The _Get widgets from the openHAB community_ link brings up a filtered lists of custom widgets from the community.
Once they are created, custom widgets can be exported to a .json file or deleted from the list using the context menu accessed with the ellipsis icon **⁝** on the tiles.
![Custom widget context menu](custom-widget-context-menu.png)
#### The widget designer
Upon clicking on a custom widget definition, the widget designer opens. It contains three tabs:
- **Code:** This tab is an editor for the template's code. You can use the Ctrl-S (or Cmd-S) keyboard shortcut to save the widget while editing the code;
- **Settings:** This tab hosts the widget's general settings and configuration settings structure to be defined.
Click on the **Add setting** to add a new configuration setting. Each configuration setting must have a type, a technical ID, and other optional attributes. Each type of setting determines the UI element presented in the dashboard designer when configuring instances of the custom widget.
Use the arrow buttons to move configuration settings up or down, and the trash bin icon to remove them.
When instantiated, the value of configuration settings are set in the template's scope as `config.<setting_id>` (except those of type Icon which define an additional value, the iconset name, as `config.<setting_id>_iconset`);
- **Preview:** Upon switching to this tab, a test instance of the widget is rendered in an otherwise blank testbed dashboard. Use the sliders to resize the widget in order to preview it at different sizes. If it defines configuration settings, they must likely be set for this preview using the gears icon: this will bring up the widget instance's configuration dialog as it would appear in the dashboard designer.
Don't forget to save the changes with the **Save** button.
## Developing templates and custom widgets
_This chapter will cover in detail how to write templates to build custom widgets. It is not yet written, in the meantime use the resources below:_
[Main thread in the community forums](https://community.openhab.org/t/template-widget-tutorial-examples-make-your-own-widget/14211/1)
[Seek community help in the HABPanel category](https://community.openhab.org/c/apps-services/habpanel)

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 703 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

@ -37,7 +37,9 @@ Note that this list also serves as a checklist for code reviews on pull requests
## C. Language Levels and Libraries
1. Eclipse SmartHome requires at least JavaSE 7. Hence no features of Java 8 must be used within the code. To allow optimized JavaSE 8 runtimes, the set of Java packages to be used is furthermore restricted to [Compact Profile 2](http://www.oracle.com/technetwork/java/embedded/resources/tech/compact-profiles-overview-2157132.html).
1. Eclipse SmartHome generally targets JavaSE 8 with the following restrictions:
* To allow optimized JavaSE 8 runtimes, the set of Java packages to be used is furthermore restricted to [Compact Profile 2](http://www.oracle.com/technetwork/java/embedded/resources/tech/compact-profiles-overview-2157132.html)
* Java 5 for org.eclipse.smarthome.protocols.enocean.*
1. The minimum OSGi framework version supported is [OSGi R4.2](http://www.osgi.org/Download/Release4V42), no newer features must be used.
1. For logging, slf4j (v1.7.2) is used.
1. A few common utility libraries are available that every Eclipse SmartHome based solution has to provide and which can be used throughout the code (and which are made available in the target platform):

View File

@ -69,3 +69,15 @@ HSB string values consist of three comma-separated values for hue (0-360°), sat
| StopMoveType | `STOP`, `MOVE` |
| UpDownType | `UP`, `DOWN` |
## A note on items which accept multiple state data types
There are a number of items which accept multiple state data types, for example `DimmerItem`, which accepts `OnOffType` and `PercentType`, `RollershutterItem`, which accepts `PercentType` and `UpDownType`, or `ColorItem`, which accepts `HSBType`, `OnOffType` and `PercentType`. Since an item has a SINGLE state, these multiple data types can be considered different views to this state.
The data type carrying the most information about the state is usually used to keep the internal state for the item, and other datatypes are converted from this main data type. This main data type is normally the first element in the list returned by `Item.getAcceptedDataTypes()`.
Here is a short table demonstrating conversions for the examples above:
| Itemname | Main data type | Additional data types conversions |
| --- | --- | --- |
| Color | `HSBType` | <ul><li>`OnOffType` - `OFF` if the brightness level in the `HSBType` equals 0, `ON` otherwise</li><li>`PercentType` - the value for the brightness level in the `HSBType`</li></ul> |
| Dimmer | `PercentType` | `OnOffType` - `OFF` if the brightness level indicated by the percent type equals 0, `ON` otherwise |
| Rollershutter | `PercentType` | `UpDownType` - `UP` if the shutter level indicated by the percent type equals 0, `DOWN` if it equals 100, and `UnDefType.UNDEF` for any other value|

View File

@ -24,13 +24,15 @@ Each thing has a status object, which helps to identify possible problems with t
|---------------|-------------|
| UNINITIALIZED | This is the initial status of a thing, when it is added or the framework is being started. This status is also assigned, if the initializing process failed or the binding is not available. Commands, which are sent to channels will not be processed. |
| INITIALIZING | This state is assigned while the binding initializes the thing. It depends on the binding how long the initializing process takes. Commands, which are sent to channels will not be processed. |
| UNKNOWN | The handler is fully initialized but due to the nature of the represented device/service it cannot really tell yet whether the thing is ONLINE or OFFLINE. Therefore the thing potentially might be working correctly already and may or may not process commands. But the framework is allowed to send commands, because some radio-based devices may go ONLINE if a command is sent to them. The handler should take care to switch the thing to ONLINE or OFFLINE as soon as possible and then must not switch back to UNKNOWN. |
| UNKNOWN | The handler is fully initialized but due to the nature of the represented device/service it cannot really tell yet whether the thing is ONLINE or OFFLINE. Therefore the thing potentially might be working correctly already and may or may not process commands. But the framework is allowed to send commands, because some radio-based devices may go ONLINE if a command is sent to them. The handler should take care to switch the thing to ONLINE or OFFLINE as soon as possible. |
| ONLINE | The device/service represented by a thing is assumed to be working correctly and can process commands. |
| OFFLINE | The device/service represented by a thing is assumed to be not working correctly and may not process commands. But the framework is allowed to send commands, because some radio-based devices may go back to ONLINE, if a command is sent to them. |
| REMOVING | The device/service represented by a thing should be removed, but the binding did not confirm the deletion yet. Some bindings need to communicate with the device to unpair it from the system. Thing is probably not working and commands can not be processed. |
| REMOVED | This status indicates, that the device/service represented by a thing was removed from the external system. Usually this status is an intermediate status, because the thing is removed from the database after this status is assigned. |
| REMOVED | This status indicates that the device/service represented by a thing was removed from the external system after the REMOVING was initiated by the framework. Usually this status is an intermediate status because the thing gets removed from the database after this status was assigned. |
The statuses UNINITIALIZED, INITIALIZING and REMOVING are set by the framework, where as the statuses UNKNOWN, ONLINE, OFFLINE and REMOVED are assigned from a binding.
The statuses UNINITIALIZED, INITIALIZING and REMOVING are set by the framework, where as the statuses UNKNOWN, ONLINE and OFFLINE are assigned from a binding.
Additionally, the REMOVED state is set by the binding to indicate that the removal process has been completed, i.e. the thing must have been in REMOVING state before.
### Status Transitions