[Documentation] Markdown improvements f to m (#13866)

Signed-off-by: Jerome Luckenbach <github@luckenba.ch>
This commit is contained in:
Jerome Luckenbach 2022-12-08 21:36:05 +01:00 committed by GitHub
parent 3c236b3103
commit 0e68936663
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
122 changed files with 3490 additions and 3662 deletions

View File

@ -4,16 +4,16 @@ This binding is for weather stations manufactured by [Fine Offset](http://www.fo
These weather stations are white labeled products which are re-branded by many distribution companies around the world.
Some of these brands are e.g.:
* Aercus
* Ambient Weather
* Ecowitt
* ELV
* Froggit
* Misol
* Pantech
* Sainlogic
* Steinberg Systems
* Waldbeck Halley
- Aercus
- Ambient Weather
- Ecowitt
- ELV
- Froggit
- Misol
- Pantech
- Sainlogic
- Steinberg Systems
- Waldbeck Halley
Here is a product picture of how this Weather Station looks like:
@ -75,7 +75,7 @@ In this case you have to configure a service to which the data is sent.
Please try if here the [IPObserver binding](https://www.openhab.org/addons/bindings/ipobserver/) offers an alternative.
Known weather stations not compatible with this binding:
- [WH3000](https://community.openhab.org/t/fine-offset-weather-station-binding-beta-and-discussion/134167/52?u=andy2003)
- [WH3000](https://community.openhab.org/t/fine-offset-weather-station-binding-beta-and-discussion/134167/52?u=andy2003)
## Discovery
@ -295,7 +295,7 @@ This is an example configuration for the WH2650 gateway
_weatherstation.things_:
```xtend
```java
Bridge fineoffsetweatherstation:gateway:3906700515 "Weather station" [
ip="192.168.1.42",
port="45000",
@ -310,7 +310,7 @@ Bridge fineoffsetweatherstation:gateway:3906700515 "Weather station" [
_weatherstation.items_:
```xtend
```java
Group WH25 "WH25" <Sensor> ["Sensor"]
Number SignalWH25 "Signal WH25" <QualityOfService> (WH25) ["Measurement", "Level"] { channel="fineoffsetweatherstation:sensor:3906700515:WH25:signal" }
Switch BatteryStatusWH25 "Low Battery WH25" <LowBattery> (WH25) ["Energy", "LowBattery"] { channel="fineoffsetweatherstation:sensor:3906700515:WH25:lowBattery" }

View File

@ -20,8 +20,8 @@ After buttons are initially added to flicd, an internet connection is not requir
## Discovery
* There is no automatic discovery for flicd-bridge available.
* After flicd-bridge is (manually) configured, buttons will be automatically discovered via background discovery as soon
- There is no automatic discovery for flicd-bridge available.
- After flicd-bridge is (manually) configured, buttons will be automatically discovered via background discovery as soon
as they're added with [simpleclient](https://github.com/50ButtonsEach/fliclib-linux-hci).
If they're already attached to the flicd-bridge before configuring this binding, they can be discovered by triggering an
@ -33,14 +33,14 @@ active scan.
Example for textual configuration:
```
```java
Bridge flicbutton:flicd-bridge:mybridge
```
The default host is localhost:5551 (this should be sufficient if flicd is running with default settings on the same server as openHAB).
If your flicd service is running somewhere else, specify it like this:
```
```java
Bridge flicbutton:flicd-bridge:mybridge [ hostname="<YOUR_HOSTNAME>", port=<YOUR_PORT>]
```
@ -52,7 +52,7 @@ For the button, the only config parameter is the MAC address.
Normally, no textual configuration is necessary as buttons are auto discovered as soon as the bridge is configured.
If you want to use textual configuration anyway, you can do it like this:
```
```java
Bridge flicbutton:flicd-bridge:mybridge [ hostname="<YOUR_HOSTNAME>", port=<YOUR_PORT>] {
Thing button myflic1 "<YOUR_LABEL>" [address ="<MAC_ADDRESS>"]
Thing button myflic2 "<YOUR_LABEL>" [address ="<MAC_ADDRESS>"]
@ -70,6 +70,7 @@ You're free to choose any label you like for your button.
| rawbutton | [System Trigger Channel](https://www.openhab.org/docs/developer/bindings/thing-xml.html#system-trigger-channel-types) `system.rawbutton` | Depends on the [Trigger Profile](https://www.openhab.org/docs/configuration/items.html#profiles) used | Raw Button channel that triggers `PRESSED` and `RELEASED` events, allows to use openHAB profiles or own implementations via rules to detect e.g. double clicks, long presses etc. |
| button | [System Trigger Channel](https://www.openhab.org/docs/developer/bindings/thing-xml.html#system-trigger-channel-types) `system.button` | Depends on the [Trigger Profile](https://www.openhab.org/docs/configuration/items.html#profiles) used | Button channel that is using Flic's implementation for detecting long, short or double clicks. Triggers `SHORT_PRESSED`,`DOUBLE_PRESSED` and `LONG_PRESSED` events. |
| battery-level | [System State Channel](https://www.openhab.org/docs/developer/bindings/thing-xml.html#system-state-channel-types) `system.battery-level` | Number | Represents the battery level as a percentage (0-100%).
## Example
### Initial setup
@ -92,7 +93,7 @@ You're free to choose any label you like for your button.
demo.things:
```
```java
Bridge flicbutton:flicd-bridge:local-flicd {
Thing button flic_livingroom "Yellow Button Living Room" [address = "60:13:B3:02:18:BD"]
Thing button flic_kitchen "Black Button Kitchen" [address = "B5:7E:59:78:86:9F"]
@ -101,7 +102,7 @@ Bridge flicbutton:flicd-bridge:local-flicd {
demo.items:
```
```java
Dimmer Light_LivingRoom { channel="milight:rgbLed:milight2:4:ledbrightness", channel="flicbutton:button:local-flicd:flic_livingroom:rawbutton" [profile="rawbutton-toggle-switch"], channel="flicbutton:button:local-flicd:flic_kitchen:rawbutton" [profile="rawbutton-toggle-switch"] } // We have a combined kitchen / livingroom, so we control the living room lights with switches from the living room and from the kitchen
Switch Light_Kitchen { channel="hue:group:1:kitchen-bulbs:switch", channel="flicbutton:button:local-flicd:flic_kitchen:rawbutton" [profile="rawbutton-toggle-switch"] }
```
@ -111,7 +112,7 @@ Switch Light_Kitchen { channel="hue:group:1:kitchen-bulbs:switch", channel="f
It's also possible to setup [Rules](https://www.openhab.org/docs/configuration/rules-dsl.html).
The following rules help to initially test your setup as they'll trigger log messages on incoming events.
```
```java
rule "Button rule using the button channel"
when

View File

@ -34,7 +34,6 @@ The binding automatically discovers weather stations and forecasts for nearby pl
| --------- | ---- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ |
| `fmisid` | text | ✓ | FMI Station ID. You can FMISID of see all weathers stations at [FMI web site](https://en.ilmatieteenlaitos.fi/observation-stations?p_p_id=stationlistingportlet_WAR_fmiwwwweatherportlets&p_p_lifecycle=0&p_p_state=normal&p_p_mode=view&p_p_col_id=column-4&p_p_col_count=1&_stationlistingportlet_WAR_fmiwwwweatherportlets_stationGroup=WEATHER#station-listing) | `"852678"` for Espoo Nuuksio station |
### `forecast` thing configuration
| Parameter | Type | Required | Description | Example |
@ -107,7 +106,7 @@ Please use the [Units Of Measurement](https://www.openhab.org/docs/concepts/unit
`fmi.things`:
```
```java
Thing fmiweather:observation:station_Helsinki_Kumpula "Helsinki Kumpula Observation" [fmisid="101004"]
Thing fmiweather:forecast:forecast_Paris "Paris Forecast" [location="48.864716, 2.349014"]
```
@ -144,7 +143,7 @@ for channel in observation['value']['channels']:
'"{label} [{unit}]" {{ channel="{channel_id}" }}').format(**locals()))
-->
```
```java
DateTime HelsinkiObservationTime "Observation Time [%1$tY-%1$tm-%1$tdT%1$tH:%1$tM:%1$tS]" <time> { channel="fmiweather:observation:station_Helsinki_Kumpula:current#time" }
Number:Temperature HelsinkiTemperature "Temperature [%.1f %unit%]" <temperature> { channel="fmiweather:observation:station_Helsinki_Kumpula:current#temperature" }
Number:Dimensionless HelsinkiHumidity "Humidity [%.1f %unit%]" <humidity> { channel="fmiweather:observation:station_Helsinki_Kumpula:current#humidity" }
@ -216,7 +215,7 @@ for channel in forecast['channels']:
'"{label} [{unit}]" {icon} {{ channel="{channel_id}" }}').format(**locals()))
-->
```
```java
DateTime ParisForecastNowTime "Forecast Time Now [%1$tY-%1$tm-%1$tdT%1$tH:%1$tM:%1$tS]" <time> { channel="fmiweather:forecast:forecast_Paris:forecastNow#time" }
Number:Temperature ParisForecastNowTemperature "Temperature Now [%.1f %unit%]" <temperature> { channel="fmiweather:forecast:forecast_Paris:forecastNow#temperature" }
Number:Dimensionless ParisForecastNowHumidity "Humidity Now [%.1f %unit%]" <humidity> { channel="fmiweather:forecast:forecast_Paris:forecastNow#humidity" }
@ -783,7 +782,7 @@ Number ParisForecastHours50WeatherId "Prevailing weather id hour 50 [%.1f %unit%
`fmi_weather.sitemap`:
```
```perl
sitemap fmi_weather label="FMI Weather" {
Frame label="Observation Helsinki" {
Text item=HelsinkiObservationTime

View File

@ -6,7 +6,6 @@ This binding is intended to monitor FTP and local folder and its subfolders and
Currently the binding support two types of things: `ftpfolder` and `localfolder`.
## Thing Configuration
The `ftpfolder` thing has the following configuration options:
@ -43,7 +42,6 @@ This binding currently supports the following events:
| newftpfile | String | A new file name discovered on FTP |
| newlocalfile | String | A new file name discovered on in local folder |
## Full Example
Thing configuration:

View File

@ -25,7 +25,7 @@ Bridge has the following configuration parameters:
| Parameter | Description | Required
|------------------|-------------------------------------------------------|----------
| apikey | API Key from https://api.foobot.io/apidoc/index.html | Mandatory
| apikey | API Key from <https://api.foobot.io/apidoc/index.html> | Mandatory
| username | The e-mail address used to log into the Foobot App | Mandatory
| refreshInterval | Refresh interval in minutes, minimal 5 minutes | Optional, the default value is 8 minutes.
@ -40,7 +40,6 @@ The bridge has one channel:
|----------------------|-----------|-----------------------------------------------
| apiKeyLimitRemaining | Number | The remaining number of API requests for today
The AirQuality sensors information that is retrieved is available as these channels:
| Channel ID | Item Type | Description
@ -57,7 +56,7 @@ The AirQuality sensors information that is retrieved is available as these chann
demo.things:
```
```java
// Bridge configuration:
Bridge foobot:account:myfoobotaccount "Foobot Account" [apiKey="XXXXXX", username="XXXXXX", refreshInterval=8] {
Things:
@ -66,6 +65,6 @@ Bridge foobot:account:myfoobotaccount "Foobot Account" [apiKey="XXXXXX", usernam
demo.items:
```
```java
Number:Temperature Temperature "Temperature" <temperature> { channel="foobot:myfoobotaccount:device:myfoobot:temperature" }
```

View File

@ -34,7 +34,7 @@ The binding has the following configuration options, which can be set for "bindi
### Server
The *server* bridge thing requires the following configuration parameters:
The _server_ bridge thing requires the following configuration parameters:
| Parameter Label | Parameter ID | Description | Required | Default |
|------------------------------------|-------------------------|-----------------------------------------------------------------------------|----------|----------------------|
@ -47,12 +47,12 @@ The *server* bridge thing requires the following configuration parameters:
| Enable Network Interface Discovery | discoverNetInterface | Enable the discovery of network interface things. | false | true |
| Enable AirPlay Receiver Discovery | discoverAirPlayReceiver | Enable the discovery of AirPlay receiver things. | false | true |
If the parameter *fqdn* 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.
If the parameter _fqdn_ 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:
The _phone_ thing requires the following configuration parameters:
| Parameter Label | Parameter ID | Description | Required | Default |
|------------------------------|---------------------------|---------------------------------------------------------------------------------------------|----------|---------|
@ -61,7 +61,7 @@ The *phone* thing requires the following configuration parameters:
### Network device
The *net_device* thing requires the following configuration parameters:
The _net_device_ thing requires the following configuration parameters:
| Parameter Label | Parameter ID | Description | Required |
|-----------------|--------------|----------------------------------------|----------|
@ -69,7 +69,7 @@ The *net_device* thing requires the following configuration parameters:
### Network interface
The *net_interface* thing requires the following configuration parameters:
The _net_interface_ thing requires the following configuration parameters:
| Parameter Label | Parameter ID | Description | Required |
|-----------------|--------------|-----------------------------------------------------|----------|
@ -77,7 +77,7 @@ The *net_interface* thing requires the following configuration parameters:
### AirPlay device
The *airplay* thing requires the following configuration parameters:
The _airplay_ thing requires the following configuration parameters:
| Parameter Label | Parameter ID | Description | Required |
|-----------------|--------------|-----------------------------|----------|

View File

@ -2,12 +2,14 @@
This binding uses the [Fronius Solar API V1](https://www.fronius.com/en/photovoltaics/products/all-products/system-monitoring/open-interfaces/fronius-solar-api-json-) to obtain data from Fronius devices.
It supports Fronius inverters and Fronius Smart Meter. Supports:
* Fronius Symo
* Fronius Symo Gen24
* Fronius Smart Meter 63A
* Fronius Smart Meter TS 65A-3
* Fronius Ohmpilot
It supports Fronius inverters and Fronius Smart Meter.
Supports:
- Fronius Symo
- Fronius Symo Gen24
- Fronius Smart Meter 63A
- Fronius Smart Meter TS 65A-3
- Fronius Ohmpilot
## Supported Things
@ -108,7 +110,6 @@ The binding has no configuration options, all configuration is done at `bridge`,
| `energyrealsumconsumed` | Number:Energy | Real Energy consumed |
| `energyrealsumproduced` | Number:Energy | Real Energy produced |
### Channels for `ohmpilot` Thing
| Channel ID | Item Type | Description |
@ -119,7 +120,6 @@ The binding has no configuration options, all configuration is done at `bridge`,
| `errorcode` | Number | Device error code |
| `statecode` | Number | Device state code<br />`0` up and running <br />`1` keep minimum temperature <br />`2` legionella protection <br />`3` critical fault<br />`4` fault<br />`5` boost mode |
## Properties
### The `meter` thing has the following properties:
@ -140,7 +140,7 @@ The binding has no configuration options, all configuration is done at `bridge`,
demo.things:
```
```java
Bridge fronius:bridge:mybridge [hostname="192.168.66.148", refreshInterval=5] {
Thing powerinverter myinverter [deviceId=1]
Thing meter mymeter [deviceId=0]
@ -150,7 +150,7 @@ Bridge fronius:bridge:mybridge [hostname="192.168.66.148", refreshInterval=5] {
demo.items:
```
```java
Number:Power AC_Power { channel="fronius:powerinverter:mybridge:myinverter:inverterdatachannelpac" }
Number:Energy Day_Energy { channel="fronius:powerinverter:mybridge:myinverter:inverterdatachanneldayenergy" }
Number:Energy Total_Energy { channel="fronius:powerinverter:mybridge:myinverter:inverterdatachanneltotal" }

View File

@ -6,20 +6,20 @@ This binding integrates internet radios based on the [Frontier Silicon chipset](
Successfully tested are internet radios:
* [Hama IR100, IR110](https://de.hama.com/00054823/hama-internetradio-ir110)
* [Hama DIR3100](https://www.conrad.com/p/hama-dir3100-internet-desk-radio-dab-fm-aux-internet-radio-usb-spotify-black-1233624)
* [Medion MD87180, MD86988, MD86955, MD87528](http://internetradio.medion.com/)
* [Silvercrest SMRS18A1, SMRS30A1, SMRS35A1, SIRD 14 C2, SIRD 14 D1](https://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, Auna KR200, Auna Connect CD](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](https://www.ttmicro.no/radio)
* [Revo SuperConnect](https://revo.co.uk/products/)
* [Sangean WFR-28C](https://sg.sangean.com.tw/products/product_category.asp?cid=2)
* [Roku SoundBridge M1001](https://soundbridge.roku.com/soundbridge/index.php)
* [Dual IR 3a](https://www.dual.de/produkte/digitalradio/radio-station-ir-3a/)
* [Teufel 3sixty](https://www.teufel.de/stereo/radio-3sixty-p16568.html)
* [Ruark R5](https://www.ruarkaudio.com/products/r5-high-fidelity-music-system)
- [Hama IR100, IR110](https://de.hama.com/00054823/hama-internetradio-ir110)
- [Hama DIR3100](https://www.conrad.com/p/hama-dir3100-internet-desk-radio-dab-fm-aux-internet-radio-usb-spotify-black-1233624)
- [Medion MD87180, MD86988, MD86955, MD87528](http://internetradio.medion.com/)
- [Silvercrest SMRS18A1, SMRS30A1, SMRS35A1, SIRD 14 C2, SIRD 14 D1](https://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, Auna KR200, Auna Connect CD](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](https://www.ttmicro.no/radio)
- [Revo SuperConnect](https://revo.co.uk/products/)
- [Sangean WFR-28C](https://sg.sangean.com.tw/products/product_category.asp?cid=2)
- [Roku SoundBridge M1001](https://soundbridge.roku.com/soundbridge/index.php)
- [Dual IR 3a](https://www.dual.de/produkte/digitalradio/radio-station-ir-3a/)
- [Teufel 3sixty](https://www.teufel.de/stereo/radio-3sixty-p16568.html)
- [Ruark R5](https://www.ruarkaudio.com/products/r5-high-fidelity-music-system)
But in principle, all internet radios based on the [Frontier Silicon chipset](https://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.
@ -46,10 +46,10 @@ The binding itself does not need a 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.
- 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
@ -85,18 +85,17 @@ This list is just an example how the mapping looks like for some of the devices,
| Teufel 3sixty | Internet Radio | Spotify | - | USB/Network | DAB Radio | FM Radio | Bluetooth | AUX in | - | - | - | - | - | - |
| Ruark R5 | Internet Radio | TIDAL | Deezer | Amazon Music | Spotify | Local Music | Music Player | DAB Radio | FM Radio | Bluetooth | AUX in | Phono | Optical | CD |
## Full Example
demo.things:
```
```java
fsinternetradio:radio:radioInKitchen [ ip="192.168.0.42" ]
```
demo.items:
```
```java
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" }
@ -108,7 +107,7 @@ String RadioInfo2 "Radio Info2" { channel="fsinternetradio:radio:radioInKitchen:
demo.sitemap:
```
```perl
sitemap demo label="Main Menu"
{
Frame {

View File

@ -33,7 +33,6 @@ The `ftpupload` Thing has the following configuration parameters:
| userName | User name to login to the FTP server. User name is used to identify the Thing, so it should be unique per Thing. | yes | |
| password | Password to login to the FTP server. | yes | |
## Channels
This binding currently supports the following channels:
@ -54,7 +53,6 @@ Image channel supports following options:
|-------------|--------------|--------------------------------------------------------------------------|----------|---------------|
| filename | Filename | Filename to match received files. Supports regular expression patterns. | yes | .* |
### Trigger Channels
| Channel Type ID | Options | Description |
@ -76,7 +74,7 @@ Trigger channels supports following options:
Things:
```
```java
Thing ftpupload:imagereceiver:images1 [ userName="test1", password="12345" ] {
Thing ftpupload:imagereceiver:images2 [ userName="test2", password="12345" ] {
@ -98,14 +96,14 @@ Thing ftpupload:imagereceiver:images2 [ userName="test2", password="12345" ] {
Items:
```
```java
Image Image1 { channel="ftpupload:imagereceiver:images1:image" }
Image Image2 { channel="ftpupload:imagereceiver:images2:my_image1" }
```
Rules:
```
```java
rule "example trigger rule 1"
when
Channel 'ftpupload:imagereceiver:images1:image-received' triggered IMAGE_RECEIVED
@ -124,7 +122,7 @@ end
Sitemap:
```
```perl
Frame label="FTP images" {
Image item=Image1
Image item=Image2
@ -137,19 +135,19 @@ The binding can be used to receive images from network cameras that send images
Things:
```
```java
Thing ftpupload:imagereceiver:garagecamera [ userName="garage", password="12345" ]
```
Items:
```
```java
Image Garage_NetworkCamera_Motion_Image { channel="ftpupload:imagereceiver:garagecamera:image" }
```
Rules:
```
```java
rule "example trigger rule"
when
Channel 'ftpupload:imagereceiver:garagecamera:image-received' triggered IMAGE_RECEIVED
@ -160,7 +158,7 @@ end
Sitemap:
```
```perl
Frame label="Garage network camera" icon="camera" {
Image item=Garage_NetworkCamera_Motion_Image
}
@ -170,13 +168,13 @@ Frame label="Garage network camera" icon="camera" {
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:
```
```shell
log:set DEBUG org.apache.ftpserver
```
and set back to default level:
```
```shell
log:set DEFAULT org.apache.ftpserver
```

View File

@ -33,10 +33,10 @@ There are several settings for an account:
### Obtaining your API Key
1. Goto https://developer.husqvarnagroup.cloud/, sign in using your GARDENA smart system account and accept the terms of use
2. Create and save a new application via the 'Create application' button. The Redirect URLs do not matter, you can enter what you want (e.g. http://localhost:8080)
3. Connect both _Authentication API_ and _GARDENA smart system API_ to your application via the 'Connect new API' button
4. Copy the application key to use with this binding as _apiKey_
1. Goto <https://developer.husqvarnagroup.cloud/>, sign in using your GARDENA smart system account and accept the terms of use
1. Create and save a new application via the 'Create application' button. The Redirect URLs do not matter, you can enter what you want (e.g. <http://localhost:8080>)
1. Connect both _Authentication API_ and _GARDENA smart system API_ to your application via the 'Connect new API' button
1. Copy the application key to use with this binding as _apiKey_
## Examples
@ -85,7 +85,7 @@ Sensor refresh commands are not yet supported by the Gardena smart system integr
### Example configuration
```
```java
// smart Water Control
String WC_Valve_Activity "Valve Activity" { channel="gardena:water_control:home:myWateringComputer:valve#activity" }
Number WC_Valve_Duration "Last Watering Duration [%d min]" { channel="gardena:water_control:home:myWateringComputer:valve#duration" }
@ -100,7 +100,7 @@ openhab:status WC_Valve_Activity // returns the current valve activity (CLOSED|
All channels are read-only, except the command group and the lastUpdate timestamp
```
```shell
openhab:send WC_Valve_cmd_Duration.sendCommand(10) // set the duration for the command to 10min
openhab:send WC_Valve_cmd_OpenWithDuration.sendCommand(ON) // start watering
openhab:send WC_Valve_cmd_CloseValve.sendCommand(ON) // stop any active watering
@ -108,9 +108,11 @@ openhab:send WC_Valve_cmd_CloseValve.sendCommand(ON) // stop any active watering
If you send a REFRESH command to the last update timestamp (no matter which thing), **ALL** items from **ALL** things are updated
```
```java
DateTime LastUpdate "LastUpdate [%1$td.%1$tm.%1$tY %1$tH:%1$tM]" { channel="gardena:water_control:home:myWateringComputer:common#lastUpdate_timestamp" }
```
```shell
// refresh ALL items
openhab:send LastUpdate REFRESH
```
@ -133,13 +135,13 @@ Attempting to force reconnect within the 24 hours causes the call rate to be exc
If you want to see what's going on in the binding, switch the loglevel to TRACE in the Karaf console
```
```shell
log:set TRACE org.openhab.binding.gardena
```
Set the logging back to normal
```
```shell
log:set INFO org.openhab.binding.gardena
```
@ -150,14 +152,14 @@ It is the same as if you send the command in the Gardena App.
Schedules, sensor-refresh commands, irrigation control master valve configuration etc. are not supported.
This binding relies on the GARDENA smart system integration API.
Further API documentation: https://developer.1689.cloud/apis/GARDENA+smart+system+API
Further API documentation: <https://developer.1689.cloud/apis/GARDENA+smart+system+API>
### Troubleshooting
###Troubleshooting
Occasionally it can happen that the API key is no longer valid.
```
```text
HTTP protocol violation: Authentication challenge without WWW-Authenticate header
```
If this error message appears in the log file, simply renew or delete/create a new API key as described in 'Obtaining your API Key' and restart openHAB.

View File

@ -3,11 +3,11 @@
This binding aims to handle various GCE Electronics equipments.
IPX800 is a 8 relay webserver from gce-electronics with a lot of possibilities:
* 8 Digital Input
* 8 Relay (250V / 10A / channel)
* 4 Analog Input
* 8 Counters
* Ability to cascade up to 3 extensions for a total of 32 inputs / 32 relay
- 8 Digital Input
- 8 Relay (250V / 10A / channel)
- 4 Analog Input
- 8 Counters
- Ability to cascade up to 3 extensions for a total of 32 inputs / 32 relay
Each IPX800 connected to openHAB must be configured with the setting 'Send data on status changed' on the website in M2M > TCP client.
@ -16,17 +16,16 @@ On input we generally connect push buttons (for instance house switchs), on oupu
Features of the binding:
* Multi ipx support
* Direct TCP connection
* Auto reconnect
* Simple clic/Long press
* Pulse mode support
- Multi ipx support
- Direct TCP connection
- Auto reconnect
- Simple clic/Long press
- Pulse mode support
## Binding Configuration
There is no configuration at binding level.
## Thing Configuration
The IPX800v3 (ID : 'ipx800v3') accepts the following configuration parameters :
@ -76,8 +75,7 @@ Associated events:
| pulsePeriod | 0(*) | ms | Period of pulse event triggering while the entry is closed. Ignored if '0'. |
| pulseTimeout | 0(*) | ms | Period of time after pulsing will be stopped. None if '0'. |
* Values below 100ms should be avoided as the JVM could skip them and proceed in the same time slice.
- Values below 100ms should be avoided as the JVM could skip them and proceed in the same time slice.
### Digital Outputs Channels (relays)
@ -123,14 +121,13 @@ Each analog port will have these associated channels:
|------------|---------|-------------------------------------------------------------------------------------|
| hysteresis | 0 | If set, the channel will ignore status if change (+ or -) is less than hysteresis/2 |
## Rule Actions
Multiple actions are supported by this binding. In classic rules these are accessible as shown in the example below:
Getting ipxActions variable in scripts
```
```java
val ipxActions = getActions("gce","gce:ipx800v3:43cc8d07")
if(null === ipxActions) {
logInfo("actions", "ipxActions not found, check thing ID")
@ -144,14 +141,13 @@ Getting ipxActions variable in scripts
Resets the value of the given counter to 0.
* `counterId` (Integer) - id of the counter.
- `counterId` (Integer) - id of the counter.
### reset(placeholder)
Restarts the PLC.
* `placeholder` (Integer) - This parameter is not used (can be null).
- `placeholder` (Integer) - This parameter is not used (can be null).
## Example

View File

@ -4,7 +4,6 @@ This binding communicates with the Generac MobileLink API and reports on the sta
## Supported Things
### MobileLink Account
A MobileLink account bridge thing represents a user's MobileLink account and is responsible for authentication and polling for updates.
@ -31,7 +30,6 @@ The MobileLink account bridge must be added manually. Once added, generator thin
| password | The password used to login to the MobileLink service |
| refreshInterval | The frequency to poll for generator updates, minimum duration is 30 seconds |
## Channels
### Generator Channels
@ -55,12 +53,11 @@ All channels are read-only.
| batteryVoltage | String | Battery voltage status |
| serviceStatus | Switch | Service status |
## Full Example
### Things
```xtend
```java
Bridge generacmobilelink:account:main "MobileLink Account" [ userName="foo@bar.com", password="secret",refreshInterval=60 ] {
Thing generator 123456 "MobileLink Generator" [ generatorId="123456" ]
}
@ -68,7 +65,7 @@ Bridge generacmobilelink:account:main "MobileLink Account" [ userName="foo@bar.c
### Items
```xtend
```java
Switch GeneratorConnected "Connected [%s]" {channel="generacmobilelink:generator:main:123456:connected"}
Switch GeneratorGreenLight "Green Light [%s]" {channel="generacmobilelink:generator:main:123456:greenLight"}
Switch GeneratorYellowLight "Yellow Light [%s]" {channel="generacmobilelink:generator:main:123456:yellowLight"}
@ -80,7 +77,7 @@ String GeneratorAlarm "Alarm [%s]" {channel="generacmobilelink:generator:main:12
### Sitemap
```xtend
```perl
sitemap MobileLink label="Demo Sitemap" {
Frame label="Generator" {
Switch item=GeneratorConnected

View File

@ -112,7 +112,7 @@ parameters for **baud rate**, **flow control**, and **parity** to match the conf
### Manual Thing Creation
Devices can be created in the *UI*, or by placing a *.things* file in the *conf/things* directory.
Devices can be created in the _UI_, or by placing a _.things_ file in the _conf/things_ directory.
See example below.
### Binding Dependencies
@ -125,26 +125,26 @@ GlobalCache GC-100, iTach, and Zmote devices emit an **announcement beacon** eve
The GlobalCache binding will automatically detect those devices, then add them to the inbox.
Background discovery is **enabled** by default.
To disable background discovery, add the following line to the *conf/services/runtime.cfg* file:
To disable background discovery, add the following line to the _conf/services/runtime.cfg_ file:
```text
discovery.globalcache:background=false
```
Note that automatic device discovery **will not work** with GC-100's running firmware earlier than v3.0 as those versions do not emit announcement beacons on the multicast address.
GC-100's running firmware earlier than v3.0 must be configured manually, either through the *UI* or using a *.things* file.
GC-100's running firmware earlier than v3.0 must be configured manually, either through the _UI_ or using a _.things_ file.
See below.
## Channels and Channel Types
There are four *channel types* used across the GC-100 and iTach family of devices.
There are four _channel types_ used across the GC-100 and iTach family of devices.
- Contact Closure (CC)
- Infrared (IR)
- Serial (SL)
- Serial Direct (SL)
*Channels* follow a naming convention that relates to the physical configuration of the Global Cache device -- specifically the **module** and **connector** numbers.
_Channels_ follow a naming convention that relates to the physical configuration of the Global Cache device -- specifically the **module** and **connector** numbers.
For example, the channel name **m2c3** refers to connector 3 on module 2.
For iTach Flex devices, since they can be configured to support infrared, serial, or contact closure, channels are prefixed with ir-, sl-, and cc-, respectively.
@ -152,7 +152,7 @@ For example, the IR channel on connector 3 on module 1 is named ir-m1c2.
## Infrared (IR) Channel
The *Infrared channel* sends IR codes out the IR connector on the device.
The _Infrared channel_ sends IR codes out the IR connector on the device.
For example, the following item links to the module 1 / connector 2 channel on an iTach IR device.
```java
@ -192,30 +192,30 @@ There are numerous other sources of IR codes, such as iRule and RemoteCentral.
#### Unsupported Features
Currently, only the *IR Out* and *IR Blaster* connector configurations are supported.
Other settings, such as *Sensor In*, *Sensor Notify*, and *LED Lighting*, may be supported in the future.
Currently, only the _IR Out_ and _IR Blaster_ connector configurations are supported.
Other settings, such as _Sensor In_, _Sensor Notify_, and _LED Lighting_, may be supported in the future.
## Contact Closure (CC) Channel
A *Contact Closure channel* activates the contact closure (relay) on the iTach or GC-100 device.
A _Contact Closure channel_ activates the contact closure (relay) on the iTach or GC-100 device.
For example, the following item links to the module 1, connector 1 channel on an iTach CC device.
```
```java
Switch MyRelay "My Relay [%s]" (gRelays) { channel="globalcache:itachCC:000C1E039BCF:cc-m1#c1" }
```
The item definition for an iTach Flex WiFi device would look like this.
```
```java
String MyRelay "My Relay [%s]" (gRelays) { channel="globalcache:itachFlex:000C01AF4990:cc-m1#c1" }
```
## Serial (SL) Channel
An *SL channel* sends serial command strings out the serial connector on the device.
An _SL channel_ sends serial command strings out the serial connector on the device.
For example, the following item links to the module 1 connector 1 channel on a GC-100-6 device.
```
```java
String RS232ME "My RS232-controlled Device" { channel="globalcache:gc100_6:000C459A120A:sl-m1#c1" }
```
@ -229,7 +229,7 @@ The Serial Direct channel type enables serial commands to be sent directly to th
This is useful in rules where the serial command might be constructed "on the fly" in the body of the rule.
For example, the following item links to the module 1 connector 1 channel on an iTach Flex device.
```
```java
String RUSSCAA66 "Russound CAA66" { channel="globalcache:itachFlex:000C45D530B9:sl-m1#c1-direct" }
```
@ -244,7 +244,7 @@ Use URL encoding for non-printable characters.
For example, the following item links to the receive channel on module 1 connector 1 on a GC-100.
A rule that looks for updates on this item will be able to process messages sent from the device connected to the GlobalCache's serial port.
```
```java
String RUSSCAA66_Receive "Russound CAA66 Receive" { channel="globalcache:gc100_06:000C1EFFF039:sl-m1#c1-receive" }
```
@ -256,9 +256,9 @@ Here are some examples of common **End-ofMessage** delimiters.
%F7 Russound RNET message terminator
```
**Example**
### Example
### MAP File
#### MAP File
```text
# Harmon Kardon AVR-245 Home Theater Receiver
@ -292,9 +292,9 @@ RS232ME_VOLUME_UP = VOLUME%20UP%0D%0A
RS232ME_VOLUME_DOWN = VOLUME%20DOWN%0D%0A
```
### Items File
#### Items File
```
```java
Switch ContactClosure1 "Relay on Connector 1" { channel="globalcache:itachCC:000C1E017BCF:cc-m1#c1" }
Switch ContactClosure2 "Relay on Connector 2" { channel="globalcache:itachCC:000C1E017BCF:cc-m1#c2" }
Switch ContactClosure3 "Relay on Connector 3" { channel="globalcache:itachCC:000C1E017BCF:cc-m1#c3" }
@ -313,11 +313,11 @@ String RUSSCAA66 "Russound CAA66" { channel="globalcac
String ZSAMSUNGHLS "Samsung HL-S DLP TV" { channel="globalcache:zmote:CI00073306:ir-m1-c1#c1" }
```
### Sitemap File
#### Sitemap File
This is an example of how to use contact closure, infrared, and serial devices in a sitemap.
```
```perl
Frame label="Contact Closure" {
Switch item=ContactClosure1 label="Open/Close Garage Door"
Switch item=ContactClosure2 label="Light on Garage Door Opener"
@ -347,11 +347,11 @@ Frame label="Garage Door" {
}
```
### Rule file
#### Rule file
This is an example of how to use a Contact Closure channel within a rule to implement a momentary contact switch, which could be used to trigger a garage door opener.
```
```java
var boolean isRunning = false
rule "Example Garage Door Opener"
@ -370,7 +370,7 @@ end
This is an example of how to send IR and/or serial commands from within a rule.
```
```java
rule "AV Power On/Off"
when
Item AVPowerOn received command
@ -388,7 +388,7 @@ end
This is an example of how to send a serial command directly from within a rule.
```
```java
rule "Russound Set Zone 1 Volume to 20"
when
Item RussoundSetVolume received command
@ -399,10 +399,10 @@ end
### Manual Thing Creation
Place a file named *globalcache.things* in the *conf/things* directory.
Place a file named _globalcache.things_ in the _conf/things_ directory.
The file should contain lines formatted like this.
```
```java
globalcache:itachCC:000CFF17B106 [ ipAddress="192.168.12.62" ]
globalcache:itachIR:000C0B1E54A0 [ ipAddress="192.168.12.63", mapFilename="ir-codes.map" ]
globalcache:itachSL:000CF886B107 [ ipAddress="192.168.12.64", mapFilename="serial-codes.map" ]

View File

@ -57,13 +57,13 @@ Currently available channels are
demo.things
```
```java
Thing goecharger:goe:garage [ip="192.168.1.36",refreshInterval=5]
```
demo.items
```
```java
Number:ElectricCurrent GoEChargerMaxCurrent "Maximum current" {channel="goecharger:goe:garage:maxCurrent"}
Number:ElectricCurrent GoEChargerMaxCurrentTemp "Maximum current temporary" {channel="goecharger:goe:garage:maxCurrentTemp"}
Number GoEChargerForceState "Force state" {channel="goecharger:goe:garage:forceState"}
@ -96,7 +96,7 @@ String GoEChargerAccessConfiguration "Access configur
You can easily define rules to charge with PV power alone.
Here is a simple sample how such a rule could look like:
```
```java
rule "Set max amps for PV charging"
when
Item availablePVCurrent received update
@ -108,7 +108,7 @@ end
Advanced example:
```
```java
rule "Set charging limit for go-eCharger"
when
Time cron "*/10 * * ? * *" // Trigger every 10 seconds

View File

@ -1,7 +1,7 @@
# GPIO Binding
This binding adds GPIO support via the pigpio daemon to openhab.
It requires the pigpio (http://abyz.me.uk/rpi/pigpio/) to be running on the pi that should be controlled.
It requires the pigpio (<http://abyz.me.uk/rpi/pigpio/>) to be running on the pi that should be controlled.
## Supported Things
@ -15,7 +15,7 @@ This thing represents a remote pigpio instance running as daemon on a raspberry
On a raspberry (or a compatible device) you have to install pigpio:
```
```shell
sudo apt-get install pigpiod
sudo raspi-config
```
@ -24,22 +24,24 @@ sudo raspi-config
Note: if you are setting this up on a Raspberry Pi without `raspi-config` you can create the service config file manually:
```
```shell
sudo mkdir -p /etc/systemd/system/pigpiod.service.d/
sudo nano /etc/systemd/system/pigpiod.service.d/public.conf
```
[Service]
ExecStart=
ExecStart=/usr/bin/pigpiod
```text
[Service]
ExecStart=
ExecStart=/usr/bin/pigpiod
```
```shell
sudo systemctl daemon-reload
```
Now that Remote GPIO is enabled, get the daemon going (even if installed with apt-get):
```
```shell
sudo systemctl enable pigpiod
sudo systemctl start pigpiod
```
@ -71,10 +73,9 @@ If you want to invert the value, set `invert` to true.
## Full Example
demo.things:
```
```java
Thing gpio:pigpio-remote:sample-pi-1 "Sample-Pi 1" [host="192.168.2.36", port=8888] {
Channels:
Type pigpio-digital-input : sample-input-1 [ gpioId=10]
@ -92,14 +93,14 @@ Thing gpio:pigpio-remote:sample-pi-2 "Sample-Pi 2" [host="192.168.2.37", port=88
demo.items:
```
```java
Switch SampleInput1 {channel="gpio:pigpio-remote:sample-pi-1:sample-input-1"}
Switch SampleOutput1 {channel="gpio:pigpio-remote:sample-pi-1:sample-output-1"}
```
demo.sitemap:
```
```perl
sitemap demo label="Main Menu"
{
Switch item=SampleInput1

View File

@ -4,8 +4,8 @@ This binding allows you to connect mobile GPS tracker applications to openHAB an
Currently two applications are supported:
* [OwnTracks](https://owntracks.org/booklet/) - iOS, Android
* [GPSLogger](https://gpslogger.app/) - Android
- [OwnTracks](https://owntracks.org/booklet/) - iOS, Android
- [GPSLogger](https://gpslogger.app/) - Android
GPS location reports are sent to openHAB using HTTP.
Please be aware that this communication uses the public network so make sure your openHAB installation is [secured](https://www.openhab.org/docs/installation/security.html#encrypted-communication) (but accessible from public internet through myopenhab.org or using a reverse proxy) and you configured HTTP**S** access in tracking applications.
@ -13,8 +13,8 @@ The easiest way to achieve this is to use the [openHAB Cloud Connector](https://
The binding can process two message types received from trackers:
* **Location** - This is a simple location report with coordinates extended with some extra information about the tracker (e.g. tracker device battery level). [OwnTracks, GPSLogger]
* **Transition** - This report is based on regions defined in tracker application only. A message is sent every time the tracker enters or leaves a region. [OwnTracks only] See "Distance Channel and Presence Switch" how this behavior can be achieved with openHAB's on-board tools.
- **Location** - This is a simple location report with coordinates extended with some extra information about the tracker (e.g. tracker device battery level). [OwnTracks, GPSLogger]
- **Transition** - This report is based on regions defined in tracker application only. A message is sent every time the tracker enters or leaves a region. [OwnTracks only] See "Distance Channel and Presence Switch" how this behavior can be achieved with openHAB's on-board tools.
## Configuration
@ -24,15 +24,15 @@ Install [OwnTracks for Android](https://play.google.com/store/apps/details?id=or
Go to Preferences/Connection and set:
* **Mode** - select Private HTTP
* **Host**
* https://<your.ip.address>/gpstracker/owntracks or
* https://home.myopenhab.org/gpstracker/owntracks
* **Identification**
* Turn Authentication ON
* Set username and password to be able to reach your openHAB server (myopenhab.org credential, if choosen as host)
* Device ID is not important. Set it to e.g. phone
* Tracker ID - This id identifies the tracker as a thing. This must be unique for each tracker connected to the same openHAB instance (e.g. family members).
- **Mode** - select Private HTTP
- **Host**
- `https://<your.ip.address>/gpstracker/owntracks` or
- `https://home.myopenhab.org/gpstracker/owntracks`
- **Identification**
- Turn Authentication ON
- Set username and password to be able to reach your openHAB server (myopenhab.org credential, if choosen as host)
- Device ID is not important. Set it to e.g. phone
- Tracker ID - This id identifies the tracker as a thing. This must be unique for each tracker connected to the same openHAB instance (e.g. family members).
### GPSLogger
@ -40,19 +40,19 @@ Install [GPSLogger for Android](https://github.com/mendhak/gpslogger/releases) o
After the launch, go to General Options.
Enable **Start on boot-up** and **Start on app launch**.
Go to *Logging details* and enable **Log to custom URL**.
If you only want to use GPSLogger for this binding, you can disable all other "*Log to*" entries.
Right after enabling, the app takes you to the *Log to custom URL* settings:
Go to _Logging details_ and enable **Log to custom URL**.
If you only want to use GPSLogger for this binding, you can disable all other "_Log to_" entries.
Right after enabling, the app takes you to the _Log to custom URL_ settings:
* **URL**
* https://<your.ip.address>/gpstracker/gpslogger or
* https://home.myopenhab.org/gpstracker/gpslogger
* **HTTP Body** - type in: { "_type":"location", "lat":%LAT, "lon":%LON, "tid":"XY", "acc":%ACC, "batt":%BATT, "tst":%TIMESTAMP }
* Note: "*tid*" is the tracker id that identifies the tracker as a thing. This must be unique for each tracker connected to the same openHAB instance (e.g. family members).
* **HTTP Headers** - type in: *Content-Type: application/json*
* **HTTP Method** - type in: *POST*
* **Basic Authentication** - Set username and password to be able to reach your openHAB server (myopenhab.org credential, if choosen as URL)
* Check if everything is ok by clicking on **Validate SSL Certificate**.
- **URL**
- `https://<your.ip.address>/gpstracker/gpslogger` or
- `https://home.myopenhab.org/gpstracker/gpslogger`
- **HTTP Body** - type in: { "_type":"location", "lat":%LAT, "lon":%LON, "tid":"XY", "acc":%ACC, "batt":%BATT, "tst":%TIMESTAMP }
- Note: "_tid_" is the tracker id that identifies the tracker as a thing. This must be unique for each tracker connected to the same openHAB instance (e.g. family members).
- **HTTP Headers** - type in: _Content-Type: application/json_
- **HTTP Method** - type in: _POST_
- **Basic Authentication** - Set username and password to be able to reach your openHAB server (myopenhab.org credential, if choosen as URL)
- Check if everything is ok by clicking on **Validate SSL Certificate**.
### Things
@ -68,11 +68,11 @@ If the things are not defined in **.things** files the first time the tracker se
Basic channels provided by the tracker things:
* **Location** - Current location of the tracker
* **Accuracy** - GPS accuracy
* **Last Report** - Timestamp of the last location report
* **Battery Level** - Battery level of the device running the tracker application
* **Region trigger channel** - Used by regions defined in tracker application. Event is fired with payload of the region name when the binding receives a **transition** log record or a distance calculation for a **location** record indicates that the tracker is outside of the region circle. Payload is suffixed with `/enter` for entering and with `/leave` for leaving events.
- **Location** - Current location of the tracker
- **Accuracy** - GPS accuracy
- **Last Report** - Timestamp of the last location report
- **Battery Level** - Battery level of the device running the tracker application
- **Region trigger channel** - Used by regions defined in tracker application. Event is fired with payload of the region name when the binding receives a **transition** log record or a distance calculation for a **location** record indicates that the tracker is outside of the region circle. Payload is suffixed with `/enter` for entering and with `/leave` for leaving events.
#### Distance Calculation
@ -90,8 +90,8 @@ Distance values will be updated each time a GPS location log record is received
When this calculated distance is less than the defined geofence radius the binding also fires event on Region Trigger channel.
* When the tracker is approaching (the new calculated distance is less then the previous one) the payload is <<region_name>>/enter.
* If the tracker is distancing (the new calculated distance is greater then the previous one) payload is <<region_name>>/leave.
- When the tracker is approaching (the new calculated distance is less then the previous one) the payload is <<region_name>>/enter.
- If the tracker is distancing (the new calculated distance is greater then the previous one) payload is <<region_name>>/leave.
If the tracker is moving inside/outside the region (both the previous and the current calculated distance value is less/greater than the radius) no events are fired.
This means that the region events are triggered **ONLY IN CASE THE REGION BORDER IS CROSSED**.
@ -105,8 +105,8 @@ These events are fired in case of distance channels as well when the tracker cro
In order to have this state available in stateful switch items (e.g. for rule logic) switch type items can be linked to **regionTrigger** channel.
There is a special profile (gpstracker:trigger-geofence) that transforms trigger enter/leave events to switch states:
* **<<region_name>>/enter** will update the switch state to **ON**
* **<<region_name>>/leave** will update the switch state to **OFF**
- **<<region_name>>/enter** will update the switch state to **ON**
- **<<region_name>>/leave** will update the switch state to **OFF**
To link a switch item to regionTrigger channel the following parameters are required by the item link:
@ -119,7 +119,7 @@ To link a switch item to regionTrigger channel the following parameters are requ
### Things
```
```java
//tracker definition
Thing gpstracker:tracker:1 "XY tracker" [trackerId="XY"]
@ -137,7 +137,7 @@ Thing gpstracker:tracker:EX "EX tracker" [trackerId="EX"] {
### Items
```
```java
//items for basic channels
Location locationEX "Location" {channel="gpstracker:tracker:1:lastLocation"}
DateTime lastSeenEX "Last seen" {channel="gpstracker:tracker:1:lastReport"}
@ -153,7 +153,7 @@ Switch atWorkEX "Work presence" {channel="gpstracker:tracker:EX:regionTrigger" [
### Sitemaps
```
```perl
sitemap gpstracker label="GPSTracker Binding" {
Text item=distanceEX
Text item=atWorkEX
@ -172,7 +172,7 @@ In order to see detailed debug information [set TRACE debug level](https://www.o
### Binding Start
```
```text
2018-10-03 18:12:38.950 [DEBUG] [org.openhab.binding.gpstracker ] - ServiceEvent REGISTERED - {org.openhab.core.config.discovery.DiscoveryService, org.openhab.binding.gpstracker.internal.discovery.TrackerDiscoveryService}={service.id=425, service.bundleid=183, service.scope=bundle, component.name=org.openhab.binding.gpstracker.internal.discovery.TrackerDiscoveryService, component.id=268} - org.openhab.binding.gpstracker
2018-10-03 18:12:38.965 [DEBUG] [org.openhab.binding.gpstracker ] - ServiceEvent REGISTERED - {org.openhab.core.thing.binding.ThingHandlerFactory, org.openhab.core.config.core.ConfigOptionProvider}={location=47.536178,19.169812, service.id=426, service.bundleid=183, service.scope=bundle, radius=100, name=Home, component.name=org.openhab.binding.gpstracker.internal.GPSTrackerHandlerFactory, component.id=267, additionalRegionsJSON=[
], triggerEvent=false, service.pid=binding.gpstracker} - org.openhab.binding.gpstracker
@ -187,7 +187,7 @@ In order to see detailed debug information [set TRACE debug level](https://www.o
Please note the lines about started servlets:
```
```text
Started GPSTracker Callback servlet on /gpstracker/owntracks
Started GPSTracker Callback servlet on /gpstracker/gpslogger
```
@ -196,7 +196,7 @@ Started GPSTracker Callback servlet on /gpstracker/gpslogger
In case the discovery is used the first message from a tracker registers it in the inbox:
```
```text
2018-10-05 08:36:14.283 [DEBUG] [nal.provider.AbstractCallbackServlet] - Post message received from OwnTracks tracker: {"_type":"location","tid":"XX","acc":10.0,"lat":41.53,"lon":16.16,"tst":1527966973,"wtst":1524244195,"batt":96}
2018-10-05 08:36:14.286 [DEBUG] [nal.provider.AbstractCallbackServlet] - There is no handler for tracker XX. Check the inbox for the new tracker.
```
@ -205,7 +205,7 @@ In case the discovery is used the first message from a tracker registers it in t
The next location message already calculates the distance for System location:
```
```text
2018-10-05 08:38:33.916 [DEBUG] [nal.provider.AbstractCallbackServlet] - Post message received from OwnTracks tracker: {"_type":"location","tid":"XX","acc":10.0,"lat":41.53,"lon":16.16,"tst":1527966973,"wtst":1524244195,"batt":96}
2018-10-05 08:38:33.917 [DEBUG] [cker.internal.handler.TrackerHandler] - Update base channels for tracker XX from message: org.openhab.binding.gpstracker.internal.message.LocationMessage@31dfed63
2018-10-05 08:38:33.941 [TRACE] [cker.internal.handler.TrackerHandler] - batteryLevel -> 96
@ -220,20 +220,20 @@ The next location message already calculates the distance for System location:
Assumptions:
* A Home distance channel is added to the tracker with parameters:
* Channel ID: distanceHome
* Region Name: Home
* Region Radius: 100
* Region Center: 42.53,16.16
* Presence switch is linked to the regionTrigger channel with parameters:
* Profile: Geofence(gpstracker:trigger-geofence)
* Region Name: Home
- A Home distance channel is added to the tracker with parameters:
- Channel ID: distanceHome
- Region Name: Home
- Region Radius: 100
- Region Center: 42.53,16.16
- Presence switch is linked to the regionTrigger channel with parameters:
- Profile: Geofence(gpstracker:trigger-geofence)
- Region Name: Home
![Image](doc/example.png)
After a location message received from the tracker the log should contain these lines:
```
```text
2018-10-05 09:27:58.768 [DEBUG] [nal.provider.AbstractCallbackServlet] - Post message received from OwnTracks tracker: {"_type":"location","tid":"XX","acc":10.0,"lat":42.53,"lon":17.16,"tst":1527966973,"wtst":1524244195,"batt":96}
2018-10-05 09:27:58.769 [DEBUG] [cker.internal.handler.TrackerHandler] - Update base channels for tracker XX from message: org.openhab.binding.gpstracker.internal.message.LocationMessage@67e5d438
2018-10-05 09:27:58.770 [TRACE] [cker.internal.handler.TrackerHandler] - batteryLevel -> 96
@ -253,12 +253,12 @@ After a location message received from the tracker the log should contain these
Assumptions:
* A **shared** region is defined in OwnTracks application. Lets call it Work.
* Presence switch is linked to the regionTrigger channel with parameters:
* Profile: Geofence(gpstracker:trigger-geofence)
* Region Name: Work
- A **shared** region is defined in OwnTracks application. Lets call it Work.
- Presence switch is linked to the regionTrigger channel with parameters:
- Profile: Geofence(gpstracker:trigger-geofence)
- Region Name: Work
```
```text
2018-10-05 09:35:27.203 [DEBUG] [nal.provider.AbstractCallbackServlet] - Post message received from OwnTracks tracker: {"_type":"transition","tid":"XX","acc":10.0,"desc":"Work","event":"enter","lat":42.53,"lon":18.22,"tst":1527966973,"wtst":1524244195,"t":"c"}
2018-10-05 09:35:27.204 [DEBUG] [cker.internal.handler.TrackerHandler] - ConfigHelper transition event received: Work
2018-10-05 09:35:27.204 [DEBUG] [cker.internal.handler.TrackerHandler] - Update base channels for tracker XX from message: org.openhab.binding.gpstracker.internal.message.TransitionMessage@5e5b0d59
@ -275,5 +275,5 @@ Assumptions:
**Note**:
* If the binding was restarted only the second transition update will trigger event as the binding has to know the previous state.
* The distance is not calculated for Work as the binding doesn't know the Work region center.
- If the binding was restarted only the second transition update will trigger event as the binding has to know the previous state.
- The distance is not calculated for Work as the binding doesn't know the Work region center.

View File

@ -57,20 +57,19 @@ The following channels are supported for fans:
| light | Switch | Enable/disable the front display on the Air Conditioner if applicable to the Air Conditioner model|
| | | Full Swing: 1, Up: 2, MidUp: 3, Mid: 4, Mid Down: 5, Down : 6 |
When changing mode, the air conditioner will be turned on unless "off" is selected.
## Full Example
**Things**
### Things
```
```java
Thing gree:airconditioner:a1234561 [ ipAddress="192.168.1.111", refresh=2 ]
```
**Items**
### Items
```
```java
Switch AirconPower { channel="gree:airconditioner:a1234561:power" }
String AirconMode { channel="gree:airconditioner:a1234561:mode" }
Switch AirconTurbo { channel="gree:airconditioner:a1234561:turbo" }
@ -86,11 +85,11 @@ Switch AirconHealth { channel="gree:airconditioner:a1234561:heal
Switch AirconPowerSaving { channel="gree:airconditioner:a1234561:powersave" }
```
**Sitemap**
### Sitemap
This is an example of how to set up your sitemap.
```
```perl
Frame label="Controls"
{
Switch item=AirconMode label="Mode" mappings=["auto"="Auto", "cool"="Cool", "eco"="Eco", "dry"="Dry", "fan"="Fan", "turbo"="Turbo", "heat"="Heat", "on"="ON", "off"="OFF"]
@ -120,13 +119,13 @@ Frame label="Options"
}
```
**Example**
## Example
This example shows how to make a GREE Air Conditioner controllable by Google HA (A/C mode + temperature)
**Items**
### Items
```
```java
Group Gree_Modechannel "Gree" { ga="Thermostat" } // allows mapping for Google Home Assistent
Switch GreeAirConditioner_Power "Aircon" {channel="gree:airconditioner:a1234561:power", ga="Switch"}
String GreeAirConditioner_Mode "Aircon Mode" {channel="gree:airconditioner:a1234561:mode", ga="thermostatMode"}
@ -134,9 +133,9 @@ Number GreeAirConditioner_Temp "Aircon Temperature" {channel="gree:aircond
Switch GreeAirConditioner_Light "Light" {channel="gree:airconditioner:a1234561:light"}
```
**Rules**
### Rules
```
```java
rule "Mode changed"
when
Item GreeAirConditioner_Mode changed

View File

@ -75,7 +75,7 @@ Note: Be aware that the Sense reports data once a day (at most), and that the va
Things file:
````
```java
Bridge groheondus:account:account1 [ username="user@example.com", password="YourStrongPasswordHere!" ] {
groheondus:senseguard:550e8400-e29b-11d4-a716-446655440000 [ applianceId="550e8400-e29b-11d4-a716-446655440000", roomId=456, locationId=123 ] {
Channels:
@ -85,11 +85,11 @@ Bridge groheondus:account:account1 [ username="user@example.com", password="Your
}
groheondus:sense:550e8400-e29b-11d4-a716-446655440000 [ applianceId="444e8400-e29b-11d4-a716-446655440000", roomId=456, locationId=123 ]
}
````
```
Items file:
````
```java
String Name_Sense_Guard "Appliance Name" {channel="groheondus:senseguard:groheondus:appliance:550e8400-e29b-11d4-a716-446655440000:name"}
Number:Pressure Pressure_Sense_Guard "Pressure [%.1f %unit%]" {channel="groheondus:senseguard:groheondus:appliance:550e8400-e29b-11d4-a716-446655440000:pressure"}
Number:Temperature Temperature_Sense_Guard "Temperature [%.1f %unit%]" {channel="groheondus:senseguard:groheondus:appliance:550e8400-e29b-11d4-a716-446655440000:temperature_guard"}
@ -98,4 +98,4 @@ Number:Volume Water_Usage_Since_Midnight_Sense_Guard "Water usage since midnight
String Name_Sense "Temperature [%.1f %unit%]" {channel="groheondus:sense:groheondus:appliance:444e8400-e29b-11d4-a716-446655440000:name"}
Number:Temperature Temperature_Sense "Temperature [%.1f %unit%]" {channel="groheondus:sense:groheondus:appliance:444e8400-e29b-11d4-a716-446655440000:temperature"}
Number Humidity_Sense "Humidity [%.1f %unit%]" {channel="groheondus:sense:groheondus:appliance:444e8400-e29b-11d4-a716-446655440000:humidity"}
````
```

View File

@ -19,7 +19,7 @@ If you need to add for multiple brands or multiple different users, add multiple
You need to select a brand and enter the user name and password.
The Polling Interval (in minutes) determines how often the API will be polled for new cars.
The Client ID and Client Secret should not need to be updated.
(However you can register your own app via https://developer.groupe-psa.com/inc/ and use this client information if you wish.)
(However you can register your own app via <https://developer.groupe-psa.com/inc/> and use this client information if you wish.)
### parameters
@ -29,8 +29,8 @@ The Client ID and Client Secret should not need to be updated.
| userName | None | Yes | The user name for the mypeugot/mycitroen/myds/myopel/myvauxhall website or app. |
| password | None | Yes | The password for the given user. |
| pollingInterval | 60 | No | The Polling Interval (in minutes) determines how often the available vehicles are queried. |
| clientId | | Yes | The Client ID for API access: can normally left at the default value. (see: https://developer.groupe-psa.io/webapi/b2c/quickstart/connect/#article) |
| clientSecret | | Yes | The Client Secret for API access: can normally left at the default value. (see: https://developer.groupe-psa.io/webapi/b2c/quickstart/connect/#article) |
| clientId | | Yes | The Client ID for API access: can normally left at the default value. (see: <https://developer.groupe-psa.io/webapi/b2c/quickstart/connect/#article>) |
| clientSecret | | Yes | The Client Secret for API access: can normally left at the default value. (see: <https://developer.groupe-psa.io/webapi/b2c/quickstart/connect/#article>) |
## Vehicle Configuration
@ -85,13 +85,13 @@ The Polling Interval and Online Timeout can be adjusted.
| chargingRemainingTime | Number:Time | Time remaining till charged |
| chargingNextDelayedTime | Number:Time | Time till the next charging starts |
Further documentation can be found at: https://developer.groupe-psa.io/webapi/b2c/api-reference/specification/#article
Further documentation can be found at: <https://developer.groupe-psa.io/webapi/b2c/api-reference/specification/#article>
## Full Example
### Things file
```
```java
Bridge groupepsa:bridge:opel "Auto Interface" [
pollingInterval=60,
userName="anonymous@anonymous.email",
@ -111,7 +111,7 @@ Bridge groupepsa:bridge:opel "Auto Interface" [
### Items file
```
```java
Group Auto
Number:ElectricCurrent Auto_Aux_Current "Auxillliary Battery Current [%.1f %unit%]" (Auto) ["Measurement","Current"] {channel="groupepsa:vehicle:opel:zafira:battery#current"}

View File

@ -12,7 +12,7 @@ It should work for all other Guntamatic Heating Systems as well, that support th
Guntamatic Heating Systems supported as Thing Types:
| Name | Thing Type ID | Heating System Type | Binding Development Status |
|---------------|---------------|----------------------|--------------------------------------------------|
| --------- | ------------- | -------------------- | ------------------------------------------------ |
| Biostar | `biostar` | Pellets | tested via 15kW, firmware 3.2d, German & English |
| Biosmart | `biosmart` | Logs | tested via 22kW, firmware 3.2f, German |
| Powerchip | `powerchip` | WoodChips | tested via 100kW, firmware 3.2d, French |
@ -25,16 +25,16 @@ Guntamatic Heating Systems supported as Thing Types:
### Thing Configuration
| Parameter | Description | Default |
|--------------------|-----------------------------------------------------------------------------|-----------------|
| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- |
| `hostname` | Hostname or IP address of the Guntamatic Heating System | |
| `key` | Optional, but required to read protected parameters and to control the Guntamatic Heating System.<br/>The key needs to be requested from Guntamatic support, e.g. via https://www.guntamatic.com/en/contact/. | |
| `key` | Optional, but required to read protected parameters and to control the Guntamatic Heating System.<br/>The key needs to be requested from Guntamatic support, e.g. via <https://www.guntamatic.com/en/contact/>. | |
| `refreshInterval` | Interval the Guntamatic Heating System is polled in seconds | `60` |
| `encoding` | Code page used by the Guntamatic Heating System | `windows-1252` |
### Properties
| Property | Description | Supported |
|---------------------|---------------------------------------------------------------|---------------------------------------------------|
| ----------------- | --------------------------------------------------- | ------------------------------------------------- |
| `extraWwHeat` | Parameter used by `controlExtraWwHeat` channels | all |
| `boilerApproval` | Parameter used by `controlBoilerApproval` channel | Biostar, Powerchip, Powercorn, Biocom, Pro, Therm |
| `heatCircProgram` | Parameter used by `controlHeatCircProgram` channels | all |
@ -48,7 +48,7 @@ Guntamatic Heating Systems supported as Thing Types:
The Guntamatic Heating System can be controlled using the following channels:
| Channel | Description | Type | Unit | Security Access Level | ReadOnly | Advanced |
|-----------------------|---------------------------------------------------------------------------|-------|:---------:|:-------------------------:|:--------:|:--------:|
| ------------------------- | ------------------------------------------------------------------------------- | -------- | :--: | :-------------------: | :------: | :------: |
| `controlBoilerApproval` | Set Boiler Approval (`AUTO`, `OFF`, `ON`) | `String` | | 🔐 W1 | R/W | true |
| `controlProgram` | Set Program (`OFF`, `NORMAL`, `WARMWATER`, `MANUAL`<sup id="a1">[1](#f1)</sup>) | `String` | | 🔐 W1 | R/W | false |
| `controlHeatCircProgram0` | Set Heat Circle 0 Program (`OFF`, `NORMAL`, `HEAT`, `LOWER`) | `String` | | 🔐 W1 | R/W | true |
@ -83,7 +83,7 @@ The Binding dynamically generates Channels, derived from the data provided from
Example list of Channels using a Guntamatic Biostar 15kW Pellets Heating System running firmware 3.2d and Guntamatic System Language configured to English:
| Channel | Description | Type | Unit | Security Access Level | ReadOnly | Advanced |
|-----------------------|-----------------------------------------------------------|-------|:---------:|:-------------------------:|:--------:|:--------:|
| -------------------- | ---------------------- | ---------------------- | :--: | :-------------------: | :------: | :------: |
| `running` | Running | `String` | | 🔓 W0 | R/O | false |
| `outsideTemp` | Outside Temp. | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `blrTargetTemp` | Blr.Target Temp | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
@ -201,13 +201,13 @@ Example list of Channels using a Guntamatic Biostar 15kW Pellets Heating System
## Full Example
**Thing File**
### Thing File
```java
Thing guntamatic:biostar:mybiostar "Guntamatic Biostar" [ hostname="192.168.1.100", key="0123456789ABCDEF0123456789ABCDEF0123", refreshInterval=60, encoding="windows-1252" ]
```
**Item File**
### Item File
```java
String Biostar_ControlBoilerApproval "Set Boiler Approval" { channel="guntamatic:biostar:mybiostar:controlBoilerApproval" }
@ -337,9 +337,9 @@ Number:Temperature Biostar_ExtraWw2 "Extra-WW. 2"
Number:Dimensionless Biostar_Grate "Grate" { channel="guntamatic:biostar:mybiostar:grate" }
```
**Rule**
### Rule
```javascript
```java
rule "Example Guntamatic Rule"
when
Item Season changed
@ -365,4 +365,4 @@ Please provide feedback (👍 as well as 👎) when using the Binding for other
Forum topic for feedback:
- [openHAB community #128451](https://community.openhab.org/t/guntamatic-new-binding-for-guntamatic-heating-systems-biostar-powerchip-powercorn-biocom-pro-therm/128451 "openHAB community #128451")
- [openHAB community #128451](https://community.openhab.org/t/guntamatic-new-binding-for-guntamatic-heating-systems-biostar-powerchip-powercorn-biocom-pro-therm/128451 "openHAB community #128451")

View File

@ -1,7 +1,7 @@
# Haas Sohn Pellet Stove Binding
The binding for Haassohnpelletstove communicates with a Haas and Sohn Pelletstove through the optional
WIFI module. More information about the WIFI module can be found here: https://www.haassohn.com/de/ihr-plus/WLAN-Funktion
WIFI module. More information about the WIFI module can be found here: <https://www.haassohn.com/de/ihr-plus/WLAN-Funktion>
## Supported Things
@ -9,13 +9,12 @@ WIFI module. More information about the WIFI module can be found here: https://w
|--------|--------------|------------|
| haassohnpelletstove | Control of a Haas & Sohn Pellet Stove| oven|
## Thing Configuration
In general two parameters are required. The IP-Address of the WIFI-Modul of the Stove in the local Network and the Access PIN of the Stove.
The PIN can be found directly at the stove under the Menue/Network/WLAN-PIN
```
```java
Thing haassohnpelletstove:oven:myOven "Pelletstove" [ hostIP="192.168.0.23", hostPIN="1234"]
```
@ -23,7 +22,6 @@ Thing haassohnpelletstove:oven:myOven "Pelletstove" [ hostIP="192.168.0.23", ho
The following channels are yet supported:
| Channel | Type | Access| Description|
|---------|-------|-------|------------|
| power| Switch | read/write|Turn the stove on/off|
@ -41,7 +39,7 @@ The following channels are yet supported:
demo.items:
```
```java
Number:Temperature isTemp { channel="oven:channelIsTemp" }
Number:Temperature spTemp { channel="oven:channelSpTemp" }
String mode { channel="oven:channelMode" }
@ -50,11 +48,11 @@ Switch power { channel="oven:power" }
## Google Assistant configuration
See also: https://www.openhab.org/docs/ecosystem/google-assistant/
See also: <https://www.openhab.org/docs/ecosystem/google-assistant/>
googleassistantdemo.items
```
```java
Group g_FeuerThermostat "FeuerThermostat" {ga="Thermostat" }
Number StatusFeuer "Status Feuer" (g_FeuerThermostat) { ga="thermostatMode" }
Number ZieltemperaturFeuer "ZieltemperaturFeuer" (g_FeuerThermostat) {ga="thermostatTemperatureSetpoint"}

View File

@ -77,7 +77,6 @@ A String item can be used to send any button name/label or a Player item can be
This mimics the physical remote where buttons are mapped differently depending on which activity is running.
For example the play button may be sent to a DVD player when running a "Watch DVD" activity, or it may be sent to an Apple TV when running a "Watch Movie" activity.
```java
String HarmonyHubGreatButton { channel="harmonyhub:hub:GreatRoom:buttonPress" }
Player HarmonyHubGreatPlayer { channel="harmonyhub:hub:GreatRoom:player" }
@ -144,24 +143,25 @@ sitemap demo label="Main Menu" {
Example subset of values for the current activity "buttonPress" channels
```
```text
Mute,VolumeDown,VolumeUp,DirectionDown,DirectionLeft,DirectionRight,DirectionUp,Select,Stop,Play,Rewind,Pause,FastForward,SkipBackward,SkipForward,Menu,Back,Home,SelectGame,PageDown,PageUp,Aspect,Display,Search,Cross,Circle,Square,Triangle,PS,Info,NumberEnter,Hyphen,Number0,Number1,Number2,Number3,Number4,Number5,Number6,Number7,Number8,Number9,PrevChannel,ChannelDown,ChannelUp,Record,FrameAdvance,C,B,D,A,Live,ThumbsDown,ThumbsUp,TiVo,WiiA,WiiB,Guide,Clear,Green,Red,Blue,Yellow,Dot,Return,Favorite,Exit,Sleep
```
A complete list of names for device buttons values can be determined via the REST API for channel-types. The easiest way to do this is through the API explorer:
1. Go to the main UI page for your installation
* This is usually at <http://your-openhab-ip:8080> or, in the case of openhabian, <http://openhabian:8080>
2. Login if you are not already logged in
3. Using the left panel (or three bars on the upper left corner) go to Developer Tools -> API Explorer -> channel-types
4. Click `GET` next to `/channel-types`
5. Click `Try it out`
6. Click `Execute`
7. Search the `Response Body` "harmonyhub:device" and find your device in the JSON output
- This is usually at <http://your-openhab-ip:8080> or, in the case of openhabian, <http://openhabian:8080>
1. Login if you are not already logged in
1. Using the left panel (or three bars on the upper left corner) go to Developer Tools -> API Explorer -> channel-types
1. Click `GET` next to `/channel-types`
1. Click `Try it out`
1. Click `Execute`
1. Search the `Response Body` "harmonyhub:device" and find your device in the JSON output
The valid commands (read: values) will be listed with the device. For example, the response body might show that for `harmonyhub:device:HarmonyHub:lasko_fan` the valid commands are `PowerToggle, Speed, Timer`
{
```json
{
"parameters": [],
"parameterGroups": [],
"description": "Send a button press to device Harmony Device",
@ -188,4 +188,5 @@ The valid commands (read: values) will be listed with the device. For example, t
"tags": [],
"UID": "harmonyhub:device:GreatRoom:lasko_fan:buttonPress",
"advanced": false
}
}
```

View File

@ -31,7 +31,7 @@ Hayward OmniLogic Connection Parameters:
| Property | Default | Required | Description |
|----------------------|----------------------------------------------------------------|----------|----------------------------------------------|
| Host Name | https://app1.haywardomnilogic.com/HAAPI/HomeAutomation/API.ash | Yes | Host name of the Hayward API server |
| Host Name | <https://app1.haywardomnilogic.com/HAAPI/HomeAutomation/API.ash> | Yes | Host name of the Hayward API server |
| User Name | None | Yes | Your Hayward User Name (not email address) |
| Password | None | Yes | Your Hayward User Password |
| Telemetry Poll Delay | 12 | Yes | Telemetry Poll Delay (10-60 seconds) |

View File

@ -10,12 +10,12 @@ A single supported thing called `collection`.
## Thing Configuration
The thing supports one setting labelled `address` which is your street number and name as it appears on Google.
*For Example:
1 Victoria Street*
_For Example:
1 Victoria Street_
> Note: The above address example is not valid as it is a business address.
*__If the address is not valid or rubbish collection service does not apply (for example, a business address) then a `CONFIGURATION_ERROR` will occur.__*
_If the address is not valid or rubbish collection service does not apply (for example, a business address) then a `CONFIGURATION_ERROR` will occur._
## Channels
@ -42,5 +42,5 @@ The collection event `collection-event` triggers on the day of rubbish collectio
You can set an `offset` in minutes.
This can then trigger the collection event before or after the normal time of 12:00am on the day of the collection.
*For Example:
If you want the event to trigger at 7pm the day before, to remind you to take out the bins, then set the `offset` to `-300` (5 hours x 60 minutes).*
_For Example:
If you want the event to trigger at 7pm the day before, to remind you to take out the bins, then set the `offset` to `-300` (5 hours x 60 minutes)._

View File

@ -14,8 +14,8 @@ but due to the lack of feedback on the actual state of the HDMI matrix when usin
This binding currently supports the following thing types:
- *multiroomplus* : Multiroom+ V3 (**Note:** This product is no longer sold by HDanywhere)
- *mhub4k431* : MHUB 4K (4X3+1)
- _multiroomplus_ : Multiroom+ V3 (**Note:** This product is no longer sold by HDanywhere)
- _mhub4k431_ : MHUB 4K (4X3+1)
## Discovery
@ -28,7 +28,7 @@ This binding does not require any special configuration.
## Thing Configuration
Each thing requires the IP address of the matrix, and the interval in between status updates that are fetched from the matrix.
Additionally, the *multiroomplus* has an additional required parameter 'ports' to specify the number of physical ports (e.g. 4x4, 8x8,...) of the matrix.
Additionally, the _multiroomplus_ has an additional required parameter 'ports' to specify the number of physical ports (e.g. 4x4, 8x8,...) of the matrix.
```java
Thing hdanywhere:mhub4k431:m1 [ipAddress="192.168.0.89",interval=15]

View File

@ -47,8 +47,8 @@ If in the future, you add additional shades, repeaters, scenes, scene groups or
|-------------------------|---------------|
| host | The host name or IP address of the hub on your network. |
| refresh | The number of milli-seconds between fetches of the PowerView hub's shade state (default 60'000 one minute). |
| hardRefresh | The number of minutes between hard refreshes of the PowerView hub's shade state (default 180 three hours). See [Refreshing the PowerView Hub Cache](#Refreshing-the-PowerView-Hub-Cache). |
| hardRefreshBatteryLevel | The number of hours between hard refreshes of battery levels from the PowerView Hub (or 0 to disable, defaulting to weekly). See [Refreshing the PowerView Hub Cache](#Refreshing-the-PowerView-Hub-Cache). |
| hardRefresh | The number of minutes between hard refreshes of the PowerView hub's shade state (default 180 three hours). See [Refreshing the PowerView Hub Cache](#refreshing-the-powerview-hub-cache). |
| hardRefreshBatteryLevel | The number of hours between hard refreshes of battery levels from the PowerView Hub (or 0 to disable, defaulting to weekly). See [Refreshing the PowerView Hub Cache](#refreshing-the-powerview-hub-cache). |
### Thing Configuration for PowerView Shades and Accessories
@ -91,9 +91,9 @@ All of these channels appear in the binding, but only those which have a physica
| Channel | Item Type | Description |
|----------------|--------------------------|-------------|
| position | Rollershutter | The vertical position of the shade's rail (if any). -- See [next chapter](#Roller-Shutter-Up/Down-Position-vs.-Open/Close-State). Up/Down commands will move the rail completely up or completely down. Percentage commands will move the rail to an intermediate position. Stop commands will halt any current movement of the rail. |
| secondary | Rollershutter | The vertical position of the secondary rail (if any). Its function is similar to the `position` channel above. -- But see [next chapter](#Roller-Shutter-Up/Down-Position-vs.-Open/Close-State). |
| vane | Dimmer | The degree of opening of the slats or vanes (if any). On some shade types, setting this to a non-zero value might first move the shade `position` fully down, since the slats or vanes can only have a defined state if the shade is in its down position. See [Interdependency between Channel positions](#Interdependency-between-Channel-positions). |
| position | Rollershutter | The vertical position of the shade's rail (if any). -- See [next chapter](#roller-shutter-updown-position-vs-openclose-state). Up/Down commands will move the rail completely up or completely down. Percentage commands will move the rail to an intermediate position. Stop commands will halt any current movement of the rail. |
| secondary | Rollershutter | The vertical position of the secondary rail (if any). Its function is similar to the `position` channel above. -- But see [next chapter](#roller-shutter-updown-position-vs-openclose-state). |
| vane | Dimmer | The degree of opening of the slats or vanes (if any). On some shade types, setting this to a non-zero value might first move the shade `position` fully down, since the slats or vanes can only have a defined state if the shade is in its down position. See [Interdependency between Channel positions](#interdependency-between-channel-positions). |
| command | String | Send a command to the shade. Valid values are: `CALIBRATE`, `IDENTIFY` |
| lowBattery | Switch | Indicates ON when the battery level of the shade is low, as determined by the hub's internal rules. |
| batteryLevel | Number | Battery level (10% = low, 50% = medium, 100% = high) |
@ -130,25 +130,25 @@ Depending on whether the shade is a top-down, bottom-up, left-right, right-left,
|-----------------------------|-------------------|-----------------------|------------------|----------------|-------------------|----------------------|
| Single action<br>bottom-up | `position` | ▲ | Up | `OPEN` | 0% | ▲ |
| | | ▼ | Down | `CLOSED` | 100% | ▼ |
| Single action<br>top-down | `position` | ▲ | Up | ***`CLOSED`*** | 0% | ▲ |
| | | ▼ | Down | ***`OPEN`*** | 100% | ▼ |
| Single action<br>right-left | `position` | ▲ | ***Left*** | `OPEN` | 0% | ▲ |
| | | ▼ | ***Right*** | `CLOSED` | 100% | ▼ |
| Single action<br>left-right | `position` | ▲ | ***Right*** | `OPEN` | 0% | ▲ |
| | | ▼ | ***Left*** | `CLOSED` | 100% | ▼ |
| Single action<br>top-down | `position` | ▲ | Up | **`CLOSED`** | 0% | ▲ |
| | | ▼ | Down | **`OPEN`** | 100% | ▼ |
| Single action<br>right-left | `position` | ▲ | _**Left**_ | `OPEN` | 0% | ▲ |
| | | ▼ | _**Right**_ | `CLOSED` | 100% | ▼ |
| Single action<br>left-right | `position` | ▲ | _**Right**_ | `OPEN` | 0% | ▲ |
| | | ▼ | _**Left**_ | `CLOSED` | 100% | ▼ |
| Dual action<br>(lower rail) | `position` | ▲ | Up | `OPEN` | 0% | ▲ |
| | | ▼ | Down | `CLOSED` | 100% | ▼ |
| Dual action<br>(upper rail) | ***`secondary`*** | ▲ | Up | ***`CLOSED`*** | 0%<sup>1)</sup> | ![](doc/right.png) |
| | | ▼ | Down | ***`OPEN`*** | 100%<sup>1)</sup> | ![](doc/left.png) |
| Blackout panel ('DuoLite') | ***`secondary`*** | ▲ | Up | `OPEN` | 0% | ▲ |
| Dual action<br>(upper rail) | _**`secondary`**_ | ▲ | Up | **`CLOSED`** | 0%<sup>1)</sup> | ![dual_action arrow_right](doc/right.png) |
| | | ▼ | Down | **`OPEN`** | 100%<sup>1)</sup> | ![dual_action arrow_left](doc/left.png) |
| Blackout panel ('DuoLite') | _**`secondary`**_ | ▲ | Up | `OPEN` | 0% | ▲ |
| | | ▼ | Down | `CLOSED` | 100% | ▼ |
***<sup>1)</sup> BUG NOTE***: In openHAB versions v3.1.x and earlier, there was a bug in the handling of the position percent value of the `secondary` shade.
_**<sup>1)</sup> BUG NOTE**_: In openHAB versions v3.1.x and earlier, there was a bug in the handling of the position percent value of the `secondary` shade.
Although the RollerShutter Up/Down commands functioned properly as described in the table above, the percent state values (e.g. displayed on a slider control), did not.
After moving the shade, the percent value would initially display the correct value, but on the next refresh it would 'flip' to the **inverse** of the correct value.
The details are shown in the following table.
This bug has been fixed from openHAB v3.2.x (or later) —
***so if you have rules that depend on the percent value, and you update from an earlier openHAB version to v3.2.x (or later), you will need to modify them!***
_so if you have rules that depend on the percent value, and you update from an earlier openHAB version to v3.2.x (or later), you will need to modify them!_
| Channel | UI Control Element | UI Control Command | Immediate Action<br>on Shade State | Dimmer Percent Display<br>(Initial => Final) |
|-------------|--------------------|---------------------|------------------------------------|----------------------------------------------|
@ -196,7 +196,7 @@ To use default hub behavior (weekly updates), set `hardRefreshBatteryLevel` to z
Note: You can also force the hub to refresh itself by sending a `REFRESH` command in a rule to an item that is connected to a channel in the hub as follows:
```
```java
rule "Hub Refresh (every 20 minutes)"
when
Time cron "0 1/20 0 ? * * *"
@ -225,7 +225,7 @@ For single shades the refresh takes the item's channel into consideration:
### `demo.things` File
```
```java
Bridge hdpowerview:hub:home "Luxaflex Hub" @ "Living Room" [host="192.168.1.123"] {
Thing shade s50150 "Living Room Shade" @ "Living Room" [id="50150"]
Thing repeater r16384 "Bedroom Repeater" @ "Bedroom" [id="16384"]
@ -236,7 +236,7 @@ Bridge hdpowerview:hub:home "Luxaflex Hub" @ "Living Room" [host="192.168.1.123"
Shade items:
```
```java
Rollershutter Living_Room_Shade_Position "Living Room Shade Position [%.0f %%]" {channel="hdpowerview:shade:home:s50150:position"}
Rollershutter Living_Room_Shade_Secondary "Living Room Shade Secondary Position [%.0f %%]" {channel="hdpowerview:shade:home:s50150:secondary"}
Dimmer Living_Room_Shade_Vane "Living Room Shade Vane [%.0f %%]" {channel="hdpowerview:shade:home:s50150:vane"}
@ -249,7 +249,7 @@ Number Living_Room_Shade_SignalStrength "Living Room Shade Signal Strength" {cha
Repeater items:
```
```java
Color Bedroom_Repeater_Color "Bedroom Repeater Color" {channel="hdpowerview:repeater:home:r16384:color"}
Dimmer Bedroom_Repeater_Brightness "Bedroom Repeater Brightness" {channel="hdpowerview:repeater:home:r16384:brightness"}
String Bedroom_Repeater_Identify "Bedroom Repeater Identify" {channel="hdpowerview:repeater:home:r16384:identify"}
@ -258,26 +258,26 @@ Switch Bedroom_Repeater_BlinkingEnabled "Bedroom Repeater Blinking Enabled [%s]"
Scene items:
```
```java
Switch Living_Room_Shades_Scene_Heart "Living Room Shades Scene Heart" <blinds> (g_Shades_Scene_Trigger) {channel="hdpowerview:hub:home:scenes#22663"}
```
Scene Group items:
```
```java
Switch Children_Rooms_Shades_Up "Good Morning Children" {channel="hdpowerview:hub:home:sceneGroups#27119"}
```
Automation items:
```
```java
Switch Automation_Children_Up_Sun "Children Up At Sunrise" {channel="hdpowerview:hub:home:automations#1262"}
Switch Automation_Children_Up_Time "Children Up At 6:30" {channel="hdpowerview:hub:home:automations#49023"}
```
### `demo.sitemap` File
```
```perl
Frame label="Living Room" {
Switch item=Living_Room_Shades_Scene_Open
Slider item=Living_Room_Shade_Position

View File

@ -1,24 +1,22 @@
# Helios Binding
This binding integrates the Heliop door/videophone system (https://www.2n.cz).
This binding integrates the Heliop door/videophone system (<https://www.2n.cz>).
## Supported Things
Currently, the Helios IP Vario is supported by this binding, running the 2.21 version of the firmware
## Binding Configuration
There is no specific binding configuration
## Thing Configuration
The ipvario221 Thing requires the IP address of the videophone, and the username and password as a configuration value in order for the binding to log into the videophone.
In the thing file, this looks e.g. like
```
```java
Thing helios:ipvario213:gate [ipAddress="192.168.0.14", username="admin", password="mypassword"]
```
@ -54,13 +52,13 @@ For switchstate, there are as well the switchstateswitch and switchstateoriginat
demo.Things:
```
```java
Thing helios:ipvario221:gate [ipAddress="192.168.0.14", username="admin", password="mypassword"]
```
demo.items:
```
```java
String GateKeyStamp "[%s]" (helios) {channel="helios:ipvario221:gate:keypressedstamp"}
String GateCardSwiped "[%s]" (helios) {channel="helios:ipvario221:gate:card"}
String GateCardStamp "[%s]" (helios) {channel="helios:ipvario221:gate:cardstamp"}
@ -72,7 +70,7 @@ String GateCodeValid "[%s]" (helios) {channel="helios:ipvario221:gate:codevalid"
demo.rules:
```
```java
rule SomeRule
when
Channel "helios:ipvario221:gate:keypressed" triggered

View File

@ -4,7 +4,7 @@ This is the binding for Helios Ventilation Systems KWL EC 200/300/500 Pro.
It requires a connection to the RS485 bus used by the original remote controls KWL-FB (9417) and does not use the Modbus/TCP interface of the newer EasyControl devices.
For electrical connection it is recommended to use an USB-RS485 interface, but any RS485 interface that shows up as a serial port will do.
Setup the device as described in https://www.openhab.org/docs/administration/serial.html.
Setup the device as described in <https://www.openhab.org/docs/administration/serial.html>.
The binding will use the remote control address 15 for communication, so make sure that this is not assigned to a physically present remote control.
@ -17,7 +17,7 @@ The binding was developed and test on a KWL EC 200 Pro device.
## Binding Configuration
The binding requires access to the serial device connecting to the RS485 bus as described in https://www.openhab.org/docs/administration/serial.html.
The binding requires access to the serial device connecting to the RS485 bus as described in <https://www.openhab.org/docs/administration/serial.html>.
Otherwise only thing configuration is needed.
## Thing Configuration
@ -67,13 +67,13 @@ Note: the configuration channels are not intended to be written regularly.
Things:
```
```java
heliosventilation:ventilation:MyKWL [ serialPort="/dev/ttyUSB0" ]
```
Items:
```
```java
Switch KWLOnOff { channel="heliosventilation:ventilation:MyKWL:powerState" }
Switch KWLWinter { channel="heliosventilation:ventilation:MyKWL:winterMode" }
@ -92,7 +92,7 @@ Number Max_Fan_Speed "Max Fan Speed" <fan> { channel="heliosventilation:ventilat
Sitemap:
```
```perl
sitemap helios_kwl label="Helios Ventilation" {
Frame label="Temperatures" {
Text item=Outside_Temperature

View File

@ -14,7 +14,6 @@ Bridge:
The binding supports a bridge to connect to the HEOS-Network.
A bridge uses the thing ID "bridge".
Player:
A generic player is supported via this binding.
Currently no differences are made between the players.
@ -24,13 +23,12 @@ Groups:
The binding supports HEOS groups.
A group uses the Thing ID "group"
## Discovery
This binding supports full automatic discovery of available players to be used as a bridge, players and groups.
You need to add a Bridge device first (which is also auto-discovered by the binding) which can be any HEOS device in your network (preferably which has wired connection).
__Important!__
**Important!**
Please note that only one bridge is required to establish a connection.
Adding a second bridge can cause trouble with the connection.
@ -59,9 +57,9 @@ The password and the user name are used to login to the HEOS account.
This is required to load the favorites, playlists and so on from personal settings.
If no login information is provided these features can't be used.
````
```java
Bridge heos:bridge:main "name" [ipAddress="192.168.0.1", unsername="xxx", password="123456"]
````
```
### Player Configuration
@ -73,9 +71,9 @@ Player have the following configuration parameter
For manual configuration a player can be defined as followed:
````
```java
Thing heos:player:player1 "name" [pid="123456789"]
````
```
PID behind the heos:player:--- should be changed as required.
It is recommended to use the Player PID.
@ -94,7 +92,7 @@ Player have the following configuration parameter
Groups will automatically appear in the Inbox if that Group is active.
To do this, build your Group from the HEOS app, then the group will appear in the Inbox.
```
```java
Thing heos:group:group1 "name" [members="45345634;35534567"]
```
@ -103,7 +101,7 @@ Thing heos:group:group1 "name" [members="45345634;35534567"]
Defining Player and Bridge together.
To ensure that the players and groups are attached to the bridge the definition can be like:
```
```java
Bridge heos:bridge:main "Bridge" [ipAddress="192.168.0.1", username="userName", password="123456"] {
player Kitchen "Kitchen"[pid="434523813"]
player LivingRoom "Living Room"[pid="918797451"]
@ -143,7 +141,7 @@ You can send commands to these channels from rules by sending the name of the se
#### Example
```
```java
Player LivingRoom_Control "Control" {channel="heos:player:main:LivingRoom:Control"}
Selection item=LivingRoom_Playlists label="Playlist" icon="music"
```
@ -224,7 +222,7 @@ A current list can be found within the HEOS CLI protocol which can be found [her
For a list of the commands please refer to the [HEOS CLI protocol](https://rn.dmglobal.com/euheos/HEOS_CLI_ProtocolSpecification_2021.pdf).
## *Dynamic Channels*
## _Dynamic Channels_
Also the bridge supports dynamic channels which represent the players of the network.
They are added dynamically if a player is found. The player and group channels are only shown on the bridge.
@ -237,7 +235,7 @@ They are added dynamically if a player is found. The player and group channels a
Example
```
```java
Switch Player_1 "Player [%s]" {channel="heos:bridge:main:P123456789"}
```
@ -247,7 +245,7 @@ Example
### demo.things:
```
```java
Bridge heos:bridge:main "Bridge" [ipAddress="192.168.0.1", username="userName", password="123456"] {
player Kitchen "Kitchen"[pid="434523813"]
player LivingRoom "Living Room"[pid="918797451"]
@ -257,7 +255,7 @@ Bridge heos:bridge:main "Bridge" [ipAddress="192.168.0.1", username="userName",
### demo.items:
```
```java
Player LivingRoom_Control "Control" {channel="heos:player:main:LivingRoom:Control"}
Switch LivingRoom_Mute "Mute"{channel="heos:player:main:LivingRoom:Mute"}
Dimmer LivingRoom_Volume "Volume" {channel="heos:player:main:LivingRoom:Volume"}
@ -270,7 +268,7 @@ String LivingRoom_Playlists {channel="heos:player:main:LivingRoom:Playlists"}
### demo.sitemap
```
```perl
Frame label="LivingRoom" {
Default item=LivingRoom_Control
Default item=LivingRoom_Mute
@ -310,7 +308,7 @@ Player B = Living Room (source)
Items:
```
```java
Switch HeosBridge_Play_Living "Living Room" (gHeos) {channel="heos:bridge:ed0ac1ff-0193-65c6-c1b8-506137456a50:P918797451"}
String HeosKitchen_Input (gHeos) {channel="heos:player:918797451:Inputs"}
String HeosKitchen_InputSelect "Input" (gHeos)
@ -318,7 +316,7 @@ String HeosKitchen_InputSelect "Input" (gHeos)
Rule for kitchen:
```
```java
rule "Play AuxIn from Living Room"
when
Item HeosKitchen_InputSelect received command
@ -335,7 +333,7 @@ rule "Play AuxIn from Living Room"
Sitemap:
```
```java
Switch item=HeosKitchen_InputSelect mappings=[aux_in_1 = "Aux In" , LivingRoom = "Living Room"]
```
@ -350,16 +348,15 @@ First you have to define a new Item within the Item section which is used later
Items:
```
```java
String HeosGroup_Status
```
Then we need a rule which triggers the state if an Item goes Online or Offline.
Rules:
```
```java
rule "Online State Heos Group"
when
@ -373,7 +370,7 @@ end
Sitemap:
```
```perl
Frame label="Heos Group" visibility=[HeosGroup_Status==ONLINE] {
Default item=HeosGroup1_Player
@ -396,7 +393,7 @@ Frame label="Heos Group" visibility=[HeosGroup_Status==ONLINE] {
Multiple actions are supported by this binding. In classic rules these are accessible as shown in the example below:
```
```java
val actions = getActions("heos","heos:bridge:bridgeId")
if(null === actions) {
logInfo("actions", "Actions not found, check thing ID")

View File

@ -1,6 +1,6 @@
# Herzborg Binding
This binding supports smart curtain motors by Herzborg (http://www.herzborg.com/pro_list.aspx?TypeID=1)
This binding supports smart curtain motors by Herzborg (<http://www.herzborg.com/pro_list.aspx?TypeID=1>)
## Supported Things
@ -58,7 +58,7 @@ All the channels are read-write
herzborg.things:
```
```java
Bridge herzborg:serial_bus:my_herzborg_bus [ port="/dev/ttyAMA1" ]
{
Thing herzborg:curtain:livingroom [ address=1234, poll_interval=1 ]
@ -67,13 +67,13 @@ Bridge herzborg:serial_bus:my_herzborg_bus [ port="/dev/ttyAMA1" ]
herzborg.items:
```
```java
Rollershutter LivingRoom_Window {channel="herzborg:curtain:livingroom:position"}
```
herzborg.sitemap:
```
```perl
Frame label="Living room curtain"
{
Switch item=LivingRoom_Window label="Control" mappings=["DOWN"="Close", "STOP"="Stop", "UP"="Open"]

View File

@ -9,13 +9,13 @@ Because all status updates and commands have to go through the API, a permanent
### Bridge
The __Home Connect API__ (Bridge Type ID: api_bridge) is responsible for the communication with the Home Connect API. All devices use a bridge to execute commands and listen for updates. Without a working bridge the devices cannot communicate.
The **Home Connect API** (Bridge Type ID: api_bridge) is responsible for the communication with the Home Connect API. All devices use a bridge to execute commands and listen for updates. Without a working bridge the devices cannot communicate.
### Devices
Supported devices: dishwasher, washer, washer / dryer combination, dryer, oven, refrigerator freezer, coffee machine, hood, cooktop*
*\* experimental support*
#### experimental support
| Home appliance | Thing Type ID |
| --------------- | ------------ |
@ -29,14 +29,12 @@ Supported devices: dishwasher, washer, washer / dryer combination, dryer, oven,
| Refrigerator Freezer | fridgefreezer |
| Coffee Machine | coffeemaker |
> **INFO**: Currently the Home Connect API does not support all appliance programs. Please check if your desired program is available (e.g. https://developer.home-connect.com/docs/washing-machine/supported_programs_and_options).
> **INFO:** Currently the Home Connect API does not support all appliance programs. Please check if your desired program is available (e.g. <https://developer.home-connect.com/docs/washing-machine/supported_programs_and_options>).
## Discovery
After the bridge has been added and authorized, devices are discovered automatically.
## Channels
| Channel Type ID | Item Type | Read only | Description | Available on thing |
@ -84,65 +82,57 @@ After the bridge has been added and authorized, devices are discovered automatic
| functional_light_state | Switch | false | This setting describes the current functional light state of the home appliance. | hood |
| functional_light_brightness_state | Dimmer | false | This setting describes the brightness state of the functional light. | hood |
| ambient_light_state | Switch | false | This setting describes the current ambient light state of the home appliance. | dishwasher, hood |
| ambient_light_brightness_state | Dimmer | false | This setting describes the brightness state of the ambient light. *INFO: Please note that the brightness can't be set if the ambient light color is set to `CustomColor`.* | dishwasher, hood |
| ambient_light_brightness_state | Dimmer | false | This setting describes the brightness state of the ambient light. _INFO: Please note that the brightness can't be set if the ambient light color is set to `CustomColor`._ | dishwasher, hood |
| ambient_light_color_state | String | false | This setting describes the current ambient light color state of the home appliance. | dishwasher, hood |
| ambient_light_custom_color_state | Color | false | This setting describes the custom color state of the ambient light. HSB color commands are supported as well as hex color string e.g. `#11ff00`. *INFO: Please note that the brightness can't be set.* | dishwasher, hood |
| ambient_light_custom_color_state | Color | false | This setting describes the custom color state of the ambient light. HSB color commands are supported as well as hex color string e.g. `#11ff00`. _INFO: Please note that the brightness can't be set._ | dishwasher, hood |
## Thing Configuration
### Configuring the __Home Connect API__ Bridge
### Configuring the **Home Connect API** Bridge
#### 1. Preconditions
1. Please create an account at [Home Connect](https://www.home-connect.com/) and add your physical appliance to your account.
2. Test the connection to your physical appliance via mobile app ([Apple App Store (iOS)](https://itunes.apple.com/de/app/home-connect-app/id901397789?mt=8) or [Google Play Store (Android)](https://play.google.com/store/apps/details?id=com.bshg.homeconnect.android.release)).
1. Test the connection to your physical appliance via mobile app ([Apple App Store (iOS)](https://itunes.apple.com/de/app/home-connect-app/id901397789?mt=8) or [Google Play Store (Android)](https://play.google.com/store/apps/details?id=com.bshg.homeconnect.android.release)).
#### 2. Create Home Connect developer account
1. Create an account at [https://developer.home-connect.com](https://developer.home-connect.com) and login.
2. Please make sure you've added your associated Home Connect account email at <https://developer.home-connect.com/user/me/edit>. You should fill in your email address, which you use for the official Android or iOS app, at `Default Home Connect User Account for Testing`.
1. Please make sure you've added your associated Home Connect account email at <https://developer.home-connect.com/user/me/edit>. You should fill in your email address, which you use for the official Android or iOS app, at `Default Home Connect User Account for Testing`.
![Screenshot Home Connect profile page](doc/home_connect_profile.png "Screenshot Home Connect profile page")
3. Register / Create an application at [https://developer.home-connect.com/applications](https://developer.home-connect.com/applications)
* _Application ID_: e.g. `openhab-binding`
* _OAuth Flow_: Authorization Code Grant Flow
* _Home Connect User Account for Testing_: the associated user account email from [Home Connect](https://www.home-connect.com/)
1. Register / Create an application at [https://developer.home-connect.com/applications](https://developer.home-connect.com/applications)
- _Application ID_: e.g. `openhab-binding`
- _OAuth Flow_: Authorization Code Grant Flow
- _Home Connect User Account for Testing_: the associated user account email from [Home Connect](https://www.home-connect.com/)
> **WARNING**: Please don't use your developer account username
**_Please don't use your developer account username_**
* _Redirect URIs_: add your openHAB URL followed by `/homeconnect`
- _Redirect URIs_: add your openHAB URL followed by `/homeconnect`
for example: `http://192.168.178.34:8080/homeconnect` or `https://myhome.domain.com/homeconnect`
* _One Time Token Mode_: keep unchecked
* _Proof Key for Code Exchange_: keep unchecked
4. After your application has been created, you should see the _Client ID_ and _Client Secret_ of the application. Please save these for later.
- _One Time Token Mode_: keep unchecked
- _Proof Key for Code Exchange_: keep unchecked
1. After your application has been created, you should see the _Client ID_ and _Client Secret_ of the application. Please save these for later.
![Screenshot Home Connect application page](doc/home_connect_application.png "Screenshot Home Connect application page")
#### 3. Setup bridge (openHAB UI)
The Home Connect bridge can be configured in the openHAB UI as follows:
1. Go to the Inbox and press the add button
2. Choose `Home Connect Binding`
3. Select `Home Connect API`
4. Setup and save thing
* __client id:__ your application client id
* __client secret:__ your application client secret
* __simulator:__ false
5. Now navigate to the URL (`Redirct URI`) you've added to your Home Connect application in the previous step (2.3). For example `http://192.168.178.80:8080/homeconnect`.
6. Please follow the steps shown to authenticate your binding. You can redo this step every time. For example if you have authentication problems, just start wizard again.
1. Choose `Home Connect Binding`
1. Select `Home Connect API`
1. Setup and save thing
- **client id:** your application client id
- **client secret:** your application client secret
- **simulator:** false
1. Now navigate to the URL (`Redirct URI`) you've added to your Home Connect application in the previous step (2.3). For example `http://192.168.178.80:8080/homeconnect`.
1. Please follow the steps shown to authenticate your binding. You can redo this step every time. For example if you have authentication problems, just start wizard again.
![Screenshot Home Connect wizard page 1](doc/homeconnect_setup_1.png "Screenshot Home Connect wizard page 1")
![Screenshot Home Connect wizard page 2](doc/homeconnect_setup_2.png "Screenshot Home Connect wizard page 2")
![Screenshot Home Connect wizard page 3](doc/homeconnect_setup_3.png "Screenshot Home Connect wizard page 3")
![Screenshot Home Connect wizard page 4](doc/homeconnect_setup_4.png "Screenshot Home Connect wizard page 4")
7. That's it! Now you can use autodiscovery to add devices. Your devices should show up if you start a device scan in the openHAB UI.
1. That's it! Now you can use autodiscovery to add devices. Your devices should show up if you start a device scan in the openHAB UI.
## Examples: File based configuration
@ -150,7 +140,7 @@ If you prefer to configure everything via file instead of openHAB UI, here are s
### things/homeconnect.things
```
```java
Bridge homeconnect:api_bridge:api_bridge_at_home "Home Connect API" [ clientId="1234", clientSecret="1234", simulator=false] {
// Thing configurations
Thing dishwasher dishwasher1 "Dishwasher" [ haId="SIEMENS-HCS02DWH1-6F2FC400C1EA4A" ]
@ -170,7 +160,7 @@ Bridge homeconnect:api_bridge:api_bridge_at_home "Home Connect API" [ clientId="
The channel parameter uses the following syntax: `homeconnect:<thing type id>:<bridge id>:<thing id>:<channel type id>`. For example: `homeconnect:dishwasher:api_bridge_at_home:dishwasher1:power_state`
```
```java
// dishwasher
Switch Dishwasher_PowerState "Power State" {channel="homeconnect:dishwasher:api_bridge_at_home:dishwasher1:power_state"}
Contact Dishwasher_DoorState "Door State" {channel="homeconnect:dishwasher:api_bridge_at_home:dishwasher1:door_state"}
@ -185,15 +175,15 @@ Number:Dimensionless Dishwasher_ProgramProgressState "Progress State"
## Home Connect Console
The binding comes with a separate user interface, which is reachable through the web browser http(s)://[YOUROPENHAB]:[YOURPORT]/homeconnect (e.g. http://192.168.178.100:8080/homeconnect).
The binding comes with a separate user interface, which is reachable through the web browser http(s)://[YOUROPENHAB]:[YOURPORT]/homeconnect (e.g. `http://192.168.178.100:8080/homeconnect`).
Features:
* overview of your bridges and appliances
* send commands to your appliances
* see latest API requests
* see received events from the Home Connect backend
* API request counts
- overview of your bridges and appliances
- send commands to your appliances
- see latest API requests
- see received events from the Home Connect backend
- API request counts
> **INFO**: If you have a problems with your installation, please always provide request and event exports. ![Screenshot Home Connect wizard page 4](doc/export_button.png "Export button")
@ -205,9 +195,9 @@ To get notified when your Home Connect credentials have been revoked or expired
This can happen if
* your openHAB instance was offline for a longer period or
* new terms weren't accepted or
* a technical problem occurred.
- your openHAB instance was offline for a longer period or
- new terms weren't accepted or
- a technical problem occurred.
```java
rule "Offline check - Home Connect bridge"
@ -238,15 +228,14 @@ Currently, not all program options of a device are available as items in openHAB
You have a couple options to get the program settings payload.
a) You could have a look at the Home Connect developer documentation (https://developer.home-connect.com/docs/) and create the payload on your own.
a) You could have a look at the Home Connect developer documentation (<https://developer.home-connect.com/docs/>) and create the payload on your own.
b) You could have a look at the request logs and extract the payload from there.
1. On the physical device, select your desired program with the appropriate options.
2. Open the appliance section of the binding UI (http(s)://[YOUROPENHAB]:[YOURPORT]/appliances) and click the 'Selected Program' button.
1. Open the appliance section of the binding UI (http(s)://[YOUROPENHAB]:[YOURPORT]/appliances) and click the 'Selected Program' button.
![Screenshot Home Connect wizard page 4](doc/selected_program_1.png "Get selected program")
3. ![Screenshot Home Connect wizard page 4](doc/selected_program_2.png "Get selected program") Copy the JSON payload. In a further step, this payload will be used to start the program.
1. ![Screenshot Home Connect wizard page 4](doc/selected_program_2.png "Get selected program") Copy the JSON payload. In a further step, this payload will be used to start the program.
#### 2. Start program
@ -254,7 +243,7 @@ After you've extracted the desired program command, you can start your program v
##### in rule
*Example rule:*
_Example rule:_
```java
rule "trigger program"
@ -269,9 +258,9 @@ Please replace `homeconnect_CoffeeMaker_BOSCH_HCS06COM1_B95E5103934D_basic_actio
##### via curl
*Example command:*
_Example command:_
```bash
```shell
curl -X POST --header "Content-Type: text/plain" --header "Accept: application/json" -d '{"data":{"key":"ConsumerProducts.CoffeeMaker.Program.Beverage.EspressoMacchiato","options":[{"key":"ConsumerProducts.CoffeeMaker.Option.CoffeeTemperature","value":"ConsumerProducts.CoffeeMaker.EnumType.CoffeeTemperature.94C","unit":"enum"},{"key":"ConsumerProducts.CoffeeMaker.Option.BeanAmount","value":"ConsumerProducts.CoffeeMaker.EnumType.BeanAmount.Mild","unit":"enum"},{"key":"ConsumerProducts.CoffeeMaker.Option.FillQuantity","value":60,"unit":"ml"}]}}' "http://localhost:8080/rest/items/homeconnect_CoffeeMaker_BOSCH_HCS06COM1_B95E5103934D_basic_actions_state"
```
@ -298,7 +287,6 @@ Please check log UI (http(s)://[YOUROPENHAB]:[YOURPORT]/homeconnect) and ask for
The Home Connect API enforces rate [limits](https://developer.home-connect.com/docs/general/ratelimiting). If you have a lot of `429` response codes in your request log section (http(s)://[YOUROPENHAB]:[YOURPORT]/log/requests), please check the error response.
### Error message 'Program not supported', 'Unsupported operation' or 'SDK.Error.UnsupportedOption'
Not all appliance programs and program options are supported by the Home Connect API. Unfortunately you can't use them. You will see error messages like the following in the binding UI (request log):
@ -326,4 +314,4 @@ Not all appliance programs and program options are supported by the Home Connect
You have two options to find the right HaID of your device.
1. You can use the openHAB UI and start a scan. ![Screenshot openHAB UI Scan for new devices](doc/ui-scan-for-haid.png "Scan")
2. You can use Home Connect binding UI. Please have a look at the first API request. ![Screenshot Home Connect Binding UI](doc/binding-ui-haid.png "First request")
1. You can use Home Connect binding UI. Please have a look at the first API request. ![Screenshot Home Connect Binding UI](doc/binding-ui-haid.png "First request")

View File

@ -10,7 +10,7 @@ The CCU has to be configured to have "XML-RPC" set to "Full Access" or "Restrict
Also the "Remote Homematic-Script API" has to be set to "Full Access" or "Restricted access".
When the option "Restricted access" is used, some ports have to be added to the "Port opening" list.
```
```text
2000;
2001;
2010;
@ -24,7 +24,7 @@ Also under `Home page > Settings > Control panel` with the menu `Security` the o
If this is not done the binding will not be able to connect to the CCU and the CCU Thing will stay uninitialized and sets a timeout exception:
```
```text
xxx-xx-xx xx:xx:xx.xxx [hingStatusInfoChangedEvent] - - 'homematic:bridge:xxx' changed from INITIALIZING to OFFLINE (COMMUNICATION_ERROR): java.net.SocketTimeoutException: Connect Timeout
```
@ -192,19 +192,19 @@ homematic:bridge:NAME
### Example
**Minimum configuration**
#### Minimum configuration
```java
Bridge homematic:bridge:ccu [ gatewayAddress="..."]
```
**With callback settings**
#### With callback settings
```java
Bridge homematic:bridge:ccu [ gatewayAddress="...", callbackHost="...", callbackPort=... ]
```
**Multiple bridges**
#### Multiple bridges
```java
Bridge homematic:bridge:lxccu [ gatewayAddress="..."]
@ -374,10 +374,10 @@ The remote control display is limited to five characters, a longer text is trunc
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
- 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.
@ -426,11 +426,11 @@ Adds multiple virtual datapoints to the HM-Dis-WM55 and HM-Dis-EP-WM55 devices t
**Note:** The HM-Dis-EP-WM55 has only a black and white display and therefore does not support datapoints for colored lines. In addition, only lines 1-3 can be set.
#### Example ####
#### Example
Display text at line 1,3 and 5 when the bottom button on the display is pressed
**Items**
##### Items
```java
String Display_line_1 "Line 1" { channel="homematic:HM-Dis-WM55:ccu:NEQ0123456:1#DISPLAY_LINE_1" }
@ -449,7 +449,7 @@ Switch Button_bottom "Button" { channel="homematic:HM-Dis-WM55:ccu:NEQ0123
Switch Display_submit "Submit" { channel="homematic:HM-Dis-WM55:ccu:NEQ0123456:1#DISPLAY_SUBMIT" }
```
**Rule**
##### Rule
```javascript
rule "Display Test"
@ -473,6 +473,7 @@ end
```
**Available icons:**
- NONE
- OFF
- ON
@ -488,6 +489,7 @@ end
- SIGNAL_RED
**Available colors (only HM-Dis-WM55):**
- NONE(=WHITE)
- WHITE
- RED
@ -503,6 +505,7 @@ The HmIP-WRCD display lines can be set via a combined parameter:
```java
String Display_CombinedParam "Combined Parameter" {channel="homematic:HmIP-WRCD:ccu:123456:3#COMBINED_PARAMETER"}
```
#### Set Display Lines
The combined parameter can be used in a rule file like this:
@ -518,13 +521,14 @@ openhab:send Display_CombinedParam '{DDBC=WHITE,DDTC=BLACK,DDI=0,DDA=CENTER,DDS=
```
**Key translation:**
- DDBC: Background color of this line. (*WHITE*, *BLACK*)
- DDTC: Text color of this line. (*WHITE*, *BLACK*)
- DDBC: Background color of this line. (_WHITE_, _BLACK_)
- DDTC: Text color of this line. (_WHITE_, _BLACK_)
- DDI: Icon to be shown after text. (see icon listing below)
- DDA: Alignment of this line. (*LEFT*, *CENTER*, *RIGHT*)
- DDA: Alignment of this line. (_LEFT_, _CENTER_, _RIGHT_)
- DDS: Text of this line. (String, but see special character listing below)
- DDID: Line number. (*1-5*)
- DDC: Commit, should be set in the last line, otherwise leave unset. (*true*)
- DDID: Line number. (_1-5_)
- DDC: Commit, should be set in the last line, otherwise leave unset. (_true_)
Each line can be updated separately without changing the other lines.
@ -536,6 +540,7 @@ Display_CombinedParam.sendCommand("{DDBC=WHITE,DDTC=BLACK,DDI=24,DDA=LEFT,DDS=Wi
```
**Special Characters:**
- [ -> Ä
- \# -> Ö
- $ -> Ü
@ -552,6 +557,7 @@ Display_CombinedParam.sendCommand("{DDBC=WHITE,DDTC=BLACK,DDI=24,DDA=LEFT,DDS=Wi
- @ -> Arrow Down Right
**Icons:**
- 0 - No Icon
- 1 - Light off
- 2 - Light on
@ -592,17 +598,21 @@ The display can also make short beep alarms:
```java
Display_CombinedParam.sendCommand("{R=0,IN=10,ANS=0}")
```
Note, that a commit (`DDC`) is not necessary for sounds.
As with line configuration, this can be combined with other line updates, separated with a comma.
**Key translations**
- R: Repetitions (*0 to 15*, 15=infinite)
- IN: Interval (*5 to 80* in steps of five)
- ANS: Beep sound (*-1 to 7*, see beep table)
##### Key translations
- R: Repetitions (_0 to 15_, 15=infinite)
- IN: Interval (_5 to 80_ in steps of five)
- ANS: Beep sound (_-1 to 7_, see beep table)
##### Beep Sounds
**Beep Sounds**
This is the official mapping for the beep sounds
- -1 - No Sound
- 0 - Empty Battery
- 1 - Alarm Off
@ -615,7 +625,7 @@ This is the official mapping for the beep sounds
## Troubleshooting
**SHORT & LONG_PRESS events of push buttons do not occur on the event bus**
### SHORT & LONG_PRESS events of push buttons do not occur on the event bus
It seems buttons like the HM-PB-2-WM55 do just send these kind of events to the CCU if they are mentioned in a CCU program.
A simple workaround to make them send these events is, to create a program (rule inside the CCU) that does just have a "When" part and no "Then" part, in this "When" part each channel needs to be mentioned at least once.
@ -623,13 +633,13 @@ As the HM-PB-2-WM55 for instance has two channels, it is enough to mention the S
The LONG_PRESS events will work automatically as they are part of the same channels.
After the creation of this program, the button device will receive configuration data from the CCU which have to be accepted by pressing the config-button at the back of the device.
**INSTALL_TEST**
### INSTALL_TEST
If a button is still not working and you do not see any PRESS_LONG / SHORT in your log file (log level DEBUG), it could be because of enabled security.
Try to disable security of your buttons in the HomeMatic Web GUI and try again.
If you can't disable security try to use key INSTALL_TEST which gets updated to ON for each key press
**-1 Failure**
### -1 Failure
A device may return this failure while fetching the datapoint values.
I have tested pretty much but I did not find the reason.
@ -640,12 +650,12 @@ Fetching values is only done at startup or if you trigger a REFRESH.
I hope this will be fixed in one of the next CCU firmwares.
With [Homegear](https://www.homegear.eu) everything works as expected.
**No variables and scripts in GATEWAY-EXTRAS**
### No variables and scripts in GATEWAY-EXTRAS
The gateway autodetection of the binding can not clearly identify the gateway and falls back to the default implementation.
Use the ```gatewayType=ccu``` config to force the binding to use the CCU implementation.
**Variables out of sync**
### Variables out of sync
The CCU only sends an event if a datapoint of a device has changed.
There is (currently) no way to receive an event automatically when a variable has changed.
@ -677,6 +687,7 @@ Var_1.sendCommand(RefreshType.REFRESH)
``` php
Var_1.sendCommand(REFRESH)
```
:::
::::
@ -689,7 +700,7 @@ You have to delete the thing, start a scan and add it again.
In case of problems in the discovery or if above mentioned error message appears in `openhab.log`, the size for the transmission buffer for the communication with the gateway is too small.
The problem can be solved by increasing the `bufferSize` value in the bridge configuration.
**Rollershutters are inverted**
### Rollershutters are inverted
openHAB and the CCU are using different values for the same state of a rollershutter.
Examples: HmIP-BROLL, HmIP-FROLL, HmIP-BBL, HmIP-FBL and HmIP-DRBLI4
@ -698,7 +709,7 @@ Examples: HmIP-BROLL, HmIP-FROLL, HmIP-BBL, HmIP-FBL and HmIP-DRBLI4
| openHAB | 0% | 100% |
| CCU | 100% | 0% |
** The binding does not receive any status changes from the Homematic gateway**
### The binding does not receive any status changes from the Homematic gateway
First of all, make sure that none of the ports needed to receive status changes from the gateway are blocked by firewall settings.

View File

@ -28,7 +28,7 @@ For DSMR5 meters this is generally once per second, for older versions the frequ
Example of configuration through a .thing file:
```
```java
Thing homewizard:p1_wifi_meter:my_meter [ ipAddress="192.178.1.67", refreshDelay=5 ]
```
@ -47,10 +47,9 @@ Thing homewizard:p1_wifi_meter:my_meter [ ipAddress="192.178.1.67", refreshDelay
| total_gas | Number:Volume | The most recently reported total imported gas in m^3. |
| gas_timestamp | DateTime | The time stamp of the total_gas measurement. |
Example of configuration through a .items file:
```
```java
Number:Energy Energy_Import_T1 "Imported Energy T1 [%.0f kWh]" {channel="homewizard:p1_wifi_meter:my_meter:total_energy_import_t1" }
Number:Power Active_Power_L1 "Active Power Phase 1 [%.1f W]" {channel="homewizard:p1_wifi_meter:my_meter:active_power_l1" }
DateTime Gas_Update "Gas Update Time [%1$tH:%1$tM]" {channel="homewizard:p1_wifi_meter:my_meter:gas_timestamp" }

View File

@ -75,23 +75,23 @@ The configuration parameters are:
Notes:
* All channels are dynamically added at runtime.
* The word color in channel names follows American spelling ("color").
* The `colorLevel`, `colorMarkingUsed` and `colorPagesRemaining` channels are used on printers that have only a single color cartridge instead of separate Ccyan, magenta and yellow cartridges.
* The `scanner` group is for the scanning engine which consists of scan, copy and other operations; the `scan` group is for scanner operations only.
* If no `status` group channels are selected, then those relevant data endpoints on the *Embedded Web Server* are not polled for status information.
- All channels are dynamically added at runtime.
- The word color in channel names follows American spelling ("color").
- The `colorLevel`, `colorMarkingUsed` and `colorPagesRemaining` channels are used on printers that have only a single color cartridge instead of separate Ccyan, magenta and yellow cartridges.
- The `scanner` group is for the scanning engine which consists of scan, copy and other operations; the `scan` group is for scanner operations only.
- If no `status` group channels are selected, then those relevant data endpoints on the _Embedded Web Server_ are not polled for status information.
## Full Textual Example
### Thing File
```
```java
Thing hpprinter:printer:djprinter "Printer" @ "Office" [ ipAddress="192.168.1.1", usageInterval="30", statusInterval="4" ]
```
### Item File
```
```java
String PrinterStatus "Status" { channel="hpprinter:printer:djprinter:status#status" }
Number:Dimensionless PrinterBlackLevel "Black Level" { channel="hpprinter:printer:djprinter:ink#blackLevel" }
@ -108,31 +108,31 @@ Number PrinterTotalMonochromePages "Total Monochrome Pages" { channel="hpprinter
Black Ink displayed as a whole percentage - `60 %`
```
```perl
Text item=hpprinter_printer_djprinter_ink_blackLevel label="Black [%.0f %unit%]"
```
Black Marker displayed in millilitres - `21 ml`
*Default*
_Default_
```
```perl
Text item=hpprinter_printer_djprinter_usage_blackMarker label="Black Marker [%.0f %unit%]"
```
Black Marker displayed in litres - `0.021 l`
```
```perl
Text item=hpprinter_printer_djprinter_usage_blackMarker label="Black Marker [%.3f l]"
```
Black Marker displayed in microlitres - `21000 µl`
```
```perl
Text item=hpprinter_printer_djprinter_usage_blackMarker label="Black Marker [%.0f µl]"
```
Scanner Document Feeder loaded with text status display - `ON` or `OFF`
```
```perl
Text item=hpprinter_printer_djprinter_status_scannerAdfLoaded label="ADF Loaded [%s]"
```

View File

@ -26,14 +26,14 @@ It can be extended with different channels.
| `headers` | yes | - | Additional headers that are sent along with the request. Format is "header=value". Multiple values can be stored as `headers="key1=value1", "key2=value2", "key3=value3",`. When using text based configuration include at minimum 2 headers to avoid parsing errors.|
| `ignoreSSLErrors` | no | false | If set to true ignores invalid SSL certificate errors. This is potentially dangerous.|
*Note:* Optional "no" means that you have to configure a value unless a default is provided and you are ok with that setting.
_Note:_ Optional "no" means that you have to configure a value unless a default is provided and you are ok with that setting.
*Note:* The `BASIC_PREEMPTIVE` mode adds basic authentication headers even if the server did not request authentication.
_Note:_ The `BASIC_PREEMPTIVE` mode adds basic authentication headers even if the server did not request authentication.
This is dangerous and might be misused.
The option exists to be able to authenticate when the server is not sending the proper 401/Unauthorized code.
Authentication might fail if redirections are involved as headers are stripper prior to redirection.
*Note:* If you rate-limit requests by using the `delay` parameter you have to make sure that the time between two refreshes is larger than the time needed for one refresh cycle.
_Note:_ If you rate-limit requests by using the `delay` parameter you have to make sure that the time between two refreshes is larger than the time needed for one refresh cycle.
**Attention:** `baseUrl` (and `stateExtension`/`commandExtension`) should not normally use escaping (e.g. `%22` instead of `"` or `%2c` instead of `,`).
URLs are properly escaped by the binding itself before the request is sent.
@ -52,7 +52,7 @@ The `image` channel-type supports `stateExtension`, `stateContent` and `escapedU
|-------------------------|----------|-------------|-------------|
| `stateExtension` | yes | - | Appended to the `baseURL` for requesting states. |
| `commandExtension` | yes | - | Appended to the `baseURL` for sending commands. If empty, same as `stateExtension`. |
| `stateTransformation ` | yes | - | One or more transformation applied to received values before updating channel. |
| `stateTransformation` | yes | - | One or more transformation applied to received values before updating channel. |
| `commandTransformation` | yes | - | One or more transformation applied to channel value before sending to a remote. |
| `escapedUrl` | yes | - | This specifies whether the URL is already escaped. |
| `stateContent` | yes | - | Content for state requests (if method is `PUT` or `POST`) |
@ -163,13 +163,13 @@ After the parameter reference the format needs to be appended.
See the link above for more information about the available format parameters (e.g. to use the string representation, you need to append `s` to the reference, for a timestamp `t`).
When sending an OFF command on 2020-07-06, the URL
```
```text
http://www.domain.org/home/lights/23871/?status=%2$s&date=%1$tY-%1$tm-%1$td
```
is transformed to
```
```text
http://www.domain.org/home/lights/23871/?status=OFF&date=2020-07-06
```
@ -177,7 +177,7 @@ http://www.domain.org/home/lights/23871/?status=OFF&date=2020-07-06
### `demo.things`
```
```java
Thing http:url:foo "Foo" [
baseURL="https://example.com/api/v1/metadata-api/web/metadata",
headers="key1=value1", "key2=value2", "key3=value3",

View File

@ -1,7 +1,10 @@
## Vito WIFI (https://github.com/openhab/openhab-addons/issues/9480#issuecomment-751335696)
# Xtend Examples
## Vito WIFI (<https://github.com/openhab/openhab-addons/issues/9480#issuecomment-751335696>)
### .things
```
```java
Thing http:url:vitowifi "VitoWifi" @ "1stfloor" [baseURL="http://192.168.1.61/", commandMethod="POST", delay="1000", refresh="90", timeout="900"] {
Channels:
@ -13,21 +16,21 @@ Thing http:url:vitowifi "VitoWifi" @ "1stfloor" [baseURL="http://192.168.1.61/",
### .items
```
```java
Number Vito_ID "Vito_ID" <switch> (gHeating) {channel="http:url:vitowifi:Channel_Vito_ID" , expire="5m" }
Number Vito_Mode "Vito_Mode" <switch> (gHeating) {channel="http:url:vitowifi:Channel_Vito_Mode" , expire="5m" }// 0= Off 1= WW 2= WW+heat 0x42 (66)=party
Number Vito_OnOff "ONOFF Switch" <switch> (gHeating) {channel="http:url:vitowifi:Channel_Vito_OnOff" , expire="5m" }
```
## Feinstaubsensor (https://community.openhab.org/t/http-binding-openhab-3-version/101851/235)
## Feinstaubsensor (<https://community.openhab.org/t/http-binding-openhab-3-version/101851/235>)
The http request http://feinstaubsensor-14255834/data.json is answering with a JSON string.
The http request `http://feinstaubsensor-14255834/data.json` is answering with a JSON string.
So I need some simple JSONPATH transformation and one java script transformation.
Data is polled every 10 seconds.
### .things
```
```java
Thing http:url:feinstaub "Feinstaub" [ baseURL="http://feinstaubsensor-14255834/data.json", refresh=10] {
Channels:
Type number : SDS_PM10 [ stateTransformation="JSONPATH:$.sensordatavalues[0].value" ]
@ -40,7 +43,7 @@ Thing http:url:feinstaub "Feinstaub" [ baseURL="http://feinstaubsensor-14255834/
### .items
```
```java
/* **************************
* Feinstaub sensor data
* ************************** */
@ -55,7 +58,7 @@ Thing http:url:feinstaub "Feinstaub" [ baseURL="http://feinstaubsensor-14255834/
I have a BME2080 sensor connected. The Humidity must be diveded by 100 to show hPa.
```
```javascript
(function(x) {
var json = JSON.parse(x);
return json.sensordatavalues[3].value/100;

View File

@ -77,7 +77,7 @@ The Hue Bridge is discovered through mDNS in the local network.
Auto-discovery is enabled by default.
To disable it, you can add the following line to `<openHAB-conf>/services/runtime.cfg`:
```
```text
discovery.hue:background=false
```
@ -89,7 +89,7 @@ Once the binding is authorized, it automatically reads all devices and groups th
The Hue Bridge requires the IP address as a configuration value in order for the binding to know where to access it.
In the thing file, this looks e.g. like
```
```java
Bridge hue:bridge:1 [ ipAddress="192.168.0.64" ]
```
@ -98,7 +98,7 @@ Please note that the generated user name cannot be written automatically to the
The generated user name can be found, after pressing the authentication button on the bridge, with the following console command: `hue <bridgeUID> username`.
The user name can be set using the `userName` configuration value, e.g.:
```
```java
Bridge hue:bridge:1 [ ipAddress="192.168.0.64", userName="qwertzuiopasdfghjklyxcvbnm1234" ]
```
@ -117,13 +117,13 @@ Bridge hue:bridge:1 [ ipAddress="192.168.0.64", userName="qwertzuiopasdfghjklyxc
The devices are identified by the number that the Hue Bridge assigns to them (also shown in the Hue App as an identifier).
Thus, all it needs for manual configuration is this single value like
```
```java
0210 bulb1 "Lamp 1" @ "Office" [ lightId="1" ]
```
or
```
```java
0107 motion-sensor "Motion Sensor" @ "Entrance" [ sensorId="4" ]
```
@ -131,24 +131,23 @@ You can freely choose the thing identifier (such as motion-sensor), its name (su
The following device types also have an optional configuration value to specify the fade time in milliseconds for the transition to a new state:
* Dimmable Light
* Dimmable Plug-in Unit
* Colour Light
* Extended Colour Light
* Colour Temperature Light
- Dimmable Light
- Dimmable Plug-in Unit
- Colour Light
- Extended Colour Light
- Colour Temperature Light
| Parameter | Description |
|-----------|-------------------------------------------------------------------------------|
| lightId | Number of the device provided by the Hue Bridge. **Mandatory** |
| fadetime | Fade time in Milliseconds to a new state (min="0", step="100", default="400") |
### Groups
The groups are identified by the number that the Hue Bridge assigns to them.
Thus, all it needs for manual configuration is this single value like
```
```java
group kitchen-bulbs "Kitchen Lamps" @ "Kitchen" [ groupId="1" ]
```
@ -161,7 +160,6 @@ The group type also have an optional configuration value to specify the fade tim
| groupId | Number of the group provided by the Hue Bridge. **Mandatory** |
| fadetime | Fade time in Milliseconds to a new state (min="0", step="100", default="400") |
## Channels
The devices support some of the following channels:
@ -232,7 +230,6 @@ The `tap_switch_event` can trigger one of the following events:
| Button 3 | Button 3 | 17 |
| Button 4 | Button 4 | 18 |
## Rule Actions
This binding includes a rule action, which allows to change a light channel with a specific fading time from within rules.
@ -264,7 +261,7 @@ And there is one Hue Motion Sensor (represented by three devices) and a Hue Dimm
### demo.things:
```
```java
Bridge hue:bridge:1 "Hue Bridge" [ ipAddress="192.168.0.64" ] {
0210 bulb1 "Lamp 1" @ "Kitchen" [ lightId="1" ]
0220 bulb2 "Lamp 2" @ "Kitchen" [ lightId="2" ]
@ -278,7 +275,7 @@ Bridge hue:bridge:1 "Hue Bridge" [ ipAddress="192.168
### demo.items:
```
```java
// Bulb1
Switch Light1_Toggle { channel="hue:0210:1:bulb1:color" }
Dimmer Light1_Dimmer { channel="hue:0210:1:bulb1:color" }
@ -319,7 +316,7 @@ Also, if you are doing all your configuration through files, you may add the ful
### demo.sitemap:
```
```perl
sitemap demo label="Main Menu"
{
Frame {

View File

@ -6,32 +6,31 @@ The Hydrawise binding allows monitoring and control of [Hunter Industries's](htt
## Supported Things
### Account Bridge Thing
The Account Bridge Thing type represents the user's account on the Hydrawise cloud service. The bridge can have one or more child [Controllers](#Controller-Thing) linked.
The Account Bridge Thing type represents the user's account on the Hydrawise cloud service. The bridge can have one or more child [Controllers](#controller-thing) linked.
An account must be manually added and configured.
### Controller Thing
Controller Things are automatically discovered once an [Account Bridge](#Account-Bridge-Thing) has be properly configured.
Controller Things are automatically discovered once an [Account Bridge](#account-bridge-thing) has be properly configured.
The Controller Thing type is the primary way most users will control and monitor their irrigation system.
This allows full control over zones, sensors and weather forecasts.
Changes made through this Thing type will be reflected in the Hydrawise mobile and web applications as well as in their reporting modules.
Controller Things require a parent [Account Bridge](#Account-Bridge-Thing)
Controller Things require a parent [Account Bridge](#account-bridge-thing)
#### Controller Thing Supported Channel Groups
| channel group ID |
|-----------------------------------------------|
| [Controller](#Cloud-Controller-Channel-Group) |
| [Zones](#Zone-Channel-Group) |
| [All Zones](#All-Zones-Channel-Group) |
| [Sensor](#Sensor-Channel-Group) |
| [Forecast](#Sensor-Channel-Group) |
| [Controller](#controller-thing-1) |
| [Zones](#zone-channel-group) |
| [All Zones](#all-zones-channel-group) |
| [Sensor](#sensor-channel-group) |
| [Forecast](#forecast-channel-group) |
### Local Thing
@ -43,15 +42,15 @@ Local control may not be available on later Hydrawise controller firmware versio
Use Cases
* The Local thing can be useful when testing zones, as there is no delay when starting/stopping zones as compared to the cloud API which can take anywhere between 5-15 seconds.
* This is also useful if you wish to not use the cloud scheduling at all and use openHAB as the irrigation scheduling system.
- The Local thing can be useful when testing zones, as there is no delay when starting/stopping zones as compared to the cloud API which can take anywhere between 5-15 seconds.
- This is also useful if you wish to not use the cloud scheduling at all and use openHAB as the irrigation scheduling system.
#### Local Thing Supported Channel Groups
| channel group ID |
|---------------------------------------|
| [Zones](#Zone-Channel-Group) |
| [All Zones](#All-Zones-Channel-Group) |
| [Zones](#zone-channel-group) |
| [All Zones](#all-zones-channel-group) |
## Thing Configuration
@ -71,7 +70,6 @@ Use Cases
|--------------------|---------|----------|----------------------|
| controllerId | Integer | True | ID of the controller |
### Local Thing
| Configuration Name | type | required | Comments |
@ -131,10 +129,10 @@ A single all zone group are supported per Cloud or Local Thing
|------------------|------------------------|
| allzones | commands for all zones |
### Channels
Channels uses across zones, sensors and forecasts
| channel ID | type | Groups | description | Read Write |
|----------------------------|--------------------|----------------|-----------------------------------------------|------------|
| name | String | zone, sensor | Descriptive name | R |
@ -161,10 +159,9 @@ Channels uses across zones, sensors and forecasts
| precipitation | Number | forecast | Daily precipitation amount | R |
| probabilityofprecipitation | Number | forecast | Daily probability of precipitation percentage | R |
## Full Example
```
```java
Group Sprinkler "Sprinkler"
Group SprinklerController "Controller" (Sprinkler)
Group SprinklerZones "Zones" (Sprinkler)
@ -211,4 +208,3 @@ DateTime SprinklerZone3StartTime "3 Left of Drive Lawn Start Time" (SprinklerZon
Number SprinklerZone3TimeLeft "3 Left of Drive Lawn Time Left" (SprinklerZone3) {channel="hydrawise:controller:myaccount:123456:zone3#timeleft"}
String SprinklerZone3Icon "3 Left of Drive Lawn Icon" (SprinklerZone3) {channel="hydrawise:controller:myaccount:123456:zone3#icon"}
```

View File

@ -5,8 +5,8 @@ Further details on the Hyperion project can be found [here.](https://hyperion-pr
## Supported Things
* Hyperion Server (may be referred to as V1)
* Hyperion.ng Server
- Hyperion Server (may be referred to as V1)
- Hyperion.ng Server
## Binding Configuration
@ -33,7 +33,7 @@ To manually configure a Hyperion Server you must specify the following parameter
In the thing file, this looks for e.g. like
```
```java
Thing hyperion:serverV1:myServer [ host="192.168.0.10", port=19444, priority=50, poll_frequency=15]
```
@ -53,7 +53,7 @@ To manually configure a Hyperion.ng Server you must specify the following parame
In the .things file, this looks for e.g. like
```
```java
Thing hyperion:serverNG:myServer [ host="192.168.0.10", port=19444, priority=50, poll_frequency=15, origin="openHAB"]
```
@ -91,7 +91,7 @@ Thing hyperion:serverNG:myServer [ host="192.168.0.10", port=19444, priority=50,
### Hyperion Server (V1):
```
```java
Dimmer Brightness "Brightness [%s]" {channel="hyperion:serverV1:myServer:brightness"}
Color MyColor "Color" {channel="hyperion:serverV1:myServer:color"}
String Effect "Current effect [%s]" {channel="hyperion:serverV1:myServer:effect"}
@ -100,7 +100,7 @@ String Clear "Clear priority" {channel="hyperion:serverV1:myServer:clear"}
### Hyperion.ng Server
```
```java
Dimmer Brightness "Brightness [%s]" {channel="hyperion:serverNG:myServer:brightness"}
Color MyColor "Color" {channel="hyperion:serverNG:myServer:color"}
String Effect "Current effect [%s]" {channel="hyperion:serverNG:myServer:effect"}
@ -122,7 +122,7 @@ Switch LedDeviceEnabled "LED Device" {channel="hyperion:serverNG:myServer:leddev
Using the above things channels and items
Sitemap:
```
```perl
sitemap demo label="Main Menu" {
Frame {
// serverV1 & serverNG

View File

@ -10,7 +10,6 @@ The Iammeter is exposed as one thing with a number of channels that can be used
You can add the Iammeter device via the openHAB UI manually.
## Available channels
The following table is taken from the official manual and contains all available channels.
@ -24,7 +23,6 @@ Single-phase energy meter (WEM3080/WEM3162)
| importenergy_a | kWh | Energy consumption from gird | Number:Energy |
| exportgrid_a | kWh | Energy export to grid | Number:Energy |
Three-phase energy meter (WEM3080T)
| Name | Unit | Description | Type |
|----------------|------|-----------------------|--------------------------|
@ -50,8 +48,6 @@ Three-phase energy meter (WEM3080T)
| frequency_c | kWh | C phase frequency | Number:Frequency |
| pf_c | kWh | C phase power factor | Number |
## More information
More information about the Iammeter devices can be found in the [Iammeter website](https://www.iammeter.com).

View File

@ -2,25 +2,23 @@
This binding supports:
* Any iAquaLink based pool system
* Reading auxiliary, temperature, pump, chemistry and system values
* Controlling system, auxiliary, lighting, and temperature settings
- Any iAquaLink based pool system
- Reading auxiliary, temperature, pump, chemistry and system values
- Controlling system, auxiliary, lighting, and temperature settings
## Binding Configuration
The binding requires the iAquaLink user name and password.
If you have more then one pool system registered to an account, you may optionally specify the pool serial ID/Number to use, otherwise the first pool controller will be used.
## Manual Thing Configuration
```
```java
Thing iaqualink:controller:pool [ userName="user@domain.com", password="somepassword"]
```
## Channels
The following is a list of supported channels.
Auxiliary and OneTouch channels will be dynamically added depending on what a system reports as being supported.
@ -85,12 +83,9 @@ Colors can be set, but only On or Off is reported back as the current state of t
| "13" | | Fat Tuesday | | | Hold |
| "14" | | Disco Tech | | | Recall |
## Sample Items
```
```java
Group Group_AquaLink
String AquaLinkStatus "Status [%s]" (Group_AquaLink) {channel="iaqualink:controller:pool:status"}
Switch AquaLinkBoosterPump "Booster Pump" (Group_AquaLink) {channel="iaqualink:controller:pool:aux_1"}

View File

@ -73,15 +73,15 @@ The channels of `eventfilter` are generated using following scheme, all are read
The scheme replaces `<no>` by the results index, beginning at `0`. An `eventfilter` having `maxEvents` set to 3 will have following channels:
* `result_0#begin`
* `result_0#end`
* `result_0#title`
* `result_1#begin`
* `result_1#end`
* `result_1#title`
* `result_2#begin`
* `result_2#end`
* `result_2#title`
- `result_0#begin`
- `result_0#end`
- `result_0#title`
- `result_1#begin`
- `result_1#end`
- `result_1#title`
- `result_2#begin`
- `result_2#end`
- `result_2#title`
## Command Tags
@ -91,11 +91,11 @@ A command tag must consist of at least three fields.
A fourth field is optional.
The syntax is as follows:
```
BEGIN:Item_Name:New_State_Value
BEGIN:Item_Name:New_State_Value:Authorization_Code
END:Item_Name:New_State_Value
END:Item_Name:New_State_Value:Authorization_Code
```text
BEGIN:Item_Name:New_State_Value
BEGIN:Item_Name:New_State_Value:Authorization_Code
END:Item_Name:New_State_Value
END:Item_Name:New_State_Value:Authorization_Code
```
The first field **must** be either `BEGIN` or `END`.
@ -110,7 +110,7 @@ The `New_State_Value` is the state value that will be sent to the item.
It must be a value which is compatible with the item type.
See openHAB Core definitions for [command types](https://www.openhab.org/docs/concepts/items.html#state-and-command-type-formatting) for valid types and formats.
The `Authorization_Code` may *optionally* be used as follows:
The `Authorization_Code` may _optionally_ be used as follows:
- When the thing configuration parameter `authorizationCode` is not blank, the binding will compare the `Authorization_Code` field against the `authorizationCode` configuration parameter, and it will only execute the command if the two strings are the same.
@ -120,14 +120,14 @@ The `Authorization_Code` may *optionally* be used as follows:
All required information must be provided in the thing definition, either via UI or in the `.things` file..
```
```java
Bridge icalendar:calendar:deadbeef "My calendar" @ "Internet" [ url="http://example.org/calendar.ical", refreshTime=60 ]
Thing icalendar:eventfilter:feedd0d0 "Tomorrows events" (icalendar:calendar:deadbeef) [ maxEvents=1, datetimeUnit="DAY", datetimeStart=1, datetimeEnd=2, datetimeRound=true ]
```
Link the channels as usual to items:
```
```java
String current_event_name "current event [%s]" <calendar> { channel="icalendar:calendar:deadbeef:current_title" }
DateTime current_event_until "current until [%1$tT, %1$tY-%1$tm-%1$td]" <calendar> { channel="icalendar:calendar:deadbeef:current_end" }
String next_event_name "next event [%s]" <calendar> { channel="icalendar:calendar:deadbeef:next_title" }
@ -138,7 +138,7 @@ DateTime first_event_at_tomorrow "first at [%1$tT, %1$tY-%1$tm-%1$td]" <c
Sitemap just showing the current event and the beginning of the next:
```
```perl
sitemap local label="My Calendar Sitemap" {
Frame label="events" {
Text item=current_event_name label="current event [%s]"
@ -155,14 +155,14 @@ sitemap local label="My Calendar Sitemap" {
Command tags in a calendar event (in the case that configuration parameter `authorizationCode` equals `abc`):
```
```text
BEGIN:Calendar_Test_Temperature:12.3°C:abc
END:Calendar_Test_Temperature:23.4°F:abc
```
Command tags in a calendar event (in the case that configuration parameter `authorizationCode` is not set):
```
```text
BEGIN:Calendar_Test_Switch:ON
END:Calendar_Test_Switch:OFF
```

View File

@ -69,7 +69,7 @@ Bridge icloud:account:myaccount [appleId="mail@example.com", password="secure",
```
The device ID can be found in the Inbox after it has been discovered.
The information *@ "World"* is optional.
The information _@ "World"_ is optional.
### icloud.items

View File

@ -30,7 +30,6 @@ The `controller` Thing has the following configuration parameters:
| createChannelsAutomatically | Create channels automatically from project file. Project file loading parameter should be enabled as well. | no | true |
| tlsVersion | TLS version used for controller communication. Choose `TLSv1` for older firmware versions and `TLSv1.2` for never versions (since fall 2021). `AUTO` mode try to recognize correct version. | no | TLSv1 |
## Channels
List of default controller channels.
@ -75,10 +74,10 @@ Channel parameters:
There are several ways to find the correct resource id's:
1. Find directly from your IHC / ELKO LS project file (.vis file).
2. Via IHC / ELKO Visual application. Hold ctrl button from keyboard while mouse over the select item in Visual.
3. Enable debug level from binding. Binding will then print basic resource ID from the project file, if `loadProjectFile` configuration variable is enabled.
1. Via IHC / ELKO Visual application. Hold ctrl button from keyboard while mouse over the select item in Visual.
1. Enable debug level from binding. Binding will then print basic resource ID from the project file, if `loadProjectFile` configuration variable is enabled.
The binding supports resource id's ***only*** in decimal format.
The binding supports resource id's _**only**_ in decimal format.
Hexadecimal values (start with 0x prefix) need to be converted to decimal format.
Conversion can be done e.g. via Calculator in Windows or Mac.
@ -137,18 +136,17 @@ E.g. if item state has been OFF, profile will send ON command to item.
Example:
```xtend
```java
Dimmer test { channel="ihc:controller:elko:my_test_trigger"[profile="ihc:pushbutton-to-command", short-press-command="TOGGLE", long-press-command="INCREASE", long-press-time=1000, repeat-time=200] }
```
Will send TOGGLE (ON/OFF) command to Dimmer test item when short button press is detected (button press less than 1000ms) and send INCREASE commands as long button is pressed over 1000ms (200ms interval).
## Examples
### example.things
```xtend
```java
ihc:controller:elko [ hostname="192.168.1.2", username="openhab", password="secret", timeout=5000, loadProjectFile=true, createChannelsAutomatically=false, tlsVersion="TLSv1" ] {
Channels:
Type switch : my_test_switch "My Test Switch" [ resourceId=3988827 ]
@ -169,7 +167,7 @@ ihc:controller:elko [ hostname="192.168.1.2", username="openhab", password="secr
### example.items
```xtend
```java
Switch test_switch "Test Switch" { channel="ihc:controller:elko:my_test_switch" }
Switch test_contact "Test Contact" { channel="ihc:controller:elko:my_test_contact" }
Number test_number "Test Number" { channel="ihc:controller:elko:my_test_number" }
@ -184,7 +182,7 @@ Dimmer dimmer { channel="ihc:controller:elko:my_test_trigger"[profile="ihc:pushb
### example.rules
```xtend
```java
rule "My test trigger test rule"
when
Channel 'ihc:controller:elko:my_test_trigger' triggered LONG_PRESS

View File

@ -4,12 +4,12 @@ The binding integrates the [innogy SmartHome](https://innogy.com/smarthome) syst
It uses the official API 1.1 as provided by innogy as cloud service.
As all status updates and commands have to go through the API, a permanent internet connection is required.
*Notice!*
_Notice!_
*This binding is deprecated!*
_This binding is deprecated!_
*LIVISI (formally innogy) has implemented a local API on their SHC from Software Version 1.2.XX.XXX.
Please migrate to the "LIVISI SmartHome Binding" which is using the new local API and requires neither the LIVISI-cloud-servers nor an internet connection.*
_LIVISI (formally innogy) has implemented a local API on their SHC from Software Version 1.2.XX.XXX.
Please migrate to the "LIVISI SmartHome Binding" which is using the new local API and requires neither the LIVISI-cloud-servers nor an internet connection._
## Supported things
@ -123,10 +123,11 @@ Be sure it is connected to the Internet.
Authorization is done as oauth2 workflow with the innogy API.
To receive the auth-code, go to one of the following URLs depending on your brand and login with your credentials (you can find this link also in the SHC thing in the UI, if you edit it):
https://auth.services-smarthome.de/AUTH
* [innogy SmartHome authorization page](https://auth.services-smarthome.de/AUTH/authorize?response_type=code&client_id=24635748&redirect_uri=https%3A%2F%2Fwww.openhab.org%2Foauth%2Finnogy%2Finnogy-smarthome.html&scope&lang=de-DE)
* [SmartHome Austria authorization page](https://auth.services-smarthome.de/AUTH/authorize?response_type=code&client_id=24635749&redirect_uri=https%3A%2F%2Fwww.openhab.org%2Foauth%2Finnogy%2Fsmarthome-austria.html&scope&lang=de-DE)
* [Start SmartHome authorization page](https://auth.services-smarthome.de/AUTH/authorize?response_type=code&client_id=24635750&redirect_uri=https%3A%2F%2Fwww.openhab.org%2Foauth%2Finnogy%2Fstart-smarthome.html&scope&lang=de-DE)
`https://auth.services-smarthome.de/AUTH`
- [innogy SmartHome authorization page](https://auth.services-smarthome.de/AUTH/authorize?response_type=code&client_id=24635748&redirect_uri=https%3A%2F%2Fwww.openhab.org%2Foauth%2Finnogy%2Finnogy-smarthome.html&scope&lang=de-DE)
- [SmartHome Austria authorization page](https://auth.services-smarthome.de/AUTH/authorize?response_type=code&client_id=24635749&redirect_uri=https%3A%2F%2Fwww.openhab.org%2Foauth%2Finnogy%2Fsmarthome-austria.html&scope&lang=de-DE)
- [Start SmartHome authorization page](https://auth.services-smarthome.de/AUTH/authorize?response_type=code&client_id=24635750&redirect_uri=https%3A%2F%2Fwww.openhab.org%2Foauth%2Finnogy%2Fstart-smarthome.html&scope&lang=de-DE)
You will be redirected to openhab.org and the auth-code will be displayed.
Copy and paste it into your SHC configuration and you are done.
@ -149,23 +150,23 @@ Now you can add all devices from your Inbox as things.
As an alternative to using automatic discovery, innogy things can be configured using .things files.
The innogy SmartHome Controller (SHC) can be configured using the following syntax:
```
```java
Bridge innogysmarthome:bridge:<bridge-id> []
```
Then the required authcode is retrieved and set **automatically**:
```
```java
Bridge innogysmarthome:bridge:<bridge-id> [ authcode="<authcode>" ]
```
** *Security warning!**
** _Security warning!_*
As the refresh-token is THE one and only credential one needs to access the innogy webservice with all device data, you have to make sure it is never given to another person.
Thus it is recommended to remove the line from the openhab.log and/or make sure, the logfile is definitely never accessible by others!
All other innogy devices can be added using the following syntax:
```
```java
Thing WDS <thing-id> "<thing-name>" @ "<room-name>" [ id="<the-device-id>" ]
```
@ -173,7 +174,7 @@ The device ID (e.g. e9a74941a3807b57332214f346fb1129) can be found in the Inbox,
However, a full example .things configuration look like this:
```
```java
Bridge innogysmarthome:bridge:mybride "innogy SmartHome Controller" {
Thing ISD2 myDimmer "Dimmer Kitchen" @ "Kitchen" [ id="<device-id>" ]
Thing ISS2 myLightSwitch "Light Livingroom" @ "Livingroom" [ id="<device-id>" ]
@ -191,7 +192,7 @@ Bridge innogysmarthome:bridge:mybride "innogy SmartHome Controller" {
You can then configure your items in your *.items config files as usual, for example:
```
```java
Contact myWindowContact "Kitchen" <window> {channel="innogysmarthome:WDS:mybridge:myWindowContact:contact"}
Switch myWindowContactBattery "Battery low" <battery> {channel="innogysmarthome:WDS:mybridge:myWindowContact:battery_low"}
Number myHeatingTemp "Bath [%.1f °C]" <temperature> {channel="innogysmarthome:RST:mybridge:myHeating:temperature"}
@ -205,7 +206,7 @@ Number myHeatingHumidity "Bath [%.1f %%]" <humidity> {channel="
The site configuration works a usual. One special example
```
```perl
sitemap default label="Home" {
Frame {
Text item=myHeatingTemp label="Temperature"
@ -221,7 +222,7 @@ sitemap default label="Home" {
Pushbuttons provide trigger channels, that can only be used in rules.
Here is an example rule:
```
```java
rule "Button triggered rule"
when
Channel 'innogysmarthome:WSC2:mybridge:myPushButton:button1' triggered PRESSED
@ -239,13 +240,13 @@ If the bridge stays offline with the following status shown in the UI, the reaso
To solve this on a Linux system, follow this steps:
1. Download the certificates (.cer-files) of https://home.innogy-smarthome.de and https://innogy.com including the "DigiCert Global Root G2" to your computer.
1. Download the certificates (.cer-files) of <https://home.innogy-smarthome.de> and <https://innogy.com> including the "DigiCert Global Root G2" to your computer.
As this depends on the used browser and operating system, please use a web search engine to find out how to achieve this for your situation.
2. On your Linux system, goto your Java Machine's certificate store, e.g. `/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/lib/security`.
1. On your Linux system, goto your Java Machine's certificate store, e.g. `/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/lib/security`.
The path should include a file called `cacerts` (this is the certificate store) and may differ depending on the system used.
3. Copy the .cer-files from step 1 into this directory.
4. Import each certificate with the command: `sudo keytool importcert alias “innogysmarthome” keystore cacerts file innogy.cer`
1. Copy the .cer-files from step 1 into this directory.
1. Import each certificate with the command: `sudo keytool importcert alias “innogysmarthome” keystore cacerts file innogy.cer`
(alias can be freely chosen but must be unique; replace innogy.cer with the filename of the downloaded certificate)
5. Restart the JVM and openHAB.
1. Restart the JVM and openHAB.
The default password of the certificate store is "changeit".

View File

@ -13,7 +13,7 @@ The binding translates openHAB commands into Insteon messages and sends them on
Relevant messages from the Insteon network (like notifications about switches being toggled) are picked up by the modem and converted to openHAB status updates by the binding.
The binding also supports sending and receiving of legacy X10 messages.
The binding does not support linking new devices on the fly, i.e. all devices must be linked with the modem *before* starting the Insteon binding.
The binding does not support linking new devices on the fly, i.e. all devices must be linked with the modem _before_ starting the Insteon binding.
The openHAB binding supports minimal configuration of devices, currently only monitoring and sending messages.
For all other configuration and set up of devices, link the devices manually via the set buttons, or use the free [Insteon Terminal](https://github.com/pfrommerd/insteon-terminal) software.
@ -36,7 +36,7 @@ X10 devices are not auto discovered.
## Thing Configuration
#### Network Configuration
### Network Configuration
The Insteon PLM or hub is configured with the following parameters:
@ -49,7 +49,7 @@ The Insteon PLM or hub is configured with the following parameters:
>NOTE: For users upgrading from InsteonPLM, The parameter port_1 is now port.
#### Device Configuration
### Device Configuration
The Insteon device is configured with the following required parameters:
@ -190,12 +190,11 @@ In order to determine which channels a device supports, you can look at the devi
| update | Switch | Update |
| watts | Number:Power | Watts |
## Full Example
Sample things file:
```
```java
Bridge insteon:network:home [port="/dev/ttyUSB0"] {
Thing device 22F8A8 [address="22.F8.A8", productKey="F00.00.15"] {
Channels:
@ -226,7 +225,7 @@ Bridge insteon:network:home [port="/dev/ttyUSB0"] {
Sample items file:
```
```java
Switch switch1 { channel="insteon:device:home:243141:switch" }
Dimmer dimmer1 { channel="insteon:device:home:238F55:dimmer" }
Dimmer dimmer2 { channel="insteon:device:home:23B0D9:dimmer" }
@ -245,7 +244,7 @@ The binding provides commands you can use to help with troubleshooting.
Enter `openhab:insteon` or `insteon` in the console and you will get a list of available commands.
The `openhab:` prefix is optional:
```
```shell
openhab> openhab:insteon
Usage: openhab:insteon display_devices - display devices that are online, along with available channels
Usage: openhab:insteon display_channels - display channels that are linked, along with configuration information
@ -265,8 +264,8 @@ If you want to see the response from the device, you will need to monitor the de
## Insteon Groups and Scenes
How do Insteon devices tell other devices on the network that their state has changed? They send out a broadcast message, labeled with a specific *group* number.
All devices (called *responders*) that are configured to listen to this message will then go into a pre-defined state.
How do Insteon devices tell other devices on the network that their state has changed? They send out a broadcast message, labeled with a specific _group_ number.
All devices (called _responders_) that are configured to listen to this message will then go into a pre-defined state.
For instance when light switch A is switched to "ON", it will send out a message to group #1, and all responders will react to it, e.g they may go into the "ON" position as well.
Since more than one device can participate, the sending out of the broadcast message and the subsequent state change of the responders is referred to as "triggering a scene".
At the device and PLM level, the concept of a "scene" does not exist, so you will find it notably absent in the binding code and this document.
@ -296,7 +295,7 @@ For some of the more sophisticated devices the complete linking process can no l
Since Insteon devices can have multiple features (for instance a switchable relay and a contact sensor) under a single Insteon address, an openHAB item is not bound to a device, but to a given feature of a device.
For example, the following lines would create two Number items referring to the same thermostat device, but to different features of it:
```
```java
Number thermostatCoolPoint "cool point [%.1f °F]" { channel="insteon:device:home:32F422:coolSetPoint" }
Number thermostatHeatPoint "heat point [%.1f °F]" { channel="insteon:device:home:32F422:heatSetPoint" }
```
@ -305,7 +304,7 @@ Number thermostatHeatPoint "heat point [%.1f °F]" { channel="insteon:device:ho
The following example shows how to configure a simple light switch (2477S) in the .items file:
```
```java
Switch officeLight "office light" { channel="insteon:device:home:AABBCC:switch" }
```
@ -313,7 +312,7 @@ Switch officeLight "office light" { channel="insteon:device:home:AABBCC:switch"
Here is how to configure a simple dimmer (2477D) in the .items file:
```
```java
Dimmer kitchenChandelier "kitchen chandelier" { channel="insteon:device:home:AABBCC:dimmer" }
```
@ -322,9 +321,9 @@ If a maximum level is configured, openHAB will never set the level of the dimmer
The parameter dimmermax must be defined for the channel.
The below example sets a maximum level of 70% for dim 1 and 60% for dim 2:
**Things**
#### Things
```
```java
Bridge insteon:network:home [port="/dev/ttyUSB0"] {
Thing device AABBCC [address="AA.BB.CC", productKey="F00.00.11"] {
Channels:
@ -337,9 +336,9 @@ Bridge insteon:network:home [port="/dev/ttyUSB0"] {
}
```
**Items**
#### Items
```
```java
Dimmer d1 "dimmer 1" { channel="insteon:device:home:AABBCC:dimmer"}
Dimmer d2 "dimmer 2" { channel="insteon:device:home:AABBCD:loadDimmer"}
```
@ -350,7 +349,7 @@ Setting a maximum level does not affect manual turning on or dimming a switch.
Here's how to configure the top and bottom outlet of the in-wall 2 outlet controller:
```
```java
Switch fOutTop "Front Outlet Top" <socket> { channel="insteon:device:home:AABBCC:topOutlet" }
Switch fOutBot "Front Outlet Bottom" <socket> { channel="insteon:device:home:AABBCC:bottomOutlet" }
```
@ -364,31 +363,31 @@ Link all buttons, one after the other.
The 4-button mini remote sends out messages on groups 0x01 - 0x04, each corresponding to one button.
The modem's link database (see [Insteon Terminal](https://github.com/pfrommerd/insteon-terminal)) should look like this:
```
0000 xx.xx.xx xx.xx.xx RESP 10100010 group: 01 data: 02 2c 41
0000 xx.xx.xx xx.xx.xx RESP 10100010 group: 02 data: 02 2c 41
0000 xx.xx.xx xx.xx.xx RESP 10100010 group: 03 data: 02 2c 41
0000 xx.xx.xx xx.xx.xx RESP 10100010 group: 04 data: 02 2c 41
```text
0000 xx.xx.xx xx.xx.xx RESP 10100010 group: 01 data: 02 2c 41
0000 xx.xx.xx xx.xx.xx RESP 10100010 group: 02 data: 02 2c 41
0000 xx.xx.xx xx.xx.xx RESP 10100010 group: 03 data: 02 2c 41
0000 xx.xx.xx xx.xx.xx RESP 10100010 group: 04 data: 02 2c 41
```
**Items**
This goes into the items file:
```
Switch miniRemoteButtonA "mini remote button a" { channel="insteon:device:home:AABBCC:buttonA", autoupdate="false" }
Switch miniRemoteButtonB "mini remote button b" { channel="insteon:device:home:AABBCC:buttonB", autoupdate="false" }
Switch miniRemoteButtonC "mini remote button c" { channel="insteon:device:home:AABBCC:buttonC", autoupdate="false" }
Switch miniRemoteButtonD "mini remote button d" { channel="insteon:device:home:AABBCC:buttonD", autoupdate="false" }
```java
Switch miniRemoteButtonA "mini remote button a" { channel="insteon:device:home:AABBCC:buttonA", autoupdate="false" }
Switch miniRemoteButtonB "mini remote button b" { channel="insteon:device:home:AABBCC:buttonB", autoupdate="false" }
Switch miniRemoteButtonC "mini remote button c" { channel="insteon:device:home:AABBCC:buttonC", autoupdate="false" }
Switch miniRemoteButtonD "mini remote button d" { channel="insteon:device:home:AABBCC:buttonD", autoupdate="false" }
```
**Sitemap**
This goes into the sitemap file:
```
Switch item=miniRemoteButtonA label="mini remote button a" mappings=[ OFF="Off", ON="On"]
Switch item=miniRemoteButtonB label="mini remote button b" mappings=[ OFF="Off", ON="On"]
Switch item=miniRemoteButtonC label="mini remote button c" mappings=[ OFF="Off", ON="On"]
Switch item=miniRemoteButtonD label="mini remote button d" mappings=[ OFF="Off", ON="On"]
```perl
Switch item=miniRemoteButtonA label="mini remote button a" mappings=[ OFF="Off", ON="On"]
Switch item=miniRemoteButtonB label="mini remote button b" mappings=[ OFF="Off", ON="On"]
Switch item=miniRemoteButtonC label="mini remote button c" mappings=[ OFF="Off", ON="On"]
Switch item=miniRemoteButtonD label="mini remote button d" mappings=[ OFF="Off", ON="On"]
```
The switches in the GUI just display the mini remote's most recent button presses.
@ -400,23 +399,21 @@ Link such that the modem is a responder to the motion sensor.
Create a contact.map file in the transforms directory as described elsewhere in this document.
Then create entries in the .items file like this:
**Items**
#### Items
```
Contact motionSensor "motion sensor [MAP(contact.map):%s]" { channel="insteon:device:home:AABBCC:contact"}
Number motionSensorBatteryLevel "motion sensor battery level" { channel="insteon:device:home:AABBCC:batteryLevel" }
Number motionSensorLightLevel "motion sensor light level" { channel="insteon:device:home:AABBCC:lightLevel" }
```java
Contact motionSensor "motion sensor [MAP(contact.map):%s]" { channel="insteon:device:home:AABBCC:contact"}
Number motionSensorBatteryLevel "motion sensor battery level" { channel="insteon:device:home:AABBCC:batteryLevel" }
Number motionSensorLightLevel "motion sensor light level" { channel="insteon:device:home:AABBCC:lightLevel" }
```
This will give you a contact, the battery level, and the light level.
The motion sensor II includes three additional channels:
**Items**
```
Number motionSensorBatteryPercent "motion sensor battery percent" { channel="insteon:device:home:AABBCC:batteryPercent" }
Contact motionSensorTamperSwitch "motion sensor tamper switch [MAP(contact.map):%s]" { channel="insteon:device:home:AABBCC:tamperSwitch"}
Number motionSensorTemperatureLevel "motion sensor temperature level" { channel="insteon:device:home:AABBCC:temperatureLevel" }
```java
Number motionSensorBatteryPercent "motion sensor battery percent" { channel="insteon:device:home:AABBCC:batteryPercent" }
Contact motionSensorTamperSwitch "motion sensor tamper switch [MAP(contact.map):%s]" { channel="insteon:device:home:AABBCC:tamperSwitch"}
Number motionSensorTemperatureLevel "motion sensor temperature level" { channel="insteon:device:home:AABBCC:temperatureLevel" }
```
The battery, light level and temperature level are updated when either there is motion, light level above/below threshold, tamper switch activated, or the sensor battery runs low.
@ -428,9 +425,9 @@ Disabling the querying of the device should provide more accurate battery data s
This can be configured with the device configuration parameter of the device.
The key in the JSON object is `heartbeatOnly` and the value is a boolean:
**Things**
#### Things
```
```java
Bridge insteon:network:home [port="/dev/ttyUSB0"] {
Thing device AABBCC [address="AA.BB.CC", productKey="F00.00.24", deviceConfig="{'heartbeatOnly': true}"]
}
@ -439,8 +436,8 @@ Bridge insteon:network:home [port="/dev/ttyUSB0"] {
The temperature can be calculated in Fahrenheit using the following formulas:
* If the device is battery powered: `temperature = 0.73 * motionSensorTemperatureLevel - 20.53`
* If the device is USB powered: `temperature = 0.72 * motionSensorTemperatureLevel - 24.61`
- If the device is battery powered: `temperature = 0.73 * motionSensorTemperatureLevel - 20.53`
- If the device is USB powered: `temperature = 0.72 * motionSensorTemperatureLevel - 24.61`
Since the motion sensor II might not be calibrated correctly, the values `20.53` and `24.61` can be adjusted as necessary to produce the correct temperature.
@ -450,18 +447,18 @@ Similar in operation to the motion sensor above.
Link such that the modem is a responder to the motion sensor.
Create a contact.map file in the transforms directory like the following:
```
OPEN=open
CLOSED=closed
-=unknown
```text
OPEN=open
CLOSED=closed
-=unknown
```
**Items**
Then create entries in the .items file like this:
```
Contact doorSensor "Door sensor [MAP(contact.map):%s]" { channel="insteon:device:home:AABBCC:contact" }
Number doorSensorBatteryLevel "Door sensor battery level [%.1f]" { channel="insteon:device:home:AABBCC:batteryLevel" }
```java
Contact doorSensor "Door sensor [MAP(contact.map):%s]" { channel="insteon:device:home:AABBCC:contact" }
Number doorSensorBatteryLevel "Door sensor battery level [%.1f]" { channel="insteon:device:home:AABBCC:batteryLevel" }
```
This will give you a contact and the battery level.
@ -474,16 +471,16 @@ Read the instructions very carefully: sync with lock within 5 feet to avoid bad
**Items**
Put something like this into your .items file:
```
Switch doorLock "Front Door [MAP(lock.map):%s]" { channel="insteon:device:home:AABBCC:switch" }
```java
Switch doorLock "Front Door [MAP(lock.map):%s]" { channel="insteon:device:home:AABBCC:switch" }
```
and create a file "lock.map" in the transforms directory with these entries:
```
ON=Lock
OFF=Unlock
-=unknown
```text
ON=Lock
OFF=Unlock
-=unknown
```
### I/O Linc (garage door openers)
@ -498,26 +495,26 @@ Ensure the contact is OFF (status LED is dark/garage door open) when linking the
Add this map into your transforms directory as "contact.map":
```
OPEN=open
CLOSED=closed
-=unknown
```text
OPEN=open
CLOSED=closed
-=unknown
```
**Items**
Along with this into your .items file:
```
Switch garageDoorOpener "garage door opener" <garagedoor> { channel="insteon:device:home:AABBCC:switch", autoupdate="false" }
Contact garageDoorContact "garage door contact [MAP(contact.map):%s]" { channel="insteon:device:home:AABBCC:contact" }
```java
Switch garageDoorOpener "garage door opener" <garagedoor> { channel="insteon:device:home:AABBCC:switch", autoupdate="false" }
Contact garageDoorContact "garage door contact [MAP(contact.map):%s]" { channel="insteon:device:home:AABBCC:contact" }
```
**Sitemap**
To make it visible in the GUI, put this into your sitemap file:
```
Switch item=garageDoorOpener label="garage door opener" mappings=[ ON="OPEN/CLOSE"]
Text item=garageDoorContact
```perl
Switch item=garageDoorOpener label="garage door opener" mappings=[ ON="OPEN/CLOSE"]
Text item=garageDoorContact
```
For safety reasons, only close the garage door if you have visual contact to make sure there is no obstruction! The use of automated rules for closing garage doors is dangerous.
@ -549,7 +546,7 @@ Here is an example correspondence table:
When e.g. the "A" button is pressed (that's button #3 internally) a broadcast message will be sent out to all responders configured to listen to Insteon group #3.
This means you must configure the modem as a responder to group #3 (and #4, #5, #6) messages coming from your keypad.
For instructions how to do this, check out the [Insteon Terminal](https://github.com/pfrommerd/insteon-terminal.
For instructions how to do this, check out the [Insteon Terminal](https://github.com/pfrommerd/insteon-terminal).
You can even do that with the set buttons (see instructions that come with the keypad).
While capturing the messages that the buttons emit is pretty straight forward, controlling the buttons is another matter.
@ -559,25 +556,24 @@ The example configuration below uses groups 0xf3, 0xf4, 0xf5, and 0xf6.
Then link the buttons such that they respond to those groups, and link the modem as a controller for them (see [Insteon Terminal](https://github.com/pfrommerd/insteon-terminal) documentation.
In your items file you specify these groups with the "group=" parameters such that the binding knows what group number to put on the outgoing message.
#### Keypad Switches
**Items**
##### Items
Here is a simple example, just using the load (main) switch:
```
Switch keypadSwitch "main load" { channel="insteon:device:home:AABBCC:loadSwitch" }
Number keypadSwitchManualChange "main manual change" { channel="insteon:device:home:AABBCC:loadSwitchManualChange" }
Switch keypadSwitchFastOnOff "main fast on/off" { channel="insteon:device:home:AABBCC:loadSwitchFastOnOff" }
```java
Switch keypadSwitch "main load" { channel="insteon:device:home:AABBCC:loadSwitch" }
Number keypadSwitchManualChange "main manual change" { channel="insteon:device:home:AABBCC:loadSwitchManualChange" }
Switch keypadSwitchFastOnOff "main fast on/off" { channel="insteon:device:home:AABBCC:loadSwitchFastOnOff" }
```
Most people will not use the fast on/off features or the manual change feature, so you really only need the first line.
To make the buttons available, add the following:
**Things**
###### Things
```
```java
Bridge insteon:network:home [port="/dev/ttyUSB0"] {
Thing device AABBCC [address="AA.BB.CC", productKey="F00.00.15"] {
Channels:
@ -592,21 +588,21 @@ Bridge insteon:network:home [port="/dev/ttyUSB0"] {
The value after group must either be a number or string.
The hexadecimal value 0xf3 can either converted to a numeric value 243 or the string value "0xf3".
**Items**
###### Items
```
Switch keypadSwitchA "keypad button A" { channel="insteon:device:home:AABBCC:keypadButtonA"}
Switch keypadSwitchB "keypad button B" { channel="insteon:device:home:AABBCC:keypadButtonB"}
Switch keypadSwitchC "keypad button C" { channel="insteon:device:home:AABBCC:keypadButtonC"}
Switch keypadSwitchD "keypad button D" { channel="insteon:device:home:AABBCC:keypadButtonD"}
```java
Switch keypadSwitchA "keypad button A" { channel="insteon:device:home:AABBCC:keypadButtonA"}
Switch keypadSwitchB "keypad button B" { channel="insteon:device:home:AABBCC:keypadButtonB"}
Switch keypadSwitchC "keypad button C" { channel="insteon:device:home:AABBCC:keypadButtonC"}
Switch keypadSwitchD "keypad button D" { channel="insteon:device:home:AABBCC:keypadButtonD"}
```
**Sitemap**
##### Sitemap
The following sitemap will bring the items to life in the GUI:
```
Frame label="Keypad" {
```perl
Frame label="Keypad" {
Switch item=keypadSwitch label="main"
Switch item=keypadSwitchFastOnOff label="fast on/off"
Switch item=keypadSwitchManualChange label="manual change" mappings=[ 0="DOWN", 1="STOP", 2="UP"]
@ -614,31 +610,31 @@ The following sitemap will bring the items to life in the GUI:
Switch item=keypadSwitchB label="button B"
Switch item=keypadSwitchC label="button C"
Switch item=keypadSwitchD label="button D"
}
}
```
#### Keypad Dimmers
The keypad dimmers are like keypad switches, except that the main load is dimmable.
**Items**
##### Items
```
Dimmer keypadDimmer "dimmer" { channel="insteon:device:home:AABBCC:loadDimmer" }
Switch keypadDimmerButtonA "keypad dimmer button A [%d %%]" { channel="insteon:device:home:AABBCC:keypadButtonA" }
```java
Dimmer keypadDimmer "dimmer" { channel="insteon:device:home:AABBCC:loadDimmer" }
Switch keypadDimmerButtonA "keypad dimmer button A [%d %%]" { channel="insteon:device:home:AABBCC:keypadButtonA" }
```
**Sitemap**
##### Sitemap
```
Slider item=keypadDimmer switchSupport
Switch item=keypadDimmerButtonA label="buttonA"
```perl
Slider item=keypadDimmer switchSupport
Switch item=keypadDimmerButtonA label="buttonA"
```
### Thermostats
The thermostat (2441TH) is one of the most complex Insteon devices available.
It must first be properly linked to the modem using configuration software like [Insteon Terminal](https://github.com/pfrommerd/insteon-terminal.
It must first be properly linked to the modem using configuration software like [Insteon Terminal](<https://github.com/pfrommerd/insteon-terminal>.
The Insteon Terminal wiki describes in detail how to link the thermostat, and how to make it publish status update reports.
When all is set and done the modem must be configured as a controller to group 0 (not sure why), and a responder to groups 1-5 such that it picks up when the thermostat switches on/off heating and cooling etc, and it must be a responder to special group 0xEF to get status update reports when measured values (temperature) change.
@ -646,49 +642,49 @@ Symmetrically, the thermostat must be a responder to group 0, and a controller f
The linking process is not difficult but needs some persistence.
Again, refer to the [Insteon Terminal](https://github.com/pfrommerd/insteon-terminal) documentation.
**Items**
#### Items
This is an example of what to put into your .items file:
```
Number thermostatCoolPoint "cool point [%.1f °F]" { channel="insteon:device:home:AABBCC:coolSetPoint" }
Number thermostatHeatPoint "heat point [%.1f °F]" { channel="insteon:device:home:AABBCC:heatSetPoint" }
Number thermostatSystemMode "system mode [%d]" { channel="insteon:device:home:AABBCC:systemMode" }
Number thermostatFanMode "fan mode [%d]" { channel="insteon:device:home:AABBCC:fanMode" }
Number thermostatIsHeating "is heating [%d]" { channel="insteon:device:home:AABBCC:isHeating"}
Number thermostatIsCooling "is cooling [%d]" { channel="insteon:device:home:AABBCC:isCooling" }
Number:Temperature thermostatTemperature "temperature [%.1f %unit%]" { channel="insteon:device:home:AABBCC:temperature" }
Number thermostatHumidity "humidity [%.0f %%]" { channel="insteon:device:home:AABBCC:humidity" }
```java
Number thermostatCoolPoint "cool point [%.1f °F]" { channel="insteon:device:home:AABBCC:coolSetPoint" }
Number thermostatHeatPoint "heat point [%.1f °F]" { channel="insteon:device:home:AABBCC:heatSetPoint" }
Number thermostatSystemMode "system mode [%d]" { channel="insteon:device:home:AABBCC:systemMode" }
Number thermostatFanMode "fan mode [%d]" { channel="insteon:device:home:AABBCC:fanMode" }
Number thermostatIsHeating "is heating [%d]" { channel="insteon:device:home:AABBCC:isHeating"}
Number thermostatIsCooling "is cooling [%d]" { channel="insteon:device:home:AABBCC:isCooling" }
Number:Temperature thermostatTemperature "temperature [%.1f %unit%]" { channel="insteon:device:home:AABBCC:temperature" }
Number thermostatHumidity "humidity [%.0f %%]" { channel="insteon:device:home:AABBCC:humidity" }
```
Add this as well for some more exotic features:
```
Number thermostatACDelay "A/C delay [%d min]" { channel="insteon:device:home:AABBCC:acDelay" }
Number thermostatBacklight "backlight [%d sec]" { channel="insteon:device:home:AABBCC:backlightDuration" }
Number thermostatStage1 "A/C stage 1 time [%d min]" { channel="insteon:device:home:AABBCC:stage1Duration" }
Number thermostatHumidityHigh "humidity high [%d %%]" { channel="insteon:device:home:AABBCC:humidityHigh" }
Number thermostatHumidityLow "humidity low [%d %%]" { channel="insteon:device:home:AABBCC:humidityLow" }
```java
Number thermostatACDelay "A/C delay [%d min]" { channel="insteon:device:home:AABBCC:acDelay" }
Number thermostatBacklight "backlight [%d sec]" { channel="insteon:device:home:AABBCC:backlightDuration" }
Number thermostatStage1 "A/C stage 1 time [%d min]" { channel="insteon:device:home:AABBCC:stage1Duration" }
Number thermostatHumidityHigh "humidity high [%d %%]" { channel="insteon:device:home:AABBCC:humidityHigh" }
Number thermostatHumidityLow "humidity low [%d %%]" { channel="insteon:device:home:AABBCC:humidityLow" }
```
**Sitemap**
#### Sitemap
For the thermostat to display in the GUI, add this to the sitemap file:
```
Text item=thermostatTemperature icon="temperature"
Text item=thermostatHumidity
Setpoint item=thermostatCoolPoint icon="temperature" minValue=63 maxValue=90 step=1
Setpoint item=thermostatHeatPoint icon="temperature" minValue=50 maxValue=80 step=1
Switch item=thermostatSystemMode label="system mode" mappings=[ 0="OFF", 1="HEAT", 2="COOL", 3="AUTO", 4="PROGRAM"]
Switch item=thermostatFanMode label="fan mode" mappings=[ 0="AUTO", 1="ALWAYS ON"]
Switch item=thermostatIsHeating label="is heating" mappings=[ 0="OFF", 1="HEATING"]
Switch item=thermostatIsCooling label="is cooling" mappings=[ 0="OFF", 1="COOLING"]
Setpoint item=thermostatACDelay minValue=2 maxValue=20 step=1
Setpoint item=thermostatBacklight minValue=0 maxValue=100 step=1
Setpoint item=thermostatHumidityHigh minValue=0 maxValue=100 step=1
Setpoint item=thermostatHumidityLow minValue=0 maxValue=100 step=1
Setpoint item=thermostatStage1 minValue=1 maxValue=60 step=1
```perl
Text item=thermostatTemperature icon="temperature"
Text item=thermostatHumidity
Setpoint item=thermostatCoolPoint icon="temperature" minValue=63 maxValue=90 step=1
Setpoint item=thermostatHeatPoint icon="temperature" minValue=50 maxValue=80 step=1
Switch item=thermostatSystemMode label="system mode" mappings=[ 0="OFF", 1="HEAT", 2="COOL", 3="AUTO", 4="PROGRAM"]
Switch item=thermostatFanMode label="fan mode" mappings=[ 0="AUTO", 1="ALWAYS ON"]
Switch item=thermostatIsHeating label="is heating" mappings=[ 0="OFF", 1="HEATING"]
Switch item=thermostatIsCooling label="is cooling" mappings=[ 0="OFF", 1="COOLING"]
Setpoint item=thermostatACDelay minValue=2 maxValue=20 step=1
Setpoint item=thermostatBacklight minValue=0 maxValue=100 step=1
Setpoint item=thermostatHumidityHigh minValue=0 maxValue=100 step=1
Setpoint item=thermostatHumidityLow minValue=0 maxValue=100 step=1
Setpoint item=thermostatStage1 minValue=1 maxValue=60 step=1
```
### Power Meters
@ -697,31 +693,31 @@ The iMeter Solo reports both wattage and kilowatt hours, and is updated during t
You can also manually update the current values from the device and reset the device.
See the example below:
**Items**
#### Items
```
Number:Power iMeterWatts "iMeter [%d watts]" { channel="insteon:device:home:AABBCC:watts" }
Number:Energy iMeterKwh "iMeter [%.04f kWh]" { channel="insteon:device:home:AABBCC:kWh" }
Switch iMeterUpdate "iMeter Update" { channel="insteon:device:home:AABBCC:update" }
Switch iMeterReset "iMeter Reset" { channel="insteon:device:home:AABBCC:reset" }
```java
Number:Power iMeterWatts "iMeter [%d watts]" { channel="insteon:device:home:AABBCC:watts" }
Number:Energy iMeterKwh "iMeter [%.04f kWh]" { channel="insteon:device:home:AABBCC:kWh" }
Switch iMeterUpdate "iMeter Update" { channel="insteon:device:home:AABBCC:update" }
Switch iMeterReset "iMeter Reset" { channel="insteon:device:home:AABBCC:reset" }
```
### Fan Controllers
Here is an example configuration for a FanLinc module, which has a dimmable light and a variable speed fan:
**Items**
#### Items
```
Dimmer fanLincDimmer "fanlinc dimmer [%d %%]" { channel="insteon:device:home:AABBCC:lightDimmer" }
Number fanLincFan "fanlinc fan" { channel="insteon:device:home:AABBCC:fan"}
```java
Dimmer fanLincDimmer "fanlinc dimmer [%d %%]" { channel="insteon:device:home:AABBCC:lightDimmer" }
Number fanLincFan "fanlinc fan" { channel="insteon:device:home:AABBCC:fan"}
```
**Sitemap**
#### Sitemap
```
Slider item=fanLincDimmer switchSupport
Switch item=fanLincFan label="fan speed" mappings=[ 0="OFF", 1="LOW", 2="MEDIUM", 3="HIGH"]
```perl
Slider item=fanLincDimmer switchSupport
Switch item=fanLincFan label="fan speed" mappings=[ 0="OFF", 1="LOW", 2="MEDIUM", 3="HIGH"]
```
### X10 Devices
@ -732,23 +728,23 @@ While you cannot bind the the X10 devices to the Insteon PLM/HUB, here are some
Be aware that most X10 switches/dimmers send no status updates, i.e. openHAB will not learn about switches that are toggled manually.
Further note that X10 devices are addressed with `houseCode.unitCode`, e.g. `A.2`.
**Items**
#### Items
```
Switch x10Switch "X10 switch" { channel="insteon:device:home:AABB:switch" }
Dimmer x10Dimmer "X10 dimmer" { channel="insteon:device:home:AABB:dimmer" }
Contact x10Motion "X10 motion" { channel="insteon:device:home:AABB:contact" }
```java
Switch x10Switch "X10 switch" { channel="insteon:device:home:AABB:switch" }
Dimmer x10Dimmer "X10 dimmer" { channel="insteon:device:home:AABB:dimmer" }
Contact x10Motion "X10 motion" { channel="insteon:device:home:AABB:contact" }
```
## Direct Sending of Group Broadcasts (Triggering Scenes)
The binding can command the modem to send broadcasts to a given Insteon group.
Since it is a broadcast message, the corresponding item does *not* take the address of any device, but of the modem itself.
Since it is a broadcast message, the corresponding item does _not_ take the address of any device, but of the modem itself.
The format is `broadcastOnOff#X` where X is the group that you want to be able to broadcast messages to:
**Things**
### Things
```
```java
Bridge insteon:network:home [port="/dev/ttyUSB0"] {
Thing device AABBCC [address="AA.BB.CC", productKey="0x000045"] {
Channels:
@ -758,10 +754,10 @@ Bridge insteon:network:home [port="/dev/ttyUSB0"] {
```
**Items**
### Items
```
Switch broadcastOnOff "group on/off" { channel="insteon:device:home:AABBCC:broadcastOnOff#2" }
```java
Switch broadcastOnOff "group on/off" { channel="insteon:device:home:AABBCC:broadcastOnOff#2" }
```
Flipping this switch to "ON" will cause the modem to send a broadcast message with group=2, and all devices that are configured to respond to it should react.
@ -769,9 +765,9 @@ Flipping this switch to "ON" will cause the modem to send a broadcast message wi
Channels can also be configured using the device configuration parameter of the device.
The key in the JSON object is `broadcastGroups` and the value is an array of integers:
**Things**
### Things (device Config)
```
```java
Bridge insteon:network:home [port="/dev/ttyUSB0"] {
Thing device AABBCC [address="AA.BB.CC", productKey="0x000045", deviceConfig="{'broadcastGroups': [2]}"]
}
@ -781,12 +777,12 @@ Bridge insteon:network:home [port="/dev/ttyUSB0"] {
## Channel "related" Property
When an Insteon device changes its state because it is directly operated (for example by flipping a switch manually), it sends out a broadcast message to announce the state change, and the binding (if the PLM modem is properly linked as a responder) should update the corresponding openHAB items.
Other linked devices however may also change their state in response, but those devices will *not* send out a broadcast message, and so openHAB will not learn about their state change until the next poll.
Other linked devices however may also change their state in response, but those devices will _not_ send out a broadcast message, and so openHAB will not learn about their state change until the next poll.
One common scenario is e.g. a switch in a 3-way configuration, with one switch controlling the load, and the other switch being linked as a controller.
In this scenario, the "related" keyword can be used to have the binding poll a related device whenever a state change occurs for another device.
A typical example would be two dimmers (A and B) in a 3-way configuration:
```
```java
Bridge insteon:network:home [port="/dev/ttyUSB0"] {
Thing device AABBCC [address="AA.BB.CC", productKey="F00.00.11"] {
Channels:
@ -803,7 +799,7 @@ Another scenario is a group broadcast message, the binding doesn't know which de
In this scenario, the "related" keyword can be used to have the binding poll one or more related device when group message are sent.
A typical example would be a switch configured to broadcast to a group, and one or more devices configured to respond to the message:
```
```java
Bridge insteon:network:home [port="/dev/ttyUSB0"] {
Thing device AABBCC [address="AA.BB.CC", productKey="0x000045"] {
Channels:
@ -814,7 +810,7 @@ Bridge insteon:network:home [port="/dev/ttyUSB0"] {
```
More than one device can be polled by separating them with "+" sign, e.g. "related=aa.bb.cc+xx.yy.zz" would poll both of these devices.
The implemenation of the *related* keyword is simple: if you add it to a channel, and that channel changes its state, then the *related* device will be polled to see if its state has updated.
The implemenation of the _related_ keyword is simple: if you add it to a channel, and that channel changes its state, then the _related_ device will be polled to see if its state has updated.
## Troubleshooting
@ -828,10 +824,10 @@ Under openSUSE this is `/run/lock` and is managed by the **lock** group.
Example commands to grant openHAB access (adjust for your distribution):
````
```shell
usermod -a -G dialout openhab
usermod -a -G lock openhab
````
```
Insufficient access to the lock directory will result in openHAB failing to access the device, even if the device itself is writable.
@ -840,7 +836,9 @@ Insufficient access to the lock directory will result in openHAB failing to acce
Device types are defined in the file `device_types.xml`, which is inside the Insteon bundle and thus not visible to the user.
You can however load your own device_types.xml by referencing it in the network config parameters:
additionalDevices="/usr/local/openhab/rt/my_own_devices.xml"
```text
additionalDevices="/usr/local/openhab/rt/my_own_devices.xml"
```
Where the `my_own_devices.xml` file defines a new device like this:
@ -855,7 +853,7 @@ Where the `my_own_devices.xml` file defines a new device like this:
</xml>
```
Finding the Insteon product key can be tricky since Insteon has not updated the product key table (https://www.insteon.com/pdf/insteon_devcats_and_product_keys_20081008.pdf) since 2008.
Finding the Insteon product key can be tricky since Insteon has not updated the product key table (<https://www.insteon.com/pdf/insteon_devcats_and_product_keys_20081008.pdf>) since 2008.
If a web search does not turn up the product key, make one up, starting with "F", like: F00.00.99.
Avoid duplicate keys by finding the highest fake product key in the `device_types.xml` file, and incrementing by one.
@ -863,9 +861,11 @@ Avoid duplicate keys by finding the highest fake product key in the `device_type
If you can't build a new device out of the existing device features (for a complete list see `device_features.xml`) you can add new features by specifying a file (let's call it `my_own_features.xml`) with the "additionalDevices" option in the network config parameters:
additionalFeatures="/usr/local/openhab/rt/my_own_features.xml"
```text
additionalFeatures="/usr/local/openhab/rt/my_own_features.xml"
```
In this file you can define your own features (or even overwrite an existing feature.
In this file you can define your own features (or even overwrite an existing feature.
In the example below a new feature "MyFeature" is defined, which can then be referenced from the `device_types.xml` file (or from `my_own_devices.xml`):
```xml
@ -885,12 +885,12 @@ In the example below a new feature "MyFeature" is defined, which can then be ref
## Known Limitations and Issues
* Devices cannot be linked to the modem while the binding is running.
- Devices cannot be linked to the modem while the binding is running.
If new devices are linked, the binding must be restarted.
* Setting up Insteon groups and linking devices cannot be done from within openHAB.
- Setting up Insteon groups and linking devices cannot be done from within openHAB.
Use the [Insteon Terminal](https://github.com/pfrommerd/insteon-terminal) for that.
If using Insteon Terminal (especially as root), ensure any stale lock files (For example, /var/lock/LCK..ttyUSB0) are removed before starting openHAB runtime.
Failure to do so may result in "found no ports".
* The Insteon PLM or hub is know to break in about 2-3 years due to poorly sized capacitors.
- The Insteon PLM or hub is know to break in about 2-3 years due to poorly sized capacitors.
You can repair it yourself using basic soldering skills, search for "Insteon PLM repair" or "Insteon hub repair".
* Using the Insteon Hub 2014 in conjunction with other applications (such as the InsteonApp) is not supported. Concretely, openHAB will not learn when a switch is flipped via the Insteon App until the next poll, which could take minutes.
- Using the Insteon Hub 2014 in conjunction with other applications (such as the InsteonApp) is not supported. Concretely, openHAB will not learn when a switch is flipped via the Insteon App until the next poll, which could take minutes.

View File

@ -2,8 +2,6 @@
This binding connects to WiFi [IntesisHome](https://www.intesis.com/products/cloud-solutions/ac-cloud-control) devices using their local REST Api and to [IntesisBox](https://www.intesis.com/products/ac-interfaces/wifi-gateways) devices using TCP connection.
## Supported Things
This binding only supports one thing type:
@ -27,7 +25,6 @@ The binding uses the following configuration parameters.
| password | IntesisHome | Password to login to the local webserver of IntesisHome device |
| port | IntesisBox | TCP port to connect to IntesisBox device, defaults to 3310 |
## Channels
| Channel ID | Item Type | Description | Possible Values |
@ -58,16 +55,16 @@ IntesisBox firmware 1.3.3 reports temperatures by full degrees only (e.g. 23.0)
The binding can be fully setup from the UI but if you decide to use files here is a full example:
**Things**
### Things
```
```java
Thing intesis:intesisHome:acOffice "AC Unit Adapter" @ "AC" [ipAddress="192.168.1.100", password="xxxxx"]
Thing intesis:intesisBox:acOffice "AC Unit Adapter" @ "AC" [ipAddress="192.168.1.100", port=3310]
```
**Items**
### Items
```intesishome.items
```java
Switch ac "Power" { channel="intesis:intesisHome:acOffice:power" }
String acMode "Mode" { channel="intesis:intesisHome:acOffice:mode" }
String acFanSpeed "Fan Speed" <fan> { channel="intesis:intesisHome:acOffice:fanSpeed" }
@ -81,9 +78,9 @@ String acErrorCode "Errorcode"
String acWifiSignal "Wifi Signal Quality" <qualityofservice> { channel="intesis:intesisBox:acOffice:wifiSignal" }
```
**Sitemap**
### Sitemap
```intesisHome.sitemap
```perl
sitemap intesishome label="My AC control" {
Frame label="Climate" {

View File

@ -10,12 +10,12 @@ To see what features each brand has implemented from their APIs, please see this
## How to Get Help
+ Check this readme for any setup steps for your brand.
+ Check if the camera is offline, if so there will be a reason listed.
+ Always look at the log files with TRACE enabled, as any FFmpeg and camera errors may not reach the INFO logs.
- Check this readme for any setup steps for your brand.
- Check if the camera is offline, if so there will be a reason listed.
- Always look at the log files with TRACE enabled, as any FFmpeg and camera errors may not reach the INFO logs.
To enable TRACE logging, enter this in the openHAB console `log:set TRACE org.openhab.binding.ipcamera`.
+ Search the forum using any log messages to find how others have already solved it.
+ Only after doing the above ask for help in the forum and create a new thread.
- Search the forum using any log messages to find how others have already solved it.
- Only after doing the above ask for help in the forum and create a new thread.
## Special Notes for Different Brands
@ -38,7 +38,7 @@ Due to many custom firmwares available, you may need to ask the firmware develop
Example:
```
```java
Thing ipcamera:generic:Esp32Cam
[
ipAddress="192.168.1.181",
@ -62,45 +62,45 @@ For MJPEG to work, you need to set the first sub-stream to use MJPEG format for
### Foscam
* If the user/pass is wrong, the camera can lockout and refuse to answer the binding requiring a reboot of the camera, so be sure the details are correct before the camera tries to poll the camera too many times.
* To use MJPEG streaming, you need to enable one of the streams to use this format. This can be done by entering this into any browser:`http://ip:88/cgi-bin/CGIProxy.fcgi?cmd=setSubStreamFormat&format=1&usr=admin&pwd=password`
* If your camera does not support MJPEG as some Foscams no longer do, then you can set `mjpegUrl` to contain *ffmpeg* to use your CPU to generate a MJPEG stream.
* Some Foscam cameras need to have a detection area listed in the URL when you enable the motion alarm.
- If the user/pass is wrong, the camera can lockout and refuse to answer the binding requiring a reboot of the camera, so be sure the details are correct before the camera tries to poll the camera too many times.
- To use MJPEG streaming, you need to enable one of the streams to use this format. This can be done by entering this into any browser:`http://ip:88/cgi-bin/CGIProxy.fcgi?cmd=setSubStreamFormat&format=1&usr=admin&pwd=password`
- If your camera does not support MJPEG as some Foscams no longer do, then you can set `mjpegUrl` to contain _ffmpeg_ to use your CPU to generate a MJPEG stream.
- Some Foscam cameras need to have a detection area listed in the URL when you enable the motion alarm.
As each Foscam model has a different resolution and two different URLs, this makes it difficult to automate, so an override feature was added to create your own "enable the alarm" URL.
This setting is called `customMotionAlarmUrl` and the steps to using it are:
1. Enable the motion alarm in the web interface of your camera and setup any areas you wish movement to be ignored in. E.g. tree branches moving in the wind.
2. Use any web browser to fetch this URL `https://x.x.x.x/cgi-bin/CGIProxy.fcgi?cmd=getMotionDetectConfig1&usr=xxxxx&pwd=xxxxx`
3. Use the information returned by the above URL to create the override settings.
1. Use any web browser to fetch this URL `https://x.x.x.x/cgi-bin/CGIProxy.fcgi?cmd=getMotionDetectConfig1&usr=xxxxx&pwd=xxxxx`
1. Use the information returned by the above URL to create the override settings.
An example for a Foscam C2 is...
```
```text
/cgi-bin/CGIProxy.fcgi?cmd=setMotionDetectConfig1&isEnable=1&snapInterval=1&schedule0=281474976710655&schedule1=281474976710655&schedule2=281474976710655&schedule3=281474976710655&schedule4=281474976710655&schedule5=281474976710655&schedule6=281474976710655&x1=0&y1=0&width1=10000&height1=10000&sensitivity1=1&valid1=1&linkage=6&usr=xxxxx&pwd=xxxxx
```
Another example is:
```
```text
/cgi-bin/CGIProxy.fcgi?cmd=setMotionDetectConfig&isEnable=1&linkage=0001&sensitivity=1&triggerInterval=15&schedule0=281474976710655&schedule1=281474976710655&schedule2=281474976710655&schedule3=281474976710655&schedule4=281474976710655&schedule5=281474976710655&schedule6=281474976710655&area0=1023&area1=1023&area2=1023&area3=1023&area4=1023&area5=1023&area6=1023&area7=1023&area7=1023&area8=1023&area9=1023&usr=username&pwd=password
```
### Hikvision
+ For MJPEG to work, you need to set the first sub-stream to be in MJPEG format, otherwise you can override the default with the `mjpegUrl` config with a valid URL for MJPEG streams.
+ The CGI/API and also ONVIF features are disabled by default on these cameras, so enable and create user details for ONVIF that are the same user/pass as what you have given the binding.
- For MJPEG to work, you need to set the first sub-stream to be in MJPEG format, otherwise you can override the default with the `mjpegUrl` config with a valid URL for MJPEG streams.
- The CGI/API and also ONVIF features are disabled by default on these cameras, so enable and create user details for ONVIF that are the same user/pass as what you have given the binding.
If your camera does not have PTZ (Pan Tilt Zoom) then you can leave ONVIF disabled and just enable the CGI/API.
+ Each alarm you wish to use must have `Notify Surveillance Center` enabled under each alarms settings in the control panel of the camera itself.
- Each alarm you wish to use must have `Notify Surveillance Center` enabled under each alarms settings in the control panel of the camera itself.
### Hikvision NVRs
In case your Hikvision NVR does not communicate with the binding, make sure that:
* ISAPI is enabled in the NVR settings.
* ONVIF is enabled and a user/pass created that match the bindings.
* RTSP is enabled.
* Some NVR's allow each camera to be exposed on a set port to give direct access to each camera, some users report this works the best and needs to be enabled.
- ISAPI is enabled in the NVR settings.
- ONVIF is enabled and a user/pass created that match the bindings.
- RTSP is enabled.
- Some NVR's allow each camera to be exposed on a set port to give direct access to each camera, some users report this works the best and needs to be enabled.
Some older versions of these NVRs require setting a different snapshot URL (`snapshotUrl`), as well as `ffmpegInput`.
The older ones use the same URLs just with 'ISAPI' removed.
@ -121,8 +121,8 @@ Thing ipcamera:hikvision:West "West Camera"
### Instar
+ For MJPEG to work, you need to set the first sub-stream to be MJPEG format for the default settings to work, otherwise you can override the default with mjpegUrl with a valid URL for MJPEG streams.
+ Be sure to update to the latest firmware for your camera as Instar have made a lot of improvements recently, including adding MQTT features (MQTT is not needed for this binding to work).
- For MJPEG to work, you need to set the first sub-stream to be MJPEG format for the default settings to work, otherwise you can override the default with mjpegUrl with a valid URL for MJPEG streams.
- Be sure to update to the latest firmware for your camera as Instar have made a lot of improvements recently, including adding MQTT features (MQTT is not needed for this binding to work).
## Discovery
@ -269,10 +269,10 @@ The channels are kept consistent as much as possible from brand to brand to make
To move a camera with this binding you need an ONVIF camera that supports one of the following:
+ Absolute movements
+ Relative movements
+ Continuous movements
+ Presets
- Absolute movements
- Relative movements
- Continuous movements
- Presets
To test your cameras compatibility and also to create some preset locations, use a free program called `ONVIF Device Manager` (ODM for short).
Not all ONVIF cameras work with all of the methods, so testing first to confirm what works is a good idea and the presets can not be created with the binding, only loaded after they are already created in a program like ODM.
@ -280,14 +280,13 @@ After creating new or changing existing presets, it is necessary to send the REF
You can create names using the mappings feature of the selection element.
See docs here <https://www.openhab.org/docs/configuration/sitemaps.html#mappings>
Moving the camera using *Relative* or *Continuous* (config `ptzContinuous` must be true) movements can be done by sending the INCREASE and DECREASE commands to the Pan, Tilt and Zoom channels.
Moving the camera using _Relative_ or _Continuous_ (config `ptzContinuous` must be true) movements can be done by sending the INCREASE and DECREASE commands to the Pan, Tilt and Zoom channels.
The OFF command (to any of the PTZ channels) will stop the cameras movements in the case of continuous being selected.
When the config is set to false (the default if not specified) the binding will send relative movements.
There are some widgets created in the HABpanel widget gallery that you can download and use right away saving you time if your camera supports either presets, relative or continuous modes.
For sitemaps, the below examples can be used.
item:
```java
@ -339,17 +338,17 @@ This is where this feature can come in handy, as you can add any of the many FFm
To get this working:
+ Provide a URL to the bindings config `alarmInputUrl` or leave it blank to use the auto detected URL if your camera has ONVIF.
+ Install FFmpeg.
+ You have the resolution and FPS at realistic settings for your CPU. You need to reach 1.x speed otherwise the alarm will lag further behind realtime the longer you have this running.
- Provide a URL to the bindings config `alarmInputUrl` or leave it blank to use the auto detected URL if your camera has ONVIF.
- Install FFmpeg.
- You have the resolution and FPS at realistic settings for your CPU. You need to reach 1.x speed otherwise the alarm will lag further behind realtime the longer you have this running.
1080p and 10 fps maximum for an ARM processor is probably a good place to start testing or even lower if you can.
+ Set the `ffmpegMotionControl` channel to 16 with a slider control and if the alarm stays on increase the value until it works as desired.
- Set the `ffmpegMotionControl` channel to 16 with a slider control and if the alarm stays on increase the value until it works as desired.
If it will not trigger, lower the control until it does.
+ Set the `ffmpegMotionControl` to OFF or 0 and it stops using your CPU.
- Set the `ffmpegMotionControl` to OFF or 0 and it stops using your CPU.
You can link this same channel to BOTH a switch and a slider at the same time if you like to have both types of controls.
+ The output of the alarm will go to a channel called `ffmpegMotionAlarm` and you can use the `lastMotionType` channel to determine which alarm was last tripped if your camera has multiple alarm types.
- The output of the alarm will go to a channel called `ffmpegMotionAlarm` and you can use the `lastMotionType` channel to determine which alarm was last tripped if your camera has multiple alarm types.
**audioAlarm**
### audioAlarm
This works in the same way, just with different channels.
If you setup a lower resolution URL in the config `alarmInputUrl` you need to ensure it contains audio otherwise this feature wont work.
@ -361,20 +360,20 @@ There are a number of ways to use snapshots with this binding.
**Ways to use snapshots are:**
+ Use the cameras URL so it passes from the camera directly to your end device. ie a tablet.
- Use the cameras URL so it passes from the camera directly to your end device. ie a tablet.
This is always the best option if it works.
+ Request a snapshot with the URL `http://openhabIP:8080/ipcamera/{cameraUID}/ipcamera.jpg`.
- Request a snapshot with the URL `http://openhabIP:8080/ipcamera/{cameraUID}/ipcamera.jpg`.
The IP is for your openHAB server not the camera.
If you find the snapshot is old, you can set the `gifPreroll` to a number above 0 and this forces the camera to keep updating the stored JPG in RAM.
The ipcamera.jpg can also be cast, as most cameras can not directly cast their snapshots.
+ Use the `http://openHAB:8080/ipcamera/{cameraUID}/snapshots.mjpeg` to request a stream of snapshots to be delivered in MJPEG format.
+ Use the record GIF action and use a `gifPreroll` value > 0.
- Use the `http://openHAB:8080/ipcamera/{cameraUID}/snapshots.mjpeg` to request a stream of snapshots to be delivered in MJPEG format.
- Use the record GIF action and use a `gifPreroll` value > 0.
This creates a number of snapshots in the FFmpeg output folder called snapshotXXX.jpg where XXX starts at 0 and increases each `pollTime`.
This allows you to get a snapshot from an exact amount of time before, on, or after starting the record to GIF action.
Handy for cameras which lag due to slow processors, or if you do not want a hand blocking the image when the door bell was pushed.
These snapshots can be fetched either directly as they exist on disk, or via this URL format.
`http://openHAB:8080/ipcamera/{cameraUID}/snapshot0.jpg`
+ Also worth a mention is that you can off load cameras to a software package running on a separate server such as, Motion, Shinobi and Zoneminder.
- Also worth a mention is that you can off load cameras to a software package running on a separate server such as, Motion, Shinobi and Zoneminder.
See this forum thread for examples of how to use snapshots and streams in a sitemap.
<https://community.openhab.org/t/ip-camera-how-to-clickable-thumbnail-overview-in-sitemaps-that-opens-up-to-a-larger-view/77990>
@ -389,7 +388,7 @@ Visit their site here to learn how <https://ffmpeg.org/>
Under Linux, FFmpeg can be installed very easily with this one command.
```
```shell
sudo apt update && sudo apt install ffmpeg
```
@ -400,21 +399,21 @@ If you prefer to use your own firewall instead, you can also choose to make the
There are multiple ways to get a moving picture, to use them just enter the URL into any browser using `http://openHAB:8080/ipcamera/{cameraUID}/name.format` replacing the name.format with one of the options that are listed below:
+ **ipcamera.m3u8** HLS (HTTP Live Streaming) which uses H.264 compression.
- **ipcamera.m3u8** HLS (HTTP Live Streaming) which uses H.264 compression.
This can be used to cast to Chromecast devices, or can display video in many browsers (some browsers require a plugin to be installed).
Please understand that this format due to the way it works will give you lag behind real time, more on this below.
+ **ipcamera.mjpeg** whilst needing more bandwidth, it is far more compatible for displaying in a wider range of UIs and browsers.
- **ipcamera.mjpeg** whilst needing more bandwidth, it is far more compatible for displaying in a wider range of UIs and browsers.
It is normally 1 second or less behind real-time.
FFmpeg can be used to create this stream if your camera does not create one for you, but this uses more CPU.
A lot of cameras limit the resolution in this format, so consider using HLS, autofps.mjpeg, or snapshots.mjpeg instead which will be in a higher resolution.
+ **snapshots.mjpeg** is a special MJPEG stream created from the cameras snapshots that are taken at the polling rate.
+ **autofps.mjpeg** This requires a camera that has a motion alarm to be turned on or it will only send a picture every 8 seconds.
- **snapshots.mjpeg** is a special MJPEG stream created from the cameras snapshots that are taken at the polling rate.
- **autofps.mjpeg** This requires a camera that has a motion alarm to be turned on or it will only send a picture every 8 seconds.
You can also use the `externalMotion` channel to change the framerate.
This feature is designed to keep data traffic to your mobile devices as low as possible by automatically sending 1fps when motion is occurring, but only 1 picture every 8 seconds when the picture has no motion.
The idea is to not send lots of pictures if the picture has not changed as doing so only eats up your data plan.
+ **ipcamera.gif** This is small in size and very compatible and handy to use in push notifications, Pushover, Telegram, or emails.
- **ipcamera.gif** This is small in size and very compatible and handy to use in push notifications, Pushover, Telegram, or emails.
You can cast it which can be handy to show a moving picture that keeps repeating on a Google/Nest home hub or your wall mounted tablet.
+ MP4 recordings can be created by the binding and FFmpeg, more on this below.
- MP4 recordings can be created by the binding and FFmpeg, more on this below.
## MJPEG Streams
@ -434,7 +433,7 @@ To request the MJPEG stream from the binding, all you need to do is use this lin
<http://openHAB:8080/ipcamera/{cameraUID}/ipcamera.mjpeg>
**Creating MJPEG with FFmpeg**
### Creating MJPEG with FFmpeg
To use this feature, all you need to do is set the config `mjpegUrl` to contain "ffmpeg" to use your CPU to generate the MJPEG stream with FFmpeg.
For cameras that have an API you can opt to not use the cameras stream and use FFmpeg instead should you run out of available streams.
@ -462,7 +461,7 @@ NOTE: The IP is openHAB's not your cameras IP.
Use the following to display it in your sitemap.
```
```java
Video url="http://openHAB:8080/ipcamera/{cameraUID}/autofps.mjpeg" encoding="mjpeg"
Video url="http://openHAB:8080/ipcamera/{cameraUID}/snapshots.mjpeg" encoding="mjpeg"
@ -483,9 +482,9 @@ This 64 second delay before the stream is stopped helps when you are moving back
To use the HLS feature, you need to:
+ Ensure FFmpeg is installed.
+ For `generic` cameras, you will need to use the config `ffmpegInput` to provide a HTTP or RTSP URL.
+ Consider using a SSD/HDD, zram location, or a tmpfs (ram drive) can be used if you only have micro SD/flash based storage.
- Ensure FFmpeg is installed.
- For `generic` cameras, you will need to use the config `ffmpegInput` to provide a HTTP or RTSP URL.
- Consider using a SSD/HDD, zram location, or a tmpfs (ram drive) can be used if you only have micro SD/flash based storage.
### Ram Drive Setup
@ -493,13 +492,13 @@ To create a tmpfs of 20mb at /tmpfs/ run this command to open the file for editi
Recommend using 20Mb per camera that uses this location although it could use less than half that amount if carefully streamlined for less ram.
If using the FFmpeg `-hls_wrap wrap` option (causes issues for my Home Hub), you can get away with 5Mb per camera.
```
```shell
nano /etc/fstab
```
Enter and save this at the bottom of the file using ctrl X when done.
```
```shell
tmpfs /tmpfs tmpfs defaults,nosuid,nodev,noatime,size=20m 0 0
```
@ -513,26 +512,26 @@ Then you need to change the HLS settings to what you need, some are suggestions
Less delay behind realtime (no audio) if your cameras iFrames are 1 second apart (-hls_time 1):
```bash
```shell
-strict -2 -f lavfi -i aevalsrc=0 -acodec aac -vcodec copy -hls_flags delete_segments -hls_time 1 -hls_list_size 4
```
For cameras with no audio in the stream (default setting).
```bash
```shell
-strict -2 -f lavfi -i aevalsrc=0 -acodec aac -vcodec copy -hls_flags delete_segments -hls_time 2 -hls_list_size 4
```
For cameras with audio in the stream.
Note: will break Chromecast if the camera does not send audio which is why this is not the default.
```bash
```shell
-strict -2 -acodec aac -vcodec copy -hls_flags delete_segments -hls_time 2 -hls_list_size 4
```
Some browsers require larger segment sizes to prevent choppy playback, this can be done with this setting to create 10 second segment files which increases the time before you can get playback working.
```bash
```shell
-strict -2 -f lavfi -i aevalsrc=0 -acodec aac -vcodec copy -hls_flags delete_segments -hls_time 10 -hls_list_size 4
```
@ -541,22 +540,19 @@ Some browsers require larger segment sizes to prevent choppy playback, this can
The webview version allows you to zoom in on the video when using the iOS app, the Video element version does not zoom, but it will pass through myopenHAB.
```
```java
Text label="HLS Video Stream" icon="camera"{Video url="http://openHAB:8080/ipcamera/{cameraUID}/ipcamera.m3u8" encoding="hls"}
Text label="HLS Webview Stream" icon="camera"{Webview url="http://openHAB:8080/ipcamera/{cameraUID}/ipcamera.m3u8" height=15}
```
**Display multiple HLS streams side by side**
#### Display multiple HLS streams side by side
In order to display camera hls streams side by side you can also create a webView item and link it to a HTML file in the conf/html directory as follows:
The webView URL is that of your openHAB installation.
```
```java
Webview url="http://192.168.6.4:8080/static/html/file.html" height=5
```
```html
@ -585,7 +581,7 @@ Webview url="http://192.168.6.4:8080/static/html/file.html" height=5
There are two ways to cast a camera.
1. openHAB Cloud Connector and using metadata/tags.
2. Chromecast Bindings `playuri` channel.
1. Chromecast Bindings `playuri` channel.
The first method once setup allows you to ask "OK Google show X camera", or "OK Google show X camera on Y display".
By optionally naming the display that you wish to use, it can be cast directly to your Chromecast (connected to your TV) by speaking to a Google Nest Mini.
@ -595,9 +591,8 @@ The synonyms in the tag allows Google to understand multiple names that the came
Example of how this is done in an items file.
```
```java
String FrontDoorCamHlsUrl "Front Door" { channel="ipcamera:ONVIF:FrontDoor:hlsUrl", synonyms="door bell, front camera", ga="Camera" [ protocols="hls" ] }
```
The second method is by using the Chromecast Binding and by sending the URL you wish to cast to the `playuri` channel.
@ -607,16 +602,14 @@ Example:
items
```
```java
String KitchenHomeHubPlayURI { channel="chromecast:chromecast:KitchenHomeHub:playuri" }
```
In a rule...
```
```java
KitchenHomeHubPlayURI.sendCommand("http://openHAB:8080/ipcamera/{cameraUID}/ipcamera.m3u8")
```
## MP4 and GIF Recordings
@ -625,19 +618,19 @@ You can use FFmpeg to recording to either GIF or MP4 format.
The steps to do this are:
+ Use the Action called `recordMP4(String filename, int secondsToRecord)` or `recordGIF(String filename, int secondsToRecord)` with the first argument being the filename you wish to use, and the second the time in seconds you wish to record for.
+ Once the file is created, the channel `recordingMp4` or `recordingGif` will change itself back to `0`, which can be used to trigger a rule to send/use the file which will appear in the `ffmpegOutput` folder.
+ The channel `mp4History` or `gifHistory` keeps a string of the last 50 filenames (comma separated values CSV) until you reset the history. If you use `ipcamera` as the filename, this stops the history from growing.
+ The channel `mp4HistoryLength` and `gifHistoryLength` keeps track of how many recordings were made since it was last reset.
- Use the Action called `recordMP4(String filename, int secondsToRecord)` or `recordGIF(String filename, int secondsToRecord)` with the first argument being the filename you wish to use, and the second the time in seconds you wish to record for.
- Once the file is created, the channel `recordingMp4` or `recordingGif` will change itself back to `0`, which can be used to trigger a rule to send/use the file which will appear in the `ffmpegOutput` folder.
- The channel `mp4History` or `gifHistory` keeps a string of the last 50 filenames (comma separated values CSV) until you reset the history. If you use `ipcamera` as the filename, this stops the history from growing.
- The channel `mp4HistoryLength` and `gifHistoryLength` keeps track of how many recordings were made since it was last reset.
You can send the `0` command to this channel to clear the `mp4History` at the same time as setting this channel back to 0.
+ You can use the `mp4OutOptions` or `gifOutOptions` config's to apply any FFmpeg filters that you wish.
- You can use the `mp4OutOptions` or `gifOutOptions` config's to apply any FFmpeg filters that you wish.
There is also a HABpanel Widget worth checking out that uses the history feature to display a list of recent recordings.
<https://community.openhab.org/t/custom-widget-camera-history-and-live-popup/103082>
**NOTE:** If you are using a tmpfs folder, you will need to ensure you do not run out of space by moving the files with a rule.
**GIF Preroll**
### GIF Preroll
There is also a config called `gifPreroll` to be aware of.
When `gifPreroll` is 0 (the default) the binding will use the `ffmpegInput` stream to record from.
@ -694,11 +687,11 @@ The display order can be allowed to change if one or more of the cameras detects
Some additional checks to get it working are:
+ If using the groups HLS feature, the poll time of the group must be the same or less than the total time contained in each cameras m3u8 file.
- If using the groups HLS feature, the poll time of the group must be the same or less than the total time contained in each cameras m3u8 file.
If you have 3 seconds worth of video segments in each cameras HLS stream, this is the max you can set the poll time of the group to.
+ All cameras in a group should have the same HLS segment size setting, 1 and 2 second long segments have been tested to work.
+ Mixing cameras with different aspect ratios may cause issues when cast.
+ The HLS files need to remain on disk for the number of cameras X pollTime, use the `-hls_delete_threshold` ffmpeg option to control this.
- All cameras in a group should have the same HLS segment size setting, 1 and 2 second long segments have been tested to work.
- Mixing cameras with different aspect ratios may cause issues when cast.
- The HLS files need to remain on disk for the number of cameras X pollTime, use the `-hls_delete_threshold` ffmpeg option to control this.
## Sitemap Example

View File

@ -8,7 +8,7 @@ Whilst Ambient Weather has it own cloud based binding, the other brands will not
This binding works fully offline and can work via one of two methods:
1. Local scraping of the weather station's `livedata` webpage at 12 second resolution (non WiFi models only).
2. Both WiFi and RJ45 models can be setup to push the data directly to the openHAB (default 8080) server directly and the binding can parse the data from the weather underground data.
1. Both WiFi and RJ45 models can be setup to push the data directly to the openHAB (default 8080) server directly and the binding can parse the data from the weather underground data.
The other binding worth mentioning is the weather underground binding that allows the data to be intercepted on its way to WU, however many of the weather stations do not allow the redirection of the WU data and require you to know how to do redirections with a custom DNS server on your network.
This binding with method 1 and a RJ45 model is by far the easiest method and works for all the brands and will not stop the data still being sent to WU if you wish to do both at the same time.

View File

@ -1,12 +1,12 @@
# iRobot Binding
This binding provides integration of products by iRobot company (https://www.irobot.com/). It is currently developed
This binding provides integration of products by iRobot company (<https://www.irobot.com/>). It is currently developed
to support Roomba vacuum cleaner/mopping robots with built-in Wi-Fi module. The binding interfaces to the robot directly
without any need for a dedicated MQTT server.
## Supported Things
- iRobot Roomba robotic vacuum cleaner (https://www.irobot.com/roomba).
- iRobot Roomba robotic vacuum cleaner (<https://www.irobot.com/roomba>).
- iRobot Braava has also been reported to (partially) work.
- In general, the channel list is far from complete. There is a lot to do now.
@ -149,8 +149,8 @@ Error codes. Data type is string in order to be able to utilize mapping to human
You can clean one or many specific regions of a given map by sending the following String to the command channel:
```
cleanRegions:<pmapId>;[r=]<region_id1>,[r=]<region_id2>,z=<zone_id1>,...;[<user_pmapv_id>]
```text
cleanRegions:<pmapId>;[r=]<region_id1>,[r=]<region_id2>,z=<zone_id1>,...;[<user_pmapv_id>]
```
Some devices support cleaning rooms (aka regions). Additionally, support for cleaning rectangle areas previously defined in the iRobot-App (aka zones) may be available.
@ -161,22 +161,21 @@ The easiest way to determine the pmapId, region_ids/zoneids and userPmapvId is t
## Known Problems / Caveats
1. Sending "pause" command during missions other than "clean" is equivalent to sending "stop"
2. Switching to "spot" mission is possible only in "stop" state. Attempt to do it otherwise causes error: the command is rejected and error tones are played.
3. Roomba's built-in MQTT server, used for communication, supports only a single local connection at a time. Bear this in mind when you want to do something that requires local connection from your phone, like reconfiguring the network. Disable openHAB Thing before doing this.
4. Sometimes during intensive testing Roomba just stopped communicating over the local connection. If this happens, try rebooting it. On my robot it's done by holding "Clean" button for about 10 seconds until all the LEDs come on. Release the button and the reboot tone will be played. It looks like there are some bugs in the firmware.
1. Switching to "spot" mission is possible only in "stop" state. Attempt to do it otherwise causes error: the command is rejected and error tones are played.
1. Roomba's built-in MQTT server, used for communication, supports only a single local connection at a time. Bear this in mind when you want to do something that requires local connection from your phone, like reconfiguring the network. Disable openHAB Thing before doing this.
1. Sometimes during intensive testing Roomba just stopped communicating over the local connection. If this happens, try rebooting it. On my robot it's done by holding "Clean" button for about 10 seconds until all the LEDs come on. Release the button and the reboot tone will be played. It looks like there are some bugs in the firmware.
## Example
irobot.things:
```
```java
Thing irobot:roomba:my_roomba [ ipaddress="192.168.0.5", password="xxxxxxxx" ]
```
irobot.items:
```
```java
String Roomba_Command { channel="irobot:roomba:my_roomba:command" }
String Roomba_Cycle { channel="irobot:roomba:my_roomba:cycle" }
String Roomba_Phase { channel="irobot:roomba:my_roomba:phase" }
@ -187,7 +186,7 @@ String Roomba_Error { channel="irobot:roomba:my_roomba:error" }
irobot.sitemap:
```
```perl
Selection item=Roomba_Command mappings=["clean"="Clean", "spot"="Spot", dock="Dock", pause="Pause", stop="Stop"]
Text item=Roomba_Cycle label="Current cycle"
Text item=Roomba_Phase label="Current phase"
@ -198,8 +197,8 @@ Text item=Roomba_Error label="Error"
## Credits
This code is a result of development of an abandoned draft by hkunh42 (https://github.com/hkuhn42/openhab2.roomba)
This code is a result of development of an abandoned draft by hkunh42 (<https://github.com/hkuhn42/openhab2.roomba>)
and heavily uses the following projects as a reference:
- Roomba980-Python by Nick Waterton (https://github.com/NickWaterton/Roomba980-Python)
- Dorita980 by Facu ZAK (https://github.com/koalazak/dorita980)
- Roomba980-Python by Nick Waterton (<https://github.com/NickWaterton/Roomba980-Python>)
- Dorita980 by Facu ZAK (<https://github.com/koalazak/dorita980>)

View File

@ -4,7 +4,7 @@ This binding integrates infrared receivers and blasters manufactured by IRtrans
## Supported Things
The *ethernet* Bridge supports the Ethernet (PoE) IRtrans transceiver equipped with an on-board IRDB database. Blasters and receivers are defined as Channels on the Bridge, but one can also define blasters as a *blaster* child Thing on the Bridge.
The _ethernet_ Bridge supports the Ethernet (PoE) IRtrans transceiver equipped with an on-board IRDB database. Blasters and receivers are defined as Channels on the Bridge, but one can also define blasters as a _blaster_ child Thing on the Bridge.
## Discovery
@ -16,29 +16,29 @@ There is no specific binding configuration required.
## Thing Configuration
The *ethernet* Bridge requires an *ipAddress* IP address and *portNumber* TCP port number in order to configure it. Optionally, one can add the following parameters to the configuration:
The _ethernet_ Bridge requires an _ipAddress_ IP address and _portNumber_ TCP port number in order to configure it. Optionally, one can add the following parameters to the configuration:
*bufferSize* : Buffer size used by the TCP socket when sending and receiving commands to the transceiver (default: 1024)
*responseTimeOut* : Specifies the time milliseconds to wait for a response from the transceiver when sending a command (default: 100)
*pingTimeOut* : Specifies the time milliseconds to wait for a response from the transceiver when pinging the device (default: 1000)
*reconnectInterval* : Specifies the time seconds to wait before reconnecting to a transceiver after a communication failure (default: 10)
_bufferSize_ : Buffer size used by the TCP socket when sending and receiving commands to the transceiver (default: 1024)
_responseTimeOut_ : Specifies the time milliseconds to wait for a response from the transceiver when sending a command (default: 100)
_pingTimeOut_ : Specifies the time milliseconds to wait for a response from the transceiver when pinging the device (default: 1000)
_reconnectInterval_ : Specifies the time seconds to wait before reconnecting to a transceiver after a communication failure (default: 10)
The *blaster* Thing requires a *led* parameter to specify on which infrared commands will be emitted, *remote* the remote or manufacturer name which's commands will be allowed, as defined in the IRtrans server database that is flashed into the transceiver (can be '*' for 'any' remote), and *command* the name of the command will be allowed, as defined in the IRtrans server database that is flashed into the transceiver (can be '*' for 'any' command).
The _blaster_ Thing requires a _led_ parameter to specify on which infrared commands will be emitted, _remote_ the remote or manufacturer name which's commands will be allowed, as defined in the IRtrans server database that is flashed into the transceiver (can be ' \*' for 'any' remote), and _command_ the name of the command will be allowed, as defined in the IRtrans server database that is flashed into the transceiver (can be '*' for 'any' command).
## Channels
The *ethernet* Thing supports the following Channel Types:
The _ethernet_ Thing supports the following Channel Types:
| Channel Type ID | Item Type | Description |
|-----------------|-----------|-------------------------------------------------------------------------------------|
| blaster | String | Send (filtered) infrared commands over the specified blaster LED of the transceiver |
| receiver | String | Receive (filtered) infrared commands on the receiver LED of the transceiver |
The *blaster* Channel Type requires a *led* configuration parameter to specify on which infrared commands will be emitted, *remote* the remote or manufacturer name which's commands will be allowed, as defined in the IRtrans server database that is flashed into the transceiver (can be '*' for 'any' remote), and *command* the name of the command will be allowed, as defined in the IRtrans server database that is flashed into the transceiver (can be '*' for 'any' command).
The _blaster_ Channel Type requires a _led_ configuration parameter to specify on which infrared commands will be emitted, _remote_ the remote or manufacturer name which's commands will be allowed, as defined in the IRtrans server database that is flashed into the transceiver (can be '\*' for 'any' remote), and _command_ the name of the command will be allowed, as defined in the IRtrans server database that is flashed into the transceiver (can be '*' for 'any' command).
The *receiver* Channel Type requires *remote* the remote or manufacturer name which's commands will be allowed, as defined in the IRtrans server database that is flashed into the transceiver (can be '*' for 'any' remote), and *command* the name of the command will be allowed, as defined in the IRtrans server database that is flashed into the transceiver (can be '*' for 'any' command).
The _receiver_ Channel Type requires _remote_ the remote or manufacturer name which's commands will be allowed, as defined in the IRtrans server database that is flashed into the transceiver (can be '\*' for 'any' remote), and _command_ the name of the command will be allowed, as defined in the IRtrans server database that is flashed into the transceiver (can be '*' for 'any' command).
The *blaster* Thing supports a *io* Channel (of Item Type String) that allows to read infrared commands received by the blaster, as well as to write infrared commands to be sent by the blaster.
The _blaster_ Thing supports a _io_ Channel (of Item Type String) that allows to read infrared commands received by the blaster, as well as to write infrared commands to be sent by the blaster.
The IRtrans transceivers store infrared commands in a "remote,command" table, e.g. "telenet,power". Sending the literal text string "telenet,power" to the transceiver will make the transceiver "translate" that into the actual infrared command that will be emitted by the transceiver. A "remote,command" string sent to a Channel that does not match the defined filter will be ignored.
@ -46,7 +46,7 @@ The IRtrans transceivers store infrared commands in a "remote,command" table, e.
demo.things:
```
```java
Bridge irtrans:ethernet:kitchen [ ipAddress="192.168.0.56", portNumber=21000, bufferSize=1024, responseTimeOut=100, pingTimeOut=2000, reconnectInterval=10 ]
{
Channels:
@ -60,7 +60,7 @@ In the above example, the first channel will be updated when any IR command from
The led can be "E"-External, "I"-Internal, "B"-Both, and a numeric for a selected led.
Depending on the number of remotes, the bufferSize must be adjusted. E.g. for 7 remotes and 47 commands a bufferSize of 2048 is needed.
```
```java
Bridge irtrans:ethernet:technicalfacilities [ ipAddress="192.168.0.58", portNumber=21000, bufferSize=1024, responseTimeOut=100, pingTimeOut=2000, reconnectInterval=10 ]
{
Channels:
@ -75,7 +75,7 @@ In the above channel a single IRtrans transceiver has 3 output LEDs in use, 2 to
demo.items:
```
```java
String KitchenIRReceiverAny {channel="irtrans:ethernet:kitchen:any"}
String KitchenIRReceiverTelenetPower {channel="irtrans:ethernet:kitchen:telenet_power"}
String KitchenIRBlasterSamsung {channel="irtrans:ethernet:kitchen:samsung"}
@ -88,7 +88,7 @@ String TechnicalFacilitiesIRBlasterAppleTV {channel="irtrans:ethernet:technicalf
demo.rules:
```
```java
rule "Kitchen switch IR rule"
when
Item KitchenIRReceiverTelenetPower received update

View File

@ -8,7 +8,7 @@ In case there is no need to handle the heating system values directly in the KNX
The system works in a way that the ISM8 connects to a partner and sends from time to time an update. The frequency depends on the change of the values.
This binding is listening to those messages.
After the first connection there is an active command send to the ISM8 in order to receive all available data points.
The manual of the ISM8 can be downloaded from the supplier (https://www.wolf.eu/fileadmin/Wolf_Profi/Downloads/Montage-Bedienungsanleitungen/Regelungen/Zubehoer/3064356_201611_ISM8i_Montage-u.Bedienungsanleitung.pdf)
The manual of the ISM8 can be downloaded from the supplier (<https://www.wolf.eu/fileadmin/Wolf_Profi/Downloads/Montage-Bedienungsanleitungen/Regelungen/Zubehoer/3064356_201611_ISM8i_Montage-u.Bedienungsanleitung.pdf>)
## Supported Things
@ -18,7 +18,6 @@ _This binding does only support one Thing - the Ism8-Device._
_Auto-discovery is not supported._
## Thing Configuration
The intention was to have a generic ISM8 binding in order to offer the full flexibilty for the different heating systems.
@ -35,51 +34,49 @@ The ISM8 does currently support 4 different devices at the same moment of time (
Once you have an overview of your heating system set you can start to create the channels accordingly.
Each channel should be created in the following way:
| Type | Name | Description | Configuration |
|--------|---------|----------------------------|-----------------|
| Number | DpId004 | "Kesseltemperatur" | id, type, write |
| Type | Name | Description | Configuration |
|--------|---------|----------------------------|-----------------|
| Number | DpId004 | "Kesseltemperatur" | id, type, write |
Type:
+ Switch use for boolean values
+ Number use for any number
+ Other types may work as well.
- Switch use for boolean values
- Number use for any number
- Other types may work as well.
Name:
+ Put here any name you'd like. This name is used for creating the binding.
- Put here any name you'd like. This name is used for creating the binding.
Description:
+ Put here any description you'd like or the description for the data point ID from the Wolf manual.
- Put here any description you'd like or the description for the data point ID from the Wolf manual.
Configuration:
+ id=1 - Please enter here the ID of the data point you'd like to map to this channel.
- id=1 - Please enter here the ID of the data point you'd like to map to this channel.
A list of the available IDs are available within the Wolf manual.
The supported IDs are depending on the firmware version of the ISM8 and the connected systems.
+ type="1.001" - Please enter here the knx type of the data point.
- type="1.001" - Please enter here the knx type of the data point.
You can find the data type in the Wolf ISM8 document as well.
+ write=true - This parameter defines if the channel is bidirectional, but the parameter is optional and by default false.
- write=true - This parameter defines if the channel is bidirectional, but the parameter is optional and by default false.
Note:
Not all available types of the ISM8 interface are fully supported, but this can be extended.
For the moment the following data types are implemented:
+ DPT-Bool: `1.001`, `1.002`, `1.003`, `1.009`
+ DPT-Scaling: `5.001`
+ DPT-Value: `9.001`, `9.002`, `9.006`
+ DPT-FlowRate: `13.002`
+ DPT-Mode: `20.102`, `20.103`, `20.105`
- DPT-Bool: `1.001`, `1.002`, `1.003`, `1.009`
- DPT-Scaling: `5.001`
- DPT-Value: `9.001`, `9.002`, `9.006`
- DPT-FlowRate: `13.002`
- DPT-Mode: `20.102`, `20.103`, `20.105`
## Full Example
_ism8.things_
### ism8.things
Thing ism8:device:heater "Wolf Heizung" [portNumber=12004]
```java
Thing ism8:device:heater "Wolf Heizung" [portNumber=12004]
{
Type switch-readonly : DpId001 "Störung Heizgerät" [id=1, type="1.001"]
Type number-readonly : DpId002 "Betriebsart" [id=2, type="20.105"]
@ -105,37 +102,41 @@ _ism8.things_
Type number-readonly : DpId167 "CWL Luftdurchsatz Abluft" [id=167, type="13.002"]
Type number-readonly : DpId192 "CML Filterwarnung" [id=192, type="1.001"]
}
```
_ism8.items_
### ism8.items
Switch ISM_HeizungStoerung "Störung Heizgerät" { channel="ism8:device:heater:DpId001" }
Number ISM_HeizungBetriebsart "Betriebsart" { channel="ism8:device:heater:DpId002" }
Number ISM_HeizungBrennerleistung "Brennerleistung [%.1f %%]" { channel="ism8:device:heater:DpId003" }
Number ISM_HeizungKesseltemperatur "Kesseltemperatur [%.1f °C]" { channel="ism8:device:heater:DpId004" }
Number ISM_HeizungRuecklauftemperatur "Rücklauftemperatur [%.1f °C]" { channel="ism8:device:heater:DpId006" }
Number ISM_HeizungWarmwassertemperatur "Warmwassertemperatur [%.1f °C]" { channel="ism8:device:heater:DpId007" }
Number ISM_HeizungAussentemperatur "Außentemperatur [%.1f °C]" { channel="ism8:device:heater:DpId008" }
Switch ISM_HeizungStatusFlamme "Status Flamme" { channel="ism8:device:heater:DpId009" }
Number ISM_HeizungAnlagendruck "Anlagendruck [%.2f bar]" { channel="ism8:device:heater:DpId013" }
Switch ISM_HeizungSysStoerung "Störung Systemmodul" { channel="ism8:device:heater:DpId053" }
Number ISM_HeizungSysAussentemperatur "Außentemperatur Systemmodul [%.1f °C]" { channel="ism8:device:heater:DpId054" }
Number ISM_HeizungSollwertWarmwasser "Sollwert Warmwasser [%.1f °C]" { channel="ism8:device:heater:DpId056" }
Number ISM_HeizungBetriebsartHeizkreis "Betriebsart Heizkreis" { channel="ism8:device:heater:DpId057" }
Number ISM_HeizungBetriebsartWarmwasser "Betriebsart Warmwasser" { channel="ism8:device:heater:DpId058" }
Number ISM_HeizungSollwertverschiebung "Sollwertverschiebung [%.1f °C]" { channel="ism8:device:heater:DpId065" }
Switch ISM_LueftungStoerung "CML Störung" { channel="ism8:device:heater:DpId148" }
Number ISM_LueftungBetriebsart "CWL Betriebsart" { channel="ism8:device:heater:DpId149" }
Number ISM_LueftungLueftungsstufe "CWL Lüftungsstufe [%.1f %%]" { channel="ism8:device:heater:DpId163" }
Number ISM_LueftungAblufttemperatur "CWL Ablufttemperatur [%.1f °C]" { channel="ism8:device:heater:DpId164" }
Number ISM_LueftungZulufttemperatur "CWL Zulufttemperatur [%.1f °C]" { channel="ism8:device:heater:DpId165" }
Number ISM_LueftungLuftdurchsatzZuluft "CWL Luftdurchsatz Zuluft [%.1f m³/h]" { channel="ism8:device:heater:DpId166" }
Number ISM_LueftungLuftdurchsatzAbluft "CWL Luftdurchsatz Abluft [%.1f m³/h]" { channel="ism8:device:heater:DpId167" }
Switch ISM_LueftungFilterwarnung "CML Filterwarnung" { channel="ism8:device:heater:DpId192" }
```java
Switch ISM_HeizungStoerung "Störung Heizgerät" { channel="ism8:device:heater:DpId001" }
Number ISM_HeizungBetriebsart "Betriebsart" { channel="ism8:device:heater:DpId002" }
Number ISM_HeizungBrennerleistung "Brennerleistung [%.1f %%]" { channel="ism8:device:heater:DpId003" }
Number ISM_HeizungKesseltemperatur "Kesseltemperatur [%.1f °C]" { channel="ism8:device:heater:DpId004" }
Number ISM_HeizungRuecklauftemperatur "Rücklauftemperatur [%.1f °C]" { channel="ism8:device:heater:DpId006" }
Number ISM_HeizungWarmwassertemperatur "Warmwassertemperatur [%.1f °C]" { channel="ism8:device:heater:DpId007" }
Number ISM_HeizungAussentemperatur "Außentemperatur [%.1f °C]" { channel="ism8:device:heater:DpId008" }
Switch ISM_HeizungStatusFlamme "Status Flamme" { channel="ism8:device:heater:DpId009" }
Number ISM_HeizungAnlagendruck "Anlagendruck [%.2f bar]" { channel="ism8:device:heater:DpId013" }
Switch ISM_HeizungSysStoerung "Störung Systemmodul" { channel="ism8:device:heater:DpId053" }
Number ISM_HeizungSysAussentemperatur "Außentemperatur Systemmodul [%.1f °C]" { channel="ism8:device:heater:DpId054" }
Number ISM_HeizungSollwertWarmwasser "Sollwert Warmwasser [%.1f °C]" { channel="ism8:device:heater:DpId056" }
Number ISM_HeizungBetriebsartHeizkreis "Betriebsart Heizkreis" { channel="ism8:device:heater:DpId057" }
Number ISM_HeizungBetriebsartWarmwasser "Betriebsart Warmwasser" { channel="ism8:device:heater:DpId058" }
Number ISM_HeizungSollwertverschiebung "Sollwertverschiebung [%.1f °C]" { channel="ism8:device:heater:DpId065" }
Switch ISM_LueftungStoerung "CML Störung" { channel="ism8:device:heater:DpId148" }
Number ISM_LueftungBetriebsart "CWL Betriebsart" { channel="ism8:device:heater:DpId149" }
Number ISM_LueftungLueftungsstufe "CWL Lüftungsstufe [%.1f %%]" { channel="ism8:device:heater:DpId163" }
Number ISM_LueftungAblufttemperatur "CWL Ablufttemperatur [%.1f °C]" { channel="ism8:device:heater:DpId164" }
Number ISM_LueftungZulufttemperatur "CWL Zulufttemperatur [%.1f °C]" { channel="ism8:device:heater:DpId165" }
Number ISM_LueftungLuftdurchsatzZuluft "CWL Luftdurchsatz Zuluft [%.1f m³/h]" { channel="ism8:device:heater:DpId166" }
Number ISM_LueftungLuftdurchsatzAbluft "CWL Luftdurchsatz Abluft [%.1f m³/h]" { channel="ism8:device:heater:DpId167" }
Switch ISM_LueftungFilterwarnung "CML Filterwarnung" { channel="ism8:device:heater:DpId192" }
```
_demo.sitemap_
### demo.sitemap
Frame label="Heizung"
{
```perl
Frame label="Heizung"
{
Text item=ISM_HeizungSysStoerung icon="siren"
Text item=ISM_HeizungStoerung icon="siren"
Text item=ISM_HeizungAussentemperatur icon="temperature"
@ -147,15 +148,15 @@ _demo.sitemap_
Text item=ISM_HeizungKesseltemperatur icon="temperature"
Text item=ISM_HeizungRuecklauftemperatur icon="temperature_cold"
Setpoint item=ISM_HeizungSollwertverschiebung icon="radiator" minValue=-5 maxValue=5 step=1
}
Frame label="Wasser"
{
}
Frame label="Wasser"
{
Text item=ISM_HeizungWarmwassertemperatur icon="temperature_hot"
Setpoint item=ISM_HeizungSollwertWarmwasser icon="temperature" minValue=40 maxValue=60 step=1
Selection item=ISM_HeizungBetriebsartWarmwasser icon="faucet" mappings=[0="Auto", 1="Legionellen Schutz", 2="Normal", 3="Eco", 4="Frost Schutz"]
}
Frame label="Lüftung"
{
}
Frame label="Lüftung"
{
Text item=ISM_LueftungStoerung icon="siren"
Selection item=ISM_LueftungBetriebsart icon="fan" mappings=[0="Auto", 1="Minimum", 2="Reduziert", 3="Normal", 4="Intensiv"]
Text item=ISM_LueftungLueftungsstufe icon="qualityofservice"
@ -164,30 +165,33 @@ _demo.sitemap_
Text item=ISM_LueftungZulufttemperatur icon="temperature_cold"
Text item=ISM_LueftungLuftdurchsatzZuluft icon="flow"
Text item=ISM_LueftungLuftdurchsatzAbluft icon="flow"
}
}
```
_HVACContrMode.map_
### HVACContrMode.map
0=Auto
1=Heizen
2=Aufwärmen
3=Abkühlen
4=Nächtliche Reinigung
5=Vorkühlen
6=Aus
7=Test
8=Notfall Heizen
9=Nur Lüften
10=Freies Kühlen
11=Eis
12=Maximum Heizen
13=Eco Heiz-/Kühlmodus
14=Entfeuchten
15=Kalibriermodus
16=Notfall Kühlmodus
17=Emergency Dampfmodus
20=Reserviert
NULL=Undefiniert
```text
0=Auto
1=Heizen
2=Aufwärmen
3=Abkühlen
4=Nächtliche Reinigung
5=Vorkühlen
6=Aus
7=Test
8=Notfall Heizen
9=Nur Lüften
10=Freies Kühlen
11=Eis
12=Maximum Heizen
13=Eco Heiz-/Kühlmodus
14=Entfeuchten
15=Kalibriermodus
16=Notfall Kühlmodus
17=Emergency Dampfmodus
20=Reserviert
NULL=Undefiniert
```
_Result_
<img src="doc/Sitemap-Example.png" width="800" height="600">

View File

@ -1,7 +1,7 @@
# Jablotron Alarm Binding
This is the binding for Jablotron alarms.
https://www.jablotron.com/en/jablotron-products/alarms/
<https://www.jablotron.com/en/jablotron-products/alarms/>
## Supported Things
@ -60,13 +60,13 @@ Binding itself doesn't require specific configuration.
The state, pgm, thermometer, thermostat, sec and pg channels for the JA-100/JA-100F alarms are dynamically created according to your configuration.
* The sections are represented by String channels (with possible values "set", "unset", "partialSet" for JA-100 and possible values "ARM", "PARTIAL_ARM" and "DISARM" for JA100-F)
- The sections are represented by String channels (with possible values "set", "unset", "partialSet" for JA-100 and possible values "ARM", "PARTIAL_ARM" and "DISARM" for JA100-F)
## Full Example
# items file for JA80
```
```java
String HouseAlarm "Alarm [%s]" <alarm>
String JablotronCode { channel="jablotron:oasis:8c93a5ed:50139:command", autoupdate="false" }
Switch ArmSectionA "Garage arming" <jablotron> (Alarm) { channel="jablotron:oasis:8c93a5ed:50139:statusA" }
@ -83,7 +83,7 @@ Switch ArmControlPGY "PGY" <jablotron> (Alarm) { channel="jablotron:oasis:8c93a5
# sitemap example for JA80
```
```java
Text item=HouseAlarm icon="alarm" {
Switch item=ArmSectionA
Switch item=ArmSectionAB
@ -102,7 +102,7 @@ Text item=HouseAlarm icon="alarm" {
# rule example for JA80
```
```java
rule "Alarm"
when
Item ArmSectionA changed or Item ArmSectionAB changed or Item ArmSectionABC changed or

View File

@ -10,15 +10,15 @@ Binding should be compatible with JeeLink USB receivers and LaCrosseGateways. It
This binding supports:
* JeeLink (connected to USB)
* JeeLink (connected over TCP)
* LaCrosseGateway (connected to USB)
* LaCrosseGateway (connected over TCP)
* LaCrosse temperature sensors
* EC3000 power monitors
* Revolt power monitors
* PCA301 power monitoring wireless sockets
* TX22 temperature & humidity Sensors (including connected TX23 wind and TX26 rain sensors)
- JeeLink (connected to USB)
- JeeLink (connected over TCP)
- LaCrosseGateway (connected to USB)
- LaCrosseGateway (connected over TCP)
- LaCrosse temperature sensors
- EC3000 power monitors
- Revolt power monitors
- PCA301 power monitoring wireless sockets
- TX22 temperature & humidity Sensors (including connected TX23 wind and TX26 rain sensors)
## Binding configuration
@ -38,7 +38,7 @@ PCA301 sockets are polled every 120 seconds by default. This results in sockets
## Thing configuration
#### JeeLink / LaCrosseGateway (connected to USB)
### JeeLink / LaCrosseGateway (connected to USB)
| Parameter | Item Type | Description |
|---------------|-----------|----------------------------------------------------------------------------------------------------------------------------------------------|
@ -48,8 +48,7 @@ PCA301 sockets are polled every 120 seconds by default. This results in sockets
The available init commands depend on the sketch that is running on the USB stick / LaCrosseGateway.
#### JeeLink / LaCrosseGateway (connected over TCP)
### JeeLink / LaCrosseGateway (connected over TCP)
| Parameter | Item Type | Description |
|---------------|-----------|-----------------------------------------------------------------------------------------------------------------------------------|
@ -57,8 +56,7 @@ The available init commands depend on the sketch that is running on the USB stic
| TCP Port | Number | The TCP port over which the serial port is made available, or the LaCrosseGateway port (which usually is 81) |
| Init Commands | String | A semicolon separated list of init commands that will be send to the Jeelink / LaCrosseGateway, e.g. "0a" for disabling the LED |
#### LaCrosse temperature sensors
### LaCrosse temperature sensors
| Parameter | Item Type | Description |
|----------------------------|-----------|------------------------------------------------------------------------------------------------------------------------------------------------------|
@ -70,7 +68,7 @@ The available init commands depend on the sketch that is running on the USB stic
| Upper Temperature Limit | Decimal | The highest allowed valid temperature. Higher temperature readings will be ignored |
| Maximum allowed difference | Decimal | The maximum allowed difference from a value to the previous value (0 disables this check). If the difference is higher, the reading will be ignored. |
#### EC3000 power monitors
### EC3000 power monitors
| Parameter | Item Type | Description |
|-----------------|-----------|-------------------------------------------------------------------------------------------------------------------------|
@ -79,7 +77,7 @@ The available init commands depend on the sketch that is running on the USB stic
| Update Interval | Number | The update interval in seconds how often value updates are propagated. A value of 0 leads to propagation of every value |
| Buffer Size | Number | The number of readings used for computing the rolling average |
#### PCA301 power monitoring wireless sockets
### PCA301 power monitoring wireless sockets
| Parameter | Item Type | Description |
|-------------------|--------------|------------------------------------------------------------------------------------------------------------------------|
@ -87,7 +85,7 @@ The available init commands depend on the sketch that is running on the USB stic
| Sensor Timeout | Number | The amount of time in seconds that should result in OFFLINE status when no readings have been received from the sensor |
| Retry Count | Number | The number of times a switch command will be resent to the socket until giving up |
#### Revolt power monitors
### Revolt power monitors
| Parameter | Item Type | Description |
|-------------------|--------------|------------------------------------------------------------------------------------------------------------------------|
@ -96,7 +94,7 @@ The available init commands depend on the sketch that is running on the USB stic
## Channels
#### LaCrosse temperature sensors
### LaCrosse temperature sensors
| Channel Type ID | Item Type | Description |
|-----------------|-----------------------|---------------------------------------------------|
@ -105,7 +103,7 @@ The available init commands depend on the sketch that is running on the USB stic
| batteryNew | Contact | Whether the battery is new (CLOSED) or not (OPEN) |
| batteryLow | Contact | Whether the battery is low (CLOSED) or not (OPEN) |
#### TX22 temperature and humidity sensors
### TX22 temperature and humidity sensors
| Channel Type ID | Item Type | Description |
|-----------------|-----------------------|----------------------------|
@ -117,7 +115,7 @@ The available init commands depend on the sketch that is running on the USB stic
| windAngle | Number:Angle | Current wind direction |
| gustStrength | Number:Speed | Gust speed |
#### EC3000 power monitors
### EC3000 power monitors
| Channel Type ID | Item Type | Description |
|------------------|---------------|-------------------------------------------|
@ -128,7 +126,7 @@ The available init commands depend on the sketch that is running on the USB stic
| sensorTime | Number:Time | Total turn on time of power monitor |
| resets | Number | Number of resets |
#### PCA301 power monitoring wireless sockets
### PCA301 power monitoring wireless sockets
| Channel Type ID | Item Type | Description |
|-------------------------|---------------|------------------------------------------------------|
@ -136,7 +134,7 @@ The available init commands depend on the sketch that is running on the USB stic
| currentPower | Number:Power | Current power draw |
| consumptionTotal | Number:Energy | Total energy consumption |
#### Revolt power monitors
### Revolt power monitors
| Channel Type ID | Item Type | Description |
|-------------------|--------------------------|-------------------------------------------|
@ -149,7 +147,7 @@ The available init commands depend on the sketch that is running on the USB stic
## Commands
#### PCA301 power monitoring wireless sockets
### PCA301 power monitoring wireless sockets
| Channel Type ID | Item Type | Description |
|-------------------------|--------------|---------------------------------------------------|
@ -159,14 +157,14 @@ The available init commands depend on the sketch that is running on the USB stic
A typical thing configuration for PCA301 looks like this:
```
```java
Bridge jeelink:jeelinkUsb:pca301 "Jeelink pca301" @ "home" [ serialPort="/dev/ttyUSB0" ]
Thing jeelink:pca301:1-160-236 "ec3k 1" (jeelink:jeelinkUsb:pca301) @ "home" [ sensorId="1-160-236"]
```
A typical thing configuration for EC3000 looks like this:
```
```java
Bridge jeelink:jeelinkUsb:ec3k "Jeelink ec3k" @ "home" [ serialPort="COM4" ]
Thing jeelink:ec3k:0E3D "ec3k 1" (jeelink:jeelinkUsb:ec3k) @ "home" [ sensorId="0E3D"]
Thing jeelink:ec3k:14E7 "ec3k 2" (jeelink:jeelinkUsb:ec3k) @ "home" [ sensorId="14E7"]
@ -174,7 +172,7 @@ Thing jeelink:ec3k:14E7 "ec3k 2" (jeelink:jeelinkUsb:ec3k) @ "home" [ sensorId=
A typical Thing configuration for lacrosse looks like this:
```
```java
Bridge jeelink:jeelinkUsb:lacrosse "Jeelink lacrosse" @ "home" [ serialPort="COM6" ]
Thing jeelink:lacrosse:sensor1 "Jeelink lacrosse 1" (jeelink:jeelinkUsb:lacrosse) @ "home" [ sensorId="16", minTemp=10, maxTemp=32]
Thing jeelink:lacrosse:sensor2 "Jeelink lacrosse 2" (jeelink:jeelinkUsb:lacrosse) @ "home" [ sensorId="18", minTemp=10, maxTemp=32]
@ -182,14 +180,14 @@ Thing jeelink:lacrosse:sensor2 "Jeelink lacrosse 2" (jeelink:jeelinkUsb:lacrosse
A typical thing configuration for Revolt looks like this:
```
```java
Bridge jeelink:jeelinkUsb:revolt "Jeelink revolt" @ "home" [ serialPort="COM4" ]
Thing jeelink:revolt:4F1B "revolt 1" (jeelink:jeelinkUsb:revolt) @ "home" [ sensorId="4F1B"]
```
A typical item configuration for a LaCrosse temperature sensor looks like this:
```
```java
Number:Dimensionless Humidty_LR "Living Room [%.1f %unit%]" <humidity> {channel="jeelink:lacrosse:42:humidity"}
Number:Temperature Temperature_LR "Living Room [%.1f %unit%]" <temperature> {channel="jeelink:lacrosse:42:temperature"}
Contact Battery_Low_LR "Battery Low Living Room" {channel="jeelink:lacrosse:42:batteryLow"}
@ -198,7 +196,7 @@ Contact Battery_New_LR "Battery New Living Room" {channel="jeelink:lacrosse:42:b
A typical item configuration for a PCA301 power monitoring wireless sockets looks like this:
```
```java
Switch SocketSwitch {channel="jeelink:pca301:1-160-236:switchingState"}
Number:Power SocketWattage {channel="jeelink:pca301:1-160-236:currentPower"}
Number:Energy SocketConsumption {channel="jeelink:pca301:1-160-236:consumptionTotal"}
@ -206,7 +204,7 @@ Number:Energy SocketConsumption {channel="jeelink:pca301:1-160-236:consumptionTo
A typical item configuration for a TX22 temperature and humidity sensor looks like this:
```
```java
Number:Dimensionless Humidity "Outside [%.1f %unit%]" <humidity> {channel="jeelink:tx22:42:humidity"}
Number:Temperature Temperature "Outside [%.1f %unit%]" <temperature> {channel="jeelink:tx22:42:temperature"}
Contact Battery_Low_LR "Battery Low Outside" {channel="jeelink:tx22:42:batteryLow"}
@ -219,7 +217,7 @@ Number:Speed GustStrength "Gust [%.1f %unit%]" {channel="jeelink:tx22:42:gustStr
A typical item configuration for a Revolt power monitor looks like this:
```
```java
Number:Power SocketWattage {channel="jeelink:revolt:4F1B:currentPower"}
Number:Energy SocketConsumption {channel="jeelink:revolt:4F1B:consumptionTotal"}
Number:Dimensionless POwerFactor {channel="jeelink:revolt:4F1B:powerFactor"}
@ -227,4 +225,3 @@ Number:ElectricCurrent Current {channel="jeelink:revolt:4F1B:electricCurrent"}
Number:ElectricPotential Voltage {channel="jeelink:revolt:4F1B:electricPotential"}
Number:Frequency PowerFrequency {channel="jeelink:revolt:4F1B:powerFrequency"}
```

View File

@ -29,7 +29,7 @@ Before you are able to discover clients you should have a bridge to the server s
To allow the server thing to go online you should provide valid credentials for the user that the biding will use to interact with the server api (userId and token configuration properties).
Please note that the user should be allowed on the Jellyfin server to remote control devices.
In order to assist you with this process the binding expose a simple login form you can access on \<local openHAB server url\>/jellyfin/\<server thing id\> for example http://127.0.0.1:8080/jellyfin/2846b8fb60ad444f9ebd085335e3f6bf.
In order to assist you with this process the binding expose a simple login form you can access on \<local openHAB server url\>/jellyfin/\<server thing id\> for example `http://127.0.0.1:8080/jellyfin/2846b8fb60ad444f9ebd085335e3f6bf`.
## Server Thing Configuration
@ -69,6 +69,7 @@ In order to assist you with this process the binding expose a simple login form
| play-next-by-id | String | Add to playback queue as next by id, works for series, episodes and movies |
| play-last-by-id | String | Add to playback queue as last by id, works for series, episodes and movies |
| browse-by-id | String | Browse media by id, works for series, episodes and movies |
### Terms search:
The terms search has a default behavior that can be modified sending some predefined prefixes.
@ -84,7 +85,7 @@ Also, you can target a specific series episode by season and episode numbers pre
### Example Server (Bridge) - jellyfin.bridge.things
```
```java
Bridge jellyfin:server:exampleServerId "Jellyfin Server" [
clientActiveWithInSeconds=0,
hostname="192.168.1.177",
@ -96,20 +97,20 @@ Bridge jellyfin:server:exampleServerId "Jellyfin Server" [
]
```
* token and userId could be retrieved using the login form at http://YOUROPENHABIP:PORT/jellyfin/exampleServerId
- token and userId could be retrieved using the login form at `http://YOUROPENHABIP:PORT/jellyfin/exampleServerId`
### Example Client - jellyfin.clients.things
```
```java
Thing jellyfin:client:exampleServerId:<JELLYFIN_DEVICE_ID> "Jellyfin Web client" (jellyfin:server:exampleServerId)
Thing jellyfin:client:exampleServerId:<JELLYFIN_DEVICE_ID> "Jellyfin Android client" (jellyfin:server:exampleServerId)
```
* I recommend creating the clients using the discovery. For getting the device ids manually I recommend to use the Jellyfin web interface with the web inspector and look for the request that is launched when you click the cast button (<jellyfin url>/Sessions?ControllableByUserId=XXXXXXXXXXXX).
- I recommend creating the clients using the discovery. For getting the device ids manually I recommend to use the Jellyfin web interface with the web inspector and look for the request that is launched when you click the cast button (<jellyfin url>/Sessions?ControllableByUserId=XXXXXXXXXXXX).
### Example Items - jellyfin.items
```
```java
String strJellyfinAndroidSendNotification { channel="jellyfin:client:exampleServerId:<JELLYFIN_DEVICE_ID>:send-notification " }
Player plJellyfinAndroidMediaControl { channel="jellyfin:client:exampleServerId:<JELLYFIN_DEVICE_ID>:media-control" }
String strJellyfinAndroidPlayingItemId { channel="jellyfin:client:exampleServerId:<JELLYFIN_DEVICE_ID>:playing-item-id" }

View File

@ -18,11 +18,10 @@ This binding should work with multiple JuiceBox EV chargers associated with the
Once a JuiceNet Account bridge has been created, any JuiceBox EV Chargers associated with this account will be discovered.
### Thing Configuration
The configuration required is to create a JuiceNet account thing and fill in the appropriate API token.
The API token can be found on the Account page at https://home.juice.net/Manage.
The API token can be found on the Account page at <https://home.juice.net/Manage>.
A JuiceBox EV Charger requires a unitID which can also be found in the device settings at the JuiceNet web page.
@ -66,7 +65,7 @@ A JuiceBox EV Charger requires a unitID which can also be found in the device se
If configuring the binding with manual configuration an example thing file looks like this:
```
```java
Bridge juicenet:account:myaccount [ apiToken="xxxx-xxxx-xxxx-xxxx-xxxxx" ] {
Thing device JamesCharger [ unitID="xxxxxxx" ]
}
@ -76,7 +75,7 @@ Bridge juicenet:account:myaccount [ apiToken="xxxx-xxxx-xxxx-xxxx-xxxxx" ] {
An example of an items file is here.
```
```java
String JuiceNet_Name "Name" { channel="juicenet:device:myaccount:JamesCharger:name" }
String JuiceNet_State "Device State" { channel="juicenet:device:myaccount:JamesCharger:state" }
String JuiceNet_ChargingState "Charging State" { channel="juicenet:device:myaccount:JamesCharger:chargingState" }
@ -115,7 +114,7 @@ The following custom widget can be used with this binding.
![JuiceBox Widget](doc/widget.png)
```
```yaml
uid: widget_JuiceBox
tags: []
props:
@ -267,4 +266,3 @@ slots:
config:
text: =items[props.prefix + "_CarDescription"].state
```

View File

@ -46,17 +46,17 @@ The thing has the following configuration parameters:
Some notes:
* Due to a bug in the control protocol, a Strato C player will be identified as a Premiere 'Player' by the auto discovery process.
* The only caveat of note about this binding is the updatePeriod configuration parameter.
* When set to the default of 0, the component only sends running time update messages sporadically (as an example: when the movie chapter changes) while content is playing.
* In this case, the running time channels will also only sporadically update.
* When updatePeriod is set to 1 (values greater than 1 are not yet supported by the control protocol), the component sends running time status update messages every second.
* Be aware that this could cause performance impacts to your openHAB system.
- Due to a bug in the control protocol, a Strato C player will be identified as a Premiere 'Player' by the auto discovery process.
- The only caveat of note about this binding is the updatePeriod configuration parameter.
- When set to the default of 0, the component only sends running time update messages sporadically (as an example: when the movie chapter changes) while content is playing.
- In this case, the running time channels will also only sporadically update.
- When updatePeriod is set to 1 (values greater than 1 are not yet supported by the control protocol), the component sends running time status update messages every second.
- Be aware that this could cause performance impacts to your openHAB system.
* On Linux, you may get an error stating the serial port cannot be opened when the Kaleidescape binding tries to load.
* You can get around this by adding the `openhab` user to the `dialout` group like this: `usermod -a -G dialout openhab`.
* Also on Linux you may have issues with the USB if using two serial USB devices e.g. Kaleidescape and RFXcom.
* See the [general documentation about serial port configuration](/docs/administration/serial.html) for more on symlinking the USB ports.
- On Linux, you may get an error stating the serial port cannot be opened when the Kaleidescape binding tries to load.
- You can get around this by adding the `openhab` user to the `dialout` group like this: `usermod -a -G dialout openhab`.
- Also on Linux you may have issues with the USB if using two serial USB devices e.g. Kaleidescape and RFXcom.
- See the [general documentation about serial port configuration](/docs/administration/serial.html) for more on symlinking the USB ports.
## Channels
@ -141,16 +141,15 @@ The following channels are available:
kaleidescape.things:
```
```java
kaleidescape:player:myzone1 "M500 Living Rm" [ host="192.168.1.10", updatePeriod=0, loadHighlightedDetails=true, loadAlbumDetails=true ]
kaleidescape:cinemaone:myzone2 "My Cinema One" [ host="192.168.1.11", updatePeriod=0, loadHighlightedDetails=true, loadAlbumDetails=true ]
kaleidescape:strato:myzone3 "Strato Theater Rm" [ host="192.168.1.12", updatePeriod=0, loadHighlightedDetails=true ]
```
kaleidescape.items:
```
```java
// Virtual switch to send a command, see sitemap and rules below
Switch z1_GoMovieCovers "Go to Movie Covers"
@ -230,12 +229,11 @@ String z1_Detail_ColorDescription "Color Description: [%s]" { channel="kaleidesc
String z1_Detail_Country "Country: [%s]" { channel="kaleidescape:player:myzone1:detail#country" }
String z1_Detail_AspectRatio "Aspect Ratio: [%s]" { channel="kaleidescape:player:myzone1:detail#aspect_ratio" }
String z1_Detail_DiscLocation "Disc Location: [%s]" { channel="kaleidescape:player:myzone1:detail#disc_location" }
```
ksecondsformat.js:
```
```javascript
(function(totalSeconds) {
if (isNaN(totalSeconds)) {
return '-';
@ -257,7 +255,7 @@ ksecondsformat.js:
kaleidescape.sitemap:
```
```perl
sitemap kaleidescape label="Kaleidescape" {
Frame label="Zone 1" {
Image item=z1_Detail_CoverArt
@ -343,7 +341,7 @@ sitemap kaleidescape label="Kaleidescape" {
kaleidescape.rules:
```
```java
var int lightPercent
val kactions = getActions("kaleidescape","kaleidescape:player:myzone1")

View File

@ -16,7 +16,7 @@ Optionally, a refresh interval (in seconds) can be defined as parameter `refresh
All devices support the following channels:
| Channel ID | Item Type | Read-only | Description |
|---------------------------|---------------------------|-----------|---------------------------------------------------------------------------|
| ----------------------- | ------------------------ | --------- | ----------------------------------------------------------------------- |
| state | Number | yes | current operational state of the wallbox |
| enabled | Switch | no | activation state of the wallbox |
| maxpresetcurrent | Number:ElectricCurrent | no | maximum current the charging station should deliver to the EV in A |
@ -47,18 +47,17 @@ All devices support the following channels:
| maxpilotcurrent | Number:ElectricCurrent | yes | current offered to the vehicle via control pilot signalization |
| maxpilotcurrentdutycyle | Number:Dimensionless | yes | duty cycle of the control pilot signal |
## Example
demo.Things:
```
```java
Thing keba:kecontact:1 [ipAddress="192.168.0.64", refreshInterval=30]
```
demo.items:
```
```java
Number:Dimensionless KebaCurrentRange "Maximum supply current [%.1f %%]" {channel="keba:kecontact:1:maxpresetcurrentrange"}
Number:ElectricCurrent KebaCurrent "Maximum supply current [%.3f A]" {channel="keba:kecontact:1:maxpresetcurrent"}
Number:ElectricCurrent KebaSystemCurrent "Maximum system supply current [%.3f A]" {channel="keba:kecontact:1:maxsystemcurrent"}
@ -85,7 +84,7 @@ Number:Energy KebaSetEnergyLimit "Set charge energy limit [%.1f Wh]" {ch
demo.sitemap:
```
```perl
sitemap demo label="Main Menu"
{
Text label="Charging Station" {
@ -112,28 +111,32 @@ sitemap demo label="Main Menu"
Enable `DEBUG` or `TRACE` (even more verbose) logging for the logger named:
org.openhab.binding.keba
```text
org.openhab.binding.keba
```
If everything is working fine, you see the cyclic reception of `report 1`, `2` & `3` from the station. The frequency is according to the `refreshInterval` configuration.
### UDP Ports used
Send port = UDP 7090
```text
Send port = UDP 7090
```
The Keba station is the server
Receive port = UDP 7090
```text
Receive port = UDP 7090
```
This binding is providing the server
UDP port 7090 needs to be available/free on the openHAB server.
In order to enable the UDP port 7090 on the Keba station with full functionality, `DIP switch 1.3` must be `ON`.
With `DIP switch 1.3 OFF` only ident-data can be read (`i` and `report 1`) but not the other reports as well as the commands needed for the write access.
After setting the DIP switch, you need to `power OFF` and `ON` the station. SW-reset via WebGUI seems not to be sufficient in order to apply the new configuration.
The right configuration can be validated as follows:
- WebGUI DSW Settings:

View File

@ -35,7 +35,7 @@ This binding discovers KM devices through mDNS in the local network.
### kmdevice
The *kmdevice* bridge requires the following configuration parameters:
The _kmdevice_ bridge requires the following configuration parameters:
| Parameter Label | Parameter ID | Description | Required | Default | Example |
|---------------------------|-----------------|-----------------------------------------------------------------------------------|----------|----------------------|------------------------------------------------------------------|
@ -58,7 +58,7 @@ This example reads different values of items from a KMXXX Device.
`things/kmxxx.things`:
```xtend
```java
Bridge km200:kmdevice:0815 "testKMDevice" @ "Room" [ privateKey= "1234567890abcdef1234567890abcdef", maxnbrrepeats=10.0, readDelay=100, refreshInterval=30, maxNbrRepeats=10, ip4Address="192.168.1.111", refreshinterval=30.0, readdelay=100.0 ] {
heatingCircuit 1 "TestHC1"
sensor 1 "TestSensors"
@ -67,7 +67,7 @@ Bridge km200:kmdevice:0815 "testKMDevice" @ "Room" [ privateKey= "1234567890abcd
`items/kmxxx.items`:
```xtend
```java
Number budWater "Water temperature [%.1f °C]" {channel="km200:dhwCircuit:0815:1:actualTemp"}
Number budOutdoor "Outdoor temperature [%.1f °C]" {channel="km200:sensor:0815:1:outdoor_t1"}
```

View File

@ -13,7 +13,7 @@ Since the protocol is identical, the KNX binding can also communicate with it tr
## Supported Things
The KNX binding supports two types of bridges, and one type of things to access the KNX bus.
There is an *ip* bridge to connect to KNX IP Gateways, and a *serial* bridge for connection over a serial port to a host-attached gateway.
There is an _ip_ bridge to connect to KNX IP Gateways, and a _serial_ bridge for connection over a serial port to a host-attached gateway.
## Binding Configuration
@ -25,7 +25,7 @@ The following two bridge types are supported. Bridges don't have channels on the
### IP Gateway
The IP Gateway is the most commonly used way to connect to the KNX bus. At its base, the *ip* bridge accepts the following configuration parameters:
The IP Gateway is the most commonly used way to connect to the KNX bus. At its base, the _ip_ bridge accepts the following configuration parameters:
| Name | Required | Description | Default value |
|---------------------|--------------|--------------------------------------------------------------------------------------------------------------|------------------------------------------------------|
@ -44,10 +44,9 @@ The IP Gateway is the most commonly used way to connect to the KNX bus. At its b
| tunnelUserPassword | No | KNX secure: Tunnel user key for secure tunnel mode | - |
| tunnelDeviceAuthentication | No | KNX secure: Tunnel device authentication for secure tunnel mode | - |
### Serial Gateway
The *serial* bridge accepts the following configuration parameters:
The _serial_ bridge accepts the following configuration parameters:
| Name | Required | Description | Default value |
|---------------------|----------|--------------------------------------------------------------------------------------------------------------|---------------|
@ -60,13 +59,13 @@ The *serial* bridge accepts the following configuration parameters:
## Things
### *device* Things
### _device_ Things
*basic* Things are wrappers around arbitrary group addresses on the KNX bus.
They have no specific function in the KNX binding, except that if the *address* is defined, the binding will actively poll the Individual Address on the KNX bus to detect that the KNX actuator is reachable.
_basic_ Things are wrappers around arbitrary group addresses on the KNX bus.
They have no specific function in the KNX binding, except that if the _address_ is defined, the binding will actively poll the Individual Address on the KNX bus to detect that the KNX actuator is reachable.
Under normal real-world circumstances, either all devices on a bus are reachable, or the entire bus is down.
If line couplers are installed, physical device addressing might be filtered; in this case please do not specify the addresses for devices on this line.
When *fetch* is set to true, the binding will read-out the memory of the KNX actuator in order to detect configuration data and so forth.
When _fetch_ is set to true, the binding will read-out the memory of the KNX actuator in order to detect configuration data and so forth.
This is however an experimental feature, very prone to the actual on the KNX bus.
| Name | Required | Description | Default value |
@ -77,7 +76,7 @@ This is however an experimental feature, very prone to the actual on the KNX bus
| readInterval | N | Interval (in seconds) to actively request reading of values from the bus (0 if they should only be read once at startup) | 0 |
Different kinds of channels are defined and can be used to group together Group Addresses.
All channels of a device share one configuration parameter defined on device level: *readInterval*, an optional parameter which indicates if 'readable' group addresses of that Channel should be read periodically at the given interval, in seconds.
All channels of a device share one configuration parameter defined on device level: _readInterval_, an optional parameter which indicates if 'readable' group addresses of that Channel should be read periodically at the given interval, in seconds.
'Readable' group addresses are marked with an `<` in the group address definition of a Channel, see below.
All readable group addresses are queried by openHAB during startup.
If readInterval is not specified or set to 0, no further periodic reading will be triggered (default: 0).
@ -95,7 +94,6 @@ Note: After changing the DPT of already existing Channels, openHAB needs to be r
|-----------|-------------------------------------|-------------|
| ga | Group address for the binary switch | 1.001 |
##### Channel Type "dimmer"
| Parameter | Description | Default DPT |
@ -124,7 +122,6 @@ Note: After changing the DPT of already existing Channels, openHAB needs to be r
|-----------|---------------|-------------|
| ga | Group address | 9.001 |
Note: Using the Units Of Measurement feature of openHAB (Quantitytype) requires that the DPT value is set correctly.
Automatic type conversion will be applied if required.
@ -140,7 +137,6 @@ Automatic type conversion will be applied if required.
|-----------|---------------|-------------|
| ga | Group address | 19.001 |
#### Control Channel Types
In contrast to the standard channels above, the control channel types are used for cases where the KNX bus does not own the physical state of a device.
@ -153,7 +149,6 @@ If from the KNX bus a `GroupValueRead` telegram is sent to a *-control Channel,
|-----------|-------------------------------------|-------------|
| ga | Group address for the binary switch | 1.001 |
##### Channel Type "dimmer-control"
| Parameter | Description | Default DPT |
@ -197,7 +192,7 @@ If from the KNX bus a `GroupValueRead` telegram is sent to a *-control Channel,
#### Group Address Notation
```
```text
<config>="[<dpt>:][<]<mainGA>[[+[<]<listeningGA>][+[<]<listeningGA>..]]"
```
@ -211,7 +206,6 @@ Each configuration parameter has a `mainGA` where commands are written to and op
The `dpt` element is optional. If omitted, the corresponding default value will be used (see the channel descriptions above).
## KNX Secure
> NOTE: Support for KNX Secure is partly implemented for openHAB and should be considered as experimental.
@ -221,12 +215,12 @@ The `dpt` element is optional. If omitted, the corresponding default value will
KNX IP Secure protects the traffic between openHAB and your KNX installation.
It **requires a KNX Secure Router or a Secure IP Interface** and a KNX installation **with security features enabled in ETS tool**.
For *Secure routing* mode, the so called `backbone key` needs to be configured in openHAB.
For _Secure routing_ mode, the so called `backbone key` needs to be configured in openHAB.
It is created by the ETS tool and cannot be changed via the ETS user interface.
- The backbone key can be extracted from Security report (ETS, Reports, Security, look for a 32-digit key) and specified in parameter `routerBackboneKey`.
For *Secure tunneling* with a Secure IP Interface (or a router in tunneling mode), more parameters are required.
For _Secure tunneling_ with a Secure IP Interface (or a router in tunneling mode), more parameters are required.
A unique device authentication key, and a specific tunnel identifier and password need to be available.
- All information can be looked up in ETS and provided separately: `tunnelDeviceAuthentication`, `tunnelUserPassword`.
@ -240,7 +234,6 @@ Data Secure does _not_ necessarily require a KNX Secure Router or a Secure IP In
> NOTE: **openHAB currently ignores messages with secure group addresses.**
## Examples
The following two templates are sufficient for almost all purposes.
@ -250,7 +243,7 @@ Only add parameters to the Bridge and Thing configuration if you know exactly wh
knx.things:
```xtend
```java
Bridge knx:ip:bridge [
type="ROUTER",
autoReconnectPeriod=60 //optional, do not set <30 sec.
@ -267,7 +260,7 @@ Bridge knx:ip:bridge [
knx.things:
```xtend
```java
Bridge knx:ip:bridge [
type="TUNNEL",
ipAddress="192.168.0.111",
@ -283,7 +276,7 @@ Bridge knx:ip:bridge [
### Full Example
```xtend
```java
//TUNNEL
Bridge knx:ip:bridge [
type="TUNNEL",
@ -328,7 +321,7 @@ Bridge knx:ip:bridge [
knx.items:
```xtend
```java
Switch demoSwitch "Light [%s]" <light> { channel="knx:device:bridge:generic:demoSwitch" }
Dimmer demoDimmer "Dimmer [%d %%]" <light> { channel="knx:device:bridge:generic:demoDimmer" }
Rollershutter demoRollershutter "Shade [%d %%]" <rollershutter> { channel="knx:device:bridge:generic:demoRollershutter" }
@ -340,7 +333,7 @@ DateTime demoDatetime "Alarm [%1$tH:%1$tM]" { c
knx.sitemap:
```xtend
```perl
sitemap knx label="KNX Demo Sitemap" {
Frame label="Demo Elements" {
Switch item=demoSwitch
@ -359,7 +352,7 @@ sitemap knx label="KNX Demo Sitemap" {
control.things:
```xtend
```java
Bridge knx:serial:bridge [
serialPort="/dev/ttyAMA0",
readingPause=50,
@ -387,7 +380,7 @@ Bridge hue:bridge:bridge "Philips Hue Bridge" [
knx.items:
```xtend
```java
Switch demoSwitch "Light [%s]" <light> { channel="hue:0210:bridge:1:color", channel="knx:device:bridge:generic:controlSwitch" }
Dimmer demoDimmer "Dimmer [%d %%]" <light> { channel="hue:0210:bridge:1:color", channel="knx:device:bridge:generic:controlDimmer" }
```

View File

@ -13,13 +13,13 @@ The Kodi binding is the successor to the openHAB 1.x xbmc binding.
In order to allow Kodi to be controlled through this binding, you need to enable the Kodi application remote control feature.
Please enable "Allow remote control from applications on this/other systems" in the Kodi settings menu under:
* Settings ➔ Services ➔ Control ➔
* Allow remote control from applications on **this** systems
* Allow remote control from applications on **other** systems
- Settings ➔ Services ➔ Control ➔
- Allow remote control from applications on **this** systems
- Allow remote control from applications on **other** systems
To make use of the auto-discovery feature, you additionally need to enable "Allow control of Kodi via UPnP" in the Kodi settings menu.
* Settings ➔ Services ➔ UPnP / DLNA ➔ Allow remote control via UPnP
- Settings ➔ Services ➔ UPnP / DLNA ➔ Allow remote control via UPnP
## Supported Things
@ -34,7 +34,7 @@ The binding supports auto-discovery for available and prepared (see above) insta
Auto-discovery is enabled by default.
To disable it, you can add the following line to `<openHAB-conf>/services/runtime.cfg`:
```
```text
discovery.kodi:background=false
```
@ -55,7 +55,7 @@ You can use the `notificationVolume` property for setting a default volume (in %
A manual setup through a `things/kodi.things` file could look like this:
```
```java
Thing kodi:kodi:myKodi "Kodi" @ "Living Room" [ipAddress="192.168.1.100", port=9090, httpPort=8080]
```
@ -83,7 +83,7 @@ The Kodi thing supports the following channels:
| input | String | Sends a key stroke to Kodi to navigate in the UI. Valid commands are: `Back`, `ContextMenu`, `Down`, `Home`, `Info`, `Left`, `Right`, `Select`, `ShowCodec`, `ShowOSD`, `ShowPlayerProcessInfo` and `Up`. `ExecuteAction` and `SendText` should be used with the dedicated channels `inputaction` and `inputtext`. |
| inputtext | String | Sends a generic input (unicode) text to Kodi. |
| inputaction | String | Sends a predefined action to Kodi to control the UI and/or perform other tasks. Valid commands are: `left`, `right`, `up`, `down`, `pageup`, `pagedown`, `select`, `highlight`, `parentdir`, `parentfolder`, `back`, `menu`, `previousmenu`, `info`, `pause`, `stop`, `skipnext`, `skipprevious`, `fullscreen`, `aspectratio`, `stepforward`, `stepback`, `bigstepforward`, `bigstepback`, `chapterorbigstepforward`, `chapterorbigstepback`, `osd`, `showsubtitles`, `nextsubtitle`, `cyclesubtitle`, `playerdebug`, `codecinfo`, `playerprocessinfo`, `nextpicture`, `previouspicture`, `zoomout`, `zoomin`, `playlist`, `queue`, `zoomnormal`, `zoomlevel1`, `zoomlevel2`, `zoomlevel3`, `zoomlevel4`, `zoomlevel5`, `zoomlevel6`, `zoomlevel7`, `zoomlevel8`, `zoomlevel9`, `nextcalibration`, `resetcalibration`, `analogmove`, `analogmovex`, `analogmovey`, `rotate`, `rotateccw`, `close`, `subtitledelayminus`, `subtitledelay`, `subtitledelayplus`, `audiodelayminus`, `audiodelay`, `audiodelayplus`, `subtitleshiftup`, `subtitleshiftdown`, `subtitlealign`, `audionextlanguage`, `verticalshiftup`, `verticalshiftdown`, `nextresolution`, `audiotoggledigital`, `number0`, `number1`, `number2`, `number3`, `number4`, `number5`, `number6`, `number7`, `number8`, `number9`, `smallstepback`, `fastforward`, `rewind`, `play`, `playpause`, `switchplayer`, `delete`, `copy`, `move`, `screenshot`, `rename`, `togglewatched`, `scanitem`, `reloadkeymaps`, `volumeup`, `volumedown`, `mute`, `backspace`, `scrollup`, `scrolldown`, `analogfastforward`, `analogrewind`, `moveitemup`, `moveitemdown`, `contextmenu`, `shift`, `symbols`, `cursorleft`, `cursorright`, `showtime`, `analogseekforward`, `analogseekback`, `showpreset`, `nextpreset`, `previouspreset`, `lockpreset`, `randompreset`, `increasevisrating`, `decreasevisrating`, `showvideomenu`, `enter`, `increaserating`, `decreaserating`, `setrating`, `togglefullscreen`, `nextscene`, `previousscene`, `nextletter`, `prevletter`, `jumpsms2`, `jumpsms3`, `jumpsms4`, `jumpsms5`, `jumpsms6`, `jumpsms7`, `jumpsms8`, `jumpsms9`, `filter`, `filterclear`, `filtersms2`, `filtersms3`, `filtersms4`, `filtersms5`, `filtersms6`, `filtersms7`, `filtersms8`, `filtersms9`, `firstpage`, `lastpage`, `guiprofile`, `red`, `green`, `yellow`, `blue`, `increasepar`, `decreasepar`, `volampup`, `volampdown`, `volumeamplification`, `createbookmark`, `createepisodebookmark`, `settingsreset`, `settingslevelchange`, `stereomode`, `nextstereomode`, `previousstereomode`, `togglestereomode`, `stereomodetomono`, `channelup`, `channeldown`, `previouschannelgroup`, `nextchannelgroup`, `playpvr`, `playpvrtv`, `playpvrradio`, `record`, `togglecommskip`, `showtimerrule`, `leftclick`, `rightclick`, `middleclick`, `doubleclick`, `longclick`, `wheelup`, `wheeldown`, `mousedrag`, `mousemove`, `tap`, `longpress`, `pangesture`, `zoomgesture`, `rotategesture`, `swipeleft`, `swiperight`, `swipeup`, `swipedown`, `error`, `noop`. |
| inputbuttonevent | String | Send a button press event. The parameter can have the format "`<button>`", "`<button>;<keymap>`" or "`<button>;<keymap>;<holdtime>`". For details see https://kodi.wiki/view/JSON-RPC_API/v12#Input.ButtonEvent |
| inputbuttonevent | String | Send a button press event. The parameter can have the format "`<button>`", "`<button>;<keymap>`" or "`<button>;<keymap>;<holdtime>`". For details see <https://kodi.wiki/view/JSON-RPC_API/v12#Input.ButtonEvent> |
| inputrequested | Switch | Indicates whether Kodi is currently asking the user for input |
| screensaver | Switch | Current state of the Screensaver |
| systemcommand | String | This channel allows to send system commands to `Shutdown`, `Suspend`, `Hibernate`, `Reboot` or `Quit` Kodi (channel's state options contains available system commands) |
@ -125,7 +125,6 @@ The Kodi thing supports the following channels:
Kodi things are extensible by channels of type `shownotification`, so that different notification pop-ups can be configured for different use cases.
### Channel Configuration
**group** The PVR channels can be put into user-defined PVR channel groups.

View File

@ -19,21 +19,20 @@ The binding will then create things for each module discovered which can be adde
The binding attempts to discover The Konnected Alarm Panels via the UPnP service.
The auto-discovery service of the binding will detect the base URL of the Konnected Alarm Panel.
When manually adding things, the base URL of the Konnected Alarm Panel will need to be configured.
The base URL should include scheme, address and port (for example http://192.168.1.123:9123).
The base URL should include scheme, address and port (for example `http://192.168.1.123:9123`).
The binding will attempt to obtain the ip address of your openHAB server as configured in the OSGi framework.
If it is unable to determine the IP address it will also attempt to use the network address service to obtain the IP address and port.
Auto-discovery of the callback URL will fail if you are using reverse proxies and/or HTTPS for your openHAB server.
In this case you will need to configure the callback URL in the advanced configuration section.
The callback URL will normally end with /konnected (for example https://192.168.1.2/konnected).
The callback URL will normally end with /konnected (for example `https://192.168.1.2/konnected`).
In addition you can also turn off discovery which when this setting is synced to the module will cause the device to no longer respond to UPnP requests as documented.
https://help.konnected.io/support/solutions/articles/32000023968-disabling-device-discovery
<https://help.konnected.io/support/solutions/articles/32000023968-disabling-device-discovery>
Please use this setting with caution and do not disable until a static ip address has been provided for your Konnected Alarm Panel via DHCP, router or otherwise.
The blink setting will disable the transmission LED on the Konnected Alarm Panel.
## Channels
You will need to add channels for the zones that you have connected and configure them with the appropriate configuration parameters for each channel.
@ -64,7 +63,7 @@ It can also be used to blink lights.
A note about the Alarm Panel Pro.
Zones 1-8 can be configured for any Channel-Types.
Zones 9-12, out1, alarm1 and out2/alarm2 can only be configured as an actuator.
For more information, see: https://help.konnected.io/support/solutions/articles/32000028978-alarm-panel-pro-inputs-and-outputs
For more information, see: <https://help.konnected.io/support/solutions/articles/32000028978-alarm-panel-pro-inputs-and-outputs>
DSB1820 temperature probes.
These are one wire devices which can all be Konnected to the same "Zone" on the Konnected Alarm Panel.
@ -73,26 +72,25 @@ This needs to be added to the channel if there are multiple probes connected.
The default behavior in absence of this configuration will be to simply log the address of the received event.
A channel should be added for each probe, as indicated above and configured with the appropriate address.
## Full Example
*.items
```
```java
Switch Siren "Siren" {channel="konnected:wifi-module:generic:siren"}
Switch Back_Door_Sensor "Back Door" {channel="konnected:pro-module:generic:backd"}
```
*.sitemap
```
```perl
Switch item=Back_Door_Sensor label="Back Door" icon="door" mappings=[OPEN="Open", CLOSED="Closed"]
Switch item=Siren label="Alarm Siren" icon="Siren" mappings=[ON="Open", OFF="Closed"]
```
*.things
```
```java
Thing konnected:wifi-module:generic "Konnected Module" [baseUrl="http://192.168.30.153:9586", macAddress="1586517"]{
Type switch-wifi : frontd "Front Door" [zone="1"]
Type actuator-wifi : siren "Siren" [zone="2", momentary = 50, times = 2, pause = 50]
@ -109,4 +107,3 @@ Thing konnected:pro-module:generic "Konnected Module" [baseUrl="http://192.168.3
Type temperature-pro : outhum "Outside Temperature (DS18B20)" [zone="4", dht22 = false, pollInterval = 1, ds18b20Address = "XX:XX:XX:XX:XX:XX:XX"]
}
```

View File

@ -25,22 +25,22 @@ All of these devices contain the same communication board (SCB = **S**mart**C**o
Currently supported things are:
* PIKO IQ 4.2
* PIKO IQ 5.5
* PIKO IQ 7.0
* PIKO IQ 8.5
* PIKO IQ 10.0
* PLENTICORE plus 4.2 (with or without battery attached)
* PLENTICORE plus 5.5 (with or without battery attached)
* PLENTICORE plus 7.0 (with or without battery attached)
* PLENTICORE plus 8.5 (with or without battery attached)
* PLENTICORE plus 10.0 (with or without battery attached)
- PIKO IQ 4.2
- PIKO IQ 5.5
- PIKO IQ 7.0
- PIKO IQ 8.5
- PIKO IQ 10.0
- PLENTICORE plus 4.2 (with or without battery attached)
- PLENTICORE plus 5.5 (with or without battery attached)
- PLENTICORE plus 7.0 (with or without battery attached)
- PLENTICORE plus 8.5 (with or without battery attached)
- PLENTICORE plus 10.0 (with or without battery attached)
Others may be supported (like future devices using the same SCB or offering the same Web API, branded OEM devices, ...), but they were not tested!
Kostal bindings to third generation devices require Java's strong cryptography to be enabled in order to establish connections. In case you are allowed to use
strong cryptography in your country, you can achieve this by modifying the $JAVA_HOME/jre/lib/security/java.security file (find the line *crypto.policy=limited* and set it to *unlimited*).
If you're using the official openHAB docker image you may also enable Java's strong cryptography by specifying an environment variable *CRYPTO_POLICY="unlimited"*.
strong cryptography in your country, you can achieve this by modifying the $JAVA_HOME/jre/lib/security/java.security file (find the line _crypto.policy=limited_ and set it to _unlimited_).
If you're using the official openHAB docker image you may also enable Java's strong cryptography by specifying an environment variable _CRYPTO_POLICY="unlimited"_.
## Discovery
@ -136,7 +136,6 @@ The following Channels are writeable
| device-local-shadow-management-set | String | Shadow management, Value = 0 = No shadow management enabled, Value = 1 = Shadow management enabled for DC-Input String 1, Value = 2 = Shadow management enabled for DC-Input String 2, Value = 3 = Shadow management enabled for DC-Input String 1 and 2 | W |
| device-local-external-module-control-set | String | External module control, Value = 0 = Not Activated, Value = 1 = Activated | W |
### Third generation devices (PIKO IQ / PLENTICORE plus)
| Channel Type ID | Item Type | Description | Read Write |
@ -218,7 +217,7 @@ The following Channels are writeable
demo.things
```
```java
Thing kostalinverter:kostalinverter:inverter [ url="http://192.168.0.128" ]
```
@ -226,7 +225,6 @@ If the thing goes online then the connection to the web interface is successful.
In case it is offline you should see an error message.
You optionally can define a `userName` and a `password` parameter if the access to the webinterface is protected and a desired `refreshInterval` (the time interval between updates, default 60 seconds).
### Second generation devices (PIKO 10-20, PIKO NEW GENERATION)
Second generation inverters require 4 mandatory parameters and 1 optional (hasBattery):
@ -241,16 +239,12 @@ Second generation inverters require 4 mandatory parameters and 1 optional (hasBa
demo.things
```
```java
Thing kostalinverter:piko1020:mypiko1020 [ url="http://'inverter-ip'", username="'myUsername'", password="'myPassword'", refreshInterval=60, hasBattery=false]
```
You can define which type of PIKO10-20 inverter you will connect to with parameter hasBattery.
### Third generation devices (PIKO IQ / PLENTICORE plus)
All third generation inverters require to define 3 mandatory configuration parameters:
@ -268,7 +262,7 @@ It is recommended to use an interval of 30 seconds.
Full sample of thing configuration:
```
```java
Thing kostalinverter:PLENTICOREPLUS100WITHBATTERY:MyPlentiCore100WithBattery [ url = "192.168.1.2", userPassword="myPassword", refreshInternalInSeconds="30"]
```
@ -278,19 +272,18 @@ Thing kostalinverter:PLENTICOREPLUS100WITHBATTERY:MyPlentiCore100WithBattery [ u
demo.items:
```
```java
Number:Power SolarPower "Solar power [%.1f %unit%]" <energy> { channel="kostalinverter:kostalinverter:inverter:acPower" }
Number:Energy SolarEnergyDay "Solar day energy [%.3f %unit%]" <energy> { channel="kostalinverter:kostalinverter:inverter:dayEnergy" }
Number:Energy SolarTotalEnergy "Solar total energy [%.3f %unit%]" <energy> { channel="kostalinverter:kostalinverter:inverter:totalEnergy" }
String SolarStatus "Solar status [%s]" <energy> { channel="kostalinverter:kostalinverter:inverter:status" }
```
### Second generation devices (PIKO NEW GENERATION)
demo.items:
```
```java
Number:Power GridOutputPower "Grid Output Power" <energy> { channel="kostalinverter:piko1020:mypiko1020:gridOutputPower" }
Number:Energy YieldDaySecondGen "PV Output Power Day" <energy> { channel="kostalinverter:piko1020:mypiko1020:yieldDaySecondGen" }
Number:Energy YieldTotalSecondGen "PV Output Power Total" <energy> { channel="kostalinverter:piko1020:mypiko1020:yieldTotalSecondgen" }
@ -353,8 +346,7 @@ Number:Dimensionless ExternalModuleControl "External Module Control
demo.items:
```
```java
Number:Energy MyPlentiCore100WithBattery_DEVICE_LOCAL_DC_POWER <energy> { channel="kostalinverter:PLENTICOREPLUS100WITHBATTERY:MyPlentiCore100WithBattery:deviceLocalDCPower"}
Number:Energy MyPlentiCore100WithBattery_DEVICE_LOCAL_HOMECONSUMPTION_FROM_BATTERY <energy> { channel="kostalinverter:PLENTICOREPLUS100WITHBATTERY:MyPlentiCore100WithBattery:deviceLocalHomeconsumptionFromBattery"}
Number:Energy MyPlentiCore100WithBattery_DEVICE_LOCAL_HOMECONSUMPTION_FROM_GRID <energy> { channel="kostalinverter:PLENTICOREPLUS100WITHBATTERY:MyPlentiCore100WithBattery:deviceLocalHomeconsumptionFromGrid"}
@ -425,15 +417,12 @@ Number:Energy MyPlentiCore100WithBattery_STATISTIC_YIELD_YEAR
```
### Rules
Second generation devices (PIKO 10-20, PIKO NEW GENERATION)
```
Ex. Set Smart battery control OFF with cron trigger:
```yaml
triggers:
id: "1"
configuration:
@ -447,5 +436,4 @@ actions:
type: application/vnd.openhab.dsl.rule
script: KOSTALPIKO1020_SmartBatteryControlSet.sendCommand("OFF")
type: script.ScriptAction
```

View File

@ -15,7 +15,7 @@ Since every stop is represented by a KVV-provided id, this id has to be figured
### Example Call for Stop 'Gottesauer Platz/BGV'
```bash
```shell
export QUERY="gottesauer"
curl https://www.kvv.de/tunnelEfaDirect.php?action=XSLT_STOPFINDER_REQUEST&name_sf=${QUERY}&outputFormat=JSON&type_sf=any
```

View File

@ -2,13 +2,13 @@
The LaMetric binding allows to connect openHAB to LaMetric Time connected clock devices, providing following features:
* Control the LaMetric Time Device
* Control Display Brightness
* Change Audio Volume
* Enable / Disable Bluetooth
* Activate an Application
* Send notifications messages
* Control the core (built-in) apps
- Control the LaMetric Time Device
- Control Display Brightness
- Change Audio Volume
- Enable / Disable Bluetooth
- Activate an Application
- Send notifications messages
- Control the core (built-in) apps
## Supported Things
@ -59,7 +59,7 @@ For example, if you duplicated the weather app for two locations, the app would
### Sample Thing Configuration
```
```java
Bridge lametrictime:device:demo [ host="somehost", apiKey="ksfjsdkfsksjfs" ]
{
Thing clockApp clock [ widgetId="generatedcorewidgetid1" ]
@ -135,7 +135,7 @@ The binding provides three simple notification channels for info messages (chann
To post messages to these channels, simply map them to a String item, e.g. like this:
```
```java
String DeviceNotifyInfo "Info Message" {channel="lametrictime:device:demo:info"}
```
@ -143,7 +143,7 @@ By setting a text on the item, the binding will send the notification which is t
In a rule this can be done the following way:
```
```java
DeviceNotifyInfo.sendCommand("My Information Message to be displayed")
```
@ -151,7 +151,7 @@ DeviceNotifyInfo.sendCommand("My Information Message to be displayed")
Sample item configuration:
```
```java
Dimmer DeviceBrightness "Brightness" { channel="lametrictime:device:demo:brightness" }
String DeviceBrightnessMode "Brightness Mode" { channel="lametrictime:device:demo:brightnessMode" }
Dimmer DeviceVolume "Volume" { channel="lametrictime:device:demo:volume" }
@ -187,7 +187,7 @@ Sample sitemap configuration:
**Note:** Populating switch or selection options automatically from the state description is not currently possible with sitemaps.
For this reason, the brightness modes and example applications are repeated here.
```
```perl
Text label="LaMetric Time Demo" {
Frame label="Device Controls" {
Slider item=DeviceBrightness
@ -225,7 +225,7 @@ For this reason, the brightness modes and example applications are repeated here
Sample rules:
```
```java
import java.util.Calendar
rule "Notify Info"

View File

@ -21,7 +21,7 @@ This binding uses TCP/IP to access the LCN bus via the software LCN-PCHK (Window
### Thing: LCN Module
Any LCN module that should be controlled or visualized, need to be added to openHAB as a *Thing*.
Any LCN module that should be controlled or visualized, need to be added to openHAB as a _Thing_.
LCN modules with firmware versions 120612 (2008), 170602 (2013) and 1F080A (2021) were tested with this binding.
Modules with older and newer firmware should work, too.
@ -40,9 +40,9 @@ See [Discover LCN Modules](#discover-lcn-modules).
### Bridge: LCN PCK Gateway
PCK is the protocol spoken over TCP/IP with a PCK gateway to communicate with the LCN bus.
Examples for PCK gateways are the *LCN-PCHK* software running on Windows or Linux and the DIN rail mounting device *LCN-VISU*.
Examples for PCK gateways are the _LCN-PCHK_ software running on Windows or Linux and the DIN rail mounting device _LCN-VISU_.
For each LCN bus, interfaced to openHAB, a PCK gateway needs to be added to openHAB as a *Thing*.
For each LCN bus, interfaced to openHAB, a PCK gateway needs to be added to openHAB as a _Thing_.
Several PCK gateways can be added to openHAB to control multiple LCN busses in distinct locations.
@ -72,12 +72,12 @@ Please see the following LCN-PRO screenshot to determine the dimmer output resol
### Thing: LCN Group
LCN modules can be assigned to groups with the programming software *LCN-PRO*.
LCN modules can be assigned to groups with the programming software _LCN-PRO_.
To send commands to an LCN group, the group needs to be added to openHAB as a *Thing*.
To send commands to an LCN group, the group needs to be added to openHAB as a _Thing_.
One LCN module within the group is used to represent the status of the whole group.
For example, when a Dimmer Output is controlled via a LCN group *Thing*, openHAB will always visualize the state of the Dimmer Output of the chosen module. The states of the other modules in the group are ignored for visualization.
For example, when a Dimmer Output is controlled via a LCN group _Thing_, openHAB will always visualize the state of the Dimmer Output of the chosen module. The states of the other modules in the group are ignored for visualization.
Thing Type ID: `group`
@ -87,7 +87,7 @@ Thing Type ID: `group`
| `moduleId` | The module ID of any module in the group. The state of this module is used for visualization of the group as representative for all modules. | Integer | Yes |
| `segmentId` | The segment ID of all modules in this group (0 if no segments are present) | Integer | Yes |
The `groupId` must match the previously configured group number in the programming software *LCN-PRO*.
The `groupId` must match the previously configured group number in the programming software _LCN-PRO_.
## Discovery
@ -97,7 +97,7 @@ Basic data like the names of all LCN modules in the bus, can be read out by open
If not all LCN modules get listed on the first run, click on the refresh button to start another scan.
When adding a module by discovery, the new *Thing*'s UID will be a combination of segment and module id using the following format:
When adding a module by discovery, the new _Thing_'s UID will be a combination of segment and module id using the following format:
`S<segmentId>M<moduleId>` where `segmentId` and `moduleId` are formatted as three-digit numbers with leading zeros.
### Discover PCK Gateways
@ -106,8 +106,8 @@ PCK gateways in the LAN can be found automatically by openHAB. This is done by U
The discovery works only if the firewall of the PCK gateway is not configured too strictly.
This means on Windows PCs, that the network must be configured as 'private' and not as 'public'.
Also, some network switches may block multicast packets.
Unfortunately, *LCN-PCHK* listens only on the first network interface of the computer for discovery packets.
If your PCK gateway has multiple network interfaces, *LCN-PCHK* may listen on the wrong interface and fails to respond to the discovery request.
Unfortunately, _LCN-PCHK_ listens only on the first network interface of the computer for discovery packets.
If your PCK gateway has multiple network interfaces, _LCN-PCHK_ may listen on the wrong interface and fails to respond to the discovery request.
Discovery has successfully been tested with LCN-PCHK 3.2.2 running on a Raspberry Pi with Raspbian and openHAB running on Windows 10.
@ -116,12 +116,12 @@ If discovery fails, you can add a PCK gateway manually. See [Thing: PCK Gateway]
Please be aware that you **have to configure** username, password and the dimmer output resolution also if you use discovery.
See [Thing: PCK Gateway](#bridge-lcn-pck-gateway).
When adding a PCK gateway by discovery, the new *Thing*'s UID is the MAC address of the device, running the PCK gateway.
When adding a PCK gateway by discovery, the new _Thing_'s UID is the MAC address of the device, running the PCK gateway.
## Supported LCN Features and openHAB Channels
The following table lists all features of LCN and their mappings to openHAB Channels.
These Channels are available for the *Thing* LCN module (`module`).
These Channels are available for the _Thing_ LCN module (`module`).
LCN group (`group`) has the same Channels, except status-only Channels like binary sensors or transponders.
The PCK gateway (`pckGateway`) has no Channels.
@ -162,7 +162,7 @@ If a special command is needed, the [Hit Key](#hit-key) action (German: "Sende T
| Remote Control | Fernbedienung | code#remotecontrolkey | | Trigger | Receive commands from remote control |
| Access Control | Zutrittskontrolle | code#remotecontrolcode | | Trigger | Receive serial numbers from remote control |
| Remote Control Battery Low | Fernbedienung Batterie schwach | code#remotecontrolbatterylow | | Trigger | Triggered when the sending remote control has a low battery |
| Host Command (Send Keys) | Kommando an Host (Sende Tasten) | hostcommand#sendKeys | - | Trigger | Receive *send keys* command from LCN module |
| Host Command (Send Keys) | Kommando an Host (Sende Tasten) | hostcommand#sendKeys | - | Trigger | Receive _send keys_ command from LCN module |
| Operating Hours Counter Outputs | Betriebsstundenzähler Ausgänge | operatinghourscounter | output[1-4] | Number:Time | Visualize Operating Hours Counter for outputs |
| Operating Hours Counter Outputs (rel. Work) | Betriebsstundenzähler Ausgänge (rel. Arbeit) | operatinghourscounter | outputrelativework[1-4] | Number:Time | Visualize Operating Hours Counter for outputs (relative work) |
| Operating Hours Counter Relays | Betriebsstundenzähler Relais | operatinghourscounter | relay[1-8] | Number:Time | Visualize Operating Hours Counter for relays |
@ -194,9 +194,9 @@ If a special command is needed, the [Hit Key](#hit-key) action (German: "Sende T
| Set S0 Counters | S0-Zähler setzen | - | - | - | Not implemented |
| Status Command | Statuskommandos | - | - | - | Not implemented |
*Notes:*
_Notes:_
- **For some *Channel*s (e.g. temperature) a unit should be configured in the channel configuration.** By default the native LCN value is used.
- **For some _Channel_s (e.g. temperature) a unit should be configured in the channel configuration.** By default the native LCN value is used.
- S0 counter Channels need to be the pulses per kWh configured. If the value is left blank, a default value of 1000 pulses/kWh is set.
- When setting a variable via openHAB, the variable must be configured as counter in LCN-PRO. The variable must be set initially by the module after power up.
- The Rollershutter Channels provide the boolean parameter `invertUpDown`, which can be set to 'true' if the Up/Down wires are interchanged.
@ -205,11 +205,11 @@ If a special command is needed, the [Hit Key](#hit-key) action (German: "Sende T
### Transponder/Fingerprints
LCN transponder readers or fingerprint readers can be integrated in openHAB e.g. for access control.
The transponder function must be enabled in the module's I-port properties within *LCN-PRO*.
The transponder function must be enabled in the module's I-port properties within _LCN-PRO_.
Example: When the transponder card with the ID "12ABCD" is seen by the reader connected to LCN module "S000M011", the item "M10_Relay7" is switched on:
```
```java
rule "My Transponder"
when
Channel "lcn:module:b827ebfea4bb:S000M011:code#transponder" triggered "12ABCD"
@ -220,7 +220,7 @@ end
Example: When fingerprint with ID "AFFE12" is seen by reader connected to LCN module "S000M011", the item "M10_Relay7" is switched on:
```
```java
rule "My Fingerprint"
when
Channel "lcn:module:b827ebfea4bb:S000M011:code#fingerprint" triggered "AFFE12"
@ -233,18 +233,18 @@ end
LCN modules can send commands to openHAB, e.g. by pressing a physical LCN key.
The command must be programmed into the LCN module by the programming software LCN-PRO.
Only the *send keys* command (German: "Sende Tasten") is supported.
Only the _send keys_ command (German: "Sende Tasten") is supported.
Program a command to a key of an LCN module via LCN-PRO.
When LCN-PRO asks you for the target address, don't select any module, but manually enter the PCK host ID, configured within PCHK (default: 4).
Select the *send keys* command and "A-C (former command)", as PCHK 3.2.2 only supports the old command.
Select the _send keys_ command and "A-C (former command)", as PCHK 3.2.2 only supports the old command.
Then, select any key(s) you want to send to openHAB. These can be freely chosen, as they are only evaluated by openHAB.
![Screenshot, showing the send keys command](doc/host_command_send_keys.png)
The following rule can be used to trigger any action:
```
```java
rule "Module 12 sent A1 Hit"
when
Channel "lcn:module:b827ebfea4bb:S000M012:hostcommand#sendKeys" triggered "A1:HIT"
@ -253,7 +253,7 @@ then
end
```
`A1` is the key of the *send keys* command, programmed by LCN-PRO.
`A1` is the key of the _send keys_ command, programmed by LCN-PRO.
After the colon, the LCN "hit type" follows: HIT, MAKE or BREAK (German: kurz, lang, los)
If multiple keys or key tables are programmed in a single "send keys" command, multiple triggers will be executed.
@ -264,15 +264,15 @@ Simply press the physical button at the module for testing.
### Remote Control
To evaluate commands from LCN remote controls (e.g. LCN-RT or LCN-RT16), the module's I-port behavior must be configured as "IR access control" within *LCN-PRO*:
To evaluate commands from LCN remote controls (e.g. LCN-RT or LCN-RT16), the module's I-port behavior must be configured as "IR access control" within _LCN-PRO_:
![Screenshot, showing the I-port properties for remote controls](doc/ir.png)
#### Remote Control Keys
The trigger *Channel* `lcn:module:<pckThing>:<moduleThing>:code#remotecontrolkey` can be used to execute commands, when a specific key on a remote control is pressed:
The trigger _Channel_ `lcn:module:<pckThing>:<moduleThing>:code#remotecontrolkey` can be used to execute commands, when a specific key on a remote control is pressed:
```
```java
rule "Remote Control Key 3 on Layer 1 hit"
when
Channel "lcn:module:b827ebfea4bb:S000M012:code#remotecontrolkey" triggered "A3:HIT"
@ -287,7 +287,7 @@ end
The serial number of a remote control can be used for access control via the channel `lcn:module:<pckThing>:<moduleThing>:code#remotecontrolcode`. See the following example:
```
```java
rule "Remote Control Key 3 on Layer 1 hit (only executed for serial number AB1234)"
when
Channel "lcn:module:b827ebfea4bb:S000M012:code#remotecontrolcode" triggered "AB1234:A3:HIT" or
@ -301,24 +301,24 @@ The command will be executed when the remote control button A3 is either pressed
## Dimmer Outputs with Ramp and Multiple Outputs
The *output* profile can be used to control multiple dimmer outputs of the *same* module simultaneously or control a dimmer output with a ramp (slowly dimming).
The _output_ profile can be used to control multiple dimmer outputs of the _same_ module simultaneously or control a dimmer output with a ramp (slowly dimming).
The optional *ramp* parameter must be float or integer.
The optional _ramp_ parameter must be float or integer.
The lowest value is 0.25, which corresponds to 0.25s. The highest value is 486s.
When no *ramp* parameter is specified or no profile is configured, the ramp is 0 (behavior like a switch).
The ramp parameter is not available for Color *Item*s.
When no _ramp_ parameter is specified or no profile is configured, the ramp is 0 (behavior like a switch).
The ramp parameter is not available for Color _Item_s.
```
```java
// Dim output 2 in 0.25s
Switch M10_Output2 {channel="lcn:module:b827ebfea4bb:S000M010:output#2"[profile="lcn:output", ramp=0.25]} // with ramp of 0.25s (smallest value)
// Dim output 3 in 486s
Dimmer M10_Output3 {channel="lcn:module:b827ebfea4bb:S000M010:output#3"[profile="lcn:output", ramp=486]} // with ramp of 486s (biggest value)
```
The optional parameters *controlAllOutputs* and *controlOutputs12* can be used to control multiple outputs simultaneously.
Please note that the combination of these parameters with the *ramp* parameter is limited:
The optional parameters _controlAllOutputs_ and _controlOutputs12_ can be used to control multiple outputs simultaneously.
Please note that the combination of these parameters with the _ramp_ parameter is limited:
```
```java
// Control outputs 1+2 simultaneously. Status of Output 1 is visualized. Only ramps of 0s or 0.25s are supported.
Dimmer M10_Outputs12a {channel="lcn:module:b827ebfea4bb:S000M010:output#1"[profile="lcn:output", controlOutputs12=true]}
Dimmer M10_Outputs12b {channel="lcn:module:b827ebfea4bb:S000M010:output#1"[profile="lcn:output", controlOutputs12=true, ramp=0.25]}
@ -334,20 +334,20 @@ Actions are special commands that can be sent to LCN modules or LCN groups.
### Hit Key
This *Action* virtually hits a key of a key table in an LCN module.
This _Action_ virtually hits a key of a key table in an LCN module.
Simply spoken, openHAB acts as a push button switch connected to an LCN module.
This *Action* can be used to execute commands which are not natively supported by this binding.
The function can be programmed via the software *LCN-PRO* onto a key in a module's key table.
Then, the programmed key can be "hit" by this *Action* and the command will be executed.
This _Action_ can be used to execute commands which are not natively supported by this binding.
The function can be programmed via the software _LCN-PRO_ onto a key in a module's key table.
Then, the programmed key can be "hit" by this _Action_ and the command will be executed.
When programming a "Hit Key" *Action*, the following parameters need to be set:
When programming a "Hit Key" _Action_, the following parameters need to be set:
*table* - The module's key table: A, B, C or D<br />
*key* - The number of the key within the key table: 1-8<br />
*action* - The key's action: HIT (German: "kurz"), MAKE ("lang") or BREAK ("los")
_table_ - The module's key table: A, B, C or D<br />
_key_ - The number of the key within the key table: 1-8<br />
_action_ - The key's action: HIT (German: "kurz"), MAKE ("lang") or BREAK ("los")
```
```java
rule "Hit key C4 hourly"
when
Time cron "0 0 * * * ?"
@ -359,20 +359,20 @@ end
### Dynamic Text
This *Action* can be used to send custom texts to an LCN-GTxD display.
To make this function work, the row of the display has to be configured to allow dynamic text within *LCN-PRO*:
This _Action_ can be used to send custom texts to an LCN-GTxD display.
To make this function work, the row of the display has to be configured to allow dynamic text within _LCN-PRO_:
![Screenshot of LCN-PRO, showing the dynamic text setting of an LCN-GT10D](doc/dyn_text.png)
When programming a "Dynamic Text" *Action*, the following parameters need to be set:
When programming a "Dynamic Text" _Action_, the following parameters need to be set:
*row* - The number of the row in the display: 1-4<br />
*text* - The text to be displayed (UTF-8)
_row_ - The number of the row in the display: 1-4<br />
_text_ - The text to be displayed (UTF-8)
The length of the text may not exceed 60 bytes of characters.
Bear in mind that unicode characters can take more than one byte (e.g. umlauts (äöü) take two bytes).
```
```java
rule "Send dynamic Text to GT10D hourly"
when
Time cron "0 0 * * * ?"
@ -384,19 +384,19 @@ end
### Flicker Output
This *Action* realizes the LCN command "Output: Flicker" (German: "Ausgang: Flackern").
This _Action_ realizes the LCN command "Output: Flicker" (German: "Ausgang: Flackern").
The command let a dimmer output flash a given number of times. This feature can be used e.g. for alert signals or visual door bells.
When programming a "Flicker Output" *Action*, the following parameters need to be set:
When programming a "Flicker Output" _Action_, the following parameters need to be set:
*output* - The dimmer output number: 1-4<br />
*depth* - The depth of the flickering: 0-2 (0=25% 1=50% 2=100% Example: When the output is fully on (100%), and 0 is selected, flashes will dim from 100% to 75% and back)<br />
*ramp* - The duration/ramp of one flash: 0-2 (0=2sec 1=1sec 2=0.5sec)<br />
*count* - The number of flashes: 1-15
_output_ - The dimmer output number: 1-4<br />
_depth_ - The depth of the flickering: 0-2 (0=25% 1=50% 2=100% Example: When the output is fully on (100%), and 0 is selected, flashes will dim from 100% to 75% and back)<br />
_ramp_ - The duration/ramp of one flash: 0-2 (0=2sec 1=1sec 2=0.5sec)<br />
_count_ - The number of flashes: 1-15
This action has also effect, if the given output is off. The output will be dimmed from 0% to *depth* and back, then.
This action has also effect, if the given output is off. The output will be dimmed from 0% to _depth_ and back, then.
```
```java
rule "Flicker output 1 when window opens"
when
Item M10_BinarySensor5 changed to OPEN
@ -409,15 +409,15 @@ end
### Relay Timer
This *Action* realizes the LCN commmand "Relay Timer" (German: "Relais-Timer").
This _Action_ realizes the LCN commmand "Relay Timer" (German: "Relais-Timer").
The command switches the given relay immediately to on and after a given time back to off.
When programming a "Relay Timer" *Action*, the following parameters need to be set:
When programming a "Relay Timer" _Action_, the following parameters need to be set:
*relayNumber* - The relay number: 1-8<br />
*duration* - Timer duration in milliseconds: 30-240.000 ms<br />
_relayNumber_ - The relay number: 1-8<br />
_duration_ - Timer duration in milliseconds: 30-240.000 ms<br />
```
```java
rule "Start relay timer for led driver when dummy switch changed"
when
Item Dummy_Switch changed
@ -430,14 +430,14 @@ end
### Beep
This *Action* realizes the LCN commmand "audio" (German: "Piepen").
This _Action_ realizes the LCN commmand "audio" (German: "Piepen").
It lets the beeper connected to the LCN module beep.
When programming an "audio" *Action*, the following parameters can be set:
When programming an "audio" _Action_, the following parameters can be set:
*volume* - Sound volume in percent (if null, the previous volume will be used)<br />
*tonality* - The tonality as a String. You need to use quotes. See below.<br />
*count* - Number of beeps (max. 50)
_volume_ - Sound volume in percent (if null, the previous volume will be used)<br />
_tonality_ - The tonality as a String. You need to use quotes. See below.<br />
_count_ - Number of beeps (max. 50)
Tonalities:
@ -451,7 +451,7 @@ Tonalities:
- "6"=error
- "7"=long
```
```java
rule "Beep when dummy switch changed"
when
Item Dummy_Switch changed
@ -466,13 +466,13 @@ end
LCN segments are supported by this binding, but could not be tested, due to lack of hardware.
LEDs do not support the *OnOffCommand* and respectively the *Switch* Item type, because they have the additional states *BLINK* and *FLICKER*. They must be configured as *String* Item. When used in rules, the parameter must be of type string. Example: `M10_LED1.sendCommand("ON")`. Note the quotation marks.
LEDs do not support the _OnOffCommand_ and respectively the _Switch_ Item type, because they have the additional states _BLINK_ and _FLICKER_. They must be configured as _String_ Item. When used in rules, the parameter must be of type string. Example: `M10_LED1.sendCommand("ON")`. Note the quotation marks.
## Full Example
Config `.things`
```
```java
Bridge lcn:pckGateway:myPCHK [ hostname="192.168.123.123", port=4114, username="myUser", password="myPassword", mode="native200" ] {
Thing module M99 "M99 MyModule" [ moduleId=99, segmentId=0 ] {
Channels:
@ -486,7 +486,7 @@ Bridge lcn:pckGateway:myPCHK [ hostname="192.168.123.123", port=4114, username="
Config `.items`
```
```java
// Dimmer Outputs
Dimmer M10_Output1 {channel="lcn:module:b827ebfea4bb:S000M010:output#1"}
Switch M10_Output2 {channel="lcn:module:b827ebfea4bb:S000M010:output#2"[profile="lcn:output", ramp=0.25]} // with ramp of 0.25s (smallest value)
@ -560,7 +560,7 @@ Switch M10_KeyLockD5 {channel="lcn:module:b827ebfea4bb:S000M010:keylocktabled#5"
Config `.sitemap`
```
```perl
sitemap lcn label="My home automation" {
Frame label="Demo Items" {
// Dimmer Outputs

View File

@ -43,13 +43,13 @@ This binding specifies 3 profiles for the `gesture` channel to make it easy to l
demo.things:
```
```java
Thing leapmotion:controller:1 MyLeapMotion
```
demo.items:
```
```java
Switch DemoSwitch "Switch" { channel="leapmotion:controller:1:gesture" }
Color RGBLight "RGB Light" { channel="leapmotion:controller:1:gesture" }
Dimmer DimmedLight "Dimmer [%d %%]" { channel="leapmotion:controller:1:gesture"[profile="leapmotion:dimmer", mode="fingers"] }

View File

@ -26,7 +26,6 @@ You can also configure the polling interval in seconds by setting "pollingPeriod
## Channels
| Channel Type ID | Item Type | Description | Read/Write |
|-----------------|-----------|--------------------------------------------------------------------------|------------|
| state | String | Current state of the HomBot. | R |
@ -59,7 +58,7 @@ Example of how to configure a thing.
demo.thing
```
```java
Thing lghombot:LGHomBot:mycleanerbot "LGHomBot" @ "Living Room" [ ipAdress="192.168.0.2", pollingPeriod="3", port="6260" ]
```
@ -67,7 +66,7 @@ Here are some examples on how to map the channels to items.
demo.items:
```
```java
String HomBot_State "State [%s]" <CleaningRobot> { channel="lghombot:LGHomBot:a4_24_56_8f_2c_5b:state" }
Number HomBot_Battery "Battery [%d%%]" { channel="lghombot:LGHomBot:a4_24_56_8f_2c_5b:battery" }
Switch HomBot_Clean "Clean" { channel="lghombot:LGHomBot:a4_24_56_8f_2c_5b:clean" }
@ -85,7 +84,7 @@ Image HomBot_Map { channel="lghombot:LGHomBot:a4
demo.sitemap:
```
```perl
sitemap demo label="Main Menu"
{
Frame label="HomBot" {

View File

@ -46,7 +46,7 @@ Parameters:
Set host and key parameter as in the following example:
```
```java
Thing lgwebos:WebOSTV:tv1 [host="192.168.2.119", key="6ef1dff6c7c936c8dc5056fc85ea3aef", macAddress="3c:cd:93:c2:20:e0"]
```
@ -92,7 +92,6 @@ This list has been compiled mostly through trial and error, but the codes applic
| PAUSE | "PAUSE" button |
| STOP | "STOP" button |
A sample HABPanel remote control widget can be found [in this GitHub repository.](https://github.com/bbrodt/openhab2-misc)
## Console Commands
@ -100,7 +99,7 @@ A sample HABPanel remote control widget can be found [in this GitHub repository.
The binding provides a few commands you can use in the console.
Enter the command `openhab:lgwebos` to get the usage.
```
```shell
Usage: openhab:lgwebos <thingUID> applications - list applications
Usage: openhab:lgwebos <thingUID> channels - list channels
Usage: openhab:lgwebos <thingUID> accesskey - show the access key
@ -114,13 +113,13 @@ The command `accesskey` reports in the console the access key used to connect to
demo.things:
```
```java
Thing lgwebos:WebOSTV:3aab9eea-953b-4272-bdbd-f0cd0ecf4a46 [host="192.168.2.119", key="6ef1dff6c7c936c8dc5056fc85ea3aef", macAddress="3c:cd:93:c2:20:e0"]
```
demo.items:
```
```java
Switch LG_TV0_Power "TV Power" <television> { autoupdate="false", channel="lgwebos:WebOSTV:3aab9eea-953b-4272-bdbd-f0cd0ecf4a46:power" }
Switch LG_TV0_Mute "TV Mute" { channel="lgwebos:WebOSTV:3aab9eea-953b-4272-bdbd-f0cd0ecf4a46:mute"}
Dimmer LG_TV0_Volume "Volume [%d]" { channel="lgwebos:WebOSTV:3aab9eea-953b-4272-bdbd-f0cd0ecf4a46:volume" }
@ -136,7 +135,7 @@ Player LG_TV0_Player { channel="lgwebos:WebOSTV:3aab9eea
demo.sitemap:
```
```perl
sitemap demo label="Main Menu"
{
Frame label="TV" {
@ -152,10 +151,9 @@ sitemap demo label="Main Menu"
}
```
demo.rules:
```
```java
// for relative volume changes
rule "VolumeUpDown"
when Item LG_TV0_VolDummy received command
@ -183,10 +181,9 @@ then
end
```
Example of a toast message.
```
```java
LG_TV0_Toast.sendCommand("Hello World")
```
@ -196,7 +193,7 @@ Multiple actions are supported by this binding. In classic rules these are acces
Example
```
```java
val actions = getActions("lgwebos","lgwebos:WebOSTV:3aab9eea-953b-4272-bdbd-f0cd0ecf4a46")
if(null === actions) {
logInfo("actions", "Actions not found, check thing ID")
@ -216,7 +213,7 @@ Parameters:
Example:
```
```java
actions.showToast("Hello World")
```
@ -233,7 +230,7 @@ Parameters:
Example:
```
```java
actions.showToast("http://localhost:8080/icon/energy?format=png","Hello World")
```
@ -249,7 +246,7 @@ Parameters:
Example:
```
```java
actions.launchBrowser("https://www.openhab.org")
```
@ -265,7 +262,7 @@ Parameters:
Examples:
```
```java
actions.launchApplication("com.webos.app.tvguide") // TV Guide
actions.launchApplication("com.webos.app.livetv") // TV
actions.launchApplication("com.webos.app.hdmi1") // HDMI1
@ -286,7 +283,7 @@ Parameters:
Examples:
```
```java
actions.launchApplication("appId","{\"key\":\"value\"}")
```
@ -304,7 +301,7 @@ Parameters:
Example:
```
```java
actions.sendText("Some text")
```
@ -320,7 +317,7 @@ Parameters:
Example:
```
```java
actions.sendButton("HOME")
```
@ -339,7 +336,7 @@ ENTER will remove the keyboard when on-screen keyboard is displayed with focus i
Example:
```
```java
actions.sendKeyboard("ENTER")
```
@ -349,7 +346,7 @@ TV will switch one channel up in the current channel list.
Example:
```
```java
actions.increaseChannel
```
@ -359,7 +356,7 @@ TV will switch one channel down in the current channel list.
Example:
```
```java
actions.decreaseChannel
```
@ -367,7 +364,6 @@ actions.decreaseChannel
In case of issues you may find it helpful to enable debug level logging and check you log file. Log into openHAB console and enable debug logging for this binding:
```
```shell
log:set debug org.openhab.binding.lgwebos
```

View File

@ -57,7 +57,7 @@ The following matrix lists the capabilities (channels) for each type:
The binding is able to auto-discover all lights in a network over the LIFX UDP protocol.
Therefore all lights must be turned on.
*Note:* To get the binding working, all lights must be added to the WLAN network first with the help of the [LIFX smart phone applications](https://www.lifx.com/pages/app).
_Note:_ To get the binding working, all lights must be added to the WLAN network first with the help of the [LIFX smart phone applications](https://www.lifx.com/pages/app).
The binding is NOT able to add or detect lights outside the network.
## Thing Configuration
@ -68,16 +68,16 @@ But usually the discovery works quite reliably, so that a manual configuration i
However, in the thing file, a manual configuration looks e.g. like
```
```java
Thing lifx:colorlight:living [ deviceId="D073D5A1A1A1", fadetime=200 ]
```
The *fadetime* is an optional thing configuration parameter which configures the time to fade to a new color value (in ms).
When the *fadetime* is not configured, the binding uses 300ms as default.
The _fadetime_ is an optional thing configuration parameter which configures the time to fade to a new color value (in ms).
When the _fadetime_ is not configured, the binding uses 300ms as default.
You can optionally also configure a fixed Host or IP address when lights are in a different subnet and are not discovered.
```
```java
Thing lifx:colorirlight:porch [ host="10.120.130.4", fadetime=0 ]
```
@ -94,50 +94,49 @@ All devices support some of the following channels:
| colorzone | Color | This channel supports full zone color control with hue, saturation and brightness values. | colormzlight |
| effect | String | This channel represents a type of light effect (e.g. for tile light: off, morph, flame) | tilelight |
| hevcycle | Switch | This channel supports starting and stopping the HEV clean cycle. | colorhevlight |
| infrared | Dimmer | This channel supports adjusting the infrared value. *Note:* IR capable lights only activate their infrared LEDs when the brightness drops below a certain level. | colorirlight |
| infrared | Dimmer | This channel supports adjusting the infrared value. _Note:_ IR capable lights only activate their infrared LEDs when the brightness drops below a certain level. | colorirlight |
| signalstrength | Number | This channel represents signal strength with values 0, 1, 2, 3 or 4; 0 being worst strength and 4 being best strength. | colorlight, colorhevlight, colorirlight, colormzlight, tilelight, whitelight |
| temperature | Dimmer | This channel supports adjusting the color temperature from cold (0%) to warm (100%). | colorlight, colorhevlight, colorirlight, colormzlight, tilelight, whitelight |
| temperaturezone | Dimmer | This channel supports adjusting the zone color temperature from cold (0%) to warm (100%). | colormzlight |
The *color* and *brightness* channels have a "Power On Brightness" configuration option that is used to determine the brightness when a light is switched on.
The _color_ and _brightness_ channels have a "Power On Brightness" configuration option that is used to determine the brightness when a light is switched on.
When it is left empty, the brightness of a light remains unchanged when a light is switched on or off.
The *color* channels have a "Power On Color" configuration option that is used to determine the hue, saturation, brightness levels when a light is switched on.
The _color_ channels have a "Power On Color" configuration option that is used to determine the hue, saturation, brightness levels when a light is switched on.
When it is left empty, the color of a light remains unchanged when a light is switched on or off.
Configuration options contains 3 comma separated values, where first value is hue (0-360), second saturation (0-100) and third brightness (0-100).
If both "Power on brightness" and "Power On Color" configuration options are defined, "Power on brightness" option overrides the brightness level defined on the "Power on color" configuration option.
The *temperature* channels have a "Power On Temperature" configuration option that is used to determine the color temperature when a light is switched on. When it is left empty, the color temperature of a light remains unchanged when a light is switched on or off.
The _temperature_ channels have a "Power On Temperature" configuration option that is used to determine the color temperature when a light is switched on. When it is left empty, the color temperature of a light remains unchanged when a light is switched on or off.
MultiZone lights (*colormzlight*) have several channels (e.g. *colorzone0*, *temperaturezone0*, *abstemperaturezone0*, etc.) that allow for controlling specific zones of the light.
Changing the *color*, *temperature* and *abstemperature* channels will update the states of all zones.
The *color*, *temperature* and *abstemperature* channels of MultiZone lights always return the same state as *colorzone0*, *temperaturezone0*, *abstemperaturezone0*.
MultiZone lights (_colormzlight_) have several channels (e.g. _colorzone0_, _temperaturezone0_, _abstemperaturezone0_, etc.) that allow for controlling specific zones of the light.
Changing the _color_, _temperature_ and _abstemperature_ channels will update the states of all zones.
The _color_, _temperature_ and _abstemperature_ channels of MultiZone lights always return the same state as _colorzone0_, _temperaturezone0_, _abstemperaturezone0_.
The *hevcycle* channels have an optional "HEV Cycle Duration" configuration option that can be used to override the cycle duration configured in the light.
The _hevcycle_ channels have an optional "HEV Cycle Duration" configuration option that can be used to override the cycle duration configured in the light.
LIFX Tile (*tilelight*) supports special tile effects: morph and flame.
LIFX Tile (_tilelight_) supports special tile effects: morph and flame.
These effects are predefined to their appearance using LIFX application.
Each effect has a separate speed configuration option.
## Full Example
In this example **living** is a Color 1000 light that has a *colorlight* thing type which supports *color* and *temperature* channels.
In this example **living** is a Color 1000 light that has a _colorlight_ thing type which supports _color_ and _temperature_ channels.
The **desk** light is a LIFX Clean that has a *colorhevlight* thing type which supports *color*, *temperature* and *hevcycle* channels.
The **desk** light is a LIFX Clean that has a _colorhevlight_ thing type which supports _color_, _temperature_ and _hevcycle_ channels.
The **porch** light is a LIFX+ BR30 that has a *colorirlight* thing type which supports *color*, *temperature* and *infrared* channels.
The **porch** light is a LIFX+ BR30 that has a _colorirlight_ thing type which supports _color_, _temperature_ and _infrared_ channels.
The **ceiling** light is a LIFX Z with 2 strips (16 zones) that has a *colormzlight* thing type which supports *color*, *colorzone*, *temperature* and *temperaturezone* channels.
The **ceiling** light is a LIFX Z with 2 strips (16 zones) that has a _colormzlight_ thing type which supports _color_, _colorzone_, _temperature_ and _temperaturezone_ channels.
Finally, **kitchen** is a White 800 (Low Voltage) light that has a *whitelight* thing type which supports *brightness* and *temperature* channels.
Either create a single *Color* item linked to the *color* channel and define *Switch*, *Slider* and *Colorpicker* entries with this item in the sitemap.
Or create items for each type (*Color*, *Switch*, *Dimmer*) and define the correspondent entries in the sitemap.
Finally, **kitchen** is a White 800 (Low Voltage) light that has a _whitelight_ thing type which supports _brightness_ and _temperature_ channels.
Either create a single _Color_ item linked to the _color_ channel and define _Switch_, _Slider_ and _Colorpicker_ entries with this item in the sitemap.
Or create items for each type (_Color_, _Switch_, _Dimmer_) and define the correspondent entries in the sitemap.
### demo.things:
```
```java
Thing lifx:colorlight:living [ deviceId="D073D5A1A1A1" ]
Thing lifx:colorlight:living2 [ deviceId="D073D5A2A2A2" ] {
@ -172,7 +171,7 @@ Thing lifx:whitelight:kitchen [ deviceId="D073D5D4D4D4", fadetime=150 ]
### demo.items:
```
```java
// Living
Color Living_Color { channel="lifx:colorlight:living:color" }
Dimmer Living_Temperature { channel="lifx:colorlight:living:temperature" }
@ -218,7 +217,7 @@ Number Kitchen_Abs_Temperature { channel="lifx:whitelight:kitchen:abstemperature
### demo.sitemap:
```
```perl
sitemap demo label="Main Menu"
{
Frame label="Living" {

View File

@ -34,14 +34,14 @@ To avoid the captcha login, it is necessary to log before on a classical browser
Instructions given for Firefox :
1. Go to https://mon-compte-client.enedis.fr/.
2. Select "Particulier" in the drop down list and click on the "Connexion" button.
3. You'll be redirected to a page where you'll have to enter you Enedis account email address and check the "Je ne suis pas un robot" checkbox.
4. Clic on "Suivant".
5. In the login page, prefilled with your mail address, enter your Enedis account password and click on "Connexion à Espace Client Enedis".
6. You will be directed to your Enedis account environment. Get back to previous page in you browser.
7. Disconnect from your Enedis account
8. Repeat steps 1, 2. You should arrive directly on step 5, then open the developer tool window (F12) and select "Stockage" tab. In the "Cookies" entry, select "https://mon-compte-enedis.fr". You'll find an entry named "internalAuthId", copy this value in your openHAB configuration.
1. Go to <https://mon-compte-client.enedis.fr/>.
1. Select "Particulier" in the drop down list and click on the "Connexion" button.
1. You'll be redirected to a page where you'll have to enter you Enedis account email address and check the "Je ne suis pas un robot" checkbox.
1. Clic on "Suivant".
1. In the login page, prefilled with your mail address, enter your Enedis account password and click on "Connexion à Espace Client Enedis".
1. You will be directed to your Enedis account environment. Get back to previous page in you browser.
1. Disconnect from your Enedis account
1. Repeat steps 1, 2. You should arrive directly on step 5, then open the developer tool window (F12) and select "Stockage" tab. In the "Cookies" entry, select "https://mon-compte-enedis.fr". You'll find an entry named "internalAuthId", copy this value in your openHAB configuration.
## Channels
@ -64,8 +64,8 @@ The information that is retrieved is available as these channels:
The binding provides one specific command you can use in the console.
Enter the command `openhab:linky` to get the usage.
```
Usage: openhab:linky <thingUID> report <start day> <end day> [<separator>] - report daily consumptions between two dates
```shell
openhab:linky <thingUID> report <start day> <end day> [<separator>] - report daily consumptions between two dates
```
The command `report` reports in the console the daily consumptions between two dates.
@ -82,13 +82,13 @@ In case you are running openHAB inside Docker, the binding will work only if you
### Thing
```
```java
Thing linky:linky:local "Compteur Linky" [ username="example@domaine.fr", password="******" ]
```
### Items
```
```java
Number:Energy ConsoHier "Conso hier [%.0f %unit%]" <energy> { channel="linky:linky:local:daily#yesterday" }
Number:Energy ConsoSemaineEnCours "Conso cette semaine [%.0f %unit%]" <energy> { channel="linky:linky:local:weekly#thisWeek" }
Number:Energy ConsoSemaineDerniere "Conso semaine dernière [%.0f %unit%]" <energy> { channel="linky:linky:local:weekly#lastWeek" }

View File

@ -36,21 +36,20 @@ The `libevdev` library has to be installed for this plugin to work.
## Thing Configuration
Each thing has has to be explicitly enabled after it is configured.
While it is enabled *all* of the generated events will be consumed by openHAB.
While it is enabled _all_ of the generated events will be consumed by openHAB.
The device will not be available for normal input processing!
### Static configuration
#### Thing
```
```java
Thing linuxinput:input-device:some-keyboard [ enable=true, path="/dev/input/eventXX" ]
```
#### Item
```
```java
Contact SomeButton "Some Button" { channel="linuxinput:input-device:event17:keypresses#KEY_0" }
```
@ -58,8 +57,8 @@ Contact SomeButton "Some Button" { channel="linuxinput:input-device:event17:keyp
Each Thing provides multiple channels
* A `key` channel that aggregates all events.
* Per physical key channels.
- A `key` channel that aggregates all events.
- Per physical key channels.
### Events
@ -67,16 +66,16 @@ The following happens when pressing and releasing a key:
#### Press
1) State of global key channel updated to new key.
2) State of per-key channel updated to `"CLOSED"`.
3) Global key channel triggered with the current key name.
4) Per-key channel triggered with `"PRESSED"`".
5) State of global key channel updated to `""` (Empty string)
1. State of global key channel updated to new key.
1. State of per-key channel updated to `"CLOSED"`.
1. Global key channel triggered with the current key name.
1. Per-key channel triggered with `"PRESSED"`".
1. State of global key channel updated to `""` (Empty string)
#### Release
1) State of per-key channel updated to `"OPEN"`
2) Per-key channel triggered with `"RELEASED"`
1. State of per-key channel updated to `"OPEN"`
1. Per-key channel triggered with `"RELEASED"`
#### Rationale

View File

@ -4,7 +4,6 @@ This binding integrates infrared transceivers through [LIRC](https://www.lirc.or
A list of remote configuration files for LIRC is available [here](http://lirc-remotes.sourceforge.net/remotes-table.html).
## Supported Things
This binding supports LIRC and WinLIRC as bridges for accessing the configured remotes.
@ -29,7 +28,6 @@ WantedBy=multi-user.target
By default, LIRC will listen on IP address 0.0.0.0 (any available IP address) and port 8765. If you would
rather run LIRC on a specific port or IP address, you can use `--listen=192.168.1.100:9001` instead.
## Discovery
Discovery of the LIRC bridge is not supported. However, remotes will be automatically discovered once
@ -39,7 +37,7 @@ a bridge is configured.
### Things
```xtend
```java
Bridge lirc:bridge:local [ host="192.168.1.120", portNumber="9001" ] {
Thing remote Onkyo_RC_799M [ remote="Onkyo_RC-799M" ]
Thing remote Samsung [ remote="Samsung" ]
@ -48,23 +46,23 @@ Bridge lirc:bridge:local [ host="192.168.1.120", portNumber="9001" ] {
Bridge:
* **host**: IP address or hostname of the LIRC server. Defaults to localhost
* **port**: The port number the LIRC server is listening on. Defaults to 8765
- **host**: IP address or hostname of the LIRC server. Defaults to localhost
- **port**: The port number the LIRC server is listening on. Defaults to 8765
Remote:
* **remote**: The name of the remote as known by LIRC
- **remote**: The name of the remote as known by LIRC
### Items
```xtend
```java
String Remote_AVReceiver { channel="lirc:remote:local:Onkyo_RC_799M:transmit" }
String Remote_TV { channel="lirc:remote:local:Samsung:transmit" }
```
### Rules
```xtend
```java
rule "LIRC Test"
when
Channel 'lirc:remote:local:Samsung:event' triggered KEY_DVD
@ -76,7 +74,6 @@ then
end
```
## Channels
This binding currently supports following channels:

View File

@ -105,7 +105,6 @@ It is `false` by default.
This means `100` on LIVISI is `UP` and `0` is `DOWN`.
When `invert` is `true` than `0` on LIVISI is `UP` and `100` is `DOWN`.
## Triggers
| Trigger Type | Description | Available on thing |
@ -114,7 +113,6 @@ When `invert` is `true` than `0` on LIVISI is `UP` and `100` is `DOWN`.
| LONG_PRESSED | Fired when you press a button longer | BRC8, ISC2, ISD2, ISR2, ISS2, WSC2 |
| PRESSED | Fired when you press a button (short or long) | BRC8, ISC2, ISD2, ISR2, ISS2, WSC2 |
## Thing configuration
### Configuring the SmartHome Controller (SHC)
@ -135,17 +133,17 @@ Now you can add all devices from your Inbox as things.
As an alternative to the automatic discovery process and graphical configuration using the UI, LIVISI things can be configured manually.
The LIVISI SmartHome Controller (SHC) can be configured using the following syntax:
```
```java
Bridge livisismarthome:bridge:<bridge-id> "Livisi: SmartHome Controller (SHC)" [ host="192.168.0.99", password="SomethingSecret", webSocketIdleTimeout=900]
```
** *Security warning!**
** _Security warning!_*
The communication between the binding and the SHC is not encrypted and can be traced.
So be careful and secure your local network from unauthorized access.
All other LIVISI devices can be added using the following syntax:
```
```java
Thing WDS <thing-id> "<thing-name>" @ "<room-name>" [ id="<the-device-id>" ]
```
@ -153,7 +151,7 @@ The device ID (e.g. e9a74941a3807b57332214f346fb1129) can be found in the UI inb
However, a full example .things configuration look like this:
```
```java
Bridge livisismarthome:bridge:mybride "LIVISI SmartHome Controller" {
Thing ISD2 myDimmer "Dimmer Kitchen" @ "Kitchen" [ id="<device-id>" ]
Thing ISS2 myLightSwitch "Light Livingroom" @ "Livingroom" [ id="<device-id>" ]
@ -173,7 +171,7 @@ Bridge livisismarthome:bridge:mybride "LIVISI SmartHome Controller" {
You can then configure your items in your *.items config files as usual, for example:
```
```java
Contact myWindowContact "Kitchen" <window> {channel="livisismarthome:WDS:mybridge:myWindowContact:contact"}
Switch myWindowContactBattery "Battery low" <battery> {channel="livisismarthome:WDS:mybridge:myWindowContact:batteryLow"}
Number myHeatingTemp "Bath [%.1f °C]" <temperature> {channel="livisismarthome:RST:mybridge:myHeating:currentTemperature"}
@ -187,7 +185,7 @@ Number myHeatingHumidity "Bath [%.1f %%]" <humidity> {channel="
Example:
```
```perl
sitemap default label="Home" {
Frame {
Text item=myHeatingTemp label="Temperature"
@ -203,7 +201,7 @@ sitemap default label="Home" {
Push-buttons provide trigger channels, that can only be used in rules.
Here is an example rule:
```
```java
rule "Button triggered rule"
when
Channel 'livisismarthome:WSC2:mybridge:myPushButton:button1' triggered PRESSED

View File

@ -8,9 +8,9 @@ When certain log events are recognized, openHAB rules can be used to send notifi
This binding supports one ThingType: `reader`.
A reader supports 3 separate channels
* One for errors
* one for warnings
* one custom channel for other purposes.
- One for errors
- one for warnings
- one custom channel for other purposes.
## Thing Configuration
@ -51,7 +51,7 @@ List of channels
### example.things
```xtend
```java
logreader:reader:openhablog[ refreshRate=1000, errorPatterns="ERROR+", errorBlacklistingPatterns="annoying error which should be ignored|Another annoying error which should be ignored" ]
@ -59,7 +59,7 @@ logreader:reader:openhablog[ refreshRate=1000, errorPatterns="ERROR+", errorBlac
### example.items
```xtend
```java
DateTime logreaderLogRotated "Last Log Rotation [%1$tY.%1$tm.%1$te %1$tR]" <time> { channel="logreader:reader:openhablog:logRotated" }
Number logreaderErrors "Error events matched [%d]" <alarm> { channel="logreader:reader:openhablog:errorEvents" }
@ -73,7 +73,7 @@ String logreaderLastCustom "Last Custom [%s]"
### example.sitemap
```xtend
```perl
sitemap logreader_example label="Example" {
Frame label="openHAB Log Reader" {
@ -91,7 +91,7 @@ sitemap logreader_example label="Example" {
### example.rules
```xtend
```java
rule "LogReader"
when
Channel "logreader:reader:openhablog:newErrorEvent" triggered
@ -102,7 +102,7 @@ rule "LogReader"
Use the rules with your Telegram Bot (need openHAB Telegram Binding installed and configured)
```xtend
```java
rule "LogReader"
when
Channel 'logreader:reader:openhablog:newErrorEvent' triggered
@ -113,7 +113,7 @@ rule "LogReader"
```
Be careful when sending e.g. email notifications.
You could easily send thousand of *spam* emails in short period if e.g. one binding is in error loop.
You could easily send thousand of _spam_ emails in short period if e.g. one binding is in error loop.
### Thing status

View File

@ -7,14 +7,15 @@ Miniserver is represented as a [Thing](https://www.openhab.org/docs/configuratio
The following features are currently supported:
* [Discovery](https://en.wikipedia.org/wiki/Simple_Service_Discovery_Protocol) of Miniservers available on the local network
* Creation of channels for Loxone controls that are exposed in the Loxone [UI](https://www.loxone.com/enen/kb/user-interface-configuration/)
* Tagging of channels and [items](https://www.openhab.org/docs/configuration/items.html) with tags that can be recognized by [Alexa](https://en.wikipedia.org/wiki/Amazon_Alexa) openHAB [skill](https://www.amazon.com/openHAB-Foundation/dp/B01MTY7Z5L), so voice can be used to command Loxone controls
* Management of a Websocket connection to the Miniserver and updating Thing status accordingly
* Updates of openHAB channel's state in runtime according to control's state changes on the Miniserver
* Passing channel commands to the Miniserver's controls
* Hash-based and token-based authentication methods
* Command encryption and response decryption
- [Discovery](https://en.wikipedia.org/wiki/Simple_Service_Discovery_Protocol) of Miniservers available on the local network
- Creation of channels for Loxone controls that are exposed in the Loxone [UI](https://www.loxone.com/enen/kb/user-interface-configuration/)
- Tagging of channels and [items](https://www.openhab.org/docs/configuration/items.html) with tags that can be recognized by [Alexa](https://en.wikipedia.org/wiki/Amazon_Alexa) openHAB [skill](https://www.amazon.com/openHAB-Foundation/dp/B01MTY7Z5L), so voice can be used to command Loxone controls
- Management of a Websocket connection to the Miniserver and updating Thing status accordingly
- Updates of openHAB channel's state in runtime according to control's state changes on the Miniserver
- Passing channel commands to the Miniserver's controls
- Hash-based and token-based authentication methods
- Command encryption and response decryption
## Things
@ -38,48 +39,52 @@ The entry should have the following syntax:
Where:
* `<thing-id>` is a unique ID for your Miniserver (you can but do not have to use Miniserver's MAC address here)
* `<user>` and `<password>` are the credentials used to log into the Miniserver
* `<host>` is a host name or IP of the Miniserver
* `<port>` is a port of web services on the Miniserver (please notice that port, as a number, is not surrounded by quotation marks, while the other values described above are)
* `...` are optional advanced parameters - please refer to _Advanced parameters_ section at the end of this instruction for a list of available options
- `<thing-id>` is a unique ID for your Miniserver (you can but do not have to use Miniserver's MAC address here)
- `<user>` and `<password>` are the credentials used to log into the Miniserver
- `<host>` is a host name or IP of the Miniserver
- `<port>` is a port of web services on the Miniserver (please notice that port, as a number, is not surrounded by quotation marks, while the other values described above are)
- `...` are optional advanced parameters - please refer to _Advanced parameters_ section at the end of this instruction for a list of available options
Example 1 - minimal required configuration:
`loxone:miniserver:504F2414780F [ user="kryten", password="jmc2017", host="loxone.local", port=80 ]`
```java
loxone:miniserver:504F2414780F [ user="kryten", password="jmc2017", host="loxone.local", port=80 ]
```
Example 2 - additionally keep alive period is set to 2 minutes and Websocket maximum binary message size to 8MB:
`loxone:miniserver:504F2414780F [ user="kryten", password="jmc2017", host="192.168.0.210", port=80, keepAlivePeriod=120, maxBinMsgSize=8192 ]`
```java
loxone:miniserver:504F2414780F [ user="kryten", password="jmc2017", host="192.168.0.210", port=80, keepAlivePeriod=120, maxBinMsgSize=8192 ]
```
### Thing Offline Reasons
There can be following reasons why Miniserver status is `OFFLINE`:
* __Configuration Error__
* _Unknown host_
* Miniserver host/ip address can't be resolved. No connection attempt will be made.
* _User authentication error_
* Invalid user name or password or user not authorized to connect to the Miniserver. Binding will make another attempt to connect after some time.
* _Too many failed login attempts - stopped trying_
* Miniserver locked out user for too many failed login attempts. In this case binding will stop trying to connect to the Miniserver. A new connection will be attempted only when user corrects user name or password in the configuration parameters.
* _Enter password to generate a new token_
* Authentication using stored token failed - either token is wrong or it. A password must be reentered in the binding settings to acquire a new token.
* _Internal error_
* Probably a code defect, collect debug data and submit an issue. Binding will try to reconnect, but with unknown chance for success.
* _Other_
* An exception occured and its details will be displayed
* __Communication Error__
* _Error communicating with Miniserver_
* I/O error occurred during established communication with the Miniserver, most likely due to network connectivity issues, Miniserver going offline or Loxone Config is uploading a new configuration. A reconnect attempt will be made soon. Please consult detailed message against one of the following:
* _"Text message size &lsqbXX&rsqb exceeds maximum size &lsqbYY&rsqb"_ - adjust text message size in advanced parameters to be above XX value
* _"Binary message size &lsqbXX&rsqb exceeds maximum size &lsqbYY&rsqb"_ - adjust binary message size in advanced parameters to be above XX value
* _User authentication timeout_
* Authentication procedure took too long time and Miniserver closed connection. It should not occur under normal conditions and may indicate performance issue on binding's OS side.
* _Timeout due to no activity_
* Miniserver closed connection because there was no activity from binding. It should not occur under normal conditions, as it is prevented by sending keep-alive messages from the binding to the Miniserver. By default Miniserver's timeout is 5 minutes and period between binding's keep-alive messages is 4 minutes. If you see this error, try changing the keep-alive period in binding's configuration to a smaller value.
* _Other_
* An exception occured and its details will be displayed
- **Configuration Error**
- _Unknown host_
- Miniserver host/ip address can't be resolved. No connection attempt will be made.
- _User authentication error_
- Invalid user name or password or user not authorized to connect to the Miniserver. Binding will make another attempt to connect after some time.
- _Too many failed login attempts - stopped trying_
- Miniserver locked out user for too many failed login attempts. In this case binding will stop trying to connect to the Miniserver. A new connection will be attempted only when user corrects user name or password in the configuration parameters.
- _Enter password to generate a new token_
- Authentication using stored token failed - either token is wrong or it. A password must be reentered in the binding settings to acquire a new token.
- _Internal error_
- Probably a code defect, collect debug data and submit an issue. Binding will try to reconnect, but with unknown chance for success.
- _Other_
- An exception occured and its details will be displayed
- **Communication Error**
- _Error communicating with Miniserver_
- I/O error occurred during established communication with the Miniserver, most likely due to network connectivity issues, Miniserver going offline or Loxone Config is uploading a new configuration. A reconnect attempt will be made soon. Please consult detailed message against one of the following:
- _"Text message size &lsqbXX&rsqb exceeds maximum size &lsqbYY&rsqb"_ - adjust text message size in advanced parameters to be above XX value
- _"Binary message size &lsqbXX&rsqb exceeds maximum size &lsqbYY&rsqb"_ - adjust binary message size in advanced parameters to be above XX value
- _User authentication timeout_
- Authentication procedure took too long time and Miniserver closed connection. It should not occur under normal conditions and may indicate performance issue on binding's OS side.
- _Timeout due to no activity_
- Miniserver closed connection because there was no activity from binding. It should not occur under normal conditions, as it is prevented by sending keep-alive messages from the binding to the Miniserver. By default Miniserver's timeout is 5 minutes and period between binding's keep-alive messages is 4 minutes. If you see this error, try changing the keep-alive period in binding's configuration to a smaller value.
- _Other_
- An exception occured and its details will be displayed
### Security
@ -169,24 +174,24 @@ If your control is supported, but binding does not recognize it, please check if
Most controls have a single channel. Such channel ID is defined in the following way:
* `loxone:miniserver:<serial>:<control-UUID>`
- `loxone:miniserver:<serial>:<control-UUID>`
Controls, which have more than one channel, define the channel ID of the extra channels in the following way:
* `loxone:miniserver:<serial>:<control-UUID>-<channel-index>`, where `<channel-index>` is equal to 1, 2, ...
- `loxone:miniserver:<serial>:<control-UUID>-<channel-index>`, where `<channel-index>` is equal to 1, 2, ...
Channel label is defined in the following way:
* For controls that belong to a room: `<Room name> / <Control name>`
* For controls without a room: `<Control name>`
- For controls that belong to a room: `<Room name> / <Control name>`
- For controls without a room: `<Control name>`
Channels have the default tags as follows:
* **Dimmer**: when it belongs to a category of _Lights_ type, the channel will be tagged with _Lighting_ tag.
* **InfoOnlyAnalog**: when it belongs to a category of _Indoor Temperature_ type, it will be tagger with _CurrentTemperature_ tag.
* **Jalousie**: main rollershutter channel will be tagged with _Blinds_ tag. Shade and automatic shade switch channels will be tagged with _Switchable_ tag.
* **LightController (V1 and V2)**: main channel with selected scene will be tagged with _Scene_ tag.
* **Switch**, **TimedSwitch** and **Pushbutton** controls: when it belongs to a category that is of a _Lights_ type, the channel will be tagged with _Lighting_ tag. Otherwise it will be tagged with _Switchable_ tag.
- **Dimmer**: when it belongs to a category of _Lights_ type, the channel will be tagged with _Lighting_ tag.
- **InfoOnlyAnalog**: when it belongs to a category of _Indoor Temperature_ type, it will be tagger with _CurrentTemperature_ tag.
- **Jalousie**: main rollershutter channel will be tagged with _Blinds_ tag. Shade and automatic shade switch channels will be tagged with _Switchable_ tag.
- **LightController (V1 and V2)**: main channel with selected scene will be tagged with _Scene_ tag.
- **Switch**, **TimedSwitch** and **Pushbutton** controls: when it belongs to a category that is of a _Lights_ type, the channel will be tagged with _Lighting_ tag. Otherwise it will be tagged with _Switchable_ tag.
## Advanced Parameters
@ -195,7 +200,9 @@ If a parameter is not explicitly defined, binding will use its default value.
To define a parameter value in a .things file, please refer to it by parameter's ID, for example:
keepAlivePeriod=120
```text
keepAlivePeriod=120
```
### Security
@ -228,47 +235,47 @@ They can be tuned, when abnormal behavior of the binding is observed, which can
## Limitations
* As there is no push button item type in openHAB, Loxone's push button is an openHAB's switch, which always generates a short pulse on changing its state to on. If you use simple UI mode and framework generates items for you, switches for push buttons will still be toggle switches. To change it to the push button style, you have to create item manually with `autoupdate=false` parameter. An example of such item definition is given in the _Items_ section above.
- As there is no push button item type in openHAB, Loxone's push button is an openHAB's switch, which always generates a short pulse on changing its state to on. If you use simple UI mode and framework generates items for you, switches for push buttons will still be toggle switches. To change it to the push button style, you have to create item manually with `autoupdate=false` parameter. An example of such item definition is given in the _Items_ section above.
## Automatic Configuration Example
The simplest and quickest way of configuring a Loxone Miniserver with openHAB is to use automatic configuration features:
* Make sure your Miniserver is up and running and on the same network segment as openHAB server.
* Add Loxone binding from the available `Add-ons`.
* In `Configuration/System` page, set `Item Linking` to `Simple Mode` (don't forget to save your choice).
* Add your Miniserver Thing from the `Inbox`, after automatic discovery is performed by the framework during binding initialization.
* Configure your Miniserver by editing Miniserver Thing in `Configuration/Things` page and providing user name and password.
* Miniserver Thing should go online. Channels and Items will be automatically created and configured.
* On the `Control` page, you can test Miniserver Items and interact with them.
* As the user interface, you may use [HABPanel](https://www.openhab.org/docs/configuration/habpanel.html), where all Miniserver's items are ready for picking up, using entirely the graphical user interface.
- Make sure your Miniserver is up and running and on the same network segment as openHAB server.
- Add Loxone binding from the available `Add-ons`.
- In `Configuration/System` page, set `Item Linking` to `Simple Mode` (don't forget to save your choice).
- Add your Miniserver Thing from the `Inbox`, after automatic discovery is performed by the framework during binding initialization.
- Configure your Miniserver by editing Miniserver Thing in `Configuration/Things` page and providing user name and password.
- Miniserver Thing should go online. Channels and Items will be automatically created and configured.
- On the `Control` page, you can test Miniserver Items and interact with them.
- As the user interface, you may use [HABPanel](https://www.openhab.org/docs/configuration/habpanel.html), where all Miniserver's items are ready for picking up, using entirely the graphical user interface.
## Manual Configuration Example
A more advanced setup requires manual creation and editing of openHAB configuration files, according to the instructions provided in [configuration user guide](https://www.openhab.org/docs/configuration/).
In this example we will manually configure:
* A Miniserver with serial number 504F2414780F, available at IP 192.168.0.220 and with web services port 80
* A Miniserver's user named "kryten" and password "jmc2017"
* Items for:
* Temperature of the Miniserver - a Virtual Analog State functional block
* State of a garage door - a Virtual Digital State funtional block (ON=door open, OFF=door closed)
* Kitchen lights switch - a Switch Subcontrol at the AI1 output of a Lighting Controller functional block (with a tag recognizable by Alexa service)
* Pushbutton to switch all lights off - a Virtual Input of Pushbutton type functional block (pushbutton realized by adding `autoupdate="false"` parameter)
* Kitchen blinds - a Jalousie functional block
* Lighting scene - a Lighting Controller functional block
* Output valve selection for garden watering - 8x Radio Button functional block, where only one valve can be open at a time
* A text displaying current alarm's state - a State functional block
- A Miniserver with serial number 504F2414780F, available at IP 192.168.0.220 and with web services port 80
- A Miniserver's user named "kryten" and password "jmc2017"
- Items for:
- Temperature of the Miniserver - a Virtual Analog State functional block
- State of a garage door - a Virtual Digital State funtional block (ON=door open, OFF=door closed)
- Kitchen lights switch - a Switch Subcontrol at the AI1 output of a Lighting Controller functional block (with a tag recognizable by Alexa service)
- Pushbutton to switch all lights off - a Virtual Input of Pushbutton type functional block (pushbutton realized by adding `autoupdate="false"` parameter)
- Kitchen blinds - a Jalousie functional block
- Lighting scene - a Lighting Controller functional block
- Output valve selection for garden watering - 8x Radio Button functional block, where only one valve can be open at a time
- A text displaying current alarm's state - a State functional block
### things/loxone.things:
```
```java
loxone:miniserver:504F2414780F [ user="kryten", password="jmc2017", host="192.168.0.220", port=80 ]
```
### items/loxone.items:
```
```java
// Type ID Label Icon Tags Settings
Number Miniserver_Temp "Miniserver temperature: [%.1f °C]" <temperature> {channel="loxone:miniserver:504F2414780F:0F2F2133-017D-3C82-FFFF203EB0C34B9E"}
@ -290,7 +297,7 @@ String Alarm_State "Alarm state [%s]" <alarm>
### sitemaps/loxone.sitemap:
```
```perl
sitemap loxone label="Loxone Example Menu"
{
Frame label="Demo Controls" {
@ -315,7 +322,7 @@ sitemap loxone label="Loxone Example Menu"
### transform/garagedoor.map:
```java
```text
OFF=Closed
ON=Open
-=Unknown

View File

@ -24,7 +24,7 @@ Choose either a local IP address of your personal owned sensor _or_ a sensor id
| Parameter | Description |
|-----------------|----------------------------------------------------------------------|
| ipAddress | Local IP address of your personal owned sensor |
| sensorid | Sensor ID obtained from https://deutschland.maps.sensor.community/ |
| sensorid | Sensor ID obtained from <https://deutschland.maps.sensor.community/> |
### Local Sensor
@ -36,10 +36,10 @@ Please check in your browser if you can access your sensor with your local IP ad
Perform the following steps to get the appropriate Sensor ID
* Go to to [luftdaten.info map](https://deutschland.maps.sensor.community/)
* Choose your desired value in bottom list - now only the Sensors are displayed which are supporting this
* Click on your / any Sensor and the ID is displayed in the top right corner. Note: Sensor ID is just the number without beginning hash #
* Enter this Sensor ID into the thing configuration
- Go to to [luftdaten.info map](https://deutschland.maps.sensor.community/)
- Choose your desired value in bottom list - now only the Sensors are displayed which are supporting this
- Click on your / any Sensor and the ID is displayed in the top right corner. Note: Sensor ID is just the number without beginning hash #
- Enter this Sensor ID into the thing configuration
![Luftdaten.info Logo](doc/LuftdatenInfo-Map.png)
@ -61,7 +61,6 @@ Perform the following steps to get the appropriate Sensor ID
| pressure | Number:Pressure | Atmospheric Pressure (not supported by all sensors) |
| pressure-sea | Number:Pressure | Atmospheric Pressure on sea level (not supported by all sensors) |
### Noise Sensor
| Channel ID | Item Type | Description |
@ -70,14 +69,13 @@ Perform the following steps to get the appropriate Sensor ID
| noise-min | Number:Dimensionless | Minimum noise covered in the last 2.5 minutes in db |
| noise-main | Number:Dimensionless | Maximum noise covered in the last 2.5 minutes in db |
## Full Example
### Things
luftdaten.things
```
```java
Thing luftdateninfo:particulate:pm_sensor "PM Sensor" [ ipAddress=192.168.178.50 ]
Thing luftdateninfo:conditions:cond_sensor "Condition Sensor" [ sensorid=28843 ]
Thing luftdateninfo:noise:noise_sensor "Noise Sensor" [ sensorid=39745 ]
@ -87,7 +85,7 @@ Thing luftdateninfo:noise:noise_sensor "Noise Sensor" [ sensorid=39745
luftdaten.items
```
```java
Number:Density PM_25 "PM2.5" { channel="luftdateninfo:particulate:pm_sensor:pm25" }
Number:Density PM_100 "PM10" { channel="luftdateninfo:particulate:pm_sensor:pm100" }
@ -105,7 +103,7 @@ Number:Dimensionless LDI_NoiseMax "Noise max" { channel="luftdaten
LuftdatenInfo.sitemap
```
```perl
sitemap LuftdatenInfo label="LuftdatenInfo" {
Text item=PM_25 label="Particulate Matter 2.5 [%.1f %unit%]"
Text item=PM_100 label="Particulate Matter 10 [%.1f %unit%]"

View File

@ -3,10 +3,10 @@
This binding integrates with [Lutron](https://www.lutron.com) lighting control and home automation systems.
It contains support for four different types of Lutron systems via different bridge things:
* RadioRA 2, HomeWorks QS, Caseta, RA2 Select, and other current systems that can be controlled via Lutron Integration Protocol (LIP) or LEAP
* The original RadioRA system, referred to here as RadioRA Classic
* Legacy HomeWorks RS232 Processors
* Grafik Eye 3x/4x systems with GRX-PRG or GRX-CI-PRG control interfaces
- RadioRA 2, HomeWorks QS, Caseta, RA2 Select, and other current systems that can be controlled via Lutron Integration Protocol (LIP) or LEAP
- The original RadioRA system, referred to here as RadioRA Classic
- Legacy HomeWorks RS232 Processors
- Grafik Eye 3x/4x systems with GRX-PRG or GRX-CI-PRG control interfaces
Each is described in a separate section below.
@ -22,29 +22,29 @@ The binding has not been tested with Quantum, QS Standalone, myRoom Plus, or Ath
This binding currently supports the following thing types:
* **ipbridge** - The Lutron main repeater/processor/hub
* **leapbridge** - Experimental bridge that uses LEAP protocol (Caseta & RA2 Select only)
* **dimmer** - Light dimmer
* **switch** - Switch or relay module
* **fan** - Fan controller
* **occupancysensor** - Occupancy/vacancy sensor
* **ogroup** - Occupancy group
* **keypad** - Lutron seeTouch or Hybrid seeTouch Keypad
* **ttkeypad** - Tabletop seeTouch Keypad
* **intlkeypad** - International seeTouch Keypad (HomeWorks QS only)
* **palladiomkeypad** - Palladiom Keypad (HomeWorks QS only)
* **pico** - Pico Keypad
* **grafikeyekeypad** - GRAFIK Eye QS Keypad (RadioRA 2/HomeWorks QS only)
* **virtualkeypad** - Repeater/processor integration buttons or Caseta Smart Bridge scene buttons
* **vcrx** - Visor control receiver module (VCRX)
* **qsio** - QS IO Interface (HomeWorks QS only)
* **wci** - QS Wallbox Closure Interface (WCI) (HomeWorks QS only)
* **cco** - Contact closure output module or VCRX CCO
* **shade** - Lutron shade, motorized drape, or motor controller
* **blind** - Lutron venetian blind or horizontal sheer blind [**Experimental**]
* **greenmode** - Green Mode subsystem
* **timeclock** - Scheduling subsystem
* **sysvar** - System state variable (HomeWorks QS only) [**Experimental**]
- **ipbridge** - The Lutron main repeater/processor/hub
- **leapbridge** - Experimental bridge that uses LEAP protocol (Caseta & RA2 Select only)
- **dimmer** - Light dimmer
- **switch** - Switch or relay module
- **fan** - Fan controller
- **occupancysensor** - Occupancy/vacancy sensor
- **ogroup** - Occupancy group
- **keypad** - Lutron seeTouch or Hybrid seeTouch Keypad
- **ttkeypad** - Tabletop seeTouch Keypad
- **intlkeypad** - International seeTouch Keypad (HomeWorks QS only)
- **palladiomkeypad** - Palladiom Keypad (HomeWorks QS only)
- **pico** - Pico Keypad
- **grafikeyekeypad** - GRAFIK Eye QS Keypad (RadioRA 2/HomeWorks QS only)
- **virtualkeypad** - Repeater/processor integration buttons or Caseta Smart Bridge scene buttons
- **vcrx** - Visor control receiver module (VCRX)
- **qsio** - QS IO Interface (HomeWorks QS only)
- **wci** - QS Wallbox Closure Interface (WCI) (HomeWorks QS only)
- **cco** - Contact closure output module or VCRX CCO
- **shade** - Lutron shade, motorized drape, or motor controller
- **blind** - Lutron venetian blind or horizontal sheer blind [**Experimental**]
- **greenmode** - Green Mode subsystem
- **timeclock** - Scheduling subsystem
- **sysvar** - System state variable (HomeWorks QS only) [**Experimental**]
## Discovery
@ -92,14 +92,14 @@ If you have a system that supports both protocols, you must decide which you wis
You should be aware of the following functional differences between the protocols:
* Using LIP on Caseta you cant receive notifications of occupancy group status changes (occupied/unoccupied/unknown), but using LEAP you can.
* Conversely, LIP provides notifications of keypad key presses, while LEAP does not (as far as is currently known).
- Using LIP on Caseta you cant receive notifications of occupancy group status changes (occupied/unoccupied/unknown), but using LEAP you can.
- Conversely, LIP provides notifications of keypad key presses, while LEAP does not (as far as is currently known).
This means that using ipbridge you can trigger rules and take actions on keypad key presses/releases, but using leapbridge you cant.
* Caseta and RA2 Select device discovery is supported via LEAP, but not via LIP.
* The leapbridge is a bit more complicated to configure because LEAP uses an SSL connections and authenticates using certificates.
* LIP is a publicly documented protocol, while LEAP is not. This means that Lutron could make a change that breaks LEAP support at any time.
- Caseta and RA2 Select device discovery is supported via LEAP, but not via LIP.
- The leapbridge is a bit more complicated to configure because LEAP uses an SSL connections and authenticates using certificates.
- LIP is a publicly documented protocol, while LEAP is not. This means that Lutron could make a change that breaks LEAP support at any time.
It is possible to run leapbridge and ipbridge at the same time, for the same bridge device, but each managed device (e.g. keypad or dimmer) should only be configured through *one* bridge.
It is possible to run leapbridge and ipbridge at the same time, for the same bridge device, but each managed device (e.g. keypad or dimmer) should only be configured through _one_ bridge.
Remember that LEAP device IDs and LIP integration IDs are not necessarily equal!
#### ipbridge
@ -131,7 +131,7 @@ Note that the user which openHAB runs under must have permission to read the fil
Thing configuration file example:
```
```java
Bridge lutron:ipbridge:radiora2 [ ipAddress="192.168.1.2", user="lutron", password="integration" ] {
Thing ...
Thing ...
@ -167,7 +167,7 @@ It should not normally need to be changed.
Thing configuration file example:
```
```java
Bridge lutron:leapbridge:caseta [ ipAddress="192.168.1.3", keystore="/home/openhab/lutron.keystore", keystorePassword="secret" ] {
Thing ...
Thing ...
@ -189,12 +189,12 @@ The `onToLast` parameter is a boolean that defaults to false.
If set to "true", the dimmer will go to its last non-zero level when sent an ON command.
If the last non-zero level cannot be determined, the value of `onLevel` will be used instead.
A **dimmer** thing has a single channel *lightlevel* with type Dimmer and category DimmableLight.
A **dimmer** thing has a single channel _lightlevel_ with type Dimmer and category DimmableLight.
The **dimmer** thing was previously also used to control fan speed controllers, but now you should use the **fan** thing instead.
Thing configuration file example:
```
```java
Thing dimmer livingroom [ integrationId=8, fadeInTime=0.5, fadeOutTime=5 ]
```
@ -202,9 +202,9 @@ The **dimmer** thing supports the thing action `setLevel(Double level, Double fa
The parameters are:
* `level` The new light level to set (0-100)
* `fadeTime` The time in seconds over which the dimmer should fade to the new level
* `delayTime` The time in seconds to delay before starting to fade to the new level
- `level` The new light level to set (0-100)
- `fadeTime` The time in seconds over which the dimmer should fade to the new level
- `delayTime` The time in seconds to delay before starting to fade to the new level
The fadeTime and delayTime parameters are significant to 2 digits after the decimal point (i.e. to hundredths of a second), but some Lutron systems may round the time to the nearest 0.25 seconds when processing the command.
Times of 100 seconds or more will be rounded to the nearest integer value.
@ -214,11 +214,11 @@ See below for an example rule using thing actions.
#### Switches
Switches take no additional parameters besides `integrationId`.
A **switch** thing has a single channel *switchstatus* with type Switch and category Switch.
A **switch** thing has a single channel _switchstatus_ with type Switch and category Switch.
Thing configuration file example:
```
```java
Thing switch porch [ integrationId=8 ]
```
@ -226,11 +226,11 @@ Thing switch porch [ integrationId=8 ]
Fan speed controllers are interfaced with using the **fan** thing.
It accepts no additional parameters besides `integrationId`.
A **fan** thing has two channels, *fanspeed* and *fanlevel*.
A **fan** thing has two channels, _fanspeed_ and _fanlevel_.
Thing configuration file example:
```
```java
Thing fan porchfan [ integrationId=12 ]
```
@ -242,14 +242,14 @@ For Caseta Smart Motion Sensors, you must use the **group** thing instead.
It accepts no configuration parameters other than `integrationId`.
The binding creates one *occupancystatus* channel, Item type Switch, category Motion.
The binding creates one _occupancystatus_ channel, Item type Switch, category Motion.
It is read-only, and ignores all commands.
The channel state can be monitored for occupied (ON) or unoccupied (OFF) events coming from the sensor.
The sensors cannot be queried for their state, so initial channel state at startup will be undefined (NULL).
Thing configuration file example:
```
```java
Thing occupancysensor shopsensor [ integrationId=7 ]
```
@ -257,15 +257,15 @@ Thing occupancysensor shopsensor [ integrationId=7 ]
A **ogroup** thing interfaces to an occupancy group, which shows occcupancy/vacancy status for an area or room with one or more occupancy sensors.
On RadioRA2 and HomeWorks QS systems, you should generally choose to interface to either an occupancy group or individual occupancy sensors for a given area.
On Caseta systems, you cannot interface to individual sensors and must use the *ogroup* thing.
On Caseta systems, you cannot interface to individual sensors and must use the _ogroup_ thing.
The `integrationId` parameter must be set to the occupancy group ID.
The binding creates one read-only *groupstate* channel, item type String, category Motion.
The binding creates one read-only _groupstate_ channel, item type String, category Motion.
The value can be "OCCUPIED", "UNOCCUPIED", or "UNKNOWN".
Thing configuration file example:
```
```java
Thing ogroup lrgroup [ integrationId=7 ]
```
@ -291,12 +291,12 @@ The `autorelease` parameter also effects behavior when sending an ON command to
If `autorelease` is set, the handler will send action "release" to the device component immediately after sending action "press".
When the controller responds, the channel state will be transitioned back to OFF.
A channel *button[nn]* with item type Switch and category Switch is created for each button, and a channel *led[nn]* with item type Switch and category Light is created for each button indicator LED.
A channel _button[nn]_ with item type Switch and category Switch is created for each button, and a channel _led[nn]_ with item type Switch and category Light is created for each button indicator LED.
You can monitor button channels for ON and OFF state changes to indicate button presses and releases, and send ON and OFF commands to remotely press and release buttons.
Ditto for the indicator LED channels.
Note, however, that version 11.6 or higher of the RadioRA 2 software may be required in order to drive keypad LED states, and then this may only be done on unbound buttons.
Component numbering: For button and LED layouts and numbering, see the Lutron Integration Protocol Guide (rev. AA) p.104 (https://www.lutron.com/TechnicalDocumentLibrary/040249.pdf).
Component numbering: For button and LED layouts and numbering, see the Lutron Integration Protocol Guide (rev. AA) p.104 (<https://www.lutron.com/TechnicalDocumentLibrary/040249.pdf>).
If you are having problems determining which channels have been created for a given keypad model, select the appropriate keypad thing under Settings/Things in the Administration UI and click on the Channels tab.
You can also run the command `things show <thingUID>` (e.g. `things show lutron:keypad:radiora2:entrykeypad`) from the openHAB CLI to list the channels.
@ -304,13 +304,13 @@ Supported settings for `model` parameter: H1RLD, H2RLD, H3BSRL, H3S, H4S, H5BRL,
Thing configuration file example:
```
```java
Thing keypad entrykeypad [ integrationId=10, model="W7B" autorelease=true ]
```
Example rule triggered by a keypad button press:
```
```java
rule ExampleScene
when
Item entrykeypad_button4 received update ON
@ -325,16 +325,15 @@ Tabletop seeTouch keypads use the **ttkeypad** thing.
It accepts the same `integrationId`, `model`, and `autorelease` parameters and creates the same channel types as the **keypad** thing.
See the **keypad** section above for a full discussion of configuration and use.
Component numbering: For button and LED layouts and numbering, see the Lutron Integration Protocol Guide (rev. AA) p.110 (https://www.lutron.com/TechnicalDocumentLibrary/040249.pdf).
Component numbering: For button and LED layouts and numbering, see the Lutron Integration Protocol Guide (rev. AA) p.110 (<https://www.lutron.com/TechnicalDocumentLibrary/040249.pdf>).
If you are having problems determining which channels have been created for a given keypad model, select the appropriate ttkeypad thing under Settings/Things in the Administration UI and click on the Channels tab.
You can also run the command `things show <thingUID>` (e.g. `things show lutron:ttkeypad:radiora2:bedroomkeypad`) from the openHAB CLI to list the channels.
Supported settings for `model` parameter: T5RL, T10RL, T15RL, T5CRL, T10CRL, T15CRL, Generic (default)
Thing configuration file example:
```
```java
Thing ttkeypad bedroomkeypad [ integrationId=11, model="T10RL" autorelease=true ]
```
@ -344,11 +343,11 @@ International seeTouch keypads used in the HomeWorks QS system use the **intlkey
It accepts the same `integrationId`, `model`, and `autorelease` parameters and creates the same button and LED channel types as the **keypad** thing.
See the **keypad** section above for a full discussion of configuration and use.
To support this keypad's contact closure inputs, CCI channels named *cci1* and *cci2* are created with item type Contact and category Switch.
To support this keypad's contact closure inputs, CCI channels named _cci1_ and _cci2_ are created with item type Contact and category Switch.
They are marked as Advanced, so you will need to check "Show advanced" in order to see them listed in the Administration UI.
They present ON/OFF states the same as a keypad button.
Component numbering: For button and LED layouts and numbering, see the Lutron Integration Protocol Guide (rev. AA) p.107 (https://www.lutron.com/TechnicalDocumentLibrary/040249.pdf).
Component numbering: For button and LED layouts and numbering, see the Lutron Integration Protocol Guide (rev. AA) p.107 (<https://www.lutron.com/TechnicalDocumentLibrary/040249.pdf>).
If you are having problems determining which channels have been created for a given keypad model, select the appropriate intlkeypad thing under Settings/Things in the Administration UI and click on the Channels tab.
You can also run the command `things show <thingUID>` (e.g. `things show lutron:intlkeypad:hwprocessor:kitchenkeypad`) from the openHAB CLI to list the channels.
@ -356,7 +355,7 @@ Supported settings for `model` parameter: 2B, 3B, 4B, 5BRL, 6BRL, 7BRL, 8BRL, 10
Thing configuration file example:
```
```java
Thing intlkeypad kitchenkeypad [ integrationId=15, model="10BRL" autorelease=true ]
```
@ -366,7 +365,7 @@ Palladiom keypads used in the HomeWorks QS system use the **palladiomkeypad** th
It accepts the same `integrationId`, `model`, and `autorelease` parameters and creates the same button and LED channel types as the **keypad** thing.
See the **keypad** section above for a full discussion of configuration and use.
Component numbering: For button and LED layouts and numbering, see the Lutron Integration Protocol Guide (rev. AA) p.95 (https://www.lutron.com/TechnicalDocumentLibrary/040249.pdf).
Component numbering: For button and LED layouts and numbering, see the Lutron Integration Protocol Guide (rev. AA) p.95 (<https://www.lutron.com/TechnicalDocumentLibrary/040249.pdf>).
If you are having problems determining which channels have been created for a given keypad model, select the appropriate palladiomkeypad thing under Settings/Things in the Administration UI and click on the Channels tab.
You can also run the command `things show <thingUID>` (e.g. `things show lutron:palladiomkeypad:hwprocessor:kitchenkeypad`) from the openHAB CLI to list the channels.
@ -374,11 +373,10 @@ Supported settings for `model` parameter: 2W, 3W, 4W, RW, 22W, 24W, 42W, 44W, 2R
Thing configuration file example:
```
```java
Thing palladiomkeypad kitchenkeypad [ integrationId=16, model="4W" autorelease=true ]
```
#### Pico Keypads
Pico keypads use the **pico** thing.
@ -386,7 +384,7 @@ It accepts the same `integrationId`, `model`, and `autorelease` parameters and c
The only difference is that no LED channels will be created, since Pico keypads have no indicator LEDs.
See the discussion above for a full discussion of configuration and use.
Component numbering: For button layouts and numbering, see the Lutron Integration Protocol Guide (rev. AA) p.113 (https://www.lutron.com/TechnicalDocumentLibrary/040249.pdf).
Component numbering: For button layouts and numbering, see the Lutron Integration Protocol Guide (rev. AA) p.113 (<https://www.lutron.com/TechnicalDocumentLibrary/040249.pdf>).
If you are having problems determining which channels have been created for a given keypad model, select the appropriate pico thing under Settings/Things in the Administration UI and click on the Channels tab.
You can also run the command `things show <thingUID>` (e.g. `things show lutron:pico:radiora2:hallpico`) from the openHAB CLI to list the channels.
@ -394,7 +392,7 @@ Supported settings for `model` parameter: 2B, 2BRL, 3B, 3BRL, 4B, Generic (defau
Thing configuration file example:
```
```java
Thing pico hallpico [ integrationId=12, model="3BRL", autorelease=true ]
```
@ -405,14 +403,14 @@ They can be used as peripheral devices in a RadioRA 2 or HomeWorks QS system, or
The **grafikeyekeypad** thing is used to interface to the GRAFIK Eye QS front panel keypad when it is used in a RadioRA 2 or HomeWorks QS system.
In this configuration, the integrated dimmers will appear to openHAB as separate output devices.
If your GRAFIK Eye is being used as a stand-alone device and is not integrated in to a RadioRA 2 or HomeWorks QS system, then *this is not the thing you are looking for*.
If your GRAFIK Eye is being used as a stand-alone device and is not integrated in to a RadioRA 2 or HomeWorks QS system, then _this is not the thing you are looking for_.
You should instead be using the **grafikeye** thing (see below).
The **grafikeyekeypad** thing accepts the same `integrationId`, `model`, and `autorelease` parameters and creates the same button, LED, and CCI, channel types as the other keypad things (see above).
The model parameter should be set to indicate whether there are zero, one, two, or three columns of buttons on the left side of the panel.
Note that this count does not include the column of 5 scene buttons always found on the right side of the panel.
To support the GRAFIK Eye's contact closure input, a CCI channel named *cci1* will be created with item type Contact and category Switch.
To support the GRAFIK Eye's contact closure input, a CCI channel named _cci1_ will be created with item type Contact and category Switch.
It is marked as Advanced, so you will need to check "Show advanced" in order to see it listed in the Administration UI.
It presents ON/OFF states the same as a keypad button.
@ -424,7 +422,7 @@ Supported settings for `model` parameter: 0COL, 1COL, 2COL, 3COL (default)
Thing configuration file example:
```
```java
Thing lutron:grafikeyekeypad:theaterkeypad (lutron:ipbridge:radiora2) [ integrationId=12, model="3COL", autorelease="true" ]
```
@ -448,7 +446,7 @@ Supported settings for `model` parameter: Caseta, Other (default)
Thing configuration file example:
```
```java
Thing virtualkeypad repeaterbuttons [ integrationId=1, autorelease=true ]
```
@ -461,7 +459,7 @@ The contact closure outputs (CCOs) have their own integration IDs and are handle
Supported options are `integrationId` and `autorelease`.
Supplying a model is not required, as there is only one model.
To support the contact closure inputs, CCI channels named *cci[n]* are created with item type Contact and category Switch.
To support the contact closure inputs, CCI channels named _cci[n]_ are created with item type Contact and category Switch.
The VCRX security (Full/Flash) input controls both the cci1 and cci2 channels, while input connections 1 and 2 map to the cci3 and cci4 channels respectively.
The cci channels are marked as Advanced, so you will need to check "Show advanced" in order to see them listed in the Administration UI.
They present OPEN/CLOSED states but do not accept commands since Contact items are read-only in openHAB.
@ -469,7 +467,7 @@ Note that the `autorelease` option **does not** apply to CCI channels.
Thing configuration file example:
```
```java
Thing vcrx vcrx1 [ integrationId=13, autorelease=true ]
```
@ -480,7 +478,7 @@ The 5 contact closure inputs (CCIs) are handled by the **qsio** thing.
The 5 contact closure outputs (CCOs) are handled by the **cco** thing (see below).
The only configuration option is `integrationId`
To support the contact closure inputs, CCI channels named *cci[n]* are created with item type Contact and category Switch.
To support the contact closure inputs, CCI channels named _cci[n]_ are created with item type Contact and category Switch.
They are marked as Advanced, so you will need to check "Show advanced" in order to see them listed in the Administration UI.
They present OPEN/CLOSED states but do not accept commands as Contact items are read-only in openHAB.
@ -488,7 +486,7 @@ Some functionality may depend on QSE-IO DIP switch settings. See the Lutron docu
Thing configuration file example:
```
```java
Thing qsio sensorinputs [ integrationId=42 ]
```
@ -506,7 +504,7 @@ See the Lutron documentation for more information.
Thing configuration file example:
```
```java
Thing wci specialkeypad [ integrationId=48, autorelease=true ]
```
@ -522,7 +520,7 @@ Be aware that the Lutron controller may round the pulse length down to the neare
**Note:** The **ccopulsed** and **ccomaintained** things are now deprecated.
You should use the **cco** thing with the appropriate `outputType` setting instead.
Each **cco** thing creates one switch channel called *switchstatus*.
Each **cco** thing creates one switch channel called _switchstatus_.
For pulsed CCOs, sending an ON command will close the output for the configured pulse time.
Sending an OFF command does nothing.
Because of limitations in RadioRA 2, you cannot monitor the state of a pulsed CCO.
@ -532,7 +530,7 @@ For maintained CCOs, sending ON and OFF commands works as expected, and the chan
Thing configuration file example:
```
```java
Thing cco garage [ integrationId=5, outputType="Pulsed", pulseLength=0.5 ]
Thing cco relay1 [ integrationId=7, outputType="Maintained"]
```
@ -542,7 +540,7 @@ Thing cco relay1 [ integrationId=7, outputType="Maintained"]
Each Lutron shade, motorized drape, or QS motor controller output (LQSE-4M-D) is controlled by a **shade** thing.
The only configuration parameter it accepts is `integrationId`.
A single channel *shadelevel* with item type Rollershutter and category Rollershutter will be created for each **shade** thing.
A single channel _shadelevel_ with item type Rollershutter and category Rollershutter will be created for each **shade** thing.
It accepts Percent, Up, Down, Stop and Refresh commands.
Sending a Percent command will cause the shade to immediately move so as to be open the specified percentage.
You can also read the current shade level from the channel.
@ -551,14 +549,14 @@ The shade handler should be compatible with all Lutron devices which appear to t
Motor controller outputs on a LQSE-4M-D (HomeWorks QS only) behave similarly to a shade.
The only difference is that percentages other than 0% and 100% will be ignored, since arbitrary positioning is not supported by the hardware.
The value of *shadelevel* for a motor will likewise always be either 0% or 100%, depending on whether the last command sent was Up or Down.
The value of _shadelevel_ for a motor will likewise always be either 0% or 100%, depending on whether the last command sent was Up or Down.
**Note:** While a shade is moving to a specific level because of a Percent command, the system will report the target level for the shade rather than the actual current level.
While a shade is moving because of an Up or Down command, it will report the previous level until it stops moving.
Thing configuration file example:
```
```java
Thing shade libraryshade [ integrationId=33]
```
@ -569,7 +567,7 @@ Besides `integrationId`, it requires that the parameter `type` be set to either
There is no default.
If discovery is used, the `type` parameter will set automatically when the **blind** thing is created.
Two channels, *blindliftlevel* and *blindtiltlevel*, with item type Rollershutter and category Rollershutter will be created for each **blind** thing.
Two channels, _blindliftlevel_ and _blindtiltlevel_, with item type Rollershutter and category Rollershutter will be created for each **blind** thing.
They control the up/down motion and the slat tilt motions of the blinds, respectively.
Each channel accepts Percent, Up, Down, Stop and Refresh commands.
Sending a Percent command will cause the blind to immediately move so as to be open the specified percentage.
@ -584,7 +582,7 @@ Please comment on your use of it in the openHAB community forum.
Thing configuration file example:
```
```java
Thing blind officeblinds [ integrationId=76, type="Venetian"]
```
@ -597,7 +595,7 @@ Typically step 1 is "Off" or "Normal", and step 2 is "Green Mode", however other
The **greenmode** thing is used to interface to the green mode subsystem.
It requires that the `integrationId` parameter be set to the ID of the green mode subsystem.
This should generally be 22.
It creates a single channel *step* that can be used to set or query the active green mode step number.
It creates a single channel _step_ that can be used to set or query the active green mode step number.
Unlike other Lutron system state settings, the binding is not automatically notified by the bridge device of changes to the current green mode step.
This may be due to a bug in the Lutron firmware.
@ -610,7 +608,7 @@ Note that it should usually be unnecessary for the poll interval to be set to le
Thing configuration file example:
```
```java
Thing greenmode greenmode [ integrationId=22 ]
```
@ -626,24 +624,24 @@ The `integrationId` parameter must be set to the ID of the timeclock subsystem.
It creates the following six channels:
* *clockmode* - Gets or sets the current timeclock mode.
* *sunrise* - The timeclock's local sunrise time for the current day. Read only. You must send a refresh command (RefreshType.REFRESH) to query the system for the current day's sunrise time, as it is not automatically updated.
* *sunset* - The timeclock's local sunset time for the current day. Read only. You must send a refresh command to query the system for the current day's sunset time, as it is not automatically updated.
* *execevent* - Updates with the index number of each executing event. Send an event's index number to start execution of it.
* *enableevent* - Updates with an event's index number when it is enabled. Send an event's index number to enable it.
* *disableevent* - Updates with an event's index number when it is disabled. Send an event's index number to disable it.
- _clockmode_ - Gets or sets the current timeclock mode.
- _sunrise_ - The timeclock's local sunrise time for the current day. Read only. You must send a refresh command (RefreshType.REFRESH) to query the system for the current day's sunrise time, as it is not automatically updated.
- _sunset_ - The timeclock's local sunset time for the current day. Read only. You must send a refresh command to query the system for the current day's sunset time, as it is not automatically updated.
- _execevent_ - Updates with the index number of each executing event. Send an event's index number to start execution of it.
- _enableevent_ - Updates with an event's index number when it is enabled. Send an event's index number to enable it.
- _disableevent_ - Updates with an event's index number when it is disabled. Send an event's index number to disable it.
All channels except *clockmode* are marked as advanced.
All channels except _clockmode_ are marked as advanced.
Thing configuration file example:
```
```java
Thing timeclock timeclock [ integrationId=23 ]
```
Example rule to refresh sunrise/sunset channels daily and at restart:
```
```java
import org.openhab.core.types.RefreshType
rule "Lutron sunrise/sunset daily refresh"
@ -664,13 +662,13 @@ HomeWorks QS systems allow for conditional programming logic based on state vari
The **sysvar** thing allows state variable values to be read and set from openHAB.
This makes sophisticated integration schemes possible.
Each **sysvar** thing represents one system state variable.
It has a single channel *varstate* with type Number and category Number.
It has a single channel _varstate_ with type Number and category Number.
Automatic discovery of state variables is not yet supported.
They must be manually configured.
Thing configuration file example:
```
```java
Thing sysvar qsstate [ integrationId=80 ]
```
@ -713,34 +711,33 @@ Appropriate channels will be created automatically by the keypad, ttkeypad, intl
|switch |switchstatus |OnOffType |OnOffType |
|fan |fanspeed |StringType |"OFF","LOW","MEDIUM","MEDIUMHIGH","HIGH" |
|fan |fanlevel |PercentType |OnOffType, PercentType |
|occ. sensor|occupancystatus|OnOffType |(*readonly*) |
|ogroup |groupstate |StringType |"OCCUPIED","UNOCCUPIED","UNKNOWN" (*readonly*) |
|occ. sensor|occupancystatus|OnOffType |(_readonly_) |
|ogroup |groupstate |StringType |"OCCUPIED","UNOCCUPIED","UNKNOWN" (_readonly_) |
|cco |switchstatus |OnOffType |OnOffType, RefreshType |
|keypads |button* |OnOffType |OnOffType |
| |led* |OnOffType |OnOffType, RefreshType |
| |cci* |OpenClosedType|(*readonly*) |
| |cci* |OpenClosedType|(_readonly_) |
|shade |shadelevel |PercentType |PercentType, UpDownType, StopMoveType.STOP, RefreshType|
|blind |blindliftlevel |PercentType |PercentType, UpDownType, StopMoveType.STOP, RefreshType|
| |blindtiltlevel |PercentType |PercentType, UpDownType, StopMoveType.STOP, RefreshType|
|greenmode |step |DecimalType |DecimalType, OnOffType (ON=2,OFF=1), RefreshType |
|timeclock |clockmode |DecimalType |DecimalType, RefreshType |
| |sunrise |DateTimeType |RefreshType (*readonly*) |
| |sunset |DateTimeType |RefreshType (*readonly*) |
| |sunrise |DateTimeType |RefreshType (_readonly_) |
| |sunset |DateTimeType |RefreshType (_readonly_) |
| |execevent |DecimalType |DecimalType |
| |enableevent |DecimalType |DecimalType |
| |disableevent |DecimalType |DecimalType |
|sysvar |varstate |DecimalType |DecimalType (rounded/truncated to integer) |
Most channels receive immediate notifications of device state changes from the Lutron control system.
The only exceptions are **greenmode** *step*, which is periodically polled and accepts REFRESH commands to initiate immediate polling, and **timeclock** *sunrise* and *sunset*, which must be polled daily using REFRESH commands to retrieve current values.
The only exceptions are **greenmode** _step_, which is periodically polled and accepts REFRESH commands to initiate immediate polling, and **timeclock** _sunrise_ and _sunset_, which must be polled daily using REFRESH commands to retrieve current values.
Many other channels accept REFRESH commands to initiate a poll, but sending one should not normally be necessary.
## RadioRA 2/HomeWorks QS Configuration File Examples:
demo.things:
```
```java
Bridge lutron:ipbridge:radiora2 [ ipAddress="192.168.1.123", user="lutron", password="integration" ] {
Thing dimmer lrtable "Table Lamp" @ "Living Room" [ integrationId=45, fadeInTime=0.5, fadeOutTime=5 ]
Thing dimmer lrtorch "Torch Lamp" @ "Living Room" [ integrationId=44, fadeInTime=0.5, fadeOutTime=5 ]
@ -760,7 +757,7 @@ Bridge lutron:ipbridge:radiora2 [ ipAddress="192.168.1.123", user="lutron", pass
demo.items:
```
```java
Dimmer LivingRm_TableLamp "Table Lamp" { channel="lutron:dimmer:radiora2:lrtable:lightlevel" }
Switch FrontYard_PathLight "Path Light" { channel="lutron:switch:radiora2:path:switchstatus" }
Switch LaundryRm_Sensor "Occ Sensor" { channel="lutron:occupancysensor:radiora2:laundryocc:occupancystatus" }
@ -778,7 +775,7 @@ Rollershutter Lib_Shade1 "Shade 1" { channel="lutron:shade:radiora2:
dimmerAction.rules:
```
```java
rule "Test dimmer action"
when
Item TestSwitch received command ON
@ -788,7 +785,6 @@ then
end
```
# Lutron RadioRA (Classic) Binding
This binding integrates with the legacy Lutron RadioRA (Classic) lighting system.
@ -812,7 +808,6 @@ This binding currently supports the following thing types:
| ra-switch | Thing | Switch control |
| ra-phantomButton | Thing | Phantom Button to control multiple controls (Scenes) |
## Thing Configuration Parameters
| Thing | Parameter | Description |
@ -841,7 +836,7 @@ The following channels are supported:
lutronradiora.things
```
```java
Bridge lutronradiora:ra-rs232:chronos1 [portName="/dev/ttys002"] {
Thing ra-dimmer dimmer1 [ zoneNumber=1 ]
Thing ra-dimmer dimmer2 [ zoneNumber=2 ]
@ -853,7 +848,7 @@ Bridge lutronradiora:ra-rs232:chronos1 [portName="/dev/ttys002"] {
lutronradiora.items
```
```java
Dimmer Dimmer_Kitchen "Kitchen Lights" { channel="lutronradiora:dimmer:chronos1:dimmer1:lightlevel" }
Dimmer Dimmer_FamilyRoom "Family Room Lights" { channel="lutronradiora:dimmer:chronos1:dimmer2:lightlevel" }
Switch Switch_Patio "Patio Light" { channel="lutronradiora:dimmer:chronos1:switch1:switchstatus" }
@ -870,13 +865,13 @@ Please see [HomeWorks RS232 Protocol Guide](https://www.lutron.com/TechnicalDocu
## Supported Things
* HomeWorks RS232-connected Processor Units
* Dimmers
- HomeWorks RS232-connected Processor Units
- Dimmers
Supported in future updates:
* Keypads
* Keypad LEDs
- Keypads
- Keypad LEDs
## Discovery
@ -887,13 +882,13 @@ It will detect dimmers as they are manually raised or lowered, or can be made to
The bridge requires the port location (e.g., /dev/ttyUSB1 or COM1) and the baud rate. The default baud rate for HomeWorks processors is set to 9600.
```
```java
lutron:hwserialbridge:home [serialPort="/dev/ttyUSB1", baudRate="9600]
```
Dimmers have one required parameter ``address`` that specifies the device address (e.g., [01:01:03:02:04]) and two optional parameters: ``fadeTime`` which sets the time it takes to set the light level when changed, and ``defaultLevel`` which sets the level to use for the dimmer when turning it on (with a switch rather than a slider).
```
```java
lutron:hwdimmer:dimmer1 [address="[01:01:03:02:04]", fadeTime="1", defaultLevel="75"]
```
@ -905,7 +900,6 @@ The following channels are supported:
|-----------------|-------------------|--------------|--------------------------------------------- |
| dimmer | lightlevel | Dimmer | Increase/decrease the light level |
# Lutron Grafik Eye 3x/4x binding via GRX-PRG or GRX-CI-PRG
This lutron binding will also work with Grafik Eye 3x/4x systems in conjuction with the GRX-PRG or GRX-CI-PRG interfaces.
@ -926,7 +920,7 @@ The bridge requires the IP address/Host name of the bridge.
Optionally, you may specify the username (defaults to 'nwk') and retryPolling (in seconds) to retry connections if the connection fails (defaults to 10 seconds).
This bridge does support two way communication with the Grafik Eye units (if a scene is selected or a zone changed on the unit or via a keypad, that information is immediately available in openHAB).
```
```java
lutron:prgbridge:home [ ipAddress="192.168.1.51", user="nwk", retryPolling=10 ]
```
@ -935,7 +929,7 @@ Optionally you may specify the default fade time (when raising/lowering zones or
If any of the zones control a QED shade (via the SG/SO-SVCN/SVCI keypad), those zones
should be listed (comma separated list) in the shadeZones.
```
```java
lutron:grafikeye:home (lutron:prgbridge:home) [ controlUnit=1, fade=10, polling=30, shadeZones="2,3,4" ]
```
@ -960,8 +954,6 @@ lutron:grafikeye:home (lutron:prgbridge:home) [ controlUnit=1, fade=10, polling=
| ssnextsecond | Yes | Number | How many seconds until the next step in the Super Sequence |
| buttonpress | Yes | String | Last keypad button pressed (see Appendix A) in protocol guide |
### Grafik Eye channels
| Channel Type ID | Readonly | Item Type | Description |
@ -978,28 +970,27 @@ lutron:grafikeye:home (lutron:prgbridge:home) [ controlUnit=1, fade=10, polling=
### Notes
* The "buttonpress" channel reports which keypad button was pressed. DIP switch 6 must be set on the interface for this to be reported. The "buttonpress" channel is only useful in rules to take action when a specific button (on a specific keypad) has been pressed.
* Sunset/sunrise will only be available if configured via the Liasion software
* scenelock, sceneseq, zonelock cannot be determined from the API and will default to OFF on startup
* Replace the "X" on zonelowerX, zoneraiseX, etc with the zone in question. "zonelower1" will affect zone 1. Specifying a zone larger than you have will have no effect (such as using zonelower8 on a Grafik Eye 3506 which only has 6 zones).
* The zonefade value will only be used when zonelower/zonereaise/zoneintensity is issued.
* zoneshade does not support PercentType nor StopMoveType.Move and those commands will be ignored
* zoneintensity can be used on a shade zone if the intensity is from 0 to 5 and should be used if wanting to set a QED preset: 0=Stop, 1=Open, 2=Close, 3=Preset 1, 4=Preset 2, 5=Preset 3
* If you started a zonelower or zoneraise, the only way to stop the action is by executing an all zone stop on the bridge (i.e. zonelowerstop or zoneraisestop). The PRG API does not provide a way to stop the lowering/raising of any specific zone.
- The "buttonpress" channel reports which keypad button was pressed. DIP switch 6 must be set on the interface for this to be reported. The "buttonpress" channel is only useful in rules to take action when a specific button (on a specific keypad) has been pressed.
- Sunset/sunrise will only be available if configured via the Liasion software
- scenelock, sceneseq, zonelock cannot be determined from the API and will default to OFF on startup
- Replace the "X" on zonelowerX, zoneraiseX, etc with the zone in question. "zonelower1" will affect zone 1. Specifying a zone larger than you have will have no effect (such as using zonelower8 on a Grafik Eye 3506 which only has 6 zones).
- The zonefade value will only be used when zonelower/zonereaise/zoneintensity is issued.
- zoneshade does not support PercentType nor StopMoveType.Move and those commands will be ignored
- zoneintensity can be used on a shade zone if the intensity is from 0 to 5 and should be used if wanting to set a QED preset: 0=Stop, 1=Open, 2=Close, 3=Preset 1, 4=Preset 2, 5=Preset 3
- If you started a zonelower or zoneraise, the only way to stop the action is by executing an all zone stop on the bridge (i.e. zonelowerstop or zoneraisestop). The PRG API does not provide a way to stop the lowering/raising of any specific zone.
## Example
demo.Things:
```
```java
lutron:prgbridge:home [ ipAddress="192.168.1.51", user="nwk", retryPolling=10 ]
lutron:grafikeye:home (lutron:prgbridge:home) [ controlUnit=1, fade=10, polling=10 ]
```
demo.items:
```
```java
String Prg_ButtonPress "Last Button Press [%s]" { channel = "lutron:prgbridge:home:buttonpress" }
Switch Prg_ZoneLowerStop "Zone Lower Stop" { channel = "lutron:prgbridge:home:zonelowerstop",autoupdate="false" }
Switch Prg_ZoneRaiseStop "Zone Raise Stop" { channel = "lutron:prgbridge:home:zoneraisestop",autoupdate="false" }

View File

@ -1,20 +1,21 @@
# Luxom Binding
This binding integrates with a https://luxom.io/ based system through a Luxom IP interface module.
This binding integrates with a <https://luxom.io/> based system through a Luxom IP interface module.
The binding has been tested with the DS65L IP interface, but it's not an official binding by Luxom.
The API implementation is based on the following documentation:
* https://old.luxom.io/uploads/ppfiles/27/LUXOM_ASCII.pdf
* https://old.luxom.io/uploads/ppfiles/28/LUXOM_ASCII_extended.pdf
- <https://old.luxom.io/uploads/ppfiles/27/LUXOM_ASCII.pdf>
- <https://old.luxom.io/uploads/ppfiles/28/LUXOM_ASCII_extended.pdf>
## Supported Things
This binding currently supports the following thing types:
* **ipbridge** - The Lutron main repeater/processor/hub
* **dimmer** - Light dimmer
* **switch** - Switch or relay module
- **ipbridge** - The Lutron main repeater/processor/hub
- **dimmer** - Light dimmer
- **switch** - Switch or relay module
## Thing Configuration
@ -25,7 +26,7 @@ The Bridge thing has two parameters:
- ipAddress: This is the IP address of the IP interface module
- port: The listening port (optional, defaults to 2300)
```
```java
Bridge luxom:bridge:myhouse [ ipAddress="192.168.0.50", port="2300"] {
...
}
@ -44,26 +45,26 @@ To be able to use these devices, you can add the `doesNotReply=true` parameter s
Dimmers support the optional advanced parameters `onLevel`, `onToLast` and `stepPercentage`:
* The `onLevel` parameter specifies the level to which the dimmer will go when sent an ON command. It defaults to 100.
* The `onToLast` parameter is a boolean that defaults to false. If set to "true", the dimmer will go to its last non-zero level when sent an ON command. If the last non-zero level cannot be determined, the value of `onLevel` will be used instead.
* The `stepPercentage` specifies the in-/decrease in percentage of brightness. Default is 5.
- The `onLevel` parameter specifies the level to which the dimmer will go when sent an ON command. It defaults to 100.
- The `onToLast` parameter is a boolean that defaults to false. If set to "true", the dimmer will go to its last non-zero level when sent an ON command. If the last non-zero level cannot be determined, the value of `onLevel` will be used instead.
- The `stepPercentage` specifies the in-/decrease in percentage of brightness. Default is 5.
A **dimmer** thing has a single channel *Lighting.Brightness* with type Dimmer and category DimmableLight.
A **dimmer** thing has a single channel _Lighting.Brightness_ with type Dimmer and category DimmableLight.
Thing configuration file example:
```
```java
Thing dimmer dimmerLightLiving1 [address="A,02", onLevel="50", onToLast="false", stepPercentage="5"]
```
#### Switches
Switches take no additional parameters.
A **switch** thing has a single channel *switch* with type Switch and category Switch.
A _switch_ thing has a single channel **switch** with type Switch and category Switch.
Thing configuration file example:
```
```java
Thing switch switchLiving1 [address="A,02"]
```
@ -76,12 +77,11 @@ The following is a summary of channels for all Luxom things:
| dimmer | brightness | Dimmer | Increase/decrease the light level |
| switch | switch | Switch | Switch the device on/off |
### Full Example
demo.things:
```
```java
Bridge luxom:bridge:myhouse [ ipAddress="192.168.0.50", port="2300"] {
Thing switch switchBedroom1 "Switch 1" @ "Bedroom" [address="1,01"]
Thing dimmer dimmerBedroom1 "dimmer 1" @ "Bedroom" [address="A,02"]
@ -91,7 +91,7 @@ Bridge luxom:bridge:myhouse [ ipAddress="192.168.0.50", port="2300"] {
demo.items:
```
```java
Dimmer FF_Bedroom_Lights "Bedroom dimmer light" <light> (FF_Living, gLight) ["Lighting"] {channel="luxom:dimmer:myhouse:dimmerBedroom1:brightness", ga="Light", homekit="Lighting, Lighting.Brightness"}
Switch FF_Bedroom_PowerOutlet1 "Bedroom Power Outlet 1" <poweroutlet> (FF_Living, gPower) ["Switchable"] {channel="luxom:switch:myhouse:switchBedroom1:switch", ga="Outlet"}
Dimmer FF_Kitchen_Lights "Kitchen dimmer light" <light> (FF_Kitchen, gLight) ["Lighting"] {channel="luxom:dimmer:myhouse:dimmerKitchen1:brightness", ga="Light", homekit="Lighting, Lighting.Brightness"}

View File

@ -2,20 +2,22 @@
This binding gives the possibility to integrate any Heatpump that is based on the Luxtronik 2 contol unit of Alpha Innotec. This includes heatpumps of:
* Alpha InnoTec
* Buderus (Logamatic HMC20, HMC20 Z)
* CTA All-In-One (Aeroplus)
* Elco
* Nibe (AP-AW10)
* Roth (ThermoAura®, ThermoTerra)
* (Siemens) Novelan (WPR NET)
* Wolf Heiztechnik (BWL/BWS)
- Alpha InnoTec
- Buderus (Logamatic HMC20, HMC20 Z)
- CTA All-In-One (Aeroplus)
- Elco
- Nibe (AP-AW10)
- Roth (ThermoAura®, ThermoTerra)
- (Siemens) Novelan (WPR NET)
- Wolf Heiztechnik (BWL/BWS)
This binding was tested with:
* Siemens Novelan LD 7
- Siemens Novelan LD 7
_If you have another heatpump the binding works with, let us know, so we can extend the list_
:::tip Note
If you have another heatpump the binding works with, let us know, so we can extend the list
:::
Note: The whole functionality is based on data that was reverse engineered, so use it at your own risk.
@ -283,7 +285,6 @@ The following channels are holding read only values:
The usage of the numbered channels above is currently unknown. If you are able to directly match one of the values to any value reported by your heat pump, feel free to report back on the forum, so we are able to give the channel a proper name instead.
The following channels are also writable:
| channel | type | advanced | description |
|----------|--------|----------|------------------------------|
@ -306,14 +307,13 @@ The following channels are also writable:
| comfortCoolingATExcess | Number:Time | | AT Excess |
| comfortCoolingATUndercut | Number:Time | | AT undercut |
## Example
Below you can find some example textual configuration for a heatpump with some basic functionallity. This can be extended/adjusted according to your needs and depending on the availability of channels (see list above).
_heatpump.things:_
```
```java
Thing luxtronikheatpump:heatpump:heatpump "Heatpump" [
ipAddress="192.168.178.12",
port="8889",
@ -323,7 +323,7 @@ Thing luxtronikheatpump:heatpump:heatpump "Heatpump" [
_heatpump.items:_
```
```java
Group gHeatpump "Heatpump" <temperature>
Number:Temperature HeatPump_Temp_Outside "Temperature outside [%.1f °C]" <temperature> (gHeatpump) { channel="luxtronikheatpump:heatpump:heatpump:temperatureOutside" }
@ -343,7 +343,7 @@ Number HeatPump_warmwater_temperature "Hot water temperature [%.1f]" (gHeatpu
_heatpump.sitemap:_
```
```perl
sitemap heatpump label="Heatpump" {
Frame label="Heatpump" {
Text item=HeatPump_State_Ext

View File

@ -15,13 +15,15 @@ The binding provides device discovery, sending keys for the remote and also rece
### Supported Models
* Deutsche Telekom Media Receiver MR401B - fully supported
* Deutsche Telekom Media Receiver MR201 - fully supported
* Deutsche Telekom Media Receiver MR400 - supported with minor restrictions (POWER key)
* Deutsche Telekom Media Receiver MR200 - supported with minor restrictions (POWER key)
* Deutsche Telekom Media Receiver MR601 - should be supported (not verified)
* Deutsche Telekom Media Receiver MR3xx - NOT supported (different platform)
* Deutsche Telekom Media Receiver MR1xx - NOT supported (different platform)
| Model | Status |
|----------------------------------------|-----------------------------------------------|
| Deutsche Telekom Media Receiver MR401B | fully supported |
| Deutsche Telekom Media Receiver MR201 | fully supported |
| Deutsche Telekom Media Receiver MR400 | supported with minor restrictions (POWER key) |
| Deutsche Telekom Media Receiver MR200 | supported with minor restrictions (POWER key) |
| Deutsche Telekom Media Receiver MR601 | should be supported (not verified) |
| Deutsche Telekom Media Receiver MR3xx | NOT supported (different platform) |
| Deutsche Telekom Media Receiver MR1xx | NOT supported (different platform) |
## Auto Discovery
@ -84,7 +86,7 @@ There are different ways to setup the User ID:
Run the following command on the console and provide your Telekom account credentials:
```
```shell
openhab> openhab:magentatv login
Username (email): mail@example.com
Password: topsecret
@ -97,7 +99,7 @@ Edit thing configuration and copy this value to the field userId
On successful login the console will show the User ID value. Copy&amp;Paste this value to the Thing configuration (parameter `userId`) of the receiver.
If you have multiple receivers under the same MagentaTV subscription you can use this value for all of them.
2. Provide your credentials in the UI
1. Provide your credentials in the UI
If you do not want to use the openHAB console, you can also setup the credentials in the Thing configuration
@ -199,18 +201,18 @@ In addition you could send any key code in the 0xHHHH format., refer to
### magentatv.things
```
```java
Thing magentatv:receiver:XXXXXXXXXXX "MagentaTV" [
udn="XXXXXXXXXXX",
ipAddress="xxx.xxx.xxx.xxx",
accountName="xxxxxx.xxxx@t-online.de",
accountPassword="xxxxxxxxxx"
udn="XXXXXXXXXXX",
ipAddress="xxx.xxx.xxx.xxx",
accountName="xxxxxx.xxxx@t-online.de",
accountPassword="xxxxxxxxxx"
]
```
### magentatv.items
```
```java
# MagentaTV Control
Switch MagentaTV_Power "Power" {channel="magentatv:receiver:XXXXXXXXXXX:control#power"}
Number MagentaTV_Channel "Channel" {channel="magentatv:receiver:XXXXXXXXXXX:status#channel"}
@ -231,7 +233,7 @@ String MagentaTV_RunStatus "Run Status" {channel="magentatv:receiver:XXXXXX
or
```
```java
Group gRB_GF_LR_TVReceiver "RB_GF_LR: TV Receiver"
(gRB_GF_LivingRoom, gMedia, gSpeechCmnd)
@ -283,7 +285,7 @@ String RB_GF_LR_TVReceiver_PlayMode
### sitemap
```
```perl
Text label="TV" icon="it_television" {
Frame label="Bedienung" {
Switch item=RB_GF_LR_TVReceiver_Power label="Ein/Aus []" icon="control_on_off" mappings=[ ON="Ein/Aus" ]
@ -312,18 +314,18 @@ Due to the fact the POWER is a toggle button and the binding cannot detect the c
Beginning with models 401/201 and new the binding is able to detect the Power-OFF condition, which can be used in a rule to improve this situation
```
if (MagentaTV_Power.state != ON) {
```java
if (MagentaTV_Power.state != ON) {
sendCommand(MagentaTV_Power, ON)
}
}
```
to switch it ON and
```
if (MagentaTV_Power.state != OFF) {
```java
if (MagentaTV_Power.state != OFF) {
sendCommand(MagentaTV_Power, OFF)
}
}
```
to switch it off.

View File

@ -54,7 +54,7 @@ Channels with type `UNREAD` give the number on unread mails in that folder.
mail.things:
```
```java
Thing mail:smtp:samplesmtp [ hostname="smtp.example.com", sender="mail@example.com", security="SSL", username="user", password="pass" ]
Thing mail:imap:sampleimap [ hostname="imap.example.com", security="SSL", username="user", password="pass" ] {
@ -66,14 +66,14 @@ Thing mail:imap:sampleimap [ hostname="imap.example.com", security="SSL", userna
mail.items:
```
```java
Number InboxTotal "INBOX [%d]" { channel="mail:imap:sampleimap:inbox_total" }
Number InboxUnread "INBOX Unread [%d]" { channel="mail:imap:sampleimap:inbox_unread" }
```
mail.sitemap:
```
```perl
sitemap demo label="Main Menu"
{
Frame {
@ -88,12 +88,12 @@ sitemap demo label="Main Menu"
This binding includes rule actions for sending email.
Six different actions available:
* `boolean success = sendMail(String recipient, String subject, String text)`
* `boolean success = sendMailWithAttachment(String recipient, String subject, String text, String URL)`
* `boolean success = sendMailWithAttachments(String recipient, String subject, String text, List<String> URL)`
* `boolean success = sendHtmlMail(String recipient, String subject, String htmlContent)`
* `boolean success = sendHtmlMailWithAttachment(String recipient, String subject, String htmlContent, String URL)`
* `boolean success = sendHtmlMailWithAttachments(String recipient, String subject, String htmlContent, List<String> URL)`
- `boolean success = sendMail(String recipient, String subject, String text)`
- `boolean success = sendMailWithAttachment(String recipient, String subject, String text, String URL)`
- `boolean success = sendMailWithAttachments(String recipient, String subject, String text, List<String> URL)`
- `boolean success = sendHtmlMail(String recipient, String subject, String htmlContent)`
- `boolean success = sendHtmlMailWithAttachment(String recipient, String subject, String htmlContent, String URL)`
- `boolean success = sendHtmlMailWithAttachments(String recipient, String subject, String htmlContent, List<String> URL)`
The `sendMail(...)` send a plain text mail (with attachments if supplied).
The `sendHtmlMail(...)` send a HTML mail (with attachments if supplied).
@ -111,14 +111,14 @@ Using different character sets may produce unwanted results.
Examples:
```
```java
val mailActions = getActions("mail","mail:smtp:samplesmtp")
val success = mailActions.sendMail("mail@example.com", "Test subject", "This is the mail content.")
success = mailActions.sendMail("mail1@example.com, mail2@example.com", "Test subject", "This is the mail content sent to multiple recipients.")
```
```
```java
import java.util.List
val List<String> attachmentUrlList = newArrayList(
@ -135,7 +135,7 @@ For example if you want e-mails sent by this binding to be grouped into a "threa
Headers can be added inside a rule by calling the `mailActions.addHeader()` method before calling the respective `mailActions.sendMail()` method.
See the example below.
```
```java
rule "Send Mail with a 'Reference' header; for threaded view in e-mail client"
when
...

View File

@ -117,24 +117,24 @@ During this time, holding the _boost_ button on your device will link it to the
In the _Configuration Parameters_ section of the device Things you can update some of the device configuration parameters.
Currently the following parameters can be updated:
* _name_ Name of the thermostat stored in the Cube (also used by the eQ-3 software).
- _name_ Name of the thermostat stored in the Cube (also used by the eQ-3 software).
_Cube device configurable parameters_
### Cube device configurable parameters
* _ntpServer1_ The hostname for NTP Server 1 used by the Cube to get the time
* _ntpServer2_ The hostname for NTP Server 2 used by the Cube to get the time
- _ntpServer1_ The hostname for NTP Server 1 used by the Cube to get the time
- _ntpServer2_ The hostname for NTP Server 2 used by the Cube to get the time
## Thing Actions
Several Thing Actions are available to trigger special actions on the MAX! Cube
* `reset()`: _Reset Cube Configuration_ resets the MAX! Cube room and device information. Devices will need to be included again!
- `reset()`: _Reset Cube Configuration_ resets the MAX! Cube room and device information. Devices will need to be included again!
* `reboot()`: _Restart Cube_ triggers the reboot of a Cube. This can be used if a Cube became unresponsive to commands or no connection can be made. (e.g. if you tried to connect to the Cube with multiple applications at the same time)
- `reboot()`: _Restart Cube_ triggers the reboot of a Cube. This can be used if a Cube became unresponsive to commands or no connection can be made. (e.g. if you tried to connect to the Cube with multiple applications at the same time)
On the MAX! devices you can trigger the following action
* `deleteFromCube()`: _Delete Device from Cube_ deletes the device from the MAX! Cube. Device will need to be included again!
- `deleteFromCube()`: _Delete Device from Cube_ deletes the device from the MAX! Cube. Device will need to be included again!
### Example Rule

View File

@ -7,17 +7,14 @@ Our REST API allows you to send a variety of sensor events to the system and thu
Please note that a valid account is needed to access MCD and the Sensor API.
## Supported Things
There are two supported things: **MCD Bridge** and **MCD Sensor Thing**.
## Discovery
Discovery is not supported.
## Thing Configuration
This section shows the configuration parameters of both supported things.
@ -114,14 +111,13 @@ For more information about the API, you can have a look at the [C&S Sync API](ht
| NUMBERPERSONS |
| BRIGHTNESSZONE |
## Full Example
Here is an example for the textual configuration. You can of course use the Administration section of the GUI as well.
demo.things:
```
```java
Bridge mcd:mcdBridge:exampleBridge [userEmail="your.email@examle.com", userPassword="your.password"]{
Thing mcd:mcdSensor:examlpeSensor [serialNumber="123"]
Thing mcd:mcdSensor:secondExamlpeSensor [serialNumber="456"]
@ -130,14 +126,14 @@ Bridge mcd:mcdBridge:exampleBridge [userEmail="your.email@examle.com", userPassw
demo.items:
```
```java
String lastValue "Last Value" {channel="mcd:mcdSensor:examlpeSensor:lastValue"}
String sendEvent "Send Event" {channel="mcd:mcdSensor:examlpeSensor:sendEvent"}
```
demo.sitemap:
```
```perl
Text item=sendEvent
Text item=lastValue
```

View File

@ -7,7 +7,7 @@ On Raspberry Pi the user on which openHAB is running (default user name is "open
As the MCP23017 has 3 address pins, you are restricted to 8 devices on an I2C bus.
To use more devices you have to open further I2C busses.
Therefore you can use overlays to enable bit banging I2C busses on the Raspberry Pi connector, up to I2C6.
(https://github.com/raspberrypi/firmware/tree/master/boot/overlays)
<https://github.com/raspberrypi/firmware/tree/master/boot/overlays>
## Dependencies
@ -23,7 +23,7 @@ mcp23017 - which is a mcp23017 chip connected to an I2C bus on specified HEX add
## Thing Configuration
* Required configuration for mcp23017 thing:
- Required configuration for mcp23017 thing:
| Parameter | Description | Default value |
|------------|-----------------------------------------------------------------------------------------------------------------------------------|---------------|
@ -52,23 +52,23 @@ When PIN should work as DIGITAL_OUTPUT, channel from group "output" should be us
Let's imagine a setup with:
1. a wall switch connected to pin B1 on the MCP23017 chip which should turn on/off your LED light when pressed (released).
2. a relay which is connected to pin A0 on the MCP23017 chip. This relay takes care of turning on/off your light.
1. a relay which is connected to pin A0 on the MCP23017 chip. This relay takes care of turning on/off your light.
Pressing (and releasing) a wall switch should notify openHAB, and then openHAB should change state of relay to on/off the light.
Your pin B1 should work as DIGITAL_INPUT, because it READS state of a PIN (state of wall switch). Your pin A0 should work as DIGITAL_OUTPUT
because openHAB will SET state of this PIN. So your config should look like this:
* Things:
- Things:
Minimal configuration:
```
```java
Thing mcp23017:mcp23017:chipA "MCP23017 chip A" [address=20,bus=1]
```
Configuration with default_state and pull_mode:
```
```java
Thing mcp23017:mcp23017:chipA "MCP23017 chip A" [address=20,bus=1] {
Type output_pin : output#A0 [default_state="HIGH"]
Type output_pin : output#A1 [default_state="LOW"]
@ -80,16 +80,16 @@ Thing mcp23017:mcp23017:chipA "MCP23017 chip A" [address=20,bus=1] {
}
```
* Items:
- Items:
```
```java
Switch living_room_led_switch "Living room LED switch" {channel="mcp23017:mcp23017:chipA:output#A0"}
Contact living_room_led_contact "Living room LED contact" {channel="mcp23017:mcp23017:chipA:input#B1"}
```
* Rules:
- Rules:
```
```java
rule "living_room_led contact"
when
Item living_room_led_contact changed to OPEN

View File

@ -6,14 +6,12 @@ This binding uses the MEATER Cloud REST API.
![Meater+ Probe](doc/meater-plus-side.png)
## Supported Things
This binding supports the following thing types:
- meaterapi: Bridge - Communicates with the MEATER Cloud REST API.
- meaterprobe: The MEATER probe - Only support for cloud connected MEATER probes (MEATER Block and MEATER Plus)
## Discovery
@ -59,8 +57,6 @@ The following channels are supported:
|-----------|--------------------------------------------------------------|--------|----------|----------|
| deviceId | Unique id for your MEATER Probe | String | NA | yes |
#### Channels
| Channel Type ID | Item Type | Description |
@ -77,23 +73,22 @@ The following channels are supported:
| cookRemainingTime | Number:Time | Remaining time in seconds or UNDEF when unknown. |
| cookEstimatedEndTime | DateTime | Date and time of estimated end time for current cook |
## Example
### Things-file
````
```java
Bridge meater:meaterapi:block "MEATER Block" [email="", password="", refresh=30] {
meaterprobe probe1 "Meater Probe 1" [deviceId=""]
meaterprobe probe2 "Meater Probe 2" [deviceId=""]
meaterprobe probe3 "Meater Probe 3" [deviceId=""]
meaterprobe probe4 "Meater Probe 4" [deviceId=""]
}
````
```
### Items-file
````
```java
Number:Temperature Probe1InternalTemperature {channel="meater:meaterprobe:block:probe1:internalTemperature"}
Number:Temperature Probe1AmbientTemperature {channel="meater:meaterprobe:block:probe1:ambientTemperature"}
String Probe1CookId {channel="meater:meaterprobe:block:probe1:cookId"}
@ -145,6 +140,4 @@ Number:Time Probe4CookRemainingTime {channel="meater:meaterprobe:bloc
DateTime Probe4CookEstimatedEndTime {channel="meater:meaterprobe:block:probe4:cookEstimatedEndTime"}
String Probe4Status {channel="meater:meaterprobe:block:probe4:status"}
DateTime Probe4LastConnection {channel="meater:meaterprobe:block:probe4:lastConnection"}
````
```

View File

@ -26,7 +26,6 @@ The thing has a few configuration parameters:
| ip | The IP address of the meter. Mandatory. |
| refreshInterval | Refresh interval in second. Optional, the default value is 5 seconds. |
## Channels
The meter has the following channels:
@ -115,13 +114,13 @@ The meter has the following channels:
### mecmeter.things
```
```java
mecmeter:meter:1 [ password="Test1234", ip="192.168.1.16", refreshInterval="10" ]
```
### mecmeter.items
```
```java
Number:Frequency MainFrequency { channel="mecmeter:meter:1:general_group#frequency" }
Number:Temperature InternalTemperature { channel="mecmeter:meter:1:general_group#temperature" }
Number:Time TimeinOperation { channel="mecmeter:meter:1:general_group#op_time" }
@ -222,7 +221,7 @@ Number:Energy RevReactiveEnergyP3 { channel="mecmeter:meter:1:rev_reactive_energ
### mecmeter.sitemap
```
```perl
sitemap mecmeter label="MecMeter"
{
Frame label="General" {

View File

@ -1,27 +1,26 @@
# MELCloud Binding
This is an openHAB binding for Mitsubishi MELCloud (https://www.melcloud.com/).
This is an openHAB binding for [Mitsubishi MELCloud](https://www.melcloud.com/).
Installing this binding you can control your Mitsubishi devices from openHAB without accessing the MELCloud App and benefiting from all openHAB automations.
## Supported Things
Supported thing types
* melcloudaccount (bridge)
* acdevice
* heatpumpdevice
- melcloudaccount (bridge)
- acdevice
- heatpumpdevice
A bridge is required to connect to your MELCloud account.
## Discovery
Discovery is used _after_ a bridge has been created and configured with your login information.
1. Add the binding
2. Add a new thing of type melcloudaccount and configure with username and password
3. Go to Inbox and start discovery devices using MELCloud Binding
4. Supported devices (A.C. Device, Heatpump Device) should appear in your inbox
1. Add a new thing of type melcloudaccount and configure with username and password
1. Go to Inbox and start discovery devices using MELCloud Binding
1. Supported devices (A.C. Device, Heatpump Device) should appear in your inbox
Binding support also manual thing configuration by thing files.
@ -67,7 +66,6 @@ MELCloud account configuration:
| 24 | Romanian |
| 25 | Slovenian |
A.C. device and Heatpump device configuration:
| Config | Mandatory | Description |
@ -76,8 +74,6 @@ A.C. device and Heatpump device configuration:
| buildingID | | MELCloud building ID. If not defined, binding tries to find matching id by device ID. |
| pollingInterval | | Refresh time interval in seconds for updates from MELCloud. Defaults to 60 seconds. |
## Channels
A.C. device channels
@ -112,18 +108,18 @@ Heatpump device channels
## Full Example for items configuration
**melcloud.things**
### melcloud.things
```
```java
Bridge melcloud:melcloudaccount:myaccount "My MELCloud account" [ username="user.name@example.com", password="xxxxxx", language="0" ] {
Thing acdevice livingroom "Livingroom A.C. device" [ deviceID=123456, pollingInterval=60 ]
Thing heatpumpdevice attic "Attic Heatpump device" [ deviceID=789012, pollingInterval=60 ]
}
```
**melcloud.items**
### melcloud.items
```
```java
Switch power { channel="melcloud:acdevice:myaccount:livingroom:power" }
String operationMode { channel="melcloud:acdevice:myaccount:livingroom:operationMode" }
Number setTemperature { channel="melcloud:acdevice:myaccount:livingroom:setTemperature" }

View File

@ -31,33 +31,33 @@ Bridge needs configuration in order to connect properly to your Mercedes Me Acco
Perform the following steps to obtain the configuration data and perform the authorization flow.
1. Go to [Mercedes Developer Page](https://developer.mercedes-benz.com/). Login with your Mercedes Me credentials.
2. Create a project in the [console tab](https://developer.mercedes-benz.com/console)
1. Create a project in the [console tab](https://developer.mercedes-benz.com/console)
- _Project Name:_ unique name e.g. **openHAB Mercedes Me binding** plus **Your bridge ID**
- _Purpose URL:_ use link towards [this binding description](https://www.openhab.org/addons/bindings/mercedesme/)
- _Business Purpose:_ e.g. **Private usage in openHAB Smarthome system**
3. After project is created subscribe [to these Mercedes Benz APIs](https://developer.mercedes-benz.com/products?vt=cars&vt=vans&vt=smart&p=BYOCAR) with _Add Products_ button
4. For all Products perform the same steps
1. After project is created subscribe [to these Mercedes Benz APIs](https://developer.mercedes-benz.com/products?vt=cars&vt=vans&vt=smart&p=BYOCAR) with _Add Products_ button
1. For all Products perform the same steps
- Select product
- Choose _Get For Free_
- Choose _BYOCAR_ (Build Your Own Car)
- Button _Confirm_
5. Select the following products
1. Select the following products
- Vehicle Status
- Vehicle Lock Status
- Pay as you drive insurance
- Electric Vehicle Status
- Fuel Status
6. Optional: Subscribe also to _Vehicle images_. Select the _Basic Trial_ version. The images will be stored so the API is used just a few times.
7. Press _Subscribe_ button. Your project should have [these product subscriptions](#mb-product-subscriptions)
8. Generate the [project credentials](#mb-credentials)
9. Open in new browser tab your openHAB page. Add a new Thing _Mercedes Me Account_
10. Copy paste _Client ID_ , _Client Secret_ and _API Key_ from the Mercedes tab into the openHAB configuration
11. Check if the registered Mercedes products _excluding Vehicle Images_ are matching exactly with the openHab configuration switches
12. Create Thing!
13. The fresh created [account has one property](#openhab-configuration) `callbackUrl`. Copy it and paste it in a new browser tab
14. A [simple HTML page is shown including a link towards the Authorization flow](#callback-page) - **don't click yet**. If page isn't shown please adapt IP and port in openHAB configuration with Advanced Options activated
15. The copied URL needs to be added in your [Mercedes project credentials](#mb-credentials) from 8
16. Now click onto the link from 14. You'll be asked one time if you [grant access](#mb-access-request) towards the API. Click OK and authorization is done!
1. Optional: Subscribe also to _Vehicle images_. Select the _Basic Trial_ version. The images will be stored so the API is used just a few times.
1. Press _Subscribe_ button. Your project should have [these product subscriptions](#mb-product-subscriptions)
1. Generate the [project credentials](#mb-credentials)
1. Open in new browser tab your openHAB page. Add a new Thing _Mercedes Me Account_
1. Copy paste _Client ID_ , _Client Secret_ and _API Key_ from the Mercedes tab into the openHAB configuration
1. Check if the registered Mercedes products _excluding Vehicle Images_ are matching exactly with the openHab configuration switches
1. Create Thing!
1. The fresh created [account has one property](#openhab-configuration) `callbackUrl`. Copy it and paste it in a new browser tab
1. A [simple HTML page is shown including a link towards the Authorization flow](#callback-page) - **don't click yet**. If page isn't shown please adapt IP and port in openHAB configuration with Advanced Options activated
1. The copied URL needs to be added in your [Mercedes project credentials](#mb-credentials) from 8
1. Now click onto the link from 14. You'll be asked one time if you [grant access](#mb-access-request) towards the API. Click OK and authorization is done!
Some supporting screenshots for the setup
@ -81,7 +81,6 @@ Some supporting screenshots for the setup
<img src="./doc/CallbackUrl_Page.png" width="500" height="350"/>
### Bridge Configuration Parameters
| Name | Type | Description | Default | Required | Advanced |
@ -100,7 +99,6 @@ Some supporting screenshots for the setup
The `callbackPort` needs to be unique for all created Mercedes Me account things. Otherwise token exchange will be corrupted.
Set the advanced options by yourself if you know your IP and Port, otherwise give auto detect a try.
## Thing Configuration
For vehicle images Mercedes Benz Developer offers only a trial version with limited calls.
@ -305,8 +303,8 @@ Images are stored in `jsondb` so if you requested all images the Mercedes Benz I
If you're not satisfied e.g. you want a background you need to
1. change the [Advanced Image Configuration Properties](#thing-configuration)
2. Switch `clear-cache` channel item to `ON` to clear all images
3. request them via `image-view`
1. Switch `clear-cache` channel item to `ON` to clear all images
1. request them via `image-view`
### Image View Options
@ -340,12 +338,12 @@ Most common errors:
Especially after setting the frist Mercedes Benz Developer Project you'll receive no data.
It seems that the API isn't _filled_ yet.
**Pre-Condition**
#### Pre-Condition
- The Mercedes Me bridge is online = authorization is fine
- The Mercedes Me thing is online = API calls are fine
**Solution**
#### Solution
- Reduce `refreshInterval` to 1 minute
- Go to your vehicle, open doors and windows, turn on lights, drive a bit ...
@ -372,13 +370,12 @@ My personal experience during limited testing
Data is stored in directory `%USER_DATA%/jsondb` for handling tokens and vehicle images.
* _StorageHandler.For.OAuthClientService.json_ - token is stored with key `clientId` which is provided by `account` [Brige Configuration Parameters](#bridge-configuration-parameters)
* _mercedesme_%VEHICLE_VIN%.json_ - images are stored per vehicle. File name contains `vin` configured by [vehicle Thing Configuration](#thing-configuration)
- _StorageHandler.For.OAuthClientService.json_ - token is stored with key `clientId` which is provided by `account` [Brige Configuration Parameters](#bridge-configuration-parameters)
- _mercedesme_%VEHICLE_VIN%.json_ - images are stored per vehicle. File name contains `vin` configured by [vehicle Thing Configuration](#thing-configuration)
With this data the binding is able to operate without new authorization towards Mercedes each startup and reduces the restricted calls towards image API.
Also these files are properly stored in your [backup](https://community.openhab.org/t/docs-on-how-to-backup-openhab/100182) e.g. if you perform `openhab-cli backup`
## Full example
The example is based on a battery electric vehicle.
@ -386,21 +383,21 @@ Exchange configuration parameters in the Things section
Bridge
* 4711 - your desired bridge id
* YOUR_CLIENT_ID - Client ID of the Mercedes Developer project
* YOUR_CLIENT_SECRET - Client Secret of the Mercedes Developer project
* YOUR_API_KEY - Image API Key of the Mercedes Developer project
* YOUR_OPENHAB_SERVER_IP - IP address of your openHAB server
* 8090 - a **unique** port number - each bridge in your openHAB installation needs to have different port number!
- 4711 - your desired bridge id
- YOUR_CLIENT_ID - Client ID of the Mercedes Developer project
- YOUR_CLIENT_SECRET - Client Secret of the Mercedes Developer project
- YOUR_API_KEY - Image API Key of the Mercedes Developer project
- YOUR_OPENHAB_SERVER_IP - IP address of your openHAB server
- 8090 - a **unique** port number - each bridge in your openHAB installation needs to have different port number!
Thing
* eqa - your desired vehicle thing id
* VEHICLE_VIN - your Vehicle Identification Number
- eqa - your desired vehicle thing id
- VEHICLE_VIN - your Vehicle Identification Number
### Things file
```
```java
Bridge mercedesme:account:4711 "MercedesMe John Doe" [ clientId="YOUR_CLIENT_ID", clientSecret="YOUR_CLIENT_SECRET", imageApiKey="YOUR_API_KEY", callbackIP="YOUR_OPENHAB_SERVER_IP", callbackPort=8092, odoScope=true, vehicleScope=true, lockScope=true, fuelScope=true, evScope=true] {
Thing bev eqa "Mercedes EQA" [ vin="VEHICLE_VIN", refreshInterval=5, background=false, night=false, cropped=false, roofOpen=false, format="webp"]
}
@ -408,7 +405,7 @@ Bridge mercedesme:account:4711 "MercedesMe John Doe" [ clientId="YOUR_CLIENT_I
### Items file
```
```java
Number:Length EQA_Mileage "Odometer [%d %unit%]" {channel="mercedesme:bev:4711:eqa:range#mileage" }
Number:Length EQA_Range "Range [%d %unit%]" {channel="mercedesme:bev:4711:eqa:range#range-electric"}
Number:Length EQA_RangeRadius "Range Radius [%d %unit%]" {channel="mercedesme:bev:4711:eqa:range#radius-electric"}
@ -446,7 +443,7 @@ Number EQA_LightSwitch "Main Light Switch [%s]"
### Sitemap
```
```perl
sitemap MB label="Mercedes Benz EQA" {
Frame label="EQA Image" {
Image item=EQA_Image

View File

@ -58,18 +58,17 @@ The Météo Alerte information that are retrieved is available as these channels
| 2 | Orange | Be "very vigilant" in the concerned areas |
| 3 | Red | Absolute vigilance required |
## Full Example
meteoalert.things:
```
```java
Thing meteoalerte:department:yvelines @ "MyCity" [department="YVELINES", refresh=12]
```
meteoalert.items:
```
```java
Group gMeteoAlert "Alertes Météo" <weather>
String MA_Dept78 "Département 78 [%s]" <aqi> (gMeteoAlert) {channel="meteoalerte:department:yvelines:comment"}
Number MA_etat_canicule "Canicule [%s]" <aqi> (gMeteoAlert) {channel="meteoalerte:department:yvelines:canicule"}

View File

@ -3,7 +3,6 @@
The meteoblue binding uses the [meteoblue weather service](https://content.meteoblue.com/en/content/view/full/4511)
to provide weather information.
## Supported Things
The binding has two thing types.
@ -12,7 +11,6 @@ The first thing type is the weather thing. Each weather thing has the ID `weathe
The second thing type is the bridge thing. The bridge thing, which has the ID `bridge`, holds the API key to be used for all of
its child things.
## Thing Configuration
### Bridge Thing Configuration
@ -21,7 +19,6 @@ its child things.
| ------------- |:-------------:| :-------: | -------------------- |
| apiKey | | Yes | The api key to be used with the meteoblue service |
### Weather Thing Configuration
| Property | Default Value | Required? | Description |
@ -31,7 +28,6 @@ its child things.
| serviceType | NonCommercial | No | The service type to be used. Either 'Commercial' or 'NonCommercial' |
| timeZone | | No | The time zone to use for the location. Optional, but the service recommends it be specified. The service gets the time zone from a database if not specified. |
## Channels
### Channel Groups
@ -87,7 +83,6 @@ Each of the following channels is supported in all of the channel groups.
| precipitationHours | Number | Total hours of the day with precipitation |
| humidityGreater90Hours | Number | Total hours of the day with relative humidity greater than 90% |
## Image Icons
To show the weather image icons in the UI, the [image files](https://content.meteoblue.com/hu/service-specifications/standards/symbols-and-pictograms) need to be downloaded and installed in the `conf/icons/classic` folder.
@ -96,12 +91,11 @@ In the "Downloads" section at the bottom of the page, download the file named `m
The files to extract from the zip file and install in the folder will be named "iday*.png" or "iday*.svg".
## Full Example
demo.things:
```
```java
Bridge meteoblue:bridge:metBridge "metBridge" [ apiKey="XXXXXXXXXXXX" ] {
Thing weather A51 "Area 51" [ serviceType="NonCommercial", location="37.23,-115.5,1360", timeZone="America/Los_Angeles", refresh=240 ] {
}
@ -110,7 +104,7 @@ Bridge meteoblue:bridge:metBridge "metBridge" [ apiKey="XXXXXXXXXXXX" ] {
demo.items:
```
```java
// ----------------- meteoblue GROUPS ------------------------------------------
Group weatherDay0 "Today's Weather"
Group weatherDay1 "Tomorrow's Weather"
@ -127,8 +121,8 @@ String todayPCode "Pictocode [%d]" <iday> (weatherDay0) {channel="meteoblu
String todayCond "Condition [%s]" <iday> (weatherDay0) {channel="meteoblue:weather:metBridge:A51:forecastToday#condition"}
Image todayIcon "Icon [%s]" (weatherDay0) {channel="meteoblue:weather:metBridge:A51:forecastToday#icon"}
Number todayUV "UV Index [%d]" (weatherDay0) {channel="meteoblue:weather:metBridge:A51:forecastToday#UVIndex"}
Number:Temperature todayTempL "Low Temp [%.2f °F]" <temperature> (weatherDay0) {channel="meteoblue:weather:metBridge:A51:forecastToday#minTemperature"}
Number:Temperature todayTempH "High Temp [%.2f °F]" <temperature> (weatherDay0) {channel="meteoblue:weather:metBridge:A51:forecastToday#maxTemperature"}
Number:Temperature todayTempL "Low Temp [%.2f °F]" <temperature> (weatherDay0) {channel="meteoblue:weather:metBridge:A51:forecastToday#minTemperature"}
Number:Temperature todayTempH "High Temp [%.2f °F]" <temperature> (weatherDay0) {channel="meteoblue:weather:metBridge:A51:forecastToday#maxTemperature"}
Number todayHumM "Mean Humidity [%d %%]" <humidity> (weatherDay0) {channel="meteoblue:weather:metBridge:A51:forecastToday#relativeHumidityMean"}
Number todayPrecPr "Prec. Prob. [%d %%]" (weatherDay0) {channel="meteoblue:weather:metBridge:A51:forecastToday#precipitationProbability"}
Number:Length todayPrec "Total Prec. [%.2f in]" <rain> (weatherDay0) {channel="meteoblue:weather:metBridge:A51:forecastToday#precipitation"}
@ -146,7 +140,7 @@ Number:Speed todayWindSpH "High Wind Speed [%.2f mph]" <wind> (weatherDay0)
demo.sitemap:
````
````perl
sitemap weather label="Weather"
{
Frame label="Weather" {

View File

@ -12,7 +12,6 @@ This binding support 2 different things types
| meteostick_bridge | Bridge | This is the Meteostick USB stick |
| meteostick_davis_iss | Thing | This is the Davis Vue ISS |
## Binding Configuration
The Meteostick things need to be manually added - there is no discovery in the Meteostick binding.
@ -94,7 +93,7 @@ Steps:
Things can be defined in the .things file as follows:
```
```java
meteostick:meteostick_bridge:receiver [ port="/dev/tty.usbserial-AI02XA60", mode=1 ]
meteostick:meteostick_davis_iss:iss (meteostick:meteostick_bridge:receiver) [ channel=1, spoon=0.2 ]
```
@ -103,7 +102,7 @@ Note the configuration options for `port`, `mode`, `channel` and `spoon` above a
### items/meteostick.items
```
```java
Number:Pressure MeteoStickPressure "Meteostick Pressure [%.1f hPa]"{ channel="meteostick:meteostick_bridge:receiver:pressure" }
Number:Temperature DavisVantageVueOutdoorTemperature "ISS Outdoor Temp [%.1f °C]" { channel="meteostick:meteostick_davis_iss:iss:outdoor-temperature" }
Number DavisVantageVueHumidity "ISS Humidity [%.0f %%]" { channel="meteostick:meteostick_davis_iss:iss:humidity" }
@ -119,7 +118,7 @@ Number:Length DavisVantageVueRainCurrentHour "ISS Rain Current Hour [%.1f mm]" {
Replace `YOUR_ID` and `your_password` below with the values from the the Weather Underground registration process.
```
```java
import java.net.URLEncoder
import java.text.SimpleDateFormat
import java.util.Date

View File

@ -37,7 +37,7 @@ To avoid this, there is a discovery configuration parameter `removalGracePeriod`
The default value is 15 seconds.
If you want to change this value just add the following line to your `$OPENHAB_CONF/services/runtime.cfg` file.
```
```text
discovery.miele:removalGracePeriod=30
```
@ -407,7 +407,7 @@ See oven.
## things/miele.things
```
```java
Bridge miele:xgw3000:home [ipAddress="192.168.0.18", interface="192.168.0.5"] {
Things:
Thing fridgefreezer freezer [uid="00124b000424be44#2"]
@ -425,7 +425,7 @@ Bridge miele:xgw3000:home [ipAddress="192.168.0.18", interface="192.168.0.5"] {
## items/miele.items
```
```java
String Dishwasher_State {channel="miele:dishwasher:home:dishwasher:state"}
Number Dishwasher_RawState {channel="miele:dishwasher:home:dishwasher:rawState"}
String Dishwasher_Program "Program [%s]" {channel="miele:dishwasher:home:dishwasher:program"}
@ -473,7 +473,7 @@ DateTime TumbleDryer_FinishTime "Remaining time" <time> {channel="miele:tumb
## sitemaps/miele.sitemap
```
```perl
sitemap miele label="Miele" {
Frame label="Miele" {
Text item=Oven_State label="Oven [%s]" icon="kitchen" {

View File

@ -76,7 +76,6 @@ The account has the following parameters:
| email | required | E-mail address identifying this account. This exists only to distinguish accounts. If the address is changed after authorization then the account needs to be authorized again. |
| locale | optional | The locale to use for full text channels of things from this account. Possible values are `en`, `de`, `da`, `es`, `fr`, `it`, `nl`, `nb`. Default is `en`. |
### Appliance Configuration
The binding configuration UI will show a things-file template containing things for all supported appliances from the paired account.
@ -88,7 +87,6 @@ All Miele cloud appliance things have the following parameters:
| ---------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| deviceIdentifier | required | Technical device identifier uniquely identifying the Miele appliance. Use the discovery result or the things-file template to obtain it. |
## Channels
The following table lists all available channels.
@ -493,7 +491,7 @@ The following chapters list the properties offered by appliances.
### demo.things:
```
```java
Bridge mielecloud:account:home [ email="me@openhab.org", locale="en" ] {
Thing coffee_system 000703261234 "Coffee machine CVA7440" [ deviceIdentifier="000703261234" ]
Thing hob 000160102345 "Cooktop KM7677" [ deviceIdentifier="000160102345" ]
@ -502,7 +500,7 @@ Bridge mielecloud:account:home [ email="me@openhab.org", locale="en" ] {
### demo.items:
```
```java
// Coffee system
Switch coffee_system_remote_control_can_be_started { channel="mielecloud:coffee_system:home:000703261234:remote_control_can_be_started" }
Switch coffee_system_remote_control_can_be_stopped { channel="mielecloud:coffee_system:home:000703261234:remote_control_can_be_stopped" }
@ -541,7 +539,7 @@ String hob_plate_6_power_step { channel="mielecloud:hob:home:00016010
### demo.sitemap:
```
```perl
sitemap demo label="Kitchen"
{
Frame {
@ -620,4 +618,3 @@ Here are some ideas on what could be done with this binding. You have more ideas
## Acknowledgements
The development of this binding was initiated and sponsored by Miele & Cie. KG.

View File

@ -15,90 +15,81 @@ Zigbee2Mqtt provides an alternative method to integrate Xiaomi devices.
| Device | Picture |
| --- | --- |
| Gateway v2 (with radio support) or v3 | ![](https://ae01.alicdn.com/kf/HTB1gF76ciqAXuNjy1Xdq6yYcVXa4/Original-Xiaomi-Mi-Gateway-2-Smart-Home-Kit-Multi-functional-Gateway-Work-with-Mi-Door-Sensor.jpg_300x300.jpg) |
| Mijia Temperature and Humidity Sensor | ![](https://ae01.alicdn.com/kf/HTB1ksk_MXXXXXcWXVXXq6xXFXXXz/Original-Xiaomi-Mi-Smart-Temperature-and-Humidity-Sensor-Put-the-baby-Home-office-Work-With-Android.jpg_300x300.jpg)|
| Aqara Temperature, Humidity and Pressure Sensor | ![](https://ae01.alicdn.com/kf/HTB1fD1URVXXXXaDXFXXq6xXFXXXU/Neue-Original-Xiaomi-Aqara-Intelligente-Luftdruck-Temperatur-Luftfeuchtigkeit-Sensor-Arbeit-Mit-Android-IOS-APP-Fasten-schiff.jpg_300x300.jpg) |
| Mijia Door/Window Sensor | ![](https://ae01.alicdn.com/kf/HTB1WQb3SpXXXXcLXpXXq6xXFXXXz/100-Original-Intelligent-Mini-Mijia-Xiaomi-MI-Door-Window-Sensor-for-Xiaomi-Smart-Home-Suite-Devices.jpg_300x300.jpg) |
| Aqara Door/Window Sensor | ![](https://ae01.alicdn.com/kf/HTB1C2f7RVXXXXbNXpXXq6xXFXXX9/Auf-lager-Original-xiaomi-aqara-Smart-T-ren-und-Fenster-Sensor-Mijia-Smart-home-kit-Zigbee.jpg_300x300.jpg) |
| Mijia Human Body Sensor | ![](https://ae01.alicdn.com/kf/HTB1mvasRXXXXXaZXVXXq6xXFXXXY/XIAOMI-Mi-mijia-Infrared-Motion-Sensor-Smart-Human-Body-Sensor-for-Home-Safety-Smart-Remote-Control.jpg_300x300.jpg) |
| Aqara Motion Sensor (with light intensity support) | ![](https://ae01.alicdn.com/kf/HTB1LaENRFXXXXXNapXXq6xXFXXXZ/Xiaomi-Aqara-Body-Sensor-Light-Intensity-Sensors-ZigBee-wifi-Wireless-Connection-Work-for-xiaomi-smart-home.jpg_300x300.jpg) |
| Smart Socket (Zigbee version) | ![](https://ae01.alicdn.com/kf/HTB17Fy2QXXXXXajaXXXq6xXFXXXQ/Original-Xiaomi-Smart-Socket-Plug-Mi-Zigbee-WiFi-APP-Wireless-Control-Switches-EU-US-AU-Timer.jpg_300x300.jpg) |
| Magic Cube Controller | ![](https://ae01.alicdn.com/kf/HTB1IFoebPuhSKJjSspmq6AQDpXam/Xiaomi-Mi-Magic-Cube-Controller-Zigbee-Version-Controlled-by-Six-Actions-For-Smart-Home-Device-work.jpg_300x300.jpg) |
| Aqara Magic Cube Controller | ![](https://ae01.alicdn.com/kf/HTB1ih7YsL9TBuNjy1zbq6xpepXal/Original-Xiaomi-Aqara-Cube-Magic-Cube-Smart-Home-Controller-Zigbee-Version-6-Gestures-Operation-Mijia-Smart.jpg_300x300.jpg) |
| Aqara Vibration Sensor | ![](https://ae01.alicdn.com/kf/HTB1mjNTKXuWBuNjSszbq6AS7FXaS/Xiaomi-Aqara-Zigbee-Shock-Sensor-Mijia-Aqara-Smart-Motion-Sensor-Vibration-Detection-Alarm-Monitor-for-MiHome.jpg_300x300.jpg) |
| Mijia Wireless Switch | ![](https://ae01.alicdn.com/kf/HTB1qoEAPVXXXXXdaVXXq6xXFXXXr/Original-Xiaomi-Smart-Wireless-Switch-App-Remote-Control-Smart-Home-Intelligent-Device-Accessories-For-Xiaomi-Smart.jpg_300x300.jpg) |
| Aqara Wireless Switch | ![](https://ae01.alicdn.com/kf/HTB17DMORVXXXXbdXFXXq6xXFXXXe/Xiaomi-Mijia-AQara-Smart-Multifunktionale-Intelligente-Drahtlose-Schalter-Schl-ssel-Kreiselkompa-Errichtet-Funktion-Arbeit-Mit-Android.jpg_300x300.jpg) |
| Aqara Wireless Switch (with acceleration sensor) | ![](https://ae01.alicdn.com/kf/HTB1YGiNaNsIL1JjSZFqq6AeCpXaX/Original-xiaomi-Mijia-aqara-wireless-key-Upgraded-with-acceleration-sensor-magic-Mi-cube-sensor-work-with.jpg_300x300.jpg) |
| Aqara Wall Switch (1 & 2 Button / With or Without Neutral Line) | ![](https://ae01.alicdn.com/kf/HTB1VGfGXL9TBuNjy1zbq6xpepXam/Original-Xiaomi-Aqara-Smart-Light-Control-Fire-Wire-Zero-Line-Double-Single-Key-ZiGBee-Wall-Switch.jpg_300x300.jpg) |
| Aqara Wireless Light Control (1 & 2 Button) | ![](https://ae01.alicdn.com/kf/HTB19u.tPVXXXXbbXVXXq6xXFXXXH/Original-Xiaomi-Aqara-Smart-Switch-Light-Control-ZiGBee-Wireless-Key-Wall-Switch-By-Smarphone-Mi-Home.jpg_300x300.jpg) |
| Aqara Curtain Motor | ![](https://ae01.alicdn.com/kf/HTB1jaMXQVXXXXXBXVXXq6xXFXXXF/Original-xiaomi-Aqara-Curtain-motor-Zigbee-wifi-Remote-Control-work-for-Xiaomi-Smart-home-kit-Mi.jpg_300x300.jpg) |
| Aqara Water Leak Sensor | ![](https://ae01.alicdn.com/kf/HTB1zWulSVXXXXaVXXXXq6xXFXXXW/2018-Newest-Xiaomi-Mijia-Aqara-Water-Immersing-Sensor-Flood-Water-Leak-Detector-for-Home-Remote-Alarm.jpg_300x300.jpg) |
| Honeywell Gas Detector | ![](https://ae01.alicdn.com/kf/HTB1F_ffQpXXXXaxXpXXq6xXFXXXS/Xiaomi-Mijia-Honeywell-Smart-Gas-Alarm-CH4-berwachung-Decke-Wand-Montiert-Einfach-Installieren-Typ-Mihome-APP.jpg_300x300.jpg) |
| Honeywell Smoke Detector | ![](https://ae01.alicdn.com/kf/HTB12DGKQpXXXXaeaXXXq6xXFXXXK/Xiaomi-Mijia-Honeywell-Smart-Fire-Alarm-Detector-Progressive-Sound-Photoelectric-Smoke-Sensor-Remote-Linkage-Mihome-APP.jpg_300x300.jpg) |
| Aqara Fingerprint & Keyless Card & PIN Lock | ![](https://ae01.alicdn.com/kf/HTB1lsuqjjuhSKJjSspaq6xFgFXaD/Original-xiaomi-Mijia-aqara-Smart-door-lock-Digital-Touch-Screen-Keyless-Fingerprint-Password-work-to-mi.jpg_300x300.jpg) |
| Gateway v2 (with radio support) or v3 | ![Device Picture](https://ae01.alicdn.com/kf/HTB1gF76ciqAXuNjy1Xdq6yYcVXa4/Original-Xiaomi-Mi-Gateway-2-Smart-Home-Kit-Multi-functional-Gateway-Work-with-Mi-Door-Sensor.jpg_300x300.jpg) |
| Mijia Temperature and Humidity Sensor | ![Device Picture](https://ae01.alicdn.com/kf/HTB1ksk_MXXXXXcWXVXXq6xXFXXXz/Original-Xiaomi-Mi-Smart-Temperature-and-Humidity-Sensor-Put-the-baby-Home-office-Work-With-Android.jpg_300x300.jpg)|
| Aqara Temperature, Humidity and Pressure Sensor | ![Device Picture](https://ae01.alicdn.com/kf/HTB1fD1URVXXXXaDXFXXq6xXFXXXU/Neue-Original-Xiaomi-Aqara-Intelligente-Luftdruck-Temperatur-Luftfeuchtigkeit-Sensor-Arbeit-Mit-Android-IOS-APP-Fasten-schiff.jpg_300x300.jpg) |
| Mijia Door/Window Sensor | ![Device Picture](https://ae01.alicdn.com/kf/HTB1WQb3SpXXXXcLXpXXq6xXFXXXz/100-Original-Intelligent-Mini-Mijia-Xiaomi-MI-Door-Window-Sensor-for-Xiaomi-Smart-Home-Suite-Devices.jpg_300x300.jpg) |
| Aqara Door/Window Sensor | ![Device Picture](https://ae01.alicdn.com/kf/HTB1C2f7RVXXXXbNXpXXq6xXFXXX9/Auf-lager-Original-xiaomi-aqara-Smart-T-ren-und-Fenster-Sensor-Mijia-Smart-home-kit-Zigbee.jpg_300x300.jpg) |
| Mijia Human Body Sensor | ![Device Picture](https://ae01.alicdn.com/kf/HTB1mvasRXXXXXaZXVXXq6xXFXXXY/XIAOMI-Mi-mijia-Infrared-Motion-Sensor-Smart-Human-Body-Sensor-for-Home-Safety-Smart-Remote-Control.jpg_300x300.jpg) |
| Aqara Motion Sensor (with light intensity support) | ![Device Picture](https://ae01.alicdn.com/kf/HTB1LaENRFXXXXXNapXXq6xXFXXXZ/Xiaomi-Aqara-Body-Sensor-Light-Intensity-Sensors-ZigBee-wifi-Wireless-Connection-Work-for-xiaomi-smart-home.jpg_300x300.jpg) |
| Smart Socket (Zigbee version) | ![Device Picture](https://ae01.alicdn.com/kf/HTB17Fy2QXXXXXajaXXXq6xXFXXXQ/Original-Xiaomi-Smart-Socket-Plug-Mi-Zigbee-WiFi-APP-Wireless-Control-Switches-EU-US-AU-Timer.jpg_300x300.jpg) |
| Magic Cube Controller | ![Device Picture](https://ae01.alicdn.com/kf/HTB1IFoebPuhSKJjSspmq6AQDpXam/Xiaomi-Mi-Magic-Cube-Controller-Zigbee-Version-Controlled-by-Six-Actions-For-Smart-Home-Device-work.jpg_300x300.jpg) |
| Aqara Magic Cube Controller | ![Device Picture](https://ae01.alicdn.com/kf/HTB1ih7YsL9TBuNjy1zbq6xpepXal/Original-Xiaomi-Aqara-Cube-Magic-Cube-Smart-Home-Controller-Zigbee-Version-6-Gestures-Operation-Mijia-Smart.jpg_300x300.jpg) |
| Aqara Vibration Sensor | ![Device Picture](https://ae01.alicdn.com/kf/HTB1mjNTKXuWBuNjSszbq6AS7FXaS/Xiaomi-Aqara-Zigbee-Shock-Sensor-Mijia-Aqara-Smart-Motion-Sensor-Vibration-Detection-Alarm-Monitor-for-MiHome.jpg_300x300.jpg) |
| Mijia Wireless Switch | ![Device Picture](https://ae01.alicdn.com/kf/HTB1qoEAPVXXXXXdaVXXq6xXFXXXr/Original-Xiaomi-Smart-Wireless-Switch-App-Remote-Control-Smart-Home-Intelligent-Device-Accessories-For-Xiaomi-Smart.jpg_300x300.jpg) |
| Aqara Wireless Switch | ![Device Picture](https://ae01.alicdn.com/kf/HTB17DMORVXXXXbdXFXXq6xXFXXXe/Xiaomi-Mijia-AQara-Smart-Multifunktionale-Intelligente-Drahtlose-Schalter-Schl-ssel-Kreiselkompa-Errichtet-Funktion-Arbeit-Mit-Android.jpg_300x300.jpg) |
| Aqara Wireless Switch (with acceleration sensor) | ![Device Picture](https://ae01.alicdn.com/kf/HTB1YGiNaNsIL1JjSZFqq6AeCpXaX/Original-xiaomi-Mijia-aqara-wireless-key-Upgraded-with-acceleration-sensor-magic-Mi-cube-sensor-work-with.jpg_300x300.jpg) |
| Aqara Wall Switch (1 & 2 Button / With or Without Neutral Line) | ![Device Picture](https://ae01.alicdn.com/kf/HTB1VGfGXL9TBuNjy1zbq6xpepXam/Original-Xiaomi-Aqara-Smart-Light-Control-Fire-Wire-Zero-Line-Double-Single-Key-ZiGBee-Wall-Switch.jpg_300x300.jpg) |
| Aqara Wireless Light Control (1 & 2 Button) | ![Device Picture](https://ae01.alicdn.com/kf/HTB19u.tPVXXXXbbXVXXq6xXFXXXH/Original-Xiaomi-Aqara-Smart-Switch-Light-Control-ZiGBee-Wireless-Key-Wall-Switch-By-Smarphone-Mi-Home.jpg_300x300.jpg) |
| Aqara Curtain Motor | ![Device Picture](https://ae01.alicdn.com/kf/HTB1jaMXQVXXXXXBXVXXq6xXFXXXF/Original-xiaomi-Aqara-Curtain-motor-Zigbee-wifi-Remote-Control-work-for-Xiaomi-Smart-home-kit-Mi.jpg_300x300.jpg) |
| Aqara Water Leak Sensor | ![Device Picture](https://ae01.alicdn.com/kf/HTB1zWulSVXXXXaVXXXXq6xXFXXXW/2018-Newest-Xiaomi-Mijia-Aqara-Water-Immersing-Sensor-Flood-Water-Leak-Detector-for-Home-Remote-Alarm.jpg_300x300.jpg) |
| Honeywell Gas Detector | ![Device Picture](https://ae01.alicdn.com/kf/HTB1F_ffQpXXXXaxXpXXq6xXFXXXS/Xiaomi-Mijia-Honeywell-Smart-Gas-Alarm-CH4-berwachung-Decke-Wand-Montiert-Einfach-Installieren-Typ-Mihome-APP.jpg_300x300.jpg) |
| Honeywell Smoke Detector | ![Device Picture](https://ae01.alicdn.com/kf/HTB12DGKQpXXXXaeaXXXq6xXFXXXK/Xiaomi-Mijia-Honeywell-Smart-Fire-Alarm-Detector-Progressive-Sound-Photoelectric-Smoke-Sensor-Remote-Linkage-Mihome-APP.jpg_300x300.jpg) |
| Aqara Fingerprint & Keyless Card & PIN Lock | ![Device Picture](https://ae01.alicdn.com/kf/HTB1lsuqjjuhSKJjSspaq6xFgFXaD/Original-xiaomi-Mijia-aqara-Smart-door-lock-Digital-Touch-Screen-Keyless-Fingerprint-Password-work-to-mi.jpg_300x300.jpg) |
## Setup
* Install the binding
* Is your gateway already configured to connect to your WiFi? If not:
- Install the binding
- Is your gateway already configured to connect to your WiFi? If not:
1. Install MiHome app from [Google Play](https://play.google.com/store/apps/details?id=com.xiaomi.smarthome) or [AppStore](https://itunes.apple.com/app/mi-home-xiaomi-for-your-smarthome/id957323480) (your phone may need to be changed to English language first)
2. In the app create a Mi Home account and make sure to set your region to Mainland (China) under Settings -> Locale
3. If asked, do NOT update your gateway to the latest firmware (note that update window may pop up sequentially). If you update, you may not be able to access the developer mode below.
* Enable developer mode of your gateway:
1. In the app create a Mi Home account and make sure to set your region to Mainland (China) under Settings -> Locale
1. If asked, do NOT update your gateway to the latest firmware (note that update window may pop up sequentially). If you update, you may not be able to access the developer mode below.
- Enable developer mode of your gateway:
1. Select your Gateway in the MiHome app
2. Go to the "..." menu on the top right corner and click "About"
3. You now see two options "Smart Home Kit Forum" and "Gameplay Tutorial". Tap 5 times below the "Gameplay Tutorial" in the empty space (not the button itself) until you enable developer mode
4. You should now have 2 extra options listed: `wireless communication protocol` and `hub info`, it may appear in Chinese
5. Choose `wireless communication protocol`
6. Tap the toggle switch to enable WiFi functions. Note down the developer key (aka password), something like: 91bg8zfkf9vd6uw7
7. Make sure you hit the OK button (to the right of the cancel button) to save your changes
8. Now update the gateway to the latest firmware
* Enable developer mode of your gateway (legacy app):
1. Go to the "..." menu on the top right corner and click "About"
1. You now see two options "Smart Home Kit Forum" and "Gameplay Tutorial". Tap 5 times below the "Gameplay Tutorial" in the empty space (not the button itself) until you enable developer mode
1. You should now have 2 extra options listed: `wireless communication protocol` and `hub info`, it may appear in Chinese
1. Choose `wireless communication protocol`
1. Tap the toggle switch to enable WiFi functions. Note down the developer key (aka password), something like: 91bg8zfkf9vd6uw7
1. Make sure you hit the OK button (to the right of the cancel button) to save your changes
1. Now update the gateway to the latest firmware
- Enable developer mode of your gateway (legacy app):
1. Select your Gateway in the MiHome app
2. Go to the "..." menu on the top right corner and click "About"
3. Tap the version number "Plug-in version : 2.XX.X" at the bottom of the screen repeatedly until you enable developer mode
4. You should now have 2 extra options listed: `wireless communication protocol` and `hub info`
5. Choose `wireless communication protocol`
6. Tap the toggle switch to enable WiFi functions. Note down the developer key (aka password), something like: 91bg8zfkf9vd6uw7
7. Make sure you hit the OK button (to the right of the cancel button) to save your changes
8. Now update the gateway to the latest firmware
* In openHAB you should now be able to discover the Xiaomi Gateway
* From now on you don't really need the app anymore. Only if you want to update the gateway firmware or if you want to add devices (see below). But adding devices can also be done without the app (see below)
* Enter the previously noted developer key in openHAB Administration -> Settings -> Things -> Xiaomi Gateway -> Edit -> Developer Key. Save (This is required if you want to be able to send controls to the devices like the light of the gateway)
1. Go to the "..." menu on the top right corner and click "About"
1. Tap the version number "Plug-in version : 2.XX.X" at the bottom of the screen repeatedly until you enable developer mode
1. You should now have 2 extra options listed: `wireless communication protocol` and `hub info`
1. Choose `wireless communication protocol`
1. Tap the toggle switch to enable WiFi functions. Note down the developer key (aka password), something like: 91bg8zfkf9vd6uw7
1. Make sure you hit the OK button (to the right of the cancel button) to save your changes
1. Now update the gateway to the latest firmware
- In openHAB you should now be able to discover the Xiaomi Gateway
- From now on you don't really need the app anymore. Only if you want to update the gateway firmware or if you want to add devices (see below). But adding devices can also be done without the app (see below)
- Enter the previously noted developer key in openHAB Administration -> Settings -> Things -> Xiaomi Gateway -> Edit -> Developer Key. Save (This is required if you want to be able to send controls to the devices like the light of the gateway)
## Connecting devices to the gateway
There are three ways of connecting supported devices to the gateway:
* Online - within the MiHome App
* Offline - manual
- Online - within the MiHome App
- Offline - manual
1. Click 3 times on the Gateway's button
2. Gateway will flash in blue and you will hear female voice in Chinese, you have 30 seconds to include your new device
3. Place the needle into the sensor and hold it for at least 3 seconds
4. You will hear confirmation message in Chinese
5. The device appears in openHAB thing Inbox
* With the binding
1. Gateway will flash in blue and you will hear female voice in Chinese, you have 30 seconds to include your new device
1. Place the needle into the sensor and hold it for at least 3 seconds
1. You will hear confirmation message in Chinese
1. The device appears in openHAB thing Inbox
- With the binding
1. After adding the gateway make sure you have entered the right developer key
2. In the UI, go to your Inbox and trigger a discovery for the binding
3. The gateway flashes in blue and you hear a female voice in Chinese, you have 30 seconds to include your new device
4. Follow the instructions for your device to pair it to the gateway
5. You will hear a confirmation message in Chinese
6. The device appears in openHAB thing Inbox
1. In the UI, go to your Inbox and trigger a discovery for the binding
1. The gateway flashes in blue and you hear a female voice in Chinese, you have 30 seconds to include your new device
1. Follow the instructions for your device to pair it to the gateway
1. You will hear a confirmation message in Chinese
1. The device appears in openHAB thing Inbox
__Hints:__
**Hints:**
* If you don't want to hear the Chinese voice every time, you can disable it by setting the volume to minimum in the MiHome App (same for the blinking light)
- If you don't want to hear the Chinese voice every time, you can disable it by setting the volume to minimum in the MiHome App (same for the blinking light)
* The devices don't need an Internet connection to be working after you have set up the developer mode BUT you will not be able to connect to them via App anymore - easiest way is to block their outgoing Internet connection in your router and enable it later, when you want to check for updates etc. This will ensure that your smart home data stays only with you!
- The devices don't need an Internet connection to be working after you have set up the developer mode BUT you will not be able to connect to them via App anymore - easiest way is to block their outgoing Internet connection in your router and enable it later, when you want to check for updates etc. This will ensure that your smart home data stays only with you!
## Removing devices from the gateway
@ -111,7 +102,8 @@ Just follow the instructions in ["Connecting devices to the gateway"](#connectin
- The binding requires port `9898` to not be used by any other service on the system.
- Make sure multicast traffic is correctly routed between the gateway and your openHAB instance
- To correctly receive multicast traffic, when your openHAB machine is using multiple network interfaces, you might need to configure the optional `interface` property on the `Bridge` Thing, like so:
```
```java
Bridge mihome:bridge:f0b429XXXXXX "Xiaomi Gateway" [ ..., interface="eth0", ... ] {
```
@ -119,7 +111,7 @@ Bridge mihome:bridge:f0b429XXXXXX "Xiaomi Gateway" [ ..., interface="eth0", ...
### xiaomi.things:
```
```java
Bridge mihome:bridge:f0b429XXXXXX "Xiaomi Gateway" [ serialNumber="f0b429XXXXXX", ipAddress="192.168.0.3", port=9898, key="XXXXXXXXXXXXXXXX" ] {
Things:
gateway f0b429XXXXXX "Xiaomi Mi Smart Home Gateway" [itemId="f0b429XXXXXX"]
@ -135,7 +127,7 @@ Bridge mihome:bridge:f0b429XXXXXX "Xiaomi Gateway" [ serialNumber="f0b429XXXXXX"
### xiaomi.items:
```
```java
// Replace <GwID> with itemId of gateway from Things file
// Replace <ID> with itemId of item from Things file
// Gateway
@ -241,7 +233,7 @@ Rollershutter CurtainMotorControl <blinds> { channel="curtain:<GwID>:<ID>:curtai
### xiaomi.rules:
```
```java
rule "Mijia & Aqara Wireless Switch"
when
Channel "mihome:sensor_switch:<GwID>:<ID>:button" triggered
@ -395,7 +387,7 @@ end
### xiaomi.sitemap:
```
```perl
sitemap xiaomi label="Xiaomi" {
// Example for selection of predefined sound file - you can also upload your own files with the official MiHome App and play them!
Frame {
@ -455,14 +447,15 @@ The devices send different types of messages to the gateway.
You have to capture as many of them as possible, so that the device is fully supported in the end.
1. Heartbeat (usually transmitted every 60 minutes)
2. Report (device reports new sensor or status values)
3. Read ACK (binding refreshes all sensor values after a restart of openHAB)
4. Write ACK (device has received a command) __not available for sensor-only devices__
1. Report (device reports new sensor or status values)
1. Read ACK (binding refreshes all sensor values after a restart of openHAB)
1. Write ACK (device has received a command) **not available for sensor-only devices**
### Open a new issue or get your hands dirty
Every little help is welcome, be part of the community!
Post an issue in the GitHub repository with as much information as possible about the new device:
- brand and link to device description
- model name
- content of all the different message types
@ -475,7 +468,7 @@ You can access the whole message contents of the basic device thing with String
That way you can make use of your device, even if it is not supported yet!
The following examples are a demonstration, where a basic device thing for the gateway was manually added.
```
```java
String Gateway_Raw { channel="mihome:basic:xxx:lastMessage" }
String Gateway_Heartbeat { channel="mihome:basic:xxx:heartbeatMessage" }
```
@ -497,16 +490,16 @@ The commands have to be issued as attributes of a JSON Object, e.g. instead of w
The following example uses a rule to enable device pairing on the gateway:
__mihome.items__
#### mihome.items
```
```java
String Gateway_Write { channel="mihome:basic:xxx:writeMessage" }
Switch Gateway_AddDevicesSwitch
```
__mihome.rules__
#### mihome.rules
```
```java
rule "Enable device pairing with gateway as basic device thing"
when
Item Gateway_AddDevicesSwitch changed to ON
@ -514,8 +507,10 @@ then
Gateway_Write.sendCommand("\"join_permission\":\"yes\"")
end
```
You can also send multiple command at once:
```
```java
GatewayWrite.sendCommand("\"rgb\":150000,\"join_permission\":\"yes\"")
```
@ -539,12 +534,13 @@ This makes possible following the communication between the binding and the gate
For the binding to function properly it is very important, that your network config allows the machine running openHAB to receive multicast traffic.
In case you want to check if the communication between the machine and the gateway is working, you can find some hints here.
- Set up the developer communication as described in the Setup section
### Check if your Linux machine receives multicast traffic
- Login to the Linux console
- make sure you have __netcat__ installed
- make sure you have **netcat** installed
- Enter ```netcat -ukl 9898```
- At least every 10 seconds you should see a message coming in from the gateway which looks like
```{"cmd":"heartbeat","model":"gateway","sid":"`xxx","short_id":"0","token":"xxx","data":"{\"ip\":\"`xxx\"}"}```
@ -554,10 +550,12 @@ In case you want to check if the communication between the machine and the gatew
When the computer running openHAB has more than one network interface configured (typically, a VLAN for your segregated IoT devices, and the other for your regular traffic like internet, openHAB panel access, etc), it could be that openHAB will attempt to listen for Multicast traffic of the Gateway on the wrong network interface. That will prevent openHAB and `netcat` from receiving the messages from the Xiaomi Gateway. Within openHAB this manifests by seeing the Gateway and its devices online for a brief period after openHAB startup, after which they timeout and are shown Offline. No channel triggers from the Gateway work in this case.
In order to verify that traffic is actually received by the machine use `tcpdump` on each interface:
- List your network interfaces `ifconfig | grep MULTICAST` or `ip link | grep MULTICAST`
- Use `tcpdump -i <interface> port 9898` for each interface to verify if you receive traffic
If you already know the correct interface, or you found the correct one through tcpdump:
- Configure the `interface` property of the `Bridge` Thing with the correct name (for example `eth0`, etc)
### Check if your Windows/Mac machine receives multicast traffic
@ -568,7 +566,8 @@ If you already know the correct interface, or you found the correct one through
- At least every 10 seconds you should see a message coming in from the gateway which looks like
```{"cmd":"heartbeat","model":"gateway","sid":"`xxx","short_id":"0","token":"xxx","data":"{\"ip\":\"`xxx\"}"}```
__My gateway shows up in openHAB and I have added all devices, but I don't get any value updates:__
**My gateway shows up in openHAB and I have added all devices, but I don't get any value updates:**
- Most likely your machine is not receiving multicast messages
- Check your network config:
- Routers often block multicast - enable it
@ -577,7 +576,8 @@ __My gateway shows up in openHAB and I have added all devices, but I don't get a
- Make sure you don't have any firewall rules blocking multicast
- If you have multiple network interfaces, try to configure the `interface` property of the `Bridge` Thing
__I have connected my gateway to the network but it doesn't show up in openHAB:__
**I have connected my gateway to the network but it doesn't show up in openHAB:**
- Make sure to have the developer mode enabled in the MiHome app
- Reinstall the binding
- Try to update the firmware of the gateway
@ -585,7 +585,8 @@ __I have connected my gateway to the network but it doesn't show up in openHAB:_
- Search the openHAB Community forum
- Contact Xiaomi support - get your gateway replaced
__Nothing works, I'm frustrated and have thrown my gateway into the bin. Now I don't know what to do with all the sensors:__
**Nothing works, I'm frustrated and have thrown my gateway into the bin. Now I don't know what to do with all the sensors:**
Check out the Zigbee2Mqtt project on GitHub.
It allows you to use the sensors without the gateway and get their values through MQTT.
You will need some hardware to act as a gateway which is not expensive.

View File

@ -102,7 +102,6 @@ in case of gateway, instead of defining it as a Thing, use Bridge
`Bridge miio:gateway:lumigateway "Mi Smarter Gateway" [ host="10.10.x.x", token="put here your token", deviceId="326xxxx", model="lumi.gateway.mieu01", communication="direct", cloudServer="de" ]`
# Advanced: Unsupported devices
Newer devices may not yet be supported.
@ -175,11 +174,11 @@ _Cloud connectivity is not working_
The most common problem is a wrong or missing userId/password. Update your Xiaomi cloud userId & password in the [miio binding configuration screen](#binding-configuration).
If the problem persists you can try the following:
* Xiaomi Account verification might be needed. For some users login by the binding is unsuccessful as account verification is required, but the binding currently has no possibilities to handle this.
- Xiaomi Account verification might be needed. For some users login by the binding is unsuccessful as account verification is required, but the binding currently has no possibilities to handle this.
In order to pass validation your (openHAB server) ip need to be validated/confirmed.
Browse to [https://account.xiaomi.com/](https://account.xiaomi.com/) and logon to your account. Note: use the same external ip address as your openHAB server, e.g. you may need to disable your VPN.
* If above is not possible or fails, You can try to find in the binding debug logging a `location url`. Try to login using this url (just after it fails) with your browser.
* Several users also reported success by resetting their Xiaomi password.
- If above is not possible or fails, You can try to find in the binding debug logging a `location url`. Try to login using this url (just after it fails) with your browser.
- Several users also reported success by resetting their Xiaomi password.
If it still fails, you're bit out of luck. You may try to restart openHAB (not just the binding) to clean the cookies.
As the cloud logon process is still little understood, your only luck might be to enable trace logging and see if you can translate the Chinese error code that it returns.
@ -197,7 +196,7 @@ note: Supported means we received feedback from users this device is working wit
For devices with experimental support, we did not yet confirmation that channels are correctly working.
Please feedback your findings for these devices (e.g. Are all channels working, do they contain the right information, is controlling the devices working etc.)
# Channels
## Channels
Depending on the device, different channels are available.
@ -213,8 +212,7 @@ All devices have available the following channels (marked as advanced) besides t
| actions#rpc | String | send commands via cloud. see below |
note: the ADVANCED `actions#commands` and `actions#rpc` channels can be used to send commands that are not automated via the binding. This is available for all devices
e.g. `openhab:send actionCommand 'upd_timer["1498595904821", "on"]'` would enable a pre-configured timer. See https://github.com/marcelrv/XiaomiRobotVacuumProtocol for all known available commands.
e.g. `openhab:send actionCommand 'upd_timer["1498595904821", "on"]'` would enable a pre-configured timer. See <https://github.com/marcelrv/XiaomiRobotVacuumProtocol> for all known available commands.
### Robo Rock vacuum Channels
@ -256,13 +254,11 @@ To (re-)read the file either restart openHAB, restart the binding or alternative
Note, cropping is disabled (hence showing like the maps in OH3.1 and earlier) for any `cropBorder` value < 0.
Note, not all the values need to be in the json file, e.g. a subset of the parameters also works, the parameters not in the `mapConfig.json` will take the default values.
!!!channelList
## Example item file Rockrobo vacuum
```
```java
Group gVac "Xiaomi Robot Vacuum" <fan>
Group gVacStat "Status Details" <status> (gVac)
Group gVacCons "Consumables Usage" <line-increase> (gVac)
@ -306,7 +302,6 @@ Switch lastCompleted "Last Cleaning Completed" (gVacLast) {channel="miio:vac
Image map "Cleaning Map" (gVacLast) {channel="miio:vacuum:034F0E45:cleaning#map"}
```
!!!itemFileExamples
### Country Servers

View File

@ -5,16 +5,14 @@ This binding integrates [Mikrotik](https://mikrotik.com/) [RouterOS](https://hel
## Supported Things
* `routeros` - An instance of the RouterOS device connection
* `interface` - A network interface inside RouterOS device
* `wifiRegistration` - Any wireless client connected to a RouterOS wireless network (regular or CAPsMAN-managed)
- `routeros` - An instance of the RouterOS device connection
- `interface` - A network interface inside RouterOS device
- `wifiRegistration` - Any wireless client connected to a RouterOS wireless network (regular or CAPsMAN-managed)
## Discovery
Discovery is currently not supported, but may be implemented in future versions.
## Bridge Configuration
To use this binding you need at least one RouterOS-powered device (Bridge) accessible to the host running
@ -42,7 +40,6 @@ The RouterOS Bridge configuration parameters are:
**All things provided by this binding require a working bridge to be set up.**
### Bridge Channels
| Channel | Type | Description | Comment |
@ -56,8 +53,6 @@ The RouterOS Bridge configuration parameters are:
| cpuLoad | Number:Dimensionless | CPU load percentage | |
| upSince | DateTime | Time when thing got up | |
## WiFi Client Thing Configuration
> Thing type: `wifiRegistration`
@ -101,15 +96,15 @@ The WiFi client thing configuration parameters are:
Represents a network interface from RouterOS system (ethernet, wifi, vpn, etc.)
At the moment the binding supports the following RouterOS interface types:
* `ether`
* `bridge`
* `wlan`
* `cap`
* `pppoe-out`
* `ppp-out`
* `lte`
* `l2tp-in`
* `l2tp-out`
- `ether`
- `bridge`
- `wlan`
- `cap`
- `pppoe-out`
- `ppp-out`
- `lte`
- `l2tp-in`
- `l2tp-out`
The interface thing configuration parameters are:
@ -161,9 +156,9 @@ Common for all kinds of interfaces:
**Change config options accordingly.**
_things/mikrotik.things_
### things/mikrotik.things
```
```java
Bridge mikrotik:routeros:rb1 "My RouterBoard" [ host="192.168.0.1", port=8728, login="openhab", password="thatsasecret", refresh=10 ] {
Thing interface eth1 "Eth1" [ name="ether1" ]
Thing interface eth2 "Eth2" [ name="ether2-wan1" ]
@ -175,10 +170,9 @@ Bridge mikrotik:routeros:rb1 "My RouterBoard" [ host="192.168.0.1", port=8728, l
}
```
### items/mikrotik.items
_items/mikrotik.items_
```
```java
Group gRB1 "RB3011 System"
Number:DataAmount My_RB_3011_Free_Space "Free space" (gRB1) {channel="mikrotik:routeros:rb1:freeSpace"}
Number:DataAmount My_RB_3011_Total_Space "Total space" (gRB1) {channel="mikrotik:routeros:rb1:totalSpace"}
@ -357,9 +351,9 @@ Number Tablet_2_Tx_Packets "Transmitted packets" (gRB
Number Tablet_2_Rx_Packets "Received packets" (gRB1Wifi2) {channel="mikrotik:wifiRegistration:rb1:wifi2:rxPackets"}
```
_sitemaps/mikrotik.sitemap_
### sitemaps/mikrotik.sitemap
```
```perl
sitemap mikrotik label="Mikrotik Binding Demo"
{
Frame label="RouterBOARD 1" {

View File

@ -38,36 +38,37 @@ configuration file.
iBox and iBox2 have the version 6, older Milight bridges have the version 3.
The ID is the MAC address of the bridge in hexadecimal digits.
Bridge milight:bridgeV3:mybridge [ host="192.168.0.70", bridgeid="ACCF23A6C0B4", passwordByte1=0, passwordByte2=0, repeat=2, delayTime=75 ] {
```java
Bridge milight:bridgeV3:mybridge [ host="192.168.0.70", bridgeid="ACCF23A6C0B4", passwordByte1=0, passwordByte2=0, repeat=2, delayTime=75 ] {
Thing whiteLed myWhite [ zone="0" ]
Thing rgbwwLed myRGB [ zone="4" ]
Thing rgbLed myOldRGB [ zone="1" ]
}
}
```
The Thing configuration for the bridge uses the following syntax
* Bridge milight:bridgeV3:<any name> host="<IP-Address of bridge>", bridgeid="<mac>"
* Bridge milight:bridgeV6:<any name> host="<IP-Address of bridge>", bridgeid="<mac>", passwordByte1="<0-255>", passwordByte2="<0-255>"
- Bridge milight:bridgeV3:<any name> host="<IP-Address of bridge>", bridgeid="<mac>"
- Bridge milight:bridgeV6:<any name> host="<IP-Address of bridge>", bridgeid="<mac>", passwordByte1="<0-255>", passwordByte2="<0-255>"
Optionally, the following parameters can be added
* repeat=<integer> (defaults to 1, if not defined)
- repeat=<integer> (defaults to 1, if not defined)
Usually the bridge receives all commands albeit UDP is used. But the actual bulbs might be slightly out of bridge radio range and it sometimes helps to send commands multiple times.
* delayTime=<integer for ms> (defaults to 100, if not defined)
- delayTime=<integer for ms> (defaults to 100, if not defined)
Time to wait before sending another command to the bridge. It is safe to have a wait time of 1/10s but usually sufficient to just wait 50ms. If the value is too high, commands queue up.
The Thing configuration for the bulbs uses the following syntax:
Thing <type of bulb> <any name> zone="<0-4>"
The following bulb types are valid for configuration:
* rgbv2Led: The very first available bulb. Not very common anymore.
* whiteLed: The dual white bulbs (with cold/warm white) used with v3-v5 bridges.
* rgbLed: The rgb+white bulbs (with cold/warm white) used with v3-v5 bridges. About 4080 colors (255 colors x 16 brightness steps).
* rgbiboxLed: The iBox bridge integrated color bulb without a dedicated white channel.
* rgbwLed: The 2016/2017 color bulb without saturation support. About 6630 (255x26) colors.
* rgbwwLed: The 2016/2017 color bulb with saturation support. About 1.044.480 (255x64x64) different color shades. Use this also for the newer generation of the dual white bulbs.
- rgbv2Led: The very first available bulb. Not very common anymore.
- whiteLed: The dual white bulbs (with cold/warm white) used with v3-v5 bridges.
- rgbLed: The rgb+white bulbs (with cold/warm white) used with v3-v5 bridges. About 4080 colors (255 colors x 16 brightness steps).
- rgbiboxLed: The iBox bridge integrated color bulb without a dedicated white channel.
- rgbwLed: The 2016/2017 color bulb without saturation support. About 6630 (255x26) colors.
- rgbwwLed: The 2016/2017 color bulb with saturation support. About 1.044.480 (255x64x64) different color shades. Use this also for the newer generation of the dual white bulbs.
The zone number is either 0 for meaning all bulbs of the same type or a valid zone number (1-4).
Future bridges may support more zones.
@ -76,52 +77,60 @@ Future bridges may support more zones.
For dual white bulbs these channels are supported:
ledbrightness Controls the brightness of your bulbs
ledtemperature Changes from cold white to warm white and vice versa
lednightmode Dims your bulbs to a very low level to use them as a night light
animation_mode_relative Changes the animation mode. Use an IncreaseDecrease type of widget
```text
ledbrightness Controls the brightness of your bulbs
ledtemperature Changes from cold white to warm white and vice versa
lednightmode Dims your bulbs to a very low level to use them as a night light
animation_mode_relative Changes the animation mode. Use an IncreaseDecrease type of widget
```
For rgbv2Led bulbs these channels are supported:
ledbrightness Controls the brightness of your bulbs
ledcolor Changes the color and brightness of your rgb bulbs when bound to a colorpicker
```text
ledbrightness Controls the brightness of your bulbs
ledcolor Changes the color and brightness of your rgb bulbs when bound to a colorpicker
or just the brightness if bound to a Dimmer or controls On/Off if bound to a switch.
animation_mode_relative Changes the animation mode. Use an IncreaseDecrease type of widget
animation_mode_relative Changes the animation mode. Use an IncreaseDecrease type of widget
```
For rgbLed bulbs these channels are supported:
lednightmode Dims your bulbs to a very low level to use them as a night light
ledwhitemode Disable all color (saturation is 0)
ledbrightness Controls the brightness of your bulbs
ledcolor Changes the color and brightness of your rgb bulbs when bound to a colorpicker
```text
lednightmode Dims your bulbs to a very low level to use them as a night light
ledwhitemode Disable all color (saturation is 0)
ledbrightness Controls the brightness of your bulbs
ledcolor Changes the color and brightness of your rgb bulbs when bound to a colorpicker
or just the brightness if bound to a Dimmer or controls On/Off if bound to a switch
animation_mode_relative Changes the animation mode. Use an IncreaseDecrease type of widget
animation_speed_relative Changes the speed of your chosen animation mode
animation_mode_relative Changes the animation mode. Use an IncreaseDecrease type of widget
animation_speed_relative Changes the speed of your chosen animation mode
```
For rgbwLed/rgbwwLed bulbs these channels are supported:
lednightmode Dims your bulbs to a very low level to use them as a night light
ledwhitemode Disable all color (saturation is 0)
ledbrightness Controls the brightness of your bulbs
ledsaturation Controls the saturation of your bulbs (not for rgbwLed!)
ledtemperature Changes from cold white to warm white and vice versa (not for rgbwLed!)
ledcolor Changes the color and brightness of your rgb bulbs when bound to a colorpicker
```text
lednightmode Dims your bulbs to a very low level to use them as a night light
ledwhitemode Disable all color (saturation is 0)
ledbrightness Controls the brightness of your bulbs
ledsaturation Controls the saturation of your bulbs (not for rgbwLed!)
ledtemperature Changes from cold white to warm white and vice versa (not for rgbwLed!)
ledcolor Changes the color and brightness of your rgb bulbs when bound to a colorpicker
or just the brightness if bound to a Dimmer or controls On/Off if bound to a switch
animation_mode Changes the animation mode. Chose between animation mode 1 to 9
animation_mode_relative Changes the animation mode. Use an IncreaseDecrease type of widget
animation_speed_relative Changes the speed of your chosen animation mode
ledlink Sync bulb to this zone within 3 seconds of light bulb socket power on
ledunlink Clear bulb from this zone within 3 seconds of light bulb socket power on
animation_mode Changes the animation mode. Chose between animation mode 1 to 9
animation_mode_relative Changes the animation mode. Use an IncreaseDecrease type of widget
animation_speed_relative Changes the speed of your chosen animation mode
ledlink Sync bulb to this zone within 3 seconds of light bulb socket power on
ledunlink Clear bulb from this zone within 3 seconds of light bulb socket power on
```
Limitations:
* Only the rgbww bulbs support changing their saturation, for rgbv2Led/rgbwLed the colorpicker will only set the hue and brightness and change to white mode if the saturation is under a given threshold of 50%.
- Only the rgbww bulbs support changing their saturation, for rgbv2Led/rgbwLed the colorpicker will only set the hue and brightness and change to white mode if the saturation is under a given threshold of 50%.
## Example
.items
```
```java
Switch Light_Groundfloor {channel="milight:whiteLed:ACCF23A6C0B4:0:ledbrightness"} //Switch for all white bulbs
Dimmer Light_LivingroomB {channel="milight:whiteLed:ACCF23A6C0B4:1:ledbrightness"} //Dimmer changing brightness for bulb in zone 1
Dimmer Light_LivingroomC {channel="milight:whiteLed:ACCF23A6C0B4:1:ledtemperature"} //Dimmer changing colorTemperature for bulb in zone 1
@ -145,7 +154,7 @@ Switch AnimationModeRgbWW {channel="milight:rgbwwLed:ACCF23A6C0B4:5:animation_mo
.sitemap
```
```perl
Switch item=AnimationMode mappings=[DECREASE='-', INCREASE='+']
Switch item=AnimationSpeed mappings=[DECREASE='-', INCREASE='+']
Switch item=Light_GroundfloorN mappings=[ON='Night Mode']

View File

@ -1,15 +1,15 @@
# Millheat Binding
This binding integrates the Mill Wi-Fi enabled panel heaters. See https://www.millheat.com/mill-wifi/
This binding integrates the Mill Wi-Fi enabled panel heaters. See <https://www.millheat.com/mill-wifi/>
## Supported Things
This binding supports all Wi-Fi enabled heaters as well as the Wi-Fi socket.
* `account` = Mill Heating API - the account bridge
* `heater` = Panel/standalone heater
* `room` = A room defined in the mobile app
* `home` = A home defined in the mobile app
- `account` = Mill Heating API - the account bridge
- `heater` = Panel/standalone heater
- `room` = A room defined in the mobile app
- `home` = A home defined in the mobile app
## Discovery
@ -23,25 +23,25 @@ See full example below for how to configure using thing files.
### Account
* `username` = email address used in app
* `password` = password used in app
* `refreshInterval` = number of seconds between refresh calls to the server
- `username` = email address used in app
- `password` = password used in app
- `refreshInterval` = number of seconds between refresh calls to the server
### Home
* `homeId` = id of home, type number (not string). Use auto discovery to find this value
- `homeId` = id of home, type number (not string). Use auto discovery to find this value
### Room
* `roomId` = id of room, type number (not string). Use auto discovery to find this value
- `roomId` = id of room, type number (not string). Use auto discovery to find this value
### Heater
* `macAddress` = network mac address of device in UPPERCASE.
- `macAddress` = network mac address of device in UPPERCASE.
Can be found in the app by viewing devices. Or you can find it during discovery. Used for heaters connected to a room.
* `heaterId` = id of device/heater, type number (not string)
- `heaterId` = id of device/heater, type number (not string)
Use auto discovery to find this value. Used to identify independent heaters or heaters connected to a room.
* `power` = number of watts this heater is consuming when active.
- `power` = number of watts this heater is consuming when active.
Used to provide data for the currentPower channel.
Either `macAddres` or `heaterId` must be specified.
@ -88,7 +88,7 @@ Either `macAddres` or `heaterId` must be specified.
millheat.things:
```
```java
Bridge millheat:account:home "Millheat account" [username="email@address.com",password="topsecret"] {
Thing home monaco "Penthouse Monaco" [ homeId=100000000000000 ] // Note: numeric value
Thing room office "Office room" [ roomId=200000000000000 ] Note: numeric value
@ -98,7 +98,7 @@ Bridge millheat:account:home "Millheat account" [username="email@address.com",pa
millheat.items:
```
```java
// Items connected to HOME channels
Number:Temperature Vacation_Target_Temperature "Vacation target temp [%d %unit%]" <temperature> {channel="millheat:home:home:monaco:vacationModeTargetTemperature"}
Switch Vacation_Mode "Vacation mode" <vacation> {channel="millheat:home:home:monaco:vacationMode"}
@ -131,7 +131,7 @@ Switch Heating_Office_Heater_MasterSwitch "Heater masterswitch [%s]" <switch> {
In order to activate vacation mode, follow these steps in a rule:
* Set start time (DateTime) on `DateTime` item linked to channel type `vacationModeStart`
* Set end time (DateTime) on `DateTime` item linked to channel type `vacationModeEnd`
* Activate vacation mode on `Switch` item linked to channel type `vacationMode`
* Optional - set advanced vacation mode on `Switch` item linked to channel type `vacationModeAdvanced`
- Set start time (DateTime) on `DateTime` item linked to channel type `vacationModeStart`
- Set end time (DateTime) on `DateTime` item linked to channel type `vacationModeEnd`
- Activate vacation mode on `Switch` item linked to channel type `vacationMode`
- Optional - set advanced vacation mode on `Switch` item linked to channel type `vacationModeAdvanced`

View File

@ -35,7 +35,6 @@ Depending on the thing type, different channels are provided:
| players | Number | The number of players on server |
| maxPlayers | Number | The maximum number of players on server |
### Player
| Channel Type ID | Item Type | Description |
@ -50,14 +49,12 @@ Depending on the thing type, different channels are provided:
| playerLocation | Location | The player location |
| playerGameMode | Number | The players game mode |
### Sign
| Channel Type ID | Item Type | Description |
|-----------------|-----------|----------------------------------------------|
| signActive | Switch | Does the sign have powered redstone below it |
#### Active switch (Controllable from openHAB)
<a href="https://drive.google.com/uc?export=view&id=0B3UO0c11-Q6hMkNZSjJidGk4b28"><img src="https://drive.google.com/uc?export=view&id=0B3UO0c11-Q6hMkNZSjJidGk4b28" style="width: 500px; max-width: 100%; height: auto" title="Click for the larger version." /></a>
@ -72,7 +69,7 @@ The easiest method to add Minecraft servers, players, and signs is use the autom
You can also manually define the objects using thing configuration files.
Players and signs are connected through Minecraft server [bridges](https://www.openhab.org/docs/configuration/things.html#defining-bridges-using-files).
```xtend
```java
Bridge minecraft:server:myminecraftserver "Minecraft server for Friends" @ "Minecraft" [ hostname="192.168.1.100", port=10692 ] {
Thing player my_name "My Minecraft User" @ "Minecraft" [ playerName="minecraft_username" ]
Thing player friends_name "My Friend's Minecraft User" @ "Minecraft" [ playerName="friends_username" ]

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