[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:
@ -23,31 +23,31 @@ This binding works offline by [implementing the wire protocol](https://osswww.ec
## Discussion
If you have any issues or feedback, please feel free to [get in touch via the community forum](https://community.openhab.org/t/fine-offset-weather-station-binding-discussion/134167)
If you have any issues or feedback, please feel free to [get in touch via the community forum](https://community.openhab.org/t/fine-offset-weather-station-binding-discussion/134167)
## Supported Things
- `weatherstation`: A Fine Offset gateway device with the ThingTypeUID `fineoffsetweatherstation:weatherstation` which supports the [wire protocol](https://osswww.ecowitt.net/uploads/20220407/WN1900%20GW1000,1100%20WH2680,2650%20telenet%20v1.6.4.pdf) e.g.:
- HP2550
- HP3500
- GW1000
- GW1001
- GW1002
- GW1003
- GW1100
- GW2001
- WN1900
- WN1910
- WH2350
- WH2600
- WH2610
- WH2620
- WH2650 (tested)
- WH2680
- WH2900
- WH2950
- WS980 ELV (tested)
- WittBoy (tested)
- HP2550
- HP3500
- GW1000
- GW1001
- GW1002
- GW1003
- GW1100
- GW2001
- WN1900
- WN1910
- WH2350
- WH2600
- WH2610
- WH2620
- WH2650 (tested)
- WH2680
- WH2900
- WH2950
- WS980 ELV (tested)
- WittBoy (tested)
- `sensor`: A Fine Offset sensor which is connected to the bridge with the ThingTypeUID `fineoffsetweatherstation:sensor`.
Since the gateway collects all the sensor data and harmonizes them, the sensor thing itself will only hold information about the signal and battery status.
This is a list of sensors supported by the protocol:
@ -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
@ -262,13 +262,13 @@ Valid sensors:
| sensor-co2-co2 | Number:Dimensionless | R | CO2 |
| sensor-co2-co2-24-hour-average | Number:Dimensionless | R | CO2 24 Hour Average |
| leaf-wetness-channel-1 | Number:Dimensionless | R | Leaf Moisture Channel 1 |
| leaf-wetness-channel-2 | Number:Dimensionless | R | Leaf Moisture Channel 2 |
| leaf-wetness-channel-3 | Number:Dimensionless | R | Leaf Moisture Channel 3 |
| leaf-wetness-channel-4 | Number:Dimensionless | R | Leaf Moisture Channel 4 |
| leaf-wetness-channel-5 | Number:Dimensionless | R | Leaf Moisture Channel 5 |
| leaf-wetness-channel-6 | Number:Dimensionless | R | Leaf Moisture Channel 6 |
| leaf-wetness-channel-7 | Number:Dimensionless | R | Leaf Moisture Channel 7 |
| leaf-wetness-channel-8 | Number:Dimensionless | R | Leaf Moisture Channel 8 |
| leaf-wetness-channel-2 | Number:Dimensionless | R | Leaf Moisture Channel 2 |
| leaf-wetness-channel-3 | Number:Dimensionless | R | Leaf Moisture Channel 3 |
| leaf-wetness-channel-4 | Number:Dimensionless | R | Leaf Moisture Channel 4 |
| leaf-wetness-channel-5 | Number:Dimensionless | R | Leaf Moisture Channel 5 |
| leaf-wetness-channel-6 | Number:Dimensionless | R | Leaf Moisture Channel 6 |
| leaf-wetness-channel-7 | Number:Dimensionless | R | Leaf Moisture Channel 7 |
| leaf-wetness-channel-8 | Number:Dimensionless | R | Leaf Moisture Channel 8 |
| piezo-rain-rate | Number:VolumetricFlowRate | R | Piezo - Rainfall Rate |
| piezo-rain-event | Number:Length | R | Piezo - Amount of Rainfall At the last Rain |
| piezo-rain-hour | Number:Length | R | Piezo - Rainfall Current Hour |
@ -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",
@ -303,14 +303,14 @@ Bridge fineoffsetweatherstation:gateway:3906700515 "Weather station" [
pollingInterval="16",
protocol="DEFAULT"
] {
Thing sensor WH25 "WH25" [sensor="WH25"]
Thing sensor WH65 "WH65" [sensor="WH65"]
Thing sensor WH25 "WH25" [sensor="WH25"]
Thing sensor WH65 "WH65" [sensor="WH65"]
}
```
_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

@ -1,4 +1,4 @@
# Flic Button Binding
# Flic Button Binding
openHAB binding for using [Flic Buttons](https://flic.io/)
with a [fliclib-linux-hci](https://github.com/50ButtonsEach/fliclib-linux-hci) bridge.
@ -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,11 +70,12 @@ 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
1. Setup and run flicd as described in [fliclib-linux-hci](https://github.com/50ButtonsEach/fliclib-linux-hci).
1. Setup and run flicd as described in [fliclib-linux-hci](https://github.com/50ButtonsEach/fliclib-linux-hci).
Please consider that you need a separate Bluetooth adapter. Shared usage with other Bluetooth services (e.g. Bluez)
is not possible.
1. Connect your buttons to flicd using the simpleclient as described in
@ -92,16 +93,16 @@ 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"]
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"]
}
```
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

@ -1,6 +1,6 @@
# FMI Weather Binding
This binding integrates to [the Finnish Meteorological Institute (FMI) Open Data API](https://en.ilmatieteenlaitos.fi/open-data).
This binding integrates to [the Finnish Meteorological Institute (FMI) Open Data API](https://en.ilmatieteenlaitos.fi/open-data).
Binding provides access to weather observations from FMI weather stations and [HIRLAM weather forecast model](https://en.ilmatieteenlaitos.fi/weather-forecast-models) forecasts.
Forecast covers all of Europe, see previous link for more information.
@ -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,17 +107,17 @@ String RadioInfo2 "Radio Info2" { channel="fsinternetradio:radio:radioInKitchen:
demo.sitemap:
```
```perl
sitemap demo label="Main Menu"
{
Frame {
Switch item=RadioPower
Slider visibility=[RadioPower==ON] item=RadioVolume
Switch visibility=[RadioPower==ON] item=RadioMute
Selection visibility=[RadioPower==ON] item=RadioPreset mappings=[0="Favourit 1", 1="Favourit 2", 2="Favourit 3", 3="Favourit 4"]
Selection visibility=[RadioPower==ON] item=RadioMode mappings=[0="Internet Radio", 1="Musik Player", 2="DAB", 3="FM", 4="AUX"]
Text visibility=[RadioPower==ON] item=RadioInfo1
Text visibility=[RadioPower==ON] item=RadioInfo2
}
Frame {
Switch item=RadioPower
Slider visibility=[RadioPower==ON] item=RadioVolume
Switch visibility=[RadioPower==ON] item=RadioMute
Selection visibility=[RadioPower==ON] item=RadioPreset mappings=[0="Favourit 1", 1="Favourit 2", 2="Favourit 3", 3="Favourit 4"]
Selection visibility=[RadioPower==ON] item=RadioMode mappings=[0="Internet Radio", 1="Musik Player", 2="DAB", 3="FM", 4="AUX"]
Text visibility=[RadioPower==ON] item=RadioInfo1
Text visibility=[RadioPower==ON] item=RadioInfo2
}
}
```

View File

@ -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 |
@ -64,7 +62,7 @@ Image channel supports following options:
When an image file is uploaded to FTP server, the binding tries to find the trigger channel whose filename matches the upload image filename.
If no match is found, no channel is updated.
The filename parameter supports regular expression patterns.
See more details in the Things example.
See more details in the Things example.
Trigger channels supports following options:
@ -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,31 +135,31 @@ 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
```
**Notes and known limitations:**
**Notes and known limitations:**
When the binding sends a command to a device, it communicates only with the Gardena smart system integration API.
It has no control over whether the command is sent from the online service via your gateway to the device.
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,30 +3,29 @@
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.
To make it simple, IPX800 is a simple device that drives output and retrieves input.
To make it simple, IPX800 is a simple device that drives output and retrieves input.
On input we generally connect push buttons (for instance house switchs), on ouputs we can connect light bulbs for instance.
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 :
@ -44,7 +43,7 @@ The thing provides four groups of channels.
### Digital Inputs
This represents the inputs of the PLC. Each can be open or closed.
This represents the inputs of the PLC. Each can be open or closed.
They are usually commuted by physical devices like pushbuttons, magnets...
#### Digital Input Channels (contacts)
@ -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,12 +30,11 @@ 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
All channels are read-only.
All channels are read-only.
| channel | type | description |
|-------------------------|----------------------|-------------------------------------------|
@ -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

@ -23,7 +23,7 @@ The apiVersion 2 is only available for Go-eCharger with new hardware revision (C
## Channels
Currently available channels are
Currently available channels are
| Channel ID | Item Type | Description | API version |
|--------------------------|--------------------------|---------------------------------------------------------------|-------------------|
| maxCurrent | Number:ElectricCurrent | Maximum current allowed to use for charging | 1 (r/w), 2 (r/w) |
@ -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,12 +137,12 @@ 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"}
Number batteryEX "Battery level" {channel="gpstracker:tracker:1:batteryLevel"}
Number:Length accuracyEX "GPS Accuracy [%d m]" {channel="gpstracker:tracker:1:gpsAccuracy"}
Location locationEX "Location" {channel="gpstracker:tracker:1:lastLocation"}
DateTime lastSeenEX "Last seen" {channel="gpstracker:tracker:1:lastReport"}
Number batteryEX "Battery level" {channel="gpstracker:tracker:1:batteryLevel"}
Number:Length accuracyEX "GPS Accuracy [%d m]" {channel="gpstracker:tracker:1:gpsAccuracy"}
//linking switch item to regionTrigger channel. assuming the Home distance channel is defined in the binding config (see above)
Switch atHomeEX "Home presence" {channel="gpstracker:tracker:EX:regionTrigger" [profile="gpstracker:trigger-geofence", regionName="Home"]}
@ -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

@ -2,7 +2,7 @@
This binding integrates Air Conditioners that use the GREE protocol (GREE, Sinclair and others).
Note: The Air Conditioner must already be set-up on the WiFi network and must have a fixed IP Address.
Note: The Air Conditioner must already be set-up on the WiFi network and must have a fixed IP Address.
## Supported Things
@ -11,7 +11,7 @@ This binding supports one Thing type `airconditioner`.
## Discovery
Once the Air Conditioner is on the network (WiFi active) it could be discovered automatically.
An IP broadcast message is sent and every responding unit gets added to the Inbox.
An IP broadcast message is sent and every responding unit gets added to the Inbox.
## Binding Configuration
@ -26,7 +26,7 @@ No binding configuration is required.
| refresh | Integer | Refresh interval in seconds for polling the device status. |
| currentTemperatureOffset | Decimal | Offset in Celsius for the current temperature value received from the device. |
The Air Conditioner's IP address is mandatory, all other parameters are optional.
The Air Conditioner's IP address is mandatory, all other parameters are optional.
If the broadcast is not set (default) it will be derived from openHAB's network setting (Check Network Settings in the openHAB UI).
Only change this if you have a good reason to.
@ -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

@ -11,35 +11,35 @@ 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 |
| Powercorn | `powercorn` | EnergyGrain | untested |
| Biocom | `biocom` | Pellets | untested |
| Pro | `pro` | Pellets or WoodChips | untested |
| Therm | `therm` | Pellets | untested |
| Generic | `generic` | - | use, if none from above |
| 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 |
| Powercorn | `powercorn` | EnergyGrain | untested |
| Biocom | `biocom` | Pellets | untested |
| Pro | `pro` | Pellets or WoodChips | untested |
| Therm | `therm` | Pellets | untested |
| Generic | `generic` | - | use, if none from above |
### 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/. | |
| `refreshInterval` | Interval the Guntamatic Heating System is polled in seconds | `60` |
| `encoding` | Code page used by the Guntamatic Heating System | `windows-1252` |
| 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/>. | |
| `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 |
| `program` | Parameter used by `controlProgram` channel | all |
| `wwHeat` | Parameter used by `controlWwHeat` channels | all |
| 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 |
| `program` | Parameter used by `controlProgram` channel | all |
| `wwHeat` | Parameter used by `controlWwHeat` channels | all |
## Channels
@ -47,25 +47,25 @@ 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 |
| `controlHeatCircProgram1` | Set Heat Circle 1 Program (`OFF`, `NORMAL`, `HEAT`, `LOWER`) | `String` | | 🔐 W1 | R/W | true |
| `controlHeatCircProgram2` | Set Heat Circle 2 Program (`OFF`, `NORMAL`, `HEAT`, `LOWER`) | `String` | | 🔐 W1 | R/W | true |
| `controlHeatCircProgram3` | Set Heat Circle 3 Program (`OFF`, `NORMAL`, `HEAT`, `LOWER`) | `String` | | 🔐 W1 | R/W | true |
| `controlHeatCircProgram4` | Set Heat Circle 4 Program (`OFF`, `NORMAL`, `HEAT`, `LOWER`) | `String` | | 🔐 W1 | R/W | true |
| `controlHeatCircProgram5` | Set Heat Circle 5 Program (`OFF`, `NORMAL`, `HEAT`, `LOWER`) | `String` | | 🔐 W1 | R/W | true |
| `controlHeatCircProgram6` | Set Heat Circle 6 Program (`OFF`, `NORMAL`, `HEAT`, `LOWER`) | `String` | | 🔐 W1 | R/W | true |
| `controlHeatCircProgram7` | Set Heat Circle 7 Program (`OFF`, `NORMAL`, `HEAT`, `LOWER`) | `String` | | 🔐 W1 | R/W | true |
| `controlHeatCircProgram8` | Set Heat Circle 8 Program (`OFF`, `NORMAL`, `HEAT`, `LOWER`) | `String` | | 🔐 W1 | R/W | true |
| `controlWwHeat0` | Trigger Warm Water Circle 0 (`RECHARGE`) | `String` | | 🔐 W1 | R/W | true |
| `controlWwHeat1` | Trigger Warm Water Circle 1 (`RECHARGE`) | `String` | | 🔐 W1 | R/W | true |
| `controlWwHeat2` | Trigger Warm Water Circle 2 (`RECHARGE`) | `String` | | 🔐 W1 | R/W | true |
| `controlExtraWwHeat0` | Trigger Extra Warm Water Circle 0 (`RECHARGE`) | `String` | | 🔐 W1 | R/W | true |
| `controlExtraWwHeat1` | Trigger Extra Warm Water Circle 1 (`RECHARGE`) | `String` | | 🔐 W1 | R/W | true |
| `controlExtraWwHeat2` | Trigger Extra Warm Water Circle 2 (`RECHARGE`) | `String` | | 🔐 W1 | R/W | true |
| 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 |
| `controlHeatCircProgram1` | Set Heat Circle 1 Program (`OFF`, `NORMAL`, `HEAT`, `LOWER`) | `String` | | 🔐 W1 | R/W | true |
| `controlHeatCircProgram2` | Set Heat Circle 2 Program (`OFF`, `NORMAL`, `HEAT`, `LOWER`) | `String` | | 🔐 W1 | R/W | true |
| `controlHeatCircProgram3` | Set Heat Circle 3 Program (`OFF`, `NORMAL`, `HEAT`, `LOWER`) | `String` | | 🔐 W1 | R/W | true |
| `controlHeatCircProgram4` | Set Heat Circle 4 Program (`OFF`, `NORMAL`, `HEAT`, `LOWER`) | `String` | | 🔐 W1 | R/W | true |
| `controlHeatCircProgram5` | Set Heat Circle 5 Program (`OFF`, `NORMAL`, `HEAT`, `LOWER`) | `String` | | 🔐 W1 | R/W | true |
| `controlHeatCircProgram6` | Set Heat Circle 6 Program (`OFF`, `NORMAL`, `HEAT`, `LOWER`) | `String` | | 🔐 W1 | R/W | true |
| `controlHeatCircProgram7` | Set Heat Circle 7 Program (`OFF`, `NORMAL`, `HEAT`, `LOWER`) | `String` | | 🔐 W1 | R/W | true |
| `controlHeatCircProgram8` | Set Heat Circle 8 Program (`OFF`, `NORMAL`, `HEAT`, `LOWER`) | `String` | | 🔐 W1 | R/W | true |
| `controlWwHeat0` | Trigger Warm Water Circle 0 (`RECHARGE`) | `String` | | 🔐 W1 | R/W | true |
| `controlWwHeat1` | Trigger Warm Water Circle 1 (`RECHARGE`) | `String` | | 🔐 W1 | R/W | true |
| `controlWwHeat2` | Trigger Warm Water Circle 2 (`RECHARGE`) | `String` | | 🔐 W1 | R/W | true |
| `controlExtraWwHeat0` | Trigger Extra Warm Water Circle 0 (`RECHARGE`) | `String` | | 🔐 W1 | R/W | true |
| `controlExtraWwHeat1` | Trigger Extra Warm Water Circle 1 (`RECHARGE`) | `String` | | 🔐 W1 | R/W | true |
| `controlExtraWwHeat2` | Trigger Extra Warm Water Circle 2 (`RECHARGE`) | `String` | | 🔐 W1 | R/W | true |
- <b id="f1">1)</b> ... `MANUAL` is supported by Biostar, Powerchip, Powercorn, Biocom, Pro as well as Therm only [](#a1)
@ -82,116 +82,116 @@ 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 |
| `boilerTemperature` | Boiler Temperature | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `flueGasUtilisation` | Flue gas utilisation | `Number:Dimensionless` | `%` | 🔐 W1 | R/O | false |
| `output` | Output | `Number:Dimensionless` | `%` | 🔓 W0 | R/O | false |
| `returnTemp` | Return temp | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
| `co2Target` | CO2 Target | `Number:Dimensionless` | `%` | 🔐 W1 | R/O | false |
| `co2Content` | CO2 Content | `Number:Dimensionless` | `%` | 🔓 W0 | R/O | false |
| `returnTempTarget` | Return temp target | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
| `statusCode` | Status code | `Number` | | 🔐 W1 | R/O | false |
| `efficiency` | Efficiency | `Number:Dimensionless` | `%` | 🔐 W1 | R/O | false |
| `extractorSystem` | Extractor System | `Number:Dimensionless` | `%` | 🔓 W0 | R/O | false |
| `feedTurbine` | Feed Turbine | `String` | | 🔐 W1 | R/O | false |
| `dischargeMotor` | Discharge motor | `Number:Dimensionless` | `%` | 🔓 W0 | R/O | false |
| `g1Target` | G1 Target | `Number:Dimensionless` | `%` | 🔓 W0 | R/O | false |
| `bufferTop` | Buffer Top | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `bufferMid` | Buffer Mid | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `bufferBtm` | Buffer Btm | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `pumpHp0` | Pump HP0 | `Switch` | | 🔓 W0 | R/O | false |
| `dhw0` | DHW 0 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `bDhw0` | B DHW 0 | `Switch` | | 🔓 W0 | R/O | false |
| `dhw1` | DHW 1 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `bDhw1` | B DHW 1 | `Switch` | | 🔓 W0 | R/O | false |
| `dhw2` | DHW 2 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `bDhw2` | B DHW 2 | `Switch` | | 🔓 W0 | R/O | false |
| `roomTempHc0` | Room Temp:HC 0 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `heatCirc0` | Heat Circ. 0 | `Switch` | | 🔓 W0 | R/O | false |
| `roomTempHc1` | Room Temp:HC 1 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `flowTarget1` | Flow Target 1 | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
| `flowIs1` | Flow is 1 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `mixer1` | Mixer 1 | `String` | | 🔐 W1 | R/O | false |
| `heatCirc1` | Heat Circ. 1 | `Switch` | | 🔐 W1 | R/O | false |
| `roomTempHc2` | Room Temp:HC 2 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `flowTarget2` | Flow Target 2 | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
| `flowIs2` | Flow is 2 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `mixer2` | Mixer 2 | `String` | | 🔐 W1 | R/O | false |
| `heatCirc2` | Heat Circ. 2 | `Switch` | | 🔓 W0 | R/O | false |
| `roomTempHc3` | Room Temp:HC 3 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `heatCirc3` | Heat Circ. 3 | `Switch` | | 🔓 W0 | R/O | false |
| `roomTempHc4` | Room Temp:HC 4 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `flowTarget4` | Flow Target 4 | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
| `flowIs4` | Flow is 4 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `mixer4` | Mixer 4 | `String` | | 🔐 W1 | R/O | false |
| `heatCirc4` | Heat Circ. 4 | `Switch` | | 🔓 W0 | R/O | false |
| `roomTempHc5` | Room Temp:HC 5 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `flowTarget5` | Flow Target 5 | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
| `flowIs5` | Flow is 5 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `mixer5` | Mixer 5 | `String` | | 🔐 W1 | R/O | false |
| `heatCirc5` | Heat Circ. 5 | `Switch` | | 🔓 W0 | R/O | false |
| `roomTempHc6` | Room Temp:HC 6 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `heatCirc6` | Heat Circ. 6 | `Switch` | | 🔓 W0 | R/O | false |
| `roomTempHc7` | Room Temp:HC 7 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `flowTarget7` | Flow Target 7 | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
| `flowIs7` | Flow is 7 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `mixer7` | Mixer 7 | `String` | | 🔐 W1 | R/O | false |
| `heatCirc7` | Heat Circ. 7 | `Switch` | | 🔓 W0 | R/O | false |
| `roomTempHc8` | Room Temp:HC 8 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `flowTarget8` | Flow Target 8 | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
| `flowIs8` | Flow is 8 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `mixer8` | Mixer 8 | `String` | | 🔐 W1 | R/O | false |
| `heatCirc8` | Heat Circ. 8 | `Switch` | | 🔓 W0 | R/O | false |
| `fuelLevel` | Fuel Level | `String` | | 🔐 W1 | R/O | false |
| `stb` | STB | `String` | | 🔐 W1 | R/O | false |
| `tks` | TKS | `String` | | 🔐 W1 | R/O | false |
| `boilerApproval` | Boiler approval | `Switch` | | 🔐 W1 | R/O | false |
| `programme` | Programme | `String` | | 🔓 W0 | R/O | false |
| `programHc0` | Program HC0 | `String` | | 🔓 W0 | R/O | false |
| `programHc1` | Program HC1 | `String` | | 🔓 W0 | R/O | false |
| `programHc2` | Program HC2 | `String` | | 🔓 W0 | R/O | false |
| `programHc3` | Program HC3 | `String` | | 🔓 W0 | R/O | false |
| `programHc4` | Program HC4 | `String` | | 🔓 W0 | R/O | false |
| `programHc5` | Program HC5 | `String` | | 🔓 W0 | R/O | false |
| `programHc6` | Program HC6 | `String` | | 🔓 W0 | R/O | false |
| `programHc7` | Program HC7 | `String` | | 🔓 W0 | R/O | false |
| `programHc8` | Program HC8 | `String` | | 🔓 W0 | R/O | false |
| `interuption0` | Interuption 0 | `String` | | 🔓 W0 | R/O | false |
| `interuption1` | Interuption 1 | `String` | | 🔓 W0 | R/O | false |
| `serial` | Serial | `Number` | | 🔓 W0 | R/O | false |
| `version` | Version | `String` | | 🔓 W0 | R/O | false |
| `runningTime` | Running Time | `Number:Time` | `h` | 🔓 W0 | R/O | false |
| `serviceHrs` | Service Hrs | `Number:Time` | `d` | 🔓 W0 | R/O | false |
| `emptyAshIn` | Empty ash in | `Number:Time` | `h` | 🔓 W0 | R/O | false |
| `flowIs0` | Flow is 0 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `flowIs3` | Flow is 3 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `flowIs6` | Flow is 6 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `fuelCounter` | Fuel counter | `Number:Volume` | `m³` | 🔐 W1 | R/O | false |
| `bufferLoad` | Buffer load. | `Number:Dimensionless` | `%` | 🔓 W0 | R/O | false |
| `bufferTop0` | Buffer Top 0 | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
| `bufferBtm0` | Buffer Btm 0 | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
| `bufferTop1` | Buffer Top 1 | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
| `bufferBtm1` | Buffer Btm 1 | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
| `bufferTop2` | Buffer Top 2 | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
| `bufferBtm2` | Buffer Btm 2 | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
| `bExtraWw0` | B extra-WW. 0 | `Switch` | | 🔐 W1 | R/O | false |
| `bExtraWw1` | B extra-WW. 1 | `Switch` | | 🔐 W1 | R/O | false |
| `bExtraWw2` | B extra-WW. 2 | `Switch` | | 🔐 W1 | R/O | false |
| `auxiliaryPump0` | Auxiliary pump 0 | `Switch` | | 🔐 W1 | R/O | false |
| `auxiliaryPump1` | Auxiliary pump 1 | `Switch` | | 🔐 W1 | R/O | false |
| `auxiliaryPump2` | Auxiliary pump 2 | `Switch` | | 🔐 W1 | R/O | false |
| `boilersConditionNo` | Boiler´s condition no. | `String` | | 🔐 W1 | R/O | false |
| `bufferT5` | Buffer T5 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `bufferT6` | Buffer T6 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `bufferT7` | Buffer T7 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `extraWw0` | Extra-WW. 0 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `extraWw1` | Extra-WW. 1 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `extraWw2` | Extra-WW. 2 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `grate` | Grate | `Number:Dimensionless` | `%` | 🔓 W0 | R/O | false |
| 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 |
| `boilerTemperature` | Boiler Temperature | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `flueGasUtilisation` | Flue gas utilisation | `Number:Dimensionless` | `%` | 🔐 W1 | R/O | false |
| `output` | Output | `Number:Dimensionless` | `%` | 🔓 W0 | R/O | false |
| `returnTemp` | Return temp | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
| `co2Target` | CO2 Target | `Number:Dimensionless` | `%` | 🔐 W1 | R/O | false |
| `co2Content` | CO2 Content | `Number:Dimensionless` | `%` | 🔓 W0 | R/O | false |
| `returnTempTarget` | Return temp target | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
| `statusCode` | Status code | `Number` | | 🔐 W1 | R/O | false |
| `efficiency` | Efficiency | `Number:Dimensionless` | `%` | 🔐 W1 | R/O | false |
| `extractorSystem` | Extractor System | `Number:Dimensionless` | `%` | 🔓 W0 | R/O | false |
| `feedTurbine` | Feed Turbine | `String` | | 🔐 W1 | R/O | false |
| `dischargeMotor` | Discharge motor | `Number:Dimensionless` | `%` | 🔓 W0 | R/O | false |
| `g1Target` | G1 Target | `Number:Dimensionless` | `%` | 🔓 W0 | R/O | false |
| `bufferTop` | Buffer Top | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `bufferMid` | Buffer Mid | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `bufferBtm` | Buffer Btm | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `pumpHp0` | Pump HP0 | `Switch` | | 🔓 W0 | R/O | false |
| `dhw0` | DHW 0 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `bDhw0` | B DHW 0 | `Switch` | | 🔓 W0 | R/O | false |
| `dhw1` | DHW 1 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `bDhw1` | B DHW 1 | `Switch` | | 🔓 W0 | R/O | false |
| `dhw2` | DHW 2 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `bDhw2` | B DHW 2 | `Switch` | | 🔓 W0 | R/O | false |
| `roomTempHc0` | Room Temp:HC 0 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `heatCirc0` | Heat Circ. 0 | `Switch` | | 🔓 W0 | R/O | false |
| `roomTempHc1` | Room Temp:HC 1 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `flowTarget1` | Flow Target 1 | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
| `flowIs1` | Flow is 1 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `mixer1` | Mixer 1 | `String` | | 🔐 W1 | R/O | false |
| `heatCirc1` | Heat Circ. 1 | `Switch` | | 🔐 W1 | R/O | false |
| `roomTempHc2` | Room Temp:HC 2 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `flowTarget2` | Flow Target 2 | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
| `flowIs2` | Flow is 2 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `mixer2` | Mixer 2 | `String` | | 🔐 W1 | R/O | false |
| `heatCirc2` | Heat Circ. 2 | `Switch` | | 🔓 W0 | R/O | false |
| `roomTempHc3` | Room Temp:HC 3 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `heatCirc3` | Heat Circ. 3 | `Switch` | | 🔓 W0 | R/O | false |
| `roomTempHc4` | Room Temp:HC 4 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `flowTarget4` | Flow Target 4 | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
| `flowIs4` | Flow is 4 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `mixer4` | Mixer 4 | `String` | | 🔐 W1 | R/O | false |
| `heatCirc4` | Heat Circ. 4 | `Switch` | | 🔓 W0 | R/O | false |
| `roomTempHc5` | Room Temp:HC 5 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `flowTarget5` | Flow Target 5 | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
| `flowIs5` | Flow is 5 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `mixer5` | Mixer 5 | `String` | | 🔐 W1 | R/O | false |
| `heatCirc5` | Heat Circ. 5 | `Switch` | | 🔓 W0 | R/O | false |
| `roomTempHc6` | Room Temp:HC 6 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `heatCirc6` | Heat Circ. 6 | `Switch` | | 🔓 W0 | R/O | false |
| `roomTempHc7` | Room Temp:HC 7 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `flowTarget7` | Flow Target 7 | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
| `flowIs7` | Flow is 7 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `mixer7` | Mixer 7 | `String` | | 🔐 W1 | R/O | false |
| `heatCirc7` | Heat Circ. 7 | `Switch` | | 🔓 W0 | R/O | false |
| `roomTempHc8` | Room Temp:HC 8 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `flowTarget8` | Flow Target 8 | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
| `flowIs8` | Flow is 8 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `mixer8` | Mixer 8 | `String` | | 🔐 W1 | R/O | false |
| `heatCirc8` | Heat Circ. 8 | `Switch` | | 🔓 W0 | R/O | false |
| `fuelLevel` | Fuel Level | `String` | | 🔐 W1 | R/O | false |
| `stb` | STB | `String` | | 🔐 W1 | R/O | false |
| `tks` | TKS | `String` | | 🔐 W1 | R/O | false |
| `boilerApproval` | Boiler approval | `Switch` | | 🔐 W1 | R/O | false |
| `programme` | Programme | `String` | | 🔓 W0 | R/O | false |
| `programHc0` | Program HC0 | `String` | | 🔓 W0 | R/O | false |
| `programHc1` | Program HC1 | `String` | | 🔓 W0 | R/O | false |
| `programHc2` | Program HC2 | `String` | | 🔓 W0 | R/O | false |
| `programHc3` | Program HC3 | `String` | | 🔓 W0 | R/O | false |
| `programHc4` | Program HC4 | `String` | | 🔓 W0 | R/O | false |
| `programHc5` | Program HC5 | `String` | | 🔓 W0 | R/O | false |
| `programHc6` | Program HC6 | `String` | | 🔓 W0 | R/O | false |
| `programHc7` | Program HC7 | `String` | | 🔓 W0 | R/O | false |
| `programHc8` | Program HC8 | `String` | | 🔓 W0 | R/O | false |
| `interuption0` | Interuption 0 | `String` | | 🔓 W0 | R/O | false |
| `interuption1` | Interuption 1 | `String` | | 🔓 W0 | R/O | false |
| `serial` | Serial | `Number` | | 🔓 W0 | R/O | false |
| `version` | Version | `String` | | 🔓 W0 | R/O | false |
| `runningTime` | Running Time | `Number:Time` | `h` | 🔓 W0 | R/O | false |
| `serviceHrs` | Service Hrs | `Number:Time` | `d` | 🔓 W0 | R/O | false |
| `emptyAshIn` | Empty ash in | `Number:Time` | `h` | 🔓 W0 | R/O | false |
| `flowIs0` | Flow is 0 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `flowIs3` | Flow is 3 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `flowIs6` | Flow is 6 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `fuelCounter` | Fuel counter | `Number:Volume` | `m³` | 🔐 W1 | R/O | false |
| `bufferLoad` | Buffer load. | `Number:Dimensionless` | `%` | 🔓 W0 | R/O | false |
| `bufferTop0` | Buffer Top 0 | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
| `bufferBtm0` | Buffer Btm 0 | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
| `bufferTop1` | Buffer Top 1 | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
| `bufferBtm1` | Buffer Btm 1 | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
| `bufferTop2` | Buffer Top 2 | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
| `bufferBtm2` | Buffer Btm 2 | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
| `bExtraWw0` | B extra-WW. 0 | `Switch` | | 🔐 W1 | R/O | false |
| `bExtraWw1` | B extra-WW. 1 | `Switch` | | 🔐 W1 | R/O | false |
| `bExtraWw2` | B extra-WW. 2 | `Switch` | | 🔐 W1 | R/O | false |
| `auxiliaryPump0` | Auxiliary pump 0 | `Switch` | | 🔐 W1 | R/O | false |
| `auxiliaryPump1` | Auxiliary pump 1 | `Switch` | | 🔐 W1 | R/O | false |
| `auxiliaryPump2` | Auxiliary pump 2 | `Switch` | | 🔐 W1 | R/O | false |
| `boilersConditionNo` | Boiler´s condition no. | `String` | | 🔐 W1 | R/O | false |
| `bufferT5` | Buffer T5 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `bufferT6` | Buffer T6 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `bufferT7` | Buffer T7 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `extraWw0` | Extra-WW. 0 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `extraWw1` | Extra-WW. 1 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `extraWw2` | Extra-WW. 2 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
| `grate` | Grate | `Number:Dimensionless` | `%` | 🔓 W0 | R/O | false |
#### Security Access Levels
@ -201,145 +201,145 @@ 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" }
String Biostar_ControlProgram "Set Program" { channel="guntamatic:biostar:mybiostar:controlProgram" }
String Biostar_ControlHeatCircProgram0 "Set Heat Circle 0 Program" { channel="guntamatic:biostar:mybiostar:controlHeatCircProgram0" }
String Biostar_ControlHeatCircProgram1 "Set Heat Circle 1 Program" { channel="guntamatic:biostar:mybiostar:controlHeatCircProgram1" }
String Biostar_ControlHeatCircProgram2 "Set Heat Circle 2 Program" { channel="guntamatic:biostar:mybiostar:controlHeatCircProgram2" }
String Biostar_ControlHeatCircProgram3 "Set Heat Circle 3 Program" { channel="guntamatic:biostar:mybiostar:controlHeatCircProgram3" }
String Biostar_ControlHeatCircProgram4 "Set Heat Circle 4 Program" { channel="guntamatic:biostar:mybiostar:controlHeatCircProgram4" }
String Biostar_ControlHeatCircProgram5 "Set Heat Circle 5 Program" { channel="guntamatic:biostar:mybiostar:controlHeatCircProgram5" }
String Biostar_ControlHeatCircProgram6 "Set Heat Circle 6 Program" { channel="guntamatic:biostar:mybiostar:controlHeatCircProgram6" }
String Biostar_ControlHeatCircProgram7 "Set Heat Circle 7 Program" { channel="guntamatic:biostar:mybiostar:controlHeatCircProgram7" }
String Biostar_ControlHeatCircProgram8 "Set Heat Circle 8 Program" { channel="guntamatic:biostar:mybiostar:controlHeatCircProgram8" }
String Biostar_ControlWwHeat0 "Trigger Warm Water Circle 0" { channel="guntamatic:biostar:mybiostar:controlWwHeat0" }
String Biostar_ControlWwHeat1 "Trigger Warm Water Circle 1" { channel="guntamatic:biostar:mybiostar:controlWwHeat1" }
String Biostar_ControlWwHeat2 "Trigger Warm Water Circle 2" { channel="guntamatic:biostar:mybiostar:controlWwHeat2" }
String Biostar_ControlExtraWwHeat0 "Trigger Extra Warm Water Circle 0" { channel="guntamatic:biostar:mybiostar:controlExtraWwHeat0" }
String Biostar_ControlExtraWwHeat1 "Trigger Extra Warm Water Circle 1" { channel="guntamatic:biostar:mybiostar:controlExtraWwHeat1" }
String Biostar_ControlExtraWwHeat2 "Trigger Extra Warm Water Circle 2" { channel="guntamatic:biostar:mybiostar:controlExtraWwHeat2" }
String Biostar_Running "Running" { channel="guntamatic:biostar:mybiostar:running" }
Number:Temperature Biostar_OutsideTemp "Outside Temp." { channel="guntamatic:biostar:mybiostar:outsideTemp" }
Number:Temperature Biostar_BlrTargetTemp "Blr.Target Temp" { channel="guntamatic:biostar:mybiostar:blrTargetTemp" }
Number:Temperature Biostar_BoilerTemperature "Boiler Temperature" { channel="guntamatic:biostar:mybiostar:boilerTemperature" }
Number:Dimensionless Biostar_FlueGasUtilisation "Flue gas utilisation" { channel="guntamatic:biostar:mybiostar:flueGasUtilisation" }
Number:Dimensionless Biostar_Output "Output" { channel="guntamatic:biostar:mybiostar:output" }
Number:Temperature Biostar_ReturnTemp "Return temp" { channel="guntamatic:biostar:mybiostar:returnTemp" }
Number:Dimensionless Biostar_Co2Target "CO2 Target" { channel="guntamatic:biostar:mybiostar:co2Target" }
Number:Dimensionless Biostar_Co2Content "CO2 Content" { channel="guntamatic:biostar:mybiostar:co2Content" }
Number:Temperature Biostar_ReturnTempTarget "Return temp target" { channel="guntamatic:biostar:mybiostar:returnTempTarget" }
Number Biostar_StatusCode "Status code" { channel="guntamatic:biostar:mybiostar:statusCode" }
Number:Dimensionless Biostar_Efficiency "Efficiency" { channel="guntamatic:biostar:mybiostar:efficiency" }
Number:Dimensionless Biostar_ExtractorSystem "Extractor System" { channel="guntamatic:biostar:mybiostar:extractorSystem" }
String Biostar_FeedTurbine "Feed Turbine" { channel="guntamatic:biostar:mybiostar:feedTurbine" }
Number:Dimensionless Biostar_DischargeMotor "Discharge motor" { channel="guntamatic:biostar:mybiostar:dischargeMotor" }
Number:Dimensionless Biostar_G1Target "G1 Target" { channel="guntamatic:biostar:mybiostar:g1Target" }
Number:Temperature Biostar_BufferTop "Buffer Top" { channel="guntamatic:biostar:mybiostar:bufferTop" }
Number:Temperature Biostar_BufferMid "Buffer Mid" { channel="guntamatic:biostar:mybiostar:bufferMid" }
Number:Temperature Biostar_BufferBtm "Buffer Btm" { channel="guntamatic:biostar:mybiostar:bufferBtm" }
Switch Biostar_PumpHp0 "Pump HP0" { channel="guntamatic:biostar:mybiostar:pumpHp0" }
Number:Temperature Biostar_Dhw0 "DHW 0" { channel="guntamatic:biostar:mybiostar:dhw0" }
Switch Biostar_BDhw0 "B DHW 0" { channel="guntamatic:biostar:mybiostar:bDhw0" }
Number:Temperature Biostar_Dhw1 "DHW 1" { channel="guntamatic:biostar:mybiostar:dhw1" }
Switch Biostar_BDhw1 "B DHW 1" { channel="guntamatic:biostar:mybiostar:bDhw1" }
Number:Temperature Biostar_Dhw2 "DHW 2" { channel="guntamatic:biostar:mybiostar:dhw2" }
Switch Biostar_BDhw2 "B DHW 2" { channel="guntamatic:biostar:mybiostar:bDhw2" }
Number:Temperature Biostar_RoomTempHc0 "Room Temp:HC 0" { channel="guntamatic:biostar:mybiostar:roomTempHc0" }
Switch Biostar_HeatCirc0 "Heat Circ. 0" { channel="guntamatic:biostar:mybiostar:heatCirc0" }
Number:Temperature Biostar_RoomTempHc1 "Room Temp:HC 1" { channel="guntamatic:biostar:mybiostar:roomTempHc1" }
Number:Temperature Biostar_FlowTarget1 "Flow Target 1" { channel="guntamatic:biostar:mybiostar:flowTarget1" }
Number:Temperature Biostar_FlowIs1 "Flow is 1" { channel="guntamatic:biostar:mybiostar:flowIs1" }
String Biostar_Mixer1 "Mixer 1" { channel="guntamatic:biostar:mybiostar:mixer1" }
Switch Biostar_HeatCirc1 "Heat Circ. 1" { channel="guntamatic:biostar:mybiostar:heatCirc1" }
Number:Temperature Biostar_RoomTempHc2 "Room Temp:HC 2" { channel="guntamatic:biostar:mybiostar:roomTempHc2" }
Number:Temperature Biostar_FlowTarget2 "Flow Target 2" { channel="guntamatic:biostar:mybiostar:flowTarget2" }
Number:Temperature Biostar_FlowIs2 "Flow is 2" { channel="guntamatic:biostar:mybiostar:flowIs2" }
String Biostar_Mixer2 "Mixer 2" { channel="guntamatic:biostar:mybiostar:mixer2" }
Switch Biostar_HeatCirc2 "Heat Circ. 2" { channel="guntamatic:biostar:mybiostar:heatCirc2" }
Number:Temperature Biostar_RoomTempHc3 "Room Temp:HC 3" { channel="guntamatic:biostar:mybiostar:roomTempHc3" }
Switch Biostar_HeatCirc3 "Heat Circ. 3" { channel="guntamatic:biostar:mybiostar:heatCirc3" }
Number:Temperature Biostar_RoomTempHc4 "Room Temp:HC 4" { channel="guntamatic:biostar:mybiostar:roomTempHc4" }
Number:Temperature Biostar_FlowTarget4 "Flow Target 4" { channel="guntamatic:biostar:mybiostar:flowTarget4" }
Number:Temperature Biostar_FlowIs4 "Flow is 4" { channel="guntamatic:biostar:mybiostar:flowIs4" }
String Biostar_Mixer4 "Mixer 4" { channel="guntamatic:biostar:mybiostar:mixer4" }
Switch Biostar_HeatCirc4 "Heat Circ. 4" { channel="guntamatic:biostar:mybiostar:heatCirc4" }
Number:Temperature Biostar_RoomTempHc5 "Room Temp:HC 5" { channel="guntamatic:biostar:mybiostar:roomTempHc5" }
Number:Temperature Biostar_FlowTarget5 "Flow Target 5" { channel="guntamatic:biostar:mybiostar:flowTarget5" }
Number:Temperature Biostar_FlowIs5 "Flow is 5" { channel="guntamatic:biostar:mybiostar:flowIs5" }
String Biostar_Mixer5 "Mixer 5" { channel="guntamatic:biostar:mybiostar:mixer5" }
Switch Biostar_HeatCirc5 "Heat Circ. 5" { channel="guntamatic:biostar:mybiostar:heatCirc5" }
Number:Temperature Biostar_RoomTempHc6 "Room Temp:HC 6" { channel="guntamatic:biostar:mybiostar:roomTempHc6" }
Switch Biostar_HeatCirc6 "Heat Circ. 6" { channel="guntamatic:biostar:mybiostar:heatCirc6" }
Number:Temperature Biostar_RoomTempHc7 "Room Temp:HC 7" { channel="guntamatic:biostar:mybiostar:roomTempHc7" }
Number:Temperature Biostar_FlowTarget7 "Flow Target 7" { channel="guntamatic:biostar:mybiostar:flowTarget7" }
Number:Temperature Biostar_FlowIs7 "Flow is 7" { channel="guntamatic:biostar:mybiostar:flowIs7" }
String Biostar_Mixer7 "Mixer 7" { channel="guntamatic:biostar:mybiostar:mixer7" }
Switch Biostar_HeatCirc7 "Heat Circ. 7" { channel="guntamatic:biostar:mybiostar:heatCirc7" }
Number:Temperature Biostar_RoomTempHc8 "Room Temp:HC 8" { channel="guntamatic:biostar:mybiostar:roomTempHc8" }
Number:Temperature Biostar_FlowTarget8 "Flow Target 8" { channel="guntamatic:biostar:mybiostar:flowTarget8" }
Number:Temperature Biostar_FlowIs8 "Flow is 8" { channel="guntamatic:biostar:mybiostar:flowIs8" }
String Biostar_Mixer8 "Mixer 8" { channel="guntamatic:biostar:mybiostar:mixer8" }
Switch Biostar_HeatCirc8 "Heat Circ. 8" { channel="guntamatic:biostar:mybiostar:heatCirc8" }
String Biostar_FuelLevel "Fuel Level" { channel="guntamatic:biostar:mybiostar:fuelLevel" }
String Biostar_Stb "STB" { channel="guntamatic:biostar:mybiostar:stb" }
String Biostar_Tks "TKS" { channel="guntamatic:biostar:mybiostar:tks" }
Switch Biostar_BoilerApproval "Boiler approval" { channel="guntamatic:biostar:mybiostar:boilerApproval" }
String Biostar_Programme "Programme" { channel="guntamatic:biostar:mybiostar:programme" }
String Biostar_ProgramHc0 "Program HC0" { channel="guntamatic:biostar:mybiostar:programHc0" }
String Biostar_ProgramHc1 "Program HC1" { channel="guntamatic:biostar:mybiostar:programHc1" }
String Biostar_ProgramHc2 "Program HC2" { channel="guntamatic:biostar:mybiostar:programHc2" }
String Biostar_ProgramHc3 "Program HC3" { channel="guntamatic:biostar:mybiostar:programHc3" }
String Biostar_ProgramHc4 "Program HC4" { channel="guntamatic:biostar:mybiostar:programHc4" }
String Biostar_ProgramHc5 "Program HC5" { channel="guntamatic:biostar:mybiostar:programHc5" }
String Biostar_ProgramHc6 "Program HC6" { channel="guntamatic:biostar:mybiostar:programHc6" }
String Biostar_ProgramHc7 "Program HC7" { channel="guntamatic:biostar:mybiostar:programHc7" }
String Biostar_ProgramHc8 "Program HC8" { channel="guntamatic:biostar:mybiostar:programHc8" }
String Biostar_Interuption0 "Interuption 0" { channel="guntamatic:biostar:mybiostar:interuption0" }
String Biostar_Interuption1 "Interuption 1" { channel="guntamatic:biostar:mybiostar:interuption1" }
Number Biostar_Serial "Serial" { channel="guntamatic:biostar:mybiostar:serial" }
String Biostar_Version "Version" { channel="guntamatic:biostar:mybiostar:version" }
Number:Time Biostar_RunningTime "Running Time" { channel="guntamatic:biostar:mybiostar:runningTime" }
Number:Time Biostar_ServiceHrs "Service Hrs" { channel="guntamatic:biostar:mybiostar:serviceHrs" }
Number:Time Biostar_EmptyAshIn "Empty ash in" { channel="guntamatic:biostar:mybiostar:emptyAshIn" }
Number:Temperature Biostar_FlowIs0 "Flow is 0" { channel="guntamatic:biostar:mybiostar:flowIs0" }
Number:Temperature Biostar_FlowIs3 "Flow is 3" { channel="guntamatic:biostar:mybiostar:flowIs3" }
Number:Temperature Biostar_FlowIs6 "Flow is 6" { channel="guntamatic:biostar:mybiostar:flowIs6" }
Number:Volume Biostar_FuelCounter "Fuel counter" { channel="guntamatic:biostar:mybiostar:fuelCounter" }
Number:Dimensionless Biostar_BufferLoad "Buffer load." { channel="guntamatic:biostar:mybiostar:bufferLoad" }
Number:Temperature Biostar_BufferTop0 "Buffer Top 0" { channel="guntamatic:biostar:mybiostar:bufferTop0" }
Number:Temperature Biostar_BufferBtm0 "Buffer Btm 0" { channel="guntamatic:biostar:mybiostar:bufferBtm0" }
Number:Temperature Biostar_BufferTop1 "Buffer Top 1" { channel="guntamatic:biostar:mybiostar:bufferTop1" }
Number:Temperature Biostar_BufferBtm1 "Buffer Btm 1" { channel="guntamatic:biostar:mybiostar:bufferBtm1" }
Number:Temperature Biostar_BufferTop2 "Buffer Top 2" { channel="guntamatic:biostar:mybiostar:bufferTop2" }
Number:Temperature Biostar_BufferBtm2 "Buffer Btm 2" { channel="guntamatic:biostar:mybiostar:bufferBtm2" }
Switch Biostar_BExtraWw0 "B extra-WW. 0" { channel="guntamatic:biostar:mybiostar:bExtraWw0" }
Switch Biostar_BExtraWw1 "B extra-WW. 1" { channel="guntamatic:biostar:mybiostar:bExtraWw1" }
Switch Biostar_BExtraWw2 "B extra-WW. 2" { channel="guntamatic:biostar:mybiostar:bExtraWw2" }
Switch Biostar_AuxiliaryPump0 "Auxiliary pump 0" { channel="guntamatic:biostar:mybiostar:auxiliaryPump0" }
Switch Biostar_AuxiliaryPump1 "Auxiliary pump 1" { channel="guntamatic:biostar:mybiostar:auxiliaryPump1" }
Switch Biostar_AuxiliaryPump2 "Auxiliary pump 2" { channel="guntamatic:biostar:mybiostar:auxiliaryPump2" }
String Biostar_BoilersConditionNo "Boiler´s condition no." { channel="guntamatic:biostar:mybiostar:boilersConditionNo" }
Number:Temperature Biostar_BufferT5 "Buffer T5" { channel="guntamatic:biostar:mybiostar:bufferT5" }
Number:Temperature Biostar_BufferT6 "Buffer T6" { channel="guntamatic:biostar:mybiostar:bufferT6" }
Number:Temperature Biostar_BufferT7 "Buffer T7" { channel="guntamatic:biostar:mybiostar:bufferT7" }
Number:Temperature Biostar_ExtraWw0 "Extra-WW. 0" { channel="guntamatic:biostar:mybiostar:extraWw0" }
Number:Temperature Biostar_ExtraWw1 "Extra-WW. 1" { channel="guntamatic:biostar:mybiostar:extraWw1" }
Number:Temperature Biostar_ExtraWw2 "Extra-WW. 2" { channel="guntamatic:biostar:mybiostar:extraWw2" }
Number:Dimensionless Biostar_Grate "Grate" { channel="guntamatic:biostar:mybiostar:grate" }
String Biostar_ControlBoilerApproval "Set Boiler Approval" { channel="guntamatic:biostar:mybiostar:controlBoilerApproval" }
String Biostar_ControlProgram "Set Program" { channel="guntamatic:biostar:mybiostar:controlProgram" }
String Biostar_ControlHeatCircProgram0 "Set Heat Circle 0 Program" { channel="guntamatic:biostar:mybiostar:controlHeatCircProgram0" }
String Biostar_ControlHeatCircProgram1 "Set Heat Circle 1 Program" { channel="guntamatic:biostar:mybiostar:controlHeatCircProgram1" }
String Biostar_ControlHeatCircProgram2 "Set Heat Circle 2 Program" { channel="guntamatic:biostar:mybiostar:controlHeatCircProgram2" }
String Biostar_ControlHeatCircProgram3 "Set Heat Circle 3 Program" { channel="guntamatic:biostar:mybiostar:controlHeatCircProgram3" }
String Biostar_ControlHeatCircProgram4 "Set Heat Circle 4 Program" { channel="guntamatic:biostar:mybiostar:controlHeatCircProgram4" }
String Biostar_ControlHeatCircProgram5 "Set Heat Circle 5 Program" { channel="guntamatic:biostar:mybiostar:controlHeatCircProgram5" }
String Biostar_ControlHeatCircProgram6 "Set Heat Circle 6 Program" { channel="guntamatic:biostar:mybiostar:controlHeatCircProgram6" }
String Biostar_ControlHeatCircProgram7 "Set Heat Circle 7 Program" { channel="guntamatic:biostar:mybiostar:controlHeatCircProgram7" }
String Biostar_ControlHeatCircProgram8 "Set Heat Circle 8 Program" { channel="guntamatic:biostar:mybiostar:controlHeatCircProgram8" }
String Biostar_ControlWwHeat0 "Trigger Warm Water Circle 0" { channel="guntamatic:biostar:mybiostar:controlWwHeat0" }
String Biostar_ControlWwHeat1 "Trigger Warm Water Circle 1" { channel="guntamatic:biostar:mybiostar:controlWwHeat1" }
String Biostar_ControlWwHeat2 "Trigger Warm Water Circle 2" { channel="guntamatic:biostar:mybiostar:controlWwHeat2" }
String Biostar_ControlExtraWwHeat0 "Trigger Extra Warm Water Circle 0" { channel="guntamatic:biostar:mybiostar:controlExtraWwHeat0" }
String Biostar_ControlExtraWwHeat1 "Trigger Extra Warm Water Circle 1" { channel="guntamatic:biostar:mybiostar:controlExtraWwHeat1" }
String Biostar_ControlExtraWwHeat2 "Trigger Extra Warm Water Circle 2" { channel="guntamatic:biostar:mybiostar:controlExtraWwHeat2" }
String Biostar_Running "Running" { channel="guntamatic:biostar:mybiostar:running" }
Number:Temperature Biostar_OutsideTemp "Outside Temp." { channel="guntamatic:biostar:mybiostar:outsideTemp" }
Number:Temperature Biostar_BlrTargetTemp "Blr.Target Temp" { channel="guntamatic:biostar:mybiostar:blrTargetTemp" }
Number:Temperature Biostar_BoilerTemperature "Boiler Temperature" { channel="guntamatic:biostar:mybiostar:boilerTemperature" }
Number:Dimensionless Biostar_FlueGasUtilisation "Flue gas utilisation" { channel="guntamatic:biostar:mybiostar:flueGasUtilisation" }
Number:Dimensionless Biostar_Output "Output" { channel="guntamatic:biostar:mybiostar:output" }
Number:Temperature Biostar_ReturnTemp "Return temp" { channel="guntamatic:biostar:mybiostar:returnTemp" }
Number:Dimensionless Biostar_Co2Target "CO2 Target" { channel="guntamatic:biostar:mybiostar:co2Target" }
Number:Dimensionless Biostar_Co2Content "CO2 Content" { channel="guntamatic:biostar:mybiostar:co2Content" }
Number:Temperature Biostar_ReturnTempTarget "Return temp target" { channel="guntamatic:biostar:mybiostar:returnTempTarget" }
Number Biostar_StatusCode "Status code" { channel="guntamatic:biostar:mybiostar:statusCode" }
Number:Dimensionless Biostar_Efficiency "Efficiency" { channel="guntamatic:biostar:mybiostar:efficiency" }
Number:Dimensionless Biostar_ExtractorSystem "Extractor System" { channel="guntamatic:biostar:mybiostar:extractorSystem" }
String Biostar_FeedTurbine "Feed Turbine" { channel="guntamatic:biostar:mybiostar:feedTurbine" }
Number:Dimensionless Biostar_DischargeMotor "Discharge motor" { channel="guntamatic:biostar:mybiostar:dischargeMotor" }
Number:Dimensionless Biostar_G1Target "G1 Target" { channel="guntamatic:biostar:mybiostar:g1Target" }
Number:Temperature Biostar_BufferTop "Buffer Top" { channel="guntamatic:biostar:mybiostar:bufferTop" }
Number:Temperature Biostar_BufferMid "Buffer Mid" { channel="guntamatic:biostar:mybiostar:bufferMid" }
Number:Temperature Biostar_BufferBtm "Buffer Btm" { channel="guntamatic:biostar:mybiostar:bufferBtm" }
Switch Biostar_PumpHp0 "Pump HP0" { channel="guntamatic:biostar:mybiostar:pumpHp0" }
Number:Temperature Biostar_Dhw0 "DHW 0" { channel="guntamatic:biostar:mybiostar:dhw0" }
Switch Biostar_BDhw0 "B DHW 0" { channel="guntamatic:biostar:mybiostar:bDhw0" }
Number:Temperature Biostar_Dhw1 "DHW 1" { channel="guntamatic:biostar:mybiostar:dhw1" }
Switch Biostar_BDhw1 "B DHW 1" { channel="guntamatic:biostar:mybiostar:bDhw1" }
Number:Temperature Biostar_Dhw2 "DHW 2" { channel="guntamatic:biostar:mybiostar:dhw2" }
Switch Biostar_BDhw2 "B DHW 2" { channel="guntamatic:biostar:mybiostar:bDhw2" }
Number:Temperature Biostar_RoomTempHc0 "Room Temp:HC 0" { channel="guntamatic:biostar:mybiostar:roomTempHc0" }
Switch Biostar_HeatCirc0 "Heat Circ. 0" { channel="guntamatic:biostar:mybiostar:heatCirc0" }
Number:Temperature Biostar_RoomTempHc1 "Room Temp:HC 1" { channel="guntamatic:biostar:mybiostar:roomTempHc1" }
Number:Temperature Biostar_FlowTarget1 "Flow Target 1" { channel="guntamatic:biostar:mybiostar:flowTarget1" }
Number:Temperature Biostar_FlowIs1 "Flow is 1" { channel="guntamatic:biostar:mybiostar:flowIs1" }
String Biostar_Mixer1 "Mixer 1" { channel="guntamatic:biostar:mybiostar:mixer1" }
Switch Biostar_HeatCirc1 "Heat Circ. 1" { channel="guntamatic:biostar:mybiostar:heatCirc1" }
Number:Temperature Biostar_RoomTempHc2 "Room Temp:HC 2" { channel="guntamatic:biostar:mybiostar:roomTempHc2" }
Number:Temperature Biostar_FlowTarget2 "Flow Target 2" { channel="guntamatic:biostar:mybiostar:flowTarget2" }
Number:Temperature Biostar_FlowIs2 "Flow is 2" { channel="guntamatic:biostar:mybiostar:flowIs2" }
String Biostar_Mixer2 "Mixer 2" { channel="guntamatic:biostar:mybiostar:mixer2" }
Switch Biostar_HeatCirc2 "Heat Circ. 2" { channel="guntamatic:biostar:mybiostar:heatCirc2" }
Number:Temperature Biostar_RoomTempHc3 "Room Temp:HC 3" { channel="guntamatic:biostar:mybiostar:roomTempHc3" }
Switch Biostar_HeatCirc3 "Heat Circ. 3" { channel="guntamatic:biostar:mybiostar:heatCirc3" }
Number:Temperature Biostar_RoomTempHc4 "Room Temp:HC 4" { channel="guntamatic:biostar:mybiostar:roomTempHc4" }
Number:Temperature Biostar_FlowTarget4 "Flow Target 4" { channel="guntamatic:biostar:mybiostar:flowTarget4" }
Number:Temperature Biostar_FlowIs4 "Flow is 4" { channel="guntamatic:biostar:mybiostar:flowIs4" }
String Biostar_Mixer4 "Mixer 4" { channel="guntamatic:biostar:mybiostar:mixer4" }
Switch Biostar_HeatCirc4 "Heat Circ. 4" { channel="guntamatic:biostar:mybiostar:heatCirc4" }
Number:Temperature Biostar_RoomTempHc5 "Room Temp:HC 5" { channel="guntamatic:biostar:mybiostar:roomTempHc5" }
Number:Temperature Biostar_FlowTarget5 "Flow Target 5" { channel="guntamatic:biostar:mybiostar:flowTarget5" }
Number:Temperature Biostar_FlowIs5 "Flow is 5" { channel="guntamatic:biostar:mybiostar:flowIs5" }
String Biostar_Mixer5 "Mixer 5" { channel="guntamatic:biostar:mybiostar:mixer5" }
Switch Biostar_HeatCirc5 "Heat Circ. 5" { channel="guntamatic:biostar:mybiostar:heatCirc5" }
Number:Temperature Biostar_RoomTempHc6 "Room Temp:HC 6" { channel="guntamatic:biostar:mybiostar:roomTempHc6" }
Switch Biostar_HeatCirc6 "Heat Circ. 6" { channel="guntamatic:biostar:mybiostar:heatCirc6" }
Number:Temperature Biostar_RoomTempHc7 "Room Temp:HC 7" { channel="guntamatic:biostar:mybiostar:roomTempHc7" }
Number:Temperature Biostar_FlowTarget7 "Flow Target 7" { channel="guntamatic:biostar:mybiostar:flowTarget7" }
Number:Temperature Biostar_FlowIs7 "Flow is 7" { channel="guntamatic:biostar:mybiostar:flowIs7" }
String Biostar_Mixer7 "Mixer 7" { channel="guntamatic:biostar:mybiostar:mixer7" }
Switch Biostar_HeatCirc7 "Heat Circ. 7" { channel="guntamatic:biostar:mybiostar:heatCirc7" }
Number:Temperature Biostar_RoomTempHc8 "Room Temp:HC 8" { channel="guntamatic:biostar:mybiostar:roomTempHc8" }
Number:Temperature Biostar_FlowTarget8 "Flow Target 8" { channel="guntamatic:biostar:mybiostar:flowTarget8" }
Number:Temperature Biostar_FlowIs8 "Flow is 8" { channel="guntamatic:biostar:mybiostar:flowIs8" }
String Biostar_Mixer8 "Mixer 8" { channel="guntamatic:biostar:mybiostar:mixer8" }
Switch Biostar_HeatCirc8 "Heat Circ. 8" { channel="guntamatic:biostar:mybiostar:heatCirc8" }
String Biostar_FuelLevel "Fuel Level" { channel="guntamatic:biostar:mybiostar:fuelLevel" }
String Biostar_Stb "STB" { channel="guntamatic:biostar:mybiostar:stb" }
String Biostar_Tks "TKS" { channel="guntamatic:biostar:mybiostar:tks" }
Switch Biostar_BoilerApproval "Boiler approval" { channel="guntamatic:biostar:mybiostar:boilerApproval" }
String Biostar_Programme "Programme" { channel="guntamatic:biostar:mybiostar:programme" }
String Biostar_ProgramHc0 "Program HC0" { channel="guntamatic:biostar:mybiostar:programHc0" }
String Biostar_ProgramHc1 "Program HC1" { channel="guntamatic:biostar:mybiostar:programHc1" }
String Biostar_ProgramHc2 "Program HC2" { channel="guntamatic:biostar:mybiostar:programHc2" }
String Biostar_ProgramHc3 "Program HC3" { channel="guntamatic:biostar:mybiostar:programHc3" }
String Biostar_ProgramHc4 "Program HC4" { channel="guntamatic:biostar:mybiostar:programHc4" }
String Biostar_ProgramHc5 "Program HC5" { channel="guntamatic:biostar:mybiostar:programHc5" }
String Biostar_ProgramHc6 "Program HC6" { channel="guntamatic:biostar:mybiostar:programHc6" }
String Biostar_ProgramHc7 "Program HC7" { channel="guntamatic:biostar:mybiostar:programHc7" }
String Biostar_ProgramHc8 "Program HC8" { channel="guntamatic:biostar:mybiostar:programHc8" }
String Biostar_Interuption0 "Interuption 0" { channel="guntamatic:biostar:mybiostar:interuption0" }
String Biostar_Interuption1 "Interuption 1" { channel="guntamatic:biostar:mybiostar:interuption1" }
Number Biostar_Serial "Serial" { channel="guntamatic:biostar:mybiostar:serial" }
String Biostar_Version "Version" { channel="guntamatic:biostar:mybiostar:version" }
Number:Time Biostar_RunningTime "Running Time" { channel="guntamatic:biostar:mybiostar:runningTime" }
Number:Time Biostar_ServiceHrs "Service Hrs" { channel="guntamatic:biostar:mybiostar:serviceHrs" }
Number:Time Biostar_EmptyAshIn "Empty ash in" { channel="guntamatic:biostar:mybiostar:emptyAshIn" }
Number:Temperature Biostar_FlowIs0 "Flow is 0" { channel="guntamatic:biostar:mybiostar:flowIs0" }
Number:Temperature Biostar_FlowIs3 "Flow is 3" { channel="guntamatic:biostar:mybiostar:flowIs3" }
Number:Temperature Biostar_FlowIs6 "Flow is 6" { channel="guntamatic:biostar:mybiostar:flowIs6" }
Number:Volume Biostar_FuelCounter "Fuel counter" { channel="guntamatic:biostar:mybiostar:fuelCounter" }
Number:Dimensionless Biostar_BufferLoad "Buffer load." { channel="guntamatic:biostar:mybiostar:bufferLoad" }
Number:Temperature Biostar_BufferTop0 "Buffer Top 0" { channel="guntamatic:biostar:mybiostar:bufferTop0" }
Number:Temperature Biostar_BufferBtm0 "Buffer Btm 0" { channel="guntamatic:biostar:mybiostar:bufferBtm0" }
Number:Temperature Biostar_BufferTop1 "Buffer Top 1" { channel="guntamatic:biostar:mybiostar:bufferTop1" }
Number:Temperature Biostar_BufferBtm1 "Buffer Btm 1" { channel="guntamatic:biostar:mybiostar:bufferBtm1" }
Number:Temperature Biostar_BufferTop2 "Buffer Top 2" { channel="guntamatic:biostar:mybiostar:bufferTop2" }
Number:Temperature Biostar_BufferBtm2 "Buffer Btm 2" { channel="guntamatic:biostar:mybiostar:bufferBtm2" }
Switch Biostar_BExtraWw0 "B extra-WW. 0" { channel="guntamatic:biostar:mybiostar:bExtraWw0" }
Switch Biostar_BExtraWw1 "B extra-WW. 1" { channel="guntamatic:biostar:mybiostar:bExtraWw1" }
Switch Biostar_BExtraWw2 "B extra-WW. 2" { channel="guntamatic:biostar:mybiostar:bExtraWw2" }
Switch Biostar_AuxiliaryPump0 "Auxiliary pump 0" { channel="guntamatic:biostar:mybiostar:auxiliaryPump0" }
Switch Biostar_AuxiliaryPump1 "Auxiliary pump 1" { channel="guntamatic:biostar:mybiostar:auxiliaryPump1" }
Switch Biostar_AuxiliaryPump2 "Auxiliary pump 2" { channel="guntamatic:biostar:mybiostar:auxiliaryPump2" }
String Biostar_BoilersConditionNo "Boiler´s condition no." { channel="guntamatic:biostar:mybiostar:boilersConditionNo" }
Number:Temperature Biostar_BufferT5 "Buffer T5" { channel="guntamatic:biostar:mybiostar:bufferT5" }
Number:Temperature Biostar_BufferT6 "Buffer T6" { channel="guntamatic:biostar:mybiostar:bufferT6" }
Number:Temperature Biostar_BufferT7 "Buffer T7" { channel="guntamatic:biostar:mybiostar:bufferT7" }
Number:Temperature Biostar_ExtraWw0 "Extra-WW. 0" { channel="guntamatic:biostar:mybiostar:extraWw0" }
Number:Temperature Biostar_ExtraWw1 "Extra-WW. 1" { channel="guntamatic:biostar:mybiostar:extraWw1" }
Number:Temperature Biostar_ExtraWw2 "Extra-WW. 2" { channel="guntamatic:biostar:mybiostar:extraWw2" }
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

@ -73,10 +73,9 @@ String HarmonyGreatRoomActivity "Current Activity [%s]" (gMain) {
```
Hubs can also send a button press to a device associated with the current activity.
A String item can be used to send any button name/label or a Player item can be used to send Play/Pause/FastForward/Rewind/SkipForward/SkipBackward.
A String item can be used to send any button name/label or a Player item can be used to send Play/Pause/FastForward/Rewind/SkipForward/SkipBackward.
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.
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" }
@ -142,50 +141,52 @@ sitemap demo label="Main Menu" {
## ButtonPress values
Example subset of values for the current activity "buttonPress" channels
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`
{
"parameters": [],
"parameterGroups": [],
"description": "Send a button press to device Harmony Device",
"label": "Send Button Press",
"itemType": "String",
"kind": "STATE",
"stateDescription": {
"readOnly": false,
"options": [
{
"value": "PowerToggle",
"label": "Power Toggle"
},
{
"value": "Speed",
"label": "Speed"
},
{
"value": "Timer",
"label": "Timer"
}
]
},
"tags": [],
"UID": "harmonyhub:device:GreatRoom:lasko_fan:buttonPress",
"advanced": false
```json
{
"parameters": [],
"parameterGroups": [],
"description": "Send a button press to device Harmony Device",
"label": "Send Button Press",
"itemType": "String",
"kind": "STATE",
"stateDescription": {
"readOnly": false,
"options": [
{
"value": "PowerToggle",
"label": "Power Toggle"
},
{
"value": "Speed",
"label": "Speed"
},
{
"value": "Timer",
"label": "Timer"
}
]
},
"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
@ -39,8 +39,8 @@ The collection event `collection-event` triggers on the day of rubbish collectio
#### Configuration
You can set an `offset` in minutes.
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

@ -27,7 +27,7 @@ The binding can automatically discover the PowerView hub.
The discovery process can be started by pressing the refresh button in the Main Configuration UI Inbox.
However you can also manually create a (bridge) thing for the hub, and enter the required configuration parameters (see Thing Configuration below).
If the configuration parameters are all valid, the binding will then automatically attempt to connect to the hub.
If the connection succeeds, the hub will indicate its status as Online, otherwise it will show an error status.
If the connection succeeds, the hub will indicate its status as Online, otherwise it will show an error status.
Once the hub thing has been created and successfully connected, the binding will automatically discover all shades and scenes that are in it.
@ -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,11 +101,11 @@ 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"]
group 813793755 "Ground Level"[members="434523813;918797451"]
player Kitchen "Kitchen"[pid="434523813"]
player LivingRoom "Living Room"[pid="918797451"]
group 813793755 "Ground Level"[members="434523813;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,14 +268,14 @@ String LivingRoom_Playlists {channel="heos:player:main:LivingRoom:Playlists"}
### demo.sitemap
```
```perl
Frame label="LivingRoom" {
Default item=LivingRoom_Control
Default item=LivingRoom_Mute
Default item=LivingRoom_Volume
Default item=LivingRoom_Title
Default item=LivingRoom_Interpret
Default item=LivingRoom_Album
Default item=LivingRoom_Control
Default item=LivingRoom_Mute
Default item=LivingRoom_Volume
Default item=LivingRoom_Title
Default item=LivingRoom_Interpret
Default item=LivingRoom_Album
Selection item=LivingRoom_Favorites label="Favorite" icon="music"
Selection item=LivingRoom_Playlists label="Playlist" icon="music"
}
@ -310,33 +308,33 @@ Player B = Living Room (source)
Items:
```
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)
```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)
```
Rule for kitchen:
```
```java
rule "Play AuxIn from Living Room"
when
Item HeosKitchen_InputSelect received command
then
if (receivedCommand.toString == "aux_in_1") {
sendCommand(HeosKitchen_Input, "aux_in_1")
when
Item HeosKitchen_InputSelect received command
then
if (receivedCommand.toString == "aux_in_1") {
sendCommand(HeosKitchen_Input, "aux_in_1")
} if (receivedCommand.toString == "LivingRoom") {
sendCommand(HeosBridge_Play_Living, ON)
sendCommand(HeosKitchen_Input, "aux_in_1")
sendCommand(HeosBridge_Play_Living, OFF) //Switch player channel off again to be sure that it is OFF
}
} if (receivedCommand.toString == "LivingRoom") {
sendCommand(HeosBridge_Play_Living, ON)
sendCommand(HeosKitchen_Input, "aux_in_1")
sendCommand(HeosBridge_Play_Living, OFF) //Switch player channel off again to be sure that it is OFF
}
```
Sitemap:
```
Switch item=HeosKitchen_InputSelect mappings=[aux_in_1 = "Aux In" , LivingRoom = "Living Room"]
```java
Switch item=HeosKitchen_InputSelect mappings=[aux_in_1 = "Aux In" , LivingRoom = "Living Room"]
```
### The Online status of Groups and Players
@ -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,21 +370,21 @@ end
Sitemap:
```
```perl
Frame label="Heos Group" visibility=[HeosGroup_Status==ONLINE] {
Default item=HeosGroup1_Player
Default item=HeosGroup1_Volume
Default item=HeosGroup1_Mute
Default item=HeosGroup1_Favorites
Default item=HeosGroup1_Playlist
Default item=HeosGroup1_Player
Default item=HeosGroup1_Volume
Default item=HeosGroup1_Mute
Default item=HeosGroup1_Favorites
Default item=HeosGroup1_Playlist
Text item=HeosGroup1_Song {
Default item=HeosGroup1_Song
Default item=HeosGroup1_Artist
Default item=HeosGroup1_Album
Image item=HeosGroup1_Cover url=""
}
Text item=HeosGroup1_Song {
Default item=HeosGroup1_Song
Default item=HeosGroup1_Artist
Default item=HeosGroup1_Album
Image item=HeosGroup1_Cover url=""
}
}
```
@ -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")
@ -408,4 +405,4 @@ Multiple actions are supported by this binding. In classic rules these are acces
### playInputFromPlayer(sourcePlayer, sourceInput, destination)
Allows to play a source from a player to another player.
Allows to play a source from a player to another player.

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

@ -1,7 +1,7 @@
# Home Connect Binding
The binding integrates the [Home Connect](https://www.home-connect.com/) system into openHAB.
By using the Home Connect API it connects to household devices from brands like Bosch and Siemens.
By using the Home Connect API it connects to household devices from brands like Bosch and Siemens.
Because all status updates and commands have to go through the API, a permanent internet connection is required.
@ -9,140 +9,130 @@ 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 |
| Home appliance | Thing Type ID |
| --------------- | ------------ |
| Dishwasher | dishwasher |
| Washer | washer |
| Washer / Dryer combination | washerdryer |
| Dryer | dryer |
| Oven | oven |
| Hood | hood |
| Cooktop | hob |
| 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).
| Dishwasher | dishwasher |
| Washer | washer |
| Washer / Dryer combination | washerdryer |
| Dryer | dryer |
| Oven | oven |
| Hood | hood |
| Cooktop | hob |
| 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>).
## 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 |
| --------------- | --------- | --------- | ----------- | ------------------ |
| power_state | Switch | false | This setting describes the current power state of the home appliance. | dishwasher, oven, coffeemaker, hood, hob |
| door_state | Contact | true | This status describes the door state of a home appliance. A status change is either triggered by the user operating the home appliance locally (i.e. opening/closing door) or automatically by the home appliance (i.e. locking the door). | dishwasher, washer, washerdryer, dryer, oven, fridgefreezer |
| operation_state | String | true | This status describes the operation state of the home appliance. | dishwasher, washer, washerdryer, dryer, oven, hood, hob, coffeemaker |
| remote_start_allowance_state | Switch | true | This status indicates whether the remote program start is enabled. This can happen due to a programmatic change (only disabling), or manually by the user changing the flag locally on the home appliance, or automatically after a certain duration - usually in 24 hours. | dishwasher, washer, washerdryer, dryer, oven, hood, coffeemaker |
| remote_control_active_state | Switch | true | This status indicates whether the allowance for remote controlling is enabled. | dishwasher, washer, washerdryer, dryer, oven, hood, hob |
| active_program_state | String | true | This status describes the active program of the home appliance. | dishwasher, washer, washerdryer, dryer, oven, hood, hob, coffeemaker |
| selected_program_state | String | false | This state describes the selected program of the home appliance. | dishwasher, washer, washerdryer, dryer, oven, hob, coffeemaker |
| remaining_program_time_state | Number:Time | true | This status indicates the remaining program time of the home appliance. | dishwasher, washer, washerdryer, dryer, oven |
| elapsed_program_time | Number:Time | true | This status indicates the elapsed program time of the home appliance. | oven |
| program_progress_state | Number:Dimensionless | true | This status describes the program progress of the home appliance in percent. | dishwasher, washer, washerdryer, dryer, oven, coffeemaker |
| duration | Number:Time | true | This status describes the duration of the program of the home appliance. | oven |
| oven_current_cavity_temperature | Number:Temperature | true | This status describes the current cavity temperature of the home appliance. | oven |
| setpoint_temperature | Number:Temperature | false | This status describes the setpoint/target temperature of the home appliance. | oven |
| laundry_care_washer_temperature | String | false | This status describes the temperature of the washing program of the home appliance. | washer, washerdryer |
| laundry_care_washer_spin_speed | String | false | This status defines the spin speed of a washer program of the home appliance. | washer, washerdryer |
| laundry_care_washer_idos1_level | String | false | This status defines the i-Dos 1 dosing level of a washer program of the home appliance (if appliance supports i-Dos). | washer |
| laundry_care_washer_idos2_level | String | false | This status defines the i-Dos 2 dosing level of a washer program of the home appliance (if appliance supports i-Dos). | washer |
| laundry_care_washer_idos1 | Switch | true | This status indicates whether i-Dos 1 is activated for a washer program of the home appliance. (If appliance supports i-Dos) | washer |
| laundry_care_washer_idos2 | Switch | true | This status indicates whether i-Dos 2 is activated for a washer program of the home appliance. (If appliance supports i-Dos) | washer |
| laundry_care_washer_vario_perfect | String | true | This status defines the vario perfect mode of a washer program of the home appliance. | washer, washerdryer |
| laundry_care_washer_less_ironing | Switch | true | This status indicates whether less ironing is activated for a washer program of the home appliance. | washer, washerdryer |
| laundry_care_washer_pre_wash | Switch | true | This status indicates whether the pre-wash is activated for a washer program of the home appliance. | washer, washerdryer |
| laundry_care_washer_rinse_plus | String | true | This status defines the number of additional rinses of a washer program of the home appliance. | washer, washerdryer |
| laundry_care_washer_rinse_hold | Switch | true | This status indicates whether the spin function is deactivated for a washer program of the home appliance (washing will remain in the water after the last rinse cycle). | washer, washerdryer |
| laundry_care_washer_soak | Switch | true | This status indicates whether the soaking is activated for a washer program of the home appliance. | washer, washerdryer |
| laundry_care_washer_load_recommendation | Number:Mass | true | This channel indicates the maximum laundry load recommended for a program of the home appliance. | washer, washerdryer |
| program_energy | Number:Dimensionless | true | This channel provides the estimated energy required in percentage for a program of the home appliance. | washer, washerdryer |
| program_water | Number:Dimensionless | true | This channel provides the estimated water required in percentage for a program of the home appliance. | washer, washerdryer |
| dryer_drying_target | String | false | This status defines the desired dryness of a program of the home appliance. | dryer, washerdryer |
| setpoint_temperature_refrigerator | Number:Temperature | false | Target temperature of the refrigerator compartment (range depends on appliance - common range 2 to 8°C). | fridgefreezer |
| setpoint_temperature_freezer | Number:Temperature | false | Target temperature of the freezer compartment (range depends on appliance - common range -16 to -24°C). | fridgefreezer |
| super_mode_refrigerator | Switch | false | The setting has no impact on setpoint temperatures but will make the fridge compartment cool to the lowest possible temperature until it is disabled manually by the customer or by the HA because of a timeout. | fridgefreezer |
| super_mode_freezer | Switch | false | This setting has no impact on setpoint temperatures but will make the freezer compartment cool to the lowest possible temperature until it is disabled manually by the customer or by the home appliance because of a timeout. | fridgefreezer |
| coffeemaker_drip_tray_full_state | Switch | true | Is coffee maker drip tray full? | coffeemaker |
| coffeemaker_water_tank_empty_state | Switch | true | Is coffee maker water tank empty? | coffeemaker |
| coffeemaker_bean_container_empty_state | Switch | true | Is coffee maker bean container empty? | coffeemaker |
| hood_venting_level | String | true | This option defines the required fan setting of the hood. | hood |
| hood_intensive_level | String | true | This option defines the intensive setting of the hood. | hood |
| hood_program_state | String | false | Adds hood controller actions to the appliance. The following commands are supported: `stop`, `venting1`, `venting2`, `venting3`, `venting4`, `venting5`, `ventingIntensive1`, `ventingIntensive1`, `automatic` and `delayed`. Furthermore it is possible to send raw (Home Connect JSON payload) to the home appliance. | hood |
| basic_actions_state | String | false | Adds basic controller actions to the appliance. The following basic commands are supported: `start` (start current selected program), `stop` (stop current program) and `selected` (show current program information). Furthermore it is possible to send raw (Home Connect JSON payload) to the home appliance. | dishwasher, oven, washer, washerdryer, dryer, coffeemaker |
| 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_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 |
| power_state | Switch | false | This setting describes the current power state of the home appliance. | dishwasher, oven, coffeemaker, hood, hob |
| door_state | Contact | true | This status describes the door state of a home appliance. A status change is either triggered by the user operating the home appliance locally (i.e. opening/closing door) or automatically by the home appliance (i.e. locking the door). | dishwasher, washer, washerdryer, dryer, oven, fridgefreezer |
| operation_state | String | true | This status describes the operation state of the home appliance. | dishwasher, washer, washerdryer, dryer, oven, hood, hob, coffeemaker |
| remote_start_allowance_state | Switch | true | This status indicates whether the remote program start is enabled. This can happen due to a programmatic change (only disabling), or manually by the user changing the flag locally on the home appliance, or automatically after a certain duration - usually in 24 hours. | dishwasher, washer, washerdryer, dryer, oven, hood, coffeemaker |
| remote_control_active_state | Switch | true | This status indicates whether the allowance for remote controlling is enabled. | dishwasher, washer, washerdryer, dryer, oven, hood, hob |
| active_program_state | String | true | This status describes the active program of the home appliance. | dishwasher, washer, washerdryer, dryer, oven, hood, hob, coffeemaker |
| selected_program_state | String | false | This state describes the selected program of the home appliance. | dishwasher, washer, washerdryer, dryer, oven, hob, coffeemaker |
| remaining_program_time_state | Number:Time | true | This status indicates the remaining program time of the home appliance. | dishwasher, washer, washerdryer, dryer, oven |
| elapsed_program_time | Number:Time | true | This status indicates the elapsed program time of the home appliance. | oven |
| program_progress_state | Number:Dimensionless | true | This status describes the program progress of the home appliance in percent. | dishwasher, washer, washerdryer, dryer, oven, coffeemaker |
| duration | Number:Time | true | This status describes the duration of the program of the home appliance. | oven |
| oven_current_cavity_temperature | Number:Temperature | true | This status describes the current cavity temperature of the home appliance. | oven |
| setpoint_temperature | Number:Temperature | false | This status describes the setpoint/target temperature of the home appliance. | oven |
| laundry_care_washer_temperature | String | false | This status describes the temperature of the washing program of the home appliance. | washer, washerdryer |
| laundry_care_washer_spin_speed | String | false | This status defines the spin speed of a washer program of the home appliance. | washer, washerdryer |
| laundry_care_washer_idos1_level | String | false | This status defines the i-Dos 1 dosing level of a washer program of the home appliance (if appliance supports i-Dos). | washer |
| laundry_care_washer_idos2_level | String | false | This status defines the i-Dos 2 dosing level of a washer program of the home appliance (if appliance supports i-Dos). | washer |
| laundry_care_washer_idos1 | Switch | true | This status indicates whether i-Dos 1 is activated for a washer program of the home appliance. (If appliance supports i-Dos) | washer |
| laundry_care_washer_idos2 | Switch | true | This status indicates whether i-Dos 2 is activated for a washer program of the home appliance. (If appliance supports i-Dos) | washer |
| laundry_care_washer_vario_perfect | String | true | This status defines the vario perfect mode of a washer program of the home appliance. | washer, washerdryer |
| laundry_care_washer_less_ironing | Switch | true | This status indicates whether less ironing is activated for a washer program of the home appliance. | washer, washerdryer |
| laundry_care_washer_pre_wash | Switch | true | This status indicates whether the pre-wash is activated for a washer program of the home appliance. | washer, washerdryer |
| laundry_care_washer_rinse_plus | String | true | This status defines the number of additional rinses of a washer program of the home appliance. | washer, washerdryer |
| laundry_care_washer_rinse_hold | Switch | true | This status indicates whether the spin function is deactivated for a washer program of the home appliance (washing will remain in the water after the last rinse cycle). | washer, washerdryer |
| laundry_care_washer_soak | Switch | true | This status indicates whether the soaking is activated for a washer program of the home appliance. | washer, washerdryer |
| laundry_care_washer_load_recommendation | Number:Mass | true | This channel indicates the maximum laundry load recommended for a program of the home appliance. | washer, washerdryer |
| program_energy | Number:Dimensionless | true | This channel provides the estimated energy required in percentage for a program of the home appliance. | washer, washerdryer |
| program_water | Number:Dimensionless | true | This channel provides the estimated water required in percentage for a program of the home appliance. | washer, washerdryer |
| dryer_drying_target | String | false | This status defines the desired dryness of a program of the home appliance. | dryer, washerdryer |
| setpoint_temperature_refrigerator | Number:Temperature | false | Target temperature of the refrigerator compartment (range depends on appliance - common range 2 to 8°C). | fridgefreezer |
| setpoint_temperature_freezer | Number:Temperature | false | Target temperature of the freezer compartment (range depends on appliance - common range -16 to -24°C). | fridgefreezer |
| super_mode_refrigerator | Switch | false | The setting has no impact on setpoint temperatures but will make the fridge compartment cool to the lowest possible temperature until it is disabled manually by the customer or by the HA because of a timeout. | fridgefreezer |
| super_mode_freezer | Switch | false | This setting has no impact on setpoint temperatures but will make the freezer compartment cool to the lowest possible temperature until it is disabled manually by the customer or by the home appliance because of a timeout. | fridgefreezer |
| coffeemaker_drip_tray_full_state | Switch | true | Is coffee maker drip tray full? | coffeemaker |
| coffeemaker_water_tank_empty_state | Switch | true | Is coffee maker water tank empty? | coffeemaker |
| coffeemaker_bean_container_empty_state | Switch | true | Is coffee maker bean container empty? | coffeemaker |
| hood_venting_level | String | true | This option defines the required fan setting of the hood. | hood |
| hood_intensive_level | String | true | This option defines the intensive setting of the hood. | hood |
| hood_program_state | String | false | Adds hood controller actions to the appliance. The following commands are supported: `stop`, `venting1`, `venting2`, `venting3`, `venting4`, `venting5`, `ventingIntensive1`, `ventingIntensive1`, `automatic` and `delayed`. Furthermore it is possible to send raw (Home Connect JSON payload) to the home appliance. | hood |
| basic_actions_state | String | false | Adds basic controller actions to the appliance. The following basic commands are supported: `start` (start current selected program), `stop` (stop current program) and `selected` (show current program information). Furthermore it is possible to send raw (Home Connect JSON payload) to the home appliance. | dishwasher, oven, washer, washerdryer, dryer, coffeemaker |
| 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_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 |
## 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")
@ -201,13 +191,13 @@ Features:
### Notification on credential error
To get notified when your Home Connect credentials have been revoked or expired you can use the following rule to get notified.
To get notified when your Home Connect credentials have been revoked or expired you can use the following rule to get notified.
This can happen if
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"
@ -236,17 +226,16 @@ Currently, not all program options of a device are available as items in openHAB
#### 1. Retrieve "special command" payload
You have a couple options to get the program settings payload.
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.
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
```
@ -175,9 +175,9 @@ If set to true, devices are automatically unpaired from the gateway when their c
If set to true, devices are automatically factory reset when their corresponding things are removed.
Due to the factory reset, the device will also be unpaired from the gateway, even if "unpairOnDeletion" is set to false! (default = false)
- **bufferSize**
If a large number of devices are connected to the gateway, the default buffersize of 2048 kB may be too small for communication with the gateway.
In this case, e.g. the discovery fails.
- **bufferSize**
If a large number of devices are connected to the gateway, the default buffersize of 2048 kB may be too small for communication with the gateway.
In this case, e.g. the discovery fails.
With this setting the buffer size can be adjusted. The value is specified in kB.
The syntax for a bridge is:
@ -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,17 +521,18 @@ 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.
Multiple lines can be updated within one command, use comma to separate each line.
Multiple lines can be updated within one command, use comma to separate each line.
Here an example for a rule file:
```java
@ -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.
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.
@ -663,7 +673,7 @@ In scripts:
:::: tabs
::: tab JavaScript
``` javascript
import org.openhab.core.types.RefreshType
...
@ -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

@ -1,7 +1,7 @@
# HomeWizard Binding
The HomeWizard binding retrieves measurements from the HomeWizard Wi-Fi P1 meter.
The meter itself is attached to a DSMR Smart Meter and reads out the telegrams, which it will forward to cloud storage.
The meter itself is attached to a DSMR Smart Meter and reads out the telegrams, which it will forward to cloud storage.
However, recently HomeWizard also added an interface that can be queried locally.
This binding uses that local interface to make the measurements available.
@ -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

@ -9,7 +9,7 @@ All channels are added dynamically depending on the type of printer and its capa
## Discovery
This binding uses mDNS for discovering HP Printers on the local network.
This binding uses mDNS for discovering HP Printers on the local network.
## Thing Configuration
@ -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,12 +177,12 @@ 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",
refresh=15] {
Channels:
Type string : text "Text" [ stateTransformation="JSONPATH:$.metadata.data" ]
baseURL="https://example.com/api/v1/metadata-api/web/metadata",
headers="key1=value1", "key2=value2", "key3=value3",
refresh=15] {
Channels:
Type string : text "Text" [ stateTransformation="JSONPATH:$.metadata.data" ]
}
```

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,9 +58,9 @@ 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;
})(input)
```
```

View File

@ -15,7 +15,7 @@ Both bridges are fully supported by this binding.
Almost all available Hue devices are supported by this binding.
This includes not only the "Friends of Hue", but also products like the LivingWhites adapter.
Additionally, it is possible to use OSRAM Lightify devices as well as other ZigBee LightLink compatible products, including the IKEA TRÅDFRI lights (when updated).
Additionally, it is possible to use OSRAM Lightify devices as well as other ZigBee LightLink compatible products, including the IKEA TRÅDFRI lights (when updated).
Beside bulbs and luminaires the Hue binding also supports some ZigBee sensors. Currently only Hue specific sensors are tested successfully (Hue Motion Sensor and Hue Dimmer Switch).
Please note that the devices need to be registered with the Hue Bridge before it is possible for this binding to use them.
@ -49,7 +49,7 @@ The following matrix lists the capabilities (channels) for each type:
Beside bulbs and luminaires the Hue binding supports some ZigBee sensors.
Currently only Hue specific sensors are tested successfully (e.g. Hue Motion Sensor, Hue Dimmer Switch, Hue Tap, CLIP Sensor).
The Hue Motion Sensor registers a `ZLLLightLevel` sensor (0106), a `ZLLPresence` sensor (0107) and a `ZLLTemperature` sensor (0302) in one device.
The Hue CLIP Sensor saves scene states with status or flag for HUE rules.
The Hue CLIP Sensor saves scene states with status or flag for HUE rules.
They are presented by the following ZigBee Device ID and _Thing type_:
| Device type | ZigBee Device ID | Thing type |
@ -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,52 +6,51 @@ 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.
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
The Local Thing type uses an undocumented API that allows direct HTTP access to an irrigation controller on the user's network.
This provides a subset of features compared to the Cloud Thing type limited to basic zone control.
Controlling zones through the local API will not be reported back to the cloud service or the Hydrawise mobile/web applications, and reporting functionality will not reflect the locally controlled state.
Controlling zones through the local API will not be reported back to the cloud service or the Hydrawise mobile/web applications, and reporting functionality will not reflect the locally controlled state.
Local control may not be available on later Hydrawise controller firmware versions.
Use Cases
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
@ -28,12 +28,12 @@ In order to use a Hyperion Server it must be properly configured. You can do th
| port | Integer | Y | 19444 |
| priority | Integer | Y | 50 |
| poll_frequency | Integer | Y | 15 |
To manually configure a Hyperion Server you must specify the following parameters: host, port, priority and polling frequency.
To manually configure a Hyperion Server you must specify the following parameters: host, port, priority and polling frequency.
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]
```
@ -48,12 +48,12 @@ In order to use a Hyperion.ng Server it must be properly configured. You can do
| priority | Integer | Y | 50 |
| poll_frequency | Integer | Y | 15 |
| origin | String | Y | "openHAB" |
To manually configure a Hyperion.ng Server you must specify the following parameters: host, port, priority, polling frequency and origin.
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"}
@ -114,15 +114,15 @@ Switch UdpListenerEnabled "UDP Listener" {channel="hyperion:serverNG:myServer:ud
Switch BoblightEnabled "Boblight" {channel="hyperion:serverNG:myServer:boblightserver"}
Switch GrabberEnabled "Grabber" {channel="hyperion:serverNG:myServer:grabber"}
Switch V4lEnabled "V4L" {channel="hyperion:serverNG:myServer:v4l"}
Switch LedDeviceEnabled "LED Device" {channel="hyperion:serverNG:myServer:leddevice"}
Switch LedDeviceEnabled "LED Device" {channel="hyperion:serverNG:myServer:leddevice"}
```
## Example Sitemap
Using the above things channels and items
Using the above things channels and items
Sitemap:
```
```perl
sitemap demo label="Main Menu" {
Frame {
// serverV1 & serverNG

View File

@ -1,16 +1,15 @@
# Iammeter Binding
# Iammeter Binding
[Iammeter](https://www.iammeter.com) provides real-time readings of single-phase (WEM3080, WEM3162) and three-phase (WEM3080T) meters from IAMMETER over Wi-Fi.
## Use of the binding
The Iammeter is exposed as one thing with a number of channels that can be used to read the values for different aspects of your Iammeter devices.
The Iammeter is exposed as one thing with a number of channels that can be used to read the values for different aspects of your Iammeter devices.
## Setup of the binding
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).
More information about the Iammeter devices can be found in the [Iammeter website](https://www.iammeter.com).

View File

@ -1,32 +1,30 @@
# iAquaLink Binding
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.
Auxiliary channels that are of a number type represent lighting modes (typically 0-15).
Auxiliary channels that are dimmer types can set the light value in increments of 25 (0,25,50,750,100).
The Auxiliary channel type will be dynamically assigned based on the controller configuration.
The Auxiliary channel type will be dynamically assigned based on the controller configuration.
Heater status can be OFF (0), Enabled/ON (3), or Heating (1).
@ -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

@ -45,7 +45,7 @@ Each `eventfilter` thing requires a bridge of type `calendar` and has following
## Channels
### Channels for `calendar`
### Channels for `calendar`
The channels of `calendar` describe the current and the next forthcoming event.
They are all read-only.
@ -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.
@ -131,24 +130,23 @@ Supported commands:
| DOWN | Rollershutter |
| TOGGLE | Switch |
All commands but `TOGGLE` are standard openHAB commands.
When `TOGGLE` command is specified, profile will toggle switch item state.
All commands but `TOGGLE` are standard openHAB commands.
When `TOGGLE` command is specified, profile will toggle switch item state.
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,13 +222,13 @@ 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
Channel 'innogysmarthome:WSC2:mybridge:myPushButton:button1' triggered PRESSED
then
// do something...
logInfo("testlogger", "Button 1 pressed")
logInfo("testlogger", "Button 1 pressed")
end
```
@ -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,53 +588,53 @@ 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" {
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"]
Switch item=keypadSwitchA label="button A"
Switch item=keypadSwitchB label="button B"
Switch item=keypadSwitchC label="button C"
Switch item=keypadSwitchD label="button D"
}
```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"]
Switch item=keypadSwitchA label="button A"
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",
@ -54,7 +54,7 @@ Thing ipcamera:generic:Esp32Cam
It is better to always setup your Amcrest camera as a `dahua` thing type.
The old alarm polling based method is used if you setup as `amcrest`, and the newer/better event based method is used if you setup as `dahua` instead.
All other features should be the same between the two.
All other features should be the same between the two.
### Dahua
@ -62,47 +62,47 @@ 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.
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`.
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.
```java
@ -121,12 +121,12 @@ 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
The discovery feature of openHAB can be used to find and setup any ONVIF cameras.
The discovery feature of openHAB can be used to find and setup any ONVIF cameras.
This method should be preferred as it will discover the cameras IP, ports and URLs for you, making the setup much easier.
The binding needs to use UDP port 3702 to discover the cameras with, so this port needs to be unblocked by your firewall or add the camera manually if the camera is not auto found.
To use the discovery, just press the `+` icon located in the Inbox, then select the IpCamera binding from the list of installed bindings.
@ -160,7 +160,7 @@ For ONVIF cameras that auto detect the wrong URL, these same fields can be used
NOTE: Leave any `user:pass@` out of any URLs, the binding will handle this for you.
Not only does this hide your login details, it will also make changing your password much easier if it is only located in 1 field.
Below is a list of all configuration parameters (useful for textual config) with a short description.
Below is a list of all configuration parameters (useful for textual config) with a short description.
If you do not specify any of these, the binding will use the default which should work in most cases and should be tried first.
| Parameter | Description |
@ -202,7 +202,7 @@ If you do not specify any of these, the binding will use the default which shoul
## Channels
Each camera brand will have different channels depending on how much of the support for an API has been added.
Each camera brand will have different channels depending on how much of the support for an API has been added.
The channels are kept consistent as much as possible from brand to brand to make upgrading to a different camera easier.
| Channel | Type | Description |
@ -269,25 +269,24 @@ 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.
After creating new or changing existing presets, it is necessary to send the REFRESH command to the `gotoPreset` channel or you can restart the binding if that is easier.
After creating new or changing existing presets, it is necessary to send the REFRESH command to the `gotoPreset` channel or you can restart the binding if that is easier.
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.
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,19 +338,19 @@ 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.
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.
A value of 10 on a slider translates to -10dB below max volume (digital full scale) and when the audio goes above the -10dB threshold the alarm will turn ON.
@ -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`.
The IP is for your openHAB server not the camera.
- 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.
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.
- 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.
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>
@ -384,37 +383,37 @@ See this forum thread for examples of how to use snapshots and streams in a site
To get video streams working, this forum thread has working widget examples that you can use.
<https://community.openhab.org/t/oh3-widget-building-a-camera-widget/110069>
To get some of the video formats working, you need to install FFmpeg.
To get some of the video formats working, you need to install FFmpeg.
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
```
**IMPORTANT:**
The binding has its own file server that works by allowing access to the snapshot and video streams with no user/password for requests that come from an IP located in the `ipWhitelist`.
Requests from external IPs or internal requests that are not on the `ipWhitelist` will fail to get any answer.
The binding has its own file server that works by allowing access to the snapshot and video streams with no user/password for requests that come from an IP located in the `ipWhitelist`.
Requests from external IPs or internal requests that are not on the `ipWhitelist` will fail to get any answer.
If you prefer to use your own firewall instead, you can also choose to make the `ipWhitelist` equal "DISABLE" and then all internal IPs will have access.
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.
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.
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.
- **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.
## MJPEG Streams
@ -434,18 +433,18 @@ 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.
FFmpeg may require you to lower the resolution and/or the FPS to lower the CPU load down enough to run, you may need to experiment.
To change the settings used by this feature the binding exposes the config `mjpegOptions` which the default is currently `-q:v 5 -r 2 -vf scale=640:-2 -update 1` where 5 is the JPG quality/compression setting, and -r 2 is how many frames per second to try and create.
In this case it will create 2 frames every second.
In this case it will create 2 frames every second.
`-vf scale=640:-2` will lower the resolution down to make the video 640 pixels wide.
You can remove this to use the same resolution as the camera is set to use, however it may become a trade off and you may get less frames per second if you raise the resolution.
Always try to get the default settings working first before you begin to experiment and if your stream is above 1080p and 10 frames per second, consider lowering it if you have issues on an ARM based server like a Raspberry PIx.
## snapshots.mjpeg and autofps.mjpeg
These similar features allow you to request a MJPEG stream created by the binding with low CPU usage from the cameras snapshots.
@ -453,16 +452,16 @@ Snapshots are usually high resolution and look great, however they are limited t
The reason this is more useful than snapshots on their own, is some UIs will flash white or black when a snapshot is refreshing, this does not happen with snapshots.mjpeg and is the same bandwidth and CPU load as just using snapshots!
The autofps.mjpeg feature will display a snapshot that updates every 8 seconds to keep network traffic low, then when motion is detected it will automatically increase the frames to every second until the motion stops.
This means lower traffic unless the picture is actually changing.
This means lower traffic unless the picture is actually changing.
Request the stream to be sent to an item with this URL.
Request the stream to be sent to an item with this URL.
NOTE: The IP is openHAB's not your cameras IP.
`http://openHAB:8080/ipcamera/{cameraUID}/snapshots.mjpeg`
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"
@ -471,9 +470,9 @@ Video url="http://openHAB:8080/ipcamera/{cameraUID}/snapshots.mjpeg" encoding="m
## HLS (HTTP Live Streaming)
HLS is a way of splitting the live stream up into small H.264 based files so it can be played in many browsers (some require addons to be installed) without using much CPU power as cameras generally are already in H.264 and this does not transcode the data.
Because the files need to be created, this creates a lag/delay behind real time that can be reduced (more on that below).
Because the files need to be created, this creates a lag/delay behind real time that can be reduced (more on that below).
The channel called 'startStream' can be used to create HLS files non stop and will remove the startup delay that comes with using this type of stream.
The channel called 'startStream' can be used to create HLS files non stop and will remove the startup delay that comes with using this type of stream.
The startup delay and the lag are two different things, with the startup delay easily solved by turning this channel ON.
If the channel is OFF, the stream will start and stop automatically as required and the channel will reflect its current status.
With a fast openHAB server it should only need to be requested once, but on slower ARM systems it takes a while for FFmpeg to get up and running at full speed.
@ -483,23 +482,23 @@ 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
To create a tmpfs of 20mb at /tmpfs/ run this command to open the file for editing.
To create a tmpfs of 20mb at /tmpfs/ run this command to open the file for editing.
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.
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,19 +581,18 @@ 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.
This must use the HLS format and use the metadata tag shown below with the openHAB Cloud Connector setup.
Don't forget to ask Google to 'sync my devices' after adding the metadata.
Don't forget to ask Google to 'sync my devices' after adding the metadata.
The synonyms in the tag allows Google to understand multiple names that the camera may be called by different people in your family.
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.
@ -22,7 +22,7 @@ receive the password and go ONLINE.
After you've done this procedure you can write the password somewhere in case if you need to reconfigure your binding. It's
not known, however, whether the password is eternal or can change during factory reset.
If you have issues getting the password make sure there are no other devices like your smartphone communicating with the robot.
You can also try using [these python scripts](https://github.com/NickWaterton/Roomba980-Python) to get the password.
You can also try using [these python scripts](https://github.com/NickWaterton/Roomba980-Python) to get the password.
## Thing Configuration
@ -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,37 +16,37 @@ 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.
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.
## Full Example
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

@ -2,13 +2,13 @@
_This binding can receive values of the Wolf heating system._
The ISM8 card can be placed into the Wolf heating system.
The card is usually used in combination with an object server, where the object server does forward those messages into the KNX bus system.
In case there is no need to handle the heating system values directly in the KNX system you can use this binding to monitor and control your heating system without the need to buy an object server.
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.
The ISM8 card can be placed into the Wolf heating system.
The card is usually used in combination with an object server, where the object server does forward those messages into the KNX bus system.
In case there is no need to handle the heating system values directly in the KNX system you can use this binding to monitor and control your heating system without the need to buy an object server.
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.
@ -28,58 +27,56 @@ For this reason you need to create a Thing configuration, where basically only t
## Channels
You can use any channel supported by the ISM8 as data point. Please have a look at the official manual from Wolf.
Within this document you'll find a table containing all supported data points.
The available data points are depending on your heating system configuration.
Within this document you'll find a table containing all supported data points.
The available data points are depending on your heating system configuration.
The ISM8 does currently support 4 different devices at the same moment of time (e.g. CGB-2, CWL Excellent, Solar, ...).
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.
A list of the available IDs are available within the Wolf manual.
- 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,89 +102,96 @@ _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" }
_demo.sitemap_
```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" }
```
Frame label="Heizung"
{
Text item=ISM_HeizungSysStoerung icon="siren"
Text item=ISM_HeizungStoerung icon="siren"
Text item=ISM_HeizungAussentemperatur icon="temperature"
Text item=ISM_HeizungBetriebsart icon="radiator" label="Modus [MAP(HVACContrMode.map):%s]"
Text item=ISM_HeizungAnlagendruck icon="pressure"
Text item=ISM_HeizungBrennerleistung icon="chart"
Selection item=ISM_HeizungBetriebsartHeizkreis icon="radiator" mappings=[0="Auto", 1="Komfort", 2="Stand By", 3="Eco", 4="Frost Schutz"]
Text item=ISM_HeizungStatusFlamme icon="fire"
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"
{
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"
{
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"
Text item=ISM_LueftungFilterwarnung icon="siren"
Text item=ISM_LueftungAblufttemperatur icon="temperature_hot"
Text item=ISM_LueftungZulufttemperatur icon="temperature_cold"
Text item=ISM_LueftungLuftdurchsatzZuluft icon="flow"
Text item=ISM_LueftungLuftdurchsatzAbluft icon="flow"
}
### demo.sitemap
_HVACContrMode.map_
```perl
Frame label="Heizung"
{
Text item=ISM_HeizungSysStoerung icon="siren"
Text item=ISM_HeizungStoerung icon="siren"
Text item=ISM_HeizungAussentemperatur icon="temperature"
Text item=ISM_HeizungBetriebsart icon="radiator" label="Modus [MAP(HVACContrMode.map):%s]"
Text item=ISM_HeizungAnlagendruck icon="pressure"
Text item=ISM_HeizungBrennerleistung icon="chart"
Selection item=ISM_HeizungBetriebsartHeizkreis icon="radiator" mappings=[0="Auto", 1="Komfort", 2="Stand By", 3="Eco", 4="Frost Schutz"]
Text item=ISM_HeizungStatusFlamme icon="fire"
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"
{
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"
{
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"
Text item=ISM_LueftungFilterwarnung icon="siren"
Text item=ISM_LueftungAblufttemperatur icon="temperature_hot"
Text item=ISM_LueftungZulufttemperatur icon="temperature_cold"
Text item=ISM_LueftungLuftdurchsatzZuluft icon="flow"
Text item=ISM_LueftungLuftdurchsatzAbluft icon="flow"
}
```
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
### HVACContrMode.map
```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
@ -11,7 +11,7 @@ https://www.jablotron.com/en/jablotron-products/alarms/
| JA-80 | the OASIS alarm |
| JA-100 | with the thermometer support |
| JA-100F | without the thermometer support |
## Discovery
This binding supports auto discovery. Just manually add a bridge thing and supply login & password to your Jablonet account.
@ -60,30 +60,30 @@ 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" }
Switch ArmSectionAB "1st floor arming" <jablotron> (Alarm) { channel="jablotron:oasis:8c93a5ed:50139:statusB" }
Switch ArmSectionABC "2nd floor arming" <jablotron> (Alarm) { channel="jablotron:oasis:8c93a5ed:50139:statusABC" }
Switch ArmSectionA "Garage arming" <jablotron> (Alarm) { channel="jablotron:oasis:8c93a5ed:50139:statusA" }
Switch ArmSectionAB "1st floor arming" <jablotron> (Alarm) { channel="jablotron:oasis:8c93a5ed:50139:statusB" }
Switch ArmSectionABC "2nd floor arming" <jablotron> (Alarm) { channel="jablotron:oasis:8c93a5ed:50139:statusABC" }
String LastEvent "Last event code [%s]" <jablotron> { channel="jablotron:oasis:8c93a5ed:50139:lastEvent" }
String LastEventClass "Last event class [%s]" <jablotron> { channel="jablotron:oasis:8c93a5ed:50139:lastEventClass" }
String LastEventInvoker "Last event class [%s]" <jablotron> { channel="jablotron:oasis:8c93a5ed:50139:lastEventInvoker" }
DateTime LastEventTime "Last event [%1$td.%1$tm.%1$tY %1$tR]" <clock> { channel="jablotron:oasis:8c93a5ed:50139:lastEventTime" }
DateTime LastCheckTime "Last check [%1$td.%1$tm.%1$tY %1$tR]" <clock> { channel="jablotron:oasis:8c93a5ed:50139:lastCheckTime" }
Switch ArmControlPGX "PGX" <jablotron> (Alarm) { channel="jablotron:oasis:8c93a5ed:50139:statusPGX" }
Switch ArmControlPGY "PGY" <jablotron> (Alarm) { channel="jablotron:oasis:8c93a5ed:50139:statusPGY" }
Switch ArmControlPGX "PGX" <jablotron> (Alarm) { channel="jablotron:oasis:8c93a5ed:50139:statusPGX" }
Switch ArmControlPGY "PGY" <jablotron> (Alarm) { channel="jablotron:oasis:8c93a5ed:50139:statusPGY" }
```
# 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

@ -1,7 +1,7 @@
# Jellyfin Binding
This is the binding for [Jellyfin](https://jellyfin.org) the volunteer-built media solution that puts you in control of your media.
Stream to any device from your own server, with no strings attached.
This is the binding for [Jellyfin](https://jellyfin.org) the volunteer-built media solution that puts you in control of your media.
Stream to any device from your own server, with no strings attached.
Your media, your server, your way.
This binding allows connect to Jellyfin clients that supports remote control, it's build on top of the official Jellyfin kotlin sdk.
Compatible with Jellyfin servers in version 10.8.x.
@ -15,7 +15,7 @@ Before open an issue please test you are able to correctly control your device f
## Discovery
Before you are able to discover clients you should have a bridge to the server so until one is online the discovery will only look for servers on your local network. Once one is online the discovery will detect controllable clients connected to that server.
Before you are able to discover clients you should have a bridge to the server so until one is online the discovery will only look for servers on your local network. Once one is online the discovery will detect controllable clients connected to that server.
## Thing Types
@ -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,32 +85,32 @@ 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",
port=8096,
refreshSeconds=30,
ssl="false"
clientActiveWithInSeconds=0,
hostname="192.168.1.177",
port=8096,
refreshSeconds=30,
ssl="false"
token=XXXXX # Optional, read bellow
userId=XXXXX # Optional, read bellow
]
```
* 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

@ -8,7 +8,7 @@ In addition to getting the status of various items from the EV charger, it is al
This binding supports the following things:
| thing | type | description |
|---------- |-------- |------------------------------ |
|---------- |-------- |------------------------------ |
| JuiceNet Account | Bridge | This represents the cloud account to interface with the JuiceNet API. |
| JuiceBox EV Charger | Device | This interfaces to a specific JuiceBox EV charger associated with the JuiceNet account. |
@ -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

@ -15,94 +15,93 @@ 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 |
| maxpresetcurrentrange | Number:Dimensionless | no | maximum current the charging station should deliver to the EV in % |
| power | Number:Power | yes | active power delivered by the charging station |
| wallbox | Switch | yes | plug state of wallbox |
| vehicle | Switch | yes | plug state of vehicle |
| locked | Switch | yes | lock state of plug at vehicle |
| I1/2/3 | Number:ElectricCurrent | yes | current for the given phase |
| U1/2/3 | Number:ElectricPotential | yes | voltage for the given phase |
| output | Switch | no | state of the X1 relais |
| input | Switch | yes | state of the X2 contact |
| display | String | no | display text on wallbox |
| error1 | String | yes | error code state 1, if in error (see the KeContact FAQ) |
| error2 | String | yes | error code state 2, if in error (see the KeContact FAQ) |
| maxsystemcurrent | Number:ElectricCurrent | yes | maximum current the wallbox can deliver |
| failsafecurrent | Number:ElectricCurrent | yes | maximum current the wallbox can deliver, if network is lost |
| uptime | Number:Time | yes | system uptime since the last reset of the wallbox |
| sessionconsumption | Number:Energy | yes | energy delivered in current session |
| totalconsumption | Number:Energy | yes | total energy delivered since the last reset of the wallbox |
| authreq | Switch | yes | authentication required |
| authon | Switch | yes | authentication enabled |
| sessionrfidtag | String | yes | RFID tag used for the last charging session |
| sessionrfidclass | String | yes | RFID tag class used for the last charging session |
| sessionid | Number | yes | session ID of the last charging session |
| setenergylimit | Number:Energy | no | set an energy limit for an already running or the next charging session |
| authenticate | String | no | authenticate and start a session using RFID tag+RFID class |
| maxpilotcurrent | Number:ElectricCurrent | yes | current offered to the vehicle via control pilot signalization |
| maxpilotcurrentdutycyle | Number:Dimensionless | yes | duty cycle of the control pilot signal |
| 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 |
| maxpresetcurrentrange | Number:Dimensionless | no | maximum current the charging station should deliver to the EV in % |
| power | Number:Power | yes | active power delivered by the charging station |
| wallbox | Switch | yes | plug state of wallbox |
| vehicle | Switch | yes | plug state of vehicle |
| locked | Switch | yes | lock state of plug at vehicle |
| I1/2/3 | Number:ElectricCurrent | yes | current for the given phase |
| U1/2/3 | Number:ElectricPotential | yes | voltage for the given phase |
| output | Switch | no | state of the X1 relais |
| input | Switch | yes | state of the X2 contact |
| display | String | no | display text on wallbox |
| error1 | String | yes | error code state 1, if in error (see the KeContact FAQ) |
| error2 | String | yes | error code state 2, if in error (see the KeContact FAQ) |
| maxsystemcurrent | Number:ElectricCurrent | yes | maximum current the wallbox can deliver |
| failsafecurrent | Number:ElectricCurrent | yes | maximum current the wallbox can deliver, if network is lost |
| uptime | Number:Time | yes | system uptime since the last reset of the wallbox |
| sessionconsumption | Number:Energy | yes | energy delivered in current session |
| totalconsumption | Number:Energy | yes | total energy delivered since the last reset of the wallbox |
| authreq | Switch | yes | authentication required |
| authon | Switch | yes | authentication enabled |
| sessionrfidtag | String | yes | RFID tag used for the last charging session |
| sessionrfidclass | String | yes | RFID tag class used for the last charging session |
| sessionid | Number | yes | session ID of the last charging session |
| setenergylimit | Number:Energy | no | set an energy limit for an already running or the next charging session |
| authenticate | String | no | authenticate and start a session using RFID tag+RFID class |
| 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:
```
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"}
Number:ElectricCurrent KebaFailSafeCurrent "Failsafe supply current [%.3f A]" {channel="keba:kecontact:1:failsafecurrent"}
Number KebaState "Operating State [%s]" {channel="keba:kecontact:1:state"}
Switch KebaSwitch "Enabled" {channel="keba:kecontact:1:enabled"}
Switch KebaWallboxPlugged "Plugged into wallbox" {channel="keba:kecontact:1:wallbox"}
Switch KebaVehiclePlugged "Plugged into vehicle" {channel="keba:kecontact:1:vehicle"}
Switch KebaPlugLocked "Plug locked" {channel="keba:kecontact:1:locked"}
DateTime KebaUptime "Uptime [%s s]" {channel="keba:kecontact:1:uptime"}
Number:ElectricCurrent KebaI1 {channel="keba:kecontact:1:I1"}
Number:ElectricCurrent KebaI2 {channel="keba:kecontact:1:I2"}
Number:ElectricCurrent KebaI3 {channel="keba:kecontact:1:I3"}
Number:ElectricPotential KebaU1 {channel="keba:kecontact:1:U1"}
Number:ElectricPotential KebaU2 {channel="keba:kecontact:1:U2"}
Number:ElectricPotential KebaU3 {channel="keba:kecontact:1:U3"}
Number:Power KebaPower "Energy during current session [%.1f Wh]" {channel="keba:kecontact:1:power"}
Number:Energy KebaSessionEnergy {channel="keba:kecontact:1:sessionconsumption"}
Number:Energy KebaTotalEnergy "Energy during all sessions [%.1f Wh]" {channel="keba:kecontact:1:totalconsumption"}
Switch KebaInputSwitch {channel="keba:kecontact:1:input"}
Switch KebaOutputSwitch {channel="keba:kecontact:1:output"}
Number:Energy KebaSetEnergyLimit "Set charge energy limit [%.1f Wh]" {channel="keba:kecontact:1:setenergylimit"}
```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"}
Number:ElectricCurrent KebaFailSafeCurrent "Failsafe supply current [%.3f A]" {channel="keba:kecontact:1:failsafecurrent"}
Number KebaState "Operating State [%s]" {channel="keba:kecontact:1:state"}
Switch KebaSwitch "Enabled" {channel="keba:kecontact:1:enabled"}
Switch KebaWallboxPlugged "Plugged into wallbox" {channel="keba:kecontact:1:wallbox"}
Switch KebaVehiclePlugged "Plugged into vehicle" {channel="keba:kecontact:1:vehicle"}
Switch KebaPlugLocked "Plug locked" {channel="keba:kecontact:1:locked"}
DateTime KebaUptime "Uptime [%s s]" {channel="keba:kecontact:1:uptime"}
Number:ElectricCurrent KebaI1 {channel="keba:kecontact:1:I1"}
Number:ElectricCurrent KebaI2 {channel="keba:kecontact:1:I2"}
Number:ElectricCurrent KebaI3 {channel="keba:kecontact:1:I3"}
Number:ElectricPotential KebaU1 {channel="keba:kecontact:1:U1"}
Number:ElectricPotential KebaU2 {channel="keba:kecontact:1:U2"}
Number:ElectricPotential KebaU3 {channel="keba:kecontact:1:U3"}
Number:Power KebaPower "Energy during current session [%.1f Wh]" {channel="keba:kecontact:1:power"}
Number:Energy KebaSessionEnergy {channel="keba:kecontact:1:sessionconsumption"}
Number:Energy KebaTotalEnergy "Energy during all sessions [%.1f Wh]" {channel="keba:kecontact:1:totalconsumption"}
Switch KebaInputSwitch {channel="keba:kecontact:1:input"}
Switch KebaOutputSwitch {channel="keba:kecontact:1:output"}
Number:Energy KebaSetEnergyLimit "Set charge energy limit [%.1f Wh]" {channel="keba:kecontact:1:setenergylimit"}
```
demo.sitemap:
```
```perl
sitemap demo label="Main Menu"
{
Text label="Charging Station" {
Text item=KebaState
Text item=KebaUptime
Switch item=KebaSwitch
Switch item=KebaWallboxPlugged
Switch item=KebaVehiclePlugged
Switch item=KebaPlugLocked
Slider item=KebaCurrentRange
Text item=KebaCurrent
Text item=KebaSystemCurrent
Text item=KebaFailSafeCurrent
Text item=KebaSessionEnergy
Text item=KebaTotalEnergy
Switch item=KebaSetEnergyLimit
}
Text label="Charging Station" {
Text item=KebaState
Text item=KebaUptime
Switch item=KebaSwitch
Switch item=KebaWallboxPlugged
Switch item=KebaVehiclePlugged
Switch item=KebaPlugLocked
Slider item=KebaCurrentRange
Text item=KebaCurrent
Text item=KebaSystemCurrent
Text item=KebaFailSafeCurrent
Text item=KebaSessionEnergy
Text item=KebaTotalEnergy
Switch item=KebaSetEnergyLimit
}
}
```
@ -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

@ -1,9 +1,9 @@
# KM200 Binding
The KM200 Binding is communicating with a [Buderus Logamatic web KM200 / KM100 / KM50](https://www.buderus.de/de/produkte/catalogue/alle-produkte/7719_gateway-logamatic-web-km200-km100-km50).
The KM200 Binding is communicating with a [Buderus Logamatic web KM200 / KM100 / KM50](https://www.buderus.de/de/produkte/catalogue/alle-produkte/7719_gateway-logamatic-web-km200-km100-km50).
It is possible to receive and send parameters like string or float values.
**Important**: If the communication is not working and you see in the logfile errors like "illegal key size" then you have to change the [Java Cryptography Extension to the Unlimited Strength Jurisdiction](https://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html).
**Important**: If the communication is not working and you see in the logfile errors like "illegal key size" then you have to change the [Java Cryptography Extension to the Unlimited Strength Jurisdiction](https://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html).
## Supported Things
@ -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,16 +58,16 @@ 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"
heatingCircuit 1 "TestHC1"
sensor 1 "TestSensors"
}
```
`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) |
@ -105,12 +105,12 @@ The Kodi thing supports the following channels:
| subtitle-enabled | Switch | Display/hidden subtitle |
| subtitle-index | Number | Set or get subtitle index of currently playing media |
| subtitle-language | String | Display subtitle language of currently playing media |
| subtitle-name | String | Display subtitle title of currently playing media |
| subtitle-name | String | Display subtitle title of currently playing media |
| audio-index | Number | Audio stream index of currently playing media |
| audio-codec | String | Audio codec of currently playing media **(Advanced)** |
| audio-language | String | Display language of currently playing audio stream **(Advanced)** |
| audio-name | String | Display title of currently playing audio stream **(Advanced)** |
| audio-channels | Number | Display channels of currently playing audio stream **(Advanced)** |
| audio-name | String | Display title of currently playing audio stream **(Advanced)** |
| audio-channels | Number | Display channels of currently playing audio stream **(Advanced)** |
| video-codec | String | Video codec of currently playing media **(Advanced)** |
| video-index | Number | Index of currently playing multi stream video **(Advanced)** |
| video-height | Number | Height of currently playing video **(Advanced)** |
@ -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

@ -1,8 +1,8 @@
# Konnected Binding
This binding is for interacting with a [Konnected Alarm Panel](https://konnected.io/).
Konnected Alarm Panels can connect to security sensors directly or interface with existing alarm panels.
Konnected is an open-source firmware and software that runs on a NodeMCU.
This binding is for interacting with a [Konnected Alarm Panel](https://konnected.io/).
Konnected Alarm Panels can connect to security sensors directly or interface with existing alarm panels.
Konnected is an open-source firmware and software that runs on a NodeMCU.
The Konnected hardware is designed for an alarm panel installation, but the general purpose firmware/software can be run on a generic NodeMCU device.
## Supported Things
@ -16,24 +16,23 @@ The binding will then create things for each module discovered which can be adde
## Thing Configuration
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 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 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).
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`).
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"*.
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"_.
## Discovery
@ -50,27 +50,27 @@ None
### First generation devices (PIKO)
- acPower
- totalEnergy
- dayEnergy
- status
- str1Voltage
- str1Current
- str2Voltage
- str2Current
- l1Voltage
- l1Power
- l2Voltage
- l2Power
- l3Voltage
- l3Power
- acPower
- totalEnergy
- dayEnergy
- status
- str1Voltage
- str1Current
- str2Voltage
- str2Current
- l1Voltage
- l1Power
- l2Voltage
- l2Power
- l3Voltage
- l3Power
### Second generation devices (PIKO 10-20, PIKO NEW GENERATION)
| Channel Type ID | Item Type | Description | Read Write |
|------------------------------------------|--------------------------|----------------------------------------------------------------------------------|:----------:|
| device-local-grid-output-power | Number:Power | Current output power to the grid | R |
| statistic-yield-day-second-gen | Number:Energy | Total produced power today | R |
|------------------------------------------|--------------------------|----------------------------------------------------------------------------------|:----------:|
| device-local-grid-output-power | Number:Power | Current output power to the grid | R |
| statistic-yield-day-second-gen | Number:Energy | Total produced power today | R |
| statistic-yield-total-second-gen | Number:Energy | Total produced power | R |
| device-local-operating-status | Number:Dimensionless | Current operating status, 0 = Standby, 3 = WO-IDLE | R |
| device-local-grid-voltage-l1 | Number:ElectricPotential | Current output voltage to the grid, L1 | R |
@ -109,10 +109,10 @@ None
| statistic-operating-time-total | Number:Time | Total operating time | R |
| device-local-current | Number:ElectricCurrent | Current | R |
| device-local-current-dir | Number:Dimensionless | Current direction of loading/unloading the battery | R |
| device-local-charge-cycles | Number:Dimensionless | Total number of charge cycles | R |
| device-local-charge-cycles | Number:Dimensionless | Total number of charge cycles | R |
| device-local-battery-temperature | Number:Temperature | Battery current temperature | R |
| device-local-loginterval | Number:Time | Value for loginterval | R |
| device-local-s0-inpulse-cnt | Number:Dimensionless | S0-pulse counter | R |
| device-local-s0-inpulse-cnt | Number:Dimensionless | S0-pulse counter | R |
| statistic-own-cons-rate-total | Number:Dimensionless | Total own comsumption rate | R |
| statistic-autonomy-degree-total | Number:Dimensionless | Total autonomy degree | R |
| device-local-battery-voltage | Number:ElectricPotential | Battery current voltage | R |
@ -126,9 +126,9 @@ None
The following Channels are writeable
| Channel Type ID | Item Type | Description | Read Write |
|------------------------------------------|--------------------------|----------------------------------------------------------------------------------|:----------:|
|------------------------------------------|--------------------------|----------------------------------------------------------------------------------|:----------:|
| device-local-battery-usage-consumption-set| String | Battery usage consumption level for power-consumption from battery, value = 100 (W) | W |
| device-local-battery-usage-strategy-set | String | Battery usage strategy, Value = 1 = Automatic, Value = 2 = Automatic economical | W |
| device-local-battery-usage-strategy-set | String | Battery usage strategy, Value = 1 = Automatic, Value = 2 = Automatic economical | W |
| device-local-smart-battery-control-set | Switch | Smart battery control, Value = OFF / ON | W |
| device-local-battery-charge-time-from-set| String | Battery charge time from, Value = 00:00 | W |
| device-local-battery-charge-time-to-set | String | Battery charge time to, Value = 23:59 | W |
@ -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):
@ -237,20 +235,16 @@ Second generation inverters require 4 mandatory parameters and 1 optional (hasBa
| username | Username for your inverter | Text | --- | --- | myUsername |
| password | Password for your inverter | Text | --- | --- | myPassword |
| refreshInterval | Pollingintervall of your inverter | Integer | Seconds | 60 | 60 |
| hasBattery | Type of PIKO 10-20 inverter, with or without battery | boolean | --- | -- | false/true |
| hasBattery | Type of PIKO 10-20 inverter, with or without battery | boolean | --- | -- | false/true |
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,23 +135,23 @@ 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"}
```
By setting a text on the item, the binding will send the notification which is then shown on the LaMetric device.
By setting a text on the item, the binding will send the notification which is then shown on the LaMetric device.
In a rule this can be done the following way:
```
```java
DeviceNotifyInfo.sendCommand("My Information Message to be displayed")
```
## Items
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,27 +466,27 @@ 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:
Thing module M99 "M99 MyModule" [ moduleId=99, segmentId=0 ] {
Channels:
Rollershutter : rollershutterrelay#1 "My twisted rollershutter relay" [ invertUpDown = true ]
Contact : binarysensor#6 [ invertState=true ]
Number : rvarsetpoint#1 [ unit="temperature" ]
Number : variable#3 [ unit="temperature" ]
}
Contact : binarysensor#6 [ invertState=true ]
Number : rvarsetpoint#1 [ unit="temperature" ]
Number : variable#3 [ unit="temperature" ]
}
}
```
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

@ -20,7 +20,7 @@ If channel `power` receives `ON`, the binding will attempt to power on the TV by
## Binding Configuration
The binding has no configuration parameter.
The binding has no configuration parameter.
## Discovery
@ -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

@ -4,7 +4,7 @@ This binding uses the API provided by Enedis to retrieve your energy consumption
You need to create an Enedis account [here](https://espace-client-connexion.enedis.fr/auth/UI/Login?realm=particuliers) if you don't have one already.
Please ensure that you have accepted their conditions, and check that you can see graphs on the website.
Especially, check hourly view/graph. Enedis may ask for permission the first time to start collecting hourly data.
Especially, check hourly view/graph. Enedis may ask for permission the first time to start collecting hourly data.
The binding will not provide these informations unless this step is ok.
## Supported Things
@ -32,16 +32,16 @@ The thing has the following configuration parameters:
This version is now compatible with the new API of Enedis (deployed from june 2020).
To avoid the captcha login, it is necessary to log before on a classical browser (e.g Chrome, Firefox) and to retrieve the user cookies (internalAuthId).
Instructions given for Firefox :
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,13 +8,13 @@ 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
The `reader` Thing has the following configuration parameters:
The `reader` Thing has the following configuration parameters:
| Parameter | Type | Required | Default if omitted | Description |
| ------------------------------| ------- | -------- | -------------------------------- |-----------------------------------------------------------------------------------------|
@ -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,25 +73,25 @@ String logreaderLastCustom "Last Custom [%s]"
### example.sitemap
```xtend
```perl
sitemap logreader_example label="Example" {
Frame label="openHAB Log Reader" {
Text item=logreaderErrors
Text item=logreaderLastError
Text item=logreaderWarnings
Text item=logreaderLastWarning
Text item=logreaderCustoms
Text item=logreaderLastCustom
Text item=logreaderLogRotated
}
Frame label="openHAB Log Reader" {
Text item=logreaderErrors
Text item=logreaderLastError
Text item=logreaderWarnings
Text item=logreaderLastWarning
Text item=logreaderCustoms
Text item=logreaderLastCustom
Text item=logreaderLogRotated
}
}
```
### 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
@ -90,7 +95,7 @@ The binding supports the following authentication methods, which are selected au
| Hash-based | 8.x | HMAC-SHA1 hash on user and password | None | None |
| Token-based | From 9.x | Token acquired on the first connection and used later instead of the password. | AES-256 | JRE must have unrestricted security policy configured |
For the token-based authentication, the password is required only for the first login and acquiring the token. After the token is acquired, the password is cleared in the binding configuration.
For the token-based authentication, the password is required only for the first login and acquiring the token. After the token is acquired, the password is cleared in the binding configuration.
The acquired token will remain active for several weeks following the last succesful authentication with this token. If the connection is not established used during that period and the token expires, a user password has to be re-entered in the binding settings to acquire a new token.
@ -125,19 +130,19 @@ Currently supported controls are presented in the table below.
| EIBDimmer | EIB Dimmer (undocumented) | `Dimmer` | `OnOffType.*`, `PercentType`, `IncreaseDecreaseType.*` |
| InfoOnlyAnalog | Analog [virtual inputs](https://www.loxone.com/enen/kb/virtual-inputs-outputs/) (virtual state) | `Number` | Read-only channel |
| InfoOnlyDigital | Digital [virtual inputs](https://www.loxone.com/enen/kb/virtual-inputs-outputs/) (virtual state) | `String` | Read-only channel |
| IRoomControllerV2 | [Intelligent Room Controller V2](https://www.loxone.com/enen/kb/irc-v2/) | `Number` - active mode | Read-only channel |
| | | `Number` - operating mode | `DecimalType` - operating mode |
| | | `Number` - prepare state | Read-only channel |
| | | `Switch` - open window | Read-only channel |
| | | `Number` - current temperature | Read-only channel |
| | | `Number` - target temperature | `DecimalType` |
| | | `Number` - comfort temperature | `DecimalType` |
| | | `Number` - comfort temperature offset | `DecimalType` |
| | | `Number` - comfort tolerance | `DecimalType` |
| | | `Number` - absent minimum temperature offset | `DecimalType` |
| | | `Number` - absent maximum temperature offset | `DecimalType` |
| | | `Number` - frost protect temperature | Read-only channel |
| | | `Number` - heat protect temperature | Read-only channel |
| IRoomControllerV2 | [Intelligent Room Controller V2](https://www.loxone.com/enen/kb/irc-v2/) | `Number` - active mode | Read-only channel |
| | | `Number` - operating mode | `DecimalType` - operating mode |
| | | `Number` - prepare state | Read-only channel |
| | | `Switch` - open window | Read-only channel |
| | | `Number` - current temperature | Read-only channel |
| | | `Number` - target temperature | `DecimalType` |
| | | `Number` - comfort temperature | `DecimalType` |
| | | `Number` - comfort temperature offset | `DecimalType` |
| | | `Number` - comfort tolerance | `DecimalType` |
| | | `Number` - absent minimum temperature offset | `DecimalType` |
| | | `Number` - absent maximum temperature offset | `DecimalType` |
| | | `Number` - frost protect temperature | Read-only channel |
| | | `Number` - heat protect temperature | Read-only channel |
| Jalousie | Blinds, [Automatic Blinds](https://www.loxone.com/enen/kb/automatic-blinds/), Automatic Blinds Integrated | `Rollershutter` - main control element | `UpDownType.*`, `StopMoveType.*`, `PercentType` |
| | | `Switch` - shading | `OnOffType.ON` - shade |
| | | `Switch` - automatic shading | `OnOffType.*` - automatic shading enabled/disabled |
@ -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,23 +36,23 @@ 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)
## Channels
### Particulate Sensor
### Particulate Sensor
| Channel ID | Item Type | Description |
|----------------------|----------------------|------------------------------------------|
| pm25 | Number:Density | [Ultrafine particulates](https://en.wikipedia.org/wiki/Particulates#Size,_shape_and_solubility_matter) microgram per cubic meter |
| pm100 | Number:Density | [Coarse particulate matter](https://en.wikipedia.org/wiki/Particulates#Size,_shape_and_solubility_matter) microgram per cubic meter |
### Conditions Sensor
### Conditions Sensor
| Channel ID | Item Type | Description |
|----------------------|----------------------|------------------------------------------|
@ -61,8 +61,7 @@ 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
### 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:
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
@ -22,10 +23,10 @@ This binding currently supports the following thing types:
The Bridge thing has two parameters:
- ipAddress: This is the IP address of the IP interface module
- 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"] {
...
}
@ -33,37 +34,37 @@ Bridge luxom:bridge:myhouse [ ipAddress="192.168.0.50", port="2300"] {
### Devices
Each device has an address on the Luxom bus, this address must be specified in the 'address' parameter.
You will have to look it up in your documentation or in the 'Luxom Plusconfig' software.
Each device has an address on the Luxom bus, this address must be specified in the 'address' parameter.
You will have to look it up in your documentation or in the 'Luxom Plusconfig' software.
Sometimes a device does not send back a confirmation over the bus having set the correct state.
Some dimmers do the dimming, but do not send back the set brightness level.
Sometimes a device does not send back a confirmation over the bus having set the correct state.
Some dimmers do the dimming, but do not send back the set brightness level.
To be able to use these devices, you can add the `doesNotReply=true` parameter so that the binding immediately sets the item's state and does not wait for confirmation.
#### Dimmers
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) {
sendCommand(MagentaTV_Power, ON)
}
```java
if (MagentaTV_Power.state != ON) {
sendCommand(MagentaTV_Power, ON)
}
```
to switch it ON and
```
if (MagentaTV_Power.state != OFF) {
sendCommand(MagentaTV_Power, 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

@ -74,7 +74,7 @@ Bridge max:bridge:KEQ0565026 [ ipAddress="192.168.3.9", serialNumber="KEQ0565026
max.items:
```java
Group gMAX "MAX Heating" <temperature> [ "home-group" ]
Group gMAX "MAX Heating" <temperature> [ "home-group" ]
Switch maxBattery "Battery Low" (gMAX) {channel="max:thermostat:KEQ0565026:KEQ0648949:battery_low"}
String maxMode "Thermostat Mode Setting" (gMAX) {channel="max:thermostat:KEQ0565026:KEQ0648949:mode"}
@ -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

@ -1,22 +1,19 @@
# MCD Binding
This binding allows you to send sensor events from your openHAB environment to the cloud application Managing Care Digital (MCD) by [C&S Computer und Software GmbH](https://www.managingcare.de/).
This binding allows you to send sensor events from your openHAB environment to the cloud application Managing Care Digital (MCD) by [C&S Computer und Software GmbH](https://www.managingcare.de/).
MCD is the platform for inpatient and outpatient nursing services.
Our REST API allows you to send a variety of sensor events to the system and thus being able to connect your Ambient Assisted Living (AAL) or smart home environment to the documentation software of your nursing service.
MCD is the platform for inpatient and outpatient nursing services.
Our REST API allows you to send a variety of sensor events to the system and thus being able to connect your Ambient Assisted Living (AAL) or smart home environment to the documentation software of your nursing service.
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**.
There are two supported things: **MCD Bridge** and **MCD Sensor Thing**.
## Discovery
Discovery is not supported.
Discovery is not supported.
## Thing Configuration
@ -24,7 +21,7 @@ This section shows the configuration parameters of both supported things.
### MCD Bridge
The MCD Bridge (`mcdBridge`) needs to be configured with your valid C&S MCD / sync API credentials.
The MCD Bridge (`mcdBridge`) needs to be configured with your valid C&S MCD / sync API credentials.
| parameter | description |
|-----------|------------------------------------|
@ -33,7 +30,7 @@ The MCD Bridge (`mcdBridge`) needs to be configured with your valid C&S MCD / sy
### MCD Sensor Thing
Each sensor thing (`mcdSensor`) needs to be configured with the identical serial number, that is assigned to this sensor in MCD.
Each sensor thing (`mcdSensor`) needs to be configured with the identical serial number, that is assigned to this sensor in MCD.
| parameter | description |
|----------------|------------------------------------|
@ -41,16 +38,16 @@ Each sensor thing (`mcdSensor`) needs to be configured with the identical serial
## Channels
The `mcdSensor` thing supports the following channels. To see the sensors' events, please visit [Managing Care Digital](https://cundsdokumentation.de/) and navigate to the dashboard.
The `mcdSensor` thing supports the following channels. To see the sensors' events, please visit [Managing Care Digital](https://cundsdokumentation.de/) and navigate to the dashboard.
| channel | type | description |
|-------------|--------|-----------------------------------------------|
| lastEvent | String | shows the last event that was sent with date and time |
| sendEvent | String | stateless channel for sending events to the API, see list below for valid commands |
The channel `sendEvent` accepts valid Sensor Event Definitions as well as the corresponding ID.
The following table contains all currently accepted Sensor Event Definitions that can be passed as String type commands.
As soon as new events are added to the API, you can use their ID, even if the Definition is not yet added to this list.
The channel `sendEvent` accepts valid Sensor Event Definitions as well as the corresponding ID.
The following table contains all currently accepted Sensor Event Definitions that can be passed as String type commands.
As soon as new events are added to the API, you can use their ID, even if the Definition is not yet added to this list.
For more information about the API, you can have a look at the [C&S Sync API](https://cunds-syncapi.azurewebsites.net/ApiDocumentation).
| Valid String Type Commands |
@ -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,15 +6,13 @@ 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)
- meaterprobe: The MEATER probe - Only support for cloud connected MEATER probes (MEATER Block and MEATER Plus)
## Discovery
@ -37,7 +35,7 @@ This might help isolating an individual probe.
#### Configuration Options
| Parameter | Description | Type | Default | Required |
| Parameter | Description | Type | Default | Required |
|-----------|--------------------------------------------------------------|--------|----------|----------|
| email | The email used to login to your MEATER Cloud account | String | NA | yes |
| password | The password used to login to your MEATER Cloud account | String | NA | yes |
@ -55,15 +53,13 @@ The following channels are supported:
#### Configuration Options
| Parameter | Description | Type | Default | Required |
| Parameter | Description | Type | Default | Required |
|-----------|--------------------------------------------------------------|--------|----------|----------|
| deviceId | Unique id for your MEATER Probe | String | NA | yes |
#### Channels
| Channel Type ID | Item Type | Description |
| Channel Type ID | Item Type | Description |
|-----------------------|--------------------|------------------------------------------------------|
| internalTemperature | Number:Temperature | Internal temperature reading of MEATER probe |
| ambientTemperature | Number:Temperature | Ambient temperature reading of MEATER probe. If ambient is less than internal, ambient will equal internal |
@ -71,29 +67,28 @@ The following channels are supported:
| cookPeakTemperature | Number:Temperature | Peak temperature of current cook |
| lastConnection | DateTime | Date and time of last probe connection |
| cookId | String | Unique cook ID of current cook |
| cookName | String | Name of selected meat or user given custom name |
| cookName | String | Name of selected meat or user given custom name |
| cookState | String | One of Not Started, Configured, Started, Ready For Resting, Resting, Slightly Underdone, Finished, Slightly Overdone, OVERCOOK! |
| cookElapsedTime | Number:Time | Time since the start of cook in seconds. Default: 0 |
| 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

@ -2,7 +2,7 @@
This binding reads data from MEC power meter for providing electrical information for the electric circuit.
To use this binding the meter must be installed, initialized and connected to the same network as openHAB.
To use this binding the meter must be installed, initialized and connected to the same network as openHAB.
## Supported Things
@ -12,7 +12,7 @@ Its unique ID is the serial number.
## Discovery
MecMeters are automatically discovered via mDNS.
MecMeters are automatically discovered via mDNS.
The IP of the Power Meter is automatically set and can be changed manually if needed.
The default update interval is set to 5 seconds. Intervals from 1 to 300 seconds can be set manually.
@ -26,10 +26,9 @@ 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:
The meter has the following channels:
| Channel Type ID | Item Type | Label | Description |
|--------------------------------------------------------------|--------------------------|-----------------------------------|------------------------------------------|
@ -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 ]
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

@ -8,7 +8,7 @@ If you face some problems during setup or runtime please have a look into the [T
## Supported Things
| Type | ID | Description |
| Type | ID | Description |
|-----------------|---------------|-------------------------------------------------|
| Bridge | `account` | Connect your Mercedes Me account |
| Thing | `combustion` | Conventional fuel vehicle |
@ -17,7 +17,7 @@ If you face some problems during setup or runtime please have a look into the [T
## Bridge Configuration
Bridge needs configuration in order to connect properly to your Mercedes Me Account.
Bridge needs configuration in order to connect properly to your Mercedes Me Account.
### Pre-Conditions
@ -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,13 +99,12 @@ 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.
Check in **beforehand** if your vehicle has some restrictions or even if it's supported at all.
Visit [Vehicle Image Details](https://developer.mercedes-benz.com/products/vehicle_images/details) in order to check your vehicle capabilities.
Visit [Image Settings](https://developer.mercedes-benz.com/products/vehicle_images/docs#_default_image_settings) to get more information about
Visit [Image Settings](https://developer.mercedes-benz.com/products/vehicle_images/docs#_default_image_settings) to get more information about
For example the EQA doesn't provide `night` images with `background`.
If your configuration is set this way the API calls are wasted!
@ -305,12 +303,12 @@ 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
You can access the options either in a rule via `YOUR_IMAGE_VIEW_ITEM.getStateDescription().getOptions()` or in UI in widget configuration as _Action: Command options_ and as _Action Item: YOUR_IMAGE_VIEW_ITEM_
You can access the options either in a rule via `YOUR_IMAGE_VIEW_ITEM.getStateDescription().getOptions()` or in UI in widget configuration as _Action: Command options_ and as _Action Item: YOUR_IMAGE_VIEW_ITEM_
<img src="./doc/ImageView-CommandOptions.png" width="400" height="350"/>
@ -329,26 +327,26 @@ Otherwise you'll receive some error message when clicking the link after opening
Most common errors:
- redirect URL doesn't match: Double check if `callbackUrl` is really saved correctly in your Mercedes Benz Developer project
- scope failure: the requested scope doesn't match with the subscribed products.
- Check [openHab configuration switches](#openhab-configuration)
- apply changes if necessary and don't forget to save
- after these steps refresh the `callbackUrl` in [your browser](#callback-page) to apply these changes
- try a new authorization clicking the link
- scope failure: the requested scope doesn't match with the subscribed products.
- Check [openHab configuration switches](#openhab-configuration)
- apply changes if necessary and don't forget to save
- after these steps refresh the `callbackUrl` in [your browser](#callback-page) to apply these changes
- try a new authorization clicking the link
### Receive no data
Especially after setting the frist Mercedes Benz Developer Project you'll receive no data.
It seems that the API isn't _filled_ yet.
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
- 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 ...
- Go to your vehicle, open doors and windows, turn on lights, drive a bit ...
- wait until values are providing the right states
### Images
@ -372,35 +370,34 @@ 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.
The example is based on a battery electric vehicle.
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

@ -49,7 +49,7 @@ The Météo Alerte information that are retrieved is available as these channels
| avalanches-icon | Image | Pictogram of Avalanche alert level |
| vague-submersion-icon | Image | Pictogram of Wave Submersion alert level |
(*) Each alert level is described by a color :
(*) Each alert level is described by a color :
| Code | Color | Description |
|------|--------|-------------------------------------------|
@ -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,21 +91,20 @@ 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 ] {
}
Thing weather A51 "Area 51" [ serviceType="NonCommercial", location="37.23,-115.5,1360", timeZone="America/Los_Angeles", refresh=240 ] {
}
}
```
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.
@ -90,11 +89,11 @@ Steps:
1. [Register](https://www.wunderground.com/personal-weather-station/signup.asp) your personal weather station with Weather Underground and make note of the station ID and password issued.
1. Add the following files to your openHAB configuration:
### things/meteostick.things
### things/meteostick.things
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
@ -133,46 +132,46 @@ import java.util.TimeZone
rule PWS
when
Item DavisVantageVueWindDirectionAverage received update
Item DavisVantageVueWindDirectionAverage received update
then
val id = 'YOUR_ID'
val pw = 'your_password'
val sdf = new SimpleDateFormat('yyyy-MM-dd HH:mm:ss')
sdf.setTimeZone(TimeZone.getTimeZone('UTC'))
val double rh = DavisVantageVueHumidity.getStateAs(DecimalType).doubleValue
val double tempc = DavisVantageVueOutdoorTemperature.getStateAs(QuantityType).toUnit('°C').doubleValue
val double dewptc = 243.04 * (Math.log(rh/100) + ((17.625 * tempc) / (243.04 + tempc))) / (17.625 - Math.log(rh/100) - ((17.625 * tempc) / (243.04 + tempc)))
val double dewptf = new QuantityType(dewptc, CELSIUS).toUnit('°F').doubleValue
val Map<String, Object> params = newLinkedHashMap(
'action' -> 'updateraw',
'ID' -> id,
'PASSWORD' -> pw,
'dateutc' -> sdf.format(new Date()),
'winddir' -> DavisVantageVueWindDirection.getStateAs(QuantityType).toUnit('°').intValue,
'windspeedmph' -> DavisVantageVueWindSpeed.getStateAs(QuantityType).toUnit('mph').doubleValue,
'windgustmph' -> DavisVantageVueWindSpeedMaximum.getStateAs(QuantityType).toUnit('mph').doubleValue,
'windgustdir' -> DavisVantageVueWindDirectionAverage.getStateAs(QuantityType).toUnit('°').intValue,
'windspdmph_avg2m' -> DavisVantageVueWindSpeedAverage.getStateAs(QuantityType).toUnit('mph').doubleValue,
'winddir_avg2m' -> DavisVantageVueWindDirectionAverage.getStateAs(QuantityType).toUnit('°').intValue,
'humidity' -> DavisVantageVueHumidity.state,
'dewptf' -> dewptf,
'tempf' -> DavisVantageVueOutdoorTemperature.getStateAs(QuantityType).toUnit('°F').doubleValue,
'rainin' -> DavisVantageVueRainCurrentHour.getStateAs(QuantityType).toUnit('in').doubleValue,
'baromin' -> MeteoStickPressure.getStateAs(QuantityType).toUnit('inHg').doubleValue,
'softwaretype' -> 'openHAB 2.4')
val id = 'YOUR_ID'
val pw = 'your_password'
val sdf = new SimpleDateFormat('yyyy-MM-dd HH:mm:ss')
sdf.setTimeZone(TimeZone.getTimeZone('UTC'))
val double rh = DavisVantageVueHumidity.getStateAs(DecimalType).doubleValue
val double tempc = DavisVantageVueOutdoorTemperature.getStateAs(QuantityType).toUnit('°C').doubleValue
val double dewptc = 243.04 * (Math.log(rh/100) + ((17.625 * tempc) / (243.04 + tempc))) / (17.625 - Math.log(rh/100) - ((17.625 * tempc) / (243.04 + tempc)))
val double dewptf = new QuantityType(dewptc, CELSIUS).toUnit('°F').doubleValue
val Map<String, Object> params = newLinkedHashMap(
'action' -> 'updateraw',
'ID' -> id,
'PASSWORD' -> pw,
'dateutc' -> sdf.format(new Date()),
'winddir' -> DavisVantageVueWindDirection.getStateAs(QuantityType).toUnit('°').intValue,
'windspeedmph' -> DavisVantageVueWindSpeed.getStateAs(QuantityType).toUnit('mph').doubleValue,
'windgustmph' -> DavisVantageVueWindSpeedMaximum.getStateAs(QuantityType).toUnit('mph').doubleValue,
'windgustdir' -> DavisVantageVueWindDirectionAverage.getStateAs(QuantityType).toUnit('°').intValue,
'windspdmph_avg2m' -> DavisVantageVueWindSpeedAverage.getStateAs(QuantityType).toUnit('mph').doubleValue,
'winddir_avg2m' -> DavisVantageVueWindDirectionAverage.getStateAs(QuantityType).toUnit('°').intValue,
'humidity' -> DavisVantageVueHumidity.state,
'dewptf' -> dewptf,
'tempf' -> DavisVantageVueOutdoorTemperature.getStateAs(QuantityType).toUnit('°F').doubleValue,
'rainin' -> DavisVantageVueRainCurrentHour.getStateAs(QuantityType).toUnit('in').doubleValue,
'baromin' -> MeteoStickPressure.getStateAs(QuantityType).toUnit('inHg').doubleValue,
'softwaretype' -> 'openHAB 2.4')
var url = 'https://weatherstation.wunderground.com/weatherstation/updateweatherstation.php?'
var first = true
for (key : params.keySet()) {
if (!first) {
url += '&'
}
url += key + '=' + URLEncoder::encode(params.get(key).toString, 'UTF-8')
first = false
}
var url = 'https://weatherstation.wunderground.com/weatherstation/updateweatherstation.php?'
var first = true
for (key : params.keySet()) {
if (!first) {
url += '&'
}
url += key + '=' + URLEncoder::encode(params.get(key).toString, 'UTF-8')
first = false
}
logDebug('PWS', 'url is {}', url)
sendHttpGetRequest(url)
logDebug('PWS', 'url is {}', url)
sendHttpGetRequest(url)
end
```

View File

@ -1,7 +1,7 @@
# Miele@home Binding
This binding integrates Miele@home appliances.
Miele@home allows controlling Miele appliances that are equipped with special communication modules.
Miele@home allows controlling Miele appliances that are equipped with special communication modules.
There are devices that communicate through ZigBee and others that use WiFi.
See [www.miele.de](https://www.miele.de) for the list of available appliances.
@ -11,7 +11,7 @@ See [www.miele.de](https://www.miele.de) for the list of available appliances.
This binding requires the XGW3000 gateway from Miele as all integration with openHAB is done through this gateway.
While users with ZigBee-enabled Miele appliances usually own such a gateway, this is often not the case for people that have only WiFi-enabled appliances.
The types of appliances that are supported by this binding are:
The types of appliances that are supported by this binding are:
- Coffeemachine
- Dishwasher
@ -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

@ -1,12 +1,12 @@
# Xiaomi Mi Smart Home Binding
This binding allows your openHAB to communicate with the Xiaomi Smart Home Suite.
It consists of devices communicating over a ZigBee network with a ZigBee - WiFi gateway.
It consists of devices communicating over a ZigBee network with a ZigBee - WiFi gateway.
The devices are very affordable and you can get them from your favourite Chinese markets like [AliExpress](https://www.aliexpress.com/) or [GearBest](https://www.gearbest.com).
The sensors run on a coin cell battery for over a year.
The sensors run on a coin cell battery for over a year.
After setup, you can disconnect the gateway from the internet to keep your sensor information private.
After setup, you can disconnect the gateway from the internet to keep your sensor information private.
Please note that using the Xiaomi gateway with openHAB requires enabling the developer mode and that multiple user reports suggest that it is no longer possible.
Zigbee2Mqtt provides an alternative method to integrate Xiaomi devices.
@ -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:
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. 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. 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)
- 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)
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
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
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
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
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
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
**Hints:**
* With the binding
- 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)
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
__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)
* 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,10 +387,10 @@ 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 {
Frame {
...
// Selection for Xiaomi Gateway Sounds
@ -445,9 +437,9 @@ Make sure you have connected your gateway to openHAB and the communication is wo
- Go through the normal procedure to add a device to the gateway
- The device will show up in your inbox as a new unsupported device and its model name
- Add the device as a new thing of type "basic device", now you have different channels to receive and send messages from/to the device
- raw messages from the device
- the data from the four different type of messages (see their details in the next chapter)
- parameters you can send to the device
- raw messages from the device
- the data from the four different type of messages (see their details in the next chapter)
- parameters you can send to the device
### Gather information about the new device for future support
@ -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!
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,16 +566,18 @@ 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
- Make sure the gateway and the machine are in the same subnet
- Try to connect your machine via Ethernet instead of Wifi
- 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
- Routers often block multicast - enable it
- Make sure the gateway and the machine are in the same subnet
- Try to connect your machine via Ethernet instead of Wifi
- 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

@ -1,6 +1,6 @@
# Xiaomi Wifi devices (Mi IO) Binding
This binding is used to control Xiaomi products implementing the Mi IO protocol.
This binding is used to control Xiaomi products implementing the Mi IO protocol.
This protocol is used for most of Xiaomi Mi Ecosystem wifi devices which is branded as MiJia.
If your Xiaomi wifi device is controlled by the mihome app, most likely it communicates using the Mi IO protocol and can communicate with openHAB using this binding.
@ -30,9 +30,9 @@ Accept only one of the 2 discovery results, the alternate one can further be ign
## Tokens
The binding needs a token from the Xiaomi Mi Device in order to be able to control it.
The binding can retrieve the needed tokens from the Xiaomi cloud.
Go to the binding config page and enter your cloud username and password.
The server(s) to which your devices are connected need to be entered as well.
The binding can retrieve the needed tokens from the Xiaomi cloud.
Go to the binding config page and enter your cloud username and password.
The server(s) to which your devices are connected need to be entered as well.
Use the one of the regional servers: cn,de,i2,tw,ru,sg,us.
Multiple servers can be separated with comma, or leave blank to test all known servers.
See [binding configuration](#binding-configuration) for more details about the binding config.
@ -42,12 +42,12 @@ See [binding configuration](#binding-configuration) for more details about the b
Some devices provide the token upon discovery. This may depends on the firmware version.
If the device does not discover your token, it needs to be retrieved from the Mi Home app.
The easiest way to obtain tokens is to browse through log files of the Mi Home app version 5.4.49 for Android.
It seems that version was released with debug messages turned on by mistake.
An APK file with the old version can be easily found using one of the popular web search engines.
The easiest way to obtain tokens is to browse through log files of the Mi Home app version 5.4.49 for Android.
It seems that version was released with debug messages turned on by mistake.
An APK file with the old version can be easily found using one of the popular web search engines.
After downgrading use a file browser to navigate to directory SmartHome/logs/plug_DeviceManager, then open the most recent file and search for the token. When finished, use Google Play to get the most recent version back.
For iPhone, use an un-encrypted iTunes-Backup and unpack it and use a sqlite tool to view the files in it:
For iPhone, use an un-encrypted iTunes-Backup and unpack it and use a sqlite tool to view the files in it:
Then search in "RAW, com.xiaomi.home," for "USERID_mihome.sqlite" and look for the 32-digit-token or 96 digit encrypted token.
Note. The Xiaomi devices change the token when inclusion is done. Hence if you get your token after reset and than include it with the Mi Home app, the token will change.
@ -57,7 +57,7 @@ Note. The Xiaomi devices change the token when inclusion is done. Hence if you g
No binding configuration is required. However to enable cloud functionality enter your Xiaomi username, password and server(s).
The list of the known countries and related severs is [here](#country-servers).
After successful Xiaomi cloud login, the binding will use the connection to retrieve the required device tokens from the cloud.
After successful Xiaomi cloud login, the binding will use the connection to retrieve the required device tokens from the cloud.
For Xiaomi vacuums the map can be visualized in openHAB using the cloud connection.
To enter your cloud details go to the bindings page, click the Xiaomi Mi IO binding and than configure.
@ -72,7 +72,7 @@ The binding also supports the discovery of devices via the cloud. This may be us
Each Xiaomi device (thing) needs the IP address and token configured to be able to communicate. See discovery for details.
Optional configuration is the refresh interval and the deviceID. Note that the deviceID is automatically retrieved when it is left blank.
The configuration for model is automatically retrieved from the device in normal operation.
The configuration for model is automatically retrieved from the device in normal operation.
However, for devices that are unsupported, you may override the value and try to use a model string from a similar device to experimentally use your device with the binding.
| Parameter | Type | Required | Description |
@ -86,13 +86,13 @@ However, for devices that are unsupported, you may override the value and try to
| communication | text | false | Communicate direct or via cloud (options values: 'direct', 'cloud') |
| cloudServer | text | false | Identifies the country server to use in case of cloud communication |
Note: Suggest to use the cloud communication only for devices that require it.
Note: Suggest to use the cloud communication only for devices that require it.
It is unknown at this time if Xiaomi has a rate limit or other limitations on the cloud usage. e.g. if having many devices would trigger some throttling from the cloud side.
Note2: communications parameter is not available for lumi devices. Lumi devices communicate using the bridge/gateway.
### Example Thing file
`Thing miio:basic:light "My Light" [ host="192.168.x.x", token="put here your token", deviceId="326xxxx", model="philips.light.bulb", communication="direct" ]`
`Thing miio:basic:light "My Light" [ host="192.168.x.x", token="put here your token", deviceId="326xxxx", model="philips.light.bulb", communication="direct" ]`
or in case of unknown models include the model information of a similar device that is supported:
@ -100,8 +100,7 @@ or in case of unknown models include the model information of a similar device t
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" ]`
`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
@ -114,7 +113,7 @@ There are 2 ways to get unsupported devices working, by overriding the model wit
## Substitute model for unsupported devices
Replace the model with the model which is already supported.
For this, first remove your unsupported thing. Manually add a miio:basic thing.
For this, first remove your unsupported thing. Manually add a miio:basic thing.
Besides the regular configuration (like ip address, token) the modelId needs to be provided.
Normally the modelId is populated with the model of your device, however in this case, use the modelId of a similar device.
Look at the openHAB forum, or the openHAB GitHub repository for the modelId of similar devices.
@ -132,11 +131,11 @@ After validation, please share the logfile and json files on the openHAB forum o
Things using the basic handler (miio:basic things) are driven by json 'database' files.
This instructs the binding which channels to create, which properties and actions are associated with the channels etc.
The conf/misc/miio (e.g. in Linux `/opt/openhab/conf/misc/miio/`) is scanned for database files and will be used for your devices.
During the start of the binding the exact path used in your system will be printed in the _debug_ log.
The conf/misc/miio (e.g. in Linux `/opt/openhab/conf/misc/miio/`) is scanned for database files and will be used for your devices.
During the start of the binding the exact path used in your system will be printed in the _debug_ log.
Watch for a line containing `Started miio basic devices local databases watch service. Watching for database files at path: …` (
If this folder is created after the start of the binding, you may need to restart the binding (or openHAB) to be able to use the local files.
Note that local database files take preference over build-in ones, hence if a json file is local and in the database the local file will be used.
If this folder is created after the start of the binding, you may need to restart the binding (or openHAB) to be able to use the local files.
Note that local database files take preference over build-in ones, hence if a json file is local and in the database the local file will be used.
For format, please check the current database files in openHAB GitHub.
# FAQ.. what to do in case of problems
@ -144,7 +143,7 @@ For format, please check the current database files in openHAB GitHub.
If your device is not getting online:
_Are you using text config?_
Make sure you define all the fields as per above example.
Make sure you define all the fields as per above example.
Or, better, try to get it going first without text config.
_The token is wrong_
@ -153,13 +152,13 @@ When you reset, or change wifi or update firmware, and possibly other cases as w
_My token is coming from the cloud... how can it be wrong?_
Is not very likely but still can happen._
This can happen e.g. if your device is defined on multiple country servers.
This can happen e.g. if your device is defined on multiple country servers.
The binding may pull the token from the wrong country server.
First try to get the token from all country servers by leave the county setting empty.
If that does not solve it, you define only the country that the device is on in the binding config page (where the cloud userid/pwd is entered) this should pull the right token.
_You have the same device added multiple times._
The communication each time send a sequential number.
The communication each time send a sequential number.
If the device is twice defined, the numbers received by the device are no longer sequential and it will stop responding for some time.
_The connection is not too good, so you have timeouts etc._
@ -167,7 +166,7 @@ Position your device closer to wifi / check in the mihome app if the wifi streng
Alternatively as described above, double check for multiple connections for single device.
_Your device is on a different subnet?_
This is in most cases not working.
This is in most cases not working.
Firmware of the device don't accept commands coming from other subnets.
Set the communication in the thing configuration to 'cloud'.
@ -175,29 +174,29 @@ _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.
In order to pass validation your (openHAB server) ip need to be validated/confirmed.
- 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.
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.
_My Roborock vacuum is not found or not reacting_
Did you link the vacuum with the Roborock app?
This won't work, the Roborock app is using a different communication method.
Reset your vacuum and connect it to the Xiaomi MiHome app.
Did you link the vacuum with the Roborock app?
This won't work, the Roborock app is using a different communication method.
Reset your vacuum and connect it to the Xiaomi MiHome app.
This will change the communication method and the Mi IO binding can communicate with the vacuum.
# Mi IO Devices
!!!devices
note: Supported means we received feedback from users this device is working with the binding.
For devices with experimental support, we did not yet confirmation that channels are correctly working.
note: Supported means we received feedback from users this device is working with the binding.
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
@ -316,7 +311,7 @@ Known country Servers: cn, de, i2, ru, sg, us
Mapping of countries in mihome app to server:
| Country | Country Code | Server |
|--------------------------|--------------|--------|
|--------------------------|--------------|--------|
| Afghanistan | AF | sg |
| Albania | AL | de |
| Algeria | DZ | sg |

View File

@ -5,26 +5,24 @@ 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
openHAB via network.
Make sure your RouterOS has the API enabled by visiting [<kbd>IP -> Services</kbd>](https://wiki.mikrotik.com/wiki/Manual:IP/Services)
configuration section in
Make sure your RouterOS has the API enabled by visiting [<kbd>IP -> Services</kbd>](https://wiki.mikrotik.com/wiki/Manual:IP/Services)
configuration section in
[WinBox](https://wiki.mikrotik.com/wiki/Manual:Winbox).
Take note of the API port number as you'll need it below.
[SSL API connection](https://wiki.mikrotik.com/wiki/Manual:API-SSL) is not yet supported by this binding.
To connect to the RouterOS API, you will need to provide user credentials for the bridge thing.
To connect to the RouterOS API, you will need to provide user credentials for the bridge thing.
You may use your current credentials that you use to manage your devices, but it is highly recommended to **create a read-only RouterOS user** since this binding only need to read data from the device.
To do this, proceed to <kbd>System -> Users</kbd> configuration section and add a user to the `read` group.
@ -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,24 +156,23 @@ 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" ]
Thing interface cap1 "Cap1" [ name="cap5" ]
Thing interface ppp1 "PPPoE1" [ name="isp-pppoe" ]
Thing interface tun1 "L2TPSrv1" [ name="l2tp-parents" ]
Thing wifiRegistration wifi1 "Phone1" [ mac="F4:60:E2:C5:47:94", considerContinuous=60 ]
Thing wifiRegistration wifi2 "Tablet2" [ mac="18:1D:EA:A5:A2:9E" ]
Thing interface eth1 "Eth1" [ name="ether1" ]
Thing interface eth2 "Eth2" [ name="ether2-wan1" ]
Thing interface cap1 "Cap1" [ name="cap5" ]
Thing interface ppp1 "PPPoE1" [ name="isp-pppoe" ]
Thing interface tun1 "L2TPSrv1" [ name="l2tp-parents" ]
Thing wifiRegistration wifi1 "Phone1" [ mac="F4:60:E2:C5:47:94", considerContinuous=60 ]
Thing wifiRegistration wifi2 "Tablet2" [ mac="18:1D:EA:A5:A2:9E" ]
}
```
### 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,20 +351,20 @@ 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" {
Group item=gRB1
Group item=gRB1Eth1
Group item=gRB1Eth2
Group item=gRB1Ppp1
Group item=gRB1Tun1
Group item=gRB1Cap1
Group item=gRB1Wifi1
Group item=gRB1Wifi2
}
Frame label="RouterBOARD 1" {
Group item=gRB1
Group item=gRB1Eth1
Group item=gRB1Eth2
Group item=gRB1Ppp1
Group item=gRB1Tun1
Group item=gRB1Cap1
Group item=gRB1Wifi1
Group item=gRB1Wifi2
}
}
```

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 ] {
Thing whiteLed myWhite [ zone="0" ]
Thing rgbwwLed myRGB [ zone="4" ]
Thing rgbLed myOldRGB [ zone="1" ]
}
```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,76 +77,84 @@ 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
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
```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
```
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
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
```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
```
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
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
```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
```
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
```
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
Dimmer RGBW_LivingroomB {channel="milight:rgbwLed:ACCF23A6C0B4:2:ledbrightness"} //Dimmer changing brightness for RGBW bulb in zone 2
```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
Dimmer RGBW_LivingroomB {channel="milight:rgbwLed:ACCF23A6C0B4:2:ledbrightness"} //Dimmer changing brightness for RGBW bulb in zone 2
Color Light_Party {channel="milight:rgbwLed:ACCF23A6C0B4:1:ledcolor"} //Colorpicker for rgb bulbs
# You have to link the items to the channels of your prefered group.
//The command types nightMode and whiteMode are stateless and should be configured as pushbuttons as they only support a trigger action:
Switch Light_GroundfloorN {channel="milight:whiteLed:ACCF23A6C0B4:0:lednightmode", autoupdate="false"} //Activate the NightMode for all bulbs
Switch Light_GroundfloorN {channel="milight:whiteLed:ACCF23A6C0B4:0:lednightmode", autoupdate="false"} //Activate the NightMode for all bulbs
//The command types animation_mode_relative and animation_speed are stateless and should be configured as pushbuttons as they only support INCREASE and DECREASE commands:
Dimmer AnimationMode {channel="milight:rgbLed:ACCF23A6C0B4:5:animation_mode_relative", autoupdate="false"}
Dimmer AnimationSpeed {channel="milight:rgbLed:ACCF23A6C0B4:5:animation_speed", autoupdate="false"}
Dimmer AnimationMode {channel="milight:rgbLed:ACCF23A6C0B4:5:animation_mode_relative", autoupdate="false"}
Dimmer AnimationSpeed {channel="milight:rgbLed:ACCF23A6C0B4:5:animation_speed", autoupdate="false"}
//Animation Mode for RGBWW bulbs is different, it allows to pick a mode directly.
Switch AnimationModeRgbWW {channel="milight:rgbwwLed:ACCF23A6C0B4:5:animation_mode"}
Switch AnimationModeRgbWW {channel="milight:rgbwwLed:ACCF23A6C0B4:5:animation_mode"}
```
.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>
@ -69,10 +66,10 @@ Depending on the thing type, different channels are provided:
### Example Thing Definition
The easiest method to add Minecraft servers, players, and signs is use the automatic discovery.
You can also manually define the objects using thing configuration files.
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