updated generated content

Signed-off-by: Kai Kreuzer <kai@openhab.org>
pull/671/head
Kai Kreuzer 2018-04-26 16:41:20 +02:00
parent 117ee07353
commit dae6cbc34b
No known key found for this signature in database
GPG Key ID: 5110767B6248D3C0
47 changed files with 1741 additions and 1326 deletions

View File

@ -22,7 +22,10 @@ The Pushbullet action allows you to notify iOS, Android & Windows 10 Phone & Des
The following is a valid action call that can be made when the plugin is loaded. The following is a valid action call that can be made when the plugin is loaded.
For specific information on each item, see the [Pushbullet API](https://docs.pushbullet.com/). For specific information on each item, see the [Pushbullet API](https://docs.pushbullet.com/).
The recipient can either be an email address or a channel tag.
If it is not specified or invalid, the note will be broadcast to all of the user account's devices.
- `sendPushbulletNote(String title, String message)`
- `sendPushbulletNote(String receiver, String title, String message)` - `sendPushbulletNote(String receiver, String title, String message)`
- `sendPushbulletNote(String botname, String receiver, String title, String message)` - `sendPushbulletNote(String botname, String receiver, String title, String message)`

View File

@ -23,46 +23,74 @@ The Pushover action service allows you to notify mobile devices of a message usi
You may define default values for parameters to action calls in the file `services/pushover.cfg`. You may define default values for parameters to action calls in the file `services/pushover.cfg`.
None of the configuration parameters are required as you can specify required configuration items in the action call, but you must at least provide an *API Token*, *User/Group Key* and a *Message* in some manner before a message can be pushed. None of the configuration parameters are required as you can specify required configuration items in the action call, but you must at least provide an *API Token*, *User/Group Key* and a *Message* in some manner before a message can be pushed.
| Property | Default | Required | Description | | Property | Default | Required | method to set | Description |
|-----------------|---------|:-------------------------------------------------:|------------------------------------------------------------------------------------------------------------------------| |-----------------|---------|:-------------------------------------------------:|-------------------------------------|------------------------------------------------------------------------------------------------------------------------|
| defaultTimeout | 10000 | No | Timeout in milliseconds for the connection to pushover.net | | defaultTimeout | 10000 | No | - | Timeout in milliseconds for the connection to pushover.net |
| defaultToken | | if using action call without `apiToken` parameter | Pushover [API token](https://pushover.net/api) to send to devices | | defaultToken | | if using action call without `apiToken` parameter | withApiKey(String apiKey) | Pushover [API token](https://pushover.net/api) to send to devices |
| defaultUser | | if using action call without `userKey` parameter | Pushover User or Group key (not e-mail address) of your user (or you) to send to devices. | | defaultUser | | if using action call without `userKey` parameter | withUser(String user) | Pushover User or Group key (not e-mail address) of your user (or you) to send to devices. |
| defaultTitle | openHAB | No | Application title for the notification | | defaultTitle | openHAB | No | withTitle(String title) | Application title for the notification |
| defaultPriority | 0 | No | Priority of the notification, from -2 (low priority) to 2 (high priority) | | defaultPriority | 0 | No | withPriority(int priority) | Priority of the notification, from -2 (low priority) to 2 (high priority) |
| defaultUrl | | No | URL to attach to the message if not specified in the command. This can be used to trigger actions on the device. | | defaultUrl | | No | withUrl(String url) | URL to attach to the message if not specified in the command. This can be used to trigger actions on the device. |
| defaultUrlTitle | | No | URL title to attach to the message if not specified in the command. This can be used to trigger actions on the device. | | defaultUrlTitle | | No | withUrlTitle(String urlTitle) | URL title to attach to the message if not specified in the command. This can be used to trigger actions on the device. |
| defaultRetry | 300 | No | When priority is 2 (high priority), how often (in seconds) should messages be resent | | defaultRetry | 300 | No | - | When priority is 2 (high priority), how often (in seconds) should messages be resent |
| defaultExpire | 3600 | No | When priority is 2 (high priority), how long (in seconds) to continue resending messages until acknowledged | | defaultExpire | 3600 | No | - | When priority is 2 (high priority), how long (in seconds) to continue resending messages until acknowledged |
| attachment | | No | withAttachment(String attachment) | The full path of a JPEG image attachment to be pushed with the message. |
| contentType | | No | withContentType(String contentType) | Content type, ie "image/png" |
## Actions ## Actions
The following are valid action calls that can be made when the plugin is loaded. The following are valid action calls that can be made when the plugin is loaded.
For specific information on each item, see the [Pushover API](https://pushover.net/api). For specific information on each item, see the [Pushover API](https://pushover.net/api).
- `pushover(String message)` - `Deprecated ~~pushover(String message)~~`
- `pushover(String message, String device)` - `Deprecated ~~pushover(String message, int priority)~~`
- `pushover(String message, int priority)` - `Deprecated ~~pushover(String message, int priority, String url)~~`
- `pushover(String message, int priority, String url)` - `Deprecated ~~pushover(String message, int priority, String url, String urlTitle)~~`
- `pushover(String message, int priority, String url, String urlTitle)` - `Deprecated ~~pushover(String message, int priority, String url, String urlTitle, String soundFile)~~`
- `pushover(String message, int priority, String url, String urlTitle, String soundFile)` - `Deprecated ~~pushover(String message, String device)~~`
- `pushover(String message, String device, int priority)` - `Deprecated ~~pushover(String message, String device, int priority)~~`
- `pushover(String message, String device, int priority, String url)` - `Deprecated ~~pushover(String message, String device, int priority, String url)~~`
- `pushover(String message, String device, int priority, String url, String urlTitle)` - `Deprecated ~~pushover(String message, String device, int priority, String url, String urlTitle)~~`
- `pushover(String message, String device, int priority, String url, String urlTitle, String soundFile)` - `Deprecated ~~pushover(String message, String device, int priority, String url, String urlTitle, String soundFile)~~`
- `pushover(String apiToken, String userKey, String message)` - `Deprecated ~~pushover(String apiToken, String userKey, String message)~~`
- `pushover(String apiToken, String userKey, String message, String device)` - `Deprecated ~~pushover(String apiToken, String userKey, String message, int priority)~~`
- `pushover(String apiToken, String userKey, String message, int priority)` - `Deprecated ~~pushover(String apiToken, String userKey, String message, String device)~~`
- `pushover(String apiToken, String userKey, String message, String device, int priority)` - `Deprecated ~~pushover(String apiToken, String userKey, String message, String device, int priority)~~`
- `pushover(String apiToken, String userKey, String message, String device, String title, String url, String urlTitle, int priority, String soundFile)` - `Deprecated ~~pushover(String apiToken, String userKey, String message, String device, String title, String url, String urlTitle, int priority, String soundFile)~~`
- `Deprecated ~~pushover(String apiToken, String userKey, String message, String device, String title, String url, String urlTitle, int priority, String soundFile, String attachment)~~`
- `sendPushoverMessage(Pushover pushover)`
The action calls have to be configured in the above sequence, if you need to omit one of the call parameters you may use a null value or two double quotes. The action calls have to be configured in the above sequence. The builder pattern is used to provide the parameters. The most parameters are optional and may have a default value. See the examples how to call use the pushover action.
In this case any default values from `services/pushover.cfg` will be used. In this case any default values from `services/pushover.cfg` will be used.
Note that you cannot use a null value for int priority. Note that you cannot use a null value for int priority.
### Example
Send a message without a sound, omit String url and String urlTitle. - `cancelPushoverEmergency(String receipt)`
- `cancelPushoverEmergency(String apiToken, String userKey, String receipt)`
- `pushover("test message", 1, null, null, "none")` or The actions which are send using `withEmergencyPriority()` will send a message with [Emergency Priority](https://pushover.net/api#priority).
- `pushover("test message", 1, "", "", "none")` The actions return a receipt identifier (String).
The identifier has to be passed on to the `cancelPushoverEmergency` actions to cancel the notification prior to reaching the `defaultExpire` value of one hour.
### Basic example
Different ways to send a message. You can combine the withXXX methods as you need.
- `sendPushoverMessage(pushoverBuilder("test message"))` or
- `sendPushoverMessage(pushoverBuilder("test message").withEmergencyPriority())` or
- `sendPushoverMessage(pushoverBuilder("test message").withAttachment("/path/to/file.jpeg"))` or
- `sendPushoverMessage(pushoverBuilder("test message").withAttachment("/path/to/file.png").withContentType("image/png"))` or
- `sendPushoverMessage(pushoverBuilder("test message").withApiKey("KEY").withUser("USER").withDevice("DEVICE").withTitle("TITLE").withUrl("URL").withUrlTitle("URL_TITLE").withPriority(0).withSound("SOUND").withAttachment("/path/to/file.png").withContentType("image/png"))`
### Emergency example
```
var String receipt = sendPushoverMessage(pushoverBuilder("Attention, front door opened!").withEmergencyPriority())
// wait for your cancel condition
if( receipt !== null ) {
cancelPushoverEmergency(receipt)
receipt = null
}
```

View File

@ -32,6 +32,17 @@ As described in the Telegram Bot API, this is the manual procedure needed in ord
- Open a browser and invoke `https://api.telegram.org/bot<token>/getUpdates` (where `<token>` is the authentication token previously obtained) - Open a browser and invoke `https://api.telegram.org/bot<token>/getUpdates` (where `<token>` is the authentication token previously obtained)
- Look at the JSON result and write down the value of `result[0].message.chat.id`. That is the chatId. Note that Telegram group chat chatIds are prefixed with a dash "-" that must be included in the config file. (e.g. bot1.chatId: -22334455) - Look at the JSON result and write down the value of `result[0].message.chat.id`. That is the chatId. Note that Telegram group chat chatIds are prefixed with a dash "-" that must be included in the config file. (e.g. bot1.chatId: -22334455)
## Actions
Each of the actions returns `true` on success or `false` on failure.
- `sendTelegram(String group, String message)`: Sends a Telegram via Telegram REST API - direct message
- `sendTelegram(String group, String format, Object... args)`: Sends a Telegram via Telegram REST API - build message with format and args
- `sendTelegramPhoto(String group, String photoURL, String caption)`: Sends a Picture via Telegram REST API
- `sendTelegramPhoto(String group, String photoURL, String caption, Integer timeoutMillis)`: Sends a Picture via Telegram REST API, using custom HTTP timeout
- `sendTelegramPhoto(String group, String photoURL, String caption, String username, String password)`: Sends a Picture, protected by username/password authentication, via Telegram REST API
- `sendTelegramPhoto(String group, String photoURL, String caption, String username, String password, int timeoutMillis, int retries)`: Sends a Picture, protected by username/password authentication, using custom HTTP timeout and retries, via Telegram REST API
## Configuration ## Configuration
The action can be configured in `services/telegram.cfg`. The action can be configured in `services/telegram.cfg`.
@ -86,6 +97,12 @@ end
### Send an image to telegram chat ### Send an image to telegram chat
When sending an image from a URL, do not place the username/password in the URL like this:
`http://<username>:<password>@server/image.png`; pass the credentials to the `sendTelegramPhoto`
method instead.
`http` and `https` are the only protocols allowed.
telegram.rules telegram.rules
```java ```java
@ -110,7 +127,7 @@ then
end end
``` ```
In case your image is behind an authenticated web server (locked by username and password) you can pass the credentials as additional parameters to the extended `sendTelegramPhoto` method. If an image is on a web server requiring authentication, credentials can be passed as additional parameters:
telegram.rules telegram.rules
@ -124,11 +141,7 @@ then
end end
``` ```
Do not use username/password in url like in this example `http://<username>:<password>@server/image.png`; pass the credentials to the `sendTelegramPhoto` method instead. To send a base64 jpeg or png image:
`http` and `https` are the only protocols allowed.
If you would like to send a base64 jpeg or png image.
telegram.rules telegram.rules
@ -141,3 +154,16 @@ then
sendTelegramPhoto("bot1", base64Image, "sent from Openhab") sendTelegramPhoto("bot1", base64Image, "sent from Openhab")
end end
``` ```
To send an image based on an Image Item:
telegram.rules
```java
rule "Send telegram with Image Item image and caption"
when
Item Webcam_Image changed
then
sendTelegramPhoto("bot1", Webcam_Image.state.toFullString, "sent from Openhab")
end
```

View File

@ -43,13 +43,20 @@ This device does not contain a temperature sensor.
### FRITZ!DECT 301 / FRITZ!DECT 300 / Comet DECT ### FRITZ!DECT 301 / FRITZ!DECT 300 / Comet DECT
These devices [FRITZ!DECT 301](https://avm.de/produkte/fritzdect/fritzdect-301/), These devices [FRITZ!DECT 301](https://avm.de/produkte/fritzdect/fritzdect-301/), FRITZ!DECT 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.
FRITZ!DECT 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 FRITZ!Box can handle up to twelve heating thermostats.
The binding provides channels for reading and setting the temperature. 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. 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. The FRITZ!Box has to run at least on firmware FRITZ!OS 6.35.
### FRITZ! groups
The FRITZ!OS supports two different types of groups.
On the one hand there are groups for heating thermostats on the other hand there are groups for switchable outlets and power meters.
The first one provides the same channels like the [FRITZ!DECT 301 / FRITZ!DECT 300 / Comet DECT](http://docs.openhab.org/addons/bindings/avmfritz/readme.html#fritzdect-301--fritzdect-300--comet-dect) devices.
The later one provides the same channels like the [FRITZ!DECT 200 / FRITZ!DECT 210](http://docs.openhab.org/addons/bindings/avmfritz/readme.html#fritzdect-200--fritzdect-210) / [FRITZ!Powerline 546E](http://docs.openhab.org/addons/bindings/avmfritz/readme.html#fritzpowerline-546e) devices.
The FRITZ!Box has to run at least on firmware FRITZ!OS 6.69.
## Discovery ## Discovery
The FRITZ!Box and the powerline adapter are discovered through UPNP in the local network. The FRITZ!Box and the powerline adapter are discovered through UPNP in the local network.
@ -88,21 +95,21 @@ If correct credentials are set in the bridge configuration, connected AHA device
## Supported Channels ## Supported Channels
| Channel Type ID | Item Type | Description | Available on thing | | Channel Type ID | Item Type | Description | Available on thing |
|-----------------|-----------|--------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------| |-----------------|--------------------|--------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------|
| mode | String | States the mode of the device (MANUAL/AUTOMATIC) | FRITZ!DECT 210, FRITZ!DECT 200, FRITZ!Powerline 546E, FRITZ!DECT 301, FRITZ!DECT 300, Comet DECT | | mode | String | States the mode of the device (MANUAL/AUTOMATIC) | FRITZ!DECT 210, FRITZ!DECT 200, FRITZ!Powerline 546E, FRITZ!DECT 301, FRITZ!DECT 300, Comet DECT |
| locked | Contact | Device is locked for switching over external sources (OPEN/CLOSE) | FRITZ!DECT 210, FRITZ!DECT 200, FRITZ!Powerline 546E, FRITZ!DECT 301, FRITZ!DECT 300, Comet DECT | | locked | Contact | Device is locked for switching over external sources (OPEN/CLOSE) | FRITZ!DECT 210, FRITZ!DECT 200, FRITZ!Powerline 546E, FRITZ!DECT 301, FRITZ!DECT 300, Comet DECT |
| device_locked | Contact | Device is locked for switching manually (OPEN/CLOSE) - FRITZ!OS 6.90 | FRITZ!DECT 210, FRITZ!DECT 200, FRITZ!Powerline 546E, FRITZ!DECT 301, FRITZ!DECT 300, Comet DECT | | device_locked | Contact | Device is locked for switching manually (OPEN/CLOSE) - FRITZ!OS 6.90 | FRITZ!DECT 210, FRITZ!DECT 200, FRITZ!Powerline 546E, FRITZ!DECT 301, FRITZ!DECT 300, Comet DECT |
| temperature | Number | Actual measured temperature (in °C) | FRITZ!DECT 210, FRITZ!DECT 200, FRITZ!DECT Repeater 100, FRITZ!DECT 301, FRITZ!DECT 300, Comet DECT | | temperature | Number:Temperature | Actual measured temperature | FRITZ!DECT 210, FRITZ!DECT 200, FRITZ!DECT Repeater 100, FRITZ!DECT 301, FRITZ!DECT 300, Comet DECT |
| energy | Number | Accumulated energy consumption (in kWh) | FRITZ!DECT 210, FRITZ!DECT 200, FRITZ!Powerline 546E | | energy | Number:Energy | Accumulated energy consumption | 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 | | power | Number:Power | Current power consumption | FRITZ!DECT 210, FRITZ!DECT 200, FRITZ!Powerline 546E |
| outlet | Switch | Switchable outlet (ON/OFF) | 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 301, FRITZ!DECT 300, Comet DECT | | actual_temp | Number:Temperature | Actual Temperature of heating thermostat | FRITZ!DECT 301, FRITZ!DECT 300, Comet DECT |
| set_temp | Number | Set Temperature of heating thermostat (in °C) | FRITZ!DECT 301, FRITZ!DECT 300, Comet DECT | | set_temp | Number:Temperature | Set Temperature of heating thermostat | FRITZ!DECT 301, FRITZ!DECT 300, Comet DECT |
| eco_temp | Number | Eco Temperature of heating thermostat (in °C) | FRITZ!DECT 301, FRITZ!DECT 300, Comet DECT | | eco_temp | Number:Temperature | Eco Temperature of heating thermostat | FRITZ!DECT 301, FRITZ!DECT 300, Comet DECT |
| comfort_temp | Number | Comfort Temperature of heating thermostat (in °C) | FRITZ!DECT 301, FRITZ!DECT 300, Comet DECT | | comfort_temp | Number:Temperature | Comfort Temperature of heating thermostat | FRITZ!DECT 301, FRITZ!DECT 300, Comet DECT |
| radiator_mode | String | Mode of heating thermostat (ON/OFF/COMFORT/ECO/BOOST) | FRITZ!DECT 301, FRITZ!DECT 300, Comet DECT | | radiator_mode | String | Mode of heating thermostat (ON/OFF/COMFORT/ECO/BOOST) | FRITZ!DECT 301, 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 301, 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 301, FRITZ!DECT 300, Comet DECT |
| next_temp | Number | Next Set Temperature if scheduler is activated in the FRITZ!Box settings (in °C) - FRITZ!OS 6.80 | FRITZ!DECT 301, FRITZ!DECT 300, Comet DECT | | next_temp | Number:Temperature | Next Set Temperature if scheduler is activated in the FRITZ!Box settings - FRITZ!OS 6.80 | FRITZ!DECT 301, FRITZ!DECT 300, Comet DECT |
| battery_low | Switch | Battery Level Low (ON/OFF) - FRITZ!OS 6.80 | FRITZ!DECT 301, FRITZ!DECT 300, Comet DECT | | battery_low | Switch | Battery Level Low (ON/OFF) - FRITZ!OS 6.80 | FRITZ!DECT 301, FRITZ!DECT 300, Comet DECT |
## Full Example ## Full Example
@ -114,6 +121,8 @@ Bridge avmfritz:fritzbox:1 @ "Office" [ ipAddress="192.168.x.x", password="xxx",
Thing FRITZ_DECT_200 xxxxxxxxxxxx "FRITZ!DECT 200 #1" @ "Living Room" [ ain="xxxxxxxxxxxx" ] Thing FRITZ_DECT_200 xxxxxxxxxxxx "FRITZ!DECT 200 #1" @ "Living Room" [ ain="xxxxxxxxxxxx" ]
Thing FRITZ_Powerline_546E yy_yy_yy_yy_yy_yy "FRITZ!Powerline 546E #2" @ "Office" [ ain="yy:yy:yy:yy:yy:yy" ] Thing FRITZ_Powerline_546E yy_yy_yy_yy_yy_yy "FRITZ!Powerline 546E #2" @ "Office" [ ain="yy:yy:yy:yy:yy:yy" ]
Thing Comet_DECT aaaaaabbbbbb "Comet DECT #3" @ "Office" [ ain="aaaaaabbbbbb" ] Thing Comet_DECT aaaaaabbbbbb "Comet DECT #3" @ "Office" [ ain="aaaaaabbbbbb" ]
Thing FRITZ_GROUP_HEATING AA_AA_AA_900 "Heating group" @ "Office" [ ain="AA:AA:AA-900" ]
Thing FRITZ_GROUP_SWITCH BB_BB_BB_900 "Switch group" @ "Living Room" [ ain="BB:BB:BB-900" ]
} }
``` ```
@ -121,18 +130,20 @@ demo.items:
```java ```java
Switch Outlet1 "Switchable outlet" { channel="avmfritz:FRITZ_DECT_200:1:xxxxxxxxxxxx:outlet" } Switch Outlet1 "Switchable outlet" { channel="avmfritz:FRITZ_DECT_200:1:xxxxxxxxxxxx:outlet" }
Number Temperature1 "Actual measured temperature [%.1f °C]" { channel="avmfritz:FRITZ_DECT_200:1:xxxxxxxxxxxx:temperature" } Number:Temperature Temperature1 "Current measured temperature [%.1f %unit%]" { channel="avmfritz:FRITZ_DECT_200:1:xxxxxxxxxxxx:temperature" }
Number Energy1 "Accumulated energy consumption [%.3f Wh]" { channel="avmfritz:FRITZ_DECT_200:1:xxxxxxxxxxxx:energy" } Number:Energy Energy1 "Accumulated energy consumption [%.3f kWh]" { channel="avmfritz:FRITZ_DECT_200:1:xxxxxxxxxxxx:energy" }
Number Power1 "Current power consumption [%.2f W]" { channel="avmfritz:FRITZ_DECT_200:1:xxxxxxxxxxxx:power" } Number:Power Power1 "Current power consumption [%.2f %unit%]" { channel="avmfritz:FRITZ_DECT_200:1:xxxxxxxxxxxx:power" }
Switch Outlet2 { channel="avmfritz:FRITZ_Powerline_546E:1:yy_yy_yy_yy_yy_yy:outlet" } Switch Outlet2 "Switchable outlet" { channel="avmfritz:FRITZ_Powerline_546E:1:yy_yy_yy_yy_yy_yy:outlet" }
Group gCOMETDECT "Comet DECT heating thermostat" <temperature> Number:Temperature COMETDECTTemperature "Current measured temperature [%.1f %unit%]" { channel="avmfritz:Comet_DECT:1:aaaaaabbbbbb:actual_temp" }
Number:Temperature COMETDECTSetTemperature "Thermostat temperature set point [%.1f %unit%]" { channel="avmfritz:Comet_DECT:1:aaaaaabbbbbb:set_temp" }
String COMETDECTRadiatorMode "Radiator mode [%s]" { channel="avmfritz:Comet_DECT:1:aaaaaabbbbbb:radiator_mode" }
Switch COMETDECTBattery "Battery low" { channel="avmfritz:Comet_DECT:1:aaaaaabbbbbb:battery_low" }
Number COMETDECTActualTemp "Actual measured temperature [%.1f °C]" (gCOMETDECT) { channel="avmfritz:Comet_DECT:1:aaaaaabbbbbb:actual_temp" } Number:Temperature FRITZ_GROUP_HEATINGSetTemperature "Group temperature set point [%.1f %unit%]" { channel="avmfritz:FRITZ_GROUP_HEATING:1:AA_AA_AA_900:set_temp" }
Number COMETDECTSetTemp "Thermostat temperature set point [%.1f °C]" (gCOMETDECT) { channel="avmfritz:Comet_DECT:1:aaaaaabbbbbb:set_temp" }
String COMETDECTRadiatorMode "Radiator mode [%s]" (gCOMETDECT) { channel="avmfritz:Comet_DECT:1:aaaaaabbbbbb:radiator_mode" } Switch Outlet3 "Group switch" { channel="avmfritz:FRITZ_GROUP_SWITCH:1:BB_BB_BB_900:outlet" }
Switch COMETDECTBattery "Battery low" (gCOMETDECT) { channel="avmfritz:Comet_DECT:1:aaaaaabbbbbb:battery_low" }
``` ```
demo.sitemap: demo.sitemap:
@ -148,14 +159,14 @@ sitemap demo label="Main Menu"{
} }
Frame label="FRITZ!Powerline 546E switchable outlet" { Frame label="FRITZ!Powerline 546E switchable outlet" {
Switch item=Outlet2 Switch item=Outlet2 icon="poweroutlet"
} }
Frame "Comet DECT heating thermostat" { Frame "Comet DECT heating thermostat" {
Text item=COMETDECTActualTemp icon="temperature" Text item=COMETDECTTemperature icon="temperature"
Setpoint item=COMETDECTSetTemp minValue=8.0 maxValue=28.0 step=0.5 icon="temperature" Setpoint item=COMETDECTSetTemperature minValue=8.0 maxValue=28.0 step=0.5 icon="temperature"
Selection item=COMETDECTRadiatorMode mappings=["ON"="ON", "OFF"="OFF", "COMFORT"="COMFORT", "ECO"="ECO", "BOOST"="BOOST"] Selection item=COMETDECTRadiatorMode mappings=["ON"="ON", "OFF"="OFF", "COMFORT"="COMFORT", "ECO"="ECO", "BOOST"="BOOST"] icon="heating"
Switch item=COMETDECTBattery icon="battery" Switch item=COMETDECTBattery icon="lowbattery"
} }
} }
``` ```

View File

@ -0,0 +1,141 @@
---
id: bosesoundtouch
label: Bose SoundTouch
title: Bose SoundTouch - Bindings
type: binding
description: "This binding supports the Bose SoundTouch multiroom system."
since: 2x
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Bose SoundTouch Binding
This binding supports the Bose SoundTouch multiroom system.
## Supported Things
The following Bose devices are supported:
| Name | Thing Type |
|---------------------------------------|-----------------------------|
| Bose SoundTouch 10 | 10 |
| Bose SoundTouch 20 | 20 |
| Bose SoundTouch 30 | 30 |
| Bose SoundTouch 300 | 300 |
| Bose Wave SoundTouch Music System IV | waveSoundTouchMusicSystemIV |
| Bose SoundTouch Wireless Link Adapter | wirelessLinkAdapter |
| Bose SoundTouch SA-5 Amplifier | sa5Amplifier |
| Any other Bose SoundTouch device | device |
## Discovery
Speakers are automatically discovered using mDNS in the local network.
## Binding Configuration
The binding has no configuration options, all configuration is done at Thing level.
## Thing Configuration
All thing types have the same configuration parameters:
| Parameter Name | Type | Required | Description |
|----------------|--------|----------|--------------------------------------------------------------|
| host | String | Yes | The host name or IP address of the device |
| macAddress | String | Yes | The MAC address of the used interface (format "123456789ABC")|
Both are set when using discovery. For manual configuration, these values can be found in the Bose smartphone app (Settings -> About -> Device Name).
Note that the device might have two MAC addresses, one for ethernet and one for Wifi.
## Channels
All devices share the same set of channels, while some of them might not be available on all devices.
| Channel ID | Item Type | Description |
|---------------------------|-----------|--------------------------------------------------------------|
| keyCode | String | Simulates pushing a remote control button |
| mute | Switch | Mutes the sound |
| nowPlayingAlbum | String | Current playing album name |
| nowPlayingArtist | String | Current playing artist name |
| nowPlayingArtwork | Image | Artwork for the current playing song |
| nowPlayingDescription | String | Description to current playing song |
| nowPlayingGenre | String | Genre of current playing song |
| nowPlayingItemName | String | Visible description shown in display |
| nowPlayingStationLocation | String | Location of current playing radio station |
| nowPlayingStationName | String | Name of current playing radio station |
| nowPlayingTrack | String | Track currently playing |
| operationMode | String | Current Operation Mode |
| playerControl | Player | Control the Player |
| power | Switch | SoundTouch power state |
| preset | Number | 1-6 Preset of Soundtouch, >7 Binding Presets |
| rateEnabled | Switch | Current source allows rating |
| saveAsPreset | Number | A selected presetable item is saved as preset with number >6 |
| skipEnabled | Switch | Current source allows skipping to next track |
| skipPreviousEnabled | Switch | Current source allows scrolling through tracks |
| volume | Dimmer | Set or get the volume |
| bass | Number | Bass (-9 minimum, 0 maximum) |
## Full Example
Things:
```
bosesoundtouch:device:demo @ "Living" [ host="192.168.1.2", macAddress="123456789ABC" ]
```
Items:
```
Switch Bose1_Power "Power: [%s]" <switch> { channel="bosesoundtouch:device:demo:power" }
Dimmer Bose1_Volume "Volume: [%d %%]" <volume> { channel="bosesoundtouch:device:demo:volume" }
Number Bose1_Bass "Bass: [%d %%]" <volume> { channel="bosesoundtouch:device:demo:bass" }
Switch Bose1_Mute "Mute: [%s]" <volume_mute> { channel="bosesoundtouch:device:demo:mute" }
String Bose1_OperationMode "OperationMode: [%s]" <text> { channel="bosesoundtouch:device:demo:operationMode" }
String Bose1_PlayerControl "Player Control: [%s]" <text> { channel="bosesoundtouch:device:demo:playerControl" }
Number Bose1_Preset "Preset: [%d]" <text> { channel="bosesoundtouch:device:demo:preset" }
Number Bose1_SaveAsPreset "Save as Preset: [%d]" <text> { channel="bosesoundtouch:device:demo:saveAsPreset" }
String Bose1_KeyCode "Key Code: [%s]" <text> { channel="bosesoundtouch:device:demo:keyCode" }
Switch Bose1_RateEnabled "Rate: [%s]" <switch> { channel="bosesoundtouch:device:demo:rateEnabled" }
Switch Bose1_SkipEnabled "Skip: [%s]" <switch> { channel="bosesoundtouch:device:demo:skipEnabled" }
Switch Bose1_SkipPreviousEnabled "SkipPrevious: [%s]" <switch> { channel="bosesoundtouch:device:demo:skipPreviousEnabled" }
String Bose1_nowPlayingAlbum "Album: [%s]" <text> { channel="bosesoundtouch:device:demo:nowPlayingAlbum" }
String Bose1_nowPlayingArtist "Artist: [%s]" <text> { channel="bosesoundtouch:device:demo:nowPlayingArtist" }
Image Bose1_nowPlayingArtwork "Artwork" <text> { channel="bosesoundtouch:device:demo:nowPlayingArtwork" }
String Bose1_nowPlayingDescription "Description: [%s]" <text> { channel="bosesoundtouch:device:demo:nowPlayingDescription" }
String Bose1_nowPlayingGenre "Genre: [%s]" <text> { channel="bosesoundtouch:device:demo:nowPlayingGenre" }
String Bose1_nowPlayingItemName "Playing: [%s]" <text> { channel="bosesoundtouch:device:demo:nowPlayingItemName" }
String Bose1_nowPlayingStationLocation "Radio Location: [%s]" <text> { channel="bosesoundtouch:device:demo:nowPlayingStationLocation" }
String Bose1_nowPlayingStationName "Radio Name: [%s]" <text> { channel="bosesoundtouch:device:demo:nowPlayingStationName" }
String Bose1_nowPlayingTrack "Track: [%s]" <text> { channel="bosesoundtouch:device:demo:nowPlayingTrack" }
```
Sitemap:
```
sitemap demo label="Bose Test Items"
{
Frame label="Bose 1" {
Switch item=Bose1_Power
Slider item=Bose1_Volume
Number item=Bose1_Bass
Switch item=Bose1_Mute
Text item=Bose1_OperationMode
Text item=Bose1_PlayerControl
Number item=Bose1_Preset
Number item=Bose1_SaveAsPreset
Text item=Bose1_KeyCode
Text item=Bose1_nowPlayingAlbum
Text item=Bose1_nowPlayingArtist
Text item=Bose1_nowPlayingArtwork
Text item=Bose1_nowPlayingDescription
Text item=Bose1_nowPlayingGenre
Text item=Bose1_nowPlayingItemName
Text item=Bose1_nowPlayingStationLocation
Text item=Bose1_nowPlayingTrack
}
}
```

View File

@ -34,6 +34,8 @@ This binding can be configured in the file `services/bticino.cfg`.
| webserver.port | 20000 | No | OpenWebNet gateway port | | webserver.port | 20000 | No | OpenWebNet gateway port |
| webserver.passwd | 12345 | No | OpenWebNet gateway password | | webserver.passwd | 12345 | No | OpenWebNet gateway password |
| webserver.rescan_secs | 120 | No | OpenWebNet bus status rescan interval | | webserver.rescan_secs | 120 | No | OpenWebNet bus status rescan interval |
| webserver.heating_zones | 0 | No | OpenWebNet heating zones |
| webserver.shutter_run_msecs | 0 | No | OpenWebNet Runtime of Shutter to calculate Position Feedback |
A sample configuration could look like: A sample configuration could look like:
@ -86,6 +88,8 @@ Group Corridor
Group Living Group Living
Group Plugs Group Plugs
Group RollerUpShutters Group RollerUpShutters
Group Heating
Group HeatingActor
// Sceneries // Sceneries
Switch Movie_Scenery "Movie scenery" Switch Movie_Scenery "Movie scenery"
@ -103,6 +107,85 @@ Switch Doorbell_Light "Doorbell courtesy light" (Entrance, Lights) {bticino="if=
// Rollershutters // Rollershutters
Rollershutter RollUpShutter_1 "Roller-up shutter 1" (Living, RollerUpShutters) {bticino="if=webserver;who=2;what=0;where=46"} Rollershutter RollUpShutter_1 "Roller-up shutter 1" (Living, RollerUpShutters) {bticino="if=webserver;who=2;what=0;where=46"}
Rollershutter RollUpShutter_2 "Roller-up shutter 2" (Living, RollerUpShutters) {bticino="if=webserver;who=2;what=0;where=47"} Rollershutter RollUpShutter_2 "Roller-up shutter 2" (Living, RollerUpShutters) {bticino="if=webserver;who=2;what=0;where=47"}
//Heating
Number ActualTemp_1 "Actual Temperature 1 [%.1f °C]" <temperature> (Heating) {bticino="if=default;who=4;what=0;where=1"}
Number ControlTemp_1 "Control Temperature 1 [%.1f °C]" <temperature> (Heating) {bticino="if=default;who=4;what=12;where=1"}
Number OffsetTemp_1 "Offset Temperature 1 [MAP(yourbticino_offset.map):%s]" <heating_offset> (Heating) {bticino="if=default;who=4;what=13;where=1"}
Number SetTemp_1 "Set Temperature [%.1f °C]" <heating_set> (Heating) {bticino="if=default;who=4;what=14;where=1"}
Number HCtrlMode_1 "Control Mode [MAP(yourbticino.map):%s]" <settings> (Heating) {bticino="if=default;who=4;what=100;where=1"}
Number HOpMode_1 "Operation Mode [MAP(yourbticino.map):%s]" <heating_cooling> (Heating) {bticino="if=default;who=4;what=101;where=1"}
Contact HValve_1 "Actor 1 [MAP(yourbticino.map):%s]" <undefloor_heating> (HeatingActor) {bticino="if=default;who=4;what=20;where=1"}
Contact HPumpe "Pump [MAP(yourbticino.map):%s]" <pump> (HeatingActor) {bticino="if=default;who=4;what=20;where=0"}
Number MHCtrlMode "Main Unit Control Mode [MAP(yourbticino.map):%s]" <heating> (Heating) {bticino="if=default;who=4;what=100;where=0"}
Number HMCtrlRemote "Main Unit Remote [MAP(yourbticino.map):%s]" <heating> (Heating) {bticino="if=default;who=4;what=102;where=0"}
String HMCtrlStatus "Main Unit Status [%s]" <heating> (Heating) {bticino="if=default;who=4;what=103;where=0"}
String HMCtrlFailure "Main Unit Failure [%s]" <heating> (Heating) {bticino="if=default;who=4;what=104;where=0"}
```
transform/yourbticino.map
```
CLOSED=Heating OFF
OPEN=Heating ON
1=HEATING
2=COLLING
20=Remote Control disabled
21=Remote Control enabled
102=FREEZE PROTECTION
103=OFF
110=MANUAL
111=AUTOMATIK
202=FREEZE PROTECTION
203=OFF
210=MANUAL
211=AUTOMATIK
302=FREEZE PROTECTION
303=OFF
310=MANUAL
311=AUTOMATIK
1101=Program Winter 1
1102=Program Winter 2
1103=Program Winter 3
1201=Scenario Winter 1
1202=Scenario Winter 2
..
1216=Scenario Winter 16
2101=Program Summer 1
2102=Program Summer 2
2103=Program Summer 3
2201=Scenario Winter 1
2202=Scenario Winter 2
..
2216=Scenario Winter 16
```
transform/yourbticino_offset.map
```
NULL=----
0=+0 °C
1=+1 °C
2=+2 °C
3=+3 °C
4=-OFF-
5=FREEZE
-1=-1 °C
-2=-2 °C
-3=-3 °C
``` ```
sitemaps/yourbticino.sitemap sitemaps/yourbticino.sitemap
@ -118,6 +201,23 @@ sitemap yourbticino label="Main panel" {
Frame label="Sceneries" { Frame label="Sceneries" {
Switch item=Movie_Scenery mappings=[OFF="Turn OFF",ON="Turn ON"] Switch item=Movie_Scenery mappings=[OFF="Turn OFF",ON="Turn ON"]
} }
Frame label="Heating Main Control Unit" {
Selection item=HMCtrlMode label="Control Mode Main Unit [%.1f]" mappings=[103="OFF", 102="FREEZE PROTECTION", 1101="Program Winter 1", 1201="Scenario Winter 1"]
Text item=HMCtrlRemote
Text item=HMCtrlStatus
Text item=HMCtrlFailure
Default item=HPumpe
}
Frame label="Heating Room 1" {
Text item=ActualTemp_1
Text item=OffsetTemp_1
Setpoint item=SetTemp_1 label="Set Point Temperature [%.1f °C]" step=0.5 minValue=16 maxValue=25
Text item=ControlTemp_1
Selection item=HCtrlMode_1 label="Control Mode [%.1f]" mappings=[103="OFF", 110="MANUAL", 111="AUTOMATIC", 102="FREEZE PROTECTION"]
Text item=HOpMode_1
Text item=HValve_1
}
} }
``` ```
@ -148,8 +248,8 @@ then
} }
end end
// Doorbel ringer light // Doorbell ringer light
rule "Doorbel ringer" rule "Doorbell ringer"
when when
Item Doorbell_Light received update Item Doorbell_Light received update
then then

View File

@ -67,16 +67,16 @@ String fboxName "FBox Model [%s]" {fritzboxtr064="modelNam
String fboxManufacturer "FBox Manufacturer [%s]" {fritzboxtr064="manufacturerName"} String fboxManufacturer "FBox Manufacturer [%s]" {fritzboxtr064="manufacturerName"}
String fboxSerial "FBox Serial [%s]" {fritzboxtr064="serialNumber"} String fboxSerial "FBox Serial [%s]" {fritzboxtr064="serialNumber"}
String fboxVersion "FBox Version [%s]" {fritzboxtr064="softwareVersion"} String fboxVersion "FBox Version [%s]" {fritzboxtr064="softwareVersion"}
# get wan ip if FritzBox establishes the internet connection (e. g. via DSL) // get wan ip if FritzBox establishes the internet connection (e. g. via DSL)
String fboxWanIP "FBox WAN IP [%s]" {fritzboxtr064="wanip"} String fboxWanIP "FBox WAN IP [%s]" {fritzboxtr064="wanip"}
# get wan ip if FritzBox uses internet connection of external router // get wan ip if FritzBox uses internet connection of external router
String fboxWanIPExternal "FBox external WAN IP [%s]" {fritzboxtr064="externalWanip"} String fboxWanIPExternal "FBox external WAN IP [%s]" {fritzboxtr064="externalWanip"}
Switch fboxWifi24 "2,4GHz Wifi" {fritzboxtr064="wifi24Switch"} Switch fboxWifi24 "2,4GHz Wifi" {fritzboxtr064="wifi24Switch"}
Switch fboxWifi50 "5,0GHz Wifi" {fritzboxtr064="wifi50Switch"} Switch fboxWifi50 "5,0GHz Wifi" {fritzboxtr064="wifi50Switch"}
Switch fboxGuestWifi "Guest Wifi" {fritzboxtr064="wifiGuestSwitch"} Switch fboxGuestWifi "Guest Wifi" {fritzboxtr064="wifiGuestSwitch"}
Contact cFboxMacOnline "Presence (WiFi) [%s]" {fritzboxtr064="maconline:11-11-11-11-11-11" } Contact cFboxMacOnline "Presence (WiFi) [%s]" {fritzboxtr064="maconline:11-11-11-11-11-11" }
# WAN statistics // WAN statistics
String fboxWanAccessType "FBox WAN access type [%s]" {fritzboxtr064="wanWANAccessType"} String fboxWanAccessType "FBox WAN access type [%s]" {fritzboxtr064="wanWANAccessType"}
Number fboxWanLayer1UpstreamMaxBitRate "FBox WAN us max bit rate [%s]" {fritzboxtr064="wanLayer1UpstreamMaxBitRate"} Number fboxWanLayer1UpstreamMaxBitRate "FBox WAN us max bit rate [%s]" {fritzboxtr064="wanLayer1UpstreamMaxBitRate"}
@ -85,7 +85,7 @@ String fboxWanPhysicalLinkStatus "FBox WAN physical link status [%s]" {fritzbox
Number fboxWanTotalBytesSent "WAN total bytes sent [%s]" {fritzboxtr064="wanTotalBytesSent"} Number fboxWanTotalBytesSent "WAN total bytes sent [%s]" {fritzboxtr064="wanTotalBytesSent"}
Number fboxWanTotalBytesReceived "WAN total bytes received [%s]" {fritzboxtr064="wanTotalBytesReceived"} Number fboxWanTotalBytesReceived "WAN total bytes received [%s]" {fritzboxtr064="wanTotalBytesReceived"}
# DSL statistics // DSL statistics
Contact fboxDslEnable "FBox DSL Enable [%s]" {fritzboxtr064="dslEnable"} Contact fboxDslEnable "FBox DSL Enable [%s]" {fritzboxtr064="dslEnable"}
String fboxDslStatus "FBox DSL Status [%s]" {fritzboxtr064="dslStatus"} String fboxDslStatus "FBox DSL Status [%s]" {fritzboxtr064="dslStatus"}
@ -101,30 +101,25 @@ Number fboxDslFECErrors "DSL FEC Errors [%s]" {fritzboxtr064="dslFECErrors"}
Number fboxDslHECErrors "DSL HEC Errors [%s]" {fritzboxtr064="dslHECErrors"} Number fboxDslHECErrors "DSL HEC Errors [%s]" {fritzboxtr064="dslHECErrors"}
Number fboxDslCRCErrors "DSL CRC Errors [%s]" {fritzboxtr064="dslCRCErrors"} Number fboxDslCRCErrors "DSL CRC Errors [%s]" {fritzboxtr064="dslCRCErrors"}
# only when using call monitor // only when using call monitor
Switch fboxRinging "Phone ringing [%s]" {fritzboxtr064="callmonitor_ringing" } Switch fboxRinging "Phone ringing [%s]" {fritzboxtr064="callmonitor_ringing" }
Switch fboxRinging_Out "Phone ringing [%s]" {fritzboxtr064="callmonitor_outgoing" } Switch fboxRinging_Out "Phone ringing [%s]" {fritzboxtr064="callmonitor_outgoing" }
Call fboxIncomingCall "Incoming call: [%1$s to %2$s]" {fritzboxtr064="callmonitor_ringing" } Call fboxIncomingCall "Incoming call: [%1$s to %2$s]" {fritzboxtr064="callmonitor_ringing" }
Call fboxOutgoingCall "Outgoing call: [%1$s to %2$s]" {fritzboxtr064="callmonitor_outgoing" } Call fboxOutgoingCall "Outgoing call: [%1$s to %2$s]" {fritzboxtr064="callmonitor_outgoing" }
# resolve numbers to names according phonebook // resolve numbers to names based on phonebook
Call fboxIncomingCallResolved "Incoming call: [%1$s to %2$s]" {fritzboxtr064="callmonitor_ringing:resolveName" } Call fboxIncomingCallResolved "Incoming call: [%1$s to %2$s]" {fritzboxtr064="callmonitor_ringing:resolveName" }
# Telephone answering machine (TAM) items // Telephone answering machine (TAM) items
# Number after tamSwitch is ID of configured TAM, start with 0 // Number after tamSwitch is ID of configured TAM, start with 0
Switch fboxTAM0Switch "Answering machine ID 0" {fritzboxtr064="tamSwitch:0"} Switch fboxTAM0Switch "Answering machine ID 0" {fritzboxtr064="tamSwitch:0"}
Number fboxTAM0NewMsg "New Messages TAM 0 [%s]" {fritzboxtr064="tamNewMessages:0"} Number fboxTAM0NewMsg "New Messages TAM 0 [%s]" {fritzboxtr064="tamNewMessages:0"}
# Missed calls: specify the number of last days which should be searched for missed calls // Missed calls: specify the number of last days which should be searched for missed calls
Number fboxMissedCalls "Missed Calls [%s]" {fritzboxtr064="missedCallsInDays:5"} Number fboxMissedCalls "Missed Calls [%s]" {fritzboxtr064="missedCallsInDays:5"}
``` ```
## Known issues
See issues [here](https://github.com/gitbock/fritzboxtr064/issues?q=is%3Aissue+is%3Aclosed).
## Examples and Hints ## Examples and Hints
### Sitemap ### Sitemap
@ -138,14 +133,15 @@ Use a map for presence detection item:
Create file `transform/presence.map` and add: Create file `transform/presence.map` and add:
``` ```
1=present OPEN=present
0=not present CLOSED=not present
NULL=unknown
``` ```
Now, as item configuration use: Now, as item configuration use (the addon "Map Transformation" must be installed):
``` ```
Contact cFboxMacOnline "Presence (Wifi) [MAP(presence.map):%d]" <present> {fritzboxtr064="maconline:11-22-33-44-55-66 } Contact cFboxMacOnline "Presence (Wifi) [MAP(presence.map):%s]" <presence> {fritzboxtr064="maconline:11-22-33-44-55-66 }
``` ```
### Rules ### Rules
@ -159,9 +155,11 @@ when
Item fboxRinging changed from OFF to ON Item fboxRinging changed from OFF to ON
then then
logInfo("Anrufermeldung", "Generating caller name message...") logInfo("Anrufermeldung", "Generating caller name message...")
// fboxIncoming call receives numbers/name of incoming call
val CallType incCall = fboxIncomingCall.state as CallType val incCall = fboxIncomingCall.state as StringListType
var callerName = incCall.destNum //destNum is external number OR resolved Name if no phonebook entry exists val callerNumber = incCall.getValue(1)
val incCallResolved = fboxIncomingCallResolved.state as StringListType
val callerName = incCallResolved.getValue(1)
// do something with callerName // do something with callerName
end end

View File

@ -134,6 +134,9 @@ Think in hours when configuring (one hour = 3600)
- **timeout** - **timeout**
The timeout in seconds for connections to a Homematic gateway (default = 15) The timeout in seconds for connections to a Homematic gateway (default = 15)
- **discoveryTimeToLive**
The time to live in seconds for discovery results of a Homematic gateway (default = -1, which means infinite)
- **socketMaxAlive** - **socketMaxAlive**
The maximum lifetime of a pooled socket connection to the Homematic gateway in seconds (default = 900) The maximum lifetime of a pooled socket connection to the Homematic gateway in seconds (default = 900)

View File

@ -64,9 +64,9 @@ demo.things:
Bridge irtrans:ethernet:kitchen [ ipAddress="192.168.0.56", portNumber=21000, bufferSize=1024, responseTimeOut=100, pingTimeOut=2000, reconnectInterval=10 ] Bridge irtrans:ethernet:kitchen [ ipAddress="192.168.0.56", portNumber=21000, bufferSize=1024, responseTimeOut=100, pingTimeOut=2000, reconnectInterval=10 ]
{ {
Channels: Channels:
Receiver : any [remote="*", command="*"] Type receiver : any [remote="*", command="*"]
Receiver : telenet_power [remote="telenet", command="power"] Type receiver : telenet_power [remote="telenet", command="power"]
Blaster : samsung [led="E", remote="samsung", command="*"] Type blaster : samsung [led="E", remote="samsung", command="*"]
} }
``` ```
@ -76,10 +76,10 @@ In the above example, the first channel will be updated when any IR command from
Bridge irtrans:ethernet:technicalfacilities [ ipAddress="192.168.0.58", portNumber=21000, bufferSize=1024, responseTimeOut=100, pingTimeOut=2000, reconnectInterval=10 ] Bridge irtrans:ethernet:technicalfacilities [ ipAddress="192.168.0.58", portNumber=21000, bufferSize=1024, responseTimeOut=100, pingTimeOut=2000, reconnectInterval=10 ]
{ {
Channels: Channels:
Receiver : any [remote="*", command="*"] Type receiver : any [remote="*", command="*"]
Blaster : telenet1 [led="2", remote="telenet", command="*"] Type blaster : telenet1 [led="2", remote="telenet", command="*"]
Blaster : telenet2 [led="1", remote="telenet", command="*"] Type blaster : telenet2 [led="1", remote="telenet", command="*"]
Blaster : appletv [led="3", remote="appletv", command="*"] Type blaster : appletv [led="3", remote="appletv", command="*"]
} }
``` ```

View File

@ -66,6 +66,7 @@ The following configuration options are available for the Kodi binding:
The Kodi thing requires the IP address of the device hosting your Kodi media center instance, the TCP port to access it (default: `9090`) and the HTTP port to build URLs to the Kodi webinterface for downloading thumbnail and fanart images (default: `8080`). The Kodi thing requires the IP address of the device hosting your Kodi media center instance, the TCP port to access it (default: `9090`) and the HTTP port to build URLs to the Kodi webinterface for downloading thumbnail and fanart images (default: `8080`).
You optionally can define a `httpUser` and a `httpPassword` parameter if the access to your Kodi webinterface is protected. You optionally can define a `httpUser` and a `httpPassword` parameter if the access to your Kodi webinterface is protected.
The IP address will be found by the auto-discovery feature. The IP address will be found by the auto-discovery feature.
You can use the `notificationVolume` property for setting a default volume (in %) as well as a `notificationTimeout` (in s) to be used to play notifications.
A manual setup through a `things/kodi.things` file could look like this: A manual setup through a `things/kodi.things` file could look like this:
@ -82,7 +83,7 @@ The Kodi thing supports the following channels:
| mute | Switch | Mute/unmute your playback | | mute | Switch | Mute/unmute your playback |
| volume | Dimmer | Read or control the volume of your playback | | volume | Dimmer | Read or control the volume of your playback |
| control | Player | Control the Kodi player, e.g. `PLAY`, `PAUSE`, `NEXT`, `PREVIOUS`, `FASTFORWARD`, `REWIND` | | control | Player | Control the Kodi player, e.g. `PLAY`, `PAUSE`, `NEXT`, `PREVIOUS`, `FASTFORWARD`, `REWIND` |
| stop | Switch | Write `ON` to this channel: Stops the Kodi player. If this channel is `ON`, the player is stopped, otherwise kodi is in another state (see control channel) | | stop | Switch | Write `ON` to this channel: Stops the Kodi player. If this channel is `ON`, the player is stopped, otherwise Kodi is in another state (see control channel) |
| title | String | Title of the currently played song/movie/tv episode | | title | String | Title of the currently played song/movie/tv episode |
| showtitle | String | Title of the currently played tv-show; empty for other types | | showtitle | String | Title of the currently played tv-show; empty for other types |
| album | String | Album name of the currently played song | | album | String | Album name of the currently played song |
@ -96,21 +97,32 @@ The Kodi thing supports the following channels:
| input | String | Allows to control Kodi. Valid values are: `Up`, `Down`, `Left`, `Right`, `Select`, `Back`, `Home`, `ContextMenu`, `Info`, `ShowOSD`, `ShowPlayerProcessInfo`, `SendText` and `ExecuteAction` | | input | String | Allows to control Kodi. Valid values are: `Up`, `Down`, `Left`, `Right`, `Select`, `Back`, `Home`, `ContextMenu`, `Info`, `ShowOSD`, `ShowPlayerProcessInfo`, `SendText` and `ExecuteAction` |
| inputtext | String | This channel emulates a keyboard input | | inputtext | String | This channel emulates a keyboard input |
| inputaction | String | Send a predefined action to the Kodi Player to control the UI and/or perform other tasks. Valid values are: `left`, `right`, `up`, `down`, `pageup`, `pagedown`, `select`, `highlight`, `parentdir`, `parentfolder`, `back`, `menu`, `previousmenu`, `info`, `pause`, `stop`, `skipnext`, `skipprevious`, `fullscreen`, `aspectratio`, `stepforward`, `stepback`, `bigstepforward`, `bigstepback`, `chapterorbigstepforward`, `chapterorbigstepback`, `osd`, `showsubtitles`, `nextsubtitle`, `cyclesubtitle`, `playerdebug`, `codecinfo`, `playerprocessinfo`, `nextpicture`, `previouspicture`, `zoomout`, `zoomin`, `playlist`, `queue`, `zoomnormal`, `zoomlevel1`, `zoomlevel2`, `zoomlevel3`, `zoomlevel4`, `zoomlevel5`, `zoomlevel6`, `zoomlevel7`, `zoomlevel8`, `zoomlevel9`, `nextcalibration`, `resetcalibration`, `analogmove`, `analogmovex`, `analogmovey`, `rotate`, `rotateccw`, `close`, `subtitledelayminus`, `subtitledelay`, `subtitledelayplus`, `audiodelayminus`, `audiodelay`, `audiodelayplus`, `subtitleshiftup`, `subtitleshiftdown`, `subtitlealign`, `audionextlanguage`, `verticalshiftup`, `verticalshiftdown`, `nextresolution`, `audiotoggledigital`, `number0`, `number1`, `number2`, `number3`, `number4`, `number5`, `number6`, `number7`, `number8`, `number9`, `smallstepback`, `fastforward`, `rewind`, `play`, `playpause`, `switchplayer`, `delete`, `copy`, `move`, `screenshot`, `rename`, `togglewatched`, `scanitem`, `reloadkeymaps`, `volumeup`, `volumedown`, `mute`, `backspace`, `scrollup`, `scrolldown`, `analogfastforward`, `analogrewind`, `moveitemup`, `moveitemdown`, `contextmenu`, `shift`, `symbols`, `cursorleft`, `cursorright`, `showtime`, `analogseekforward`, `analogseekback`, `showpreset`, `nextpreset`, `previouspreset`, `lockpreset`, `randompreset`, `increasevisrating`, `decreasevisrating`, `showvideomenu`, `enter`, `increaserating`, `decreaserating`, `setrating`, `togglefullscreen`, `nextscene`, `previousscene`, `nextletter`, `prevletter`, `jumpsms2`, `jumpsms3`, `jumpsms4`, `jumpsms5`, `jumpsms6`, `jumpsms7`, `jumpsms8`, `jumpsms9`, `filter`, `filterclear`, `filtersms2`, `filtersms3`, `filtersms4`, `filtersms5`, `filtersms6`, `filtersms7`, `filtersms8`, `filtersms9`, `firstpage`, `lastpage`, `guiprofile`, `red`, `green`, `yellow`, `blue`, `increasepar`, `decreasepar`, `volampup`, `volampdown`, `volumeamplification`, `createbookmark`, `createepisodebookmark`, `settingsreset`, `settingslevelchange`, `stereomode`, `nextstereomode`, `previousstereomode`, `togglestereomode`, `stereomodetomono`, `channelup`, `channeldown`, `previouschannelgroup`, `nextchannelgroup`, `playpvr`, `playpvrtv`, `playpvrradio`, `record`, `togglecommskip`, `showtimerrule`, `leftclick`, `rightclick`, `middleclick`, `doubleclick`, `longclick`, `wheelup`, `wheeldown`, `mousedrag`, `mousemove`, `tap`, `longpress`, `pangesture`, `zoomgesture`, `rotategesture`, `swipeleft`, `swiperight`, `swipeup`, `swipedown`, `error`, `noop` | | inputaction | String | Send a predefined action to the Kodi Player to control the UI and/or perform other tasks. Valid values are: `left`, `right`, `up`, `down`, `pageup`, `pagedown`, `select`, `highlight`, `parentdir`, `parentfolder`, `back`, `menu`, `previousmenu`, `info`, `pause`, `stop`, `skipnext`, `skipprevious`, `fullscreen`, `aspectratio`, `stepforward`, `stepback`, `bigstepforward`, `bigstepback`, `chapterorbigstepforward`, `chapterorbigstepback`, `osd`, `showsubtitles`, `nextsubtitle`, `cyclesubtitle`, `playerdebug`, `codecinfo`, `playerprocessinfo`, `nextpicture`, `previouspicture`, `zoomout`, `zoomin`, `playlist`, `queue`, `zoomnormal`, `zoomlevel1`, `zoomlevel2`, `zoomlevel3`, `zoomlevel4`, `zoomlevel5`, `zoomlevel6`, `zoomlevel7`, `zoomlevel8`, `zoomlevel9`, `nextcalibration`, `resetcalibration`, `analogmove`, `analogmovex`, `analogmovey`, `rotate`, `rotateccw`, `close`, `subtitledelayminus`, `subtitledelay`, `subtitledelayplus`, `audiodelayminus`, `audiodelay`, `audiodelayplus`, `subtitleshiftup`, `subtitleshiftdown`, `subtitlealign`, `audionextlanguage`, `verticalshiftup`, `verticalshiftdown`, `nextresolution`, `audiotoggledigital`, `number0`, `number1`, `number2`, `number3`, `number4`, `number5`, `number6`, `number7`, `number8`, `number9`, `smallstepback`, `fastforward`, `rewind`, `play`, `playpause`, `switchplayer`, `delete`, `copy`, `move`, `screenshot`, `rename`, `togglewatched`, `scanitem`, `reloadkeymaps`, `volumeup`, `volumedown`, `mute`, `backspace`, `scrollup`, `scrolldown`, `analogfastforward`, `analogrewind`, `moveitemup`, `moveitemdown`, `contextmenu`, `shift`, `symbols`, `cursorleft`, `cursorright`, `showtime`, `analogseekforward`, `analogseekback`, `showpreset`, `nextpreset`, `previouspreset`, `lockpreset`, `randompreset`, `increasevisrating`, `decreasevisrating`, `showvideomenu`, `enter`, `increaserating`, `decreaserating`, `setrating`, `togglefullscreen`, `nextscene`, `previousscene`, `nextletter`, `prevletter`, `jumpsms2`, `jumpsms3`, `jumpsms4`, `jumpsms5`, `jumpsms6`, `jumpsms7`, `jumpsms8`, `jumpsms9`, `filter`, `filterclear`, `filtersms2`, `filtersms3`, `filtersms4`, `filtersms5`, `filtersms6`, `filtersms7`, `filtersms8`, `filtersms9`, `firstpage`, `lastpage`, `guiprofile`, `red`, `green`, `yellow`, `blue`, `increasepar`, `decreasepar`, `volampup`, `volampdown`, `volumeamplification`, `createbookmark`, `createepisodebookmark`, `settingsreset`, `settingslevelchange`, `stereomode`, `nextstereomode`, `previousstereomode`, `togglestereomode`, `stereomodetomono`, `channelup`, `channeldown`, `previouschannelgroup`, `nextchannelgroup`, `playpvr`, `playpvrtv`, `playpvrradio`, `record`, `togglecommskip`, `showtimerrule`, `leftclick`, `rightclick`, `middleclick`, `doubleclick`, `longclick`, `wheelup`, `wheeldown`, `mousedrag`, `mousemove`, `tap`, `longpress`, `pangesture`, `zoomgesture`, `rotategesture`, `swipeleft`, `swiperight`, `swipeup`, `swipedown`, `error`, `noop` |
| systemcommand | String | This channel allows to send commands to `shutdown`, `suspend`, `hibernate`, `reboot` kodi | | systemcommand | String | This channel allows to send commands to `shutdown`, `suspend`, `hibernate`, `reboot` Kodi |
| mediatype | String | The media type of the current file. Valid return values are: `unknown`, `channel`, `episode`, `movie`, `musicvideo`, `picture`, `radio`, `song`, `video` | | mediatype | String | The media type of the current file. Valid return values are: `unknown`, `channel`, `episode`, `movie`, `musicvideo`, `picture`, `radio`, `song`, `video` |
| thumbnail | Image | The URL to the thumbnail of the current file | | thumbnail | Image | The URL to the thumbnail of the current file |
| fanart | Image | The URL to the fanart of the current file | | fanart | Image | The URL to the fanart of the current file |
| playnotification | String | Plays the notification sound by a given URI |
### Channel Configuration ### Channel Configuration
**group** The PVR channels can be put into user-defined PVR channel groups. **group** The PVR channels can be put into user-defined PVR channel groups.
There are two default PVR channel groups. There are two default PVR channel groups.
One for PVR TV channels and one for PVR radio channels. One for PVR TV channels and one for PVR radio channels.
The default labels are "All channels" (in german systems "Alle Kanäle"). 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 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. You can optionally configure an user-defined PVR channel group.
The PVR channels from Kodi will be populated during runtime into the state options of the `pvr-open-tv` and `pvr-open-radio` channels. The PVR channels from Kodi will be populated during runtime into the state options of the `pvr-open-tv` and `pvr-open-radio` channels.
## Audio Support
All Kodi instances are registered as an audio sink in the framework.
Audio streams are sent to the `playnotification` channel and will change the volume of the audio sink using the `notificationVolume` defined in the properties for the thing, not the `volume`.
URL audio streams (e.g. an Internet radio stream) are an exception and do not get sent to the `playnotification` channel.
Instead, these will be sent to the `playuri` channel.
## Full Example
A manual setup through a `things/kodi.things` file could look like this: A manual setup through a `things/kodi.things` file could look like this:
``` ```
@ -122,7 +134,7 @@ Thing kodi:kodi:myKodi "Kodi" @ "Living Room" [ipAddress="192.168.1.100", port=9
} }
``` ```
## Item Configuration ### Item Configuration
demo.items demo.items
@ -147,9 +159,10 @@ String myKodi_systemcommand "Systemcommand" { channel="kodi:kodi:myKodi
String myKodi_mediatype "Mediatype [%s]" { channel="kodi:kodi:myKodi:mediatype" } String myKodi_mediatype "Mediatype [%s]" { channel="kodi:kodi:myKodi:mediatype" }
Image myKodi_thumbnail { channel="kodi:kodi:myKodi:thumbnail" } Image myKodi_thumbnail { channel="kodi:kodi:myKodi:thumbnail" }
Image myKodi_fanart { channel="kodi:kodi:myKodi:fanart" } Image myKodi_fanart { channel="kodi:kodi:myKodi:fanart" }
String myKodi_playnotification "Play notification URI" { channel="kodi:kodi:myKodi:playnotification" }
``` ```
## Sitemap Configuration ### Sitemap Configuration
demo.sitemap demo.sitemap
@ -177,8 +190,3 @@ sitemap demo label="myKodi"
} }
} }
``` ```
## Audio Support
All supported Kodi instances are registered as an audio sink in the framework.
Audio streams are sent to the `playuri` channel.

View File

@ -67,8 +67,18 @@ Please note that at least one channel must be bound to an item before the bindin
## Example ## Example
This example assumes your TV has ThingID lgwebos:WebOSTV:3aab9eea-953b-4272-bdbd-f0cd0ecf4a46. Assuming your TV has device ID 3aab9eea-953b-4272-bdbd-f0cd0ecf4a46.
You can find it in the discovery results in Paper UI. By default this binding will create ThingIDs for discovery results with prefix lgwebos:WebOSTV: and the device ID. e.g. lgwebos:WebOSTV:3aab9eea-953b-4272-bdbd-f0cd0ecf4a46.
Thus, you can find your TV's device ID by looking into discovery results in Paper UI.
You could also specify an alternate ThingID using a .things file, specifying the deviceId as a mandatory configuration parameter:
```
Thing lgwebos:WebOSTV:tv1 [ deviceId="3aab9eea-953b-4272-bdbd-f0cd0ecf4a46" ]
```
However, for the next steps of this example we will assumes you are using automatic discovery and the default ThingID.
demo.items: demo.items:
@ -102,8 +112,6 @@ sitemap demo label="Main Menu"
Text item=LG_TV0_ChannelNo Text item=LG_TV0_ChannelNo
Switch item=LG_TV0_ChannelDummy icon="television" label="Kanal" mappings=[1="▲", 0="▼"] Switch item=LG_TV0_ChannelDummy icon="television" label="Kanal" mappings=[1="▲", 0="▼"]
Text item=LG_TV0_Channel Text item=LG_TV0_Channel
Switch item=LG_TV0_ChannelDown
Switch item=LG_TV0_ChannelUp
Default item=LG_TV0_Player Default item=LG_TV0_Player
Text item=LG_TV0_Application Text item=LG_TV0_Application
Selection item=LG_TV0_Application mappings=[ Selection item=LG_TV0_Application mappings=[

View File

@ -114,7 +114,7 @@ The account Thing Type does not have any channels.
### Thermostat Channels ### Thermostat Channels
| Channel Type ID | Item Type | Description | Read Write | | Channel Type ID | Item Type | Description | Read Write |
|-----------------------------|-----------|---------------------------------------------------------------------------------------------|:----------:| |-----------------------------|--------------------|---------------------------------------------------------------------------------------------|:----------:|
| can_cool | Switch | If the thermostat can actually turn on cooling | R | | can_cool | Switch | If the thermostat can actually turn on cooling | R |
| can_heat | Switch | If the thermostat can actually turn on heating | R | | can_heat | Switch | If the thermostat can actually turn on heating | R |
| fan_timer_active | Switch | If the fan timer is engaged | R/W | | fan_timer_active | Switch | If the fan timer is engaged | R/W |
@ -125,16 +125,16 @@ The account Thing Type does not have any channels.
| humidity | Number | Indicates the current relative humidity | R | | humidity | Number | Indicates the current relative humidity | R |
| last_connection | DateTime | Timestamp of the last successful interaction with Nest | R | | last_connection | DateTime | Timestamp of the last successful interaction with Nest | R |
| locked | Switch | If the thermostat has the temperature locked to only be within a set range | R | | locked | Switch | If the thermostat has the temperature locked to only be within a set range | R |
| locked_max_set_point | Number | The locked range max set point in degrees Celsius | R/W | | locked_max_set_point | Number:Temperature | The locked range max set point temperature | R/W |
| locked_min_set_point | Number | The locked range min set point in degrees Celsius | R/W | | locked_min_set_point | Number:Temperature | The locked range min set point temperature | R/W |
| max_set_point | Number | The max set point in degrees Celsius | R/W | | max_set_point | Number:Temperature | The max set point temperature | R/W |
| min_set_point | Number | The min set point in degrees Celsius | R/W | | min_set_point | Number:Temperature | The min set point temperature | R/W |
| mode | String | Current mode of the Nest thermostat (HEAT, COOL, HEAT_COOL, ECO, OFF) | R/W | | mode | String | Current mode of the Nest thermostat (HEAT, COOL, HEAT_COOL, ECO, OFF) | R/W |
| previous_mode | String | The previous mode of the Nest thermostat (HEAT, COOL, HEAT_COOL, ECO, OFF) | R | | previous_mode | String | The previous mode of the Nest thermostat (HEAT, COOL, HEAT_COOL, ECO, OFF) | R |
| state | String | The active state of the Nest thermostat (HEATING, COOLING, OFF) | R | | state | String | The active state of the Nest thermostat (HEATING, COOLING, OFF) | R |
| temperature | Number | Current temperature in degrees Celsius | R | | temperature | Number:Temperature | Current temperature | R |
| time_to_target_mins | Number | Time left to the target temperature (mins) approximately | R | | time_to_target_mins | Number | Time left to the target temperature (mins) approximately | R |
| set_point | Number | The set point in degrees Celsius | R/W | | set_point | Number:Temperature | The set point temperature | R/W |
| sunlight_correction_active | Switch | If sunlight correction is active | R | | sunlight_correction_active | Switch | If sunlight correction is active | R |
| sunlight_correction_enabled | Switch | If sunlight correction is enabled | R | | sunlight_correction_enabled | Switch | If sunlight correction is enabled | R |
| using_emergency_heat | Switch | If the system is currently using emergency heat | R | | using_emergency_heat | Switch | If the system is currently using emergency heat | R |
@ -199,17 +199,17 @@ Switch Thermostat_Has_Leaf "Has Leaf"
Number Thermostat_Humidity "Humidity [%.1f %%]" { channel="nest:thermostat:demo_account:living_thermostat:humidity" } Number Thermostat_Humidity "Humidity [%.1f %%]" { channel="nest:thermostat:demo_account:living_thermostat:humidity" }
DateTime Thermostat_Last_Conn "Last Connection [%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS]" { channel="nest:thermostat:demo_account:living_thermostat:last_connection" } DateTime Thermostat_Last_Conn "Last Connection [%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS]" { channel="nest:thermostat:demo_account:living_thermostat:last_connection" }
Switch Thermostat_Locked "Locked" { channel="nest:thermostat:demo_account:living_thermostat:locked" } Switch Thermostat_Locked "Locked" { channel="nest:thermostat:demo_account:living_thermostat:locked" }
Number Thermostat_LMaxSP "Locked Max Set Point [%.1f °C]" { channel="nest:thermostat:demo_account:living_thermostat:locked_max_set_point" } Number:Temperature Therm_LMaxSP "Locked Max Set Point [%.1f %unit%]" { channel="nest:thermostat:demo_account:living_thermostat:locked_max_set_point" }
Number Thermostat_LMinSP "Locked Min Set Point [%.1f °C]" { channel="nest:thermostat:demo_account:living_thermostat:locked_min_set_point" } Number:Temperature Therm_LMinSP "Locked Min Set Point [%.1f %unit%]" { channel="nest:thermostat:demo_account:living_thermostat:locked_min_set_point" }
Number Thermostat_Max_SP "Max Set Point [%.1f °C]" { channel="nest:thermostat:demo_account:living_thermostat:max_set_point" } Number:Temperature Therm_Max_SP "Max Set Point [%.1f %unit%]" { channel="nest:thermostat:demo_account:living_thermostat:max_set_point" }
Number Thermostat_Min_SP "Min Set Point [%.1f °C]" { channel="nest:thermostat:demo_account:living_thermostat:min_set_point" } Number:Temperature Therm_Min_SP "Min Set Point [%.1f %unit%]" { channel="nest:thermostat:demo_account:living_thermostat:min_set_point" }
String Thermostat_Mode "Mode [%s]" { channel="nest:thermostat:demo_account:living_thermostat:mode" } String Thermostat_Mode "Mode [%s]" { channel="nest:thermostat:demo_account:living_thermostat:mode" }
String Thermostat_Previous_Mode "Previous Mode [%s]" { channel="nest:thermostat:demo_account:living_thermostat:previous_mode" } String Thermostat_Previous_Mode "Previous Mode [%s]" { channel="nest:thermostat:demo_account:living_thermostat:previous_mode" }
String Thermostat_State "State [%s]" { channel="nest:thermostat:demo_account:living_thermostat:state" } String Thermostat_State "State [%s]" { channel="nest:thermostat:demo_account:living_thermostat:state" }
Number Thermostat_Set_Point "Set Point [%.1f °C]" { channel="nest:thermostat:demo_account:living_thermostat:set_point" } Number:Temperature Thermostat_SP "Set Point [%.1f %unit%]" { channel="nest:thermostat:demo_account:living_thermostat:set_point" }
Switch Thermostat_Sunlight_CA "Sunlight Correction Active" { channel="nest:thermostat:demo_account:living_thermostat:sunlight_correction_active" } Switch Thermostat_Sunlight_CA "Sunlight Correction Active" { channel="nest:thermostat:demo_account:living_thermostat:sunlight_correction_active" }
Switch Thermostat_Sunlight_CE "Sunlight Correction Enabled" { channel="nest:thermostat:demo_account:living_thermostat:sunlight_correction_enabled" } Switch Thermostat_Sunlight_CE "Sunlight Correction Enabled" { channel="nest:thermostat:demo_account:living_thermostat:sunlight_correction_enabled" }
Number Thermostat_Temperature "Temperature [%.1f °C]" { channel="nest:thermostat:demo_account:living_thermostat:temperature" } Number:Temperature Therm_Temp "Temperature [%.1f %unit%]" { channel="nest:thermostat:demo_account:living_thermostat:temperature" }
Number Thermostat_Time_To_Target "Time To Target [%s]" { channel="nest:thermostat:demo_account:living_thermostat:time_to_target_mins" } Number Thermostat_Time_To_Target "Time To Target [%s]" { channel="nest:thermostat:demo_account:living_thermostat:time_to_target_mins" }
Switch Thermostat_Using_Em_Heat "Using Emergency Heat" { channel="nest:thermostat:demo_account:living_thermostat:using_emergency_heat" } Switch Thermostat_Using_Em_Heat "Using Emergency Heat" { channel="nest:thermostat:demo_account:living_thermostat:using_emergency_heat" }
@ -226,10 +226,6 @@ String Home_Smoke_Alarm_State "Smoke Alarm State [%s]"
String Home_Time_Zone "Time Zone [%s]" { channel="nest:structure:demo_account:home:time_zone" } String Home_Time_Zone "Time Zone [%s]" { channel="nest:structure:demo_account:home:time_zone" }
``` ```
## Known Issues
* The binding uses Celsius as unit for all Themostat temperature channels.
## Attribution ## Attribution
This documentation contains parts written by John Cocula which were copied from the 1.0 Nest binding. This documentation contains parts written by John Cocula which were copied from the 1.0 Nest binding.

View File

@ -3,7 +3,7 @@ id: network
label: Network label: Network
title: Network - Bindings title: Network - Bindings
type: binding type: binding
description: "This binding allows to check, whether a device is currently available on the network." description: "This binding allows checking whether a device is currently available on the network."
since: 2x since: 2x
install: auto install: auto
--- ---
@ -14,27 +14,30 @@ install: auto
# Network Binding # Network Binding
This binding allows to check, whether a device is currently available on the network. This binding allows checking whether a device is currently available on the network.
This happens by either using [ping](https://en.wikipedia.org/wiki/Ping_%28networking_utility%29) or by a successful TCP connection on a port of your choice. This is either done using [ping](https://en.wikipedia.org/wiki/Ping_%28networking_utility%29) or by a successful TCP connection on a specified port.
## Binding configuration ## Binding configuration
You can use the following configuration options: The binding has the following configuration options:
- **allowSystemPings:** Use the external ICMP ping program of the operating system, instead of the Java ping. Useful if the devices cannot be reached by Java ping. Default is true. - **allowSystemPings:** Use the external ICMP ping program of the operating system instead of the Java ping. Useful if the devices cannot be reached by Java ping. Default is true.
- **allowDHCPlisten:** If devices leave and reenter a network, they usually request their last IPv4 address by using DHCP requests. If we listen for those messages, we can make the status update more "real-time" and do not have to wait for the next refresh cycle. Default is true. - **allowDHCPlisten:** If devices leave and reenter a network, they usually request their last IPv4 address by using DHCP requests. By listening for those messages, the status update can be more "real-time" without having to wait for the next refresh cycle. Default is true.
- **arpPingToolPath:** If your arp ping tool is not called arping and cannot be found in the PATH environment, you can configure the absolute path here. Default is "arping". - **arpPingToolPath:** If the arp ping tool is not called `arping` and cannot be found in the PATH environment variable, the absolute path can be configured here. Default is `arping`.
- **cacheDeviceStateTimeInMS:** The result of a device presence detection is cached for a small amount of time. Set this time here in milliseconds. Be aware that no new pings will be issued within this time frame, even if explicitly requested. Default is 2000. - **cacheDeviceStateTimeInMS:** The result of a device presence detection is cached for a small amount of time. Set this time here in milliseconds. Be aware that no new pings will be issued within this time frame, even if explicitly requested. Default is 2000.
Create a file *org.openHAB.binding.network.cfg* in your openHAB/etc directory and use the above options like this: Create a `<openHAB-conf>/services/network.cfg` file and use the above options like this:
``` ```
allowSystemPings=false binding.network:allowSystemPings=true
binding.network:allowDHCPlisten=false
binding.network:arpPingToolPath=arping
binding.network:cacheDeviceStateTimeInMS=2000
``` ```
## Supported Things ## Supported Things
- **pingdevice:** Detects device presence by using icmp pings, arp pings and dhcp packet sniffing. - **pingdevice:** Detects device presence by using ICMP pings, arp pings and dhcp packet sniffing.
- **servicedevice:** Detects device presence by scanning for a specific open tcp port. - **servicedevice:** Detects device presence by scanning for a specific open tcp port.
## Discovery ## Discovery
@ -48,18 +51,16 @@ Please note: things discovered by the network binding will be provided with a ti
``` ```
network:pingdevice:one_device [ hostname="192.168.0.64" ] network:pingdevice:one_device [ hostname="192.168.0.64" ]
network:pingdevice:second_device [ hostname="192.168.0.65", retry=1, timeout=5000, refreshInterval=60000 ] network:pingdevice:second_device [ hostname="192.168.0.65", retry=1, timeout=5000, refreshInterval=60000 ]
network:servicedevice:important_server [ hostname="192.168.0.62", port=1234 ] network:servicedevice:important_server [ hostname="192.168.0.62", port=1234 ]
``` ```
Use the following options for a **network:pingdevice**: Use the following options for a **network:pingdevice**:
- **hostname:** IP address or hostname of the device - **hostname:** IP address or hostname of the device
- **retry:** After how many refresh interval cycles shall the device be assumed as offline. Default is 1. - **retry:** After how many refresh interval cycles the device will be assumed to be offline. Default is 1.
- **timeout:** How long shall the ping wait for an answer (in milliseconds. Default: `5000` = 5 seconds) - **timeout:** How long the ping will wait for an answer, in milliseconds. Default: `5000` (5 seconds)
- **refreshInterval:** How often shall the device be checked (in milliseconds. Default: `60000` = one minute) - **refreshInterval:** How often the device will be checked, in milliseconds. Default: `60000` (one minute)
Use the following additional options for a **network:servicedevice**: Use the following additional options for a **network:servicedevice**:
@ -67,35 +68,33 @@ Use the following additional options for a **network:servicedevice**:
## Presence detection - Configure target device ## Presence detection - Configure target device
You may need to configure devices to be reachable. Devices may need to be configured to be reachable, as a device may not answer ping requests by default.
A device may not answer ping requests by default.
This is the case with Windows 10 equipped systems or Android and iOS devices in deep sleep mode. This is the case with Windows 10 equipped systems or Android and iOS devices in deep sleep mode.
### Respond to pings on Windows 10+ ### Respond to pings on Windows 10+
Pings on windows 10 are usually blocked by the internal firewall. Pings on Windows 10 are usually blocked by the internal firewall.
You need to allow "Echo Request for ICMPv4" to allow your windows to respond to pings. Windows 10 must be configured to allow "Echo Request for ICMPv4" so that it can respond to pings.
### Android and iOS devices ### Android and iOS devices
Because mobile devices put themselves in a deep sleep mode after some inactivity, they do not react to normal ICMP pings. Because mobile devices put themselves in a deep sleep mode after some inactivity, they do not react to normal ICMP pings.
Configure ARP ping to realize presence detection for those devices. Configure ARP ping to realize presence detection for those devices.
This only works if your devices have WIFI enabled, have been configured to use your home WIFI network, and have the option "Disable wifi in standby" disabled (default). This only works if the devices have WIFI enabled, have been configured to use the WIFI network, and have the option "Disable wifi in standby" disabled (default).
An almost immediate presence detection for phones and tables, if they (re)join the home Wifi network, is to use DHCP listen. Use DHCP listen for an almost immediate presence detection for phones and tablets when they (re)join the home Wifi network.
### iPhones, iPads ### iPhones, iPads
Apple iOS devices are usually in a deep sleep mode and do not respond to ARP pings under all conditions, but to Bonjour service discovery messages (UDP port 5353). Apple iOS devices are usually in a deep sleep mode and do not respond to ARP pings under all conditions, but to Bonjour service discovery messages (UDP port 5353).
Therefore first a Bonjour message is send, before the ARP presence detection is performed. Therefore first a Bonjour message is sent, before the ARP presence detection is performed.
The binding automatically figures out if the target device is an iOS device. The binding automatically figures out if the target device is an iOS device.
You can check if the binding has correctly recognised your device by having a look at the *uses_ios_wakeup* property of your thing. To check if the binding has correctly recognised a device, have a look at the *uses_ios_wakeup* property of the THING.
An almost immediate presence detection for phones and tables, if they (re)join the home Wifi network, is to use DHCP listen.
### Use open TCP ports ### Use open TCP ports
Many devices provide services on TCP ports (web-frontends, streaming servers, ...), which you can use to confirm there presence in the network. Many devices provide services on TCP ports (web-frontends, streaming servers, etc.), which can be used to confirm their presence in the network.
Most operating systems have options to list open ports. Most operating systems have options to list open ports.
On a linux-based system, you may use *nmap* to discover all open TCP ports on the device with the specified IP address: On a Linux-based system, *nmap* may be used to discover all open TCP ports on the device with the specified IP address:
``` ```
$ sudo nmap -Pn -sT -p- 192.168.0.42 $ sudo nmap -Pn -sT -p- 192.168.0.42
@ -117,17 +116,16 @@ In this example, there are four suitable ports to use.
The port 554 (Windows network file sharing service) is open on most Windows PCs and Windows compatible Linux systems. The port 554 (Windows network file sharing service) is open on most Windows PCs and Windows compatible Linux systems.
Port 1025 (MS RPC) is open on XBox systems. Port 548 (Apple Filing Protocol (AFP)) is open on Mac OS X systems. Port 1025 (MS RPC) is open on XBox systems. Port 548 (Apple Filing Protocol (AFP)) is open on Mac OS X systems.
Please don't forget to open the required ports in your firewall setup. Please don't forget to open the required ports in the system's firewall setup.
## Presence detection - Configure your openHAB installation ## Presence detection - Configure your openHAB installation
Because we use external tools for some of the presence detection mechanism or need elevated permissions for others, your OpenHAB installation needs to be altered. Because external tools are used for some of the presence detection mechanism or need elevated permissions for others, the openHAB installation needs to be altered.
### Arping ### Arping
For arp pings to work, you need a separate tool, called "arping". For arp pings to work, a separate tool called "arping" is used.
On Linux there exists three different tools: Linux has three different tools:
* arp-scan (not yet supported by this binding) * arp-scan (not yet supported by this binding)
* arping of the ip-utils (Ubuntu/Debian: `apt-get install iputils-arping`) * arping of the ip-utils (Ubuntu/Debian: `apt-get install iputils-arping`)
@ -135,19 +133,16 @@ On Linux there exists three different tools:
arping by Thomas Habets runs on Windows and MacOS as well. arping by Thomas Habets runs on Windows and MacOS as well.
Make sure the tool is available in $PATH (%PATH% respectively on Windows) or in the same path as the openHAB executable. Make sure the tool is available in the PATH, or in the same path as the openHAB executable.
On Linux and MacOS you might need elevated access permissions, for instance by making the executable a suid executable (`chmod u+s /usr/sbin/arping`). On Linux and MacOS elevated access permissions may be needed, for instance by making the executable a suid executable (`chmod u+s /usr/sbin/arping`).
Just test the executable on the command line, if `sudo` is required, you need to grant elevated permissions. Just test the executable on the command line; if `sudo` is required, grant elevated permissions.
### DHCP Listen ### DHCP Listen
If devices leave and reenter a network, they usually request their last IPv4 address by using DHCP requests.
If we listen for those messages, we can make the status update more "real-time" and do not have to wait for the next refresh cycle.
Some operating systems such as Linux restrict applications to only use ports >= 1024 without elevated privileges. Some operating systems such as Linux restrict applications to only use ports >= 1024 without elevated privileges.
If the binding is not able to use port 67 (DHCP), because of such a restriction or because the same system is used as a DHCP server, port 6767 will be used instead. If the binding is not able to use port 67 (DHCP) because of such a restriction, or because the same system is used as a DHCP server, port 6767 will be used instead.
Check the property *dhcp_state* on your thing for such a hint. You need to establish a port forwarding in this case: Check the property *dhcp_state* on the THING for such a hint. In this case, establish port forwarding:
```shell ```shell
sysctl -w net.ipv4.ip_forward=1 sysctl -w net.ipv4.ip_forward=1
@ -155,8 +150,7 @@ iptables -A INPUT -p udp --dport 6767 -j ACCEPT
iptables -t nat -A PREROUTING -p udp --dport 67 -j REDIRECT --to-ports 6767 iptables -t nat -A PREROUTING -p udp --dport 67 -j REDIRECT --to-ports 6767
``` ```
If you operate a DHCP server on port 67, you need to duplicate the received traffic and If a DHCP server is operating on port 67, duplicate the received traffic and forward it to port 6767:
forward it to port 6767:
```shell ```shell
iptables -A PREROUTING -t mangle -p udp ! -s 127.0.0.1 --dport 67 -j TEE --gateway 127.0.0.1 iptables -A PREROUTING -t mangle -p udp ! -s 127.0.0.1 --dport 67 -j TEE --gateway 127.0.0.1
@ -169,11 +163,11 @@ Things support the following channels:
| Channel Type ID | Item Type | Description | | Channel Type ID | Item Type | Description |
|-----------------|-----------|--------------------------------------------------------------------------------------------| |-----------------|-----------|--------------------------------------------------------------------------------------------|
| online | Switch | This channel indicates whether a device is online or not | | online | Switch | This channel indicates whether a device is online |
| lastseen | DateTime | The last seen date/time of the device in question. May be 1. Jan 1970 if no time is known. | | lastseen | DateTime | The last seen date/time of the device in question. May be 1. Jan 1970 if no time is known |
| latency | Number | This channel indicates the ping latency in milliseconds. May be 0 if no time is known. | | latency | Number | This channel indicates the ping latency in milliseconds. May be 0 if no time is known |
## Example ## Examples
demo.things: demo.things:

View File

@ -119,6 +119,7 @@ Thing examples:
``` ```
nibeheatpump:f1x45-udp:myPump [hostName="192.168.1.50", port=9999] nibeheatpump:f1x45-udp:myPump [hostName="192.168.1.50", port=9999]
``` ```
``` ```
nibeheatpump:f1x45-udp:myPump [hostName="192.168.1.50", port=9999, readCommandsPort=10000, writeCommandsPort=10001, refreshInterval=30, enableReadCommands=true, enableWriteCommands=true, enableRegistersForWriteCommands="44266, 47004"] nibeheatpump:f1x45-udp:myPump [hostName="192.168.1.50", port=9999, readCommandsPort=10000, writeCommandsPort=10001, refreshInterval=30, enableReadCommands=true, enableWriteCommands=true, enableRegistersForWriteCommands="44266, 47004"]
``` ```

View File

@ -3,7 +3,7 @@
Command to convert Nibe CSV file character set to UTF-8: Command to convert Nibe CSV file character set to UTF-8:
```iconv -f iso-8859-1 -t utf-8 F1X45.csv > F1X45_utf8.csv``` ```iconv -f iso-8859-1 -t utf-8 F1X45.csv > F1X45_utf8.csv```
Command to create channel-types from CSV file: Command to create channel-types from CSV file (all channels are marked as advanced, so remove it manually from desired channels):
```awk -f create_channel_types.awk F1X45_utf8.csv > F1X45.xml``` ```awk -f create_channel_types.awk F1X45_utf8.csv > F1X45.xml```
Command to create all channels from CSV file: Command to create all channels from CSV file:

View File

@ -60,7 +60,8 @@ where `<eventType>` is one of the following values:
| `temperature_supplay` | Number | the temperature sent to the floor heating | | `temperature_supplay` | Number | the temperature sent to the floor heating |
| `temperature_servicewater_reference` | Number | the reference temperature of the servicewater | | `temperature_servicewater_reference` | Number | the reference temperature of the servicewater |
| `temperature_servicewater` | Number | the temperature of the servicewater | | `temperature_servicewater` | Number | the temperature of the servicewater |
| `state` | String | contains the time of the state and the state; Possible states are error, running, stoped, defrosting | | `state` | String | contains the time of the state and the state; Possible states are error, running, stopped, defrosting |
| `simple_state` | String | contains only the short statename; Possible states are error, running, stopped, defrosting |
| `extended_state` | String | contains the time of the state and the state; Possible states are error, heating, standby, switch-on delay, switching cycle | blocked, provider lock time, service water, screed heat up, defrosting, pump flow, desinfection, cooling, pool water, heating ext., service water ext., | flow monitoring, ZWE operation | | `extended_state` | String | contains the time of the state and the state; Possible states are error, heating, standby, switch-on delay, switching cycle | blocked, provider lock time, service water, screed heat up, defrosting, pump flow, desinfection, cooling, pool water, heating ext., service water ext., | flow monitoring, ZWE operation |
| `temperature_solar_collector` | Number | the temperature of the sensor in the solar collector | | `temperature_solar_collector` | Number | the temperature of the sensor in the solar collector |
| `temperature_hot_gas` | Number | | `temperature_hot_gas` | Number |

View File

@ -64,11 +64,12 @@ pioneeravr:serialAvr:vsx921Serial [ serialPort="COM9" ]
## Input Source Mapping ## Input Source Mapping
Here after are the ID values of the input sources: Here after are the ID values of the input sources (depending on you AVR input sources might not be available):
* 04: DVD * 04: DVD
* 25: BD * 25: BD
* 05: TV/SAT * 05: TV/SAT
* 06: SAT/CBL
* 15: DVR/BDR * 15: DVR/BDR
* 10: VIDEO 1(VIDEO) * 10: VIDEO 1(VIDEO)
* 14: VIDEO 2 * 14: VIDEO 2
@ -77,16 +78,27 @@ Here after are the ID values of the input sources:
* 21: HDMI 3 * 21: HDMI 3
* 22: HDMI 4 * 22: HDMI 4
* 23: HDMI 5 * 23: HDMI 5
* 24: HDMI 6
* 34: HDMI 7
* 35: HDMI 8
* 26: HOME MEDIA GALLERY(Internet Radio) * 26: HOME MEDIA GALLERY(Internet Radio)
* 44: Media Server
* 38: Internet Radio
* 17: iPod/USB * 17: iPod/USB
* 18: XM RADIO * 48: MHL
* 01: CD * 01: CD
* 03: CD-R/TAPE * 03: CD-R/TAPE
* 02: TUNER * 02: TUNER
* 00: PHONO * 00: PHONO
* 13: USB-DAC
* 12: MULTI CH IN * 12: MULTI CH IN
* 33: ADAPTER PORT * 33: ADAPTER PORT (BT)
* 18: XM RADIO
* 27: SIRIUS * 27: SIRIUS
* 40: SiriusXM
* 41: PANDORA
* 45: Favourites
* 57: Spotify
* 31: HDMI (cyclic) * 31: HDMI (cyclic)
## Example ## Example

View File

@ -26,14 +26,14 @@ Currently only "V2" of the Plugwise protocol is supported. It is adviced that us
The binding supports the following Plugwise devices: The binding supports the following Plugwise devices:
| Device Type | Description | Thing Type | | Device Type | Description | Thing Type |
|---------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------|------------| |---------------------------------------------------------------|------------------------------------------------------------------------------------------|------------|
| [Circle](https://www.plugwise.com/products/appliances-and-lighting/energy-meters-and-switches/circle) | A power outlet plug that provides energy measurement and switching control of appliances | circle | | [Circle](https://www.plugwise.com/en_US/products/circle) | A power outlet plug that provides energy measurement and switching control of appliances | circle |
| [Circle+](https://www.plugwise.com/products/appliances-and-lighting/energy-meters-and-switches/circle) | A special Circle that coordinates the ZigBee network and acts as network gateway | circleplus | | [Circle+](https://www.plugwise.com/en_US/products/circle) | A special Circle that coordinates the ZigBee network and acts as network gateway | circleplus |
| [Scan](https://www.plugwise.com/products/appliances-and-lighting/presence-and-light-sensor/scan) | A wireless motion (PIR) and light sensor | scan | | [Scan](https://www.plugwise.com/en_US/products/scan) | A wireless motion (PIR) and light sensor | scan |
| [Sense](https://www.plugwise.com/products/indoor-climate/humidity-and-temperature-sensor/sense) | A wireless temperature and humidity sensor | sense | | [Sense](https://www.plugwise.com/en_US/products/sense) | A wireless temperature and humidity sensor | sense |
| [Stealth](https://www.plugwise.com/products/appliances-and-lighting/energy-meters-and-switches/stealth) | A Circle with a more compact form factor that can be built-in | stealth | | [Stealth](https://www.plugwise.com/en_US/products/stealth) | A Circle with a more compact form factor that can be built-in | stealth |
| [Stick](https://www.plugwise.com/home-start) | A ZigBee USB controller that openHAB uses to communicate with the Circle+ | stick | | [Stick](https://www.plugwise.com/en_US/products/start-source) | A ZigBee USB controller that openHAB uses to communicate with the Circle+ | stick |
| [Switch](https://www.plugwise.com/products/appliances-and-lighting/energy-meters-and-switches/switch) | A wireless wall switch | switch | | [Switch](https://www.plugwise.com/en_US/products/switch) | A wireless wall switch | switch |
## Discovery ## Discovery
@ -118,18 +118,18 @@ To access the serial port of the Stick on Linux, the user running openHAB needs
## Channels ## Channels
| Channel Type ID | Item Type | Description | Thing Types | | Channel Type ID | Item Type | Description | Thing Types |
|------------------|-----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------| |------------------|----------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------|
| clock | String | Time as indicated by the internal clock of the device | circle, circleplus, stealth | | clock | String | Time as indicated by the internal clock of the device | circle, circleplus, stealth |
| energy | Number | Energy consumption/production (kWh) during the last measurement interval | circle, circleplus, stealth | | energy | Number:Energy | Energy consumption/production during the last measurement interval | circle, circleplus, stealth |
| energystamp | DateTime | Timestamp of the start of the last energy measurement interval | circle, circleplus, stealth | | energystamp | DateTime | Timestamp of the start of the last energy measurement interval | circle, circleplus, stealth |
| humidity | Number | Current relative humidity (%) | sense | | humidity | Number:Dimensionless | Current relative humidity | sense |
| lastseen | DateTime | Timestamp of the last received message. Because there is no battery level indication this is a helpful value to determine if a battery powered device is still operating properly even when no state changes occur | circle, circleplus, scan, sense, stealth, switch | | lastseen | DateTime | Timestamp of the last received message. Because there is no battery level indication this is a helpful value to determine if a battery powered device is still operating properly even when no state changes occur | circle, circleplus, scan, sense, stealth, switch |
| leftbuttonstate | Switch | Current state of the left button | switch | | leftbuttonstate | Switch | Current state of the left button | switch |
| power | Number | Current power consumption (Watt), measured over 1 second interval | circle, circleplus, stealth | | power | Number:Power | Current power consumption, measured over 1 second interval | circle, circleplus, stealth |
| realtimeclock | DateTime | Time as indicated by the internal clock of the Circle+ | circleplus | | realtimeclock | DateTime | Time as indicated by the internal clock of the Circle+ | circleplus |
| rightbuttonstate | Switch | Current state of the right button | switch | | rightbuttonstate | Switch | Current state of the right button | switch |
| state | Switch | Switches the power state on/off | circle, circleplus, stealth | | state | Switch | Switches the power state on/off | circle, circleplus, stealth |
| temperature | Number | Current temperature (°C) | sense | | temperature | Number:Temperature | Current temperature | sense |
| triggered | Switch | Most recent switch action initiated by the device. When daylight override is disabled on a Scan this corresponds one to one with motion detection | scan, sense | | triggered | Switch | Most recent switch action initiated by the device. When daylight override is disabled on a Scan this corresponds one to one with motion detection | scan, sense |
## Example ## Example
@ -169,16 +169,16 @@ demo.items
/* Circle */ /* Circle */
Switch Fan_Switch "Switch" <switch> { channel="plugwise:circle:fan:state" } Switch Fan_Switch "Switch" <switch> { channel="plugwise:circle:fan:state" }
String Fan_Clock "Clock [%s]" <clock> { channel="plugwise:circle:fan:clock" } String Fan_Clock "Clock [%s]" <clock> { channel="plugwise:circle:fan:clock" }
Number Fan_Power "Power [%.1f W]" <energy> { channel="plugwise:circle:fan:power" } Number:Power Fan_Power "Power [%.1f %unit%]" <energy> { channel="plugwise:circle:fan:power" }
Number Fan_Energy "Energy [%.3f kWh]" <chart> { channel="plugwise:circle:fan:energy" } Number:Energy Fan_Energy "Energy [%.3f %unit%]" <chart> { channel="plugwise:circle:fan:energy" }
DateTime Fan_Energy_Stamp "Energy stamp [%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS]" <calendar> { channel="plugwise:circle:fan:energystamp" } DateTime Fan_Energy_Stamp "Energy stamp [%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS]" <calendar> { channel="plugwise:circle:fan:energystamp" }
DateTime Fan_Last_Seen "Last seen [%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS]" <calendar> { channel="plugwise:circle:fan:lastseen" } DateTime Fan_Last_Seen "Last seen [%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS]" <calendar> { channel="plugwise:circle:fan:lastseen" }
/* Circle+ */ /* Circle+ */
Switch Lamp_Switch "Switch" <switch> { channel="plugwise:circleplus:lamp:state" } Switch Lamp_Switch "Switch" <switch> { channel="plugwise:circleplus:lamp:state" }
String Lamp_Clock "Clock [%s]" <clock> { channel="plugwise:circleplus:lamp:clock" } String Lamp_Clock "Clock [%s]" <clock> { channel="plugwise:circleplus:lamp:clock" }
Number Lamp_Power "Power [%.1f W]" <energy> { channel="plugwise:circleplus:lamp:power" } Number:Power Lamp_Power "Power [%.1f %unit%]" <energy> { channel="plugwise:circleplus:lamp:power" }
Number Lamp_Energy "Energy [%.3f kWh]" <chart> { channel="plugwise:circleplus:lamp:energy" } Number:Energy Lamp_Energy "Energy [%.3f %unit%]" <chart> { channel="plugwise:circleplus:lamp:energy" }
DateTime Lamp_Energy_Stamp "Energy stamp [%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS]" <calendar> { channel="plugwise:circleplus:lamp:energystamp" } DateTime Lamp_Energy_Stamp "Energy stamp [%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS]" <calendar> { channel="plugwise:circleplus:lamp:energystamp" }
DateTime Lamp_Real_Time_Clock "Real time clock [%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS]" <clock> { channel="plugwise:circleplus:lamp:realtimeclock" } DateTime Lamp_Real_Time_Clock "Real time clock [%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS]" <clock> { channel="plugwise:circleplus:lamp:realtimeclock" }
DateTime Lamp_Last_Seen "Last seen [%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS]" <calendar> { channel="plugwise:circleplus:lamp:lastseen" } DateTime Lamp_Last_Seen "Last seen [%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS]" <calendar> { channel="plugwise:circleplus:lamp:lastseen" }
@ -189,15 +189,15 @@ DateTime Motion_Sensor_Last_Seen "Last seen [%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS
/* Sense */ /* Sense */
Switch Climate_Sensor_Switch "Triggered [%s]" <switch> { channel="plugwise:sense:climatesensor:triggered" } Switch Climate_Sensor_Switch "Triggered [%s]" <switch> { channel="plugwise:sense:climatesensor:triggered" }
Number Climate_Sensor_Humidity "Humidity [%.1f %%]" <humidity> { channel="plugwise:sense:climatesensor:humidity" } Number:Dimensionless Climate_Sensor_Humidity "Humidity [%.1f %unit%]" <humidity> { channel="plugwise:sense:climatesensor:humidity" }
Number Climate_Sensor_Temperature "Temperature [%.1f °C]" <temperature> { channel="plugwise:sense:climatesensor:temperature" } Number:Temperature Climate_Sensor_Temperature "Temperature [%.1f %unit%]" <temperature> { channel="plugwise:sense:climatesensor:temperature" }
DateTime Climate_Sensor_Last_Seen "Last seen [%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS]" <clock> { channel="plugwise:sense:climatesensor:lastseen" } DateTime Climate_Sensor_Last_Seen "Last seen [%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS]" <clock> { channel="plugwise:sense:climatesensor:lastseen" }
/* Stealth */ /* Stealth */
Switch Fridge_Switch "Switch" <switch> { channel="plugwise:stealth:fridge:state" } Switch Fridge_Switch "Switch" <switch> { channel="plugwise:stealth:fridge:state" }
String Fridge_Clock "Clock [%s]" <clock> { channel="plugwise:stealth:fridge:clock" } String Fridge_Clock "Clock [%s]" <clock> { channel="plugwise:stealth:fridge:clock" }
Number Fridge_Power "Power [%.1f W]" <energy> { channel="plugwise:stealth:fridge:power" } Number:Power Fridge_Power "Power [%.1f %unit%]" <energy> { channel="plugwise:stealth:fridge:power" }
Number Fridge_Energy "Energy [%.3f kWh]" <chart> { channel="plugwise:stealth:fridge:energy" } Number:Energy Fridge_Energy "Energy [%.3f %unit%]" <chart> { channel="plugwise:stealth:fridge:energy" }
DateTime Fridge_Energy_Stamp "Energy stamp [%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS]" <calendar> { channel="plugwise:stealth:fridge:energystamp" } DateTime Fridge_Energy_Stamp "Energy stamp [%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS]" <calendar> { channel="plugwise:stealth:fridge:energystamp" }
DateTime Fridge_Last_Seen "Last seen [%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS]" <calendar> { channel="plugwise:stealth:fridge:lastseen" } DateTime Fridge_Last_Seen "Last seen [%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS]" <calendar> { channel="plugwise:stealth:fridge:lastseen" }

View File

@ -21,9 +21,10 @@ The Rego heat pump binding supports:
## The Rego 6xx family ## The Rego 6xx family
The Rego 6xx controllers family is used in many heat pumps, like IVT/Bosch/Autotherm/Carrier and others. The Rego 6xx controllers family is used in many heat pumps such as IVT/Bosch/Autotherm/Carrier and others.
Rego 6xx unit contain an interface marked as service. Header of this interface is close to the control unit. This is 5V (TTL) serial interface and is connected by a 9 pin can/d-sub connector. Pinout: Rego 6xx unit contain an interface marked as service.
Header of this interface is close to the control unit. This is 5V (TTL) serial interface and is connected by a 9 pin can/d-sub connector. Pinout:
2 - RxD 2 - RxD
3 - TxD 3 - TxD
@ -41,7 +42,8 @@ Two connection types are supported:
#### TCP/IP connection #### TCP/IP connection
A transparent bridge between the serial interface of the heat pump and network (i.e. wifi) is used. This way no additional wires are required between heat pump and computer, running openhab. A transparent bridge between the serial interface of the heat pump and network (i.e. wifi) is used.
This way no additional wires are required between heat pump and computer, running openhab.
There are many existing project providing such functionality, i.e. [ser2net](http://ser2net.sourceforge.net/). There are many existing project providing such functionality, i.e. [ser2net](http://ser2net.sourceforge.net/).
@ -51,7 +53,8 @@ Board:
![board](doc/board.png) ![board](doc/board.png)
The code running on the ESP module can be found [here](https://github.com/crnjan/esp8266-bridge). There are other projects providing ESP firmware with similar functionality, i.e. [ESP-LINK](https://github.com/jeelabs/esp-link), but did not test with those. The code running on the ESP module can be found [here](https://github.com/crnjan/esp8266-bridge).
There are other projects providing ESP firmware with similar functionality, i.e. [ESP-LINK](https://github.com/jeelabs/esp-link), but did not test with those.
Configuration of the TCP/IP thing: Configuration of the TCP/IP thing:
@ -80,7 +83,6 @@ Example thing definition:
regoheatpump:serialRego6xx:ivtSerial [ portName="COM3" ] regoheatpump:serialRego6xx:ivtSerial [ portName="COM3" ]
``` ```
### Channels ### Channels
Below is the list of supported channels, all values are read only: Below is the list of supported channels, all values are read only:
@ -195,7 +197,6 @@ Example thing definition:
regoheatpump:serialHusdata:ivtSerial [ portName="COM3" ] regoheatpump:serialHusdata:ivtSerial [ portName="COM3" ]
``` ```
### Channels ### Channels
Below is the list of supported channels, all values are read only: Below is the list of supported channels, all values are read only:

View File

@ -39,7 +39,8 @@ This binding supports the RFXtrx433E and RFXtrx315 transceivers and the RFXrec43
The transceivers/receivers may be automatically discovered by the JD2XX library and put in the Inbox or may be configured manually. The transceivers/receivers may be automatically discovered by the JD2XX library and put in the Inbox or may be configured manually.
After the bridge is configured and the transceiver receives a message from any sensor or actuator, the device is put in the Inbox. Because RFXCOM communication is a one way protocol, receiver actuators can't be discovered automatically. After the bridge is configured and the transceiver receives a message from any sensor or actuator, the device is put in the Inbox.
Because RFXCOM communication is a one way protocol, receiver actuators can't be discovered automatically.
### Note: Apple OS X ### Note: Apple OS X
@ -61,21 +62,27 @@ sudo kextload -b com.apple.driver.AppleUSBFTDI
Linux has built-in FTDI drivers, which need to be disabled for JD2XX to take over Linux has built-in FTDI drivers, which need to be disabled for JD2XX to take over
FTDI drivers can be disabled by blacklisting the ftdi\_sio module in your modprobe config (/etc/modprobe.d/). However this will require ALL FTDI devices to then be accessed via something like JD2XX. If you have, or may acquire, other USB serial devices you will probably prefer to configure your RFXCOM manually. FTDI drivers can be disabled by blacklisting the ftdi\_sio module in your modprobe config (/etc/modprobe.d/).
However this will require ALL FTDI devices to then be accessed via something like JD2XX.
If you have, or may acquire, other USB serial devices you will probably prefer to configure your RFXCOM manually.
If you configure the RFXCOM manually note that the serial port that is assigned to it may change if you have more than one USB serial device. On systems using udev (practically all modern Linux systems) you can add a rule to /etc/udev/rules.d/ such as: If you configure the RFXCOM manually note that the serial port that is assigned to it may change if you have more than one USB serial device.
On systems using udev (practically all modern Linux systems) you can add a rule to /etc/udev/rules.d/ such as:
``` ```
SUBSYSTEM=="tty", ATTRS{product}=="RFXtrx433", ATTRS{serial}=="A12LPLW", SYMLINK+="rfxtrx0" SUBSYSTEM=="tty", ATTRS{product}=="RFXtrx433", ATTRS{serial}=="A12LPLW", SYMLINK+="rfxtrx0"
``` ```
and then you will be able to use /dev/rfxtrx0 as the serial device regardless of what /dev/ttyUSB<n> device has been assigned. (N.B. you can get the product and serial strings to use from the output of dmesg, lsusb or by looking in /sys/) and then you will be able to use /dev/rfxtrx0 as the serial device regardless of what /dev/ttyUSB<n> device has been assigned.
(N.B. you can get the product and serial strings to use from the output of dmesg, lsusb or by looking in /sys/)
### Manual Configuration ### Manual Configuration
If you have any problems with JD2XX or you don't want to disable FTDI driver on OS X or Linux, you can also configure RFXCOM transceivers/receivers manually. If you have any problems with JD2XX or you don't want to disable FTDI driver on OS X or Linux, you can also configure RFXCOM transceivers/receivers manually.
To do that via the PaperUI, manually add the generic RFXCOM device named `RFXCOM USB Transceiver`, with the description "This is universal RFXCOM transceiver bridge for manual configuration purposes." You will need to specify at least the serial port which has been assigned to the RFXCOM (see notes above). You may also need to change permissions on the serial port to allow openhab to access it and you may need to tell the java libraries about it by adding a line to &lt;openhab root&gt;/conf/environment such as: To do that via the PaperUI, manually add the generic RFXCOM device named `RFXCOM USB Transceiver`, with the description "This is universal RFXCOM transceiver bridge for manual configuration purposes".
You will need to specify at least the serial port which has been assigned to the RFXCOM (see notes above).
You may also need to change permissions on the serial port to allow openhab to access it and you may need to tell the java libraries about it by adding a line to &lt;openhab root&gt;/conf/environment such as:
``` ```
EXTRA\_JAVA\_OPTS="-Dgnu.io.rxtx.SerialPorts=/dev/&lt;device&gt; EXTRA\_JAVA\_OPTS="-Dgnu.io.rxtx.SerialPorts=/dev/&lt;device&gt;
@ -91,7 +98,8 @@ Bridge rfxcom:bridge:usb0 [ serialPort="/dev/&lt;device&gt;" ] {
#### RFXCOM over TCP/IP #### RFXCOM over TCP/IP
You can also use an RFXCOM device over TCP/IP. To start a TCP server for an RFXCOM device, you can use socat: You can also use an RFXCOM device over TCP/IP.
To start a TCP server for an RFXCOM device, you can use socat:
``` ```
socat tcp-listen:10001,fork,reuseaddr file:/dev/ttyUSB0,raw socat tcp-listen:10001,fork,reuseaddr file:/dev/ttyUSB0,raw
@ -205,7 +213,8 @@ The binding uses the following system channels:
### Thing files ### Thing files
Sensors/actuators are easy to configure through the PaperUI. However, if you used a thing file for your RFXCOM you can also configure them manually there as well, for example: Sensors/actuators are easy to configure through the PaperUI.
However, if you used a thing file for your RFXCOM you can also configure them manually there as well, for example:
``` ```
Bridge rfxcom:bridge:usb0 [ serialPort="/dev/&lt;device&gt;" ] { Bridge rfxcom:bridge:usb0 [ serialPort="/dev/&lt;device&gt;" ] {
@ -253,7 +262,7 @@ This binding currently supports the following things / message types:
### bbqtemperature - RFXCOM BBQ Temperature Sensor ### bbqtemperature - RFXCOM BBQ Temperature Sensor
A BBQ Temperature device. A BBQ Temperature device
#### Channels #### Channels
@ -273,7 +282,7 @@ A BBQ Temperature device.
### blinds1 - RFXCOM Blinds1 Actuator ### blinds1 - RFXCOM Blinds1 Actuator
A Blinds1 device. A Blinds1 device
#### Channels #### Channels
@ -304,10 +313,9 @@ A Blinds1 device.
* T7 - Forest * T7 - Forest
* T8 - Chamberlain CS4330CN * T8 - Chamberlain CS4330CN
### chime - RFXCOM Chime ### chime - RFXCOM Chime
A Chime device. A Chime device
#### Channels #### Channels
@ -359,7 +367,7 @@ A Current sensing device.
### currentenergy - RFXCOM CurrentEnergy Actuator ### currentenergy - RFXCOM CurrentEnergy Actuator
A CurrentEnergy device. A CurrentEnergy device
#### Channels #### Channels
@ -386,7 +394,7 @@ A CurrentEnergy device.
### curtain1 - RFXCOM Curtain1 Actuator ### curtain1 - RFXCOM Curtain1 Actuator
A Curtain1 device. A Curtain1 device
#### Channels #### Channels
@ -411,7 +419,7 @@ A Curtain1 device.
### datetime - RFXCOM Date/time sensor ### datetime - RFXCOM Date/time sensor
A DateTime device. A DateTime device
#### Channels #### Channels
@ -434,7 +442,7 @@ A DateTime device.
### energy - RFXCOM Energy Sensor ### energy - RFXCOM Energy Sensor
An Energy device. An Energy device
#### Channels #### Channels
@ -462,7 +470,7 @@ An Energy device.
### humidity - RFXCOM Humidity Sensor ### humidity - RFXCOM Humidity Sensor
A Humidity device. A Humidity device
#### Channels #### Channels
@ -488,7 +496,7 @@ A Humidity device.
### lighting1 - RFXCOM Lighting1 Actuator ### lighting1 - RFXCOM Lighting1 Actuator
A Lighting1 device. A Lighting1 device
#### Channels #### Channels
@ -522,7 +530,7 @@ A Lighting1 device.
### lighting2 - RFXCOM Lighting2 Actuator ### lighting2 - RFXCOM Lighting2 Actuator
A Lighting2 device. A Lighting2 device
#### Channels #### Channels
@ -549,7 +557,7 @@ A Lighting2 device.
### lighting4 - RFXCOM Lighting4 Actuator ### lighting4 - RFXCOM Lighting4 Actuator
A Lighting4 device. A Lighting4 device
#### Channels #### Channels
@ -582,15 +590,15 @@ A Lighting4 device.
* 3 - ON (value 3) * 3 - ON (value 3)
* 4 - OFF (value 4) * 4 - OFF (value 4)
* 5 - ON (value 5) * 5 - ON (value 5)
* 6 - value 5 * 6 - value 6
* 7 - ON (value 7) * 7 - ON (value 7)
* 8 - value 8 * 8 - value 8
* 9 - ON (value 9) * 9 - ON (value 9)
* 10 - value 10 * 10 - ON (value 10)
* 11 - value 11 * 11 - ON (value 11)
* 12 - ON (value 12) * 12 - ON (value 12)
* 13 - value 13 * 13 - value 13
* 14 - value 14 * 14 - OFF (value 14)
* 15 - value 15 * 15 - value 15
* offCommandId - Off command * offCommandId - Off command
@ -602,7 +610,7 @@ A Lighting4 device.
* 3 - ON (value 3) * 3 - ON (value 3)
* 4 - OFF (value 4) * 4 - OFF (value 4)
* 5 - ON (value 5) * 5 - ON (value 5)
* 6 - value 5 * 6 - value 6
* 7 - ON (value 7) * 7 - ON (value 7)
* 8 - value 8 * 8 - value 8
* 9 - ON (value 9) * 9 - ON (value 9)
@ -617,7 +625,9 @@ A Lighting4 device.
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. 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. 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): For a usb attached RFXCOM on Windows the configuration could look like this (note that the `onCommandId`, `offCommandId` and `pulse` are all optional):
@ -658,7 +668,7 @@ end
### lighting5 - RFXCOM Lighting5 Actuator ### lighting5 - RFXCOM Lighting5 Actuator
A Lighting5 device. A Lighting5 device
#### Channels #### Channels
@ -698,7 +708,7 @@ A Lighting5 device.
### lighting6 - RFXCOM Lighting6 Actuator ### lighting6 - RFXCOM Lighting6 Actuator
A Lighting6 device. A Lighting6 device
#### Channels #### Channels
@ -722,7 +732,7 @@ A Lighting6 device.
### rain - RFXCOM Rain Sensor ### rain - RFXCOM Rain Sensor
A Rain device. A Rain device
#### Channels #### Channels
@ -752,7 +762,7 @@ A Rain device.
### rfy - RFXCOM Rfy Actuator ### rfy - RFXCOM Rfy Actuator
A Rfy device. A Rfy device
#### Channels #### Channels
@ -779,7 +789,7 @@ A Rfy device.
### security1 - RFXCOM Security1 Sensor ### security1 - RFXCOM Security1 Sensor
A Security1 device. A Security1 device
#### Channels #### Channels
@ -815,7 +825,7 @@ A Security1 device.
### temperaturehumiditybarometric - RFXCOM Temperature-Humidity-Barometric Sensor ### temperaturehumiditybarometric - RFXCOM Temperature-Humidity-Barometric Sensor
A Temperature-Humidity-Barometric device. A Temperature-Humidity-Barometric device
#### Channels #### Channels
@ -845,7 +855,7 @@ A Temperature-Humidity-Barometric device.
### temperaturehumidity - RFXCOM Temperature-Humidity Sensor ### temperaturehumidity - RFXCOM Temperature-Humidity Sensor
A Temperature-Humidity device. A Temperature-Humidity device
#### Channels #### Channels
@ -884,7 +894,7 @@ A Temperature-Humidity device.
### temperaturerain - RFXCOM Temperature-Rain Sensor ### temperaturerain - RFXCOM Temperature-Rain Sensor
A Temperature-Rain device. A Temperature-Rain device
#### Channels #### Channels
@ -909,7 +919,7 @@ A Temperature-Rain device.
### temperature - RFXCOM Temperature Sensor ### temperature - RFXCOM Temperature Sensor
A Temperature device. A Temperature device
#### Channels #### Channels
@ -943,7 +953,7 @@ A Temperature device.
### thermostat1 - RFXCOM Thermostat1 Sensor ### thermostat1 - RFXCOM Thermostat1 Sensor
A Thermostat1 device. A Thermostat1 device
#### Channels #### Channels
@ -1038,7 +1048,7 @@ Any messages that RFXCOM can receive but not decode.
### uv - RFXCOM UV/Temperature Sensor ### uv - RFXCOM UV/Temperature Sensor
A UV/Temperature device. A UV/Temperature device
#### Channels #### Channels
@ -1066,7 +1076,7 @@ A UV/Temperature device.
### wind - RFXCOM Wind Sensor ### wind - RFXCOM Wind Sensor
A Wind device. A Wind device
#### Channels #### Channels
@ -1097,4 +1107,3 @@ A Wind device.
* WIND5 - UPM WDS500 * WIND5 - UPM WDS500
* WIND6 - WS2300 * WIND6 - WS2300
* WIND7 - Alecto WS4500, Auriol H13726, Hama EWS1500, Meteoscan W155/W160, Ventus WS155 * WIND7 - Alecto WS4500, Auriol H13726, Hama EWS1500, Meteoscan W155/W160, Ventus WS155

View File

@ -3,7 +3,7 @@ id: rme
label: RME label: RME
title: RME - Bindings title: RME - Bindings
type: binding type: binding
description: "This binding integrates the RME RainManager rain water pump and management system" description: "This binding is for the RME RainManager rain water pump and management system"
since: 2x since: 2x
install: auto install: auto
--- ---
@ -14,7 +14,7 @@ install: auto
# RME Binding # RME Binding
This binding integrates the RME RainManager rain water pump and management system This binding is for the RME RainManager rain water pump and management system
## Supported Things ## Supported Things
@ -22,21 +22,21 @@ Manager
## Thing Configuration ## Thing Configuration
The Thing configuration requires the name of the serial port that is used to connect the ESH host with the RME unit The Thing configuration requires the name of the serial port that is used to connect the host with the RME unit
## Channels ## Channels
All devices support some of the following channels: All devices support some of the following channels:
| Channel Type ID | Item Type | Description | | Channel Type ID | Item Type | Description | | |
|-----------------|------------------------|--------------|----------------- |------------- | |-----------------|-----------|---------------------------------------------------------------------------|---|---|
| waterlevel | Number | Indicates the % the cistern is filled with water | | waterlevel | Number | Indicates the % the cistern is filled with water | | |
| mode | String | Indicates the operation mode of the RME Rain Manager, Automatic or Manual | | mode | String | Indicates the operation mode of the RME Rain Manager, Automatic or Manual | | |
| source | String | Indicates water source used to supply water, e.g cistern or city | | source | String | Indicates water source used to supply water, e.g cistern or city | | |
| exitpump | Switch | Indicates whether the exit pump is switched on | | exitpump | Switch | Indicates whether the exit pump is switched on | | |
| entrypump | Switch | Indicates whether the entry pump is switched on | | entrypump | Switch | Indicates whether the entry pump is switched on | | |
## Full Example ## Example
.things .things

View File

@ -3,7 +3,7 @@ id: rotelra1x
label: Rotel Amplifier label: Rotel Amplifier
title: Rotel Amplifier - Bindings title: Rotel Amplifier - Bindings
type: binding type: binding
description: "Connects to a Rotel RA11 or RA12 integrated amplifier via a serial (RS232) interface. The Rotel amplifiers supported by this binding also include an integrated DAC unit. To use the binding, connect a serial cable between the amplifier and the computer running openHAB." description: "Connects to a Rotel RA11 or RA12 integrated amplifier via a serial (RS232) interface."
since: 2x since: 2x
install: auto install: auto
--- ---
@ -14,28 +14,30 @@ install: auto
# Rotel Amplifier Binding # Rotel Amplifier Binding
Connects to a Rotel RA11 or RA12 integrated amplifier via a serial (RS232) interface. The Rotel amplifiers supported by this binding also include an integrated DAC unit. To use the binding, connect a serial cable between the amplifier and the computer running openHAB. Connects to a Rotel RA11 or RA12 integrated amplifier via a serial (RS232) interface.
The Rotel amplifiers supported by this binding also include an integrated DAC unit.
To use the binding, connect a serial cable between the amplifier and the computer running openHAB.
## Overview ## Overview
This binding implements the serial protocol specified by Rotel in their documentation. The protocol allows one to control the amplifier, to query its state, and to receive live updates of changed values. For example, when turning the volume knob, the unit sends updates as different volumes are set. This binding implements the serial protocol specified by Rotel in their documentation.
The protocol allows one to control the amplifier, to query its state, and to receive live updates of changed values.
For example, when turning the volume knob, the unit sends updates as different volumes are set.
## Supported things ## Supported things
* Rotel Amplifier. Each thing represent an amplifier unit, connected * Rotel Amplifier. Each thing represent an amplifier unit, connected over an RS232 connection.
over a RS232 connection.
## Discovery ## Discovery
Auto-discovery is not supported -- things can be added manually. Auto-discovery is not supported; things can be added manually.
## Thing configuration ## Thing configuration
The thing has the following configuration parameter: The thing has the following configuration parameter:
| Parameter | Parameter name | Description | | Parameter | Parameter name | Description |
|----------------|-------------------------------------------------------------------------------------------------------------------| |----------------|--------------------------------------------------------------------------------------------------------------------|
| Serial port | port | Specifies the name of the serial port used to communicate with the device. (String) | | Serial port | port | Specifies the name of the serial port used to communicate with the device. (String) |
| Maximum volume | maximum-volume | This is the value to send to the amplifier when the volume channel is set to 100 % (1). (Integer) | | Maximum volume | maximum-volume | This is the value to send to the amplifier when the volume channel is set to 100 % (1). (Integer) |
@ -45,29 +47,28 @@ The thing has the following configuration parameter:
## Channel summary ## Channel summary
| Channel ID | Item Type | Description | | Channel ID | Item Type | Description |
|------------|-----------|--------------------------------------------------------------------------------------------------| |------------|-----------|-------------------------------------------------------------------------------------------------|
| power | Switch | Controls and reports the power state (soft on/off) | | power | Switch | Controls and reports the power state (soft on/off) |
| volume | Dimmer | Volume control. | | volume | Dimmer | Volume control |
| mute | Switch | Enable / disable mute. | | mute | Switch | Enable / disable mute |
| source | String | Selects from a list of input sources (see options). | | source | String | Selects from a list of input sources (see options) |
| frequency | Number | Reports the current sampling frequency if playing from a digital input. | | frequency | Number | Reports the current sampling frequency if playing from a digital input |
| brightness | Dimmer | Sets the backlight level of the display. Maps from percentage to 6 levels (can't be turned off). | | brightness | Dimmer | Sets the backlight level of the display. Maps from percentage to 6 levels (can't be turned off) |
All channels are updated in real time if modified by other means, e.g. by the remote control. All channels are updated in real time if modified by other means, e.g. by the remote control.
## Configuration example ## Configuration example
The following lines The following lines can be added to the configuration files in order to set up an amplifier at serial port `/dev/ttyS0`.
can be added to the configuration files in order to set up an amplifier at serial port `/dev/ttyS0`.
*demo.things demo.things
``` ```
Thing rotelra1x:amp:living_room_amp [ port="/dev/ttyS0" ] Thing rotelra1x:amp:living_room_amp [ port="/dev/ttyS0" ]
``` ```
*demo.items demo.items
``` ```
Switch Amp_Power "On/off" { channel="rotelra1x:amp:living_room_amp:power" } Switch Amp_Power "On/off" { channel="rotelra1x:amp:living_room_amp:power" }
@ -78,8 +79,7 @@ Number Amp_Frequency "Frequency" { channel="rotelra1x:amp:l
Dimmer Amp_Brightness "Display brightness" <light> { channel="rotelra1x:amp:living_room_amp:brightness" } Dimmer Amp_Brightness "Display brightness" <light> { channel="rotelra1x:amp:living_room_amp:brightness" }
``` ```
demo.sitemap:
*demo.sitemap:
``` ```
sitemap demo label="Main Menu" sitemap demo label="Main Menu"
@ -97,6 +97,4 @@ sitemap demo label="Main Menu"
## References ## References
Rotel serial protocol is available here: http://www.rotel.com/sites/default/files/product/rs232/RA12%20Protocol.pdf . Rotel serial protocol is available here: <http://www.rotel.com/sites/default/files/product/rs232/RA12%20Protocol.pdf>.

View File

@ -3,7 +3,7 @@ id: russound
label: Russound label: Russound
title: Russound - Bindings title: Russound - Bindings
type: binding 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.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)." description: "This binding provides integration with any Russound system that support the RIO protocol (all MCA systems, all X systems)."
since: 2x since: 2x
logo: images/addons/russound.png logo: images/addons/russound.png
install: auto install: auto
@ -15,26 +15,39 @@ install: auto
# Russound Binding # 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.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). 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:* 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 instability.
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. *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 ## Supported Bridges/Things
* Bridge: Russound System (usually the main controller) * Bridge: Russound System (usually the main controller)
* Bridge: Russound Controller (1-6 controllers supported) * Bridge: Russound Controller (1-6 controllers supported)
* Thing: Russound Source (1-8 sources supported) * Thing: Russound Source (1-8 sources supported)
* Thing: Russound Zone (1-8 [depending on the controller] zones supported for each controller) * Thing: Russound Zone (1-8 &lsqb;depending on the controller&rsqb; zones supported for each controller)
## Device Discovery ## 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. 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 ## 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. 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 ## Thing Configuration
@ -52,22 +65,21 @@ The following configurations occur for each of the bridges/things:
### Russound Source ### Russound Source
| Name | Type | Description | | Name | Type | Description |
|--------------|---------------|--------------------------------------------------------------------------| |--------|------|---------------------|
| source | int | The source # (1-12) | | source | int | The source # (1-12) |
### Russound Controller ### Russound Controller
| Name | Type | Description | | Name | Type | Description |
|--------------|---------------|--------------------------------------------------------------------------| |------------|------|--------------------------------|
| controller | int | The controller address # (1-6) | | controller | int | The controller address # (1-6) |
### Russound Zone ### Russound Zone
| Name | Type | Description | | Name | Type | Description |
|--------------|---------------|--------------------------------------------------------------------------| |------|------|------------------|
| zone | int | The zone # (1-6) | | zone | int | The zone # (1-6) |
## Channels ## Channels
The following channels are supported for each bridge/thing The following channels are supported for each bridge/thing
@ -75,7 +87,7 @@ The following channels are supported for each bridge/thing
### Russound System ### Russound System
| Channel Type ID | Read/Write | Item Type | Description | | Channel Type ID | Read/Write | Item Type | Description |
|--------------------|------------|--------------|--------------------------------------------------------------------- | |-----------------|------------|-----------|--------------------------------------------------------------|
| lang | 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 | | allon | RW | Switch | Turn on/off all zones |
| controller | R | String | JSON representation of all controllers in the system | | controller | R | String | JSON representation of all controllers in the system |
@ -83,12 +95,13 @@ The following channels are supported for each bridge/thing
#### Notes #### 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). - 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) ### Russound Source (please see source cross-reference below for what is supported by which sources)
| Channel Type ID | Read/Write | Item Type | Description | | Channel Type ID | Read/Write | Item Type | Description |
|----------------------|------------|--------------|--------------------------------------------------------------------- | |----------------------|------------|-----------|--------------------------------------------------------------------|
| name | R | String | The name of the source | | name | R | String | The name of the source |
| type | R | String | The type of source | | type | R | String | The type of source |
| channel | R | String | The currently playing channel (usually tuner frequency) | | channel | R | String | The currently playing channel (usually tuner frequency) |
@ -130,9 +143,10 @@ The following channels are supported for each bridge/thing
### Russound Controller ### Russound Controller
| Channel Type ID | Read/Write | Item Type | Description | | Channel Type ID | Read/Write | Item Type | Description |
|-----------------|------------|--------------|--------------------------------------------------------------------- | |-----------------|------------|-----------|--------------------------------------------------------|
| zones | R | String | The JSON representation of all zones in the controller | | zones | R | String | The JSON representation of all zones in the controller |
#### Notes #### Notes
* The JSON will look like: `[{"id":1, "name":"XXX"},...]` * The JSON will look like: `[{"id":1, "name":"XXX"},...]`
@ -140,12 +154,12 @@ The following channels are supported for each bridge/thing
### Russound Zone ### Russound Zone
| Channel Type ID | Read/Write | Item Type | Description | | Channel Type ID | Read/Write | Item Type | Description |
|--------------------|------------|--------------|--------------------------------------------------------------------- | |--------------------|------------|------------|-------------------------------------------------------------------------------------------|
| name | R | String | The name of the zone (changed by SCS-C5 software) | | name | R | String | The name of the zone (changed by SCS-C5 software) |
| source | RW | Number | The (physical) number for the current source | | source | RW | Number | The (physical) number for the current source |
| bass | RW | Number | The bass setting (-10 to 10) | | bass | RW | Number | The bass setting (-10 to 10) |
| treble | RW | Number | The treble 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]) | | balance | RW | Number | The balance setting (-10 &lsqb;full left&rsqb; to 10 &lsqb;full right&rsqb;) |
| loudness | RW | Switch | Set's the loudness on/off | | loudness | RW | Switch | Set's the loudness on/off |
| turnonvolume | RW | Dimmer | The initial volume when turned on (0 to 100) | | turnonvolume | RW | Dimmer | The initial volume when turned on (0 to 100) |
| donotdisturb | RW | String | The do not disturb setting (on/off/slave) | | donotdisturb | RW | String | The do not disturb setting (on/off/slave) |
@ -172,10 +186,11 @@ The following channels are supported for each bridge/thing
| mminit | W | Switch**** | Whether to initial a media management session (ON) or close an existing one (OFF) | | 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) | | mmcontextmenu | W | Switch**** | Whether to initial a media management context session (ON) or close an existing one (OFF) |
#### Notes: #### 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. 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. 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") 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) 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. 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.
@ -213,7 +228,7 @@ 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"}]`. 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. 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"}]` 3. 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. 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.
@ -247,7 +262,7 @@ The channel will be refreshed with the new representation after processing. If
1. Sirius Internal Radio Only 1. Sirius Internal Radio Only
## Full Example ## Example
The following is an example of The following is an example of
@ -315,8 +330,6 @@ String Rio_Src_RadioText "Radio Text [%s]" { channel="russound:source:1:radiotex
String Rio_Src_RadioText2 "Radio Text #2 [%s]" { channel="russound:source:1:radiotext2" } String Rio_Src_RadioText2 "Radio Text #2 [%s]" { channel="russound:source:1:radiotext2" }
String Rio_Src_RadioText3 "Radio Text #3 [%s]" { channel="russound:source:1:radiotext3" } 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_Src_RadioText4 "Radio Text #4 [%s]" { channel="russound:source:1:radiotext4" }
``` ```
.sitemap .sitemap
@ -379,5 +392,3 @@ Frame label="Russound" {
} }
} }
``` ```

View File

@ -25,27 +25,27 @@ The Serial binding allows openHAB to communicate in ASCII over serial ports atta
## Port Configuration Notes ## Port Configuration Notes
In most cases you will not need to perform special steps to access your serial ports, but these notes might be helpful. In most cases it will not be needed to perform special steps to access serial ports, but these notes might be helpful.
### Linux Users ### Linux Users
* If you are using **non standard serial ports** you have to adapt start.sh to have the serial port included. The `java` command line should then include the following parameters: * When using **non standard serial ports**, adapt start.sh to have the serial port included. The `java` command line should then include the following parameters:
``` ```
-Dgnu.io.rxtx.SerialPorts=/dev/ttyAMA0 -Dgnu.io.rxtx.SerialPorts=/dev/ttyAMA0
``` ```
where `/dev/ttyAMA0` is the path to your serial port. Please be aware to change all scripts you might use for startup (debug, automatic start in Linux, etc.). where `/dev/ttyAMA0` is the path to the serial port. Remember to change all scripts used for startup (debug, automatic start in Linux, etc.).
* Your Linux distro might require that you add the `openhab` user to the `dialout` group to grant permission to read/write to the serial port. * A Linux distro might require adding the `openhab` user to the `dialout` group to grant permission to read/write to the serial port.
``` ```
sudo usermod -a -G dialout openhab sudo usermod -a -G dialout openhab
``` ```
The user will need to logout from all login instances and log back in to see their new group added. If you add your user to this group and still cannot get permission, rebooting the box to ensure the new group permission is attached to your user is suggested. The user will need to logout from all login instances and log back in to see their new group added. If the user added to this group still cannot get permission, rebooting the box to ensure the new group permission is attached to the user is suggested.
* If you use more than one USB serial converter like FTDI or CP2102, it may happen that your /dev/ttyUSB0 device is named /dev/ttyUSB1 after a reboot. To prevent this problem you can assign alias names for your serial devices by adding them to `/etc/udev/rules.d/99-com.rules`. * When using more than one USB serial converter like FTDI or CP2102, it may happen that the /dev/ttyUSB0 device is named /dev/ttyUSB1 after a reboot. To prevent this problem, alias names can be assigned to serial devices by adding them to `/etc/udev/rules.d/99-com.rules`.
example: example:
@ -56,7 +56,7 @@ SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", ATTRS{seria
### Mac Users ### Mac Users
If you are working with a Mac, you might need to install a driver for your USB-RS232 converter (e.g. [osx-pl2303](http://osx-pl2303.sourceforge.net/) or [pl2303](http://mac.softpedia.com/get/Drivers/PL2303-OS-X-driver.shtml)) and create the /var/lock folder, see the [rxtx troubleshooting guide](http://rxtx.qbang.org/wiki/index.php/Trouble_shooting#Mac_OS_X_users). When working with a Mac, it may be necessary to install a driver for the USB-RS232 converter (e.g. [osx-pl2303](http://osx-pl2303.sourceforge.net/) or [pl2303](http://mac.softpedia.com/get/Drivers/PL2303-OS-X-driver.shtml)) and create the /var/lock folder; see the [rxtx troubleshooting guide](http://rxtx.qbang.org/wiki/index.php/Trouble_shooting#Mac_OS_X_users).
## Binding Configuration ## Binding Configuration
@ -77,11 +77,11 @@ serial="<port>@<baudrate>,REGEX(<regular expression>), UP(<Up string>),DOWN(<Dow
where: 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. * `<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. * `<baudrate>` is the baud rate of the port. If no baud rate is specified, the binding defaults to 9600 baud.
* `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. * `REGEX(<regular expression>)` allows parsing for special strings or numbers in the serial stream. A capture group (e.g. REGEX(Position:([0-9.]*)) can be used 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). * `BASE64` enables the Base64 mode. With this mode all data received on the serial port is saved in Base64 format. All data that is sent to the serial port also 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 * `ON(<On string>),OFF(<Off string>)` 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 makes it unnecessary 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 * `UP(<Up string>),DOWN(<Down string>),STOP(<Stop string>)` used in conjunction with a Rollershutter, this mapping will send specific commands to serial port. Use REGEX to parse Rollershutter postion (0-100%) coming 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: Base64 can be decoded in the rules by importing `javax.xml.bind.DatatypeConverter` and then decoding the value like this:
@ -89,9 +89,9 @@ Base64 can be decoded in the rules by importing `javax.xml.bind.DatatypeConverte
DatatypeConverter::parseBase64Binary(ITEM.state.toString) DatatypeConverter::parseBase64Binary(ITEM.state.toString)
``` ```
For encoding use the `printBase64Binary` method of the `DatatypeConverter`. This is optional. For encoding, use the `printBase64Binary` method of the `DatatypeConverter`. This is optional.
As a result, your lines in the items file might look like these: As a result, lines in the items file might look like these:
``` ```
Switch HardwareButton "Bell" (Entrance) { serial="/dev/ttyS0" } Switch HardwareButton "Bell" (Entrance) { serial="/dev/ttyS0" }

View File

@ -50,8 +50,13 @@ The binding requires no special configuration
The Squeeze Server bridge requires the ip address, web port, and cli port to access it on. The Squeeze Server bridge requires the ip address, web port, and cli port to access it on.
If Squeeze Server authentication is enabled, the userId and password also are required. If Squeeze Server authentication is enabled, the userId and password also are required.
Squeeze Players are identified by their MAC address.
In the thing file, this looks e.g. like Squeeze Players are identified by their MAC address, which is required.
In addition, the notification timeout can be specified.
If omitted, the default timeout value will be used.
A notification volume can be optionally specified, which, if provided, will override the player's current volume level when playing notifications.
Here are some examples of how to define the Squeeze Server and Player things in a things file.
``` ```
Bridge squeezebox:squeezeboxserver:myServer [ ipAddress="192.168.1.10", webport=9000, cliport=9090 ] Bridge squeezebox:squeezeboxserver:myServer [ ipAddress="192.168.1.10", webport=9000, cliport=9090 ]
@ -60,7 +65,7 @@ Bridge squeezebox:squeezeboxserver:myServer [ ipAddress="192.168.1.10", webport=
} }
``` ```
Or, if Squeeze Server authentication is enabled: If Squeeze Server authentication is enabled, the user ID and password can be specified for the Squeeze Server:
``` ```
Bridge squeezebox:squeezeboxserver:myServer [ ipAddress="192.168.1.10", webport=9000, cliport=9090, userId="yourid", password="yourpassword" ] Bridge squeezebox:squeezeboxserver:myServer [ ipAddress="192.168.1.10", webport=9000, cliport=9090, userId="yourid", password="yourpassword" ]
@ -69,6 +74,15 @@ Bridge squeezebox:squeezeboxserver:myServer [ ipAddress="192.168.1.10", webport=
} }
``` ```
The notification timeout and/or notification volume can be specified for the Squeeze Player:
```
Bridge squeezebox:squeezeboxserver:myServer [ ipAddress="192.168.1.10", webport=9000, cliport=9090 ]
{
Thing squeezeboxplayer myplayer[ mac="00:f1:bb:00:00:f1", notificationTimeout=30, notificationVolume=35 ]
}
```
## Server Channels ## Server Channels
The Squeezebox server supports the following channel: The Squeezebox server supports the following channel:
@ -103,7 +117,6 @@ All devices support some of the following channels:
| coverartdata | Image | Image data of cover art of the current song | | coverartdata | Image | Image data of cover art of the current song |
| ircode | String | Received IR code | | ircode | String | Received IR code |
| numberPlaylistTracks | Number | Number of playlist tracks | | numberPlaylistTracks | Number | Number of playlist tracks |
| notificationSoundVolume | Dimmer | Volume for playing notifications |
| playFavorite | String | ID of Favorite to play (channel's state options contains available favorites) | | playFavorite | String | ID of Favorite to play (channel's state options contains available favorites) |
## Playing Favorites ## Playing Favorites
@ -114,6 +127,38 @@ The Selection widget in HABpanel can be used to present the favorites as a choic
Selecting from that choice list will play the favorite on the SqueezeBox player. Selecting from that choice list will play the favorite on the SqueezeBox player.
Currently, only favorites from the root level of the LMS favorites list are exposed on the **playFavorite** channel. Currently, only favorites from the root level of the LMS favorites list are exposed on the **playFavorite** channel.
### How to Set Up Favorites
- Add some favorites to your favorites list in LMS (local music playlists, Pandora, Slacker, Internet radio, etc.).
Keep all favorites at the root level (i.e. favorites in sub-folders will be ignored).
- If you're on an older openHAB build, you may need to delete and readd your squeezebox server and player things to pick up the new channels.
- Create a new item on each player
```
String YourPlayer_PlayFavorite "Play Favorite [%s]" { channel="squeezebox:squeezeboxplayer:736549a3:00042016e7a0:playFavorite" }
```
#### For HABpanel (do this for each player)
- Add a Selection widget to your dashboard
- In the Selection widget settings
- Enter the **YourPlayer_PlayFavorite** item
- Select *Choices source* of *Server-provided item options*
- Modify other settings to suite your taste
- When you load the dashboard and click on the selection widget, you should see the favorites.
Selecting a favorite from the list will play it.
#### For Sitemap
- Currently, the Selection widget in Basic UI doesnt use the state options.
## Notifications ## Notifications
### How To Set Up ### How To Set Up
@ -121,20 +166,9 @@ Currently, only favorites from the root level of the LMS favorites list are expo
Squeeze Players can be set up as audio sinks in openHAB. Squeeze Players can be set up as audio sinks in openHAB.
Please follow the [openHAB multimedia documentation](http://docs.openhab.org/configuration/multimedia.html) for setup guidance. Please follow the [openHAB multimedia documentation](http://docs.openhab.org/configuration/multimedia.html) for setup guidance.
You can create an item and sitemap entry in order to set the notification volume independently from the Squeeze Player's current volume setting. You can set the default notification volume in the player thing configuration.
If the notification volume is not specified, it will use the Player's current volume setting.
Item for setting notification volume. You can override the default notification volume by supplying it as a parameter to `say` and `playSound`.
```
Dimmer NotificationVolume "Notification Volume [%d %%]" {channel="squeezebox:squeezeboxplayer:5919BEA2-764B-4590-BC70-D74DCC15491B:20cfbf221510:notificationSoundVolume"}
```
Sitemap entry for setting notification volume.
```
Slider item=NotificationVolume label="Notification Volume"
```
You can play notifications from within rules. You can play notifications from within rules.
@ -143,14 +177,14 @@ rule "Garage Door Open Notification"
when when
Item GarageDoorOpenNotification received command ON Item GarageDoorOpenNotification received command ON
then then
// Play the notification on the default sink // Play the notification on the default sink at a specified volume level
say("The garage door is open!", "voicerss:enUS") say("The garage door is open!", "voicerss:enUS", 35)
// Play the notification on a specific sink // Play the notification on a specific sink
say("The garage door is open!", "voicerss:enUS", "squeezebox:squeezeboxplayer:5919BEA2-764B-4590-BC70-D74DCC15491B:20cfbf221510") say("The garage door is open!", "voicerss:enUS", "squeezebox:squeezeboxplayer:5919BEA2-764B-4590-BC70-D74DCC15491B:20cfbf221510")
end end
``` ```
And, you can play sounds from the conf/sounds directory. And, you can play sounds from the `conf/sounds` directory.
``` ```
rule "Play Sounds" rule "Play Sounds"
@ -158,16 +192,23 @@ when
Item PlaySounds received command ON Item PlaySounds received command ON
then then
// Play the sound on the default sink // Play the sound on the default sink
playsound("doorbell.mp3") playSound("doorbell.mp3")
// Play the sound on a specific sink // Play the sound on a specific sink at a specified volume level
playsound("squeezebox:squeezeboxplayer:5919BEA2-764B-4590-BC70-D74DCC15491B:20cfbf221510", "doorbell.mp3") playSound("squeezebox:squeezeboxplayer:5919BEA2-764B-4590-BC70-D74DCC15491B:20cfbf221510", "doorbell.mp3", 45)
end end
``` ```
### Known Issues ### Known Issues
- There are some versions of squeezelite that will not correctly play very short duration mp3 files. Versions of squeezelite after v1.7 and before v1.8.6 will not play very short duration mp3 files reliably. For example, if you're using piCorePlayer (which uses squeezelite), please check your version of squeezelite if you're having trouble playing notifications. This bug has been fixed in squeezelite version 1.8.6-985, which is included in piCorePlayer version 3.20. - There are some versions of squeezelite that will not correctly play very short duration mp3 files.
Versions of squeezelite after v1.7 and before v1.8.6 will not play very short duration mp3 files reliably.
For example, if you're using piCorePlayer (which uses squeezelite), please check your version of squeezelite if you're having trouble playing notifications.
This bug has been fixed in squeezelite version 1.8.6-985, which is included in piCorePlayer version 3.20.
- When streaming from a remote service (such as Pandora or Spotify), after the notification plays, the Squeezebox Server starts playing a new track, instead of picking up from where it left off on the currently playing track. - When streaming from a remote service (such as Pandora or Spotify), after the notification plays, the Squeezebox Server starts playing a new track, instead of picking up from where it left off on the currently playing track.
- There have been reports that notifications do not play reliably, or do not play at all, when using Logitech Media Server (LMS) version 7.7.5. Therefore, it is recommended that the LMS be on a more current version than 7.7.5. - There have been reports that notifications do not play reliably, or do not play at all, when using Logitech Media Server (LMS) version 7.7.5.
Therefore, it is recommended that the LMS be on a more current version than 7.7.5.
- There have been reports that the LMS does not play some WAV files reliably.
If you're using a TTS service that produces WAV files, and the notifications are not playing, try using an MP3-formatted TTS notification.

View File

@ -44,7 +44,7 @@ The attentive reader discovers that there is many missing sensor types; `UV`, `L
Support have not been implemented on the openhab side yet, contributions are welcome. Support have not been implemented on the openhab side yet, contributions are welcome.
***Switchbased sensors workaround*** <br> ***Switchbased sensors workaround*** <br>
* Some 433MHz magnetic & PIR sensors for example magnetic door sensors are detected as a regular `switch` things instead of a separate type. There is technically no way of distinguish them apart from regulur `switch` things. * Some 433MHz magnetic & PIR sensors, for example, magnetic door sensors, are detected as regular `switch` Things instead of type `contact`. There is technically no way of distinguish them apart from regulur `switch` Things.
For using them as sensors only (not paired to a lamp) please consult the workaround in the channel section. For using them as sensors only (not paired to a lamp) please consult the workaround in the channel section.
## Discovery ## Discovery
@ -57,16 +57,13 @@ If you want to use the *Telldus Live* its bridge, *Telldus Live bridge* need to
## Binding Configuration ## Binding Configuration
***For USB connected tellsticks only, eg. Basic and DUO*** The binding itself requires no configuration.
First of all you need to make sure that your JVM is matching your installed Telldus Center.
This normally means openHab must run on a 32bit JVM for windows and a 64bit JVM for linux.
For windows the binding is hardcoded to look for Telldus Center in Programs Files ("C:/Program Files/Telldus/;C:/Program Files (x86)/Telldus/").
If you have trouble getting the telldus core library to work you can modify the library path using
## Thing Configuration ## Thing Configuration
Only the bridges require manual configuration. Only the bridges require manual configuration.
The devices and sensors should not be added by hand, let the discovery/inbox initially configure these. It is preferable that devices and sensors are discovered automatically; let the discovery/inbox initially configure them.
You can add them either with karaf: `inbox approve <thingId>` or by using the inbox of the Paper UI.
### Dimmers & switches ### Dimmers & switches
@ -80,10 +77,10 @@ The binding implements two different API:
**1)** *Telldus Core* which is a local only interface supported by USB based device. <br> **1)** *Telldus Core* which is a local only interface supported by USB based device. <br>
**2)** *Telldus Live* which is a REST based cloud service maintained by Telldus. <br> **2)** *Telldus Live* which is a REST based cloud service maintained by Telldus. <br>
> Not implemented yet but supported by some new devices: <br> > Not implemented yet but supported by some new devices, contributions are welcome. [API documention.](http://api.telldus.net/localapi/api.html) <br>
> **3)** *Local Rest API* is a local API which would work similar to Telldus Live but local. > **3)** *Local Rest API* is a local API which would work similar to Telldus Live but local.
Depending on your Tellstick model different API methods is available: Depending on your Tellstick model, different bridge-types are available:
<table> <table>
<tr><td><b>Model</b></td> <td><b>Telldus Core</b></td> <td><b>Telldus Live</b></td> <td>Local REST API</td> <td><b>Verified working with openHAB</b></td></tr> <tr><td><b>Model</b></td> <td><b>Telldus Core</b></td> <td><b>Telldus Live</b></td> <td>Local REST API</td> <td><b>Verified working with openHAB</b></td></tr>
@ -93,18 +90,23 @@ Depending on your Tellstick model different API methods is available:
<tr><td>Tellstick Net v.2</td><td></td><td>X</td><td>X</td><td></td></tr> <tr><td>Tellstick Net v.2</td><td></td><td>X</td><td>X</td><td></td></tr>
<tr><td>Tellstick ZNet Lite v.1</td><td></td><td>X</td><td>X</td><td>X</td></tr> <tr><td>Tellstick ZNet Lite v.1</td><td></td><td>X</td><td>X</td><td>X</td></tr>
<tr><td>Tellstick ZNet Lite v.2</td><td></td><td>X</td><td>X</td><td></td></tr> <tr><td>Tellstick ZNet Lite v.2</td><td></td><td>X</td><td>X</td><td></td></tr>
<tr><td><i>Tellstick ZNet Pro (Not released)</i></td><td></td><td>X</td><td>X</td><td></td></tr>
</table> </table>
#### Telldus Core Bridge #### Telldus Core Bridge
> To enable communication between openhab and tellstick-core service (Telldus center) they must use same architecture, eg. 32-bit or 64-bit. The supplied version from Telldus is compiled against 32-bit architecture. Therefore, it is better to use 32-bit java for openHAB. To check which version of Java is currently in use, run: `java -d32 -version`
>
> *For changing architecture in linux check out: `dpkg --add-architecture`*
The telldus-core bridge uses a library on the local computer which is a `.dll` file for Windows and a `.so` file for Linux. The default one is usually correct.
``` ```
Bridge tellstick:telldus-core:1 "Tellstick Duo" [resendInterval=200] Bridge tellstick:telldus-core:1 "Tellstick Duo" [resendInterval=200,libraryPath="C:/Program Files/Telldus/;C:/Program Files (x86)/Telldus/"]
``` ```
Optional: Optional:
- **libraryPath:** The path to tellduscore.dll/so, - **libraryPath:** The path to tellduscore.dll/so semicolon seperated list of folders.
- **resendInterval:** The interval between each transmission of command in ms, default 100ms. - **resendInterval:** The interval between each transmission of command in ms, default 100ms.
#### Telldus Live Bridge #### Telldus Live Bridge
@ -129,7 +131,7 @@ Optional:
## Channels ## Channels
Actuators (&lsqb;dimmer&rsqb;/&lsqb;switch&rsqb;) support the following channels: Actuators (dimmer/switch) support the following channels:
<table> <table>
<tr><td><b>Channel Type ID</b></td> <td><b>Item Type</b></td> <td><b>Description</b></td> </tr> <tr><td><b>Channel Type ID</b></td> <td><b>Item Type</b></td> <td><b>Description</b></td> </tr>
@ -138,7 +140,7 @@ Actuators (&lsqb;dimmer&rsqb;/&lsqb;switch&rsqb;) support the following channels
<tr><td>timestamp</td><td>DateTime</td><td>This channel reports the last time this device state changed.</td></tr> <tr><td>timestamp</td><td>DateTime</td><td>This channel reports the last time this device state changed.</td></tr>
</table> </table>
Sensors (&lsqb;sensor&rsqb;) support the following channels: Sensors (sensor) support the following channels:
<table> <table>
<tr><td><b>Channel Type ID</b></td> <td><b>Item Type</b></td> <td><b>Description</b></td> </tr> <tr><td><b>Channel Type ID</b></td> <td><b>Item Type</b></td> <td><b>Description</b></td> </tr>
@ -183,20 +185,22 @@ end
### tellstick.things ### tellstick.things
``` ```
Bridge tellstick:telldus-core:1 "Tellstick Duo" [resendInterval=200] Bridge tellstick:telldus-core:1 "Tellstick Duo" [resendInterval=200] {
Bridge tellstick:telldus-live:2 "Tellstick ZWave" [refreshInterval=10000, publicKey="XXXXXXXX", privateKey="YYYYYY", token= "ZZZZZZZZ", tokenSecret="UUUUUUUUUU"] dimmer BedroomCeilingLamp1 [protocol="arctech",model="selflearning-dimmer",name="BedroomCeilingLamp1",deviceId="8"]
switch LivingTV [protocol="arctech",name="LivingTV",deviceId="5"]
sensor OutsideSensor1 [protocol="fineoffset",model="temperaturehumidity",name="temperaturehumidity:125",deviceId="125_temperaturehumidity_fineoffset"]
}
Bridge tellstick:telldus-live:2 "Tellstick ZWave" [refreshInterval=10000, publicKey="XXXXXXXX", privateKey="YYYYYY", token= "ZZZZZZZZ", tokenSecret="UUUUUUUUUU"] {
sensor OutsideSensor2 [protocol="fineoffset",model="temperaturehumidity",name="temperaturehumidity:120",deviceId="120_temperaturehumidity_fineoffset"]
}
``` ```
Devices are preferable discovered automatically.
Add them either with karaf: `inbox approve <thingId>` or in paperUI. The bridges can also be added with PaperUI.
### tellstick.items ### tellstick.items
List available devices in karaf with `things` or get the channels in paperUI. ```
Number OutsideSensor1_Temperture <temperature> { channel="tellstick:sensor:tellstickgateway:OutsideSensor1:temperature"}
Number OutsideSensor1_Humidity <humidity> { channel="tellstick:sensor:tellstickgateway:OutsideSensor1:humidity"}
``` Switch LivingTV_Power <screen> { channel="tellstick:switch:tellstickgateway:LivingTV:switch"}
Slider living_room_ceiling "Living room ceiling" <light> {channel="tellstick:dimmer:1:3:state"} Dimmer BedroomCeilingLamp1_Brightness <lightbulb> { channel="tellstick:dimmer:tellstickgateway:BedroomCeilingLamp1:dimmer"}
Switch living_room_table "Living room table" <light> {channel="tellstick:switch:1:3:state"}
Number inside_temperature "Inside temperature [%.1f °C]" <temperature> {channel="tellstick:sensor:1:47_temperaturehumidity_fineoffset:temperature"}
Number inside_humidity "Inside humidity [%.1f RH]" <humidity> {channel="tellstick:sensor:1:47_temperaturehumidity_fineoffset:humidity"}
``` ```

View File

@ -1542,7 +1542,7 @@ Technical description see [Tinkerforge Website](http://www.tinkerforge.com/en/do
| property | description | values | | property | description | values |
|----------|--------------|--------| |----------|--------------|--------|
| uid | tinkerforge uid | same as bricklet | | uid | tinkerforge uid | same as bricklet |
| subid | openHAB subid of the device | in0, in2, in3, in4 | | subid | openHAB subid of the device | in0, in1, in2, in3 |
| type | openHAB type name | | | type | openHAB type name | |
##### tinkerforge.cfg: ##### tinkerforge.cfg:
@ -1585,7 +1585,7 @@ Technical description see [Tinkerforge Website](http://www.tinkerforge.com/en/do
| property | description | values | | property | description | values |
|----------|--------------|--------| |----------|--------------|--------|
| uid | tinkerforge uid | same as bricklet | | uid | tinkerforge uid | same as bricklet |
| subid | openHAB subid of the device | out0, out2, out3, out4 | | subid | openHAB subid of the device | out0, out1, out2, out3 |
| type | openHAB type name | | | type | openHAB type name | |
##### tinkerforge.cfg: ##### tinkerforge.cfg:

View File

@ -31,34 +31,62 @@ No binding configuration required.
## Thing Configuration ## Thing Configuration
The thing mandatory configuration is the selection of the mill. | Configuration Parameter | Required | Default | Description |
Optional configuration is the number of wind shares ("Winddelen") and the refresh interval. |-------------------------|----------|---------|-----------------------------------------------------|
| millId | X | 131 | Identifies the windmill (see table below) |
| wd | | 1 | Number of wind shares ("Winddelen") |
| refreshInterval | | 30 | Refresh interval for refreshing the data in seconds |
| millId | Windmill name |
|--------|-------------------|
| 1 | De Grote Geert |
| 2 | De Jonge Held |
| 31 | Het Rode Hert |
| 41 | De Ranke Zwaan |
| 51 | De Witte Juffer |
| 111 | De Bonte Hen |
| 121 | De Trouwe Wachter |
| 131 | De Blauwe Reiger |
| 141 | De Vier Winden |
| 201 | De Boerenzwaluw |
## Channels ## Channels
- **windSpeed** Measured current wind speed | Channel Type ID | Item Type | Description |
- **windDirection** Current wind direction |-----------------|----------------------|-------------------------------------|
- **powerAbsTot** Total power | kwh | Number:Energy | Current energy |
- **powerAbsWd** Power provided for your wind shares | kwhForecast | Number:Energy | Energy forecast |
- **powerRel** Relative power | powerAbsTot | Number:Power | Total power |
- **kwh** Current energy | powerAbsWd | Number:Power | Power provided for your wind shares |
- **kwhForecast** Energy forecast | powerRel | Number:Dimensionless | Relative power |
- **runPercentage** Run percentage this year | runPercentage | Number:Dimensionless | Run percentage this year |
- **timestamp** Timestamp of the last update | runTime | Number:Time | Run time this year |
| timestamp | DateTime | Timestamp of the last update |
| windDirection | String | Current wind direction |
| windSpeed | Number | Measured current wind speed (Bft) |
## Example ## Example
### demo.things
```
Thing windcentrale:mill:geert [ millId=1 ]
Thing windcentrale:mill:reiger [ millId=131, wd=3, refreshInterval=60 ]
```
### demo.items
``` ```
Group gReiger "Windcentrale Reiger" <wind> Group gReiger "Windcentrale Reiger" <wind>
Number ReigerWindSpeed "Windsnelheid [%1.0f Bft]" <wind> (gReiger) {channel="windcentrale:mill:reiger:windSpeed") Number ReigerWindSpeed "Wind speed [%d Bft]" <wind> (gReiger) { channel="windcentrale:mill:reiger:windSpeed" }
String ReigerWindDirection "Windrichting [%s]" <wind> (gReiger) {channel="windcentrale:mill:reiger:windDirection") String ReigerWindDirection "Wind direction [%s]" <wind> (gReiger) { channel="windcentrale:mill:reiger:windDirection" }
Number ReigerPowerAbsTot "Productie molen [%1.0f kW]" <wind> (gReiger) {channel="windcentrale:mill:reiger:powerAbsTot") Number:Power ReigerPowerAbsTot "Total mill power [%.1f %unit%]" <wind> (gReiger) { channel="windcentrale:mill:reiger:powerAbsTot" }
Number ReigerPowerAbsWd "WD power [%1.0f W]" <wind> (gReiger) {channel="windcentrale:mill:reiger:powerAbsWd") Number:Power ReigerPowerAbsWd "Wind shares power [%.1f %unit%]" <wind> (gReiger) { channel="windcentrale:mill:reiger:powerAbsWd" }
Number ReigerPowerRel "Productie vermogen [%1.0f %%]" <wind> (gReiger) {channel="windcentrale:mill:reiger:powerRel") Number:Dimensionless ReigerPowerRel "Relative power [%.1f %unit%]" <wind> (gReiger) { channel="windcentrale:mill:reiger:powerRel" }
Number ReigerKwh "kwh [%1.0f]" <wind> (gReiger) {channel="windcentrale:mill:reiger:kwh") Number:Energy ReigerKwh "Current energy [%.0f %unit%]" <wind> (gReiger) { channel="windcentrale:mill:reiger:kwh" }
Number ReigerKwhForecast "Productie forecast [%1.0f]" <wind> (gReiger) {channel="windcentrale:mill:reiger:kwhForecast") Number:Energy ReigerKwhForecast "Energy forecast [%.0f %unit%]" <wind> (gReiger) { channel="windcentrale:mill:reiger:kwhForecast" }
Number ReigerRunPercentage "Run percentage [%1.0f %%]" <wind> (gReiger) {channel="windcentrale:mill:reiger:runPercentage") Number:Dimensionless ReigerRunPercentage "Run percentage [%.1f %unit%]" <wind> (gReiger) { channel="windcentrale:mill:reiger:runPercentage" }
Number ReigerTimestamp "Update timestamp [%1$ta %1$tR]" <wind> (gReiger) {channel="windcentrale:mill:reiger:timestamp") Number:Time ReigerRunTime "Run time [%.0f %unit%]" <wind> (gReiger) { channel="windcentrale:mill:reiger:runTime" }
DateTime ReigerTimestamp "Update timestamp [%1$ta %1$tR]" <wind> (gReiger) { channel="windcentrale:mill:reiger:timestamp" }
``` ```

View File

@ -3,17 +3,6 @@
# Prepare Z-Way Server # Prepare Z-Way Server
1. [Download](https://razberry.z-wave.me/z-way-server/) Z-Way v2.2.3 or newer (further information about installing Z-Way you can find [here](http://razberry.z-wave.me/index.php?id=24)) 1. [Download](https://razberry.z-wave.me/z-way-server/) Z-Way v2.2.3 or newer (further information about installing Z-Way you can find [here](http://razberry.z-wave.me/index.php?id=24))
2. Install openHAB Connector
- via "ZWave.Me App Store"
- via Git
```shell
cd /opt/z-way-server/automation/userModules
git clone https://github.com/pathec/ZWay-OpenHABConnector.git OpenHABConnector
service z-way-server restart
```
3. Instantiate the app once (under Configuration - Apps - Local Apps). Important: Change the selection from "Featured Apps" to "All Apps" to make the app visible. It is not necessary to make the configuration manually.
# Prepare openHAB # Prepare openHAB
@ -52,11 +41,6 @@ Open the *Configuration* - *Things* and select Z-Way Server
Change configuration: In order for the Observer mechanism works, the IP address, port and protocol of both systems are required. Change configuration: In order for the Observer mechanism works, the IP address, port and protocol of both systems are required.
- **openHAB**
- **openHAB Alias** by default, the alias is generated
- **IP address** (default: localhost)
- **port** (default: 8080)
- **protocol** (default: http)
- **Z-Way Server** - **Z-Way Server**
- **IP address** (default: localhost) - **IP address** (default: localhost)
- **port** (default: 8083) - **port** (default: 8083)
@ -65,8 +49,8 @@ Change configuration: In order for the Observer mechanism works, the IP address,
- **password** must be set (no default value) - **password** must be set (no default value)
- **options** - **options**
- **polling interval** (default: 3600) in seconds - **polling interval** (default: 3600) in seconds
- **Observer mechanism** (default: active)
**The following picture is no longer up to date!**
![openHAB Thing settings](images/getting-started/06-Bridge-settings.png) ![openHAB Thing settings](images/getting-started/06-Bridge-settings.png)
## Create and configure Z-Way Devices ## Create and configure Z-Way Devices

View File

@ -77,27 +77,21 @@ But the configuration and properties of things are changed at runtime and channe
### Z-Way Server (Bridge) ### Z-Way Server (Bridge)
The information about accessing openHAB are needed so that the Observer mechanism works.
Besides the username and password all required Z-Way information are found during discovery. Besides the username and password all required Z-Way information are found during discovery.
| Configuration Name | Mandatory | Default | Desciption | | Configuration Name | Mandatory | Default | Desciption |
|--------------------------|-----------|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |--------------------------|-----------|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| openHABAlias | | | By default, the alias is generated during initialization or configuration update of thing handler. |
| openHABIpAddress | | localhost | The IP address or hostname of the openHAB server. If Z-Way and openHAB are running on the same machine, the default value can be used. |
| openHABPort | | 8080 | The port of the openHAB server (0 to 65335) |
| openHABProtocol | | http | Protocol to connect to the openHAB server (http or https) |
| zwayServerIpAddress | | localhost | The IP address or hostname of the Z-Way server. If Z-Way and openHAB are running on the same machine, the default value can be used. | | zwayServerIpAddress | | localhost | The IP address or hostname of the Z-Way server. If Z-Way and openHAB are running on the same machine, the default value can be used. |
| zwayServerPort | | 8083 | The port of the Z-Way server (0 to 65335) | | zwayServerPort | | 8083 | The port of the Z-Way server (0 to 65335) |
| zwayServerProtocol | | http | Protocol to connect to the Z-Way server (http or https) | | zwayServerProtocol | | http | Protocol to connect to the Z-Way server (http or https) |
| zwayServerUsername | | admin | Username to access the Z-Way server. | | zwayServerUsername | | admin | Username to access the Z-Way server. |
| zwayServerPassword | X | | Password to access the Z-Way server. | | zwayServerPassword | X | | Password to access the Z-Way server. |
| pollingInterval | | 3600 | Refresh device states and registration from Z-Way server in seconds (at least 60). | | pollingInterval | | 3600 | Refresh device states and registration from Z-Way server in seconds (at least 60). |
| observerMechanismEnabled | | true | The observer functionality is responsible for the item registration as observer in Z-Way. Attention: if disable this option, you have to setup an other synchronization mechanism like MQTT. |
Only the Z-Way server can be configured textual (Attention! *openHABAlias* has to be set because the bridge configuration can not be changed at runtime): Only the Z-Way server can be configured textual:
``` ```
Bridge zway:zwayServer:192_168_2_42 [ openHABAlias="development", openHABIpAddress="localhost", openHABPort=8080, openHABProtocol="http", zwayServerIpAddress="localhost", zwayServerPort=8083, zwayServerProtocol="http", zwayServerUsername="admin", zwayServerPassword="admin", pollingInterval=3600, observerMechanismEnabled=true ] { Bridge zway:zwayServer:192_168_2_42 [ zwayServerIpAddress="localhost", zwayServerPort=8083, zwayServerProtocol="http", zwayServerUsername="admin", zwayServerPassword="admin", pollingInterval=3600 ] {
// associated things have to be created with the Paper UI // associated things have to be created with the Paper UI
} }
``` ```
@ -171,22 +165,12 @@ Unsupported Z-Way device types: Camera, SensorMultiline, Text. The integration o
### Channels for the Z-Way Server (Bridge) ### Channels for the Z-Way Server (Bridge)
-| Channel Type ID | Item Type | Category | Description |
Markdown Table Formatter -| --------------- | --------- | -------- | ----------- |
-| actions | String | - | It is currently possible to update all devices. |
This tool formats basic MultiMarkdown style tables for easier plain text reading. -| secureInclusion | Switch | Switch | Change inclusion type for further inclusions. |
It adds padding to all the cells to line up the pipe separators when using a mono-space font. -| inclusion | Switch | Switch | Start inclusion mode (after a timeout the inclusion will be automatically finished). |
-| exclusion | Switch | Switch | Start exclusion mode (after a timeout the exclusion will be automatically finished). ||
To see what it's all about, try one of these examples, or format your own.
Load: Example 1 - Example 2 - Example 3
For more information:
I'm on Twitter as @TheIdOfAlan
I sometimes post on my personal site alanwsmith.com
This is an Open Source GitHub Project.
It has a Jasmine Test Suite.
What to show your appreciation? Buy me a book
## Locations ## Locations
@ -217,7 +201,7 @@ Because textual configuration isn't useful, follow the instructions in the [Gett
- Z-Way device types (especially the probe types) supported by openHAB channels with detailed information (scale types and so on) are not complete. - 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 (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. - Only polling is available. Further versions will contain other mechanisms under usage of the WebSocket implementation of Z-Way or MQTT.
<br> <br>
<img src="doc/BMWi_4C_Gef_en.jpg" width="200"> <img src="doc/BMWi_4C_Gef_en.jpg" width="200">

View File

@ -0,0 +1,10 @@
<?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">
<g style="fill:#797878">
<path d="m37.25 50h-10.5c-.55 0-1-.45-1-1 0-.55.45-1 1-1h10.5c.55 0 1 .45 1 1 0 .55-.45 1-1 1"/>
<path d="m37.25 53h-10.5c-.55 0-1-.45-1-1 0-.55.45-1 1-1h10.5c.55 0 1 .45 1 1 0 .55-.45 1-1 1"/>
<path d="m37.07 56h-10.14c-.65 0-1.18-.53-1.18-1.18 0-.45.37-.82.82-.82h10.85c.45 0 .82.37.82.82.01.65-.52 1.18-1.17 1.18"/>
<path d="m32 60c2.21 0 4-1.34 4-3h-8c0 1.66 1.79 3 4 3"/>
</g>
<path d="m48 20.58c0-8.61-7.16-15.58-16-15.58s-16 6.97-16 15.58c0 2.73.72 5.29 1.98 7.51.77 1.49 1.32 2.56 1.67 3.23.72 1.4 1.14 2.21 1.66 3.42.22.51.55 1.28.86 2.16 1.23 3.49 1.7 6.82 1.7 6.82s.23 1.74 1.16 2.59c.26.24.52.38.65.44.45.21.86.25 1.11.25.16 0 .32 0 .48 0h4.66.13 4.66c.16 0 .32 0 .48 0 .24 0 .66-.04 1.11-.25.13-.06.39-.2.65-.44.93-.85 1.16-2.59 1.16-2.59s.47-3.33 1.7-6.82c.31-.88.64-1.65.86-2.16.52-1.21.94-2.02 1.66-3.42.35-.68.9-1.74 1.67-3.23 1.27-2.23 1.99-4.79 1.99-7.51" style="fill:#ffc84d"/>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1,27 @@
<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
<defs>
<linearGradient id="0" y2="70.362" gradientUnits="userSpaceOnUse" x2="0" gradientTransform="matrix(1.9998887 0 0 1.2424276-47.993281 955.21738)" y1="73.362">
<stop style="stop-color:#fff"/>
<stop offset="1" style="stop-color:#ccc"/>
</linearGradient>
<linearGradient id="1" y2="70.362" gradientUnits="userSpaceOnUse" y1="73.362" gradientTransform="matrix(1.9998887 0 0 2.0000677-47.871459 861.62697)" x2="0">
<stop style="stop-color:#fff"/>
<stop offset="1" style="stop-color:#cdcdcd"/>
</linearGradient>
</defs>
<g transform="translate(0-988.36218)">
<path d="m12.253 994.45h9.187 30.498v51.689h-39.685z" style="fill:#fff;color:#000"/>
<g style="fill:#d3d3d3">
<path d="m34 996.36h4v4h-4z"/>
<path d="m40 996.36h4v4h-4z"/>
<path d="m46 996.36h4v4h-4z"/>
</g>
<path d="m12 1002.4h40v6h-40z" style="fill:url(#1)"/>
<path d="m12 1042.4h40v4h-40z" style="fill:url(#0)"/>
<path d="m10 992.36v56h44l.000001-56zm2 2h40v52h-40z" style="fill:#969696;color:#000"/>
<path d="m47.38 1023.6c0 8.5523-6.9324 15.485-15.484 15.485s-15.484-6.9331-15.484-15.485c0-8.5524 6.9324-15.485 15.484-15.485s15.484 6.933 15.484 15.485z" style="fill:none;stroke:#4c4c4c;stroke-width:2.21210146"/>
<path d="m15 1020.4h6v6h-6z" style="fill:#939393"/>
<path d="m17 10l2.672-2.3594.89 2.3594z" transform="translate(0 988.36218)" style="fill:#4f4f4f"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -30,7 +30,7 @@ Requirements beyond this are not clear, and Apple enforces limitations on eligib
At the very least, you cannot use repeating (111-11-111) or sequential (123-45-678) pin codes. At the very least, you cannot use repeating (111-11-111) or sequential (123-45-678) pin codes.
If your home network is secure, a good starting point is the pin code used in most sample applications: 031-45-154. If your home network is secure, a good starting point is the pin code used in most sample applications: 031-45-154.
Other settings, such as using Fahrenheit temperatures, customizing the thermostat heat/cool/auto modes, and specifying the interface to advertise the Homekit bridge on are also illustrated in the following sample: Other settings, such as using Fahrenheit temperatures, customizing the thermostat heat/cool/auto modes, and specifying the interface to advertise the Homekit bridge (which can be edited in PaperUI standard mode) are also illustrated in the following sample:
``` ```
org.openhab.homekit:port=9124 org.openhab.homekit:port=9124
@ -41,8 +41,31 @@ org.openhab.homekit:thermostatHeatMode=HeatOn
org.openhab.homekit:thermostatAutoMode=Auto org.openhab.homekit:thermostatAutoMode=Auto
org.openhab.homekit:thermostatOffMode=Off org.openhab.homekit:thermostatOffMode=Off
org.openhab.homekit:networkInterface=192.168.0.6 org.openhab.homekit:networkInterface=192.168.0.6
```
The following additional settings can be added or edited in PaperUI after switching to expert mode:
``` ```
org.openhab.homekit:name=openHAB
org.openhab.homekit:minimumTemperature=-100
org.openhab.homekit:maximumTemperature=100
```
### Overview of all settings
| Setting | Description | Default value |
|-------------------------- |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |--------------- |
| networkInterface | IP address or domain name under which the HomeKit bridge can be reached. If no value is configured, the addon tries to determine the IP address from the local hostname. | (none) |
| port | Port under which the HomeKit bridge can be reached. | 9123 |
| pin | Pin code used for pairing with iOS devices. Apparently, pin codes are provided by Apple and represent specific device types, so they cannot be chosen freely. The pin code 031-45-154 is used in sample applications and known to work. | 031-45-154 |
| useFahrenheitTemperature | Set to true to use Fahrenheit degrees, or false to use Celsius degrees. | false |
| thermostatCoolMode | Word used for activating the cooling mode of the device (if applicable). | CoolOn |
| thermostatHeatMode | Word used for activating the heating mode of the device (if applicable). | HeatOn |
| thermostatAutoMode | Word used for activating the automatic mode of the device (if applicable). | Auto |
| thermostatOffMode | Word used to set the thermostat mode of the device to off (if applicable). | Off |
| minimumTemperature | Lower bound of possible temperatures, used in the user interface of the iOS device to display the allowed temperature range. Note that this setting applies to all devices in HomeKit. | -100 |
| maximumTemperature | Upper bound of possible temperatures, used in the user interface of the iOS device to display the allowed temperature range. Note that this setting applies to all devices in HomeKit. | 100 |
| name | Name under which this HomeKit bridge is announced on the network. This is also the name displayed on the iOS device when searching for available bridges. | openHAB |
## Item Configuration ## Item Configuration
@ -55,62 +78,16 @@ Complex accessories require a tag on a Group indicating the accessory type, as w
A full list of supported accessory types can be found in the table below. A full list of supported accessory types can be found in the table below.
<table> | Tag | Child tag | Supported items | Description |
<tr> |-------------------- |---------------------------- |----------------------- |--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
<td><b>tag</b></td> | Lighting | | Switch, Dimmer, Color | A lightbulb, switchable, dimmable or rgb |
<td><b>child tag</b></td> | Switchable | | Switch, Dimmer, Color | An accessory that can be turned off and on. While similar to a lightbulb, this will be presented differently in the Siri grammar and iOS apps |
<td><b>supported items</b></td> | CurrentTemperature | | Number | An accessory that provides a single read-only temperature value. The units default to celsius but can be overridden globally using the useFahrenheitTemperature global property |
<td><b>description</b></td> | CurrentHumidity | | Number | An accessory that provides a single read-only value indicating the relative humidity. |
</tr> | Thermostat | | Group | A thermostat requires all child tags defined below |
<tr> | | CurrentTemperature | Number | The current temperature, same as above |
<td>Lighting</td> | | homekit:HeatingCoolingMode | String | Indicates the current mode of the device: OFF, AUTO, HEAT, COOL. The string's value must match those defined in the thermostat*Mode properties. This is a homekit-specific term and therefore the tags needs to be prefixed with "homekit:" |
<td>&nbsp;</td> | | TargetTemperature | Number | A target temperature that will engage the thermostat's heating and cooling actions as necessary, depending on the heatingCoolingMode |
<td>Switch, Dimmer, Color</td>
<td>A lightbulb, switchable, dimmable or rgb</td>
</tr>
<tr>
<td>Switchable</td>
<td>&nbsp;</td>
<td>Switch, Dimmer, Color</td>
<td>An accessory that can be turned off and on. While similar to a lightbulb, this will be presented differently in the Siri grammar and iOS apps</td>
</tr>
<tr>
<td>CurrentTemperature</td>
<td>&nbsp;</td>
<td>Number</td>
<td>An accessory that provides a single read-only temperature value. The units default to celsius but can be overridden globally using the useFahrenheitTemperature global property</td>
</tr>
<tr>
<td>CurrentHumidity</td>
<td>&nbsp;</td>
<td>Number</td>
<td>An accessory that provides a single read-only value indicating the relative humidity.</td>
</tr>
<tr>
<td>Thermostat</td>
<td>&nbsp;</td>
<td>Group</td>
<td>A thermostat requires all child tags defined below</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>CurrentTemperature</td>
<td>Number</td>
<td>The current temperature, same as above</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>homekit:HeatingCoolingMode</td>
<td>String</td>
<td>Indicates the current mode of the device: OFF, AUTO, HEAT, COOL. The string's value must match those defined in the thermostat*Mode properties. This is a homekit-specific term and therefore the tags needs to be prefixed with "homekit:"</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>TargetTemperature</td>
<td>Number</td>
<td>A target temperature that will engage the thermostat's heating and cooling actions as necessary, depending on the heatingCoolingMode</td>
</tr>
</table>
See the sample below for example items: See the sample below for example items:
@ -139,3 +116,4 @@ If you encounter any issues with the add-on and need support, it may be importan
In order to get logs from the underlying library used to implement the HomeKit protocol, enable trace logging using the following command: In order to get logs from the underlying library used to implement the HomeKit protocol, enable trace logging using the following command:
```openhab> log:set TRACE com.beowulfe.hap``` ```openhab> log:set TRACE com.beowulfe.hap```

View File

@ -16,6 +16,9 @@ The app follows the basic principles of the other openHAB UIs, like Basic UI, an
<a href="https://play.google.com/store/apps/details?id=org.openhab.habdroid"> <a href="https://play.google.com/store/apps/details?id=org.openhab.habdroid">
<img alt="Get it on Google Play" src="images/en_badge_web_generic.png" width="240px"> <img alt="Get it on Google Play" src="images/en_badge_web_generic.png" width="240px">
</a> </a>
<a href="https://f-droid.org/app/org.openhab.habdroid">
<img alt="Get it on F-Droid" src="images/get-it-on-fdroid.png" width="240px">
</a>
## Features ## Features

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -26,20 +26,7 @@ To speed up the contribution process, we therefore advice to go through this che
1. For dependency injection, OSGi Declarative Services should be used. 1. For dependency injection, OSGi Declarative Services should be used.
1. OSGi Declarative Services should be declared using annotations. The IDE will take care of the service *.xml file creation. See the official OSGi documentation for an [example here](http://enroute.osgi.org/services/org.osgi.service.component.html). We always use `@Activate`, `@Deactivate` and `@Modified` if we define these methods, even if they exist in a super class, to make the code more readable. 1. OSGi Declarative Services should be declared using annotations. The IDE will take care of the service *.xml file creation. See the official OSGi documentation for an [example here](http://enroute.osgi.org/services/org.osgi.service.component.html). We always use `@Activate`, `@Deactivate` and `@Modified` if we define these methods, even if they exist in a super class, to make the code more readable.
1. Packages that contain classes that are not meant to be used by other bundles should have "internal" in their package name. 1. Packages that contain classes that are not meant to be used by other bundles should have "internal" in their package name.
1. [Null annotations](https://wiki.eclipse.org/JDT_Core/Null_Analysis) are used from the Eclipse JDT project. Therefore every bundle should have an **optional** `Import-Package` dependency to `org.eclipse.jdt.annotation`. 1. [Null annotations](https://wiki.eclipse.org/JDT_Core/Null_Analysis) are used from the Eclipse JDT project. `@NonNullByDefault` and `@Nullable` should be used, for details see [Null annotation conventions](conventions.html#null-annotations).
Classes should be annotated by `@NonNullByDefault` and return types, parameter types, generic types etc. are annotated with `@Nullable` only.
Fields that get a static and mandatory reference injected through OSGi Declarative Services can be annotated with
```java
@NonNullByDefault({})
private MyService injectedService;
```
to skip the nullevaluation for these fields.
Fields within `ThingHandler` classes that are initialized within the `initialize()` method may also be annotated like this, because the framework ensures that `initialize()` will be called before any other method. However please watch the scenario where the initialization of the handler fails, because then fields might not have been initialized and using them should be prepended by a `null` check.
There is **no need** for a `@NonNull` annotation because it is set as default.
The transition of existing classes could be a longer process but if you want to use nullness annotation in a class / interface you need to set the default for the whole class and annotate all types that differ from the default.
Test classes do not have to be annotated.
## B. OSGi Bundles ## B. OSGi Bundles
@ -63,7 +50,7 @@ Test classes do not have to be annotated.
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): 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):
- Apache Commons IO (v2.2) - Apache Commons IO (v2.2)
- Apache Commons Lang (v2.6) - Apache Commons Lang (v2.6)
- Google Guava (v10.0.1) - ~~Google Guava (v10.0.1)~~ (historically allowed, to be avoided in new contributions)
## D. Runtime Behavior ## D. Runtime Behavior

View File

@ -137,3 +137,23 @@ Here is a short table demonstrating conversions for the examples above:
| Color | `HSBType` | &bull; `OnOffType` - `OFF` if the brightness level in the `HSBType` equals 0, `ON` otherwise <br/> &bull; `PercentType` - the value for the brightness level in the `HSBType` | | Color | `HSBType` | &bull; `OnOffType` - `OFF` if the brightness level in the `HSBType` equals 0, `ON` otherwise <br/> &bull; `PercentType` - the value for the brightness level in the `HSBType` |
| Dimmer | `PercentType` | `OnOffType` - `OFF` if the brightness level indicated by the percent type equals 0, `ON` otherwise | | 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| | 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|
## Item Metadata
Sometimes additional information is required to be attached to items for certain use-cases.
This could be e.g. an application which needs some hints in order to render the items in a generic way or an integration with voice controlled assistants or any other services which access the items and need to understand their "meaning".
For this purpose, such meta-information can be attached to items using disjunct namespaces so they won't conflict with each other.
Each metadata entry has a main value and optionally additional key/value pairs.
There can be metadata attached to an item for as many namespaces as desired, like in the following example:
Switch "My Fan" { homekit="Fan.v2", alexa="Fan" [ type="oscillating", speedSteps=3 ] }
The metadata can alternatively maintained via a dedicated REST endpoint and is included in the `EnrichedItemDTO` responses.
Extensions which can infer some metadata automatically need to implement an register a `MetadataProvider` service in order to make them available to the system.
They may provision them from any source they like and also dynamically remove or add data.
They are also not restricted to a single namespace.
The `MetadataRegistry` provides access for all extensions which need to read the item metadata programmatically.
It is the central place where additional information about items is kept.

View File

@ -45,7 +45,6 @@ The following table provides an overview of the different statuses:
| 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. | | 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. | | 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. | | 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. |
| GONE | The device has been removed from the bridge or the network to which it belongs and is no longer available for use. The user can now remove the thing from the system. |
| 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. | | 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 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. | | 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. |
@ -82,12 +81,13 @@ The following table lists the different status details for each status:
<tr valign="top"><td>UNKNOWN</td> <td>NONE</td><td>No further status details available.</td></tr> <tr valign="top"><td>UNKNOWN</td> <td>NONE</td><td>No further status details available.</td></tr>
<tr valign="top"><td rowspan="2">ONLINE</td> <td>NONE</td><td>No further status details available.</td></tr> <tr valign="top"><td rowspan="2">ONLINE</td> <td>NONE</td><td>No further status details available.</td></tr>
<tr valign="top"> <td>CONFIGURATION_PENDING</td><td>The thing is waiting to transfer configuration information to a device. Some bindings need to communicate with the device to make sure the configuration is accepted.</td></tr> <tr valign="top"> <td>CONFIGURATION_PENDING</td><td>The thing is waiting to transfer configuration information to a device. Some bindings need to communicate with the device to make sure the configuration is accepted.</td></tr>
<tr valign="top"><td rowspan="6">OFFLINE</td> <td>NONE</td><td>No further status details available.</td></tr> <tr valign="top"><td rowspan="7">OFFLINE</td> <td>NONE</td><td>No further status details available.</td></tr>
<tr valign="top"> <td>COMMUNICATION_ERROR</td><td>Error in communication with the device. This may also be only a temporary error.</td></tr> <tr valign="top"> <td>COMMUNICATION_ERROR</td><td>Error in communication with the device. This may also be only a temporary error.</td></tr>
<tr valign="top"> <td>CONFIGURATION_ERROR</td><td>An issue with the configuration of a thing prevents the communication with the represented device or service. This issue might be solved by reconfiguring the thing.</td></tr> <tr valign="top"> <td>CONFIGURATION_ERROR</td><td>An issue with the configuration of a thing prevents the communication with the represented device or service. This issue might be solved by reconfiguring the thing.</td></tr>
<tr valign="top"> <td>BRIDGE_OFFLINE</td><td>Assuming the thing to be offline because the corresponding bridge is offline.</td></tr> <tr valign="top"> <td>BRIDGE_OFFLINE</td><td>Assuming the thing to be offline because the corresponding bridge is offline.</td></tr>
<tr valign="top"> <td>FIRMWARE_UPDATING</td><td>The thing is currently operating a firmware update.</td></tr> <tr valign="top"> <td>FIRMWARE_UPDATING</td><td>The thing is currently operating a firmware update.</td></tr>
<tr valign="top"> <td>DUTY_CYCLE</td><td>The thing is currently in DUTY_CYCLE state, which means it is blocked for further usage.</td></tr> <tr valign="top"> <td>DUTY_CYCLE</td><td>The thing is currently in DUTY_CYCLE state, which means it is blocked for further usage.</td></tr>
<tr valign="top"> <td>GONE</td><td>The thing has been removed from the bridge or the network to which it belongs and is no longer available for use. The user can now remove the thing from the system.</td></tr>
<tr valign="top"><td>REMOVING</td> <td>NONE</td><td>No further status details available.</td></tr> <tr valign="top"><td>REMOVING</td> <td>NONE</td><td>No further status details available.</td></tr>
<tr valign="top"><td>REMOVED</td> <td>NONE</td><td>No further status details available.</td></tr> <tr valign="top"><td>REMOVED</td> <td>NONE</td><td>No further status details available.</td></tr>
</table> </table>