Repo restructuring. Added master branch

Signed-off-by: Jerome Luckenbach <github@luckenba.ch>
pull/869/head
Jerome Luckenbach 2018-06-13 15:27:32 +02:00
parent 876b9a8e60
commit aeac4e68ad
5130 changed files with 0 additions and 1416152 deletions

1
CNAME
View File

@ -1 +0,0 @@
docs.openhab.org

View File

@ -1,41 +0,0 @@
---
id: astro
label: Astro
title: Astro - Actions
type: action
description: "With the Astro actions, you can calculate sunrise and sunset DataTime values in rules."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/action/org.openhab.action.astro/README.md
since: 1x
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Astro Actions
With the Astro actions, you can calculate sunrise and sunset DataTime values in rules.
**Important:** The action also requires the installation of the corresponding Astro 1.x binding.
## Examples
```javascript
import java.util.Date
rule "Astro Action Example"
when
...
then
var Date current = now.toDate
var double lat = xx.xxxxxx
var double lon = xx.xxxxxx
logInfo("sunRiseStart: ", new DateTimeType(getAstroSunriseStart(current, lat, lon)).toString)
logInfo("sunRiseEnd: ", new DateTimeType(getAstroSunriseEnd(current, lat, lon)).toString)
logInfo("sunSetStart: ", new DateTimeType(getAstroSunsetStart(current, lat, lon)).toString)
logInfo("sunSetEnd: ", new DateTimeType(getAstroSunsetEnd(current, lat, lon)).toString)
end
```

View File

@ -1,53 +0,0 @@
---
id: ciscospark
label: Cisco Spark
title: Cisco Spark - Actions
type: action
description: "Cisco Spark can be used to message individuals are *rooms* when certain events take place in openHAB."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/action/org.openhab.action.ciscospark/README.md
since: 1x
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Cisco Spark Action
Cisco Spark can be used to message individuals are *rooms* when certain events take place in openHAB.
## Configuration
Configuration is very easy and only required an access token.
To obtain this token, first log in to [Spark for Developers](https://developer.ciscospark.com/add-app.html) and add a new App.
Make sure to select 'Create a Bot' and fill in the required fields.
Once completed, you will be presented with an access token.
Next, configure openHAB with the access token by adding following line to the file `services/ciscospark.cfg`:
`accessToken= << access token from Spark for Developers >>`
There's an optional convenience configuration option that allows you to set a default room to which you want Spark to send messages so you don't have to include it in each action request.
`defaultRoomId= << UUID of the default room >>`
Note: you can find the uuids for rooms when using the [web client for Cisco Spark](https://web.ciscospark.com).
When you navigate to a room, the uuid can be copied from the browsers location bar.
The uuid looks like this:
`24c617f0-fbe4-11e5-be0f-2fe93bbeddd9`
## Actions
Send a message to a specific room
`sparkMessage('message', 'roomId')`
Send a message to the default room (from config)
`sparkMessage('message')`
Send a direct message to a person
`sparkPerson('message', 'personEmail')`

View File

@ -1,90 +0,0 @@
---
id: dscalarm
label: DSC Alarm
title: DSC Alarm - Actions
type: action
description: "This bundle exposes openHAB rule extensions to be used with the DSC Alarm Binding (1.x binding)."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/action/org.openhab.action.dscalarm/README.md
since: 1x
logo: images/addons/dscalarm.png
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# DSC Alarm Actions
This bundle exposes openHAB rule extensions to be used with the DSC Alarm Binding (1.x binding).
It allows the sending of DSC Alarm specific commands from within rules.
## Prerequisites
The DSC Alarm Action bundle relies on the DSC Alarm Binding (1.x) being installed and configured.
## Actions
- `sendDSCAlarmCommand(String command)` - sends a DSC Alarm command
- `sendDSCAlarmCommand(String command, String data)` - same as above but with command specific required data
The `command` parameter is a string numeric code.
The following table shows which commands are supported:
| DSC Alarm Command Code | Description | Data | Supported Interface |
|------------------------|-------------------------------------------|-------------------------------------------------------|---------------------|
| `000` | Poll | NONE | Envisalink, IT100 |
| `001` | Status Report | NONE | Envisalink, IT100 |
| `002` | Labels Request | NONE | IT100 |
| `005` | Network Login | 1-6 Character - [Password] | Envisalink |
| `008` | Dump Zone Timers | NONE | Envisalink |
| `010` | Set Time and Date | NONE | Envisalink, IT100 |
| `020` | Command Output Control | 2 Characters - [Partition # (1-8)][PGM # (1-4)] | Envisalink, IT100 |
| `030` | Partition Arm Control - Away | 1 Character - [Partition # (1-8)] | Envisalink, IT100 |
| `031` | Partition Arm Control - Stay | 1 Character - [Partition # (1-8)] | Envisalink, IT100 |
| `032` | Partition Arm Control - No Entry Delay | 1 Character - [Partition # (1-8)] | Envisalink, IT100 |
| `033` | Partition Arm Control - With User Code | 5-7 Characters - [Partition # (1-8)][User Code (4-6)] | Envisalink, IT100 |
| `040` | Partition Disarm Control - With User Code | 5-7 Characters - [Partition # (1-8)][User Code (4-6)] | Envisalink, IT100 |
| `055` | Time Stamp Control | 1 Character - [On/Off (1,0)] | Envisalink, IT100 |
| `056` | Time/Date Broadcast Control | 1 Character - [On/Off (1,0)] | Envisalink, IT100 |
| `057` | Temperature Broadcast Control | 1 Character - [On/Off (1,0)] | Envisalink, IT100 |
| `058` | Virtual Keypad Control | 1 Character - [On/Off (1,0)] | IT100 |
| `060` | Trigger Panic Alarm | 1 Character - [1=Fire, 2=Ambulance, 3=Police] | Envisalink, IT100 |
| `070` | Single Keystroke | 1 Character - [Single ASCII Character] | Envisalink, IT100 |
| `071` | Keystroke String | 1-6 Characters - [1-6 ASCII Character String] | Envisalink |
| `074` | Keep Alive | 1 Character - [Partition # (1-8)] | Envisalink |
| `200` | Code Send | 4-6 Characters - [User Code (4-6)] | Envisalink, IT100 |
## Examples
To invoke the action see the examples below:
Add an item to your items file such as a switch:
`Switch PollCommand "Send a poll command to the DSC Alarm System"`
The following rule will trigger whenever the switch is turned ON:
```java
rule "PollCommand"
when
Item PollCommand received command ON
then
sendDSCAlarmCommand("000")
end
```
Again add an item to your items file:
`Switch BypassZone1 "Bypass Zone 1"`
This rule triggers when the switch is turned ON:
```java
rule "BypassZone1"
when
Item BypassZone1 received command ON
then
sendDSCAlarmCommand("071","*101#")
end
```

View File

@ -1,42 +0,0 @@
---
id: ecobee
label: Ecobee
title: Ecobee - Actions
type: action
description: "The Ecobee Action bundle provides actions such as setting and clearing program holds, sending a text message to the thermostat's display, renaming a remote wireless sensor, and other functions that cannot be performed by setting object properties."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/action/org.openhab.action.ecobee/README.md
since: 1x
logo: images/addons/ecobee.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Ecobee Actions
The Ecobee Action bundle provides actions such as setting and clearing program holds, sending a text message to the thermostat's display, renaming a remote wireless sensor, and other functions that cannot be performed by setting object properties.
## Prerequisites
The Ecboee Action bundle requires that the Ecobee Binding (1.x) is also installed.
Read the [Ecobee function API documentation](https://www.ecobee.com/home/developer/api/documentation/v1/functions/using-functions.shtml) to be sure you know the rules for calling these actions.
## Actions
- ecobeeAcknowledge(String selection, String thermostatIdentifier, String ackRef, String ackType, *Boolean remindMeLater*) - Acknowledge an alert.
- ecobeeControlPlug(String selection, String plugName, String plugState, *Date startDateTime*, *Date endDateTime*, *String holdType*, *Number holdHours*) - Control the on/off state of a plug by setting a hold on the plug.
- ecobeeCreateVacation(String selection, String name, Number coolHoldTemp, Number heatHoldTemp, *Date startDateTime*, *Date endDateTime*, *String fan*, *Number fanMinOnTime*) - Create a vacation event on the thermostat.
- ecobeeDeleteVacation(String selection, String name) - Delete a vacation event from a thermostat.
- ecobeeResetPreferences(String selection) - Set all user configurable settings back to the factory default values.
- ecobeeResumeProgram(String selection, *Boolean resumeAll*) - Remove the currently running event providing the event is not a mandatory demand response event.
- ecobeeSendMessage(String selection, String text) - Send an alert message to the thermostat.
- ecobeeSetHold(String selection, *Number coolHoldTemp*, *Number heatHoldTemp*, *String holdClimateRef*, *Date startDateTime*, *Date endDateTime*, *String holdType*, *Number holdHours*) - Set the thermostat into a hold with the specified temperature.
- ecobeeSetHold(String selection, `Map<String, Object>` params, *Date startDateTime*, *Date endDateTime*, *String holdType*, *Number holdHours*) - Set the thermostat into a hold with the specified event params.
- ecobeeSetOccupied(String selection, Boolean occupied, *Date startDateTime*, *Date endDateTime*, *String holdType*, *Number holdHours*) - Switches a (EMS model only) thermostat from occupied mode to unoccupied, or vice versa.
- ecobeeUpdateSensor(String selection, String name, String deviceId, String sensorId) - Update the name of an ecobee3 remote sensor.
Parameters in *italics* are optional, in which case each unused parameter must be replaced with `null`.
The `selection` parameter is a string that identifies the thermostat(s) against which the action is performed, identical in format to `<thermostat>` used in the Ecobee binding (1.x).

View File

@ -1,30 +0,0 @@
---
id: harmonyhub
label: Logitech Harmony Hub
title: Logitech Harmony Hub - Actions
type: action
description: "- `harmonyPressButton(<device>, <command>)`"
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/action/org.openhab.action.harmonyhub/README.md
since: 1x
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Logitech Harmony Hub Actions
## Actions
- `harmonyPressButton(<device>, <command>)`
- `harmonyPressButton(<qualifier>, <device>, <command>)`
- `harmonyStartActivity(<activity>)`
- `harmonyStartActivity(<qualifier>,<activity>)`
## Examples
```java
harmonyPressButton("Lounge", "8-Track", "PowerOn")
harmonyStartActivity("PowerOff")
```

View File

@ -1,63 +0,0 @@
---
id: homematic
label: Homematic
title: Homematic - Actions
type: action
description: "The Homematic action lets you send messages to a Homematic remote control with a display, currently the HM-RC-19-B (Radio remote control 19 button)."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/action/org.openhab.action.homematic/README.md
since: 1x
logo: images/addons/homematic.png
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Homematic Action
The Homematic action lets you send messages to a Homematic remote control with a display, currently the HM-RC-19-B (Radio remote control 19 button).
## Prerequisites
The Homematic Binding (1.x) must be installed and configured.
## Actions
- `sendHomematicDisplay(REMOTE_CONTROL_ADDRESS, TEXT)`
- `sendHomematicDisplay(REMOTE_CONTROL_ADDRESS, TEXT, OPTIONS)`
The remote control display is limited to five characters; a longer text is truncated.
You have several additional options to control the display.
- `BEEP` *(TONE1, TONE2, TONE3)* - let the remote control beep
- `BACKLIGHT` *(BACKLIGHT_ON, BLINK_SLOW, BLINK_FAST)* - control the display backlight
- `UNIT` *(PERCENT, WATT, CELSIUS, FAHRENHEIT)* - display one of these units
- `SYMBOL` *(BULB, SWITCH, WINDOW, DOOR, BLIND, SCENE, PHONE, BELL, CLOCK, ARROW_UP, ARROW_DOWN)* - display symbols, multiple symbols possible
You can combine any option, they must be separated by a comma.
If you specify more than one option for BEEP, BACKLIGHT and UNIT, only the first one is taken into account and all others are ignored.
For SYMBOL you can specify multiple options.
## Examples
Show message TEST:
`sendHomematicDisplay("KEQ0012345", "TEST");`
Show message TEXT, beep once and turn backlight on:
`sendHomematicDisplay("KEQ0012345", "TEXT", "TONE1, BACKLIGHT_ON");`
Show message 15, beep once, turn backlight on and shows the Celsius unit:
`sendHomematicDisplay("KEQ0012345", "15", "TONE1, BACKLIGHT_ON, CELSIUS");`
Show message ALARM, beep three times, let the backlight blink fast and shows a bell symbol:
`sendHomematicDisplay("KEQ0012345", "ALARM", "TONE3, BLINK_FAST, BELL");`
Duplicate options (TONE3 is ignored, because TONE1 is specified previously):
`sendHomematicDisplay("KEQ0012345", "TEXT", "TONE1, BLINK_FAST, TONE3");`

View File

@ -1,53 +0,0 @@
---
id: mail
label: Mail
title: Mail - Actions
type: action
description: "This add-on provides SMTP services so your rules and scripts can send e-mails."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/action/org.openhab.action.mail/README.md
since: 1x
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Mail Actions
This add-on provides SMTP services so your rules and scripts can send e-mails.
The `to` paremeter can contain a semicolon-separated list of email addresses.
## Actions
- `sendMail(String to, String subject, String message)`: Sends an email via SMTP.
- `sendMail(String to, String subject, String message, String attachmentUrl)`: Sends an email with attachment via SMTP.
- `sendMail(String to, String subject, String message, List<String> attachmentUrlList)`: Sends an email with one or more attachments via SMTP.
## Configuration
This action service can be configured via the `services/mail.cfg` file.
| Property | Default | Required | Description |
|---------------|----------------------------|:-----------------------------------------------------------------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------|
| hostname | | Yes | SMTP server hostname, e.g. "smtp.gmail.com" |
| port | 25 (resp. 587 for TLS/SSL) | No | SMTP port to use |
| username | | if the SMTP server at `<hostname>` and `<port>` requires authentication | SMTP user name |
| password | | if the SMTP server at `<hostname>` and `<port>` requires authentication | SMTP password |
| from | | Yes | Email address to use for sending mails |
| tls | false | No | `true` if STARTTLS is enabled (not required) for the connection |
| ssl | false | No | `true` if SSL negotiation should occur on connection. Do not set both `tls` and `ssl` to `true`. |
| popbeforesmtp | false | No | set to `true` if POP before SMTP (another authentication mechanism) should be enabled. Username and password are taken from the above configuration |
| charset | platform default | No | Character set used to encode the message body |
## Examples
```javascript
import java.util.List
...
val List<String> attachmentUrlList = newArrayList(
"http://some.web/site/snap.jpg&param=value",
"http://192.168.1.100/data.txt",
"file:///tmp/201601011031.jpg")
sendMail("you@email.net", "Test", "This is the message.", attachmentUrlList)
```

View File

@ -1,91 +0,0 @@
---
id: mios
label: MiOS
title: MiOS - Actions
type: action
description: "This bundle exposes openHAB Rule extensions to be used with the MiOS Binding (1.x)."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/action/org.openhab.action.mios/README.md
since: 1x
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# MiOS Actions
This bundle exposes openHAB Rule extensions to be used with the MiOS Binding (1.x).
It exposes the ability to do the following things in the MiOS HA Controller from within openHAB rules]:
- *Device Actions* - Asynchronously invoke MiOS Device Actions involving 0, 1 or more parameters.
- *Scenes Invocation* - Asynchronously invoke MiOS Scenes
## Prerequisites
The MiOS Action bundle relies upon the MiOS Binding (1.x) being installed and configured. Once these are done, you're ready to use the rule extensions this bundle provides.
## Actions
- `sendMiosAction(Item item, String action)` - requests the *parameterless* Device Action, specified through `action`, be invoked on the MiOS Device bound to `item`.
- `sendMiosAction(Item item, String action, List<<String,Object>> params)` - as above, but for parameterized Device Actions.
- `sendMiosScene(Item scene)` - requests the scene associated with the `scene` parameter be invoked on the MiOS Unit.
The `action` argument of the `sendMiosAction` action is a string of the form:
```text
<ServiceURN>/<ServiceAction>
```
or
```text
<ServiceAlias>/<ServiceAction>
```
where *ServiceURN*, *ServiceAlias* and *ServiceAction* have the same form as described in MiOS Binding (1.x) commands.
You can use the MiOS `invoke` URL to discover the *Actions*, and *Action-parameters*, your particular MiOS device supports:
```text
http://<host>:3480/data_request?id=invoke
```
The available *ServiceAction*'s are described in the [MiOS Luup UPnP Variables and Actions](http://wiki.micasaverde.com/index.php/Luup_UPnP_Variables_and_Actions) documentation.
## Examples
- Invoking a Device Action and calling a Scene to turn off the AV.
```javascript
rule "Test action rules Off"
when
Time cron "0 45 23 * * ?"
then
sendMiosAction(FamilyMainLightsId, "Dimmer/SetLoadLevelTarget", newArrayList('newLoadlevelTarget' -> 0))
sendMiosScene(SceneGoodNight)
end
```
- Invoking a Sonos Device on MiOS to *say* something
```java
rule "Test action say"
when
Item HallGarageDoorZoneTripped changed to OPEN
then
sendMiosAction(OfficeSonosId, "Sonos/Say", newArrayList('Text' -> 'Warning! Garage door opened', 'Volume' -> 50))
end
```
- Disarm your Alarm Panel (Paradox, GE, Ademco/Vista, DSC, etc)
```java
rule "Test action Disarm"
when
...
then
sendMiosAction(EVL3VistaPartition1ArmMode, 'Alarm/RequestArmMode', newArrayList('State' -> 'Disarmed', PINCode' -> 1234)
end
```

View File

@ -1,27 +0,0 @@
---
id: mqtt
label: MQTT
title: MQTT - Actions
type: action
description: "Publish a message to a topic on an MQTT broker."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/action/org.openhab.action.mqtt/README.md
since: 1x
logo: images/addons/mqtt.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# MQTT Actions
Publish a message to a topic on an MQTT broker.
## Prerequisites
In addition to the MQTT Action service, the MQTT binding (1.x) must be installed and configured. The action can reference the broker(s) that are configured for the MQTT binding.
## Action
- `publish(String brokerName, String topic, String message)`: Publish the message to topic using the specified MQTT broker.

View File

@ -1,40 +0,0 @@
---
id: nma
label: NotifyMyAndroid
title: NotifyMyAndroid - Actions
type: action
description: "Sends push messages to your Android devices."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/action/org.openhab.action.nma/README.md
since: 1x
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# NotifyMyAndroid Actions
Sends push messages to your Android devices.
## Actions
- `notifyMyAndroid(String event, String description)`: Send a message to the pre-configured api key (account) and use the configured or default values for the other parameters. Event is the notification title, and description the details.
- `notifyMyAndroid(String event, String description, int priority)`: Send a message to a the pre-configured api key (account) with priority level (-2 to 2, from very low to emergency) and use the configured or default values for the other parameters.
- `notifyMyAndroid(String apiKey, String event, String description)`: Send a message to another api key than the configured or use this method if you have not configured a default api key
- `notifyMyAndroid(String apiKey, String event, String description, int priority)`: Send a message to another api key than the configured or use this method if you have not configured a default api key
- `notifyMyAndroid(String apiKey, String event, String description, int priority, String url)`: Send a message to another api key than the configured or use this method if you have not configured a default api key
- `notifyMyAndroid(String apiKey, String event, String description, int priority, String url, boolean html)`: Send a message overwriting all configured parameters and using the specified values.
## Configuration
This action service can be configured via the `services/nma.cfg` file.
| Property | Default | Required | Description |
|-----------------|--------------------------------------------------|:------------------------------------------------:|----------------------------------------------------------------------------------------------------|
| timeout | 10000 | No | Timeout for the communication with the NMA service |
| developerKey | | No | An optional developer key from NMA |
| apiKey | | if using action calls without `apiKey` parameter | Default API key to send messages to. API keys can be created in your account's dashboard. |
| appName | openHAB | No | Application name which NMA will show |
| defaultPriority | 0 | No | Priority to use for messages if not specified otherwise. Can range from -2 (lowest) to 2 (highest) |
| defaultUrl | https://www.notifymyandroid.com/publicapi/notify | No | URL to attach to NMA messages by default if not specified otherwise. Can be left empty. |

View File

@ -1,61 +0,0 @@
---
id: openwebif
label: OpenWebIf
title: OpenWebIf - Actions
type: action
description: "The OpenWebIf action allows you to send a message to enigma2-based Linux satellite receivers (Dreambox, VU+, Clarke-Tech, ...) with the installed OpenWebIf plugin."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/action/org.openhab.action.openwebif/README.md
since: 1x
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# OpenWebIf Action
The OpenWebIf action allows you to send a message to enigma2-based Linux satellite receivers (Dreambox, VU+, Clarke-Tech, ...) with the installed OpenWebIf plugin.
## Configuration
Configure your satellite receivers in `services/openwebif.cfg`.
| Property | Default | Required | Description |
|----------------------------|---------|:--------:|------------------------|
| `receiver.<name>.host` | | | For example, `vusolo2` |
| `receiver.<name>.port` | | | For example, `81` |
| `receiver.<name>.user` | | | For example, `root` |
| `receiver.<name>.password` | | | |
| `receiver.<name>.https` | | | For example, `false` |
### Configuration Example
```java
receiver.main.host=vusolo2
receiver.main.port=81
receiver.main.user=root
receiver.main.password=xxxxx
receiver.main.https=false
```
## Action
Now you can send a message to the configured receiver:
- `sendOpenWebIfNotification(NAME, MESSAGE, TYPE, TIMEOUT)`
| Parameter | Meaning |
|-----------|------------------------------------------------------|
| NAME | The configured name of the satellite receiver |
| MESSAGE | The message to send to the receiver |
| TYPE | The message type (INFO, WARNING, ERROR) |
| TIMEOUT | How long the text will stay on the screen in seconds |
## Examples
```java
sendOpenWebIfNotification("main", "Hello World!\n\nThis is a message sent from openHab!", "WARNING", 10)
```
![](https://farm4.staticflickr.com/3882/15284270826_8cf0e637d8_z.jpg)

View File

@ -1,51 +0,0 @@
---
id: pebble
label: Pebble
title: Pebble - Actions
type: action
description: "The Pebble action service allows you to send pins and notifications directly to your Pebble watch."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/action/org.openhab.action.pebble/README.md
since: 1x
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Pebble Actions
The Pebble action service allows you to send pins and notifications directly to your Pebble watch.
You'll need to install the openHAB app on your Pebble watch and lookup the Timeline token.
This token is displayed at the bottom of the configuration page when you configure the app on your phone.
## Configuration
You can either configure the required Pebble token in `services/pebble.cfg` and refer to it by name, or provide it explicitly in your action calls.
| Property | Default | Required | Description |
|----------------|---------|:--------:|----------------------------------------|
| `<name>.token` | | | A token to use in action calls by name |
### Configuration Example
```text
dave.token=88889999aaaabbbbccccddddeeeeffff
```
## Actions
- `pebblePin(String instanceOrToken, Date time, String title, String body)`: Insert a pin at a given time with a title and body.
- `pebblePin(String instanceOrToken, Date time, String pinTitle, String actionTitle, String url)`: Insert a pin at a given time with a title and add an action. This action is a simple HTTP GET on the given url.
- `pebbleNotification(String instanceOrToken, String title, String body)`: Push a notification directly, with the given title and body.
All actions accept an instance name *or* the timeline token as the first parameter.
## Examples
```java
pebblePin("88889999aaaabbbbccccddddeeeeffff", now.toDate, "Dave left", "Dave is on his way")
pebblePin("dave", new DateTime().withHourOfDay(23).withMinuteOfHour(30).toDate, "Bed time", "Shutdown", "http://192.168.1.15:8090/CMD?Lights_All=OFF")
pebbleNotification("dave", "Dave left", "Dave left the house")
```

View File

@ -1,23 +0,0 @@
---
id: prowl
label: Prowl
title: Prowl - Actions
type: action
description: "Prowl lets you use push notifications on iOS devices (please check openhab.cfg for required configuration settings):"
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/action/org.openhab.action.prowl/README.md
since: 1x
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Prowl Actions
Prowl lets you use push notifications on iOS devices (please check openhab.cfg for required configuration settings):
## Actions
- `pushNotification(String subject, String message)`: Pushes a Prowl Notification
- `pushNotification(String apikey, String subject, String message, int priority)`: Pushes a Prowl Notification with the given priority

View File

@ -1,74 +0,0 @@
---
id: pushbullet
label: Pushbullet
title: Pushbullet - Actions
type: action
description: "The Pushbullet action allows you to notify iOS, Android & Windows 10 Phone & Desktop devices of a message using the Pushbullet API web service."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/action/org.openhab.action.pushbullet/README.md
since: 1x
logo: images/addons/pushbullet.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Pushbullet Actions
The Pushbullet action allows you to notify iOS, Android & Windows 10 Phone & Desktop devices of a message using the Pushbullet API web service.
## Actions
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/).
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 botname, String receiver, String title, String message)`
## Examples
```java
sendPushbulletNote("mybot", "someone@somewhere.com", "this is the title", "And this is the body of the message")
```
## Creating an account for your bot(s)
The pushbullet accounts are bound to either Google or Facebook accounts.
- Go to "<https://www.pushbullet.com/>"
- Chose to either "Sign up with Google" or "Sign up with Facebook".
- Complete the signup process as guided by the pushbullet web site.
- Continue with "Obtaining an API key".
## Obtaining an API key
The API keys are bound to the pushbullet account.
- Go to the pushbullet site.
- Log in with either your personal account or the one you created for your bot.
- Go to "<https://www.pushbullet.com/#settings/account>"
- Click on "Create Access Token".
- Copy the token created on the site.
You must at least provide an API token (Private or Alias Key from Pushbullet.com) and a message in some manner before a message can be pushed.
All other parameters are optional.
If you use an alias key, the parameters (device, icon, sound, vibration) are overwritten by the alias setting on pushbullet.
## Rate limits
As of June 2017, free accounts have a limit of 500 pushes per month.
This action does not evaluate the rate limiting headers though.
## Libraries
This action has been written without using libraries as jpushbullet or jpushbullet2.
Both of those libraries use various libraries themselves which makes integrating them into openHAB a challenge.
## pushbullet API
- <https://docs.pushbullet.com/>
- <https://docs.pushbullet.com/#push-limit>

View File

@ -1,96 +0,0 @@
---
id: pushover
label: Pushover
title: Pushover - Actions
type: action
description: "The Pushover action service allows you to notify mobile devices of a message using the Pushover API web service."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/action/org.openhab.action.pushover/README.md
since: 1x
logo: images/addons/pushover.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Pushover Actions
The Pushover action service allows you to notify mobile devices of a message using the Pushover API web service.
## Configuration
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.
| Property | Default | Required | method to set | Description |
|-----------------|---------|:-------------------------------------------------:|-------------------------------------|------------------------------------------------------------------------------------------------------------------------|
| defaultTimeout | 10000 | No | - | Timeout in milliseconds for the connection to pushover.net |
| 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 | withUser(String user) | Pushover User or Group key (not e-mail address) of your user (or you) to send to devices. |
| defaultTitle | openHAB | No | withTitle(String title) | Application title for the notification |
| defaultPriority | 0 | No | withPriority(int priority) | Priority of the notification, from -2 (low priority) to 2 (high priority) |
| 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 | 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 |
| 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
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).
- `Deprecated ~~pushover(String message)~~`
- `Deprecated ~~pushover(String message, int priority)~~`
- `Deprecated ~~pushover(String message, int priority, String url)~~`
- `Deprecated ~~pushover(String message, int priority, String url, String urlTitle)~~`
- `Deprecated ~~pushover(String message, int priority, String url, String urlTitle, String soundFile)~~`
- `Deprecated ~~pushover(String message, String device)~~`
- `Deprecated ~~pushover(String message, String device, int priority)~~`
- `Deprecated ~~pushover(String message, String device, int priority, String url)~~`
- `Deprecated ~~pushover(String message, String device, int priority, String url, String urlTitle)~~`
- `Deprecated ~~pushover(String message, String device, int priority, String url, String urlTitle, String soundFile)~~`
- `Deprecated ~~pushover(String apiToken, String userKey, String message)~~`
- `Deprecated ~~pushover(String apiToken, String userKey, String message, int priority)~~`
- `Deprecated ~~pushover(String apiToken, String userKey, String message, String device)~~`
- `Deprecated ~~pushover(String apiToken, String userKey, String message, String device, int priority)~~`
- `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. 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.
Note that you cannot use a null value for int priority.
- `cancelPushoverEmergency(String receipt)`
- `cancelPushoverEmergency(String apiToken, String userKey, String receipt)`
The actions which are send using `withEmergencyPriority()` will send a message with [Emergency Priority](https://pushover.net/api#priority).
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

@ -1,31 +0,0 @@
---
id: pushsafer
label: Pushsafer
title: Pushsafer - Actions
type: action
description: "The Pushsafer action allows you to notify iOS, Android & Windows 10 Phone & Desktop devices of a message using the Pushsafer API web service."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/action/org.openhab.action.pushsafer/README.md
since: 1x
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Pushsafer Actions
The Pushsafer action allows you to notify iOS, Android & Windows 10 Phone & Desktop devices of a message using the Pushsafer API web service.
## Actions
The following is a valid action call that can be made when the plugin is loaded.
For specific information on each item, see the [Pushsafer API](https://www.pushsafer.com/en/pushapi).
```java
pushsafer(String apiToken, String message, String title, String device, String icon, String vibration, String sound)
```
You must at least provide an API token (Private or Alias Key from Pushsafer.com) and a message in some manner before a message can be pushed.
All other parameters are optional.
If you use an alias key, the parameters (device, icon, sound, vibration) are overwritten by the alias setting on pushsafer.

View File

@ -1,180 +0,0 @@
---
id: satel
label: Satel
title: Satel - Actions
type: action
description: "The Satel Action bundle provides actions to read the event log of the connected alarm system, check current connection status and override configured user code."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/action/org.openhab.action.satel/README.md
since: 1x
install: legacy
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
## Satel Actions
The Satel Action bundle provides actions to read the event log of the connected alarm system, check current connection status and override configured user code.
## Prerequisites
Satel Binding v1.x must be installed and configured in order to use Satel actions.
## Actions
- `boolean satelIsConnected()` - returns `true` if connected to communication module and `false` otherwise
- `Object[] satelReadEvent(int eventIndex)` - reads event log record for given index; records must be read one by one from most recent record under index `-1`; see record description below
- `String satelReadDeviceName(String deviceType, int deviceNumber)` - reads description of a device; device type must be one of PARTITION, ZONE, USER, EXPANDER, LCD, OUTPUT, TIMER, TELEPHONE, OBJECT
- `void satelSetUserCode(String newUserCode)` - overrides configured user code to a given one; allows to execute commands not available for default user configured in the settings
- `void satelResetUserCode()` - reverts user code set by `satelSetUserCode(String newUserCode)` to the value configured in openhab.cfg/satel.cfg.
### Event record fields
| Field | Type | Description |
|---------------------|--------------|-----------------------------------------------------------------------------------------------------------------|
| timestamp | DateTimeType | time when the event happened |
| partition | Integer | partition number |
| event class | Enum | one of ZONE_ALARMS, PARTITION_ALARMS, ARMING, BYPASSES, ACCESS_CONTROL, TROUBLES, USER_FUNCTIONS, SYSTEM_EVENTS |
| event code | Integer | code of the event |
| restoration flag | Boolean | |
| event description | String | |
| kind of description | Integer | |
| source | Integer | |
| object | Integer | |
| user control number | Integer | |
| next event index | Integer | index that must be passed to read next record from the log |
| current event index | Integer | index of the current record |
## Examples
### Send email on alarm with 10 most recent event log entries
satel.rules
```java
rule "Satel Action test"
when
AlarmPart1 changed to ON
then
var Integer eventIdx = -1
var String details
var String msgBody = ""
if (satelIsConnected()) {
logInfo("EventLog", "Start")
(1..10).forEach[
val Object[] eventRec = satelReadEvent(eventIdx)
val kind = eventRec.get(6) as Integer
val source = eventRec.get(7) as Integer
val object = eventRec.get(8) as Integer
val ucn = eventRec.get(9) as Integer
if (kind == 0) {
details = ""
} else if (kind == 1) {
details = ", partition: " + satelReadDeviceName("PARTITION", eventRec.get(1)) + ", zone: " + satelReadDeviceName("ZONE", source)
} else if (kind == 2) {
details = ", partition: " + satelReadDeviceName("PARTITION", eventRec.get(1)) + ", user: " + satelReadDeviceName("USER", source)
} else if (kind == 4) {
if (source == 0) {
details = " (mainboard)"
} else if (source <= 128) {
details = ", zone: " + satelReadDeviceName("ZONE", source)
} else if (source <= 192) {
details = ", expander: " + satelReadDeviceName("EXPANDER", source)
} else {
details = ", lcd: " + satelReadDeviceName("LCD", source)
}
} else if (kind == 5) {
details = ", partition: " + satelReadDeviceName("PARTITION", eventRec.get(1))
} else if (kind == 6) {
details = ", keypad: " + satelReadDeviceName("LCD", eventRec.get(1)) + ", user: " + satelReadDeviceName("USER", source)
} else if (kind == 7) {
details = ", user: " + satelReadDeviceName("USER", source)
} else if (kind == 15) {
details = ", partition: " + satelReadDeviceName("PARTITION", eventRec.get(1)) + ", timer: " + satelReadDeviceName("TIMER", source)
} else if (kind == 30) {
details = ", keypad: " + satelReadDeviceName("LCD", eventRec.get(1)) + ", ip: " + source + "." + (object*32 + ucn) + details
} else if (kind == 31) {
details = "." + source + "." + (object*32 + ucn)
} else {
details = ", kind=" + kind + ", partition=" + eventRec.get(1) + ", source=" + source + ", object=" + object + ", ucn=" + ucn
}
if (kind != 31) {
msgBody = msgBody + "\n" + eventRec.get(0) + ": " + eventRec.get(5) + details
}
eventIdx = eventRec.get(10)
]
logInfo("EventLog", "End")
sendMail("you@email.net", "Even log", msgBody)
}
end
```
satel.items:
```java
Switch AlarmPart1 "Alarm on partition #1" { satel="partition:alarm_memory:1" }
```
### Rule that changes user code for 10 minutes
After that time user code is reverted to the one configured in the Satel binding (1.x) configuration
satel.rules
```java
var String userCode = ""
var Timer keypadTimer = null
var Timer userCodeTimer = null
rule "Keypad char entered"
when
Item Keypad_Char changed
then
if (Keypad_Char.state == "-") {
satelSetUserCode(userCode)
userCode = ""
if (userCodeTimer != null) {
userCodeTime.cancel
}
userCodeTimer = createTimer(now.plusMinutes(10)) [|
logInfo("Keypad", "Reverting user code")
satelResetUserCode()
]
} else if (Keypad_Char.state == "*") {
satelResetUserCode()
userCode = ""
} else {
userCode = userCode + Keypad_Char.state
}
if (keypadTimer != null) {
keypadTimer.cancel
}
keypadTimer = createTimer(now.plusSeconds(5)) [|
userCode = ""
Keypad_Char.postUpdate("")
]
end
```
satel.items
```java
String Keypad_Char ">"
```
satel.sitemap
```java
Text label="Enter user code" icon="settings" {
Switch item=Keypad_Char mappings=[ "1"="1", "2"="2", "3"="3" ]
Switch item=Keypad_Char mappings=[ "4"="4", "5"="5", "6"="6" ]
Switch item=Keypad_Char mappings=[ "7"="7", "8"="8", "9"="9" ]
Switch item=Keypad_Char mappings=[ "*"="*", "0"="0", "-"="#" ]
}
```

View File

@ -1,92 +0,0 @@
---
id: squeezebox
label: Squeezebox
title: Squeezebox - Actions
type: action
description: "Interact directly with your Squeezebox devices from within rules and scripts."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/action/org.openhab.action.squeezebox/README.md
since: 1x
logo: images/addons/squeezebox.png
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Squeezebox Actions
Interact directly with your Squeezebox devices from within rules and scripts.
## Prerequisites
You must install and configure the Squeezebox binding (1.x).
The `id` you specify in your configuration will be used to identify which player to perform the specified action on.
For example, in the configuration `Kitchen_Player.id=de:ad:be:ef:12:34` would be identified as `Kitchen_Player` in your rules.
## Actions
### Standard Actions
* `squeezeboxPower(String playerId, boolean power)`
* `squeezeboxMute(String playerId, boolean mute)`
* `squeezeboxVolume(String playerId, int volume)`
* `squeezeboxPlay(String playerId)`
* `squeezeboxPause(String playerId)`
* `squeezeboxStop(String playerId)`
* `squeezeboxNext(String playerId)`
* `squeezeboxPrev(String playerId)`
### Actions to play a URL on your Squeezebox devices
For example, start a radio stream when you wake up in the morning.
* `squeezeboxPlayUrl(String playerId, String url)`: Plays the URL on the specified player using the current volume
* `squeezeboxPlayUrl(String playerId, String url, int volume)`: Plays the URL on the specified player at the specified volume
### Actions to speak a message on your Squeezebox devices
* `squeezeboxSpeak(String playerId, String message)`
* `squeezeboxSpeak(String playerId, String message, int volume)`
* `squeezeboxSpeak(String playerId, String message, int volume, boolean resumePlayback)`
Note: You need to have filled in the `ttsurl` details within the Squeezebox section in the configuration.
Given the changes Google have made to their TTS usage allowances, you might have better luck registering for a key at <http://www.voicerss.org/api/>.
You can check you have the url and api working by pasting it into a browser with some text at the end
```
https://api.voicerss.org/?key=YOUR_KEY_GOES_HERE&f=44khz_16bit_stereo&hl=en-gb&src=This is Major Tom to Ground Control
```
Then you can use the action in your rules however you want.
## Examples
### Send an announcement to the specified player using the current volume
```java
squeezeboxSpeak("Kitchen_Player", "This is Major Tom to Ground Control")
```
### Send an announcement to the specified player at the specified volume
```java
squeezeboxSpeak("Kitchen_Player", "I'm stepping through the door", 100)
```
### Send an announcement to the specified player at the specified volume
If `resumePlayback=true` resume to actual playlist after finishing message.
You might have to tweak some settings on your Squeezebox server and player regarding what defeats what when you add a song in the middle of a playlist.
```java
squeezeboxSpeak("Kitchen_Player", "And I'm floating in a most peculiar way", 100, false)
```
### Generating dynamic strings
```java
squeezeboxSpeak("Kitchen_Player"," temperature outside is " + Weather_Temperature.state.format("%d") + " degrees celsius",75,true)
```

View File

@ -1,170 +0,0 @@
---
id: telegram
label: Telegram
title: Telegram - Actions
type: action
description: "The Telegram Action service allows sending formatted messages to Telegram clients ([https://telegram.org](https://telegram.org)), by using the Telegram Bot API."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/action/org.openhab.action.telegram/README.md
since: 1x
logo: images/addons/telegram.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Telegram Actions
The Telegram Action service allows sending formatted messages to Telegram clients ([https://telegram.org](https://telegram.org)), by using the Telegram Bot API.
## Prerequisites
As described in the Telegram Bot API, this is the manual procedure needed in order to get the necessary information.
1. Create the Bot and get the Token
- On a Telegram client open a chat with BotFather.
- write `/newbot` to BotFather, fill all the needed information, write down the token. This is the authentication token needed.
2. Create the destination chat and get the chatId
- Open a new chat with your new Bot and post a message on the chat
- 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)
## 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
The action can be configured in `services/telegram.cfg`.
| Property | Default | Required | Description |
|---------------------|---------|:--------:|---------------------------------------|
| bots | | Yes | Comma-separated list of `<bot-name>`s |
| `<bot name>.chatId` | | Yes | chat id |
| `<bot name>.token` | | Yes | authentication token |
### Configuration example
```text
bots=bot1,bot2
bot1.chatId=22334455
bot1.token=xxxxxxxxxxx
bot2.chatId=654321
bot2.token=yyyyyyyyyyy
```
It this example two bots can be used (`bot1` and `bot2`).
## Examples
### Send a text message to telegram chat
telegram.rules
```java
rule "Send telegram with Fixed Message"
when
Item Foo changed
then
sendTelegram("bot1", "item Foo changed")
end
```
### Send a text message with a formatted message
telegram.rules
```java
rule "Send telegram with Formatted Message"
when
Item Foo changed
then
sendTelegram("bot1", "item Foo changed to %s and number is %.1f", Foo.state.toString, 23.56)
end
```
### 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
```java
rule "Send telegram with image and caption from image accessible by url"
when
Item Light_GF_Living_Table changed
then
sendTelegramPhoto("bot1", "http://www.openhab.org/assets/images/openhab-logo-top.png",
"sent from openHAB")
end
```
telegram.rules
```java
rule "Send telegram with image without caption from image accessible by url"
when
Item Light_GF_Living_Table changed
then
sendTelegramPhoto("bot1", "http://www.openhab.org/assets/images/openhab-logo-top.png",
null)
end
```
If an image is on a web server requiring authentication, credentials can be passed as additional parameters:
telegram.rules
```java
rule "Send telegram with image without caption from image accessible by url"
when
Item Light_GF_Living_Table changed
then
sendTelegramPhoto("bot1", "http://www.openhab.org/assets/images/openhab-logo-top.png",
null, "username", "password")
end
```
To send a base64 jpeg or png image:
telegram.rules
```java
rule "Send telegram with base64 image and caption"
when
Item Light_GF_Living_Table changed
then
var String base64Image = "data:image/jpeg;base64, LzlqLzRBQ..."
sendTelegramPhoto("bot1", base64Image, "sent from Openhab")
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

@ -1,142 +0,0 @@
---
id: tinkerforge
label: TinkerForge
title: TinkerForge - Actions
type: action
description: "The TinkerForge Action service provides direct interaction with some of the TinkerForge devices."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/action/org.openhab.action.tinkerforge/README.md
since: 1x
logo: images/addons/tinkerforge.png
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# TinkerForge Actions
The TinkerForge Action service provides direct interaction with some of the TinkerForge devices.
## Prerequisites
The action service depends on the TinkerForge Binding (1.x) being installed and configured. Add at least a hosts configuration value in the binding's configuration.
## Actions
These action functions are available:
- `tfClearLCD(String uid)`
Clears the display of the LCD with the given uid.
Example:
```javascript
rule "clear lcd"
when
Item ClearLCD received command ON
then
tfClearLCD("d4j")
end
```
- `tfServoSetposition(String uid, String num, String position, String velocity, String acceleration)`
Sets the position of a TinkerForge servo with the uid $uid and servo number to the position $position using the speed $speed and acceleration $acceleration.
Example:
```javascript
rule "move servo"
when
Item MoveServo received command ON
then
tfServoSetposition("6Crt5W", "servo0", "0", "65535", "65535")
Thread::sleep(1000)
tfServoSetposition("6Crt5W", "servo0", "-9000", "65535", "65535")
Thread::sleep(1000)
tfServoSetposition("6Crt5W", "servo0", "9000", "65535", "65535")
end
```
- `tfDCMotorSetspeed(String uid, String speed, String acceleration, String drivemode)`
Sets the speed of a TinkerForge DC motor with the given uid to $speed using the acceleration $acceleration and the drivemode $drivemode.
- speed: value between -32767 - 32767
- drivemode is either "break" or "coast"
Example:
```javascript
rule "move motor"
when
Item DCMOVE received command ON
then
var String acceleration = "10000"
var String speed = "15000"
tfDCMotorSetspeed("62Zduj", speed, acceleration, "break")
Thread::sleep(1000)
tfDCMotorSetspeed("62Zduj", speed, acceleration, "break")
Thread::sleep(1000)
tfDCMotorSetspeed("62Zduj", speed, acceleration, "break")
Thread::sleep(1000)
tfDCMotorSetspeed("62Zduj", speed, acceleration, "break")
end
```
- `tfDCMotorSetspeed(String uid, Short speed, Integer acceleration, String drivemode)`
Sets the speed of a TinkerForge DC motor with the given uid to $speed using the acceleration $acceleration and the drivemode $drivemode.
- speed: value between -32767 - 32767
- drivemode is either "break" or "coast"
Example:
```javascript
rule "move motor"
when
Item DCMOVE received command ON
then
var Integer acceleration = 10000
var Short speed = 15000
tfDCMotorSetspeed("62Zduj", speed, acceleration, "break")
Thread::sleep(1000)
tfDCMotorSetspeed("62Zduj", speed, acceleration, "break")
Thread::sleep(1000)
tfDCMotorSetspeed("62Zduj", speed, acceleration, "break")
Thread::sleep(1000)
tfDCMotorSetspeed("62Zduj", speed, acceleration, "break")
end
```
- `tfRotaryEncoderClear(String uid)`
Clears the rotary encoder counter with the given uid.
Example:
```javascript
rule "Clear"
when Item Clear changed
then
tfRotaryEncoderClear("kHv")
end
```
- `tfLoadCellTare(String uid)`
Sets tare on the load cell bricklet with the given uid.
Example:
```javascript
rule "Tare"
when
Item Tare changed to ON
then
postUpdate(TareValue, Weight.state)
tfLoadCellTare("v8V")
end
```

View File

@ -1,91 +0,0 @@
---
id: twitter
label: Twitter
title: Twitter - Actions
type: action
description: "Twitter can be used to 'tweet' notifications when certain events take place in openHAB."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/action/org.openhab.action.twitter/README.md
since: 1x
logo: images/addons/twitter.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Twitter Actions
Twitter can be used to "tweet" notifications when certain events take place in openHAB.
## Actions
- `sendTweet(message)`: Send a Tweet
- `sendDirectMessage('recipient', 'direct message')`: Send a direct message simply use the following syntax inside a rule or script;
## Configuration
The Twitter action service is one of the pre-defined set of actions that is automatically available, and can be used within rules and scripts.
You will need to enable "tweeting" by adding the following to the file `services/twitter.cfg`:
`enabled=true`
After enabling, you will then need to authenticate openHAB with Twitter.
Typically a new Twitter account would be set up for openHAB, rather than using your personal account, but that is entirely up to you.
## Prerequisites
You'll have to authorise openHAB to use Twitter.
This is done using a two step process, similar to Dropbox authentication.
openHAB requests a token which is used as a one-time-password to get hold of an authentication token (second step) which will be used for all future requests to Twitter.
### Step 1
This is performed by openHAB automatically after configuration above.
You will find some entries like this in your `openhab.log` file:
```text
08:46:10.013 INFO o.openhab.io.net.actions.Tweet[:136] - ################################################################################################
08:46:10.014 INFO o.openhab.io.net.actions.Tweet[:137] - # Twitter-Integration: U S E R I N T E R A C T I O N R E Q U I R E D !!
08:46:10.014 INFO o.openhab.io.net.actions.Tweet[:138] - # 1. Open URL 'http://api.twitter.com/oauth/authorize?oauth_token=hP9gKIQ4wfMrzpmzqp4NcTJjAxXdwLo9fFEcndkks'
08:46:10.014 INFO o.openhab.io.net.actions.Tweet[:139] - # 2. Grant openHAB access to your Twitter account
08:46:10.014 INFO o.openhab.io.net.actions.Tweet[:140] - # 3. Create an empty file 'twitter.pin' in your openHAB install path
08:46:10.015 INFO o.openhab.io.net.actions.Tweet[:141] - # 4. Add the line 'pin=<authpin>' to the twitter.pin file
08:46:10.015 INFO o.openhab.io.net.actions.Tweet[:142] - # 5. openHAB will automatically detect the file and complete the authentication process
08:46:10.015 INFO o.openhab.io.net.actions.Tweet[:143] - # NOTE: You will only have 5 mins before openHAB gives up waiting for the pin!!!
08:46:10.015 INFO o.openhab.io.net.actions.Tweet[:144] - ################################################################################################
```
### Step 2
This steps needs your interaction.
Copy the given URL to your browser and authorize openHAB to use Twitter.
Be aware that the request token is only valid for the next five minutes, so don't wait too long.
After successful authorization, you will be given an authentication PIN which you will need to copy to a new file you create in the `<openhabhome>` directory called `twitter.pin`.
Please note that the PIN must be given in this format: `pin=<authpin>`.
### Step 3
This step is handled automatically by openHAB.
It will detect the PIN file you just created and use it to generate an authentication token which it will store away for future use.
openHAB will give up waiting after 5 minutes, so if you are not quick enough you will have to restart openHAB and begin the authentication process again.
Once authenticated, you should see an entry in the log file to indicate authentication was successful.
```text
08:53:53.486 INFO o.openhab.io.net.actions.Twitter[:94] - TwitterAction has been successfully authenticated > awaiting your Tweets!
```
And you will notice a new file is created in `etc` called `twitter.token`.
This is where the authentication token is stored for future use.
You can now safely delete the `twitter.pin` file if you wish as it is no longer required.
## Rate Limits
Please beware there are technical limits that apply to your account.
The current limits are:
- Direct messages: 250 per day.
- Tweets: 1,000 per day. The daily update limit is further broken down into smaller limits for semi-hourly intervals. Retweets are counted as Tweets.
- Following (daily): The technical follow limit is 1,000 per day. Please note that this is a technical account limit only, and there are additional rules prohibiting aggressive following behavior. Details about following limits and prohibited behavior are on the Follow Limits and Best Practices page.
- Following (account-based): Once an account is following 2,000 other users, additional follow attempts are limited by account-specific ratios. The Follow Limits and Best Practices page has more information.

View File

@ -1,40 +0,0 @@
---
id: weather
label: Weather
title: Weather - Actions
type: action
description: "The Weather Action service provides meteorological information to your scripts and rules."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/action/org.openhab.action.weather/README.md
since: 1x
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Weather Actions
The Weather Action service provides meteorological information to your scripts and rules.
- `getHumidex(double temperature, int hygro)`: Compute the Humidex index given temperature in Celsius and hygrometry (relative percent). Returns Humidex index value.
- `getBeaufortIndex(double speed)`: Compute the [Beaufort scale](http://en.wikipedia.org/wiki/Beaufort_scale) for a given wind speed in m/s. Returns the Beaufort Index between 0 and 12. `transform/beaufort.map`:
```text
0=Calm
1=Light air
2=Light breeze
3=Gentle breeze
4=Moderate breeze
5=Fresh breeze
6=Strong breeze
7=High wind
8=Gale
9=Strong/severe gale
10=Storm
11=Violent storm
12=Hurricane force
```
- `getSeaLevelPressure(double pressure, double temp, double altitude)`: Compute the [Sea Level Pressure](http://keisan.casio.com/exec/system/1224575267), given absolute pressure in hPa, temperature in Celsius, and altitude in meters. Returns equivalent sea level pressure.
- `getWindDirection(int degree)`: Transform an orientation angle (in degrees) to its cardinal string equivalent. Returns string representing the direction.

View File

@ -1,24 +0,0 @@
---
id: xbmc
label: XBMC
title: XBMC - Actions
type: action
description: "Sends notifications to the Kodi open source home theater software (formerly known as XBMC)."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/action/org.openhab.action.xbmc/README.md
since: 1x
logo: images/addons/xbmc.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# XBMC Actions
Sends notifications to the Kodi open source home theater software (formerly known as XBMC).
## Actions
- `sendXbmcNotification(host, port, title, message)`: Sends a message to a given XBMC instance
- `sendXbmcNotification(host, port, title, message, image, displayTime)`: Sends a message to a given XBMC instance (image=a URL pointing to an image, displayTime=a display time for the message in milliseconds)

View File

@ -1,61 +0,0 @@
---
id: xmpp
label: XMPP
title: XMPP - Actions
type: action
description: "This set of actions allows you to send a message to an XMPP user or multi-user chat, or send a message with an attachment to an XMPP user."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/action/org.openhab.action.xmpp/README.md
since: 1x
logo: images/addons/xmpp.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# XMPP Actions
This set of actions allows you to send a message to an XMPP user or multi-user chat, or send a message with an attachment to an XMPP user.
## Actions
- `sendXMPP(String to, String message)`: Sends a message to an XMPP user
- `sendXMPP(String to, String message, String attachmentUrl)`: Sends a message with an attachment to an XMPP user
- `chatXMPP(String message)`: Sends a message to a multi user chat
## Configuration
The XMPP Action service can be configured in `services/xmpp.cfg`.
| Property | Default | Required | Description |
|--------------|---------------|:--------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| username | | | The username of the XMPP account used by openHAB. Most services will require that you use only the localpart of the account's JID. For example if your accounts JID is `myuser@example.org`, then only configure `myuser`. |
| password | | | The password of the XMPP account used by openHAB |
| servername | | | The XMPP service to use, e.g. `jabber.de`. A list of public XMPP services can be found at https://xmpp.net/directory.php |
| securitymode | `disabled` | No | The Security mode used for the XMPP connection. Can be either `required` or `disabled`. Defaults to `disabled`, which means that TLS will not be used. Warning: If you change this to non-disabled, then you must make sure that your TLS server certificate can be validated, otherwhise the connection will fail. |
| tlspin | | | The TLS Pin used to verify the XMPP service's certificate. Set this in case openHAB's default `SSLContext` is unable to verfiy it (e.g. because the XMPP service uses a self-signed certificate). The PIN value is bascially the hash of the certificate in hexadecimal notation. You have to set `securitymode` to `required` to enable TLS for XMPP connections. For information on how to generate the PIN visit https://github.com/Flowdalic/java-pinning . Example: `tlspin=CERTSHA256:83:F9:17:1E:06:A3:13:11:88:89:F7:D7:93:02:BD:1B:7A:20:42:EE:0C:FD:02:9A:BF:8D:D0:6F:FA:6C:D9:D3` |
| proxy | | | The XMPP Proxyserver to use, e.g. `gmail.com` |
| port | `5222` | | The server port to use |
| consoleusers | | | A comma-separated list of users that are allowed to use the XMPP console |
| chatroom | | | The multi user chat to join, e.g. `openhab@chat.example.com` |
| chatnickname | `openhab-bot` | No | The nickname used in the multi-user chat |
| chatpassword | | | The password required to join the multi user chat |
Note: openHAB does not resolve SRV entries like other XMPP clients do, you have to setup the server details manually.
Generally, if `joe@example.org` is your XMPP user ID and `xmpp.example.net` points to the server running the service, set `servername` to the actual server `xmpp.example.net`, the user name `username` to `joe` and `proxy` to the domain name part of your user ID `example.org`.
## Example: Google
```java
servername=talk.google.com
securitymode=required
# You need this "tlspin" if openhab cannot verify the certificate from the google server
tlspin=CERTSHA256:9e670d6624fc0c451d8d8e3efa81d4d8246ff9354800de09b549700e8d2a730a
proxy=gmail.com
username=my.openhab@gmail.com
password=mysecret
# you may need to add the cryptic talk.google.com address of your private google account to the allowed users
# check you openhab.log to found the address after you send something via Hangouts to your openHAB account
consoleusers=**cryptic**@public.talk.google.com,myname@gmail.com
```

View File

@ -1,31 +0,0 @@
---
id: xpl
label: xPL
title: xPL - Actions
type: action
description: "This add-on provides xPL message sending on the network."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/action/org.openhab.action.xpl/README.md
since: 1x
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# xPL Action
This add-on provides xPL message sending on the network.
## Actions
* `sendxPLMessage(String target, String msgType, String msgClass, String bodyLine1, String bodyLine2 ...)` : Sends a message over the xPL network.
Parameters shall follow xPL message elements syntax.
| Parameter | Meaning |
|-----------|----------------------------------------------------------------------------------------------------------------------------|
| target | string spelled vendor-device.instance |
| msgType | being one of : command, trigger, status |
| msgClass | string spelled class.type |
| bodyLineX | string containing key and value in the form of "bodykey1=bodyvalue1". There may be as many bodyLine parameters as needed. |

View File

@ -1,209 +0,0 @@
---
id: airquality
label: Air Quality
title: Air Quality - Bindings
type: binding
description: "This binding uses the [AQIcn.org service](http://aqicn.org) for providing air quality information for any location worldwide."
since: 2x
logo: images/addons/airquality.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Air Quality Binding
This binding uses the [AQIcn.org service](http://aqicn.org) for providing air quality information for any location worldwide.
The World Air Quality Index project is a social enterprise project started in 2007. Its mission is to promote Air Pollution awareness and provide a unified Air Quality information for the whole world.
The project is proving a transparent Air Quality information for more than 70 countries, covering more than 9000 stations in 600 major cities, via those two websites: [aqicn.org](http://aqicn.org) and [waqi.info](http://waqi.info).
To use this binding, you first need to [register and get your API token](http://aqicn.org/data-platform/token/).
## Supported Things
There is exactly one supported thing type, which represents the air quality information for an observation location.
It has the `aqi` id.
Of course, you can add multiple Things, e.g. for measuring AQI for different locations.
## Discovery
Local Air Quality can be autodiscovered based on system location.
You'll have complete default configuration with your apiKey.
## Binding Configuration
The binding has no configuration options, all configuration is done at Thing level.
## Thing Configuration
The thing has a few configuration parameters:
| Parameter | Description |
|-----------|-------------------------------------------------------------------------|
| apikey | Data-platform token to access the AQIcn.org service. Mandatory. |
| location | Geo coordinates to be considered by the service. |
| stationId | Unique ID of the measuring station. |
| refresh | Refresh interval in minutes. Optional, the default value is 60 minutes. |
For the location parameter, the following syntax is allowed (comma separated latitude and longitude):
```java
37.8,-122.4
37.8255,-122.456
```
If you always want to receive data from specific station and you know its unique ID, you can enter it instead of the coordinates.
## Channels
The AirQuality information that is retrieved is available as these channels:
| Channel ID | Item Type | Description |
|-----------------|----------------------|----------------------------------------------|
| aqiLevel | Number | Air Quality Index |
| aqiDescription | String | AQI Description |
| locationName | String | Nearest measuring station location |
| stationId | Number | Measuring station ID |
| stationLocation | Location | Latitude/longitude of measuring station |
| pm25 | Number | Fine particles pollution level (PM2.5) |
| pm10 | Number | Coarse dust particles pollution level (PM10) |
| o3 | Number | Ozone level (O3) |
| no2 | Number | Nitrogen Dioxide level (NO2) |
| co | Number | Carbon monoxide level (CO) |
| observationTime | DateTime | Observation date and time |
| temperature | Number:Temperature | Temperature in Celsius degrees |
| pressure | Number:Pressure | Pressure level |
| humidity | Number:Dimensionless | Humidity level |
| dominentPol | String | Dominent Polutor |
`AQI Description` item provides a human-readable output that can be interpreted e.g. by MAP transformation.
*Note that channels like* `pm25`, `pm10`, `o3`, `no2`, `co` *can sometimes return* `UNDEF` *value due to the fact that some stations don't provide measurements for them.*
## Full Example
airquality.map:
```text
-=-
UNDEF=No data
NULL=No data
NO_DATA=No data
GOOD=Good
MODERATE=Moderate
UNHEALTHY_FOR_SENSITIVE=Unhealthy for sensitive groups
UNHEALTHY=Unhealthy
VERY_UNHEALTHY=Very unhealthy
HAZARDOUS=Hazardous
```
airquality.things:
```java
airquality:aqi:home "AirQuality" @ "Krakow" [ apikey="XXXXXXXXXXXX", location="50.06465,19.94498", refresh=60 ]
airquality:aqi:warsaw "AirQuality in Warsaw" [ apikey="XXXXXXXXXXXX", location="52.22,21.01", refresh=60 ]
airquality:aqi:brisbane "AirQuality in Brisbane" [ apikey="XXXXXXXXXXXX", stationId=5115 ]
```
airquality.items:
```java
Group AirQuality <flow>
Number Aqi_Level "Air Quality Index" <flow> (AirQuality) { channel="airquality:aqi:home:aqiLevel" }
String Aqi_Description "AQI Level [MAP(airquality.map):%s]" <flow> (AirQuality) { channel="airquality:aqi:home:aqiDescription" }
Number Aqi_Pm25 "PM\u2082\u2085 Level" <line> (AirQuality) { channel="airquality:aqi:home:pm25" }
Number Aqi_Pm10 "PM\u2081\u2080 Level" <line> (AirQuality) { channel="airquality:aqi:home:pm10" }
Number Aqi_O3 "O\u2083 Level" <line> (AirQuality) { channel="airquality:aqi:home:o3" }
Number Aqi_No2 "NO\u2082 Level" <line> (AirQuality) { channel="airquality:aqi:home:no2" }
Number Aqi_Co "CO Level" <line> (AirQuality) { channel="airquality:aqi:home:co" }
String Aqi_LocationName "Measuring Location" <settings> (AirQuality) { channel="airquality:aqi:home:locationName" }
Location Aqi_StationGeo "Station Location" <office> (AirQuality) { channel="airquality:aqi:home:stationLocation" }
Number Aqi_StationId "Station ID" <pie> (AirQuality) { channel="airquality:aqi:home:stationId" }
DateTime Aqi_ObservationTime "Time of observation [%1$tH:%1$tM]" <clock> (AirQuality) { channel="airquality:aqi:home:observationTime" }
Number:Temperature Aqi_Temperature "Temperature" <temperature> (AirQuality) { channel="airquality:aqi:home:temperature" }
Number:Pressure Aqi_Pressure "Pressure" <pressure> (AirQuality) { channel="airquality:aqi:home:pressure" }
Number:DimensionLess Aqi_Humidity "Humidity" <humidity> (AirQuality) { channel="airquality:aqi:home:humidity" }
```
airquality.sitemap:
```perl
sitemap airquality label="Air Quality" {
Frame {
Text item=Aqi_Level valuecolor=[
Aqi_Level=="-"="lightgray",
Aqi_Level>=300="#7e0023",
>=201="#660099",
>=151="#cc0033",
>=101="#ff9933",
>=51="#ffde33",
>=0="#009966"
]
Text item=Aqi_Description valuecolor=[
Aqi_Description=="HAZARDOUS"="#7e0023",
=="VERY_UNHEALTHY"="#660099",
=="UNHEALTHY"="#cc0033",
=="UNHEALTHY_FOR_SENSITIVE"="#ff9933",
=="MODERATE"="#ffde33",
=="GOOD"="#009966"
]
}
Frame {
Text item=Aqi_Pm25
Text item=Aqi_Pm10
Text item=Aqi_O3
Text item=Aqi_No2
Text item=Aqi_Co
}
Frame {
Text item=Aqi_LocationName
Text item=Aqi_ObservationTime
Text item=Aqi_Temperature
Text item=Aqi_Pressure
Text item=Aqi_Humidity
}
Frame label="Station Location" {
Mapview item=Aqi_StationGeo height=10
}
}
```
airquality.rules:
```java
rule "Change lamp color to reflect Air Quality"
when
Item Aqi_Description changed
then
var String hsb
switch Aqi_Description.state {
case "HAZARDOUS":
hsb = "343,100,49"
case "VERY_UNHEALTHY":
hsb = "280,100,60"
case "UNHEALTHY":
hsb = "345,100,80"
case "UNHEALTHY_FOR_SENSITIVE":
hsb = "30,80,100"
case "MODERATE":
hsb = "50,80,100"
case "GOOD":
hsb = "160,100,60"
}
sendCommand(Lamp_Color, hsb)
end
```

View File

@ -1,142 +0,0 @@
---
id: akm868
label: AKM868
title: AKM868 - Bindings
type: binding
description: "This binding is for users coming from the proprietary homeautomation-system 'IP-Symcon'. If you have bought some hardware from them, you can use this binding to enable your AKM868 presence detection system."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.akm868/README.md
since: 1x
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# AKM868 Binding
This binding is for users coming from the proprietary homeautomation-system "IP-Symcon". If you have bought some hardware from them, you can use this binding to enable your AKM868 presence detection system.
The following hardware was used to do presence detection with the AKM-868 controller and a OVO868-tracker for your key-ring:
![AKM-Module](https://raw.githubusercontent.com/openhab/openhab1-addons/master/bundles/binding/org.openhab.binding.akm868/src/main/resources/AKM868.png)
![LAN-T Module](https://raw.githubusercontent.com/openhab/openhab1-addons/master/bundles/binding/org.openhab.binding.akm868/src/main/resources/LAN-T868.png)
![868xOVO Tracker](https://raw.githubusercontent.com/openhab/openhab1-addons/master/bundles/binding/org.openhab.binding.akm868/src/main/resources/Tracker-868xOVO.png)
## Binding Configuration
The binding can be configured in the file `services/akm868.cfg`.
| Property | Default | Required | Description |
|----------|---------|:--------:|-------------|
| host | | Yes | IP address of the adapter LAN-T 868 |
| port | 10001 | No | Port of the adapter LAN-T 868 |
| timeout | | | Timeout in milliseconds. If the AKM-Controller does not send an update within that timeframe, the switch item is changing to OFF |
## Item Configuration
The syntax of the binding configuration strings accepted is the following:
```
{ akm868="id=x,channel=y" }
```
The `id` represents the ID of your OVO-Tracker.
The `channel` can be one of the following values:
| channel | meaning |
|---------|---------|
| 0 | notify on pings from the tracker |
| 1 | when the button of the tracker was pressed |
| 5 | when the button of the tracker was pressed longer |
## Examples
### Items
```
Switch PresenceMichael "Key Michael" <present> {akm868="id=9999,channel=0"}
```
This item would turn the Switch to `ON` as soon as openHAB receives a PING from the tracker. It will turn the Switch to `OFF` if the tracker doesn't send another PING within the given timeframe (`timeout` value from the configuration).
```
Switch KeyPressedShortMichael "Key Michael" <present> {akm868="id=9999,channel=1"}
```
This item would turn the Switch to `ON` every time the key was pressed.
```
Switch KeyPressedLongeMichael "Key Michael" <present> {akm868="id=9999,channel=5"}
```
This item would turn the Switch to **ON** every time the key was pressed for a longer time.
### Rules
```
rule "Turn off WIFI if not at Home"
when
Item PresenceMichael changed to OFF
then
logInfo("Wifi","Wifi OFF")
sendCommand(Power_Upstairs_Wifi, OFF)
end
```
## Limitations
You must use a LANT-868 Adapter. The USB868-Adapter doesn't work. However, if you own a USB adapter, there is a workaround utilizing the Serial binding (1.x).
Once the Serial binding is installed, following items are needed for the workaround:
```
String Presence_AKM_ComPort "Last String from AKM [%s]" { serial="/dev/ttyUSB1" } //check USB port is matching to your system configuration
DateTime Presence_AKM1_LastUpdate "Key 1: Last Update: [%1$td.%1$tm.%1$tY %1$tT]"
String Presence_AKM1_Action "Key 1: Last Action: [%s]"
Switch Presence_AKM "Presence AKM" <contact>
```
This rule handles an incoming event form the keyfob:
```
rule "Presence AKM Direct"
when Item Presence_AKM_ComPort received update
then
var String[] buffer= Presence_AKM_ComPort.state.toString.split(",")
// var String id = buffer.get(2) // this is the ID of the keyfob. rule could be enhanced to distinguish several keyfobs
var String action = buffer.get(3)
var String packetValid = buffer.get(4)
if (packetValid.contains("OK")) {
postUpdate(Presence_AKM1_LastUpdate, new DateTimeType())
Presence_AKM.sendCommand("ON")
switch (action) {
case '0' : Presence_AKM1_Action.sendCommand("Ping")
case '1' : Presence_AKM1_Action.sendCommand("PressedShort")
case '5' : Presence_AKM1_Action.sendCommand("PressedLong")
}
}
end
```
A second rule is needed to periodically check if the there was an update from the keyfob. If there was no update in the last 100 seconds, the assumption is that the fob is out of range.
```
rule "Presence AKM reset"
when
Time cron "0 0/1 * * * ?"
then
if (Presence_AKM.state == ON) {
var DateTimeType l_akm1 = Presence_AKM1_LastUpdate.state as DateTimeType
if ((new DateTimeType().calendar.timeInMillis - l_akm1.calendar.timeInMillis) > 100000){ // 100 sec timeout
Presence_AKM1_Action.sendCommand("Away")
Presence_AKM.sendCommand("OFF")
}
}
end
```

View File

@ -1,280 +0,0 @@
---
id: alarmdecoder
label: Alarm Decoder
title: Alarm Decoder - Bindings
type: binding
description: "The [Alarm Decoder](http://www.alarmdecoder.com) is a hardware adapter that interfaces with Ademco/Honeywell alarm panels. It acts essentially like a keypad, reading and writing messages on a serial bus that connects keypads with the main panel."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.alarmdecoder/README.md
since: 1x
logo: images/addons/alarmdecoder.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Alarm Decoder Binding
The [Alarm Decoder](http://www.alarmdecoder.com) is a hardware adapter that interfaces with Ademco/Honeywell alarm panels. It acts essentially like a keypad, reading and writing messages on a serial bus that connects keypads with the main panel.
There are several versions of the adapter available:
* ad2pi (a board that plugs into a Raspberry Pi and so offers network-based TCP connectivity)
* ad2serial (serial port access)
* or ad2usb (emulated serial port via USB).
This binding allows openHAB to access the status of contacts and motion detectors connected to Honeywell Vista 20p and similar alarm panels.
## Prerequisites
How to wire the alarm decoder into the panel is described in the alarm decoder quickstart guide. Before working on the main panel, it is advisable to put the alarm system in test mode, and unplug the phone connection to it for good measure (don't forget to plug it back in when finished).
Understanding exactly what expansion boards are connected to the main panel is crucial for a successful setup of the AlarmDecoder and also helpful in interpreting the messages from the alarmdecoder.
While many of the expansion devices don't have labels on the outside, inserting a flat screwdriver into the right slot and prying gently will usually uncover a circuit board with numbers on it that can be web searched.
Although not mentioned in the quickstart guide, and only documented on an odd
[thread](http://archive.nutech.com/index.php?option=com_fireboard&Itemid=74&func=view&catid=4&id=656), configuring the virtual relay boards is absolutely necessary on panels like the Honeywell Vista 20p and similar, or else all of the eight on-board zones will not be visible! The process sounds intimidating, and it does require bypassing the installer code (see panel documentation about that), but it is not all that hard.
Once the hardware has been set up properly, a simple, [well documented](http://www.alarmdecoder.com/wiki/index.php/Protocol)
clear text ASCII byte stream is obtained, either on a serial port, or (with the ad2pi appliance) a TCP port that can be telnet'd to.
Here is an example ASCII stream straight from the alarmdecoder:
```
!SER2SOCK Connected
!SER2SOCK SERIAL_CONNECTED
[0000000110000000----],005,[f70000ff1005000028020000000000],"FAULT 05 MUSIC ROOM WINDOW "
!REL:14,02,01
[0000030110000000----],006,[f70000ff1006030028020000000000],"FAULT 06 OFFICE WINDOW "
!REL:14,02,00
[0000000110000000----],014,[f70000ff1014000028020000000000],"FAULT 14 KITCHENDOOR "
!RFX:0717496,80
!RFX:0717496,00
!RFX:0610922,80
!RFX:0610922,00
[0000000110000000----],014,[f70000ff1014000028020000000000],"FAULT 14 KITCHENDOOR "
```
Each alarm zone of the panel is represented by a unique combination of message *type* and *address*.
The message *type* depends on how the zone is connected to the panel: via radio frequency (RFX), a zone expander board (EXP), a relay
board (REL), or as a keypad (KPM). For instance: !REL:14,02,01 indicates that relay board 14, channel 02 has gone into state 01. The message *type* is REL, the *address* is 14,02.
Before configuring the binding one must determine which zone generates what message. The easiest way is to observe the ascii stream while
faulting a given zone by e.g. opening a window or door.
## Binding Configuration
The binding can be configured in the file `services/alarmdecoder.cfg`.
| Property | Default | Required | Description |
|----------|---------|:--------:|-------------|
| connect | | Yes | You can configure either a TCP connect with a value in the format `tcp:<ad2pihostname.mydomain.com>:<port>` or a serial connection similar to `serial:/dev/ttyUSB0`. Warning: using an Alarm Decoder via serial port has not been debugged yet! |
| send_commands_and_compromise_security | false | No | To send commands from openHAB to the alarm panel, set this to `true`. Once this option is set to true, the alarm system can potentially be disabled from openHAB. You have been warned! |
## Item Configuration
Once the binding configuration is taken care of, create a suitable file (e.g. alarmdecoder.items) in your `items` folder.
Here is an example file that instantiates some Number and Contact items, and a String item:
```
Number StatusRaw "panel status: [%d]" { alarmdecoder="KPM:00#status" }
Number StatusReady "panel ready: [%d]" { alarmdecoder="KPM:00#status,bit=17" }
Number StatusAway "panel away: [%d]" { alarmdecoder="KPM:00#status,bit=16" }
Number StatusHome "panel home: [%d]" { alarmdecoder="KPM:00#status,bit=15" }
Number StatusBacklight "panel backlight: [%d]" { alarmdecoder="KPM:00#status,bit=14" }
Number StatusProgramming "panel programming: [%d]" { alarmdecoder="KPM:00#status,bit=13" }
Number StatusBypass "panel bypassed: [%d]" { alarmdecoder="KPM:00#status,bit=9" }
Number StatusPower "panel on AC: [%d]" { alarmdecoder="KPM:00#status,bit=8" }
Number StatusChime "panel chime: [%d]" { alarmdecoder="KPM:00#status,bit=7" }
Number StatusAlarmOccured "panel alarm occurred: [%d]" { alarmdecoder="KPM:00#status,bit=6" }
Number StatusAlarm "panel alarm sounding: [%d]" { alarmdecoder="KPM:00#status,bit=5" }
Number StatusBatteryLow "panel battery low: [%d]" { alarmdecoder="KPM:00#status,bit=4" }
Number StatusDelay "panel delay off: [%d]" { alarmdecoder="KPM:00#status,bit=3" }
Number StatusFire "panel fire: [%d]" { alarmdecoder="KPM:00#status,bit=2" }
Number StatusZoneIssue "panel zone issue: [%d]" { alarmdecoder="KPM:00#status,bit=1" }
Number StatusArmedStay "panel armed stay: [%d]" { alarmdecoder="KPM:00#status,bit=0" }
Contact ContactReady "panel ready: [%d]" { alarmdecoder="KPM:00#contact,bit=17" }
Contact ContactAway "panel away: [%d]" { alarmdecoder="KPM:00#contact,bit=16" }
Contact ContactHome "panel home: [%d]" { alarmdecoder="KPM:00#contact,bit=15" }
Contact ContactBacklight "panel backlight: [%d]" { alarmdecoder="KPM:00#contact,bit=14" }
Contact ContactProgramming "panel programming: [%d]" { alarmdecoder="KPM:00#contact,bit=13" }
Contact ContactBypass "panel bypassed: [%d]" { alarmdecoder="KPM:00#contact,bit=9" }
Contact ContactPower "panel on AC: [%d]" { alarmdecoder="KPM:00#contact,bit=8" }
Contact ContactChime "panel chime: [%d]" { alarmdecoder="KPM:00#contact,bit=7" }
Contact ContactAlarmOccured "panel alarm occurred: [%d]" { alarmdecoder="KPM:00#contact,bit=6" }
Contact ContactAlarm "panel alarm sounding: [%d]" { alarmdecoder="KPM:00#contact,bit=5" }
Contact ContactBatteryLow "panel battery low: [%d]" { alarmdecoder="KPM:00#contact,bit=4" }
Contact ContactDelay "panel delay off: [%d]" { alarmdecoder="KPM:00#contact,bit=3" }
Contact ContactFire "panel fire: [%d]" { alarmdecoder="KPM:00#contact,bit=2" }
Contact ContactZoneIssue "panel zone issue: [%d]" { alarmdecoder="KPM:00#contact,bit=1" }
Contact ContactArmedStay "panel armed stay: [%d]" { alarmdecoder="KPM:00#contact,bit=0" }
Number PanelBeeps "panel beeps: [%d]" { alarmdecoder="KPM:00#beeps" }
Number PanelZone "panel zone: [%d]" { alarmdecoder="KPM:00#zone" }
String PanelDisplay "panel display: [%s]" { alarmdecoder="KPM:00#text" }
```
Note that the status bits are accessible as either Contacts or Numbers. All but a few of them are quite useless.
Here is how to bind items to RFX, REL, and EXP messages:
```
Contact zone2 "zone 2 [MAP(contact.map):%s]" { alarmdecoder="EXP:07,08#contact" }
Contact zone1 "zone 1 [MAP(contact.map):%s]" { alarmdecoder="REL:13,01#contact" }
Contact motionContact "motion sensor contact [MAP(contact.map):%s]" { alarmdecoder="RFX:0923844#contact,bitmask=0x80" }
Contact WindowContact "window/door magnetic contact (5816) [MAP(contact.map):%s]" { alarmdecoder="RFX:0923844#contact,bitmask=0x20" }
Number motionData "motion sensor data [%d]" { alarmdecoder="RFX:0923844#data" }
Number motionLowBattery "motion sensor battery [%d]" { alarmdecoder="RFX:0923844#data,bit=1" }
Number motionNeedsSupervision "motion sensor supervision [%d]" { alarmdecoder="RFX:0923844#data,bit=2" }
```
Just like for the KPM messages, the RFX messages are exposed either as a Number or Contact item. Since the REL and EXP messages just give
binary data, they are only mapped to contact items.
Bitmask values for RFX messages are as follows:
```
0x02 - battery alert
0x04 - supervision (tamper)
0x10 - loop3
0x20 - loop2
0x40 - loop4
0x80 - loop1
```
Most wireless devices will transmit their state on loop1 (0x80). Honeywell 5816 sensors (often used on doors/windows) use loop1 (0x80) for external contacts, and loop2 (0x40) for the magnetic contact; the 5804 remote keyfob uses one zone for each button.
If you don't care much about security and want to operate your alarm keypad from within openHAB, enable `send_commands_and_compromise_security=true` as discussed above, and add these lines to your alarmdecoder.items file:
```
Number Line1 "" { alarmdecoder="SEND#1=1,2=2,3=3", autoupdate="false" }
Number Line2 "" { alarmdecoder="SEND#4=4,5=5,6=6", autoupdate="false" }
Number Line3 "" { alarmdecoder="SEND#7=7,8=8,9=9", autoupdate="false" }
Number Line4 "" { alarmdecoder="SEND#10=*,0=0,11=POUND", autoupdate="false" }
String Display "panel display: [%s]" { alarmdecoder="KPM:00#text" }
```
These items accept `DecimalType` commands from the openHAB bus, and map them to strings which are then SEND to the alarm panel. In the above example, when a number 10 arrives, a "*" is sent to the alarmdecoder, or any string that is configured. Note that the special character sequence POUND will be further translated to "#".
To show the keypad in a sitemap as are used in various user interfaces, add the following lines need to your sitemap file:
```
Switch item=Line1 label="line1" mappings=[ 1="1____(OFF)", 2="2(AWAY)", 3="3__(STAY)"]
Switch item=Line2 label="line2" mappings=[ 4="____4_____", 5="5(TEST)", 6="6(BYPASS)"]
Switch item=Line3 label="line3" mappings=[ 7="7(INSTANT)", 8="8(CODE)", 9="9_(CHIME)"]
Switch item=Line4 label="line4" mappings=[10="*__(READY)", 0="___0___", 11="____#____"]
Text item=Display
```
## Long Range Radio (LRR) Messages
Starting from Release 1.10.0, [Long Range Radio (LRR) Messages](http://www.alarmdecoder.com/wiki/index.php/LRR_Support) are also supported. LRR must be enabled in your alarm panel. For Vista series (or other Honeywell/Ademco) panels, this can be configured in field *29.
LRR format from Alarm Decoder is:
```
!LRR:<data>,<partition>,<event>
```
See [Alarm Decoder LRR Protocol](http://www.alarmdecoder.com/wiki/index.php/Protocol#LRR).
Because `<data>` could be anything, it cannot be tied to a particular item as opposed to item bindings such as Contacts mentioned above. Instead, the entire message is sent to the binding.
```
!LRR:<entiremessage>
```
### Example LRR usage
items/alarm_LRR.items (to receive the long-range radio message):
```
String sAlarmLRR "LLR Msg: [%s]" { alarmdecoder="LRR:00#text" }
String sAlarmLRR_lastUser "Last User: [%s]"
String sAlarmLRR_lastEvent "Last Event: [%s]"
DateTime sAlarmLRR_lastEventDateTime ""
String sAlarmLRR_lastPartition "Last Partition: [%s]"
```
rules/alarm_LRR.rules (to parse and route the message):
```
import java.util.Map;
import java.util.HashMap;
import com.google.common.collect.ImmutableMap
val Map<String, String> UserList = ImmutableMap.<String, String>builder()
.put("001", "Installer")
.put("002", "Master")
.put("003", "User1")
.put("004", "User2")
.build()
rule "LRR Parser"
when
Item sAlarmLRR received update
then
var String msg = sAlarmLRR.state.toString
var String[] parts = msg.split(",")
if (parts.length != 3) {
logError("rules", "sAlarmLRR rule parsing error.")
} else {
logInfo("rules", "Parsing sAlarmLRR==> {}", msg)
var String user = UserList.get(parts.get(0))
var String partition = parts.get(1)
var String event = transform("MAP", "alarm_LRR_eventmap.map", parts.get(2).toString)
sAlarmLRR_lastUser.postUpdate(user)
sAlarmLRR_lastPartition.postUpdate(partition)
sAlarmLRR_lastEvent.postUpdate(event)
sAlarmLRR_lastEventDateTimepostUpdate(new DateTimeType())
}
end
```
transform/alarm_LRR_eventmap.map:
```
ALARM_EXIT_ERROR=Zone not closed during arming
TROUBLE=Tamper or failure
BYPASS=Zone was bypassed
ACLOSS=AC power was lost
LOWBAT=Low battery indication
TEST_CALL=Testing mode
OPEN=Alarm disarmed
ARM_AWAY=Armed AWAY
ARM_STAY=Armed STAY
RFLOWBAT=RF Low battery
CANCEL=Alarm canceled second disarm
RESTORE=Alarm restored
TROUBLE_RESTORE=Trouble event cleared
BYPASS_RESTORE=Bypassed zone cleared
AC_RESTORE=AC power restored
LOWBAT_RESTORE=Low battery restored
RFLOWBAT_RESTORE=RF Low battery cleared
TEST_RESTORE=Testing Mode cleared
ALARM_PANIC=There was a panic
ALARM_FIRE=There was a fire
ALARM_ENTRY=There was an entry alarm
ALARM_AUX=Auxiliary alarm triggered
ALARM_AUDIBLE=Audible alarm
ALARM_SILENT=Silent alarm
ALARM_PERIMETER=Perimeter alarm
NULL=Unknown
```
## Quirks
1. The alarmdecoder cannot query the panel for the state of individual zones. For this reason, the binding puts contacts into the "unknown"
state, *until the panel goes into the READY state*. At that point, all contacts for which no messages have arrived are presumed to be in the
CLOSED state. In other words: to get to a clean slate after an openHAB restart, close all doors/windows such that the panel is READY.
1. The sitemap provided above may not display properly when viewing from the Classic UI. It has been confirmed to work with GreenT, and the Habdroid and iOS mobile apps.

View File

@ -1,141 +0,0 @@
---
id: allplay
label: AllPlay
title: AllPlay - Bindings
type: binding
description: "This binding integrates devices compatible with [Qualcomm AllPlay](https://www.qualcomm.com/products/allplay)."
since: 2x
logo: images/addons/allplay.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# AllPlay Binding
This binding integrates devices compatible with [Qualcomm AllPlay](https://www.qualcomm.com/products/allplay).
The binding uses native libraries for the AllJoyn framework.
Libraries for the following platforms are already included in the binding:
- Linux ARM
- Linux x86 (32 bit, AllJoyn v16.04a)
- Linux x86-64 (64 bit, AllJoyn v16.04a)
- Windows x86 (32 bit, AllJoyn v16.04a)
- Windows x86-64 (64 bit, AllJoyn v16.04a)
The Windows libraries have a dependency on the [Visual C++ Redistributable for Visual Studio 2015](https://www.microsoft.com/en-US/download/details.aspx?id=48145).
If you are using Windows, please make sure to install these components before using the AllPlay binding.
If there is need for another architecture/platform, please open a [ticket on GitHub](https://github.com/openhab/openhab/issues) so the missing native library can be added.
## Supported Things
All AllPlay compatible speakers are supported by this binding.
This includes for example the [Panasonic ALL series](http://www.panasonic.com/uk/consumer/home-entertainment/wireless-speaker-systems.html). All AllPlay speakers are registered as an audio sink in the framework.
## Discovery
The AllPlay devices are discovered through the AllJoyn discovery mechanism and are put in the Inbox upon discovery.
## Binding Configuration
The binding has the following configuration options, which can be set for "binding:allplay":
| Parameter | Name | Description | Required |
|--------------------------|----------------------------|----------------------------------------------------------------------|----------|
| rewindSkipTimeInSec | Rewind skip time (s) | Seconds to jump backwards if the rewind command is executed | yes |
| fastForwardSkipTimeInSec | Fast forward skip time (s) | Seconds to jump forward if the fastforward command is executed | yes |
| callbackUrl | Callback URL | URL to use for playing audio streams, e.g. <http://192.168.0.2:8080> | no |
## Thing Configuration
AllPlay Players are identified by their device ID (e.g. 9fbe37ca-d015-47a2-b76e-8fce7bc25687). Available configuration parameters are:
| Parameter Label | Parameter ID | Description | Required | Default |
|-----------------------|---------------------|-------------------------------------------------------------------------------------|----------|---------|
| Device ID | deviceId | The device identifier identifies one certain speaker | true | |
| Device Name | deviceName | The device name of the speaker | false | |
| Volume step size | volumeStepSize | Step size to use if the volume is changed using the increase/decrease command | true | 1 |
| Zone Member Separator | zoneMemberSeparator | Separator which is used when sending multiple zone members to channel 'zonemembers' | true | , |
## Channels
The devices support the following channels:
| Channel Type ID | Item Type | Description |
|-----------------|-----------|------------------------------------------------------------------------------------------------|
| clearzone | Switch | Remove the current speaker from the zone |
| control | Player | Control the speaker, play/pause/next/previous/ffward/rewind |
| coverart | Image | Image data of cover art of the current song |
| coverarturl | String | URL of the cover art of the current song |
| currentalbum | String | Name of the album currently playing |
| currentartist | String | Name of the artist currently playing |
| currentduration | Number | Duration in seconds of the track currently playing |
| currentgenre | String | Genre of the track currently playing |
| currenttitle | String | Title of the track currently playing |
| currenturl | String | URL of the track or radio station currently playing |
| currentuserdata | String | Custom user data (e.g. name of radio station) of the track currently playing |
| input | String | Input of the speaker, e.g. Line-In (not supported by all speakers) |
| loopmode | String | Loop mode of the speaker (ONE, ALL, NONE) |
| mute | Switch | Set or get the mute state of the master volume of the speaker (not supported by all speakers) |
| playstate | String | State of the Speaker, e.g. PLAYING, STOPPED,.. |
| shufflemode | Switch | Toggle the shuffle mode of the speaker |
| stop | Switch | Stop the playback |
| stream | String | Play the given HTTP or file stream (file:// or http://) |
| volume | Dimmer | Get and set the volume of the speaker |
| volumecontrol | Switch | Flag if the volume control is enabled (might be disabled if speaker is not master of the zone) |
| zoneid | String | Id of the Zone the speaker belongs to |
| zonemembers | String | Set the zone members by providing a comma-separated list of device names. |
| | | (This channel is currently only for setting the zone members. |
| | | It does not update automatically if the zone members are changed from another source) |
## Audio Support
All AllPlay speakers are registered as an audio sink in the framework.
Audio streams are sent to the `stream` channel.
## Full Example
demo.things:
```java
Thing allplay:speaker:mySpeaker [ deviceId="9fbe37ca-d015-47a2-b76e-8fce7bc25687"]
```
demo.items:
```java
String All2Stream {channel="allplay:speaker:9fbe37ca-d015-47a2-b76e-8fce7bc25687:stream"}
Player All2Control {channel="allplay:speaker:9fbe37ca-d015-47a2-b76e-8fce7bc25687:control"}
Dimmer All2Volume "Volume" {channel="allplay:speaker:9fbe37ca-d015-47a2-b76e-8fce7bc25687:volume"}
String All2Title "Title [%s]" {channel="allplay:speaker:9fbe37ca-d015-47a2-b76e-8fce7bc25687:currenttitle"}
String All2State "State [%s]" {channel="allplay:speaker:9fbe37ca-d015-47a2-b76e-8fce7bc25687:playstate"}
String All2Artist "Artist [%s]" {channel="allplay:speaker:9fbe37ca-d015-47a2-b76e-8fce7bc25687:currentartist"}
String All2CoverUrl "Cover Art URL [%s]" {channel="allplay:speaker:9fbe37ca-d015-47a2-b76e-8fce7bc25687:coverarturl"}
```
demo.sitemap:
```perl
sitemap demo label="Main Menu" {
Frame label="All2" {
Default item=All2Control
Slider item=All2Volume
Text item=All2Title
Text item=All2Artist
Text item=All2State
}
}
```
demo.rules:
```java
rule "Play Online Radio stream"
when
Item All2OnlineRadio changed to ON
then
All2Stream.sendCommand("http://chromaradio.com:8008/listen.pls")
```

View File

@ -1,166 +0,0 @@
---
id: amazondashbutton
label: Amazon Dash Button
title: Amazon Dash Button - Bindings
type: binding
description: "The [Amazon Dash Button](https://www.amazon.com/Dash-Buttons/b?node=10667898011) is a cheap and small Wi-Fi connected device to order products from Amazon with the simple press of a button."
since: 2x
logo: images/addons/amazondashbutton.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Amazon Dash Button Binding
The [Amazon Dash Button](https://www.amazon.com/Dash-Buttons/b?node=10667898011) is a cheap and small Wi-Fi connected device to order products from Amazon with the simple press of a button.
This Binding allows you to integrate Dash Buttons into your home automation setup.
The Binding code is inspired by [hortinstein/node-dash-button](https://github.com/hortinstein/node-dash-button).
**Warning:**
The Dash Button will try to contact the Amazon servers every time the button is pressed.
This might not be in line with your privacy preferences but can be prevented.
Please refer to the ["Preventing Communication with Amazon Servers"](#no-phonehome) section for details.
**Response Time:**
Please be aware, that due to the operation method of this binding, the response time for a button press can be rather high (up to five seconds).
You might want to keep that in mind during product selection or task assignment.
## Prerequisites
The Binding uses [Pcap4J](https://www.pcap4j.org/) in order to capture `ARP` and `BOOTP` requests send by the Amazon Dash Button.
Buttons will hence only be usable within the same network as your openHAB instance.
Start with installing libpcap (for Mac/Linux/UNIX) or WinPcap (for Windows) on your computer.
They are native libraries that power the core functionalities of Pcap4J.
**Note:**
Pcap4J needs administrator/root privileges.
Instructions for Debian/Ubuntu are given below.
### Installing libpcap on Debian/Ubuntu
Installing [libpcap](http://www.tcpdump.org/) should be as simple as:
```shell
sudo apt-get install libpcap-dev
```
You can run Pcap4J with a non-root openHAB user by granting capabilities `CAP_NET_RAW` and `CAP_NET_ADMIN` to the openHAB java environment by the following command:
```shell
sudo setcap cap_net_raw,cap_net_admin=eip $(realpath /usr/bin/java)
```
Be aware of other capabilities which were previously set by setcap.
**These capabilities will be overwritten!**
You can see which capabilities have already been set with the command:
```shell
sudo getcap $(realpath /usr/bin/java)
```
If you need mulitple capabilities (like "cap_net_bind_service" for the Network binding), you have to add them like this:
```shell
sudo setcap 'cap_net_raw,cap_net_admin=+eip cap_net_bind_service=+ep' $(realpath /usr/bin/java)
```
### Installing WinPcap on Windows
On a Windows system there are two options to go with.
1. The preferred solution is [WinPcap](https://www.winpcap.org) if your network interface is supported.
2. An alternative option is [npcap](https://github.com/nmap/npcap) with the settings "WinPcap 4.1.3 compatibility" and "Raw 802.11 Packet Capture"
### Installing libpcap on Other Operating Systems
The installation methods might differ.
A few known operating systems are:
| Operating System | Command |
|:-----------------|:----------------------------|
| CentOS | `yum install libpcap-devel` |
| Mac | `brew install libpcap` |
## Setup Dash Button
Setting up your Dash Button is as simple as following the instructions provided by [Amazon](https://www.amazon.com/Dash-Buttons/b?node=10667898011) **EXCEPT FOR THE LAST STEP**.
Follow the instructions to set up the Dash Button in their mobile app.
When you get to the step where it asks you to pick which product you want to map it to, just quit the setup process.
{: #no-phonehome}
## Preventing Communication with Amazon Servers
Every time a Dash Button is pressed a request will be sent to the Amazon servers.
If no product was configured for the Button, a notification will be presented by the Amazon app on your smartphone.
To prevent the Dash Button from contacting the Amazon Servers, block Internet access for the device.
Please refer to the documentation of your network's router for details.
If your network doesn't provide that option, you can at least deal with the notifications by either uninstalling the Amazon app or disabling notifications for it (possible on most smartphone OSs).
It has shown that blocking the Dash Button communication with the Amazon servers will provoke reconnection attempts.
This increased amount of communication causes a reduced overall battery life.
The built-in AAA battery can be easily replaced.
Preventing the communication with the Amazon servers or the Amazon app is **not** necessary to integrate the Dash Button in openHAB.
## Supported Things
There is one supported Thing, the "Amazon Dash Button".
## Discovery
Background discovery is not supported as it is not possible to distinguish
between a Dash Button and other Amazon devices like the Kindle,
a Fire TV or an Echo speaker.
You can start the discovery process for Dash Button devices manually.
While openHAB is in the scanning process, press the button on the Dash to be recognized and added to your Inbox.
**Caution:**
You have to be aware that other Amazon devices might pop up in your Inbox if they send an `ARP` request while scanning for Dash Buttons.
You can ignore these devices in your Inbox.
## Thing Configuration
### Amazon Dash Button
- `macAddress` - The MAC address of the Amazon Dash Button.
- `pcapNetworkInterfaceName` - The network interface which receives the packets of the Amazon Dash Button.
- `packetInterval` - Often a single button press is recognized multiple times.
You can specify how long any further detected button pressed should be ignored after one click was processed.
The parameter is optional and 5000ms by default.
For manual defintion of a `dashbutton` Thing the MAC address can either be taken from the discovery output or can e.g. be captured through your router/DHCP frontend or with [Wireshark](https://wireshark.org).
## Channels
- **Press:** Trigger channel for recognizing presses on the Amazon Dash Button.
A trigger channel can directly be used in a rule, check the "Full Example" section for one example.
## Full Example
Things:
```java
Thing amazondashbutton:dashbutton:fc-a6-67-0c-aa-c7 "My Dash Button" @ "Living" [ macAddress="fc:a6:67:0c:aa:c7", pcapNetworkInterfaceName="eth0", packetInterval=5000 ]
```
(Pay attention: The mac address has to be given in two different formats)
Rules:
```java
rule "My Dash Button pressed"
when
Channel "amazondashbutton:dashbutton:fc-a6-67-0c-aa-c7:press" triggered
then
logInfo("amazondashbutton", "My Dash Button has been pressed")
end
```

View File

@ -1,398 +0,0 @@
---
id: amazonechocontrol
label: Amazon Echo Control
title: Amazon Echo Control - Bindings
type: binding
description: "This binding can control Amazon Echo devices (Alexa)."
since: 2x
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Amazon Echo Control Binding
This binding can control Amazon Echo devices (Alexa).
It provides features to control and view the current state of echo devices:
- use echo device as text to speech from a rule
- volume
- pause/continue/next track/previous track
- connect/disconnect bluetooth devices
- start playing tuneIn radio
- start playing Amazon Music
- control of multi room music
- show album art image in sitemap
- speak a reminder message
- plays an alarm sound
- start traffic news
- start daily briefing
- start weather report
- start good morning report
- start automation routine
- activate multiple configurations of flash briefings
- start playing music by providing the voice command as text (Works with all music providers)
Some ideas what you can do in your home by using rules and other openHAB controlled devices:
- Automatic turn on your amplifier and connect echo with bluetooth if the echo plays music
- If the amplifier was turned of, the echo stop playing and disconnect the bluetooth
- The echo starts playing radio if the light was turned on
- The echo starts playing radio at specified time
- Remind you with a voice message, that a window is open for a long time and it is winter
- Start a routine which welcome you, if you come home
- Start a routine which switch a smart home device connected to alexa
- Start your briefing if you turn on the light first time in the morning
- Have different flash briefing in the morning and evening
- Let alexa say 'welcome' to you if you open the door
## Note
This binding uses the same API as the Web-Browser-Based Alexa site (alexa.amazon.de).
In other words, it simulates a user which is using the web page.
Unfortunately, the binding can get broken if Amazon change the web site.
The binding is tested with amazon.de, amazon.com and amazon.co.uk accounts, but should also work with all others.
## Warning
For the connection to the Amazon server, your password of the Amazon account is required, this will be stored in your openHAB thing device configuration.
So you should be sure, that nobody other has access to your configuration!
## What Else You Should Know
All the display options are updated by polling the amazon server.
The polling time can be configured, but a minimum of 10 seconds is required.
The default is 60 seconds, which means the it can take up to 60 seconds to see the correct state.
It's not know, if there is a limit implemented in the amazon server if the polling is too fast and maybe amazon will lock your account. 30 seconds seems to be safe.
## Supported Things
| Thing type id | Name |
|----------------------|---------------------------------------|
| account | Amazon Account |
| echo | Amazon Echo Device |
| echospot | Amazon Echo Spot Device |
| echoshow | Amazon Echo Show Device |
| wha | Amazon Echo Whole House Audio Control |
| flashbriefingprofile | Flash briefing profile |
## First Steps
1) Create an 'Amazon Account' thing
2) Configure your credentials in the account thing (2 factor authentication is not supported!)
3) After confirmation:
a) the 'Account Thing' goes Online -> continue with 4)
b) the 'Account Thing' stays offline:
open the url YOUR_OPENHAB/amazonechocontrol in your browser (e.g. http://openhab:8080/amazonechocontrol/), click the link for your account thing and try to login.
4) The echo device things get automatically discovered and can be accepted
## Discovery
After configuration of the account thing with the login data, the echo devices registered in the amazon account, get discovered.
If the device type is not known by the binding, the device will not be discovered.
But you can define any device listed in your alexa app with the best matching existing device (e.g. echo).
You will find the required serial number in settings of the device in the alexa app.
## Binding Configuration
The binding does not have any configuration.
The configuration of your amazon account must be done in the 'Amazon Account' device.
## Thing Configuration
The Amazon Account thing needs the following configurations:
| Configuration name | Description |
|--------------------------|---------------------------------------------------------------------------|
| amazonSite | The amazon site where the echos are registered. e.g. amazon.de |
| email | Email of your amazon account |
| password | Password of your amazon account |
| pollingIntervalInSeconds | Polling interval for the device state in seconds. Default 30, minimum 10 |
IMPORTANT: If the Account thing does not go online and reports a login error, read the instructions in "First Steps" above.
### Amazon Devices
All Amazon devices (echo, echospot, echoshow, wha) needs the following configurations:
| Configuration name | Description |
|--------------------------|----------------------------------------------------|
| serialNumber | Serial number of the amazon echo in the Alexa app |
You will find the serial number in the alexa app.
### Flash Briefing Profile
The flashbriefingprofile thing has no configuration parameters.
It will be configured at runtime by using the save channel to store the current flash briefing configuration in the thing.
## Channels
| Channel Type ID | Item Type | Access Mode | Thing Type | Description
|-----------------------|-----------|-------------|------------|------------------------------------------------------------------------------------------
| player | Player | R/W | echo, echoshow, echospot, wha | Control the music player e.g. pause/continue/next track/previous track
| volume | Dimmer | R/W | echo, echoshow, echospot | Control the volume
| shuffle | Switch | R/W | echo, echoshow, echospot, wha | Shuffle play if applicable, e.g. playing a playlist
| imageUrl | String | R | echo, echoshow, echospot, wha | Url of the album image or radio station logo
| title | String | R | echo, echoshow, echospot, wha | Title of the current media
| subtitle1 | String | R | echo, echoshow, echospot, wha | Subtitle of the current media
| subtitle2 | String | R | echo, echoshow, echospot, wha | Additional subtitle of the current media
| providerDisplayName | String | R | echo, echoshow, echospot, wha | Name of the music provider
| bluetoothMAC | String | R/W | echo, echoshow, echospot | Bluetooth device MAC. Used to connect to a specific device or disconnect if a empty string was provided
| bluetooth | Switch | R/W | echo, echoshow, echospot | Connect/Disconnect to the last used bluetooth device (works after a bluetooth connection was established after the openHAB start)
| bluetoothDeviceName | String | R | echo, echoshow, echospot | User friendly name of the connected bluetooth device
| radioStationId | String | R/W | echo, echoshow, echospot, wha | Start playing of a TuneIn radio station by specifying it's id or stops playing if a empty string was provided
| radio | Switch | R/W | echo, echoshow, echospot, wha | Start playing of the last used TuneIn radio station (works after the radio station started after the openhab start)
| amazonMusicTrackId | String | R/W | echo, echoshow, echospot, wha | Start playing of a Amazon Music track by it's id od stops playing if a empty string was provided
| amazonMusicPlayListId | String | W | echo, echoshow, echospot, wha | Write Only! Start playing of a Amazon Music playlist by specifying it's id od stops playing if a empty string was provided. Selection will only work in PaperUI
| amazonMusic | Switch | R/W | echo, echoshow, echospot, wha | Start playing of the last used Amazon Music song (works after at least one song was started after the openhab start)
| remind | String | R/W | echo, echoshow, echospot | Write Only! Speak the reminder and sends a notification to the Alexa app (Currently the reminder is played and notified two times, this seems to be a bug in the amazon software)
| startRoutine | Switch | W | echo, echoshow, echospot | Write Only! Type in what you normally say to Alexa without the preceding "Alexa,"
| musicProviderId | String | R/W | echo, echoshow, echospot | Current Music provider
| playMusicVoiceCommand | String | W | echo, echoshow, echospot | Write Only! Voice command as text. E.g. 'Yesterday from the Beatles'
| startCommand | String | W | echo, echoshow, echospot | Write Only! Used to start anything. Available options: Weather, Traffic, GoodMorning, SingASong, TellStory, FlashBriefing and FlashBriefing.<FlahshbriefingDeviceID> (Note: The options are case sensitive)
| textToSpeech | String | W | echo, echoshow, echospot | Write Only! Write some text to this channel and alexa will speak it
| save | Switch | W | flashbriefingprofile | Write Only! Stores the current configuration of flash briefings within the thing
| active | Switch | R/W | flashbriefingprofile | Active the profile
| playOnDevice | String | W | flashbriefingprofile | Specify the echo serial number or name to start the flash briefing.
## Full Example
### amazonechocontrol.things
```
Bridge amazonechocontrol:account:account1 "Amazon Account" @ "Accounts" [amazonSite="amazon.de", email="mail@example.com", password="secure", pollingIntervalInSeconds=60]
{
Thing echo echo1 "Alexa" @ "Living Room" [serialNumber="SERIAL_NUMBER"]
Thing echoshow echoshow1 "Alexa" @ "Kitchen" [serialNumber="SERIAL_NUMBER"]
Thing echospot echospot1 "Alexa" @ "Sleeping Room" [serialNumber="SERIAL_NUMBER"]
Thing wha wha1 "Ground Floor Music Group" @ "Music Groups" [serialNumber="SERIAL_NUMBER"]
Thing flashbriefingprofile flashbriefing1 "Flash Briefing Technical" @ "Flash Briefings"
Thing flashbriefingprofile flashbriefing2 "Flash Briefing Life Style" @ "Flash Briefings"
}
```
You will find the serial number in the Alexa app.
### amazonechocontrol.items:
Sample for the Thing echo1 only. But it will work in the same way for the other things, only replace the thing name in the channel link.
Take a look in the channel description above to know, which channels are supported by your thing type.
```
Group Alexa_Living_Room <player>
// Player control
Player Echo_Living_Room_Player "Player" (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:player"}
Dimmer Echo_Living_Room_Volume "Volume [%.0f %%]" <soundvolume> (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:volume"}
Switch Echo_Living_Room_Shuffle "Shuffle" (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:shuffle"}
// Player Information
String Echo_Living_Room_ImageUrl "Image URL" (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:imageUrl"}
String Echo_Living_Room_Title "Title" (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:title"}
String Echo_Living_Room_Subtitle1 "Subtitle 1" (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:subtitle1"}
String Echo_Living_Room_Subtitle2 "Subtitle 2" (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:subtitle2"}
String Echo_Living_Room_ProviderDisplayName "Provider" (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:providerDisplayName"}
// Music provider and start command
String Echo_Living_Room_MusicProviderId "Music Provider Id" (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:musicProviderId"}
String Echo_Living_Room_PlayMusicCommand "Play music voice command (Write Only)" (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:playMusicVoiceCommand"}
String Echo_Living_Room_StartCommand "Start Information" (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:startCommand"}
// TuneIn Radio
String Echo_Living_Room_RadioStationId "TuneIn Radio Station Id" (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:radioStationId"}
Switch Echo_Living_Room_Radio "TuneIn Radio" (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:radio"}
// Amazon Music
String Echo_Living_Room_AmazonMusicTrackId "Amazon Music Track Id" (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:amazonMusicTrackId"}
String Echo_Living_Room_AmazonMusicPlayListId "Amazon Music Playlist Id" (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:amazonMusicPlayListId"}
Switch Echo_Living_Room_AmazonMusic "Amazon Music" (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:amazonMusic"}
// Bluetooth
String Echo_Living_Room_BluetoothMAC "Bluetooth MAC Address" <bluetooth> (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:bluetoothMAC"}
Switch Echo_Living_Room_Bluetooth "Bluetooth" <bluetooth> (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:bluetooth"}
String Echo_Living_Room_BluetoothDeviceName "Bluetooth Device" <bluetooth> (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:bluetoothDeviceName"}
// Commands
String Echo_Living_Room_TTS "Text to Speech" (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:textToSpeech"}
String Echo_Living_Room_Remind "Remind" (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:remind"}
String Echo_Living_Room_PlayAlarmSound "Play Alarm Sound" (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:playAlarmSound"}
String Echo_Living_Room_StartRoutine "Start Routine" (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:startRoutine"}
// Flashbriefings
Switch FlashBriefing_Technical_Save "Save (Write only)" { channel="amazonechocontrol:flashbriefingprofile:account1:flashbriefing1:save"}
Switch FlashBriefing_Technical_Active "Active" { channel="amazonechocontrol:flashbriefingprofile:account1:flashbriefing1:active"}
String FlashBriefing_Technical_Play "Play (Write only)" { channel="amazonechocontrol:flashbriefingprofile:account1:flashbriefing1:playOnDevice"}
Switch FlashBriefing_LifeStyle_Save "Save (Write only)" { channel="amazonechocontrol:flashbriefingprofile:account1:flashbriefing2:save"}
Switch FlashBriefing_LifeStyle_Active "Active" { channel="amazonechocontrol:flashbriefingprofile:account1:flashbriefing2:active"}
String FlashBriefing_LifeStyle_Play "Play (Write only)" { channel="amazonechocontrol:flashbriefingprofile:account1:flashbriefing2:playOnDevice"}
```
### amazonechocontrol.sitemap:
```
sitemap amzonechocontrol label="Echo Devices"
{
Frame label="Alexa" {
Default item=Echo_Living_Room_Player
Slider item=Echo_Living_Room_Volume
Switch item=Echo_Living_Room_Shuffle
Image item=Echo_Living_Room_ImageUrl label=""
Text item=Echo_Living_Room_Title
Text item=Echo_Living_Room_Subtitle1
Text item=Echo_Living_Room_Subtitle2
Text item=Echo_Living_Room_ProviderDisplayName
// The listed providers are only samples, you could have more
Selection item=Echo_Living_Room_MusicProviderId mappings=[ 'TUNEIN'='Radio', 'SPOTIFY'='Spotify', 'AMAZON_MUSIC'='Amazon Music', 'CLOUDPLAYER'='Amazon']
Text item=Echo_Living_Room_MusicProviderId
// To start one of your flashbriefings use Flashbriefing.<YOUR FLASHBRIEFING THING ID>
Selection item=Echo_Living_Room_StartCommand mappings=[ 'Weather'='Weather', 'Traffic'='Traffic', 'GoodMorning'='Good Morning', 'SingASong'='Song', 'TellStory'='Story', 'FlashBriefing'='Flash Briefing', 'FlashBriefing.flashbriefing1'='Technical', 'FlashBriefing.flashbriefing2'='Life Style' ]
Selection item=Echo_Living_Room_RadioStationId mappings=[ ''='Off', 's1139'='Antenne Steiermark', 's8007'='Hitradio Ö3', 's16793'='Radio 10', 's8235'='FM4' ]
Text item=Echo_Living_Room_RadioStationId
Switch item=Echo_Living_Room_Radio
Text item=Echo_Living_Room_AmazonMusicTrackId
Text item=Echo_Living_Room_AmazonMusicPlayListId
Switch item=Echo_Living_Room_AmazonMusic
Text item=Echo_Living_Room_BluetoothMAC
// Change the <YOUR_DEVICE_MAC> Place holder with the MAC address shown, if alexa is connected to the device
Selection item=Echo_Living_Room_BluetoothMAC mappings=[ ''='Disconnected', '<YOUR_DEVICE_MAC>'='Bluetooth Device 1', '<YOUR_DEVICE_MAC>'='Bluetooth Device 2']
// These are only view of the possible options. Enable ShowIDsInGUI in the binding configuration and look in drop-down-box of this channel in the Paper UI Control section
Selection item=Echo_Living_Room_PlayAlarmSound mappings=[ ''='None', 'ECHO:system_alerts_soothing_01'='Adrift', 'ECHO:system_alerts_atonal_02'='Clangy']
Switch item=Echo_Living_Room_Bluetooth
Text item=Echo_Living_Room_BluetoothDeviceName
}
Frame label="Flash Briefing Technical" {
Switch item=FlashBriefing_Technical_Save
Switch item=FlashBriefing_Technical_Active
Text item=FlashBriefing_Technical_Play
}
Frame label="Flash Briefing Life Style" {
Switch item=FlashBriefing_LifeStyle_Save
Switch item=FlashBriefing_LifeStyle_Active
Text item=FlashBriefing_LifeStyle_Play
}
}
```
## How To Get IDs
1) Open the url YOUR_OPENHAB/amazonechocontrol in your browser (e.g. http://openhab:8080/amazonechocontrol/)
2) Click on the name of the account thing
3) Click on the name of the echo thing
4) Scroll to the channel and copy the required ID
## Tutorials
### Let alexa speak a text from a rule:
1) Create a rule with a trigger of your choice
```php
rule "Say welcome if the door opens"
when
Item Door_Contact changed to OPEN
then
Echo_Living_Room_TTS.sendCommand('Hello World')
end
```
## Playing an alarm sound for 15 seconds with an openHAB rule if an door contact was opened:
1) Do get the ID of your sound, follow the steps in "How To Get IDs"
2) Write down the text in the square brackets. e.g. ECHO:system_alerts_repetitive01 for the nightstand sound
3) Create a rule for start playing the sound:
```php
var Timer stopAlarmTimer = null
rule "Turn on alarm sound for 15 seconds if door opens"
when
Item Door_Contact changed to OPEN
then
Echo_Living_Room_PlayAlarmSound.sendCommand('ECHO:system_alerts_repetitive01')
if (stopAlarmTimer === null)
{
stopAlarmTimer = createTimer(now.plusSeconds(15)) [|
stopAlarmTimer.cancel()
stopAlarmTimer = null
Echo_Living_Room_PlayAlarmSound.sendCommand('')
]
}
end
```
Note 1: Do not use a to short time for playing the sound, because alexa needs some time to start playing the sound.
It's not recommended to use a time below 10 seconds.
Note 2: The rule have no effect for your default alarm sound used in the alexa app.
### Play a spotify playlist if a switch was changed to on:
1) Do get the ID of your sound, follow the steps in "How To Get IDs"
2) Write down the text in the square brackets. e.g. SPOTIFY for the spotify music provider
3) Create a rule for start playing a song or playlist:
```php
rule "Play a playlist on spotify if a switch was changed"
when
Item Spotify_Playlist_Switch changed to ON
then
Echo_Living_Room_PlayMusicProvider.sendCommand('SPOTIFY')
Echo_Living_Room_PlayMusicCommand.sendCommand('Playlist Party')
end
```
Note: It's recommended to test the command send to play music command first with the voice and the real alexa device. E.g. say 'Alexa, Playlist Party'
### Start playing weather/traffic/etc:
1) Pick up one of the available commands: Weather, Traffic, GoodMorning, SingASong, TellStory, FlashBriefing
2) Create a rule for start playing the information where you provide the command as string:
```php
rule "Start wheater info"
when
Item Spotify_Start_Wheater_Switch changed to ON
then
Echo_Living_Room_StartCommand.sendCommand('Weather')
end
```
### Start playing a custom flashbriefing on a device:
1) Do get the ID of your sound, follow the steps in "How To Get IDs"
2) Write down the text in the square brackets. e.g. flashbriefing.flashbriefing1
2) Create a rule for start playing the information where you provide the command as string:
```php
rule "Start wheater info"
when
Item Spotify_Start_Wheater_Switch changed to ON
then
Echo_Living_Room_StartCommand.sendCommand('FlashBriefing.flashbriefing1')
end
```
## Credits
The idea for writing this binding came from this blog: http://blog.loetzimmer.de/2017/10/amazon-alexa-hort-auf-die-shell-echo.html (German).
Thank you Alex!
## Trademark Disclaimer
TuneIn, Amazon Echo, Amazon Echo Spot, Amazon Echo Show, Amazon Music, Amazon Prime, Alexa and all other products and Amazon, TuneIn and other companies are trademarks™ or registered® trademarks of their respective holders.
Use of them does not imply any affiliation with or endorsement by them.

View File

@ -1,194 +0,0 @@
---
id: anel
label: Anel NET-PwrCtrl
title: Anel NET-PwrCtrl - Bindings
type: binding
description: "Monitor and control Anel NET-PwrCtrl devices."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.anel/README.md
since: 1x
logo: images/addons/anel.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Anel NET-PwrCtrl Binding
Monitor and control Anel NET-PwrCtrl devices.
| [Anel NET-PwrCtrl HUT](http://anel-elektronik.de/SITE/produkte/hut/hut.htm) | [Anel NET-PwrCtrl IO](http://anel-elektronik.de/SITE/produkte/io/io.htm) | [Anel NET-PwrCtrl HOME](http://anel-elektronik.de/SITE/produkte/home/home.htm) |
| --- | --- | --- |
| [![Anel NET-PwrCtrl HUT](http://anel-elektronik.de/SITE/image/leisten/HUT-120.gif)](http://anel-elektronik.de/SITE/produkte/hut/hut.htm) | [![Anel NET-PwrCtrl PRO](http://anel-elektronik.de/SITE/image/leisten/PRO-120.gif)](http://anel-elektronik.de/SITE/produkte/io/io.htm) | [![Anel NET-PwrCtrl HOME](http://anel-elektronik.de/SITE/image/leisten/HOME-DE-120.gif)](http://anel-elektronik.de/SITE/produkte/home/home.htm)
NET-PwrCtrl devices are power sockets / relays that can be configured via browser but they can also be controlled over the network, e.g. with an Android or iPhone app - and also with openHAB via this binding.
The NET-PwrCtrl HUT and NET-PwrCtrl IO also have 8 I/O pins which can either be used to directly switch the sockets, or they can be used as general input switches in openHAB.
Here is a video demonstrating a switch and a dimmer (voice is German), explanation of the setup is given in the diagram below:
[![Anel example](http://img.youtube.com/vi/31ycP53jZVs/0.jpg)](http://www.youtube.com/watch?v=31ycP53jZVs)
[Anel demo setup](http://2.bp.blogspot.com/-XbiK9Fe1Ek0/VFPc2lwMKeI/AAAAAAAABDM/wEdTETUfo0w/s1600/Anel-demo-setup.png)
**Note that the binding is still untested for other devices than the _NET-PwrCtrl HUT_, because I do not own any of the others. I suppose the binding works well with the _NET-PwrCtrl IO_ because it has the same features, but it may not yet work for the others!**
## Binding Configuration
The binding can be configured in the file `services/anel.cfg`. In the table below, `<name>` must be an identifier that is also used for the item bindings.
| Key | Default | Required | Description |
|-----|---------|:--------:|-------------|
| `<name>.host` | net-control | recommended | IP or network address |
| `<name>.udpReceivePort` | 77 | No | UDP receive port |
| `<name>.udpSendPort` | 75 | No | UDP send port |
| `<name>.user` | user7 | No | User name |
| `<name>.password` | anel | No | Password |
| `refresh` | 60000 | No | Global refresh interval in milliseconds |
| `cachePeriod` | 0 | No | Cache the state for `cachePeriod` minutes so only changes are posted (optional, defaults to 0 = disabled). Example: if period is 60, once per hour all states are posted to the event bus; changes are always and immediately posted to the event bus. |
### Notes
* At least one option must be set for an identifier for the binding to work.
* The most obvious and important option is `host`, it is in fact mandatory if multiple devices are used.
* The host name, ports, and credentials are device-specific settings that must be configured via the device's browser interface.
* Port numbers above 1024 are recommended because ports below 1024 are typically reserved and their access restricted on some devices/networks.
* For multiple devices, different ports must be used.
## Item Configuration
There are different types of item bindings, all of them are qualified with the device's identifier used in the binding configuration:
The device's name is a string type, the device's temperature is a number:
```
String anelName "Anel1 network name [%s]" { anel="anel1:NAME" }
Number anelTemperature "Anel1 temperature [%s]" { anel="anel1:TEMPERATURE" }
```
The actual relay states are also switchable if they are not locked.
Note that the locked states and the relay's names are read-only.
```
Switch f1 { anel="anel1:F1", autoupdate="false" }
String f1name { anel="anel1:F1NAME" }
Switch f1locked { anel="anel1:F1LOCKED" }
```
The I/O states are only switchable if they are configured as 'input' (point of view of the anel device), otherwise they are read-only.
Again, the names are also read-only.
```
Switch io1 { anel="anel1:IO1" }
String io1name = { anel="anel1:IO1NAME" }
Switch io1isinput { anel="anel1:IO8ISINPUT" }
```
Note: **all read-only properties must be configured via the device's browser interface.**
General format and full list of binding items:
```
anel="<identifier>:<item>"
```
| item | item type | purpose | changeable |
| --- | --- | --- | --- |
| `NAME` | String | device's name | no
| `TEMPERATURE` | Number | device's temperature | no
| `F1NAME` | String | name of relay 1 | no
| `F2NAME` | String | name of relay 2 | no
| `F3NAME` | String | name of relay 3 | no
| `F4NAME` | String | name of relay 4 | no
| `F5NAME` | String | name of relay 5 | no
| `F6NAME` | String | name of relay 6 | no
| `F7NAME` | String | name of relay 7 | no
| `F8NAME` | String | name of relay 8 | no
| `F1LOCKED` | Switch | whether or not relay 1 is locked | no
| `F2LOCKED` | Switch | whether or not relay 2 is locked | no
| `F3LOCKED` | Switch | whether or not relay 3 is locked | no
| `F4LOCKED` | Switch | whether or not relay 4 is locked | no
| `F5LOCKED` | Switch | whether or not relay 5 is locked | no
| `F6LOCKED` | Switch | whether or not relay 6 is locked | no
| `F7LOCKED` | Switch | whether or not relay 7 is locked | no
| `F8LOCKED` | Switch | whether or not relay 8 is locked | no
| `F1` | Switch | state of relay 1 | only if `F1LOCKED = OFF`
| `F2` | Switch | state of relay 2 | only if `F2LOCKED = OFF`
| `F3` | Switch | state of relay 3 | only if `F3LOCKED = OFF`
| `F4` | Switch | state of relay 4 | only if `F4LOCKED = OFF`
| `F5` | Switch | state of relay 5 | only if `F5LOCKED = OFF`
| `F6` | Switch | state of relay 6 | only if `F6LOCKED = OFF`
| `F7` | Switch | state of relay 7 | only if `F7LOCKED = OFF`
| `F8` | Switch | state of relay 8 | only if `F8LOCKED = OFF`
| `IO1NAME` | String | name of I/O 1 | no
| `IO2NAME` | String | name of I/O 2 | no
| `IO3NAME` | String | name of I/O 3 | no
| `IO4NAME` | String | name of I/O 4 | no
| `IO5NAME` | String | name of I/O 5 | no
| `IO6NAME` | String | name of I/O 6 | no
| `IO7NAME` | String | name of I/O 7 | no
| `IO8NAME` | String | name of I/O 8 | no
| `IO1ISINPUT` | Switch | whether I/O 1 is input | no
| `IO2ISINPUT` | Switch | whether I/O 2 is input | no
| `IO3ISINPUT` | Switch | whether I/O 3 is input | no
| `IO4ISINPUT` | Switch | whether I/O 4 is input | no
| `IO5ISINPUT` | Switch | whether I/O 5 is input | no
| `IO6ISINPUT` | Switch | whether I/O 6 is input | no
| `IO7ISINPUT` | Switch | whether I/O 7 is input | no
| `IO8ISINPUT` | Switch | whether I/O 8 is input | no
| `IO1` | Switch | state of I/O 1 | only if `IO1ISINPUT = ON`
| `IO2` | Switch | state of I/O 2 | only if `IO2ISINPUT = ON`
| `IO3` | Switch | state of I/O 3 | only if `IO3ISINPUT = ON`
| `IO4` | Switch | state of I/O 4 | only if `IO4ISINPUT = ON`
| `IO5` | Switch | state of I/O 5 | only if `IO5ISINPUT = ON`
| `IO6` | Switch | state of I/O 6 | only if `IO6ISINPUT = ON`
| `IO7` | Switch | state of I/O 7 | only if `IO7ISINPUT = ON`
| `IO8` | Switch | state of I/O 8 | only if `IO8ISINPUT = ON`
| `SENSOR_TEMPERATURE` | Number | sensor temperature (device firmware >= 6.1) | no
| `SENSOR_HUMIDITY` | Number | sensor humidity (device firmware >= 6.1) | no
| `SENSOR_BRIGHTNESS` | Number | sensor brightness (device firmware >= 6.1) | no
## Example Rules
Although the device's configuration can be used to directly switch a relay with an input channel, the very same can be done with this rule:
```
rule "regular switch on Anel1 IO1 input for relay 1"
when Item io1 changed then
sendCommand(f1, io1.state)
end
```
An input channel can also be used as a push button (also demonstrated in the [video](http://www.youtube.com/watch?v=31ycP53jZVs)):
```
rule "push button switch on Anel1 IO2 input for relay 2"
when Item io2 changed to ON then
sendCommand(f2, if (f2.state != ON) ON else OFF)
end
```
In combination with the [MiLight Binding](https://github.com/openhab/openhab/wiki/Milight-Binding), this rule uses I/O 3 as dimmer for MiLight bulb `milight_zone1` (also demonstrated in the [video](http://www.youtube.com/watch?v=31ycP53jZVs)).
As long as I/O 3 is pressed, the bulb dims up until its brightness reaches 100%.
```
var org.openhab.model.script.actions.Timer timer2
rule "switch dimmer on Anel1 IO3"
when Item io3 changed to OFF then
sendCommand(milight_zone1, 10)
timer2 = createTimer(now.plusMillis(333)) [|
val int newValue = (milight_zone1.state as DecimalType).intValue + 5
if (newValue > 100) {
timer2 = null
} else if (timer2 != null) {
sendCommand(milight_zone1, newValue)
if (io3.state == OFF)
timer2.reschedule(now.plusMillis(333))
}
]
end
```

View File

@ -1,177 +0,0 @@
---
id: asterisk
label: Asterisk
title: Asterisk - Bindings
type: binding
description: "The Asterisk binding is used to enable communication between openhab and the free and open source PBX solution [Asterisk](http://www.asterisk.org). This binding detects incoming phone calls or if someone makes a phone call. In combination with other bindings (e.g., the Samsung TV Binding) you can display caller IDs on your TV."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.asterisk/README.md
since: 1x
logo: images/addons/asterisk.png
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Asterisk Binding
The Asterisk binding is used to enable communication between openhab and the free and open source PBX solution [Asterisk](http://www.asterisk.org). This binding detects incoming phone calls or if someone makes a phone call. In combination with other bindings (e.g., the Samsung TV Binding) you can display caller IDs on your TV.
## Binding Configuration
The binding can be configured in the file `services/asterisk.cfg`.
| Key | Default | Required | Description |
|-----|---------|:--------:|-------------|
| host | | Yes | hostname of the AMI |
| username | | | username for login to AMI |
| password | | | password for login to AMI |
## Item Configuration
In order to bind an item to the Asterisk PBX you need to provide configuration settings for each item to which you want to bind in your `.items` file (in the `items` folder).
The format of the binding configuration is simple and looks like this:
```
asterisk=<eventType>
```
where `<eventType>` is of the value `active` for currently active calls. Currently there are no other valid values.
Asterisk binding configurations are valid for `Call`, `Switch` and `String` items.
* `Call` items receive the `to` and `from` phone numbers at the start of the event, and empty numbers at the end of the event.
* `Switch` items with this binding will receive an `ON` update event at the start and an `OFF` update event at the end.
* `String` items will receive the external phone number in the form of a string value as a status update. At the end of an event, an empty string is sent as a status update.
As a result, your lines in your items file might look like follows:
```
Switch Incoming_Call "Ringing" { asterisk=active }
Call Active_Call "Connected [to %1$s from %2$s]" { asterisk=active }
Call Active_Call "Connected to [%s]" { asterisk=active }
```
## Examples
### Active call examples
* Switch on a light when there is at least an active call (when there are no active calls the light will turn off)
```
Switch light (lights) { asterisk="active" }
```
or
```
Switch light (lights) { asterisk="active:*:*" }
```
* Switch on a light when '215' calls '101' and turn it off when the call ends
```
Switch light (lights) { asterisk="active:215:101" }
```
* Switch on a light on every call to '101' and turn it off when the call ends
```
Switch light (lights) { asterisk="active:*:101" }
```
* Switch on a light on every call originated from '215' and turn it off when the call ends
```
Switch light (lights) { asterisk="active:215:*" }
```
### DTMF Digit examples
* Switch on a light when '1' digit is sent from '215' to '101' during an active call
```
Switch light (lights) { asterisk="digit:215:101:1" }
```
* Switch on a light whenever a '1' digit is sent to '101' during an active call
```
Switch light (lights) { asterisk="digit:*:101:1" }
```
* Switch on a light whenever a '1' digit is sent from '215' during an active call
```
Switch light (lights) { asterisk="digit:215:*:1" }
```
* Switch on a light whenever a '1' digit is sent during an active call
```
Switch light (lights) { asterisk="digit:*:*:1" }
```
### Asterisk
In some cases it is very useful to make call routing decisions in Asterisk based on openHAB Items states. As an example, if nobody is home (away mode is on) route my doorphone calls to mobile, in other case route them to local phones inside the house. To do that AGI (Asterisk application gateway interface) can be used to obtain Item state value into an Asterisk variable and then a routing decision can be performed based on this variable value. Here is a small python script which, when called from Asterisk AGI makes an http request to openHAB REST API, gets specific item state and puts it into specified Asterisk variable:
```python
#!/usr/bin/python
import sys,os,datetime
import httplib
import base64
def send(data):
sys.stdout.write("%s \n"%data)
sys.stdout.flush()
AGIENV={}
env = ""
while(env != "\n"):
env = sys.stdin.readline()
envdata = env.split(":")
if len(envdata)==2:
AGIENV[envdata[0].strip()]=envdata[1].strip()
username = AGIENV['agi_arg_1']
password = AGIENV['agi_arg_2']
item = AGIENV['agi_arg_3']
varname = AGIENV['agi_arg_4']
auth = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')
headers = {"Authorization" : "Basic %s" % auth}
conn = httplib.HTTPConnection("localhost", 8080)
conn.request('GET', "/rest/items/%s/state"%item, "", headers)
response = conn.getresponse()
item_state = response.read()
send("SET VARIABLE %s %s"%(varname, item_state))
sys.stdin.readline()
```
In Asterisk dialplan (extensions.conf) this AGI script is used in the following way:
```
exten => 1000,1,Answer()
exten => 1000,n,AGI(openhabitem.agi, "asterisk", "password", "Presence", "atHome")
exten => 1000,n,GotoIf($["${atHome}" == "ON"]?athome:away)
exten => 1000,n(athome),Playback(hello-world) ; do whatever you need if Presence is ON
exten => 1000,n,Hangup()
exten => 1000,n(away),Playback(beep) ; do whatever you need if Presence is OFF
exten => 1000,n,Hangup()
```
In AGI, call arguments are:
* the script name itself
* openHAB username
* openHAB password
* openHAB Item name
* Asterisk variable to put state to

View File

@ -1,210 +0,0 @@
---
id: astro
label: Astro
title: Astro - Bindings
type: binding
description: "The Astro binding is used for calculating"
since: 2x
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Astro Binding
The Astro binding is used for calculating
* many DateTime and positional values for sun and moon.
* Radiation levels (direct, diffuse and total) of the sun during the day
## Supported Things
This binding supports two Things: Sun and Moon
## Discovery
If a system location is set, "Local Sun" and a "Local Moon" will be automatically discovered for this location.
If the system location is changed, the background discovery updates the configuration of "Local Sun" and "Local Moon" automatically.
## Binding Configuration
No binding configuration required.
## Thing Configuration
All Things require the parameter `geolocation` (as `<latitude>,<longitude>,[<altitude in m>]`) for which the calculation is done.
The altitude segment is optional and sharpens results provided by the Radiation group.
Optionally, a refresh `interval` (in seconds) can be defined to also calculate positional data like azimuth and elevation.
## Channels
* **thing** `sun`
* **group** `rise, set, noon, night, morningNight, astroDawn, nauticDawn, civilDawn, astroDusk, nauticDusk, civilDusk, eveningNight, daylight`
* **channel**
* `start, end` (DateTime)
* `duration` (Number)
* **group** `position`
* **channel**
* `azimuth, elevation` (Number)
* **group** `radiation`
* **channel**
* `direct, diffuse, total` (Number)
* **group** `zodiac`
* **channel**
* `start, end` (DateTime)
* `sign` (String), values: `ARIES, TAURUS, GEMINI, CANCER, LEO, VIRGO, LIBRA, SCORPIO, SAGITTARIUS, CAPRICORN, AQUARIUS, PISCES`
* **group** `season`
* **channel**:
* `spring, summer, autumn, winter` (DateTime)
* `name` (String), values `SPRING, SUMMER, AUTUMN, WINTER`
* **group** `eclipse`
* **channel**:
* `total, partial, ring` (DateTime)
* **group** `phase`
* **channel**
* `name` (String), values: `SUN_RISE, ASTRO_DAWN, NAUTIC_DAWN, CIVIL_DAWN, CIVIL_DUSK, NAUTIC_DUSK, ASTRO_DUSK, SUN_SET, DAYLIGHT, NIGHT`
* **thing** `moon`
* **group** `rise, set`
* **channel**
* `start, end` (DateTime)
* `duration` (Number), **Note:** start and end is always equal, duration always 0.
* **group** `phase`
* **channel**:
* `firstQuarter, thirdQuarter, full, new` (DateTime)
* `age, agePercent, ageDegree, illumination` (Number)
* `name` (String), values: `NEW, WAXING_CRESCENT, FIRST_QUARTER, WAXING_GIBBOUS, FULL, WANING_GIBBOUS, THIRD_QUARTER, WANING_CRESCENT`
* **group** `eclipse`
* **channel**:
* `total, partial` (DateTime)
* **group** `distance`
* **channel**:
* `date` (DateTime)
* `kilometer, miles` (Number)
* **group** `perigee`
* **channel**:
* `date` (DateTime),
* `kilometer, miles` (Number)
* **group** `apogee`
* **channel**:
* `date` (DateTime)
* `kilometer, miles` (Number)
* **group** `zodiac`
* **channel**
* `sign` (String), values: `ARIES, TAURUS, GEMINI, CANCER, LEO, VIRGO, LIBRA, SCORPIO, SAGITTARIUS, CAPRICORN, AQUARIUS, PISCES`
* **group** `position`
* **channel**
* `azimuth, elevation` (Number)
### Trigger Channels
* **thing** `sun`
* **group** `rise, set, noon, night, morningNight, astroDawn, nauticDawn, civilDawn, astroDusk, nauticDusk, civilDusk, eveningNight, daylight`
* **event** `START, END`
* **group** `eclipse`
* **event**: `TOTAL, PARTIAL, RING`
* **thing** `moon`
* **group** `rise`
* **event** `START`
* **group** `set`
* **event** `END`
* **group** `phase`
* **event**: `FIRST_QUARTER, THIRD_QUARTER, FULL, NEW`
* **group** `eclipse`
* **event**: `TOTAL, PARTIAL`
* **group** `perigee`
* **event**: `PERIGEE`
* **group** `apogee`
* **event**: `APOGEE`
### Channel config
**Offsets:** For each event group you can optionally configure an `offset` in minutes. The `offset` must be configured in the channel properties for the corresponding thing.
The minimum allowed offset is -1440 and the maximum allowed offset is 1440.
**Earliest/Latest:** For each trigger channel and `start`, `end` datetime value, you can optionally configure the `earliest` and `latest` time of the day.
e.g `sun#rise earliest=18:00, latest=20:00`
sunrise is 17:40, but `earliest` is set to 18:00 so the event/datetime value is moved to 18:00.
OR
sunrise is 22:10 but `latest` is set to 20:00 so the event/datetime value is moved 20:00.
## Full Example
Things:
```
astro:sun:home [ geolocation="52.5200066,13.4049540,100", interval=60 ]
astro:moon:home [ geolocation="52.5200066,13.4049540", interval=60 ]
```
or optionally with an event offset
```
astro:sun:home [ geolocation="52.5200066,13.4049540,100", interval=60 ] {
Channels:
Type rangeEvent : rise#event [
offset=-30
]
}
astro:moon:home [ geolocation="52.5200066,13.4049540", interval=60 ]
```
or a datetime offset
```
astro:sun:home [ geolocation="52.5200066,13.4049540,100", interval=60 ] {
Channels:
Type start : rise#start [
offset=5
]
Type end : rise#end [
offset=5
]
}
```
or a offset and latest
```
astro:sun:home [ geolocation="52.5200066,13.4049540,100", interval=60 ] {
Channels:
Type rangeEvent : rise#event [
offset=-10,
latest="08:00"
]
}
```
Items:
```
DateTime Sunrise_Time "Sunrise [%1$tH:%1$tM]" { channel="astro:sun:home:rise#start" }
DateTime Sunset_Time "Sunset [%1$tH:%1$tM]" { channel="astro:sun:home:set#start" }
Number Azimuth "Azimuth" { channel="astro:sun:home:position#azimuth" }
Number Elevation "Elevation" { channel="astro:sun:home:position#elevation" }
String MoonPhase "MoonPhase" { channel="astro:moon:home:phase#name" }
Number Total_Radiation "Radiation [%.2f W/m\u00B2]" { channel="astro:sun:home:radiation#total" }
Number Diffuse_Radiation "Diffuse Radiation [%.2f W/m\u00B2]" { channel="astro:sun:home:radiation#diffuse" }
```
Events:
```
rule "example trigger rule"
when
Channel 'astro:sun:home:rise#event' triggered START
then
...
end
```
## Tips
Do not worry if for example the "astro dawn" is undefined at your location. The reason might be that you live in a northern country and it is summer, such that the sun is not 18 degrees below the horizon in the morning. For details see [this Wikipedia article](https://en.wikipedia.org/wiki/Dawn). The "civil dawn" event might often be the better choice.

View File

@ -1,334 +0,0 @@
---
id: astro
label: Astro
title: Astro - Bindings
type: binding
description: "The Astro binding is used for calculating many `DateTime` and positional values for sun and moon and for scheduling of events."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.astro/README.md
since: 1x
install: legacy
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
## Astro Binding
The Astro binding is used for calculating many `DateTime` and positional values for sun and moon and for scheduling of events.
There is also a binding specifically for openHAB 2 [here](http://docs.openhab.org/addons/bindings/astro/readme.html).
### Binding Configuration
The binding can be configured in the file `services/astro.cfg`.
| Key | Default | Required | Description |
|-----|---------|:--------:|-------------|
| latitude | | Yes | Your latitude in decimal degrees format |
| longitude | | Yes | Your longitude in decimal degrees format |
| interval | | No | Refresh interval for azimuth and elevation calculation in seconds, default is disabled |
## Available Items
**Important:** type and property are case sensitive! So enter the values exactly as shown.
* **planet** `sun`
* **type** `rise, set, noon, night, morningNight, astroDawn, nauticDawn, civilDawn, astroDusk, nauticDusk, civilDusk, eveningNight, daylight` (See Schedules below for the order of these events throughout the day)
* **property** `start, end` (DateTime), `duration` (Number)
* **type** `position`
* **property** `azimuth, elevation` (Number)
* **type** `zodiac`
* **property** `start, end` (DateTime), `sign` (String)
* **type** `season`
* **property**: `spring, summer, autumn, winter` (DateTime), `name` (String)
* **type** `eclipse`
* **property**: `total, partial, ring` (DateTime)
* **planet** `moon`
* **type** `rise, set`
* **property** `start, end` (DateTime), `duration` (Number), **Note:** start and end is always equal, duration always 0.
* **type** `phase`
* **property**: `firstQuarter, thirdQuarter, full, new` (DateTime), `age, illumination` (Number), `name` (String)
* **type** `eclipse`
* **property**: `total, partial` (DateTime)
* **type** `distance`
* **property**: `date` (DateTime), `kilometer, miles` (Number)
* **type** `perigee`
* **property**: `date` (DateTime), `kilometer, miles` (Number)
* **type** `apogee`
* **property**: `date` (DateTime), `kilometer, miles` (Number)
* **type** `zodiac`
* **property** `sign` (String)
* **type** `position`
* **property** `azimuth, elevation` (Number)
**offset** (optional, taken into account for every DateTime property)
offset in minutes to the calculated time
You can bind a property to different item types, which has a special meaning in the binding. If you bind a DateTime property (start, end, ...) to a DateTime Item, the DateTime is simply displayed. If you bind it to a Switch, an event is scheduled and the state of the Switch is updated to `ON`, immediately followed by a `OFF` at the calculated time. You can even specify an offset for the event and bind multiple items to the same property.
The position items (azimuth, elevation) and moon items (phase, distance, perigee, apogee, zodiac) are updated at the configured refresh interval in openhab.cfg.
## Sun examples
```
// shows the sunrise
DateTime Sunrise_Time "Sunrise [%1$tH:%1$tM]" {astro="planet=sun, type=rise, property=start"}
// schedules a event which starts at sunrise, updating the Switch with ON, followed by a OFF
Switch Sunrise_Event {astro="planet=sun, type=rise, property=start"}
// schedules a event which starts 10 minutes AFTER sunrise
Switch Sunrise_Event {astro="planet=sun, type=rise, property=start, offset=10"}
// schedules a event which starts 10 minutes BEFORE sunrise
Switch Sunrise_Event {astro="planet=sun, type=rise, property=start, offset=-10"}
// shows the sunset
DateTime Sunset_Time "Sunset [%1$tH:%1$tM]" {astro="planet=sun, type=set, property=end"}
// schedules a event which starts 30 minutes BEFORE sunset:
Switch Sunset_Event {astro="planet=sun, type=set, property=end, offset=-30"}
// displays the start, end and duration of the astronomical dawn
DateTime Astronomical_Dawn_Start "Astronomical Dawn Start [%1$tH:%1$tM]" {astro="planet=sun, type=astroDawn, property=start"}
DateTime Astronomical_Dawn_End "Astronomical Dawn End [%1$tH:%1$tM]" {astro="planet=sun, type=astroDawn, property=end"}
// duration in minutes
Number Astronomical_Dawn_Duration "Astronomical Dawn Duration [%f]" {astro="planet=sun, type=astroDawn, property=duration"}
// duration formatted to a string, e.g. 02:32 (2 hours, 32 minutes)
String Astronomical_Dawn_Duration_Str "Astronomical Dawn Duration [%s]" {astro="planet=sun, type=astroDawn, property=duration"}
// azimuth and elevation
Number Azimuth "Azimuth [%.2f]" {astro="planet=sun, type=position, property=azimuth"}
Number Elevation "Elevation [%.2f]" {astro="planet=sun, type=position, property=elevation"}
// zodiac
DateTime Zodiac_Start "Zodiac Start [%1$td.%1$tm.%1$tY]" {astro="planet=sun, type=zodiac, property=start"}
DateTime Zodiac_End "Zodiac End [%1$td.%1$tm.%1$tY]" {astro="planet=sun, type=zodiac, property=end"}
String Zodiac_Sign "Current zodiac [%s]" {astro="planet=sun, type=zodiac, property=sign"}
// season
String Season_Name "Season [%s]" {astro="planet=sun, type=season, property=name"}
DateTime Season_Spring "Spring [%1$td.%1$tm.%1$tY %1$tH:%1$tM]" {astro="planet=sun, type=season, property=spring"}
DateTime Season_Summer "Summer [%1$td.%1$tm.%1$tY %1$tH:%1$tM]" {astro="planet=sun, type=season, property=summer"}
DateTime Season_Autumn "Autumn [%1$td.%1$tm.%1$tY %1$tH:%1$tM]" {astro="planet=sun, type=season, property=autumn"}
DateTime Season_Winter "Winter [%1$td.%1$tm.%1$tY %1$tH:%1$tM]" {astro="planet=sun, type=season, property=winter"}
// eclipse
DateTime Sun_Eclipse_Total "Sun total eclipse [%1$td.%1$tm.%1$tY %1$tH:%1$tM]" {astro="planet=sun, type=eclipse, property=total"}
DateTime Sun_Eclipse_Partial "Sun partial eclipse [%1$td.%1$tm.%1$tY %1$tH:%1$tM]" {astro="planet=sun, type=eclipse, property=partial"}
DateTime Sun_Eclipse_Ring "Sun ring eclipse [%1$td.%1$tm.%1$tY %1$tH:%1$tM]" {astro="planet=sun, type=eclipse, property=ring"}
```
## Moon examples
```
// rise, set
DateTime Moonrise_Time "Moonrise [%1$td.%1$tm.%1$tY %1$tH:%1$tM]" {astro="planet=moon, type=rise, property=start"}
DateTime Moonset_Time "Moonset [%1$td.%1$tm.%1$tY %1$tH:%1$tM]" {astro="planet=moon, type=set, property=end"}
// phase
DateTime Moon_First_Quarter "First Quarter [%1$td.%1$tm.%1$tY %1$tH:%1$tM]" {astro="planet=moon, type=phase, property=firstQuarter"}
DateTime Moon_Third_Quarter "Third Quarter [%1$td.%1$tm.%1$tY %1$tH:%1$tM]" {astro="planet=moon, type=phase, property=thirdQuarter"}
DateTime Moon_Full "Full moon [%1$td.%1$tm.%1$tY %1$tH:%1$tM]" {astro="planet=moon, type=phase, property=full"}
DateTime Moon_New "New moon [%1$td.%1$tm.%1$tY %1$tH:%1$tM]" {astro="planet=moon, type=phase, property=new"}
Number Moon_Age "Moon Age [%.0f days]" {astro="planet=moon, type=phase, property=age"}
Number Moon_Illumination "Moon Illumination [%.1f %%]" {astro="planet=moon, type=phase, property=illumination"}
String Moon_Phase_Name "Moonphase [%s]" {astro="planet=moon, type=phase, property=name"}
// distance
Number Moon_Distance_K "Moon distance [%.2f km]" {astro="planet=moon, type=distance, property=kilometer"}
Number Moon_Distance_M "Moon distance [%.2f miles]" {astro="planet=moon, type=distance, property=miles"}
DateTime Moon_Distance_Time "Moon distance from [%1$td.%1$tm.%1$tY %1$tH:%1$tM]" {astro="planet=moon, type=distance, property=date"}
// eclipse
DateTime Moon_Eclipse_Total "Moon total eclipse [%1$td.%1$tm.%1$tY %1$tH:%1$tM]" {astro="planet=moon, type=eclipse, property=total"}
DateTime Moon_Eclipse_Partial "Moon partial eclipse [%1$td.%1$tm.%1$tY %1$tH:%1$tM]" {astro="planet=moon, type=eclipse, property=partial"}
// perigee
Number Moon_Perigee_K "Moon perigee [%.2f km]" {astro="planet=moon, type=perigee, property=kilometer"}
Number Moon_Perigee_M "Moon perigee [%.2f miles]" {astro="planet=moon, type=perigee, property=miles"}
DateTime Moon_Perigee_Time "Moon perigee from [%1$td.%1$tm.%1$tY %1$tH:%1$tM]" {astro="planet=moon, type=perigee, property=date"}
// apogee
Number Moon_Apogee_K "Moon apogee [%.2f km]" {astro="planet=moon, type=apogee, property=kilometer"}
Number Moon_Apogee_M "Moon apogee [%.2f miles]" {astro="planet=moon, type=apogee, property=miles"}
DateTime Moon_Apogee_Time "Moon apogee from [%1$td.%1$tm.%1$tY %1$tH:%1$tM]" {astro="planet=moon, type=apogee, property=date"}
// moon zodiac
String Moon_Zodiac_Sign "Moon zodiac [%s]" {astro="planet=moon, type=zodiac, property=sign"}
// moon azimuth and elevation
Number Moon_Azimuth "Moon azimuth [%.2f]" {astro="planet=moon, type=position, property=azimuth"}
Number Moon_Elevation "Moon elevation [%.2f]" {astro="planet=moon, type=position, property=elevation"}
// schedules a event at full moon
Switch Moon_Full_Event {astro="planet=moon, type=phase, property=full"}
// schedules a event 10 minutes BEFORE new moon
Switch Moon_New_Event {astro="planet=moon, type=phase, property=new, offset=-10"}
```
If you like to have the season name, zodiac sign and the moon phase name in your own language, use a map.
Example for German translation:
```
String Zodiac_Sign_Ger "Tierkreiszeichen [MAP(zodiac.map):%s]" {astro="planet=sun, type=zodiac, property=sign"}
String Season_Name_Ger "Jahreszeit [MAP(season.map):%s]" {astro="planet=sun, type=season, property=name"}
String Moon_Phase_Ger "Mondphase [MAP(moon.map):%s]" {astro="planet=moon, type=phase, property=name"}
String Moon_Zodiac_Sign_Ger "Mondzeichen [MAP(zodiac.map):%s]" {astro="planet=moon, type=zodiac, property=sign"}
```
transform/zodiac.map:
```
Aries=Widder
Taurus=Stier
Gemini=Zwilling
Cancer=Krebs
Leo=Löwe
Virgo=Jungfrau
Libra=Waage
Scorpio=Skorpion
Sagittarius=Schütze
Capricorn=Steinbock
Aquarius=Wassermann
Pisces=Fisch
```
transform/season.map
```
Spring=Frühling
Summer=Sommer
Autumn=Herbst
Winter=Winter
```
transform/moon.map
```
New=Neumond
Waxing\u0020Crescent=zunehmender Halbmond
First\u0020Quarter=erstes Viertel
Waxing\u0020Gibbous=zunehmender Mond
Full=Vollmond
Waning\u0020Gibbous=abnehmender Mond
Third\u0020Quarter=letztes Viertel
Waning\u0020Crescent=abnehmender Halbmond
```
## Example Rules
Rule at sunrise
```
rule "Example Rule at sunrise"
when
Item Sunrise_Event received update ON
then
...
end
```
Rule to close all RollerShutters after sunset and the outside temperature is lower than 5 degrees
```
rule "Close RollerShutters if cold after sunset"
when
Item Temp_Outside changed
then
if (now.isAfter((Sunset_Time.state as DateTimeType).calendar.timeInMillis) &&
(Temp_Outside.state as DecimalType).intValue < 5) {
RollerShutters?.members.forEach(r | sendCommand(r, DOWN))
}
end
```
Let's say, you know that the sun is shining through your living room window between Azimuth 100 and 130. If it's summer you want to close the RollerShutter.
```
rule "Autoshading RollerShutter"
when
Item Azimuth changed
then
var int azimuth = (Azimuth.state as DecimalType).intValue
if (azimuth > 100 && azimuth < 130) {
sendCommand(Rollershutter_Livingroom, DOWN)
}
...
end
```
## Troubleshooting
I assume, the binding is installed. It populates the astro items at startup and with scheduled jobs.
* In the openHAB logfile there must be a entry like this:
```
AstroConfig[latitude=xx.xxxx,longitude=xx.xxxx,interval=...,systemTimezone=...,daylightSavings=...]
```
If this entry does not exist, there is a problem in your configuration file.
* If the items are still not populated, switch the binding to DEBUG mode and start openHAB if not already running. Now you should see for every astro item, an entry in your logfile:
```
Adding item ... with AstroBindingConfig[planet=..., type=..., property=...]
```
If you don't see these entries, check your .items file.
* If the maps for translation are not working, there might be a file encoding problem. Download the German example maps and edit the entries.
## Screenshots
![](https://dl.dropboxusercontent.com/u/1781347/wiki/2015-01-04%2016_27_28-openHAB.png)
## Download
* [German maps download](https://drive.google.com/file/d/0Bw7zjCgsXYnHZXNNeU5XY2FTMGc/edit?usp=sharing)
## Schedules
Multiple event types are supported. Each type has two events: start and end. In general, for all types their start and stop events coincide with a stop or start event of another type.
### Planet: Sun
For the ordered list of the following 11 types, the start event is always equal to the end event of the next type. Except `morningNight` is always at 0:00 of the current day and `eveningNight` is at 0:00 of the following day.
For astrological definitions, see [here](http://www.timeanddate.com/astronomy/different-types-twilight.html).
* morningNight
* astroDawn
* nauticDawn
* civilDawn
* rise
* daylight
* set
* civilDusk
* nauticDusk
* astroDusk
* eveningNight
Type `noon` lasts for only one minute and is during type `daylight`. Type `night` starts together with `eveningNight` and ends together with `morningNight`.

View File

@ -1,364 +0,0 @@
---
id: atlona
label: Atlona
title: Atlona - Bindings
type: binding
description: "This binding integrates Atlona AT-UHD-PRO3 HdBaseT matrix switches [Atlona AT-UHD-PRO3 HdBaseT matrix switches](http://www.atlona.com) into your openHAB installation."
since: 2x
logo: images/addons/atlona.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Atlona Binding
This binding integrates Atlona AT-UHD-PRO3 HdBaseT matrix switches [Atlona AT-UHD-PRO3 HdBaseT matrix switches](http://www.atlona.com) into your openHAB installation.
## Supported Things
This binding supports the following thing types:
| Thing | Thing Type | Description |
|---------------|------------|---------------------------------------------------------|
| pro3-44m | Thing | The AT-UHD-PRO3-44M 4x4 HDBaseT matrix. |
| pro3-66m | Thing | The AT-UHD-PRO3-66M 6x6 HDBaseT matrix. |
| pro3-88m | Thing | The AT-UHD-PRO3-88M 8x8 HDBaseT matrix. |
| pro3-1616m | Thing | The AT-UHD-PRO3-1616M 16x16 HDBaseT matrix. |
## Discovery
The Atlona AT-UHD-PRO3 switch can be discovered by starting a scan in the Paper UI and then logging into your switch and pressing the "SDDP" button on the "Network" tab.
The "SDDP" (simple device discovery protocol) button will initiate the discovery process.
If "Telnet Login" is enabled ("Network" tab from the switch configuration UI), you will need to set the username and password in the configuration of the newly discovered thing before a connection can be made.
## Binding configuration
```java
atlona:pro3-88m:home [ ipAddress="192.168.1.30", userName="me", password="12345", polling=600, ping=30, retryPolling=10 ]
```
- `ipAddress`: Hostname or IP address of the matrix switch
- `userName`: (optional) the username to login with (only if Telnet Login is enabled)
- `password`: (optional) the password to login with (only if Telnet Login is enabled)
- `polling`: (optional) the time (in seconds) to poll the state from the actual switch (default: 600)
- `ping`: (optional) the time (in seconds) to ping the switch to keep our connection alive (default: 30)
- `retryPolling`: (optional) the time (in seconds) to retry a connection if the connection has failed (default: 10)
### username/password
The userName/password configuration options are optional and are only required if you have your switch set with "Telnet Login" enabled (on the "Network" tab from the switch configuration UI).
The user must be a valid user listed on the "Users" tab of the switch configuration UI in this case.
### polling
Polling will automatically occur when (re)connecting to the switch to get the initial state of the switch.
If you have anything outside of openHAB that can modify the switch state (front panel, IR, telnet session or another automation system), you will likely want to set this setting to a much lower value.
### ping
The Atlona switch will time out any IP connection after a specific time (specified by "IP Timeout" on the "Network" tab from the switch configuration UI - 120 by default).
The ping setting MUST be lower than that value.
If it is higher than the "IP Timeout" value, the switch will timeout our connection and the thing will go OFFLINE (until a reconnect attempt is made).
## Channels
| Thing | Channel Type ID | Item Type | Access | Description |
|------------|-----------------------------------------------------------------|-----------|--------|-------------------------------------------------------------------------------------------|
| pro3-44m | primary#power | Switch | RW | Matrix Power Switch |
| pro3-44m | primary#panellock | Switch | RW | Sets the front panel locked or unlocked |
| pro3-44m | primary#irenable | Switch | RW | Enables/Disabled the front panel IR |
| pro3-44m | primary#presetcmd | Switch | W | Sends a preset command ('saveX', 'recallX', 'clearX') - see notes below |
| pro3-44m | primary#matrixcmd | Switch | W | Sends a matrix command ('resetmatrix', 'resetports', 'allportsX') - see notes below |
| pro3-44m | port1#portpower | Switch | RW | Enables/Disables output port #1 |
| pro3-44m | port1#portoutput | Number | RW | Sets output port #1 to the specified input port |
| pro3-44m | port2#portpower | Switch | RW | Enables/Disables output port #2 |
| pro3-44m | port2#portoutput | Number | RW | Sets output port #2 to the specified input port |
| pro3-44m | port3#portpower | Switch | RW | Enables/Disables output port #3 |
| pro3-44m | port3#portoutput | Number | RW | Sets output port #3 to the specified input port |
| pro3-44m | port4#portpower | Switch | RW | Enables/Disables output port #4 |
| pro3-44m | port4#portoutput | Number | RW | Sets output port #4 to the specified input port |
| pro3-44m | port5#portpower | Switch | RW | Enables/Disables output port #5 |
| pro3-44m | port5#portoutput | Number | RW | Sets output port #5 to the specified input port |
| pro3-44m | mirror5#portmirrorenabled | Number | RW | Sets hdmi port #5 to enable/disable port mirroring |
| pro3-44m | mirror5#portmirror | Number | RW | Sets hdmi port #5 to mirror the specified output port (if enabled) |
| pro3-44m | volume1#volume | Number | RW | Sets the volume of audio port #1 to the specified decibel level (between -79db to +15db) |
| pro3-44m | volume1#volumemute | Switch | RW | Mutes/Unmutes audio port #1 |
| pro3-44m | volume2#volume | Number | RW | Sets the volume of audio port #2 to the specified decibel level (between -79db to +15db) |
| pro3-44m | volume2#volumemute | Switch | RW | Mutes/Unmutes audio port #2 |
| pro3-44m | volume3#volume | Number | RW | Sets the volume of audio port #3 to the specified decibel level (between -79db to +15db) |
| pro3-44m | volume3#volumemute | Switch | RW | Mutes/Unmutes audio port #3 |
| | | | | |
| pro3-66m | ALL OF THE pro3-44M channels (except different mirror settings) | | | |
| pro3-66m | port6#portpower | Switch | RW | Enables/Disables output port #6 |
| pro3-66m | port6#portoutput | Number | RW | Sets output port #6 to the specified input port |
| pro3-66m | port7#portpower | Switch | RW | Enables/Disables output port #7 |
| pro3-66m | port7#portoutput | Number | RW | Sets output port #7 to the specified input port |
| pro3-66m | port8#portpower | Switch | RW | Enables/Disables output port #8 |
| pro3-66m | port8#portoutput | Number | RW | Sets output port #8 to the specified input port |
| pro3-66m | mirror6#portmirrorenabled | Number | RW | Sets hdmi port #6 to enable/disable port mirroring |
| pro3-66m | mirror6#portmirror | Number | RW | Sets hdmi port #6 to mirror the specified output port (if enabled) |
| pro3-66m | mirror8#portmirrorenabled | Number | RW | Sets hdmi port #8 to enable/disable port mirroring |
| pro3-66m | mirror8#portmirror | Number | RW | Sets hdmi port #8 to mirror the specified output port (if enabled) |
| pro3-66m | volume4#volume | Number | RW | Sets the volume of audio port #4 to the specified decibel level (between -79db to +15db) |
| pro3-66m | volume4#volumemute | Switch | RW | Mutes/Unmutes audio port #4 |
| | | | | |
| pro3-88m | ALL OF THE pro3-66M channels (except different mirror settings) | | | |
| pro3-88m | port9#portpower | Switch | RW | Enables/Disables output port #9 |
| pro3-88m | port9#portoutput | Number | RW | Sets output port #9 to the specified input port |
| pro3-88m | port10#portpower | Switch | RW | Enables/Disables output port #10 |
| pro3-88m | port10#portoutput | Number | RW | Sets output port #10 to the specified input port |
| pro3-88m | mirror8#portmirrorenabled | Number | RW | Sets hdmi port #8 to enable/disable port mirroring |
| pro3-88m | mirror8#portmirror | Number | RW | Sets hdmi port #8 to mirror the specified output port (if enabled) |
| pro3-88m | mirror10#portmirrorenabled | Number | RW | Sets hdmi port #10 to enable/disable port mirroring |
| pro3-88m | mirror10#portmirror | Number | RW | Sets hdmi port #10 to mirror the specified output port (if enabled) |
| pro3-88m | volume5#volume | Number | RW | Sets the volume of audio port #5 to the specified decibel level (between -79db to +15db) |
| pro3-88m | volume5#volumemute | Switch | RW | Mutes/Unmutes audio port #5 |
| pro3-88m | volume6#volume | Number | RW | Sets the volume of audio port #6 to the specified decibel level (between -79db to +15db) |
| pro3-88m | volume6#volumemute | Switch | RW | Mutes/Unmutes audio port #6 |
| | | | | |
| pro3-1616m | ALL OF THE pro3-88M channels (except different mirror settings) | | | |
| pro3-1616m | port11#portpower | Switch | RW | Enables/Disables output port #11 |
| pro3-1616m | port11#portoutput | Number | RW | Sets output port #11 to the specified input port |
| pro3-1616m | port12#portpower | Switch | RW | Enables/Disables output port #12 |
| pro3-1616m | port12#portoutput | Number | RW | Sets output port #12 to the specified input port |
| pro3-1616m | port13#portpower | Switch | RW | Enables/Disables output port #13 |
| pro3-1616m | port13#portoutput | Number | RW | Sets output port #13 to the specified input port |
| pro3-1616m | port14#portpower | Switch | RW | Enables/Disables output port #14 |
| pro3-1616m | port14#portoutput | Number | RW | Sets output port #14 to the specified input port |
| pro3-1616m | port15#portpower | Switch | RW | Enables/Disables output port #15 |
| pro3-1616m | port15#portoutput | Number | RW | Sets output port #15 to the specified input port |
| pro3-1616m | port16#portpower | Switch | RW | Enables/Disables output port #16 |
| pro3-1616m | port16#portoutput | Number | RW | Sets output port #16 to the specified input port |
| pro3-1616m | port17#portpower | Switch | RW | Enables/Disables output port #17 |
| pro3-1616m | port17#portoutput | Number | RW | Sets output port #17 to the specified input port |
| pro3-1616m | port18#portpower | Switch | RW | Enables/Disables output port #18 |
| pro3-1616m | port18#portoutput | Number | RW | Sets output port #18 to the specified input port |
| pro3-1616m | port19#portpower | Switch | RW | Enables/Disables output port #19 |
| pro3-1616m | port19#portoutput | Number | RW | Sets output port #19 to the specified input port |
| pro3-1616m | port20#portpower | Switch | RW | Enables/Disables output port #20 |
| pro3-1616m | port20#portoutput | Number | RW | Sets output port #20 to the specified input port |
| pro3-1616m | mirror17#portmirrorenabled | Number | RW | Sets hdmi port #17 to enable/disable port mirroring |
| pro3-1616m | mirror17#portmirror | Number | RW | Sets hdmi port #17 to mirror the specified output port (if enabled) |
| pro3-1616m | mirror18#portmirrorenabled | Number | RW | Sets hdmi port #18 to enable/disable port mirroring |
| pro3-1616m | mirror18#portmirror | Number | RW | Sets hdmi port #18 to mirror the specified output port (if enabled) |
| pro3-1616m | mirror19#portmirrorenabled | Number | RW | Sets hdmi port #19 to enable/disable port mirroring |
| pro3-1616m | mirror19#portmirror | Number | RW | Sets hdmi port #19 to mirror the specified output port (if enabled) |
| pro3-1616m | mirror20#portmirrorenabled | Number | RW | Sets hdmi port #20 to enable/disable port mirroring |
| pro3-1616m | mirror20#portmirror | Number | RW | Sets hdmi port #20 to mirror the specified output port (if enabled) |
| pro3-1616m | volume7#volume | Number | RW | Sets the volume of audio port #7 to the specified decibel level (between -79db to +15db) |
| pro3-1616m | volume7#volumemute | Switch | RW | Mutes/Unmutes audio port #7 |
| pro3-1616m | volume8#volume | Number | RW | Sets the volume of audio port #8 to the specified decibel level (between -79db to +15db) |
| pro3-1616m | volume8#volumemute | Switch | RW | Mutes/Unmutes audio port #8 |
| pro3-1616m | volume9#volume | Number | RW | Sets the volume of audio port #9 to the specified decibel level (between -79db to +15db) |
| pro3-1616m | volume9#volumemute | Switch | RW | Mutes/Unmutes audio port #9 |
| pro3-1616m | volume10#volume | Number | RW | Sets the volume of audio port #10 to the specified decibel level (between -79db to +15db) |
| pro3-1616m | volume10#volumemute | Switch | RW | Mutes/Unmutes audio port #10 |
| pro3-1616m | volume11#volume | Number | RW | Sets the volume of audio port #11 to the specified decibel level (between -79db to +15db) |
| pro3-1616m | volume11#volumemute | Switch | RW | Mutes/Unmutes audio port #11 |
| pro3-1616m | volume12#volume | Number | RW | Sets the volume of audio port #12 to the specified decibel level (between -79db to +15db) |
| pro3-1616m | volume12#volumemute | Switch | RW | Mutes/Unmutes audio port #12 |
### presetcmd
The presetcmd channel will take the following commands:
| Command | Description |
|---------|--------------------------------------------|
| saveX | Saves the current input/output to preset X |
| recallX | Sets the input/output to preset X |
| clearX | Clears the preset X |
Note: if X doesn't exist - nothing will occur.
The # of presets allowed depends on the firmware you are using (5 presets up to rev 13, 10 for rev 14 and above).
### matrixcmd
The matrixcmd channel will take the following commands:
| Command | Description |
|-------------|---------------------------------------------------------------------------------------------------------------------------------------|
| resetmatrix | Resets the matrix back to it's default values (USE WITH CARE!). Note: some firmware upgrades require a resetmatrix after installing. |
| resetports | Resets the ports back to their default values (outputX=inputX) |
| allportsX | Sets all the output ports to the input port X |
Note: if X doesn't exist - nothing will occur.
The # of presets allowed depends on the firmware you are using (5 presets up to rev 13, 10 for rev 14 and above).
## Changes/Warnings
As of firmware 1.6.03 (rev 13), there are three issues on Atlona firmware (I've notified them on these issues):
- clearX command does not work. The TCP/IP command "ClearX" as specified in Atlona's protocol will ALWAYS return a "Command Failed". Please avoid this channel until atlona releases a new firmware.
- There is no way to query what the current status is of: panellock, and irenable. This addon simply assumes that panellock is off and irenable is on at startup.
- If you make a change in the switches UI that requires a reboot (mainly changing any of the settings on the "Network" tab in the switch configuration UI), this addon's connection will be inconsistently closed at different times.
The thing will go OFFLINE and then back ONLINE when the reconnect attempt is made - and then it starts all over again. Please make sure you reboot as soon as possible when the switch UI notifies you.
- a bug in the firmware will sometimes cause memory presets to disappear after a reboot
As of firmware 1.6.8 (rev 14),
- The "clearX" command has been fixed and works now.
- The number of presets have increased to 10
- If telnet mode is enabled, you must use the admin username/password to issue a matrixreset
## Example
### Things
Here is an example with minimal configuration parameters (using default values with no telnet login):
```java
atlona:pro3-88m:home [ ipAddress="192.168.1.30" ]
```
Here is another example with minimal configuration parameters (using default values with telnet login):
```java
atlona:pro3-88m:home [ ipAddress="192.168.1.30", userName="me", password="12345" ]
```
Here is a full configuration example:
```java
atlona:pro3-88m:home [ ipAddress="192.168.1.30", userName="me", password="12345", polling=600, ping=30, retryPolling=10 ]
```
### Items
Here is an example of items for the AT-UHD-PRO33-88M:
```java
Switch Atlona_Power "Power" { channel = "atlona:pro3-88m:home:primary#power" }
Switch Atlona_PanelLock "Panel Lock" { channel = "atlona:pro3-88m:home:primary#panellock" }
Switch Atlona_Presets "Preset Command" { channel = "atlona:pro3-88m:home:primary#presetcmd" }
Switch Atlona_IRLock "IR Lock" { channel = "atlona:pro3-88m:home:primary#irenable" }
Switch Atlona_PortPower1 "Port Power 1" { channel = "atlona:pro3-88m:home:port1#power" }
Switch Atlona_PortPower2 "Port Power 2" { channel = "atlona:pro3-88m:home:port2#power" }
Switch Atlona_PortPower3 "Port Power 3" { channel = "atlona:pro3-88m:home:port3#power" }
Switch Atlona_PortPower4 "Port Power 4" { channel = "atlona:pro3-88m:home:port4#power" }
Switch Atlona_PortPower5 "Port Power 5" { channel = "atlona:pro3-88m:home:port5#power" }
Switch Atlona_PortPower6 "Port Power 6" { channel = "atlona:pro3-88m:home:port6#power" }
Switch Atlona_PortPower7 "Port Power 7" { channel = "atlona:pro3-88m:home:port7#power" }
Switch Atlona_PortPower8 "Port Power 8" { channel = "atlona:pro3-88m:home:port8#power" }
Switch Atlona_PortPower9 "Port Power 9" { channel = "atlona:pro3-88m:home:port9#power" }
Switch Atlona_PortPower10 "Port Power 10" { channel = "atlona:pro3-88m:home:port10#power" }
Number Atlona_PortOutput1 "Living Room [MAP(atlonainputports.map):%s]" { channel = "atlona:pro3-88m:home:port1#portoutput" }
Number Atlona_PortOutput2 "Master Bed [MAP(atlonainputports.map):%s]" { channel = "atlona:pro3-88m:home:port2#portoutput" }
Number Atlona_PortOutput3 "Kitchen [MAP(atlonainputports.map):%s]" { channel = "atlona:pro3-88m:home:port3#portoutput" }
Number Atlona_PortOutput4 "Output 4 [MAP(atlonainputports.map):%s]" { channel = "atlona:pro3-88m:home:port4#portoutput" }
Number Atlona_PortOutput5 "Output 5 [MAP(atlonainputports.map):%s]" { channel = "atlona:pro3-88m:home:port5#portoutput" }
Number Atlona_PortOutput6 "Output 6 [MAP(atlonainputports.map):%s]" { channel = "atlona:pro3-88m:home:port6#portoutput" }
Number Atlona_PortOutput7 "Output 7 [MAP(atlonainputports.map):%s]" { channel = "atlona:pro3-88m:home:port7#portoutput" }
Number Atlona_PortOutput8 "Output 8 [MAP(atlonainputports.map):%s]" { channel = "atlona:pro3-88m:home:port8#portoutput" }
Number Atlona_PortOutput9 "Output 9 [MAP(atlonainputports.map):%s]" { channel = "atlona:pro3-88m:home:port9#portoutput" }
Number Atlona_PortOutput10 "Output 10 [MAP(atlonainputports.map):%s]" { channel = "atlona:pro3-88m:home:port10#portoutput" }
Number Atlona_PortMirror8 "Hdmi Mirror 8 [MAP(atlonaoutputports.map):%s]" { channel = "atlona:pro3-88m:home:mirror8#portmirror" }
Number Atlona_PortMirror10 "Hdmi Mirror 10 [MAP(atlonaoutputports.map):%s]" { channel = "atlona:pro3-88m:home:mirror10#portmirror" }
Number Atlona_Volume1 "Volume 1 [%s db]" { channel = "atlona:pro3-88m:home:volume1#volume" }
Number Atlona_Volume2 "Volume 2 [%s db]" { channel = "atlona:pro3-88m:home:volume2#volume" }
Number Atlona_Volume3 "Volume 3 [%s db]" { channel = "atlona:pro3-88m:home:volume3#volume" }
Number Atlona_Volume4 "Volume 4 [%s db]" { channel = "atlona:pro3-88m:home:volume4#volume" }
Number Atlona_Volume5 "Volume 5 [%s db]" { channel = "atlona:pro3-88m:home:volume5#volume" }
Number Atlona_Volume6 "Volume 6 [%s db]" { channel = "atlona:pro3-88m:home:volume6#volume" }
Switch Atlona_VolumeMute1 "Mute 1" { channel = "atlona:pro3-88m:home:volume1#volumemute" }
Switch Atlona_VolumeMute2 "Mute 2" { channel = "atlona:pro3-88m:home:volume1#volumemute" }
Switch Atlona_VolumeMute3 "Mute 3" { channel = "atlona:pro3-88m:home:volume1#volumemute" }
Switch Atlona_VolumeMute4 "Mute 4" { channel = "atlona:pro3-88m:home:volume1#volumemute" }
Switch Atlona_VolumeMute5 "Mute 5" { channel = "atlona:pro3-88m:home:volume1#volumemute" }
Switch Atlona_VolumeMute6 "Mute 6" { channel = "atlona:pro3-88m:home:volume1#volumemute" }
```
### SiteMap
```perl
sitemap demo label="Main Menu" {
Frame label="Atlona" {
Text label="Device" {
Switch item=Atlona_Power
Switch item=Atlona_PanelLock
Switch item=Atlona_IRLock
Text item=Atlona_Presets
}
Text label="Ports" {
Switch item=Atlona_PortPower1
Switch item=Atlona_PortPower2
Switch item=Atlona_PortPower3
Switch item=Atlona_PortPower4
Switch item=Atlona_PortPower5
Switch item=Atlona_PortPower6
Switch item=Atlona_PortPower7
Switch item=Atlona_PortPower8
Switch item=Atlona_PortPower9
Switch item=Atlona_PortPower10
Selection item=Atlona_PortOutput1 mappings=[1="CableBox",2="BluRay Player",3="Roku",4="Apple TV",5="Input 5",6="Input 6",7="Input 7",8="Input 8"]
Selection item=Atlona_PortOutput2 mappings=[1="CableBox",2="BluRay Player",3="Roku",4="Apple TV",5="Input 5",6="Input 6",7="Input 7",8="Input 8"]
Selection item=Atlona_PortOutput3 mappings=[1="CableBox",2="BluRay Player",3="Roku",4="Apple TV",5="Input 5",6="Input 6",7="Input 7",8="Input 8"]
Selection item=Atlona_PortOutput4 mappings=[1="CableBox",2="BluRay Player",3="Roku",4="Apple TV",5="Input 5",6="Input 6",7="Input 7",8="Input 8"]
Selection item=Atlona_PortOutput5 mappings=[1="CableBox",2="BluRay Player",3="Roku",4="Apple TV",5="Input 5",6="Input 6",7="Input 7",8="Input 8"]
Selection item=Atlona_PortOutput6 mappings=[1="CableBox",2="BluRay Player",3="Roku",4="Apple TV",5="Input 5",6="Input 6",7="Input 7",8="Input 8"]
Selection item=Atlona_PortOutput7 mappings=[1="CableBox",2="BluRay Player",3="Roku",4="Apple TV",5="Input 5",6="Input 6",7="Input 7",8="Input 8"]
Selection item=Atlona_PortOutput8 mappings=[1="CableBox",2="BluRay Player",3="Roku",4="Apple TV",5="Input 5",6="Input 6",7="Input 7",8="Input 8"] visibility=[Atlona_PortMirror8==0]
Selection item=Atlona_PortOutput9 mappings=[1="CableBox",2="BluRay Player",3="Roku",4="Apple TV",5="Input 5",6="Input 6",7="Input 7",8="Input 8"]
Selection item=Atlona_PortOutput10 mappings=[1="CableBox",2="BluRay Player",3="Roku",4="Apple TV",5="Input 5",6="Input 6",7="Input 7",8="Input 8"] visibility=[Atlona_PortMirror10==0]
Selection item=Atlona_PortMirror8 mappings=[0="None",1="Living Room",2="Master Bed",3="Kitchen",4="Output 4",5="Output 5",6="Output 6",7="Output 7",9="Output 9"]
Selection item=Atlona_PortMirror10 mappings=[0="None",1="Living Room",2="Master Bed",3="Kitchen",4="Output 4",5="Output 5",6="Output 6",7="Output 7",9="Output 9"]
}
Text label="Audio" {
Setpoint item=Atlona_Volume1 minValue=-79 maxValue=15
Setpoint item=Atlona_Volume2 minValue=-79 maxValue=15
Setpoint item=Atlona_Volume3 minValue=-79 maxValue=15
Setpoint item=Atlona_Volume4 minValue=-79 maxValue=15
Setpoint item=Atlona_Volume5 minValue=-79 maxValue=15
Setpoint item=Atlona_Volume6 minValue=-79 maxValue=15
Switch item=Atlona_VolumeMute1
Switch item=Atlona_VolumeMute2
Switch item=Atlona_VolumeMute3
Switch item=Atlona_VolumeMute4
Switch item=Atlona_VolumeMute5
Switch item=Atlona_VolumeMute6
}
}
}
```
## Transformation Maps
The following is some example transformation maps you can create.
Be sure they are in sync with the mappings above.
### atlonainputports.map
```text
1=CableBox
2=BluRay Player
3=Roku
4=Apple TV
5=Input 5
6=Input 6
7=Input 7
8=Input 8
-=-
NULL=-
```
### atlonaoutputports.map
```text
1=Living Room
2=Master Bed
3=Kitchen
4=Output 4
5=Output 5
6=Output 6
7=Output 7
8=Output 8
9=Output 9
10=Output 10
-=-
NULL=-
```

View File

@ -1,108 +0,0 @@
---
id: autelis
label: Autelis Pool Control
title: Autelis Pool Control - Bindings
type: binding
description: "Autelis manufactures a network enabled pool interface for many popular pool systems."
since: 2x
logo: images/addons/autelis.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Autelis Pool Control Binding
Autelis manufactures a network enabled pool interface for many popular pool systems.
See [the Autelis website](http://www.autelis.com) and the [Autelis Command Protocol](http://www.autelis.com/wiki/index.php?title=Pool_Control_&lparPI&rpar_HTTP_Command_Reference) for more information.
This binding supports:
- Read circuit, auxiliary, temperature, pump, chemistry and system values
- Control circuit, auxiliary lighting scenes, and temperature set points
## Discovery
The binding will automatically look for a device with the DNS name 'poolcontrol'.
If found it will try and connect with the factory default username and password.
## Binding Configuration
The binding requires no special configuration
## Thing Configuration
The Autelis binding requires the host, port, username and password
In the thing file, this looks e.g. like
```text
Thing autelis:myPool [ host="192.168.1.10", port="80", user="admin", password="admin"]
```
## Channels
All devices support some of the following channels:
| Channel Type ID | Item Type |
|---------------------|-----------|
| system-runstate | Switch |
| system-model | Number |
| system-haddr | Number |
| system-opmode | Number |
| system-freeze | Number |
| system-sensor1 | Number |
| system-sensor2 | Number |
| system-sensor3 | Number |
| system-sensor4 | Number |
| system-sensor5 | Number |
| system-version | String |
| system-time | Number |
| equipment-circuit1 | Switch |
| equipment-circuit2 | Switch |
| equipment-circuit3 | Switch |
| equipment-circuit4 | Switch |
| equipment-circuit5 | Switch |
| equipment-circuit6 | Switch |
| equipment-circuit7 | Switch |
| equipment-circuit8 | Switch |
| equipment-circuit9 | Switch |
| equipment-circuit10 | Switch |
| equipment-feature1 | Number |
| equipment-feature2 | Number |
| equipment-feature3 | Number |
| equipment-feature4 | Number |
| equipment-feature5 | Number |
| equipment-feature6 | Number |
| equipment-feature7 | Number |
| equipment-feature8 | Number |
| equipment-feature9 | Number |
| equipment-feature10 | Number |
| temp-poolht | Number |
| temp-spaht | Number |
| temp-htstatus | Number |
| temp-poolsp | Number |
| temp-spasp | Number |
| temp-pooltemp | Number |
| temp-spatemp | Number |
| temp-airtemp | Number |
| temp-tempunits | String |
| temp-htpump | Number |
| pump-pump1 | String |
| pump-pump2 | String |
| pump-pump3 | String |
| pump-pump4 | String |
| pump-pump5 | String |
| pump-pump6 | String |
| pump-pump7 | String |
| pump-pump8 | String |
| chlor-chloren | Number |
| chlor-poolsp | Number |
| chlor-spasp | Number |
| chlor-salt | Number |
| chlor-super | Number |
| chlor-chlorerr | Number |
| chlor-chlorname | String |
| lightscmd | String |

View File

@ -1,163 +0,0 @@
---
id: autelis
label: Autelis
title: Autelis - Bindings
type: binding
description: "Autelis manufactures a network enabled pool interface for many popular pool systems. See the [Autelis website](http://www.autelis.com) and the [Autelis Command Protocol](http://www.autelis.com/wiki/index.php?title=Pool_Control_(PI)_HTTP_Command_Reference) for more information."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.autelis/README.md
since: 1x
logo: images/addons/autelis.png
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Autelis Binding
Autelis manufactures a network enabled pool interface for many popular pool systems. See the [Autelis website](http://www.autelis.com) and the [Autelis Command Protocol](http://www.autelis.com/wiki/index.php?title=Pool_Control_(PI)_HTTP_Command_Reference) for more information.
The binding is fairly complete and supports the following functionality.
* Read circuit, auxiliary, temperature, pump, chemistry and system values
* Control circuit, auxiliary lighting scenes, and temperature set points
There is also a binding specifically for openHAB 2 [here](http://docs.openhab.org/addons/bindings/autelis/readme.html).
## Binding Configuration
The binding can be configured in the file `services/autelis.cfg`.
| Property | Default | Required | Description |
|----------|---------|:--------:|-------------|
| refresh | 5000 | No | Refresh rate in milliseconds |
| host | | Yes | Host (name or ip) to connect to |
| port | 80 | No | Port on which to connect to the host |
| username | | if configured | User name for example `admin` |
| password | | if configured | Password, for example `admin` |
## Item Configuration
The format is
```
{ autelis="parentNode.childElement" }
```
or
```
{ autelis="lightscmd" }
```
An example to get the system version would be:
```
{ autelis="system.version" }
```
* Only `equipment.*`, `temp.*` and `lightscmd` items can be updated from openHAB, everything else is read only.
* For lighting commands, the following strings can be sent to an item configured with `{ autels="lightscmd"}` (through a mapped push button for example):
* 'alloff, allon, csync, cset, cswim, party, romance, caribbean, american, sunset, royalty, blue, green, red, white, magenta, hold, recall`
The following are a listing of possible values for the configuration string using a sample xml output from a Autelis controller:
```xml
<system>
<runstate>50</runstate>
<model>13</model>
<haddr>20</haddr>
<opmode>0</opmode>
<freeze>0</freeze>
<sensor1>0</sensor1>
<sensor2>0</sensor2>
<sensor3>0</sensor3>
<sensor4>0</sensor4>
<sensor5>0</sensor5>
<version>1.4.4</version>
<time>1425269492</time>
</system>
<equipment>
<circuit1>0</circuit1>
<circuit2>0</circuit2>
<circuit3>0</circuit3>
<circuit4>0</circuit4>
<circuit5>0</circuit5>
<circuit6>0</circuit6>
<circuit7>0</circuit7>
<circuit8>0</circuit8>
<circuit9>0</circuit9>
<circuit10></circuit10>
<circuit11></circuit11>
<circuit12></circuit12>
<circuit13></circuit13>
<circuit14></circuit14>
<circuit15></circuit15>
<circuit16></circuit16>
<circuit17></circuit17>
<circuit18></circuit18>
<circuit19></circuit19>
<circuit20>0</circuit20>
<feature1>0</feature1>
<feature2>0</feature2>
<feature3>0</feature3>
<feature4>0</feature4>
<feature5>0</feature5>
<feature6>0</feature6>
<feature7>0</feature7>
<feature8>0</feature8>
<feature9></feature9>
<feature10></feature10>
</equipment>
<temp>
<poolht>1</poolht>
<spaht>1</spaht>
<htstatus>0</htstatus>
<poolsp>71</poolsp>
<spasp>101</spasp>
<pooltemp>60</pooltemp>
<spatemp>60</spatemp>
<airtemp>55</airtemp>
<tempunits>F</tempunits>
<htpump>0</htpump>
</temp>
<pumps>
<pump1>0,0,0</pump1>
<pump2></pump2>
<pump3></pump3>
<pump4></pump4>
<pump5></pump5>
<pump6></pump6>
<pump7></pump7>
<pump8></pump8>
</pumps>
<chlor>
<chloren>1</chloren>
<poolsp>50</poolsp>
<spasp>0</spasp>
<salt>58</salt>
<super>0</super>
<chlorerr>0</chlorerr>
<chlorname>Intellichlor--40</chlorname>
</chlor>
```
## Item Examples
```
String PoolVersion "Version [%s]" {autelis="system.version"}
Number PoolSetPoint "Pool SetPoint [%d]" {autelis="temp.poolsp"}
Number PoolTemp "Pool Temp [%d]" {autelis="temp.pooltemp"}
Number PoolSpaTemp "Spa Temp [%d]" {autelis="temp.spatemp"}
Number PoolAirTemp "Air Temp [%d]" {autelis="temp.airtemp"}
Number PoolSpaSetPoint "Spa SetPoint [%d]" {autelis="temp.spasp"}
Number PoolChemSalt "Salt Levels [%d]" {autelis="chlor.salt"}
Switch PoolSpaMode "Spa Mode [%s]" {autelis="equipment.circuit1"}
Switch PoolMode "Pool Mode [%s]" {autelis="equipment.circuit6"}
Switch PoolWaterfall "Waterfall [%s]" {autelis="equipment.circuit2"}
Switch PoolSpaLight "Spa Light [%s]" {autelis="equipment.circuit3"}
Switch PoolLight "Pool Light [%s]" {autelis="equipment.circuit4"}
String PoolLightCmd {autelis="lightscmd"}
```

View File

@ -1,172 +0,0 @@
---
id: avmfritz
label: AVM FRITZ!
title: AVM FRITZ! - Bindings
type: binding
description: "The binding integrates the AHA ( [AVM Home Automation](http://avm.de/ratgeber/smart-home/) ) system."
since: 2x
logo: images/addons/avmfritz.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# AVM FRITZ! Binding
The binding integrates the AHA ( [AVM Home Automation](http://avm.de/ratgeber/smart-home/) ) system.
## Supported Things
### FRITZ!Box
The well known FRITZ!Boxes are supported as bridge for accessing other AHA devices.
It is planned to support some channels directly at the bridge like call monitoring and others - but these things are under current development by now.
The Box has to run at least on firmware FRITZ!OS 6.00 and has to support the "Smart Home" service.
### FRITZ!DECT 200 / FRITZ!DECT 210
This switchable outlets [FRITZ!DECT 210](https://avm.de/produkte/fritzdect/fritzdect-210/) and [FRITZ!DECT 200](https://avm.de/produkte/fritzdect/fritzdect-200/) have to be connected to a FRITZ!Box by DECT protocol.
They support switching the outlet, current power and accumulated energy consumption and temperature readings.
### FRITZ!DECT Repeater 100
This [DECT repeater](https://avm.de/produkte/fritzdect/fritzdect-repeater-100/) has to be connected to a FRITZ!Box by DECT protocol.
It only supports temperature readings.
### FRITZ!Powerline 546E
This [powerline adapter](http://avm.de/produkte/fritzpowerline/fritzpowerline-546e/) can be used via the bridge or in stand-alone mode.
It supports switching the outlet and current power and energy consumption readings.
This device does not contain a temperature sensor.
### FRITZ!DECT 301 / FRITZ!DECT 300 / Comet DECT
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.
The FRITZ!Box can handle up to twelve heating thermostats.
The binding provides channels for reading and setting the temperature.
Additionally you can check the eco temperature, the comfort temperature and the battery level of the device.
The FRITZ!Box has to run at least on firmware FRITZ!OS 6.35.
### 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](https://www.openhab.org/addons/bindings/avmfritz/#fritz-dect-301-fritz-dect-300-comet-dect) devices.
The later one provides the same channels like the [FRITZ!DECT 200 / FRITZ!DECT 210](https://www.openhab.org/addons/bindings/avmfritz/#fritz-dect-200-fritz-dect-210) / [FRITZ!Powerline 546E](https://www.openhab.org/addons/bindings/avmfritz/#fritz-powerline-546e) devices.
The FRITZ!Box has to run at least on firmware FRITZ!OS 6.69.
## Discovery
The FRITZ!Box and the powerline adapter are discovered through UPNP in the local network.
When added as things, a username/password has eventually to be set depending on your Box/Powerline security configuration.
The credentials given in the settings must have HomeAuto permissions.
If correct credentials are set in the bridge configuration, connected AHA devices are discovered automatically (may last up to 3 minutes).
## Thing Configuration
### FRITZ!Box
- ipAddress (mandatory), default "fritz.box"
- protocol (optional, http or https), default "http"
- port (optional, 0 to 65335), no default (derived from protocol: 80 or 443)
- password (optional), no default (depends on FRITZ!Box security configuration)
- user (optional), no default (depends on FRITZ!Box security configuration)
- pollingInterval (optional, 5 to 60), default 15 (in seconds)
- asyncTimeout (optional, 1000 to 60000), default 10000 (in millis)
- syncTimeout (optional, 500 to 15000), default 2000 (in millis)
### FRITZ!Powerline 546E
- ipAddress (mandatory), default "fritz.powerline"
- protocol (optional, http or https), default "http"
- port (optional, 0 to 65335), no default (derived from protocol: 80 or 443)
- password (optional), no default (depends on FRITZ!Powerline security configuration)
- pollingInterval (optional, 5 to 60), default 15 (in seconds)
- asyncTimeout (optional, 1000 to 60000), default 10000 (in millis)
- syncTimeout (optional, 500 to 15000), default 2000 (in millis)
### AHA things connected to FRITZ!Box bridge
- AIN (mandatory), no default (AIN number of device)
## Supported Channels
| 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 |
| 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 |
| 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:Energy | Accumulated energy consumption | 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 |
| actual_temp | Number:Temperature | Actual Temperature of heating thermostat | 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:Temperature | Eco Temperature of heating thermostat | 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 |
| 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: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 |
## Full Example
demo.things:
```java
Bridge avmfritz:fritzbox:1 @ "Office" [ ipAddress="192.168.x.x", password="xxx", user="xxx" ] {
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 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" ]
}
```
demo.items:
```java
Switch Outlet1 "Switchable outlet" { channel="avmfritz:FRITZ_DECT_200:1:xxxxxxxxxxxx:outlet" }
Number:Temperature Temperature1 "Current measured temperature [%.1f %unit%]" { channel="avmfritz:FRITZ_DECT_200:1:xxxxxxxxxxxx:temperature" }
Number:Energy Energy1 "Accumulated energy consumption [%.3f kWh]" { channel="avmfritz:FRITZ_DECT_200:1:xxxxxxxxxxxx:energy" }
Number:Power Power1 "Current power consumption [%.2f %unit%]" { channel="avmfritz:FRITZ_DECT_200:1:xxxxxxxxxxxx:power" }
Switch Outlet2 "Switchable outlet" { channel="avmfritz:FRITZ_Powerline_546E:1:yy_yy_yy_yy_yy_yy:outlet" }
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:Temperature FRITZ_GROUP_HEATINGSetTemperature "Group temperature set point [%.1f %unit%]" { channel="avmfritz:FRITZ_GROUP_HEATING:1:AA_AA_AA_900:set_temp" }
Switch Outlet3 "Group switch" { channel="avmfritz:FRITZ_GROUP_SWITCH:1:BB_BB_BB_900:outlet" }
```
demo.sitemap:
```perl
sitemap demo label="Main Menu" {
Frame label="FRITZ!DECT 200 switchable outlet" {
Switch item=Outlet1 icon="poweroutlet"
Text item=Temperature1 icon="temperature"
Text item=Energy1 icon="energy"
Text item=Power1 icon="energy"
}
Frame label="FRITZ!Powerline 546E switchable outlet" {
Switch item=Outlet2 icon="poweroutlet"
}
Frame "Comet DECT heating thermostat" {
Text item=COMETDECTTemperature 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"] icon="heating"
Switch item=COMETDECTBattery icon="lowbattery"
}
}
```

View File

@ -1,99 +0,0 @@
---
id: benqprojector
label: BenQ Projector
title: BenQ Projector - Bindings
type: binding
description: "This binding is designed to interface with BenQ projectors that have an RS232 interface on them that accepts the commands documented by BenQ [here](ftp://ftp.benq-eu.com/projector/benq_rs232_commands.pdf)."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.benqprojector/README.md
since: 1x
logo: images/addons/benqprojector.png
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# BenQ Projector Binding
This binding is designed to interface with BenQ projectors that have an RS232 interface on them that accepts the commands documented by BenQ [here](ftp://ftp.benq-eu.com/projector/benq_rs232_commands.pdf).
The binding has been tested with the following models:
* BenQ W1070
* BenQ W1080
## Status
This binding is current in Beta state with the following commands implemented:
| Command | Query | Set |Comments |
|-----------------------|:-----:|:----:|--------------------------------------------|
| Power |Y | Y | |
| Mute |Y | Y | |
| Volume |Y | Y | |
| Source |Y | Y | Can be returned as either a string or number |
| Lamp Time |Y | N | |
## Transports
The binding support transport using a TCP/IP to RS232 converter or via a direct RS232 interface.
[USR-TCP232-2](http://en.usr.cn/Ethernet-Module-T24/RS232-to-Ethernet-module.html) is a known working TCP/IP to RS232 converter.
## Binding Configuration
This binding can be configured in the file `services/benqprojector.cfg`.
| Property | Default | Required | Description |
|----------|---------|:--------:|-------------|
| mode | | Yes | controls how the projector can be reached. `serial` is for a directly connected RS232 serial interface while `network` is for using a TCP/IP to serial converter |
| deviceId | | Yes | if `mode` is `network`, value should be set to the `<hostname>:<port>` of the CP/IP to serial converter<br/>if `mode` is `serial`, value should be `<device>:<speed>`, where `<device>` is the name of the serial port device and `<speed>` is the bitrate (defaults to 57600 if not given) |
| refresh | | ? | Polling interval in milliseconds, for example 15000 (15 seconds) |
## Examples
items/yourbenq.items
```
Switch gf_lounge_multimedia_projectorPower "Projector Power" (gf_lounge, gf_multimedia) {benqprojector="power"}
Switch gf_lounge_multimedia_projectorMute "Projector Mute" (gf_lounge, gf_multimedia) {benqprojector="mute"}
Number gf_lounge_multimedia_projectorVol "Projector Volume [%d]" (gf_lounge, gf_multimedia) {benqprojector="volume", autoupdate="false"}
Number gf_lounge_multimedia_projectorSourceNum "Projector Source [MAP(ProjSourceNum.map):%s]" (gf_lounge, gf_multimedia) {benqprojector="source_number"}
String gf_lounge_multimedia_projectorSourceString "Projector Source [%s]" (gf_lounge, gf_multimedia) {benqprojector="source_string"}
Number gf_lounge_multimedia_projectorLamp "Projector Lamp [%d hours]" (gf_lounge, gf_multimedia) {benqprojector="lamp_hours"}
```
transform/ProjSourceNum.map
```
0=Computer
1=Computer 2
2=Component
3=DVI-A
4=DVI-D
5=Sky TV (HDMI)
6=Chromecast (HDMI2)
7=Composite
8=S-Video
9=Network
10=USB Display
11=USB Reader
-=Unknown
undefined=Unknown
```
sitemap/yourbenq.sitemap
```
Frame label="Media" {
Switch item=gf_lounge_multimedia_projectorPower
}
Frame label="Projector" visibility=[gf_lounge_multimedia_projectorPower==ON] {
Selection item=gf_lounge_multimedia_projectorSourceNum label="Projector Source" mappings=[5="Sky TV", 6="Chromecast"] visibility=[gf_lounge_multimedia_projectorPower==ON]
Switch item=gf_lounge_multimedia_projectorMute visibility=[gf_lounge_multimedia_projectorPower==ON]
Setpoint item=gf_lounge_multimedia_projectorVol step=1 minValue=0 maxValue=10 visibility=[gf_lounge_multimedia_projectorPower==ON]
}
```

View File

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

View File

@ -1,47 +0,0 @@
---
id: bluetooth.bluez
label: Bluetooth BlueZ Adapter
title: Bluetooth BlueZ Adapter - Bindings
type: binding
description: "This extension supports Bluetooth access via BlueZ on Linux (ARMv6hf)."
since: 2x
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Bluetooth BlueZ Adapter
This extension supports Bluetooth access via BlueZ on Linux (ARMv6hf).
Please note that at least BlueZ 5.43 is required, while 5.48 or above are [not (yet) supported](https://github.com/intel-iot-devkit/tinyb/issues/131) either.
Also note that the OS user needs to be a member of the "bluetooth" group of Linux in order to have the rights to access the BlueZ stack.
## Supported Things
It defines the following bridge type:
| Bridge Type ID | Description |
|----------------|---------------------------------------------------------------------------|
| bluez | A Bluetooth adapter that is supported by BlueZ |
## Discovery
If BlueZ is enabled and can be accessed, all available adapters are automatically discovered.
## Bridge Configuration
The bluez bridge requires the configuration parameter `address`, which corresponds to the Bluetooth address of the adapter (in format "XX:XX:XX:XX:XX:XX").
Additionally, the parameter `discovery` can be set to true/false.When set to true, any Bluetooth device of which broadcasts are received is added to the Inbox.
## Example
This is how an BlueZ adapter can be configured textually in a *.things file:
```
Bridge bluetooth:bluez:hci0 [ address="12:34:56:78:90:AB", discovery=false ]
```

View File

@ -1,68 +0,0 @@
---
id: bluetooth.blukii
label: Blukii
title: Blukii - Bindings
type: binding
description: "This extension adds support for [Blukii](http://www.blukii.com/) Sensor Beacons."
since: 2x
logo: images/addons/bluetooth.blukii.png
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Blukii
This extension adds support for [Blukii](http://www.blukii.com/) Sensor Beacons.
## Supported Things
Only a single thing type is added by this extension:
| Thing Type ID | Description |
|---------------|-------------------------------------------------|
| blukii_beacon | A Blukii Sensor Beacon |
## Discovery
As any other Bluetooth device, Blukii Beacons are discovered automatically by the corresponding bridge.
## Thing Configuration
There is only a single configuration parameter `address`, which corresponds to the Bluetooth address of the device (in format "XX:XX:XX:XX:XX:XX").
## Channels
A Blukii Smart Beacon has the following channels:
| Channel ID | Item Type | Description |
|---------------|------------------------|------------------------------------|
| temperature | Number:Temperature | The measured temperature |
| humidity | Number:Dimensionless | The measured humidity |
| pressure | Number:Pressure | The measured air pressure |
| luminance | Number:Illuminance | The measured brightness |
| tiltx | Number:Angle | The tilt (x-axis) |
| titly | Number:Angle | The tilt (y-axis) |
| tiltz | Number:Angle | The tilt (z-axis) |
## Example
demo.things:
```
bluetooth:blukii:hci0:beacon "Blukii Sensor Beacon" (bluetooth:bluez:hci0) [ address="12:34:56:78:9A:BC" ]
```
demo.items:
```
Number:Temperature temperature "Room Temperature [%.1f %unit%]" { channel="bluetooth:blukii:hci0:beacon:temperature" }
Number:Dimensionless humidity "Humidity [%.0f %unit%]" { channel="bluetooth:blukii:hci0:beacon:humidity" }
Number:Pressure pressure "Air Pressure [%.0f %unit%]" { channel="bluetooth:blukii:hci0:beacon:pressure" }
Number:Illuminance luminance "Luminance [%.0f %unit%]" { channel="bluetooth:blukii:hci0:beacon:luminance" }
Number:Angle tiltX "Tilt (X-Axis) [%.0f %unit%]" { channel="bluetooth:blukii:hci0:beacon:tiltx" }
Number:Angle tiltY "Tilt (Y-Axis) [%.0f %unit%]" { channel="bluetooth:blukii:hci0:beacon:tilty" }
Number:Angle tiltZ "Tilt (Z-Axis) [%.0f %unit%]" { channel="bluetooth:blukii:hci0:beacon:tiltz" }
```

View File

@ -1,95 +0,0 @@
---
id: bluetooth
label: Bluetooth
title: Bluetooth - Bindings
type: binding
description: "This binding provides support for generic Bluetooth devices."
since: 2x
logo: images/addons/bluetooth.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Bluetooth Binding
This binding provides support for generic Bluetooth devices.
It has the following extensions:
<!--list-subs-->
## Bridges
In order to function, this binding requires a Bluetoooth adapter to be present, which handles the wireless communication.
As there is no standard in Bluetooth for such dongles resp. chips, different adapters require a different implementation.
This is why the Bluetooth binding itself does not come with any bridge handlers for such adapters itself, but instead is extensible by additional bundles which can implement support for a specific adapter.
For Linux, there exists a special bundle which provides a Bluetooth bridge that talks to BlueZ.
This should be the best choice for any Linux-based single board computers like e.g. the Raspberry Pi.
## Supported Things
Two thing types are supported by this binding:
| Thing Type ID | Description |
|---------------|---------------------------------------------------------------------------------------------------------|
| beacon | A Bluetooth device that is not connected, but only broadcasts annoucements. |
| connected | A Bluetooth device that allows a direct connection and which provides specific services when connected. |
## Discovery
Discovery is performed through the Bluetooth bridge.
Normally, any broadcasting Bluetooth device can be uniquely identified and thus a bridge can create an inbox result for it.
As this might lead to a huge list of devices, bridges usually also offer a way to deactivate this behavior.
## Thing Configuration
Both thing types only require a single configuration parameter `address`, which corresponds to the Bluetooth address of the device (in format "XX:XX:XX:XX:XX:XX").
## Channels
Every Bluetooth thing has the following channel:
| Channel ID | Item Type | Description |
|------------|-----------|-----------------------------------------------------------------------------------------------------|
| rssi | Number | The "Received Signal Strength Indicator", the [RSSI](https://blog.bluetooth.com/proximity-and-rssi) |
`connected` Things are dynamically queried for their services and if they support certain standard GATT characteristics, the appropriate channels are automatically added as well:
| Channel ID | Item Type | Description |
|---------------|-----------|-----------------------------------------------------------------|
| battery_level | Number | The device's battery level in percent |
## Full Example
demo.things (assuming you have a Bluetooth bridge with the ID `bluetooth:bluez:hci0`):
```
bluetooth:beacon:hci0:b1 "BLE Beacon" (bluetooth:bluez:hci0) [ address="68:64:4C:14:FC:C4" ]
```
demo.items:
```
Number Beacon_RSSI "My Beacon [%.0f]" { channel="bluetooth:beacon:hci0:b1:rssi" }
```
demo.sitemap:
```
sitemap demo label="Main Menu"
{
Frame {
Text item=Beacon_RSSI
}
}
```
See also the following extensions for further examples:
<!--list-subs-->

View File

@ -1,181 +0,0 @@
---
id: bluetooth
label: Bluetooth
title: Bluetooth - Bindings
type: binding
description: "The Bluetooth binding is used to connect openHAB with a Bluetooth device. With it, you can make openHAB react to Bluetooth devices that come in range of your network."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.bluetooth/README.md
since: 1x
logo: images/addons/bluetooth.png
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Bluetooth Binding
The Bluetooth binding is used to connect openHAB with a Bluetooth device. With it, you can make openHAB react to Bluetooth devices that come in range of your network.
The Bluetooth binding supports three different types of openHAB items: Switches, Numbers and Strings.
- Switches can be bound to a certain Bluetooth device address so that they are switched on if the device is in range and off otherwise.
- Number items simply determine how many devices are currently in range.
- String items are updated with a comma-separated list of device names that are in range.
For each item you can configure whether to observe: only paired, unpaired or all devices.
## Restrictions
The binding is not working for Windows 8.1 (both 32 and 64 bit) or MAC OS X (Yosemite). Please see [Platform Support](#platform-support) below for certain considerations.
## Binding Configuration
This binding requires no specific configuration.
## Item Configuration
The syntax for the Bluetooth binding configuration string is below. The use of `[square brackets]` in the syntax indicates optional sections, and the vertical bar (`|`) means choose one option on either side of the vertical bar. Do not enter `[`, `]` or `|` in the actual item configuration.
For Switch items:
```
bluetooth="<deviceAddress>[!]"
```
where `<deviceAddress>` is the technical address of the device, e.g. `EC935BD417C5`; the optional exclamation mark defines whether the device needs to be paired with the host.
For Number and String items:
```
bluetooth="[*|!|?]"
```
where `!` mean to only observe paired devices, `?` means to only observe unpaired devices and `*` means to accept any device.
***
* Switch items: will receive an ON / OFF update on the bus
* String items: will be sent a comma separated list of all device names
* Number items will show the number of bluetooth devices in range
If a friendly name cannot be resolved for a device, its address will be used instead as its name when listing it on a String item.
## Examples
```
bluetooth="EC935BD417C5"
bluetooth="EC935BD417C5!"
bluetooth="*"
bluetooth="!"
bluetooth="?"
```
As a result, your lines in the items file might look like follows:
```
Switch MyMobile { bluetooth="EC935BD417C5!" }
String UnknownDevices "Unknown devices in range: [%s]" { bluetooth="?" }
Number NoOfPairedDevices "Paired devices in range: [%d]" { bluetooth="!" }
```
## Plaform Support
* To access the local bluetooth device, the binding uses [BlueCove](http://bluecove.org/).
* BlueCove uses native libraries (JNI) to access the platform specific bluetooth stack.
* There are prebuilt native libraries for Windows and Mac OS X (unconfirmed).
* The native libraries need to be built for Linux as described below.
### Linux Installation
To access the bluetooth stack on linux systems, we have to build the native libraries.
We have to replace the bluecove stuff that is bundled with the mainline bluetooth binding with the new one, and then rebuild the binding for our target system (so the correct stuff comes with it).
#### 1. Build BlueCove
_Install necessary packages to build:_ `base-devel subversion maven bluez-libs`
(example for [ARM] Arch Linux).
```shell
pacman --needed -S base-devel subversion maven bluez-libs
```
_Checkout BlueCove repository_ (tested with v2.1.0)
```shell
svn checkout https://bluecove.googlecode.com/svn/tags/2.1.0/
```
_Enter the directory and edit the pom.xml file_ - disable some modules we don't need (we are only interested in bluecove and bluecove-gpl -- I did not check, if bluevoce-site-skin is necessary for bluecove build).
```xml
<modules>
<module>bluecove-site-skin</module>
<module>bluecove</module>
<!--
<module>bluecove-emu</module>
<module>bluecove-tests</module>
<module>bluecove-emu-gui</module>
-->
<module>bluecove-gpl</module>
<!--
<module>bluecove-bluez</module>
<module>bluecove-examples</module>
-->
</modules>
```
_Start build using maven._
```shell
mvn
```
The build will fail on `bluecove-gpl`, caused by missing header file(s).
Don't know why the header files are not generated at the build process, but that problem should be reported upstream.
_Generate (missing) JNI header files_
```shell
javah -d ./bluecove-gpl/src/main/c/ \
-cp ./bluecove-gpl/target/classes:./bluecove/target/classes \
com.intel.bluetooth.BluetoothStackBlueZ \
com.intel.bluetooth.BluetoothStackBlueZConsts \
com.intel.bluetooth.BluetoothStackBlueZNativeTests
```
_Resume build_
```
mvn -rf :bluecove
```
Necessary build results:
```shell
./bluecove/target/bluecove-2.1.0.jar
./bluecove-gpl/target/bluecove-gpl-2.1.0.jar
```
#### 2. Adjust binding dependencies
This could be done using different ways, e.g. you could use the Eclipse IDE.
* open META-INF/MANIFEST.MF
* Change "Runtime", "Classpath" (replace the old bluecove jar with the two new ones)
* In "Build" the "Binary Build" should be changed automatically, if you change the runtime classpath.
* Check, if "MANIFEST.MF" and "build.properties" was changed.
* Save file
#### 3. Build openHAB Bluetooth binding
* Delete the bluecove jar file in the lib subdirectory of the binding.
* Add the two build jar files (bluecove-2.1.0.jar and bluecove-gpl-2.1.0.jar) to the lib subdirectory of the binding.
* Be sure binding dependencies are adjusted (step 2 above)
* Clean and rebuild the binding.
The binding will work now on the target system, the bluecove jar (and the native libraries) are generated.

View File

@ -1,83 +0,0 @@
---
id: boschindego
label: Bosch Indego
title: Bosch Indego - Bindings
type: binding
description: "This is the Binding for Bosch Indego Connect lawn mowers."
since: 2x
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Bosch Indego Binding
This is the Binding for Bosch Indego Connect lawn mowers.
Thank´s to zazaz-de who found out how the API works. His [Java Library](https://github.com/zazaz-de/iot-device-bosch-indego-controller) made this Binding possible.
## Configuration of the Thing
Currently the binding supports ***indego*** mowers as a thing type with this parameters:
| parameter | datatype | required |
|-----------|----------|--------------------------------|
| username | String | yes |
| password | String | yes |
| refresh | integer | no (default: 180, minimum: 60) |
The refresh interval is specified in seconds.
A possible entry in your thing file could be:
```java
boschindego:indego:lawnmower [username="mail@example.com", password="idontneedtocutthelawnagain", refresh=120]
```
## Channels
| item-type | description | |
|--------------|-------------|-------------------------------------------------------------------------------------------------------------------------------------|
| state | Number | You can send commands to this channel to control the mower and read the simplified state from it (1=mow, 2=return to dock, 3=pause) |
| errorcode | Number | Errorcode of the mower (0=no error, readonly) |
| statecode | Number | Detailed state of the mower. I included English and German map-files to read the state easier (readonly) |
| textualstate | String | State as a text. (readonly) |
| ready | Number | Shows if the mower is ready to mow (1=ready, 0=not ready, readonly) |
| mowed | Dimmer | Cut grass in percent (readonly) |
For example you can use this sitemap entry to control the mower manually:
```perl
Switch item=indegostate mappings=[ 1="Mow", 2="Return",3="Pause" ]
```
## Meaning of the numeric statecodes
You can use this as .map file
```text
0=Reading status
257=Charging
258=Docked
259=Docked - Software update
260=Docked
261=Docked
262=Docked - Loading map
263=Docked - Saving map
513=Mowing
514=Relocalising
515=Loading map
516=Learning lawn
517=Paused
518=Border cut
519=Idle in lawn
769=Returning to Dock
770=Returning to Dock
771=Returning to Dock - Battery low
772=Returning to dock - Calendar timeslot ended
773=Returning to dock - Battery temp range
774=Returning to dock
775=Returning to dock - Lawn complete
776=Returning to dock - Relocalising
```

View File

@ -1,157 +0,0 @@
---
id: bosesoundtouch
label: Bose SoundTouch
title: Bose SoundTouch - Bindings
type: binding
description: "This binding supports the Bose SoundTouch multiroom system."
since: 2x
logo: images/addons/bosesoundtouch.png
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")|
| appKey | String | No | An authorization key used to identify the client application |
The required properties 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.
The authorization key is used to identify the client application when using the Notification API. It must be requested from the developer portal.
## 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 |
| notificationsound | String | Play a notification sound by a given URI |
| 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) |
The *notificationsound* channel has the following optional configuration parameters:
- notificationVolume - Desired volume level while playing the notification, it must be between 10 and 70 (inclusive). A value outside this range will result in an error and not play the notification.
- notificationService - The service providing the notification
- notificationReason - The reason for the notification
- notificationMessage - Further details about the notification
The texts for the notification service, reason and message appear on the device display (when available) and the SoundTouch application screen.
Upon completion of the notification, the speaker volume returns to its original value. If not present, the notification will play at the existing volume level.
## 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

@ -1,273 +0,0 @@
---
id: bticino
label: Bticino
title: Bticino - Bindings
type: binding
description: "The openHAB Bticino binding allows openHAB to connect to Bticino My Home Automation installations by OpenWebNet protocol."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.bticino/README.md
since: 1x
logo: images/addons/bticino.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Bticino Binding
The openHAB Bticino binding allows openHAB to connect to Bticino My Home Automation installations by OpenWebNet protocol.
For example you can switching lights on and off, activating your roller shutters etc.
## Prerequisites
To access your Bticino My Home bus you need an IP gateway (like e.g. the [MH200N](http://www.homesystems-legrandgroup.com/BtHomeSystems/productDetail.action?lang=EN&productId=016), [F453](http://www.homesystems-legrandgroup.com/BtHomeSystems/productDetail.action?productId=027), [F454](http://www.homesystems-legrandgroup.com/BtHomeSystems/productDetail.action?productId=006)).
## Binding Configuration
This binding can be configured in the file `services/bticino.cfg`.
| Property | Default | Required | Description |
|----------|---------|:--------:|-------------|
| webserver.host | | Yes | OpenWebNet gateway IP address / Hostname |
| webserver.port | 20000 | No | OpenWebNet gateway port |
| webserver.passwd | 12345 | No | OpenWebNet gateway password |
| 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:
```
webserver.host=192.168.1.35
webserver.rescan_secs=3600
```
## Item Configuration
The syntax for the Bticino binding configuration string is explained here:
```
bticino="if=webserver;who=<who>;what=<what>;where=<where>"
```
where `<who>` is from the following table:
| Code | Description |
|-------|-------------|
| 0 | Scenarios |
| **1** | Lightning |
| **2** | Automation |
| 3 | Load control |
| **4** | Temperature Control |
| 5 | Alarm |
| 6 | VDES |
| 13 | Gateway Management |
| **15** | CEN commands |
| 16/22 | Sound diffusion |
| 17 | MH200N scenarios |
| 18 | Energy management |
| 25 | CEN plus / scenarios plus / dry contacts |
| 1001 | Automation diagnostic |
| 1004 | Thermoregulation diagnostic |
| 1013 | Device diagnostic |
At the moment only 2 (Automation), 1 (Lightning), 15 (Basic & Evolved CEN) and part of the 4 (Temperature Control) are supported.
For more details refer to the official document [OpenWebNet Introduction](http://www.myopen-legrandgroup.com/resources/own_protocol/m/own_documents/16.aspx).
## Examples
items/yourbticino.items
```
Group Entrance
Group Corridor
Group Living
Group Plugs
Group RollerUpShutters
Group Heating
Group HeatingActor
// Sceneries
Switch Movie_Scenery "Movie scenery"
// Plugs
Switch Plug_AV_Amplifier "Audio Video amplifier" (Living, Plugs) <socket> {bticino="if=webserver;who=1;what=0;where=1"}
Switch Plug_Subwoofer "Subwoofer" (Living, Plugs) <socket> {bticino="if=webserver;who=1;what=0;where=2"}
// Lights
Switch Spotlights_TV "TV spotlights" (Living, Lights) {bticino="if=webserver;who=1;what=0;where=35"}
Switch Corridor_Warning "Corridor warning light" (Corridor, Lights) {bticino="if=webserver;who=1;what=0;where=36"}
// CEN example
Switch Doorbell_Light "Doorbell courtesy light" (Entrance, Lights) {bticino="if=webserver;who=15;what=01;where=98"}
// Rollershutters
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"}
//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
```
sitemap yourbticino label="Main panel" {
Frame label="Rooms" {
Group item=Entrance label="Entrance"
Group item=Living label="Living room"
}
Frame label="Sceneries" {
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
}
}
```
rules/yourbticino.rules
```
// Movie scenery management
rule "Movie scenery"
when
Item Movie_Scenery received command
then
if (receivedCommand == ON) {
sendCommand(Plug_AV_Amplifier, ON)
sendCommand(Plug_Subwoofer, ON)
sendCommand(Spotlights_TV, ON)
sendCommand(RollUpShutter_1, DOWN)
sendCommand(RollUpShutter_2, DOWN)
} else if (receivedCommand == OFF) {
sendCommand(Plug_Subwoofer, OFF)
sendCommand(Plug_AV_Amplifier, OFF)
sendCommand(Spotlights_TV, ON)
sendCommand(RollUpShutter_1, UP)
sendCommand(RollUpShutter_2, UP)
}
end
// Doorbell ringer light
rule "Doorbell ringer"
when
Item Doorbell_Light received update
then
if (Doorbell_Light.state == ON) {
var Number idx = 0
// Number of rings
while (idx < 5) {
sendCommand(Corridor_Warning, ON)
Thread::sleep(1500)
sendCommand(Corridor_Warning, OFF)
Thread::sleep(1500)
idx = idx + 1
}
}
end
```

View File

@ -1,251 +0,0 @@
---
id: caldav-command
label: CalDAV Command
title: CalDAV Command - Bindings
type: binding
description: "This binding can be used to connect through the CalDAV Interface to calendars."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.caldav-command/README.md
since: 1x
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# CalDAV Command Binding
This binding can be used to connect through the CalDAV Interface to calendars.
First of all you need to add the org.openhab.io.caldav-version.jar to the addons folder.
**Newest**
Newest Version can be downloaded from the build-agent
openhab.cfg
* `caldavio:<calendar-id>:url=`
* `caldavio:<calendar-id>:username=`
* `caldavio:<calendar-id>:password=`
* `caldavio:<calendar-id>:reloadInterval=<minutes>`
* `caldavio:<calendar-id>:preloadTime=<minutes>`
* `caldavio:<calendar-id>:historicLoadTime=<minutes>`
* `caldavio:<calendar-id>:disableCertificateVerification=<true|false>`
* `caldavio:<calendar-id>:charset=<well formed charset name>`
* `caldavio:timeZone=<Timezone>`
**Restrictions**
* The calendar-id must be just upper- and lowercase characters. (e. g. private or work, something like 1 or private-home is not allowed)
* disableCertificateVerification can just be set to true (default is false) if ssl is used.
* timeZone must just be used if the local timezone of the pc is not the correct one. E. g. if you are living in Berlin and your calendar timezone is Berlin and your local pc timezone is Berlin you must not define this setting
* '' for item configurations are optional (eventNr:1 and eventNr:'1' is the same). I prefer to use ''
### Note for openHAB 2
The CalDAV binding is compatible with openHAB 2 just like any other openHAB 1.x binding. There is currently just one bug in the way the configuration file is parsed. Create the configuration file `caldavio.cfg` with the additional prefix `caldavio:`. Do the same for `caldavCommand.cfg` and `caldavCommandPersonal.cfg`.
For more details see the [discussion here](https://github.com/openhab/openhab/issues/4074#issuecomment-202737544).
***
# CalDAV Command
Binding file: org.openhab.binding.caldav-command-version.jar
Used to execute commands through an event, triggered at the start or the end of an event.
The event summary is free selectable. The event description must fullfill special syntax.
Syntax is `<BEGIN|END>:<Item-Name>:<Command>`.
Each item trigger must be a single line without linebreaks. Every line which starts with "BEGIN" will be executed at the begin of the event. Each line with an "END" will be executed at the end of the event. You can define multiple lines, which must not be ordered. For example:
<pre>BEGIN:Heater_Livingroom:22
BEGIN:Heater_Corridor:22
END:Heater_Livingroom:16
END:Heater_Corridor:16
END:Notification_Dummy:Heizung heruntergefahren</pre>
Additionaly you can define an item to listen to upcoming changes of an item (which will be triggered through an event). Two types are available the command which will be set and the trigger time.
Syntax is `caldavCommand="itemName:<Item-Name to listen to> type:<VALUE|DATE>"`
Furthermore a switch can be defined to disable the automatic execution (through calendar) of an item.
Syntax is `caldavCommand="itemName:<Item-Name to listen to> type:<DISABLE>"`
openhab.cfg
`caldavCommand:readCalendars=<calendar-id>` (multiple calendars can be seperated by commas)
## Description of type
* VALUE: the value which will send to the command (can be of any type, depends on command in event and accepted commands of item)
* DATE: the time on which the event occurs (item type: DateTime)
* DISABLE: can turn off the automatic execution of the given item (item type: Switch)
## Default item
Since 1.9.0, the CalDAV Command binding also supports a default item which may optionally be added to openhab.cfg:
<pre>caldavCommand:defaultItemOnBegin=&lt;item&gt;</pre>
If the command calendar contains items whose description does not follow the `BEGIN/END:<item>:<value>` pattern AND a default item is specified, then the respective lines are interpreted as `BEGIN:<defaultItemOnBegin>:<line>`
This is really nice to use in combination with a rule such as used for [voice control](https://github.com/openhab/openhab/wiki/Controlling-openHAB-with-your-voice) - set the default item to: `caldavCommand:defaultItemOnBegin=VoiceCommand`
Then you can use the very same logic of your voice commands also in your calendar events.
Depending on your rule implementation, it is possible to use event entries like these:
* "Swtich on light in kitchen"
* "Switch off radio"
* "Close roller shutter on first floor" etc.
***
# CalDAV Personal
Binding file: org.openhab.binding.caldav-personal-version.jar
* Used to detect presence through calendar events.
* Used to show upcoming/active events in openhab.
### openhab.cfg
* `caldavPersonal:usedCalendars=<calendar-id>` (multiple calendars can be seperated by commas)
* `caldavPersonal:homeIdentifiers=<values seperated by commans>` (if one of these identifiers can be found inside the place of the event, this event will not be used for presence)
### items
* `caldavPersonal="calendar:'<calendar-ids, comma separated>' type:'<UPCOMING|ACTIVE|EVENT>' eventNr:'<event-nr, first one is 1>' value:'<NAME|DESCRIPTION|PLACE|START|END|TIME>"'`
* `caldavPersonal="calendar:'<calendar-ids>' type:'PRESENCE'" (type must be Switch)`
## filtering
You've got the option to show just specific events.
* `filter-name:'<regular expression>'`
* `filter-category:'<categories, comma separated>'` (your caldav event must contain at least ALL the categories you specify here)
* `filter-category-any:'<categories, comma separated>'` (your caldav event must at least contain one of the categories you specify here)
### Example for filtering
* just showing upcoming free days
`caldavPersonal="calendar:'robert,common' type:'EVENT' eventNr:'1' value:'START' filter-name:'Gleittag|Urlaub|Frei'"`
* just showing events for the next garbage pick-up
`caldavPersonal="calendar:'common' type:'EVENT' eventNr:'1' value:'START' filter-category:'Müllabholung'"`
* item config showing the next event in which we are sending a heat event to the bathroom :
`DateTime bathroom_NextEventDate "bathriil next evt. [%1$tT, %1$td.%1$tm.%1$tY]" <calendar> { caldavPersonal="calendar:chauffagecmd type:UPCOMING eventNr:1 value:'START' filter-category-any:'bathroom,wholefloor'"}`
==> if you have one event at 8pm with 1 category "bathroom" (setting heater on), and another event at 9pm with category "wholefloor" (setting heaterS on), then this item will match both events.
## Description of type
* UPCOMING: the next upcoming events, not the active ones
* ACTIVE: events which are currently on (internally used for presence detection)
* EVENT: all events, active as well as upcoming
## Description of value
* NAME: Name of the event (itemtype: String)
* DESCRIPTION: Event content (itemtype: String)
* PLACE: Place of event (itemtype: String)
* START: start time (itemtype: DateTime)
* END: end time (itemtype: DateTime)
* TIME: start/end time (itemtype: String)
* NAMEANDTIME: name and start- to end time (itemtype:String)
# Logging
* `<logger name="org.openhab.binding.caldav_personal" level="TRACE"/>`
* `<logger name="org.openhab.binding.caldav_command" level="TRACE"/>`
* `<logger name="org.openhab.io.caldav" level="TRACE"/>`
# Tested calDAV Servers with examples
As far as i know are these
## ownCloud (my reference implementation)
caldavio:openhab_tasks:url=http://server.de/owncloud/remote.php/caldav/calendars/openHAB/tasks
caldavio:openhab_tasks:username=username
caldavio:openhab_tasks:password=password
caldavio:openhab_tasks:reloadInterval=10
caldavio:openhab_tasks:preloadTime=20000
## baikal
caldavio:kalendername:url=https://server_ip/baikal/cal.php/calendars/username/kalender_id
caldavio:kalendername:username=username
caldavio:kalendername:password=password
caldavio:kalendername:reloadInterval=10
caldavio:kalendername:preloadTime=20000
## google (performance issue, because the timestamp of files is not correct)
caldavio:openhab_tasks:url=https://www.google.com/calendar/dav/email@gmail.com/events
caldavio:openhab_tasks:username=email@gmail.com
caldavio:openhab_tasks:password=password
caldavio:openhab_tasks:reloadInterval=10
caldavio:openhab_tasks:preloadTime=20000
## (zarafa?)
## Locate URL
This site may help to find the Calendar URL (i.e. Google Shared Calendars):
http://www.ict4g.net/adolfo/notes/2015/07/04/determingurlofcaldav.html
## Google 2-factor authentication
If 2-factor authentication has been enabled, create an application password using https://support.google.com/accounts/answer/185833?hl=en Use this password instead of your account password.
# Persistence
caldav-persistence:calendarId=history
caldav-persistence:duration=10
caldav-persistence:singleEvents=false
Saves the events to the calendar named history with a length of 10 minutes
# Presence Simulation
You can simulate presence with this binding.
To do this you have to
* enable the caldav-command binding
* enbale the caldav-persistence binding
* configure the Items you need for simulation for caldav persistence
* configure the caldav persistence to singleEvents=true and an offset you want. One week or two make sense.
* keep openHAB running for a week or more and the persistent events will occur again in the future regarding the offset you set up
# Known Problems (or limitations)
* If you are using multiple calendars you have to set the thread count for quartz to this calendar amount or higher otherwise some calendars will not be loaded.
* You have to set the preloadInterval to a higher or equal value as the recurring events in the calendar exists.
# Example configuration
There are three calendars defined. One of them is used just for executing commands in openhab (Command-kalender). The others are used to show the upcoming events (Müllkalender, Dienstlicher/privater Kalender).
In every case, the binding org.openhab.io.caldav-<version>.jar is needed. For executing commands the additional binding org.openhab.binding.caldav-command-<version>.jar is needed. For upcoming events or presence simulation the binding org.openhab.binding.caldav-personal-<version>.jar needs to be included.
openhab.cfg
################################ CalDav Binding #######################################
#
#caldavio:<calendar-id>:url=
#caldavio:<calendar-id>:username=
#caldavio:<calendar-id>:password=
#caldavio:<calendar-id>:reloadInterval=<minutes>
#caldavio:<calendar-id>:preloadTime=<minutes>
#caldavio:timeZone=<e. g. Europe/Berlin>
# Dienstlicher/privater Kalender
caldavio:dienstlich:url=http://192.168.2.5/owncloud/remote.php/caldav/calendars/user/pers%C3%B6nlich
caldavio:dienstlich:username=user
caldavio:dienstlich:password=password
caldavio:dienstlich:reloadInterval=60
caldavio:dienstlich:preloadTime=2880
caldavio:timeZone=Europe/Berlin
# Müllkalender
caldavio:muell:url=http://192.168.2.5/owncloud/remote.php/caldav/calendars/user/m%C3%BCll
caldavio:muell:username=user
caldavio:muell:password=password
caldavio:muell:reloadInterval=1440
caldavio:muell:preloadTime=2880
caldavio:timeZone=Europe/Berlin
# Command-kalender``
caldavio:command:url=http://192.168.2.5/owncloud/remote.php/caldav/calendars/user/command
caldavio:command:username=user
caldavio:command:password=password
caldavio:command:reloadInterval=10
caldavio:command:preloadTime=1440
caldavio:timeZone=Europe/Berlin
# Additionally needed binding: org.openhab.binding.caldav-command-<version>.jar
# used to execute commands by a triggered event
# multiple calendars (calerdar-id) can be seperated by commas
#caldavCommand:readCalendars=<calendar-id>
caldavCommand:readCalendars=command
# Additionally needed binding: org.openhab.binding.caldav-personal-<version>.jar
# used to record and simulate presence and to show upcoming/active events
# multiple calendars (calerdar-id) can be seperated by commas
#caldavPersonal:usedCalendars=<calendar-id>
caldavPersonal:usedCalendars=dienstlich,muell
# If one of these identifiers can be found inside the place of the event,
# this event will not be used for presence
#caldavPersonal:homeIdentifiers=<values seperated by commas>
The items-File:
String OfficeCalName0 "Termin jetzt [%s]" <calendar> { caldavPersonal="calendar:dienstlich type:ACTIVE eventNr:1 value:NAME" } //eventNr for concurrent events
DateTime OfficeCalTime0 "Beginn [%1$tT, %1$td.%1$tm.%1$tY]" <calendar> { caldavPersonal="calendar:dienstlich type:ACTIVE eventNr:1 value:START" } //eventNr for concurrent events
String OfficeCalName1 "nächster Termin [%s]" <calendar> { caldavPersonal="calendar:dienstlich type:UPCOMING eventNr:1 value:NAME" }
DateTime OfficeCalTime1 "Beginn [%1$tT, %1$td.%1$tm.%1$tY]" <calendar> { caldavPersonal="calendar:dienstlich type:UPCOMING eventNr:1 value:START" }
String OfficeCalName2 "übernächster Termin [%s]" <calendar> { caldavPersonal="calendar:dienstlich type:UPCOMING eventNr:2 value:NAME" }
DateTime OfficeCalTime2 "Beginn [%1$tT, %1$td.%1$tm.%1$tY]" <calendar> { caldavPersonal="calendar:dienstlich type:UPCOMING eventNr:2 value:START" }

View File

@ -1,250 +0,0 @@
---
id: caldav-personal
label: CalDAV Personal
title: CalDAV Personal - Bindings
type: binding
description: "This binding can be used to connect through the CalDAV Interface to calendars."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.caldav-personal/README.md
since: 1x
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# CalDAV Personal Binding
This binding can be used to connect through the CalDAV Interface to calendars.
First of all you need to add the org.openhab.io.caldav-version.jar to the addons folder.
**Newest**
Newest Version can be downloaded from the build-agent
openhab.cfg
* `caldavio:<calendar-id>:url=`
* `caldavio:<calendar-id>:username=`
* `caldavio:<calendar-id>:password=`
* `caldavio:<calendar-id>:reloadInterval=<minutes>`
* `caldavio:<calendar-id>:preloadTime=<minutes>`
* `caldavio:<calendar-id>:historicLoadTime=<minutes>`
* `caldavio:<calendar-id>:disableCertificateVerification=<true|false>`
* `caldavio:<calendar-id>:charset=<well formed charset name>`
* `caldavio:timeZone=<Timezone>`
**Restrictions**
* The calendar-id must be just upper- and lowercase characters. (e. g. private or work, something like 1 or private-home is not allowed)
* disableCertificateVerification can just be set to true (default is false) if ssl is used.
* timeZone must just be used if the local timezone of the pc is not the correct one. E. g. if you are living in Berlin and your calendar timezone is Berlin and your local pc timezone is Berlin you must not define this setting
* '' for item configurations are optional (eventNr:1 and eventNr:'1' is the same). I prefer to use ''
### Note for openHAB 2
The CalDAV binding is compatible with openHAB 2 just like any other openHAB 1.x binding. There is currently just one bug in the way the configuration file is parsed. Create the configuration file `caldavio.cfg` with the additional prefix `caldavio:`. Do the same for `caldavCommand.cfg` and `caldavCommandPersonal.cfg`.
For more details see the [discussion here](https://github.com/openhab/openhab/issues/4074#issuecomment-202737544).
***
# CalDAV Command
Binding file: org.openhab.binding.caldav-command-version.jar
Used to execute commands through an event, triggered at the start or the end of an event.
The event summary is free selectable. The event description must fullfill special syntax.
Syntax is `<BEGIN|END>:<Item-Name>:<Command>`.
Each item trigger must be a single line without linebreaks. Every line which starts with "BEGIN" will be executed at the begin of the event. Each line with an "END" will be executed at the end of the event. You can define multiple lines, which must not be ordered. For example:
<pre>BEGIN:Heater_Livingroom:22
BEGIN:Heater_Corridor:22
END:Heater_Livingroom:16
END:Heater_Corridor:16
END:Notification_Dummy:Heizung heruntergefahren</pre>
Additionaly you can define an item to listen to upcoming changes of an item (which will be triggered through an event). Two types are available the command which will be set and the trigger time.
Syntax is `caldavCommand="itemName:<Item-Name to listen to> type:<VALUE|DATE>"`
Furthermore a switch can be defined to disable the automatic execution (through calendar) of an item.
Syntax is `caldavCommand="itemName:<Item-Name to listen to> type:<DISABLE>"`
openhab.cfg
`caldavCommand:readCalendars=<calendar-id>` (multiple calendars can be seperated by commas)
## Description of type
* VALUE: the value which will send to the command (can be of any type, depends on command in event and accepted commands of item)
* DATE: the time on which the event occurs (item type: DateTime)
* DISABLE: can turn off the automatic execution of the given item (item type: Switch)
## Default item
Since 1.9.0, the CalDAV Command binding also supports a default item which may optionally be added to openhab.cfg:
<pre>caldavCommand:defaultItemOnBegin=&lt;item&gt;</pre>
If the command calendar contains items whose description does not follow the `BEGIN/END:<item>:<value>` pattern AND a default item is specified, then the respective lines are interpreted as `BEGIN:<defaultItemOnBegin>:<line>`
This is really nice to use in combination with a rule such as used for [voice control](https://github.com/openhab/openhab/wiki/Controlling-openHAB-with-your-voice) - set the default item to: `caldavCommand:defaultItemOnBegin=VoiceCommand`
Then you can use the very same logic of your voice commands also in your calendar events (which should also improve the [WAF](https://en.wikipedia.org/wiki/Wife_acceptance_factor) ;-)).
Depending on your rule implementation, it is possible to use event entries like these:
* "Swtich on light in kitchen"
* "Switch off radio"
* "Close roller shutter on first floor" etc.
***
# CalDAV Personal
Binding file: org.openhab.binding.caldav-personal-version.jar
* Used to detect presence through calendar events.
* Used to show upcoming/active events in openhab.
### openhab.cfg
* `caldavPersonal:usedCalendars=<calendar-id>` (multiple calendars can be seperated by commas)
* `caldavPersonal:homeIdentifiers=<values seperated by commans>` (if one of these identifiers can be found inside the place of the event, this event will not be used for presence)
### items
* `caldavPersonal="calendar:'<calendar-ids, comma separated>' type:'<UPCOMING|ACTIVE|EVENT>' eventNr:'<event-nr, first one is 1>' value:'<NAME|DESCRIPTION|PLACE|START|END|TIME>"'`
* `caldavPersonal="calendar:'<calendar-ids>' type:'PRESENCE'" (type must be Switch)`
## filtering
You've got the option to show just specific events.
* `filter-name:'<regular expression>'`
* `filter-category:'<categories, comma separated>'` (your caldav event must contain at least ALL the categories you specify here)
* `filter-category-any:'<categories, comma separated>'` (your caldav event must at least contain one of the categories you specify here)
### Example for filtering
* just showing upcoming free days
`caldavPersonal="calendar:'robert,common' type:'EVENT' eventNr:'1' value:'START' filter-name:'Gleittag|Urlaub|Frei'"`
* just showing events for the next garbage pick-up
`caldavPersonal="calendar:'common' type:'EVENT' eventNr:'1' value:'START' filter-category:'Müllabholung'"`
* item config showing the next event in which we are sending a heat event to the bathroom :
`DateTime bathroom_NextEventDate "bathriil next evt. [%1$tT, %1$td.%1$tm.%1$tY]" <calendar> { caldavPersonal="calendar:chauffagecmd type:UPCOMING eventNr:1 value:'START' filter-category-any:'bathroom,wholefloor'"}`
==> if you have one event at 8pm with 1 category "bathroom" (setting heater on), and another event at 9pm with category "wholefloor" (setting heaterS on), then this item will match both events.
## Description of type
* UPCOMING: the next upcoming events, not the active ones
* ACTIVE: events which are currently on (internally used for presence detection)
* EVENT: all events, active as well as upcoming
## Description of value
* NAME: Name of the event (itemtype: String)
* DESCRIPTION: Event content (itemtype: String)
* PLACE: Place of event (itemtype: String)
* START: start time (itemtype: DateTime)
* END: end time (itemtype: DateTime)
* TIME: start/end time (itemtype: String)
* NAMEANDTIME: name and start- to end time (itemtype:String)
# Logging
* `<logger name="org.openhab.binding.caldav_personal" level="TRACE"/>`
* `<logger name="org.openhab.binding.caldav_command" level="TRACE"/>`
* `<logger name="org.openhab.io.caldav" level="TRACE"/>`
# Tested calDAV Servers with examples
As far as i know are these
## ownCloud (my reference implementation)
caldavio:openhab_tasks:url=http://server.de/owncloud/remote.php/caldav/calendars/openHAB/tasks
caldavio:openhab_tasks:username=username
caldavio:openhab_tasks:password=password
caldavio:openhab_tasks:reloadInterval=10
caldavio:openhab_tasks:preloadTime=20000
## baikal
caldavio:kalendername:url=https://server_ip/baikal/cal.php/calendars/username/kalender_id
caldavio:kalendername:username=username
caldavio:kalendername:password=password
caldavio:kalendername:reloadInterval=10
caldavio:kalendername:preloadTime=20000
## google (performance issue, because the timestamp of files is not correct)
caldavio:openhab_tasks:url=https://www.google.com/calendar/dav/email@gmail.com/events
caldavio:openhab_tasks:username=email@gmail.com
caldavio:openhab_tasks:password=password
caldavio:openhab_tasks:reloadInterval=10
caldavio:openhab_tasks:preloadTime=20000
## (zarafa?)
## Locate URL
This site may help to find the Calendar URL (i.e. Google Shared Calendars):
http://www.ict4g.net/adolfo/notes/2015/07/04/determingurlofcaldav.html
## Google 2-factor authentication
If 2-factor authentication has been enabled, create an application password using https://support.google.com/accounts/answer/185833?hl=en Use this password instead of your account password.
# Persistence
caldav-persistence:calendarId=history
caldav-persistence:duration=10
caldav-persistence:singleEvents=false
Saves the events to the calendar named history with a length of 10 minutes
# Presence Simulation
You can simulate presence with this binding.
To do this you have to
* enable the caldav-command binding
* enbale the caldav-persistence binding
* configure the Items you need for simulation for caldav persistence
* configure the caldav persistence to singleEvents=true and an offset you want. One week or two make sense.
* keep openHAB running for a week or more and the persistent events will occur again in the future regarding the offset you set up
# Known Problems (or limitations)
* If you are using multiple calendars you have to set the thread count for quartz to this calendar amount or higher otherwise some calendars will not be loaded.
* You have to set the preloadInterval to a higher or equal value as the recurring events in the calendar exists.
# Example configuration
There are three calendars defined. One of them is used just for executing commands in openhab (Command-kalender). The others are used to show the upcoming events (Müllkalender, Dienstlicher/privater Kalender).
In every case, the binding org.openhab.io.caldav-<version>.jar is needed. For executing commands the additional binding org.openhab.binding.caldav-command-<version>.jar is needed. For upcoming events or presence simulation the binding org.openhab.binding.caldav-personal-<version>.jar needs to be included.
openhab.cfg
################################ CalDav Binding #######################################
#
#caldavio:<calendar-id>:url=
#caldavio:<calendar-id>:username=
#caldavio:<calendar-id>:password=
#caldavio:<calendar-id>:reloadInterval=<minutes>
#caldavio:<calendar-id>:preloadTime=<minutes>
#caldavio:timeZone=<e. g. Europe/Berlin>
# Dienstlicher/privater Kalender
caldavio:dienstlich:url=http://192.168.2.5/owncloud/remote.php/caldav/calendars/user/pers%C3%B6nlich
caldavio:dienstlich:username=user
caldavio:dienstlich:password=password
caldavio:dienstlich:reloadInterval=60
caldavio:dienstlich:preloadTime=2880
caldavio:timeZone=Europe/Berlin
# Müllkalender
caldavio:muell:url=http://192.168.2.5/owncloud/remote.php/caldav/calendars/user/m%C3%BCll
caldavio:muell:username=user
caldavio:muell:password=password
caldavio:muell:reloadInterval=1440
caldavio:muell:preloadTime=2880
caldavio:timeZone=Europe/Berlin
# Command-kalender``
caldavio:command:url=http://192.168.2.5/owncloud/remote.php/caldav/calendars/user/command
caldavio:command:username=user
caldavio:command:password=password
caldavio:command:reloadInterval=10
caldavio:command:preloadTime=1440
caldavio:timeZone=Europe/Berlin
# Additionally needed binding: org.openhab.binding.caldav-command-<version>.jar
# used to execute commands by a triggered event
# multiple calendars (calerdar-id) can be seperated by commas
#caldavCommand:readCalendars=<calendar-id>
caldavCommand:readCalendars=command
# Additionally needed binding: org.openhab.binding.caldav-personal-<version>.jar
# used to record and simulate presence and to show upcoming/active events
# multiple calendars (calerdar-id) can be seperated by commas
#caldavPersonal:usedCalendars=<calendar-id>
caldavPersonal:usedCalendars=dienstlich,muell
# If one of these identifiers can be found inside the place of the event,
# this event will not be used for presence
#caldavPersonal:homeIdentifiers=<values seperated by commas>
The items-File:
String OfficeCalName0 "Termin jetzt [%s]" <calendar> { caldavPersonal="calendar:dienstlich type:ACTIVE eventNr:1 value:NAME" } //eventNr for concurrent events
DateTime OfficeCalTime0 "Beginn [%1$tT, %1$td.%1$tm.%1$tY]" <calendar> { caldavPersonal="calendar:dienstlich type:ACTIVE eventNr:1 value:START" } //eventNr for concurrent events
String OfficeCalName1 "nächster Termin [%s]" <calendar> { caldavPersonal="calendar:dienstlich type:UPCOMING eventNr:1 value:NAME" }
DateTime OfficeCalTime1 "Beginn [%1$tT, %1$td.%1$tm.%1$tY]" <calendar> { caldavPersonal="calendar:dienstlich type:UPCOMING eventNr:1 value:START" }
String OfficeCalName2 "übernächster Termin [%s]" <calendar> { caldavPersonal="calendar:dienstlich type:UPCOMING eventNr:2 value:NAME" }
DateTime OfficeCalTime2 "Beginn [%1$tT, %1$td.%1$tm.%1$tY]" <calendar> { caldavPersonal="calendar:dienstlich type:UPCOMING eventNr:2 value:START" }

View File

@ -1,142 +0,0 @@
---
id: chromecast
label: Chromecast
title: Chromecast - Bindings
type: binding
description: "The binding integrates Google Chromecast streaming devices."
since: 2x
logo: images/addons/chromecast.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Chromecast Binding
The binding integrates Google Chromecast streaming devices.
It not only acts as a typical binding, but also registers each Chromecast device as an audio sink that can be used for playback.
In order play audio streams that are served from the runtime, the binding needs to know the url to access.
This can be configured on the binding level:
| Configuration Parameter | Type | Description |
|-------------------------|------|----------------------------------------------------------------------------------------------------|
| callbackUrl | text | optional Callback URL - url to use for playing notification sounds, e.g. <http://192.168.0.2:8080> |
## Supported Things
| Things | Description | Thing Type |
|--------------------|--------------------------------------------------------------------------------------|------------|
| Chromecast | Classic HDMI video Chromecasts and Google Homes | chromecast |
| Chromecast Audio | The Chromecast whichonly does audio streaming and offers a headphone jack | audio |
| Audio Group | A Chromecast audio group for multi-room audio defined via the Chromecast app | audiogroup |
## Discovery
Chromecast devices are discovered on the network using UPnP.
No authentication is required for accessing the devices on the network.
## Thing Configuration
Chromecast devices can also be manually added.
The only configuration parameter is the `ipAddress`.
## Channels
| Channel Type ID | Item Type | Description |
|-----------------|-----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| control | Player | Player control; currently only supports play/pause and does not correctly update, if the state changes on the device itself |
| volume | Dimmer | Control the volume, this is also updated if the volume is changed by another app |
| mute | Switch | Mute the audio |
| playuri | String | Can be used to tell the Chromecast to play media from a given url |
| appName | String | Name of currently running application |
| appId | String | ID of currently running application |
| idling | Switch | Read-only indication on weather Chromecast is on idle screen |
| statustext | String | |
| currentTime | Number | |
| duration | Number | Duration of current track (null if between tracks) |
| metadataType | String | Type of metadata, this indicates what metadata may be available. One of: GenericMediaMetadata, MovieMediaMetadata, TvShowMediaMetadata, MusicTrackMediaMetadata, PhotoMediaMetadata. |
| subtitle | String | (GenericMediaMetadata) Descriptive subtitle of the content |
| title | String | (GenericMediaMetadata) Descriptive title of the content |
| image | Image | (GenericMediaMetadata) Image for current media |
| imageSrc | String | (GenericMediaMetadata) URL of image for current media |
| releaseDate | DateTime | (GenericMediaMetadata) ISO 8601 date and time this content was released |
| albumArtist | String | (MusicTrackMediaMetadata) Name of the artist associated with the album featuring this track |
| albumName | String | (MusicTrackMediaMetadata) Album or collection from which this track is drawn |
| artist | String | (MusicTrackMediaMetadata) Name of the artist associated with the media track |
| composer | String | (MusicTrackMediaMetadata) Name of the composer associated with the media track |
| discNumber | Number | (MusicTrackMediaMetadata) Number of the volume (for example, a disc) of the album |
| trackNumber | Number | (MusicTrackMediaMetadata) Number of the track on the album |
| creationDate | DateTime | (PhotoMediaMetadata) ISO 8601 date and time this photograph was taken |
| locationName | String | (PhotoMediaMetadata) Verbal location where the photograph was taken; for example, "Madrid, Spain." |
| location | Point | (PhotoMediaMetadata) Geographical location of where the photograph was taken |
| broadcastDate | DateTime | (TvShowMediaMetadata) ISO 8601 date and time this episode was released |
| episodeNumber | Number | (TvShowMediaMetadata) Episode number (in the season) of the t.v. show |
| seasonNumber | Number | (TvShowMediaMetadata) Season number of the t.v. show |
| seriesTitle | String | (TvShowMediaMetadata) Descriptive title of the t.v. series |
| studio | String | (TvShowMediaMetadata) Studio which released the content |
## Full Example
services.cfg:
```java
binding.chromecast:callbackUrl=http://192.168.30.58:8080
```
demo.things:
```java
chromecast:audio:myCC [ ipAddress="192.168.xxx.xxx"]
```
demo.items:
```java
Dimmer Volume { channel="chromecast:audio:myCC:volume" }
Player Music { channel="chromecast:audio:myCC:control" }
```
demo.rules:
```javascript
rule "Turn on kitchen speakers when Chromecast starts playing music"
when
Item chromecast_chromecast_38e621581281c7675a777e7b474811ed_appId changed
then
logInfo("RULE.AUDIO", "Chromecast id changed!")
// 36061251 Pandora
// 2872939A Google Play Music
if (chromecast_chromecast_38e621581281c7675a777e7b474811ed_appId.state == "36061251"
|| chromecast_chromecast_38e621581281c7675a777e7b474811ed_appId.state == "2872939A") {
kitchen_audio_power.sendCommand(ON)
kitchen_audio_source.sendCommand(1)
}
end
```
demo.sitemap:
```perl
sitemap demo label="Main Menu" {
Frame {
Default item=Music
Slider item=Volume icon=soundvolume
}
}
```
```perl
sitemap chromecast label="Chromecasts" {
Frame label="Family Room: What's Playing" {
Image item=chromecast_chromecast_38e621581281c7675a777e7b474811ed_image
Text item=chromecast_chromecast_38e621581281c7675a777e7b474811ed_artist label="Artist [%s]"
Text item=chromecast_chromecast_38e621581281c7675a777e7b474811ed_title label="Title [%s]"
Text item=chromecast_chromecast_38e621581281c7675a777e7b474811ed_albumName label="Album [%s]"
}
}
```

View File

@ -1,108 +0,0 @@
---
id: cm11a
label: Cm11a (X10 controller)
title: Cm11a (X10 controller) - Bindings
type: binding
description: "The cm11a is a serial computer interface that allows a computer to control attached X10 modules."
since: 2x
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Cm11a (X10 controller) Binding
The cm11a is a serial computer interface that allows a computer to control attached X10 modules.
## Hardware - cm11a
The cm11a is an older device that communicates over a serial interface.
Most people connect it to a computer using a serial to USB adapter.
This binding has been tested with serial port and a serial to USB adapter.
X10 (and thus the cm11a) supports two types of modules.
The Switch (also called Appliance) module supports being turned on and off.
The Lamp module supports on, off, dim and bright.
In addition to controlling X10 modules the cm11a listens on the powerline and reports to the computer changes made to X10 modules via other controllers.
### Use of serial port
The binding opens the serial port when it starts and keeps it open until the binding is terminated.
If the serial port is disconnected a reconnect will be attempted the next time it is needed.
Therefore, other applications should not attempt to use the port when OpneHAB is running.
However, another program could load macros into the cm11a before openHAB starts.
### cm11a macros
The cm11a is also able to store a schedule and control modules based on that schedule.
That functionality in not currently supported by or used by this binding.
This binding doesn't clear macros from the cm11a so other programs could load macros before openHAB is started.
If you want to do scheduling using openHAB you should be sure there are no macros in the cm11a.
The `heyu clear` command can be used for this purpose.
### X10 powerline monitoring
The cm11a has the ability to capture x10 messages on the powerline.
This binding captures those messages, decodes them and updates the item state.
## Supported things
The binding currently supports the following thing types:
- switch - which supports on and off states
- dimmer - which can be dimmed in addition to turned on or off
## Discovery
Discovery is not supported because that kind of information is not available in the cm11a or the X10 specification.
## Configuration
The cm11a acts as a Bridge to the controlled modules, which are represented as Things.
### Bridge Configuration
The bridge requires the parameter `serialPort` which identifies the serial port the cm11a is connected to.
### Thing Configuration
Each attached thing must specify the `houseUnitCode` set in the device (i.e. A1).
## Channels
| Thing | Channel Type ID | Item Type | Description |
|--------|-----------------|-----------|--------------------|
| switch | switchState | Switch | An On/Off switch |
| dimmer | lightDimmer | Dimmer | A dimmable device |
**Example**
### Things
```perl
Bridge cm11a:cm11a:MyCm11a [ serialPort="COM3" ] {
Thing switch SwitchA1 [ houseUnitCode="A1" ]
Thing dimmer DimmerA2 [ houseUnitCode="A2" ]
}
```
### Items
```java
SwitchA1 "Kitchen Plug" <light> (someGroup) { channel="cm11a:switch:MyCm11a:SwitchA1:switchstatus" }
DimmerA2 "Porch lights" <slider> (someGroup) { channel="cm11a:dimmer:MyCm11a:DimmerA2:lightlevel" }
```
## Known issues
1. When openHAB starts up it doesn't restore the last state of each module. And, the cm11a does not provide a discovery service. Therefore it assumes everything off.
2. The dimmer slider can get out of sync with the actual light because of the way X10 works. On some switches if you turn them on they will go to full bright and some switches will return to the previous dim level.
## References
1. [CM11A (X10) Protocol Document](http://wanderingsamurai.net/electronics/cm11a-x10-protocol-document)
2. [Heyu - control software for the cm11a](http://www.heyu.org/)
3. cm11a Controllers are available for purchase from several sites on the internet

View File

@ -1,464 +0,0 @@
---
id: comfoair
label: ComfoAir
title: ComfoAir - Bindings
type: binding
description: "This binding should be compatible with the Zehnder ComfoAir 350 ventilation system. ComfoAir 550 is untested but should supposedly use the same protocol. The same is true for the device WHR930 of StorkAir, G90-380 by Wernig and Santos 370 DC to Paul."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.comfoair/README.md
since: 1x
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# ComfoAir Binding
This binding should be compatible with the Zehnder ComfoAir 350 ventilation system. ComfoAir 550 is untested but should supposedly use the same protocol. The same is true for the device WHR930 of StorkAir, G90-380 by Wernig and Santos 370 DC to Paul.
## Binding Configuration
You can configure this binding in the file `services/comfoair.cfg`.
| Property | Default | Required | Description |
|----------|---------|:--------:|-------------|
| port | | Yes | Serial port which is connected to the Zehnder ComfoAir system, for example `/dev/ttyS0` on Linux or `COM1` on Windows |
| refresh | 60000 | No | refresh inverval in milliseconds
### Example
```
port=/dev/ttyS0
```
## Item Configuration
The syntax of the binding configuration strings accepted is the following:
```
comfoair="<device-command>"
```
where `<device-command>` is replaced with the ComfoAir command from the list below:
| `<device-command>` | Read / Write | Notes |
|---------------------------------|:------------:|-------|
| activate | Write | - 0 means CCEase Comfocontrol is active and the binding is in sleep state<br/>- 1 means Binding is active and CCEase Comfocontrol is in sleep state |
| fan_level | Write | - 1 is Level A<br/>- 2 is Level 1<br/>- 3 is Level 2<br/>- 4 is Level 3 |
| target_temperature | Write | value between 15.0 and 25.0 in 0.5 steps |
| outdoor_incomming_temperatur | Read | |
| outdoor_outgoing_temperatur | Read | |
| indoor_incomming_temperatur | Read | |
| indoor_outgoing_temperatur | Read | |
| incomming_fan | Read | |
| outgoing_fan | Read | |
| filter_running | Read | |
| filter_error_intern | Read | |
| filter_error_extern | Read | |
| error_message | Read | |
## Limitations
- Either the ComfoAir binding or the CCEase Comfocontrol can be active
- You must implement auto mode by yourself with rules. But it is more powerful.
## Rights to access the serial port
- Take care that the user that runs openHAB has rights to access the serial port
- On Ubuntu systems that usually means adding the user to the group "dialout", i.e.
```shell
sudo usermod -a -G dialout openhab
```
if `openhab` is your user.
## Examples
### Basic Examples
```
Number airflowControl "Activated" {comfoair="activate"}
Number airflowFanLevel "Level [%d]" {comfoair="fan_level"}
Number airflowTargetTemperature "Target temperature [%.1f °C]" {comfoair="target_temperature"}
Number airflowOutdoorIncomingTemperature "Outdoor incoming [%.1f °C]" {comfoair="outdoor_incomming_temperatur"}
Number airflowOutdoorOutgoingTemperature "Outdoor outgoing [%.1f °C]" {comfoair="outdoor_outgoing_temperatur"}
Number airflowIndoorIncommingTemperature "Indoor incomming [%.1f °C]" {comfoair="indoor_incomming_temperatur"}
Number airflowIndoorOutgoingTemperature "Indoor outgoing [%.1f °C]" {comfoair="indoor_outgoing_temperatur"}
Number airflowIncommingFan "Incomming fan [%d %%]" {comfoair="incomming_fan"}
Number airflowOutgoingFan "Outgoing fan [%d %%]" {comfoair="outgoing_fan"}
Number airflowFilterRuntime "Filter runtime [%d h]" {comfoair="filter_running"}
Number airflowFilterErrorI "Filter (intern) [%s]" {comfoair="filter_error_intern"}
Number airflowFilterErrorE "Filter (extern) [%s]" {comfoair="filter_error_extern"}
String airflowError "Errorcode [%s]" {comfoair="error_message"}
```
### Extended Examples
items/comfoair.items
```
Group Lueftung "Lüftungsanlage" <pie>
Number Lueftung_Auto_Mode "Modus" <selfAutoMode> (Lueftung)
String Lueftung_Aussentemperatur_Message "Aussen [%s]" <temperature> (Lueftung)
String Lueftung_Innentemperatur_Message "Innen [%s]" <temperature> (Lueftung)
String Lueftung_Ventilator_Message "Ventilator [%s]" <selfAiring> (Lueftung)
String Lueftung_Filterlaufzeit_Message "Filterlaufzeit [%s]" <selfRuntime> (Lueftung)
String Lueftung_Status_Message "Status [%s]" <selfError> (Lueftung)
Number Lueftung_Control "Steuerung" <settings> (Lueftung) {comfoair="activate"}
Number Lueftung_Fan_Level "Stufe [%d]" <selfAiring> (Lueftung) {comfoair="fan_level"}
Number Lueftung_Komfortemperatur "Zieltemperatur [%.1f °C]" <temperature> (Lueftung) {comfoair="target_temperatur"}
Number Lueftung_Bypass "Bypass [MAP(bypass_de.map):%s]" <selfBypass> (Lueftung) {comfoair="bypass_mode"}
Number Lueftung_Aussenlufttemperatur "Aussenzuluft [%.1f °C]" <temperature> (Lueftung) {comfoair="outdoor_incomming_temperatur"}
Number Lueftung_Fortlufttemperatur "Aussenabluft [%.1f °C]" <temperature> (Lueftung) {comfoair="outdoor_outgoing_temperatur"}
Number Lueftung_Zulufttemperatur "Raumzuluft [%.1f °C]" <temperature> (Lueftung) {comfoair="indoor_incomming_temperatur"}
Number Lueftung_Ablufttemperatur "Raumabluft [%.1f °C]" <temperature> (Lueftung) {comfoair="indoor_outgoing_temperatur"}
Number Lueftung_Zuluft "Ventilator Zuluft [%d %%]" <selfAiring> (Lueftung) {comfoair="incomming_fan"}
Number Lueftung_Abluft "Ventilator Abluft [%d %%]" <selfAiring> (Lueftung) {comfoair="outgoing_fan"}
Number Lueftung_Filterlaufzeit "Filterlaufzeit [%d h]" <selfClock> (Lueftung) {comfoair="filter_running"}
Number Lueftung_FilterfehlerI "Filter (intern) [MAP(filter_de.map):%s]" <selfFilterintern> (Lueftung) {comfoair="filter_error_intern"}
Number Lueftung_FilterfehlerE "Filter (extern) [MAP(filter_de.map):%s]" <selfFilterextern> (Lueftung) {comfoair="filter_error_extern"}
String Lueftung_Fehlermeldung "Fehlercode [%s]" <selfError> (Lueftung) {comfoair="error_message"}
```
transform/bypass_de.map
```
1=Offen
0=Geschlossen
undefined=undefiniert
-=undefiniert
```
transform/filter_de.map
```
1=Wechseln
0=Ok
undefined=undefiniert
-=undefiniert
```
persistence/db4o.persist
```
Lueftung_Auto_Mode : strategy = everyChange, restoreOnStartup
Lueftung_Aussentemperatur_Message : strategy = everyChange, restoreOnStartup
Lueftung_Innentemperatur_Message : strategy = everyChange, restoreOnStartup
Lueftung_Ventilator_Message : strategy = everyChange, restoreOnStartup
Lueftung_Filterlaufzeit_Message : strategy = everyChange, restoreOnStartup
Lueftung_Status_Message : strategy = everyChange, restoreOnStartup
Lueftung_Fan_Level : strategy = everyChange, restoreOnStartup
```
sitemaps/comfoair.sitemap (fragment)
```
Text label="Informationen" icon="house" {
Text item=Lueftung_Fan_Level label="Lüftung [MAP(level_de.map):%d]" icon="selfAiring" {
Frame {
Switch item=Lueftung_Auto_Mode label="Modus" mappings=[1="Auto", 0="Manuell"]
Switch item=Lueftung_Fan_Level label="Stufe" mappings=[1="A", 2="1", 3="2", 4="3"]
}
Frame {
Setpoint item=Lueftung_Komfortemperatur step=0.5 minValue=15 maxValue=25
Text item=Lueftung_Aussentemperatur_Message
Text item=Lueftung_Innentemperatur_Message
Text item=Lueftung_Ventilator_Message
Text item=Lueftung_Bypass
}
Frame {
Text item=Lueftung_Filterlaufzeit_Message
Text item=Lueftung_Status_Message
Switch item=Lueftung_Control mappings=[1="App", 0="CCEase"]
}
}
Text item=Gas_Aktueller_Tagesverbrauch label="Gas [%.2f m³]" {
Frame {
Text item=Gas_Aktueller_Tagesverbrauch
Text item=Gas_Aktueller_Verbrauch
Text item=Gas_Min_Verbrauch
Text item=Gas_Max_Verbrauch
}
Frame {
Chart item=Gas_Aktueller_Verbrauch period=D refresh=10000
Chart item=Gas_Letzter_Tagesverbrauch period=M refresh=86400
Chart item=Gas_Letzter_Tagesverbrauch period=Y refresh=86400
}
}
Text item=Strom_Aktueller_Tagesverbrauch label="Strom [%.2f KWh]"{
Frame {
Text item=Strom_Aktueller_Tagesverbrauch
Text item=Strom_Aktueller_Verbrauch
Text item=Strom_Min_Verbrauch
Text item=Strom_Max_Verbrauch
Text item=Strom_Zaehler
}
Frame {
Chart item=Strom_Aktueller_Verbrauch period=D refresh=10000
Chart item=Strom_Letzter_Tagesverbrauch period=M refresh=86400
Chart item=Strom_Letzter_Tagesverbrauch period=Y refresh=86400
}
}
Text item=Wetter_Aussentemperatur label="Temperatur [%.1f °C]"{
Frame {
Text item=Wetter_Innentemperatur
Text item=Wetter_Aussentemperatur
Text item=Wetter_Temp_Max
Text item=Wetter_Temp_Min
}
Frame {
Chart item=Wetter_Diagramm period=D refresh=10000
Chart item=Wetter_Aussentemperatur period=W refresh=10000
Chart item=Wetter_Aussentemperatur period=M refresh=86400
Chart item=Wetter_Aussentemperatur period=Y refresh=86400
}
}
Text item=Datum
}
```
rules/airflow.rules
```Xtend
import java.lang.Math
var boolean autoChangeInProgress = false
rule "Filterlaufzeit"
when
System started
or
Item Lueftung_Filterlaufzeit changed
then
if( Lueftung_Filterlaufzeit.state instanceof DecimalType ){
var Number laufzeit = Lueftung_Filterlaufzeit.state as DecimalType
var Number weeks = Math::floor( (laufzeit/168).doubleValue )
var Number days = Math::floor( ((laufzeit-(weeks*168))/24).doubleValue)
var String msg = ""
if( weeks > 0 ){
if( weeks == 1 ) msg = weeks.intValue + " Woche"
else msg = weeks.intValue + " Wochen"
}
if( days > 0 ){
if( msg.length > 0 ) msg = msg + ", "
if( days == 1 ) msg = msg + days.intValue + " Tag"
else msg = msg + days.intValue + " Tage"
}
postUpdate(Lueftung_Filterlaufzeit_Message,msg)
}
end
rule "Status Meldung"
when
System started
or
Item Lueftung_Fehlermeldung changed
or
Item Lueftung_FilterfehlerI changed
or
Item Lueftung_FilterfehlerE changed
then
var String msg = ""
if( (Lueftung_FilterfehlerI.state instanceof DecimalType) && (Lueftung_FilterfehlerE.state instanceof DecimalType) && (Lueftung_Fehlermeldung.state instanceof StringType) ){
if( (Lueftung_FilterfehlerI.state as DecimalType) == 1 || (Lueftung_FilterfehlerE.state as DecimalType) == 1 ){
if( msg.length > 0 ) msg = msg + ", "
msg = msg + "Filter: "
if( (Lueftung_FilterfehlerI.state as DecimalType) == 1 ) msg = msg + "I"
if( (Lueftung_FilterfehlerI.state as DecimalType) == 1 && (Lueftung_FilterfehlerE.state as DecimalType) == 1) msg = msg + " & "
if( (Lueftung_FilterfehlerE.state as DecimalType) == 1 ) msg = msg + "E"
}
if( (Lueftung_Fehlermeldung.state as StringType) != "Ok" ){
if( msg.length > 0 ) msg = msg + ", "
msg = msg + "Error: " + (Lueftung_Fehlermeldung.state as StringType)
}
}
if( msg.length == 0 ){
msg = "Alles in Ordnung"
}
postUpdate(Lueftung_Status_Message,msg)
end
rule "Aussentemperatur Meldung"
when
System started
or
Item Lueftung_Aussenlufttemperatur changed
or
Item Lueftung_Fortlufttemperatur changed
then
if( (Lueftung_Aussenlufttemperatur.state instanceof DecimalType) && (Lueftung_Fortlufttemperatur.state instanceof DecimalType) ){
postUpdate(Lueftung_Aussentemperatur_Message,"→ " + Lueftung_Aussenlufttemperatur.state.format("%.1f") +"°C, ← " + Lueftung_Fortlufttemperatur.state.format("%.1f") + "°C")
}
end
rule "Innentemperatur Meldung"
when
System started
or
Item Lueftung_Zulufttemperatur changed
or
Item Lueftung_Ablufttemperatur changed
then
if( (Lueftung_Zulufttemperatur.state instanceof DecimalType) && (Lueftung_Ablufttemperatur.state instanceof DecimalType) ){
postUpdate(Lueftung_Innentemperatur_Message,"→ " + Lueftung_Zulufttemperatur.state.format("%.1f") +"°C, ← " + Lueftung_Ablufttemperatur.state.format("%.1f") + "°C")
}
end
rule "Ventilator Meldung"
when
System started
or
Item Lueftung_Zuluft changed
or
Item Lueftung_Abluft changed
then
if( (Lueftung_Zuluft.state instanceof DecimalType) && (Lueftung_Abluft.state instanceof DecimalType) ){
postUpdate(Lueftung_Ventilator_Message,"→ " + (Lueftung_Zuluft.state as DecimalType) +"%, ← " + (Lueftung_Abluft.state as DecimalType) + "%")
}
end
rule "Filter Fehler"
when
Item Lueftung_Fehlermeldung changed
then
if( (Lueftung_Fehlermeldung.state as StringType) != "Ok" ){
send("test@gmail.com", "Lüftung hat einen Fehler gemeldet")
}
end
rule "Filter wechseln"
when
Item Lueftung_FilterfehlerI changed
or
Item Lueftung_FilterfehlerE changed
then
if( (Lueftung_FilterfehlerI.state as DecimalType) == 1 || (Lueftung_FilterfehlerE.state as DecimalType) == 1 ){
send("test@gmail.com", "Lüftungsfilter muss gewechselt werden")
}
end
rule "Manueller Eingriff"
when
Item Lueftung_Fan_Level changed
then
if( autoChangeInProgress ){
autoChangeInProgress = false
}
else{
postUpdate(Lueftung_Auto_Mode,0)
}
end
rule "Lüfterstufe"
when
Item Lueftung_Auto_Mode changed
or
Time cron "0 0/1 * * * ?"
then
if( (Lueftung_Auto_Mode.state as DecimalType) == 1 ){
var Number day = now.getDayOfWeek
var Number hour = now.getHourOfDay
var Number minute = now.getMinuteOfHour
var boolean isNight = false
// Freitag
if( day == 5 ){
if( hour < 7 || (hour >= 23 && minute >=30) ) isNight = true
}
// Samstag
else if( day == 6 ){
if( hour < 9 || (hour >= 23 && minute >=30) ) isNight = true
}
// Sonntag
else if( day == 7 ){
if( hour < 9 || (hour >= 22 && minute >=30) || hour >= 23 ) isNight = true
}
else{
if( hour < 7 || (hour >= 22 && minute >=30) || hour >= 23 ) isNight = true
}
var Number currentLevel = (Lueftung_Fan_Level.state as DecimalType)
var Number newLevel = 3
if( !isNight ){
var Number raumTemperatur = (Lueftung_Ablufttemperatur.state as DecimalType)
var Number aussenTemperatur = (Lueftung_Aussenlufttemperatur.state as DecimalType)
var Number zielTemperatur = (Lueftung_Komfortemperatur.state as DecimalType)
if(
raumTemperatur >= zielTemperatur
&&
aussenTemperatur >= raumTemperatur
){
newLevel = 1
}
else if(
raumTemperatur >= zielTemperatur - 1
&&
aussenTemperatur >= raumTemperatur - 1
&&
currentLevel == 1
){
newLevel = 1
}
}
else if( Fenster_OG_Schlafzimmer.state == CLOSED || Fenster_OG_Ankleide.state == OPEN ) {
newLevel = 2
}
if( newLevel != currentLevel ){
if( newLevel == 1 ){
logInfo("airflow.rules", "auto slowdown start")
send("test@gmail.com", "Lüftung verlangsamt")
}
else if( currentLevel == 1 ){
logInfo("airflow.rules", "auto slowdown end")
send("test@gmail.com", "Lüftung wieder normal")
}
autoChangeInProgress=true
sendCommand(Lueftung_Fan_Level,newLevel)
}
}
end
```

View File

@ -1,46 +0,0 @@
---
id: configadmin
label: ConfigAdmin
title: ConfigAdmin - Bindings
type: binding
description: "With this binding it is possible to dynamically change settings that are defined in the Configuration Admin Manager of OSGi, where all configuration data are kept for openHAB. The various `.cfg` files are as such used to define the initial configuration, while you can use this binding to change values during runtime, simply by sending a command to an item."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.configadmin/README.md
since: 1x
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# ConfigAdmin Binding
With this binding it is possible to dynamically change settings that are defined in the Configuration Admin Manager of OSGi, where all configuration data are kept for openHAB. The various `.cfg` files are as such used to define the initial configuration, while you can use this binding to change values during runtime, simply by sending a command to an item.
## Binding Configuration
This binding does not itself have a configuration.
## Item Configuration
The syntax for the ConfigAdmin binding configuration string is:
```
configadmin="<pid>:<command>"
```
where `<pid>` can be configured either fully qualified with preceding `org.openhab` or without it as a shortcut. In case no '.' is found within the pid it is prefixed with `org.openhab`.
Here are some examples of valid binding configuration strings:
```
configadmin="dropbox:syncmode"
configadmin="org.openhab.gcal:refresh"
```
## Examples
```
Switch Dropbox_OnOff "Activate Sync" (State) { configadmin="dropbox:activate" }
String Dropbox_SyncMode "Syncmode" (State) { configadmin="dropbox:syncmode" }
```

View File

@ -1,58 +0,0 @@
---
id: coolmasternet
label: CoolMasterNet
title: CoolMasterNet - Bindings
type: binding
description: "The CoolMasterNet binding is used to control [CoolMasterNet HVAC bridge devices](https://coolautomation.com/products/coolmasternet/), using the 'ASCII I/F' plaintext TCP control protocol."
since: 2x
logo: images/addons/coolmasternet.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# CoolMasterNet Binding
The CoolMasterNet binding is used to control [CoolMasterNet HVAC bridge devices](https://coolautomation.com/products/coolmasternet/), using the "ASCII I/F" plaintext TCP control protocol.
## Discovery
The CoolMasterNet protocol does not support automatic discovery.
## Thing Configuration
- `controller` is a openHAB "bridge", and represents a single CoolMasterNet device. A single controller supports one or more HVAC units.
- `hvac` is an HVAC device connected to a controller. Each `hvac` thing is identified by a CoolMasterNet UID (refer to CoolMasterNet controller documentation).
Example demo.things configuration for two HVAC devices connected to a CoolMasterNet device found at IP 192.168.0.100:
```perl
Bridge coolmasternet:controller:main [ host="192.168.0.100" ] {
Thing hvac a [ uid="L1.100" ]
Thing hvac b [ uid="L1.101" ]
}
```
## Channels
| Channel | Item Type | Description |
|--------------|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| on | Switch | Turn HVAC unit on and off. |
| mode | String | HVAC mode (cool, heat, auto, dry, fan). Unit may not support all modes. |
| fan_speed | String | Fan speed (l, m, h, t, a ) for respectively "Low", "Medium", "High", "Top" or "Auto". Unit may not support all speeds. |
| set_temp | Number | Temperature target setpoint in Celsius. |
| current_temp | Number | Current temperature in Celsius at HVAC unit. |
| louvre | String | Louvre angle (0, a, h, 3, 4, 6, v) for respectively "No Control", "Auto Swing", "Horizontal", "30 degrees", "45 degrees", "60 degrees" or "Vertical". Unit may not support all angles. |
## Item Configuration
```java
Switch ACOn "Lounge AC ON/OFF" { channel="coolmasternet:hvac:main:a:on"}
String ACMode "Lounge AC Mode" { channel="coolmasternet:hvac:main:a:mode" }
Number ACTemp "Lounge Temp" { channel="coolmasternet:hvac:main:a:current_temp" }
Number ACSet "Lounge AC Set" { channel="coolmasternet:hvac:main:a:set_temp" }
String ACFan "Lounge AC Fan" { channel="coolmasternet:hvac:main:a:fan_speed" }
String ACLouvre "Lounge AC Louvre" { channel="coolmasternet:hvac:main:a:louvre_angle" }
```

View File

@ -1,98 +0,0 @@
---
id: cups
label: CUPS
title: CUPS - Bindings
type: binding
description: "The openHAB CUPS binding allows interaction with printers and their print queues via a CUPS server."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.cups/README.md
since: 1x
logo: images/addons/cups.png
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# CUPS Binding
The openHAB CUPS binding allows interaction with printers and their print queues via a CUPS server.
There is also a binding specifically for openHAB 2 [here](http://docs.openhab.org/addons/bindings/ipp/readme.html).
## Prerequisites
To set up this binding, it is necessary to know the names of the printers registered with the CUPS server.
One way to get this information is to download the current `cups4j.runnable-x.x.x.jar` file from http://www.cups4j.org/ and query the printers by using the following command
java -jar cups4j.runnable-x.x.x.jar -h <CUPS server name> getPrinters
## Binding Configuration
The binding can be configured in the file `services/cups.cfg`.
| Property | Default | Required | Description |
|----------|---------|:--------:|-----------------------------------------------|
| host | | Yes | The hostname or IP address of the CUPS server |
| port | 631 | No | The port used to connect to the CUPS server |
| refresh | 60000 | No | The refresh interval (in milliseconds) |
## Item Configuration
Each item binding should have this format:
```
cups="<printerName>[#whichJobs]"
```
`<printerName>` is the name or URL of the printer, as registered with the CUPS server.
`whichJobs` has a default value of NOT_COMPLETED; possible values are:
- NOT_COMPLETED
- COMPLETED
- ALL
## Examples
- Number Print_Jobs_Queued "Unfinished print jobs" (FF_Office) { cups="MX-870#NOT_COMPLETED" }
- Number Print_Jobs_Completed "Completed print jobs" (FF_Office) { cups="http://127.0.0.1:631/printers/MX-870" }
### Example Use Case
The CUPS Binding can be used to switch on a printer if there are print jobs in the queue and switch it off if the queue is empty.
#### Items
Number Print_Jobs_Queued "Unfinished print jobs" (FF_Office) { cups="MX-870#NOT_COMPLETED" }
Switch Printer "Printer"
#### Rules
import org.openhab.model.script.actions.Timer
var Timer printerTimer = null
rule "CUPS-Printer Queue"
when
Item Print_Jobs_Queued changed
then
if (Print_Jobs_Queued.state>0) {
if (printerTimer!=null) {
printerTimer.cancel
printerTimer=null
}
if (Printer.state==OFF) {
sendCommand(Printer,ON)
}
}
else if (Printer.state==ON) {
printerTimer = createTimer(now.plusMinutes(5)) [|
sendCommand(Printer,OFF)
]
}
end

View File

@ -1,95 +0,0 @@
---
id: daikin
label: Daikin
title: Daikin - Bindings
type: binding
description: "The Daikin binding allows monitoring and control of a Daikin air conditioner or heat pump, through either the KKRP01A wired module or the BRP072A42 wireless module."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.daikin/README.md
since: 1x
logo: images/addons/daikin.png
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Daikin Binding
The Daikin binding allows monitoring and control of a Daikin air conditioner or heat pump, through either the KKRP01A wired module or the BRP072A42 wireless module.
## Prerequisites
A [KKRP01A](http://www.onlinecontroller.eu/) Online Controller must be
installed in the Daikin unit and connected to the LAN.
The user authentication feature is not supported by the Daikin binding.
Therefore the Daikin unit must be configured with no security (ie. empty
password for all logins).
There is a list of units that are compatible with the KKRP01A
[here](http://www.onlinecontroller.eu/media/downloads/List-of-compatible-INDOOR-and-OUTDOOR-units-4.pdf)
and instructions on how to install and configure the controller [here](http://www.onlinecontroller.eu/en/download).
## Binding Configuration
The binding can be configured in the file `services/daikin.cfg`.
openHAB needs to know where to find the KKRP01A web server and how often the
binding should refresh any status items.
Multiple KKRP01A units can be configured by giving each a unique name.
| Property | Default | Required | Description |
|--------------------|---------|:--------:|----------------------------------------------|
| `<name>`.host | | Yes | `<name>` is a unique name for the Daikin unit, also used in item bindings.<br/> The value of this setting must be formatted as `<which>`@`<address>`.<br/> `<which>` refers to the Daikin Remote Control Device, and must be either WIRELESS or WIRED.<br/> `<address>` is the IP address or hostname of the Daikin unit. |
| refresh | 60000 | No | The refresh interval (in milliseconds) |
## Item Configuration
Item bindings can be either inbound or outbound.
## Examples
### Inbound (readonly) item bindings
// the temperature/humidity at the indoor unit
Number DaikinTempIn "Temp Inside [%.1f °C]" { daikin="<name>:tempin" }
Number DaikinHumidityIn "Humidity Inside [%.1f %%]" { daikin="<name>:humidityin" }
// the temperature at the outdoor unit
Number DaikinTempOut "Temp Outside [%.1f °C]" { daikin="<name>:tempout" }
### Outbound (command) item bindings
// power
Switch DaikinPower "Power" { daikin="<name>:power" }
// mode of operation - one of Auto/Dry/Cool/Heat/Fan/Night
Number DaikinMode "Mode [%.0f]" { daikin="<name>:mode" }
// temperature set point
Number DaikinTemp "Temp [%.0f °C]" { daikin="<name>:temp" }
// fan mode - one of Auto/F1/F2/F3/F4/F5
Number DaikinFan "Fan [%.0f]" { daikin="<name>:fan" }
// swing mode - one of Off/UpDown
Number DaikinSwing "Swing [%.0f]" { daikin="<name>:swing" }
// timer mode - one of Off-Off/Off-On/On-Off/On-On (start/end timers)
Number DaikinTimer "Timer [%.0f]" { daikin="<name>:timer" }
### Sitemap Examples
Text item=DaikinTempOut
Switch item=DaikinPower
Text item=DaikinTemp
Text item=DaikinHumidityIn
Switch item=DaikinMode mappings=[0="Auto", 2="Dry", 3="Cool", 4="Heat", 6="Fan"]
Setpoint item=DaikinTemp minValue="16" maxValue="30" step="1"
Switch item=DaikinFan mappings=[0="Auto", 1="F1", 2="F2", 3="F3", 4="F4", 5="F5"]
Switch item=DaikinSwing mappings=[0="Off", 1="Vertical", 2="Horizontal", 3="Hor/Vert"]

View File

@ -1,126 +0,0 @@
---
id: davis
label: Davis
title: Davis - Bindings
type: binding
description: "The openHAB Davis binding supports reading data from Davis weather stations. Most Davis weather stations should be supported."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.davis/README.md
since: 1x
logo: images/addons/davis.png
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Davis Binding
The openHAB Davis binding supports reading data from Davis weather stations. Most Davis weather stations should be supported.
The binding is based on the [Serial Communication Reference Manual](http://www.google.at/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0CCQQFjAA&url=http%3A%2F%2Fwww.davisnet.com%2Fsupport%2Fweather%2Fdownload%2FVantageSerialProtocolDocs_v261.pdf&ei=yns1VLO9B9Pe7Ab9hYDgDQ&usg=AFQjCNEUP_O6jjV3tHaxc7_faaLKWAtw2g&sig2=0YuJy45Qmk76RlffOqayuA&bvm=bv.76943099,d.ZGU) from Davis.
## Binding Configuration
The binding can be configured in the file `services/davis.cfg`.
| Property | Default | Required | Description |
|----------|---------|:--------:|----------------------------------------|
| port | | Yes | The serial port of the Weather station |
| refresh | 10000 | No | The refresh interval (in milliseconds) |
## Item Configuration
Item bindings should conform to this format:
davis="<value-key>"
The following table defines the allowable values for `<value-key>`.
| Value-Key |
|-----------------------------|
| bar_trend |
| barometer |
| console_battery_voltage |
| dew_point |
| firmware_date |
| firmware_version |
| heat_index |
| inside_humidity |
| inside_temp |
| last_15min_rain |
| last_24h_rain |
| last_hour_rain |
| outside_humidity |
| outside_temp |
| rain_rate |
| receivers |
| rx_count_consecutive |
| rx_count_crc |
| rx_count_missed |
| rx_count_resync |
| rx_count_total |
| solar_radiation |
| station_type |
| thsw_index |
| time |
| transmitter_battery_status |
| uv |
| wind_chill |
| wind_direction |
| wind_direction_10min__gust |
| wind_speed |
| wind_speed_10min_avg |
| wind_speed_10min_avg_hires |
| wind_speed_10min_gust_hires |
| wind_speed_2min_avg_hires |
## Examples
String StationType "StationType: [%s]" { davis="station_type" }
Number Receivers "Receivers: [%.0f]" { davis="receivers" }
Number TransmitterBattery "Transmitter Battery [%.1f]" { davis="transmitter_battery_status" }
Number ConsoleBattVoltage "Console Battery [%.2f V]" { davis="console_battery_voltage" }
DateTime Date "Date [%1$tA, %1$td.%1$tm.%1$tY]" { davis="time" }
Number InsideTemp "Inside Temp [%.1f °C ]" { davis="inside_temp" }
Number OutsideTemp "Outside Temp [%.1f °C ]" { davis="outside_temp" }
Number DewPoint "Dew Point [%.1f °C ]" { davis="dew_point" }
Number HeatIndex "Heat Index [%.1f °C ]" { davis="heat_index" }
Number WindChill "Wind Chill [%.1f °C ]" { davis="wind_chill" }
Number THSWIndex "THSW Index[%.1f °C ]" { davis="thsw_index" }
Number InsideHumidity "Inside Humidity [%.0f %% ]" { davis="inside_humidity" }
Number OutsideHumidity "Outside Humidity [%.0f %% ]" { davis="outside_humidity" }
String BarTrend "Barometer Trend [%s]" { davis="bar_trend" }
Number Barometer "Barometer [%.0f hPa]" { davis="barometer" }
Number WindSpeed "Wind Speed [%.1f km/h]" { davis="wind_speed" }
Number WindSpeed10minAvg "Wind Speed 10min Avg [%.1f km/h]" { davis="wind_speed_10min_avg" }
Number WindDirection "Wind Direction [%.0f °]" { davis="wind_direction" }
Number WindSpeed10minHiRes "Wind Speed 10min Avg HiRes [%.1f km/h]" { davis="wind_speed_10min_avg_hires" }
Number WindSpeed2minHiRes "Wind Speed 10min Avg HiRes [%.1f km/h]" { davis="wind_speed_2min_avg_hires" }
Number WindSpeed10minGustHiRes "Wind Speed 10min Avg HiRes [%.1f km/h]" { davis="wind_speed_10min_gust_hires" }
Number WindDirectionGust "Wind Direction Gust [%.0f °]" { davis="wind_direction_10min__gust" }
Number RainRate "Rain Rate [%.1f mm/h ]" { davis="rain_rate" }
Number Rain15min "Rain Rate [%.1f mm/h ]" { davis="last_15min_rain" }
Number Rainlast1h "Rain Rate [%.1f mm/h ]" { davis="last_hour_rain" }
Number Rainlast24h "Rain Rate [%.1f mm/h ]" { davis="last_24h_rain" }
Number UVIndex "UV Index [%.1f ]" { davis="uv" }
Number Solar "Solar Radiation [%.0f W/m²]" { davis="solar_radiation" }
String firmware_date "Firmware Date: [%s]" { davis="firmware_date" }
String firmware_version "Firmware Version: [%s]" { davis="firmware_version" }
String rx_total "RX Packets total: [%s]" { davis="rx_count_total" }
String rx_missed "RX Packets missed: [%s]" { davis="rx_count_missed" }
String rx_resync "RX Resyncs: [%s]" { davis="rx_count_resync" }
String rx_consec "RX Packets received in a row without error: [%s]" { davis="rx_count_consecutive" }
String rx_crc "RX Packets CRC failes: [%s]" { davis="rx_count_crc" }

View File

@ -1,73 +0,0 @@
---
id: ddwrt
label: DD-WRT
title: DD-WRT - Bindings
type: binding
description: "The openHAB DD-WRT Binding allows interaction with a DD-WRT device."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.ddwrt/README.md
since: 1x
logo: images/addons/ddwrt.png
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# DD-WRT Binding
The openHAB DD-WRT Binding allows interaction with a DD-WRT device.
## Prerequisites
In order to use the binding with a DD-WRT device, the telnet connection must be activated in the DD-WRT web interface.
This process does not always work. Test it with a telnet command shell.
## Binding Configuration
The binding can be configured in the file `services/ddwrt.cfg`.
| Property | Default | Required | Description |
|-----------------|---------|:--------:|------------------------------|
| ip | | No | The IP address of the device |
| port | 23 | No | The port to be used |
| username | | No | The username for the device |
| password | | No | The password for the device |
| interface_24 | | No | The 2.4 GHz wifi interface |
| interface_50 | | No | The 5 GHz wifi interface |
| interface_guest | | No | The guest wifi interface |
## Item Configuration
Item bindings should conform to the following format:
```
ddwrt="<key>"
```
Where `<key>` may take any of these values:
| Key |
|------------|
| routertype |
| wlan24 |
| wlan50 |
| wlanguest |
## Examples
String DEVICE_NAME {ddwrt="routertype"}
Switch WIFI_24 {ddwrt="wlan24"}
Switch WIFI_50 {ddwrt="wlan50"}
Switch WIFI_GUEST {ddwrt="wlanguest"}
## Notes
There is a bug in the DD-WRT firmware. The activation of this interface needs a workaround so it takes some seconds longer than the native devices.
Tested with Archer V2 and DD-WRT v3.0-r30880 std (11/14/16).

View File

@ -1,194 +0,0 @@
---
id: denon
label: Denon
title: Denon - Bindings
type: binding
description: "The openHAB Denon Binding allows interaction with Denon AV receivers. It should be compatible with previous generation receivers such as AVR-X2000/X3000, as well as current ones such as X2100W/X3100W."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.denon/README.md
since: 1x
logo: images/addons/denon.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Denon Binding
The openHAB Denon Binding allows interaction with Denon AV receivers. It should be compatible with previous generation receivers such as AVR-X2000/X3000, as well as current ones such as X2100W/X3100W.
The binding also seems to work with some [Marantz receivers](https://groups.google.com/d/msg/openhab/bSTEfSRt0RU/rOI6uWUe7bIJ).
## Binding Configuration
The binding can be configured in the file `services/denon.cfg`.
Multiple receivers may be defined. Each requires a unique `<name>` to be defined.
| Property | Default | Required | Description |
|------------------|---------|:--------:|-------------------------------------------------------------|
| `<name>`.host | | Yes | The IP address of the receiver |
| `<name>`.update | telnet | No | Connection method. Allowed values are "telnet" or "http". Denon receivers only support one concurrent telnet connection, so use http if any other app is using the telnet connection. |
| refresh | 5000 | No | The refresh interval (in milliseconds) for the http connection method. |
## Item Configuration
Item bindings must conform to the following format:
```
{denon="<name>#<property>"}
```
`<name>` is the name of the receiver defined in the Binding Configuration, and `<property>` is one of the following:
| Property | Type | Description | Accepts |
| :----------- |:------------- | :-------------- | :-------- |
| **General** |
| PW | Switch | Main power | On, Off |
| ZM | Switch | Main zone power | On, Off |
| Z2 | Switch | Zone 2 power | On, Off |
| SURROUNDMODE | String | Surround mode | |
| **Volume** |
| MV | Dimmer | Main volume | Percent, Increase/Decrease |
| MU | Switch | Mute | On, Off |
| Z2ZV | Dimmer | Zone 2 volume | Percent, Increase/Decrease |
| Z2MU | Switch | Zone 2 mute | On, Off |
| **Input** |
| INPUT | String | Main input | Input name |
| SICD | Switch | Switch main input to CD | On |
| SITV | Switch | Switch main input to TV | On |
| Z2SOURCE | Switch | Switch zone 2 input to source | On |
| Z2TUNER | Switch | Switch zone 2 input to tuner | On |
| **Now playing**|
| TRACK | String | Current track that is playing; only available when playing from network or USB. |
| ARTIST | String | Current artist | |
| ALBUM | String | Current album | |
Property names may be different for different models. Check the [control protocol documentation](#references) to verify the right values.
The input mode switch commands in this table are not comprehensive. The binding supports all SI* and Z2* commands.
The inputs for main and 2nd zone can be switched by sending an ON command to the corresponding switch.
The main input can also be switched by setting the INPUT property to the input name (without SI; see examples).
All zone commands also work on Zone 3 and Zone 4, if your receiver supports this (Z2MU -> Z3MU, etc.).
### Advanced
A lot of other commands can also be sent. Define a Switch item and send it the ON command.
There is no feedback on the state of such commands. See the control protocol documentation for a list of commands.
There is a special property 'COMMAND' that can be used in sitemaps and in scripts. It forwards all Denon commands that are sent to it:
```
String DenonCommand "Command" {denon="avr2000#COMMAND"}
```
In sitemaps:
```
Switch item=DenonCommand label="Surround Mode" mappings=[MSSTANDARD="Standard", MSSTEREO="Stereo"]
```
In scripts:
```
sendCommand(DenonCommand, "MNMEN ON")
```
## Examples
###Items
```
Switch DenonPower "Power" {denon="avr2000#PW"}
Switch DenonMainZone "Main Zone" {denon="avr2000#ZM"}
Dimmer DenonVolume "Volume [%.1f]" {denon="avr2000#MV"}
Switch DenonMute "Mute" {denon="avr2000#MU"}
String DenonSurroundMode "Surround mode [%s]" {denon="avr2000#SURROUNDMODE"}
String DenonCommand "Command" {denon="avr2000#COMMAND", autoupdate=false}
String DenonCurrentTrack "Current track [%s]" {denon="avr2000#TRACK"}
String DenonCurrentArtist "Current artist [%s]" {denon="avr2000#ARTIST"}
String DenonCurrentAlbum "Current album [%s]" {denon="avr2000#ALBUM"}
String DenonInput "Input [%s]" {denon="avr2000#INPUT"}
Switch DenonInputCD "Input CD" {denon="avr2000#SICD"}
Switch DenonInputUSBIPOD "Input USB/IPOD" {denon="avr2000#SIUSB/IPOD"}
Switch DenonInputNet "Input Network" {denon="avr2000#SINET"}
Switch DenonInputSpotify "Input Spotify" {denon="avr2000#SISPOTIFY"}
Switch DenonInputTuner "Input Tuner" {denon="avr2000#SITUNER"}
Switch DenonInputDVD "Input DVD" {denon="avr2000#SIDVD"}
Switch DenonInputBluray "Input Bluray" {denon="avr2000#SIBD"}
Switch DenonInputTV "Input TV" {denon="avr2000#SITV"}
Switch DenonInputSATCBL "Input SAT/CBL" {denon="avr2000#SISAT/CBL"}
Switch DenonInputMplay "Input Mediaplayer" {denon="avr2000#SIMPLAY"}
Switch DenonInputGame "Input Game" {denon="avr2000#SIGAME"}
Switch DenonInputAux1 "Input Aux1" {denon="avr2000#SIAUX1"}
Switch DenonZoneTwo "Zone 2" {denon="avr2000#Z2"}
Dimmer DenonZoneTwoVolume "Volume [%.1f]" {denon="avr2000#Z2ZV"}
Switch DenonZoneTwoMute "Zone 2 Mute" {denon="avr2000#Z2MU"}
Switch DenonZoneTwoInputSource "Zone 2 Input Source" {denon="avr2000#Z2SOURCE"}
Switch DenonZoneTwoInputUSB "Zone 2 Input USB" {denon="avr2000#Z2USB/IPOD"}
Switch DenonZoneTwoInputTuner "Zone 2 Tuner" {denon="avr2000#Z2TUNER"}
```
### Sitemap
```
Frame label="Main Zone" {
Switch item=DenonPower
Switch item=DenonMainZone
Slider item=DenonVolume
Setpoint item=DenonVolume minValue=0 maxValue=100 step=0.5
Switch item=DenonMute
Switch item=DenonCommand label="Surround Mode" mappings=[MSSTANDARD="Standard", MSSTEREO="Stereo"]
Text item=DenonSurroundMode
}
Frame label="Main Zone Input" {
Selection label="Input" item=DenonInput mappings=[CD="CD", TUNER="Tuner", DVD="DVD", BD="Bluray", TV="TV", "SAT/CBL"="SAT/CBL", MPLAY="Mediaplayer", GAME="Game", AUX1="Aux1"]
Text item=DenonInput
Switch item=DenonInputCD mappings=[ON="CD"]
Switch item=DenonInputTuner mappings=[ON="Tuner"]
Switch item=DenonInputDVD mappings=[ON="DVD"]
Switch item=DenonInputBluray mappings=[ON="Bluray"]
Switch item=DenonInputTV mappings=[ON="TV"]
Switch item=DenonInputSATCBL mappings=[ON="SAT/CBL"]
Switch item=DenonInputMplay mappings=[ON="Mediaplayer"]
Switch item=DenonInputGame mappings=[ON="Game"]
Switch item=DenonInputAux1 mappings=[ON="Aux1"]
}
Frame label="Title Info" visibility=[DenonCurrentTrack!="Undefined",DenonCurrentArtist!="Undefined"] {
Text item=DenonCurrentTrack
Text item=DenonCurrentArtist
Text item=DenonCurrentAlbum
Webview url="http://192.168.1.70/NetAudio/art.asp-jpg" height=9
}
Frame label="Zone 2" {
Switch item=DenonZoneTwo
Switch item=DenonZoneTwoMute
Slider item=DenonZoneTwoVolume
Switch item=DenonZoneTwoInputUSB mappings=[ON="USB"]
Switch item=DenonZoneTwoInputSource mappings=[ON="Source"]
Switch item=DenonZoneTwoInputTuner mappings=[ON="Tuner"]
}
```
## References
### Control protocol documentation
- [AVR-X2000/E400](http://www2.aerne.com/Public/dok-sw.nsf/0c6187bc750a16fcc1256e3c005a9740/96a2ba120706d10dc1257bdd0033493f/$FILE/AVRX2000_E400_PROTOCOL(10.1.0)_V04.pdf)
- [AVR-X4000](http://assets.denon.com/documentmaster/de/avrx4000_protocol%2810.3.0%29_v01.pdf)
- [AVR-3311CI/AVR-3311/AVR-991](http://www.awe-europe.com/documents/Control%20Docs/Denon/Archive/AVR3311CI_AVR3311_991_PROTOCOL_V7.1.0.pdf)
- [CEOL Piccolo DRA-N5/RCD-N8](http://www.audioproducts.com.au/downloadcenter/products/Denon/CEOLPICCOLOBK/Manuals/DRAN5_RCDN8_PROTOCOL_V.1.0.0.pdf)
- [Marantz Control Protocol (2014+)](http://m.us.marantz.com/DocumentMaster/US/Marantz%202014%20NR%20Series%20-%20SR%20Series%20RS232%20IP%20Protocol.xls)

View File

@ -1,155 +0,0 @@
---
id: denonmarantz
label: Denon / Marantz
title: Denon / Marantz - Bindings
type: binding
description: "This binding integrates Denon & Marantz AV receivers by using either Telnet or a (undocumented) HTTP API."
since: 2x
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Denon / Marantz Binding
This binding integrates Denon & Marantz AV receivers by using either Telnet or a (undocumented) HTTP API.
## Introduction
This binding is an adaptation of the existing Denon 1.x binding.
It can be fully configured without any configuration files.
In most cases the AVRs can be discovered and will be added to the Inbox of the Paper UI.
## Supported Things
This binding supports Denon and Marantz receivers having a Telnet interface or a web based controller at `http://<AVR IP address>/`.
Tested models: Marantz SR5008, Denon AVR-X2000 / X3000 / X1200W / X2100W / X2200W / X3100W / X3300W
Denon models with HEOS support (`AVR-X..00H`) do not support the HTTP API. They do support Telnet.
During Discovery this is auto-detected and configured.
## Discovery
This binding can discover Denon and Marantz receivers using mDNS.
The serial number (which is the MAC address of the network interface) is used as unique identifier.
It tries to detect the number of zones (when the AVR responds to HTTP). It defaults to 2 zones.
## Binding Configuration
The AVR should be auto-discovered correctly.
In case it does not work you can add the AVR manually.
There are no configuration files for this binding.
## Thing Configuration
The DenonMarantz AVR thing requires the `host` it can connect to.
There are more parameters which all have defaults set.
| Parameter | Values | Default |
|---------------------|-------------------------------------------|---------|
| host | hostname / IP address of the AVR | - |
| zoneCount | [1, 2 or 3] | 2 |
| telnetEnabled | true, false | false |
| telnetPort | port number, e.g. 23 | 23 |
| httpPort | port number, e.g. 80 | 80 |
| httpPollingInterval | polling interval in seconds (minimal 5) | 5 |
### Static definition in a .things file
Example `.things` file entry:
```
Thing denonmarantz:avr:0005cd123456 "Receiver" @ "Living room" [host="192.168.1.100"]
```
## Channels
The DenonMarantz AVR supports the following channels (some channels are model specific):
| Channel Type ID | Item Type | Description |
|-------------------------|--------------|--------------|
| General
| general#power | Switch (RW) | Power on/off
| general#surroundProgram | String (R) | current surround program (e.g. STEREO)
| general#artist | String (R) | artist of current track
| general#album | String (R) | album of current track
| general#track | String (R) | title of current track
| general#command | String (W) | Command to send to the AVR (for use in Rules)
|Now Playing
| Main zone
| mainZone#power | Switch (RW) | Main zone power on/off
| mainZone#volume | Dimmer (RW) | Main zone volume
| mainZone#volumeDB | Number (RW) | Main zone volume in dB (-80 offset)
| mainZone#mute | Switch (RW) | Main zone mute
| mainZone#input | String (RW) | Main zone input (e.g. TV, TUNER, ..)
| Zone 2
| zone2#power | Switch (RW) | Zone 2 power on/off
| zone2#volume | Dimmer (RW) | Zone 2 volume
| zone2#volumeDB | Number (RW) | Zone 2 volume in dB (-80 offset)
| zone2#mute | Switch (RW) | Zone 2 mute
| zone2#input | String (RW) | Zone 2 input
| Zone 3
| zone3#power | Switch (RW) | Zone 3 power on/off
| zone3#volume | Dimmer (RW) | Zone 3 volume
| zone3#volumeDB | Number (RW) | Zone 3 volume in dB (-80 offset)
| zone3#mute | Switch (RW) | Zone 3 mute
| zone3#input | String (RW) | Zone 3 input
(R) = read-only (no updates possible)
(RW) = read-write
(W) = write-only (no feedback)
## Item Configuration
Example of usage in `.items` files.
```
Switch marantz_power "Receiver" <switch> {channel="denonmarantz:avr:0006781d58b1:general#power"}
Dimmer marantz_volume "Volume" <soundvolume> {channel="denonmarantz:avr:0006781d58b1:mainZone#volume"}
Number marantz_volumeDB "Volume [%.1f dB]" {channel="denonmarantz:avr:0006781d58b1:mainzone#volume"}
Switch marantz_mute "Mute" <mute> {channel="denonmarantz:avr:0006781d58b1:mainZone#mute"}
Switch marantz_z2power "Zone 2" {channel="denonmarantz:avr:0006781d58b1:zone2#power"}
String marantz_input "Input [%s]" {channel="denonmarantz:avr:0006781d58b1:mainZone#input" }
String marantz_surround "Surround: [%s]" {channel="denonmarantz:avr:0006781d58b1:general#surroundProgram"}
String marantz_command {channel="denonmarantz:avr:0006781d58b1:general#command"}
```
## Sitemap Configuration
Example of displaying the items in a `.sitemap` file.
```
...
Group item=marantz_input label="Receiver" icon="receiver" {
Default item=marantz_power
Default item=marantz_mute visibility=[marantz_power==ON]
Setpoint item=marantz_volume label="Volume [%.1f]" minValue=0 maxValue=40 step=0.5 visibility=[marantz_power==ON]
Default item-marantz_volumeDB visibility=[marantz_power==ON]
Selection item=marantz_input mappings=[TV=TV,MPLAY=Kodi] visibility=[marantz_power==ON]
Default item=marantz_surround visibility=[marantz_power==ON]
}
...
```
## Using the command channel
In a `.rules` file you can use the sendCommand function to send a command to the AVR.
```
marantz_command.sendCommand("MSMCH STEREO")
```
## Control protocol documentation
These resources can be useful to learn what to send using the `command`channel:
- [AVR-X2000/E400](http://www2.aerne.com/Public/dok-sw.nsf/0c6187bc750a16fcc1256e3c005a9740/96a2ba120706d10dc1257bdd0033493f/$FILE/AVRX2000_E400_PROTOCOL(10.1.0)_V04.pdf)
- [AVR-X4000](https://usa.denon.com/us/product/hometheater/receivers/avrx4000?docname=AVRX4000_PROTOCOL(10%203%200)_V03.pdf)
- [AVR-3311CI/AVR-3311/AVR-991](http://www.awe-europe.com/documents/Control%20Docs/Denon/Archive/AVR3311CI_AVR3311_991_PROTOCOL_V7.1.0.pdf)
- [CEOL Piccolo DRA-N5/RCD-N8](http://www.audioproducts.com.au/downloadcenter/products/Denon/CEOLPICCOLOBK/Manuals/DRAN5_RCDN8_PROTOCOL_V.1.0.0.pdf)
- [Marantz Control Protocol (2014+)](http://m.us.marantz.com/DocumentMaster/US/Marantz%202014%20NR%20Series%20-%20SR%20Series%20RS232%20IP%20Protocol.xls)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

View File

@ -1,562 +0,0 @@
---
id: digitalstrom
label: digitalSTROM
title: digitalSTROM - Bindings
type: binding
description: "This binding integrates the [digitalSTROM-System](http://www.digitalstrom.de/)."
since: 2x
logo: images/addons/digitalstrom.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# digitalSTROM Binding
This binding integrates the [digitalSTROM-System](http://www.digitalstrom.de/).
The integration happens through the digitalSTROM-Server, which acts as a gateway to connect the digitalSTROM-Devices.
The digitalSTROM-Server communicates through the digitalSTROM-Meters with the digitalSTROM-Devices, which are directly connected to the power-line.
**Note:** All was tested with digitalSTROM-Server firmware version 1.9.3 to 1.10.3.
![various_digitalSTROM_clamps](doc/DS-Clamps.jpg)
## Supported Things
### digitalSTROM-Server
The digitalSTROM-Server is required for accessing any other digitalSTROM-Devices. It acts like a *"bridge"*.
### digitalSTROM-Devices
At this point almost all available **GE**, **SW**, **GR** and **BL** digitalSTROM-Devices with a set output-mode, unequal *disabled*, are supported by this binding. Furthermore sensor devices like the **dS-iSens200** and **SW-devices** with binary-inputs are supported.
Last but not least the **circuit** (dS-Meter) is supported, too. They will provide the power consumption and electric meter as channels.
For that there are identically named thing types. Only the *GR* type has a channel (shade), which cannot be changed. The other types add their channels dynamically affected by the set color-group and output-mode. They also automatically change or add the channels, if the color-group or output-mode has changed through the dSS-web-configuration or the configured sensor priorities of the thing has changed.
- The following table shows all tested digitalSTROM-Devices with their output-modes.
| HW-Type | Output-Mode | Tested color group |
|-----------------|------------------------|--------------|
| GE-KL200 | switched | yellow |
| GE-KM200 | switched, dimmed | yellow |
| GE-TKM210 | switched, dimmed | yellow |
| GE-SDM200 | switched, dimmed | yellow |
| GE-UMV200 | 1-10V dimmed | yellow |
| GR-KL200 | standard output-mode | grey |
| GR-KL210 | standard output-mode| grey |
| GR-KL220 | standard output-mode | grey |
| SW-KL200 | switch, powersave, wipe | black, yellow |
| SW-UMR200 | single switched, combined switch, combined 2 stage switch, combined 3 stage switch | yellow , black |
| SW-ZWS200 | switch, powersave, wipe | black, yellow |
| BL-KM200 | switch, pwm | blue |
- Binary-inputs were tested with SW-UMR200.
- Sensor channels were tested with dS-iSens200 and power sensor with all other supported devices, which are listed in the table above.
### digitalSTROM-Scenes
Furthermore the digitalSTROM-Scene concept is part of the digitalSTROM-Binding.
These scenes are implemented as virtual things.
The different scene thing types are listed in the following table.
| Thing-Type-ID | Label | Description |
|-----------------|------------------------|--------------|
| appScene | Apartment-Scene | Represents a digitalSTROM Apartment-Scene. |
| zoneScene | Zone-Scene | Represents a digitalSTROM Zone-Scene. |
| groupScene | Group-Scene | Represents a digitalSTROM Group-Scene. |
| namedScene | Named-Scene | Represents a digitalSTROM Scene, which has a user-defined name. |
### digitalSTROM-Zone-Temperature-Control
Last but not least, the digitalSTROM-Zone-Temperature-Control is also supported, if a zone-temerature-control is configured, as thing-type **zone_temperature_control**.
The difference between the digitalSTROM-heating-control-app is, that there are no operation-modes, like *comfort* or *eco*. You can directly set the target temperature, in case *pid-control* is configured, otherwise you can set the value in percent of heating valves at the zone.
The needed channels will be added automatically, as it is also the case for the devices.
## Discovery
The digitalSTROM-Server is discovered by mDNS or *dss.local.* at the local network.
Once the server is added as a thing, you have to set a user name and password or insert a valid application-token to authenticate with the server.
If the binding is authorized, it automatically reads all supported devices, the dS-Meters and temperature controlled configured zones, that are set up on the digitalSTROM-System, and puts them into the *inbox*.
digitalSTROM-Scenes can be discovered, too.
The background scene-discovery is deactivated by default to not flood the inbox.
Otherwise it will discover so many scenes, that it can be difficult to find the searched devices.
Discoverable scenes are all user named scenes, group scenes that are reachable by local push-buttons, zone scenes and apartment scenes.
The discovery also will discover all called scenes, if they aren't automatically discovered yet.
Temperature control scenes, like *eco* will be ignored, so they cannot be discovered.
If you only want to discover one of the thing types, you can start a discovery scan on the thing type you want to have discovered.
You can use the command line command, e.g.: ``smarthome:discovery start digitalstrom:namedScene`` to start the scan.
Which thing types this binding supports, please have a look at **Supported Things**.
## Thing Configuration and Properties
### digitalSTROM-Server
The digitalSTROM-Server thing has the following configuration parameter groups: *Connection configuration*, *Server information* and *General configurations*.
#### Connection configuration
If the digitalSTROM-Server isnt found automatically, e.g. because the server isnt placed at the local network or the mDNS-service is deactivated, you have to insert the network address or URL and the authentication data manually through the graphical user interface or type it into the \*.thing with textual configuration.
If you use your user name and password for authentication and there is already a token for this application, it will be automatically retrieved from the digitalSTROM-Server, otherwise a new application-token will be generated.
| Parameter Label | Parameter ID | Description | Required | Advanced
|--------------|------------|--------------------------------|----------------- |------------- |
| Network address | dSSAddress | Network address of the digitalSTROM-Server.| true | false |
| User name | userName | Name of a registered user to authenticate to the digitalSTROM-Server.| user name and password or Application-Token | false |
| Password | password | Password of a registered user to authenticate to the digitalSTROM-Server. | user name and password or Application-Token | false |
| Application-Token | applicationToken | The Application-Token to authenticate to the digitalSTROM-Server. | user name and password or Application-Token| false |
#### Server information
The parameter group *Server information* only includes informative parameters, which have no special functionality.
| Parameter Label | Parameter ID | Description | Required | Advanced
|-----------------|-------------|--------------------------|---------- |------------- |
| dSID | dSID | The unique identifier of a digitalSTROM-server. | false| false |
#### General configuration:
Here you can set general binding configuration parameters, which are shown in following table:
| Parameter Label | Parameter ID| Description | Required | Advanced | default
|-----------------|------------------|-----------------------------------------|---------------- |------------- | ----------------- |
| Sensor update interval | sensorDataUpdateInterval | Sets the seconds after the digitalSTROM-Device sensor data will be updated. If the priority is higher than 'never'. | false | false | 60 |
| Total power update interval | totalPowerUpdateInterval | Sets the interval in seconds, after the digitalSTROM total power consumption and total electric meter sensor data will be updated. | false | false | 30 |
| Days to be slaked trash bin devices | defaultTrashBinDeleateTime| Sets the days after the temporary saved digitalSTROM-Device configuration from not reachable digitalSTROM-Devices get permanently deleted. | false | false | 7 |
| Wait time sensor reading | sensorWaitTime| Waiting time between the evaluation of the sensor values and the reading of the scenes in seconds. **ATTENTION:** digitalSTROM rule 8 and 9 require a waiting period of 1 minute. Values less than 60 seconds could affect the digitalSTROM system. | false | true | 60 |
At the thing file, a manual configuration looks e.g. like
```
Bridge digitalstrom:dssBridge:dssBridge1 [ dSSAddress="dss.local.", userName="dssadmin", password="dssadmin", sensorDataUpdateInterval=180]
```
#### Properties
In addition to the configuration the digitalSTROM-Server has the following properties.
| Property-Name | Description |
| ------------- | ----------- |
| serverCert | The SSL-Certificate of the digitalSTROM-Server. |
| dS-Installation-Name | The digitalSTROM-System installation name. |
| version | The digitalSTROM-Server-Application version. |
| distroVersion | The digitalSTROM-Server firmware version. |
| Hardware | The digitalSTROM-Server hardware identifier. |
| Revision | The digitalSTROM-Server hardware revision number. |
| Serial | The digitalSTROM-Server hardware serial number. |
| Ethernet | The digitalSTROM-Server IEEE mac address. |
| MachineID | The digitalSTROM-Server unique id. |
| Kernel | The digitalSTROM-Server linux kernel release string. |
### digitalSTROM-Devices
The digitalSTROM-Device things have the following configuration parameter groups *Device information* and *Sensor setup*.
#### Device information
Each digitalSTROM-Device needs the device ID named dSID as configuration parameter.
The device ID is printed as serial number at the digitalSTROM-Device and can also be found within the web-interface of the digitalSTROM-Server.
The following table shows the parameter:
| Parameter Label | Parameter ID| Description | Required | Advanced
|-----------------|------------------------|--------------|----------------- |------------- |
| ID | dSID| The unique identifier of a digitalSTORM-device. | true | false |
#### Sensor setup
The GE, BL and SW digitalSTROM-Devices usually have sensors to capture power consumption data.
So these devices have the following parameters to read them out.
| Parameter Label | Parameter ID| Description | Required | Advanced | Default |
|-----------------|--------------------|-----------------------------|----------------- |------------- | -----------|
| Active power refresh priority | activePowerRefreshPriority | Sets the refresh priority for the active power sensor value. Can be never, low priority, medium priority or high priority. | false | false | never |
| Electric meter refresh priority | electricMeterRefreshPriority | Sets the refresh priority for the electric meter sensor value. Can be never, low priority, medium priority or high priority. | false | false | never |
| Output current refresh priority | outputCurrentRefreshPriority | Sets the refresh priority for the output current sensor value. Can be never, low priority, medium priority or high priority. | false | false | never |
#### Properties
Furthermore a supported digitalSTROM-Device has some informative properties.
The following table shows all informative properties:
| Property-Name | Description |
| ------------- | ------------------------------------- |
|dSUID | The unique identifier of a digitalSTORM-device with virtual devices. |
| deviceName | he name of a digitalSTROM-Device. |
| meterDSID | Identifier of the meter to which the device is connected. |
| hwInfo | The hardware type from this digitalSTROM-Device. |
| zoneID |The digitalSTROM-Device is part of this zone. |
| groups | The digitalSTROM-Device is part of this user-defined or functional groups. |
| output mode | The current digitalSTROM-Device output mode e.g. 22 = dimmable. |
| funcColorGroup | The current digitalSTROM-Device functional color group e.g. yellow = light. |
The device scene configurations will also be persisted in the properties. There are in the format:
| Property-Name | Description |
| ------------- | ------------------------------------- |
| scene[sceneID] | {Scene: [sceneID], dontcare: [don't care flag], localPrio: [local prio flag], specialMode: [special mode flag]}(0..1), {sceneValue: [scene value], sceneAngle: [scene angle]}(0..1) |
### digitalSTROM-Meter
A digitalSTROM-Meter needs, like the digitalSTROM-Devices, only the unique digitalSTROM device ID named dSID as configuration parameter, which has the same parameters, so please have a look at the point *Device information*.
#### Properties
In contrast to the digitalSTROM-Device there are other informal properties. The following table shows the available properties:
| Property-Name | Description |
| ------------- | ------------------------------------- |
| hwName | The hardware name of the digitalSTROM-Meter |
| swVersion | The software version of the digitalSTROM-Meter |
| apiVersion | The api version of the digitalSTROM-Meter |
| dspSwVersion | The dsp software version of the digitalSTROM-Meter |
| dSUID | The dSUID of the digitalSTROM-Meter |
| deviceName | The user defined name of the digitalSTROM-Meter |
| armSwVersion | The arm software version of the digitalSTROM-Meter |
| hwVersion | The hardware version of the digitalSTROM-Meter |
### digitalSTROM-Zone-Temperature-Control
The thing type of a digitalSTROM-Zone-Temperature-Control is **zone_temperature_control**.
As configuration only the zone ID or the zone name, to identify the controlled zone, is needed.
| Parameter Label | Parameter ID| Description | Required | Advanced |
|-----------------|------------------------|----------------------------------|----------------- |------------- |
| Zone ID or name | zoneID | The zone id or zone name of the temperature controlled zone. | true | false |
#### Properties
| Property-Name | Description |
| ------------- | ------------------------------------- |
| controlMode | The currently configured control mode. |
| controlDSUID | The dSID of the meter or service that runs the control algorithm. |
| controlState | The currently configured control state. |
### digitalSTROM-Scenes
The digitalSTROM-Scenes can be defined with following parameters.
| Parameter Label | Parameter ID| Description | Required | Advanced |
|-----------------|------------------------|----------------------------------|----------------- |------------- |
| Zone ID or name | zoneID | The zone ID or zone name of the called scene. 0 or empty is broadcast to all. | false | false |
| Group ID or name | groupID | The group ID or group name of the called scene. 0 or empty is broadcast to all. | false | false |
| Scene ID or name | sceneID |The call scene ID or scene name, e.g. preset 1 for scene ID 5. Callable scenes are from 0 to 126. | false | false |
The Scene-Thing-Type *Named-Scene* and *Group-Scene* have all parameters.
The *Apartment-Scene* only has the parameters *Scene name* and *Scene ID* an the *Zone-Scene* has all parameters without *Group ID or name*.
### Textual configuration examples
Usually the discovery works reliable, so that a manual configuration is not needed.
However, at the thing file, a manual configuration looks e.g. like
#### digitalSTROM-Devices
```
Thing digitalstrom:GE:GE-KM200 (digitalstrom:dssBridge:myDssBridge) [ dSID="3504175fe0000000000043d4", activePowerRefreshPriority="low", electricMeterRefreshPriority=“medium", outputCurrentRefreshPriority="high"]
Thing digitalstrom:GR:GR-KL200 (digitalstrom:dssBridge:myDssBridge) [ dSID="3504175fe0000000000043d5"]
```
#### digitalSTROM-Meters
```
Thing digitalstrom:circuit:circuit (digitalstrom:dssBridge:myDssBridge) [ dSID="3504175fe0000000000043d5"]
```
#### digitalSTROM-Zone-Temperature-Control
```
Thing digitalstrom:zone_temperature_control:zone_temperature_control3 (digitalstrom:dssBridge:myDssBridge) [ zoneID="3"]
```
#### digitalSTROM-Group-Scene
```
Thing digitalstrom:groupScene:preset1 (digitalstrom:dssBridge:myDssBridge) [ zoneID="3", groupID="1", sceneID="5"]
```
## Channels
All devices support some of the following channels:
### Output-Channels
digitalSTROM-Devices with an activated output mode.
| Channel Type ID | Item Type | Description | supported device type |
|-------|---------|------------------------------------|----------------- |
| light_dimmer | Dimmer | The *light_dimm* channel allows to dimm a light device. | GE, SW |
| light_switch | Switch | The *light_switch* channel allows to turn a light device on or off. | GE, SW |
| light_2_stage | String| The *light_2_stage* channel allows to turn both light devices on or off or switch only 1 of the both light device on or off. | SW-UMR200 |
| light_3_stage | String | The *light_3_stage* channel allows to turn both light devices on or off or switch both light devices separated from each other on or off. | SW-UMR200 |
| shade | Rollershutter | The *shade* channel allows to control shade device e.g. a roller shutter or awnings. | GR |
| shade_angle | Dimmer | The *shade_angle* channel allows to control the relative slat position in percent of blinds. | GR |
| general_dimmer | Dimmer | The *general_dimmer* channel allows to control the power of a device e.g. a ceiling fan. | SW |
| general_switch | Switch | The *general_switch* channel allows to turn a device on or off e.g. a HIFI-System. | SW |
| general_2_stage | String | The *general_2_stage* channel allows to turn both relais of the device on or off or switch only 1 of the both relais on or off. | SW-UMR200 |
| general_3_stage | String | The *general_3_stage* channel allows to turn both relais of the device on or off or switch both relais of the device separated from each other on or off. | SW-UMR200 |
| heating_switch | Switch | The *heating_switch* channel allows to turn a heating device on or off. | BL |
| heating_dimmer | Dimmer | The *heating_switch* channel allows to control the value in percent of heating valve. | BL |
digitalSTROM-Zone-Temperature-Controlled
| Channel Type ID | Item Type | Description |
|-------|---------|------------------------------------|
| heating_temperature_controled | Number | The *heating_temperature_controled* channel allows to set a target temperature of a zone. |
| heating_dimmer | Dimmer | The *heating_switch* channel allows to control the value in percent of heating valve. |
### Sensor-Channels
digitalSTROM-Devices which have sensors data.
| Channel Type ID | Item Type | Description | supported device type |
|-------|---------|------------------------------------|----------------- |
| active_power | Number | This channel indicates the current active power in watt (W) of the device." | GE, SW, BL |
| output_current | Number | This channel indicates the current output current in milliamper (mA) of the device." | GE, SW, BL |
| electric_meter | Number | This channel indicates the current electric meter value in killowatts hours (kWh) of the device. | GE, SW, BL |
| temperature_indoors | Number | This channel indicates the current temperature indoors in Celsius (°C) of the device. | dS-iSens200 |
| temperature_outdoors | Number | This channel indicates the current temperature outdoors in Celsius (°C) of the device. | --- |
| brightness_indoors | Number | This channel indicates the current brightness indoors in Lux (Lx) of the device. | --- |
| brightness_outdoors | Number | This channel indicates the current brightness outdoors in Lux (Lx) of the device. | --- |
| relative_humidity_indoors | Number | This channel indicates the current relative humidity indoors in percent of the device. | dS-iSens200 |
| relative_humidity_outdoors | Number | This channel indicates the current relative humidity outdoors in percent of the device. | --- |
| air_pressure | Number | This channel indicates the current relative humidity outdoors in hectopscal (hPa bzw. mbar) of the device. | --- |
| wind_speed | Number | This channel indicates the current wind speed in m/s of the device. | --- |
| wind_direction | Number | This channel indicates the current wind direction in degree of the device. | --- |
| precipitation | Number | This channel indicates the current precipitation in milliliter per square meter of the device. | --- |
| carbon_dioxide | Number | This channel indicates the current carbon dioxide in parts per million of the device. | --- |
| sound_pressure_level | Number | This channel indicates the current carbon dioxide in Dezibel (dB) of the device. | --- |
| room_temperation_set_point | Number | This channel indicates the current room temperation set point in Celsius (°C) of the device. | --- |
| room_temperation_control_variable | Number | This channel indicates the current room temperation control variable in Celsius (°C) of the device. | --- |
*If no supported device type is at the table, digitalSTROM currently does not offer a device, which support this type of sensor.
### Binary-Input-Channels
digitalSTROM-Devices which are able to set a binary-input sensor like SW-UMR200 or SW-AKM200.
| Channel Type ID | Item Type | Description | supported device type |
|-------|---------|------------------------------------|----------------- |
| binary_input_presence | Switch | Will be activated, if a presence is detected. | SW |
| binary_input_brightness | Switch | Will be activated, if the brightness is higher than a setted value. | SW |
| binary_input_presence_in_darkness | Switch | Will be activated, if a presence is detected. Sensor has a integrated twilight sensor. | SW |
| binary_input_twilight | Switch | Will be activated by twilight. | SW |
| binary_input_motion | Switch | Will be activated, if a motion is detected. | SW |
| binary_input_motion_in_darkness | Switch | Will be activated, if a motion is detected. Sensor has a integrated twilight sensor. | SW |
| binary_input_smoke | Switch | Will be activated, if smoke is detected. | SW |
| binary_input_wind_strenght_above_limit | Switch | Will be activated, if wind strength is above a user adjusted limit. | SW |
| binary_input_rain | Switch | Will be activated, if rain is detected. | SW |
| binary_input_sun_radiation | Switch | Will be activated, if the sun light is above threshold. | SW |
| binary_input_temperation_below_limit | Switch | Will be activated, if the temperature is below a limit. | SW |
| binary_input_battery_status_is_low | Switch | Will be activated, if the battery status is low. | SW |
| binary_input_window_is_open | Switch | Will be activated, if a window is open. | SW |
| binary_input_door_is_open | Switch | Will be activated, if a door is open. | SW |
| binary_input_window_is_tilted | Switch | Will be activated, if a window is tilted. | SW |
| binary_input_garage_door_is_open | Switch | Will be activated, if a garage door is open. | SW |
| binary_input_sun_protection | Switch | Will be activated, if the sun light is too heavy. | SW |
| binary_input_frost | Switch | Will be activated by frost. | SW |
| binary_input_heating_operation_on_off | Switch | Will be activated, if heating operation is on, otherwise it will be deactivated. | SW |
| binary_input_change_over_heating_cooling | Switch | Will be activated, if heating is activated, otherwise cooling is activated. | SW |
### Metering-Channels
The digitalSTROM-Meters
| Channel Type ID | Item Type | Description | supported device type |
|-------|---------|------------------------------------|----------------- |
| consumption_Wh | Number | The *consumption_Wh* channel indicates the current power consumption in watt (W) of the circuit. | circuit |
| energy_Wh | Number | The *energy_Wh* channel indicates the current electric meter value in killowatt hours of the circuit. | circuit |
The digitalSTROM-Server
| Channel Type ID | Item Type | Description | supported device type |
|-------|---------|------------------------------------|----------------- |
| total_consumption_Wh | Number | The *total_consumption_Wh* channel indicates the current consumption power in watt (W) of all connected circuits to the digitalSTROM-System. | dssBridge |
| total_energy_Wh | Number | The *total_energy_Wh* channel indicates the current electric meter value in killowatt hours of all connected circuits to the digitalSTROM-System. | dssBridge |
### Scenes
| Channel Type ID | Item Type | Description | supported device type |
|-------|---------|------------------------------------|----------------- |
| scene | Switch | The scene channel allows to call or undo a scene from digitalSTROM. | all scene-types |
**Notes: **
*Channels with accepted command type increase and decrease:*
* digitalSTROM will only evaluate increase and decrease commands, if a scene was called before which turn the device on.
*Blinds:*
* Increase, decrease and up, down commands of the shade channel changes the angle in digitalSTROM, too. If you want to set only the position, you have to set the value directly.
* To protect the slats digitalSTROM changes the position by setting the angle, too, if the position is very high or low. So if you want to see the correct position, you have to send a refresh or stop command, if the blind is ready.
## Full Example
### demo.things:
```
Bridge digitalstrom:dssBridge:dSS [ dSSAddress="urlOfMyDss", userName="dssadmin", password="mySecretPassword", sensorDataUpdateInterval=180] {
GE GE-KM-200 [ dSID="3504175fe000000000010db9", activePowerRefreshPriority="low", electricMeterRefreshPriority="medium", outputCurrentRefreshPriority="high"]
SW SW-ZWS-200 [ dSID="3504175fe0000000000651c0"]
SW SW-UMR-200 [ dSID="302ed89f43f00ec0000a1034"]
dSiSens200 dS-iSens200 [ dSID="302ed89f43f026800003543d"]
zoneTemperatureControl zoneTemperatureControl [ zoneID="livingroom"]
GR GR-KL220 [ dSID="3504175fe0000000000651c1" ]
namedScene Scene1 [ zoneID="5", groupID="1", sceneID="5"]
circuit circuit1 [ dSID="3504175fe0000010000004e4" ]
GR GR-KL200 [ dSID="3504175fe0000000000651c1" ]
}
```
### demo.items:
```
//dSS
Number TotalActivePower { channel="digitalstrom:dssBridge:dSS:total_consumption_wh" }
Number TotalElectricMeter { channel="digitalstrom:dssBridge:dSS:total_energy_wh" }
//circuit (circuit1)
Number TotalActivePowerDsm { channel="digitalstrom:circuit:dSS:circuit1:energy_wh" }
Number TotalElectricMeterDsm { channel="digitalstrom:circuit:dSS:circuit1:consumption_wh" }
//Light (KM-200)
Dimmer Brightness { channel="digitalstrom:GE:dSS:GE-KM-200:light_dimmer" }
Number ActivePower { channel="digitalstrom:GE:dSS:GE-KM-200:active_power" }
Number OutputCurrent { channel="digitalstrom:GE:dSS:GE-KM-200:output_current" }
Number ElectricMeter { channel="digitalstrom:GE:dSS:GE-KM-200:electric_meter" }
//Device
Switch DeviceSwitch { channel="digitalstrom:SW:dSS:SW-ZWS-200:general_switch" }
//Rollershutter (GR-KL200)
Rollershutter Shutter { channel="digitalstrom:GR:GR-KL200:shade" }
//Blind (GR-KL220)
Rollershutter BlindPosition { channel="digitalstrom:GR:GR-KL210:shade" }
Dimmer BlindAngle { channel="digitalstrom:GR:GR-KL210:shade_angle" }
//Scene (Scene1)
Switch Scene { channel="digitalstrom:namedScene:dSS:Scene1:scene" }
//binary input device (SW-UMR-200)
Switch SensorSwitch { channel="digitalstrom:SW:dSS:SW-UMR-200:binary_input_change_over_heating_cooling" }
//indoor climate (dSiSens200)
Number TempIndoor { channel="digitalstrom:dSiSens200:dSS:dS-iSens200:temperature_indoors" }
Number HumidityIndoor { channel="digitalstrom:dSiSens200:dSS:dS-iSens200:relative_humidity_indoors" }
//target temperature (zoneTemperatureControl)
Number Temperature { channel="digitalstrom:zoneTemperatureControl:dSS:zoneTemperatureControl:heating_temperature_controlled" }
```
### demo.sitemap:
```
sitemap demo label="Main Menu"
{
Frame label="System" {
Frame label="digitalSTROM-Server"{
Text item=TotalActivePower
Text item=TotalElectricMeter
}
Frame label="digitalSTROM-Meter"{
Text item=TotalActivePowerDsm
Text item=TotalElectricMeterDsm
}
}
Frame label="Climate" {
Frame label="heating/cooling"{
Switch item=SensorSwitch
}
Frame label="iSens200"{
Text item=TempIndoor
Text item=HumidityIndoor
}
Frame label="Target temperature"{
Slider item=Temperature
Text item=Temperature
}
}
Frame label="Shade"{
Frame label="Rollerschutter"{
Slider item=Shade
Text item=Shade
}
Frame label="Blind"{
Slider item=BlindPosition
Slider item=BlindAngle
}
}
Frame label="Scenes"{
Frame label="TV scene"{
Switch item=Scene
}
}
Frame label="HiFi" {
Frame label="TV light"{
Slider item=Brightness
Switch item=Brightness
Text item=ActivePower
Text item=OutputCurrent
Text item=ElectricMeter
}
Frame label="TV"{
Switch item=DeviceSwitch
}
}
}
```
## General-Informations
### digitalSTROM-Scenes
The device scene configuration will be saved persistently to the thing properties, if the thing is not textual configured (because textual configured things will not be persisted), to update the device state faster.
For that each scene configuration of each device has to be read out first, because of the digitalSTROM-rule 9 that requires a waiting period of one minute, that take some time so that at the first start a scene call can be take some time to read it out and update the device state.
To read it out faster only the discovered or called scenes will be read out.
**Note:**
Because the digitalSTROM-Server can't inform the binding about save scene events at this time, the persistently saved scene configurations can't be updated.
The current troubleshooting to read out the new scene configuration after a save scene action at the digitalSTROM-Server is the following:
1. delete the thing to delete the persistently saved scene configuration
2. restart the server to delete the temporary saved scene configuration
3. add the thing again to read out the scene configuration again.
### Initial state of digitalSTROM-Scenes and devices
To get the device and scene state after a server start or restart, the binding uses the last called group scenes of digitalSTROM.
Because of that there are two things to be observed:
1. If a device status has changed through a device scene or a directly set output value, the status is maybe not correct.
2. If the last called group scene was not read out yet, it can takes some time until the status will be updated.
### Textual configuration notice
If you configure your system with textual configuration files, like *\*.thing*, there is one things you have to consider.
* The feature of the persisting of scene-configurations, to get the scene-configurations after a restart faster (see *digitalSTROM-Scenes* above), will not support textural configured things, because the properties cannot be persist in this case.
### Rule specific notice
If you want to create a rule, which uses things of the digitalSTROM-Binding, there are also two things you have to consider.
1. If the rule contains several digitalSTROM-Devices, which can be summarized in a digitalSTROM-Scene, e.g. some lights in a zone, please use a equivalent supported scene. That will significantly reduce the communication to the digitalSTROM-Server, increases performance and does not bypass the digitalSTROM state-machine.
2. If you implement your own temperature control algorithm for a zone/room, e.g. because you want to use other temperature sensors, and call more than one digitalSTROM-BL-KM200, please use the *zone_temperature_control* for valve value control. The *zone_temperature_control* for valve value control will call all digitalSTROM-BL-KM200 with one command and increases the performance. To get the needed channel at the *zone_temperature_control* you have to choose a control mode unequal to *pid-controlled* for the affected zone at the digitalSTROM-heating-control-app.

View File

@ -1,216 +0,0 @@
---
id: digitalstrom
label: digitalSTROM
title: digitalSTROM - Bindings
type: binding
description: "The openHAB digitalSTROM binding allows interaction with digitalSTROM devices."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.digitalstrom/README.md
since: 1x
logo: images/addons/digitalstrom.png
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# digitalSTROM Binding
The openHAB digitalSTROM binding allows interaction with digitalSTROM devices.
<!-- MarkdownTOC depth=1 -->
- [Prerequisites](#prerequisites)
- [Binding Configuration](#binding-configuration)
- [Item Configuration](#item-configuration)
- [Examples](#examples)
- [Notes](#notes)
<!-- /MarkdownTOC -->
There is also a binding specifically for openHAB 2 [here](http://docs.openhab.org/addons/bindings/digitalstrom/readme.html).
## Prerequisites
### digitalSTROM server add-on
- Unzip [DigitalSTROM_OPENHAB_ADD-ON.zip](https://github.com/openhab/openhab/raw/master/bundles/binding/org.openhab.binding.digitalstrom/DigitalSTROM_OPENHAB_ADD-ON.zip)
- copy "openhab/openhab.js" to your dss server "/usr/share/dss/add-ons/"
- copy "openhab.xml" to your dss server "/usr/share/dss/data/subscriptions.d/"
### digitalSTROM server certificate
The digitalSTROM JSON service interface is limited to the https protocol.
For security reasons, creating a self signed cetificate with correct given hostname is requird.
Follow these steps:
1. openssl genrsa -out privkey.pem 1024
1. chmod 400 privkey.pem
1. openssl req -new -key privkey.pem -out certreq.csr
Enter your details:
Country Name (2 letter code) [AU]: DE // not important
State or Province Name (full name) [Some-State]: NRW // not important
Locality Name (eg, city) []: Gummersbach // not important
Organization Name (eg, company) [Internet Widgits Pty Ltd]: dss.local // network name of your dss, important
Organizational Unit Name (eg, section) []: dss.local // network name of your dss, important
Common Name (eg, YOUR name) []: dss.local // network name of your dss, important
Email Address []: // not important
Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: // not important, press enter
An optional company name []: // not important, press enter
1. openssl x509 -req -days 9000 -in certreq.csr -signkey privkey.pem -out dsscert.pem
1. cat privkey.pem >> dsscert.pem
Copy the newly generated certificate onto your digitalSTROM server and
import it to java trusted store of your openHAB server by using java keytool.
Keytool usage:
$JAVA_HOME/bin/keytool -importcert -alias <some descriptive name> -keystore <path to keystore> -file <certificate file>
Keytool usage example (OS X):
sudo keytool -importcert -alias DSS -keystore /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts -file dss.local.pem
### loginToken
- To obtain a loginToken, point your browser to https://dss.local:8080/json/system/requestApplicationToken?applicationName=openHAB
- Store the result in openhab.cfg file
- After receiving the application token you need to enable it in your digitalSTROM configurator under System -> Zugriffsberechtigung
## Binding Configuration
The binding can be configured in the file `services/digitalstrom.cfg`.
| Property | Default | Required | Description |
|-----------------|---------|:--------:|-------------|
| uri | | Yes | The hostname and port of the digitalSTROM server (dSS); eg. https://dss.local:8080
| connectTimeout | 4000 | No | The connect timeout (in milliseconds)
| loginToken | | No | A token to allow login without a username and password; required if `user` and `password` settings are not specified
| password | dssadmin| No | The username to use for login; required if `loginToken` setting is not specified
| readTimeout | 10000 | No | The read timeout (in milliseconds)
| refreshinterval | 1000 | No | The refresh interval (in milliseconds)
| user | dssadmin| No | The password to use for login; required if `loginToken` setting is not specified
Note: if the `loginToken`, `user`, and `password` settings are all specified, the `loginToken` will be used for login.
## Item Configuration
Item bindings must conform to the following format:
digitalstrom="<key1>:<value1>[#<keyN>:<valueN>]"
See examples below.
The following keys are supported:
dsid // digitalSTROM device id; the shorter dsid, known as S.N: xxxxxxxx (8 letters), is also supported
dsmid // digitalSTROM meter id (dSM)
consumption // optional for metering
timeinterval // timeinterval to initiate a metering job
context // in some cases use context:
zoneid // only in combination with a NumberItem or StringItem for apartment or zone calls
groupid // only in combination with a NumberItem or StringItem for apartment or zone calls
The following are the supported values for the `consumption` key:
ACTIVE_POWER // in use with a device or meter -> current power consumption (w)
OUTPUT_CURRENT // only in use with a device -> amperage (mA)
ELECTRIC_METER // only in use with a meter (wh)
The following are the supported values for the `context` key:
slat // important if it's a roller shutter: to have a item to control the slats
awning // important for roller shutter: if it's a marquee/awning to show the right icon -> open-close
apartment // in combination with a NumberItem or StringItem to make apartment calls
zone // in combination with a NumberItem or StringItem to make zone calls
## Examples
### Items
Switch Light_GF_Corridor_Ceiling "Ceiling" {digitalstrom="dsid:3504175fe000000000000001"}
Dimmer Light_GF_Living_Table "Table" {digitalstrom="dsid:3504175fe000000000000001"}
### Rollershutter
Rollershutter Shutter_GF_Living "Livingroom" {digitalstrom="dsid:3504175fe000000000000001"}
In case of marquee/awning add the `context` key with a value of `awning`:
Rollershutter Shutter_GF_Living "Livingroom" {digitalstrom="dsid:3504175fe000000000000001#context:awning"}
### Jalousie
For up and down use:
Rollershutter Shutter_GF_Living_UP_DOWN "Livingroom UP/DOWN" {digitalstrom="dsid:3504175fe000000000000001"}
Add the `context` key with a value of `slat` to adjust the slats:
Rollershutter Shutter_GF_Living_UP_DOWN "Livingroom UP/DOWN" {digitalstrom="dsid:3504175fe000000000000001#context:slat"}
### Scenes
To call apartment or zone scenes use NumberItems or StringItems:
Number|String Apartment_Scene "Apartment Scene" {digitalstrom="context:apartment"}
Number|String All_Apartment_Lights "All lights" {digitalstrom="context:apartment#groupid:1"} //optional add groupid
Number|String Zone_Scene "Room Scene" {digitalstrom="context:zone#zoneid:65535"}
Number|String All_Zone_Lights "All room lights" {digitalstrom="context:zone#zoneid:65535#groupid:1"} //optional add groupid
And add mappings in the .sitemap file:
Selection item=Apartment_Scene label="Apartment Scene Selection" mappings=[65=Panik, 72=Gehen] // here you have to use a valid sceneID
Switch item=Zone_Scene label="Room Scene" mappings=[14=On, 13=Off] // here you have to use a valid sceneID
### Consumption
To poll and/or persist/visualize the curent power consumption (ACTIVE_POWER), use StringItems or NumberItems.
#### Device consumption
Number Power_Consumption_TV "TV [%d W]" {digitalstrom="dsid:3504175fe000000000000001#consumption:ACTIVE_POWER#timeinterval:60000"} // read device power consumption every 60 seconds
Be aware that the system will work very slow on sensor reading.
The [digitalSTROM Basic Concepts document](http://developer.digitalstrom.org/Architecture/ds-basics.pdf) (p. 36) says:
Rule 8 "Application processes that do automatic cyclic reads or writes of
device parameters are subject to a request limit: at maximum one request
per minute and circuit is allowed."
Rule 9 "Application processes that do automatic cyclic reads of measured
values are subject to a request limit: at maximum one request per minute
and circuit is allowed."
#### Circuit consumption
Number Consumption_dSM "dSM [%d W]" {digitalstrom="dsmid:3504175fe000001000000001#consumption:ACTIVE_POWER#timeinterval:3000"} // read power consumption every 3 seconds (it 'works' because here we read cached values)
#### Apartment consumption
Number Consumption_House "Total house consumption [%s W]" {digitalstrom="dsmid:ALL#consumption:ACTIVE_POWER#timeinterval:3000"}
#### General metering/consumption note
- The timeinterval only initiates a metering job; there is no guarantee that the worker will start it in this time!
- It is better to read the consumption of meters (dSMs) instead of devices.
## Notes
At first the system is slow while it learns how to react on specific scene calls (sensor reading). But after some time it will work fast!

View File

@ -1,76 +0,0 @@
---
id: diyonxbee
label: DIYOnXBee
title: DIYOnXBee - Bindings
type: binding
description: "The openHAB DIYOnXBee binding allows interaction with self built (DIY) hardware that communicate via XBee modules."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.diyonxbee/README.md
since: 1x
logo: images/addons/diyonxbee.png
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# DIYOnXBee Binding
The openHAB DIYOnXBee binding allows interaction with self built (DIY) hardware that communicate via XBee modules.
## Prerequisites
The XBee connected to openHAB has to be configured to run in API mode.
## Binding Configuration
The binding may be configured in the file `services/diyonxbee.cfg`.
| Property | Default | Required | Description |
|------------|---------|:--------:|-------------------------------------|
| serialPort | | Yes | The serial port on which to connect |
| baudRate | 9600 | No | The baud rate to use |
## Item Configuration
A binding beginning with `<` defines an input, while a binding beginning with `>` defines an output.
## Examples
### diyonxbee.cfg
serialPort=/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A702NX9M-if00-port0
baudRate=9600
### Items
Number Living_Temperature "Temperatur [%.1f °C]" <temperature> (GF_Living) { diyonxbee="<0013A20040B40F18:Temperature" }
Switch Living_Motion "Bewegung [MAP(de.map):%s]" <present> (GF_Living,GPresence) { diyonxbee="<0013A20040B40F18:MOTION" }
Color Living_Stripe "Living RGB Stripe" <lights> (GF_Living) { diyonxbee="<0013A20040B40F18:Stripe" }
## Notes
### Protocol
The protocol is text-based to allow simple development/debugging of the Arduino code
even without using the XBee (any serial console will do).
For the pure sensors, the Arduino has to send lines conaining key=value. From the
example item configuration above, a valid message would be:
Temperature=21.3
MOTION=ON
For the actors, the Arduino has to send the received command back to the sender;
this ensures that the openHAB item state is only updated when the command was
correctly understood.
Currently, RGB LED stripes (openHAB type Color), switches and dimmers are supported.
### Sample Arduino Sketch
There is an Arduino library with example [here](https://github.com/juri8/diyonxbee-library).

View File

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

View File

@ -1,247 +0,0 @@
---
id: dmx
label: DMX
title: DMX - Bindings
type: binding
description: "The DMX binding integrates DMX devices. There are different output devices supported as well as Dimmers and Chasers."
since: 2x
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# DMX Binding
The DMX binding integrates DMX devices. There are different output devices supported as well as Dimmers and Chasers.
Each output device (bridges) is representing exactly one universe, each thing is bound to a bridge.
At least one bridge and one thing is needed for the binding to work properly.
## Supported Things
### Bridges
Two DMX over Ethernet devices are supported as DMX output: ArtNet and sACN/E1.31.
The ArtNet bridge can only be operated in unicast mode (broadcast mode is not supported as the specification recommends using it if more than 40 nodes are connected, which is unlikely in the case of a smarthome).
The sACN bridge supports both, unicast and multicast.
Additionally Lib485 devices are supported via the Lib485 bridge.
### Things
The most generic thing is a dimmer.
A dimmer can contain one or more DMX channels.
It can be bound to Switch and Dimmer items.
If more than one DMX channel is defined, the item will be updated according to the state of the first DMX channel.
There are two other things similar to the dimmer thing.
One is the color thing, it can be bound to Switch, Dimmer or Color Items and is best used for RGB lamps.
The second one is the tunable white thing, it allows to control the color temperature of lamps with seperate DMX channels for cool white and warm white.
The last supported thing is a chaser.
It can contain one or more DMX channels and binds to Switch items only.
If the thing receives an ON command all running fades in all channels are either suspended (if resumeAfter is set to true) or cleared and replaced with the fades defined in this thing.
An OFF command stops the fades and either restores the previously suspended fades (if resumeAfter is set to true) or just holds the current values.
If any of the DMX channels in a chaser receives a command from another thing, the status of the chaser is updated to OFF.
Chaser things define a control channel that can be used to dynamically change the chasers fade configuration.
## Discovery
Discovery is not supported at the moment. You have to add all bridges and things manually.
## Thing Configuration
Since the brightness perception of the human eye is not linear, all bridges support `applycurve`, a list of channels `applycurve` that have a CIE 1931 lightness correction (cf. [Poynton, C.A.: “Gamma” and its Disguises: The Nonlinear Mappings of Intensity in Perception, CRTs, Film and Video, SMPTE Journal Dec. 1993, pp. 1099 - 1108](http://www.poynton.com/PDFs/SMPTE93_Gamma.pdf)) applied.
This list follows the format of the thing channel definition.
This is used regardless of the thing(s) that are associated to the channel.
All bridges can make use of the `refreshrate` option.
It determines at what frequency the DMX output is refreshed.
The achievable refresh rate depends on the number of channels and the output type.
A value of `0` disables the output, the default value is 30 Hz.
### ArtNet Bridge (`artnet-bridge`)
The ArtNet bridge has one mandatory configuration value: network address (`address`).
The network address defines the IP address of the receiving node, it is also allowed to use a FQDN if DNS resolution is available.
If necessary the default port 6454 can be changed by adding `:<port>` to the address.
Multiple receivers can be added, separated by a comma.
The universe (`universe`) can range from 0-32767, this value defaults to 0.
There are two more configuration values that usually don't need to be touched.
The address and port of the sender will be automatically selected by the kernel, if they need to be set to a fixed value, this can be done with `localaddress`.
The format is identical to the receiver address.
Unlike DMX512-A (E1.11), the ArtNet standard allows to suppress repeated transmissions of unchanged universes for a certain time.
This is enabled by default and will re-transmit unchanged data with a fixed refresh rate of 800ms.
If for some reason continuous transmission is needed, the `refreshmode` can be set to `always`, opposed to the default `standard`.
### Lib485 Bridge (`lib485-bridge`)
The Lib385 bridge has one mandatory configuration value: network address (`address`).
This is the host/port where lib485 is running.
This can be an IP address but it is also allowed to use a FQDN if DNS resolution is available.
If necessary the default port 9020 can be changed by adding `:<port>` to the address.
The default address is localhost.
Multiple receivers can be added, separated by a comma.
### sACN/E1.31 Bridge (`sacn-bridge`)
The sACN bridge has one mandatory configuration value: transmission mode (`mode`).
The transmission mode can be set to either `unicast` or `multicast`, where the later one is the default value.
If unicast mode is selected, it is mandatory to define the network address (`address`) of the receiving node.
This can be an IP address but it is also allowed to use a FQDN if DNS resolution is available.
If necessary the default port 5568 can be changed by adding `:<port>` to the address.
Multiple receivers can be added, separated by a comma.
The universe (`universe`) can range from 1-63999, this value defaults to 1.
There are some more configuration values that usually don't need to be touched.
The address and port of the sender will be automatically selected by the kernel, if they need to be set to a fixed value, this can be done with `localaddress`.
The format is identical to the receiver address.
Unlike DMX512-A (E1.11), the E1.31 standard allows to suppress repeated transmissions of unchanged universes for a certain time.
This is enabled by default and will re-transmit unchanged data with a fixed refresh rate of 800ms.
If for some reason continuous transmission is needed, the `refreshmode` can be set to `always`, opposed to the default `standard`.
### Chaser Thing (`chaser`)
There are two mandatory configuration values for a chaser thing: the `dmxid` and `steps`.
The `dmxid` is a list of DMX channels that are associated with this thing.
There are several possible formats: `channel,channel,channel,...` or `channel/width` or a combination of both.
The `steps` value is a list of steps that shall be run by the chaser.
The format of a single step is `fadetime:value,value2, ...:holdtime`, two or more steps are concatenated by `step1|step2|...`.
In textual configuration line-breaks, spaces and tabs are allowed for readability.
The fadetime is used for fading from the current value to the new value.
In contrast to the dimmer thing, this is an absolute value.
The hold time defines how long this step shall wait before advancing to the next step.
A value of -1 is used to hold forever.
Both times are in ms.
An optional configuration value is `resumeafter`.
It defaults to false but if set to true, the original state of the channel (including running fades) will be suspended until the chaser receives an OFF command.
### Dimmer Thing (`dimmer`)
There is one mandatory configuration value for a dimmer thing.
It is the `dmxid`, a list of DMX channels that are associated with this thing.
There are several possible formats: `channel1,channel2,channel3,...` or `channel/width` or a combination of both.
The `fadetime` option allows a smooth transition from the current to the new value.
The time unit is ms and the interval is for a fade from 0-100%.
If the current value is 25% and the new value is 75% the time needed for this change is half of `fadetime`.
`fadetime`is used for absolute values or ON/OFF commands send to the `brightness` channel.
Related is the `dimtime` option: it defines the time in ms from 0-100% if incremental dimming (`INCREASE`/`DECREASE`) is used.
For convenient use `dimtime` usually is set to a larger value than `fadetime`.
Typical values are 500-1000 ms for `fadetime` and 2000-5000 ms for `dimtime`.
Advanced options are the `turnonvalue`and the `turnoffvalue`.
They default to 255 (equals 100%) and 0 (equals 0%) respectively.
This value can be set individually for all DMX channels, the format is `value1,value2, ...` with values from 0 to 255.
If less values than DMX channels are defined, the values will be re-used from the beginning (i.e. if two values are defined, value1 will be used for channel1, channel3, ... and value2 will be used for channel2, channel4, ...).
These values will be used if the thing receives an ON or OFF command.
### Color Thing (`color`)
There is one mandatory configuration value for a dimmer thing.
It is the `dmxid`, a list of DMX channels that are associated with this thing.
There are several possible formats: `channel1,channel2,channel3,...` or `channel/width` or a combination of both.
The number of channels has to be a multiple of three.
The `fadetime` option allows a smooth transition from the current to the new value.
The time unit is ms and the interval is for a fade from 0-100%.
If the current value is 25% and the new value is 75% the time needed for this change is half of `fadetime`.
`fadetime`is used for absolute values or ON/OFF commands send to the `brightness` channel.
Related is the `dimtime` option: it defines the time in ms from 0-100% if incremental dimming (`INCREASE`/`DECREASE`) is used.
For convenient use `dimtime` usually is set to a larger value than `fadetime`.
Typical values are 500-1000 ms for `fadetime` and 2000-5000 ms for `dimtime`.
Advanced options are the `turnonvalue`and the `turnoffvalue`.
They default to 255 (equals 100%) and 0 (equals 0%) respectively.
This value can be set individually for all DMX channels, the format is `value1,value2, ...` with values from 0 to 255.
If less values than DMX channels are defined, the values will be re-used from the beginning (i.e. if two values are defined, value1 will be used for channel1, channel3, ... and value2 will be used for channel2, channel4, ...).
These values will be used if the thing receives an ON or OFF command.
### Tunable White Thing (`tunablewhite`)
There is one mandatory configuration value for a dimmer thing.
It is the `dmxid`, a list of DMX channels that are associated with this thing.
There are several possible formats: `channel1,channel2,channel3,...` or `channel/width` or a combination of both.
The number of channels has to be even. In the order "cool white, warm white".
Additionally a channel for cool and warm white brightness as well as color temperature (`0` being the coolest, `100` being the warmest) will be provided.
The `fadetime` option allows a smooth transition from the current to the new value.
The time unit is ms and the interval is for a fade from 0-100%.
If the current value is 25% and the new value is 75% the time needed for this change is half of `fadetime`.
`fadetime`is used for absolute values or ON/OFF commands send to the `brightness` channel.
Related is the `dimtime` option: it defines the time in ms from 0-100% if incremental dimming (`INCREASE`/`DECREASE`) is used.
For convenient use `dimtime` usually is set to a larger value than `fadetime`.
Typical values are 500-1000 ms for `fadetime` and 2000-5000 ms for `dimtime`.
Advanced options are the `turnonvalue`and the `turnoffvalue`.
They default to 255 (equals 100%) and 0 (equals 0%) respectively.
This value can be set individually for all DMX channels, the format is `value1,value2, ...` with values from 0 to 255.
If less values than DMX channels are defined, the values will be re-used from the beginning (i.e. if two values are defined, value1 will be used for channel1, channel3, ... and value2 will be used for channel2, channel4, ...).
These values will be used if the thing receives an ON or OFF command.
## Channels
| Type-ID | Thing | Item | Description |
|-----------------|---------------------|----------------------|----------------------------------------------------|
|brightness |dimmer, tunablewhite |Switch, Dimmer | controls the brightness |
|color |color |Switch, Dimmer, Color | allows to set the color and brightness |
|colortemperature |tunablewhite |Number | allows to set the color temperature |
|brightness_r |color |Switch, Dimmer | controls the brightness of the red channel |
|brightness_g |color |Switch, Dimmer | controls the brightness of the green channel |
|brightness_b |color |Switch, Dimmer | controls the brightness of the blue channel |
|brightness_cw |tunablewhite |Switch, Dimmer | controls the brightness of the cool white channel |
|brightness_ww |tunablewhite |Switch, Dimmer | controls the brightness of the warm white channel |
|control |chaser |String | allows to change the chaser steps |
|switch |chaser |Switch | turns the chaser ON or OFF |
|mute |(all bridges) |Switch | mutes the DMX output of the bridge |
*Note:* the string send to the control channel of chaser things has to be formatted like the `steps` configuration of the chaser thing. If the new string is invalid, the old configuration will be used.
## Full Example
This example defines a sACN/E1.31 bridge in unicast mode which transmits universe 2 and three things: a three channel dimmer used to control a RGB light, which takes 1s to fade from one color to another and 10s from 0-100% on incremental dim commands, a single channel dimmer which will turn on only to 90% if it receives a ON command and does not fully switch off (to 10%) if it receives an OFF command and chaser which changes the colors like a traffic light.
### demo.things:
```
Bridge dmx:sacn-bridge:mybridge [ mode="unicast", address="192.168.0.60", universe=2 ] {
color rgb [dmxid="5/3", fadetime=1000, dimtime=10000 ]
dimmer single [dmxid="50", fadetime=1000, turnonvalue="230", turnoffvalue="25" ]
chaser ampel [dmxid="10,12,13", steps="100:255,0,0:1000|100:255,255,0:500|100:0,0,255:1000|100:0,255,0:500" ]
}
```
### demo.items:
```
Color MyColorItem "My Color Item" { channel="dmx:color:mybridge:rgb:color" }
Dimmer MyDimmerItem "My Dimmer Item" { channel="dmx:dimmer:mybridge:single:brightness" }
Switch MyChaserItem "My Chaser Item" { channel="dmx:chaser:mybridge:ampel:switch" }
```
### demo.sitemap:
```
sitemap demo label="Main Menu"
{
Frame {
// Color
Colorpicker item=MyColorItem
// Dimmer
Switch item=MyDimmerItem
Slider item=MyDimmerItem
// Chaser
Switch item=MyChaserItem
}
}
```

View File

@ -1,253 +0,0 @@
---
id: dmx
label: DMX
title: DMX - Bindings
type: binding
description: "The openHAB DMX binding can control DMX devices like RGB LED strips, dimmers"
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.dmx/README.md
since: 1x
install: legacy
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# DMX Binding
The openHAB DMX binding can control DMX devices like RGB LED strips, dimmers
and more.
<!--[Demo Video](http://www.youtube.com/watch?v=o0J4qyyfhio)-->
[![Demo Video](http://img.youtube.com/vi/o0J4qyyfhio/0.jpg)](http://www.youtube.com/watch?v=o0J4qyyfhio)
The DMX binding consists of 2 bundles: the core binding bundle
(org.openhab.binding.dmx.jar), which is responsible for managing the openHAB
items and commands and the device interface bundle, which is responsible for
sending commands to a DMX device.
The following device interface bundles are available:
- org.openhab.binding.dmx.artnet : An interface using Artnet (since 1.4.0)
- org.openhab.binding.dmx.ola : An interface using
[OLA](https://www.openlighting.org/ola/) as a bridge. This interface only
supports localhost bindings.
## Prerequisites
To use the DMX binding, install the core bundle and **one** device interface
bundle and add binding information to your configuration, then define
appropriate connection details.
If you use the OLA interface, you will also need to configure OLA.
See "Installing OLA" below.
## Binding Configuration
The binding can be configured in the file `services/dmx.cfg`.
| Property | Default | Required | Description |
|------------|---------|:--------:|----------------------------------------------------------|
| connection | | Yes | A set of IP addresses and ports to use to connect |
| repeatMode | always | No | How often the output will be refreshed (in milliseconds) |
`repeatMode` may take any of these values: always, never, reduced.
- `always` will send every update, regardless of a change
- `never` sends updates only when there has been a change (this is the behaviour
of pre-1.9.0 versions)
- `reduced` sends three updates if nothing has changed and then suppresses the
output for approximately 800 milliseconds
## Item Configuration
DMX channels can be linked to switch, dimmer and color items.
The DMX binding configuration contains a channel configuration and 0 or more
command configurations. It has the following structure:
dmx="CHANNEL[<channel-config>], <OPENHAB-COMMAND>[<dmx-command>], <OPENHAB-COMMAND>[<dmx-command>], ..."
### Channel Configuration
There can be only one channel configuration structure per openHAB item. The
channel configuration links one or more DMX channels to an item and it
contains the following structure:
CHANNEL[<channels>/<channel-width>:<status-update-frequency>]
| Item | Description |
|-------------------------|-------------|
| channels | CSV list of DMX channel numbers of the device |
| channel-width | Optional width of the DMX channels on a device (e.g 1 for switch, 3 for RGB, 4 for RGBW). When channel-width is used, only a single channel may be specified in `channels`. If no value is specified in a binding to a color item, a default width of 3 is assumed. |
| status-update-frequency | Optional delay in milliseconds between status updates for continuously changing values. If this value is omitted or a value less than 100 is used, no status updates are sent to the openHAB bus. If the same DMX channel is linked to multiple openHAB items, at most one item should be configured with the status-update-frequency to prevent unnecessary events on the openHAB bus. |
### Command Configuration
Using the command configuration, behavior of the default openHAB commands for
the DMX devices can be overridden. The command configuration has the following
generic structure:
<OPENHAB-COMMAND>[<dmx-command>|<command-parameters>|<command-parameters>|..]
| Item | Description |
|--------------------|-------------|
| OPENHAB-COMMAND | openHAB command to override, e.g. ON, OFF, INCREASE, DECREASE, etc. |
| dmx-command | DMX-command name, e.g. FADE |
| command-parameters | Repeatable command parameter sections for use with the DMX command |
### FADE Command
The FADE command accepts the following parameter structure(s):
<fade-time>:<target-channel-value>,<target-channel-value>,...:<hold-time>
| Item | Description |
|----------------------|-------------|
| fade-time | The time (in milliseconds) to use to fade from the current values to the new target values. |
| target-channel-value | A CSV list of channel fade target values for each of the DMX channels. The values must be in the range of 0-255. If this list contains fewer values than the number of DMX channels specified in the channel configuration, the target values are repeated for the remaining DMX channels. |
| hold-time | The time (in milliseconds) to hold the target values. A value of -1 can be used to hold indefinitely. |
### SFADE Command
The SFADE (Suspending Fade) command is very similar to the FADE command. It
differs from the FADE command in that it suspends any active fades before
executing a new fade. After the fade has completed, the original fade which
was running before the SFADE started is resumed. It accepts the following
parameter structure(s):
<fade-time>:<target-channel-value>,<target-channel-value>,...:<hold-time>
## Examples
### Configuration settings examples
| Interface | Example Configuration |
------------|-----------------------------------------
| Artnet | connection=192.168.2.151,192.168.2.201 |
| OLA | connection=localhost:9010 |
| Lib485 | connection=localhost:9020 |
### Channel configuration examples
1. RGB LED strip of which the first channel is 7 and which receives a maximum of 1 status update per second:
Color rgb_strip_living_room "RGB Ledstrip Living Room" {dmx="CHANNEL[7:1000]"}
The same binding could also be written as:
Color rgb_strip_living_room "RGB Ledstrip Living Room" {dmx="CHANNEL[7,8,9:1000]"}
1. A binding to a dimmer item which is linked to only the blue channel of the RGB strip above:
Dimmer rgb_strip_living_room_blue_only "Living Room Blue" {dmx="CHANNEL[9]"}
1. An RGBW LED strip starting at channel 20:
Color rgbw_strip_kitchen "RGBW Ledstrip Kitchen" {dmx="CHANNEL[20/4:1000]"}
### Example Fade command configurations
1. A wake up light which takes 60 seconds to fade from nothing to full brightness.
Dimmer light_bed_room “Light Bedroom” {dmx="CHANNEL[20:1000], ON[FADE|60000:255,255,255:-1]"}
1. A light which switches on to full brightness immediately and then fades out after 30 seconds
Dimmer light_hall “Light Stairway Hall” {dmx="CHANNEL[25:1000], ON[FADE|0:255,255,255:30000|5000:0,0,0:-1]"}
1. An alternating green yellow fade on 2 RGB LED strips.
Switch xmas_leds "Start Yellow-Green Fade Loop" {dmx="CHANNEL[7/6], ON[FADE|500:127,36,0,0,36,0:2000|500:0,36,0,127,36,0:2000]"}
### Example Suspending Fade command configurations
1. A short blue white flash pattern on the first 18 dmx channels, which will temporarily replace the active fades on those channels.
Switch all_living_room_leds "Doorbell Flash" {dmx="CHANNEL[1/18], ON[FADE|0:255,255,255:125|0:0,0,255:125|0:255,255,255:125|0:0,0,255:125|0:255,255,255:125|0:0,0,255:125|0:255,255,255:125|0:0,0,255:125|0:255,255,255:125|0:0,0,255:125|0:0,0,255:-1]"}
## Installing OLA
As a quick reference, an example installation is described below on how to
install OLA on a Raspberry Pi running Raspbian Wheezy and configure it for
use with an Entec Open DMX USB dongle.
For detailed instructions on how to install and configure OLA on different
platforms or with different devices, consult the [OLA documentation](https://www.openlighting.org/ola/getting-started/downloads/).
### Installing OLA binaries
To install OLA, edit the software repository list using the following command:
sudo nano /etc/apt/sources.list
And add the following line to the list:
deb http://apt.openlighting.org/raspbian wheezy main
After saving the file, install the binaries with the following commands:
sudo apt-get update
sudo apt-get install ola
When prompted whether to start OLA at boot, select Yes.
### Configuring OLA devices
OLA can bind to many different protocols and devices (check
[here](https://www.openlighting.org/ola/) for a full
list of supported protocols and devices). In a typical setup, only a
single device is needed. To optimize performance, it is recommended to disable
all other devices and protocols which are not used.
Depending on how OLA was installed, the OLA configuration files for the devices
and protocols will be in the directory /var/lib/ola/conf/ or ~/.ola.
The ola-ftdidmx.conf configuration file is needed for the Open DMX USB.
Disable all other configurations by editing the configuration files and
changing the value of the `enabled` property to `false`.
Next, open the following USB device rule file:
sudo nano /etc/udev/rules.d/30-ftdidmx.rules
and add the following rule:
ACTION=="add", BUS=="usb", SYSFS{idVendor}=="0403", SYSFS{idProduct}=="6001", GROUP:="dialout", MODE:="0660"
Restart the Raspberry to start OLA.
### Using a custom device connection interface
To use a custom interface rather than OLA can be easily achieved by creating a
new osgi bundle which implements the org.openhab.binding.dmx.DmxConnection
interface.
To use, simply deploy the core dmx bundle and the custom interface bundle.
## Notes
### The repeatMode configuration setting
Starting with 1.9.0 you can configure how often the output will be refreshed.
Every 35ms the binding checks whether one of the channels has changed. If
this is the case, the new values will be sent to the configured output. If
none of the channels have changed, prior versions of the binding never sent
updates. This works in most cases, however it is not compliant with the
underlying standards (not sending updates for 1 second is considered as DATA
LOST in the E1.11 standard; the receiver behaviour for this case is not
defined).
If using a directly connected interface (e.g. RS485), stay with the default
value of `always`. If using ArtNet, use the `reduced` option and minimize
network load.

View File

@ -1,638 +0,0 @@
---
id: dscalarm
label: DSC Alarm
title: DSC Alarm - Bindings
type: binding
description: "The DSC PowerSeries Alarm System is a popular do-it-yourself home security system, which can be monitored and controlled remotely through a standard web-browser or mobile device."
since: 2x
logo: images/addons/dscalarm.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# DSC Alarm Binding
The DSC PowerSeries Alarm System is a popular do-it-yourself home security system, which can be monitored and controlled remotely through a standard web-browser or mobile device.
This is the binding for the DSC PowerSeries Alarm System, utilizing either the EyezOn Envisalink 4/3/2DS interface or the DSC IT-100 RS-232 interface.
It provides connectivity to the DSC Alarm panel via a TCP socket connection to the EyesOn Envisalink 4/3/2DS interface or a RS-232 serial connection to the DSC IT-100 interface.
Additionally, their is provision to connect to the DSC IT-100 interface through a TCP serial server.
## Supported Things
This binding supports the following Thing types
| Thing | Thing Type | Description |
|------------|------------|------------------------------------------------------------------------|
| envisalink | Bridge | The EyezOn Envisalink 3/2DS interface. |
| it100 | Bridge | The DSC IT-100 RS-232 interface. |
| tcpserver | Bridge | The DSC IT-100 TCP Server network interface. |
| panel | Thing | The basic representation of the DSC Alarm System. |
| partition | Thing | Represents a controllable area within a DSC Alarm system. |
| zone | Thing | Represents a physical device such as a door, window, or motion sensor. |
| keypad | Thing | Represents the central administrative unit. |
## Binding Configuration
There are essentially no overall binding configuration settings that need to be set.
Most settings are through thing configuration parameters.
## Discovery
The DSC Alarm binding incorporates several discovery modes in order to find DSC Alarm systems.
First, there is the Envisalink bridge discovery mode which performs a network query for any Envisalink adapters and adds them to the discovery inbox.
Second, there is The IT-100 bridge discovery mode which will search serial ports for any IT-100 adapters and add them to the discovery inbox.
The bridge discovery modes are started manually through PaperUI.
Third, after a bridge is discovered and available to openHAB, the binding will attempt to discover DSC Alarm things and add them to the discovery inbox.
The TCP Server bridge does not implement bridge discovery but will utilize thing discovery once it is online.
Note:
The Envisalink Bridge discovery does a TCP scan across your local network to find the interface.
This may create issues on the network so it is suggested that caution be used when trying this discovery.
The recommended method would be to manually add and configure the bridge through the 'dscalarm.thing' file or the PaperUI.
And then allow the binding to discover the DSC Alarm things.
## Thing Configuration
DSC Alarm things can be configured either through the online configuration utility via discovery, or manually through the 'dscalarm.things' configuration file.
The following table shows the available configuration parameters for each thing.
<table>
<tr><td><b>Thing</b></td><td><b>Configuration Parameters</b></td></tr>
<tr><td>envisalink</td><td><table><tr><td><b>ipAddress</b> - IP address for the Envisalink adapter - Required.</td></tr><tr><td><b>port</b> - TCP port for the Envisalink adapter - Not Required - default = 4025.</td></tr><tr><td><b>password</b> - Password to login to the Envisalink bridge - Not Required.</td></tr><tr><td><b>connectionTimeout</b> - TCP socket connection timeout in milliseconds - Not Required - default=5000.<br/></td></tr><tr><td><b>pollPeriod</b> - Period of time in minutes between the poll command being sent to the Envisalink bridge - Not Required - default=1.</td></tr></table></td></tr>
<tr><td>it100</td><td><table><tr><td><b>serialPort</b> - Serial port for the IT-100s bridge - Required.</td></tr><tr><td><b>baud</b> - Baud rate of the IT-100 bridge - Not Required - default = 9600.</td></tr><tr><td><b>pollPeriod</b> - Period of time in minutes between the poll command being sent to the IT-100 bridge - Not Required - default=1.</td></tr></table></td></tr>
<tr><td>tcpserver</td><td><table><tr><td><b>ipAddress</b> - IP address for the TCP Server - Required.</td></tr><tr><td><b>port</b> - TCP port for the TCP Server - Required.</td></tr><tr><td><b>connectionTimeout</b> - TCP socket connection timeout in milliseconds - Not Required - default=5000.<br/></td></tr><tr><td><b>pollPeriod</b> - Period of time in minutes between the poll command being sent to the TCP Server bridge - Not Required - default=1.</td></tr><tr><td><b>protocol</b> - The protocol used to interact with the DSC Alarm. Valid values are 1 for IT100 API or 2 for Envisalink TPI. The default is 1. - Not Required.</td></tr></table></td></tr>
<tr><td>panel</td><td><table><tr><td><b>userCode</b> - User code for the DSC alarm panel - Not Required.</td></tr><tr><td><b>suppressAcknowledgementMsgs</b> - Suppress the display of acknowledgement messages when received - Not Required - default = false.</td></tr></table></td></tr>
<tr><td>partition</td><td><b>partitionNumber</b> - Partition number (1-8) - Required.</td></tr>
<tr><td>zone</td><td><table><tr><td><b>partitionNumber</b> - Partition number (1-8) - Not Required - default=1.</td></tr><tr><td><b>zoneNumber</b> - Zone number (1-64) - Required.</td></tr></table></td></tr>
<tr><td>keypad</td><td>No parameters</td></tr>
</table>
The binding can be configured manually if discovery is not used.
A thing configuration file in the format 'bindingName.things' would need to be created, and placed in the 'conf/things' folder.
Here is an example of a thing configuration file called 'dscalarm.things':
```perl
Bridge dscalarm:envisalink:MyBridgeName [ ipAddress="192.168.0.100" ] {
Thing panel panel
Thing partition partition1 [ partitionNumber=1 ]
Thing zone zone1 [ partitionNumber=1, zoneNumber=1 ]
Thing zone zone9 [ partitionNumber=1, zoneNumber=9 ]
Thing zone zone10 [ partitionNumber=1, zoneNumber=10 ]
Thing zone zone11 [ partitionNumber=1, zoneNumber=11 ]
Thing zone zone12 [ partitionNumber=1, zoneNumber=12 ]
Thing zone zone13 [ partitionNumber=1, zoneNumber=13 ]
Thing zone zone14 [ partitionNumber=1, zoneNumber=14 ]
Thing zone zone15 [ partitionNumber=1, zoneNumber=15 ]
Thing zone zone21 [ partitionNumber=1, zoneNumber=21 ]
Thing zone zone22 [ partitionNumber=1, zoneNumber=22 ]
Thing zone zone23 [ partitionNumber=1, zoneNumber=23 ]
Thing zone zone24 [ partitionNumber=1, zoneNumber=24 ]
Thing zone zone25 [ partitionNumber=1, zoneNumber=25 ]
Thing keypad keypad
}
```
## Channels
DSC Alarm things support a variety of channels as seen below in the following table:
<table>
<tr><td><b>Channel</b></td><td><b>Item Type</b></td><td><b>Description</b></td></tr>
<tr><td>bridge_reset</td><td>Switch</td><td>Reset the bridge connection.</td></tr>
<tr><td>send_command</td><td>Switch</td><td>Send a DSC Alarm command.</td></tr>
<tr><td>panel_message</td><td>String</td><td>Event messages received from the DSC Alarm system.</td></tr>
<tr><td>panel_system_error</td><td>String</td><td>DSC Alarm system error.</td></tr>
<tr><td>panel_trouble_message</td><td>String</td><td>Displays any trouble messages the panel might send.</td></tr>
<tr><td>panel_trouble_led</td><td>Switch</td><td>The panel trouble LED is on.</td></tr>
<tr><td>panel_service_required</td><td>Switch</td><td>Service is required on the panel.</td></tr>
<tr><td>panel_ac_trouble</td><td>Switch</td><td>The panel has lost AC power.</td></tr>
<tr><td>panel_telephone_trouble</td><td>Switch</td><td>Telephone line fault.</td></tr>
<tr><td>panel_ftc_trouble</td><td>Switch</td><td>Failure to communicate with monitoring station.</td></tr>
<tr><td>panel_zone_fault</td><td>Switch</td><td>There is a fault condition on a zone/sensor.</td></tr>
<tr><td>panel_zone_tamper</td><td>Switch</td><td>There is a tamper condition on a zone/sensor.</td></tr>
<tr><td>panel_zone_low_battery</td><td>Switch</td><td>There is a low battery condition on a zone/sensor.</td></tr>
<tr><td>panel_time_loss</td><td>Switch</td><td>Loss of time on the panel.</td></tr>
<tr><td>panel_time</td><td>DateTime</td><td>DSC Alarm system time and date.</td></tr>
<tr><td>panel_time_stamp</td><td>Switch</td><td>Turn DSC Alarm message time stamping ON/OFF.</td></tr>
<tr><td>panel_time_broadcast</td><td>Switch</td><td>Turn DSC Alarm time broadcasting ON/OFF.</td></tr>
<tr><td>panel_fire_key_alarm</td><td>Switch</td><td>A fire key alarm has happened.</td></tr>
<tr><td>panel_panic_key_alarm</td><td>Switch</td><td>A panic key alarm has happened.</td></tr>
<tr><td>panel_aux_key_alarm</td><td>Switch</td><td>An auxiliary key alarm has happened.</td></tr>
<tr><td>panel_aux_input_alarm</td><td>Switch</td><td>An auxiliary input alarm has happened.</td></tr>
<tr><td>partition_status</td><td>String</td><td>A partitions current status.</td></tr>
<tr><td>partition_arm_mode</td><td>Number</td><td>A partitions current arm mode. The possible values are:
<br/>
0=disarmed<br/>
1=armed away<br/>
2=armed stay<br/>
3=away no delay<br/>
4=stay no delay<br/>
</td></tr>
<tr><td>partition_armed</td><td>Switch</td><td>A partition has been armed.</td></tr>
<tr><td>partition_entry_delay</td><td>Switch</td><td>A partition is in entry delay mode.</td></tr>
<tr><td>partition_exit_delay</td><td>Switch</td><td>A partition is in exit delay mode.</td></tr>
<tr><td>partition_in_alarm</td><td>Switch</td><td>A partition is in alarm.</td></tr>
<tr><td>partition_opening_closing_mode</td><td>String</td><td>Displays the opening/closing mode of a partition.</td></tr>
<tr><td>zone_status</td><td>Contact</td><td>A zones general (open/closed) status.</td></tr>
<tr><td>zone_message</td><td>String</td><td>A zone status message.</td></tr>
<tr><td>zone_bypass_mode</td><td>Switch</td><td>A zone bypass mode (OFF=Armed, ON=Bypassed).</td></tr>
<tr><td>zone_in_alarm</td><td>Switch</td><td>A zone is in alarm.</td></tr>
<tr><td>zone_tamper</td><td>Switch</td><td>A zone tamper condition has happened.</td></tr>
<tr><td>zone_fault</td><td>Switch</td><td>A zone fault condition has happened.</td></tr>
<tr><td>zone_tripped</td><td>Switch</td><td>A zone has tripped.</td></tr>
<tr><td>keypad_ready_led</td><td>Number</td><td>Keypad Ready LED Status. The values are:
<br/>
0=OFF<br/>
1=ON<br/>
2=Flashing<br/>
</td></tr>
<tr><td>keypad_armed_led</td><td>Number</td><td>Keypad Armed LED Status. The values are:
<br/>
0=OFF<br/>
1=ON<br/>
2=Flashing<br/></td></tr>
<tr><td>keypad_memory_led</td><td>Number</td><td>Keypad Memory LED Status. The values are:
<br/>
0=OFF<br/>
1=ON<br/>
2=Flashing<br/></td></tr>
<tr><td>keypad_bypass_led</td><td>Number</td><td>Keypad Bypass LED Status. The values are:
<br/>
0=OFF<br/>
1=ON<br/>
2=Flashing<br/></td></tr>
<tr><td>keypad_trouble_led</td><td>Number</td><td>Keypad Trouble LED Status. The values are:
<br/>
0=OFF<br/>
1=ON<br/>
2=Flashing<br/></td></tr>
<tr><td>keypad_program_led</td><td>Number</td><td>Keypad Program LED Status. The values are:
<br/>
0=OFF<br/>
1=ON<br/>
2=Flashing<br/></td></tr>
<tr><td>keypad_fire_led</td><td>Number</td><td>Keypad Fire LED Status. The values are:
<br/>
0=OFF<br/>
1=ON<br/>
2=Flashing<br/></td></tr>
<tr><td>keypad_backlight_led</td><td>Number</td><td>Keypad Backlight LED Status. The values are:
<br/>
0=OFF<br/>
1=ON<br/>
2=Flashing<br/></td></tr>
<tr><td>keypad_ac_led</td><td>Number</td><td>Keypad AC LED Status. The values are:
<br/>
0=OFF<br/>
1=ON<br/>
2=Flashing<br/></td></tr>
<tr><td>keypad_lcd_update</td><td>String</td><td>Text Changes of the IT-100 LCD Menu.</td></tr>
<tr><td>keypad_lcd_cursor</td><td>String</td><td>LCD Cursor Position for The IT-100</td></tr>
</table>
##Example
The following is an example of an item file (dscalarm.items):
```java
Group DSCAlarm
Group DSCAlarmPanel (DSCAlarm)
Group DSCAlarmPartitions (DSCAlarm)
Group DSCAlarmZones (DSCAlarm)
Group DSCAlarmKeypads (DSCAlarm)
/* Groups By Device Type */
Group:Contact:OR(OPEN, CLOSED) DSCAlarmDoorWindow <door>
Group:Contact:OR(OPEN, CLOSED) DSCAlarmMotion <motionDetector>
Group:Contact:OR(OPEN, CLOSED) DSCAlarmSmoke <smokeDetector>
/* DSC Alarm Items */
Switch BRIDGE_CONNECTION {channel="dscalarm:envisalink:MyBridgeName:bridge_reset"}
String SEND_DSC_ALARM_COMMAND "Send a DSC Alarm Command" {channel="dscalarm:envisalink:MyBridgeName:send_command"}
/* DSC Alarm Panel Items */
String PANEL_MESSAGE "Panel Message: [%s]" (DSCAlarmPanel) {channel="dscalarm:panel:MyBridgeName:panel:panel_message"}
Number PANEL_COMMAND "Panel Commands" (DSCAlarmPanel) {channel="dscalarm:panel:MyBridgeName:panel:panel_command"}
String PANEL_SYSTEM_ERROR "Panel System Error: [%s]" (DSCAlarmPanel) {channel="dscalarm:panel:MyBridgeName:panel:panel_system_error"}
String PANEL_TROUBLE_MESSAGE "Panel Trouble Message: [%s]" <"shieldGreen"> (DSCAlarmPanel) {channel="dscalarm:panel:MyBridgeName:panel:panel_trouble_message"}
Switch PANEL_TROUBLE_LED "Panel Trouble LED" <warning> (DSCAlarmPanel) {channel="dscalarm:panel:MyBridgeName:panel:panel_trouble_led"}
Switch PANEL_SERVICE_REQUIRED <yellowLED> (DSCAlarmPanel) {channel="dscalarm:panel:MyBridgeName:panel:panel_service_required"}
Switch PANEL_AC_TROUBLE <yellowLED> (DSCAlarmPanel) {channel="dscalarm:panel:MyBridgeName:panel:panel_ac_trouble"}
Switch PANEL_TELEPHONE_TROUBLE <yellowLED> (DSCAlarmPanel) {channel="dscalarm:panel:MyBridgeName:panel:panel_telephone_trouble"}
Switch PANEL_FTC_TROUBLE <yellowLED> (DSCAlarmPanel) {channel="dscalarm:panel:MyBridgeName:panel:panel_ftc_trouble"}
Switch PANEL_ZONE_FAULT <yellowLED> (DSCAlarmPanel) {channel="dscalarm:panel:MyBridgeName:panel:panel_zone_fault"}
Switch PANEL_ZONE_TAMPER <yellowLED> (DSCAlarmPanel) {channel="dscalarm:panel:MyBridgeName:panel:panel_zone_tamper"}
Switch PANEL_ZONE_LOW_BATTERY <yellowLED> (DSCAlarmPanel) {channel="dscalarm:panel:MyBridgeName:panel:panel_zone_low_battery"}
Switch PANEL_TIME_LOSS <yellowLED> (DSCAlarmPanel) {channel="dscalarm:panel:MyBridgeName:panel:panel_time_loss"}
DateTime PANEL_TIME "Panel Time [%1$tA, %1$tm/%1$td/%1$tY %1tT]" <calendar> (DSCAlarmPanel) {channel="dscalarm:panel:MyBridgeName:panel:panel_time"}
Switch PANEL_TIME_STAMP (DSCAlarmPanel) {channel="dscalarm:panel:MyBridgeName:panel:panel_time_stamp"}
Switch PANEL_TIME_BROADCAST (DSCAlarmPanel) {channel="dscalarm:panel:MyBridgeName:panel:panel_time_broadcast"}
Switch PANEL_FIRE_KEY_ALARM (DSCAlarmPanel) {channel="dscalarm:panel:MyBridgeName:panel:panel_fire_key_alarm"}
Switch PANEL_PANIC_KEY_ALARM (DSCAlarmPanel) {channel="dscalarm:panel:MyBridgeName:panel:panel_panic_key_alarm"}
Switch PANEL_AUX_KEY_ALARM (DSCAlarmPanel) {channel="dscalarm:panel:MyBridgeName:panel:panel_aux_key_alarm"}
Switch PANEL_AUX_INPUT_ALARM (DSCAlarmPanel) {channel="dscalarm:panel:MyBridgeName:panel:panel_aux_input_alarm"}
/* DSC Alarm Partition Items */
String PARTITION1_STATUS "Partition 1 Status: [%s]" (DSCAlarmPartitions) {channel="dscalarm:partition:MyBridgeName:partition1:partition_status"}
Number PARTITION1_ARM_MODE "Partition 1 Arm Mode: [%d]" (DSCAlarmPartitions) {channel="dscalarm:partition:MyBridgeName:partition1:partition_arm_mode"}
Switch PARTITION1_ARMED (DSCAlarmPartitions) {channel="dscalarm:partition:MyBridgeName:partition1:partition_armed"}
Switch PARTITION1_ENTRY_DELAY (DSCAlarmPartitions) {channel="dscalarm:partition:MyBridgeName:partition1:partition_entry_delay"}
Switch PARTITION1_EXIT_DELAY (DSCAlarmPartitions) {channel="dscalarm:partition:MyBridgeName:partition1:partition_exit_delay"}
Switch PARTITION1_IN_ALARM (DSCAlarmPartitions) {channel="dscalarm:partition:MyBridgeName:partition1:partition_in_alarm"}
String PARTITION1_OPENING_CLOSING_MODE "Opening/Closing Mode: [%s]" (DSCAlarmPartitions) {channel="dscalarm:partition:MyBridgeName:partition1:partition_opening_closing_mode"}
/* DSC Alarm Zones Items */
Contact ZONE1_STATUS "Tamper Switch (Zone 1)" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone1:zone_status"}
String ZONE1_MESSAGE "Zone Message: [%s]" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone1:zone_message"}
Switch ZONE1_BYPASS_MODE "Tamper Switch Bypass Mode" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone1:zone_bypass_mode"}
Switch ZONE1_IN_ALARM "Zone 1 Alarm Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone1:zone_in_alarm"}
Switch ZONE1_TAMPER "Zone 1 Tamper Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone1:zone_tamper"}
Switch ZONE1_FAULT "Zone 1 Fault Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone1:zone_fault"}
Switch ZONE1_TRIPPED (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone1:zone_tripped"}
Contact ZONE9_STATUS "Front Door Sensor (Zone 9)" <door> (DSCAlarmZones, FrontFoyer, DSCAlarmDoorWindow) {channel="dscalarm:zone:MyBridgeName:zone9:zone_status"}
String ZONE9_MESSAGE "Zone Message: [%s]" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone9:zone_message"}
Switch ZONE9_BYPASS_MODE "Front Door Bypass Mode" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone9:zone_bypass_mode"}
Switch ZONE9_IN_ALARM "Zone 9 Alarm Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone9:zone_in_alarm"}
Switch ZONE9_TAMPER "Zone 9 Tamper Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone9:zone_tamper"}
Switch ZONE9_FAULT "Zone 9 Fault Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone9:zone_fault"}
Switch ZONE9_TRIPPED (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone9:zone_tripped"}
Contact ZONE10_STATUS "Deck Door Sensor (Zone 10)" <door> (DSCAlarmZones, FamilyRoom, DSCAlarmDoorWindow) {channel="dscalarm:zone:MyBridgeName:zone10:zone_status"}
String ZONE10_MESSAGE "Zone Message: [%s]" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone10:zone_message"}
Switch ZONE10_BYPASS_MODE "Deck Door Sensor Bypass Mode" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone10:zone_bypass_mode"}
Switch ZONE10_IN_ALARM "Zone 10 Alarm Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone10:zone_in_alarm"}
Switch ZONE10_TAMPER "Zone 10 Tamper Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone10:zone_tamper"}
Switch ZONE10_FAULT "Zone 10 Fault Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone10:zone_fault"}
Switch ZONE10_TRIPPED (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone10:zone_tripped"}
Contact ZONE11_STATUS "Back Door Sensor (Zone 11)" <door> (DSCAlarmZones, UtilityRoom, DSCAlarmDoorWindow) {channel="dscalarm:zone:MyBridgeName:zone11:zone_status"}
String ZONE11_MESSAGE "Zone Message: [%s]" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone11:zone_message"}
Switch ZONE11_BYPASS_MODE "Back Door Sensor Bypass Mode" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone11:zone_bypass_mode"}
Switch ZONE11_IN_ALARM "Zone 11 Alarm Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone11:zone_in_alarm"}
Switch ZONE11_TAMPER "Zone 11 Tamper Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone11:zone_tamper"}
Switch ZONE11_FAULT "Zone 11 Fault Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone11:zone_fault"}
Switch ZONE11_TRIPPED (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone11:zone_tripped"}
Contact ZONE12_STATUS "Side Door Sensor (Zone 12)" <door> (DSCAlarmZones, SideFoyer, DSCAlarmDoorWindow) {channel="dscalarm:zone:MyBridgeName:zone12:zone_status"}
String ZONE12_MESSAGE "Zone Message: [%s]" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone12:zone_message"}
Switch ZONE12_BYPASS_MODE "Side Door Sensor Bypass Mode" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone12:zone_bypass_mode"}
Switch ZONE12_IN_ALARM "Zone 12 Alarm Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone12:zone_in_alarm"}
Switch ZONE12_TAMPER "Zone 12 Tamper Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone12:zone_tamper"}
Switch ZONE12_FAULT "Zone 12 Fault Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone12:zone_fault"}
Switch ZONE12_TRIPPED (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone12:zone_tripped"}
Contact ZONE13_STATUS "Garage Door 1 Sensor (Zone 13)" <door> (DSCAlarmZones, Garage, DSCAlarmDoorWindow) {channel="dscalarm:zone:MyBridgeName:zone13:zone_status"}
String ZONE13_MESSAGE "Zone Message: [%s]" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone13:zone_message"}
Switch ZONE13_BYPASS_MODE "Garage Door 1 Sensor Bypass Mode" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone13:zone_bypass_mode"}
Switch ZONE13_IN_ALARM "Zone 13 Alarm Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone13:zone_in_alarm"}
Switch ZONE13_TAMPER "Zone 13 Tamper Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone13:zone_tamper"}
Switch ZONE13_FAULT "Zone 13 Fault Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone13:zone_fault"}
Switch ZONE13_TRIPPED (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone13:zone_tripped"}
Contact ZONE14_STATUS "Garage Door 2 Sensor (Zone 14)" <garagedoor> (DSCAlarmZones, Garage, DSCAlarmDoorWindow) {channel="dscalarm:zone:MyBridgeName:zone14:zone_status"}
String ZONE14_MESSAGE "Zone Message: [%s]" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone14:zone_message"}
Switch ZONE14_BYPASS_MODE "Garage Door 2 Sensor Bypass Mode" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone14:zone_bypass_mode"}
Switch ZONE14_IN_ALARM "Zone 14 Alarm Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone14:zone_in_alarm"}
Switch ZONE14_TAMPER "Zone 14 Tamper Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone14:zone_tamper"}
Switch ZONE14_FAULT "Zone 14 Fault Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone14:zone_fault"}
Switch ZONE14_TRIPPED (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone14:zone_tripped"}
Contact ZONE15_STATUS "Garage Window Sensor (Zone 15)" (DSCAlarmZones, Garage, DSCAlarmDoorWindow) {channel="dscalarm:zone:MyBridgeName:zone15:zone_status"}
String ZONE15_MESSAGE "Zone Message: [%s]" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone15:zone_message"}
Switch ZONE15_BYPASS_MODE "Garage Window Sensor Bypass Mode" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone15:zone_bypass_mode"}
Switch ZONE15_IN_ALARM "Zone 15 Alarm Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone15:zone_in_alarm"}
Switch ZONE15_TAMPER "Zone 15 Tamper Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone15:zone_tamper"}
Switch ZONE15_FAULT "Zone 15 Fault Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone15:zone_fault"}
Switch ZONE15_TRIPPED (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone15:zone_tripped"}
Contact ZONE21_STATUS "Family Room Motion Sensor (Zone 21)" <motionDetector> (DSCAlarmZones, FamilyRoom, DSCAlarmMotion) {channel="dscalarm:zone:MyBridgeName:zone21:zone_status"}
String ZONE21_MESSAGE "Zone Message: [%s]" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone21:zone_message"}
Switch ZONE21_BYPASS_MODE "Family Room Motion Sensor Bypass Mode" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone21:zone_bypass_mode"}
Switch ZONE21_IN_ALARM "Zone 21 Alarm Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone21:zone_in_alarm"}
Switch ZONE21_TAMPER "Zone 21 Tamper Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone21:zone_tamper"}
Switch ZONE21_FAULT "Zone 21 Fault Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone21:zone_fault"}
Switch ZONE21_TRIPPED (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone21:zone_tripped"}
Contact ZONE22_STATUS "Office Motion Sensor (Zone 22)" <motionDetector> (DSCAlarmZones, Office, DSCAlarmMotion) {channel="dscalarm:zone:MyBridgeName:zone22:zone_status"}
String ZONE22_MESSAGE "Zone Message: [%s]" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone22:zone_message"}
Switch ZONE22_BYPASS_MODE "Office Motion Sensor Bypass Mode" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone22:zone_bypass_mode"}
Switch ZONE22_IN_ALARM "Zone 22 Alarm Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone22:zone_in_alarm"}
Switch ZONE22_TAMPER "Zone 22 Tamper Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone22:zone_tamper"}
Switch ZONE22_FAULT "Zone 22 Fault Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone22:zone_fault"}
Switch ZONE22_TRIPPED (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone22:zone_tripped"}
Contact ZONE23_STATUS "Dining Room Motion Sensor (Zone 23)" <motionDetector> (DSCAlarmZones, DiningRoom, DSCAlarmMotion) {channel="dscalarm:zone:MyBridgeName:zone23:zone_status"}
String ZONE23_MESSAGE "Zone Message: [%s]" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone23:zone_message"}
Switch ZONE23_BYPASS_MODE "Dining Room Motion Sensor Bypass Mode" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone23:zone_bypass_mode"}
Switch ZONE23_IN_ALARM "Zone 23 Alarm Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone23:zone_in_alarm"}
Switch ZONE23_TAMPER "Zone 23 Tamper Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone23:zone_tamper"}
Switch ZONE23_FAULT "Zone 23 Fault Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone23:zone_fault"}
Switch ZONE23_TRIPPED (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone23:zone_tripped"}
Contact ZONE24_STATUS "Living Room Motion Sensor (Zone 24)" <motionDetector> (DSCAlarmZones, LivingRoom, DSCAlarmMotion) {channel="dscalarm:zone:MyBridgeName:zone24:zone_status"}
String ZONE24_MESSAGE "Zone Message: [%s]" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone24:zone_message"}
Switch ZONE24_BYPASS_MODE "Living Room Motion Sensor Bypass Mode" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone24:zone_bypass_mode"}
Switch ZONE24_IN_ALARM "Zone 24 Alarm Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone24:zone_in_alarm"}
Switch ZONE24_TAMPER "Zone 24 Tamper Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone24:zone_tamper"}
Switch ZONE24_FAULT "Zone 24 Fault Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone24:zone_fault"}
Switch ZONE24_TRIPPED (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone24:zone_tripped"}
Contact ZONE25_STATUS "Utility Room Motion Sensor (Zone 25)" <motionDetector> (DSCAlarmZones, UtilityRoom, DSCAlarmMotion) {channel="dscalarm:zone:MyBridgeName:zone25:zone_status"}
String ZONE25_MESSAGE "Zone Message: [%s]" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone25:zone_message"}
Switch ZONE25_BYPASS_MODE "Utility Room Motion Sensor Bypass Mode" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone25:zone_bypass_mode"}
Switch ZONE25_IN_ALARM "Zone 25 Alarm Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone25:zone_in_alarm"}
Switch ZONE25_TAMPER "Zone 25 Tamper Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone25:zone_tamper"}
Switch ZONE25_FAULT "Zone 25 Fault Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone25:zone_fault"}
Switch ZONE25_TRIPPED (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone25:zone_tripped"}
Contact ZONE51_STATUS "Utility Room Smoke Detector (Zone 51)" <smokeDetector> (DSCAlarmZones, UtilityRoom, DSCAlarmSmoke) {channel="dscalarm:zone:MyBridgeName:zone51:zone_status"}
String ZONE51_MESSAGE "Zone Message: [%s]" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone51:zone_message"}
Switch ZONE51_BYPASS_MODE "Utility Room Smoke Detector Bypass Mode" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone51:zone_bypass_mode"}
Switch ZONE51_IN_ALARM "Zone 51 Alarm Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone51:zone_in_alarm"}
Switch ZONE51_TAMPER "Zone 51 Tamper Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone51:zone_tamper"}
Switch ZONE51_FAULT "Zone 51 Fault Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone51:zone_fault"}
Switch ZONE51_TRIPPED (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone51:zone_tripped"}
Contact ZONE52_STATUS "Dining Room Smoke Detector (Zone 52)" <smokeDetector> (DSCAlarmZones, DiningRoom, DSCAlarmSmoke) {channel="dscalarm:zone:MyBridgeName:zone52:zone_status"}
String ZONE52_MESSAGE "Zone Message: [%s]" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone52:zone_message"}
Switch ZONE52_BYPASS_MODE "Dining Room Smoke Detector Bypass Mode" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone52:zone_bypass_mode"}
Switch ZONE52_IN_ALARM "Zone 52 Alarm Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone52:zone_in_alarm"}
Switch ZONE52_TAMPER "Zone 52 Tamper Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone52:zone_tamper"}
Switch ZONE52_FAULT "Zone 52 Fault Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone52:zone_fault"}
Switch ZONE52_TRIPPED (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone52:zone_tripped"}
Contact ZONE53_STATUS "Front Foyer Smoke Detector (Zone 53)" <smokeDetector> (DSCAlarmZones, FrontFoyer, DSCAlarmSmoke) {channel="dscalarm:zone:MyBridgeName:zone53:zone_status"}
String ZONE53_MESSAGE "Zone Message: [%s]" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone53:zone_message"}
Switch ZONE53_BYPASS_MODE "Front Foyer Smoke Detector Bypass Mode" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone53:zone_bypass_mode"}
Switch ZONE53_IN_ALARM "Zone 53 Alarm Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone53:zone_in_alarm"}
Switch ZONE53_TAMPER "Zone 53 Tamper Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone53:zone_tamper"}
Switch ZONE53_FAULT "Zone 53 Fault Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone53:zone_fault"}
Switch ZONE53_TRIPPED (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone53:zone_tripped"}
Contact ZONE54_STATUS "Upstairs Hall Smoke Detector (Zone 54)" <smokeDetector> (DSCAlarmZones, UpstairsHall, DSCAlarmSmoke) {channel="dscalarm:zone:MyBridgeName:zone54:zone_status"}
String ZONE54_MESSAGE "Zone Message: [%s]" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone54:zone_message"}
Switch ZONE54_BYPASS_MODE "Upstairs Hall Smoke Detector Bypass Mode" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone54:zone_bypass_mode"}
Switch ZONE54_IN_ALARM "Zone 54 Alarm Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone54:zone_in_alarm"}
Switch ZONE54_TAMPER "Zone 54 Tamper Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone54:zone_tamper"}
Switch ZONE54_FAULT "Zone 54 Fault Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone54:zone_fault"}
Switch ZONE54_TRIPPED (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone54:zone_tripped"}
Contact ZONE55_STATUS "Master Bedroom Smoke Detector (Zone 55)" <smokeDetector> (DSCAlarmZones, Bedroom, DSCAlarmSmoke) {channel="dscalarm:zone:MyBridgeName:zone55:zone_status"}
String ZONE55_MESSAGE "Zone Message: [%s]" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone55:zone_message"}
Switch ZONE55_BYPASS_MODE "Master Bedroom Smoke Detector Bypass Mode" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone55:zone_bypass_mode"}
Switch ZONE55_IN_ALARM "Zone 55 Alarm Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone55:zone_in_alarm"}
Switch ZONE55_TAMPER "Zone 55 Tamper Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone55:zone_tamper"}
Switch ZONE55_FAULT "Zone 55 Fault Condition" (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone55:zone_fault"}
Switch ZONE55_TRIPPED (DSCAlarmZones) {channel="dscalarm:zone:MyBridgeName:zone55:zone_tripped"}
/* DSC Alarm Keypad Items */
Number KEYPAD_READY_LED "Ready LED Status" <readyLED> (DSCAlarmKeypads) {channel="dscalarm:keypad:MyBridgeName:keypad:keypad_ready_led"}
Number KEYPAD_ARMED_LED "Armed LED Status" <armedLED> (DSCAlarmKeypads) {channel="dscalarm:keypad:MyBridgeName:keypad:keypad_armed_led"}
Number KEYPAD_MEMORY_LED "Memory LED Status" <memoryLED> (DSCAlarmKeypads) {channel="dscalarm:keypad:MyBridgeName:keypad:keypad_memory_led"}
Number KEYPAD_BYPASS_LED "Bypass LED Status" <bypassLED> (DSCAlarmKeypads) {channel="dscalarm:keypad:MyBridgeName:keypad:keypad_bypass_led"}
Number KEYPAD_TROUBLE_LED "Trouble LED Status" <troubleLED> (DSCAlarmKeypads) {channel="dscalarm:keypad:MyBridgeName:keypad:keypad_trouble_led"}
Number KEYPAD_PROGRAM_LED "Program LED Status" <programLED> (DSCAlarmKeypads) {channel="dscalarm:keypad:MyBridgeName:keypad:keypad_program_led"}
Number KEYPAD_FIRE_LED "Fire LED Status" <fireLED> (DSCAlarmKeypads) {channel="dscalarm:keypad:MyBridgeName:keypad:keypad_fire_led"}
Number KEYPAD_BACKLIGHT_LED "Backlight LED Status" <backlightLED> (DSCAlarmKeypads) {channel="dscalarm:keypad:MyBridgeName:keypad:keypad_backlight_led"}
Number KEYPAD_AC_LED "AC LED Status" <acLED> (DSCAlarmKeypads) {channel="dscalarm:keypad:MyBridgeName:keypad:keypad_ac_led"}
```
Here is an example sitemap:
```perl
Frame label="Alarm System" {
Text label="DSC Alarm System" {
Frame label="Panel" {
Switch item=BRIDGE_CONNECTION label="Panel Connection" mappings=[ON="Connected", OFF="Disconnected"]
Text item=PANEL_MESSAGE
Selection item=PANEL_COMMAND mappings=[0="Poll", 1="Status Report", 2="Labels Request (Serial Only)", 8="Dump Zone Timers (TCP Only)", 10="Set Time/Date", 200="Send User Code"]
Text item=PANEL_TIME {
Switch item=PANEL_TIME_STAMP label="Panel Time Stamp"
Switch item=PANEL_TIME_BROADCAST label="Panel Time Broadcast"
}
Text item=PANEL_SYSTEM_ERROR
Text item=PANEL_TROUBLE_LED label="Panel Trouble Condition" {
Text item=PANEL_TROUBLE_MESSAGE
Text item=PANEL_SERVICE_REQUIRED label="Service Required"
Text item=PANEL_AC_TROUBLE label="AC Trouble"
Text item=PANEL_TELEPHONE_TROUBLE label="Telephone Line Trouble"
Text item=PANEL_FTC_TROUBLE label="Failed to Communicate Trouble"
Text item=PANEL_ZONE_FAULT label="Zone Fault"
Text item=PANEL_ZONE_TAMPER label="Zone Tamper"
Text item=PANEL_ZONE_LOW_BATTERY label="Zone Low Battery"
Text item=PANEL_TIME_LOSS label="Panel Time Loss"
}
}
Frame label="Partitions" {
Text item=PARTITION1_STATUS {
Switch item=PARTITION1_ARM_MODE label="Partition 1 Arm Options" mappings=[0="Disarm", 1="Away", 2="Stay", 3="No Entry Delay", 4="With User Code"]
Text item=PARTITION1_OPENING_CLOSING_MODE
}
}
Frame label="Keypad" {
Text label="Keypad LED Status" {
Text item=KEYPAD_READY_LED label="Ready LED Status"
Text item=KEYPAD_ARMED_LED label="Armed LED Status"
Text item=KEYPAD_MEMORY_LED label="Memory LED Status"
Text item=KEYPAD_BYPASS_LED label="Bypass LED Status"
Text item=KEYPAD_TROUBLE_LED label="Trouble LED Status"
Text item=KEYPAD_PROGRAM_LED label="Program LED Status"
Text item=KEYPAD_FIRE_LED label="Fire LED Status"
Text item=KEYPAD_BACKLIGHT_LED label="Backlight LED Status"
Text item=KEYPAD_AC_LED label="AC LED Status"
}
}
Frame label="Zones" {
Text label="All Zones" {
Text item=ZONE1_STATUS {
Switch item=ZONE1_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE1_IN_ALARM
Switch item=ZONE1_TAMPER
Switch item=ZONE1_FAULT
}
}
Text item=ZONE9_STATUS {
Switch item=ZONE9_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE9_IN_ALARM
Switch item=ZONE9_TAMPER
Switch item=ZONE9_FAULT
}
}
Text item=ZONE10_STATUS {
Switch item=ZONE10_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE10_IN_ALARM
Switch item=ZONE10_TAMPER
Switch item=ZONE10_FAULT
}
}
Text item=ZONE11_STATUS {
Switch item=ZONE11_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE11_IN_ALARM
Switch item=ZONE11_TAMPER
Switch item=ZONE11_FAULT
}
}
Text item=ZONE12_STATUS {
Switch item=ZONE12_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE12_IN_ALARM
Switch item=ZONE12_TAMPER
Switch item=ZONE12_FAULT
}
}
Text item=ZONE13_STATUS {
Switch item=ZONE13_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE13_IN_ALARM
Switch item=ZONE13_TAMPER
Switch item=ZONE13_FAULT
}
}
Text item=ZONE14_STATUS {
Switch item=ZONE14_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE14_IN_ALARM
Switch item=ZONE14_TAMPER
Switch item=ZONE14_FAULT
}
}
Text item=ZONE15_STATUS {
Switch item=ZONE15_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE15_IN_ALARM
Switch item=ZONE15_TAMPER
Switch item=ZONE15_FAULT
}
}
Text item=ZONE21_STATUS {
Switch item=ZONE21_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE21_IN_ALARM
Switch item=ZONE21_TAMPER
Switch item=ZONE21_FAULT
}
}
Text item=ZONE22_STATUS {
Switch item=ZONE22_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE22_IN_ALARM
Switch item=ZONE22_TAMPER
Switch item=ZONE22_FAULT
}
}
Text item=ZONE23_STATUS {
Switch item=ZONE23_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE23_IN_ALARM
Switch item=ZONE23_TAMPER
Switch item=ZONE23_FAULT
}
}
Text item=ZONE24_STATUS {
Switch item=ZONE24_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE24_IN_ALARM
Switch item=ZONE24_TAMPER
Switch item=ZONE24_FAULT
}
}
Text item=ZONE25_STATUS {
Switch item=ZONE25_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE25_IN_ALARM
Switch item=ZONE25_TAMPER
Switch item=ZONE25_FAULT
}
}
Text item=ZONE51_STATUS {
Switch item=ZONE51_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE51_IN_ALARM
Switch item=ZONE51_TAMPER
Switch item=ZONE51_FAULT
}
}
Text item=ZONE52_STATUS {
Switch item=ZONE52_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE52_IN_ALARM
Switch item=ZONE52_TAMPER
Switch item=ZONE52_FAULT
}
}
Text item=ZONE53_STATUS {
Switch item=ZONE53_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE53_IN_ALARM
Switch item=ZONE53_TAMPER
Switch item=ZONE53_FAULT
}
}
Text item=ZONE54_STATUS {
Switch item=ZONE54_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE54_IN_ALARM
Switch item=ZONE54_TAMPER
Switch item=ZONE54_FAULT
}
}
Text item=ZONE55_STATUS {
Switch item=ZONE55_BYPASS_MODE mappings=[OFF="Armed", ON="Bypassed"]
Frame label="Other Status:" {
Switch item=ZONE55_IN_ALARM
Switch item=ZONE55_TAMPER
Switch item=ZONE55_FAULT
}
}
}
Group item=DSCAlarmDoorWindow label="Door/Window Sensors"
Group item=DSCAlarmMotion label="Motion Sensors"
Group item=DSCAlarmSmoke label="Smoke Detectors"
}
}
}
```
Sample Rules for Sending a DSC Alarm Command
```javascript
rule "SendKeystrokeStringCommand"
when
Item SwitchItemName received command ON
then
sendCommand(SEND_DSC_ALARM_COMMAND, "071,1*101#")
end
rule "SendPollingCommand"
when
Item SwitchItemName received command ON
then
sendCommand(SEND_DSC_ALARM_COMMAND, "000")
end
```
Notice the command variations in the examples.
If a command has data, there needs to be a comma between the command and the data as seen above in the first example.
If there is no data then it would only require the command itself as in the second example.

View File

@ -1,419 +0,0 @@
---
id: dscalarm
label: DSC PowerSeries Alarm System
title: DSC PowerSeries Alarm System - Bindings
type: binding
description: "This binding mintors and controls the DSC PowerSeries Alarm System, utilizing the EyezOn Envisalink 3/2DS interface or the DSC IT-100 RS-232 interface."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.dscalarm/README.md
since: 1x
logo: images/addons/dscalarm.png
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# DSC PowerSeries Alarm System Binding
This binding mintors and controls the DSC PowerSeries Alarm System, utilizing the EyezOn Envisalink 3/2DS interface or the DSC IT-100 RS-232 interface.
> Note: if you are using the DSC Alarm Binding 2.0 for OpenHab2 please follow the documentation here: [https://github.com/openhab/openhab2-addons/tree/master/addons/binding/org.openhab.binding.dscalarm](https://github.com/openhab/openhab2-addons/tree/master/addons/binding/org.openhab.binding.dscalarm)
The DSC PowerSeries Alarm System is a popular do-it-yourself home security system, which can be monitored and controlled remotely through a standard web-browser or mobile device.
The openHAB DSC Alarm binding provides connectivity to the DSC Alarm panel via a TCP socket connection to the EyesOn Envisalink 3/2DS interface or a RS-232 serial connection to the DSC IT-100 interface.
Additionally there is a DSC Alarm action bundle that can be installed along with the DSC Alarm binding. The action provides the ability to send DSC Alarm commands directly to the DSC Alarm system using rules.
There is also a binding specifically for openHAB 2 [here](http://docs.openhab.org/addons/bindings/oh2/dscalarm/readme.html).
## Binding Configuration
This binding can be configured in the file `services/dscalarm.cfg`.
| Property | Default | Required | Description |
|----------|---------|:--------:|-------------|
| deviceType | `it100` (default for serial connection) or `envisalink` (default for tcp connection) | No | DSC Alarm interface device type |
| serialPort | | if connecting via serial port | Valid values are e.g. COM1 for Windows and /dev/ttyS0 or /dev/ttyUSB0 for Linux. Leave undefined if not connecting by serial port. |
| baud | | No | DSC Alarm baud rate for serial connections. Valid values are 9600 (default), 19200, 38400, 57600, and 115200. Leave undefined if using default. |
| ip | | if connecting via network | DSC Alarm IP address for a TCP connection. Leave undefined if not connecting by network connection. |
| tcpPort | 4025 | No | DSC Alarm TCP port for a TCP connection to either an EyezOn Envisalink on 4025 (default) or a TCP serial server to IT-100. Leave undefined if not connecting by network connection. |
| password | | | DSC Alarm password for logging into the EyezOn Envisalink 3/2DS interface. |
| usercode | | | DSC Alarm user code for logging certain DSC Alarm commands. |
| pollPeriod | 1 | No | DSC Alarm poll period. Amount of time elapsed in minutes between poll commands sent to the DSC Alarm. Valid values are 1-15. |
| suppressAcknowledgementMsgs | false | No | Suppress Acknowledgement Messages. Set to `true` to suppress the display of Acknowledgement messages, such as the Command Acknowledge message after a poll command is sent. |
The primary setting will be the IP address of the EyezOn Envisalink 3/2DS interface or the serial port name of the DSC IT-100. The *password*, *usercode*, *baud*, *pollPeriod*, and *suppressAcknowledgementMsgs* settings are optional. The *deviceType* and *tcpPort* settings are used to connect to an IT-100 interface through a TCP/IP serial server. If these settings are not set, the binding will resort to the system defaults.
## Item Configuration
In order to bind to the DSC Alarm system you can add items to an item file using the following format:
```
dscalarm="DSCAlarmDeviceType:<partitionID>:<zoneID>:DSCAlarmItemType"
```
The DSCAlarmDeviceType indicates one of four device types of the DSC Alarm System. They consist of the following:
| DSC Alarm Device Type | Description |
|-----------------------|-------------|
| panel | The basic representation of the DSC Alarm System.|
| partition | Represents a controllable area within a DSC Alarm system. |
| zone | Represents a physical device such as a door, window, or motion sensor.|
| keypad | Represents the central administrative unit. |
The parameters *partitionID* and *zoneID* will depend on the DSC Alarm device type. A DSC Alarm device type of 'partition' requires a *partitionID* in the range 1-8, which will depend on how your DSC Alarm system is configured. A DSC Alarm device type of 'zone' requires *zoneID* in the range 1-64, as well as the *partitionID*.
The DSCAlarmItemType maps the binding to an openHAB item type. Here are the supported DSC Alarm Item Types:
| DSC Alarm Item Type | openHAB Item Type| Description |
|---------------------|------------------|-------------|
| panel_connection | Number | Panel connection status. |
| panel_message | String | Event messages received from the DSC Alarm system. |
| panel_system_error | String | DSC Alarm system error. |
| panel_time | DateTime | DSC Alarm system time and date. |
| panel_time_stamp | Switch | Turn DSC Alarm message time stamping ON/OFF. |
| panel_time_broadcast | Switch | Turn DSC Alarm time broadcasting ON/OFF. |
| panel_fire_key_alarm | Switch | A fire key alarm has happened. |
| panel_panic_key_alarm | Switch | A panic key alarm has happened. |
| panel_aux_key_alarm | Switch | An auxiliary key alarm has happened. |
| panel_aux_input_alarm | Switch | An auxiliary input alarm has happened. |
| panel_trouble_led | Switch | The panel trouble LED is on. |
| panel_service_required | Switch | Service is required on the panel. |
| panel_ac_trouble | Switch | The panel has lost AC power. |
| panel_telephone_trouble | Switch | Telephone line fault. |
| panel_ftc_trouble | Switch | Failure to communicate with monitoring station. |
| panel_zone_fault | Switch | There is a fault condition on a zone/sensor. |
| panel_zone_tamper | Switch | There is a tamper condition on a zone/sensor. |
| panel_time_low_battery | Switch | There is a low battery condition on a zone/sensor. |
| panel_time_loss | Switch | Loss of time on the panel. |
| panel_trouble_message | String | Displays any trouble messages the panel might send. |
| partition_status | String | A partitions current status. |
| partition_arm_mode | Number | A partitions current arm mode. The possible values are:<br/>0=disarmed<br/>1=armed away<br/>2=armed stay<br/>3=away no delay<br/>4=stay no delay |
| partition_armed | Switch | A partition has been armed. |
| partition_entry_delay | Switch | A partition is in entry delay mode. |
| partition_exit_delay | Switch | A partition is in exit delay mode. |
| partition_in_alarm | Switch | A partition is in alarm. |
| partition_opening_closing_mode | String | Displays the opening/closing mode of a partition. |
| zone_general_status | Contact | A zones general (open/closed) status. |
| zone_alarm_status | String | A zones alarm status. |
| zone_tamper_status | String | A zones tamper status. |
| zone_fault_status | String | A zones fault status. |
| zone_bypass_mode | Number | A zones bypass mode. |
| zone_in_alarm | Switch | A zone is in alarm. |
| zone_tamper | Switch | A zone tamper condition has happened. |
| zone_fault | Switch | A zone fault condition has happened. |
| zone_tripped | Switch | A zone has tripped. |
| keypad_ready_led | Number | Keypad Ready LED Status. The values are:<br/>0=OFF<br/>1=ON<br/>2=Flashing |
| keypad_armed_led | Number | Keypad Armed LED Status. The values are:<br/>0=OFF<br/>1=ON<br/>2=Flashing |
| keypad_memory_led | Number | Keypad Memory LED Status. The values are:<br/>0=OFF<br/>1=ON<br/>2=Flashing |
| keypad_bypass_led | Number | Keypad Bypass LED Status. The values are:<br/>0=OFF<br/>1=ON<br/>2=Flashing |
| keypad_trouble_led | Number | Keypad Trouble LED Status. The values are:<br/>0=OFF<br/>1=ON<br/>2=Flashing |
| keypad_program_led | Number | Keypad Program LED Status. The values are:<br/>0=OFF<br/>1=ON<br/>2=Flashing |
| keypad_fire_led | Number | Keypad Fire LED Status. The values are:<br/>0=OFF<br/>1=ON<br/>2=Flashing |
| keypad_backlight_led | Number | Keypad Backlight LED Status. The values are:<br/>0=OFF<br/>1=ON<br/>2=Flashing |
| keypad_ac_led | Number | Keypad AC LED Status. The values are:<br/>0=OFF<br/>1=ON<br/>2=Flashing |
The following is an example of an item file:
```
Group DSCAlarm
Group DSCAlarmPanel (DSCAlarm)
Group DSCAlarmPartitions (DSCAlarm)
Group DSCAlarmZones (DSCAlarm)
Group DSCAlarmKeypads (DSCAlarm)
/* DSC Alarm Items */
/* DSC Alarm Panel Items */
Number PANEL_CONNECTION "Panel Connected: [%d]" (DSCAlarmPanel) {dscalarm="panel:panel_connection"}
Number PANEL_COMMAND "Panel Commands" (DSCAlarmPanel) {dscalarm="panel:panel_command"}
String PANEL_MESSAGE "Panel Message: [%s]" <"shield-1"> (DSCAlarmPanel) {dscalarm="panel:panel_message"}
String PANEL_SYSTEM_ERROR "Panel System Error: [%s]" <"shield-1"> (DSCAlarmPanel) {dscalarm="panel:panel_system_error"}
Switch PANEL_TROUBLE_LED "Panel Trouble LED" <warning> (DSCAlarmPanel) {dscalarm="panel:panel_trouble_led"}
Switch PANEL_SERVICE_REQUIRED <yellowLED> (DSCAlarmPanel) {dscalarm="panel:panel_service_required"}
Switch PANEL_AC_TROUBLE <yellowLED> (DSCAlarmPanel) {dscalarm="panel:panel_ac_trouble"}
Switch PANEL_TELEPHONE_TROUBLE <yellowLED> (DSCAlarmPanel) {dscalarm="panel:panel_telephone_trouble"}
Switch PANEL_FTC_TROUBLE <yellowLED> (DSCAlarmPanel) {dscalarm="panel:panel_ftc_trouble"}
Switch PANEL_ZONE_FAULT <yellowLED> (DSCAlarmPanel) {dscalarm="panel:panel_zone_fault"}
Switch PANEL_ZONE_TAMPER <yellowLED> (DSCAlarmPanel) {dscalarm="panel:panel_zone_tamper"}
Switch PANEL_ZONE_LOW_BATTERY <yellowLED> (DSCAlarmPanel) {dscalarm="panel:panel_zone_low_battery"}
Switch PANEL_TIME_LOSS <yellowLED> (DSCAlarmPanel) {dscalarm="panel:panel_time_loss"}
String PANEL_TROUBLE_MESSAGE "Panel Trouble Message: [%s]" <"shield-1"> (DSCAlarmPanel) {dscalarm="panel:panel_trouble_message"}
DateTime PANEL_TIME "Panel Time [%1$tA, %1$tm/%1$td/%1$tY %1tT]" <calendar> (DSCAlarmPanel) {dscalarm="panel:panel_time"}
Switch PANEL_TIME_STAMP (DSCAlarmPanel) {dscalarm="panel:panel_time_stamp"}
Switch PANEL_TIME_BROADCAST (DSCAlarmPanel) {dscalarm="panel:panel_time_broadcast"}
Switch PANEL_FIRE_KEY_ALARM (DSCAlarmPanel) {dscalarm="panel:panel_fire_key_alarm"}
Switch PANEL_PANIC_KEY_ALARM (DSCAlarmPanel) {dscalarm="panel:panel_panic_key_alarm"}
Switch PANEL_AUX_KEY_ALARM (DSCAlarmPanel) {dscalarm="panel:panel_aux_key_alarm"}
Switch PANEL_AUX_INPUT_ALARM (DSCAlarmPanel) {dscalarm="panel:panel_aux_input_alarm"}
/* DSC Alarm Partition Items */
String PARTITION1_STATUS "Partition 1 Status: [%s]" (DSCAlarmPartitions) {dscalarm="partition:1:partition_status"}
Number PARTITION1_ARM_MODE "Partition Arm Mode: [%d]" (DSCAlarmPartitions) {dscalarm="partition:1:partition_arm_mode"}
Switch PARTITION1_ARMED (DSCAlarmPartitions) {dscalarm="partition:1:partition_armed"}
Switch PARTITION1_ENTRY_DELAY (DSCAlarmPartitions) {dscalarm="partition:1:partition_entry_delay"}
Switch PARTITION1_EXIT_DELAY (DSCAlarmPartitions) {dscalarm="partition:1:partition_exit_delay"}
Switch PARTITION1_IN_ALARM (DSCAlarmPartitions) {dscalarm="partition:1:partition_in_alarm"}
String PARTITION1_OPENING_CLOSING_MODE "Partition 1 Opening/Closing Mode: [%s]" (DSCAlarmPartitions) {dscalarm="partition:1:partition_opening_closing_mode"}
/* DSC Alarm Zones Items */
Contact ZONE1_GENERAL_STATUS "Tamper Switch" (DSCAlarmZones) {dscalarm="zone:1:1:zone_general_status"}
Number ZONE1_BYPASS_MODE "Tamper Switch Bypass Mode" (DSCAlarmZones) {dscalarm="zone:1:1:zone_bypass_mode"}
String ZONE1_ALARM_STATUS "Alarm Status : [%s]" (DSCAlarmZones) {dscalarm="zone:1:1:zone_alarm_status"}
String ZONE1_FAULT_STATUS "Fault Status : [%s]" (DSCAlarmZones) {dscalarm="zone:1:1:zone_fault_status"}
String ZONE1_TAMPER_STATUS "Tamper Status : [%s]" (DSCAlarmZones) {dscalarm="zone:1:1:zone_tamper_status"}
Switch ZONE1_IN_ALARM (DSCAlarmZones) {dscalarm="zone:1:1:zone_in_alarm"}
Switch ZONE1_TAMPER (DSCAlarmZones) {dscalarm="zone:1:1:zone_tamper"}
Switch ZONE1_FAULT (DSCAlarmZones) {dscalarm="zone:1:1:zone_fault"}
Switch ZONE1_TRIPPED (DSCAlarmZones) {dscalarm="zone:1:1:zone_tripped"}
Contact ZONE9_GENERAL_STATUS "Front Door Sensor" (DSCAlarmZones, FrontFoyer) {dscalarm="zone:1:9:zone_general_status"}
Number ZONE9_BYPASS_MODE "Front Door Bypass Mode" (DSCAlarmZones) {dscalarm="zone:1:9:zone_bypass_mode"}
String ZONE9_ALARM_STATUS "Alarm Status : [%s]" (DSCAlarmZones) {dscalarm="zone:1:9:zone_alarm_status"}
String ZONE9_FAULT_STATUS "Fault Status : [%s]" (DSCAlarmZones) {dscalarm="zone:1:9:zone_fault_status"}
String ZONE9_TAMPER_STATUS "Tamper Status : [%s]" (DSCAlarmZones) {dscalarm="zone:1:9:zone_tamper_status"}
Switch ZONE9_IN_ALARM (DSCAlarmZones) {dscalarm="zone:1:9:zone_in_alarm"}
Switch ZONE9_TAMPER (DSCAlarmZones) {dscalarm="zone:1:9:zone_tamper"}
Switch ZONE9_FAULT (DSCAlarmZones) {dscalarm="zone:1:9:zone_fault"}
Switch ZONE9_TRIPPED (DSCAlarmZones) {dscalarm="zone:1:9:zone_tripped"}
Contact ZONE10_GENERAL_STATUS "Deck Door Sensor" (DSCAlarmZones, FamilyRoom) {dscalarm="zone:1:10:zone_general_status"}
Number ZONE10_BYPASS_MODE "Deck Door Sensor Bypass Mode" (DSCAlarmZones) {dscalarm="zone:1:10:zone_bypass_mode"}
String ZONE10_ALARM_STATUS "Alarm Status : [%s]" (DSCAlarmZones) {dscalarm="zone:1:10:zone_alarm_status"}
String ZONE10_FAULT_STATUS "Fault Status : [%s]" (DSCAlarmZones) {dscalarm="zone:1:10:zone_fault_status"}
String ZONE10_TAMPER_STATUS "Tamper Status : [%s]" (DSCAlarmZones) {dscalarm="zone:1:10:zone_tamper_status"}
Switch ZONE10_IN_ALARM (DSCAlarmZones) {dscalarm="zone:1:10:zone_in_alarm"}
Switch ZONE10_TAMPER (DSCAlarmZones) {dscalarm="zone:1:10:zone_tamper"}
Switch ZONE10_FAULT (DSCAlarmZones) {dscalarm="zone:1:10:zone_fault"}
Switch ZONE10_TRIPPED (DSCAlarmZones) {dscalarm="zone:1:10:zone_tripped"}
Contact ZONE11_GENERAL_STATUS "Back Door Sensor" (DSCAlarmZones, UtilityRoom) {dscalarm="zone:1:11:zone_general_status"}
Number ZONE11_BYPASS_MODE "Back Door Sensor Bypass Mode" (DSCAlarmZones) {dscalarm="zone:1:11:zone_bypass_mode"}
String ZONE11_ALARM_STATUS "Alarm Status : [%s]" (DSCAlarmZones) {dscalarm="zone:1:11:zone_alarm_status"}
String ZONE11_FAULT_STATUS "Fault Status : [%s]" (DSCAlarmZones) {dscalarm="zone:1:11:zone_fault_status"}
String ZONE11_TAMPER_STATUS "Tamper Status : [%s]" (DSCAlarmZones) {dscalarm="zone:1:11:zone_tamper_status"}
Switch ZONE11_IN_ALARM (DSCAlarmZones) {dscalarm="zone:1:11:zone_in_alarm"}
Switch ZONE11_TAMPER (DSCAlarmZones) {dscalarm="zone:1:11:zone_tamper"}
Switch ZONE11_FAULT (DSCAlarmZones) {dscalarm="zone:1:11:zone_fault"}
Switch ZONE11_TRIPPED (DSCAlarmZones) {dscalarm="zone:1:11:zone_tripped"}
Contact ZONE12_GENERAL_STATUS "Side Door Sensor" (DSCAlarmZones, SideFoyer) {dscalarm="zone:1:12:zone_general_status"}
Number ZONE12_BYPASS_MODE "Side Door Sensor Bypass Mode" (DSCAlarmZones) {dscalarm="zone:1:12:zone_bypass_mode"}
String ZONE12_ALARM_STATUS "Alarm Status : [%s]" (DSCAlarmZones) {dscalarm="zone:1:12:zone_alarm_status"}
String ZONE12_FAULT_STATUS "Fault Status : [%s]" (DSCAlarmZones) {dscalarm="zone:1:12:zone_fault_status"}
String ZONE12_TAMPER_STATUS "Tamper Status : [%s]" (DSCAlarmZones) {dscalarm="zone:1:12:zone_tamper_status"}
Switch ZONE12_IN_ALARM (DSCAlarmZones) {dscalarm="zone:1:12:zone_in_alarm"}
Switch ZONE12_TAMPER (DSCAlarmZones) {dscalarm="zone:1:12:zone_tamper"}
Switch ZONE12_FAULT (DSCAlarmZones) {dscalarm="zone:1:12:zone_fault"}
Switch ZONE12_TRIPPED (DSCAlarmZones) {dscalarm="zone:1:12:zone_tripped"}
Contact ZONE13_GENERAL_STATUS "Garage Door 1 Sensor" (DSCAlarmZones, Garage) {dscalarm="zone:1:13:zone_general_status"}
Number ZONE13_BYPASS_MODE "Garage Door 1 Sensor Bypass Mode" (DSCAlarmZones) {dscalarm="zone:1:13:zone_bypass_mode"}
String ZONE13_ALARM_STATUS "Alarm Status : [%s]" (DSCAlarmZones) {dscalarm="zone:1:13:zone_alarm_status"}
String ZONE13_FAULT_STATUS "Fault Status : [%s]" (DSCAlarmZones) {dscalarm="zone:1:13:zone_fault_status"}
String ZONE13_TAMPER_STATUS "Tamper Status : [%s]" (DSCAlarmZones) {dscalarm="zone:1:13:zone_tamper_status"}
Switch ZONE13_IN_ALARM (DSCAlarmZones) {dscalarm="zone:1:13:zone_in_alarm"}
Switch ZONE13_TAMPER (DSCAlarmZones) {dscalarm="zone:1:13:zone_tamper"}
Switch ZONE13_FAULT (DSCAlarmZones) {dscalarm="zone:1:13:zone_fault"}
Switch ZONE13_TRIPPED (DSCAlarmZones) {dscalarm="zone:1:13:zone_tripped"}
Contact ZONE14_GENERAL_STATUS "Garage Door 2 Sensor" (DSCAlarmZones, Garage) {dscalarm="zone:1:14:zone_general_status"}
Number ZONE14_BYPASS_MODE "Garage Door 2 Sensor Bypass Mode" (DSCAlarmZones) {dscalarm="zone:1:14:zone_bypass_mode"}
String ZONE14_ALARM_STATUS "Alarm Status : [%s]" (DSCAlarmZones) {dscalarm="zone:1:14:zone_alarm_status"}
String ZONE14_FAULT_STATUS "Fault Status : [%s]" (DSCAlarmZones) {dscalarm="zone:1:14:zone_fault_status"}
String ZONE14_TAMPER_STATUS "Tamper Status : [%s]" (DSCAlarmZones) {dscalarm="zone:1:14:zone_tamper_status"}
Switch ZONE14_IN_ALARM (DSCAlarmZones) {dscalarm="zone:1:14:zone_in_alarm"}
Switch ZONE14_TAMPER (DSCAlarmZones) {dscalarm="zone:1:14:zone_tamper"}
Switch ZONE14_FAULT (DSCAlarmZones) {dscalarm="zone:1:14:zone_fault"}
Switch ZONE14_TRIPPED (DSCAlarmZones) {dscalarm="zone:1:14:zone_tripped"}
Contact ZONE15_GENERAL_STATUS "Garage Window Sensor" (DSCAlarmZones, Garage) {dscalarm="zone:1:15:zone_general_status"}
Number ZONE15_BYPASS_MODE "Garage Window Sensor Bypass Mode" (DSCAlarmZones) {dscalarm="zone:1:15:zone_bypass_mode"}
String ZONE15_ALARM_STATUS "Alarm Status : [%s]" (DSCAlarmZones) {dscalarm="zone:1:15:zone_alarm_status"}
String ZONE15_FAULT_STATUS "Fault Status : [%s]" (DSCAlarmZones) {dscalarm="zone:1:15:zone_fault_status"}
String ZONE15_TAMPER_STATUS "Tamper Status : [%s]" (DSCAlarmZones) {dscalarm="zone:1:15:zone_tamper_status"}
Switch ZONE15_IN_ALARM (DSCAlarmZones) {dscalarm="zone:1:15:zone_in_alarm"}
Switch ZONE15_TAMPER (DSCAlarmZones) {dscalarm="zone:1:15:zone_tamper"}
Switch ZONE15_FAULT (DSCAlarmZones) {dscalarm="zone:1:15:zone_fault"}
Switch ZONE15_TRIPPED (DSCAlarmZones) {dscalarm="zone:1:15:zone_tripped"}
Contact ZONE25_GENERAL_STATUS "Utility Room Motion Sensor" (DSCAlarmZones, UtilityRoom) {dscalarm="zone:1:25:zone_general_status"}
Number ZONE25_BYPASS_MODE "Utility Room Motion Sensor Bypass Mode" (DSCAlarmZones) {dscalarm="zone:1:25:zone_bypass_mode"}
String ZONE25_ALARM_STATUS "Alarm Status : [%s]" (DSCAlarmZones) {dscalarm="zone:1:25:zone_alarm_status"}
String ZONE25_FAULT_STATUS "Fault Status : [%s]" (DSCAlarmZones) {dscalarm="zone:1:25:zone_fault_status"}
String ZONE25_TAMPER_STATUS "Tamper Status : [%s]" (DSCAlarmZones) {dscalarm="zone:1:25:zone_tamper_status"}
Switch ZONE25_IN_ALARM (DSCAlarmZones) {dscalarm="zone:1:25:zone_in_alarm"}
Switch ZONE25_TAMPER (DSCAlarmZones) {dscalarm="zone:1:25:zone_tamper"}
Switch ZONE25_FAULT (DSCAlarmZones) {dscalarm="zone:1:25:zone_fault"}
Switch ZONE25_TRIPPED (DSCAlarmZones) {dscalarm="zone:1:25:zone_tripped"}
/* DSC Alarm Keypad Items */
Number KEYPAD_READY_LED "Ready LED Status: [%d]" (DSCAlarmKeypads) {dscalarm="keypad:keypad_ready_led"}
Number KEYPAD_ARMED_LED "Armed LED Status: [%d]" (DSCAlarmKeypads) {dscalarm="keypad:keypad_armed_led"}
Number KEYPAD_MEMORY_LED "Memory LED Status: [%d]" (DSCAlarmKeypads) {dscalarm="keypad:keypad_memory_led"}
Number KEYPAD_BYPASS_LED "Bypass LED Status: [%d]" (DSCAlarmKeypads) {dscalarm="keypad:keypad_bypass_led"}
Number KEYPAD_TROUBLE_LED "Trouble LED Status: [%d]" (DSCAlarmKeypads) {dscalarm="keypad:keypad_trouble_led"}
Number KEYPAD_PROGRAM_LED "Program LED Status: [%d]" (DSCAlarmKeypads) {dscalarm="keypad:keypad_program_led"}
Number KEYPAD_FIRE_LED "Fire LED Status: [%d]" (DSCAlarmKeypads) {dscalarm="keypad:keypad_fire_led"}
Number KEYPAD_BACKLIGHT_LED "Backlight LED Status: [%d]" (DSCAlarmKeypads) {dscalarm="keypad:keypad_backlight_led"}
Number KEYPAD_AC_LED "AC LED Status: [%d]" (DSCAlarmKeypads) {dscalarm="keypad:keypad_ac_led"}
```
Here is an example sitemap:
```
Frame label="Alarm System" {
Text label="DSC Alarm System" icon="shield-1" {
Frame label="Panel" {
Switch item=PANEL_CONNECTION label="Panel Connection" icon="shield-1" mappings=[1="Connected", 0="Disconnected"]
Text item=PANEL_MESSAGE icon="shield-1"
Selection item=PANEL_COMMAND icon="shield-1" mappings=[0="Poll", 1="Status Report", 2="Labels Request (Serial Only)", 8="Dump Zone Timers (TCP Only)", 10="Set Time/Date", 200="Send User Code"]
Text item=PANEL_TIME {
Switch item=PANEL_TIME_STAMP label="Panel Time Stamp"
Switch item=PANEL_TIME_BROADCAST label="Panel Time Broadcast"
}
Text item=PANEL_SYSTEM_ERROR icon="MyImages/system-error"
Text item=PANEL_TROUBLE_LED label="Panel Trouble Condition" {
Text item=PANEL_TROUBLE_MESSAGE icon="shield-0"
Text item=PANEL_SERVICE_REQUIRED label="Service Required"
Text item=PANEL_AC_TROUBLE label="AC Trouble"
Text item=PANEL_TELEPHONE_TROUBLE label="Telephone Line Trouble"
Text item=PANEL_FTC_TROUBLE label="Failed to Communicate Trouble"
Text item=PANEL_ZONE_FAULT label="Zone Fault"
Text item=PANEL_ZONE_TAMPER label="Zone Tamper"
Text item=PANEL_ZONE_LOW_BATTERY label="Zone Low Battery"
Text item=PANEL_TIME_LOSS label="Panel Time Loss"
}
}
Frame label="Partitions" {
Text item=PARTITION1_STATUS icon="shield-1" {
Switch item=PARTITION1_ARM_MODE label="Partition 1 Arm Options" mappings=[0="Disarm", 1="Away", 2="Stay", 3="Zero", 4="W/Code"]
}
}
Frame label="Keypad" {
Text label="Keypad LED Status" icon="shield-1" {
Switch item=KEYPAD_READY_LED label="Ready LED Status:" mappings=[0="Off", 1="On", 2="Flashing"]
Switch item=KEYPAD_ARMED_LED label="Armed LED Status:" mappings=[0="Off", 1="On", 2="Flashing"]
Switch item=KEYPAD_MEMORY_LED label="Memory LED Status:" mappings=[0="Off", 1="On", 2="Flashing"]
Switch item=KEYPAD_BYPASS_LED label="Bypass LED Status:" mappings=[0="Off", 1="On", 2="Flashing"]
Switch item=KEYPAD_TROUBLE_LED label="Trouble LED Status:" mappings=[0="Off", 1="On", 2="Flashing"]
Switch item=KEYPAD_PROGRAM_LED label="Program LED Status:" mappings=[0="Off", 1="On", 2="Flashing"]
Switch item=KEYPAD_FIRE_LED label="Fire LED Status:" mappings=[0="Off", 1="On", 2="Flashing"]
Switch item=KEYPAD_BACKLIGHT_LED label="Backlight LED Status:" mappings=[0="Off", 1="On", 2="Flashing"]
Switch item=KEYPAD_AC_LED label="AC LED Status:" mappings=[0="Off", 1="On", 2="Flashing"]
}
}
Frame label="Zones" {
Text item=ZONE1_GENERAL_STATUS {
Switch item=ZONE1_BYPASS_MODE icon="MyImages/Zone-Alarm" mappings=[0="Armed", 1="Bypassed"]
Frame label="Other Status:" {
Text item=ZONE1_ALARM_STATUS icon="MyImages/Status-warning"
Text item=ZONE1_FAULT_STATUS icon="MyImages/Status-warning"
Text item=ZONE1_TAMPER_STATUS icon="MyImages/Status-warning"
}
}
Text item=ZONE9_GENERAL_STATUS {
Switch item=ZONE9_BYPASS_MODE icon="MyImages/Zone-Alarm" mappings=[0="Armed", 1="Bypassed"]
Frame label="Other Status:" {
Text item=ZONE9_ALARM_STATUS icon="MyImages/Status-warning"
Text item=ZONE9_FAULT_STATUS icon="MyImages/Status-warning"
Text item=ZONE9_TAMPER_STATUS icon="MyImages/Status-warning"
}
}
Text item=ZONE10_GENERAL_STATUS {
Switch item=ZONE10_BYPASS_MODE icon="MyImages/Zone-Alarm" mappings=[0="Armed", 1="Bypassed"]
Frame label="Other Status:" {
Text item=ZONE10_ALARM_STATUS icon="MyImages/Status-warning"
Text item=ZONE10_FAULT_STATUS icon="MyImages/Status-warning"
Text item=ZONE10_TAMPER_STATUS icon="MyImages/Status-warning"
}
}
Text item=ZONE11_GENERAL_STATUS {
Switch item=ZONE11_BYPASS_MODE icon="MyImages/Zone-Alarm" mappings=[0="Armed", 1="Bypassed"]
Frame label="Other Status:" {
Text item=ZONE11_ALARM_STATUS icon="MyImages/Status-warning"
Text item=ZONE11_FAULT_STATUS icon="MyImages/Status-warning"
Text item=ZONE11_TAMPER_STATUS icon="MyImages/Status-warning"
}
}
Text item=ZONE12_GENERAL_STATUS {
Switch item=ZONE12_BYPASS_MODE icon="MyImages/Zone-Alarm" mappings=[0="Armed", 1="Bypassed"]
Frame label="Other Status:" {
Text item=ZONE12_ALARM_STATUS icon="MyImages/Status-warning"
Text item=ZONE12_FAULT_STATUS icon="MyImages/Status-warning"
Text item=ZONE12_TAMPER_STATUS icon="MyImages/Status-warning"
}
}
Text item=ZONE13_GENERAL_STATUS {
Switch item=ZONE13_BYPASS_MODE icon="MyImages/Zone-Alarm" mappings=[0="Armed", 1="Bypassed"]
Frame label="Other Status:" {
Text item=ZONE13_ALARM_STATUS icon="MyImages/Status-warning"
Text item=ZONE13_FAULT_STATUS icon="MyImages/Status-warning"
Text item=ZONE13_TAMPER_STATUS icon="MyImages/Status-warning"
}
}
Text item=ZONE14_GENERAL_STATUS {
Switch item=ZONE14_BYPASS_MODE icon="MyImages/Zone-Alarm" mappings=[0="Armed", 1="Bypassed"]
Frame label="Other Status:" {
Text item=ZONE14_ALARM_STATUS icon="MyImages/Status-warning"
Text item=ZONE14_FAULT_STATUS icon="MyImages/Status-warning"
Text item=ZONE14_TAMPER_STATUS icon="MyImages/Status-warning"
}
}
Text item=ZONE15_GENERAL_STATUS {
Switch item=ZONE15_BYPASS_MODE icon="MyImages/Zone-Alarm" mappings=[0="Armed", 1="Bypassed"]
Frame label="Other Status:" {
Text item=ZONE15_ALARM_STATUS icon="MyImages/Status-warning"
Text item=ZONE15_FAULT_STATUS icon="MyImages/Status-warning"
Text item=ZONE15_TAMPER_STATUS icon="MyImages/Status-warning"
}
}
Text item=ZONE25_GENERAL_STATUS {
Switch item=ZONE25_BYPASS_MODE icon="MyImages/Zone-Alarm" mappings=[0="Armed", 1="Bypassed"]
Frame label="Other Status:" {
Text item=ZONE25_ALARM_STATUS icon="MyImages/Status-warning"
Text item=ZONE25_FAULT_STATUS icon="MyImages/Status-warning"
Text item=ZONE25_TAMPER_STATUS icon="MyImages/Status-warning"
}
}
}
}
}
```
## Change Log
### OpenHAB 1.6.0
* Initial commit of the DSC Alarm Binding. ([#1334](https://github.com/openhab/openhab/pull/1334))
### OpenHAB 1.7.0
* Added several on/off switch items to help with rule creation. Added a binding configuration option to adjust the polling period performed by the binding. ([#1763](https://github.com/openhab/openhab/pull/1763))
* Features added include: renamed item 'panel_time_date' to 'panel_time'; added item 'panel_time_stamp' to allow the receiving of time stamped messages from the DSC Alarm system; added item 'panel_time_broadcast' to allow the reception of DSC Alarm system time broadcasts for display. Fixes include: item 'panel_time_date' (renamed to 'panel_time') was not working at all; added several methods to binding class to eliminate extra 'for' loop in message receive thread; included user code fix for the IT-100 serial interface from [#2203](https://github.com/openhab/openhab/pull/2203). ([#2320](https://github.com/openhab/openhab/pull/2320))
### OpenHAB 1.8.0
* Added several new item types to allow the display of trouble conditions on the DSC Alarm. A new item added to show which opening/closing method was used. Added a configuration option to allow the suppression of acknowledgement messages from the DSC Alarm system. ([#2893](https://github.com/openhab/openhab/pull/2893))
* Added user code to user opening/closing messages. ([#2964](https://github.com/openhab/openhab/pull/2964))
* Added a DSC Alarm Action bundle that allows users to send DSC Alarm Commands directly to the alarm system from a rule. ([#3266](https://github.com/openhab/openhab/pull/3266))
### OpenHAB 1.8.1
* Added support for the DSC Alarm binding to communicate with an IT-100 through a TCP/IP serial server. Also, fixed a bug where the IT-100 serial interface requires a 6 digit usercode but was only receiving 4 digits.
([#3774](https://github.com/openhab/openhab/pull/3774))

View File

@ -1,181 +0,0 @@
---
id: dsmr
label: DSMR
title: DSMR - Bindings
type: binding
description: "The openHAB DSMR binding is targeted for Dutch users having a smart meter ('Slimme meter' in Dutch). Data of Dutch smart meters can be obtained via the P1-port. When connecting this port from a serial port the data can be read out."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.dsmr/README.md
since: 1x
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# DSMR Binding
The openHAB DSMR binding is targeted for Dutch users having a smart meter ('Slimme meter' in Dutch). Data of Dutch smart meters can be obtained via the P1-port. When connecting this port from a serial port the data can be read out.
This binding reads the P1-port of the Dutch Smart Meters that comply to NTA8130, DSMR v2.1, DSMR v2.2, DSMR v3.0, DSMR v4.0 or DSMR v4.04.
Users not living in the Netherlands that want to read a meter should review the [IEC-62056-21 Meter Binding](https://github.com/openhab/openhab/wiki/IEC-62056---21-Meter-Binding).
## Binding Configuration
The binding can be configured in the file `services/dsmr.cfg`.
| Property | Default | Required | Description |
|--------------------------|---------|:--------:|-------------------------------------------|
| port | | Yes | Port of the DSMR |
| gas.channel | 1 | No | Channel for the gas meter |
| water.channel | 2 | No | Channel for the water meter |
| heating.channel | 3 | No | Channel for the heating meter |
| cooling.channel | 4 | No | Channel for the cooling meter |
| generic.channel | 5 | No | Channel for the generic meter |
| slaveelectricity.channel | 6 | No | Channel for the slave electricity meter |
The channels of the additional meters correspond to the M-Bus channel of the
smart meter that the additional meter is connected to. The main electricity
meter is always at channel 0; configuration of this meter is not necessary
and not supported.
### Differences between DSMR versions
The serial port settings for DSMR v4 and up (115200 8n1) differ from NTA8130,
v2.1, v2.2 and v3.0 (9600 7e1). The DSMR binding will automatically detect the
applicable serial port settings.
## Item Configuration
The syntax for the DSMR binding configuration string is:
```
dsmr="[dsmr item id]"
```
The following table shows the full list of available dsmr values:
| DSMR item id | Description | Available for DSMR version | Unit |
|--------------------|-------------|----------------------------|------|
| **General values** | | | |
| P1VersionOutput | Version information for P1 output | v4.0 and up | |
| P1Timestamp | Timestamp of the P1 output |v4.0 and up||
| **Electricity meter values**| | | |
| eEquipmentId | Equipment identifier|All versions|
| eDeliveryTariff0 | Total meter delivery tariff 0|<sup>1</sup>|kWh
| eDeliveryTariff1 | Total meter delivery tariff 1|All versions|kWh
| eDeliveryTariff2 | Total meter delivery tariff 2|All versions|kWh
| eProductionTariff0 | Total meter production tariff 0|<sup>1</sup>|kWh|
| eProductionTariff1 | Total meter production tariff 1|All versions|kWh|
| eProductionTariff2 | Total meter production tariff 2|All versions|kWh|
| eTariffIndicator | Tariff indicator|All versions|
| eActualDelivery | Actual power delivery|All versions|kW
| eActualProduction | Actual power production|All versions|kW
| eTreshold | The actual threshold Electricity|All versions|A for v2.1, v2.2, v3.0<br>kW for v4.0 and v4.04
| eSwitchPosition | Actual switch position|All versions|
| ePowerFailures | Number of power failures|v4.0 and up|
| eLongPowerFailures | Number of long power failures|v4.0 and up|
| eNumberOfLogEntries| Number of power failure entries in the event log|v4.0 and up|
| eDatePowerFailureX | Date of power failure (entry *X*)|v4.0 and up<br>*X* is a value [1-10]|
| eDurationPowerFailureX |Duration of power failure (entry *X*)|v4.0 and up<br>*X* is a value [1-10]|seconds
| eVoltageSagsL1 | Number of voltage sags L1|v4.0 and up|
| eVoltageSagsL2 | Number of voltage sags L2|v4.0 and up|
| eVoltageSagsL3 | Number of voltage sags L3|v4.0 and up|
| eVoltageSwellsL1 | Number of voltage swells L1|v4.0 and up|
| eVoltageSwellsL2 | Number of voltage swells L2|v4.0 and up|
| eVoltageSwellsL3 | Number of voltage swells L3|v4.0 and up|
| eTextCode | Version information for P1 output|All versions|
| eTextMessage | Version information for P1 output|All versions|
| eInstantCurrentL1 | Instantenous current L1|v4.04 and up|A
| eInstantCurrentL2 | Instantenous current L2|v4.04 and up|A
| eInstantCurrentL3 | Instantenous current L3|v4.04 and up|A
| eInstantPowerDeliveryL1 |Instantenous active power delivery L1|v4.04 and up|kW
| eInstantPowerDeliveryL2 |Instantenous active power delivery L2|v4.04 and up|kW
| eInstantPowerDeliveryL3 |Instantenous active power delivery L3|v4.04 and up|kW
| eInstantPowerProductionL1 |Instantenous active power production L1|v4.04 and up|kW
| eInstantPowerProductionL2 |Instantenous active power production L2|v4.04 and up|kW
| eInstantPowerProductionL3 |Instantenous active power production L3|v4.04 and up|kW
| **Gas meter values**||||
| gDeviceType | Device Type|v3.0 and up|
| gEquipmentId | Equipment identifier|All versions|
| gValueTS | Timestamp of the last measurement (local time)|v4.0 and up|Date & time
| gNumberOfValues | Number of values available for gValue en gValue*X*|v3.0|
| gUnit | Unit of the values|v3.0|
| gValue | Delivery of:<br>-Last hour (v3.0 / v4.0 and up)<br>-Last 24 hours (v2.1 / v2.2)|All versions<sup>2</sup>|m3
| gValueX | Meter reading *X* of the buffer (hourly period)|v3.0<sup>2</sup><br>*X* is a value [2-10]<br>Higher values are older|m3
| gProfileStatus | Unknown|v3.0|
| gRecordingPeriod | Duration of a value recording|v3.0|minutes
| gValueCompensated | Temperature compensated delivery of the last 24 hours|v2.1 and v2.2|m3
| gValvePosition | Valve position|All versions|
| **Heating meter values**||||
| hDeviceType | Device Type|v3.0 and up|
| hEquipmentId | Equipment identifier|All versions|
| hValueTS | Timestamp of the last measurement (local time)|v4.0 and up|Date &amp; time
| hValue | Last hour delivery|All versions|GJ
| hValvePosition | Valve position|v3.0 and up|
| **Cooling meter values**||||
| cDeviceType | Device Type|v3.0 and up|
| cEquipmentId | Equipment identifier|All versions|
| cValueTS | Timestamp of the last measurement (local time)|v4.0 and up|Date &amp; time
| cValue | Last hour delivery|All versions|GJ
| cValvePosition | Valve position|v3.0 and up|
| **Cooling meter values**||||
| wDeviceType | Device Type|v3.0 and up|
| wEquipmentId | Equipment identifier|All versions|
| wValueTS | Timestamp of the last measurement (local time)|v4.0 and up|Date &amp; time
| wValue | Last hour delivery|All versions|m3
| wValvePosition | Valve position|v3.0 and up|
| **Generic meter values**||||
| genericDeviceType | Device Type|v3.0|
| genericEquipmentId | Equipment identifier|v3.0|
| genericValue | Last hour delivery|v3.0|
| genericValvePosition |Valve/Switch position|v3.0|
| **Slave electricity meter values**||||
| seDeviceType | Device Type|v4.0 and up|
| seEquipmentId | Equipment identifier|v4.0 and up|
| seValueTS | Timestamp of the last measurement (local time)|v4.0 and up|Date &amp; time
| seValue | Last hour delivery|v4.0 and up|kWh
| seSwitchPosition | Switch position|v4.0 and up
<sup>1</sup> This item isn't part of any specification, but the ITRON ACE4000 GTMM Mk3 does use this value.<br/>
<sup>2</sup> Gas values for DSMR v3.0 are available in a list of max. 10 entries. The binding assumes the first value is the most recent (and thus available in `gValue`)
## Examples
### Item configuration examples
```
Number P1_Actual_Delivery "Actual usage [%.3f kW]" {dsmr="eActualDelivery"}
Number P1_Meter_DeliveryLow "Meterstand reading low tariff [%.3f kWh]" {dsmr="eDeliveryTariff1"}
Number P1_Meter_DeliveryNormal "Meter reading normal tariff[%.3f kWh]" {dsmr="eDeliveryTariff2"}
```
## Notes
### Logging
To increase verbosity of the logging for debugging purposes, set the
`org.openhab.binding.dsmr` log level to DEBUG. Reduce back to INFO or DEFAULT
after capturing the desired logs.
### Test results
Meter | DSMR version | Electricity | Gas | Water | Heating | Cooling | General | Slave electricity
----- |:------------:|:-----------:|:---:|:-----:|:-------:|:-------:|:-------:|:----------------:
ISKRA MT382|3.0|OK|OK|Not tested|Not tested|Not tested|Not tested|N/A
ISKRA AM550|5.0|OK|OK|Not tested|Not tested|Not tested|Not tested|Unknown
Itron ACE4000 GTMM Mk3|NTA8130|OK|Not tested|Not tested|Not tested|Not tested|N/A|N/A
Kaifa E0003|4.04|OK|OK|Not tested|Not tested|Not tested|N/A|Not tested
Kaifa MA304|4.04|OK|Not tested|Not tested|Not tested|Not tested|N/A|Not tested
Kamstrup 162JxC|3.0|OK|OK|Not tested|Not tested|Not tested|Not tested|N/A
Landys + Gyr E350|3.0|OK|Not tested|Not tested|Not tested|Not tested|Not tested|N/A
### CRC
A meter that conforms to DSMR v4 or higher includes a CRC on the complete message. The binding does not check the CRC yet.

View File

@ -1,329 +0,0 @@
---
id: ebus
label: eBUS
title: eBUS - Bindings
type: binding
description: "The eBUS binding allows you to control your heating system. The eBUS protocol is used by heating system vendors like Wolf, Vaillant, Kromschröder etc. You can read temperatures, pump performance, gas consumption etc."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.ebus/README.md
since: 1x
logo: images/addons/ebus.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# eBUS Binding
The eBUS binding allows you to control your heating system. The eBUS protocol is used by heating system vendors like Wolf, Vaillant, Kromschröder etc. You can read temperatures, pump performance, gas consumption etc.
┌────────┐ serial/usb (rs232) ┌──────┐
│ │ serial (eBUS) ┌───┐ or ethernet │ ──── │
│ │<--------------->│ X │<------------------>│ : │
│ ◊◊◊◊ │ └───┘ └──────┘
└────────┘
Heating Unit eBUS Adapter openHAB Server
To access your heating system you either need an eBUS interface. You can buy a ready interface or solder your own circuit (examples: [eBUS Wiki](http://ebus-wiki.org/doku.php)). A simple read-only interface can be build with an Arduino device.
## Binding Configuration
The binding can be configured in the file `services/ebus.cfg`.
| Property | Default | Required | Description |
|----------|---------|:--------:|-------------|
| serialPort | | if connecing via serial port | Serial port of eBUS interface. Do not use as well as hostname/port. |
| hostname | | if connecting via network | TCP host name or IP address of eBUS interface. Do not use as well as serialPort. |
| port | | if connecting via network | TCP port of eBUS interface, 5000 for example |
| parseUrl | | | Custom parser configuration file |
| parsers | | | One or more parsers for you eBUS device, separated by commas. You can find the latest devices below or on the wiki page. List of productive parsers as of this writing: common, vaillant-bai00, vaillant-vrc430, vaillant-vrc470, vaillant-vrc630, vaillant-vr90, wolf-cgb2_hc, wolf-cgb2, wolf-sm1, custom |
| record | | | Comma-separated list of telegram types (all,debug,unknown) to write to a CSV file in folder {openhab}/etc/ebus |
| senderId | FF | No | Set the sender id of this binding |
### Example
```
# Serial port of eBUS interface
# Valid values are e.g. COM1 for Windows and /dev/ttyS0 or /dev/ttyUSB0 for Linux
serialPort=COM2
# TCP Hostname and Port
# Warning: Only use ebus.hostname or ebus.serialPort
#hostname=myhostname
#port=5000
# Custom parser configuration file
# This example tries to load a configuration ${openhab_home}/configurations/ebus-config.json
#parserUrl=platform:/base/../configurations/ebus-config.json
# Define one or more parsers for you eBUS device. You can find the latest devices below or on the wiki page.
# https://github.com/openhab/openhab/wiki/eBUS-IDs
#
# >> Deprecated
#
# >> _vaillant - All older vaillant telegrams (will be merged in other files)
# >> _wolf-35 - All older Wolf eBUS dst address 0x35 telegrams (will be merged in other files)
#
# >> Productive
#
# >> common - Commands from eBUS standard
# >> vaillant-bai00 - All Vaillant BAI000 telegrams
# >> vaillant-vrc430 - All Vaillant VRC430 telegrams
# >> vaillant-vrc470 - All Vaillant VRC470 telegrams
# >> vaillant-vrc630 - All Vaillant VRC630 telegrams
# >> vaillant-vr90 - All Vaillant VR90 telegrams
# >> wolf-cgb2_hc - All boiler Wolf CGB2 heating curve telegrams
# >> wolf-cgb2 - All boiler Wolf CGB2 telegrams
# >> wolf-sm1 - All Wolf Solar Module SM1 telegrams
# >> custom - Use configuration defined by parserUrl
#
# default uses common and all vendor specified telegrams
#parsers=common,wolf,testing,custom
# Write all/debug/unknown telegrams to a CSV file in folder {openhab}/etc/ebus
#record=all,debug,unknown
# Set the sender id of this binding, default is "FF"
#senderId=FF
```
A sample configuration could look like:
```
serialPort=COM2
parsers=common,wolf
```
## Items Configuration
The syntax for the eBUS binding configuration string is explained here:
### ID's
The binding uses unique ID's to identifiy eBUS telegrams from the internal database. The ID has a hierarchical structure and is in each case separated by a dot.
```
<command-class>.<command-id>.<value>
```
ID Part | Description
--- | ---
`<command-class>` | Groups multiple commands to logical class like _heating_, _boiler_, _solar_ etc.
`<command-id>` | This is the identifier for the command
`<value>` | The name of a result value, only required if the telegram contains more than one value
#### List of ID's
ID's | Description
--- | ---
[Common](https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.ebus/docs/json-files/common.md) | Standard eBUS commands, Vendor independent
[Vaillant BAI00](https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.ebus/docs/json-files/vaillant-bai00.md) | Vaillant BAI00
[Vaillant VRC430](https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.ebus/docs/json-files/vaillant-vrc430.md) | Vaillant VRC430 controller
[Vaillant VRC470](https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.ebus/docs/json-files/vaillant-vrc470.md) | Vaillant VRC470 controller
[Vaillant VRC630](https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.ebus/docs/json-files/vaillant-vrc630.md) | Vaillant VRC630 controller
[Vaillant VR90](https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.ebus/docs/json-files/vaillant-vr90.md) | Vaillant VR90 controller
[Wolf CGB2](https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.ebus/docs/json-files/wolf-cgb2.md) | Wolf CGB2 Boiler, used in Heating system Wolf CSZ-2
[Wolf CGB2 HC](https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.ebus/docs/json-files/wolf-cgb2_hc.md) | Wolf CGB2 Boiler (Heating Curve), used in Heating system Wolf CSZ-2
[Wolf SM1](https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.ebus/docs/json-files/wolf-sm1.md) | Wolf Solar Module, used in Heating system Wolf CSZ-2
You can find a complete list of all supported devices [here](https://github.com/openhab/openhab1-addons/wiki/docs/json-configs.md).
### Parameters
This binding allows you to combine a set of parameters to get/set or request values on your heating system.
If you only want to read a value, you just need to set the parameters `id`. You can find a list above.
Sometimes more than one bus participant will send telegrams with given `id`. To filter the telegrams you can use the properties `dst` (destination address) and `src` (source address).
#### Reading parameters
```
ebus="id:<id>"
ebus="id:<id>, src:<src>"
```
Parameter | Description
--- | ---
id | Defined to read a value from eBUS. Sometimes you can access the same value with different ids with different precisions.
dst | Filter telegrams for a specified destination eBUS address (hex string).
src | Filter telegrams for a specified source eBUS address (hex string).
#### Writing parameter
```
ebus="id:<id>, dst:<dst>, refresh:<refresh>"
ebus="id:<id>, dst:<dst>, refresh:<refresh>, set:<set>"
ebus="id:<id>, cmd:<cmd>, dst:<dst>, refresh:<refresh>"
ebus="id:<id>, cmd:<cmd>, dst:<dst>, refresh:<refresh>, set:<set>"
ebus="id:<id>, dst:<dst>, refresh:<refresh>, set:<set>"
```
Parameter | Description
--- | ---
id | Defined to read a value from eBUS. This normally also identifies a request-command for polling.
cmd | Defines the request-command that should be send on `refresh` interval. Normally this parameter is not needed, because parameter `id` also identifies the configuration.
refresh | Sends the request-command every n seconds (polling), requires parameter `id` or if not similar `cmd`.
set | Defines a value that should be set. This requires special set commands.
dst | Filter telegrams for a specified destination eBUS address (hex string).
src | Filter telegrams for a specified source eBUS address (hex string).
Normally you send a request and expects an answer from a bus participant. But this binding works asynchronous, hence you can get return values only indirectly by using the read parameters. By this way you can update one or more items with only one command because a telegram can contain multiple values.
You should look at the examples below to understand the different cases.
The binding tries to send a commando up to five times before it cancels a request. You only get a short warning in the log. So this is fire-and-forget.
##### Set value
To set a value you have to use the parameter `set`. But you need special commands that accepts setting values. You can only set one value per item (binding/openhab limitation).
##### Polling
On some systems it is required to request answers from bus participants regularly. In this case you can use the parameter `refresh` to send the request-command or RAW data automatically every n seconds. You must add parameter `cmd` if it is not similar to parameter `id`.
##### RAW data
It is also possible to send a raw eBUS telegram directly without any programmatic help. You have to write the telegram as hex string like `FF 08 50 22 03 CC 9A 01 00`. The last byte will be automatic replaced by a valid checksum if it not the sync byte `FF`.
You should use this parameter only in special cases and prefer `cmd` instead.
Parameter | Description
--- | ---
cmd | This allows you to send a command to the eBUS.
set | Set a value id from a setter command
dst | Define the destination eBUS address as hex value for the telegram.
src | Defines the source eBUS address as hex value for the telegram. Or default value `FF` would be used. You can overwrite this inf `ebus.cfg`.
refresh | If you set a refresh interval (sec.) the command will be automatic send via eBUS. This is usually used to poll data from your system.
data | Instead of the `cmd` parameter you can send a raw telegram as hex string. The last byte will be replaced by the calculated crc value if is not `FF`.
data-{STATE} | Same as parameter `data`, but is only send on the specified state of the item. As example you can define a switch item with `data-ON` and `data-OFF` to send two different telegrams per state.
## Examples
### Receive values from eBUS
```
ebus="id:burner.starts, dst:08"
```
This item configuration receives the number of firings from the eBUS. This is defined by parameter `id`. But in this case we only want telegrams with the destination address 0x08. But keep in mind that this a read-only configuration. So we can only receive values that are submitted as broadcast or requested by a device.
Optionally you can also filter the source address with the parameter `src`.
### Reading values from eBUS regularly (Polling)
```
ebus="id:burner.starts, dst:08, src:FF, refresh:60"
ebus="id:burner.starts, cmd:burner.starts, dst:08, src:FF, refresh:60"
```
This examples (both are do the same) are similar to the previous example, but here we active request this value every 60 seconds from the bus (Polling). If you can read multiple values with one command it's enough to send the command once. In this example the source address is explicit set to a hex string. If parameter `cmd` and `id` are equal you can omit parameter `cmd`.
### Set a value
```
ebus="id:heating.program_heating_circuit, set:heating.set_program_heating_circuit.program, dst:08"
```
This example uses the _set_program_heating_circuit_ command to set the value _program_ to a new value.
### Send raw telegrams, receive values
```
ebus="id:burner.starts, data:FF 08 50 22 03 CC 1A 27 00"
```
In this example we send a raw telegram as hex string instead a already defined command. The last byte is replaced by the calculated crc value if it's not 0xFF (eBUS sync byte). But you should prefer the `cmd` parameter.
### Send raw telegram by item status
```
ebus="id:heating.no_of_firing, data-ON:FF 08 50 22 03 CC 1A 27 00, data-OFF:FF 08 50 22 03 CC 0E 00 00"
```
Similar to the last example, but we use different telegrams per item state. If you use a switch item you can send different telegram for the states `ON` or `OFF`.
### Example for item configuration
Here is a longer example.
```
/** Heating **/
Group HeatingUnit "Heating" (All)
Group Solar "Solar" (All)
Group SOL_Chart1 (HeatingUnit)
Group SOL_Chart2 (HeatingUnit)
Group HU_Chart1 (HeatingUnit)
Group HU_Chart2 (HeatingUnit)
Number HU_Temp_Warm_Wather "Hotwater temp.[%.1f °C]" <temperature> (HeatingUnit,SOL_Chart1) { ebus="id:dhw.temp_dhw"}
Number HU_Temp_M_Warm_Wather "Hotwater min. temp.[%.1f °C]" <temperature> (HeatingUnit) { ebus="id:controller.temp_d_dhw"}
Number HU_Temp_T_Warm_Wather "Hotwater temp(target)[%.1f °C]" <temperature> (HeatingUnit) { ebus="id:controller2.temp_d_dhw, src:F1"}
Number HU_Temp_Heat_Vessel "Boiler temp. [%.1f °C]" <temperature> (HeatingUnit,HU_Chart1) { ebus="id:auto_stroker.temp_boiler, src:03"}
Number HU_Temp_T_Heat_Vessel "Boiler temp. (target) [%.1f °C]" <temperature> (HeatingUnit,HU_Chart1) { ebus="id:controller.temp_d_boiler"}
Number HU_Temp_Heat_Return "HU. Return [%.1f °C]" <temperature> (HeatingUnit,HU_Chart1) { ebus="id:boiler.temp_return"}
Number HU_Temp_Heat_Exhaust "Exhaust temp. [%.1f °C]" <temperature> (HeatingUnit) { ebus="id:boiler.temp_exhaust"}
Number HU_Temp_AvgOutdoor "Avg. temp. outdoor [%.1f °C]" <temperature> (HeatingUnit) { ebus="id:controller2.temp_outside, src:F1"}
Number HU_Temp_Outdoor "Temp. outdoor [%.1f °C]" <temperature> (HeatingUnit) { ebus="id:controller2.temp_outside, src:03"}
Switch SOL_Status_Pump "Solar pump" <switch> (Solar,SOL_Chart2) { ebus="id:solar.solar_data.state_pump"}
Number SOL_Temp_Collector "Sol. collektor temp. [%.1f °C]" <temperature> (Solar,SOL_Chart1) { ebus="id:solar.solar_data.temp_collector"}
Number SOL_Temp_Return "Sol. return temp. [%.1f °C]" <temperature> (Solar,SOL_Chart1) { ebus="id:solar.temp_flow"}
Number SOL_Temp_Reservoir "Sol. store temp. [%.1f °C]" <temperature> (Solar,SOL_Chart1) { ebus="id:solar.solar_data.temp_cylinder"}
Number SOL_Yield_Sum "Sol. sum yield [%.1f kW/h]" <bar_chart> (Solar) { ebus="id:solar.solar_yield.yield_total"}
Number SOL_Yield_Day "Sol. day yield [%.2f kW/h]" <bar_chart> (Solar) { ebus="id:solar.solar_yield.yield_today"}
Number SOL_Yield_Current "Current output[%.2f kW]" <bar_chart> (Solar,SOL_Chart2) { ebus="id:solar.solar_yield.output_current"}
Number HU_Performance_Burner "Unit output [%s %%]" <bar_chart> (HeatingUnit) { ebus="id:boiler.level_modulation"}
Number HU_Performance_Pump "Pump output[%s %%]" <bar_chart> (HeatingUnit) { ebus="id:heating.modulation_pump"}
Number HU_No_Of_Firing "No. of Firing[%s]" <bar_chart> (HeatingUnit) { ebus="id:burner.starts"}
Number HU_Op_Hrs "Op. hours unit[%s h]" <bar_chart> (HeatingUnit) { ebus="id:boiler.runtime"}
Switch HU_Status_Alarm "Alarm [MAP(yesno_de.map):%s]" <siren> (HeatingUnit) { ebus="id:auto_stroker.state_alarm, src:03"}
Switch HU_Status_Fire "HU. flame [MAP(de.map):%s]" <gas2> (HeatingUnit,HU_Chart1) { ebus="id:auto_stroker.state_flame, src:03"}
Number HU_Status "HU. status [%s]" <settings> (HeatingUnit) { ebus="id:auto_stroker.status_auto_stroker, src:03"}
Number HU_Pressure_System "System pressue [%.2f bar]" <temperature> (HeatingUnit) { ebus="id:heating.pressure"}
Number HU_FW_Version "Version[%.2f]" <bar_chart> (HeatingUnit) { ebus="id:boiler.fw_version"}
Number HU_StatusReq1 "Status Request 1 [MAP(hu_status_request1_de.map):%s]" <temperature> (HeatingUnit) { ebus="id:controller.status_heat_req1"}
Number HU_StatusReq2 "Status Request 2 [MAP(hu_status_request2_de.map):%s]" <temperature> (HeatingUnit) { ebus="id:controller.status_heat_req2"}
Number HU_Program_HC "Program Heating Circuit [MAP(hu_heat_prog_de.map):%s]" <siren> (HeatingUnit) { ebus="id:heating.program_heating_circuit, refresh:10, set:heating.set_program_heating_circuit.program"}
Switch HU_Status_Pump "Pump [%s]" <__idea> (HeatingUnit,HU_Chart1) { ebus="id:auto_stroker.state_pump, src:03"}
```
### Special loggers for developers
These loggers normally only interesting for developers. This loggers can cause huge log files.
`org.openhab.binding.ebus.parser.EBusTelegramParser`
This is the standard logger for this binding
`org.openhab.binding.ebus.internal.parser.Analyses`
This is a special logger to show/analyse the received telegrams
`org.openhab.binding.ebus.internal.parser.BruteForce`
This is a special logger to show raw telegram data
## Custom Parser
You can add your own parser configuration by setting the property `ebus:parserUrl` in your `openhab.cfg` file. This is useful if you get new configuratiosn files that are not already included in this binding.
More information [here](https://github.com/csowada/openhab-bindings/wiki/eBUS-Parser-Config) (german language, use translator)
This is an automatic created list of all included configuration files.
* [common](https://github.com/openhab/openhab/blob/1.8/bundles/binding/org.openhab.binding.ebus/docs/json-files/common.md)
* [vaillant-bai00](https://github.com/openhab/openhab/blob/1.8/bundles/binding/org.openhab.binding.ebus/docs/json-files/vaillant-bai00.md)
* [vaillant-vr90](https://github.com/openhab/openhab/blob/1.8/bundles/binding/org.openhab.binding.ebus/docs/json-files/vaillant-vr90.md)
* [vaillant-vrc430](https://github.com/openhab/openhab/blob/1.8/bundles/binding/org.openhab.binding.ebus/docs/json-files/vaillant-vrc430.md)
* [vaillant-vrc470](https://github.com/openhab/openhab/blob/1.8/bundles/binding/org.openhab.binding.ebus/docs/json-files/vaillant-vrc470.md)
* [vaillant-vrc630](https://github.com/openhab/openhab/blob/1.8/bundles/binding/org.openhab.binding.ebus/docs/json-files/vaillant-vrc630.md)
* [wolf-cgb2](https://github.com/openhab/openhab/blob/1.8/bundles/binding/org.openhab.binding.ebus/docs/json-files/wolf-cgb2.md)
* [wolf-cgb2_hc](https://github.com/openhab/openhab/blob/1.8/bundles/binding/org.openhab.binding.ebus/docs/json-files/wolf-cgb2_hc.md)
* [wolf-sm1](https://github.com/openhab/openhab/blob/1.8/bundles/binding/org.openhab.binding.ebus/docs/json-files/wolf-sm1.md)
* [_testing](https://github.com/openhab/openhab/blob/1.8/bundles/binding/org.openhab.binding.ebus/docs/json-files/_testing.md)
* [_vaillant](https://github.com/openhab/openhab/blob/1.8/bundles/binding/org.openhab.binding.ebus/docs/json-files/_vaillant.md)
* [_vaillant-vrc470](https://github.com/openhab/openhab/blob/1.8/bundles/binding/org.openhab.binding.ebus/docs/json-files/_vaillant-vrc470.md)
* [_wolf-35](https://github.com/openhab/openhab/blob/1.8/bundles/binding/org.openhab.binding.ebus/docs/json-files/_wolf-35.md)
* [_wolf](https://github.com/openhab/openhab/blob/1.8/bundles/binding/org.openhab.binding.ebus/docs/json-files/_wolf.md)
* [_wolf-test](https://github.com/openhab/openhab/blob/1.8/bundles/binding/org.openhab.binding.ebus/docs/json-files/_wolf-test.md)

View File

@ -1,729 +0,0 @@
---
id: ecobee
label: Ecobee
title: Ecobee - Bindings
type: binding
description: "Ecobee Inc. of Toronto, Canada, sells a range of Wi-Fi enabled thermostats, principally in the Americas. The EMS, EMS Si, Smart, Smart Si and ecobee3 models are supported by this binding, which communicates with the [Ecobee API](https://www.ecobee.com/home/developer/api/documentation/v1/index.shtml) over a secure, RESTful API to Ecobee's servers. Monitoring ambient temperature and humidity, changing HVAC mode, changing heat or cool setpoints, changing the backlight intensity, and even sending textual messages to one or a group of thermostats, can be accomplished through this binding."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.ecobee/README.md
since: 1x
logo: images/addons/ecobee.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Ecobee Binding
Ecobee Inc. of Toronto, Canada, sells a range of Wi-Fi enabled thermostats, principally in the Americas. The EMS, EMS Si, Smart, Smart Si and ecobee3 models are supported by this binding, which communicates with the [Ecobee API](https://www.ecobee.com/home/developer/api/documentation/v1/index.shtml) over a secure, RESTful API to Ecobee's servers. Monitoring ambient temperature and humidity, changing HVAC mode, changing heat or cool setpoints, changing the backlight intensity, and even sending textual messages to one or a group of thermostats, can be accomplished through this binding.
## Table of Contents
<!-- MarkdownTOC depth=2 -->
- [Prerequisites](#prerequisites)
- [Binding Configuration](#binding-configuration)
- [Example ecobee.cfg](#example-ecobeecfg)
- [Multiple Connections](#multiple-connections)
- [Item Configuration](#item-configuration)
- [ecobee3 Remote Sensors](#ecobee3-remote-sensors)
- [Authorization](#authorization)
- [Troubleshooting Authorization](#troubleshooting-authorization)
- [Example Item Configurations](#example-item-configurations)
- [Examples](#examples)
- [Item Examples](#item-examples)
- [Basic configuration](#basic-configuration)
- [Tracking last occupancy](#tracking-last-occupancy)
- [MAP Transformations](#map-transformations)
- [Notes](#notes)
<!-- /MarkdownTOC -->
## Prerequisites
In order to use this binding, you must have already registered your thermostat(s) with Ecobee, registered a new app as a [developer](https://www.ecobee.com/developers/), and then login to your [web portal](https://www.ecobee.com/).
![app](https://watou.github.io/images/ecobee-pin.jpg)
## Binding Configuration
This binding can be configured in the file `services/ecobee.cfg`.
| Property | Default | Required | Description |
|----------|---------|:--------:|-------------|
| appkey | | Yes | You must generate your own `appkey` on the Ecobee developer dashboard (see [Prerequisites](#prerequesities)) |
| scope | | Yes | Typically, `scope` will be set to `smartWrite`, but if you have an EMS thermostat, set `scope` to `ems`. |
| refresh | 180000 | No | Data refresh interval in milliseconds |
| quickpoll | 6000 | No | Time in milliseconds to wait after successful update, command or action before refresh |
| timeout | 20000 | No | Time in milliseconds to allow an API request to complete |
| tempscale | F | No | temperature scale to use when sending or receiving temperatures. Can be `C` or `F` |
### Example ecobee.cfg
```
# the private API key issued be Ecobee to use the API (required, replace with your own)
#appkey=9T4huoUXlT5b5qNpEJvM5sqTMgaNCFoV
# the application scope used when authorizing the binding
# choices are smartWrite,smartRead, or ems, or multiple (required, comma-separated, no spaces)
#scope=smartWrite
# Rate at which to check if poll is to run, in ms (as of 1.8, optional, defaults to 5000)
#granularity=5000
# Data refresh interval in ms (optional, defaults to 180000)
#refresh=180000
# Time in ms to wait after successful update, command or action before refresh (as of 1.8, optional, defaults to 6000)
#quickpoll=6000
# Time in ms to allow an API request to complete (as of 1.8, optional, defaults to 20000)
#timeout=20000
# the temperature scale to use when sending or receiving temperatures
# optional, defaults to Fahrenheit (F)
#tempscale=C
```
### Multiple Connections
You can set up multiple, distinct API connections by repeating the `appkey` and `scope` settings with a prepended "user ID" that indicates a separate ecobee.com account will be used to complete authorization.
```
condo.appkey=T5vMsUXlpEsqT4huoJb5qN9TMgaNCFoV
condo.scope=smartRead
```
You would then include `condo.` in item references (see below) for those thermostats available from the "condo" account.
## Item Configuration
The syntax for the Ecobee binding configuration string is explained below.
Ecobee bindings start with a `<`, `>` or `=`, to indicate if the item receives values from the API (in binding), sends values to the API (out binding), or both (bidirectional binding), respectively.
The first character is then followed by a section between square brackets (`[` and `]` characters):
```
[<thermostat>#<property>]
```
Where `<thermostat>` is a decimal thermostat identifier for in (`<`), out (`>`) and bidirectional (`=`) bindings.
> *Where can I find my thermostat identifier?*
> A thermostat identifier is a long, decimal number. For ecobee3 users, one way to find the number is to login to your Ecobee portal and read the URL you were taken to in the browser's address bar: `https://www.ecobee.com/consumerportal/index.html#/thermostats/318973256526`
> The final component of the URL is your thermostat identifier.
> For non-ecobee3 users who are using the older web portal, you can go to the Home IQ&trade; tab and choose Download Data from the Report chart. The thermostat identifier can be found in the report.
For out (`>`) bindings only, `<thermostat>` can instead be selection criteria that specify which thermostats to change. You can use either a comma-separated list of thermostat identifiers (no spaces), or, for non-EMS thermostats only, a wildcard (the `*` character).
In the case of out bindings for EMS or Utility accounts, the `<thermostat>` criteria can be a path to a management set (for example, `/Toronto/Campus/BuildingA`). Please note that management set path elements that contain the `.` or `#` characters cannot be specified.
The `<thermostat>` specification can be optionally prepended with a specific "user ID" as specified in the binding configuration, as in `condo.123456789` when you have specified `condo.scope` and `condo.appkey` binding configuration properties.
`<property>` is one of a long list of thermostat properties than you can read and optionally change. See the list below, and peruse this binding's JavaDoc for all specifics as to their meanings.
Property | In | Out | Type
---------|----|-----|-----
name | X | X | StringType
runtime.actualTemperature | X | | DecimalType
runtime.actualHumidity | X | | DecimalType
settings.hvacMode | X | X | StringType
Please see a complete list [below](#examples).
### ecobee3 Remote Sensors
If you have an ecobee3 thermostat with remote, wireless temperature/occupancy sensors, the binding can read their values. Format:
```
ecobee="<[<thermostat_id>#remoteSensors(<sensor_name>).capability(<capability>).value]"
```
Supply the long, decimal thermostat ID as in other in-binding configurations. The binding configuration string uses the simple name you gave the remote sensor for `<sensor_name>`. The characters `(`,`)`,`[`,`]`, and `.` are not permitted in sensor names when used with the binding.
The ecobee3 sensors are known to report temperature or occupancy, and so you would specify either `temperature` or `occupancy` as the `<capability>` you wish to retrieve. `temperature` returns a `DecimalType` temperature in the binding's chosen temperature scale, and `occupancy` returns an `OnOffType` value as you would use in a switch or rule. If either value is unavailable for some reason, such as loss of connectivity, the binding returns an `UnDefType.NULL` value.
> Note that `occupancy` is computed (by Ecobee, not the binding) to mean presence within the last 30 minutes, not current occupancy.
```
Number KitchenTemp "Kitchen temperature [%.1f °F]" { ecobee="<[123456789#remoteSensors(Kitchen).capability(temperature).value]" }
Number BasementTemp "Basement temperature [%.1f °F]" { ecobee="<[123456789#remoteSensors(Basement).capability(temperature).value]" }
Switch BedroomOccu "Bedroom occupancy [%s]" { ecobee="<[123456789#remoteSensors(Bedroom).capability(occupancy).value]" }
```
See the Example Binding Strings section below for more examples.
## Authorization
After you have installed and configured the binding, added items to your `.items file` and started openHAB (if not previously started), when the binding performs its first poll, it will discover that is has not yet been authorized by the Ecobee servers, and will retrieve a four-character PIN from the Ecobee server. This PIN will appear prominently in your `openhab.log` file:
#########################################################################################
# Ecobee-Integration: U S E R I N T E R A C T I O N R E Q U I R E D !!
# 1. Login to www.ecobee.com using your 'DEFAULT_USER' account
# 2. Enter the PIN 'gxvg' in My Apps within the next 9 minutes.
# NOTE: Any API attempts will fail in the meantime.
#########################################################################################
When it does, enter it into your Apps settings in your account at ecobee.com. This will authorize your instance of the binding to work with your Ecobee account. On the next poll of the API, it will retrieve access and refresh tokens and continue.
### Troubleshooting Authorization
Setting the binding's logger `org.openhab.binding.ecobee` to DEBUG or TRACE level will help you diagnose any issues.
If you happen to miss the time window to register your PIN, the ecobee.com website will still accept the PIN but openHAB will be unable to get authorization. If this happens the following may help:
* Stop the openHAB server
* Delete the Java Preferences storage where the tokens are kept.
* On Linux, this is done by deleting the specific obfuscated directory name under ~/.java/.userPrefs. If you only have one garbled directory name there, you can just rm -rf ~/.java/.userPrefs (so as to not delete something else's storage).
* On Windows, the Java Preferences are kept in the Windows Registry,
* Restart the openHAB server
* Register a new PIN like above
## Example Item Configurations
Return or set the name of the thermostat whose ID is 123456789 using the default
Ecobee app instance (configured in [binding configuration](#binding-configuration)):
```
ecobee="=[123456789#name]"
```
Return the current temperature read by the thermostat using the condo account
at ecobee.com:
```
ecobee="<[condo.987654321#runtime.actualTemperature]"
```
Return or set the minimum number of minutes per hour the fan will run on thermostat ID
543212345:
```
ecobee="=[543212345#settings.fanMinOnTime]"
```
Change the HVAC mode to one of `auto`, `auxHeatOnly`, `cool`, `heat`, or
`off` on all thermostats registered in the default app instance:
```
ecobee=">[*#settings.hvacMode]"
```
Changes the backlight sleep intensity on all thermostats at the lake house
(meaning, all thermostats registered to the lakehouse Ecobee account):
```
ecobee=">[lakehouse.*#settings.backlightSleepIntensity]"
```
Determine if there was any occupancy in the condo's kitchen within the last 30 minutes:
```
ecobee="<[condo.987654321#remoteSensors(Kitchen).capability(occupancy).value]"
```
## Examples
### Item Examples
Here are some examples of valid item binding strings, as you would define in your `.items` file. Each item binding indicates if it is an in-only binding or bidirectional binding string in the examples below.
```
/* Ecobee binding items (replace 123456789012 with your thermostat ID) */
String identifier "identifier [%s]" { ecobee="<[123456789012#identifier]" }
String name "name [%s]" { ecobee="=[123456789012#name]" }
String thermostatRev "thermostatRev [%s]" { ecobee="<[123456789012#thermostatRev]" }
String isRegistered "isRegistered [%s]" { ecobee="<[123456789012#isRegistered]" }
String modelNumber "modelNumber [%s]" { ecobee="<[123456789012#modelNumber]" }
String brand "brand [%s]" { ecobee="<[123456789012#brand]" } // as of openHAB 1.8
String features "features [%s]" { ecobee="<[123456789012#features]" } // as of openHAB 1.8
DateTime lastModified "lastModified [%1$tm/%1$td/%1$tY %1$tH:%1$tM:%1$tS]" { ecobee="<[123456789012#lastModified]" }
DateTime thermostatTime "thermostatTime [%1$tm/%1$td/%1$tY %1$tH:%1$tM:%1$tS]" { ecobee="<[123456789012#thermostatTime]" }
DateTime utcTime "utcTime [%1$tm/%1$td/%1$tY %1$tH:%1$tM:%1$tS]" { ecobee="<[123456789012#utcTime]" }
String equipmentStatus "equipmentStatus [%s]" { ecobee="<[123456789012#equipmentStatus]" }
String version_thermostatFirmwareVersion "thermostatFirmwareVersion [%s]" { ecobee="<[123456789012#version.thermostatFirmwareVersion]" }
String program_currentClimateRef "currentClimateRef [%s]" { ecobee="<[123456789012#program.currentClimateRef]" }
Group All
Group gSettings (All)
String settings_hvacMode "hvacMode [%s]" (gSettings) { ecobee="=[123456789012#settings.hvacMode]" }
String settings_lastServiceDate "lastServiceDate [%s]" (gSettings) { ecobee="=[123456789012#settings.lastServiceDate]" }
Switch settings_serviceRemindMe "serviceRemindMe [%s]" (gSettings) { ecobee="=[123456789012#settings.serviceRemindMe]" }
Number settings_monthsBetweenService "monthsBetweenService [%d]" (gSettings) { ecobee="=[123456789012#settings.monthsBetweenService]" }
String settings_remindMeDate "remindMeDate [%s]" (gSettings) { ecobee="=[123456789012#settings.remindMeDate]" }
String settings_vent "vent [%s]" (gSettings) { ecobee="=[123456789012#settings.vent]" }
Number settings_ventilatorMinOnTime "ventilatorMinOnTime [%d]" (gSettings) { ecobee="=[123456789012#settings.ventilatorMinOnTime]" }
Switch settings_serviceRemindTechnician "serviceRemindTechnician [%s]" (gSettings) { ecobee="=[123456789012#settings.serviceRemindTechnician]" }
String settings_eiLocation "eiLocation [%s]" (gSettings) { ecobee="=[123456789012#settings.eiLocation]" }
Number settings_coldTempAlert "coldTempAlert [%.1f °F]" (gSettings) { ecobee="=[123456789012#settings.coldTempAlert]" }
Switch settings_coldTempAlertEnabled "coldTempAlertEnabled [%s]" (gSettings) { ecobee="=[123456789012#settings.coldTempAlertEnabled]" }
Number settings_hotTempAlert "hotTempAlert [%.1f °F]" (gSettings) { ecobee="=[123456789012#settings.hotTempAlert]" }
Switch settings_hotTempAlertEnabled "hotTempAlertEnabled [%s]" (gSettings) { ecobee="=[123456789012#settings.hotTempAlertEnabled]" }
Number settings_coolStages "coolStages [%d]" (gSettings) { ecobee="<[123456789012#settings.coolStages]" }
Number settings_heatStages "heatStages [%d]" (gSettings) { ecobee="<[123456789012#settings.heatStages]" }
Number settings_maxSetBack "maxSetBack [%.1f °F]" (gSettings) { ecobee="=[123456789012#settings.maxSetBack]" }
Number settings_maxSetForward "maxSetForward [%.1f °F]" (gSettings) { ecobee="=[123456789012#settings.maxSetForward]" }
Number settings_quickSaveSetBack "quickSaveSetBack [%.1f °F]" (gSettings) { ecobee="=[123456789012#settings.quickSaveSetBack]" }
Number settings_quickSaveSetForward "quickSaveSetForward [%.1f °F]" (gSettings) { ecobee="=[123456789012#settings.quickSaveSetForward]" }
Switch settings_hasHeatPump "hasHeatPump [%s]" (gSettings) { ecobee="<[123456789012#settings.hasHeatPump]" }
Switch settings_hasForcedAir "hasForcedAir [%s]" (gSettings) { ecobee="<[123456789012#settings.hasForcedAir]" }
Switch settings_hasBoiler "hasBoiler [%s]" (gSettings) { ecobee="<[123456789012#settings.hasBoiler]" }
Switch settings_hasHumidifier "hasHumidifier [%s]" (gSettings) { ecobee="<[123456789012#settings.hasHumidifier]" }
Switch settings_hasErv "hasErv [%s]" (gSettings) { ecobee="<[123456789012#settings.hasErv]" }
Switch settings_hasHrv "hasHrv [%s]" (gSettings) { ecobee="<[123456789012#settings.hasHrv]" }
Switch settings_condensationAvoid "condensationAvoid [%s]" (gSettings) { ecobee="=[123456789012#settings.condensationAvoid]" }
Switch settings_useCelsius "useCelsius [%s]" (gSettings) { ecobee="=[123456789012#settings.useCelsius]" }
Switch settings_useTimeFormat12 "useTimeFormat12 [%s]" (gSettings) { ecobee="=[123456789012#settings.useTimeFormat12]" }
String settings_locale "locale [%s]" (gSettings) { ecobee="=[123456789012#settings.locale]" }
String settings_humidity "humidity [%s]" (gSettings) { ecobee="=[123456789012#settings.humidity]" }
String settings_humidifierMode "humidifierMode [%s]" (gSettings) { ecobee="=[123456789012#settings.humidifierMode]" }
Number settings_backlightOnIntensity "backlightOnIntensity [%d]" (gSettings) { ecobee="=[123456789012#settings.backlightOnIntensity]" }
Number settings_backlightSleepIntensity "backlightSleepIntensity [%d]" (gSettings) { ecobee="=[123456789012#settings.backlightSleepIntensity]" }
Number settings_backlightOffTime "backlightOffTime [%d]" (gSettings) { ecobee="=[123456789012#settings.backlightOffTime]" }
Number settings_soundTickVolume "soundTickVolume [%d]" (gSettings) { ecobee="=[123456789012#settings.soundTickVolume]" }
Number settings_soundAlertVolume "soundAlertVolume [%d]" (gSettings) { ecobee="=[123456789012#settings.soundAlertVolume]" }
Number settings_compressorProtectionMinTime "compressorProtectionMinTime [%d]" (gSettings) { ecobee="=[123456789012#settings.compressorProtectionMinTime]" }
Number settings_compressorProtectionMinTemp "compressorProtectionMinTemp [%.1f °F]" (gSettings) { ecobee="=[123456789012#settings.compressorProtectionMinTemp]" }
Number settings_stage1HeatingDifferentialTemp "stage1HeatingDifferentialTemp [%.1f °F]" (gSettings) { ecobee="=[123456789012#settings.stage1HeatingDifferentialTemp]" }
Number settings_stage1CoolingDifferentialTemp "stage1CoolingDifferentialTemp [%.1f °F]" (gSettings) { ecobee="=[123456789012#settings.stage1CoolingDifferentialTemp]" }
Number settings_stage1HeatingDissipationTime "stage1HeatingDissipationTime [%d]" (gSettings) { ecobee="=[123456789012#settings.stage1HeatingDissipationTime]" }
Number settings_stage1CoolingDissipationTime "stage1CoolingDissipationTime [%d]" (gSettings) { ecobee="=[123456789012#settings.stage1CoolingDissipationTime]" }
Switch settings_heatPumpReversalOnCool "heatPumpReversalOnCool [%s]" (gSettings) { ecobee="=[123456789012#settings.heatPumpReversalOnCool]" }
Switch settings_fanControlRequired "fanControlRequired [%s]" (gSettings) { ecobee="=[123456789012#settings.fanControlRequired]" }
Number settings_fanMinOnTime "fanMinOnTime [%d]" (gSettings) { ecobee="=[123456789012#settings.fanMinOnTime]" }
Number settings_heatCoolMinDelta "heatCoolMinDelta [%.1f °F]" (gSettings) { ecobee="=[123456789012#settings.heatCoolMinDelta]" }
Number settings_tempCorrection "tempCorrection [%.1f °F]" (gSettings) { ecobee="=[123456789012#settings.tempCorrection]" }
String settings_holdAction "holdAction [%s]" (gSettings) { ecobee="=[123456789012#settings.holdAction]" }
Switch settings_heatPumpGroundWater "heatPumpGroundWater [%s]" (gSettings) { ecobee="<[123456789012#settings.heatPumpGroundWater]" }
Switch settings_hasElectric "hasElectric [%s]" (gSettings) { ecobee="<[123456789012#settings.hasElectric]" }
Switch settings_hasDehumidifier "hasDehumidifier [%s]" (gSettings) { ecobee="<[123456789012#settings.hasDehumidifier]" }
String settings_dehumidifierMode "dehumidifierMode [%s]" (gSettings) { ecobee="=[123456789012#settings.dehumidifierMode]" }
Number settings_dehumidifierLevel "dehumidifierLevel [%d]" (gSettings) { ecobee="=[123456789012#settings.dehumidifierLevel]" }
Switch settings_dehumidifyWithAC "dehumidifyWithAC [%s]" (gSettings) { ecobee="=[123456789012#settings.dehumidifyWithAC]" }
Number settings_dehumidifyOvercoolOffset "dehumidifyOvercoolOffset [%d]" (gSettings) { ecobee="=[123456789012#settings.dehumidifyOvercoolOffset]" }
Switch settings_autoHeatCoolFeatureEnabled "autoHeatCoolFeatureEnabled [%s]" (gSettings) { ecobee="=[123456789012#settings.autoHeatCoolFeatureEnabled]" }
Switch settings_wifiOfflineAlert "wifiOfflineAlert [%s]" (gSettings) { ecobee="=[123456789012#settings.wifiOfflineAlert]" }
Number settings_heatMinTemp "heatMinTemp [%.1f °F]" (gSettings) { ecobee="<[123456789012#settings.heatMinTemp]" }
Number settings_heatMaxTemp "heatMaxTemp [%.1f °F]" (gSettings) { ecobee="<[123456789012#settings.heatMaxTemp]" }
Number settings_coolMinTemp "coolMinTemp [%.1f °F]" (gSettings) { ecobee="<[123456789012#settings.coolMinTemp]" }
Number settings_coolMaxTemp "coolMaxTemp [%.1f °F]" (gSettings) { ecobee="<[123456789012#settings.coolMaxTemp]" }
Number settings_heatRangeHigh "heatRangeHigh [%.1f °F]" (gSettings) { ecobee="=[123456789012#settings.heatRangeHigh]" }
Number settings_heatRangeLow "heatRangeLow [%.1f °F]" (gSettings) { ecobee="=[123456789012#settings.heatRangeLow]" }
Number settings_coolRangeHigh "coolRangeHigh [%.1f °F]" (gSettings) { ecobee="=[123456789012#settings.coolRangeHigh]" }
Number settings_coolRangeLow "coolRangeLow [%.1f °F]" (gSettings) { ecobee="=[123456789012#settings.coolRangeLow]" }
String settings_userAccessCode "userAccessCode [%s]" (gSettings) { ecobee="=[123456789012#settings.userAccessCode]" }
Number settings_userAccessSetting "userAccessSetting [%d]" (gSettings) { ecobee="=[123456789012#settings.userAccessSetting]" }
Number settings_auxRuntimeAlert "auxRuntimeAlert [%.1f °F]" (gSettings) { ecobee="=[123456789012#settings.auxRuntimeAlert]" }
Number settings_auxOutdoorTempAlert "auxOutdoorTempAlert [%.1f °F]" (gSettings) { ecobee="=[123456789012#settings.auxOutdoorTempAlert]" }
Number settings_auxMaxOutdoorTemp "auxMaxOutdoorTemp [%.1f °F]" (gSettings) { ecobee="=[123456789012#settings.auxMaxOutdoorTemp]" }
Switch settings_auxRuntimeAlertNotify "auxRuntimeAlertNotify [%s]" (gSettings) { ecobee="=[123456789012#settings.auxRuntimeAlertNotify]" }
Switch settings_auxOutdoorTempAlertNotify "auxOutdoorTempAlertNotify [%s]" (gSettings) { ecobee="=[123456789012#settings.auxOutdoorTempAlertNotify]" }
Switch settings_auxRuntimeAlertNotifyTechnician "auxRuntimeAlertNotifyTechnician [%s]" (gSettings) { ecobee="=[123456789012#settings.auxRuntimeAlertNotifyTechnician]" }
Switch settings_auxOutdoorTempAlertNotifyTechnician "auxOutdoorTempAlertNotifyTechnician [%s]" (gSettings) { ecobee="=[123456789012#settings.auxOutdoorTempAlertNotifyTechnician]" }
Switch settings_disablePreHeating "disablePreHeating [%s]" (gSettings) { ecobee="=[123456789012#settings.disablePreHeating]" }
Switch settings_disablePreCooling "disablePreCooling [%s]" (gSettings) { ecobee="=[123456789012#settings.disablePreCooling]" }
Switch settings_installerCodeRequired "installerCodeRequired [%s]" (gSettings) { ecobee="=[123456789012#settings.installerCodeRequired]" }
String settings_drAccept "drAccept [%s]" (gSettings) { ecobee="=[123456789012#settings.drAccept]" }
Switch settings_isRentalProperty "isRentalProperty [%s]" (gSettings) { ecobee="=[123456789012#settings.isRentalProperty]" }
Switch settings_useZoneController "useZoneController [%s]" (gSettings) { ecobee="=[123456789012#settings.useZoneController]" }
Number settings_randomStartDelayCool "randomStartDelayCool [%d]" (gSettings) { ecobee="=[123456789012#settings.randomStartDelayCool]" }
Number settings_randomStartDelayHeat "randomStartDelayHeat [%d]" (gSettings) { ecobee="=[123456789012#settings.randomStartDelayHeat]" }
Number settings_humidityHighAlert "humidityHighAlert [%d]" (gSettings) { ecobee="=[123456789012#settings.humidityHighAlert]" }
Number settings_humidityLowAlert "humidityLowAlert [%d]" (gSettings) { ecobee="=[123456789012#settings.humidityLowAlert]" }
Switch settings_disableHeatPumpAlerts "disableHeatPumpAlerts [%s]" (gSettings) { ecobee="=[123456789012#settings.disableHeatPumpAlerts]" }
Switch settings_disableAlertsOnIdt "disableAlertsOnIdt [%s]" (gSettings) { ecobee="=[123456789012#settings.disableAlertsOnIdt]" }
Switch settings_humidityAlertNotify "humidityAlertNotify [%s]" (gSettings) { ecobee="=[123456789012#settings.humidityAlertNotify]" }
Switch settings_humidityAlertNotifyTechnician "humidityAlertNotifyTechnician [%s]" (gSettings) { ecobee="=[123456789012#settings.humidityAlertNotifyTechnician]" }
Switch settings_tempAlertNotify "tempAlertNotify [%s]" (gSettings) { ecobee="=[123456789012#settings.tempAlertNotify]" }
Switch settings_tempAlertNotifyTechnician "tempAlertNotifyTechnician [%s]" (gSettings) { ecobee="=[123456789012#settings.tempAlertNotifyTechnician]" }
Number settings_monthlyElectricityBillLimit "monthlyElectricityBillLimit [%d]" (gSettings) { ecobee="=[123456789012#settings.monthlyElectricityBillLimit]" }
Switch settings_enableElectricityBillAlert "enableElectricityBillAlert [%s]" (gSettings) { ecobee="=[123456789012#settings.enableElectricityBillAlert]" }
Switch settings_enableProjectedElectricityBillAlert "enableProjectedElectricityBillAlert [%s]" (gSettings) { ecobee="=[123456789012#settings.enableProjectedElectricityBillAlert]" }
Number settings_electricityBillingDayOfMonth "electricityBillingDayOfMonth [%d]" (gSettings) { ecobee="=[123456789012#settings.electricityBillingDayOfMonth]" }
Number settings_electricityBillCycleMonths "electricityBillCycleMonths [%d]" (gSettings) { ecobee="=[123456789012#settings.electricityBillCycleMonths]" }
Number settings_electricityBillStartMonth "electricityBillStartMonth [%d]" (gSettings) { ecobee="=[123456789012#settings.electricityBillStartMonth]" }
Number settings_ventilatorMinOnTimeHome "ventilatorMinOnTimeHome [%d]" (gSettings) { ecobee="=[123456789012#settings.ventilatorMinOnTimeHome]" }
Number settings_ventilatorMinOnTimeAway "ventilatorMinOnTimeAway [%d]" (gSettings) { ecobee="=[123456789012#settings.ventilatorMinOnTimeAway]" }
Switch settings_backlightOffDuringSleep "backlightOffDuringSleep [%s]" (gSettings) { ecobee="=[123456789012#settings.backlightOffDuringSleep]" }
Switch settings_autoAway "autoAway [%s]" (gSettings) { ecobee="<[123456789012#settings.autoAway]" }
Switch settings_smartCirculation "smartCirculation [%s]" (gSettings) { ecobee="=[123456789012#settings.smartCirculation]" }
Switch settings_followMeComfort "followMeComfort [%s]" (gSettings) { ecobee="=[123456789012#settings.followMeComfort]" }
String settings_ventilatorType "ventilatorType [%s]" (gSettings) { ecobee="<[123456789012#settings.ventilatorType]" }
Switch settings_isVentilatorTimerOn "isVentilatorTimerOn [%s]" (gSettings) { ecobee="=[123456789012#settings.isVentilatorTimerOn]" }
DateTime settings_ventilatorOffDateTime "ventilatorOffDateTime [%1$tm/%1$td/%1$tY %1$tH:%1$tM:%1$tS]" (gSettings) { ecobee="<[123456789012#settings.ventilatorOffDateTime]" }
Switch settings_hasUVFilter "hasUVFilter [%s]" (gSettings) { ecobee="=[123456789012#settings.hasUVFilter]" }
Switch settings_coolingLockout "coolingLockout [%s]" (gSettings) { ecobee="=[123456789012#settings.coolingLockout]" }
Switch settings_ventilatorFreeCooling "ventilatorFreeCooling [%s]" (gSettings) { ecobee="=[123456789012#settings.ventilatorFreeCooling]" }
Switch settings_dehumidifyWhenHeating "dehumidifyWhenHeating [%s]" (gSettings) { ecobee="=[123456789012#settings.dehumidifyWhenHeating]" }
String settings_groupRef "groupRef [%s]" (gSettings) { ecobee="=[123456789012#settings.groupRef]" }
String settings_groupName "groupName [%s]" (gSettings) { ecobee="=[123456789012#settings.groupName]" }
Number settings_groupSetting "groupSetting [%d]" (gSettings) { ecobee="=[123456789012#settings.groupSetting]" }
Group gRuntime (All)
String runtime_runtimeRev "runtimeRev [%s]" (gRuntime) { ecobee="<[123456789012#runtime.runtimeRev]" }
Switch runtime_connected "connected [%s]" (gRuntime) { ecobee="<[123456789012#runtime.connected]" }
DateTime runtime_firstConnected "firstConnected [%1$tm/%1$td/%1$tY %1$tH:%1$tM:%1$tS]" (gRuntime) { ecobee="<[123456789012#runtime.firstConnected]" }
DateTime runtime_connectDateTime "connectDateTime [%1$tm/%1$td/%1$tY %1$tH:%1$tM:%1$tS]" (gRuntime) { ecobee="<[123456789012#runtime.connectDateTime]" }
String runtime_disconnectDateTime "disconnectDateTime [%s]" (gRuntime) { ecobee="<[123456789012#runtime.disconnectDateTime]" }
DateTime runtime_lastModified "lastModified [%1$tm/%1$td/%1$tY %1$tH:%1$tM:%1$tS]" (gRuntime) { ecobee="<[123456789012#runtime.lastModified]" }
DateTime runtime_lastStatusModified "lastStatusModified [%1$tm/%1$td/%1$tY %1$tH:%1$tM:%1$tS]" (gRuntime) { ecobee="<[123456789012#runtime.lastStatusModified]" }
String runtime_runtimeDate "runtimeDate [%s]" (gRuntime) { ecobee="<[123456789012#runtime.runtimeDate]" }
Number runtime_runtimeInterval "runtimeInterval [%d]" (gRuntime) { ecobee="<[123456789012#runtime.runtimeInterval]" }
Number runtime_actualTemperature "actualTemperature [%.1f °F]" (gRuntime) { ecobee="<[123456789012#runtime.actualTemperature]" }
Number runtime_actualHumidity "actualHumidity [%d %%]" (gRuntime) { ecobee="<[123456789012#runtime.actualHumidity]" }
Number runtime_desiredHeat "desiredHeat [%.1f °F]" (gRuntime) { ecobee="<[123456789012#runtime.desiredHeat]" }
Number runtime_desiredCool "desiredCool [%.1f °F]" (gRuntime) { ecobee="<[123456789012#runtime.desiredCool]" }
Number runtime_desiredHumidity "desiredHumidity [%d %%]" (gRuntime) { ecobee="<[123456789012#runtime.desiredHumidity]" }
Number runtime_desiredDehumidity "desiredDehumidity [%d %%]" (gRuntime) { ecobee="<[123456789012#runtime.desiredDehumidity]" }
String runtime_desiredFanMode "desiredFanMode [%s]" (gRuntime) { ecobee="<[123456789012#runtime.desiredFanMode]" }
Group gLocation (All)
Number location_timeZoneOffsetMinutes "timeZoneOffsetMinutes [%d]" (gLocation) { ecobee="<[123456789012#location.timeZoneOffsetMinutes]" }
String location_timeZone "timeZone [%s]" (gLocation) { ecobee="=[123456789012#location.timeZone]" }
Switch location_isDaylightSaving "isDaylightSaving [%s]" (gLocation) { ecobee="=[123456789012#location.isDaylightSaving]" }
String location_streetAddress "streetAddress [%s]" (gLocation) { ecobee="=[123456789012#location.streetAddress]" }
String location_city "city [%s]" (gLocation) { ecobee="=[123456789012#location.city]" }
String location_provinceState "provinceState [%s]" (gLocation) { ecobee="=[123456789012#location.provinceState]" }
String location_country "country [%s]" (gLocation) { ecobee="=[123456789012#location.country]" }
String location_postalCode "postalCode [%s]" (gLocation) { ecobee="=[123456789012#location.postalCode]" }
String location_phoneNumber "phoneNumber [%s]" (gLocation) { ecobee="=[123456789012#location.phoneNumber]" }
String location_mapCoordinates "mapCoordinates [%s]" (gLocation) { ecobee="=[123456789012#location.mapCoordinates]" }
Group gWeather (All)
DateTime weather_timestamp "timestamp [%1$tm/%1$td/%1$tY %1$tH:%1$tM:%1$tS]" (gWeather) { ecobee="<[123456789012#weather.timestamp]" }
String weather_weatherStation "weatherStation [%s]" (gWeather) { ecobee="<[123456789012#weather.weatherStation]" }
Number weather_forecasts0_weatherSymbol "weatherSymbol [MAP(ecobeeWeatherSymbol.map):%d]" (gWeather) { ecobee="<[123456789012#weather.forecasts[0].weatherSymbol]" }
DateTime weather_forecasts0_dateTime "dateTime [%1$tm/%1$td/%1$tY %1$tH:%1$tM:%1$tS]" (gWeather) { ecobee="<[123456789012#weather.forecasts[0].dateTime]" }
String weather_forecasts0_condition "condition [%s]" (gWeather) { ecobee="<[123456789012#weather.forecasts[0].condition]" }
Number weather_forecasts0_temperature "temperature [%.1f °F]" (gWeather) { ecobee="<[123456789012#weather.forecasts[0].temperature]" }
Number weather_forecasts0_pressure "pressure [%d]" (gWeather) { ecobee="<[123456789012#weather.forecasts[0].pressure]" }
Number weather_forecasts0_relativeHumidity "relativeHumidity [%d %%]" (gWeather) { ecobee="<[123456789012#weather.forecasts[0].relativeHumidity]" }
Number weather_forecasts0_dewpoint "dewpoint [%d]" (gWeather) { ecobee="<[123456789012#weather.forecasts[0].dewpoint]" }
Number weather_forecasts0_visibility "visibility [%d meters]" (gWeather) { ecobee="<[123456789012#weather.forecasts[0].visibility]" }
Number weather_forecasts0_windSpeed "windSpeed [%d]" (gWeather) { ecobee="<[123456789012#weather.forecasts[0].windSpeed]" }
Number weather_forecasts0_windGust "windGust [%d]" (gWeather) { ecobee="<[123456789012#weather.forecasts[0].windGust]" }
String weather_forecasts0_windDirection "windDirection [%s]" (gWeather) { ecobee="<[123456789012#weather.forecasts[0].windDirection]" }
Number weather_forecasts0_windBearing "windBearing [%d]" (gWeather) { ecobee="<[123456789012#weather.forecasts[0].windBearing]" }
Number weather_forecasts0_pop "pop [%d %%]" (gWeather) { ecobee="<[123456789012#weather.forecasts[0].pop]" }
Number weather_forecasts0_tempHigh "tempHigh [%.1f °F]" (gWeather) { ecobee="<[123456789012#weather.forecasts[0].tempHigh]" }
Number weather_forecasts0_tempLow "tempLow [%.1f °F]" (gWeather) { ecobee="<[123456789012#weather.forecasts[0].tempLow]" }
Number weather_forecasts0_sky "sky [MAP(ecobeeSky.map):%d]" (gWeather) { ecobee="<[123456789012#weather.forecasts[0].sky]" }
Group gHouseDetails (All)
String houseDetails_style "style [%s]" (gHouseDetails) { ecobee="=[123456789012#houseDetails.style]" }
Number houseDetails_size "size [%d]" (gHouseDetails) { ecobee="=[123456789012#houseDetails.size]" }
Number houseDetails_numberOfFloors "numberOfFloors [%d]" (gHouseDetails) { ecobee="=[123456789012#houseDetails.numberOfFloors]" }
Number houseDetails_numberOfRooms "numberOfRooms [%d]" (gHouseDetails) { ecobee="=[123456789012#houseDetails.numberOfRooms]" }
Number houseDetails_numberOfOccupants "numberOfOccupants [%d]" (gHouseDetails) { ecobee="=[123456789012#houseDetails.numberOfOccupants]" }
Number houseDetails_age "age [%d]" (gHouseDetails) { ecobee="=[123456789012#houseDetails.age]" }
/* If you have remote sensors named Kitchen and Bedroom connected to an ecobee3 with ID 123456789012 */
Group gRemoteSensors (All)
Number remoteSensors_Kitchen_capability_temperature "Kitchen temp. [%.1f °F]" (gRemoteSensors) { ecobee="<[123456789012#remoteSensors(Kitchen).capability(temperature).value]" }
Switch remoteSensors_Bedroom_capability_occupancy "Bedroom occu. [%s]" (gRemoteSensors) { ecobee="<[123456789012#remoteSensors(Bedroom).capability(occupancy).value]" }
Group gEvents (All)
String firstEvent_type "First event type [%s]" (gEvents) { ecobee="<[123456789012#events[0].type]" }
String firstEvent_name "First event name [%s]" (gEvents) { ecobee="<[123456789012#events[0].name]" }
String firstEvent_climate "First event climate [%s]" (gEvents) { ecobee="<[123456789012#events[0].holdClimateRef]" }
/* runningEvent.* is first event marked running, available as of openHAB 1.8 */
String runningEvent_type "Running event type [%s]" (gEvents) { ecobee="<[123456789012#runningEvent.type]" }
String runningEvent_name "Running event name [%s]" (gEvents) { ecobee="<[123456789012#runningEvent.name]" }
String runningEvent_climate "Running event climate [%s]" (gEvents) { ecobee="<[123456789012#runningEvent.holdClimateRef]" }
```
### Basic configuration
The following items, sitemap and rules files show the actual temperature and humidity, the thermostat's current mode and scheduled comfort setting reference. You can set a hold for a defined comfort setting (like sleep, away, home, custom ones as well), or resume the scheduled program from all holds. If the thermostat is in "heat" or "cool" modes, a single temperature setpoint is given to adjust the desired temperature. If the thermostat is in "auto" mode, two temperature setpoints are given to adjust both the heat and cool setpoints.
The sitemap will also show sensor values for an ecobee3's remote sensors in the dining room, bedroom and living room.
#### ecobee.items
```
DateTime lastModified "last mod [%1$tH:%1$tM:%1$tS]" { ecobee="<[123456789012#lastModified]" }
Number actualTemperature "actual temp [%.1f °F]" { ecobee="<[123456789012#runtime.actualTemperature]" }
Number actualHumidity "actual hum [%d %%]" { ecobee="<[123456789012#runtime.actualHumidity]" }
String hvacMode "hvac mode [%s]" { ecobee="=[123456789012#settings.hvacMode]" }
String currentClimateRef "sched comf [%s]" { ecobee="<[123456789012#program.currentClimateRef]" }
String desiredComf "desired comf" { ecobee="<[123456789012#runningEvent.holdClimateRef]", autoupdate="false" }
Number desiredTemp "desired temp [%.1f °F]"
Number desiredHeat "desired heat [%.1f °F]" { ecobee="<[123456789012#runtime.desiredHeat]" }
Number desiredCool "desired cool [%.1f °F]" { ecobee="<[123456789012#runtime.desiredCool]" }
String desiredFan "desired fan mode [%s]" { ecobee="<[123456789012#runtime.desiredFanMode]" }
// Address the ecobee3 unit itself as a sensor, unlike remote sensors it also supports humidity:
Number diningRoomTemperature "dining rm temp [%.1f °F]" { ecobee="<[123456789012#remoteSensors(Dining Room).capability(temperature).value]" }
Number diningRoomHumidity "dining rm hum [%d %%]" { ecobee="<[123456789012#remoteSensors(Dining Room).capability(humidity).value]" }
Switch diningRoomOccupancy "dining rm occ [%s]" { ecobee="<[123456789012#remoteSensors(Dining Room).capability(occupancy).value]" }
Number bedroomTemperature "bedroom temp [%.1f °F]" { ecobee="<[123456789012#remoteSensors(Bedroom).capability(temperature).value]" }
Switch bedroomOccupancy "bedroom occ [%s]" { ecobee="<[123456789012#remoteSensors(Bedroom).capability(occupancy).value]" }
Number livingRoomTemperature "living rm temp [%.1f °F]" { ecobee="<[123456789012#remoteSensors(Living Room).capability(temperature).value]" }
Switch livingRoomOccupancy "living rm occ [%s]" { ecobee="<[123456789012#remoteSensors(Living Room).capability(occupancy).value]" }
```
#### ecobee.sitemap
```
sitemap ecobee label="Ecobee"
{
Frame label="Thermostat" {
Text item=lastModified
Text item=actualTemperature
Text item=actualHumidity
Switch item=hvacMode label="HVAC Mode" mappings=[heat=Heat,cool=Cool,auto=Auto,off=Off]
Text item=currentClimateRef
Switch item=desiredComf mappings=[sleep=Sleep,wakeup=Wake,home=Home,away=Away,smart6=Gym,resume=Resume]
Setpoint item=desiredTemp label="Temp [%.1f °F]" minValue=50 maxValue=80 step=1 visibility=[hvacMode==heat,hvacMode==cool]
Setpoint item=desiredHeat label="Heat [%.1f °F]" minValue=50 maxValue=80 step=1 visibility=[hvacMode==auto]
Setpoint item=desiredCool label="Cool [%.1f °F]" minValue=50 maxValue=80 step=1 visibility=[hvacMode==auto]
Switch item=desiredFan mappings=[on=On,auto=Auto] // for rule supported in 1.9
}
Frame label="Dining Room Sensors" {
Text item=diningRoomTemperature
Text item=diningRoomHumidity
Text item=diningRoomOccupancy
}
Frame label="Bedroom Sensors" {
Text item=bedroomTemperature
Text item=bedroomOccupancy
}
Frame label="Living Room Sensors" {
Text item=livingRoomTemperature
Text item=livingRoomOccupancy
}
}
```
#### ecobee.rules
```
rule "Populate desiredTemp from desiredHeat"
when
Item desiredHeat received update
then
if (hvacMode.state.toString == "heat" && desiredHeat.state instanceof DecimalType) {
desiredTemp.postUpdate(desiredHeat.state)
}
end
rule "Populate desiredTemp from desiredCool"
when
Item desiredCool received update
then
if (hvacMode.state.toString == "cool" && desiredCool.state instanceof DecimalType) {
desiredTemp.postUpdate(desiredCool.state)
}
end
rule TempHold
when
Item desiredTemp received command
then
switch hvacMode.state.toString {
case "heat" : desiredHeat.sendCommand(receivedCommand)
case "cool" : desiredCool.sendCommand(receivedCommand)
case "auto" : logWarn("TempHold", "in auto mode, single setpoint ignored")
case "off" : logWarn("TempHold", "in off mode, single setpoint ignored")
}
end
rule HeatHold
when
Item desiredHeat received command
then
logInfo("HeatHold", "Setting heat setpoint to " + receivedCommand.toString)
val DecimalType desiredHeatTemp = receivedCommand as DecimalType
var DecimalType desiredCoolTemp
if (desiredCool.state instanceof DecimalType) {
desiredCoolTemp = desiredCool.state as DecimalType
} else {
desiredCoolTemp = new DecimalType(90)
}
ecobeeSetHold("123456789012", desiredCoolTemp, desiredHeatTemp, null, null, null, null, null)
end
rule CoolHold
when
Item desiredCool received command
then
logInfo("CoolHold", "Setting cool setpoint to " + receivedCommand.toString)
val DecimalType desiredCoolTemp = receivedCommand as DecimalType
var DecimalType desiredHeatTemp
if (desiredHeat.state instanceof DecimalType) {
desiredHeatTemp = desiredHeat.state as DecimalType
} else {
desiredHeatTemp = new DecimalType(50)
}
ecobeeSetHold("123456789012", desiredCoolTemp, desiredHeatTemp, null, null, null, null, null)
end
rule FanHold
when
Item desiredFan received command
then
logInfo("FanHold", "Setting fan hold to " + receivedCommand.toString)
val params = newLinkedHashMap(
'isTemperatureAbsolute'-> false,
'isTemperatureRelative' -> false,
'isCoolOff' -> true,
'isHeatOff' -> true,
'coolHoldTemp' -> 90,
'heatHoldTemp' -> 50,
'fan' -> receivedCommand.toString)
ecobeeSetHold("123456789012", params, null, null, null, null)
end
rule ComfortHold
when
Item desiredComf received command
then
if (receivedCommand.toString.equals("resume")) {
ecobeeResumeProgram("123456789012", true)
} else {
ecobeeSetHold("123456789012", null, null, receivedCommand.toString, null, null, null, null)
}
end
```
### Tracking last occupancy
The ecobee3 thermostat can connect to a number of wireless remote sensors that measure occupancy and temperature. The thermostat normally uses these to implement its "follow-me comfort" feature, where the thermostat is constantly adjusting its idea of the current ambient temperature based on an average of the temperatures of rooms that are currently occupied.
The binding can individually address each remote sensor's temperature and occupancy state. The occupancy state is ON when there has been motion within its range in the last 30 minutes. The rules below could be used to update a `DateTime` item to show the last time movement was sensed around any of the sensors in your home.
Items:
```
Switch EcobeeMBROccu "Ecobee MBR Occu [%s]" { ecobee="<[123456789012#remoteSensors(Bedroom).capability(occupancy).value]" }
Switch EcobeeKitchenOccu "Ecobee Kitchen Occu [%s]" { ecobee="<[123456789012#remoteSensors(Kitchen).capability(occupancy).value]" }
Switch EcobeeDROccu "Ecobee DR Occu [%s]" { ecobee="<[123456789012#remoteSensors(Dining Room).capability(occupancy).value]" }
DateTime LastOccuTime "Last Occu [%1$tm/%1$td %1$tH:%1$tM]"
```
Rules:
```
rule LastMotionON
when
Item EcobeeMBROccu changed to ON or
Item EcobeeKitchenOccu changed to ON or
Item EcobeeDROccu changed to ON
then
postUpdate(LastOccuTime, new DateTimeType())
end
rule LastMotionOFF
when
Item EcobeeMBROccu changed to OFF or
Item EcobeeKitchenOccu changed to OFF or
Item EcobeeDROccu changed to OFF
then
switch LastOccuTime.state {
DateTimeType: {
var DateTime halfHourAgo = now.minusMinutes(30)
var DateTime lastKnownMotion = new DateTime((LastOccuTime.state as DateTimeType).calendar.timeInMillis)
if (halfHourAgo.isAfter(lastKnownMotion)) {
LastOccuTime.postUpdate(new DateTimeType(halfHourAgo.toString))
}
}
}
end
```
### MAP Transformations
The mapping of [weather symbol numbers](https://www.ecobee.com/home/developer/api/documentation/v1/objects/WeatherForecast.shtml) to their meanings can be specified if you place the following in the file `transform/ecobeeWeatherSymbol.map`:
```
-2=no_symbol
0=sunny
1=few_clouds
2=partly_cloudy
3=mostly_cloudy
4=overcast
5=drizzle
6=rain
7=freezing_rain
8=showers
9=hail
10=snow
11=flurries
12=freezing_snow
13=blizzard
14=pellets
15=thunderstorm
16=windy
17=tornado
18=fog
19=haze
20=smoke
21=dust
-=unknown
```
The mapping of the [sky numbers](https://www.ecobee.com/home/developer/api/documentation/v1/objects/WeatherForecast.shtml) to their meanings can be specified if you place the following in the file `transform/ecobeeSky.map`:
```
1=SUNNY
2=CLEAR
3=MOSTLY SUNNY
4=MOSTLY CLEAR
5=HAZY SUNSHINE
6=HAZE
7=PASSING CLOUDS
8=MORE SUN THAN CLOUDS
9=SCATTERED CLOUDS
10=PARTLY CLOUDY
11=A MIXTURE OF SUN AND CLOUDS
12=HIGH LEVEL CLOUDS
13=MORE CLOUDS THAN SUN
14=PARTLY SUNNY
15=BROKEN CLOUDS
16=MOSTLY CLOUDY
17=CLOUDY
18=OVERCAST
19=LOW CLOUDS
20=LIGHT FOG
21=FOG
22=DENSE FOG
23=ICE FOG
24=SANDSTORM
25=DUSTSTORM
26=INCREASING CLOUDINESS
27=DECREASING CLOUDINESS
28=CLEARING SKIES
29=BREAKS OF SUN LATE
30=EARLY FOG FOLLOWED BY SUNNY SKIES
31=AFTERNOON CLOUDS
32=MORNING CLOUDS
33=SMOKE
34=LOW LEVEL HAZE
-=UNKNOWN
```
## Notes
1. Ecobee thermostats normally run based on a weekly schedule, but you can override the current program by setting a hold that controls the cool setpoint, the heat setpoint, and other options. You can set a hold from a rule by calling the action `ecobeeSetHold`. One of the parameters is a reference to a "climate" (also known as a comfort setting). The default references for climates are `sleep`, `home`, and `away` (some models also have `wakeup`).

View File

@ -1,328 +0,0 @@
---
id: ecotouch
label: EcoTouch
title: EcoTouch - Bindings
type: binding
description: "The openHAB EcoTouch binding allows interaction with a heat pump."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.ecotouch/README.md
since: 1x
logo: images/addons/ecotouch.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# EcoTouch Binding
The openHAB EcoTouch binding allows interaction with a heat pump.
## Prerequisites
Make sure the display unit of the heat pump is connected to the network and
that the network settings are configured. By default, the heat pump uses DHCP.
## Binding Configuration
The binding can be configured in the file `services/ecotouch.cfg`.
| Property | Default | Required | Description |
|----------|------------|:--------:|-------------|
| ip | | Yes | ip or DNS name of the heat pump |
| username | waterkotte | No | username for login |
| password | waterkotte | No | password for login |
NOTE: Since Waterkotte Display software version 1.6.xx, the username/password
default value is `waterkotte`. Prior to that, the username default was `admin`
and the password default was `wtkadmin`.
## Item Configuration
The binding configuration format is simple and looks like this:
ecotouch="<eventType>"
where `<eventType>` is one of the following values:
| Description | `<eventType>` | ItemClass | Write | Notes |
| ----------- | ------------- | --------- | ----- | ----- |
| Außentemperatur | temperature_outside | number | |
| Außentemperatur gemittelt über 1h | temperature_outside_1h | number | |
| Außentemperatur gemittelt über 24h | temperature_outside_24h | number | |
| Quelleneintrittstemperatur | temperature_source_in | number | | Ai1 Geo only |
| Quellenaustrittstemperatur | temperature_source_out | number | | Ai1 Geo only |
| Umgebungstemperatur | temperature_surrounding | number | | Ai1 Air only |
| Verdampfungstemperatur | temperature_evaporation | number | |
| Sauggastemperatur | temperature_suction | number | | Ai1 Geo only |
| Sauggas | temperature_suction_air | number | | Ai1 Air only |
| Ölsumpf | temperature_sump | number | | Ai1 Air only |
| Verdampfungsdruck | pressure_evaporation | number | |
| Temperatur Rücklauf Soll | temperature_return_set | number | |
| Temperatur Rücklauf | temperature_return | number | |
| Temperatur Vorlauf | temperature_flow | number | |
| Kondensationstemperatur | temperature_condensation | number | |
| Kondensationsdruck | pressure_condensation | number | |
| Speichertemperatur | temperature_storage | number | |
| Raumtemperatur | temperature_room | number | |
| Raumtemperatur gemittelt über 1h | temperature_room_1h | number | |
| Warmwassertemperatur | temperature_water | number | |
| Pooltemperatur | temperature_pool | number | |
| Solarkollektortemperatur | temperature_solar | number | |
| Solarkreis Vorlauf | temperature_solar_flow | number | |
| Ventilöffnung elektrisches Expansionsventil % | position_expansion_valve | number | |
| elektrische Leistung Verdichter | power_compressor | number | |
| abgegebene thermische Heizleistung der Wärmepumpe | power_heating | number | |
| abgegebene thermische KälteLeistung der Wärmepumpe | power_cooling | number | |
| COP Heizleistung | cop_heating | number | |
| COP Kälteleistung | cop_cooling | number | |
| Aktuelle Heizkreistemperatur | temperature_heating_return | number | |
| Geforderte Temperatur im Heizbetrieb | temperature_heating_set | number | |
| Sollwertvorgabe Heizkreistemperatur | temperature_heating_set2 | number | yes |
| Aktuelle Kühlkreistemperatur | temperature_cooling_return | number | |
| Geforderte Temperatur im Kühlbetrieb | temperature_cooling_set | number | |
| Sollwertvorgabe Kühlbetrieb | temperature_cooling_set2 | number | yes |
| Sollwert Warmwassertemperatur | temperature_water_set | number | |
| Sollwertvorgabe Warmwassertemperatur | temperature_water_set2 | number | yes |
| Sollwert Poolwassertemperatur | temperature_pool_set | number | |
| Sollwertvorgabe Poolwassertemperatur | temperature_pool_set2 | number | yes |
| geforderte Verdichterleistung | compressor_power | number | |
| % Heizungsumwälzpumpe | percent_heat_circ_pump | number | |
| % Quellenpumpe | percent_source_pump | number | |
| % Leistung Verdichter | percent_compressor | number | |
| Heizkurve - Norm-Aussen-Temp (Auslegungstemp)| nviNormAussen | number | yes |
| Heizkurve - Temp Heizkreis bei Auslegungstemp | nviHeizkreisNorm | number | yes |
| Heizkurve - Temp Heizgrenze | nviTHeizgrenze | number | yes |
| Heizkurve - Temp Heizkreis Heizgrenze | nviTHeizgrenzeSoll | number | yes |
| Heizkurve - max. VL-Temp | maxVLTemp | number | yes |
| Kühlen Einschalt-Aussentemp | coolEnableTemp | number | yes |
| geforderte Kühltemperatur | nviSollKuehlen | number | |
| Firmware-Version Regler | version_controller | number | |
| Build-Nr. Regler | version_controller_build | number | |
| Bios-Version Regler | version_bios | number | |
| Datum: Tag | date_day | number | |
| Datum: Monat | date_month | number | |
| Datum: Jahr | date_year | number | |
| Uhrzeit: Stunde | time_hour | number | |
| Uhrzeit: Minute | time_minute | number | |
| Betriebsstunden Verdichter 1 | operating_hours_compressor1 | number | |
| Betriebsstunden Verdichter 2 | operating_hours_compressor2 | number | |
| Betriebsstunden Heizungsumwälzpumpe | operating_hours_circulation_pump | number | |
| Betriebsstunden Quellenpumpe | operating_hours_source_pump | number | |
| Betriebsstunden Solarkreis | operating_hours_solar | number | |
| Handabschaltung Heizbetrieb | enable_heating | switch | yes |
| Handabschaltung Kühlbetrieb | enable_cooling | switch | yes |
| Handabschaltung Warmwasserbetrieb | enable_warmwater | switch | yes |
| Handabschaltung Pool_Heizbetrieb | enable_pool | switch | yes |
| Status der Wärmepumpenkomponenten | state | number | | State as a number, see below for possible mapping. |
| Status Quellenpumpe | state_sourcepump | switch | |
| Status Heizungsumwälzpumpe | state_heatingpump | switch | |
| Status Freigabe Regelung EDV / Magnetventil | state_evd | switch | |
| Status Verdichter 1 | state_compressor1 | switch | |
| Status Verdichter 2 | state_compressor2 | switch | |
| Status externer Wärmeerzeuger | state_extheater | switch | |
| Status Alarmausgang | state_alarm | switch | |
| Status Motorventil Kühlbetrieb | state_cooling | switch | |
| Status Motorventil Warmwasser | state_water | switch | |
| Status Motorventil Pool | state_pool | switch | |
| Status Solarbetrieb | state_solar | switch | |
| Status 4-Wege-Ventil | state_cooling4way | switch | |
| Temperaturanpassung für die Heizung -2,0 / +2,0 | adapt_heating | number | yes | -2 bis +2 (0,5)---> 0 bis 8
| Handschaltung Heizungspumpe | manual_heatingpump | | yes | (H-0-A) H= manuell ein (Handschaltung), 0= aus, A= Automatik
| Handschaltung Quellenpumpe | manual_sourcepump | | yes | (H-0-A)
| Handschaltung Solarpumpe 1 | manual_solarpump1 | | yes | (H-0-A)
| Handschaltung Solarpumpe 2 | manual_solarpump2 | | yes | (H-0-A)
| Handschaltung Speicherladepumpe | manual_tankpump | | yes | (H-0-A)
| Handschaltung Brauchwasserventil | manual_valve | | yes | (H-0-A)
| Handschaltung Poolventil | manual_poolvalve | | yes | (H-0-A)
| Handschaltung Kühlventil | manual_coolvalve | | yes | (H-0-A)
| Handschaltung Vierwegeventil | manual_4wayvalve | | yes | (H-0-A)
| Handschaltung Multiausgang Ext. | manual_multiext | | yes | (H-0-A)
### Mappings
Heatpump event type "state" can be mapped to strings. Different heatpump models seem to have slightly different state values.
Mappings for the Ai1 Geo have been copied from [here](http://www.haustechnikdialog.de/Forum/t/173357/Waterkotte-via-Ethernet-OpenHAB-und-Android-App?page=6).
| State | Ai1 Geo | Ai1 Air |
| ----- | ----- | ----- |
| 0 | aus | aus |
| 1 | nur Solepumpe 1 | |
| 2 | nur Heizkreispumpe 2 | Standby |
| 3 | unbekannt | |
| 7 | unbekannt | |
| 10 | | Heizbetrieb |
| 15 | Heizbetrieb | |
| 131 | Naturkühlung | |
| 256 | Vorlauf Warmwasser | Vorlauf Warmwasser |
| 258 | Nachlauf Warmwasser | Nachlauf Warmwasser |
| 259 | unbekannt 259 vor WW Bereitung | |
| 263 | unbekannt 263 vor WW Bereitung | |
| 266 | | Warmwasserbereitung |
| 271 | Warmwasserbereitung | |
## Examples
### Items examples
/* Waterkotte EcoTouch heat pump DEMO */
Group Heatpump
Group Heatpump_outside
Group Heatpump_source
Group Heatpump_control
Group Heatpump_water
Group Heatpump_heating
Group Heatpump_power
Group Heatpump_state
Number Chart_Period "Chart Period"
Number HeatPump_Temperature_3 "Wärmepumpe Außentemperatur [%.1f °C]" <temperature> (Heatpump,Heatpump_outside) { ecotouch="temperature_outside" }
Number HeatPump_Temperature_4 "Wärmepumpe Außentemperatur 1h [%.1f °C]" <temperature> (Heatpump,Heatpump_outside) { ecotouch="temperature_outside_1h" }
Number HeatPump_Temperature_5 "Wärmepumpe Außentemperatur 24h [%.1f °C]" <temperature> (Heatpump,Heatpump_outside) { ecotouch="temperature_outside_24h" }
Number HeatPump_Temperature_6 "Wärmepumpe Quelleneintrittstemperatur [%.1f °C]" <temperature> (Heatpump,Heatpump_source) { ecotouch="temperature_source_in" }
Number HeatPump_Temperature_7 "Wärmepumpe Quellenaustrittstemperatur [%.1f °C]" <temperature> (Heatpump,Heatpump_source) { ecotouch="temperature_source_out" }
Number HeatPump_Temperature_8 "Wärmepumpe Vorlauf [%.1f °C]" <temperature> (Heatpump,Heatpump_control) { ecotouch="temperature_flow" }
Number HeatPump_Temperature_9 "Wärmepumpe Rücklauf [%.1f °C]" <temperature> (Heatpump,Heatpump_control) { ecotouch="temperature_return" }
Number HeatPump_Temperature_10 "Wärmepumpe Rücklauf Soll [%.1f °C]" <temperature> (Heatpump,Heatpump_control) { ecotouch="temperature_return_set" }
Number HeatPump_Temperature_11 "Wärmepumpe Warmwasser Ist [%.1f °C]" <temperature> (Heatpump,Heatpump_water) { ecotouch="temperature_water" }
Number HeatPump_Temperature_12 "Wärmepumpe Warmwasser Soll [%.1f °C]" <temperature> (Heatpump,Heatpump_water) { ecotouch="temperature_water_set" }
Number HeatPump_Temperature_13 "Wärmepumpe Warmwasser Soll2 [%.1f °C]" <temperature> (Heatpump,Heatpump_water) { ecotouch="temperature_water_set2" }
Number HeatPump_Temperature_14 "Wärmepumpe Heizung Ist [%.1f °C]" <temperature> (Heatpump,Heatpump_heating) { ecotouch="temperature_heating_return" }
Number HeatPump_Temperature_15 "Wärmepumpe Heizung Soll [%.1f °C]" <temperature> (Heatpump,Heatpump_heating) { ecotouch="temperature_heating_set" }
Number HeatPump_Temperature_16 "Wärmepumpe Heizung Soll2 [%.1f °C]" <temperature> (Heatpump,Heatpump_heating) { ecotouch="temperature_heating_set2" }
Number HeatPump_power_1 "Wärmepumpe elektrische Leistung [%.1f kW]" <energy> (Heatpump,Heatpump_power) { ecotouch="power_compressor" }
Number HeatPump_power_2 "Wärmepumpe thermische Leistung [%.1f kW]" <energy> (Heatpump,Heatpump_power) { ecotouch="power_heating" }
Number HeatPump_state "Wärmepumpe Status [%i]" <settings> (Heatpump) { ecotouch="state" }
Number HeatPump_state_sourcepump "Wärmepumpe Status Quellenpumpe [%i]" <settings> (Heatpump,Heatpump_state) { ecotouch="state_sourcepump" }
Number HeatPump_state_heatingpump "Wärmepumpe Status Heizungsumwälzpumpe [%i]" <settings> (Heatpump,Heatpump_state) { ecotouch="state_heatingpump" }
Number HeatPump_state_compressor1 "Wärmepumpe Status Kompressor [%i]" <settings> (Heatpump,Heatpump_state) { ecotouch="state_compressor1" }
Number HeatPump_state_water "Wärmepumpe Status Motorventil Warmwasser[%i]" <settings> (Heatpump,Heatpump_state) { ecotouch="state_water" }
### Sitemap examples
Frame label="Waterkotte" {
Text item=HeatPump_Temperature_3 {
Frame {
Switch item=Chart_Period label="Chart Period" mappings=[0="Hour", 1="Day", 2="Week"]
Chart item=Heatpump_outside period=h refresh=60000 visibility=[Chart_Period==0, Chart_Period=="Uninitialized"]
Chart item=Heatpump_outside period=D refresh=60000 visibility=[Chart_Period==1]
Chart item=Heatpump_outside period=W refresh=60000 visibility=[Chart_Period==2]
}
}
Text item=HeatPump_Temperature_6 {
Frame {
Switch item=Chart_Period label="Chart Period" mappings=[0="Hour", 1="Day", 2="Week"]
Chart item=Heatpump_source period=h refresh=60000 visibility=[Chart_Period==0, Chart_Period=="Uninitialized"]
Chart item=Heatpump_source period=D refresh=60000 visibility=[Chart_Period==1]
Chart item=Heatpump_source period=W refresh=60000 visibility=[Chart_Period==2]
}
}
Text item=HeatPump_Temperature_7 {
Frame {
Switch item=Chart_Period label="Chart Period" mappings=[0="Hour", 1="Day", 2="Week"]
Chart item=Heatpump_source period=h refresh=60000 visibility=[Chart_Period==0, Chart_Period=="Uninitialized"]
Chart item=Heatpump_source period=D refresh=60000 visibility=[Chart_Period==1]
Chart item=Heatpump_source period=W refresh=60000 visibility=[Chart_Period==2]
}
}
Text item=HeatPump_Temperature_8 {
Frame {
Switch item=Chart_Period label="Chart Period" mappings=[0="Hour", 1="Day", 2="Week"]
Chart item=Heatpump_control period=h refresh=60000 visibility=[Chart_Period==0, Chart_Period=="Uninitialized"]
Chart item=Heatpump_control period=D refresh=60000 visibility=[Chart_Period==1]
Chart item=Heatpump_control period=W refresh=60000 visibility=[Chart_Period==2]
}
}
Text item=HeatPump_Temperature_9 {
Frame {
Switch item=Chart_Period label="Chart Period" mappings=[0="Hour", 1="Day", 2="Week"]
Chart item=Heatpump_control period=h refresh=60000 visibility=[Chart_Period==0, Chart_Period=="Uninitialized"]
Chart item=Heatpump_control period=D refresh=60000 visibility=[Chart_Period==1]
Chart item=Heatpump_control period=W refresh=60000 visibility=[Chart_Period==2]
}
}
Text item=HeatPump_Temperature_10 {
Frame {
Switch item=Chart_Period label="Chart Period" mappings=[0="Hour", 1="Day", 2="Week"]
Chart item=Heatpump_control period=h refresh=60000 visibility=[Chart_Period==0, Chart_Period=="Uninitialized"]
Chart item=Heatpump_control period=D refresh=60000 visibility=[Chart_Period==1]
Chart item=Heatpump_control period=W refresh=60000 visibility=[Chart_Period==2]
}
}
Text item=HeatPump_Temperature_11 {
Frame {
Switch item=Chart_Period label="Chart Period" mappings=[0="Hour", 1="Day", 2="Week"]
Chart item=Heatpump_water period=h refresh=60000 visibility=[Chart_Period==0, Chart_Period=="Uninitialized"]
Chart item=Heatpump_water period=D refresh=60000 visibility=[Chart_Period==1]
Chart item=Heatpump_water period=W refresh=60000 visibility=[Chart_Period==2]
}
}
Text item=HeatPump_Temperature_12 {
Frame {
Switch item=Chart_Period label="Chart Period" mappings=[0="Hour", 1="Day", 2="Week"]
Chart item=Heatpump_water period=h refresh=60000 visibility=[Chart_Period==0, Chart_Period=="Uninitialized"]
Chart item=Heatpump_water period=D refresh=60000 visibility=[Chart_Period==1]
Chart item=Heatpump_water period=W refresh=60000 visibility=[Chart_Period==2]
}
}
Text item=HeatPump_Temperature_13 {
Frame {
Switch item=Chart_Period label="Chart Period" mappings=[0="Hour", 1="Day", 2="Week"]
Chart item=Heatpump_water period=h refresh=60000 visibility=[Chart_Period==0, Chart_Period=="Uninitialized"]
Chart item=Heatpump_water period=D refresh=60000 visibility=[Chart_Period==1]
Chart item=Heatpump_water period=W refresh=60000 visibility=[Chart_Period==2]
}
}
Text item=HeatPump_Temperature_14 {
Frame {
Switch item=Chart_Period label="Chart Period" mappings=[0="Hour", 1="Day", 2="Week"]
Chart item=Heatpump_heating period=h refresh=60000 visibility=[Chart_Period==0, Chart_Period=="Uninitialized"]
Chart item=Heatpump_heating period=D refresh=60000 visibility=[Chart_Period==1]
Chart item=Heatpump_heating period=W refresh=60000 visibility=[Chart_Period==2]
}
}
Text item=HeatPump_Temperature_15 {
Frame {
Switch item=Chart_Period label="Chart Period" mappings=[0="Hour", 1="Day", 2="Week"]
Chart item=Heatpump_heating period=h refresh=60000 visibility=[Chart_Period==0, Chart_Period=="Uninitialized"]
Chart item=Heatpump_heating period=D refresh=60000 visibility=[Chart_Period==1]
Chart item=Heatpump_heating period=W refresh=60000 visibility=[Chart_Period==2]
}
}
Text item=HeatPump_Temperature_16 {
Frame {
Switch item=Chart_Period label="Chart Period" mappings=[0="Hour", 1="Day", 2="Week"]
Chart item=Heatpump_heating period=h refresh=60000 visibility=[Chart_Period==0, Chart_Period=="Uninitialized"]
Chart item=Heatpump_heating period=D refresh=60000 visibility=[Chart_Period==1]
Chart item=Heatpump_heating period=W refresh=60000 visibility=[Chart_Period==2]
}
}
Text item=HeatPump_power_1 {
Frame {
Switch item=Chart_Period label="Chart Period" mappings=[0="Hour", 1="Day", 2="Week"]
Chart item=Heatpump_power period=h refresh=60000 visibility=[Chart_Period==0, Chart_Period=="Uninitialized"]
Chart item=Heatpump_power period=D refresh=60000 visibility=[Chart_Period==1]
Chart item=Heatpump_power period=W refresh=60000 visibility=[Chart_Period==2]
}
}
Text item=HeatPump_power_2 {
Frame {
Switch item=Chart_Period label="Chart Period" mappings=[0="Hour", 1="Day", 2="Week"]
Chart item=Heatpump_power period=h refresh=60000 visibility=[Chart_Period==0, Chart_Period=="Uninitialized"]
Chart item=Heatpump_power period=D refresh=60000 visibility=[Chart_Period==1]
Chart item=Heatpump_power period=W refresh=60000 visibility=[Chart_Period==2]
}
}
}
### Gallery
The following charts are created via the rrd4j chart and heatpump bundle.
![outside temperature](https://github.com/sibbi77/openhab/wiki/images/binding-ecotouch_chart1.png)
![power consumption](https://github.com/sibbi77/openhab/wiki/images/binding-ecotouch_chart2.png)

View File

@ -1,188 +0,0 @@
---
id: ekey
label: ekey
title: ekey - Bindings
type: binding
description: "[ekey](http://ekey.net/) is an Austrian company that provides biometric access-control solutions, more precisely fingerprint readers and corresponding controllers. This binding extends the functionality of the products [ekey home](http://ekey.net/ekey-home-en) and [ekey multi](http://ekey.net/ekey-multi-en)."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.ekey/README.md
since: 1x
logo: images/addons/ekey.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# ekey Binding
[ekey](http://ekey.net/) is an Austrian company that provides biometric access-control solutions, more precisely fingerprint readers and corresponding controllers. This binding extends the functionality of the products [ekey home](http://ekey.net/ekey-home-en) and [ekey multi](http://ekey.net/ekey-multi-en).
To use this binding, one needs to have either the _home_ or the _multi_ solution of ekey. Note that the _multi_ version provides much more functionality than the _home_ version.
Additionally the _ekey UDP converter_ is needed. This module provides an interface by converting the internal RS485 signals to Ethernet. Connecting this to the local network enables ekey to communicate to the ekey binding.
![example](http://ekey.net/media/W/720/bilder/automatisierung/example_E.jpg)
The ekey binding translates information that comes from the ekey controller and makes it usable to openHAB. Usually ekey sends packets with information on each user input. This might be every time a person pulls their finger over the terminal or if a digital input occurs.
The information consists at least of these types:
**userID** - the index of the detected user that is stored on the controller
**fingerID** - the finger that the person used
**terminalID** - the serial number of the fingerprint reader that was used
**action** - this tells whether the user was recognized successfully and access was granted or access was denied
The amount of information depends on whether _ekey home_ or _ekey multi_ is used and which protocol is used by the converter. But the previously mentioned 4 are supported in any case.
The converter knows up to three different protocols. The _RARE_ protocol that is enabled by default, the _HOME_ protocol which is very similar to the _RARE_ and finally the _MULTI_ protocol which is fairly powerful compared to the other ones. The binding uses the term "mode" instead of "protocol".
The type of protocol that is used by the converter can be changed with a small tool (unfortunately Windows only). This tool is called _ConfigConverterUDP_ and can be downloaded from the [ekey website](http://www.ekey.net/downloads-en/cat/Software).
### Available Types of Information
**Action** This indicates whether access was granted (Value: 0) or denied (Value: -1). According to the ekey documentation there are six more values possible as you can see in the .map file below. (Item Type Number, Modes: R/H/M)
**Finger ID** This indicates the finger that was used by a person. The value consists of 2 digits. The first one specifies the hand (left hand: 1, right hand: 2) and the second digit specifies the finger from left to right. To get a feeling see the .map file below. (Item Type Number, Modes: R/H/M)
**Input ID** This indicates which of the four digital inputs was triggered. Value is number of Input. "-1" tells that no input was triggered. (Item Type Number, Modes: M)
**Key ID** This indicates which of the four keys was used. See ekey documentation on "keys". (Item Type Number, Modes: M)
**Mode** This simply returns the mode that was used 1=RARE, 2=MULTI, 3=HOME (Item Type Number, Modes: R/H/M)
**Relay ID** This indicates which relay has been switched. (Item Type Number, Modes: R/H)
**Terminal ID** This provides the serial number of the packet source. The source can be a fingerprint terminal or the controller (in case of digital inputs). The Serial number has a length of 13. When using RARE mode, only the tailing 8 digits can be returned.(Item Type Number, Modes: R/H/M)
**Terminal name** This returns the 4 characters long name that was specified on the controller for the specific terminals. (Item Type String, Modes: M)
**User ID** This indicates which user has been detected on the terminal. The value is the numerical order of the user as it was specified on the controller. Mapping the numbers to names make sense. (Item Type Number, Modes: R/H/M)
**Username** This returns the ten characters long name of the person that has been recognized on the terminal. The name that is returned must have been specified on the controller before. (Item Type String, Modes: M)
**User status** This indicates the status of the user: -1 = undefined, 1 = enabled, 0 = disabled (Item Number, Modes: M)
As you can see, in many cases it makes sense to map the number values to some more meaningful strings.
See the mapping examples on the bottom.
## Binding Configuration
This binding can be configured in the file `services/ekey.cfg`.
| Property | Default | Required | Description |
|----------|---------|:--------:|-------------|
| ip | | No | IPv4 address of the eKey udp converter. A static IP address is recommended. |
| port | | Yes | port as you configured during the UDP Converter configuration. For example, 51000 |
| mode | RARE | No | can be RARE, MULTI or HOME depending on what your system supports |
| delimiter | ` ` (space) | No | the delimiter is also defined on the eKey UDP converter - use the eKey configuration software to determine which delimiter is used or to change it. Another option is `_` (underscore) |
## Items Configuration
This is quite simple. It depends on the type of information someone is interested in.
The syntax is:
```
ekey="<interestname>"
```
Where `<interestname>` is one of the following:
* action
* username
* userid
* userstatus
* terminalid
* terminalname
* fingerid
* keyid
* inputid
* mode
* relay
## Full Example
Here is an example that demonstrates a simple rule that feeds the openHAB TTS-engine and welcomes the user when he or she enters the house.
items/ekey.items
```
Number UserID "Last user that accessed the house was [MAP(ekey_names.map):%d]" { ekey="userid" }
Number FingerID "User used finger [MAP(ekey_finger.map):%d]" { ekey="fingerid" }
Number TerminalID "Last used terminal [MAP(ekey_terminal.map):%d]" { ekey="terminalid" }
Number Action "Last action [MAP(ekey_action.map):%d]" { ekey="action" }
```
rules/ekey.rules
```
rule Welcome
when
Item Action received update
then
if (Action.state==-1)
say("unauthorized access!")
else {
var String name = transform("MAP","ekey_names.map",UserID.state.toString())
var String finger = transform("MAP","ekey_finger.map",FingerID.state.toString())
var String terminal = transform("MAP","ekey_terminal.map",TerminalID.state.toString())
var String text = name + " put his " + finger + " finger over the " + terminal + " terminal. Hello "+name
say(text)
}
end
```
transform/ekey_finger.map
```
11=leftlittle
12=leftring
13=leftmiddle
14=leftindex
15=leftthumb
21=rightthumb
22=rightindex
23=rightmiddle
24=rightring
25=rightlittle
30=unspecified
```
transform/ekey_names.map
```
-1=Unspecified
1=John Doe
2=Jane Doe
```
transform/ekey_terminal.map
```
80156839130911=frontdoor
80156839130914=backdoor
```
transform/ekey_action.map
```
0=granted
-1=rejected
1=timeoutA
2=timeoutB
3=inactive
4=alwaysuser
5=notcoupled
6=digitalinput
```
## Further Examples
* eKey binding demo config (may be specific to openHAB 1.x)(http://pastebin.com/fjXkFbiq)

View File

@ -1,55 +0,0 @@
---
id: energenie
label: Energenie
title: Energenie - Bindings
type: binding
description: "The openHAB Energenie binding allows you to send commands to multiple Gembird energenie PMS-LAN power extenders."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.energenie/README.md
since: 1x
logo: images/addons/energenie.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Energenie Binding
The openHAB Energenie binding allows you to send commands to multiple Gembird energenie PMS-LAN power extenders.
## Binding Configuration
This binding can be configured in the file `services/energenie.cfg`.
| Property | Default | Required | Description |
|----------|---------|:--------:|-------------|
| `<pmsId1>`.host | | Yes | IP address of the first PMS-LAN to control |
| `<pmsId1>`.password | 1 | No | Password to login to the first PMS-LAN |
| `<pmsId2>`.host | | Yes | Host of the second PMS-LAN to control |
| `<pmsId2>`.password | | No | Password to login to the second PMS-LAN |
### Example
```
pms1.host=192.168.1.100
bridge1.password=1
```
## Item Configuration
The syntax of the configuration strings accepted is the following:
```
energenie="<deviceId>;<socketID>"
```
The `<deviceId>` corresponds to the PMS-LAN which is defined in the configuration.
The `<socketID>` corresponds to the number of the socket you want to control (1-4).
Examples, how to configure your items in your items file:
```
Switch Light_OfficeDesk {energenie="pms1;1"}
```

View File

@ -1,157 +0,0 @@
---
id: enocean
label: EnOcean
title: EnOcean - Bindings
type: binding
description: "[EnOcean](https://www.enocean.com/en/) provides reliable and self-powered wireless sensor solutions for the Internet of Things. This binding allows openHAB to monitor and control EnOcean devices through the EnOcean USB 300 gateway."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.enocean/README.md
since: 1x
logo: images/addons/enocean.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# EnOcean Binding
[EnOcean](https://www.enocean.com/en/) provides reliable and self-powered wireless sensor solutions for the Internet of Things. This binding allows openHAB to monitor and control EnOcean devices through the EnOcean USB 300 gateway.
[![EnOcean Binding](http://img.youtube.com/vi/GpERJflmJKQ/0.jpg)](http://www.youtube.com/watch?v=GpERJflmJKQ)
## Prerequisites
* USB 300 stick to control EnOcean devices. It is the only supported controller for now, and part of the EnOcean Development Kit (EDK).
* See [Supported Devices](#supported-devices) for curently supported EnOcean Equipment Profiles ([EEPs](http://www.enocean-alliance.org/eep/)).
* If you see errors in your log containing `java.lang.UnsatisfiedLinkError`, [this discussion](https://groups.google.com/forum/#!topic/openhab/SVcstuqC8H8) might be helpful.
## Binding Configuration
This binding can be configured in the file `services/enocean.cfg`.
| Property | Default | Required | Description |
|----------|---------|:--------:|-------------|
| serialPort | | Yes | serial port (can be a virtual one) where the EnOcean transceiver is connected to. A USB adapter creates a virtual serial port (often it's `/dev/ttyUSB0` under Linux) |
## Item Configuration
General format:
```
enocean="{id=<id_of_enocean_device> [, eep = <EEP_name>][, channel = <channel>][, parameter = <parameter>]}"
```
where:
* sections in `[brackets]` are optional
* `<id_of_enocean_device>` is printed on the device package
* `<EEP_name>`, is (when needed) the EEP (e.g. "F6.02.01") that is also printed on the device package. In openHAB, the three profile elements of the EEP are separated by colons `:` (e.g. "F6:02:01").
* `<channel>` is specific to the supported devices (see below)
* `<parameter>` is specific to the supported devices (see below)
## Supported Devices
The EEP Profiles below are already supported. If your device is not listed, please add an issue for it [here](https://github.com/openhab/openhab1-addons/issues).
### Rocker Switches
- eep = F6:02:01 - Light and Blind Control - Application Style 1
- eep = F6:02:02
- channel = A / B
- parameter =
- I: The I button (normally the bottom one with the solid arrow sign) was pressed (Switch, pressed=Update to ON, released=Update to OFF)
- O: The O button (normally the top one with the empty arrow sign) was pressed (Switch, pressed=Update to ON, released=Update to OFF)
Be aware that the parameters are still under discussion and can be subject to change.
#### Examples
```
Switch Button01top "Switch left top" <wallswitch> { enocean="{id=00:00:00:00, eep=F6:02:01, channel=A, parameter=O}" }
Switch Button01bottom "Switch left bottom" <wallswitch> { enocean="{id=00:00:00:00, eep=F6:02:01, channel=A, parameter=I}" }
Switch Button02top "Switch right top" <wallswitch> { enocean="{id=00:00:00:00, eep=F6:02:01, channel=B, parameter=O}" }
Switch Button02bottom "Switch right bottom" <wallswitch> { enocean="{id=00:00:00:00, eep=F6:02:01, channel=B, parameter=I}" }
```
- pressed: ON
- released: OFF
EnOcean (roller shutter-) actors are not supported yet (27. November 2013). EnOcean switch to control not EnOcean actors:
##### To control a roller shutter
```
Rollershutter myShutters { enocean="{id=00:00:00:00, eep=F6:02:01}" }
```
- Short press down: Close roller shutter or stop it when it was started shortly ago
- Short press up: Open roller shutter or stop it when it was started shortly ago
- Long press down: Close roller shutter as long as the button is pressed
- Long press up: Open roller shutter as long as the button is pressed
##### To control a dimmer (left buttons = channel A):
```
Dimmer myLights { enocean="{id=00:00:00:00, channel=A, eep=F6:02:01}" }
```
- Short press down: Switch light ON
- Short press up: Switch light OFF
- Long press down: Dim light UP as long as the button is pressed (INCREASE every 300ms)
- Long press up: Dim light DOWN as long as the button is pressed (DECREASE every 300ms)
##### To us as a normal Switch (supported with 1.4.0):
```
Switch mySwitch { enocean="{id=00:00:00:00, channel=A, eep=F6:02:01}" }
```
- Press down: Switch udated to ON
- Press up: Switch updated to OFF
### Environment Sensors
- eep = A5:02:05 - Temperature Range from 0° to 40°
- channel = none
- parameter =
- TEMPERATURE: The current temperature (Number, unit=°C)
#### Examples
```
Number UG_Flur_Temp "Temperature [%.1f °C]" <temperature> { enocean="{id=00:00:00:00, eep=A5:02:05, parameter=TEMPERATURE}" }
```
### Contact Sensors
- eep = D5:00:01 - Single Input Contact
- channel = none
- parameter =
- CONTACT_STATE: Contact Open / Closed (OpenClosedType)
#### Examples
```
Contact mySwitch "Test Switch" <contact> { enocean="{id=00:00:00:00, eep=D5:00:01, parameter=CONTACT_STATE}" }
```
### sitemap example
```
sitemap enocean label="Enocean"
{
Frame label="Rocker Switch" {
Switch item=Button01top
Switch item=Button01bottom
Switch item=Button02top
Switch item=Button02bottom
}
Frame label="Contact" {
Text item=mySwitch
}
}
```

View File

@ -1,59 +0,0 @@
---
id: enphaseenergy
label: Enphase Energy
title: Enphase Energy - Bindings
type: binding
description: "This binding is for people with [Enphase Energy](http://enphase.com) microinverters used in their solar installation, which means every solar panel has its own inverter and can be monitored individually."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.enphaseenergy/README.md
since: 1x
logo: images/addons/enphaseenergy.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Enphase Energy Binding
This binding is for people with [Enphase Energy](http://enphase.com) microinverters used in their solar installation, which means every solar panel has its own inverter and can be monitored individually.
## Perequisites
Your installer should have provided your with an [Enlight Manager Account](https://enlighten.enphaseenergy.com). Test that this account is working first and visit [https://enlighten.enphaseenergy.com/support](https://enlighten.enphaseenergy.com/support) to find out your Site ID (also called System ID). This is typically a small integer number, like 12345. It points to a specific installation location, you could potentially have more than one, if you have several homes.
* Create a [developer account](https://developer.enphase.com/). The free "WATT" plan is fine, as it allows 10 hits per minute and up to 10,000 per month. It doesn't make sense to poll the system more often that every 15 minutes, because the data is not updated more frequently anyway. The "WATT" plan requires Enphase attribution, which you could do within openHAB.
* Create an [application](https://developer.enphase.com/admin/applications) on the developer website.
* Open the "Authorization URL" from the application in a web browser to receive a user id. The "user id" can always be seen under the account on the [enphase energy website](https://enlighten.enphaseenergy.com/account)
* Copy the [API Key for the Application](https://developer.enphase.com/admin/applications) and the user id from the Authorization URL to use in the next section.
## Binding Configuration
This binding must be configured in the file `services/enphaseenergy.cfg`.
| Property | Default | Required | Description |
|----------|---------|:--------:|-------------|
| key | | Yes | The API Key for the application you created earlier. |
| user_id | | Yes | Your user ID |
| refresh | 900000 | No | How often to poll the API. Default of 900000 is 15 minutes |
## Item Configuration
Example items:
```
DateTime Enphase_last_report_at "Solar Last Report at [%1$tD %tr]" (Solar) { enphaseenergy="12345#last_report_at"}
Number Enphase_Current_Power "Solar Latest Power [%.0f W]" (Solar) { enphaseenergy="12345#current_power"}
Number Enphase_Energy_Today "Solar Energy Today [%.2f kWh]" (Solar) { enphaseenergy="12345#energy_today"}
Number Enphase_Energy_Lifetime "Solar Energy Lifetime [%.1f MWh]" (Solar) { enphaseenergy="12345#energy_lifetime"}
String Enphase_Status "Solar Status [%s]" (Solar) { enphaseenergy="12345#status"}
Number Enphase_Modules "Solar Number of Modules [%d]" (Solar) { enphaseenergy="12345#modules"}
Number Enphase_size_w "Solar System Size [%d W]" (Solar) { enphaseenergy="12345#size_w"}
String Enphase_source "Solar Data Source [%s]" (Solar) { enphaseenergy="12345#source"}
DateTime Enphase_summary_date "Solar Summary Date [%1$tD]" (Solar) { enphaseenergy="12345#summary_date"}
DateTime Enphase_operational_at "Solar Operational at [%1$tD]" (Solar) { enphaseenergy="12345#operational_at"}
```

View File

@ -1,162 +0,0 @@
---
id: epsonprojector
label: Epson Projector
title: Epson Projector - Bindings
type: binding
description: "This binding should be compatible with Epson projectors which support ESC/VP21 protocol over serial port."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.epsonprojector/README.md
since: 1x
logo: images/addons/epsonprojector.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Epson Projector Binding
This binding should be compatible with Epson projectors which support ESC/VP21 protocol over serial port.
## Binding Configuration
This binding can be configured in the file `services/epsonprojector.cfg`.
| Property | Default | Required | Description |
|----------|---------|:--------:|-------------|
| `<device-id>`.serialPort | | Yes | serial port device name that is connected to the Epson projector to control, e.g. `COM1` on Windows, `/dev/ttyS0` on Linux or `/dev/tty.PL2303-0000103D` on Mac |
where `<device-id>` is a name you choose (like `hometheater`), and this configuration property can be repeated with different names to control more than one Epson projector.
Examples:
```
hometheater.serialPort=/dev/tty.usbserial
office.serialPort=/dev/ttyS0
```
## Item Configuration
The syntax is:
```
epsonprojector="<direction><device-id>:<device-command>[:<update-interval>]"
```
where:
* `<direction>` is one of the following values:
* `<` - for inbound communication
* `>` - for outbound communication
* `*` - for either inbound or outbound communication, e.g bi-directional
* `<device-id>` corresponds device which is introduced in the binding configuration
* `<device-command>` corresponds to the Epson projector command. See complete list below.
* `<update-interval>` is optional, and corresponds to the update interval of the item. Update interval is only supported by the inbound and bi-directional items. For some of the commands, the projector will only respond when projector is running. This situation can be handled with special interval, where interval is started with "ON," prefix.
Examples, how to configure your items:
```
Switch Power { epsonprojector="hometheater:Power:60000" }
String Source { epsonprojector="hometheater:Source:ON,60000" }
Number LampTime { epsonprojector="<hometheater:LampTime:60000" }
```
### List of supported commands
| Command | Item Type | Purpose | Note |
| ------------- | ------------------- | -------- | ----- |
| Power | Switch | | |
| PowerState | String | | |
| LampTime | Number | | |
| KeyCode | Number | | |
| VerticalKeystone | Number | | |
| HorizontalKeystone | Number | | |
| AutoKeystone | Number | | |
| AspectRatio | String | | |
| Luminance | String | | |
| Source | String | | |
| DirectSource | Number | | |
| Brightness | Number | | |
| Contrast | Number | | |
| Density | Number | | |
| Tint | Number | | |
| Sharpness | Number | | |
| ColorTemperature | Number | | |
| FleshTemperature | Number | | |
| ColorMode | String | | |
| HorizontalPosition | Number | | |
| VerticalPosition | Number | | |
| Tracking | Number | | |
| Sync | Number | | |
| OffsetRed | Number | | |
| OffsetGreen | Number | | |
| OffsetBlue | Number | | |
| GainRed | Number | | |
| GainGreen | Number | | |
| GainBlue | Number | | |
| Gamma | String | | |
| GammaStep | Number | | |
| Color | String | | |
| Mute | Switch | | |
| HorizontalReverse | Switch | | |
| VerticalReverse | Switch | | |
| Background | String | | |
| ErrCode | Number | | |
| ErrMessage | String | | |
### References
* [ESC/VP21 Command Users Guide for HomeProjectors](http://files.support.epson.com/pdf/pltw1_/pltw1_cm.pdf)
* [ESC/VP21 Command Users Guide](ftp://download.epson-europe.com/pub/download/3756/epson375633eu.xlsx)
## Full Example
items/epson.items
```
Switch epsonPower { epsonprojector="hometheater:Power:60000" }
String epsonSource "Source [%s]" { epsonprojector="hometheater:Source:ON,60000" }
Number epsonDirectSource "Direct Source" { epsonprojector="hometheater:DirectSource:ON,60000"}
Switch epsonMute { epsonprojector="hometheater:Mute:ON,60000" }
Switch epsonHorizontalReverse { epsonprojector="hometheater:HorizontalReverse:ON,60000" }
Switch epsonVerticalReverse { epsonprojector="hometheater:VerticalReverse:ON,60000" }
String epsonAspectRatio "AspectRatio [%s]" { epsonprojector="hometheater:AspectRatio:ON,60000" }
String epsonColorMode "ColorMode [%s]" { epsonprojector="hometheater:ColorMode:ON,60000" }
Number epsonColorTemperature "Color Temperature [%d]" <colorwheel> { epsonprojector="<hometheater:ColorTemperature:ON,60000" }
Number epsonLampTime "Lamp Time [%d h]" <switch> { epsonprojector="<hometheater:LampTime:60000" }
Number epsonErrCode "ErrCode [%d]" <"siren-on"> { epsonprojector="<hometheater:ErrCode:ON,60000" }
String epsonErrMessage "ErrMessage [%s]" <"siren-off"> { epsonprojector="<hometheater:ErrMessage:ON,60000" }
```
sitemaps/epson.sitemap
```
sitemap epson label="Epson Projector Demo"
{
Frame label="Controls" {
Switch item=epsonPower label="Power"
Text item=epsonSource
Selection item=epsonDirectSource label="DirectSource" mappings=[20="COMPONENT", 32="PC", 48=HDMI1, 160=HDMI2, 65=VIDEO, 66=SVIDEO]
Switch item=epsonMute label="Mute"
}
Frame label="Flip Projection" {
Switch item=epsonHorizontalReverse label="Horizontal Reverse"
Switch item=epsonVerticalReverse label="Vertical Reverse"
}
Frame label="Info" {
Text item=epsonAspectRatio
Text item=epsonColorMode
Text item=epsonColorTemperature
Text item=epsonLampTime
Text item=epsonErrCode
Text item=epsonErrMessage
}
}
```

View File

@ -1,170 +0,0 @@
---
id: exec
label: Exec
title: Exec - Bindings
type: binding
description: "This binding integrates the possibility to execute arbitrary shell commands."
since: 2x
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Exec Binding
This binding integrates the possibility to execute arbitrary shell commands.
## Supported Things
Currently, the binding supports a single type of Thing, being the `command` Thing.
## Binding Configuration
The binding does not require any specific configuration.
**Linux:**
Note that the commands are executed in the context and with the privileges of the process running the Java Virtual Machine.
On a Linux system the system user `openhab` needs to have the privileges needed to execute your intended command.
It is advised to test the correct operation of the command in the scope of the `openhab` user on the command line first:
```shell
sudo -u openhab <YOUR COMMAND>
```
It is not advised to run the virtual machine as superuser/root.
## Thing Configuration
.
The "command" Thing requires the command to execute on the shell.
Optionally one can specify:
- `transform` - A [transformation](https://www.openhab.org/docs/configuration/transformations.html) to apply on the execution result,
- `interval` - An interval, in seconds, the command will be repeatedly executed,
- `timeout` - A time-out, in seconds, the execution of the command will time out, and lastly,
- `autorun` - A boolean parameter to make the command execute immediately every time the state of the input channel has changed.
For each command a separate Thing has to be defined.
```java
Thing exec:command:uniquename [command="/command/to/execute here", interval=15, timeout=5, autorun=false]
```
The `command` itself can be enhanced using the well known syntax of the [Java formatter class syntax](http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html#syntax).
The following parameters are automatically added:
- the current date (as java.util.Date, example: `%1$tY-%1$tm-%1$td`)
- the current State of the input channel (see below, example: `%2$s`)
## Channels
All Things support the following channels:
| Channel Type ID | Item Type | Description |
|-----------------|-----------|--------------------------------------------------------------------------------------|
| input | String | Input parameter to provide to the command |
| output | String | Output of the last execution of the command |
| exit | Number | The exit value of the last execution of the command |
| run | Switch | Send ON to execute the command, the current state tells whether it is running or not |
| lastexecution | DateTime | Time/Date the command was last executed, in yyyy-MM-dd'T'HH:mm:ss.SSSZ format |
## Minimal Example
**demo.things**
```java
Thing exec:command:apc [command="/usr/local/bin/apcaccess status", interval=15, timeout=5]
Thing exec:command:myscript [command="php ./configurations/scripts/script.php %2$s", transform="REGEX((.*?))"]
```
**demo.items**
```java
String APCRaw "[%s]" (All) {channel="exec:command:apc:output"}
String APCRunning {channel="exec:command:apc:run"}
String APCExitValue {channel="exec:command:apc:exit"}
String APCLastExecution {channel="exec:command:apc:lastexecution"}
```
## Full Example
Following is an example how to set up an exec command thing, debug it with a rule and set the returned string to an Number Item.
**For this to work also the openHAB RegEx Transformation has to be installed**
**demo.things**
```java
// "%2$s" will be replace by the input channel, this makes it possible to use one command line with different arguments.
// e.g: "ls" as <YOUR COMMAND> and "-a" or "-l" as additional argument set to the input channel in the rule.
Thing exec:command:yourcommand [ command="<YOUR COMMAND> %2$s", interval=0, autorun=false ]
```
**demo.items**
```java
Switch YourTrigger
Number YourNumber "Your Number [%.1f <20>C]"
// state of the execution, is running or finished
Switch yourcommand {channel="exec:command:yourcommand:run"}
// Arguments to be placed for '%2$s' in command line
String yourcommand_Args {channel="exec:command:yourcommand:input"}
// Output of command line execution
String yourcommand_out {channel="exec:command:yourcommand:output"}
```
**demo.sitemap**
```java
// Name of file and name of sitemap has to be the same
sitemap demo label="Your Value"
{
Frame {
Switch item=YourTrigger
Text item=YourNumber
}
}
```
**demo.rules**
```java
rule "Your Execution"
when
Item YourTrigger changed
then
if(YourTrigger.state == ON){
yourcommand_Args.sendCommand("Additional Argument to command line for ON")
}else{
yourcommand_Args.sendCommand("Additional Argument to command line for OFF")
}
// wait for the command to complete
// State will be NULL if not used before or ON while command is executed
while(yourcommand.state != OFF){
Thread::sleep(500)
}
// Trigger execution
yourcommand.sendCommand(ON)
// Logging of command line result
logInfo("Your command exec", "Result:" + yourcommand_out.state )
// If the returned string is just a number it can be parsed
// If not a regex or another transformation can be used
YourNumber.postUpdate(
(Integer::parseInt(yourcommand_out.state.toString) as Number )
)
end
```
## Source
[OpenHAB community thread with a detailed example.](https://community.openhab.org/t/1-openhab-433mhz-radio-transmitter-tutorial/34977)

View File

@ -1,128 +0,0 @@
---
id: exec
label: Exec
title: Exec - Bindings
type: binding
description: "Execute commands as you would enter on the command line, returning the output (possibly transformed) as the bound item's state. Also, execute command lines in response to commands sent to bound items."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.exec/README.md
since: 1x
install: legacy
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Exec Binding
Execute commands as you would enter on the command line, returning the output (possibly transformed) as the bound item's state. Also, execute command lines in response to commands sent to bound items.
See [examples](#examples) below.
## Considerations
* The user under which you are running openHAB should have the necessary permissions in order to execute your command lines.
* When using the `ssh` command, you should use private key authorization, since the password cannot be read from the command line.
* There is also a binding specifically for openHAB 2 [here](http://docs.openhab.org/addons/bindings/exec/readme.html).
## Binding Configuration
This binding does not have a configuration.
## Item Configuration
### Update item states
When updating the states of items based on executing a command line (an "in" binding):
```
exec="<[<commandLine to execute>:<refreshintervalinmilliseconds>:(<transformationrule>)]"
```
where:
* `<commandLine to execute>` is the command line to execute. See [Formatting](#formatting) and [Splitting](#splitting) sections below.
* `<refreshintervalinmilliseconds>` is the frequency at which to repeatedly execute the command line.
* `<transformationrule>` is optional, and can be used to transform the string returned from the command before updating the state of the item.
Example item:
```
Number Temperature "Ext. Temp. [%.1f°C]" { exec="<[curl -s http://weather.yahooapis.com/forecastrss?w=566473&u=c:60000:XSLT(demo_yahoo_weather.xsl)]" }
```
### Sending commands
When executing a command line in response to the item receiving a command (an "out" binding):
```
exec=">[<openHAB-command>:<commandLine to execute>] (>[<openHAB-command>:<commandLine to execute>]) (>[...])"
```
where:
* `<openHAB-command>` is the openHAB command that will trigger the execution of the command line. Can be `ON`, `OFF`, `INCREASE`, etc., or the special wildcard command '`*`' which is called in cases where no direct match could be found
* `<commandLine to execute>` is the command to execute. See [Formatting](#formatting) and [Splitting](#splitting) sections below.
Example item:
```
Number SoundEffect "Play Sound [%d]" { exec=">[1:open /mp3/gong.mp3] >[2:open /mp3/greeting.mp3] >[*:open /mp3/generic.mp3]" }
```
### Old Format
Deprecated format (do not use; retained for backward compatibility only):
```
exec="<openHAB-command>:<commandLine to execute>[,<openHAB-command>:<commandLine to execute>][,...]"
```
### Formatting
You can substitute formatted values into the command using the syntax described [here](https://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html).
1. the current [date](https://docs.oracle.com/javase/7/docs/api/java/util/Date.html), like `%1$tY-%1$tm-%1$td`.
1. the current command or state, like `%2$s` (out bindings only)
1. the current item name (like `%3$s`).
### Splitting
Sometimes the `<commandLine to execute>` isn't executed properly. In that case, another exec-method can be used. To accomplish this please use the special delimiter `@@` to split command line parameters.
## Examples
### Turn a Computer ON and OFF
On possible useage is to turn a computer on or off. The Wake-on-LAN binding could be bound to a Switch item, so that when the switch receives an ON command, A Wake-on-LAN message is sent to wake up the computer. When the switch item receives an OFF command, it will call the Exec binding to connect via ssh and issue the shutdown command. Here is the example item:
```
Switch MyLinuxPC "My Linux PC" { wol="192.168.1.255#00-1f-d0-93-f8-b7", exec=">[OFF:ssh user@host shutdown -p now]" }
```
### KNX Bus to Exec Command
The example below combines three bindings to incorporate the following behavior: query the current state of the NAS with the given IP address. When receiving an OFF command over KNX or the user switches to OFF manually then send the given command line via the exec binding.
```
Switch Network_NAS "NAS" (Network, Status) { nh="192.168.1.100", knx="<2/0/0", exec=">[OFF:ssh user@host shutdown -p now]" }
```
### More Examples
```
exec=">[ON:/bin/sh@@-c@@echo on >> /tmp/sw_log] >[OFF:/bin/sh@@-c@@echo off >> /tmp/sw_log]"
exec=">[1:open /mp3/gong.mp3] >[2:open /mp3/greeting.mp3] >[*:open /mp3/generic.mp3]"
exec="<[curl -s http://weather.yahooapis.com/forecastrss?w=566473&u=c:60000:XSLT(demo_yahoo_weather.xsl)]"
exec="<[/bin/sh@@-c@@uptime | awk '{ print $10 }':60000:REGEX((.*?))]"
exec="<[execute.bat %1$tY-%1$tm-%1$td %2$s %3$s:60000:REGEX((.*?))]"
exec="<[php ./configurations/scripts/script.php:60000:REGEX((.*?))]"
exec="<[/bin/sh@@-c@@uptime | awk '{ print $10 }':]"
// deprecated format
exec="OFF:ssh user@host shutdown -p now"
exec="OFF:some command, ON:'some other\, more \'complex\' \\command\\ to execute', *:fallback command"
exec="1:open /path/to/my/mp3/gong.mp3, 2:open /path/to/my/mp3/greeting.mp3, *:open /path/to/my/mp3/generic.mp3"
```

View File

@ -1,78 +0,0 @@
---
id: expire
label: Expire
title: Expire - Bindings
type: binding
description: "The Expire binding will post an update or command that you specify (the 'expire' update/command) to items it is bound to after a period of time has passed. If you don't specify an update or command, the default is to post an Undefined (`UnDefType.UNDEF`) update to the item."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.expire/README.md
since: 1x
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Expire Binding
The Expire binding will post an update or command that you specify (the "expire" update/command) to items it is bound to after a period of time has passed. If you don't specify an update or command, the default is to post an Undefined (`UnDefType.UNDEF`) update to the item.
The expiration time will be started or restarted every time an item receives an update or command *other than* the specified "expire" update/command.
Any future expiring update or command is cancelled if the item receives an update or command that matches the "expire" update/command.
## Binding Configuration
The binding itself has no configuration.
## Item Configuration
The Expire binding accepts a duration of time that can be made up of hours, minutes and seconds in the format
```
expire="1h 30m 45s"
expire="1h05s"
expire="55h 59m 12s"
```
Any part is optional, but any part present must be in the given order (hours, minutes, seconds). Whitespace is allowed between sections.
This section can optionally be followed by a comma and the state or command to post when the timer expires. When this optional section is not present, it defaults to posting an Undefined (`UnDefType.UNDEF`) update to the item.
```
expire="1h,command=STOP" (send STOP command after one hour)
expire="5m,state=0" (update state to 0 after five minutes)
expire="3m12s,Hello" (update state to Hello after three minutes and 12 seconds)
expire="2h" (update state to Undefined two hours after last value)
```
Note that the `state=` part is optional.
Also note that the type of item (`String`, `Number`, `Switch`, `Contact`, etc.) must accept the command or state you specify. The binding works with all item, state and command types.
## Examples
Set a temperature sensor's state to -999 if five minutes pass since the last numerical update:
```
Number Temperature "Temp [%.1f °C]" { mysensors="24;1;V_TEMP", expire="5m,-999" }
```
Turn off a light (Z-Wave node 3) one and a half hours after it was turned on:
```
Switch HallLight "HallLight [%s]" { zwave="3", expire="1h30m,command=OFF" }
```
Mark a motion sensor as CLOSED 30 seconds after it was opened:
```
Contact MotionSensor "MotionSensor [%s]" { http="<[http://motion/sensor:60000:JSONPATH($.state)]", expire="30s,state=CLOSED" }
```
Boil an egg for seven minutes using a Z-Wave-controlled cooker:
```
Switch EggCooker "Egg Cooker [%s]" { zwave="12", expire="7m,command=OFF" }
```
> ⚠️ If another binding is repeatedly updating the state of the item to be the same state it already was, the expiration timer will continue to be reset into the future. Dedicating an item to the expiration function (so it doesn't receive repeated updates from another binding) would avoid unwanted behavior, should it apply in your case.

View File

@ -1,173 +0,0 @@
---
id: fatekplc
label: Fatek PLC
title: Fatek PLC - Bindings
type: binding
description: "[Fatek PLC](http://fatek.com/en/prod.php?catId=1) is one kind of programmable logic controller. This binding support native Fatek protocol to communicate with PLC. For communication to PLC is used [JFatek library](http://www.simplify4u.org/jfatek/)."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.fatekplc/README.md
since: 1x
logo: images/addons/fatekplc.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Fatek PLC Binding
[Fatek PLC](http://fatek.com/en/prod.php?catId=1) is one kind of programmable logic controller. This binding support native Fatek protocol to communicate with PLC. For communication to PLC is used [JFatek library](http://www.simplify4u.org/jfatek/).
## Binding Configuration
The binding can be configured in the file `services/fatekplc.cfg`.
| Property | Default | Required | Description |
|----------|---------|:--------:|-------------|
| refresh | 60000 | No | refresh interval in milliseconds which is used to poll values from the Fatek PLC server |
| `<plcName>`.connectionUri | | Yes | connection URI for the `<plcName>` you provide, so multiple Fatek PLCs can be addressed. Supports either `tcp://` or `udp://` protocol. For example, `udp://192.168.1.100?plcId=1` |
## Item Configuration
openHAB items can be bound to Fatek PLC by example definition
```
Item ... { fatekplc="fatek_binding" }
```
`fatek binding` is described below for specific item type.
For all items we can add options `refreshStep`, eg.
```
plc1:R100:refreshStep=2
```
This means that item will be updated every second poll cycle.
Only the item types documented below are supported.
### Color Items
```
plcName:REG1:REG2:REG3[:REG4][:RGB|HSB]
```
Last element indicates color mode used to write data to PLC, default value is HSB.
* REG1, REG2 and RE3 must be data type register.
* for HSB mode REG1 = H, REG2 = S, REG3 = B
* for RGB mode REG1 = R, REG2 = G, REG3 = B
REG4 is optional if you specified it, on/off command will use that register for corresponding on/off state.
If you not specified REG4 on/off command will write white or black value to color registers.
### Contact Items
```
plcName:[!]REG
```
We specified only one register. If register name starts with "!" (exclamation mark) value read will be inverted.
### Switch Items
```
plcName:[!]REG1[:[!]REG2]
```
* REG1 is used for read state of switch
* REG2 is used for change state of switch, if is not specified - REG1 is used
If registers name starts with "!" (exclamation mark) value read and written will be inverted.
### DateTime Item
#### Version 1
```
plcName:Y:m:d:H:M:S
```
Where:
* Y - year reg, if value in range 0 - 49 we add 2000, in range 50 - 99 we add 1900
* m - month reg - range 1 - 12, (1 means January)
* d - day of the month reg - The first day of the month has value 1
* H - hour of the day reg - 24-hour clock
* M - minute reg
* S - second reg
All fields must be set, if you want to skip some of the item you can put number instead of register name.
Item accept only 16 bit data register.
You can end register name with `L` - lowest 8 bits or `H` - highest 8 bits.
Eg. read current PLC time
```
plcName:R4133:R4132:R4131:R4135H:R4135L:R4128
```
#### Version 2
```
plcName:REG[R][:factor=factorValue]
```
In REG we store seconds from begining of the UNIX epoch.
If we add R to the end of register name DateTime item will recognize as relative seconds to now.
We can read some counter which count seconds and we can display the time when counting was started.
We can also specific factor value, read seconds will be multiplied by this value.
### Dimmer Items
```
plcName:REG:[step=value][:factor=factorValue]
```
We use one data type register for value.
Step options can specified step value for INCREASE/DECREASE command.
We can also specific factor value, all read data will be multiplied by this value,
before write value from OpenHab will be divided by factor.
### Number Items
```
plcName:[+]REG[F][:transformationType(params)][:factor=factorValue]
```
If we start register name with + (plus sign) values read from plc will be recognized as unsigned number.
If we end register name with "F" values read from plc will be recognized as float number.
For float number 32 bits data register must be used.
We can also specific factor value, all read data will be multiplied by this value,
before write value from OpenHab will be divided by factor.
For Number item we can provide transformation function, eg: JS(file.js)
### Rollershutter Items
```
plcName:REG1:REG2:REG3[:factor=factorValue]
```
* REG1 is used for reading current positions in percent.
* REG2 is set to true/1 for UP command
* REG3 is set to true/1 for DOWN command
* for STOP command REG2 and REG3 is set to false/0.
We can also specific factor value, all read data will be multiplied by this value.

View File

@ -1,82 +0,0 @@
---
id: feed
label: Feed
title: Feed - Bindings
type: binding
description: "This binding allows you to integrate feeds in the openHAB environment."
since: 2x
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Feed Binding
This binding allows you to integrate feeds in the openHAB environment.
The Feed binding downloads the content, tracks for changes, and displays information like feed author, feed title and description, number of entries, last update date.
It can be used in combination with openHAB rules to trigger events on feed change.
It uses the [ROME library](http://rometools.github.io/rome/index.html) for parsing
and supports a wide range of popular feed formats - RSS 2.00, RSS 1.00, RSS 0.94, RSS 0.93, RSS 0.92, RSS 0.91 UserLand,
RSS 0.91 Netscape, RSS 0.90, Atom 1.0, Atom 0.3.
## Supported Things
This binding supports one Thing type: `feed`.
## Discovery
Discovery is not necessary.
## Binding Configuration
No binding configuration required.
## Thing Configuration
Required configuration:
- **URL** - the URL of the feed (e.g <http://example.com/path/file>). The binding uses this URL to download data
Optional configuration:
- **refresh** - a refresh interval defines after how many minutes the binding will check, if new content is available. Default value is 20 minutes
## Channels
The binding supports following channels
| Channel Type ID | Item Type | Description |
|--------------------|-----------|-----------------------------------------------------|
| latest-title | String | Contains the title of the last feed entry. |
| latest-description | String | Contains the description of last feed entry. |
| latest-date | DateTime | Contains the published date of the last feed entry. |
| author | String | The name of the feed author, if author is present |
| title | String | The title of the feed |
| description | String | Description of the feed |
| last-update | DateTime | The last update date of the feed |
| number-of-entries | Number | Number of entries in the feed |
## Example
Things:
```java
feed:feed:bbc [ URL="http://feeds.bbci.co.uk/news/video_and_audio/news_front_page/rss.xml?edition=uk"]
feed:feed:techCrunch [ URL="http://feeds.feedburner.com/TechCrunch/", refresh=60]
```
Items:
```java
String latest_title {channel="feed:feed:bbc:latest-title"}
String latest_description {channel="feed:feed:bbc:latest-description"}
DateTime latest_date {channel="feed:feed:bbc:latest-date"}
Number number_of_entries {channel="feed:feed:bbc:number-of-entries"}
String description {channel="feed:feed:bbc:description"}
String author {channel="feed:feed:bbc:author"}
DateTime published_date {channel="feed:feed:bbc:last-update"}
String title {channel="feed:feed:bbc:title"}
```

View File

@ -1,112 +0,0 @@
---
id: feican
label: Feican
title: Feican - Bindings
type: binding
description: "This binding adds support for the Feican Wi-Fi version of the smart light led Bulb, the WiFi RGBW Bulb."
since: 2x
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Feican Binding
This binding adds support for the Feican Wi-Fi version of the smart light led Bulb, the WiFi RGBW Bulb.
With this binding the light bulb can be switched on or off, set the color or set color based on color temperature.
Set the brightness. And it contains a set of preset programs, where for some the program speed can be set.
## Supported Things
This binding supports the Feican smart smart light led Bulb, WiFi RGBW Bulb. This bulb supports color, color temperature,
brightness. It also has a number of preset programs, with static color, jumping color(s), gradient color(s) and flashing
color(s). With the program_speed the speed of some of the programs can be set.
It might be the Feican ledstrips also work as it seems they can be controlled with the same app. But this has not been tested.
### Limitations
It's not possible to get the state of the bulb from the bulb itself. Therefore the state visible to the user only reflects
what was set in openHAB and may not correspond with the actual state.
## Prerequisites
Before using the Feican bulb with openHab the devices must be connected to the Wi-Fi network. This can be done using the
Feican Android or iPhone DreamColor app.
## Discovery
Devices can be auto discovered within the local network. It's possible to connect to devices in a different network,
but these must be added manually.
## Thing Configuration
The thing has a one configuration parameter:
| Parameter | Description |
|-----------|------------------------------------------------------------------------- |
| ipAddress | IP Address of the device. Mandatory. |
## Channels
The following channels are available:
| Channel Type ID | Item Type | Description |
|-------------------|-----------|--------------------------------------------------------------------------------------------|
| color | Color | This channel supports switching, brightness and adjusting the color of a light. |
| color_temperature | Dimmer | This channel supports adjusting the color temperature from cold (0%) to warm (100%). |
| program | String | This channel supports setting the bulb to a static, jumping, gradient or flashing light. |
| program_speed | Dimmer | This channel supports adjusting speed of jump, gradient or flash programs |
The program channel supports the following values:
| Value | Description |
|-------|---------------------|
| 1 | Static red |
| 2 | Static blue |
| 3 | Static green |
| 4 | Static cyan |
| 5 | Static yellow |
| 6 | Static purple |
| 7 | Static white |
| 8 | Tricolor jump |
| 9 | 7-color jump |
| 10 | Tricolor gradient |
| 11 | 7-color gradient |
| 12 | Red gradient |
| 13 | Green gradient |
| 14 | Blue gradient |
| 15 | Yellow gradient |
| 16 | Cyan gradient |
| 17 | Purple gradient |
| 18 | White gradient |
| 19 | Red-Green gradient |
| 20 | Red-Blue gradient |
| 21 | Green-Blue gradient |
| 22 | 7-color flash |
| 23 | Red flash |
| 24 | Green flash |
| 25 | Blue flash |
| 26 | Yellow flash |
| 27 | Cyan flash |
| 28 | Purple flash |
| 29 | White flash |
## Full Example
**feican.things:**
```java
feican:bulb:home "Living Room" [ ipAddress="192.168.0.13" ]
```
**feican.items:**
```java
Switch FC_1_Switch "Switch" { channel="feican:bulb:home:color" }
Color FC_1_Color "Color" <slider> { channel="feican:bulb:home:color" }
Dimmer FC_1_Dimmer "Brightness [%d]" <slider> { channel="feican:bulb:home:color" }
```

View File

@ -1,62 +0,0 @@
---
id: fht
label: FHT
title: FHT - Bindings
type: binding
description: "FHT is a range of devices produced by busware.de which allows to interact with various protocols and devices over radio frequencies. It's also possible to build one on your own."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.fht/README.md
since: 1x
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# FHT Binding
FHT is a range of devices produced by busware.de which allows to interact with various protocols and devices over radio frequencies. It's also possible to build one on your own.
- Original Manufacturer: http://busware.de
- Build your own (German) http://www.fhemwiki.de/wiki/Selbstbau_CUL
- Original firmware: http://culfw.de
- Alternative firmware: https://github.com/heliflieger/a-culfw
## Binding Configuration
This binding can be configured in the `services/fht.cfg` file.
| Property | Default | Required | Description |
|----------|---------|:--------:|-------------|
| device | | Yes | in the form `serial:<device>`, where `<device>` is a local serial port, or<br/> `network:<host>:<port>`, where `<host>` is the host name or IP address and `<port>` is the port number. The `network` option works with ser2net from a tuxnet device |
| baudrate | | No | one of 75, 110, 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 |
| parity | | No | one of EVEN, ODD, MARK, NONE, SPACE |
When using a serial port, you may need to add `-Dgnu.io.rxtx.SerialPorts=/dev/ttyACM0` in your server startup. Please consult the [forum](https://community.openhab.org) for the latest information.
## Item Configuration
Receive the valve position in percent. It can be bound to a Number item. Read-only.
```
{ fht="TR3D4900" }
```
Receive the window state of a FHT window contact. Read-only.
```
{ fht="TR952E90" }
```
This would be a binding to receive reports of a FHT80b. Currently only the measured temperature is received.
```
{ fht="TR3D49" }
```
This binding enables you to send commands to a FHT80b. Currently this will be mostly the desired temperature. But you need also a writeable binding to update the time on your FHT80b.
```
{ fht="TW3D49" }
```

View File

@ -1,48 +0,0 @@
---
id: folding
label: Folding@home
title: Folding@home - Bindings
type: binding
description: "Binding for the [Folding@home](https://folding.stanford.edu/) distributed computing"
since: 2x
logo: images/addons/folding.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Folding@home Binding
Binding for the [Folding@home](https://folding.stanford.edu/) distributed computing
software.
This binding can control multiple Folding@home clients and slots, using the TCP
interface.
Clients are modeled as bridges, and support adding any number of slots
(though, usually CPU and GPU).
The binding provides control over Run / Pause and Finish.
It polls for the status of the client, updates the run / pause state, and
provides a basic description of the slot.
The clients must be added manually in the Paper UI, but the slots for that
client will then appear using auto-discovery.
## Requirements (network access to F@H)
The Folding@home TCP interface is enabled only on localhost by default, without
a password.
In order to allow control of Folding on other machines than the one
running openHAB, it is necessary to configure the Folding client to accept commands
from a non-localhost address.
Here is how to do it in the FAHControl application:
- Open FAHControl on the client to be added
- Click on Configure, then the Remote Access tab
- Enter a password twice (invent one)
- Locate the Allow box under IP Address Restrictions
- Append a space and the IP address of the machine running openHAB to the text in that box, so it reads something like `127.0.0.1 192.168.1.2`
You should now have access to the client, configure it using the password and
IP address in the manual thing configuration interface.

View File

@ -1,322 +0,0 @@
---
id: freebox
label: Freebox
title: Freebox - Bindings
type: binding
description: "This binding integrates the [Freebox Revolution](http://www.free.fr/adsl/freebox-revolution.html) to your openHab installation."
since: 2x
logo: images/addons/freebox.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Freebox Binding
This binding integrates the [Freebox Revolution](http://www.free.fr/adsl/freebox-revolution.html) to your openHab installation.
## Supported Things
This binding supports the following thing types:
| Thing | Thing Type | Description |
|---------------|------------|---------------------------------------------------------|
| server | Bridge | The Freebox Revolution Server. |
| phone | Thing | The phone wired to the Freebox Revolution. |
| net_device | Thing | A network device on the local network. |
| net_interface | Thing | A network interface from a device on the local network. |
| airplay | Thing | An AirPlay device in the local network. |
## Discovery
The Freebox Revolution server is discovered automatically through mDNS in the local network.
After a Freebox Revolution is discovered and available to openHAB, the binding will automatically discover phone, network devices / interfaces and AirPlay devices with video capability in the local network.
Note that the discovered thing will be setup to use only HTTP API (and not HTTPS) because only an IP can be automatically determined while a domain name is required to use HTTPS with a valid certificate.
## Binding configuration
The binding has the following configuration options, which can be set for "binding:freebox":
| Parameter | Name | Description | Required |
|-------------|--------------|--------------------------------------------------------------------------|----------|
| callbackUrl | Callback URL | URL to use for playing notification sounds, e.g. <http://192.168.0.2:8080> | no |
## Thing Configuration
### Server
The *server* bridge thing requires the following configuration parameters:
| Parameter Label | Parameter ID | Description | Required | Default |
|-------------------------|-----------------|-----------------------------------------------------------------------------|----------|----------------------|
| Freebox Network Address | fqdn | The IP address / FQDN of the Freebox Server (can include port number). | false | mafreebox.freebox.fr |
| Application token | appToken | Token generated by the Freebox Server. | false | |
| Refresh Interval | refreshInterval | The refresh interval in seconds which is used to poll given Freebox Server. | false | 30 |
| Use only HTTP API | useOnlyHttp | Use HTTP API even if HTTPS is available. | false | false |
If the parameter *ipAddress* is not set, the binding will use the default address used by Free to access your Freebox Server (mafreebox.freebox.fr).
The bridge thing will initialize only if a valid application token (parameter *appToken*) is filled.
### Phone
The *phone* thing requires the following configuration parameters:
| Parameter Label | Parameter ID | Description | Required | Default |
|------------------------------|---------------------------|---------------------------------------------------------------------------------------------|----------|---------|
| Phone State Refresh Interval | refreshPhoneInterval | The refresh interval in seconds which is used to poll given Freebox Server for phone state. | false | 2 |
| Phone Calls Refresh Interval | refreshPhoneCallsInterval | The refresh interval in seconds which is used to poll given Freebox Server for phone calls. | false | 60 |
### Network device
The *net_device* thing requires the following configuration parameters:
| Parameter Label | Parameter ID | Description | Required |
|-----------------|--------------|----------------------------------------|----------|
| MAC Address | macAddress | The MAC address of the network device. | true |
### Network interface
The *net_interface* thing requires the following configuration parameters:
| Parameter Label | Parameter ID | Description | Required |
|-----------------|--------------|-----------------------------------------------------|----------|
| IP Address | ipAddress | The IP address (v4 or v6) of the network interface. | true |
### AirPlay device
The *airplay* thing requires the following configuration parameters:
| Parameter Label | Parameter ID | Description | Required |
|-----------------|--------------|-----------------------------|----------|
| Name | name | Name of the AirPlay device | true |
| Password | password | AirPlay password | false |
| Accept all MP3 | acceptAllMp3 | Accept any bitrate for MP3 audio or only bitrates greater than 64 kbps | false |
## HTTPS Access
Each Freebox server is now automatically assigned a random domain name (in addition to mafreebox.freebox.fr that can be used inside the local network), and an associated TLS certificate to enable secure access to API.
This certificate is also valid for the domain name mafreebox.freebox.fr too.
You must validate the certificate chain, by using the following Freebox ECC Root CA and Freebox RSA Root CA:
```text
-----BEGIN CERTIFICATE-----
MIICWTCCAd+gAwIBAgIJAMaRcLnIgyukMAoGCCqGSM49BAMCMGExCzAJBgNVBAYT
AkZSMQ8wDQYDVQQIDAZGcmFuY2UxDjAMBgNVBAcMBVBhcmlzMRMwEQYDVQQKDApG
cmVlYm94IFNBMRwwGgYDVQQDDBNGcmVlYm94IEVDQyBSb290IENBMB4XDTE1MDkw
MTE4MDIwN1oXDTM1MDgyNzE4MDIwN1owYTELMAkGA1UEBhMCRlIxDzANBgNVBAgM
BkZyYW5jZTEOMAwGA1UEBwwFUGFyaXMxEzARBgNVBAoMCkZyZWVib3ggU0ExHDAa
BgNVBAMME0ZyZWVib3ggRUNDIFJvb3QgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNi
AASCjD6ZKn5ko6cU5Vxh8GA1KqRi6p2GQzndxHtuUmwY8RvBbhZ0GIL7bQ4f08ae
JOv0ycWjEW0fyOnAw6AYdsN6y1eNvH2DVfoXQyGoCSvXQNAUxla+sJuLGICRYiZz
mnijYzBhMB0GA1UdDgQWBBTIB3c2GlbV6EIh2ErEMJvFxMz/QTAfBgNVHSMEGDAW
gBTIB3c2GlbV6EIh2ErEMJvFxMz/QTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
/wQEAwIBhjAKBggqhkjOPQQDAgNoADBlAjA8tzEMRVX8vrFuOGDhvZr7OSJjbBr8
gl2I70LeVNGEXZsAThUkqj5Rg9bV8xw3aSMCMQCDjB5CgsLH8EdZmiksdBRRKM2r
vxo6c0dSSNrr7dDN+m2/dRvgoIpGL2GauOGqDFY=
-----END CERTIFICATE-----
```
```text
-----BEGIN CERTIFICATE-----
MIIFmjCCA4KgAwIBAgIJAKLyz15lYOrYMA0GCSqGSIb3DQEBCwUAMFoxCzAJBgNV
BAYTAkZSMQ8wDQYDVQQIDAZGcmFuY2UxDjAMBgNVBAcMBVBhcmlzMRAwDgYDVQQK
DAdGcmVlYm94MRgwFgYDVQQDDA9GcmVlYm94IFJvb3QgQ0EwHhcNMTUwNzMwMTUw
OTIwWhcNMzUwNzI1MTUwOTIwWjBaMQswCQYDVQQGEwJGUjEPMA0GA1UECAwGRnJh
bmNlMQ4wDAYDVQQHDAVQYXJpczEQMA4GA1UECgwHRnJlZWJveDEYMBYGA1UEAwwP
RnJlZWJveCBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
xqYIvq8538SH6BJ99jDlOPoyDBrlwKEp879oYplicTC2/p0X66R/ft0en1uSQadC
sL/JTyfgyJAgI1Dq2Y5EYVT/7G6GBtVH6Bxa713mM+I/v0JlTGFalgMqamMuIRDQ
tdyvqEIs8DcfGB/1l2A8UhKOFbHQsMcigxOe9ZodMhtVNn0mUyG+9Zgu1e/YMhsS
iG4Kqap6TGtk80yruS1mMWVSgLOq9F5BGD4rlNlWLo0C3R10mFCpqvsFU+g4kYoA
dTxaIpi1pgng3CGLE0FXgwstJz8RBaZObYEslEYKDzmer5zrU1pVHiwkjsgwbnuy
WtM1Xry3Jxc7N/i1rxFmN/4l/Tcb1F7x4yVZmrzbQVptKSmyTEvPvpzqzdxVWuYi
qIFSe/njl8dX9v5hjbMo4CeLuXIRE4nSq2A7GBm4j9Zb6/l2WIBpnCKtwUVlroKw
NBgB6zHg5WI9nWGuy3ozpP4zyxqXhaTgrQcDDIG/SQS1GOXKGdkCcSa+VkJ0jTf5
od7PxBn9/TuN0yYdgQK3YDjD9F9+CLp8QZK1bnPdVGywPfL1iztngF9J6JohTyL/
VMvpWfS/X6R4Y3p8/eSio4BNuPvm9r0xp6IMpW92V8SYL0N6TQQxzZYgkLV7TbQI
Hw6v64yMbbF0YS9VjS0sFpZcFERVQiodRu7nYNC1jy8CAwEAAaNjMGEwHQYDVR0O
BBYEFD2erMkECujilR0BuER09FdsYIebMB8GA1UdIwQYMBaAFD2erMkECujilR0B
uER09FdsYIebMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqG
SIb3DQEBCwUAA4ICAQAZ2Nx8mWIWckNY8X2t/ymmCbcKxGw8Hn3BfTDcUWQ7GLRf
MGzTqxGSLBQ5tENaclbtTpNrqPv2k6LY0VjfrKoTSS8JfXkm6+FUtyXpsGK8MrLL
hZ/YdADTfbbWOjjD0VaPUoglvo2N4n7rOuRxVYIij11fL/wl3OUZ7GHLgL3qXSz0
+RGW+1oZo8HQ7pb6RwLfv42Gf+2gyNBckM7VVh9R19UkLCsHFqhFBbUmqwJgNA2/
3twgV6Y26qlyHXXODUfV3arLCwFoNB+IIrde1E/JoOry9oKvF8DZTo/Qm6o2KsdZ
dxs/YcIUsCvKX8WCKtH6la/kFCUcXIb8f1u+Y4pjj3PBmKI/1+Rs9GqB0kt1otyx
Q6bqxqBSgsrkuhCfRxwjbfBgmXjIZ/a4muY5uMI0gbl9zbMFEJHDojhH6TUB5qd0
JJlI61gldaT5Ci1aLbvVcJtdeGhElf7pOE9JrXINpP3NOJJaUSueAvxyj/WWoo0v
4KO7njox8F6jCHALNDLdTsX0FTGmUZ/s/QfJry3VNwyjCyWDy1ra4KWoqt6U7SzM
d5jENIZChM8TnDXJzqc+mu00cI3icn9bV9flYCXLTIsprB21wVSMh0XeBGylKxeB
S27oDfFq04XSox7JM9HdTt2hLK96x1T7FpFrBTnALzb7vHv9MhXqAT90fPR/8A==
-----END CERTIFICATE-----
```
First copy and paste on your server running openHAB these two public certificates in 2 files named for example /freeboxECC.crt and /freeboxRSA.crt.
Then you have to import these two certificate as trusted public certificate for your installed Java Runtime Environment.
On Linux server, the command is:
```
sudo keytool -import -trustcacerts -file /freeboxECC.crt -alias Freebox -keystore $JAVA_HOME/jre/lib/security/cacerts
sudo keytool -import -trustcacerts -file /freeboxRSA.crt -alias Freebox -keystore $JAVA_HOME/jre/lib/security/cacerts
sudo rm /freeboxECC.crt /freeboxRSA.crt
```
## Authentication
You'll have to authorize openHAB to connect to your Freebox. Here is the process described :
**Step 1** At binding startup, if no token is recorded in the Freebox Server (bridge) configuration, the following message will be displayed in the OSGi console :
```text
####################################################################
# Please accept activation request directly on your freebox #
# Once done, record Apptoken in the Freebox Item configuration #
# bEK7a7O8GkxxxxxxxxxxXBsKu/xxxttttwj5bXSssd5gUvSXs4vrpuhZwelEo804 #
####################################################################
```
**Step 2** Run to your Freebox and approve the pairing request for openHAB Freebox Binding that is displayed on the Freebox screen
**Step 3** Record the apptoken in the Freebox Server (bridge) configuration
**Optionally** you can log in your Freebox admin console to allocate needed rights to openhab
Once initialized, the thing will generate all available channels.
## Channels
The following channels are supported:
| Thing | Channel Type ID | Item Type | Access Mode | Description |
|---------------|--------------------------|-----------|-------------|---------------------------------------------------------------------------------|
| server | fwversion | String | R | Version of the Freebox Server firmware |
| server | uptime | Number | R | Time since last reboot of the Freebox Server |
| server | restarted | Switch | R | Indicates whether the Freebox server hase restarted during the last poll period |
| server | tempcpum | Number | R | Actual measured CPU Marvell temperature |
| server | tempcpub | Number | R | Actual measured CPU Broadcom (xDSL) temperature |
| server | tempswitch | Number | R | Actual measured switch temperature |
| server | fanspeed | Number | R | Actual measured fan speed (rpm) |
| server | reboot | Switch | W | Reboots the Freebox server |
| server | lcd_brightness | Number | RW | Brightness level of the screen in percent |
| server | lcd_orientation | Number | RW | Screen Orientation in degrees (0 or 90 or 180 or 270) |
| server | lcd_forced | Switch | RW | Indicates whether the screen orientation forced |
| server | wifi_status | Switch | RW | Indicates whether the WiFi network is enabled |
| server | ftp_status | Switch | RW | Indicates whether the FTP server is enabled |
| server | airmedia_status | Switch | RW | Indicates whether Air Media is enabled |
| server | upnpav_status | Switch | RW | Indicates whether UPnP AV is enabled |
| server | sambafileshare_status | Switch | RW | Indicates whether Window File Sharing is enabled |
| server | sambaprintershare_status | Switch | RW | Indicates whether Window Printer Sharing is enabled |
| server | xdsl_status | String | R | Status of the xDSL line |
| server | line_status | String | R | Status of network line connexion |
| server | ipv4 | String | R | Public IP Address of the Freebox Server |
| server | rate_up | Number | R | Current upload rate in byte/s |
| server | rate_down | Number | R | Current download rate in byte/s |
| server | bytes_up | Number | R | Total uploaded bytes since last connection |
| server | bytes_down | Number | R | Total downloaded bytes since last connection |
| phone | state#onhook | Switch | R | Indicates whether the phone is on hook |
| phone | state#ringing | Switch | R | Is the phone ringing |
| phone | any#call_number | String | R | Last call: number |
| phone | any#call_duration | Number | R | Last call: duration in seconds |
| phone | any#call_timestamp | DateTime | R | Last call: creation timestamp |
| phone | any#call_status | String | R | Last call: type (ingoing, outgoing, missed) |
| phone | any#call_name | String | R | Last call: called name for outgoing calls. Caller name for incoming calls |
| phone | accepted#call_number | String | R | Last accepted call: number |
| phone | accepted#call_duration | Number | R | Last accepted call: duration in seconds |
| phone | accepted#call_timestamp | DateTime | R | Last accepted call: creation timestamp |
| phone | accepted#call_name | String | R | Last accepted call: caller name |
| phone | missed#call_number | String | R | Last missed call: number |
| phone | missed#call_duration | Number | R | Last missed call: duration in seconds |
| phone | missed#call_timestamp | DateTime | R | Last missed call: creation timestamp |
| phone | missed#call_name | String | R | Last missed call: caller name |
| phone | outgoing#call_number | String | R | Last outgoing call: number |
| phone | outgoing#call_duration | Number | R | Last outgoing call: duration in seconds |
| phone | outgoing#call_timestamp | DateTime | R | Last outgoing call: creation timestamp |
| phone | outgoing#call_name | String | R | Last outgoing call: called name |
| net_device | reachable | Switch | R | Indicates whether the network device is reachable |
| net_interface | reachable | Switch | R | Indicates whether the network interface is reachable |
| airplay | playurl | String | W | Play an audio or video media from the given URL |
| airplay | stop | Switch | W | Stop the media playback |
## Example
### Things
Here is an example with minimal configuration parameters (using default values).
It will first connect to mafreebox.freebox.fr using HTTPS (and will failback to HTTP if HTTPS access is not available).
```java
Bridge freebox:server:fb "Freebox Revolution" [ appToken="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ] {
Thing phone Phone "Phone"
Thing net_device tv1 "TV living room" [ macAddress="XX:XX:XX:XX:XX:XX" ]
Thing net_interface tv2 "TV bedroom" [ ipAddress="192.168.0.100" ]
Thing airplay player "Freebox Player (AirPlay)" [ name="Freebox Player" ]
}
```
Here is another example overwritting default configuration parameters:
```java
Bridge freebox:server:fb "Freebox Revolution" [ fqdn="abcdefgh.fbxos.fr", appToken="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", refreshInterval=20, useOnlyHttp=false ] {
Thing phone Phone "Phone" [ refreshPhoneInterval=10, refreshPhoneCallsInterval=120 ]
Thing net_device tv1 "TV living room" [ macAddress="XX:XX:XX:XX:XX:XX" ]
Thing net_interface tv2 "TV bedroom" [ ipAddress="192.168.0.100" ]
Thing airplay player "Freebox Player (AirPlay)" [ name="Freebox Player", password="1111", acceptAllMp3=false ]
}
```
### Items
```java
String Freebox_xdsl_status "Freebox state [%s]" {channel="freebox:server:fb:xdsl_status"}
String Freebox_cs_state "State [%s]" {channel="freebox:server:fb:line_status"}
String Freebox_cs_ipv4 "ipV4 [%s]" {channel="freebox:server:fb:ipv4"}
Number Freebox_cs_rate_up "Upload rate [%d b/s]" {channel="freebox:server:fb:rate_up"}
Number Freebox_cs_rate_down "Download rate [%d b/s]" {channel="freebox:server:fb:rate_down"}
Number Freebox_cs_bytes_up "Uploaded [%d bytes]" {channel="freebox:server:fb:bytes_up"}
Number Freebox_cs_bytes_down "Downloaded [%d bytes]" {channel="freebox:server:fb:bytes_down"}
String Freebox_sys_firmware_version "Version [%s]" {channel="freebox:server:fb:fwversion"}
Switch Freebox_reboot "Reboot freebox" {channel="freebox:server:fb:reboot"}
Switch Freebox_restarted "Restarted" {channel="freebox:server:fb:restarted"}
Number Freebox_sys_uptime "Uptime [%d sec]" {channel="freebox:server:fb:uptime"}
Number Freebox_sys_temp_cpum "Temp cpum [%d °C]" <temperature> {channel="freebox:server:fb:tempcpum"}
Number Freebox_sys_temp_cpub "Temp cpub [%d °C]" <temperature> {channel="freebox:server:fb:tempcpub"}
Number Freebox_sys_temp_sw "Temp sw [%d °C]" <temperature> {channel="freebox:server:fb:tempswitch"}
Number Freebox_sys_fan_rpm "Fan [%d rpm]" <fan> {channel="freebox:server:fb:fanspeed"}
Switch FreeboWifi "Wifi" {autoupdate="false", channel="freebox:server:fb:wifi_status"}
Switch FreeboxFTP "FTP" {autoupdate="false", channel="freebox:server:fb:ftp_status"}
Switch FreeboxUPnPAV "UPnP AV" {autoupdate="false", channel="freebox:server:fb:upnpav_status"}
Switch FreeboxAirMedia "AirMedia" {autoupdate="false", channel="freebox:server:fb:airmedia_status"}
Switch FreeboxSambaFiles "Win File Share" {autoupdate="false", channel="freebox:server:fb:sambafileshare_status"}
Switch FreeboxSambaPrinters "Win Print Share" {autoupdate="false", channel="freebox:server:fb:sambaprintershare_status"}
Number Freebox_lcd_brightness "Brightness [%d %%]" {channel="freebox:server:fb:lcd_brightness"}
Number Freebox_lcd_orientation "Orientation [%d °]" {channel="freebox:server:fb:lcd_orientation"}
Switch Freebox_lcd_forced "LCD Forced" {channel="freebox:server:fb:lcd_forced"}
Switch Freebox_onhook "Phone on hook" {channel="freebox:phone:fb:Phone:state#onhook"}
Switch Freebox_ringing "Phone ringing" {channel="freebox:phone:fb:Phone:state#ringing"}
String Freebox_call_number "Last call [%s]" {channel="freebox:phone:fb:Phone:any#call_number"}
String Freebox_call_name "Name [%s]" {channel="freebox:phone:fb:Phone:any#call_name"}
Number Freebox_call_duration "Duration [%d sec]" {channel="freebox:phone:fb:Phone:any#call_duration"}
DateTime Freebox_call_ts "TimeStamp [%1$tA %1$td %1$tR]" <calendar> {channel="freebox:phone:fb:Phone:any#call_timestamp"}
String Freebox_call_status "Status [%s]" {channel="freebox:phone:fb:Phone:any#call_status"}
String Freebox_accepted_call_number "Last accepted call [%s]" {channel="freebox:phone:fb:Phone:accepted#call_number"}
String Freebox_accepted_call_name "Caller name [%s]" {channel="freebox:phone:fb:Phone:accepted#call_name"}
Number Freebox_accepted_call_duration "Duration [%d sec]" {channel="freebox:phone:fb:Phone:accepted#call_duration"}
DateTime Freebox_accepted_call_ts "TimeStamp [%1$tA %1$td %1$tR]" <calendar> {channel="freebox:phone:fb:Phone:accepted#call_timestamp"}
String Freebox_missed_call_lastnum "Last missed call [%s]" {channel="freebox:phone:fb:Phone:missed#call_number"}
String Freebox_missed_call_name "Caller name [%s]" {channel="freebox:phone:fb:Phone:missed#call_name"}
Number Freebox_missed_call_duration "Duration [%d sec]" {channel="freebox:phone:fb:Phone:missed#call_duration"}
DateTime Freebox_missed_call_ts "TimeStamp [%1$tA %1$td %1$tR]" <calendar> {hannel="freebox:phone:fb:Phone:missed#call_timestamp"}
String Freebox_outcall_lastnum "Last outgoing call [%s]" {channel="freebox:phone:fb:Phone:outgoing#call_number"}
String Freebox_outcall_name "Called name [%s]" {channel="freebox:phone:fb:Phone:outgoing#call_name"}
Number Freebox_outcall_duration "Duration [%d sec]" {channel="freebox:phone:fb:Phone:outgoing#call_duration"}
DateTime Freebox_outcall_ts "TimeStamp [%1$tA %1$td %1$tR]" <calendar> {channel="freebox:phone:fb:Phone:outgoing#call_timestamp"}
Switch TVLivingRoom "TV living room" <television> {channel="freebox:net_device:fb:tv1:reachable"}
Switch TVBedroom "TV bedroom" <television> {channel="freebox:net_interface:fb:tv2:reachable"}
String freebox_player_playurl "URL [%s]" { channel="freebox:airplay:fb:player:playurl" }
Switch freebox_player_stop "Stop playback" { channel="freebox:airplay:fb:player:stop" }
```

View File

@ -1,161 +0,0 @@
---
id: freebox
label: Freebox
title: Freebox - Bindings
type: binding
description: "This binding is intended for users of the French DSL operator Free, using Freebox Revolution (v6)."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.freebox/README.md
since: 1x
logo: images/addons/freebox.png
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Freebox Binding
This binding is intended for users of the French DSL operator Free, using Freebox Revolution (v6).
Currently, it's able to report:
- System informations (Version number, uptime, different cpu temperature, fan speed)
- Connection Status informations (line status, public ip address, upload/download rate, up/downloaded volumes)
- Last phone call (number, duration, status)
- Last accepted phone call (from v1.7)
- Last missed phone call (from v1.7)
- Last outgoing phone call (from v1.7)
- Caller name when contact entry is defined and number is not masked (from v1.7)
- network devices reachable status (from v1.7)
And act on:
- wifi network status
- FTP server status (from v1.7)
- UPnP AV status (from v1.7)
- AirMedia status (from v1.7)
- Windows file sharing status (from v1.7)
- Windows printer sharing status (from v1.7)
- Reboot
There is also a binding specifically for openHAB 2 [here](http://docs.openhab.org/addons/bindings/freebox/readme.html).
## Binding Configuration
| Property | Default | Required | Description |
|----------|---------|:--------:|-------------|
| server | mafreebox.freebox.fr | | Freebox server IP address |
| apptoken | | Empty at first launch; fill it with the provided token | Application token generated by the Freebox server |
| device | | | Device name, for example `openhabsrv` |
| refresh | 60000 | No | refresh interval in milliseconds |
You'll have to authorise openHAB to connect to your Freebox. Here is the process described :
Enter the openHAB console or view the end of your `openhab.log` file.
Depending on how you started openHAB and its version, this might be achieved by entering:
```
tail /var/log/openhab2/openhab.log
ssh openhab@localhost -p 8101
```
(password is habopen by default)
You should see something in your log that looks like:
```
####################################################################
# Please accept activation request directly on your freebox #
# Once done, record current Apptoken in your 'openhab.cfg' #
# bEK7a7O8GkxxxxxxxxxxXBsKu/xxxttttwj5bXSssd5gUvSXs4vrpuhZwelEo804 #
####################################################################
```
Now run near your Freebox and approve the pairing request for openHAB Freebox Binding that is displayed on the Freebox screen.
Now update your `services/freebox.cfg` file to set:
```
apptoken=bEK7a7O8GkxxxxxxxxxxXBsKu/xxxttttwj5bXSssd5gUvSXs4vrpuhZwelEo804
```
(specifically, the token printed to the log)
Restart openHAB. The authentification of the freebox shall go on automatically.
Optionally, you can log in your freebox admin console to allocate needed rights to openHAB.
## Item Configuration
Here are the list of items you can put in your .items file in order to use binding functionalities :
```
Group gFreebox
Group gfbSys "System" (gFreebox)
Group gfbCS "Connection Status" (gFreebox)
Group gfbCalls "Calls" (gFreebox)
Group gfbWifi "Wifi" (gFreebox)
Group gfbLCD "LCD" (gFreebox)
Group gfbXdsl "xDsl Status" (gFreebox)
// Wifi Entries
Switch freebox_wifi "Wifi" (gfbWifi) {freebox="wifi_status", autoupdate="false"}
// (from v1.7) FTP server, UPnP AV, AirMedia and Windows sharings status
Switch FreeboxFTP "FTP" (gFreebox) {freebox="ftp_status", autoupdate="false"}
Switch FreeboxUPnPAV "UPnP AV" (gFreebox) {freebox="upnpav_status", autoupdate="false"}
Switch FreeboxAirMedia "AirMedia" (gFreebox) {freebox="airmedia_status", autoupdate="false"}
Switch FreeboxSambaFiles "Partage fichiers Win" (gFreebox) {freebox="sambafileshare_status", autoupdate="false"}
Switch FreeboxSambaPrinters "Partage imprimantes Win" (gFreebox) {freebox="sambaprintershare_status", autoupdate="false"}
// Call Entries
String freebox_call_lastnum "Last call [%s]" (gfbCalls) {freebox="call_number"}
Number freebox_call_duration "Duration [%d sec]" (gfbCalls) {freebox="call_duration"}
DateTime freebox_call_ts "TimeStamp [%1$tA, %1$td.%1$tm.%1$tY]" (gfbCalls) {freebox="call_timestamp"}
String freebox_call_status "Status [%s]" (gfbCalls) {freebox="call_status"}
// Connection Status Items
String freebox_cs_state "State [%s]" (gfbCS) {freebox="line_status"}
String freebox_cs_ipv4 "ipV4 [%s]" (gfbCS) {freebox="ipv4"}
Number freebox_cs_rate_up "Upload rate [%d b/s]" (gfbCS) {freebox="rate_up"}
Number freebox_cs_rate_down "Download rate [%d b/s]" (gfbCS) {freebox="rate_down"}
Number freebox_cs_bytes_up "Uploaded [%d bytes]" (gfbCS) {freebox="bytes_up"}
Number freebox_cs_bytes_down "Downloaded [%d bytes]" (gfbCS) {freebox="bytes_down"}
// System Items
String freebox_sys_firmware_version "Version [%s]" (gfbSys) {freebox="fw_version"}
Switch freebox_reboot "Reboot freebox" (gfbSys) {freebox="reboot"}
Number freebox_sys_uptime "Uptime [%d sec]" (gfbSys) {freebox="uptime"}
Number freebox_sys_temp_cpum "Temp cpum [%d °C]" <temperature> (gfbSys) {freebox="temp_cpum"}
Number freebox_sys_temp_cpub "Temp cpub [%d °C]" <temperature> (gfbSys) {freebox="temp_cpub"}
Number freebox_sys_temp_sw "Temp sw [%d °C]" <temperature> (gfbSys) {freebox="temp_sw"}
Number freebox_sys_fan_rpm "Fan [%d rpm]" <fan> (gfbSys) {freebox="fan"}
// LCD Configuration Items
Number freebox_lcd_brightness "Brightness [%d %%]" (gfbLCD) {freebox="lcd_brightness"}
Number freebox_lcd_orientation "Orientation [%d °]" (gfbLCD) {freebox="lcd_orientation"}
Switch freebox_lcd_forced "LCD Forced" (gfbLCD) {freebox="lcd_forced"}
// xDSL Status Items
String freebox_xdsl_status "Status [%s]" (gfbXdsl) {freebox="xdsl_status"}
// (from v1.7) Network devices reachable status
Switch NetDevice1 "Net device (MAC)" (gFreebox) {freebox="reachable_mac/00:1B:D2:D5:97:01", autoupdate="false"}
Switch NetDevice2 "Net device (IP)" (gFreebox) {freebox="reachable_ip/192.168.0.50", autoupdate="false"}
Switch NetDevice3 "Net device (name)" (gFreebox) {freebox="reachable_name/Téléviseur", autoupdate="false"}
```
The following items are available for read/write actions:
* switch on/off wifi
* switch on/off FTP server (from v1.7)
* switch on/off UPnP AV (from v1.7)
* switch on/off AirMedia (from v1.7)
* switch on/off Windows file sharing (from v1.7)
* switch on/off Windows printer sharing (from v1.7)
* switch to reboot the freebox
* switch to force lcd orientation
* lcd orientation to use (0,90,180,270).
* lcd brightness (0 to 100)

View File

@ -1,106 +0,0 @@
---
id: freeswitch
label: FreeSWITCH
title: FreeSWITCH - Bindings
type: binding
description: "The FreeSWITCH Binding connects to a FreeSWITCH instance and can report on current active calls as well as show unread voicemails and if a MWI is on."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.freeswitch/README.md
since: 1x
logo: images/addons/freeswitch.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
## FreeSWITCH Binding
The FreeSWITCH Binding connects to a FreeSWITCH instance and can report on current active calls as well as show unread voicemails and if a MWI is on.
You can also send any command to FreeSWITCH, see [Freeswitch Commands](http://wiki.freeswitch.org/wiki/Mod_commands) for more info.
## Prerequisites
Make sure you have the FreeSWITCH ESL module listing on a public port, your event_socket.conf.xml in FreeSWITCH should look something like:
```xml
<configuration name="event_socket.conf" description="Socket Client">
<settings>
<param name="nat-map" value="false"/>
<param name="listen-ip" value="0.0.0.0"/>
<param name="listen-port" value="8021"/>
<param name="password" value="ClueCon"/>
<!--<param name="apply-inbound-acl" value="lan"/>-->
</settings>
</configuration>
```
## Binding Configuration
This binding can be configured in the file `services/freeswitch.cfg`.
| Property | Default | Required | Description |
|----------|---------|:--------:|-------------|
| host | | Yes | host name or IP address of FreeSWITCH host |
| port | | Yes | port number as specified in `listen-port` from `event_socket.conf.xml` described earlier |
| password | | Yes | password as specified in `password` from `event_socket.conf.xml` described earlier |
## Item Configuration
This is a sample item entry for non filtered calls, any inbound call will be considered active, this is sufficient for most uses:
```
Switch Incoming_Call "Home Phone" (Phone) { freeswitch="active" }
Call Active_Call "Connected [to %1$s from %2$s]" (Phone) { freeswitch="active" }
String Active_Call_ID "Caller ID [%s]" (Phone) { freeswitch="active" }
```
This item is for a filtered call, only calls with an inbound direction and a destination number of 5555551212 will be matched:
```
Switch Incoming_Call "Home Phone" (Phone) { freeswitch="active:Call-Direction:inbound,Caller-Destination-Number:5555551212" }
Call Active_Call "Connected [to %1$s from %2$s]" (Phone) { freeswitch="active:Call-Direction:inbound,Caller-Destination-Number:5555551212" }
String Active_Call_ID "Caller ID [%s]" (Phone) { freeswitch="active:Call-Direction:inbound,Caller-Destination-Number:5555551212" }
```
For messages and message waiting indicator (MWI) the voice mail account is specified:
```
Number Voice_Messages "Unread Messages [%d]" (Phone) {freeswitch="message_waiting:1000@pbx.mydomain.com"}
```
To send API commands to FreeSWITCH add a simple api item:
```
String FS_API "FS API [%s]" (phone) {freeswitch="api"}
```
There are three supported protocol types, "active", "message_waiting" and "api"
* Active types:
* Filtered
* calls can be filtered on freeswitch event headers, multiple headers can be used, all must match.
* filters format is "Key:Value,Key:Value,...."
* Ex: `Switch Incoming_Call "Home Phone" (Phone) {freeswitch="active:Call-Direction:inbound,Caller-Destination-Number:5555551212"}`
* see [Freesiwtch Events](http://wiki.freeswitch.org/wiki/Event_List) for more info on event headers
* Non Filtered
* if no filter is given any inbound call will be used
* for multiple active calls the most recent active call's callerid will be displayed
Ex: `Incoming_Call "Home Phone" (Phone) {freeswitch="active}`
* Item Types
* Switch will be on for an active call, off if no active calls
* Call, this shows the destination and origination numbers
* Text, this shows the Caller-ID fields (name : number) if sent by caller (regional specific I would imagine)
* Message_Waiting types:
* Number, this shows the number of unread voice mails
* Switch, on if MWI (message indicator) is yes.
* API types
* String , sending a string to this will send a command to FS, the result will be sent back to this item as a comma seperated list
* API types are really meant to be used in rules, an example might be:
* `sendCommand(FS_API,"conference test-conf dial sofia/gateway/myvoipprovider/5555551212 5551212 5551212")`
* This would tell freeswitch to dial 5555551212 into a conference named "test-conf"
* the conference info would be returned as a update to the item.
* see [Freeswitch Commands](http://wiki.freeswitch.org/wiki/Mod_commands) for more info.
`message_waiting` takes an extra argument which is the mailbox we want to check against. This is usually the extention@domain

View File

@ -1,135 +0,0 @@
---
id: fritzaha
label: Fritz AHA
title: Fritz AHA - Bindings
type: binding
description: "This binding provides access to AVM Home Automation devices, such as the Fritz!DECT 200 connected to a Fritz!Box or the Fritz!Powerline 546E. It is designed to allow for multiple hosts, for instance using both a Fritz!Box and a Fritz!Powerline."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.fritzaha/README.md
since: 1x
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Fritz AHA Binding
This binding provides access to AVM Home Automation devices, such as the Fritz!DECT 200 connected to a Fritz!Box or the Fritz!Powerline 546E. It is designed to allow for multiple hosts, for instance using both a Fritz!Box and a Fritz!Powerline.
[![Fritz AHA](http://img.youtube.com/vi/qYrpPrLY868/0.jpg)](http://www.youtube.com/watch?v=qYrpPrLY868)
The binding interfaces with hosts using a choice of two different interfaces, the query script used in the Fritz!OS UI and a webservice designed for interfacing with external applications.
There is also a binding specifically for openHAB 2 [here](http://docs.openhab.org/addons/bindings/avmfritz/readme.html).
## Binding Configuration
The Fritz AHA Binding supports multiple hosts. Each host must be assigned a Host ID in `services/fritzaha.cfg`. Furthermore, connection data must be provided. For a standard Fritz!Box home gateway setup, the default settings are sufficient and only a password needs to be supplied.
To take advantage of SSL encryption, you need to add the SSL certificate to your Java keystore.
| Property | Default | Required | Description |
|----------|---------|:--------:|-------------|
| refresh | 10000 | No | refresh interval in milliseconds |
| `<hostID>`.host | fritz.box | No | host name of the FritzBox |
| `<hostID>`.port | 80 | No | port number on which to reach the FritzBox |
| `<hostID>`.protocol | http | No | protocol with which to communicate |
| `<hostID>`.password| | Yes | your FritzBox password |
Where `<hostID>` is up to user choice.
## Item Configuration
### Webservice Binding Configuration
The preferred way for external applications to interface with AVM home automation devices is a webservice available since Fritz!OS 5.53. It provides an interface with comparatively low latency for switching and power/energy metering. Voltage and current measurements are not available and the refresh interval is slower than that of the Fritz!OS web interface (unless the web interface is accessed simultaneously, e.g. using the query script support of the binding or a browser).
Using the webservice, items are accessed using their AIN/MAC address, which is written on the back of the device. The space in Fritz!DECT AINs is not necessary, the colons in Fritz!Powerline MAC addresses are. If a MAC addressed is used as an AIN, commas must be used as seperators to prevent ambiguity from the use of colons in the MAC address.
### Switches
Switches can be addressed by simply specifying the host and the device:
```
fritzaha="<hostID>,<ain>"
```
where `<hostID>` is the ID assigned in the `services/fritzaha.cfg` file and `<ain>` is the actor ID number as listed on the device.
For example:
```
fritzaha="fritzbox,012345678910"
fritzaha="fritzpowerline,01:23:45:67:89:AB"
```
describe the switch on a Fritz!DECT device with AIN 01234 5678910 connected to the host "fritzbox" and the switch on the Fritz!Powerline device with MAC address 01:23:45:67:89:AB and host ID "fritzpowerline".
### Power/Energy Meters
Meters for current voltage, current and power are available as number items. The syntax is
```
fritzaha="<hostID>,<ain>,<meterType>"
```
where `<hostID>` is the ID assigned in the `services/fritzaha.cfg` file, `<ain>` is the actor ID number as listed on the device and `<meterType>` is the type of meter (either `power` or `energy`).
Example:
```
fritzaha="fritzbox,012345678910,power"
fritzaha="fritzpowerline,01:23:45:67:89:AB,energy"
```
### Temperature sensor
Temperature is available as a new meter type to number items.
Example:
```
fritzaha="fritzbox,012345678910,temperature"
```
## Query Script Binding Configuration
The Query script is part of the Fritz!OS UI and provides lots of information at fast refresh intervals. However, it is not intended for use with external applications and occupies the host for a long time (often more than a second per request), making it ill-suited for large amounts parallel requests. Furthermore, energy consumption is only available pre-formatted for Fritz!OS use and therefore not supported.
Using the query script, items are accessed using their internal ID, which can be obtained from the URLs used in the Fritz!OS UI. They are much shorter than AINs, allowing the binding to automatically identify them as such.
### Switches
Switches can be addressed by simply specifying the host and the device:
```
fritzaha="<hostID>,<deviceID>"
```
where `<hostID>` is the ID assigned in the `services/fritzaha.cfg` file and `<deviceID>` is the internal ID number of the device as assigned by the host.
For example:
```
fritzaha="fritzbox,16"
fritzaha="fritzpowerline,1000"
```
describes the switch on a Fritz!DECT device with internal ID 16 connected to the host "fritzbox" and the switch on a Fritz!Powerline device with host ID fritzpowerline and internal ID 1000.
### Voltage/Current/Power Meters
Meters for current voltage, current and power are available as number items. The syntax is
```
fritzaha="<hostID>,<deviceID>,<meterType>"
```
where `<hostID>` is the ID assigned in the openhab.cfg file, `<deviceID>` is the internal ID number of the device as assigned by the host and `<meterType>` is the type of meter (either voltage, current or power).
Example:
```
fritzaha="fritzpowerline,1000,voltage"
fritzaha="fritzbox,16,power"
```

View File

@ -1,71 +0,0 @@
---
id: fritzbox
label: Fritz!Box
title: Fritz!Box - Bindings
type: binding
description: "This binding can be configured in the `services/fritzbox.cfg` file."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.fritzbox/README.md
since: 1x
logo: images/addons/fritzbox.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Fritz!Box Binding
## Binding Configuration
This binding can be configured in the `services/fritzbox.cfg` file.
| Property | Default | Required | Description |
|----------|---------|:--------:|-------------|
| ip | | Yes | IP address of your Fritz!Box |
| password | | Yes | Password to your Fritz!Box |
| user | | when user management is enabled | User of your Fritz!Box. It is a good practice to create an additional user for openHAB. |
## Prepare your Fritzbox
* Enable Telnet ([Link](http://www.wehavemorefun.de/fritzbox/Starten_von_telnetd))<BR>
* Activate User Login: FRITZ!Box-Benutzer -> Anmeldung im Heimnetz -> Anmeldung mit dem FRITZ!Box-Kennwort
## Item Configuration
The format of the binding configuration is simple and looks like this:
```
fritzbox="<eventType>"
```
where `<eventType>` is one of the following values:
- inbound - for incoming calls
- outbound - for placed calls
- active - for currently active calls
Fritz!Box item configurations are valid on Switch and Call items.
Switch items with this binding will receive an ON update event at the start and an OFF update event at the end (a connection marks the end for inbound and outbound types, only active type will be ON for connected calls).
Call items will receive the external and the internal phone number in form of a string value as a status update. At the end of the event, an empty Call item which contains empty strings is sent as a status update.
As a result, your lines in the items file might look like the following:
```
Switch Incoming_Call "Ringing" (Phone) { fritzbox="inbound" }
Call Active_Call "Connected to [%1$s from %2$s]" (Phone) { fritzbox="active" }
Call Incoming_Call_No "Caller No. [%2$s]" (Phone) { fritzbox="inbound" }
```
## Switching WIFI and DECT
The following items switch DECT, WIFI, GUEST_WIFI and the answering machine 0 (default TAM):
```
Switch DECT {fritzbox="dect"}
Switch WIFI {fritzbox="wlan"}
Switch GWIFI {fritzbox="guestwlan"} (Version 1.7.0)
Switch TAM0 {fritzbox="tam0"}
```

View File

@ -1,173 +0,0 @@
---
id: fritzboxtr064
label: Fritzbox (using TR064 protocol)
title: Fritzbox (using TR064 protocol) - Bindings
type: binding
description: "This is a binding for communication with AVM Fritz!Box using SOAP requests (TR064 protocol)."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.fritzboxtr064/README.md
since: 1x
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Fritzbox Binding (using TR064 protocol)
This is a binding for communication with AVM Fritz!Box using SOAP requests (TR064 protocol).
It has been tested on:
* 7270
* 7330SL (v6.54)
* 7360SL (v6.30)
* 7390
* 6360 Cable (v6.04)
* 7490
* 7590 (v6.92)
## Features
* detect if MAC is online in network (presence detection)
* switching on/off 2,4Hz Wifi, 5GHz Wifi and Guest Wifi (if any)
* getting external IP address of fbox
* getting fbox model name
* call monitor
* Switch Item: Receives "ON" state when call is incoming
* Call Items: Shows external an internal number for incoming/outgoing calls
* Resolve external call number to phonebook name
* enabling/disabling telephone answering machines (TAMs)
* enabling/disabling of call deflection
* getting new messages per TAM
* getting missed calls for the last x days
* getting DSL/WAN statistics for monitoring connection quality
## Prerequisites
* Enable TR064: In the webui goto "Heimnetz" - "Netzwerkeinstellungen": enable option "Zugriff für Anwendungen zulassen" (enabled by default)
* Only if you want to use the call monitor feature (items starting with callmonitor_...), enable the interface by dialing #96\*5\* You may disable it again by dialing #96\*4\*
## Binding Configuration
This binding can be configured in the file `services/fritzboxtr064.cfg`.
| Property | Default | Required | Description |
|-------------|---------|:--------:|-------------|
| url | | Yes | URL. Either use `http://<fbox-ip>:49000` or `https://<fbox-ip>:49443` (https preferred!) |
| refresh | 60000 | No | Refresh interval in milliseconds |
| user | dslf-config | No | User Name. Only use this value if you configured a user in fbox webui/config! It is recommended to switch to authentication by username in fritzbox config and add a separate config user for this binding. |
| pass | | Yes | Password |
| phonebookid | 0 | No | PhoneBook ID if you use a different phonebook (like a Google-synced phonebook). |
## Item Configuration
```
String fboxName "FBox Model [%s]" {fritzboxtr064="modelName"}
String fboxManufacturer "FBox Manufacturer [%s]" {fritzboxtr064="manufacturerName"}
String fboxSerial "FBox Serial [%s]" {fritzboxtr064="serialNumber"}
String fboxVersion "FBox Version [%s]" {fritzboxtr064="softwareVersion"}
// get wan ip if FritzBox establishes the internet connection (e. g. via DSL)
String fboxWanIP "FBox WAN IP [%s]" {fritzboxtr064="wanip"}
// get wan ip if FritzBox uses internet connection of external router
String fboxWanIPExternal "FBox external WAN IP [%s]" {fritzboxtr064="externalWanip"}
Switch fboxWifi24 "2,4GHz Wifi" {fritzboxtr064="wifi24Switch"}
Switch fboxWifi50 "5,0GHz Wifi" {fritzboxtr064="wifi50Switch"}
Switch fboxGuestWifi "Guest Wifi" {fritzboxtr064="wifiGuestSwitch"}
Contact cFboxMacOnline "Presence (WiFi) [%s]" {fritzboxtr064="maconline:11-11-11-11-11-11" }
// WAN statistics
String fboxWanAccessType "FBox WAN access type [%s]" {fritzboxtr064="wanWANAccessType"}
Number fboxWanLayer1UpstreamMaxBitRate "FBox WAN us max bit rate [%s]" {fritzboxtr064="wanLayer1UpstreamMaxBitRate"}
Number fboxWanLayer1DownstreamMaxBitRate "FBox WAN ds max bit rate [%s]" {fritzboxtr064="wanLayer1DownstreamMaxBitRate"}
String fboxWanPhysicalLinkStatus "FBox WAN physical link status [%s]" {fritzboxtr064="wanPhysicalLinkStatus"}
Number fboxWanTotalBytesSent "WAN total bytes sent [%s]" {fritzboxtr064="wanTotalBytesSent"}
Number fboxWanTotalBytesReceived "WAN total bytes received [%s]" {fritzboxtr064="wanTotalBytesReceived"}
// DSL statistics
Contact fboxDslEnable "FBox DSL Enable [%s]" {fritzboxtr064="dslEnable"}
String fboxDslStatus "FBox DSL Status [%s]" {fritzboxtr064="dslStatus"}
Number fboxDslUpstreamCurrRate "DSL Upstream Current [%s mbit/s]" {fritzboxtr064="dslUpstreamCurrRate"}
Number fboxDslDownstreamCurrRate "DSL Downstream Current [%s mbit/s]" {fritzboxtr064="dslDownstreamCurrRate"}
Number fboxDslUpstreamMaxRate "DSL Upstream Max [%s mbit/s]" {fritzboxtr064="dslUpstreamMaxRate"}
Number fboxDslDownstreamMaxRate "DSL Downstream Max [%s mbit/s]" {fritzboxtr064="dslDownstreamMaxRate"}
Number fboxDslUpstreamNoiseMargin "DSL Upstream Noise Margin [%s dB*10]" {fritzboxtr064="dslUpstreamNoiseMargin"}
Number fboxDslDownstreamNoiseMargin "DSL Downstream Noise Margin [%s dB*10]" {fritzboxtr064="dslDownstreamNoiseMargin"}
Number fboxDslUpstreamAttenuation "DSL Upstream Attenuation [%s dB*10]" {fritzboxtr064="dslUpstreamAttenuation"}
Number fboxDslDownstreamAttenuation "DSL Downstream Attenuation [%s dB*10]" {fritzboxtr064="dslDownstreamAttenuation"}
Number fboxDslFECErrors "DSL FEC Errors [%s]" {fritzboxtr064="dslFECErrors"}
Number fboxDslHECErrors "DSL HEC Errors [%s]" {fritzboxtr064="dslHECErrors"}
Number fboxDslCRCErrors "DSL CRC Errors [%s]" {fritzboxtr064="dslCRCErrors"}
// only when using call monitor
Switch fboxRinging "Phone ringing [%s]" {fritzboxtr064="callmonitor_ringing" }
Switch fboxRinging_Out "Phone ringing [%s]" {fritzboxtr064="callmonitor_outgoing" }
Call fboxIncomingCall "Incoming call: [%1$s to %2$s]" {fritzboxtr064="callmonitor_ringing" }
Call fboxOutgoingCall "Outgoing call: [%1$s to %2$s]" {fritzboxtr064="callmonitor_outgoing" }
// resolve numbers to names based on phonebook
Call fboxIncomingCallResolved "Incoming call: [%1$s to %2$s]" {fritzboxtr064="callmonitor_ringing:resolveName" }
// Telephone answering machine (TAM) items
// Number after tamSwitch is ID of configured TAM, start with 0
Switch fboxTAM0Switch "Answering machine ID 0" {fritzboxtr064="tamSwitch: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
Number fboxMissedCalls "Missed Calls [%s]" {fritzboxtr064="missedCallsInDays:5"}
// Call deflection items
// Number after callDeflectionSwitch is ID of configured call deflection
// The ID count includes the entries from the "Call Blocks" page.
// If you have no "Call Blocks", the first entry on the "Call Diversions" page has ID 0.
// If you have 3 "Call Blocks", the first entry on the "Call Diversions" page has ID 3.
Switch fboxCD0Switch "Call Deflection ID 0" {fritzboxtr064="callDeflectionSwitch:0"}
```
## Examples and Hints
### Sitemap
For the "Call" items use "Text" in your sitemap
### Map for Presence Detection
Use a map for presence detection item:
Create file `transform/presence.map` and add:
```
OPEN=present
CLOSED=not present
NULL=unknown
```
Now, as item configuration use (the addon "Map Transformation" must be installed):
```
Contact cFboxMacOnline "Presence (Wifi) [MAP(presence.map):%s]" <presence> {fritzboxtr064="maconline:11-22-33-44-55-66 }
```
### Rules
If you need the caller name (resolved from the fritzbox phonebook) in a rule, extract it like this:
```
rule "Phone is ringing"
when
// fboxRinging is a switch item which switches to ON if call is detected
Item fboxRinging changed from OFF to ON
then
logInfo("Anrufermeldung", "Generating caller name message...")
val incCall = fboxIncomingCall.state as StringListType
val callerNumber = incCall.getValue(1)
val incCallResolved = fboxIncomingCallResolved.state as StringListType
val callerName = incCallResolved.getValue(1)
// do something with callerName
end
```

View File

@ -1,89 +0,0 @@
---
id: fronius
label: Fronius
title: Fronius - Bindings
type: binding
description: "This binding uses the [Fronius Solar API V1](http://www.fronius.com/en/photovoltaics/products/all-products/system-monitoring/open-interfaces/fronius-solar-api-json-) to obtain data from a Fronius devices."
since: 2x
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Fronius Binding
This binding uses the [Fronius Solar API V1](http://www.fronius.com/en/photovoltaics/products/all-products/system-monitoring/open-interfaces/fronius-solar-api-json-) to obtain data from a Fronius devices.
## Supported Things
Support Fronius Galvo, Fronius Symo inverters and other Fronius inverters in combination with the Fronius Datamanager 1.0 / 2.0 or Fronius Datalogger.
You can add multiple inverters that depend on the same datalogger with different device ids. ( Default 1 )
## Discovery
There is no discovery implemented. You have to create your things manually and specify the IP of the Datalogger and the DeviceId.
## Binding Configuration
The binding has no configuration options, all configuration is done at Thing level.
## Thing Configuration
The thing has a few configuration parameters:
| Parameter | Description |
|-----------|------------------------------------------------------------------------- |
| Ip | the ip-address of your Fronius Datalogger |
| DeviceId | The identifier of your device ( Default: 1) |
| refresh | Refresh interval in seconds |
## Channels
| Channel ID | Item Type | Description |
|------------|--------------|------------------------- |
| day_energy | Number | Energy generated on current day |
| pac | Number | AC powery |
| total_energy | Number | Energy generated overall |
| year_energy | Number | Energy generated in current year |
| fac | Number | AC frequency |
| iac | Number | AC current |
| idc | Number | DC current |
| uac | Number | AC voltage |
| udc | Number | DC voltage |
| pGrid | Number | Power + from grid, - to grid |
| pLoad | Number | Power + generator, - consumer |
| pAkku | Number | Power + charge, - discharge |
## Full Example
demo.things:
```
Bridge fronius:bridge:mybridge [hostname="192.168.66.148",refreshInterval=5] {
Thing powerinverter myinverter [ deviceId=1 ]
}
```
demo.items:
```
Number AC_Powery { channel="fronius:powerinverter:mybridge:myinverter:inverterdatachannelpac" }
Number Day_Energy { channel="fronius:powerinverter:mybridge:myinverter:inverterdatachanneldayenergy" }
Number Total_Energy { channel="fronius:powerinverter:mybridge:myinverter:inverterdatachanneltotal" }
Number Year_Energy { channel="fronius:powerinverter:mybridge:myinverter:inverterdatachannelyear" }
Number FAC { channel="fronius:powerinverter:mybridge:myinverter:inverterdatachannelfac" }
Number IAC { channel="fronius:powerinverter:mybridge:myinverter:inverterdatachanneliac" }
Number IDC { channel="fronius:powerinverter:mybridge:myinverter:inverterdatachannelidc" }
Number UAC { channel="fronius:powerinverter:mybridge:myinverter:inverterdatachanneluac" }
Number UDC { channel="fronius:powerinverter:mybridge:myinverter:inverterdatachanneludc" }
Number Grid_Power { channel="fronius:powerinverter:mybridge:myinverter:powerflowchannelpgrid" }
Number Load_Power { channel="fronius:powerinverter:mybridge:myinverter:powerflowchannelpload" }
Number Load_Power { channel="fronius:powerinverter:mybridge:myinverter:powerflowchannelpload" }
Number Load_Power { channel="fronius:powerinverter:mybridge:myinverter:powerflowchannelpload" }
Number Battery_Power { channel="fronius:powerinverter:mybridge:myinverter:powerflowchannelpakku" }
```
Tested with a Fronius Symo 8.2-3-M

View File

@ -1,145 +0,0 @@
---
id: frontiersiliconradio
label: Frontier Silicon Radio
title: Frontier Silicon Radio - Bindings
type: binding
description: "This binding is for internet radios based on the [Frontier Silicon chipset](http://www.frontier-silicon.com/digital-radio-solutions)."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.frontiersiliconradio/README.md
since: 1x
logo: images/addons/frontiersiliconradio.png
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# Frontier Silicon Radio Binding
This binding is for internet radios based on the [Frontier Silicon chipset](http://www.frontier-silicon.com/digital-radio-solutions).
This binding has been developed and tested with the [Hama IR110](https://de.hama.com/00054823/hama-internetradio-ir110) and [Medion MD87180](https://www.medion.com/de/service/start/_product.php?msn=50047825&gid=00) internet radios.
The [MEDION® P85040 (MD 86988)](http://medion.scene7.com/is/image/Medion/50046868_PIC-Q?$m$), [MEDION® P85035 (MD 87090)](https://medion.scene7.com/is/image/Medion/50048568_PIC-Q?$m$), [Pinell Supersound II](http://www.pinell.no/en/products/pinell-supersound-ii-white//), [Silvercrest SIRD 14 C1](http://www.lidl.de/de/silvercrest-stereo-internetradio-sird-14-c1/p208310), [Revo Superconnect] (http://revo.co.uk/shop/superconnect/), [Ruark R2] (http://www.ruarkaudio.com/products/r2-overview), [Technisat DigiRadio 450] (https://www.technisat.com/en_XX/DigitRadio-450/352-10996-9589/) and the [Hama DIR3110](https://de.hama.com/00054824/hama-digitalradio-dir3110-internetradio-dab+-fm-app-steuerung) are also supported.
[<img src="http://internetradio.medion.com/images/md87180_small.jpg" alt="MEDION LIFE P85044 (MD 87180)" height="160">](http://internetradio.medion.com/)
[<img src="https://de.hama.com/bilder/00054/abb/00054823abb.jpg" alt="Hama Internetradio IR110" height="180">](https://de.hama.com/00054823/hama-internetradio-ir110)
[<img src="http://internetradio.medion.com/images/md86988_small.jpg" alt="MEDION LIFE P85040 (MD 86988)" height="160">](http://internetradio.medion.com/)
[<img src="http://www.pinell.no/sitefiles/site8/shop/pinell-supersound-ii-white3.jpg" alt="Pinell Supersound II" height="100">](http://pinell.no/en/)
[<img src="https://www.lidl.de/media/product/0/2/3/3/5/4/5/silvercrest-stereo-internetradio-sird-14-c2-regular--6.jpg" alt="Silvercrest SIRD 14 C1" height="180">](http://www.lidl.de/de/dab-/-internetradios/c15246)
[<img src="https://assets25.technisat.com/assets/derivates/25/666/149/$v3/DV025_ppic_0000+4963_020300_001.jpg" alt="Technisat DigitRadio 450" height="120">](https://www.technisat.com/en_XX/DigitRadio-450/352-10996-9589/)
[<img src="http://revo.co.uk/assets/2013/10/H2_WNT_BLK_SUPERHERO2-486x395.jpg" alt="Revo Superconnect" height="180">](http://revo.co.uk/shop/superconnect/)
![Ruark R2](http://www.ruarkaudio.com/images/finishes-r2-walnut.jpg)
You can easily check if your IP radio is supported:
1. Figure out the *IP* of your radio (e.g. by looking it up in your router)
2. Figure out the *PIN* that is configured for the radio (somewhere hidden in the radio's on-screen menu); or try the default pin `1234`
3. Go to your web browser and enter: `http://<IP>/fsapi/CREATE_SESSION?pin=<PIN>`
4. If the response is similar to `FS_OK 6836164442`, your radio is most likely compatible with this binding
5. If you radio works with this binding, please add it to the list above by [Editing this page](Frontier-Silicon-Radio-Binding/_edit)!
There is also a binding specifically for openHAB 2 [here](http://docs.openhab.org/addons/bindings/fsinternetradio/readme.html).
## Binding Configuration
This binding can be configured in the `services/frontiersiliconradio.cfg` file.
| Property | Default | Required | Description |
|----------|---------|:--------:|-------------|
| radio.host | | Yes | Hostname/IP of the radio to control |
| radio.pin | 1234 | No | PIN access code of the radio |
| radio.port | 80 | No | Port number of the radio to control |
| refreshInterval | 60000 | No | The number of milliseconds between checks of the radio |
| cachePeriod | 0 | No | Cache the state for `cachePeriod` minutes so only changes are posted (0 = disabled, 60 = recommended) |
### Notes
* `radio` is an identifier that can be replaced with your custom identifier, e.g. `bedroom` or `radio-kitchen`. This allows to use the binding also for multiple radios.
* The `pin` may vary from radio to radio, you can typically look it up in the radio settings.
* `refreshInterval` and `cachePeriod` are global settings that apply to all radios.
## Item Configuration
There are different types of item bindings, all of them are qualified with the device's identifier used in the binding configuration:
```
frontiersiliconradio="<identifier>:<property>"
```
Example for the power state of a device with identifier `radio`:
```
Switch RadioPower "Radio Power" { frontiersiliconradio="radio:POWER" }
```
A list of all properties and their possible item types is given below:
| item | item type | purpose | changeable |
| --- | --- | --- | --- |
| `POWER` | Switch | power state | yes
| `MODE` | Number | radio mode (details about mapping below) | yes
| `VOLUME` | Number | volume | yes
| `MUTE` | Swtich | mute | yes
| `PLAYINFONAME` | String | title of current playback, e.g. radio station | no
| `PLAYINFOTEXT` | String | additional information, e.g. current song | no
| `PRESET` | Number | select preset, e.g. configured radio stations | yes
The *radio mode* property is just a number that specifies the radio mode which may differ for each radio. This is why there is no fixed mapping implemented. For radios listed above, the mapping is as follows (please [add your radio mapping](https://github.com/openhab/openhab1-addons/edit/master/bundles/binding/org.openhab.binding.frontiersiliconradio/README.md), if it differs!):
| radio mode | Hama IR110 | Medion MD 87180/87090 | Medion MD 86988| Pinell Supersound II| Silvercrest SIRD 14 C1 | Revo Superconnect | Hama DIR3110
| --- | --- | --- | --- | --- | --- | --- | ---
| 0 | Internet Radio | Internet Radio | Internet Radio | Internet Radio | Internet Radio | Internet Radio | Internet Radio
| 1 | Spotify | Music Player (USB, LAN) | Music Player | Spotify | Spotify | Spotify | Spotify
| 2 | Player | DAB Radio | FM Radio | Player | --- | --- | Player
| 3 | AUX in | FM Radio | AUX in | DAB Radio | Music Player | Music Player | DAB Radio
| 4 | - | AUX in | - | FM Radio | DAB Radio | DAB Radio | FM Radio
| 5 | - | - | - | AUX in | FM Radio | FM Radio | AUX in
| 6 | - | - | - | - | AUX in | AUX in | -
| 7 | - | - | - | - | - | Bluetooth | -
## Example
### Items
```
Switch RadioPower "Radio Power" (gRadio) { frontiersiliconradio="radio:POWER" }
Number RadioMode "Radio Mode [%d]" (gRadio) { frontiersiliconradio="radio:MODE" }
Switch RadioMute "Radio Mute" (gRadio) { frontiersiliconradio="radio:MUTE" }
Number RadioVolDimmer "Radio Volume [%d %%]" (gRadio) { frontiersiliconradio="radio:VOLUME" }
String RadioPlayInfoName "Play Info Name [%s]" (gRadio) { frontiersiliconradio="radio:PLAYINFONAME" }
String RadioPlayInfoText "Play Info Text [%s]" (gRadio) { frontiersiliconradio="radio:PLAYINFOTEXT" }
Number RadioPreset "Preset" (gRadio) { frontiersiliconradio="radio:PRESET" }
```
### Sitemap
Presets and mode are radio-specific, this is why their mapping is specified here.
```
Frame label="Radio Control" {
Switch item=RadioPower
Selection visibility=[RadioPower==ON] item=RadioPreset mappings=[0="1Live", 1="WDR2", 2="SWR3"]
Selection visibility=[RadioPower==ON] item=RadioMode mappings=[0="Internet Radio", 1="Spotify", 2="Player", 3="AUX IN"]
Slider visibility=[RadioPower==ON] item=RadioVolDimmer
Switch visibility=[RadioPower==ON] item=RadioMute
Text visibility=[RadioPower==ON] item=RadioPlayInfoName
Text visibility=[RadioPower==ON] item=RadioPlayInfoText
}
```
## Developer Info
If you would like to extend this binding and contribute further functionality, here is some technical information about it. The communication with the radio is realized via simple HTTP requests. Unfortunately, there is no official documentation of the API for the frontier silicon chipset, but there are some sources around the internet ([flammy/fsapi on github](https://github.com/flammy/fsapi/blob/master/FSAPI.md), for example). Until now, only the following requests are implemented:
* netRemote.sys.power
* netRemote.sys.mode
* netRemote.sys.audio.volume
* netRemote.sys.audio.mute
* netRemote.nav.action.selectPreset
* netRemote.play.info.text
* netRemote.play.info.name
If you like to add further actions, have a look at [FrontierSiliconRadio.java](https://github.com/openhab/openhab/blob/master/bundles/binding/org.openhab.binding.frontiersiliconradio/src/main/java/org/openhab/binding/frontiersiliconradio/internal/FrontierSiliconRadio.java).

View File

@ -1,62 +0,0 @@
---
id: fs20
label: FS20
title: FS20 - Bindings
type: binding
description: "This binding enables support of sending and receiving FS20 messages via the CUL transport. You will need CULLite or similiar device from busware.de. This device needs to be flashed with the latest culfw firmware from culfw.de."
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/binding/org.openhab.binding.fs20/README.md
since: 1x
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
### FS20 Binding
This binding enables support of sending and receiving FS20 messages via the CUL transport. You will need CULLite or similiar device from busware.de. This device needs to be flashed with the latest culfw firmware from culfw.de.
## Binding Configuration
This binding can be configured in the `services/fs20.cfg` file.
| Property | Default | Required | Description |
|----------|---------|:--------:|-------------|
| device | | Yes | in the form `serial:<device>`, where `<device>` is a local serial port, or<br/> `network:<host>:<port>`, where `<host>` is the host name or IP address and `<port>` is the port number. The `network` option works with ser2net from a tuxnet device |
| baudrate | | No | one of 75, 110, 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 |
| parity | | No | one of EVEN, ODD, MARK, NONE, SPACE |
When using a serial port, you may need to add `-Dgnu.io.rxtx.SerialPorts=/dev/ttyACM0` in your server startup. Please consult the [forum](https://community.openhab.org) for the latest information.
You may also need to add the `openhab` user to the `dialout` group.
To use a networked CUL device for FS20 from ser2net, this line in `/etc/ser2net.conf` on the remote `<host>` will publish the serial interface (replace /dev/ttySP1 with whatever is appropriate):
```
3333:raw:0:/dev/ttySP1:38400 8DATABITS NONE 1STOPBIT
```
From the above, your `device` property would be `network:<host>:3333`.
## Item Configuration
You can use Switch items and Dimmer items with this binding. You need to know the house address and device address of the device you want to receive messages or send messages to. To find these addresses you can start openHAB in debug mode. The CUL transport will print all out all received messages.
A sample switch configuration looks like this
```
Switch WallSwitch1 "Wandschalter 1" { fs20="C04B00" }
```
where `C04B` is the house address and `00` the device address. If you want to control switches or dimmers you can simply create you own house and device address. You can set such devices in a pairing mode and they will react to the first message they receive.
### Coming from FHEM?
In the `fhem.cfg` you find such statements:
```
define AmbiLight FS20 c04b 01
```
Just write the last "words" together and you have the full address you need for your item (see above).

View File

@ -1,130 +0,0 @@
---
id: fsinternetradio
label: FS Internet Radio
title: FS Internet Radio - Bindings
type: binding
description: "This binding integrates internet radios based on the [Frontier Silicon chipset](http://www.frontier-silicon.com/)."
since: 2x
logo: images/addons/fsinternetradio.png
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# FS Internet Radio Binding
This binding integrates internet radios based on the [Frontier Silicon chipset](http://www.frontier-silicon.com/).
## Supported Things
Successfully tested are internet radios:
* [Hama IR100](https://de.hama.com/00054823/hama-internetradio-ir110)
* [Medion MD87180, MD86988, MD86955](http://internetradio.medion.com/)
* [Silvercrest SMRS18A1, SMRS30A1, SMRS35A1](http://www.silvercrest-multiroom.de/en/products/stereo-internet-radio/)
* [Roberts Stream 83i and 93i](https://www.robertsradio.com/uk/products/radio/smart-radio/)
* [Auna Connect 150](https://www.auna.de/Radios/Internetradios/)
* [TechniSat DIGITRADIO 350 IR and 850](https://www.technisat.com/en_XX/DAB+-Radios-with-Internetradio/352-10996/)
* [TTMicro AS Pinell Supersound](http://www.ttmicro.no/radio)
* [Revo SuperConnect](https://revo.co.uk/products/)
* [Sangean WFR-28C](http://sg.sangean.com.tw/products/product_category.asp?cid=2)
* [Roku SoundBridge M1001](https://soundbridge.roku.com/soundbridge/index.php)
But in principle, all internet radios based on the [Frontier Silicon chipset](http://www.frontier-silicon.com/) should be supported because they share the same API.
So It is very likely that other internet radio models of the same manufacturers do also work.
## Community
For discussions and questions about supported radios, check out [this thread](https://community.openhab.org/t/internet-radio-i-need-your-help/2131).
## Discovery
The radios are discovered through UPnP in the local network.
If your radio is not discovered, please try to access its API via: `http://<radio-ip>/fsapi/CREATE_SESSION?pin=1234` (1234 is default pin, if you get a 403 error, check the radio menu for the correct pin).<br/>
If you get a 404 error, maybe a different port than the standard port 80 is used by your radio; try scanning the open ports of your radio.<br/>
If you get a result like `FS_OK 1902014387`, your radio is supported.
If this is the case, please [add your model to this documentation](https://github.com/eclipse/smarthome/edit/master/extensions/binding/org.eclipse.smarthome.binding.fsinternetradio/README.md) and/or provide discovery information in [this thread](https://community.openhab.org/t/internet-radio-i-need-your-help/2131).
## Binding Configuration
The binding itself does not need a configuration.
## Thing Configuration
Each radio must be configured via its ip address, port, pin, and a refresh rate.
* If the ip address is not discovered automatically, it must be manually set.
* The default port is `80` which should work for most radios.
* The default pin is `1234` for most radios, but if it does not work or if it was changed, look it up in the on-screen menu of the radio.
* The default refresh rate for the radio items is `60` seconds; `0` disables periodic refresh.
## Channels
All devices support some of the following channels:
| Channel Type ID | Item Type | Description | Access |
|-----------------|-----------|-------------|------- |
| power | Switch | Switch the radio on or off | R/W |
| volume-percent | Dimmer | Radio volume (min=0, max=100) | R/W |
| volume-absolute | Number | Radio volume (min=0, max=32) | R/W |
| mute | Switch | Mute the radio | R/W |
| mode | Number | The radio mode, e.g. FM radio, internet radio, AUX, etc. (model-specific, see list below) | R/W |
| preset | Number | Preset radio stations configured in the radio (write-only) | W |
| play-info-name | String | The name of the current radio station or track | R |
| play-info-text | String | Additional information e.g. of the current radio station | R |
The radio mode depends on the internet radio model (and its firmware version!).
This list is just an example how the mapping looks like for some of the devices, please try it out and adjust your sitemap for your particular radio.
| Radio mode | Hama IR110 | Medion MD87180 | Medion MD 86988 | Technisat DigitRadio 580 |
|------------|------------|----------------|-----------------|--------------------------|
| 0 | Internet Radio | Internet Radio | Internet Radio | Internet Radio |
| 1 | Spotify | Music Player (USB, LAN) | Music Player | Spotify |
| 2 | Player | DAB Radio | FM Radio | (not used) |
| 3 | AUX in | FM Radio | AUX in | Music Player |
| 4 | - | AUX in | - | DAB Radio |
| 5 | - | - | - | FM Radio |
| 6 | - | - | - | AUX in |
| 7 | - | - | - | CD |
| 8 | - | - | - | Bluetooth |
## Full Example
demo.things:
```
fsinternetradio:radio:radioInKitchen [ ip="192.168.0.42" ]
```
demo.items:
```
Switch RadioPower "Radio Power" { channel="fsinternetradio:radio:radioInKitchen:power" }
Switch RadioMute "Radio Mute" { channel="fsinternetradio:radio:radioInKitchen:mute" }
Dimmer RadioVolume "Radio Volume" { channel="fsinternetradio:radio:radioInKitchen:volume-percent" }
Number RadioMode "Radio Mode" { channel="fsinternetradio:radio:radioInKitchen:mode" }
Number RadioPreset "Radio Stations" { channel="fsinternetradio:radio:radioInKitchen:preset" }
String RadioInfo1 "Radio Info1" { channel="fsinternetradio:radio:radioInKitchen:play-info-name" }
String RadioInfo2 "Radio Info2" { channel="fsinternetradio:radio:radioInKitchen:play-info-text" }
```
demo.sitemap:
```
sitemap demo label="Main Menu"
{
Frame {
Switch item=RadioPower
Slider visibility=[RadioPower==ON] item=RadioVolume
Switch visibility=[RadioPower==ON] item=RadioMute
Selection visibility=[RadioPower==ON] item=RadioPreset mappings=[0="Favourit 1", 1="Favourit 2", 2="Favourit 3", 3="Favourit 4"]
Selection visibility=[RadioPower==ON] item=RadioMode mappings=[0="Internet Radio", 1="Musik Player", 2="DAB", 3="FM", 4="AUX"]
Text visibility=[RadioPower==ON] item=RadioInfo1
Text visibility=[RadioPower==ON] item=RadioInfo2
}
}
```

View File

@ -1,188 +0,0 @@
---
id: ftpupload
label: FTP Upload
title: FTP Upload - Bindings
type: binding
description: "This binding can be used to receive image files from FTP clients."
since: 2x
install: auto
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# FTP Upload Binding
This binding can be used to receive image files from FTP clients.
The binding acts as a FTP server.
Images stored on the FTP server are not saved to the file system, therefore the binding shouldn't cause any problems on flash based openHAB installations.
## Supported Things
This binding supports Things of type ```ftpupload```.
Every Thing is identified by FTP user name.
Therefore, every thing should use unique user name to login FTP server.
## Discovery
Automatic discovery is not supported.
## Binding Configuration
The binding has the following configuration options:
| Parameter | Name | Description | Required | Default value |
|-------------|--------------|------------------------------------------------------------------------------------------------------------------------|----------|---------------|
| port | TCP Port | TCP port of the FTP server | no | 2121 |
| idleTimeout | Idle timeout | The number of seconds before an inactive client is disconnected. If this value is set to 0, the idle time is disabled. | no | 60 |
## Channels
This binding currently supports the following channels:
| Channel Type ID | Item Type | Description |
|-----------------|--------------|----------------------------------------------------------------------------------------|
| image | Image | Image file received via FTP. |
When an image file is uploaded to FTP server, the binding tries to find the channel whose filename matches the uploaded image filename.
If no match is found, no channel is updated.
The filename parameter supports regular expression patterns.
See more details in the Things example.
Image channel supports following options:
| Parameter | Name | Description | Required | Default value |
|-------------|--------------|--------------------------------------------------------------------------|----------|---------------|
| filename | Filename | Filename to match received files. Supports regular expression patterns. | yes | .* |
### Trigger Channels
| Channel Type ID | Options | Description |
|-----------------|------------------------|-----------------------------------------------------|
| image-received | IMAGE_RECEIVED | Triggered when image file received from FTP client. |
When an image file is uploaded to FTP server, the binding tries to find the trigger channel whose filename matches the upload image filename.
If no match is found, no channel is updated.
The filename parameter supports regular expression patterns.
See more details in the Things example.
Trigger channels supports following options:
| Parameter | Name | Description | Required | Default value |
|-------------|--------------|--------------------------------------------------------------------------|----------|---------------|
| filename | Filename | Filename to match received files. Supports regular expression patterns. | yes | .* |
## Full Example
Things:
```
Thing ftpupload:imagereceiver:images1 [ userName="test1", password="12345" ] {
Thing ftpupload:imagereceiver:images2 [ userName="test2", password="12345" ] {
Channels:
Type image-channel : my_image1 "My Image channel 1" [
filename="test12[0-9]{2}.png" // match to filename test12xx.png, where xx can be numbers between 00-99
]
Type image-channel : my_image2 "My Image channel 2" [
filename="test.jpg"
]
Trigger String : my_image_trigger1 [
filename="test12[0-9]{2}.png"
]
Trigger String : my_image_trigger2 [
filename="test.jpg"
]
}
```
Items:
```
Image Image1 { channel="ftpupload:imagereceiver:images1:image" }
Image Image2 { channel="ftpupload:imagereceiver:images2:my_image1" }
```
Rules:
```
rule "example trigger rule 1"
when
Channel 'ftpupload:imagereceiver:images1:image-received' triggered IMAGE_RECEIVED
then
logInfo("Test","Image received")
end
rule "example trigger rule 2"
when
Channel 'ftpupload:imagereceiver:images2:my_image_trigger1' triggered IMAGE_RECEIVED
then
logInfo("Test","Image received")
end
```
Sitemap:
```
Frame label="FTP images" {
Image item=Image1
Image item=Image2
}
```
## Use case example
The binding can be used to receive images from network cameras that send images to a FTP server when motion or sound is detected.
Things:
```
Thing ftpupload:imagereceiver:garagecamera [ userName="garage", password="12345" ]
```
Items:
```
Image Garage_NetworkCamera_Motion_Image { channel="ftpupload:imagereceiver:garagecamera:image" }
```
Rules:
```
rule "example trigger rule"
when
Channel 'ftpupload:imagereceiver:garagecamera:image-received' triggered IMAGE_RECEIVED
then
logInfo("Test","Garage motion detected")
end
```
Sitemap:
```
Frame label="Garage network camera" icon="camera" {
Image item=Garage_NetworkCamera_Motion_Image
}
```
## Logging and Problem Solving
For problem solving, if binding logging is not enough, Apache FTP server logging can also be enabled by the following command in the karaf console:
```
log:set DEBUG org.apache.ftpserver
```
and set back to default level:
```
log:set DEFAULT org.apache.ftpserver
```
If you meet any problems to receive images from the network cameras, you could test connection to binding with any FTP client.
You can send image files via FTP client and thing channels should be updated accordingly.

Some files were not shown because too many files have changed in this diff Show More