[Documentation] Markdown improvements f to m (#13866)
Signed-off-by: Jerome Luckenbach <github@luckenba.ch>
This commit is contained in:
parent
3c236b3103
commit
0e68936663
|
@ -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.
|
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.:
|
Some of these brands are e.g.:
|
||||||
|
|
||||||
* Aercus
|
- Aercus
|
||||||
* Ambient Weather
|
- Ambient Weather
|
||||||
* Ecowitt
|
- Ecowitt
|
||||||
* ELV
|
- ELV
|
||||||
* Froggit
|
- Froggit
|
||||||
* Misol
|
- Misol
|
||||||
* Pantech
|
- Pantech
|
||||||
* Sainlogic
|
- Sainlogic
|
||||||
* Steinberg Systems
|
- Steinberg Systems
|
||||||
* Waldbeck Halley
|
- Waldbeck Halley
|
||||||
|
|
||||||
Here is a product picture of how this Weather Station looks like:
|
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
|
## 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
|
## 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.:
|
- `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
|
- HP2550
|
||||||
- HP3500
|
- HP3500
|
||||||
- GW1000
|
- GW1000
|
||||||
- GW1001
|
- GW1001
|
||||||
- GW1002
|
- GW1002
|
||||||
- GW1003
|
- GW1003
|
||||||
- GW1100
|
- GW1100
|
||||||
- GW2001
|
- GW2001
|
||||||
- WN1900
|
- WN1900
|
||||||
- WN1910
|
- WN1910
|
||||||
- WH2350
|
- WH2350
|
||||||
- WH2600
|
- WH2600
|
||||||
- WH2610
|
- WH2610
|
||||||
- WH2620
|
- WH2620
|
||||||
- WH2650 (tested)
|
- WH2650 (tested)
|
||||||
- WH2680
|
- WH2680
|
||||||
- WH2900
|
- WH2900
|
||||||
- WH2950
|
- WH2950
|
||||||
- WS980 ELV (tested)
|
- WS980 ELV (tested)
|
||||||
- WittBoy (tested)
|
- WittBoy (tested)
|
||||||
- `sensor`: A Fine Offset sensor which is connected to the bridge with the ThingTypeUID `fineoffsetweatherstation:sensor`.
|
- `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.
|
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:
|
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.
|
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:
|
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
|
## Discovery
|
||||||
|
|
||||||
|
@ -262,13 +262,13 @@ Valid sensors:
|
||||||
| sensor-co2-co2 | Number:Dimensionless | R | CO2 |
|
| sensor-co2-co2 | Number:Dimensionless | R | CO2 |
|
||||||
| sensor-co2-co2-24-hour-average | Number:Dimensionless | R | CO2 24 Hour Average |
|
| 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-1 | Number:Dimensionless | R | Leaf Moisture Channel 1 |
|
||||||
| leaf-wetness-channel-2 | Number:Dimensionless | R | Leaf Moisture Channel 2 |
|
| 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-3 | Number:Dimensionless | R | Leaf Moisture Channel 3 |
|
||||||
| leaf-wetness-channel-4 | Number:Dimensionless | R | Leaf Moisture Channel 4 |
|
| 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-5 | Number:Dimensionless | R | Leaf Moisture Channel 5 |
|
||||||
| leaf-wetness-channel-6 | Number:Dimensionless | R | Leaf Moisture Channel 6 |
|
| 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-7 | Number:Dimensionless | R | Leaf Moisture Channel 7 |
|
||||||
| leaf-wetness-channel-8 | Number:Dimensionless | R | Leaf Moisture Channel 8 |
|
| leaf-wetness-channel-8 | Number:Dimensionless | R | Leaf Moisture Channel 8 |
|
||||||
| piezo-rain-rate | Number:VolumetricFlowRate | R | Piezo - Rainfall Rate |
|
| 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-event | Number:Length | R | Piezo - Amount of Rainfall At the last Rain |
|
||||||
| piezo-rain-hour | Number:Length | R | Piezo - Rainfall Current Hour |
|
| 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_:
|
_weatherstation.things_:
|
||||||
|
|
||||||
```xtend
|
```java
|
||||||
Bridge fineoffsetweatherstation:gateway:3906700515 "Weather station" [
|
Bridge fineoffsetweatherstation:gateway:3906700515 "Weather station" [
|
||||||
ip="192.168.1.42",
|
ip="192.168.1.42",
|
||||||
port="45000",
|
port="45000",
|
||||||
|
@ -303,14 +303,14 @@ Bridge fineoffsetweatherstation:gateway:3906700515 "Weather station" [
|
||||||
pollingInterval="16",
|
pollingInterval="16",
|
||||||
protocol="DEFAULT"
|
protocol="DEFAULT"
|
||||||
] {
|
] {
|
||||||
Thing sensor WH25 "WH25" [sensor="WH25"]
|
Thing sensor WH25 "WH25" [sensor="WH25"]
|
||||||
Thing sensor WH65 "WH65" [sensor="WH65"]
|
Thing sensor WH65 "WH65" [sensor="WH65"]
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
_weatherstation.items_:
|
_weatherstation.items_:
|
||||||
|
|
||||||
```xtend
|
```java
|
||||||
Group WH25 "WH25" <Sensor> ["Sensor"]
|
Group WH25 "WH25" <Sensor> ["Sensor"]
|
||||||
Number SignalWH25 "Signal WH25" <QualityOfService> (WH25) ["Measurement", "Level"] { channel="fineoffsetweatherstation:sensor:3906700515:WH25:signal" }
|
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" }
|
Switch BatteryStatusWH25 "Low Battery WH25" <LowBattery> (WH25) ["Energy", "LowBattery"] { channel="fineoffsetweatherstation:sensor:3906700515:WH25:lowBattery" }
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Flic Button Binding
|
# Flic Button Binding
|
||||||
|
|
||||||
openHAB binding for using [Flic Buttons](https://flic.io/)
|
openHAB binding for using [Flic Buttons](https://flic.io/)
|
||||||
with a [fliclib-linux-hci](https://github.com/50ButtonsEach/fliclib-linux-hci) bridge.
|
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
|
## Discovery
|
||||||
|
|
||||||
* There is no automatic discovery for flicd-bridge available.
|
- 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
|
- 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).
|
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
|
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:
|
Example for textual configuration:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge flicbutton:flicd-bridge:mybridge
|
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).
|
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:
|
If your flicd service is running somewhere else, specify it like this:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge flicbutton:flicd-bridge:mybridge [ hostname="<YOUR_HOSTNAME>", port=<YOUR_PORT>]
|
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.
|
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:
|
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>] {
|
Bridge flicbutton:flicd-bridge:mybridge [ hostname="<YOUR_HOSTNAME>", port=<YOUR_PORT>] {
|
||||||
Thing button myflic1 "<YOUR_LABEL>" [address ="<MAC_ADDRESS>"]
|
Thing button myflic1 "<YOUR_LABEL>" [address ="<MAC_ADDRESS>"]
|
||||||
Thing button myflic2 "<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. |
|
| 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. |
|
| 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%).
|
| 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
|
## Example
|
||||||
|
|
||||||
### Initial setup
|
### 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)
|
Please consider that you need a separate Bluetooth adapter. Shared usage with other Bluetooth services (e.g. Bluez)
|
||||||
is not possible.
|
is not possible.
|
||||||
1. Connect your buttons to flicd using the simpleclient as described in
|
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:
|
demo.things:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge flicbutton:flicd-bridge:local-flicd {
|
Bridge flicbutton:flicd-bridge:local-flicd {
|
||||||
Thing button flic_livingroom "Yellow Button Living Room" [address = "60:13:B3:02:18:BD"]
|
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_kitchen "Black Button Kitchen" [address = "B5:7E:59:78:86:9F"]
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
demo.items:
|
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
|
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"] }
|
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).
|
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.
|
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"
|
rule "Button rule using the button channel"
|
||||||
|
|
||||||
when
|
when
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# FMI Weather Binding
|
# 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.
|
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.
|
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 |
|
| `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
|
### `forecast` thing configuration
|
||||||
|
|
||||||
| Parameter | Type | Required | Description | Example |
|
| Parameter | Type | Required | Description | Example |
|
||||||
|
@ -107,7 +106,7 @@ Please use the [Units Of Measurement](https://www.openhab.org/docs/concepts/unit
|
||||||
|
|
||||||
`fmi.things`:
|
`fmi.things`:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing fmiweather:observation:station_Helsinki_Kumpula "Helsinki Kumpula Observation" [fmisid="101004"]
|
Thing fmiweather:observation:station_Helsinki_Kumpula "Helsinki Kumpula Observation" [fmisid="101004"]
|
||||||
Thing fmiweather:forecast:forecast_Paris "Paris Forecast" [location="48.864716, 2.349014"]
|
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()))
|
'"{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" }
|
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: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" }
|
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()))
|
'"{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" }
|
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: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" }
|
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`:
|
`fmi_weather.sitemap`:
|
||||||
|
|
||||||
```
|
```perl
|
||||||
sitemap fmi_weather label="FMI Weather" {
|
sitemap fmi_weather label="FMI Weather" {
|
||||||
Frame label="Observation Helsinki" {
|
Frame label="Observation Helsinki" {
|
||||||
Text item=HelsinkiObservationTime
|
Text item=HelsinkiObservationTime
|
||||||
|
|
|
@ -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`.
|
Currently the binding support two types of things: `ftpfolder` and `localfolder`.
|
||||||
|
|
||||||
|
|
||||||
## Thing Configuration
|
## Thing Configuration
|
||||||
|
|
||||||
The `ftpfolder` thing has the following configuration options:
|
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 |
|
| newftpfile | String | A new file name discovered on FTP |
|
||||||
| newlocalfile | String | A new file name discovered on in local folder |
|
| newlocalfile | String | A new file name discovered on in local folder |
|
||||||
|
|
||||||
|
|
||||||
## Full Example
|
## Full Example
|
||||||
|
|
||||||
Thing configuration:
|
Thing configuration:
|
||||||
|
|
|
@ -25,7 +25,7 @@ Bridge has the following configuration parameters:
|
||||||
|
|
||||||
| Parameter | Description | Required
|
| 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
|
| 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.
|
| 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
|
| apiKeyLimitRemaining | Number | The remaining number of API requests for today
|
||||||
|
|
||||||
|
|
||||||
The AirQuality sensors information that is retrieved is available as these channels:
|
The AirQuality sensors information that is retrieved is available as these channels:
|
||||||
|
|
||||||
| Channel ID | Item Type | Description
|
| Channel ID | Item Type | Description
|
||||||
|
@ -57,7 +56,7 @@ The AirQuality sensors information that is retrieved is available as these chann
|
||||||
|
|
||||||
demo.things:
|
demo.things:
|
||||||
|
|
||||||
```
|
```java
|
||||||
// Bridge configuration:
|
// Bridge configuration:
|
||||||
Bridge foobot:account:myfoobotaccount "Foobot Account" [apiKey="XXXXXX", username="XXXXXX", refreshInterval=8] {
|
Bridge foobot:account:myfoobotaccount "Foobot Account" [apiKey="XXXXXX", username="XXXXXX", refreshInterval=8] {
|
||||||
Things:
|
Things:
|
||||||
|
@ -66,6 +65,6 @@ Bridge foobot:account:myfoobotaccount "Foobot Account" [apiKey="XXXXXX", usernam
|
||||||
|
|
||||||
demo.items:
|
demo.items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Number:Temperature Temperature "Temperature" <temperature> { channel="foobot:myfoobotaccount:device:myfoobot:temperature" }
|
Number:Temperature Temperature "Temperature" <temperature> { channel="foobot:myfoobotaccount:device:myfoobot:temperature" }
|
||||||
```
|
```
|
||||||
|
|
|
@ -34,7 +34,7 @@ The binding has the following configuration options, which can be set for "bindi
|
||||||
|
|
||||||
### Server
|
### 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 |
|
| 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 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 |
|
| 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).
|
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.
|
The bridge thing will initialize only if a valid application token (parameter _appToken_) is filled.
|
||||||
|
|
||||||
### Phone
|
### Phone
|
||||||
|
|
||||||
The *phone* thing requires the following configuration parameters:
|
The _phone_ thing requires the following configuration parameters:
|
||||||
|
|
||||||
| Parameter Label | Parameter ID | Description | Required | Default |
|
| Parameter Label | Parameter ID | Description | Required | Default |
|
||||||
|------------------------------|---------------------------|---------------------------------------------------------------------------------------------|----------|---------|
|
|------------------------------|---------------------------|---------------------------------------------------------------------------------------------|----------|---------|
|
||||||
|
@ -61,7 +61,7 @@ The *phone* thing requires the following configuration parameters:
|
||||||
|
|
||||||
### Network device
|
### 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 |
|
| Parameter Label | Parameter ID | Description | Required |
|
||||||
|-----------------|--------------|----------------------------------------|----------|
|
|-----------------|--------------|----------------------------------------|----------|
|
||||||
|
@ -69,7 +69,7 @@ The *net_device* thing requires the following configuration parameters:
|
||||||
|
|
||||||
### Network interface
|
### 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 |
|
| Parameter Label | Parameter ID | Description | Required |
|
||||||
|-----------------|--------------|-----------------------------------------------------|----------|
|
|-----------------|--------------|-----------------------------------------------------|----------|
|
||||||
|
@ -77,7 +77,7 @@ The *net_interface* thing requires the following configuration parameters:
|
||||||
|
|
||||||
### AirPlay device
|
### AirPlay device
|
||||||
|
|
||||||
The *airplay* thing requires the following configuration parameters:
|
The _airplay_ thing requires the following configuration parameters:
|
||||||
|
|
||||||
| Parameter Label | Parameter ID | Description | Required |
|
| Parameter Label | Parameter ID | Description | Required |
|
||||||
|-----------------|--------------|-----------------------------|----------|
|
|-----------------|--------------|-----------------------------|----------|
|
||||||
|
|
|
@ -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.
|
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:
|
It supports Fronius inverters and Fronius Smart Meter.
|
||||||
* Fronius Symo
|
Supports:
|
||||||
* Fronius Symo Gen24
|
|
||||||
* Fronius Smart Meter 63A
|
- Fronius Symo
|
||||||
* Fronius Smart Meter TS 65A-3
|
- Fronius Symo Gen24
|
||||||
* Fronius Ohmpilot
|
- Fronius Smart Meter 63A
|
||||||
|
- Fronius Smart Meter TS 65A-3
|
||||||
|
- Fronius Ohmpilot
|
||||||
|
|
||||||
## Supported Things
|
## Supported Things
|
||||||
|
|
||||||
|
@ -108,7 +110,6 @@ The binding has no configuration options, all configuration is done at `bridge`,
|
||||||
| `energyrealsumconsumed` | Number:Energy | Real Energy consumed |
|
| `energyrealsumconsumed` | Number:Energy | Real Energy consumed |
|
||||||
| `energyrealsumproduced` | Number:Energy | Real Energy produced |
|
| `energyrealsumproduced` | Number:Energy | Real Energy produced |
|
||||||
|
|
||||||
|
|
||||||
### Channels for `ohmpilot` Thing
|
### Channels for `ohmpilot` Thing
|
||||||
|
|
||||||
| Channel ID | Item Type | Description |
|
| 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 |
|
| `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 |
|
| `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
|
## Properties
|
||||||
|
|
||||||
### The `meter` thing has the following 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:
|
demo.things:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge fronius:bridge:mybridge [hostname="192.168.66.148", refreshInterval=5] {
|
Bridge fronius:bridge:mybridge [hostname="192.168.66.148", refreshInterval=5] {
|
||||||
Thing powerinverter myinverter [deviceId=1]
|
Thing powerinverter myinverter [deviceId=1]
|
||||||
Thing meter mymeter [deviceId=0]
|
Thing meter mymeter [deviceId=0]
|
||||||
|
@ -150,7 +150,7 @@ Bridge fronius:bridge:mybridge [hostname="192.168.66.148", refreshInterval=5] {
|
||||||
|
|
||||||
demo.items:
|
demo.items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Number:Power AC_Power { channel="fronius:powerinverter:mybridge:myinverter:inverterdatachannelpac" }
|
Number:Power AC_Power { channel="fronius:powerinverter:mybridge:myinverter:inverterdatachannelpac" }
|
||||||
Number:Energy Day_Energy { channel="fronius:powerinverter:mybridge:myinverter:inverterdatachanneldayenergy" }
|
Number:Energy Day_Energy { channel="fronius:powerinverter:mybridge:myinverter:inverterdatachanneldayenergy" }
|
||||||
Number:Energy Total_Energy { channel="fronius:powerinverter:mybridge:myinverter:inverterdatachanneltotal" }
|
Number:Energy Total_Energy { channel="fronius:powerinverter:mybridge:myinverter:inverterdatachanneltotal" }
|
||||||
|
|
|
@ -6,20 +6,20 @@ This binding integrates internet radios based on the [Frontier Silicon chipset](
|
||||||
|
|
||||||
Successfully tested are internet radios:
|
Successfully tested are internet radios:
|
||||||
|
|
||||||
* [Hama IR100, IR110](https://de.hama.com/00054823/hama-internetradio-ir110)
|
- [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)
|
- [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/)
|
- [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/)
|
- [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/)
|
- [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/)
|
- [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/)
|
- [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)
|
- [TTMicro AS Pinell Supersound](https://www.ttmicro.no/radio)
|
||||||
* [Revo SuperConnect](https://revo.co.uk/products/)
|
- [Revo SuperConnect](https://revo.co.uk/products/)
|
||||||
* [Sangean WFR-28C](https://sg.sangean.com.tw/products/product_category.asp?cid=2)
|
- [Sangean WFR-28C](https://sg.sangean.com.tw/products/product_category.asp?cid=2)
|
||||||
* [Roku SoundBridge M1001](https://soundbridge.roku.com/soundbridge/index.php)
|
- [Roku SoundBridge M1001](https://soundbridge.roku.com/soundbridge/index.php)
|
||||||
* [Dual IR 3a](https://www.dual.de/produkte/digitalradio/radio-station-ir-3a/)
|
- [Dual IR 3a](https://www.dual.de/produkte/digitalradio/radio-station-ir-3a/)
|
||||||
* [Teufel 3sixty](https://www.teufel.de/stereo/radio-3sixty-p16568.html)
|
- [Teufel 3sixty](https://www.teufel.de/stereo/radio-3sixty-p16568.html)
|
||||||
* [Ruark R5](https://www.ruarkaudio.com/products/r5-high-fidelity-music-system)
|
- [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.
|
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.
|
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.
|
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.
|
- 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 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 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.
|
- The default refresh rate for the radio items is `60` seconds; `0` disables periodic refresh.
|
||||||
|
|
||||||
## Channels
|
## 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 | - | - | - | - | - | - |
|
| 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 |
|
| 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
|
## Full Example
|
||||||
|
|
||||||
demo.things:
|
demo.things:
|
||||||
|
|
||||||
```
|
```java
|
||||||
fsinternetradio:radio:radioInKitchen [ ip="192.168.0.42" ]
|
fsinternetradio:radio:radioInKitchen [ ip="192.168.0.42" ]
|
||||||
```
|
```
|
||||||
|
|
||||||
demo.items:
|
demo.items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Switch RadioPower "Radio Power" { channel="fsinternetradio:radio:radioInKitchen:power" }
|
Switch RadioPower "Radio Power" { channel="fsinternetradio:radio:radioInKitchen:power" }
|
||||||
Switch RadioMute "Radio Mute" { channel="fsinternetradio:radio:radioInKitchen:mute" }
|
Switch RadioMute "Radio Mute" { channel="fsinternetradio:radio:radioInKitchen:mute" }
|
||||||
Dimmer RadioVolume "Radio Volume" { channel="fsinternetradio:radio:radioInKitchen:volume-percent" }
|
Dimmer RadioVolume "Radio Volume" { channel="fsinternetradio:radio:radioInKitchen:volume-percent" }
|
||||||
|
@ -108,17 +107,17 @@ String RadioInfo2 "Radio Info2" { channel="fsinternetradio:radio:radioInKitchen:
|
||||||
|
|
||||||
demo.sitemap:
|
demo.sitemap:
|
||||||
|
|
||||||
```
|
```perl
|
||||||
sitemap demo label="Main Menu"
|
sitemap demo label="Main Menu"
|
||||||
{
|
{
|
||||||
Frame {
|
Frame {
|
||||||
Switch item=RadioPower
|
Switch item=RadioPower
|
||||||
Slider visibility=[RadioPower==ON] item=RadioVolume
|
Slider visibility=[RadioPower==ON] item=RadioVolume
|
||||||
Switch visibility=[RadioPower==ON] item=RadioMute
|
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=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"]
|
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=RadioInfo1
|
||||||
Text visibility=[RadioPower==ON] item=RadioInfo2
|
Text visibility=[RadioPower==ON] item=RadioInfo2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
|
@ -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 | |
|
| 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 | |
|
| password | Password to login to the FTP server. | yes | |
|
||||||
|
|
||||||
|
|
||||||
## Channels
|
## Channels
|
||||||
|
|
||||||
This binding currently supports the following 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 | .* |
|
| filename | Filename | Filename to match received files. Supports regular expression patterns. | yes | .* |
|
||||||
|
|
||||||
|
|
||||||
### Trigger Channels
|
### Trigger Channels
|
||||||
|
|
||||||
| Channel Type ID | Options | Description |
|
| 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.
|
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.
|
If no match is found, no channel is updated.
|
||||||
The filename parameter supports regular expression patterns.
|
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:
|
Trigger channels supports following options:
|
||||||
|
|
||||||
|
@ -76,7 +74,7 @@ Trigger channels supports following options:
|
||||||
|
|
||||||
Things:
|
Things:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing ftpupload:imagereceiver:images1 [ userName="test1", password="12345" ] {
|
Thing ftpupload:imagereceiver:images1 [ userName="test1", password="12345" ] {
|
||||||
|
|
||||||
Thing ftpupload:imagereceiver:images2 [ userName="test2", password="12345" ] {
|
Thing ftpupload:imagereceiver:images2 [ userName="test2", password="12345" ] {
|
||||||
|
@ -98,14 +96,14 @@ Thing ftpupload:imagereceiver:images2 [ userName="test2", password="12345" ] {
|
||||||
|
|
||||||
Items:
|
Items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Image Image1 { channel="ftpupload:imagereceiver:images1:image" }
|
Image Image1 { channel="ftpupload:imagereceiver:images1:image" }
|
||||||
Image Image2 { channel="ftpupload:imagereceiver:images2:my_image1" }
|
Image Image2 { channel="ftpupload:imagereceiver:images2:my_image1" }
|
||||||
```
|
```
|
||||||
|
|
||||||
Rules:
|
Rules:
|
||||||
|
|
||||||
```
|
```java
|
||||||
rule "example trigger rule 1"
|
rule "example trigger rule 1"
|
||||||
when
|
when
|
||||||
Channel 'ftpupload:imagereceiver:images1:image-received' triggered IMAGE_RECEIVED
|
Channel 'ftpupload:imagereceiver:images1:image-received' triggered IMAGE_RECEIVED
|
||||||
|
@ -124,7 +122,7 @@ end
|
||||||
|
|
||||||
Sitemap:
|
Sitemap:
|
||||||
|
|
||||||
```
|
```perl
|
||||||
Frame label="FTP images" {
|
Frame label="FTP images" {
|
||||||
Image item=Image1
|
Image item=Image1
|
||||||
Image item=Image2
|
Image item=Image2
|
||||||
|
@ -137,19 +135,19 @@ The binding can be used to receive images from network cameras that send images
|
||||||
|
|
||||||
Things:
|
Things:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing ftpupload:imagereceiver:garagecamera [ userName="garage", password="12345" ]
|
Thing ftpupload:imagereceiver:garagecamera [ userName="garage", password="12345" ]
|
||||||
```
|
```
|
||||||
|
|
||||||
Items:
|
Items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Image Garage_NetworkCamera_Motion_Image { channel="ftpupload:imagereceiver:garagecamera:image" }
|
Image Garage_NetworkCamera_Motion_Image { channel="ftpupload:imagereceiver:garagecamera:image" }
|
||||||
```
|
```
|
||||||
|
|
||||||
Rules:
|
Rules:
|
||||||
|
|
||||||
```
|
```java
|
||||||
rule "example trigger rule"
|
rule "example trigger rule"
|
||||||
when
|
when
|
||||||
Channel 'ftpupload:imagereceiver:garagecamera:image-received' triggered IMAGE_RECEIVED
|
Channel 'ftpupload:imagereceiver:garagecamera:image-received' triggered IMAGE_RECEIVED
|
||||||
|
@ -160,7 +158,7 @@ end
|
||||||
|
|
||||||
Sitemap:
|
Sitemap:
|
||||||
|
|
||||||
```
|
```perl
|
||||||
Frame label="Garage network camera" icon="camera" {
|
Frame label="Garage network camera" icon="camera" {
|
||||||
Image item=Garage_NetworkCamera_Motion_Image
|
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:
|
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
|
log:set DEBUG org.apache.ftpserver
|
||||||
```
|
```
|
||||||
|
|
||||||
and set back to default level:
|
and set back to default level:
|
||||||
|
|
||||||
```
|
```shell
|
||||||
log:set DEFAULT org.apache.ftpserver
|
log:set DEFAULT org.apache.ftpserver
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -33,10 +33,10 @@ There are several settings for an account:
|
||||||
|
|
||||||
### Obtaining your API Key
|
### Obtaining your API Key
|
||||||
|
|
||||||
1. Goto https://developer.husqvarnagroup.cloud/, sign in using your GARDENA smart system account and accept the terms of use
|
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)
|
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>)
|
||||||
3. Connect both _Authentication API_ and _GARDENA smart system API_ to your application via the 'Connect new API' button
|
1. 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. Copy the application key to use with this binding as _apiKey_
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ Sensor refresh commands are not yet supported by the Gardena smart system integr
|
||||||
|
|
||||||
### Example configuration
|
### Example configuration
|
||||||
|
|
||||||
```
|
```java
|
||||||
// smart Water Control
|
// smart Water Control
|
||||||
String WC_Valve_Activity "Valve Activity" { channel="gardena:water_control:home:myWateringComputer:valve#activity" }
|
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" }
|
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
|
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_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_OpenWithDuration.sendCommand(ON) // start watering
|
||||||
openhab:send WC_Valve_cmd_CloseValve.sendCommand(ON) // stop any active 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
|
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" }
|
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
|
// refresh ALL items
|
||||||
openhab:send LastUpdate REFRESH
|
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
|
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
|
log:set TRACE org.openhab.binding.gardena
|
||||||
```
|
```
|
||||||
|
|
||||||
Set the logging back to normal
|
Set the logging back to normal
|
||||||
|
|
||||||
```
|
```shell
|
||||||
log:set INFO org.openhab.binding.gardena
|
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.
|
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 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.
|
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.
|
Schedules, sensor-refresh commands, irrigation control master valve configuration etc. are not supported.
|
||||||
This binding relies on the GARDENA smart system integration API.
|
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.
|
Occasionally it can happen that the API key is no longer valid.
|
||||||
|
|
||||||
```
|
```text
|
||||||
HTTP protocol violation: Authentication challenge without WWW-Authenticate header
|
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.
|
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.
|
||||||
|
|
||||||
|
|
|
@ -3,30 +3,29 @@
|
||||||
This binding aims to handle various GCE Electronics equipments.
|
This binding aims to handle various GCE Electronics equipments.
|
||||||
IPX800 is a 8 relay webserver from gce-electronics with a lot of possibilities:
|
IPX800 is a 8 relay webserver from gce-electronics with a lot of possibilities:
|
||||||
|
|
||||||
* 8 Digital Input
|
- 8 Digital Input
|
||||||
* 8 Relay (250V / 10A / channel)
|
- 8 Relay (250V / 10A / channel)
|
||||||
* 4 Analog Input
|
- 4 Analog Input
|
||||||
* 8 Counters
|
- 8 Counters
|
||||||
* Ability to cascade up to 3 extensions for a total of 32 inputs / 32 relay
|
- 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.
|
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.
|
On input we generally connect push buttons (for instance house switchs), on ouputs we can connect light bulbs for instance.
|
||||||
|
|
||||||
Features of the binding:
|
Features of the binding:
|
||||||
|
|
||||||
* Multi ipx support
|
- Multi ipx support
|
||||||
* Direct TCP connection
|
- Direct TCP connection
|
||||||
* Auto reconnect
|
- Auto reconnect
|
||||||
* Simple clic/Long press
|
- Simple clic/Long press
|
||||||
* Pulse mode support
|
- Pulse mode support
|
||||||
|
|
||||||
## Binding Configuration
|
## Binding Configuration
|
||||||
|
|
||||||
There is no configuration at binding level.
|
There is no configuration at binding level.
|
||||||
|
|
||||||
|
|
||||||
## Thing Configuration
|
## Thing Configuration
|
||||||
|
|
||||||
The IPX800v3 (ID : 'ipx800v3') accepts the following configuration parameters :
|
The IPX800v3 (ID : 'ipx800v3') accepts the following configuration parameters :
|
||||||
|
@ -44,7 +43,7 @@ The thing provides four groups of channels.
|
||||||
|
|
||||||
### Digital Inputs
|
### 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...
|
They are usually commuted by physical devices like pushbuttons, magnets...
|
||||||
|
|
||||||
#### Digital Input Channels (contacts)
|
#### 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'. |
|
| 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'. |
|
| 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)
|
### 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 |
|
| hysteresis | 0 | If set, the channel will ignore status if change (+ or -) is less than hysteresis/2 |
|
||||||
|
|
||||||
|
|
||||||
## Rule Actions
|
## Rule Actions
|
||||||
|
|
||||||
Multiple actions are supported by this binding. In classic rules these are accessible as shown in the example below:
|
Multiple actions are supported by this binding. In classic rules these are accessible as shown in the example below:
|
||||||
|
|
||||||
Getting ipxActions variable in scripts
|
Getting ipxActions variable in scripts
|
||||||
|
|
||||||
```
|
```java
|
||||||
val ipxActions = getActions("gce","gce:ipx800v3:43cc8d07")
|
val ipxActions = getActions("gce","gce:ipx800v3:43cc8d07")
|
||||||
if(null === ipxActions) {
|
if(null === ipxActions) {
|
||||||
logInfo("actions", "ipxActions not found, check thing ID")
|
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.
|
Resets the value of the given counter to 0.
|
||||||
|
|
||||||
* `counterId` (Integer) - id of the counter.
|
- `counterId` (Integer) - id of the counter.
|
||||||
|
|
||||||
|
|
||||||
### reset(placeholder)
|
### reset(placeholder)
|
||||||
|
|
||||||
Restarts the PLC.
|
Restarts the PLC.
|
||||||
|
|
||||||
* `placeholder` (Integer) - This parameter is not used (can be null).
|
- `placeholder` (Integer) - This parameter is not used (can be null).
|
||||||
|
|
||||||
## Example
|
## Example
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,6 @@ This binding communicates with the Generac MobileLink API and reports on the sta
|
||||||
|
|
||||||
## Supported Things
|
## Supported Things
|
||||||
|
|
||||||
|
|
||||||
### MobileLink Account
|
### MobileLink Account
|
||||||
|
|
||||||
A MobileLink account bridge thing represents a user's MobileLink account and is responsible for authentication and polling for updates.
|
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 |
|
| password | The password used to login to the MobileLink service |
|
||||||
| refreshInterval | The frequency to poll for generator updates, minimum duration is 30 seconds |
|
| refreshInterval | The frequency to poll for generator updates, minimum duration is 30 seconds |
|
||||||
|
|
||||||
|
|
||||||
## Channels
|
## Channels
|
||||||
|
|
||||||
### Generator Channels
|
### Generator Channels
|
||||||
|
|
||||||
All channels are read-only.
|
All channels are read-only.
|
||||||
|
|
||||||
| channel | type | description |
|
| channel | type | description |
|
||||||
|-------------------------|----------------------|-------------------------------------------|
|
|-------------------------|----------------------|-------------------------------------------|
|
||||||
|
@ -55,12 +53,11 @@ All channels are read-only.
|
||||||
| batteryVoltage | String | Battery voltage status |
|
| batteryVoltage | String | Battery voltage status |
|
||||||
| serviceStatus | Switch | Service status |
|
| serviceStatus | Switch | Service status |
|
||||||
|
|
||||||
|
|
||||||
## Full Example
|
## Full Example
|
||||||
|
|
||||||
### Things
|
### Things
|
||||||
|
|
||||||
```xtend
|
```java
|
||||||
Bridge generacmobilelink:account:main "MobileLink Account" [ userName="foo@bar.com", password="secret",refreshInterval=60 ] {
|
Bridge generacmobilelink:account:main "MobileLink Account" [ userName="foo@bar.com", password="secret",refreshInterval=60 ] {
|
||||||
Thing generator 123456 "MobileLink Generator" [ generatorId="123456" ]
|
Thing generator 123456 "MobileLink Generator" [ generatorId="123456" ]
|
||||||
}
|
}
|
||||||
|
@ -68,7 +65,7 @@ Bridge generacmobilelink:account:main "MobileLink Account" [ userName="foo@bar.c
|
||||||
|
|
||||||
### Items
|
### Items
|
||||||
|
|
||||||
```xtend
|
```java
|
||||||
Switch GeneratorConnected "Connected [%s]" {channel="generacmobilelink:generator:main:123456:connected"}
|
Switch GeneratorConnected "Connected [%s]" {channel="generacmobilelink:generator:main:123456:connected"}
|
||||||
Switch GeneratorGreenLight "Green Light [%s]" {channel="generacmobilelink:generator:main:123456:greenLight"}
|
Switch GeneratorGreenLight "Green Light [%s]" {channel="generacmobilelink:generator:main:123456:greenLight"}
|
||||||
Switch GeneratorYellowLight "Yellow Light [%s]" {channel="generacmobilelink:generator:main:123456:yellowLight"}
|
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
|
### Sitemap
|
||||||
|
|
||||||
```xtend
|
```perl
|
||||||
sitemap MobileLink label="Demo Sitemap" {
|
sitemap MobileLink label="Demo Sitemap" {
|
||||||
Frame label="Generator" {
|
Frame label="Generator" {
|
||||||
Switch item=GeneratorConnected
|
Switch item=GeneratorConnected
|
||||||
|
|
|
@ -112,7 +112,7 @@ parameters for **baud rate**, **flow control**, and **parity** to match the conf
|
||||||
|
|
||||||
### Manual Thing Creation
|
### 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.
|
See example below.
|
||||||
|
|
||||||
### Binding Dependencies
|
### 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.
|
The GlobalCache binding will automatically detect those devices, then add them to the inbox.
|
||||||
|
|
||||||
Background discovery is **enabled** by default.
|
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
|
```text
|
||||||
discovery.globalcache:background=false
|
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.
|
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.
|
See below.
|
||||||
|
|
||||||
## Channels and Channel Types
|
## 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)
|
- Contact Closure (CC)
|
||||||
- Infrared (IR)
|
- Infrared (IR)
|
||||||
- Serial (SL)
|
- Serial (SL)
|
||||||
- Serial Direct (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 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.
|
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
|
## 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.
|
For example, the following item links to the module 1 / connector 2 channel on an iTach IR device.
|
||||||
|
|
||||||
```java
|
```java
|
||||||
|
@ -192,30 +192,30 @@ There are numerous other sources of IR codes, such as iRule and RemoteCentral.
|
||||||
|
|
||||||
#### Unsupported Features
|
#### Unsupported Features
|
||||||
|
|
||||||
Currently, only the *IR Out* and *IR Blaster* connector configurations are supported.
|
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.
|
Other settings, such as _Sensor In_, _Sensor Notify_, and _LED Lighting_, may be supported in the future.
|
||||||
|
|
||||||
## Contact Closure (CC) Channel
|
## 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.
|
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" }
|
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.
|
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" }
|
String MyRelay "My Relay [%s]" (gRelays) { channel="globalcache:itachFlex:000C01AF4990:cc-m1#c1" }
|
||||||
```
|
```
|
||||||
|
|
||||||
## Serial (SL) Channel
|
## 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.
|
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" }
|
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.
|
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.
|
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" }
|
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.
|
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.
|
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" }
|
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
|
%F7 Russound RNET message terminator
|
||||||
```
|
```
|
||||||
|
|
||||||
**Example**
|
### Example
|
||||||
|
|
||||||
### MAP File
|
#### MAP File
|
||||||
|
|
||||||
```text
|
```text
|
||||||
# Harmon Kardon AVR-245 Home Theater Receiver
|
# 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
|
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 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 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" }
|
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" }
|
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.
|
This is an example of how to use contact closure, infrared, and serial devices in a sitemap.
|
||||||
|
|
||||||
```
|
```perl
|
||||||
Frame label="Contact Closure" {
|
Frame label="Contact Closure" {
|
||||||
Switch item=ContactClosure1 label="Open/Close Garage Door"
|
Switch item=ContactClosure1 label="Open/Close Garage Door"
|
||||||
Switch item=ContactClosure2 label="Light on Garage Door Opener"
|
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.
|
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
|
var boolean isRunning = false
|
||||||
|
|
||||||
rule "Example Garage Door Opener"
|
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.
|
This is an example of how to send IR and/or serial commands from within a rule.
|
||||||
|
|
||||||
```
|
```java
|
||||||
rule "AV Power On/Off"
|
rule "AV Power On/Off"
|
||||||
when
|
when
|
||||||
Item AVPowerOn received command
|
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.
|
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"
|
rule "Russound Set Zone 1 Volume to 20"
|
||||||
when
|
when
|
||||||
Item RussoundSetVolume received command
|
Item RussoundSetVolume received command
|
||||||
|
@ -399,10 +399,10 @@ end
|
||||||
|
|
||||||
### Manual Thing Creation
|
### 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.
|
The file should contain lines formatted like this.
|
||||||
|
|
||||||
```
|
```java
|
||||||
globalcache:itachCC:000CFF17B106 [ ipAddress="192.168.12.62" ]
|
globalcache:itachCC:000CFF17B106 [ ipAddress="192.168.12.62" ]
|
||||||
globalcache:itachIR:000C0B1E54A0 [ ipAddress="192.168.12.63", mapFilename="ir-codes.map" ]
|
globalcache:itachIR:000C0B1E54A0 [ ipAddress="192.168.12.63", mapFilename="ir-codes.map" ]
|
||||||
globalcache:itachSL:000CF886B107 [ ipAddress="192.168.12.64", mapFilename="serial-codes.map" ]
|
globalcache:itachSL:000CF886B107 [ ipAddress="192.168.12.64", mapFilename="serial-codes.map" ]
|
||||||
|
|
|
@ -23,7 +23,7 @@ The apiVersion 2 is only available for Go-eCharger with new hardware revision (C
|
||||||
|
|
||||||
## Channels
|
## Channels
|
||||||
|
|
||||||
Currently available channels are
|
Currently available channels are
|
||||||
| Channel ID | Item Type | Description | API version |
|
| Channel ID | Item Type | Description | API version |
|
||||||
|--------------------------|--------------------------|---------------------------------------------------------------|-------------------|
|
|--------------------------|--------------------------|---------------------------------------------------------------|-------------------|
|
||||||
| maxCurrent | Number:ElectricCurrent | Maximum current allowed to use for charging | 1 (r/w), 2 (r/w) |
|
| 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
|
demo.things
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing goecharger:goe:garage [ip="192.168.1.36",refreshInterval=5]
|
Thing goecharger:goe:garage [ip="192.168.1.36",refreshInterval=5]
|
||||||
```
|
```
|
||||||
|
|
||||||
demo.items
|
demo.items
|
||||||
|
|
||||||
```
|
```java
|
||||||
Number:ElectricCurrent GoEChargerMaxCurrent "Maximum current" {channel="goecharger:goe:garage:maxCurrent"}
|
Number:ElectricCurrent GoEChargerMaxCurrent "Maximum current" {channel="goecharger:goe:garage:maxCurrent"}
|
||||||
Number:ElectricCurrent GoEChargerMaxCurrentTemp "Maximum current temporary" {channel="goecharger:goe:garage:maxCurrentTemp"}
|
Number:ElectricCurrent GoEChargerMaxCurrentTemp "Maximum current temporary" {channel="goecharger:goe:garage:maxCurrentTemp"}
|
||||||
Number GoEChargerForceState "Force state" {channel="goecharger:goe:garage:forceState"}
|
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.
|
You can easily define rules to charge with PV power alone.
|
||||||
Here is a simple sample how such a rule could look like:
|
Here is a simple sample how such a rule could look like:
|
||||||
|
|
||||||
```
|
```java
|
||||||
rule "Set max amps for PV charging"
|
rule "Set max amps for PV charging"
|
||||||
when
|
when
|
||||||
Item availablePVCurrent received update
|
Item availablePVCurrent received update
|
||||||
|
@ -108,7 +108,7 @@ end
|
||||||
|
|
||||||
Advanced example:
|
Advanced example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
rule "Set charging limit for go-eCharger"
|
rule "Set charging limit for go-eCharger"
|
||||||
when
|
when
|
||||||
Time cron "*/10 * * ? * *" // Trigger every 10 seconds
|
Time cron "*/10 * * ? * *" // Trigger every 10 seconds
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# GPIO Binding
|
# GPIO Binding
|
||||||
|
|
||||||
This binding adds GPIO support via the pigpio daemon to openhab.
|
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
|
## 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:
|
On a raspberry (or a compatible device) you have to install pigpio:
|
||||||
|
|
||||||
```
|
```shell
|
||||||
sudo apt-get install pigpiod
|
sudo apt-get install pigpiod
|
||||||
sudo raspi-config
|
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:
|
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 mkdir -p /etc/systemd/system/pigpiod.service.d/
|
||||||
sudo nano /etc/systemd/system/pigpiod.service.d/public.conf
|
sudo nano /etc/systemd/system/pigpiod.service.d/public.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
[Service]
|
```text
|
||||||
ExecStart=
|
[Service]
|
||||||
ExecStart=/usr/bin/pigpiod
|
ExecStart=
|
||||||
|
ExecStart=/usr/bin/pigpiod
|
||||||
```
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
sudo systemctl daemon-reload
|
sudo systemctl daemon-reload
|
||||||
```
|
```
|
||||||
|
|
||||||
Now that Remote GPIO is enabled, get the daemon going (even if installed with apt-get):
|
Now that Remote GPIO is enabled, get the daemon going (even if installed with apt-get):
|
||||||
|
|
||||||
```
|
```shell
|
||||||
sudo systemctl enable pigpiod
|
sudo systemctl enable pigpiod
|
||||||
sudo systemctl start pigpiod
|
sudo systemctl start pigpiod
|
||||||
```
|
```
|
||||||
|
@ -71,10 +73,9 @@ If you want to invert the value, set `invert` to true.
|
||||||
|
|
||||||
## Full Example
|
## Full Example
|
||||||
|
|
||||||
|
|
||||||
demo.things:
|
demo.things:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing gpio:pigpio-remote:sample-pi-1 "Sample-Pi 1" [host="192.168.2.36", port=8888] {
|
Thing gpio:pigpio-remote:sample-pi-1 "Sample-Pi 1" [host="192.168.2.36", port=8888] {
|
||||||
Channels:
|
Channels:
|
||||||
Type pigpio-digital-input : sample-input-1 [ gpioId=10]
|
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:
|
demo.items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Switch SampleInput1 {channel="gpio:pigpio-remote:sample-pi-1:sample-input-1"}
|
Switch SampleInput1 {channel="gpio:pigpio-remote:sample-pi-1:sample-input-1"}
|
||||||
Switch SampleOutput1 {channel="gpio:pigpio-remote:sample-pi-1:sample-output-1"}
|
Switch SampleOutput1 {channel="gpio:pigpio-remote:sample-pi-1:sample-output-1"}
|
||||||
```
|
```
|
||||||
|
|
||||||
demo.sitemap:
|
demo.sitemap:
|
||||||
|
|
||||||
```
|
```perl
|
||||||
sitemap demo label="Main Menu"
|
sitemap demo label="Main Menu"
|
||||||
{
|
{
|
||||||
Switch item=SampleInput1
|
Switch item=SampleInput1
|
||||||
|
|
|
@ -4,8 +4,8 @@ This binding allows you to connect mobile GPS tracker applications to openHAB an
|
||||||
|
|
||||||
Currently two applications are supported:
|
Currently two applications are supported:
|
||||||
|
|
||||||
* [OwnTracks](https://owntracks.org/booklet/) - iOS, Android
|
- [OwnTracks](https://owntracks.org/booklet/) - iOS, Android
|
||||||
* [GPSLogger](https://gpslogger.app/) - Android
|
- [GPSLogger](https://gpslogger.app/) - Android
|
||||||
|
|
||||||
GPS location reports are sent to openHAB using HTTP.
|
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.
|
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:
|
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]
|
- **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.
|
- **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
|
## Configuration
|
||||||
|
|
||||||
|
@ -24,15 +24,15 @@ Install [OwnTracks for Android](https://play.google.com/store/apps/details?id=or
|
||||||
|
|
||||||
Go to Preferences/Connection and set:
|
Go to Preferences/Connection and set:
|
||||||
|
|
||||||
* **Mode** - select Private HTTP
|
- **Mode** - select Private HTTP
|
||||||
* **Host**
|
- **Host**
|
||||||
* https://<your.ip.address>/gpstracker/owntracks or
|
- `https://<your.ip.address>/gpstracker/owntracks` or
|
||||||
* https://home.myopenhab.org/gpstracker/owntracks
|
- `https://home.myopenhab.org/gpstracker/owntracks`
|
||||||
* **Identification**
|
- **Identification**
|
||||||
* Turn Authentication ON
|
- Turn Authentication ON
|
||||||
* Set username and password to be able to reach your openHAB server (myopenhab.org credential, if choosen as host)
|
- 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
|
- 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).
|
- 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
|
### GPSLogger
|
||||||
|
|
||||||
|
@ -40,19 +40,19 @@ Install [GPSLogger for Android](https://github.com/mendhak/gpslogger/releases) o
|
||||||
After the launch, go to General Options.
|
After the launch, go to General Options.
|
||||||
Enable **Start on boot-up** and **Start on app launch**.
|
Enable **Start on boot-up** and **Start on app launch**.
|
||||||
|
|
||||||
Go to *Logging details* and enable **Log to custom URL**.
|
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.
|
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:
|
Right after enabling, the app takes you to the _Log to custom URL_ settings:
|
||||||
|
|
||||||
* **URL**
|
- **URL**
|
||||||
* https://<your.ip.address>/gpstracker/gpslogger or
|
- `https://<your.ip.address>/gpstracker/gpslogger` or
|
||||||
* https://home.myopenhab.org/gpstracker/gpslogger
|
- `https://home.myopenhab.org/gpstracker/gpslogger`
|
||||||
* **HTTP Body** - type in: { "_type":"location", "lat":%LAT, "lon":%LON, "tid":"XY", "acc":%ACC, "batt":%BATT, "tst":%TIMESTAMP }
|
- **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).
|
- 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 Headers** - type in: _Content-Type: application/json_
|
||||||
* **HTTP Method** - type in: *POST*
|
- **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)
|
- **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**.
|
- Check if everything is ok by clicking on **Validate SSL Certificate**.
|
||||||
|
|
||||||
### Things
|
### 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:
|
Basic channels provided by the tracker things:
|
||||||
|
|
||||||
* **Location** - Current location of the tracker
|
- **Location** - Current location of the tracker
|
||||||
* **Accuracy** - GPS accuracy
|
- **Accuracy** - GPS accuracy
|
||||||
* **Last Report** - Timestamp of the last location report
|
- **Last Report** - Timestamp of the last location report
|
||||||
* **Battery Level** - Battery level of the device running the tracker application
|
- **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.
|
- **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
|
#### 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 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.
|
- 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 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.
|
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**.
|
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.
|
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:
|
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>>/enter** will update the switch state to **ON**
|
||||||
* **<<region_name>>/leave** will update the switch state to **OFF**
|
- **<<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:
|
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
|
### Things
|
||||||
|
|
||||||
```
|
```java
|
||||||
//tracker definition
|
//tracker definition
|
||||||
Thing gpstracker:tracker:1 "XY tracker" [trackerId="XY"]
|
Thing gpstracker:tracker:1 "XY tracker" [trackerId="XY"]
|
||||||
|
|
||||||
|
@ -137,12 +137,12 @@ Thing gpstracker:tracker:EX "EX tracker" [trackerId="EX"] {
|
||||||
|
|
||||||
### Items
|
### Items
|
||||||
|
|
||||||
```
|
```java
|
||||||
//items for basic channels
|
//items for basic channels
|
||||||
Location locationEX "Location" {channel="gpstracker:tracker:1:lastLocation"}
|
Location locationEX "Location" {channel="gpstracker:tracker:1:lastLocation"}
|
||||||
DateTime lastSeenEX "Last seen" {channel="gpstracker:tracker:1:lastReport"}
|
DateTime lastSeenEX "Last seen" {channel="gpstracker:tracker:1:lastReport"}
|
||||||
Number batteryEX "Battery level" {channel="gpstracker:tracker:1:batteryLevel"}
|
Number batteryEX "Battery level" {channel="gpstracker:tracker:1:batteryLevel"}
|
||||||
Number:Length accuracyEX "GPS Accuracy [%d m]" {channel="gpstracker:tracker:1:gpsAccuracy"}
|
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)
|
//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"]}
|
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
|
### Sitemaps
|
||||||
|
|
||||||
```
|
```perl
|
||||||
sitemap gpstracker label="GPSTracker Binding" {
|
sitemap gpstracker label="GPSTracker Binding" {
|
||||||
Text item=distanceEX
|
Text item=distanceEX
|
||||||
Text item=atWorkEX
|
Text item=atWorkEX
|
||||||
|
@ -172,7 +172,7 @@ In order to see detailed debug information [set TRACE debug level](https://www.o
|
||||||
|
|
||||||
### Binding Start
|
### 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.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=[
|
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
|
], 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:
|
Please note the lines about started servlets:
|
||||||
|
|
||||||
```
|
```text
|
||||||
Started GPSTracker Callback servlet on /gpstracker/owntracks
|
Started GPSTracker Callback servlet on /gpstracker/owntracks
|
||||||
Started GPSTracker Callback servlet on /gpstracker/gpslogger
|
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:
|
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.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.
|
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:
|
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.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.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
|
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:
|
Assumptions:
|
||||||
|
|
||||||
* A Home distance channel is added to the tracker with parameters:
|
- A Home distance channel is added to the tracker with parameters:
|
||||||
* Channel ID: distanceHome
|
- Channel ID: distanceHome
|
||||||
* Region Name: Home
|
- Region Name: Home
|
||||||
* Region Radius: 100
|
- Region Radius: 100
|
||||||
* Region Center: 42.53,16.16
|
- Region Center: 42.53,16.16
|
||||||
* Presence switch is linked to the regionTrigger channel with parameters:
|
- Presence switch is linked to the regionTrigger channel with parameters:
|
||||||
* Profile: Geofence(gpstracker:trigger-geofence)
|
- Profile: Geofence(gpstracker:trigger-geofence)
|
||||||
* Region Name: Home
|
- Region Name: Home
|
||||||
|
|
||||||
![Image](doc/example.png)
|
![Image](doc/example.png)
|
||||||
|
|
||||||
After a location message received from the tracker the log should contain these lines:
|
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.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.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
|
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:
|
Assumptions:
|
||||||
|
|
||||||
* A **shared** region is defined in OwnTracks application. Lets call it Work.
|
- A **shared** region is defined in OwnTracks application. Lets call it Work.
|
||||||
* Presence switch is linked to the regionTrigger channel with parameters:
|
- Presence switch is linked to the regionTrigger channel with parameters:
|
||||||
* Profile: Geofence(gpstracker:trigger-geofence)
|
- Profile: Geofence(gpstracker:trigger-geofence)
|
||||||
* Region Name: Work
|
- 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.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] - 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
|
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**:
|
**Note**:
|
||||||
|
|
||||||
* If the binding was restarted only the second transition update will trigger event as the binding has to know the previous state.
|
- 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.
|
- The distance is not calculated for Work as the binding doesn't know the Work region center.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
This binding integrates Air Conditioners that use the GREE protocol (GREE, Sinclair and others).
|
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
|
## Supported Things
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ This binding supports one Thing type `airconditioner`.
|
||||||
## Discovery
|
## Discovery
|
||||||
|
|
||||||
Once the Air Conditioner is on the network (WiFi active) it could be discovered automatically.
|
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
|
## Binding Configuration
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ No binding configuration is required.
|
||||||
| refresh | Integer | Refresh interval in seconds for polling the device status. |
|
| 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. |
|
| 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).
|
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.
|
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|
|
| 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 |
|
| | | 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.
|
When changing mode, the air conditioner will be turned on unless "off" is selected.
|
||||||
|
|
||||||
## Full Example
|
## Full Example
|
||||||
|
|
||||||
**Things**
|
### Things
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing gree:airconditioner:a1234561 [ ipAddress="192.168.1.111", refresh=2 ]
|
Thing gree:airconditioner:a1234561 [ ipAddress="192.168.1.111", refresh=2 ]
|
||||||
```
|
```
|
||||||
|
|
||||||
**Items**
|
### Items
|
||||||
|
|
||||||
```
|
```java
|
||||||
Switch AirconPower { channel="gree:airconditioner:a1234561:power" }
|
Switch AirconPower { channel="gree:airconditioner:a1234561:power" }
|
||||||
String AirconMode { channel="gree:airconditioner:a1234561:mode" }
|
String AirconMode { channel="gree:airconditioner:a1234561:mode" }
|
||||||
Switch AirconTurbo { channel="gree:airconditioner:a1234561:turbo" }
|
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" }
|
Switch AirconPowerSaving { channel="gree:airconditioner:a1234561:powersave" }
|
||||||
```
|
```
|
||||||
|
|
||||||
**Sitemap**
|
### Sitemap
|
||||||
|
|
||||||
This is an example of how to set up your sitemap.
|
This is an example of how to set up your sitemap.
|
||||||
|
|
||||||
```
|
```perl
|
||||||
Frame label="Controls"
|
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"]
|
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)
|
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
|
Group Gree_Modechannel "Gree" { ga="Thermostat" } // allows mapping for Google Home Assistent
|
||||||
Switch GreeAirConditioner_Power "Aircon" {channel="gree:airconditioner:a1234561:power", ga="Switch"}
|
Switch GreeAirConditioner_Power "Aircon" {channel="gree:airconditioner:a1234561:power", ga="Switch"}
|
||||||
String GreeAirConditioner_Mode "Aircon Mode" {channel="gree:airconditioner:a1234561:mode", ga="thermostatMode"}
|
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"}
|
Switch GreeAirConditioner_Light "Light" {channel="gree:airconditioner:a1234561:light"}
|
||||||
```
|
```
|
||||||
|
|
||||||
**Rules**
|
### Rules
|
||||||
|
|
||||||
```
|
```java
|
||||||
rule "Mode changed"
|
rule "Mode changed"
|
||||||
when
|
when
|
||||||
Item GreeAirConditioner_Mode changed
|
Item GreeAirConditioner_Mode changed
|
||||||
|
|
|
@ -75,7 +75,7 @@ Note: Be aware that the Sense reports data once a day (at most), and that the va
|
||||||
|
|
||||||
Things file:
|
Things file:
|
||||||
|
|
||||||
````
|
```java
|
||||||
Bridge groheondus:account:account1 [ username="user@example.com", password="YourStrongPasswordHere!" ] {
|
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 ] {
|
groheondus:senseguard:550e8400-e29b-11d4-a716-446655440000 [ applianceId="550e8400-e29b-11d4-a716-446655440000", roomId=456, locationId=123 ] {
|
||||||
Channels:
|
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 ]
|
groheondus:sense:550e8400-e29b-11d4-a716-446655440000 [ applianceId="444e8400-e29b-11d4-a716-446655440000", roomId=456, locationId=123 ]
|
||||||
}
|
}
|
||||||
````
|
```
|
||||||
|
|
||||||
Items file:
|
Items file:
|
||||||
|
|
||||||
````
|
```java
|
||||||
String Name_Sense_Guard "Appliance Name" {channel="groheondus:senseguard:groheondus:appliance:550e8400-e29b-11d4-a716-446655440000:name"}
|
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: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"}
|
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"}
|
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: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"}
|
Number Humidity_Sense "Humidity [%.1f %unit%]" {channel="groheondus:sense:groheondus:appliance:444e8400-e29b-11d4-a716-446655440000:humidity"}
|
||||||
````
|
```
|
||||||
|
|
|
@ -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.
|
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 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.
|
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
|
### 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. |
|
| 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. |
|
| 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. |
|
| 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) |
|
| 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) |
|
| 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
|
## Vehicle Configuration
|
||||||
|
|
||||||
|
@ -85,13 +85,13 @@ The Polling Interval and Online Timeout can be adjusted.
|
||||||
| chargingRemainingTime | Number:Time | Time remaining till charged |
|
| chargingRemainingTime | Number:Time | Time remaining till charged |
|
||||||
| chargingNextDelayedTime | Number:Time | Time till the next charging starts |
|
| 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
|
## Full Example
|
||||||
|
|
||||||
### Things file
|
### Things file
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge groupepsa:bridge:opel "Auto Interface" [
|
Bridge groupepsa:bridge:opel "Auto Interface" [
|
||||||
pollingInterval=60,
|
pollingInterval=60,
|
||||||
userName="anonymous@anonymous.email",
|
userName="anonymous@anonymous.email",
|
||||||
|
@ -111,7 +111,7 @@ Bridge groupepsa:bridge:opel "Auto Interface" [
|
||||||
|
|
||||||
### Items file
|
### Items file
|
||||||
|
|
||||||
```
|
```java
|
||||||
Group Auto
|
Group Auto
|
||||||
|
|
||||||
Number:ElectricCurrent Auto_Aux_Current "Auxillliary Battery Current [%.1f %unit%]" (Auto) ["Measurement","Current"] {channel="groupepsa:vehicle:opel:zafira:battery#current"}
|
Number:ElectricCurrent Auto_Aux_Current "Auxillliary Battery Current [%.1f %unit%]" (Auto) ["Measurement","Current"] {channel="groupepsa:vehicle:opel:zafira:battery#current"}
|
||||||
|
|
|
@ -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:
|
Guntamatic Heating Systems supported as Thing Types:
|
||||||
|
|
||||||
| Name | Thing Type ID | Heating System Type | Binding Development Status |
|
| Name | Thing Type ID | Heating System Type | Binding Development Status |
|
||||||
|---------------|---------------|----------------------|--------------------------------------------------|
|
| --------- | ------------- | -------------------- | ------------------------------------------------ |
|
||||||
| Biostar | `biostar` | Pellets | tested via 15kW, firmware 3.2d, German & English |
|
| Biostar | `biostar` | Pellets | tested via 15kW, firmware 3.2d, German & English |
|
||||||
| Biosmart | `biosmart` | Logs | tested via 22kW, firmware 3.2f, German |
|
| Biosmart | `biosmart` | Logs | tested via 22kW, firmware 3.2f, German |
|
||||||
| Powerchip | `powerchip` | WoodChips | tested via 100kW, firmware 3.2d, French |
|
| Powerchip | `powerchip` | WoodChips | tested via 100kW, firmware 3.2d, French |
|
||||||
| Powercorn | `powercorn` | EnergyGrain | untested |
|
| Powercorn | `powercorn` | EnergyGrain | untested |
|
||||||
| Biocom | `biocom` | Pellets | untested |
|
| Biocom | `biocom` | Pellets | untested |
|
||||||
| Pro | `pro` | Pellets or WoodChips | untested |
|
| Pro | `pro` | Pellets or WoodChips | untested |
|
||||||
| Therm | `therm` | Pellets | untested |
|
| Therm | `therm` | Pellets | untested |
|
||||||
| Generic | `generic` | - | use, if none from above |
|
| Generic | `generic` | - | use, if none from above |
|
||||||
|
|
||||||
### Thing Configuration
|
### Thing Configuration
|
||||||
|
|
||||||
| Parameter | Description | Default |
|
| Parameter | Description | Default |
|
||||||
|--------------------|-----------------------------------------------------------------------------|-----------------|
|
| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- |
|
||||||
| `hostname` | Hostname or IP address of the Guntamatic Heating System | |
|
| `hostname` | Hostname or IP address of the Guntamatic Heating System | |
|
||||||
| `key` | Optional, but required to read protected parameters and to control the Guntamatic Heating System.<br/>The key needs to be requested from Guntamatic support, e.g. via https://www.guntamatic.com/en/contact/. | |
|
| `key` | Optional, but required to read protected parameters and to control the Guntamatic Heating System.<br/>The key needs to be requested from Guntamatic support, e.g. via <https://www.guntamatic.com/en/contact/>. | |
|
||||||
| `refreshInterval` | Interval the Guntamatic Heating System is polled in seconds | `60` |
|
| `refreshInterval` | Interval the Guntamatic Heating System is polled in seconds | `60` |
|
||||||
| `encoding` | Code page used by the Guntamatic Heating System | `windows-1252` |
|
| `encoding` | Code page used by the Guntamatic Heating System | `windows-1252` |
|
||||||
|
|
||||||
### Properties
|
### Properties
|
||||||
|
|
||||||
| Property | Description | Supported |
|
| Property | Description | Supported |
|
||||||
|---------------------|---------------------------------------------------------------|---------------------------------------------------|
|
| ----------------- | --------------------------------------------------- | ------------------------------------------------- |
|
||||||
| `extraWwHeat` | Parameter used by `controlExtraWwHeat` channels | all |
|
| `extraWwHeat` | Parameter used by `controlExtraWwHeat` channels | all |
|
||||||
| `boilerApproval` | Parameter used by `controlBoilerApproval` channel | Biostar, Powerchip, Powercorn, Biocom, Pro, Therm |
|
| `boilerApproval` | Parameter used by `controlBoilerApproval` channel | Biostar, Powerchip, Powercorn, Biocom, Pro, Therm |
|
||||||
| `heatCircProgram` | Parameter used by `controlHeatCircProgram` channels | all |
|
| `heatCircProgram` | Parameter used by `controlHeatCircProgram` channels | all |
|
||||||
| `program` | Parameter used by `controlProgram` channel | all |
|
| `program` | Parameter used by `controlProgram` channel | all |
|
||||||
| `wwHeat` | Parameter used by `controlWwHeat` channels | all |
|
| `wwHeat` | Parameter used by `controlWwHeat` channels | all |
|
||||||
|
|
||||||
## Channels
|
## Channels
|
||||||
|
|
||||||
|
@ -47,25 +47,25 @@ Guntamatic Heating Systems supported as Thing Types:
|
||||||
|
|
||||||
The Guntamatic Heating System can be controlled using the following channels:
|
The Guntamatic Heating System can be controlled using the following channels:
|
||||||
|
|
||||||
| Channel | Description | Type | Unit | Security Access Level | ReadOnly | Advanced |
|
| Channel | Description | Type | Unit | Security Access Level | ReadOnly | Advanced |
|
||||||
|-----------------------|---------------------------------------------------------------------------|-------|:---------:|:-------------------------:|:--------:|:--------:|
|
| ------------------------- | ------------------------------------------------------------------------------- | -------- | :--: | :-------------------: | :------: | :------: |
|
||||||
| `controlBoilerApproval` | Set Boiler Approval (`AUTO`, `OFF`, `ON`) | `String` | | 🔐 W1 | R/W | true |
|
| `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 |
|
| `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 |
|
| `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 |
|
| `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 |
|
| `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 |
|
| `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 |
|
| `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 |
|
| `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 |
|
| `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 |
|
| `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 |
|
| `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 |
|
| `controlWwHeat0` | Trigger Warm Water Circle 0 (`RECHARGE`) | `String` | | 🔐 W1 | R/W | true |
|
||||||
| `controlWwHeat1` | Trigger Warm Water Circle 1 (`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 |
|
| `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 |
|
| `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 |
|
| `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 |
|
| `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)
|
- <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:
|
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 |
|
| Channel | Description | Type | Unit | Security Access Level | ReadOnly | Advanced |
|
||||||
|-----------------------|-----------------------------------------------------------|-------|:---------:|:-------------------------:|:--------:|:--------:|
|
| -------------------- | ---------------------- | ---------------------- | :--: | :-------------------: | :------: | :------: |
|
||||||
| `running` | Running | `String` | | 🔓 W0 | R/O | false |
|
| `running` | Running | `String` | | 🔓 W0 | R/O | false |
|
||||||
| `outsideTemp` | Outside Temp. | `Number:Temperature` | `°C` | 🔓 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 |
|
| `blrTargetTemp` | Blr.Target Temp | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
|
||||||
| `boilerTemperature` | Boiler Temperature | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
|
| `boilerTemperature` | Boiler Temperature | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
|
||||||
| `flueGasUtilisation` | Flue gas utilisation | `Number:Dimensionless` | `%` | 🔐 W1 | R/O | false |
|
| `flueGasUtilisation` | Flue gas utilisation | `Number:Dimensionless` | `%` | 🔐 W1 | R/O | false |
|
||||||
| `output` | Output | `Number:Dimensionless` | `%` | 🔓 W0 | R/O | false |
|
| `output` | Output | `Number:Dimensionless` | `%` | 🔓 W0 | R/O | false |
|
||||||
| `returnTemp` | Return temp | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
|
| `returnTemp` | Return temp | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
|
||||||
| `co2Target` | CO2 Target | `Number:Dimensionless` | `%` | 🔐 W1 | R/O | false |
|
| `co2Target` | CO2 Target | `Number:Dimensionless` | `%` | 🔐 W1 | R/O | false |
|
||||||
| `co2Content` | CO2 Content | `Number:Dimensionless` | `%` | 🔓 W0 | R/O | false |
|
| `co2Content` | CO2 Content | `Number:Dimensionless` | `%` | 🔓 W0 | R/O | false |
|
||||||
| `returnTempTarget` | Return temp target | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
|
| `returnTempTarget` | Return temp target | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
|
||||||
| `statusCode` | Status code | `Number` | | 🔐 W1 | R/O | false |
|
| `statusCode` | Status code | `Number` | | 🔐 W1 | R/O | false |
|
||||||
| `efficiency` | Efficiency | `Number:Dimensionless` | `%` | 🔐 W1 | R/O | false |
|
| `efficiency` | Efficiency | `Number:Dimensionless` | `%` | 🔐 W1 | R/O | false |
|
||||||
| `extractorSystem` | Extractor System | `Number:Dimensionless` | `%` | 🔓 W0 | R/O | false |
|
| `extractorSystem` | Extractor System | `Number:Dimensionless` | `%` | 🔓 W0 | R/O | false |
|
||||||
| `feedTurbine` | Feed Turbine | `String` | | 🔐 W1 | R/O | false |
|
| `feedTurbine` | Feed Turbine | `String` | | 🔐 W1 | R/O | false |
|
||||||
| `dischargeMotor` | Discharge motor | `Number:Dimensionless` | `%` | 🔓 W0 | R/O | false |
|
| `dischargeMotor` | Discharge motor | `Number:Dimensionless` | `%` | 🔓 W0 | R/O | false |
|
||||||
| `g1Target` | G1 Target | `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 |
|
| `bufferTop` | Buffer Top | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
|
||||||
| `bufferMid` | Buffer Mid | `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 |
|
| `bufferBtm` | Buffer Btm | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
|
||||||
| `pumpHp0` | Pump HP0 | `Switch` | | 🔓 W0 | R/O | false |
|
| `pumpHp0` | Pump HP0 | `Switch` | | 🔓 W0 | R/O | false |
|
||||||
| `dhw0` | DHW 0 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
|
| `dhw0` | DHW 0 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
|
||||||
| `bDhw0` | B DHW 0 | `Switch` | | 🔓 W0 | R/O | false |
|
| `bDhw0` | B DHW 0 | `Switch` | | 🔓 W0 | R/O | false |
|
||||||
| `dhw1` | DHW 1 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
|
| `dhw1` | DHW 1 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
|
||||||
| `bDhw1` | B DHW 1 | `Switch` | | 🔓 W0 | R/O | false |
|
| `bDhw1` | B DHW 1 | `Switch` | | 🔓 W0 | R/O | false |
|
||||||
| `dhw2` | DHW 2 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
|
| `dhw2` | DHW 2 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
|
||||||
| `bDhw2` | B DHW 2 | `Switch` | | 🔓 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 |
|
| `roomTempHc0` | Room Temp:HC 0 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
|
||||||
| `heatCirc0` | Heat Circ. 0 | `Switch` | | 🔓 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 |
|
| `roomTempHc1` | Room Temp:HC 1 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
|
||||||
| `flowTarget1` | Flow Target 1 | `Number:Temperature` | `°C` | 🔐 W1 | 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 |
|
| `flowIs1` | Flow is 1 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
|
||||||
| `mixer1` | Mixer 1 | `String` | | 🔐 W1 | R/O | false |
|
| `mixer1` | Mixer 1 | `String` | | 🔐 W1 | R/O | false |
|
||||||
| `heatCirc1` | Heat Circ. 1 | `Switch` | | 🔐 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 |
|
| `roomTempHc2` | Room Temp:HC 2 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
|
||||||
| `flowTarget2` | Flow Target 2 | `Number:Temperature` | `°C` | 🔐 W1 | 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 |
|
| `flowIs2` | Flow is 2 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
|
||||||
| `mixer2` | Mixer 2 | `String` | | 🔐 W1 | R/O | false |
|
| `mixer2` | Mixer 2 | `String` | | 🔐 W1 | R/O | false |
|
||||||
| `heatCirc2` | Heat Circ. 2 | `Switch` | | 🔓 W0 | R/O | false |
|
| `heatCirc2` | Heat Circ. 2 | `Switch` | | 🔓 W0 | R/O | false |
|
||||||
| `roomTempHc3` | Room Temp:HC 3 | `Number:Temperature` | `°C` | 🔓 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 |
|
| `heatCirc3` | Heat Circ. 3 | `Switch` | | 🔓 W0 | R/O | false |
|
||||||
| `roomTempHc4` | Room Temp:HC 4 | `Number:Temperature` | `°C` | 🔓 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 |
|
| `flowTarget4` | Flow Target 4 | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
|
||||||
| `flowIs4` | Flow is 4 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
|
| `flowIs4` | Flow is 4 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
|
||||||
| `mixer4` | Mixer 4 | `String` | | 🔐 W1 | R/O | false |
|
| `mixer4` | Mixer 4 | `String` | | 🔐 W1 | R/O | false |
|
||||||
| `heatCirc4` | Heat Circ. 4 | `Switch` | | 🔓 W0 | R/O | false |
|
| `heatCirc4` | Heat Circ. 4 | `Switch` | | 🔓 W0 | R/O | false |
|
||||||
| `roomTempHc5` | Room Temp:HC 5 | `Number:Temperature` | `°C` | 🔓 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 |
|
| `flowTarget5` | Flow Target 5 | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
|
||||||
| `flowIs5` | Flow is 5 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
|
| `flowIs5` | Flow is 5 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
|
||||||
| `mixer5` | Mixer 5 | `String` | | 🔐 W1 | R/O | false |
|
| `mixer5` | Mixer 5 | `String` | | 🔐 W1 | R/O | false |
|
||||||
| `heatCirc5` | Heat Circ. 5 | `Switch` | | 🔓 W0 | R/O | false |
|
| `heatCirc5` | Heat Circ. 5 | `Switch` | | 🔓 W0 | R/O | false |
|
||||||
| `roomTempHc6` | Room Temp:HC 6 | `Number:Temperature` | `°C` | 🔓 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 |
|
| `heatCirc6` | Heat Circ. 6 | `Switch` | | 🔓 W0 | R/O | false |
|
||||||
| `roomTempHc7` | Room Temp:HC 7 | `Number:Temperature` | `°C` | 🔓 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 |
|
| `flowTarget7` | Flow Target 7 | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
|
||||||
| `flowIs7` | Flow is 7 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
|
| `flowIs7` | Flow is 7 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
|
||||||
| `mixer7` | Mixer 7 | `String` | | 🔐 W1 | R/O | false |
|
| `mixer7` | Mixer 7 | `String` | | 🔐 W1 | R/O | false |
|
||||||
| `heatCirc7` | Heat Circ. 7 | `Switch` | | 🔓 W0 | R/O | false |
|
| `heatCirc7` | Heat Circ. 7 | `Switch` | | 🔓 W0 | R/O | false |
|
||||||
| `roomTempHc8` | Room Temp:HC 8 | `Number:Temperature` | `°C` | 🔓 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 |
|
| `flowTarget8` | Flow Target 8 | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
|
||||||
| `flowIs8` | Flow is 8 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
|
| `flowIs8` | Flow is 8 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
|
||||||
| `mixer8` | Mixer 8 | `String` | | 🔐 W1 | R/O | false |
|
| `mixer8` | Mixer 8 | `String` | | 🔐 W1 | R/O | false |
|
||||||
| `heatCirc8` | Heat Circ. 8 | `Switch` | | 🔓 W0 | R/O | false |
|
| `heatCirc8` | Heat Circ. 8 | `Switch` | | 🔓 W0 | R/O | false |
|
||||||
| `fuelLevel` | Fuel Level | `String` | | 🔐 W1 | R/O | false |
|
| `fuelLevel` | Fuel Level | `String` | | 🔐 W1 | R/O | false |
|
||||||
| `stb` | STB | `String` | | 🔐 W1 | R/O | false |
|
| `stb` | STB | `String` | | 🔐 W1 | R/O | false |
|
||||||
| `tks` | TKS | `String` | | 🔐 W1 | R/O | false |
|
| `tks` | TKS | `String` | | 🔐 W1 | R/O | false |
|
||||||
| `boilerApproval` | Boiler approval | `Switch` | | 🔐 W1 | R/O | false |
|
| `boilerApproval` | Boiler approval | `Switch` | | 🔐 W1 | R/O | false |
|
||||||
| `programme` | Programme | `String` | | 🔓 W0 | R/O | false |
|
| `programme` | Programme | `String` | | 🔓 W0 | R/O | false |
|
||||||
| `programHc0` | Program HC0 | `String` | | 🔓 W0 | R/O | false |
|
| `programHc0` | Program HC0 | `String` | | 🔓 W0 | R/O | false |
|
||||||
| `programHc1` | Program HC1 | `String` | | 🔓 W0 | R/O | false |
|
| `programHc1` | Program HC1 | `String` | | 🔓 W0 | R/O | false |
|
||||||
| `programHc2` | Program HC2 | `String` | | 🔓 W0 | R/O | false |
|
| `programHc2` | Program HC2 | `String` | | 🔓 W0 | R/O | false |
|
||||||
| `programHc3` | Program HC3 | `String` | | 🔓 W0 | R/O | false |
|
| `programHc3` | Program HC3 | `String` | | 🔓 W0 | R/O | false |
|
||||||
| `programHc4` | Program HC4 | `String` | | 🔓 W0 | R/O | false |
|
| `programHc4` | Program HC4 | `String` | | 🔓 W0 | R/O | false |
|
||||||
| `programHc5` | Program HC5 | `String` | | 🔓 W0 | R/O | false |
|
| `programHc5` | Program HC5 | `String` | | 🔓 W0 | R/O | false |
|
||||||
| `programHc6` | Program HC6 | `String` | | 🔓 W0 | R/O | false |
|
| `programHc6` | Program HC6 | `String` | | 🔓 W0 | R/O | false |
|
||||||
| `programHc7` | Program HC7 | `String` | | 🔓 W0 | R/O | false |
|
| `programHc7` | Program HC7 | `String` | | 🔓 W0 | R/O | false |
|
||||||
| `programHc8` | Program HC8 | `String` | | 🔓 W0 | R/O | false |
|
| `programHc8` | Program HC8 | `String` | | 🔓 W0 | R/O | false |
|
||||||
| `interuption0` | Interuption 0 | `String` | | 🔓 W0 | R/O | false |
|
| `interuption0` | Interuption 0 | `String` | | 🔓 W0 | R/O | false |
|
||||||
| `interuption1` | Interuption 1 | `String` | | 🔓 W0 | R/O | false |
|
| `interuption1` | Interuption 1 | `String` | | 🔓 W0 | R/O | false |
|
||||||
| `serial` | Serial | `Number` | | 🔓 W0 | R/O | false |
|
| `serial` | Serial | `Number` | | 🔓 W0 | R/O | false |
|
||||||
| `version` | Version | `String` | | 🔓 W0 | R/O | false |
|
| `version` | Version | `String` | | 🔓 W0 | R/O | false |
|
||||||
| `runningTime` | Running Time | `Number:Time` | `h` | 🔓 W0 | R/O | false |
|
| `runningTime` | Running Time | `Number:Time` | `h` | 🔓 W0 | R/O | false |
|
||||||
| `serviceHrs` | Service Hrs | `Number:Time` | `d` | 🔓 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 |
|
| `emptyAshIn` | Empty ash in | `Number:Time` | `h` | 🔓 W0 | R/O | false |
|
||||||
| `flowIs0` | Flow is 0 | `Number:Temperature` | `°C` | 🔓 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 |
|
| `flowIs3` | Flow is 3 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
|
||||||
| `flowIs6` | Flow is 6 | `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 |
|
| `fuelCounter` | Fuel counter | `Number:Volume` | `m³` | 🔐 W1 | R/O | false |
|
||||||
| `bufferLoad` | Buffer load. | `Number:Dimensionless` | `%` | 🔓 W0 | R/O | false |
|
| `bufferLoad` | Buffer load. | `Number:Dimensionless` | `%` | 🔓 W0 | R/O | false |
|
||||||
| `bufferTop0` | Buffer Top 0 | `Number:Temperature` | `°C` | 🔐 W1 | 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 |
|
| `bufferBtm0` | Buffer Btm 0 | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
|
||||||
| `bufferTop1` | Buffer Top 1 | `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 |
|
| `bufferBtm1` | Buffer Btm 1 | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
|
||||||
| `bufferTop2` | Buffer Top 2 | `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 |
|
| `bufferBtm2` | Buffer Btm 2 | `Number:Temperature` | `°C` | 🔐 W1 | R/O | false |
|
||||||
| `bExtraWw0` | B extra-WW. 0 | `Switch` | | 🔐 W1 | R/O | false |
|
| `bExtraWw0` | B extra-WW. 0 | `Switch` | | 🔐 W1 | R/O | false |
|
||||||
| `bExtraWw1` | B extra-WW. 1 | `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 |
|
| `bExtraWw2` | B extra-WW. 2 | `Switch` | | 🔐 W1 | R/O | false |
|
||||||
| `auxiliaryPump0` | Auxiliary pump 0 | `Switch` | | 🔐 W1 | R/O | false |
|
| `auxiliaryPump0` | Auxiliary pump 0 | `Switch` | | 🔐 W1 | R/O | false |
|
||||||
| `auxiliaryPump1` | Auxiliary pump 1 | `Switch` | | 🔐 W1 | R/O | false |
|
| `auxiliaryPump1` | Auxiliary pump 1 | `Switch` | | 🔐 W1 | R/O | false |
|
||||||
| `auxiliaryPump2` | Auxiliary pump 2 | `Switch` | | 🔐 W1 | R/O | false |
|
| `auxiliaryPump2` | Auxiliary pump 2 | `Switch` | | 🔐 W1 | R/O | false |
|
||||||
| `boilersConditionNo` | Boiler´s condition no. | `String` | | 🔐 W1 | R/O | false |
|
| `boilersConditionNo` | Boiler´s condition no. | `String` | | 🔐 W1 | R/O | false |
|
||||||
| `bufferT5` | Buffer T5 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
|
| `bufferT5` | Buffer T5 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
|
||||||
| `bufferT6` | Buffer T6 | `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 |
|
| `bufferT7` | Buffer T7 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
|
||||||
| `extraWw0` | Extra-WW. 0 | `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 |
|
| `extraWw1` | Extra-WW. 1 | `Number:Temperature` | `°C` | 🔓 W0 | R/O | false |
|
||||||
| `extraWw2` | Extra-WW. 2 | `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 |
|
| `grate` | Grate | `Number:Dimensionless` | `%` | 🔓 W0 | R/O | false |
|
||||||
|
|
||||||
#### Security Access Levels
|
#### Security Access Levels
|
||||||
|
|
||||||
|
@ -201,145 +201,145 @@ Example list of Channels using a Guntamatic Biostar 15kW Pellets Heating System
|
||||||
|
|
||||||
## Full Example
|
## Full Example
|
||||||
|
|
||||||
**Thing File**
|
### Thing File
|
||||||
|
|
||||||
```java
|
```java
|
||||||
Thing guntamatic:biostar:mybiostar "Guntamatic Biostar" [ hostname="192.168.1.100", key="0123456789ABCDEF0123456789ABCDEF0123", refreshInterval=60, encoding="windows-1252" ]
|
Thing guntamatic:biostar:mybiostar "Guntamatic Biostar" [ hostname="192.168.1.100", key="0123456789ABCDEF0123456789ABCDEF0123", refreshInterval=60, encoding="windows-1252" ]
|
||||||
```
|
```
|
||||||
|
|
||||||
**Item File**
|
### Item File
|
||||||
|
|
||||||
```java
|
```java
|
||||||
String Biostar_ControlBoilerApproval "Set Boiler Approval" { channel="guntamatic:biostar:mybiostar:controlBoilerApproval" }
|
String Biostar_ControlBoilerApproval "Set Boiler Approval" { channel="guntamatic:biostar:mybiostar:controlBoilerApproval" }
|
||||||
String Biostar_ControlProgram "Set Program" { channel="guntamatic:biostar:mybiostar:controlProgram" }
|
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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_ControlExtraWwHeat2 "Trigger Extra Warm Water Circle 2" { channel="guntamatic:biostar:mybiostar:controlExtraWwHeat2" }
|
||||||
String Biostar_Running "Running" { channel="guntamatic:biostar:mybiostar:running" }
|
String Biostar_Running "Running" { channel="guntamatic:biostar:mybiostar:running" }
|
||||||
Number:Temperature Biostar_OutsideTemp "Outside Temp." { channel="guntamatic:biostar:mybiostar:outsideTemp" }
|
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_BlrTargetTemp "Blr.Target Temp" { channel="guntamatic:biostar:mybiostar:blrTargetTemp" }
|
||||||
Number:Temperature Biostar_BoilerTemperature "Boiler Temperature" { channel="guntamatic:biostar:mybiostar:boilerTemperature" }
|
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_FlueGasUtilisation "Flue gas utilisation" { channel="guntamatic:biostar:mybiostar:flueGasUtilisation" }
|
||||||
Number:Dimensionless Biostar_Output "Output" { channel="guntamatic:biostar:mybiostar:output" }
|
Number:Dimensionless Biostar_Output "Output" { channel="guntamatic:biostar:mybiostar:output" }
|
||||||
Number:Temperature Biostar_ReturnTemp "Return temp" { channel="guntamatic:biostar:mybiostar:returnTemp" }
|
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_Co2Target "CO2 Target" { channel="guntamatic:biostar:mybiostar:co2Target" }
|
||||||
Number:Dimensionless Biostar_Co2Content "CO2 Content" { channel="guntamatic:biostar:mybiostar:co2Content" }
|
Number:Dimensionless Biostar_Co2Content "CO2 Content" { channel="guntamatic:biostar:mybiostar:co2Content" }
|
||||||
Number:Temperature Biostar_ReturnTempTarget "Return temp target" { channel="guntamatic:biostar:mybiostar:returnTempTarget" }
|
Number:Temperature Biostar_ReturnTempTarget "Return temp target" { channel="guntamatic:biostar:mybiostar:returnTempTarget" }
|
||||||
Number Biostar_StatusCode "Status code" { channel="guntamatic:biostar:mybiostar:statusCode" }
|
Number Biostar_StatusCode "Status code" { channel="guntamatic:biostar:mybiostar:statusCode" }
|
||||||
Number:Dimensionless Biostar_Efficiency "Efficiency" { channel="guntamatic:biostar:mybiostar:efficiency" }
|
Number:Dimensionless Biostar_Efficiency "Efficiency" { channel="guntamatic:biostar:mybiostar:efficiency" }
|
||||||
Number:Dimensionless Biostar_ExtractorSystem "Extractor System" { channel="guntamatic:biostar:mybiostar:extractorSystem" }
|
Number:Dimensionless Biostar_ExtractorSystem "Extractor System" { channel="guntamatic:biostar:mybiostar:extractorSystem" }
|
||||||
String Biostar_FeedTurbine "Feed Turbine" { channel="guntamatic:biostar:mybiostar:feedTurbine" }
|
String Biostar_FeedTurbine "Feed Turbine" { channel="guntamatic:biostar:mybiostar:feedTurbine" }
|
||||||
Number:Dimensionless Biostar_DischargeMotor "Discharge motor" { channel="guntamatic:biostar:mybiostar:dischargeMotor" }
|
Number:Dimensionless Biostar_DischargeMotor "Discharge motor" { channel="guntamatic:biostar:mybiostar:dischargeMotor" }
|
||||||
Number:Dimensionless Biostar_G1Target "G1 Target" { channel="guntamatic:biostar:mybiostar:g1Target" }
|
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_BufferTop "Buffer Top" { channel="guntamatic:biostar:mybiostar:bufferTop" }
|
||||||
Number:Temperature Biostar_BufferMid "Buffer Mid" { channel="guntamatic:biostar:mybiostar:bufferMid" }
|
Number:Temperature Biostar_BufferMid "Buffer Mid" { channel="guntamatic:biostar:mybiostar:bufferMid" }
|
||||||
Number:Temperature Biostar_BufferBtm "Buffer Btm" { channel="guntamatic:biostar:mybiostar:bufferBtm" }
|
Number:Temperature Biostar_BufferBtm "Buffer Btm" { channel="guntamatic:biostar:mybiostar:bufferBtm" }
|
||||||
Switch Biostar_PumpHp0 "Pump HP0" { channel="guntamatic:biostar:mybiostar:pumpHp0" }
|
Switch Biostar_PumpHp0 "Pump HP0" { channel="guntamatic:biostar:mybiostar:pumpHp0" }
|
||||||
Number:Temperature Biostar_Dhw0 "DHW 0" { channel="guntamatic:biostar:mybiostar:dhw0" }
|
Number:Temperature Biostar_Dhw0 "DHW 0" { channel="guntamatic:biostar:mybiostar:dhw0" }
|
||||||
Switch Biostar_BDhw0 "B DHW 0" { channel="guntamatic:biostar:mybiostar:bDhw0" }
|
Switch Biostar_BDhw0 "B DHW 0" { channel="guntamatic:biostar:mybiostar:bDhw0" }
|
||||||
Number:Temperature Biostar_Dhw1 "DHW 1" { channel="guntamatic:biostar:mybiostar:dhw1" }
|
Number:Temperature Biostar_Dhw1 "DHW 1" { channel="guntamatic:biostar:mybiostar:dhw1" }
|
||||||
Switch Biostar_BDhw1 "B DHW 1" { channel="guntamatic:biostar:mybiostar:bDhw1" }
|
Switch Biostar_BDhw1 "B DHW 1" { channel="guntamatic:biostar:mybiostar:bDhw1" }
|
||||||
Number:Temperature Biostar_Dhw2 "DHW 2" { channel="guntamatic:biostar:mybiostar:dhw2" }
|
Number:Temperature Biostar_Dhw2 "DHW 2" { channel="guntamatic:biostar:mybiostar:dhw2" }
|
||||||
Switch Biostar_BDhw2 "B DHW 2" { channel="guntamatic:biostar:mybiostar:bDhw2" }
|
Switch Biostar_BDhw2 "B DHW 2" { channel="guntamatic:biostar:mybiostar:bDhw2" }
|
||||||
Number:Temperature Biostar_RoomTempHc0 "Room Temp:HC 0" { channel="guntamatic:biostar:mybiostar:roomTempHc0" }
|
Number:Temperature Biostar_RoomTempHc0 "Room Temp:HC 0" { channel="guntamatic:biostar:mybiostar:roomTempHc0" }
|
||||||
Switch Biostar_HeatCirc0 "Heat Circ. 0" { channel="guntamatic:biostar:mybiostar:heatCirc0" }
|
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_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_FlowTarget1 "Flow Target 1" { channel="guntamatic:biostar:mybiostar:flowTarget1" }
|
||||||
Number:Temperature Biostar_FlowIs1 "Flow is 1" { channel="guntamatic:biostar:mybiostar:flowIs1" }
|
Number:Temperature Biostar_FlowIs1 "Flow is 1" { channel="guntamatic:biostar:mybiostar:flowIs1" }
|
||||||
String Biostar_Mixer1 "Mixer 1" { channel="guntamatic:biostar:mybiostar:mixer1" }
|
String Biostar_Mixer1 "Mixer 1" { channel="guntamatic:biostar:mybiostar:mixer1" }
|
||||||
Switch Biostar_HeatCirc1 "Heat Circ. 1" { channel="guntamatic:biostar:mybiostar:heatCirc1" }
|
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_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_FlowTarget2 "Flow Target 2" { channel="guntamatic:biostar:mybiostar:flowTarget2" }
|
||||||
Number:Temperature Biostar_FlowIs2 "Flow is 2" { channel="guntamatic:biostar:mybiostar:flowIs2" }
|
Number:Temperature Biostar_FlowIs2 "Flow is 2" { channel="guntamatic:biostar:mybiostar:flowIs2" }
|
||||||
String Biostar_Mixer2 "Mixer 2" { channel="guntamatic:biostar:mybiostar:mixer2" }
|
String Biostar_Mixer2 "Mixer 2" { channel="guntamatic:biostar:mybiostar:mixer2" }
|
||||||
Switch Biostar_HeatCirc2 "Heat Circ. 2" { channel="guntamatic:biostar:mybiostar:heatCirc2" }
|
Switch Biostar_HeatCirc2 "Heat Circ. 2" { channel="guntamatic:biostar:mybiostar:heatCirc2" }
|
||||||
Number:Temperature Biostar_RoomTempHc3 "Room Temp:HC 3" { channel="guntamatic:biostar:mybiostar:roomTempHc3" }
|
Number:Temperature Biostar_RoomTempHc3 "Room Temp:HC 3" { channel="guntamatic:biostar:mybiostar:roomTempHc3" }
|
||||||
Switch Biostar_HeatCirc3 "Heat Circ. 3" { channel="guntamatic:biostar:mybiostar:heatCirc3" }
|
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_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_FlowTarget4 "Flow Target 4" { channel="guntamatic:biostar:mybiostar:flowTarget4" }
|
||||||
Number:Temperature Biostar_FlowIs4 "Flow is 4" { channel="guntamatic:biostar:mybiostar:flowIs4" }
|
Number:Temperature Biostar_FlowIs4 "Flow is 4" { channel="guntamatic:biostar:mybiostar:flowIs4" }
|
||||||
String Biostar_Mixer4 "Mixer 4" { channel="guntamatic:biostar:mybiostar:mixer4" }
|
String Biostar_Mixer4 "Mixer 4" { channel="guntamatic:biostar:mybiostar:mixer4" }
|
||||||
Switch Biostar_HeatCirc4 "Heat Circ. 4" { channel="guntamatic:biostar:mybiostar:heatCirc4" }
|
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_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_FlowTarget5 "Flow Target 5" { channel="guntamatic:biostar:mybiostar:flowTarget5" }
|
||||||
Number:Temperature Biostar_FlowIs5 "Flow is 5" { channel="guntamatic:biostar:mybiostar:flowIs5" }
|
Number:Temperature Biostar_FlowIs5 "Flow is 5" { channel="guntamatic:biostar:mybiostar:flowIs5" }
|
||||||
String Biostar_Mixer5 "Mixer 5" { channel="guntamatic:biostar:mybiostar:mixer5" }
|
String Biostar_Mixer5 "Mixer 5" { channel="guntamatic:biostar:mybiostar:mixer5" }
|
||||||
Switch Biostar_HeatCirc5 "Heat Circ. 5" { channel="guntamatic:biostar:mybiostar:heatCirc5" }
|
Switch Biostar_HeatCirc5 "Heat Circ. 5" { channel="guntamatic:biostar:mybiostar:heatCirc5" }
|
||||||
Number:Temperature Biostar_RoomTempHc6 "Room Temp:HC 6" { channel="guntamatic:biostar:mybiostar:roomTempHc6" }
|
Number:Temperature Biostar_RoomTempHc6 "Room Temp:HC 6" { channel="guntamatic:biostar:mybiostar:roomTempHc6" }
|
||||||
Switch Biostar_HeatCirc6 "Heat Circ. 6" { channel="guntamatic:biostar:mybiostar:heatCirc6" }
|
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_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_FlowTarget7 "Flow Target 7" { channel="guntamatic:biostar:mybiostar:flowTarget7" }
|
||||||
Number:Temperature Biostar_FlowIs7 "Flow is 7" { channel="guntamatic:biostar:mybiostar:flowIs7" }
|
Number:Temperature Biostar_FlowIs7 "Flow is 7" { channel="guntamatic:biostar:mybiostar:flowIs7" }
|
||||||
String Biostar_Mixer7 "Mixer 7" { channel="guntamatic:biostar:mybiostar:mixer7" }
|
String Biostar_Mixer7 "Mixer 7" { channel="guntamatic:biostar:mybiostar:mixer7" }
|
||||||
Switch Biostar_HeatCirc7 "Heat Circ. 7" { channel="guntamatic:biostar:mybiostar:heatCirc7" }
|
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_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_FlowTarget8 "Flow Target 8" { channel="guntamatic:biostar:mybiostar:flowTarget8" }
|
||||||
Number:Temperature Biostar_FlowIs8 "Flow is 8" { channel="guntamatic:biostar:mybiostar:flowIs8" }
|
Number:Temperature Biostar_FlowIs8 "Flow is 8" { channel="guntamatic:biostar:mybiostar:flowIs8" }
|
||||||
String Biostar_Mixer8 "Mixer 8" { channel="guntamatic:biostar:mybiostar:mixer8" }
|
String Biostar_Mixer8 "Mixer 8" { channel="guntamatic:biostar:mybiostar:mixer8" }
|
||||||
Switch Biostar_HeatCirc8 "Heat Circ. 8" { channel="guntamatic:biostar:mybiostar:heatCirc8" }
|
Switch Biostar_HeatCirc8 "Heat Circ. 8" { channel="guntamatic:biostar:mybiostar:heatCirc8" }
|
||||||
String Biostar_FuelLevel "Fuel Level" { channel="guntamatic:biostar:mybiostar:fuelLevel" }
|
String Biostar_FuelLevel "Fuel Level" { channel="guntamatic:biostar:mybiostar:fuelLevel" }
|
||||||
String Biostar_Stb "STB" { channel="guntamatic:biostar:mybiostar:stb" }
|
String Biostar_Stb "STB" { channel="guntamatic:biostar:mybiostar:stb" }
|
||||||
String Biostar_Tks "TKS" { channel="guntamatic:biostar:mybiostar:tks" }
|
String Biostar_Tks "TKS" { channel="guntamatic:biostar:mybiostar:tks" }
|
||||||
Switch Biostar_BoilerApproval "Boiler approval" { channel="guntamatic:biostar:mybiostar:boilerApproval" }
|
Switch Biostar_BoilerApproval "Boiler approval" { channel="guntamatic:biostar:mybiostar:boilerApproval" }
|
||||||
String Biostar_Programme "Programme" { channel="guntamatic:biostar:mybiostar:programme" }
|
String Biostar_Programme "Programme" { channel="guntamatic:biostar:mybiostar:programme" }
|
||||||
String Biostar_ProgramHc0 "Program HC0" { channel="guntamatic:biostar:mybiostar:programHc0" }
|
String Biostar_ProgramHc0 "Program HC0" { channel="guntamatic:biostar:mybiostar:programHc0" }
|
||||||
String Biostar_ProgramHc1 "Program HC1" { channel="guntamatic:biostar:mybiostar:programHc1" }
|
String Biostar_ProgramHc1 "Program HC1" { channel="guntamatic:biostar:mybiostar:programHc1" }
|
||||||
String Biostar_ProgramHc2 "Program HC2" { channel="guntamatic:biostar:mybiostar:programHc2" }
|
String Biostar_ProgramHc2 "Program HC2" { channel="guntamatic:biostar:mybiostar:programHc2" }
|
||||||
String Biostar_ProgramHc3 "Program HC3" { channel="guntamatic:biostar:mybiostar:programHc3" }
|
String Biostar_ProgramHc3 "Program HC3" { channel="guntamatic:biostar:mybiostar:programHc3" }
|
||||||
String Biostar_ProgramHc4 "Program HC4" { channel="guntamatic:biostar:mybiostar:programHc4" }
|
String Biostar_ProgramHc4 "Program HC4" { channel="guntamatic:biostar:mybiostar:programHc4" }
|
||||||
String Biostar_ProgramHc5 "Program HC5" { channel="guntamatic:biostar:mybiostar:programHc5" }
|
String Biostar_ProgramHc5 "Program HC5" { channel="guntamatic:biostar:mybiostar:programHc5" }
|
||||||
String Biostar_ProgramHc6 "Program HC6" { channel="guntamatic:biostar:mybiostar:programHc6" }
|
String Biostar_ProgramHc6 "Program HC6" { channel="guntamatic:biostar:mybiostar:programHc6" }
|
||||||
String Biostar_ProgramHc7 "Program HC7" { channel="guntamatic:biostar:mybiostar:programHc7" }
|
String Biostar_ProgramHc7 "Program HC7" { channel="guntamatic:biostar:mybiostar:programHc7" }
|
||||||
String Biostar_ProgramHc8 "Program HC8" { channel="guntamatic:biostar:mybiostar:programHc8" }
|
String Biostar_ProgramHc8 "Program HC8" { channel="guntamatic:biostar:mybiostar:programHc8" }
|
||||||
String Biostar_Interuption0 "Interuption 0" { channel="guntamatic:biostar:mybiostar:interuption0" }
|
String Biostar_Interuption0 "Interuption 0" { channel="guntamatic:biostar:mybiostar:interuption0" }
|
||||||
String Biostar_Interuption1 "Interuption 1" { channel="guntamatic:biostar:mybiostar:interuption1" }
|
String Biostar_Interuption1 "Interuption 1" { channel="guntamatic:biostar:mybiostar:interuption1" }
|
||||||
Number Biostar_Serial "Serial" { channel="guntamatic:biostar:mybiostar:serial" }
|
Number Biostar_Serial "Serial" { channel="guntamatic:biostar:mybiostar:serial" }
|
||||||
String Biostar_Version "Version" { channel="guntamatic:biostar:mybiostar:version" }
|
String Biostar_Version "Version" { channel="guntamatic:biostar:mybiostar:version" }
|
||||||
Number:Time Biostar_RunningTime "Running Time" { channel="guntamatic:biostar:mybiostar:runningTime" }
|
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_ServiceHrs "Service Hrs" { channel="guntamatic:biostar:mybiostar:serviceHrs" }
|
||||||
Number:Time Biostar_EmptyAshIn "Empty ash in" { channel="guntamatic:biostar:mybiostar:emptyAshIn" }
|
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_FlowIs0 "Flow is 0" { channel="guntamatic:biostar:mybiostar:flowIs0" }
|
||||||
Number:Temperature Biostar_FlowIs3 "Flow is 3" { channel="guntamatic:biostar:mybiostar:flowIs3" }
|
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:Temperature Biostar_FlowIs6 "Flow is 6" { channel="guntamatic:biostar:mybiostar:flowIs6" }
|
||||||
Number:Volume Biostar_FuelCounter "Fuel counter" { channel="guntamatic:biostar:mybiostar:fuelCounter" }
|
Number:Volume Biostar_FuelCounter "Fuel counter" { channel="guntamatic:biostar:mybiostar:fuelCounter" }
|
||||||
Number:Dimensionless Biostar_BufferLoad "Buffer load." { channel="guntamatic:biostar:mybiostar:bufferLoad" }
|
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_BufferTop0 "Buffer Top 0" { channel="guntamatic:biostar:mybiostar:bufferTop0" }
|
||||||
Number:Temperature Biostar_BufferBtm0 "Buffer Btm 0" { channel="guntamatic:biostar:mybiostar:bufferBtm0" }
|
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_BufferTop1 "Buffer Top 1" { channel="guntamatic:biostar:mybiostar:bufferTop1" }
|
||||||
Number:Temperature Biostar_BufferBtm1 "Buffer Btm 1" { channel="guntamatic:biostar:mybiostar:bufferBtm1" }
|
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_BufferTop2 "Buffer Top 2" { channel="guntamatic:biostar:mybiostar:bufferTop2" }
|
||||||
Number:Temperature Biostar_BufferBtm2 "Buffer Btm 2" { channel="guntamatic:biostar:mybiostar:bufferBtm2" }
|
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_BExtraWw0 "B extra-WW. 0" { channel="guntamatic:biostar:mybiostar:bExtraWw0" }
|
||||||
Switch Biostar_BExtraWw1 "B extra-WW. 1" { channel="guntamatic:biostar:mybiostar:bExtraWw1" }
|
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_BExtraWw2 "B extra-WW. 2" { channel="guntamatic:biostar:mybiostar:bExtraWw2" }
|
||||||
Switch Biostar_AuxiliaryPump0 "Auxiliary pump 0" { channel="guntamatic:biostar:mybiostar:auxiliaryPump0" }
|
Switch Biostar_AuxiliaryPump0 "Auxiliary pump 0" { channel="guntamatic:biostar:mybiostar:auxiliaryPump0" }
|
||||||
Switch Biostar_AuxiliaryPump1 "Auxiliary pump 1" { channel="guntamatic:biostar:mybiostar:auxiliaryPump1" }
|
Switch Biostar_AuxiliaryPump1 "Auxiliary pump 1" { channel="guntamatic:biostar:mybiostar:auxiliaryPump1" }
|
||||||
Switch Biostar_AuxiliaryPump2 "Auxiliary pump 2" { channel="guntamatic:biostar:mybiostar:auxiliaryPump2" }
|
Switch Biostar_AuxiliaryPump2 "Auxiliary pump 2" { channel="guntamatic:biostar:mybiostar:auxiliaryPump2" }
|
||||||
String Biostar_BoilersConditionNo "Boiler´s condition no." { channel="guntamatic:biostar:mybiostar:boilersConditionNo" }
|
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_BufferT5 "Buffer T5" { channel="guntamatic:biostar:mybiostar:bufferT5" }
|
||||||
Number:Temperature Biostar_BufferT6 "Buffer T6" { channel="guntamatic:biostar:mybiostar:bufferT6" }
|
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_BufferT7 "Buffer T7" { channel="guntamatic:biostar:mybiostar:bufferT7" }
|
||||||
Number:Temperature Biostar_ExtraWw0 "Extra-WW. 0" { channel="guntamatic:biostar:mybiostar:extraWw0" }
|
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_ExtraWw1 "Extra-WW. 1" { channel="guntamatic:biostar:mybiostar:extraWw1" }
|
||||||
Number:Temperature Biostar_ExtraWw2 "Extra-WW. 2" { channel="guntamatic:biostar:mybiostar:extraWw2" }
|
Number:Temperature Biostar_ExtraWw2 "Extra-WW. 2" { channel="guntamatic:biostar:mybiostar:extraWw2" }
|
||||||
Number:Dimensionless Biostar_Grate "Grate" { channel="guntamatic:biostar:mybiostar:grate" }
|
Number:Dimensionless Biostar_Grate "Grate" { channel="guntamatic:biostar:mybiostar:grate" }
|
||||||
```
|
```
|
||||||
|
|
||||||
**Rule**
|
### Rule
|
||||||
|
|
||||||
```javascript
|
```java
|
||||||
rule "Example Guntamatic Rule"
|
rule "Example Guntamatic Rule"
|
||||||
when
|
when
|
||||||
Item Season changed
|
Item Season changed
|
||||||
|
@ -365,4 +365,4 @@ Please provide feedback (👍 as well as 👎) when using the Binding for other
|
||||||
|
|
||||||
Forum topic for feedback:
|
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")
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# Haas Sohn Pellet Stove Binding
|
# Haas Sohn Pellet Stove Binding
|
||||||
|
|
||||||
The binding for Haassohnpelletstove communicates with a Haas and Sohn Pelletstove through the optional
|
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
|
## 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|
|
| haassohnpelletstove | Control of a Haas & Sohn Pellet Stove| oven|
|
||||||
|
|
||||||
|
|
||||||
## Thing Configuration
|
## 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.
|
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
|
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"]
|
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:
|
The following channels are yet supported:
|
||||||
|
|
||||||
|
|
||||||
| Channel | Type | Access| Description|
|
| Channel | Type | Access| Description|
|
||||||
|---------|-------|-------|------------|
|
|---------|-------|-------|------------|
|
||||||
| power| Switch | read/write|Turn the stove on/off|
|
| power| Switch | read/write|Turn the stove on/off|
|
||||||
|
@ -41,7 +39,7 @@ The following channels are yet supported:
|
||||||
|
|
||||||
demo.items:
|
demo.items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Number:Temperature isTemp { channel="oven:channelIsTemp" }
|
Number:Temperature isTemp { channel="oven:channelIsTemp" }
|
||||||
Number:Temperature spTemp { channel="oven:channelSpTemp" }
|
Number:Temperature spTemp { channel="oven:channelSpTemp" }
|
||||||
String mode { channel="oven:channelMode" }
|
String mode { channel="oven:channelMode" }
|
||||||
|
@ -50,11 +48,11 @@ Switch power { channel="oven:power" }
|
||||||
|
|
||||||
## Google Assistant configuration
|
## 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
|
googleassistantdemo.items
|
||||||
|
|
||||||
```
|
```java
|
||||||
Group g_FeuerThermostat "FeuerThermostat" {ga="Thermostat" }
|
Group g_FeuerThermostat "FeuerThermostat" {ga="Thermostat" }
|
||||||
Number StatusFeuer "Status Feuer" (g_FeuerThermostat) { ga="thermostatMode" }
|
Number StatusFeuer "Status Feuer" (g_FeuerThermostat) { ga="thermostatMode" }
|
||||||
Number ZieltemperaturFeuer "ZieltemperaturFeuer" (g_FeuerThermostat) {ga="thermostatTemperatureSetpoint"}
|
Number ZieltemperaturFeuer "ZieltemperaturFeuer" (g_FeuerThermostat) {ga="thermostatTemperatureSetpoint"}
|
||||||
|
|
|
@ -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.
|
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.
|
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
|
```java
|
||||||
String HarmonyHubGreatButton { channel="harmonyhub:hub:GreatRoom:buttonPress" }
|
String HarmonyHubGreatButton { channel="harmonyhub:hub:GreatRoom:buttonPress" }
|
||||||
|
@ -142,50 +141,52 @@ sitemap demo label="Main Menu" {
|
||||||
|
|
||||||
## ButtonPress values
|
## 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
|
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:
|
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
|
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>
|
- 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
|
1. 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
|
1. 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`
|
1. Click `GET` next to `/channel-types`
|
||||||
5. Click `Try it out`
|
1. Click `Try it out`
|
||||||
6. Click `Execute`
|
1. Click `Execute`
|
||||||
7. Search the `Response Body` "harmonyhub:device" and find your device in the JSON output
|
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`
|
The valid commands (read: values) will be listed with the device. For example, the response body might show that for `harmonyhub:device:HarmonyHub:lasko_fan` the valid commands are `PowerToggle, Speed, Timer`
|
||||||
|
|
||||||
{
|
```json
|
||||||
"parameters": [],
|
{
|
||||||
"parameterGroups": [],
|
"parameters": [],
|
||||||
"description": "Send a button press to device Harmony Device",
|
"parameterGroups": [],
|
||||||
"label": "Send Button Press",
|
"description": "Send a button press to device Harmony Device",
|
||||||
"itemType": "String",
|
"label": "Send Button Press",
|
||||||
"kind": "STATE",
|
"itemType": "String",
|
||||||
"stateDescription": {
|
"kind": "STATE",
|
||||||
"readOnly": false,
|
"stateDescription": {
|
||||||
"options": [
|
"readOnly": false,
|
||||||
{
|
"options": [
|
||||||
"value": "PowerToggle",
|
{
|
||||||
"label": "Power Toggle"
|
"value": "PowerToggle",
|
||||||
},
|
"label": "Power Toggle"
|
||||||
{
|
},
|
||||||
"value": "Speed",
|
{
|
||||||
"label": "Speed"
|
"value": "Speed",
|
||||||
},
|
"label": "Speed"
|
||||||
{
|
},
|
||||||
"value": "Timer",
|
{
|
||||||
"label": "Timer"
|
"value": "Timer",
|
||||||
}
|
"label": "Timer"
|
||||||
]
|
|
||||||
},
|
|
||||||
"tags": [],
|
|
||||||
"UID": "harmonyhub:device:GreatRoom:lasko_fan:buttonPress",
|
|
||||||
"advanced": false
|
|
||||||
}
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"tags": [],
|
||||||
|
"UID": "harmonyhub:device:GreatRoom:lasko_fan:buttonPress",
|
||||||
|
"advanced": false
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
|
@ -31,7 +31,7 @@ Hayward OmniLogic Connection Parameters:
|
||||||
|
|
||||||
| Property | Default | Required | Description |
|
| 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) |
|
| User Name | None | Yes | Your Hayward User Name (not email address) |
|
||||||
| Password | None | Yes | Your Hayward User Password |
|
| Password | None | Yes | Your Hayward User Password |
|
||||||
| Telemetry Poll Delay | 12 | Yes | Telemetry Poll Delay (10-60 seconds) |
|
| Telemetry Poll Delay | 12 | Yes | Telemetry Poll Delay (10-60 seconds) |
|
||||||
|
|
|
@ -10,12 +10,12 @@ A single supported thing called `collection`.
|
||||||
## Thing Configuration
|
## Thing Configuration
|
||||||
|
|
||||||
The thing supports one setting labelled `address` which is your street number and name as it appears on Google.
|
The thing supports one setting labelled `address` which is your street number and name as it appears on Google.
|
||||||
*For Example:
|
_For Example:
|
||||||
1 Victoria Street*
|
1 Victoria Street_
|
||||||
|
|
||||||
> Note: The above address example is not valid as it is a business address.
|
> 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
|
## Channels
|
||||||
|
|
||||||
|
@ -39,8 +39,8 @@ The collection event `collection-event` triggers on the day of rubbish collectio
|
||||||
|
|
||||||
#### Configuration
|
#### 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.
|
This can then trigger the collection event before or after the normal time of 12:00am on the day of the collection.
|
||||||
|
|
||||||
*For Example:
|
_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).*
|
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)._
|
||||||
|
|
|
@ -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:
|
This binding currently supports the following thing types:
|
||||||
|
|
||||||
- *multiroomplus* : Multiroom+ V3 (**Note:** This product is no longer sold by HDanywhere)
|
- _multiroomplus_ : Multiroom+ V3 (**Note:** This product is no longer sold by HDanywhere)
|
||||||
- *mhub4k431* : MHUB 4K (4X3+1)
|
- _mhub4k431_ : MHUB 4K (4X3+1)
|
||||||
|
|
||||||
## Discovery
|
## Discovery
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ This binding does not require any special configuration.
|
||||||
## Thing 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.
|
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
|
```java
|
||||||
Thing hdanywhere:mhub4k431:m1 [ipAddress="192.168.0.89",interval=15]
|
Thing hdanywhere:mhub4k431:m1 [ipAddress="192.168.0.89",interval=15]
|
||||||
|
|
|
@ -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.
|
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).
|
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 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.
|
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. |
|
| 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). |
|
| 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). |
|
| 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). |
|
| 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
|
### 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 |
|
| 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. |
|
| 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-Up/Down-Position-vs.-Open/Close-State). |
|
| 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). |
|
| 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` |
|
| 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. |
|
| 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) |
|
| 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% | ▲ |
|
| Single action<br>bottom-up | `position` | ▲ | Up | `OPEN` | 0% | ▲ |
|
||||||
| | | ▼ | Down | `CLOSED` | 100% | ▼ |
|
| | | ▼ | Down | `CLOSED` | 100% | ▼ |
|
||||||
| Single action<br>top-down | `position` | ▲ | Up | ***`CLOSED`*** | 0% | ▲ |
|
| Single action<br>top-down | `position` | ▲ | Up | **`CLOSED`** | 0% | ▲ |
|
||||||
| | | ▼ | Down | ***`OPEN`*** | 100% | ▼ |
|
| | | ▼ | Down | **`OPEN`** | 100% | ▼ |
|
||||||
| Single action<br>right-left | `position` | ▲ | ***Left*** | `OPEN` | 0% | ▲ |
|
| Single action<br>right-left | `position` | ▲ | _**Left**_ | `OPEN` | 0% | ▲ |
|
||||||
| | | ▼ | ***Right*** | `CLOSED` | 100% | ▼ |
|
| | | ▼ | _**Right**_ | `CLOSED` | 100% | ▼ |
|
||||||
| Single action<br>left-right | `position` | ▲ | ***Right*** | `OPEN` | 0% | ▲ |
|
| Single action<br>left-right | `position` | ▲ | _**Right**_ | `OPEN` | 0% | ▲ |
|
||||||
| | | ▼ | ***Left*** | `CLOSED` | 100% | ▼ |
|
| | | ▼ | _**Left**_ | `CLOSED` | 100% | ▼ |
|
||||||
| Dual action<br>(lower rail) | `position` | ▲ | Up | `OPEN` | 0% | ▲ |
|
| Dual action<br>(lower rail) | `position` | ▲ | Up | `OPEN` | 0% | ▲ |
|
||||||
| | | ▼ | Down | `CLOSED` | 100% | ▼ |
|
| | | ▼ | Down | `CLOSED` | 100% | ▼ |
|
||||||
| Dual action<br>(upper rail) | ***`secondary`*** | ▲ | Up | ***`CLOSED`*** | 0%<sup>1)</sup> | ![](doc/right.png) |
|
| 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> | ![](doc/left.png) |
|
| | | ▼ | Down | **`OPEN`** | 100%<sup>1)</sup> | ![dual_action arrow_left](doc/left.png) |
|
||||||
| Blackout panel ('DuoLite') | ***`secondary`*** | ▲ | Up | `OPEN` | 0% | ▲ |
|
| Blackout panel ('DuoLite') | _**`secondary`**_ | ▲ | Up | `OPEN` | 0% | ▲ |
|
||||||
| | | ▼ | Down | `CLOSED` | 100% | ▼ |
|
| | | ▼ | 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.
|
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.
|
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.
|
The details are shown in the following table.
|
||||||
This bug has been fixed from openHAB v3.2.x (or later) —
|
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) |
|
| 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:
|
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)"
|
rule "Hub Refresh (every 20 minutes)"
|
||||||
when
|
when
|
||||||
Time cron "0 1/20 0 ? * * *"
|
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
|
### `demo.things` File
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge hdpowerview:hub:home "Luxaflex Hub" @ "Living Room" [host="192.168.1.123"] {
|
Bridge hdpowerview:hub:home "Luxaflex Hub" @ "Living Room" [host="192.168.1.123"] {
|
||||||
Thing shade s50150 "Living Room Shade" @ "Living Room" [id="50150"]
|
Thing shade s50150 "Living Room Shade" @ "Living Room" [id="50150"]
|
||||||
Thing repeater r16384 "Bedroom Repeater" @ "Bedroom" [id="16384"]
|
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:
|
Shade items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Rollershutter Living_Room_Shade_Position "Living Room Shade Position [%.0f %%]" {channel="hdpowerview:shade:home:s50150:position"}
|
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"}
|
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"}
|
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:
|
Repeater items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Color Bedroom_Repeater_Color "Bedroom Repeater Color" {channel="hdpowerview:repeater:home:r16384:color"}
|
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"}
|
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"}
|
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:
|
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"}
|
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:
|
Scene Group items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Switch Children_Rooms_Shades_Up "Good Morning Children" {channel="hdpowerview:hub:home:sceneGroups#27119"}
|
Switch Children_Rooms_Shades_Up "Good Morning Children" {channel="hdpowerview:hub:home:sceneGroups#27119"}
|
||||||
```
|
```
|
||||||
|
|
||||||
Automation items:
|
Automation items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Switch Automation_Children_Up_Sun "Children Up At Sunrise" {channel="hdpowerview:hub:home:automations#1262"}
|
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"}
|
Switch Automation_Children_Up_Time "Children Up At 6:30" {channel="hdpowerview:hub:home:automations#49023"}
|
||||||
```
|
```
|
||||||
|
|
||||||
### `demo.sitemap` File
|
### `demo.sitemap` File
|
||||||
|
|
||||||
```
|
```perl
|
||||||
Frame label="Living Room" {
|
Frame label="Living Room" {
|
||||||
Switch item=Living_Room_Shades_Scene_Open
|
Switch item=Living_Room_Shades_Scene_Open
|
||||||
Slider item=Living_Room_Shade_Position
|
Slider item=Living_Room_Shade_Position
|
||||||
|
|
|
@ -1,24 +1,22 @@
|
||||||
# Helios Binding
|
# 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
|
## Supported Things
|
||||||
|
|
||||||
Currently, the Helios IP Vario is supported by this binding, running the 2.21 version of the firmware
|
Currently, the Helios IP Vario is supported by this binding, running the 2.21 version of the firmware
|
||||||
|
|
||||||
|
|
||||||
## Binding Configuration
|
## Binding Configuration
|
||||||
|
|
||||||
There is no specific binding configuration
|
There is no specific binding configuration
|
||||||
|
|
||||||
|
|
||||||
## Thing 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.
|
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
|
In the thing file, this looks e.g. like
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing helios:ipvario213:gate [ipAddress="192.168.0.14", username="admin", password="mypassword"]
|
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:
|
demo.Things:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing helios:ipvario221:gate [ipAddress="192.168.0.14", username="admin", password="mypassword"]
|
Thing helios:ipvario221:gate [ipAddress="192.168.0.14", username="admin", password="mypassword"]
|
||||||
```
|
```
|
||||||
|
|
||||||
demo.items:
|
demo.items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
String GateKeyStamp "[%s]" (helios) {channel="helios:ipvario221:gate:keypressedstamp"}
|
String GateKeyStamp "[%s]" (helios) {channel="helios:ipvario221:gate:keypressedstamp"}
|
||||||
String GateCardSwiped "[%s]" (helios) {channel="helios:ipvario221:gate:card"}
|
String GateCardSwiped "[%s]" (helios) {channel="helios:ipvario221:gate:card"}
|
||||||
String GateCardStamp "[%s]" (helios) {channel="helios:ipvario221:gate:cardstamp"}
|
String GateCardStamp "[%s]" (helios) {channel="helios:ipvario221:gate:cardstamp"}
|
||||||
|
@ -72,7 +70,7 @@ String GateCodeValid "[%s]" (helios) {channel="helios:ipvario221:gate:codevalid"
|
||||||
|
|
||||||
demo.rules:
|
demo.rules:
|
||||||
|
|
||||||
```
|
```java
|
||||||
rule SomeRule
|
rule SomeRule
|
||||||
when
|
when
|
||||||
Channel "helios:ipvario221:gate:keypressed" triggered
|
Channel "helios:ipvario221:gate:keypressed" triggered
|
||||||
|
|
|
@ -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.
|
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.
|
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.
|
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
|
## 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.
|
Otherwise only thing configuration is needed.
|
||||||
|
|
||||||
## Thing Configuration
|
## Thing Configuration
|
||||||
|
@ -67,13 +67,13 @@ Note: the configuration channels are not intended to be written regularly.
|
||||||
|
|
||||||
Things:
|
Things:
|
||||||
|
|
||||||
```
|
```java
|
||||||
heliosventilation:ventilation:MyKWL [ serialPort="/dev/ttyUSB0" ]
|
heliosventilation:ventilation:MyKWL [ serialPort="/dev/ttyUSB0" ]
|
||||||
```
|
```
|
||||||
|
|
||||||
Items:
|
Items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Switch KWLOnOff { channel="heliosventilation:ventilation:MyKWL:powerState" }
|
Switch KWLOnOff { channel="heliosventilation:ventilation:MyKWL:powerState" }
|
||||||
Switch KWLWinter { channel="heliosventilation:ventilation:MyKWL:winterMode" }
|
Switch KWLWinter { channel="heliosventilation:ventilation:MyKWL:winterMode" }
|
||||||
|
|
||||||
|
@ -92,7 +92,7 @@ Number Max_Fan_Speed "Max Fan Speed" <fan> { channel="heliosventilation:ventilat
|
||||||
|
|
||||||
Sitemap:
|
Sitemap:
|
||||||
|
|
||||||
```
|
```perl
|
||||||
sitemap helios_kwl label="Helios Ventilation" {
|
sitemap helios_kwl label="Helios Ventilation" {
|
||||||
Frame label="Temperatures" {
|
Frame label="Temperatures" {
|
||||||
Text item=Outside_Temperature
|
Text item=Outside_Temperature
|
||||||
|
|
|
@ -14,7 +14,6 @@ Bridge:
|
||||||
The binding supports a bridge to connect to the HEOS-Network.
|
The binding supports a bridge to connect to the HEOS-Network.
|
||||||
A bridge uses the thing ID "bridge".
|
A bridge uses the thing ID "bridge".
|
||||||
|
|
||||||
|
|
||||||
Player:
|
Player:
|
||||||
A generic player is supported via this binding.
|
A generic player is supported via this binding.
|
||||||
Currently no differences are made between the players.
|
Currently no differences are made between the players.
|
||||||
|
@ -24,13 +23,12 @@ Groups:
|
||||||
The binding supports HEOS groups.
|
The binding supports HEOS groups.
|
||||||
A group uses the Thing ID "group"
|
A group uses the Thing ID "group"
|
||||||
|
|
||||||
|
|
||||||
## Discovery
|
## Discovery
|
||||||
|
|
||||||
This binding supports full automatic discovery of available players to be used as a bridge, players and groups.
|
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).
|
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.
|
Please note that only one bridge is required to establish a connection.
|
||||||
Adding a second bridge can cause trouble with the 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.
|
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.
|
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"]
|
Bridge heos:bridge:main "name" [ipAddress="192.168.0.1", unsername="xxx", password="123456"]
|
||||||
````
|
```
|
||||||
|
|
||||||
### Player Configuration
|
### Player Configuration
|
||||||
|
|
||||||
|
@ -73,9 +71,9 @@ Player have the following configuration parameter
|
||||||
|
|
||||||
For manual configuration a player can be defined as followed:
|
For manual configuration a player can be defined as followed:
|
||||||
|
|
||||||
````
|
```java
|
||||||
Thing heos:player:player1 "name" [pid="123456789"]
|
Thing heos:player:player1 "name" [pid="123456789"]
|
||||||
````
|
```
|
||||||
|
|
||||||
PID behind the heos:player:--- should be changed as required.
|
PID behind the heos:player:--- should be changed as required.
|
||||||
It is recommended to use the Player PID.
|
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.
|
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.
|
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"]
|
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.
|
Defining Player and Bridge together.
|
||||||
To ensure that the players and groups are attached to the bridge the definition can be like:
|
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"] {
|
Bridge heos:bridge:main "Bridge" [ipAddress="192.168.0.1", username="userName", password="123456"] {
|
||||||
player Kitchen "Kitchen"[pid="434523813"]
|
player Kitchen "Kitchen"[pid="434523813"]
|
||||||
player LivingRoom "Living Room"[pid="918797451"]
|
player LivingRoom "Living Room"[pid="918797451"]
|
||||||
group 813793755 "Ground Level"[members="434523813;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
|
#### Example
|
||||||
|
|
||||||
```
|
```java
|
||||||
Player LivingRoom_Control "Control" {channel="heos:player:main:LivingRoom:Control"}
|
Player LivingRoom_Control "Control" {channel="heos:player:main:LivingRoom:Control"}
|
||||||
Selection item=LivingRoom_Playlists label="Playlist" icon="music"
|
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).
|
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.
|
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.
|
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
|
Example
|
||||||
|
|
||||||
```
|
```java
|
||||||
Switch Player_1 "Player [%s]" {channel="heos:bridge:main:P123456789"}
|
Switch Player_1 "Player [%s]" {channel="heos:bridge:main:P123456789"}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -247,7 +245,7 @@ Example
|
||||||
|
|
||||||
### demo.things:
|
### demo.things:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge heos:bridge:main "Bridge" [ipAddress="192.168.0.1", username="userName", password="123456"] {
|
Bridge heos:bridge:main "Bridge" [ipAddress="192.168.0.1", username="userName", password="123456"] {
|
||||||
player Kitchen "Kitchen"[pid="434523813"]
|
player Kitchen "Kitchen"[pid="434523813"]
|
||||||
player LivingRoom "Living Room"[pid="918797451"]
|
player LivingRoom "Living Room"[pid="918797451"]
|
||||||
|
@ -257,7 +255,7 @@ Bridge heos:bridge:main "Bridge" [ipAddress="192.168.0.1", username="userName",
|
||||||
|
|
||||||
### demo.items:
|
### demo.items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Player LivingRoom_Control "Control" {channel="heos:player:main:LivingRoom:Control"}
|
Player LivingRoom_Control "Control" {channel="heos:player:main:LivingRoom:Control"}
|
||||||
Switch LivingRoom_Mute "Mute"{channel="heos:player:main:LivingRoom:Mute"}
|
Switch LivingRoom_Mute "Mute"{channel="heos:player:main:LivingRoom:Mute"}
|
||||||
Dimmer LivingRoom_Volume "Volume" {channel="heos:player:main:LivingRoom:Volume"}
|
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
|
### demo.sitemap
|
||||||
|
|
||||||
```
|
```perl
|
||||||
Frame label="LivingRoom" {
|
Frame label="LivingRoom" {
|
||||||
Default item=LivingRoom_Control
|
Default item=LivingRoom_Control
|
||||||
Default item=LivingRoom_Mute
|
Default item=LivingRoom_Mute
|
||||||
Default item=LivingRoom_Volume
|
Default item=LivingRoom_Volume
|
||||||
Default item=LivingRoom_Title
|
Default item=LivingRoom_Title
|
||||||
Default item=LivingRoom_Interpret
|
Default item=LivingRoom_Interpret
|
||||||
Default item=LivingRoom_Album
|
Default item=LivingRoom_Album
|
||||||
Selection item=LivingRoom_Favorites label="Favorite" icon="music"
|
Selection item=LivingRoom_Favorites label="Favorite" icon="music"
|
||||||
Selection item=LivingRoom_Playlists label="Playlist" icon="music"
|
Selection item=LivingRoom_Playlists label="Playlist" icon="music"
|
||||||
}
|
}
|
||||||
|
@ -310,33 +308,33 @@ Player B = Living Room (source)
|
||||||
|
|
||||||
Items:
|
Items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Switch HeosBridge_Play_Living "Living Room" (gHeos) {channel="heos:bridge:ed0ac1ff-0193-65c6-c1b8-506137456a50:P918797451"}
|
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_Input (gHeos) {channel="heos:player:918797451:Inputs"}
|
||||||
String HeosKitchen_InputSelect "Input" (gHeos)
|
String HeosKitchen_InputSelect "Input" (gHeos)
|
||||||
```
|
```
|
||||||
|
|
||||||
Rule for kitchen:
|
Rule for kitchen:
|
||||||
|
|
||||||
```
|
```java
|
||||||
rule "Play AuxIn from Living Room"
|
rule "Play AuxIn from Living Room"
|
||||||
when
|
when
|
||||||
Item HeosKitchen_InputSelect received command
|
Item HeosKitchen_InputSelect received command
|
||||||
then
|
then
|
||||||
if (receivedCommand.toString == "aux_in_1") {
|
if (receivedCommand.toString == "aux_in_1") {
|
||||||
sendCommand(HeosKitchen_Input, "aux_in_1")
|
sendCommand(HeosKitchen_Input, "aux_in_1")
|
||||||
|
|
||||||
} if (receivedCommand.toString == "LivingRoom") {
|
} if (receivedCommand.toString == "LivingRoom") {
|
||||||
sendCommand(HeosBridge_Play_Living, ON)
|
sendCommand(HeosBridge_Play_Living, ON)
|
||||||
sendCommand(HeosKitchen_Input, "aux_in_1")
|
sendCommand(HeosKitchen_Input, "aux_in_1")
|
||||||
sendCommand(HeosBridge_Play_Living, OFF) //Switch player channel off again to be sure that it is OFF
|
sendCommand(HeosBridge_Play_Living, OFF) //Switch player channel off again to be sure that it is OFF
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Sitemap:
|
Sitemap:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Switch item=HeosKitchen_InputSelect mappings=[aux_in_1 = "Aux In" , LivingRoom = "Living Room"]
|
Switch item=HeosKitchen_InputSelect mappings=[aux_in_1 = "Aux In" , LivingRoom = "Living Room"]
|
||||||
```
|
```
|
||||||
|
|
||||||
### The Online status of Groups and Players
|
### 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:
|
Items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
String HeosGroup_Status
|
String HeosGroup_Status
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Then we need a rule which triggers the state if an Item goes Online or Offline.
|
Then we need a rule which triggers the state if an Item goes Online or Offline.
|
||||||
|
|
||||||
Rules:
|
Rules:
|
||||||
|
|
||||||
```
|
```java
|
||||||
rule "Online State Heos Group"
|
rule "Online State Heos Group"
|
||||||
|
|
||||||
when
|
when
|
||||||
|
@ -373,21 +370,21 @@ end
|
||||||
|
|
||||||
Sitemap:
|
Sitemap:
|
||||||
|
|
||||||
```
|
```perl
|
||||||
Frame label="Heos Group" visibility=[HeosGroup_Status==ONLINE] {
|
Frame label="Heos Group" visibility=[HeosGroup_Status==ONLINE] {
|
||||||
|
|
||||||
Default item=HeosGroup1_Player
|
Default item=HeosGroup1_Player
|
||||||
Default item=HeosGroup1_Volume
|
Default item=HeosGroup1_Volume
|
||||||
Default item=HeosGroup1_Mute
|
Default item=HeosGroup1_Mute
|
||||||
Default item=HeosGroup1_Favorites
|
Default item=HeosGroup1_Favorites
|
||||||
Default item=HeosGroup1_Playlist
|
Default item=HeosGroup1_Playlist
|
||||||
|
|
||||||
Text item=HeosGroup1_Song {
|
Text item=HeosGroup1_Song {
|
||||||
Default item=HeosGroup1_Song
|
Default item=HeosGroup1_Song
|
||||||
Default item=HeosGroup1_Artist
|
Default item=HeosGroup1_Artist
|
||||||
Default item=HeosGroup1_Album
|
Default item=HeosGroup1_Album
|
||||||
Image item=HeosGroup1_Cover url=""
|
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:
|
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")
|
val actions = getActions("heos","heos:bridge:bridgeId")
|
||||||
if(null === actions) {
|
if(null === actions) {
|
||||||
logInfo("actions", "Actions not found, check thing ID")
|
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)
|
### 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.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Herzborg Binding
|
# 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
|
## Supported Things
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ All the channels are read-write
|
||||||
|
|
||||||
herzborg.things:
|
herzborg.things:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge herzborg:serial_bus:my_herzborg_bus [ port="/dev/ttyAMA1" ]
|
Bridge herzborg:serial_bus:my_herzborg_bus [ port="/dev/ttyAMA1" ]
|
||||||
{
|
{
|
||||||
Thing herzborg:curtain:livingroom [ address=1234, poll_interval=1 ]
|
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:
|
herzborg.items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Rollershutter LivingRoom_Window {channel="herzborg:curtain:livingroom:position"}
|
Rollershutter LivingRoom_Window {channel="herzborg:curtain:livingroom:position"}
|
||||||
```
|
```
|
||||||
|
|
||||||
herzborg.sitemap:
|
herzborg.sitemap:
|
||||||
|
|
||||||
```
|
```perl
|
||||||
Frame label="Living room curtain"
|
Frame label="Living room curtain"
|
||||||
{
|
{
|
||||||
Switch item=LivingRoom_Window label="Control" mappings=["DOWN"="Close", "STOP"="Stop", "UP"="Open"]
|
Switch item=LivingRoom_Window label="Control" mappings=["DOWN"="Close", "STOP"="Stop", "UP"="Open"]
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# Home Connect Binding
|
# Home Connect Binding
|
||||||
|
|
||||||
The binding integrates the [Home Connect](https://www.home-connect.com/) system into openHAB.
|
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.
|
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
|
### 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
|
### Devices
|
||||||
|
|
||||||
Supported devices: dishwasher, washer, washer / dryer combination, dryer, oven, refrigerator freezer, coffee machine, hood, cooktop*
|
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 |
|
| Dishwasher | dishwasher |
|
||||||
| Washer | washer |
|
| Washer | washer |
|
||||||
| Washer / Dryer combination | washerdryer |
|
| Washer / Dryer combination | washerdryer |
|
||||||
| Dryer | dryer |
|
| Dryer | dryer |
|
||||||
| Oven | oven |
|
| Oven | oven |
|
||||||
| Hood | hood |
|
| Hood | hood |
|
||||||
| Cooktop | hob |
|
| Cooktop | hob |
|
||||||
| Refrigerator Freezer | fridgefreezer |
|
| Refrigerator Freezer | fridgefreezer |
|
||||||
| Coffee Machine | coffeemaker |
|
| Coffee Machine | coffeemaker |
|
||||||
|
|
||||||
> **INFO**: Currently the Home Connect API does not support all appliance programs. Please check if your desired program is available (e.g. https://developer.home-connect.com/docs/washing-machine/supported_programs_and_options).
|
|
||||||
|
|
||||||
|
> **INFO:** Currently the Home Connect API does not support all appliance programs. Please check if your desired program is available (e.g. <https://developer.home-connect.com/docs/washing-machine/supported_programs_and_options>).
|
||||||
|
|
||||||
## Discovery
|
## Discovery
|
||||||
|
|
||||||
After the bridge has been added and authorized, devices are discovered automatically.
|
After the bridge has been added and authorized, devices are discovered automatically.
|
||||||
|
|
||||||
|
|
||||||
## Channels
|
## Channels
|
||||||
|
|
||||||
| Channel Type ID | Item Type | Read only | Description | Available on thing |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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_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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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_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_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_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_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_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_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_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_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_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_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_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_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 |
|
| 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_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 |
|
| 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 |
|
| 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_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 |
|
| 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_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 |
|
| 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_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_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 |
|
| 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_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_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 |
|
| 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 |
|
| 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_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 |
|
| 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_state | Switch | false | This setting describes the current ambient light state of the home appliance. | dishwasher, hood |
|
||||||
| ambient_light_brightness_state | Dimmer | false | This setting describes the brightness state of the ambient light. *INFO: Please note that the brightness can't be set if the ambient light color is set to `CustomColor`.* | dishwasher, hood |
|
| ambient_light_brightness_state | Dimmer | false | This setting describes the brightness state of the ambient light. _INFO: Please note that the brightness can't be set if the ambient light color is set to `CustomColor`._ | dishwasher, hood |
|
||||||
| ambient_light_color_state | String | false | This setting describes the current ambient light color state of the home appliance. | dishwasher, hood |
|
| ambient_light_color_state | String | false | This setting describes the current ambient light color state of the home appliance. | dishwasher, hood |
|
||||||
| ambient_light_custom_color_state | Color | false | This setting describes the custom color state of the ambient light. HSB color commands are supported as well as hex color string e.g. `#11ff00`. *INFO: Please note that the brightness can't be set.* | dishwasher, hood |
|
| ambient_light_custom_color_state | Color | false | This setting describes the custom color state of the ambient light. HSB color commands are supported as well as hex color string e.g. `#11ff00`. _INFO: Please note that the brightness can't be set._ | dishwasher, hood |
|
||||||
|
|
||||||
|
|
||||||
## Thing Configuration
|
## Thing Configuration
|
||||||
|
|
||||||
### Configuring the __Home Connect API__ Bridge
|
### Configuring the **Home Connect API** Bridge
|
||||||
|
|
||||||
|
|
||||||
#### 1. Preconditions
|
#### 1. Preconditions
|
||||||
|
|
||||||
1. Please create an account at [Home Connect](https://www.home-connect.com/) and add your physical appliance to your account.
|
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
|
#### 2. Create Home Connect developer account
|
||||||
|
|
||||||
1. Create an account at [https://developer.home-connect.com](https://developer.home-connect.com) and login.
|
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")
|
![Screenshot Home Connect profile page](doc/home_connect_profile.png "Screenshot Home Connect profile page")
|
||||||
|
1. Register / Create an application at [https://developer.home-connect.com/applications](https://developer.home-connect.com/applications)
|
||||||
3. Register / Create an application at [https://developer.home-connect.com/applications](https://developer.home-connect.com/applications)
|
- _Application ID_: e.g. `openhab-binding`
|
||||||
* _Application ID_: e.g. `openhab-binding`
|
- _OAuth Flow_: Authorization Code Grant Flow
|
||||||
* _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/)
|
||||||
* _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
|
> **WARNING**: Please don't use your developer account username
|
||||||
|
|
||||||
**_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`
|
for example: `http://192.168.178.34:8080/homeconnect` or `https://myhome.domain.com/homeconnect`
|
||||||
* _One Time Token Mode_: keep unchecked
|
- _One Time Token Mode_: keep unchecked
|
||||||
* _Proof Key for Code Exchange_: 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.
|
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")
|
![Screenshot Home Connect application page](doc/home_connect_application.png "Screenshot Home Connect application page")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#### 3. Setup bridge (openHAB UI)
|
#### 3. Setup bridge (openHAB UI)
|
||||||
|
|
||||||
The Home Connect bridge can be configured in the openHAB UI as follows:
|
The Home Connect bridge can be configured in the openHAB UI as follows:
|
||||||
|
|
||||||
1. Go to the Inbox and press the add button
|
1. Go to the Inbox and press the add button
|
||||||
2. Choose `Home Connect Binding`
|
1. Choose `Home Connect Binding`
|
||||||
3. Select `Home Connect API`
|
1. Select `Home Connect API`
|
||||||
4. Setup and save thing
|
1. Setup and save thing
|
||||||
* __client id:__ your application client id
|
- **client id:** your application client id
|
||||||
* __client secret:__ your application client secret
|
- **client secret:** your application client secret
|
||||||
* __simulator:__ false
|
- **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`.
|
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`.
|
||||||
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. 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 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 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 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")
|
![Screenshot Home Connect wizard page 4](doc/homeconnect_setup_4.png "Screenshot Home Connect wizard page 4")
|
||||||
|
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.
|
||||||
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.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Examples: File based configuration
|
## 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
|
### things/homeconnect.things
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge homeconnect:api_bridge:api_bridge_at_home "Home Connect API" [ clientId="1234", clientSecret="1234", simulator=false] {
|
Bridge homeconnect:api_bridge:api_bridge_at_home "Home Connect API" [ clientId="1234", clientSecret="1234", simulator=false] {
|
||||||
// Thing configurations
|
// Thing configurations
|
||||||
Thing dishwasher dishwasher1 "Dishwasher" [ haId="SIEMENS-HCS02DWH1-6F2FC400C1EA4A" ]
|
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`
|
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
|
// dishwasher
|
||||||
Switch Dishwasher_PowerState "Power State" {channel="homeconnect:dishwasher:api_bridge_at_home:dishwasher1:power_state"}
|
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"}
|
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
|
## 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:
|
Features:
|
||||||
|
|
||||||
* overview of your bridges and appliances
|
- overview of your bridges and appliances
|
||||||
* send commands to your appliances
|
- send commands to your appliances
|
||||||
* see latest API requests
|
- see latest API requests
|
||||||
* see received events from the Home Connect backend
|
- see received events from the Home Connect backend
|
||||||
* API request counts
|
- 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")
|
> **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
|
### 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
|
- your openHAB instance was offline for a longer period or
|
||||||
* new terms weren't accepted or
|
- new terms weren't accepted or
|
||||||
* a technical problem occurred.
|
- a technical problem occurred.
|
||||||
|
|
||||||
```java
|
```java
|
||||||
rule "Offline check - Home Connect bridge"
|
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
|
#### 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.
|
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")
|
![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
|
#### 2. Start program
|
||||||
|
|
||||||
|
@ -254,7 +243,7 @@ After you've extracted the desired program command, you can start your program v
|
||||||
|
|
||||||
##### in rule
|
##### in rule
|
||||||
|
|
||||||
*Example rule:*
|
_Example rule:_
|
||||||
|
|
||||||
```java
|
```java
|
||||||
rule "trigger program"
|
rule "trigger program"
|
||||||
|
@ -269,9 +258,9 @@ Please replace `homeconnect_CoffeeMaker_BOSCH_HCS06COM1_B95E5103934D_basic_actio
|
||||||
|
|
||||||
##### via curl
|
##### 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"
|
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.
|
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'
|
### 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):
|
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.
|
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")
|
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")
|
||||||
|
|
|
@ -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".
|
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.
|
When the option "Restricted access" is used, some ports have to be added to the "Port opening" list.
|
||||||
|
|
||||||
```
|
```text
|
||||||
2000;
|
2000;
|
||||||
2001;
|
2001;
|
||||||
2010;
|
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:
|
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
|
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.
|
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)
|
Due to the factory reset, the device will also be unpaired from the gateway, even if "unpairOnDeletion" is set to false! (default = false)
|
||||||
|
|
||||||
- **bufferSize**
|
- **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.
|
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.
|
In this case, e.g. the discovery fails.
|
||||||
With this setting the buffer size can be adjusted. The value is specified in kB.
|
With this setting the buffer size can be adjusted. The value is specified in kB.
|
||||||
|
|
||||||
The syntax for a bridge is:
|
The syntax for a bridge is:
|
||||||
|
@ -192,19 +192,19 @@ homematic:bridge:NAME
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
||||||
**Minimum configuration**
|
#### Minimum configuration
|
||||||
|
|
||||||
```java
|
```java
|
||||||
Bridge homematic:bridge:ccu [ gatewayAddress="..."]
|
Bridge homematic:bridge:ccu [ gatewayAddress="..."]
|
||||||
```
|
```
|
||||||
|
|
||||||
**With callback settings**
|
#### With callback settings
|
||||||
|
|
||||||
```java
|
```java
|
||||||
Bridge homematic:bridge:ccu [ gatewayAddress="...", callbackHost="...", callbackPort=... ]
|
Bridge homematic:bridge:ccu [ gatewayAddress="...", callbackHost="...", callbackPort=... ]
|
||||||
```
|
```
|
||||||
|
|
||||||
**Multiple bridges**
|
#### Multiple bridges
|
||||||
|
|
||||||
```java
|
```java
|
||||||
Bridge homematic:bridge:lxccu [ gatewayAddress="..."]
|
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.
|
You have several additional options to control the display.
|
||||||
|
|
||||||
- BEEP *(TONE1, TONE2, TONE3)* - let the remote control beep
|
- BEEP _(TONE1, TONE2, TONE3)_ - let the remote control beep
|
||||||
- BACKLIGHT *(BACKLIGHT_ON, BLINK_SLOW, BLINK_FAST)* - control the display backlight
|
- BACKLIGHT _(BACKLIGHT_ON, BLINK_SLOW, BLINK_FAST)_ - control the display backlight
|
||||||
- UNIT *(PERCENT, WATT, CELSIUS, FAHRENHEIT)* - display one of these units
|
- 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
|
- 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.
|
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.
|
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.
|
**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
|
Display text at line 1,3 and 5 when the bottom button on the display is pressed
|
||||||
|
|
||||||
**Items**
|
##### Items
|
||||||
|
|
||||||
```java
|
```java
|
||||||
String Display_line_1 "Line 1" { channel="homematic:HM-Dis-WM55:ccu:NEQ0123456:1#DISPLAY_LINE_1" }
|
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" }
|
Switch Display_submit "Submit" { channel="homematic:HM-Dis-WM55:ccu:NEQ0123456:1#DISPLAY_SUBMIT" }
|
||||||
```
|
```
|
||||||
|
|
||||||
**Rule**
|
##### Rule
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
rule "Display Test"
|
rule "Display Test"
|
||||||
|
@ -473,6 +473,7 @@ end
|
||||||
```
|
```
|
||||||
|
|
||||||
**Available icons:**
|
**Available icons:**
|
||||||
|
|
||||||
- NONE
|
- NONE
|
||||||
- OFF
|
- OFF
|
||||||
- ON
|
- ON
|
||||||
|
@ -488,6 +489,7 @@ end
|
||||||
- SIGNAL_RED
|
- SIGNAL_RED
|
||||||
|
|
||||||
**Available colors (only HM-Dis-WM55):**
|
**Available colors (only HM-Dis-WM55):**
|
||||||
|
|
||||||
- NONE(=WHITE)
|
- NONE(=WHITE)
|
||||||
- WHITE
|
- WHITE
|
||||||
- RED
|
- RED
|
||||||
|
@ -503,6 +505,7 @@ The HmIP-WRCD display lines can be set via a combined parameter:
|
||||||
```java
|
```java
|
||||||
String Display_CombinedParam "Combined Parameter" {channel="homematic:HmIP-WRCD:ccu:123456:3#COMBINED_PARAMETER"}
|
String Display_CombinedParam "Combined Parameter" {channel="homematic:HmIP-WRCD:ccu:123456:3#COMBINED_PARAMETER"}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Set Display Lines
|
#### Set Display Lines
|
||||||
|
|
||||||
The combined parameter can be used in a rule file like this:
|
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:**
|
**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)
|
- 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)
|
- DDS: Text of this line. (String, but see special character listing below)
|
||||||
- DDID: Line number. (*1-5*)
|
- DDID: Line number. (_1-5_)
|
||||||
- DDC: Commit, should be set in the last line, otherwise leave unset. (*true*)
|
- DDC: Commit, should be set in the last line, otherwise leave unset. (_true_)
|
||||||
|
|
||||||
Each line can be updated separately without changing the other lines.
|
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:
|
Here an example for a rule file:
|
||||||
|
|
||||||
```java
|
```java
|
||||||
|
@ -536,6 +540,7 @@ Display_CombinedParam.sendCommand("{DDBC=WHITE,DDTC=BLACK,DDI=24,DDA=LEFT,DDS=Wi
|
||||||
```
|
```
|
||||||
|
|
||||||
**Special Characters:**
|
**Special Characters:**
|
||||||
|
|
||||||
- [ -> Ä
|
- [ -> Ä
|
||||||
- \# -> Ö
|
- \# -> Ö
|
||||||
- $ -> Ü
|
- $ -> Ü
|
||||||
|
@ -552,6 +557,7 @@ Display_CombinedParam.sendCommand("{DDBC=WHITE,DDTC=BLACK,DDI=24,DDA=LEFT,DDS=Wi
|
||||||
- @ -> Arrow Down Right
|
- @ -> Arrow Down Right
|
||||||
|
|
||||||
**Icons:**
|
**Icons:**
|
||||||
|
|
||||||
- 0 - No Icon
|
- 0 - No Icon
|
||||||
- 1 - Light off
|
- 1 - Light off
|
||||||
- 2 - Light on
|
- 2 - Light on
|
||||||
|
@ -592,17 +598,21 @@ The display can also make short beep alarms:
|
||||||
```java
|
```java
|
||||||
Display_CombinedParam.sendCommand("{R=0,IN=10,ANS=0}")
|
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.
|
As with line configuration, this can be combined with other line updates, separated with a comma.
|
||||||
|
|
||||||
**Key translations**
|
##### Key translations
|
||||||
- R: Repetitions (*0 to 15*, 15=infinite)
|
|
||||||
- IN: Interval (*5 to 80* in steps of five)
|
- R: Repetitions (_0 to 15_, 15=infinite)
|
||||||
- ANS: Beep sound (*-1 to 7*, see beep table)
|
- 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
|
This is the official mapping for the beep sounds
|
||||||
|
|
||||||
- -1 - No Sound
|
- -1 - No Sound
|
||||||
- 0 - Empty Battery
|
- 0 - Empty Battery
|
||||||
- 1 - Alarm Off
|
- 1 - Alarm Off
|
||||||
|
@ -615,7 +625,7 @@ This is the official mapping for the beep sounds
|
||||||
|
|
||||||
## Troubleshooting
|
## 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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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
|
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.
|
A device may return this failure while fetching the datapoint values.
|
||||||
I have tested pretty much but I did not find the reason.
|
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.
|
I hope this will be fixed in one of the next CCU firmwares.
|
||||||
With [Homegear](https://www.homegear.eu) everything works as expected.
|
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.
|
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.
|
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.
|
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.
|
There is (currently) no way to receive an event automatically when a variable has changed.
|
||||||
|
@ -663,7 +673,7 @@ In scripts:
|
||||||
:::: tabs
|
:::: tabs
|
||||||
|
|
||||||
::: tab JavaScript
|
::: tab JavaScript
|
||||||
|
|
||||||
``` javascript
|
``` javascript
|
||||||
import org.openhab.core.types.RefreshType
|
import org.openhab.core.types.RefreshType
|
||||||
...
|
...
|
||||||
|
@ -677,6 +687,7 @@ Var_1.sendCommand(RefreshType.REFRESH)
|
||||||
``` php
|
``` php
|
||||||
Var_1.sendCommand(REFRESH)
|
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.
|
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.
|
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.
|
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
|
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% |
|
| openHAB | 0% | 100% |
|
||||||
| CCU | 100% | 0% |
|
| 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.
|
First of all, make sure that none of the ports needed to receive status changes from the gateway are blocked by firewall settings.
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# HomeWizard Binding
|
# HomeWizard Binding
|
||||||
|
|
||||||
The HomeWizard binding retrieves measurements from the HomeWizard Wi-Fi P1 meter.
|
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.
|
However, recently HomeWizard also added an interface that can be queried locally.
|
||||||
|
|
||||||
This binding uses that local interface to make the measurements available.
|
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:
|
Example of configuration through a .thing file:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing homewizard:p1_wifi_meter:my_meter [ ipAddress="192.178.1.67", refreshDelay=5 ]
|
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. |
|
| 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. |
|
| gas_timestamp | DateTime | The time stamp of the total_gas measurement. |
|
||||||
|
|
||||||
|
|
||||||
Example of configuration through a .items file:
|
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: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" }
|
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" }
|
DateTime Gas_Update "Gas Update Time [%1$tH:%1$tM]" {channel="homewizard:p1_wifi_meter:my_meter:gas_timestamp" }
|
||||||
|
|
|
@ -9,7 +9,7 @@ All channels are added dynamically depending on the type of printer and its capa
|
||||||
|
|
||||||
## Discovery
|
## 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
|
## Thing Configuration
|
||||||
|
|
||||||
|
@ -75,23 +75,23 @@ The configuration parameters are:
|
||||||
|
|
||||||
Notes:
|
Notes:
|
||||||
|
|
||||||
* All channels are dynamically added at runtime.
|
- All channels are dynamically added at runtime.
|
||||||
* The word color in channel names follows American spelling ("color").
|
- 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 `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.
|
- 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.
|
- 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
|
## Full Textual Example
|
||||||
|
|
||||||
### Thing File
|
### Thing File
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing hpprinter:printer:djprinter "Printer" @ "Office" [ ipAddress="192.168.1.1", usageInterval="30", statusInterval="4" ]
|
Thing hpprinter:printer:djprinter "Printer" @ "Office" [ ipAddress="192.168.1.1", usageInterval="30", statusInterval="4" ]
|
||||||
```
|
```
|
||||||
|
|
||||||
### Item File
|
### Item File
|
||||||
|
|
||||||
```
|
```java
|
||||||
String PrinterStatus "Status" { channel="hpprinter:printer:djprinter:status#status" }
|
String PrinterStatus "Status" { channel="hpprinter:printer:djprinter:status#status" }
|
||||||
|
|
||||||
Number:Dimensionless PrinterBlackLevel "Black Level" { channel="hpprinter:printer:djprinter:ink#blackLevel" }
|
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 %`
|
Black Ink displayed as a whole percentage - `60 %`
|
||||||
|
|
||||||
```
|
```perl
|
||||||
Text item=hpprinter_printer_djprinter_ink_blackLevel label="Black [%.0f %unit%]"
|
Text item=hpprinter_printer_djprinter_ink_blackLevel label="Black [%.0f %unit%]"
|
||||||
```
|
```
|
||||||
|
|
||||||
Black Marker displayed in millilitres - `21 ml`
|
Black Marker displayed in millilitres - `21 ml`
|
||||||
*Default*
|
_Default_
|
||||||
|
|
||||||
```
|
```perl
|
||||||
Text item=hpprinter_printer_djprinter_usage_blackMarker label="Black Marker [%.0f %unit%]"
|
Text item=hpprinter_printer_djprinter_usage_blackMarker label="Black Marker [%.0f %unit%]"
|
||||||
```
|
```
|
||||||
|
|
||||||
Black Marker displayed in litres - `0.021 l`
|
Black Marker displayed in litres - `0.021 l`
|
||||||
|
|
||||||
```
|
```perl
|
||||||
Text item=hpprinter_printer_djprinter_usage_blackMarker label="Black Marker [%.3f l]"
|
Text item=hpprinter_printer_djprinter_usage_blackMarker label="Black Marker [%.3f l]"
|
||||||
```
|
```
|
||||||
|
|
||||||
Black Marker displayed in microlitres - `21000 µl`
|
Black Marker displayed in microlitres - `21000 µl`
|
||||||
|
|
||||||
```
|
```perl
|
||||||
Text item=hpprinter_printer_djprinter_usage_blackMarker label="Black Marker [%.0f µl]"
|
Text item=hpprinter_printer_djprinter_usage_blackMarker label="Black Marker [%.0f µl]"
|
||||||
```
|
```
|
||||||
|
|
||||||
Scanner Document Feeder loaded with text status display - `ON` or `OFF`
|
Scanner Document Feeder loaded with text status display - `ON` or `OFF`
|
||||||
|
|
||||||
```
|
```perl
|
||||||
Text item=hpprinter_printer_djprinter_status_scannerAdfLoaded label="ADF Loaded [%s]"
|
Text item=hpprinter_printer_djprinter_status_scannerAdfLoaded label="ADF Loaded [%s]"
|
||||||
```
|
```
|
||||||
|
|
|
@ -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.|
|
| `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.|
|
| `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.
|
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.
|
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.
|
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 `,`).
|
**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.
|
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. |
|
| `stateExtension` | yes | - | Appended to the `baseURL` for requesting states. |
|
||||||
| `commandExtension` | yes | - | Appended to the `baseURL` for sending commands. If empty, same as `stateExtension`. |
|
| `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. |
|
| `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. |
|
| `escapedUrl` | yes | - | This specifies whether the URL is already escaped. |
|
||||||
| `stateContent` | yes | - | Content for state requests (if method is `PUT` or `POST`) |
|
| `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`).
|
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
|
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
|
http://www.domain.org/home/lights/23871/?status=%2$s&date=%1$tY-%1$tm-%1$td
|
||||||
```
|
```
|
||||||
|
|
||||||
is transformed to
|
is transformed to
|
||||||
|
|
||||||
```
|
```text
|
||||||
http://www.domain.org/home/lights/23871/?status=OFF&date=2020-07-06
|
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`
|
### `demo.things`
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing http:url:foo "Foo" [
|
Thing http:url:foo "Foo" [
|
||||||
baseURL="https://example.com/api/v1/metadata-api/web/metadata",
|
baseURL="https://example.com/api/v1/metadata-api/web/metadata",
|
||||||
headers="key1=value1", "key2=value2", "key3=value3",
|
headers="key1=value1", "key2=value2", "key3=value3",
|
||||||
refresh=15] {
|
refresh=15] {
|
||||||
Channels:
|
Channels:
|
||||||
Type string : text "Text" [ stateTransformation="JSONPATH:$.metadata.data" ]
|
Type string : text "Text" [ stateTransformation="JSONPATH:$.metadata.data" ]
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
|
@ -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
|
### .things
|
||||||
```
|
|
||||||
|
```java
|
||||||
Thing http:url:vitowifi "VitoWifi" @ "1stfloor" [baseURL="http://192.168.1.61/", commandMethod="POST", delay="1000", refresh="90", timeout="900"] {
|
Thing http:url:vitowifi "VitoWifi" @ "1stfloor" [baseURL="http://192.168.1.61/", commandMethod="POST", delay="1000", refresh="90", timeout="900"] {
|
||||||
|
|
||||||
Channels:
|
Channels:
|
||||||
|
@ -13,21 +16,21 @@ Thing http:url:vitowifi "VitoWifi" @ "1stfloor" [baseURL="http://192.168.1.61/",
|
||||||
|
|
||||||
### .items
|
### .items
|
||||||
|
|
||||||
```
|
```java
|
||||||
Number Vito_ID "Vito_ID" <switch> (gHeating) {channel="http:url:vitowifi:Channel_Vito_ID" , expire="5m" }
|
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_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" }
|
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.
|
So I need some simple JSONPATH transformation and one java script transformation.
|
||||||
Data is polled every 10 seconds.
|
Data is polled every 10 seconds.
|
||||||
|
|
||||||
### .things
|
### .things
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing http:url:feinstaub "Feinstaub" [ baseURL="http://feinstaubsensor-14255834/data.json", refresh=10] {
|
Thing http:url:feinstaub "Feinstaub" [ baseURL="http://feinstaubsensor-14255834/data.json", refresh=10] {
|
||||||
Channels:
|
Channels:
|
||||||
Type number : SDS_PM10 [ stateTransformation="JSONPATH:$.sensordatavalues[0].value" ]
|
Type number : SDS_PM10 [ stateTransformation="JSONPATH:$.sensordatavalues[0].value" ]
|
||||||
|
@ -40,7 +43,7 @@ Thing http:url:feinstaub "Feinstaub" [ baseURL="http://feinstaubsensor-14255834/
|
||||||
|
|
||||||
### .items
|
### .items
|
||||||
|
|
||||||
```
|
```java
|
||||||
/* **************************
|
/* **************************
|
||||||
* Feinstaub sensor data
|
* 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.
|
I have a BME2080 sensor connected. The Humidity must be diveded by 100 to show hPa.
|
||||||
|
|
||||||
```
|
```javascript
|
||||||
(function(x) {
|
(function(x) {
|
||||||
var json = JSON.parse(x);
|
var json = JSON.parse(x);
|
||||||
return json.sensordatavalues[3].value/100;
|
return json.sensordatavalues[3].value/100;
|
||||||
})(input)
|
})(input)
|
||||||
```
|
```
|
||||||
|
|
|
@ -15,7 +15,7 @@ Both bridges are fully supported by this binding.
|
||||||
|
|
||||||
Almost all available Hue devices are 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.
|
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).
|
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.
|
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.
|
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).
|
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 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_:
|
They are presented by the following ZigBee Device ID and _Thing type_:
|
||||||
|
|
||||||
| Device type | ZigBee Device ID | 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.
|
Auto-discovery is enabled by default.
|
||||||
To disable it, you can add the following line to `<openHAB-conf>/services/runtime.cfg`:
|
To disable it, you can add the following line to `<openHAB-conf>/services/runtime.cfg`:
|
||||||
|
|
||||||
```
|
```text
|
||||||
discovery.hue:background=false
|
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.
|
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
|
In the thing file, this looks e.g. like
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge hue:bridge:1 [ ipAddress="192.168.0.64" ]
|
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 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.:
|
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" ]
|
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).
|
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
|
Thus, all it needs for manual configuration is this single value like
|
||||||
|
|
||||||
```
|
```java
|
||||||
0210 bulb1 "Lamp 1" @ "Office" [ lightId="1" ]
|
0210 bulb1 "Lamp 1" @ "Office" [ lightId="1" ]
|
||||||
```
|
```
|
||||||
|
|
||||||
or
|
or
|
||||||
|
|
||||||
```
|
```java
|
||||||
0107 motion-sensor "Motion Sensor" @ "Entrance" [ sensorId="4" ]
|
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:
|
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 Light
|
||||||
* Dimmable Plug-in Unit
|
- Dimmable Plug-in Unit
|
||||||
* Colour Light
|
- Colour Light
|
||||||
* Extended Colour Light
|
- Extended Colour Light
|
||||||
* Colour Temperature Light
|
- Colour Temperature Light
|
||||||
|
|
||||||
| Parameter | Description |
|
| Parameter | Description |
|
||||||
|-----------|-------------------------------------------------------------------------------|
|
|-----------|-------------------------------------------------------------------------------|
|
||||||
| lightId | Number of the device provided by the Hue Bridge. **Mandatory** |
|
| 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") |
|
| fadetime | Fade time in Milliseconds to a new state (min="0", step="100", default="400") |
|
||||||
|
|
||||||
|
|
||||||
### Groups
|
### Groups
|
||||||
|
|
||||||
The groups are identified by the number that the Hue Bridge assigns to them.
|
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
|
Thus, all it needs for manual configuration is this single value like
|
||||||
|
|
||||||
```
|
```java
|
||||||
group kitchen-bulbs "Kitchen Lamps" @ "Kitchen" [ groupId="1" ]
|
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** |
|
| 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") |
|
| fadetime | Fade time in Milliseconds to a new state (min="0", step="100", default="400") |
|
||||||
|
|
||||||
|
|
||||||
## Channels
|
## Channels
|
||||||
|
|
||||||
The devices support some of the following 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 3 | Button 3 | 17 |
|
||||||
| Button 4 | Button 4 | 18 |
|
| Button 4 | Button 4 | 18 |
|
||||||
|
|
||||||
|
|
||||||
## Rule Actions
|
## Rule Actions
|
||||||
|
|
||||||
This binding includes a rule action, which allows to change a light channel with a specific fading time from within rules.
|
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:
|
### demo.things:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge hue:bridge:1 "Hue Bridge" [ ipAddress="192.168.0.64" ] {
|
Bridge hue:bridge:1 "Hue Bridge" [ ipAddress="192.168.0.64" ] {
|
||||||
0210 bulb1 "Lamp 1" @ "Kitchen" [ lightId="1" ]
|
0210 bulb1 "Lamp 1" @ "Kitchen" [ lightId="1" ]
|
||||||
0220 bulb2 "Lamp 2" @ "Kitchen" [ lightId="2" ]
|
0220 bulb2 "Lamp 2" @ "Kitchen" [ lightId="2" ]
|
||||||
|
@ -278,7 +275,7 @@ Bridge hue:bridge:1 "Hue Bridge" [ ipAddress="192.168
|
||||||
|
|
||||||
### demo.items:
|
### demo.items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
// Bulb1
|
// Bulb1
|
||||||
Switch Light1_Toggle { channel="hue:0210:1:bulb1:color" }
|
Switch Light1_Toggle { channel="hue:0210:1:bulb1:color" }
|
||||||
Dimmer Light1_Dimmer { 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:
|
### demo.sitemap:
|
||||||
|
|
||||||
```
|
```perl
|
||||||
sitemap demo label="Main Menu"
|
sitemap demo label="Main Menu"
|
||||||
{
|
{
|
||||||
Frame {
|
Frame {
|
||||||
|
|
|
@ -6,52 +6,51 @@ The Hydrawise binding allows monitoring and control of [Hunter Industries's](htt
|
||||||
|
|
||||||
## Supported Things
|
## Supported Things
|
||||||
|
|
||||||
|
|
||||||
### Account Bridge Thing
|
### 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.
|
An account must be manually added and configured.
|
||||||
|
|
||||||
### Controller Thing
|
### 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.
|
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.
|
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
|
#### Controller Thing Supported Channel Groups
|
||||||
|
|
||||||
| channel group ID |
|
| channel group ID |
|
||||||
|-----------------------------------------------|
|
|-----------------------------------------------|
|
||||||
| [Controller](#Cloud-Controller-Channel-Group) |
|
| [Controller](#controller-thing-1) |
|
||||||
| [Zones](#Zone-Channel-Group) |
|
| [Zones](#zone-channel-group) |
|
||||||
| [All Zones](#All-Zones-Channel-Group) |
|
| [All Zones](#all-zones-channel-group) |
|
||||||
| [Sensor](#Sensor-Channel-Group) |
|
| [Sensor](#sensor-channel-group) |
|
||||||
| [Forecast](#Sensor-Channel-Group) |
|
| [Forecast](#forecast-channel-group) |
|
||||||
|
|
||||||
### Local Thing
|
### Local Thing
|
||||||
|
|
||||||
The Local Thing type uses an undocumented API that allows direct HTTP access to an irrigation controller on the user's network.
|
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.
|
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.
|
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.
|
- 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.
|
- 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
|
#### Local Thing Supported Channel Groups
|
||||||
|
|
||||||
| channel group ID |
|
| channel group ID |
|
||||||
|---------------------------------------|
|
|---------------------------------------|
|
||||||
| [Zones](#Zone-Channel-Group) |
|
| [Zones](#zone-channel-group) |
|
||||||
| [All Zones](#All-Zones-Channel-Group) |
|
| [All Zones](#all-zones-channel-group) |
|
||||||
|
|
||||||
## Thing Configuration
|
## Thing Configuration
|
||||||
|
|
||||||
|
@ -71,7 +70,6 @@ Use Cases
|
||||||
|--------------------|---------|----------|----------------------|
|
|--------------------|---------|----------|----------------------|
|
||||||
| controllerId | Integer | True | ID of the controller |
|
| controllerId | Integer | True | ID of the controller |
|
||||||
|
|
||||||
|
|
||||||
### Local Thing
|
### Local Thing
|
||||||
|
|
||||||
| Configuration Name | type | required | Comments |
|
| 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 |
|
| allzones | commands for all zones |
|
||||||
|
|
||||||
|
|
||||||
### Channels
|
### Channels
|
||||||
|
|
||||||
Channels uses across zones, sensors and forecasts
|
Channels uses across zones, sensors and forecasts
|
||||||
|
|
||||||
| channel ID | type | Groups | description | Read Write |
|
| channel ID | type | Groups | description | Read Write |
|
||||||
|----------------------------|--------------------|----------------|-----------------------------------------------|------------|
|
|----------------------------|--------------------|----------------|-----------------------------------------------|------------|
|
||||||
| name | String | zone, sensor | Descriptive name | R |
|
| 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 |
|
| precipitation | Number | forecast | Daily precipitation amount | R |
|
||||||
| probabilityofprecipitation | Number | forecast | Daily probability of precipitation percentage | R |
|
| probabilityofprecipitation | Number | forecast | Daily probability of precipitation percentage | R |
|
||||||
|
|
||||||
|
|
||||||
## Full Example
|
## Full Example
|
||||||
|
|
||||||
```
|
```java
|
||||||
Group Sprinkler "Sprinkler"
|
Group Sprinkler "Sprinkler"
|
||||||
Group SprinklerController "Controller" (Sprinkler)
|
Group SprinklerController "Controller" (Sprinkler)
|
||||||
Group SprinklerZones "Zones" (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"}
|
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"}
|
String SprinklerZone3Icon "3 Left of Drive Lawn Icon" (SprinklerZone3) {channel="hydrawise:controller:myaccount:123456:zone3#icon"}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -5,8 +5,8 @@ Further details on the Hyperion project can be found [here.](https://hyperion-pr
|
||||||
|
|
||||||
## Supported Things
|
## Supported Things
|
||||||
|
|
||||||
* Hyperion Server (may be referred to as V1)
|
- Hyperion Server (may be referred to as V1)
|
||||||
* Hyperion.ng Server
|
- Hyperion.ng Server
|
||||||
|
|
||||||
## Binding Configuration
|
## 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 |
|
| port | Integer | Y | 19444 |
|
||||||
| priority | Integer | Y | 50 |
|
| priority | Integer | Y | 50 |
|
||||||
| poll_frequency | Integer | Y | 15 |
|
| 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
|
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]
|
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 |
|
| priority | Integer | Y | 50 |
|
||||||
| poll_frequency | Integer | Y | 15 |
|
| poll_frequency | Integer | Y | 15 |
|
||||||
| origin | String | Y | "openHAB" |
|
| origin | String | Y | "openHAB" |
|
||||||
|
|
||||||
To manually configure a Hyperion.ng Server you must specify the following parameters: host, port, priority, polling frequency and origin.
|
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
|
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"]
|
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):
|
### Hyperion Server (V1):
|
||||||
|
|
||||||
```
|
```java
|
||||||
Dimmer Brightness "Brightness [%s]" {channel="hyperion:serverV1:myServer:brightness"}
|
Dimmer Brightness "Brightness [%s]" {channel="hyperion:serverV1:myServer:brightness"}
|
||||||
Color MyColor "Color" {channel="hyperion:serverV1:myServer:color"}
|
Color MyColor "Color" {channel="hyperion:serverV1:myServer:color"}
|
||||||
String Effect "Current effect [%s]" {channel="hyperion:serverV1:myServer:effect"}
|
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
|
### Hyperion.ng Server
|
||||||
|
|
||||||
```
|
```java
|
||||||
Dimmer Brightness "Brightness [%s]" {channel="hyperion:serverNG:myServer:brightness"}
|
Dimmer Brightness "Brightness [%s]" {channel="hyperion:serverNG:myServer:brightness"}
|
||||||
Color MyColor "Color" {channel="hyperion:serverNG:myServer:color"}
|
Color MyColor "Color" {channel="hyperion:serverNG:myServer:color"}
|
||||||
String Effect "Current effect [%s]" {channel="hyperion:serverNG:myServer:effect"}
|
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 BoblightEnabled "Boblight" {channel="hyperion:serverNG:myServer:boblightserver"}
|
||||||
Switch GrabberEnabled "Grabber" {channel="hyperion:serverNG:myServer:grabber"}
|
Switch GrabberEnabled "Grabber" {channel="hyperion:serverNG:myServer:grabber"}
|
||||||
Switch V4lEnabled "V4L" {channel="hyperion:serverNG:myServer:v4l"}
|
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
|
## Example Sitemap
|
||||||
|
|
||||||
Using the above things channels and items
|
Using the above things channels and items
|
||||||
Sitemap:
|
Sitemap:
|
||||||
|
|
||||||
```
|
```perl
|
||||||
sitemap demo label="Main Menu" {
|
sitemap demo label="Main Menu" {
|
||||||
Frame {
|
Frame {
|
||||||
// serverV1 & serverNG
|
// serverV1 & serverNG
|
||||||
|
|
|
@ -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.
|
[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
|
## 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
|
## Setup of the binding
|
||||||
|
|
||||||
You can add the Iammeter device via the openHAB UI manually.
|
You can add the Iammeter device via the openHAB UI manually.
|
||||||
|
|
||||||
|
|
||||||
## Available channels
|
## Available channels
|
||||||
|
|
||||||
The following table is taken from the official manual and contains all 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 |
|
| importenergy_a | kWh | Energy consumption from gird | Number:Energy |
|
||||||
| exportgrid_a | kWh | Energy export to grid | Number:Energy |
|
| exportgrid_a | kWh | Energy export to grid | Number:Energy |
|
||||||
|
|
||||||
|
|
||||||
Three-phase energy meter (WEM3080T)
|
Three-phase energy meter (WEM3080T)
|
||||||
| Name | Unit | Description | Type |
|
| Name | Unit | Description | Type |
|
||||||
|----------------|------|-----------------------|--------------------------|
|
|----------------|------|-----------------------|--------------------------|
|
||||||
|
@ -50,8 +48,6 @@ Three-phase energy meter (WEM3080T)
|
||||||
| frequency_c | kWh | C phase frequency | Number:Frequency |
|
| frequency_c | kWh | C phase frequency | Number:Frequency |
|
||||||
| pf_c | kWh | C phase power factor | Number |
|
| pf_c | kWh | C phase power factor | Number |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## More information
|
## 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).
|
||||||
|
|
|
@ -1,32 +1,30 @@
|
||||||
# iAquaLink Binding
|
# iAquaLink Binding
|
||||||
|
|
||||||
This binding supports:
|
This binding supports:
|
||||||
|
|
||||||
* Any iAquaLink based pool system
|
- Any iAquaLink based pool system
|
||||||
* Reading auxiliary, temperature, pump, chemistry and system values
|
- Reading auxiliary, temperature, pump, chemistry and system values
|
||||||
* Controlling system, auxiliary, lighting, and temperature settings
|
- Controlling system, auxiliary, lighting, and temperature settings
|
||||||
|
|
||||||
## Binding Configuration
|
## Binding Configuration
|
||||||
|
|
||||||
The binding requires the iAquaLink user name and password.
|
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.
|
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
|
## Manual Thing Configuration
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing iaqualink:controller:pool [ userName="user@domain.com", password="somepassword"]
|
Thing iaqualink:controller:pool [ userName="user@domain.com", password="somepassword"]
|
||||||
```
|
```
|
||||||
|
|
||||||
## Channels
|
## Channels
|
||||||
|
|
||||||
|
|
||||||
The following is a list of supported 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 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 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).
|
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).
|
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 |
|
| "13" | | Fat Tuesday | | | Hold |
|
||||||
| "14" | | Disco Tech | | | Recall |
|
| "14" | | Disco Tech | | | Recall |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Sample Items
|
## Sample Items
|
||||||
|
|
||||||
```
|
```java
|
||||||
Group Group_AquaLink
|
Group Group_AquaLink
|
||||||
String AquaLinkStatus "Status [%s]" (Group_AquaLink) {channel="iaqualink:controller:pool:status"}
|
String AquaLinkStatus "Status [%s]" (Group_AquaLink) {channel="iaqualink:controller:pool:status"}
|
||||||
Switch AquaLinkBoosterPump "Booster Pump" (Group_AquaLink) {channel="iaqualink:controller:pool:aux_1"}
|
Switch AquaLinkBoosterPump "Booster Pump" (Group_AquaLink) {channel="iaqualink:controller:pool:aux_1"}
|
||||||
|
|
|
@ -45,7 +45,7 @@ Each `eventfilter` thing requires a bridge of type `calendar` and has following
|
||||||
|
|
||||||
## Channels
|
## Channels
|
||||||
|
|
||||||
### Channels for `calendar`
|
### Channels for `calendar`
|
||||||
|
|
||||||
The channels of `calendar` describe the current and the next forthcoming event.
|
The channels of `calendar` describe the current and the next forthcoming event.
|
||||||
They are all read-only.
|
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:
|
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#begin`
|
||||||
* `result_0#end`
|
- `result_0#end`
|
||||||
* `result_0#title`
|
- `result_0#title`
|
||||||
* `result_1#begin`
|
- `result_1#begin`
|
||||||
* `result_1#end`
|
- `result_1#end`
|
||||||
* `result_1#title`
|
- `result_1#title`
|
||||||
* `result_2#begin`
|
- `result_2#begin`
|
||||||
* `result_2#end`
|
- `result_2#end`
|
||||||
* `result_2#title`
|
- `result_2#title`
|
||||||
|
|
||||||
## Command Tags
|
## Command Tags
|
||||||
|
|
||||||
|
@ -91,11 +91,11 @@ A command tag must consist of at least three fields.
|
||||||
A fourth field is optional.
|
A fourth field is optional.
|
||||||
The syntax is as follows:
|
The syntax is as follows:
|
||||||
|
|
||||||
```
|
```text
|
||||||
BEGIN:Item_Name:New_State_Value
|
BEGIN:Item_Name:New_State_Value
|
||||||
BEGIN:Item_Name:New_State_Value:Authorization_Code
|
BEGIN:Item_Name:New_State_Value:Authorization_Code
|
||||||
END:Item_Name:New_State_Value
|
END:Item_Name:New_State_Value
|
||||||
END:Item_Name:New_State_Value:Authorization_Code
|
END:Item_Name:New_State_Value:Authorization_Code
|
||||||
```
|
```
|
||||||
|
|
||||||
The first field **must** be either `BEGIN` or `END`.
|
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.
|
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.
|
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.
|
- 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..
|
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 ]
|
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 ]
|
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:
|
Link the channels as usual to items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
String current_event_name "current event [%s]" <calendar> { channel="icalendar:calendar:deadbeef:current_title" }
|
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" }
|
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" }
|
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:
|
Sitemap just showing the current event and the beginning of the next:
|
||||||
|
|
||||||
```
|
```perl
|
||||||
sitemap local label="My Calendar Sitemap" {
|
sitemap local label="My Calendar Sitemap" {
|
||||||
Frame label="events" {
|
Frame label="events" {
|
||||||
Text item=current_event_name label="current event [%s]"
|
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`):
|
Command tags in a calendar event (in the case that configuration parameter `authorizationCode` equals `abc`):
|
||||||
|
|
||||||
```
|
```text
|
||||||
BEGIN:Calendar_Test_Temperature:12.3°C:abc
|
BEGIN:Calendar_Test_Temperature:12.3°C:abc
|
||||||
END:Calendar_Test_Temperature:23.4°F: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):
|
Command tags in a calendar event (in the case that configuration parameter `authorizationCode` is not set):
|
||||||
|
|
||||||
```
|
```text
|
||||||
BEGIN:Calendar_Test_Switch:ON
|
BEGIN:Calendar_Test_Switch:ON
|
||||||
END:Calendar_Test_Switch:OFF
|
END:Calendar_Test_Switch:OFF
|
||||||
```
|
```
|
||||||
|
|
|
@ -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 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
|
### icloud.items
|
||||||
|
|
||||||
|
|
|
@ -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 |
|
| 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 |
|
| 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
|
## Channels
|
||||||
|
|
||||||
List of default controller channels.
|
List of default controller channels.
|
||||||
|
@ -75,10 +74,10 @@ Channel parameters:
|
||||||
There are several ways to find the correct resource id's:
|
There are several ways to find the correct resource id's:
|
||||||
|
|
||||||
1. Find directly from your IHC / ELKO LS project file (.vis file).
|
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.
|
1. 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. 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.
|
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.
|
Conversion can be done e.g. via Calculator in Windows or Mac.
|
||||||
|
|
||||||
|
@ -131,24 +130,23 @@ Supported commands:
|
||||||
| DOWN | Rollershutter |
|
| DOWN | Rollershutter |
|
||||||
| TOGGLE | Switch |
|
| TOGGLE | Switch |
|
||||||
|
|
||||||
All commands but `TOGGLE` are standard openHAB commands.
|
All commands but `TOGGLE` are standard openHAB commands.
|
||||||
When `TOGGLE` command is specified, profile will toggle switch item state.
|
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.
|
E.g. if item state has been OFF, profile will send ON command to item.
|
||||||
|
|
||||||
Example:
|
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] }
|
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).
|
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
|
## Examples
|
||||||
|
|
||||||
### example.things
|
### example.things
|
||||||
|
|
||||||
```xtend
|
```java
|
||||||
ihc:controller:elko [ hostname="192.168.1.2", username="openhab", password="secret", timeout=5000, loadProjectFile=true, createChannelsAutomatically=false, tlsVersion="TLSv1" ] {
|
ihc:controller:elko [ hostname="192.168.1.2", username="openhab", password="secret", timeout=5000, loadProjectFile=true, createChannelsAutomatically=false, tlsVersion="TLSv1" ] {
|
||||||
Channels:
|
Channels:
|
||||||
Type switch : my_test_switch "My Test Switch" [ resourceId=3988827 ]
|
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
|
### example.items
|
||||||
|
|
||||||
```xtend
|
```java
|
||||||
Switch test_switch "Test Switch" { channel="ihc:controller:elko:my_test_switch" }
|
Switch test_switch "Test Switch" { channel="ihc:controller:elko:my_test_switch" }
|
||||||
Switch test_contact "Test Contact" { channel="ihc:controller:elko:my_test_contact" }
|
Switch test_contact "Test Contact" { channel="ihc:controller:elko:my_test_contact" }
|
||||||
Number test_number "Test Number" { channel="ihc:controller:elko:my_test_number" }
|
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
|
### example.rules
|
||||||
|
|
||||||
```xtend
|
```java
|
||||||
rule "My test trigger test rule"
|
rule "My test trigger test rule"
|
||||||
when
|
when
|
||||||
Channel 'ihc:controller:elko:my_test_trigger' triggered LONG_PRESS
|
Channel 'ihc:controller:elko:my_test_trigger' triggered LONG_PRESS
|
||||||
|
|
|
@ -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.
|
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.
|
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.
|
_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.*
|
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
|
## Supported things
|
||||||
|
|
||||||
|
@ -123,10 +123,11 @@ Be sure it is connected to the Internet.
|
||||||
Authorization is done as oauth2 workflow with the innogy API.
|
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):
|
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
|
`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)
|
- [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)
|
||||||
* [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)
|
- [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.
|
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.
|
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.
|
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:
|
The innogy SmartHome Controller (SHC) can be configured using the following syntax:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge innogysmarthome:bridge:<bridge-id> []
|
Bridge innogysmarthome:bridge:<bridge-id> []
|
||||||
```
|
```
|
||||||
|
|
||||||
Then the required authcode is retrieved and set **automatically**:
|
Then the required authcode is retrieved and set **automatically**:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge innogysmarthome:bridge:<bridge-id> [ authcode="<authcode>" ]
|
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.
|
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!
|
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:
|
All other innogy devices can be added using the following syntax:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing WDS <thing-id> "<thing-name>" @ "<room-name>" [ id="<the-device-id>" ]
|
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:
|
However, a full example .things configuration look like this:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge innogysmarthome:bridge:mybride "innogy SmartHome Controller" {
|
Bridge innogysmarthome:bridge:mybride "innogy SmartHome Controller" {
|
||||||
Thing ISD2 myDimmer "Dimmer Kitchen" @ "Kitchen" [ id="<device-id>" ]
|
Thing ISD2 myDimmer "Dimmer Kitchen" @ "Kitchen" [ id="<device-id>" ]
|
||||||
Thing ISS2 myLightSwitch "Light Livingroom" @ "Livingroom" [ 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:
|
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"}
|
Contact myWindowContact "Kitchen" <window> {channel="innogysmarthome:WDS:mybridge:myWindowContact:contact"}
|
||||||
Switch myWindowContactBattery "Battery low" <battery> {channel="innogysmarthome:WDS:mybridge:myWindowContact:battery_low"}
|
Switch myWindowContactBattery "Battery low" <battery> {channel="innogysmarthome:WDS:mybridge:myWindowContact:battery_low"}
|
||||||
Number myHeatingTemp "Bath [%.1f °C]" <temperature> {channel="innogysmarthome:RST:mybridge:myHeating:temperature"}
|
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
|
The site configuration works a usual. One special example
|
||||||
|
|
||||||
```
|
```perl
|
||||||
sitemap default label="Home" {
|
sitemap default label="Home" {
|
||||||
Frame {
|
Frame {
|
||||||
Text item=myHeatingTemp label="Temperature"
|
Text item=myHeatingTemp label="Temperature"
|
||||||
|
@ -221,13 +222,13 @@ sitemap default label="Home" {
|
||||||
Pushbuttons provide trigger channels, that can only be used in rules.
|
Pushbuttons provide trigger channels, that can only be used in rules.
|
||||||
Here is an example rule:
|
Here is an example rule:
|
||||||
|
|
||||||
```
|
```java
|
||||||
rule "Button triggered rule"
|
rule "Button triggered rule"
|
||||||
when
|
when
|
||||||
Channel 'innogysmarthome:WSC2:mybridge:myPushButton:button1' triggered PRESSED
|
Channel 'innogysmarthome:WSC2:mybridge:myPushButton:button1' triggered PRESSED
|
||||||
then
|
then
|
||||||
// do something...
|
// do something...
|
||||||
logInfo("testlogger", "Button 1 pressed")
|
logInfo("testlogger", "Button 1 pressed")
|
||||||
end
|
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:
|
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.
|
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.
|
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.
|
1. 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. 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)
|
(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".
|
The default password of the certificate store is "changeit".
|
||||||
|
|
|
@ -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.
|
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 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.
|
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.
|
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
|
## Thing Configuration
|
||||||
|
|
||||||
#### Network Configuration
|
### Network Configuration
|
||||||
|
|
||||||
The Insteon PLM or hub is configured with the following parameters:
|
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.
|
>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:
|
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 |
|
| update | Switch | Update |
|
||||||
| watts | Number:Power | Watts |
|
| watts | Number:Power | Watts |
|
||||||
|
|
||||||
|
|
||||||
## Full Example
|
## Full Example
|
||||||
|
|
||||||
Sample things file:
|
Sample things file:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge insteon:network:home [port="/dev/ttyUSB0"] {
|
Bridge insteon:network:home [port="/dev/ttyUSB0"] {
|
||||||
Thing device 22F8A8 [address="22.F8.A8", productKey="F00.00.15"] {
|
Thing device 22F8A8 [address="22.F8.A8", productKey="F00.00.15"] {
|
||||||
Channels:
|
Channels:
|
||||||
|
@ -226,7 +225,7 @@ Bridge insteon:network:home [port="/dev/ttyUSB0"] {
|
||||||
|
|
||||||
Sample items file:
|
Sample items file:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Switch switch1 { channel="insteon:device:home:243141:switch" }
|
Switch switch1 { channel="insteon:device:home:243141:switch" }
|
||||||
Dimmer dimmer1 { channel="insteon:device:home:238F55:dimmer" }
|
Dimmer dimmer1 { channel="insteon:device:home:238F55:dimmer" }
|
||||||
Dimmer dimmer2 { channel="insteon:device:home:23B0D9: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.
|
Enter `openhab:insteon` or `insteon` in the console and you will get a list of available commands.
|
||||||
The `openhab:` prefix is optional:
|
The `openhab:` prefix is optional:
|
||||||
|
|
||||||
```
|
```shell
|
||||||
openhab> openhab:insteon
|
openhab> openhab:insteon
|
||||||
Usage: openhab:insteon display_devices - display devices that are online, along with available channels
|
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
|
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
|
## 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.
|
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.
|
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.
|
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".
|
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.
|
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.
|
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:
|
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 thermostatCoolPoint "cool point [%.1f °F]" { channel="insteon:device:home:32F422:coolSetPoint" }
|
||||||
Number thermostatHeatPoint "heat point [%.1f °F]" { channel="insteon:device:home:32F422:heatSetPoint" }
|
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:
|
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" }
|
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:
|
Here is how to configure a simple dimmer (2477D) in the .items file:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Dimmer kitchenChandelier "kitchen chandelier" { channel="insteon:device:home:AABBCC:dimmer" }
|
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 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:
|
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"] {
|
Bridge insteon:network:home [port="/dev/ttyUSB0"] {
|
||||||
Thing device AABBCC [address="AA.BB.CC", productKey="F00.00.11"] {
|
Thing device AABBCC [address="AA.BB.CC", productKey="F00.00.11"] {
|
||||||
Channels:
|
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 d1 "dimmer 1" { channel="insteon:device:home:AABBCC:dimmer"}
|
||||||
Dimmer d2 "dimmer 2" { channel="insteon:device:home:AABBCD:loadDimmer"}
|
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:
|
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 fOutTop "Front Outlet Top" <socket> { channel="insteon:device:home:AABBCC:topOutlet" }
|
||||||
Switch fOutBot "Front Outlet Bottom" <socket> { channel="insteon:device:home:AABBCC:bottomOutlet" }
|
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 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:
|
The modem's link database (see [Insteon Terminal](https://github.com/pfrommerd/insteon-terminal)) should look like this:
|
||||||
|
|
||||||
```
|
```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: 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: 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: 03 data: 02 2c 41
|
||||||
0000 xx.xx.xx xx.xx.xx RESP 10100010 group: 04 data: 02 2c 41
|
0000 xx.xx.xx xx.xx.xx RESP 10100010 group: 04 data: 02 2c 41
|
||||||
```
|
```
|
||||||
|
|
||||||
**Items**
|
**Items**
|
||||||
This goes into the items file:
|
This goes into the items file:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Switch miniRemoteButtonA "mini remote button a" { channel="insteon:device:home:AABBCC:buttonA", autoupdate="false" }
|
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 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 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" }
|
Switch miniRemoteButtonD "mini remote button d" { channel="insteon:device:home:AABBCC:buttonD", autoupdate="false" }
|
||||||
```
|
```
|
||||||
|
|
||||||
**Sitemap**
|
**Sitemap**
|
||||||
This goes into the sitemap file:
|
This goes into the sitemap file:
|
||||||
|
|
||||||
```
|
```perl
|
||||||
Switch item=miniRemoteButtonA label="mini remote button a" mappings=[ OFF="Off", ON="On"]
|
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=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=miniRemoteButtonC label="mini remote button c" mappings=[ OFF="Off", ON="On"]
|
||||||
Switch item=miniRemoteButtonD label="mini remote button d" 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.
|
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.
|
Create a contact.map file in the transforms directory as described elsewhere in this document.
|
||||||
Then create entries in the .items file like this:
|
Then create entries in the .items file like this:
|
||||||
|
|
||||||
**Items**
|
#### Items
|
||||||
|
|
||||||
```
|
```java
|
||||||
Contact motionSensor "motion sensor [MAP(contact.map):%s]" { channel="insteon:device:home:AABBCC:contact"}
|
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 motionSensorBatteryLevel "motion sensor battery level" { channel="insteon:device:home:AABBCC:batteryLevel" }
|
||||||
Number motionSensorLightLevel "motion sensor light level" { channel="insteon:device:home:AABBCC:lightLevel" }
|
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.
|
This will give you a contact, the battery level, and the light level.
|
||||||
The motion sensor II includes three additional channels:
|
The motion sensor II includes three additional channels:
|
||||||
|
|
||||||
**Items**
|
```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 motionSensorBatteryPercent "motion sensor battery percent" { channel="insteon:device:home:AABBCC:batteryPercent" }
|
Number motionSensorTemperatureLevel "motion sensor temperature level" { channel="insteon:device:home:AABBCC:temperatureLevel" }
|
||||||
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.
|
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.
|
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:
|
The key in the JSON object is `heartbeatOnly` and the value is a boolean:
|
||||||
|
|
||||||
**Things**
|
#### Things
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge insteon:network:home [port="/dev/ttyUSB0"] {
|
Bridge insteon:network:home [port="/dev/ttyUSB0"] {
|
||||||
Thing device AABBCC [address="AA.BB.CC", productKey="F00.00.24", deviceConfig="{'heartbeatOnly': true}"]
|
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:
|
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 battery powered: `temperature = 0.73 * motionSensorTemperatureLevel - 20.53`
|
||||||
* If the device is USB powered: `temperature = 0.72 * motionSensorTemperatureLevel - 24.61`
|
- 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.
|
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.
|
Link such that the modem is a responder to the motion sensor.
|
||||||
Create a contact.map file in the transforms directory like the following:
|
Create a contact.map file in the transforms directory like the following:
|
||||||
|
|
||||||
```
|
```text
|
||||||
OPEN=open
|
OPEN=open
|
||||||
CLOSED=closed
|
CLOSED=closed
|
||||||
-=unknown
|
-=unknown
|
||||||
```
|
```
|
||||||
|
|
||||||
**Items**
|
**Items**
|
||||||
Then create entries in the .items file like this:
|
Then create entries in the .items file like this:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Contact doorSensor "Door sensor [MAP(contact.map):%s]" { channel="insteon:device:home:AABBCC:contact" }
|
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" }
|
Number doorSensorBatteryLevel "Door sensor battery level [%.1f]" { channel="insteon:device:home:AABBCC:batteryLevel" }
|
||||||
```
|
```
|
||||||
|
|
||||||
This will give you a contact and the battery level.
|
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**
|
**Items**
|
||||||
Put something like this into your .items file:
|
Put something like this into your .items file:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Switch doorLock "Front Door [MAP(lock.map):%s]" { channel="insteon:device:home:AABBCC:switch" }
|
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:
|
and create a file "lock.map" in the transforms directory with these entries:
|
||||||
|
|
||||||
```
|
```text
|
||||||
ON=Lock
|
ON=Lock
|
||||||
OFF=Unlock
|
OFF=Unlock
|
||||||
-=unknown
|
-=unknown
|
||||||
```
|
```
|
||||||
|
|
||||||
### I/O Linc (garage door openers)
|
### 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":
|
Add this map into your transforms directory as "contact.map":
|
||||||
|
|
||||||
```
|
```text
|
||||||
OPEN=open
|
OPEN=open
|
||||||
CLOSED=closed
|
CLOSED=closed
|
||||||
-=unknown
|
-=unknown
|
||||||
```
|
```
|
||||||
|
|
||||||
**Items**
|
**Items**
|
||||||
Along with this into your .items file:
|
Along with this into your .items file:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Switch garageDoorOpener "garage door opener" <garagedoor> { channel="insteon:device:home:AABBCC:switch", autoupdate="false" }
|
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" }
|
Contact garageDoorContact "garage door contact [MAP(contact.map):%s]" { channel="insteon:device:home:AABBCC:contact" }
|
||||||
```
|
```
|
||||||
|
|
||||||
**Sitemap**
|
**Sitemap**
|
||||||
To make it visible in the GUI, put this into your sitemap file:
|
To make it visible in the GUI, put this into your sitemap file:
|
||||||
|
|
||||||
```
|
```perl
|
||||||
Switch item=garageDoorOpener label="garage door opener" mappings=[ ON="OPEN/CLOSE"]
|
Switch item=garageDoorOpener label="garage door opener" mappings=[ ON="OPEN/CLOSE"]
|
||||||
Text item=garageDoorContact
|
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.
|
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.
|
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.
|
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).
|
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.
|
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.
|
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.
|
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
|
#### Keypad Switches
|
||||||
|
|
||||||
**Items**
|
##### Items
|
||||||
|
|
||||||
Here is a simple example, just using the load (main) switch:
|
Here is a simple example, just using the load (main) switch:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Switch keypadSwitch "main load" { channel="insteon:device:home:AABBCC:loadSwitch" }
|
Switch keypadSwitch "main load" { channel="insteon:device:home:AABBCC:loadSwitch" }
|
||||||
Number keypadSwitchManualChange "main manual change" { channel="insteon:device:home:AABBCC:loadSwitchManualChange" }
|
Number keypadSwitchManualChange "main manual change" { channel="insteon:device:home:AABBCC:loadSwitchManualChange" }
|
||||||
Switch keypadSwitchFastOnOff "main fast on/off" { channel="insteon:device:home:AABBCC:loadSwitchFastOnOff" }
|
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.
|
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:
|
To make the buttons available, add the following:
|
||||||
|
|
||||||
**Things**
|
###### Things
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge insteon:network:home [port="/dev/ttyUSB0"] {
|
Bridge insteon:network:home [port="/dev/ttyUSB0"] {
|
||||||
Thing device AABBCC [address="AA.BB.CC", productKey="F00.00.15"] {
|
Thing device AABBCC [address="AA.BB.CC", productKey="F00.00.15"] {
|
||||||
Channels:
|
Channels:
|
||||||
|
@ -592,53 +588,53 @@ Bridge insteon:network:home [port="/dev/ttyUSB0"] {
|
||||||
The value after group must either be a number or string.
|
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".
|
The hexadecimal value 0xf3 can either converted to a numeric value 243 or the string value "0xf3".
|
||||||
|
|
||||||
**Items**
|
###### Items
|
||||||
|
|
||||||
```
|
```java
|
||||||
Switch keypadSwitchA "keypad button A" { channel="insteon:device:home:AABBCC:keypadButtonA"}
|
Switch keypadSwitchA "keypad button A" { channel="insteon:device:home:AABBCC:keypadButtonA"}
|
||||||
Switch keypadSwitchB "keypad button B" { channel="insteon:device:home:AABBCC:keypadButtonB"}
|
Switch keypadSwitchB "keypad button B" { channel="insteon:device:home:AABBCC:keypadButtonB"}
|
||||||
Switch keypadSwitchC "keypad button C" { channel="insteon:device:home:AABBCC:keypadButtonC"}
|
Switch keypadSwitchC "keypad button C" { channel="insteon:device:home:AABBCC:keypadButtonC"}
|
||||||
Switch keypadSwitchD "keypad button D" { channel="insteon:device:home:AABBCC:keypadButtonD"}
|
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:
|
The following sitemap will bring the items to life in the GUI:
|
||||||
|
|
||||||
```
|
```perl
|
||||||
Frame label="Keypad" {
|
Frame label="Keypad" {
|
||||||
Switch item=keypadSwitch label="main"
|
Switch item=keypadSwitch label="main"
|
||||||
Switch item=keypadSwitchFastOnOff label="fast on/off"
|
Switch item=keypadSwitchFastOnOff label="fast on/off"
|
||||||
Switch item=keypadSwitchManualChange label="manual change" mappings=[ 0="DOWN", 1="STOP", 2="UP"]
|
Switch item=keypadSwitchManualChange label="manual change" mappings=[ 0="DOWN", 1="STOP", 2="UP"]
|
||||||
Switch item=keypadSwitchA label="button A"
|
Switch item=keypadSwitchA label="button A"
|
||||||
Switch item=keypadSwitchB label="button B"
|
Switch item=keypadSwitchB label="button B"
|
||||||
Switch item=keypadSwitchC label="button C"
|
Switch item=keypadSwitchC label="button C"
|
||||||
Switch item=keypadSwitchD label="button D"
|
Switch item=keypadSwitchD label="button D"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Keypad Dimmers
|
#### Keypad Dimmers
|
||||||
|
|
||||||
The keypad dimmers are like keypad switches, except that the main load is dimmable.
|
The keypad dimmers are like keypad switches, except that the main load is dimmable.
|
||||||
|
|
||||||
**Items**
|
##### Items
|
||||||
|
|
||||||
```
|
```java
|
||||||
Dimmer keypadDimmer "dimmer" { channel="insteon:device:home:AABBCC:loadDimmer" }
|
Dimmer keypadDimmer "dimmer" { channel="insteon:device:home:AABBCC:loadDimmer" }
|
||||||
Switch keypadDimmerButtonA "keypad dimmer button A [%d %%]" { channel="insteon:device:home:AABBCC:keypadButtonA" }
|
Switch keypadDimmerButtonA "keypad dimmer button A [%d %%]" { channel="insteon:device:home:AABBCC:keypadButtonA" }
|
||||||
```
|
```
|
||||||
|
|
||||||
**Sitemap**
|
##### Sitemap
|
||||||
|
|
||||||
```
|
```perl
|
||||||
Slider item=keypadDimmer switchSupport
|
Slider item=keypadDimmer switchSupport
|
||||||
Switch item=keypadDimmerButtonA label="buttonA"
|
Switch item=keypadDimmerButtonA label="buttonA"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Thermostats
|
### Thermostats
|
||||||
|
|
||||||
The thermostat (2441TH) is one of the most complex Insteon devices available.
|
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.
|
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.
|
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.
|
The linking process is not difficult but needs some persistence.
|
||||||
Again, refer to the [Insteon Terminal](https://github.com/pfrommerd/insteon-terminal) documentation.
|
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:
|
This is an example of what to put into your .items file:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Number thermostatCoolPoint "cool point [%.1f °F]" { channel="insteon:device:home:AABBCC:coolSetPoint" }
|
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 thermostatHeatPoint "heat point [%.1f °F]" { channel="insteon:device:home:AABBCC:heatSetPoint" }
|
||||||
Number thermostatSystemMode "system mode [%d]" { channel="insteon:device:home:AABBCC:systemMode" }
|
Number thermostatSystemMode "system mode [%d]" { channel="insteon:device:home:AABBCC:systemMode" }
|
||||||
Number thermostatFanMode "fan mode [%d]" { channel="insteon:device:home:AABBCC:fanMode" }
|
Number thermostatFanMode "fan mode [%d]" { channel="insteon:device:home:AABBCC:fanMode" }
|
||||||
Number thermostatIsHeating "is heating [%d]" { channel="insteon:device:home:AABBCC:isHeating"}
|
Number thermostatIsHeating "is heating [%d]" { channel="insteon:device:home:AABBCC:isHeating"}
|
||||||
Number thermostatIsCooling "is cooling [%d]" { channel="insteon:device:home:AABBCC:isCooling" }
|
Number thermostatIsCooling "is cooling [%d]" { channel="insteon:device:home:AABBCC:isCooling" }
|
||||||
Number:Temperature thermostatTemperature "temperature [%.1f %unit%]" { channel="insteon:device:home:AABBCC:temperature" }
|
Number:Temperature thermostatTemperature "temperature [%.1f %unit%]" { channel="insteon:device:home:AABBCC:temperature" }
|
||||||
Number thermostatHumidity "humidity [%.0f %%]" { channel="insteon:device:home:AABBCC:humidity" }
|
Number thermostatHumidity "humidity [%.0f %%]" { channel="insteon:device:home:AABBCC:humidity" }
|
||||||
```
|
```
|
||||||
|
|
||||||
Add this as well for some more exotic features:
|
Add this as well for some more exotic features:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Number thermostatACDelay "A/C delay [%d min]" { channel="insteon:device:home:AABBCC:acDelay" }
|
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 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 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 thermostatHumidityHigh "humidity high [%d %%]" { channel="insteon:device:home:AABBCC:humidityHigh" }
|
||||||
Number thermostatHumidityLow "humidity low [%d %%]" { channel="insteon:device:home:AABBCC:humidityLow" }
|
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:
|
For the thermostat to display in the GUI, add this to the sitemap file:
|
||||||
|
|
||||||
```
|
```perl
|
||||||
Text item=thermostatTemperature icon="temperature"
|
Text item=thermostatTemperature icon="temperature"
|
||||||
Text item=thermostatHumidity
|
Text item=thermostatHumidity
|
||||||
Setpoint item=thermostatCoolPoint icon="temperature" minValue=63 maxValue=90 step=1
|
Setpoint item=thermostatCoolPoint icon="temperature" minValue=63 maxValue=90 step=1
|
||||||
Setpoint item=thermostatHeatPoint icon="temperature" minValue=50 maxValue=80 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=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=thermostatFanMode label="fan mode" mappings=[ 0="AUTO", 1="ALWAYS ON"]
|
||||||
Switch item=thermostatIsHeating label="is heating" mappings=[ 0="OFF", 1="HEATING"]
|
Switch item=thermostatIsHeating label="is heating" mappings=[ 0="OFF", 1="HEATING"]
|
||||||
Switch item=thermostatIsCooling label="is cooling" mappings=[ 0="OFF", 1="COOLING"]
|
Switch item=thermostatIsCooling label="is cooling" mappings=[ 0="OFF", 1="COOLING"]
|
||||||
Setpoint item=thermostatACDelay minValue=2 maxValue=20 step=1
|
Setpoint item=thermostatACDelay minValue=2 maxValue=20 step=1
|
||||||
Setpoint item=thermostatBacklight minValue=0 maxValue=100 step=1
|
Setpoint item=thermostatBacklight minValue=0 maxValue=100 step=1
|
||||||
Setpoint item=thermostatHumidityHigh 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=thermostatHumidityLow minValue=0 maxValue=100 step=1
|
||||||
Setpoint item=thermostatStage1 minValue=1 maxValue=60 step=1
|
Setpoint item=thermostatStage1 minValue=1 maxValue=60 step=1
|
||||||
```
|
```
|
||||||
|
|
||||||
### Power Meters
|
### 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.
|
You can also manually update the current values from the device and reset the device.
|
||||||
See the example below:
|
See the example below:
|
||||||
|
|
||||||
**Items**
|
#### Items
|
||||||
|
|
||||||
```
|
```java
|
||||||
Number:Power iMeterWatts "iMeter [%d watts]" { channel="insteon:device:home:AABBCC:watts" }
|
Number:Power iMeterWatts "iMeter [%d watts]" { channel="insteon:device:home:AABBCC:watts" }
|
||||||
Number:Energy iMeterKwh "iMeter [%.04f kWh]" { channel="insteon:device:home:AABBCC:kWh" }
|
Number:Energy iMeterKwh "iMeter [%.04f kWh]" { channel="insteon:device:home:AABBCC:kWh" }
|
||||||
Switch iMeterUpdate "iMeter Update" { channel="insteon:device:home:AABBCC:update" }
|
Switch iMeterUpdate "iMeter Update" { channel="insteon:device:home:AABBCC:update" }
|
||||||
Switch iMeterReset "iMeter Reset" { channel="insteon:device:home:AABBCC:reset" }
|
Switch iMeterReset "iMeter Reset" { channel="insteon:device:home:AABBCC:reset" }
|
||||||
```
|
```
|
||||||
|
|
||||||
### Fan Controllers
|
### Fan Controllers
|
||||||
|
|
||||||
Here is an example configuration for a FanLinc module, which has a dimmable light and a variable speed fan:
|
Here is an example configuration for a FanLinc module, which has a dimmable light and a variable speed fan:
|
||||||
|
|
||||||
**Items**
|
#### Items
|
||||||
|
|
||||||
```
|
```java
|
||||||
Dimmer fanLincDimmer "fanlinc dimmer [%d %%]" { channel="insteon:device:home:AABBCC:lightDimmer" }
|
Dimmer fanLincDimmer "fanlinc dimmer [%d %%]" { channel="insteon:device:home:AABBCC:lightDimmer" }
|
||||||
Number fanLincFan "fanlinc fan" { channel="insteon:device:home:AABBCC:fan"}
|
Number fanLincFan "fanlinc fan" { channel="insteon:device:home:AABBCC:fan"}
|
||||||
```
|
```
|
||||||
|
|
||||||
**Sitemap**
|
#### Sitemap
|
||||||
|
|
||||||
```
|
```perl
|
||||||
Slider item=fanLincDimmer switchSupport
|
Slider item=fanLincDimmer switchSupport
|
||||||
Switch item=fanLincFan label="fan speed" mappings=[ 0="OFF", 1="LOW", 2="MEDIUM", 3="HIGH"]
|
Switch item=fanLincFan label="fan speed" mappings=[ 0="OFF", 1="LOW", 2="MEDIUM", 3="HIGH"]
|
||||||
```
|
```
|
||||||
|
|
||||||
### X10 Devices
|
### 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.
|
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`.
|
Further note that X10 devices are addressed with `houseCode.unitCode`, e.g. `A.2`.
|
||||||
|
|
||||||
**Items**
|
#### Items
|
||||||
|
|
||||||
```
|
```java
|
||||||
Switch x10Switch "X10 switch" { channel="insteon:device:home:AABB:switch" }
|
Switch x10Switch "X10 switch" { channel="insteon:device:home:AABB:switch" }
|
||||||
Dimmer x10Dimmer "X10 dimmer" { channel="insteon:device:home:AABB:dimmer" }
|
Dimmer x10Dimmer "X10 dimmer" { channel="insteon:device:home:AABB:dimmer" }
|
||||||
Contact x10Motion "X10 motion" { channel="insteon:device:home:AABB:contact" }
|
Contact x10Motion "X10 motion" { channel="insteon:device:home:AABB:contact" }
|
||||||
```
|
```
|
||||||
|
|
||||||
## Direct Sending of Group Broadcasts (Triggering Scenes)
|
## Direct Sending of Group Broadcasts (Triggering Scenes)
|
||||||
|
|
||||||
The binding can command the modem to send broadcasts to a given Insteon group.
|
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:
|
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"] {
|
Bridge insteon:network:home [port="/dev/ttyUSB0"] {
|
||||||
Thing device AABBCC [address="AA.BB.CC", productKey="0x000045"] {
|
Thing device AABBCC [address="AA.BB.CC", productKey="0x000045"] {
|
||||||
Channels:
|
Channels:
|
||||||
|
@ -758,10 +754,10 @@ Bridge insteon:network:home [port="/dev/ttyUSB0"] {
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**Items**
|
### Items
|
||||||
|
|
||||||
```
|
```java
|
||||||
Switch broadcastOnOff "group on/off" { channel="insteon:device:home:AABBCC:broadcastOnOff#2" }
|
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.
|
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.
|
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:
|
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"] {
|
Bridge insteon:network:home [port="/dev/ttyUSB0"] {
|
||||||
Thing device AABBCC [address="AA.BB.CC", productKey="0x000045", deviceConfig="{'broadcastGroups': [2]}"]
|
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
|
## 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.
|
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.
|
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.
|
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:
|
A typical example would be two dimmers (A and B) in a 3-way configuration:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge insteon:network:home [port="/dev/ttyUSB0"] {
|
Bridge insteon:network:home [port="/dev/ttyUSB0"] {
|
||||||
Thing device AABBCC [address="AA.BB.CC", productKey="F00.00.11"] {
|
Thing device AABBCC [address="AA.BB.CC", productKey="F00.00.11"] {
|
||||||
Channels:
|
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.
|
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:
|
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"] {
|
Bridge insteon:network:home [port="/dev/ttyUSB0"] {
|
||||||
Thing device AABBCC [address="AA.BB.CC", productKey="0x000045"] {
|
Thing device AABBCC [address="AA.BB.CC", productKey="0x000045"] {
|
||||||
Channels:
|
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.
|
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
|
## 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):
|
Example commands to grant openHAB access (adjust for your distribution):
|
||||||
|
|
||||||
````
|
```shell
|
||||||
usermod -a -G dialout openhab
|
usermod -a -G dialout openhab
|
||||||
usermod -a -G lock 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.
|
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.
|
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:
|
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:
|
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>
|
</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.
|
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.
|
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:
|
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`):
|
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
|
```xml
|
||||||
|
@ -885,12 +885,12 @@ In the example below a new feature "MyFeature" is defined, which can then be ref
|
||||||
|
|
||||||
## Known Limitations and Issues
|
## 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.
|
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.
|
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.
|
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".
|
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".
|
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.
|
||||||
|
|
|
@ -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.
|
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
|
## Supported Things
|
||||||
|
|
||||||
This binding only supports one thing type:
|
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 |
|
| password | IntesisHome | Password to login to the local webserver of IntesisHome device |
|
||||||
| port | IntesisBox | TCP port to connect to IntesisBox device, defaults to 3310 |
|
| port | IntesisBox | TCP port to connect to IntesisBox device, defaults to 3310 |
|
||||||
|
|
||||||
|
|
||||||
## Channels
|
## Channels
|
||||||
|
|
||||||
| Channel ID | Item Type | Description | Possible Values |
|
| 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:
|
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: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]
|
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" }
|
Switch ac "Power" { channel="intesis:intesisHome:acOffice:power" }
|
||||||
String acMode "Mode" { channel="intesis:intesisHome:acOffice:mode" }
|
String acMode "Mode" { channel="intesis:intesisHome:acOffice:mode" }
|
||||||
String acFanSpeed "Fan Speed" <fan> { channel="intesis:intesisHome:acOffice:fanSpeed" }
|
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" }
|
String acWifiSignal "Wifi Signal Quality" <qualityofservice> { channel="intesis:intesisBox:acOffice:wifiSignal" }
|
||||||
```
|
```
|
||||||
|
|
||||||
**Sitemap**
|
### Sitemap
|
||||||
|
|
||||||
```intesisHome.sitemap
|
```perl
|
||||||
sitemap intesishome label="My AC control" {
|
sitemap intesishome label="My AC control" {
|
||||||
|
|
||||||
Frame label="Climate" {
|
Frame label="Climate" {
|
||||||
|
|
|
@ -10,12 +10,12 @@ To see what features each brand has implemented from their APIs, please see this
|
||||||
|
|
||||||
## How to Get Help
|
## How to Get Help
|
||||||
|
|
||||||
+ Check this readme for any setup steps for your brand.
|
- Check this readme for any setup steps for your brand.
|
||||||
+ Check if the camera is offline, if so there will be a reason listed.
|
- 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.
|
- 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`.
|
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.
|
- 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.
|
- Only after doing the above ask for help in the forum and create a new thread.
|
||||||
|
|
||||||
## Special Notes for Different Brands
|
## Special Notes for Different Brands
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ Due to many custom firmwares available, you may need to ask the firmware develop
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing ipcamera:generic:Esp32Cam
|
Thing ipcamera:generic:Esp32Cam
|
||||||
[
|
[
|
||||||
ipAddress="192.168.1.181",
|
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.
|
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.
|
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
|
### Dahua
|
||||||
|
|
||||||
|
@ -62,47 +62,47 @@ For MJPEG to work, you need to set the first sub-stream to use MJPEG format for
|
||||||
|
|
||||||
### Foscam
|
### 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.
|
- 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`
|
- 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.
|
- 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.
|
- 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:
|
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.
|
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`
|
1. 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 the information returned by the above URL to create the override settings.
|
||||||
|
|
||||||
An example for a Foscam C2 is...
|
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
|
/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:
|
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
|
/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
|
### 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.
|
- 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.
|
- 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.
|
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
|
### Hikvision NVRs
|
||||||
|
|
||||||
In case your Hikvision NVR does not communicate with the binding, make sure that:
|
In case your Hikvision NVR does not communicate with the binding, make sure that:
|
||||||
|
|
||||||
* ISAPI is enabled in the NVR settings.
|
- ISAPI is enabled in the NVR settings.
|
||||||
* ONVIF is enabled and a user/pass created that match the bindings.
|
- ONVIF is enabled and a user/pass created that match the bindings.
|
||||||
* RTSP is enabled.
|
- 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 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.
|
The older ones use the same URLs just with 'ISAPI' removed.
|
||||||
|
|
||||||
```java
|
```java
|
||||||
|
@ -121,12 +121,12 @@ Thing ipcamera:hikvision:West "West Camera"
|
||||||
|
|
||||||
### Instar
|
### 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.
|
- 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).
|
- 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
|
## 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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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 |
|
| Parameter | Description |
|
||||||
|
@ -202,7 +202,7 @@ If you do not specify any of these, the binding will use the default which shoul
|
||||||
|
|
||||||
## Channels
|
## 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.
|
The channels are kept consistent as much as possible from brand to brand to make upgrading to a different camera easier.
|
||||||
|
|
||||||
| Channel | Type | Description |
|
| 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:
|
To move a camera with this binding you need an ONVIF camera that supports one of the following:
|
||||||
|
|
||||||
+ Absolute movements
|
- Absolute movements
|
||||||
+ Relative movements
|
- Relative movements
|
||||||
+ Continuous movements
|
- Continuous movements
|
||||||
+ Presets
|
- Presets
|
||||||
|
|
||||||
To test your cameras compatibility and also to create some preset locations, use a free program called `ONVIF Device Manager` (ODM for short).
|
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.
|
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.
|
You can create names using the mappings feature of the selection element.
|
||||||
See docs here <https://www.openhab.org/docs/configuration/sitemaps.html#mappings>
|
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.
|
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.
|
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.
|
For sitemaps, the below examples can be used.
|
||||||
|
|
||||||
|
|
||||||
item:
|
item:
|
||||||
|
|
||||||
```java
|
```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:
|
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.
|
- 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.
|
- 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.
|
- 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.
|
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.
|
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.
|
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.
|
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.
|
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:**
|
**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.
|
This is always the best option if it works.
|
||||||
+ Request a snapshot with the URL `http://openhabIP:8080/ipcamera/{cameraUID}/ipcamera.jpg`.
|
- Request a snapshot with the URL `http://openhabIP:8080/ipcamera/{cameraUID}/ipcamera.jpg`.
|
||||||
The IP is for your openHAB server not the camera.
|
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.
|
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.
|
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 `http://openHAB:8080/ipcamera/{cameraUID}/snapshots.mjpeg` to request a stream of snapshots to be delivered in MJPEG format.
|
||||||
+ Use the record GIF action and use a `gifPreroll` value > 0.
|
- Use the 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 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.
|
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.
|
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`
|
`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.
|
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>
|
<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.
|
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>
|
<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/>
|
Visit their site here to learn how <https://ffmpeg.org/>
|
||||||
|
|
||||||
Under Linux, FFmpeg can be installed very easily with this one command.
|
Under Linux, FFmpeg can be installed very easily with this one command.
|
||||||
|
|
||||||
```
|
```shell
|
||||||
sudo apt update && sudo apt install ffmpeg
|
sudo apt update && sudo apt install ffmpeg
|
||||||
```
|
```
|
||||||
|
|
||||||
**IMPORTANT:**
|
**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`.
|
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.
|
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.
|
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:
|
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).
|
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.
|
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.
|
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.
|
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.
|
- **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.
|
- **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.
|
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.
|
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.
|
The idea is to not send lots of pictures if the picture has not changed as doing so only eats up your data plan.
|
||||||
+ **ipcamera.gif** This is small in size and very compatible and handy to use in push notifications, Pushover, Telegram, or emails.
|
- **ipcamera.gif** This is small in size and very compatible and handy to use in push notifications, Pushover, Telegram, or emails.
|
||||||
You can cast it which can be handy to show a moving picture that keeps repeating on a Google/Nest home hub or your wall mounted tablet.
|
You can cast it which can be handy to show a moving picture that keeps repeating on a Google/Nest home hub or your wall mounted tablet.
|
||||||
+ MP4 recordings can be created by the binding and FFmpeg, more on this below.
|
- MP4 recordings can be created by the binding and FFmpeg, more on this below.
|
||||||
|
|
||||||
## MJPEG Streams
|
## 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>
|
<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.
|
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.
|
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.
|
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.
|
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.
|
`-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.
|
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.
|
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
|
## 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.
|
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 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.
|
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.
|
NOTE: The IP is openHAB's not your cameras IP.
|
||||||
|
|
||||||
`http://openHAB:8080/ipcamera/{cameraUID}/snapshots.mjpeg`
|
`http://openHAB:8080/ipcamera/{cameraUID}/snapshots.mjpeg`
|
||||||
|
|
||||||
Use the following to display it in your sitemap.
|
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}/autofps.mjpeg" encoding="mjpeg"
|
||||||
|
|
||||||
Video url="http://openHAB:8080/ipcamera/{cameraUID}/snapshots.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 (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.
|
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.
|
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.
|
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.
|
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:
|
To use the HLS feature, you need to:
|
||||||
|
|
||||||
+ Ensure FFmpeg is installed.
|
- Ensure FFmpeg is installed.
|
||||||
+ For `generic` cameras, you will need to use the config `ffmpegInput` to provide a HTTP or RTSP URL.
|
- 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.
|
- 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
|
### 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.
|
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
|
nano /etc/fstab
|
||||||
```
|
```
|
||||||
|
|
||||||
Enter and save this at the bottom of the file using ctrl X when done.
|
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
|
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):
|
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
|
-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).
|
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
|
-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.
|
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.
|
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
|
-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.
|
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
|
-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.
|
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 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}
|
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:
|
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.
|
The webView URL is that of your openHAB installation.
|
||||||
|
|
||||||
```
|
```java
|
||||||
Webview url="http://192.168.6.4:8080/static/html/file.html" height=5
|
Webview url="http://192.168.6.4:8080/static/html/file.html" height=5
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
```html
|
```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.
|
There are two ways to cast a camera.
|
||||||
|
|
||||||
1. openHAB Cloud Connector and using metadata/tags.
|
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".
|
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.
|
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.
|
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.
|
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.
|
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" ] }
|
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.
|
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
|
items
|
||||||
|
|
||||||
```
|
```java
|
||||||
String KitchenHomeHubPlayURI { channel="chromecast:chromecast:KitchenHomeHub:playuri" }
|
String KitchenHomeHubPlayURI { channel="chromecast:chromecast:KitchenHomeHub:playuri" }
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
In a rule...
|
In a rule...
|
||||||
|
|
||||||
```
|
```java
|
||||||
KitchenHomeHubPlayURI.sendCommand("http://openHAB:8080/ipcamera/{cameraUID}/ipcamera.m3u8")
|
KitchenHomeHubPlayURI.sendCommand("http://openHAB:8080/ipcamera/{cameraUID}/ipcamera.m3u8")
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## MP4 and GIF Recordings
|
## 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:
|
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.
|
- 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.
|
- 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 `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.
|
- 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 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.
|
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>
|
<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.
|
**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.
|
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.
|
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:
|
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.
|
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.
|
- 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.
|
- 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.
|
- 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
|
## Sitemap Example
|
||||||
|
|
||||||
|
|
|
@ -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:
|
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).
|
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.
|
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.
|
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.
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
# iRobot Binding
|
# 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
|
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.
|
without any need for a dedicated MQTT server.
|
||||||
|
|
||||||
## Supported Things
|
## 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.
|
- 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.
|
- 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
|
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.
|
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.
|
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
|
## 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:
|
You can clean one or many specific regions of a given map by sending the following String to the command channel:
|
||||||
|
|
||||||
```
|
```text
|
||||||
cleanRegions:<pmapId>;[r=]<region_id1>,[r=]<region_id2>,z=<zone_id1>,...;[<user_pmapv_id>]
|
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.
|
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
|
## Known Problems / Caveats
|
||||||
|
|
||||||
1. Sending "pause" command during missions other than "clean" is equivalent to sending "stop"
|
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.
|
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.
|
||||||
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.
|
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.
|
||||||
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. 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
|
## Example
|
||||||
|
|
||||||
irobot.things:
|
irobot.things:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing irobot:roomba:my_roomba [ ipaddress="192.168.0.5", password="xxxxxxxx" ]
|
Thing irobot:roomba:my_roomba [ ipaddress="192.168.0.5", password="xxxxxxxx" ]
|
||||||
```
|
```
|
||||||
|
|
||||||
irobot.items:
|
irobot.items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
String Roomba_Command { channel="irobot:roomba:my_roomba:command" }
|
String Roomba_Command { channel="irobot:roomba:my_roomba:command" }
|
||||||
String Roomba_Cycle { channel="irobot:roomba:my_roomba:cycle" }
|
String Roomba_Cycle { channel="irobot:roomba:my_roomba:cycle" }
|
||||||
String Roomba_Phase { channel="irobot:roomba:my_roomba:phase" }
|
String Roomba_Phase { channel="irobot:roomba:my_roomba:phase" }
|
||||||
|
@ -187,7 +186,7 @@ String Roomba_Error { channel="irobot:roomba:my_roomba:error" }
|
||||||
|
|
||||||
irobot.sitemap:
|
irobot.sitemap:
|
||||||
|
|
||||||
```
|
```perl
|
||||||
Selection item=Roomba_Command mappings=["clean"="Clean", "spot"="Spot", dock="Dock", pause="Pause", stop="Stop"]
|
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_Cycle label="Current cycle"
|
||||||
Text item=Roomba_Phase label="Current phase"
|
Text item=Roomba_Phase label="Current phase"
|
||||||
|
@ -198,8 +197,8 @@ Text item=Roomba_Error label="Error"
|
||||||
|
|
||||||
## Credits
|
## 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:
|
and heavily uses the following projects as a reference:
|
||||||
|
|
||||||
- Roomba980-Python by Nick Waterton (https://github.com/NickWaterton/Roomba980-Python)
|
- Roomba980-Python by Nick Waterton (<https://github.com/NickWaterton/Roomba980-Python>)
|
||||||
- Dorita980 by Facu ZAK (https://github.com/koalazak/dorita980)
|
- Dorita980 by Facu ZAK (<https://github.com/koalazak/dorita980>)
|
||||||
|
|
|
@ -4,7 +4,7 @@ This binding integrates infrared receivers and blasters manufactured by IRtrans
|
||||||
|
|
||||||
## Supported Things
|
## 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
|
## Discovery
|
||||||
|
|
||||||
|
@ -16,37 +16,37 @@ There is no specific binding configuration required.
|
||||||
|
|
||||||
## Thing Configuration
|
## 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)
|
_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)
|
_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)
|
_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)
|
_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
|
## Channels
|
||||||
|
|
||||||
The *ethernet* Thing supports the following Channel Types:
|
The _ethernet_ Thing supports the following Channel Types:
|
||||||
|
|
||||||
| Channel Type ID | Item Type | Description |
|
| Channel Type ID | Item Type | Description |
|
||||||
|-----------------|-----------|-------------------------------------------------------------------------------------|
|
|-----------------|-----------|-------------------------------------------------------------------------------------|
|
||||||
| blaster | String | Send (filtered) infrared commands over the specified blaster LED of the transceiver |
|
| 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 |
|
| 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
|
## Full Example
|
||||||
|
|
||||||
demo.things:
|
demo.things:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge irtrans:ethernet:kitchen [ ipAddress="192.168.0.56", portNumber=21000, bufferSize=1024, responseTimeOut=100, pingTimeOut=2000, reconnectInterval=10 ]
|
Bridge irtrans:ethernet:kitchen [ ipAddress="192.168.0.56", portNumber=21000, bufferSize=1024, responseTimeOut=100, pingTimeOut=2000, reconnectInterval=10 ]
|
||||||
{
|
{
|
||||||
Channels:
|
Channels:
|
||||||
|
@ -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.
|
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.
|
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 ]
|
Bridge irtrans:ethernet:technicalfacilities [ ipAddress="192.168.0.58", portNumber=21000, bufferSize=1024, responseTimeOut=100, pingTimeOut=2000, reconnectInterval=10 ]
|
||||||
{
|
{
|
||||||
Channels:
|
Channels:
|
||||||
|
@ -75,7 +75,7 @@ In the above channel a single IRtrans transceiver has 3 output LEDs in use, 2 to
|
||||||
|
|
||||||
demo.items:
|
demo.items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
String KitchenIRReceiverAny {channel="irtrans:ethernet:kitchen:any"}
|
String KitchenIRReceiverAny {channel="irtrans:ethernet:kitchen:any"}
|
||||||
String KitchenIRReceiverTelenetPower {channel="irtrans:ethernet:kitchen:telenet_power"}
|
String KitchenIRReceiverTelenetPower {channel="irtrans:ethernet:kitchen:telenet_power"}
|
||||||
String KitchenIRBlasterSamsung {channel="irtrans:ethernet:kitchen:samsung"}
|
String KitchenIRBlasterSamsung {channel="irtrans:ethernet:kitchen:samsung"}
|
||||||
|
@ -88,7 +88,7 @@ String TechnicalFacilitiesIRBlasterAppleTV {channel="irtrans:ethernet:technicalf
|
||||||
|
|
||||||
demo.rules:
|
demo.rules:
|
||||||
|
|
||||||
```
|
```java
|
||||||
rule "Kitchen switch IR rule"
|
rule "Kitchen switch IR rule"
|
||||||
when
|
when
|
||||||
Item KitchenIRReceiverTelenetPower received update
|
Item KitchenIRReceiverTelenetPower received update
|
||||||
|
|
|
@ -2,13 +2,13 @@
|
||||||
|
|
||||||
_This binding can receive values of the Wolf heating system._
|
_This binding can receive values of the Wolf heating system._
|
||||||
|
|
||||||
The ISM8 card can be placed into 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.
|
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.
|
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 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.
|
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.
|
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
|
## Supported Things
|
||||||
|
|
||||||
|
@ -18,7 +18,6 @@ _This binding does only support one Thing - the Ism8-Device._
|
||||||
|
|
||||||
_Auto-discovery is not supported._
|
_Auto-discovery is not supported._
|
||||||
|
|
||||||
|
|
||||||
## Thing Configuration
|
## Thing Configuration
|
||||||
|
|
||||||
The intention was to have a generic ISM8 binding in order to offer the full flexibilty for the different heating systems.
|
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
|
## Channels
|
||||||
|
|
||||||
You can use any channel supported by the ISM8 as data point. Please have a look at the official manual from Wolf.
|
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.
|
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 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, ...).
|
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.
|
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:
|
Each channel should be created in the following way:
|
||||||
|
|
||||||
| Type | Name | Description | Configuration |
|
| Type | Name | Description | Configuration |
|
||||||
|--------|---------|----------------------------|-----------------|
|
|--------|---------|----------------------------|-----------------|
|
||||||
| Number | DpId004 | "Kesseltemperatur" | id, type, write |
|
| Number | DpId004 | "Kesseltemperatur" | id, type, write |
|
||||||
|
|
||||||
Type:
|
Type:
|
||||||
|
|
||||||
+ Switch use for boolean values
|
- Switch use for boolean values
|
||||||
+ Number use for any number
|
- Number use for any number
|
||||||
+ Other types may work as well.
|
- Other types may work as well.
|
||||||
|
|
||||||
Name:
|
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:
|
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:
|
Configuration:
|
||||||
|
|
||||||
+ id=1 - Please enter here the ID of the data point you'd like to map to this channel.
|
- id=1 - Please enter here the ID of the data point you'd like to map to this channel.
|
||||||
A list of the available IDs are available within the Wolf manual.
|
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.
|
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.
|
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:
|
Note:
|
||||||
Not all available types of the ISM8 interface are fully supported, but this can be extended.
|
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:
|
For the moment the following data types are implemented:
|
||||||
|
|
||||||
+ DPT-Bool: `1.001`, `1.002`, `1.003`, `1.009`
|
- DPT-Bool: `1.001`, `1.002`, `1.003`, `1.009`
|
||||||
+ DPT-Scaling: `5.001`
|
- DPT-Scaling: `5.001`
|
||||||
+ DPT-Value: `9.001`, `9.002`, `9.006`
|
- DPT-Value: `9.001`, `9.002`, `9.006`
|
||||||
+ DPT-FlowRate: `13.002`
|
- DPT-FlowRate: `13.002`
|
||||||
+ DPT-Mode: `20.102`, `20.103`, `20.105`
|
- DPT-Mode: `20.102`, `20.103`, `20.105`
|
||||||
|
|
||||||
|
|
||||||
## Full Example
|
## 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 switch-readonly : DpId001 "Störung Heizgerät" [id=1, type="1.001"]
|
||||||
Type number-readonly : DpId002 "Betriebsart" [id=2, type="20.105"]
|
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 : DpId167 "CWL Luftdurchsatz Abluft" [id=167, type="13.002"]
|
||||||
Type number-readonly : DpId192 "CML Filterwarnung" [id=192, type="1.001"]
|
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" }
|
```java
|
||||||
Number ISM_HeizungBetriebsart "Betriebsart" { channel="ism8:device:heater:DpId002" }
|
Switch ISM_HeizungStoerung "Störung Heizgerät" { channel="ism8:device:heater:DpId001" }
|
||||||
Number ISM_HeizungBrennerleistung "Brennerleistung [%.1f %%]" { channel="ism8:device:heater:DpId003" }
|
Number ISM_HeizungBetriebsart "Betriebsart" { channel="ism8:device:heater:DpId002" }
|
||||||
Number ISM_HeizungKesseltemperatur "Kesseltemperatur [%.1f °C]" { channel="ism8:device:heater:DpId004" }
|
Number ISM_HeizungBrennerleistung "Brennerleistung [%.1f %%]" { channel="ism8:device:heater:DpId003" }
|
||||||
Number ISM_HeizungRuecklauftemperatur "Rücklauftemperatur [%.1f °C]" { channel="ism8:device:heater:DpId006" }
|
Number ISM_HeizungKesseltemperatur "Kesseltemperatur [%.1f °C]" { channel="ism8:device:heater:DpId004" }
|
||||||
Number ISM_HeizungWarmwassertemperatur "Warmwassertemperatur [%.1f °C]" { channel="ism8:device:heater:DpId007" }
|
Number ISM_HeizungRuecklauftemperatur "Rücklauftemperatur [%.1f °C]" { channel="ism8:device:heater:DpId006" }
|
||||||
Number ISM_HeizungAussentemperatur "Außentemperatur [%.1f °C]" { channel="ism8:device:heater:DpId008" }
|
Number ISM_HeizungWarmwassertemperatur "Warmwassertemperatur [%.1f °C]" { channel="ism8:device:heater:DpId007" }
|
||||||
Switch ISM_HeizungStatusFlamme "Status Flamme" { channel="ism8:device:heater:DpId009" }
|
Number ISM_HeizungAussentemperatur "Außentemperatur [%.1f °C]" { channel="ism8:device:heater:DpId008" }
|
||||||
Number ISM_HeizungAnlagendruck "Anlagendruck [%.2f bar]" { channel="ism8:device:heater:DpId013" }
|
Switch ISM_HeizungStatusFlamme "Status Flamme" { channel="ism8:device:heater:DpId009" }
|
||||||
Switch ISM_HeizungSysStoerung "Störung Systemmodul" { channel="ism8:device:heater:DpId053" }
|
Number ISM_HeizungAnlagendruck "Anlagendruck [%.2f bar]" { channel="ism8:device:heater:DpId013" }
|
||||||
Number ISM_HeizungSysAussentemperatur "Außentemperatur Systemmodul [%.1f °C]" { channel="ism8:device:heater:DpId054" }
|
Switch ISM_HeizungSysStoerung "Störung Systemmodul" { channel="ism8:device:heater:DpId053" }
|
||||||
Number ISM_HeizungSollwertWarmwasser "Sollwert Warmwasser [%.1f °C]" { channel="ism8:device:heater:DpId056" }
|
Number ISM_HeizungSysAussentemperatur "Außentemperatur Systemmodul [%.1f °C]" { channel="ism8:device:heater:DpId054" }
|
||||||
Number ISM_HeizungBetriebsartHeizkreis "Betriebsart Heizkreis" { channel="ism8:device:heater:DpId057" }
|
Number ISM_HeizungSollwertWarmwasser "Sollwert Warmwasser [%.1f °C]" { channel="ism8:device:heater:DpId056" }
|
||||||
Number ISM_HeizungBetriebsartWarmwasser "Betriebsart Warmwasser" { channel="ism8:device:heater:DpId058" }
|
Number ISM_HeizungBetriebsartHeizkreis "Betriebsart Heizkreis" { channel="ism8:device:heater:DpId057" }
|
||||||
Number ISM_HeizungSollwertverschiebung "Sollwertverschiebung [%.1f °C]" { channel="ism8:device:heater:DpId065" }
|
Number ISM_HeizungBetriebsartWarmwasser "Betriebsart Warmwasser" { channel="ism8:device:heater:DpId058" }
|
||||||
Switch ISM_LueftungStoerung "CML Störung" { channel="ism8:device:heater:DpId148" }
|
Number ISM_HeizungSollwertverschiebung "Sollwertverschiebung [%.1f °C]" { channel="ism8:device:heater:DpId065" }
|
||||||
Number ISM_LueftungBetriebsart "CWL Betriebsart" { channel="ism8:device:heater:DpId149" }
|
Switch ISM_LueftungStoerung "CML Störung" { channel="ism8:device:heater:DpId148" }
|
||||||
Number ISM_LueftungLueftungsstufe "CWL Lüftungsstufe [%.1f %%]" { channel="ism8:device:heater:DpId163" }
|
Number ISM_LueftungBetriebsart "CWL Betriebsart" { channel="ism8:device:heater:DpId149" }
|
||||||
Number ISM_LueftungAblufttemperatur "CWL Ablufttemperatur [%.1f °C]" { channel="ism8:device:heater:DpId164" }
|
Number ISM_LueftungLueftungsstufe "CWL Lüftungsstufe [%.1f %%]" { channel="ism8:device:heater:DpId163" }
|
||||||
Number ISM_LueftungZulufttemperatur "CWL Zulufttemperatur [%.1f °C]" { channel="ism8:device:heater:DpId165" }
|
Number ISM_LueftungAblufttemperatur "CWL Ablufttemperatur [%.1f °C]" { channel="ism8:device:heater:DpId164" }
|
||||||
Number ISM_LueftungLuftdurchsatzZuluft "CWL Luftdurchsatz Zuluft [%.1f m³/h]" { channel="ism8:device:heater:DpId166" }
|
Number ISM_LueftungZulufttemperatur "CWL Zulufttemperatur [%.1f °C]" { channel="ism8:device:heater:DpId165" }
|
||||||
Number ISM_LueftungLuftdurchsatzAbluft "CWL Luftdurchsatz Abluft [%.1f m³/h]" { channel="ism8:device:heater:DpId167" }
|
Number ISM_LueftungLuftdurchsatzZuluft "CWL Luftdurchsatz Zuluft [%.1f m³/h]" { channel="ism8:device:heater:DpId166" }
|
||||||
Switch ISM_LueftungFilterwarnung "CML Filterwarnung" { channel="ism8:device:heater:DpId192" }
|
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_
|
```
|
||||||
|
|
||||||
Frame label="Heizung"
|
### demo.sitemap
|
||||||
{
|
|
||||||
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"
|
|
||||||
}
|
|
||||||
|
|
||||||
_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
|
### HVACContrMode.map
|
||||||
1=Heizen
|
|
||||||
2=Aufwärmen
|
```text
|
||||||
3=Abkühlen
|
0=Auto
|
||||||
4=Nächtliche Reinigung
|
1=Heizen
|
||||||
5=Vorkühlen
|
2=Aufwärmen
|
||||||
6=Aus
|
3=Abkühlen
|
||||||
7=Test
|
4=Nächtliche Reinigung
|
||||||
8=Notfall Heizen
|
5=Vorkühlen
|
||||||
9=Nur Lüften
|
6=Aus
|
||||||
10=Freies Kühlen
|
7=Test
|
||||||
11=Eis
|
8=Notfall Heizen
|
||||||
12=Maximum Heizen
|
9=Nur Lüften
|
||||||
13=Eco Heiz-/Kühlmodus
|
10=Freies Kühlen
|
||||||
14=Entfeuchten
|
11=Eis
|
||||||
15=Kalibriermodus
|
12=Maximum Heizen
|
||||||
16=Notfall Kühlmodus
|
13=Eco Heiz-/Kühlmodus
|
||||||
17=Emergency Dampfmodus
|
14=Entfeuchten
|
||||||
20=Reserviert
|
15=Kalibriermodus
|
||||||
NULL=Undefiniert
|
16=Notfall Kühlmodus
|
||||||
|
17=Emergency Dampfmodus
|
||||||
|
20=Reserviert
|
||||||
|
NULL=Undefiniert
|
||||||
|
```
|
||||||
|
|
||||||
_Result_
|
_Result_
|
||||||
<img src="doc/Sitemap-Example.png" width="800" height="600">
|
<img src="doc/Sitemap-Example.png" width="800" height="600">
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# Jablotron Alarm Binding
|
# Jablotron Alarm Binding
|
||||||
|
|
||||||
This is the binding for Jablotron alarms.
|
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
|
## Supported Things
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ https://www.jablotron.com/en/jablotron-products/alarms/
|
||||||
| JA-80 | the OASIS alarm |
|
| JA-80 | the OASIS alarm |
|
||||||
| JA-100 | with the thermometer support |
|
| JA-100 | with the thermometer support |
|
||||||
| JA-100F | without the thermometer support |
|
| JA-100F | without the thermometer support |
|
||||||
|
|
||||||
## Discovery
|
## Discovery
|
||||||
|
|
||||||
This binding supports auto discovery. Just manually add a bridge thing and supply login & password to your Jablonet account.
|
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 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
|
## Full Example
|
||||||
|
|
||||||
# items file for JA80
|
# items file for JA80
|
||||||
|
|
||||||
```
|
```java
|
||||||
String HouseAlarm "Alarm [%s]" <alarm>
|
String HouseAlarm "Alarm [%s]" <alarm>
|
||||||
String JablotronCode { channel="jablotron:oasis:8c93a5ed:50139:command", autoupdate="false" }
|
String JablotronCode { channel="jablotron:oasis:8c93a5ed:50139:command", autoupdate="false" }
|
||||||
Switch ArmSectionA "Garage arming" <jablotron> (Alarm) { channel="jablotron:oasis:8c93a5ed:50139:statusA" }
|
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 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 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 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 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" }
|
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 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" }
|
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 ArmControlPGX "PGX" <jablotron> (Alarm) { channel="jablotron:oasis:8c93a5ed:50139:statusPGX" }
|
||||||
Switch ArmControlPGY "PGY" <jablotron> (Alarm) { channel="jablotron:oasis:8c93a5ed:50139:statusPGY" }
|
Switch ArmControlPGY "PGY" <jablotron> (Alarm) { channel="jablotron:oasis:8c93a5ed:50139:statusPGY" }
|
||||||
```
|
```
|
||||||
|
|
||||||
# sitemap example for JA80
|
# sitemap example for JA80
|
||||||
|
|
||||||
```
|
```java
|
||||||
Text item=HouseAlarm icon="alarm" {
|
Text item=HouseAlarm icon="alarm" {
|
||||||
Switch item=ArmSectionA
|
Switch item=ArmSectionA
|
||||||
Switch item=ArmSectionAB
|
Switch item=ArmSectionAB
|
||||||
|
@ -102,7 +102,7 @@ Text item=HouseAlarm icon="alarm" {
|
||||||
|
|
||||||
# rule example for JA80
|
# rule example for JA80
|
||||||
|
|
||||||
```
|
```java
|
||||||
rule "Alarm"
|
rule "Alarm"
|
||||||
when
|
when
|
||||||
Item ArmSectionA changed or Item ArmSectionAB changed or Item ArmSectionABC changed or
|
Item ArmSectionA changed or Item ArmSectionAB changed or Item ArmSectionABC changed or
|
||||||
|
|
|
@ -10,15 +10,15 @@ Binding should be compatible with JeeLink USB receivers and LaCrosseGateways. It
|
||||||
|
|
||||||
This binding supports:
|
This binding supports:
|
||||||
|
|
||||||
* JeeLink (connected to USB)
|
- JeeLink (connected to USB)
|
||||||
* JeeLink (connected over TCP)
|
- JeeLink (connected over TCP)
|
||||||
* LaCrosseGateway (connected to USB)
|
- LaCrosseGateway (connected to USB)
|
||||||
* LaCrosseGateway (connected over TCP)
|
- LaCrosseGateway (connected over TCP)
|
||||||
* LaCrosse temperature sensors
|
- LaCrosse temperature sensors
|
||||||
* EC3000 power monitors
|
- EC3000 power monitors
|
||||||
* Revolt power monitors
|
- Revolt power monitors
|
||||||
* PCA301 power monitoring wireless sockets
|
- PCA301 power monitoring wireless sockets
|
||||||
* TX22 temperature & humidity Sensors (including connected TX23 wind and TX26 rain sensors)
|
- TX22 temperature & humidity Sensors (including connected TX23 wind and TX26 rain sensors)
|
||||||
|
|
||||||
## Binding configuration
|
## Binding configuration
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ PCA301 sockets are polled every 120 seconds by default. This results in sockets
|
||||||
|
|
||||||
## Thing configuration
|
## Thing configuration
|
||||||
|
|
||||||
#### JeeLink / LaCrosseGateway (connected to USB)
|
### JeeLink / LaCrosseGateway (connected to USB)
|
||||||
|
|
||||||
| Parameter | Item Type | Description |
|
| 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.
|
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 |
|
| 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) |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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. |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| Parameter | Item Type | Description |
|
||||||
|-------------------|--------------|------------------------------------------------------------------------------------------------------------------------|
|
|-------------------|--------------|------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
@ -96,7 +94,7 @@ The available init commands depend on the sketch that is running on the USB stic
|
||||||
|
|
||||||
## Channels
|
## Channels
|
||||||
|
|
||||||
#### LaCrosse temperature sensors
|
### LaCrosse temperature sensors
|
||||||
|
|
||||||
| Channel Type ID | Item Type | Description |
|
| 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) |
|
| batteryNew | Contact | Whether the battery is new (CLOSED) or not (OPEN) |
|
||||||
| batteryLow | Contact | Whether the battery is low (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 |
|
| 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 |
|
| windAngle | Number:Angle | Current wind direction |
|
||||||
| gustStrength | Number:Speed | Gust speed |
|
| gustStrength | Number:Speed | Gust speed |
|
||||||
|
|
||||||
#### EC3000 power monitors
|
### EC3000 power monitors
|
||||||
|
|
||||||
| Channel Type ID | Item Type | Description |
|
| 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 |
|
| sensorTime | Number:Time | Total turn on time of power monitor |
|
||||||
| resets | Number | Number of resets |
|
| resets | Number | Number of resets |
|
||||||
|
|
||||||
#### PCA301 power monitoring wireless sockets
|
### PCA301 power monitoring wireless sockets
|
||||||
|
|
||||||
| Channel Type ID | Item Type | Description |
|
| 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 |
|
| currentPower | Number:Power | Current power draw |
|
||||||
| consumptionTotal | Number:Energy | Total energy consumption |
|
| consumptionTotal | Number:Energy | Total energy consumption |
|
||||||
|
|
||||||
#### Revolt power monitors
|
### Revolt power monitors
|
||||||
|
|
||||||
| Channel Type ID | Item Type | Description |
|
| 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
|
## Commands
|
||||||
|
|
||||||
#### PCA301 power monitoring wireless sockets
|
### PCA301 power monitoring wireless sockets
|
||||||
|
|
||||||
| Channel Type ID | Item Type | Description |
|
| 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:
|
A typical thing configuration for PCA301 looks like this:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge jeelink:jeelinkUsb:pca301 "Jeelink pca301" @ "home" [ serialPort="/dev/ttyUSB0" ]
|
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"]
|
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:
|
A typical thing configuration for EC3000 looks like this:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge jeelink:jeelinkUsb:ec3k "Jeelink ec3k" @ "home" [ serialPort="COM4" ]
|
Bridge jeelink:jeelinkUsb:ec3k "Jeelink ec3k" @ "home" [ serialPort="COM4" ]
|
||||||
Thing jeelink:ec3k:0E3D "ec3k 1" (jeelink:jeelinkUsb:ec3k) @ "home" [ sensorId="0E3D"]
|
Thing jeelink:ec3k:0E3D "ec3k 1" (jeelink:jeelinkUsb:ec3k) @ "home" [ sensorId="0E3D"]
|
||||||
Thing jeelink:ec3k:14E7 "ec3k 2" (jeelink:jeelinkUsb:ec3k) @ "home" [ sensorId="14E7"]
|
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:
|
A typical Thing configuration for lacrosse looks like this:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge jeelink:jeelinkUsb:lacrosse "Jeelink lacrosse" @ "home" [ serialPort="COM6" ]
|
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: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]
|
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:
|
A typical thing configuration for Revolt looks like this:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge jeelink:jeelinkUsb:revolt "Jeelink revolt" @ "home" [ serialPort="COM4" ]
|
Bridge jeelink:jeelinkUsb:revolt "Jeelink revolt" @ "home" [ serialPort="COM4" ]
|
||||||
Thing jeelink:revolt:4F1B "revolt 1" (jeelink:jeelinkUsb:revolt) @ "home" [ sensorId="4F1B"]
|
Thing jeelink:revolt:4F1B "revolt 1" (jeelink:jeelinkUsb:revolt) @ "home" [ sensorId="4F1B"]
|
||||||
```
|
```
|
||||||
|
|
||||||
A typical item configuration for a LaCrosse temperature sensor looks like this:
|
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: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"}
|
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"}
|
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:
|
A typical item configuration for a PCA301 power monitoring wireless sockets looks like this:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Switch SocketSwitch {channel="jeelink:pca301:1-160-236:switchingState"}
|
Switch SocketSwitch {channel="jeelink:pca301:1-160-236:switchingState"}
|
||||||
Number:Power SocketWattage {channel="jeelink:pca301:1-160-236:currentPower"}
|
Number:Power SocketWattage {channel="jeelink:pca301:1-160-236:currentPower"}
|
||||||
Number:Energy SocketConsumption {channel="jeelink:pca301:1-160-236:consumptionTotal"}
|
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:
|
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:Dimensionless Humidity "Outside [%.1f %unit%]" <humidity> {channel="jeelink:tx22:42:humidity"}
|
||||||
Number:Temperature Temperature "Outside [%.1f %unit%]" <temperature> {channel="jeelink:tx22:42:temperature"}
|
Number:Temperature Temperature "Outside [%.1f %unit%]" <temperature> {channel="jeelink:tx22:42:temperature"}
|
||||||
Contact Battery_Low_LR "Battery Low Outside" {channel="jeelink:tx22:42:batteryLow"}
|
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:
|
A typical item configuration for a Revolt power monitor looks like this:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Number:Power SocketWattage {channel="jeelink:revolt:4F1B:currentPower"}
|
Number:Power SocketWattage {channel="jeelink:revolt:4F1B:currentPower"}
|
||||||
Number:Energy SocketConsumption {channel="jeelink:revolt:4F1B:consumptionTotal"}
|
Number:Energy SocketConsumption {channel="jeelink:revolt:4F1B:consumptionTotal"}
|
||||||
Number:Dimensionless POwerFactor {channel="jeelink:revolt:4F1B:powerFactor"}
|
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:ElectricPotential Voltage {channel="jeelink:revolt:4F1B:electricPotential"}
|
||||||
Number:Frequency PowerFrequency {channel="jeelink:revolt:4F1B:powerFrequency"}
|
Number:Frequency PowerFrequency {channel="jeelink:revolt:4F1B:powerFrequency"}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# Jellyfin Binding
|
# Jellyfin Binding
|
||||||
|
|
||||||
This is the binding for [Jellyfin](https://jellyfin.org) the volunteer-built media solution that puts you in control of your media.
|
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.
|
Stream to any device from your own server, with no strings attached.
|
||||||
Your media, your server, your way.
|
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.
|
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.
|
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
|
## 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
|
## 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).
|
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.
|
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
|
## 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-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 |
|
| 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 |
|
| browse-by-id | String | Browse media by id, works for series, episodes and movies |
|
||||||
|
|
||||||
### Terms search:
|
### Terms search:
|
||||||
|
|
||||||
The terms search has a default behavior that can be modified sending some predefined prefixes.
|
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
|
### Example Server (Bridge) - jellyfin.bridge.things
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge jellyfin:server:exampleServerId "Jellyfin Server" [
|
Bridge jellyfin:server:exampleServerId "Jellyfin Server" [
|
||||||
clientActiveWithInSeconds=0,
|
clientActiveWithInSeconds=0,
|
||||||
hostname="192.168.1.177",
|
hostname="192.168.1.177",
|
||||||
port=8096,
|
port=8096,
|
||||||
refreshSeconds=30,
|
refreshSeconds=30,
|
||||||
ssl="false"
|
ssl="false"
|
||||||
token=XXXXX # Optional, read bellow
|
token=XXXXX # Optional, read bellow
|
||||||
userId=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
|
### 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 Web client" (jellyfin:server:exampleServerId)
|
||||||
Thing jellyfin:client:exampleServerId:<JELLYFIN_DEVICE_ID> "Jellyfin Android 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
|
### Example Items - jellyfin.items
|
||||||
|
|
||||||
```
|
```java
|
||||||
String strJellyfinAndroidSendNotification { channel="jellyfin:client:exampleServerId:<JELLYFIN_DEVICE_ID>:send-notification " }
|
String strJellyfinAndroidSendNotification { channel="jellyfin:client:exampleServerId:<JELLYFIN_DEVICE_ID>:send-notification " }
|
||||||
Player plJellyfinAndroidMediaControl { channel="jellyfin:client:exampleServerId:<JELLYFIN_DEVICE_ID>:media-control" }
|
Player plJellyfinAndroidMediaControl { channel="jellyfin:client:exampleServerId:<JELLYFIN_DEVICE_ID>:media-control" }
|
||||||
String strJellyfinAndroidPlayingItemId { channel="jellyfin:client:exampleServerId:<JELLYFIN_DEVICE_ID>:playing-item-id" }
|
String strJellyfinAndroidPlayingItemId { channel="jellyfin:client:exampleServerId:<JELLYFIN_DEVICE_ID>:playing-item-id" }
|
||||||
|
|
|
@ -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:
|
This binding supports the following things:
|
||||||
|
|
||||||
| thing | type | description |
|
| thing | type | description |
|
||||||
|---------- |-------- |------------------------------ |
|
|---------- |-------- |------------------------------ |
|
||||||
| JuiceNet Account | Bridge | This represents the cloud account to interface with the JuiceNet API. |
|
| 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. |
|
| 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.
|
Once a JuiceNet Account bridge has been created, any JuiceBox EV Chargers associated with this account will be discovered.
|
||||||
|
|
||||||
|
|
||||||
### Thing Configuration
|
### Thing Configuration
|
||||||
|
|
||||||
The configuration required is to create a JuiceNet account thing and fill in the appropriate API token.
|
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.
|
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:
|
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" ] {
|
Bridge juicenet:account:myaccount [ apiToken="xxxx-xxxx-xxxx-xxxx-xxxxx" ] {
|
||||||
Thing device JamesCharger [ unitID="xxxxxxx" ]
|
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.
|
An example of an items file is here.
|
||||||
|
|
||||||
```
|
```java
|
||||||
String JuiceNet_Name "Name" { channel="juicenet:device:myaccount:JamesCharger:name" }
|
String JuiceNet_Name "Name" { channel="juicenet:device:myaccount:JamesCharger:name" }
|
||||||
String JuiceNet_State "Device State" { channel="juicenet:device:myaccount:JamesCharger:state" }
|
String JuiceNet_State "Device State" { channel="juicenet:device:myaccount:JamesCharger:state" }
|
||||||
String JuiceNet_ChargingState "Charging State" { channel="juicenet:device:myaccount:JamesCharger:chargingState" }
|
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)
|
![JuiceBox Widget](doc/widget.png)
|
||||||
|
|
||||||
```
|
```yaml
|
||||||
uid: widget_JuiceBox
|
uid: widget_JuiceBox
|
||||||
tags: []
|
tags: []
|
||||||
props:
|
props:
|
||||||
|
@ -267,4 +266,3 @@ slots:
|
||||||
config:
|
config:
|
||||||
text: =items[props.prefix + "_CarDescription"].state
|
text: =items[props.prefix + "_CarDescription"].state
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -46,17 +46,17 @@ The thing has the following configuration parameters:
|
||||||
|
|
||||||
Some notes:
|
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.
|
- 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.
|
- 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.
|
- 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.
|
- 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.
|
- 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.
|
- 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.
|
- 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`.
|
- 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.
|
- 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.
|
- See the [general documentation about serial port configuration](/docs/administration/serial.html) for more on symlinking the USB ports.
|
||||||
|
|
||||||
## Channels
|
## Channels
|
||||||
|
|
||||||
|
@ -141,16 +141,15 @@ The following channels are available:
|
||||||
|
|
||||||
kaleidescape.things:
|
kaleidescape.things:
|
||||||
|
|
||||||
```
|
```java
|
||||||
kaleidescape:player:myzone1 "M500 Living Rm" [ host="192.168.1.10", updatePeriod=0, loadHighlightedDetails=true, loadAlbumDetails=true ]
|
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: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:strato:myzone3 "Strato Theater Rm" [ host="192.168.1.12", updatePeriod=0, loadHighlightedDetails=true ]
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
kaleidescape.items:
|
kaleidescape.items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
// Virtual switch to send a command, see sitemap and rules below
|
// Virtual switch to send a command, see sitemap and rules below
|
||||||
Switch z1_GoMovieCovers "Go to Movie Covers"
|
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_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_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" }
|
String z1_Detail_DiscLocation "Disc Location: [%s]" { channel="kaleidescape:player:myzone1:detail#disc_location" }
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
ksecondsformat.js:
|
ksecondsformat.js:
|
||||||
|
|
||||||
```
|
```javascript
|
||||||
(function(totalSeconds) {
|
(function(totalSeconds) {
|
||||||
if (isNaN(totalSeconds)) {
|
if (isNaN(totalSeconds)) {
|
||||||
return '-';
|
return '-';
|
||||||
|
@ -257,7 +255,7 @@ ksecondsformat.js:
|
||||||
|
|
||||||
kaleidescape.sitemap:
|
kaleidescape.sitemap:
|
||||||
|
|
||||||
```
|
```perl
|
||||||
sitemap kaleidescape label="Kaleidescape" {
|
sitemap kaleidescape label="Kaleidescape" {
|
||||||
Frame label="Zone 1" {
|
Frame label="Zone 1" {
|
||||||
Image item=z1_Detail_CoverArt
|
Image item=z1_Detail_CoverArt
|
||||||
|
@ -343,7 +341,7 @@ sitemap kaleidescape label="Kaleidescape" {
|
||||||
|
|
||||||
kaleidescape.rules:
|
kaleidescape.rules:
|
||||||
|
|
||||||
```
|
```java
|
||||||
var int lightPercent
|
var int lightPercent
|
||||||
val kactions = getActions("kaleidescape","kaleidescape:player:myzone1")
|
val kactions = getActions("kaleidescape","kaleidescape:player:myzone1")
|
||||||
|
|
||||||
|
|
|
@ -15,94 +15,93 @@ Optionally, a refresh interval (in seconds) can be defined as parameter `refresh
|
||||||
|
|
||||||
All devices support the following channels:
|
All devices support the following channels:
|
||||||
|
|
||||||
| Channel ID | Item Type | Read-only | Description |
|
| Channel ID | Item Type | Read-only | Description |
|
||||||
|---------------------------|---------------------------|-----------|---------------------------------------------------------------------------|
|
| ----------------------- | ------------------------ | --------- | ----------------------------------------------------------------------- |
|
||||||
| state | Number | yes | current operational state of the wallbox |
|
| state | Number | yes | current operational state of the wallbox |
|
||||||
| enabled | Switch | no | activation 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 |
|
| 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 % |
|
| 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 |
|
| power | Number:Power | yes | active power delivered by the charging station |
|
||||||
| wallbox | Switch | yes | plug state of wallbox |
|
| wallbox | Switch | yes | plug state of wallbox |
|
||||||
| vehicle | Switch | yes | plug state of vehicle |
|
| vehicle | Switch | yes | plug state of vehicle |
|
||||||
| locked | Switch | yes | lock state of plug at vehicle |
|
| locked | Switch | yes | lock state of plug at vehicle |
|
||||||
| I1/2/3 | Number:ElectricCurrent | yes | current for the given phase |
|
| I1/2/3 | Number:ElectricCurrent | yes | current for the given phase |
|
||||||
| U1/2/3 | Number:ElectricPotential | yes | voltage for the given phase |
|
| U1/2/3 | Number:ElectricPotential | yes | voltage for the given phase |
|
||||||
| output | Switch | no | state of the X1 relais |
|
| output | Switch | no | state of the X1 relais |
|
||||||
| input | Switch | yes | state of the X2 contact |
|
| input | Switch | yes | state of the X2 contact |
|
||||||
| display | String | no | display text on wallbox |
|
| display | String | no | display text on wallbox |
|
||||||
| error1 | String | yes | error code state 1, if in error (see the KeContact FAQ) |
|
| 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) |
|
| error2 | String | yes | error code state 2, if in error (see the KeContact FAQ) |
|
||||||
| maxsystemcurrent | Number:ElectricCurrent | yes | maximum current the wallbox can deliver |
|
| maxsystemcurrent | Number:ElectricCurrent | yes | maximum current the wallbox can deliver |
|
||||||
| failsafecurrent | Number:ElectricCurrent | yes | maximum current the wallbox can deliver, if network is lost |
|
| 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 |
|
| uptime | Number:Time | yes | system uptime since the last reset of the wallbox |
|
||||||
| sessionconsumption | Number:Energy | yes | energy delivered in current session |
|
| sessionconsumption | Number:Energy | yes | energy delivered in current session |
|
||||||
| totalconsumption | Number:Energy | yes | total energy delivered since the last reset of the wallbox |
|
| totalconsumption | Number:Energy | yes | total energy delivered since the last reset of the wallbox |
|
||||||
| authreq | Switch | yes | authentication required |
|
| authreq | Switch | yes | authentication required |
|
||||||
| authon | Switch | yes | authentication enabled |
|
| authon | Switch | yes | authentication enabled |
|
||||||
| sessionrfidtag | String | yes | RFID tag used for the last charging session |
|
| sessionrfidtag | String | yes | RFID tag used for the last charging session |
|
||||||
| sessionrfidclass | String | yes | RFID tag class 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| maxpilotcurrent | Number:ElectricCurrent | yes | current offered to the vehicle via control pilot signalization |
|
||||||
| maxpilotcurrentdutycyle | Number:Dimensionless | yes | duty cycle of the control pilot signal |
|
| maxpilotcurrentdutycyle | Number:Dimensionless | yes | duty cycle of the control pilot signal |
|
||||||
|
|
||||||
|
|
||||||
## Example
|
## Example
|
||||||
|
|
||||||
demo.Things:
|
demo.Things:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing keba:kecontact:1 [ipAddress="192.168.0.64", refreshInterval=30]
|
Thing keba:kecontact:1 [ipAddress="192.168.0.64", refreshInterval=30]
|
||||||
```
|
```
|
||||||
|
|
||||||
demo.items:
|
demo.items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Number:Dimensionless KebaCurrentRange "Maximum supply current [%.1f %%]" {channel="keba:kecontact:1:maxpresetcurrentrange"}
|
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 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 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:ElectricCurrent KebaFailSafeCurrent "Failsafe supply current [%.3f A]" {channel="keba:kecontact:1:failsafecurrent"}
|
||||||
Number KebaState "Operating State [%s]" {channel="keba:kecontact:1:state"}
|
Number KebaState "Operating State [%s]" {channel="keba:kecontact:1:state"}
|
||||||
Switch KebaSwitch "Enabled" {channel="keba:kecontact:1:enabled"}
|
Switch KebaSwitch "Enabled" {channel="keba:kecontact:1:enabled"}
|
||||||
Switch KebaWallboxPlugged "Plugged into wallbox" {channel="keba:kecontact:1:wallbox"}
|
Switch KebaWallboxPlugged "Plugged into wallbox" {channel="keba:kecontact:1:wallbox"}
|
||||||
Switch KebaVehiclePlugged "Plugged into vehicle" {channel="keba:kecontact:1:vehicle"}
|
Switch KebaVehiclePlugged "Plugged into vehicle" {channel="keba:kecontact:1:vehicle"}
|
||||||
Switch KebaPlugLocked "Plug locked" {channel="keba:kecontact:1:locked"}
|
Switch KebaPlugLocked "Plug locked" {channel="keba:kecontact:1:locked"}
|
||||||
DateTime KebaUptime "Uptime [%s s]" {channel="keba:kecontact:1:uptime"}
|
DateTime KebaUptime "Uptime [%s s]" {channel="keba:kecontact:1:uptime"}
|
||||||
Number:ElectricCurrent KebaI1 {channel="keba:kecontact:1:I1"}
|
Number:ElectricCurrent KebaI1 {channel="keba:kecontact:1:I1"}
|
||||||
Number:ElectricCurrent KebaI2 {channel="keba:kecontact:1:I2"}
|
Number:ElectricCurrent KebaI2 {channel="keba:kecontact:1:I2"}
|
||||||
Number:ElectricCurrent KebaI3 {channel="keba:kecontact:1:I3"}
|
Number:ElectricCurrent KebaI3 {channel="keba:kecontact:1:I3"}
|
||||||
Number:ElectricPotential KebaU1 {channel="keba:kecontact:1:U1"}
|
Number:ElectricPotential KebaU1 {channel="keba:kecontact:1:U1"}
|
||||||
Number:ElectricPotential KebaU2 {channel="keba:kecontact:1:U2"}
|
Number:ElectricPotential KebaU2 {channel="keba:kecontact:1:U2"}
|
||||||
Number:ElectricPotential KebaU3 {channel="keba:kecontact:1:U3"}
|
Number:ElectricPotential KebaU3 {channel="keba:kecontact:1:U3"}
|
||||||
Number:Power KebaPower "Energy during current session [%.1f Wh]" {channel="keba:kecontact:1:power"}
|
Number:Power KebaPower "Energy during current session [%.1f Wh]" {channel="keba:kecontact:1:power"}
|
||||||
Number:Energy KebaSessionEnergy {channel="keba:kecontact:1:sessionconsumption"}
|
Number:Energy KebaSessionEnergy {channel="keba:kecontact:1:sessionconsumption"}
|
||||||
Number:Energy KebaTotalEnergy "Energy during all sessions [%.1f Wh]" {channel="keba:kecontact:1:totalconsumption"}
|
Number:Energy KebaTotalEnergy "Energy during all sessions [%.1f Wh]" {channel="keba:kecontact:1:totalconsumption"}
|
||||||
Switch KebaInputSwitch {channel="keba:kecontact:1:input"}
|
Switch KebaInputSwitch {channel="keba:kecontact:1:input"}
|
||||||
Switch KebaOutputSwitch {channel="keba:kecontact:1:output"}
|
Switch KebaOutputSwitch {channel="keba:kecontact:1:output"}
|
||||||
Number:Energy KebaSetEnergyLimit "Set charge energy limit [%.1f Wh]" {channel="keba:kecontact:1:setenergylimit"}
|
Number:Energy KebaSetEnergyLimit "Set charge energy limit [%.1f Wh]" {channel="keba:kecontact:1:setenergylimit"}
|
||||||
```
|
```
|
||||||
|
|
||||||
demo.sitemap:
|
demo.sitemap:
|
||||||
|
|
||||||
```
|
```perl
|
||||||
sitemap demo label="Main Menu"
|
sitemap demo label="Main Menu"
|
||||||
{
|
{
|
||||||
Text label="Charging Station" {
|
Text label="Charging Station" {
|
||||||
Text item=KebaState
|
Text item=KebaState
|
||||||
Text item=KebaUptime
|
Text item=KebaUptime
|
||||||
Switch item=KebaSwitch
|
Switch item=KebaSwitch
|
||||||
Switch item=KebaWallboxPlugged
|
Switch item=KebaWallboxPlugged
|
||||||
Switch item=KebaVehiclePlugged
|
Switch item=KebaVehiclePlugged
|
||||||
Switch item=KebaPlugLocked
|
Switch item=KebaPlugLocked
|
||||||
Slider item=KebaCurrentRange
|
Slider item=KebaCurrentRange
|
||||||
Text item=KebaCurrent
|
Text item=KebaCurrent
|
||||||
Text item=KebaSystemCurrent
|
Text item=KebaSystemCurrent
|
||||||
Text item=KebaFailSafeCurrent
|
Text item=KebaFailSafeCurrent
|
||||||
Text item=KebaSessionEnergy
|
Text item=KebaSessionEnergy
|
||||||
Text item=KebaTotalEnergy
|
Text item=KebaTotalEnergy
|
||||||
Switch item=KebaSetEnergyLimit
|
Switch item=KebaSetEnergyLimit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -112,28 +111,32 @@ sitemap demo label="Main Menu"
|
||||||
|
|
||||||
Enable `DEBUG` or `TRACE` (even more verbose) logging for the logger named:
|
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.
|
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
|
### UDP Ports used
|
||||||
|
|
||||||
Send port = UDP 7090
|
```text
|
||||||
|
Send port = UDP 7090
|
||||||
|
```
|
||||||
|
|
||||||
The Keba station is the server
|
The Keba station is the server
|
||||||
|
|
||||||
Receive port = UDP 7090
|
```text
|
||||||
|
Receive port = UDP 7090
|
||||||
|
```
|
||||||
|
|
||||||
This binding is providing the server
|
This binding is providing the server
|
||||||
|
|
||||||
UDP port 7090 needs to be available/free on the openHAB 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`.
|
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.
|
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.
|
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:
|
The right configuration can be validated as follows:
|
||||||
|
|
||||||
- WebGUI DSW Settings:
|
- WebGUI DSW Settings:
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
# KM200 Binding
|
# 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.
|
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
|
## Supported Things
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ This binding discovers KM devices through mDNS in the local network.
|
||||||
|
|
||||||
### kmdevice
|
### 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 |
|
| 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`:
|
`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 ] {
|
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"
|
heatingCircuit 1 "TestHC1"
|
||||||
sensor 1 "TestSensors"
|
sensor 1 "TestSensors"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
`items/kmxxx.items`:
|
`items/kmxxx.items`:
|
||||||
|
|
||||||
```xtend
|
```java
|
||||||
Number budWater "Water temperature [%.1f °C]" {channel="km200:dhwCircuit:0815:1:actualTemp"}
|
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"}
|
Number budOutdoor "Outdoor temperature [%.1f °C]" {channel="km200:sensor:0815:1:outdoor_t1"}
|
||||||
```
|
```
|
||||||
|
|
|
@ -13,7 +13,7 @@ Since the protocol is identical, the KNX binding can also communicate with it tr
|
||||||
## Supported Things
|
## Supported Things
|
||||||
|
|
||||||
The KNX binding supports two types of bridges, and one type of things to access the KNX bus.
|
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
|
## Binding Configuration
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ The following two bridge types are supported. Bridges don't have channels on the
|
||||||
|
|
||||||
### IP Gateway
|
### 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 |
|
| 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 | - |
|
| tunnelUserPassword | No | KNX secure: Tunnel user key for secure tunnel mode | - |
|
||||||
| tunnelDeviceAuthentication | No | KNX secure: Tunnel device authentication for secure tunnel mode | - |
|
| tunnelDeviceAuthentication | No | KNX secure: Tunnel device authentication for secure tunnel mode | - |
|
||||||
|
|
||||||
|
|
||||||
### Serial Gateway
|
### Serial Gateway
|
||||||
|
|
||||||
The *serial* bridge accepts the following configuration parameters:
|
The _serial_ bridge accepts the following configuration parameters:
|
||||||
|
|
||||||
| Name | Required | Description | Default value |
|
| Name | Required | Description | Default value |
|
||||||
|---------------------|----------|--------------------------------------------------------------------------------------------------------------|---------------|
|
|---------------------|----------|--------------------------------------------------------------------------------------------------------------|---------------|
|
||||||
|
@ -60,13 +59,13 @@ The *serial* bridge accepts the following configuration parameters:
|
||||||
|
|
||||||
## Things
|
## Things
|
||||||
|
|
||||||
### *device* Things
|
### _device_ Things
|
||||||
|
|
||||||
*basic* Things are wrappers around arbitrary group addresses on the KNX bus.
|
_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.
|
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.
|
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.
|
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.
|
This is however an experimental feature, very prone to the actual on the KNX bus.
|
||||||
|
|
||||||
| Name | Required | Description | Default value |
|
| 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 |
|
| 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.
|
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.
|
'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.
|
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).
|
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 |
|
| ga | Group address for the binary switch | 1.001 |
|
||||||
|
|
||||||
|
|
||||||
##### Channel Type "dimmer"
|
##### Channel Type "dimmer"
|
||||||
|
|
||||||
| Parameter | Description | Default DPT |
|
| 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 |
|
| ga | Group address | 9.001 |
|
||||||
|
|
||||||
|
|
||||||
Note: Using the Units Of Measurement feature of openHAB (Quantitytype) requires that the DPT value is set correctly.
|
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.
|
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 |
|
| ga | Group address | 19.001 |
|
||||||
|
|
||||||
|
|
||||||
#### Control Channel Types
|
#### 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.
|
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 |
|
| ga | Group address for the binary switch | 1.001 |
|
||||||
|
|
||||||
|
|
||||||
##### Channel Type "dimmer-control"
|
##### Channel Type "dimmer-control"
|
||||||
|
|
||||||
| Parameter | Description | Default DPT |
|
| 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
|
#### Group Address Notation
|
||||||
|
|
||||||
```
|
```text
|
||||||
<config>="[<dpt>:][<]<mainGA>[[+[<]<listeningGA>][+[<]<listeningGA>..]]"
|
<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).
|
The `dpt` element is optional. If omitted, the corresponding default value will be used (see the channel descriptions above).
|
||||||
|
|
||||||
|
|
||||||
## KNX Secure
|
## KNX Secure
|
||||||
|
|
||||||
> NOTE: Support for KNX Secure is partly implemented for openHAB and should be considered as experimental.
|
> 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.
|
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**.
|
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.
|
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`.
|
- 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.
|
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`.
|
- 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.**
|
> NOTE: **openHAB currently ignores messages with secure group addresses.**
|
||||||
|
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
The following two templates are sufficient for almost all purposes.
|
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:
|
knx.things:
|
||||||
|
|
||||||
```xtend
|
```java
|
||||||
Bridge knx:ip:bridge [
|
Bridge knx:ip:bridge [
|
||||||
type="ROUTER",
|
type="ROUTER",
|
||||||
autoReconnectPeriod=60 //optional, do not set <30 sec.
|
autoReconnectPeriod=60 //optional, do not set <30 sec.
|
||||||
|
@ -267,7 +260,7 @@ Bridge knx:ip:bridge [
|
||||||
|
|
||||||
knx.things:
|
knx.things:
|
||||||
|
|
||||||
```xtend
|
```java
|
||||||
Bridge knx:ip:bridge [
|
Bridge knx:ip:bridge [
|
||||||
type="TUNNEL",
|
type="TUNNEL",
|
||||||
ipAddress="192.168.0.111",
|
ipAddress="192.168.0.111",
|
||||||
|
@ -283,7 +276,7 @@ Bridge knx:ip:bridge [
|
||||||
|
|
||||||
### Full Example
|
### Full Example
|
||||||
|
|
||||||
```xtend
|
```java
|
||||||
//TUNNEL
|
//TUNNEL
|
||||||
Bridge knx:ip:bridge [
|
Bridge knx:ip:bridge [
|
||||||
type="TUNNEL",
|
type="TUNNEL",
|
||||||
|
@ -328,7 +321,7 @@ Bridge knx:ip:bridge [
|
||||||
|
|
||||||
knx.items:
|
knx.items:
|
||||||
|
|
||||||
```xtend
|
```java
|
||||||
Switch demoSwitch "Light [%s]" <light> { channel="knx:device:bridge:generic:demoSwitch" }
|
Switch demoSwitch "Light [%s]" <light> { channel="knx:device:bridge:generic:demoSwitch" }
|
||||||
Dimmer demoDimmer "Dimmer [%d %%]" <light> { channel="knx:device:bridge:generic:demoDimmer" }
|
Dimmer demoDimmer "Dimmer [%d %%]" <light> { channel="knx:device:bridge:generic:demoDimmer" }
|
||||||
Rollershutter demoRollershutter "Shade [%d %%]" <rollershutter> { channel="knx:device:bridge:generic:demoRollershutter" }
|
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:
|
knx.sitemap:
|
||||||
|
|
||||||
```xtend
|
```perl
|
||||||
sitemap knx label="KNX Demo Sitemap" {
|
sitemap knx label="KNX Demo Sitemap" {
|
||||||
Frame label="Demo Elements" {
|
Frame label="Demo Elements" {
|
||||||
Switch item=demoSwitch
|
Switch item=demoSwitch
|
||||||
|
@ -359,7 +352,7 @@ sitemap knx label="KNX Demo Sitemap" {
|
||||||
|
|
||||||
control.things:
|
control.things:
|
||||||
|
|
||||||
```xtend
|
```java
|
||||||
Bridge knx:serial:bridge [
|
Bridge knx:serial:bridge [
|
||||||
serialPort="/dev/ttyAMA0",
|
serialPort="/dev/ttyAMA0",
|
||||||
readingPause=50,
|
readingPause=50,
|
||||||
|
@ -387,7 +380,7 @@ Bridge hue:bridge:bridge "Philips Hue Bridge" [
|
||||||
|
|
||||||
knx.items:
|
knx.items:
|
||||||
|
|
||||||
```xtend
|
```java
|
||||||
Switch demoSwitch "Light [%s]" <light> { channel="hue:0210:bridge:1:color", channel="knx:device:bridge:generic:controlSwitch" }
|
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" }
|
Dimmer demoDimmer "Dimmer [%d %%]" <light> { channel="hue:0210:bridge:1:color", channel="knx:device:bridge:generic:controlDimmer" }
|
||||||
```
|
```
|
||||||
|
|
|
@ -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.
|
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:
|
Please enable "Allow remote control from applications on this/other systems" in the Kodi settings menu under:
|
||||||
|
|
||||||
* Settings ➔ Services ➔ Control ➔
|
- Settings ➔ Services ➔ Control ➔
|
||||||
* Allow remote control from applications on **this** systems
|
- Allow remote control from applications on **this** systems
|
||||||
* Allow remote control from applications on **other** 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.
|
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
|
## Supported Things
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ The binding supports auto-discovery for available and prepared (see above) insta
|
||||||
Auto-discovery is enabled by default.
|
Auto-discovery is enabled by default.
|
||||||
To disable it, you can add the following line to `<openHAB-conf>/services/runtime.cfg`:
|
To disable it, you can add the following line to `<openHAB-conf>/services/runtime.cfg`:
|
||||||
|
|
||||||
```
|
```text
|
||||||
discovery.kodi:background=false
|
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:
|
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]
|
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`. |
|
| 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. |
|
| 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`. |
|
| 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 |
|
| inputrequested | Switch | Indicates whether Kodi is currently asking the user for input |
|
||||||
| screensaver | Switch | Current state of the Screensaver |
|
| 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) |
|
| 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-enabled | Switch | Display/hidden subtitle |
|
||||||
| subtitle-index | Number | Set or get subtitle index of currently playing media |
|
| subtitle-index | Number | Set or get subtitle index of currently playing media |
|
||||||
| subtitle-language | String | Display subtitle language 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-index | Number | Audio stream index of currently playing media |
|
||||||
| audio-codec | String | Audio codec of currently playing media **(Advanced)** |
|
| audio-codec | String | Audio codec of currently playing media **(Advanced)** |
|
||||||
| audio-language | String | Display language of currently playing audio stream **(Advanced)** |
|
| audio-language | String | Display language of currently playing audio stream **(Advanced)** |
|
||||||
| audio-name | String | Display title 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-channels | Number | Display channels of currently playing audio stream **(Advanced)** |
|
||||||
| video-codec | String | Video codec of currently playing media **(Advanced)** |
|
| video-codec | String | Video codec of currently playing media **(Advanced)** |
|
||||||
| video-index | Number | Index of currently playing multi stream video **(Advanced)** |
|
| video-index | Number | Index of currently playing multi stream video **(Advanced)** |
|
||||||
| video-height | Number | Height of currently playing 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.
|
Kodi things are extensible by channels of type `shownotification`, so that different notification pop-ups can be configured for different use cases.
|
||||||
|
|
||||||
|
|
||||||
### Channel Configuration
|
### Channel Configuration
|
||||||
|
|
||||||
**group** The PVR channels can be put into user-defined PVR channel groups.
|
**group** The PVR channels can be put into user-defined PVR channel groups.
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# Konnected Binding
|
# Konnected Binding
|
||||||
|
|
||||||
This binding is for interacting with a [Konnected Alarm Panel](https://konnected.io/).
|
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 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.
|
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.
|
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
|
## Supported Things
|
||||||
|
@ -16,24 +16,23 @@ The binding will then create things for each module discovered which can be adde
|
||||||
|
|
||||||
## Thing Configuration
|
## Thing Configuration
|
||||||
|
|
||||||
The binding attempts to discover The Konnected Alarm Panels via the UPnP service.
|
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.
|
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.
|
When manually adding things, the base URL of the Konnected Alarm Panel will need to be configured.
|
||||||
The base URL should include scheme, address and port (for example http://192.168.1.123:9123).
|
The base URL should include scheme, address and port (for example `http://192.168.1.123:9123`).
|
||||||
|
|
||||||
The binding will attempt to obtain the ip address of your openHAB server as configured in the OSGi framework.
|
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.
|
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.
|
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.
|
In this case you will need to configure the callback URL in the advanced configuration section.
|
||||||
The callback URL will normally end with /konnected (for example https://192.168.1.2/konnected).
|
The callback URL will normally end with /konnected (for example `https://192.168.1.2/konnected`).
|
||||||
|
|
||||||
In addition you can also turn off discovery which when this setting is synced to the module will cause the device to no longer respond to UPnP requests as documented.
|
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.
|
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.
|
The blink setting will disable the transmission LED on the Konnected Alarm Panel.
|
||||||
|
|
||||||
|
|
||||||
## Channels
|
## 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.
|
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.
|
A note about the Alarm Panel Pro.
|
||||||
Zones 1-8 can be configured for any Channel-Types.
|
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.
|
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.
|
DSB1820 temperature probes.
|
||||||
These are one wire devices which can all be Konnected to the same "Zone" on the Konnected Alarm Panel.
|
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.
|
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.
|
A channel should be added for each probe, as indicated above and configured with the appropriate address.
|
||||||
|
|
||||||
|
|
||||||
## Full Example
|
## Full Example
|
||||||
|
|
||||||
*.items
|
*.items
|
||||||
|
|
||||||
```
|
```java
|
||||||
Switch Siren "Siren" {channel="konnected:wifi-module:generic:siren"}
|
Switch Siren "Siren" {channel="konnected:wifi-module:generic:siren"}
|
||||||
Switch Back_Door_Sensor "Back Door" {channel="konnected:pro-module:generic:backd"}
|
Switch Back_Door_Sensor "Back Door" {channel="konnected:pro-module:generic:backd"}
|
||||||
```
|
```
|
||||||
|
|
||||||
*.sitemap
|
*.sitemap
|
||||||
|
|
||||||
```
|
```perl
|
||||||
Switch item=Back_Door_Sensor label="Back Door" icon="door" mappings=[OPEN="Open", CLOSED="Closed"]
|
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"]
|
Switch item=Siren label="Alarm Siren" icon="Siren" mappings=[ON="Open", OFF="Closed"]
|
||||||
```
|
```
|
||||||
|
|
||||||
*.things
|
*.things
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing konnected:wifi-module:generic "Konnected Module" [baseUrl="http://192.168.30.153:9586", macAddress="1586517"]{
|
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 switch-wifi : frontd "Front Door" [zone="1"]
|
||||||
Type actuator-wifi : siren "Siren" [zone="2", momentary = 50, times = 2, pause = 50]
|
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"]
|
Type temperature-pro : outhum "Outside Temperature (DS18B20)" [zone="4", dht22 = false, pollInterval = 1, ds18b20Address = "XX:XX:XX:XX:XX:XX:XX"]
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -25,22 +25,22 @@ All of these devices contain the same communication board (SCB = **S**mart**C**o
|
||||||
|
|
||||||
Currently supported things are:
|
Currently supported things are:
|
||||||
|
|
||||||
* PIKO IQ 4.2
|
- PIKO IQ 4.2
|
||||||
* PIKO IQ 5.5
|
- PIKO IQ 5.5
|
||||||
* PIKO IQ 7.0
|
- PIKO IQ 7.0
|
||||||
* PIKO IQ 8.5
|
- PIKO IQ 8.5
|
||||||
* PIKO IQ 10.0
|
- PIKO IQ 10.0
|
||||||
* PLENTICORE plus 4.2 (with or without battery attached)
|
- PLENTICORE plus 4.2 (with or without battery attached)
|
||||||
* PLENTICORE plus 5.5 (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 7.0 (with or without battery attached)
|
||||||
* PLENTICORE plus 8.5 (with or without battery attached)
|
- PLENTICORE plus 8.5 (with or without battery attached)
|
||||||
* PLENTICORE plus 10.0 (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!
|
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
|
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*).
|
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"*.
|
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
|
## Discovery
|
||||||
|
|
||||||
|
@ -50,27 +50,27 @@ None
|
||||||
|
|
||||||
### First generation devices (PIKO)
|
### First generation devices (PIKO)
|
||||||
|
|
||||||
- acPower
|
- acPower
|
||||||
- totalEnergy
|
- totalEnergy
|
||||||
- dayEnergy
|
- dayEnergy
|
||||||
- status
|
- status
|
||||||
- str1Voltage
|
- str1Voltage
|
||||||
- str1Current
|
- str1Current
|
||||||
- str2Voltage
|
- str2Voltage
|
||||||
- str2Current
|
- str2Current
|
||||||
- l1Voltage
|
- l1Voltage
|
||||||
- l1Power
|
- l1Power
|
||||||
- l2Voltage
|
- l2Voltage
|
||||||
- l2Power
|
- l2Power
|
||||||
- l3Voltage
|
- l3Voltage
|
||||||
- l3Power
|
- l3Power
|
||||||
|
|
||||||
### Second generation devices (PIKO 10-20, PIKO NEW GENERATION)
|
### Second generation devices (PIKO 10-20, PIKO NEW GENERATION)
|
||||||
|
|
||||||
| Channel Type ID | Item Type | Description | Read Write |
|
| Channel Type ID | Item Type | Description | Read Write |
|
||||||
|------------------------------------------|--------------------------|----------------------------------------------------------------------------------|:----------:|
|
|------------------------------------------|--------------------------|----------------------------------------------------------------------------------|:----------:|
|
||||||
| device-local-grid-output-power | Number:Power | Current output power to the grid | 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-day-second-gen | Number:Energy | Total produced power today | R |
|
||||||
| statistic-yield-total-second-gen | Number:Energy | Total produced power | 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-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 |
|
| 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 |
|
| statistic-operating-time-total | Number:Time | Total operating time | R |
|
||||||
| device-local-current | Number:ElectricCurrent | Current | R |
|
| device-local-current | Number:ElectricCurrent | Current | R |
|
||||||
| device-local-current-dir | Number:Dimensionless | Current direction of loading/unloading the battery | 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-battery-temperature | Number:Temperature | Battery current temperature | R |
|
||||||
| device-local-loginterval | Number:Time | Value for loginterval | 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-own-cons-rate-total | Number:Dimensionless | Total own comsumption rate | R |
|
||||||
| statistic-autonomy-degree-total | Number:Dimensionless | Total autonomy degree | R |
|
| statistic-autonomy-degree-total | Number:Dimensionless | Total autonomy degree | R |
|
||||||
| device-local-battery-voltage | Number:ElectricPotential | Battery current voltage | R |
|
| device-local-battery-voltage | Number:ElectricPotential | Battery current voltage | R |
|
||||||
|
@ -126,9 +126,9 @@ None
|
||||||
The following Channels are writeable
|
The following Channels are writeable
|
||||||
|
|
||||||
| Channel Type ID | Item Type | Description | Read Write |
|
| 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-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-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-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 |
|
| 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-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 |
|
| 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)
|
### Third generation devices (PIKO IQ / PLENTICORE plus)
|
||||||
|
|
||||||
| Channel Type ID | Item Type | Description | Read Write |
|
| Channel Type ID | Item Type | Description | Read Write |
|
||||||
|
@ -218,7 +217,7 @@ The following Channels are writeable
|
||||||
|
|
||||||
demo.things
|
demo.things
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing kostalinverter:kostalinverter:inverter [ url="http://192.168.0.128" ]
|
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.
|
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).
|
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 devices (PIKO 10-20, PIKO NEW GENERATION)
|
||||||
|
|
||||||
Second generation inverters require 4 mandatory parameters and 1 optional (hasBattery):
|
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 |
|
| username | Username for your inverter | Text | --- | --- | myUsername |
|
||||||
| password | Password for your inverter | Text | --- | --- | myPassword |
|
| password | Password for your inverter | Text | --- | --- | myPassword |
|
||||||
| refreshInterval | Pollingintervall of your inverter | Integer | Seconds | 60 | 60 |
|
| 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
|
demo.things
|
||||||
|
|
||||||
```
|
```java
|
||||||
|
|
||||||
Thing kostalinverter:piko1020:mypiko1020 [ url="http://'inverter-ip'", username="'myUsername'", password="'myPassword'", refreshInterval=60, hasBattery=false]
|
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.
|
You can define which type of PIKO10-20 inverter you will connect to with parameter hasBattery.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### Third generation devices (PIKO IQ / PLENTICORE plus)
|
### Third generation devices (PIKO IQ / PLENTICORE plus)
|
||||||
|
|
||||||
All third generation inverters require to define 3 mandatory configuration parameters:
|
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:
|
Full sample of thing configuration:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing kostalinverter:PLENTICOREPLUS100WITHBATTERY:MyPlentiCore100WithBattery [ url = "192.168.1.2", userPassword="myPassword", refreshInternalInSeconds="30"]
|
Thing kostalinverter:PLENTICOREPLUS100WITHBATTERY:MyPlentiCore100WithBattery [ url = "192.168.1.2", userPassword="myPassword", refreshInternalInSeconds="30"]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -278,19 +272,18 @@ Thing kostalinverter:PLENTICOREPLUS100WITHBATTERY:MyPlentiCore100WithBattery [ u
|
||||||
|
|
||||||
demo.items:
|
demo.items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Number:Power SolarPower "Solar power [%.1f %unit%]" <energy> { channel="kostalinverter:kostalinverter:inverter:acPower" }
|
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 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" }
|
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" }
|
String SolarStatus "Solar status [%s]" <energy> { channel="kostalinverter:kostalinverter:inverter:status" }
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
### Second generation devices (PIKO NEW GENERATION)
|
### Second generation devices (PIKO NEW GENERATION)
|
||||||
|
|
||||||
demo.items:
|
demo.items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Number:Power GridOutputPower "Grid Output Power" <energy> { channel="kostalinverter:piko1020:mypiko1020:gridOutputPower" }
|
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 YieldDaySecondGen "PV Output Power Day" <energy> { channel="kostalinverter:piko1020:mypiko1020:yieldDaySecondGen" }
|
||||||
Number:Energy YieldTotalSecondGen "PV Output Power Total" <energy> { channel="kostalinverter:piko1020:mypiko1020:yieldTotalSecondgen" }
|
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:
|
demo.items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
|
|
||||||
Number:Energy MyPlentiCore100WithBattery_DEVICE_LOCAL_DC_POWER <energy> { channel="kostalinverter:PLENTICOREPLUS100WITHBATTERY:MyPlentiCore100WithBattery:deviceLocalDCPower"}
|
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_BATTERY <energy> { channel="kostalinverter:PLENTICOREPLUS100WITHBATTERY:MyPlentiCore100WithBattery:deviceLocalHomeconsumptionFromBattery"}
|
||||||
Number:Energy MyPlentiCore100WithBattery_DEVICE_LOCAL_HOMECONSUMPTION_FROM_GRID <energy> { channel="kostalinverter:PLENTICOREPLUS100WITHBATTERY:MyPlentiCore100WithBattery:deviceLocalHomeconsumptionFromGrid"}
|
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
|
### Rules
|
||||||
|
|
||||||
Second generation devices (PIKO 10-20, PIKO NEW GENERATION)
|
Second generation devices (PIKO 10-20, PIKO NEW GENERATION)
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
Ex. Set Smart battery control OFF with cron trigger:
|
Ex. Set Smart battery control OFF with cron trigger:
|
||||||
|
|
||||||
|
```yaml
|
||||||
triggers:
|
triggers:
|
||||||
id: "1"
|
id: "1"
|
||||||
configuration:
|
configuration:
|
||||||
|
@ -447,5 +436,4 @@ actions:
|
||||||
type: application/vnd.openhab.dsl.rule
|
type: application/vnd.openhab.dsl.rule
|
||||||
script: KOSTALPIKO1020_SmartBatteryControlSet.sendCommand("OFF")
|
script: KOSTALPIKO1020_SmartBatteryControlSet.sendCommand("OFF")
|
||||||
type: script.ScriptAction
|
type: script.ScriptAction
|
||||||
|
```
|
||||||
|
|
||||||
|
|
|
@ -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'
|
### Example Call for Stop 'Gottesauer Platz/BGV'
|
||||||
|
|
||||||
```bash
|
```shell
|
||||||
export QUERY="gottesauer"
|
export QUERY="gottesauer"
|
||||||
curl https://www.kvv.de/tunnelEfaDirect.php?action=XSLT_STOPFINDER_REQUEST&name_sf=${QUERY}&outputFormat=JSON&type_sf=any
|
curl https://www.kvv.de/tunnelEfaDirect.php?action=XSLT_STOPFINDER_REQUEST&name_sf=${QUERY}&outputFormat=JSON&type_sf=any
|
||||||
```
|
```
|
||||||
|
|
|
@ -2,13 +2,13 @@
|
||||||
|
|
||||||
The LaMetric binding allows to connect openHAB to LaMetric Time connected clock devices, providing following features:
|
The LaMetric binding allows to connect openHAB to LaMetric Time connected clock devices, providing following features:
|
||||||
|
|
||||||
* Control the LaMetric Time Device
|
- Control the LaMetric Time Device
|
||||||
* Control Display Brightness
|
- Control Display Brightness
|
||||||
* Change Audio Volume
|
- Change Audio Volume
|
||||||
* Enable / Disable Bluetooth
|
- Enable / Disable Bluetooth
|
||||||
* Activate an Application
|
- Activate an Application
|
||||||
* Send notifications messages
|
- Send notifications messages
|
||||||
* Control the core (built-in) apps
|
- Control the core (built-in) apps
|
||||||
|
|
||||||
## Supported Things
|
## Supported Things
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ For example, if you duplicated the weather app for two locations, the app would
|
||||||
|
|
||||||
### Sample Thing Configuration
|
### Sample Thing Configuration
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge lametrictime:device:demo [ host="somehost", apiKey="ksfjsdkfsksjfs" ]
|
Bridge lametrictime:device:demo [ host="somehost", apiKey="ksfjsdkfsksjfs" ]
|
||||||
{
|
{
|
||||||
Thing clockApp clock [ widgetId="generatedcorewidgetid1" ]
|
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:
|
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"}
|
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:
|
In a rule this can be done the following way:
|
||||||
|
|
||||||
```
|
```java
|
||||||
DeviceNotifyInfo.sendCommand("My Information Message to be displayed")
|
DeviceNotifyInfo.sendCommand("My Information Message to be displayed")
|
||||||
```
|
```
|
||||||
|
|
||||||
## Items
|
## Items
|
||||||
|
|
||||||
Sample item configuration:
|
Sample item configuration:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Dimmer DeviceBrightness "Brightness" { channel="lametrictime:device:demo:brightness" }
|
Dimmer DeviceBrightness "Brightness" { channel="lametrictime:device:demo:brightness" }
|
||||||
String DeviceBrightnessMode "Brightness Mode" { channel="lametrictime:device:demo:brightnessMode" }
|
String DeviceBrightnessMode "Brightness Mode" { channel="lametrictime:device:demo:brightnessMode" }
|
||||||
Dimmer DeviceVolume "Volume" { channel="lametrictime:device:demo:volume" }
|
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.
|
**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.
|
For this reason, the brightness modes and example applications are repeated here.
|
||||||
|
|
||||||
```
|
```perl
|
||||||
Text label="LaMetric Time Demo" {
|
Text label="LaMetric Time Demo" {
|
||||||
Frame label="Device Controls" {
|
Frame label="Device Controls" {
|
||||||
Slider item=DeviceBrightness
|
Slider item=DeviceBrightness
|
||||||
|
@ -225,7 +225,7 @@ For this reason, the brightness modes and example applications are repeated here
|
||||||
|
|
||||||
Sample rules:
|
Sample rules:
|
||||||
|
|
||||||
```
|
```java
|
||||||
import java.util.Calendar
|
import java.util.Calendar
|
||||||
|
|
||||||
rule "Notify Info"
|
rule "Notify Info"
|
||||||
|
|
|
@ -21,7 +21,7 @@ This binding uses TCP/IP to access the LCN bus via the software LCN-PCHK (Window
|
||||||
|
|
||||||
### Thing: LCN Module
|
### 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.
|
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.
|
Modules with older and newer firmware should work, too.
|
||||||
|
@ -40,9 +40,9 @@ See [Discover LCN Modules](#discover-lcn-modules).
|
||||||
### Bridge: LCN PCK Gateway
|
### Bridge: LCN PCK Gateway
|
||||||
|
|
||||||
PCK is the protocol spoken over TCP/IP with a PCK gateway to communicate with the LCN bus.
|
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.
|
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
|
### 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.
|
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`
|
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 |
|
| `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 |
|
| `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
|
## 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.
|
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.
|
`S<segmentId>M<moduleId>` where `segmentId` and `moduleId` are formatted as three-digit numbers with leading zeros.
|
||||||
|
|
||||||
### Discover PCK Gateways
|
### 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.
|
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'.
|
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.
|
Also, some network switches may block multicast packets.
|
||||||
Unfortunately, *LCN-PCHK* listens only on the first network interface of the computer for discovery 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.
|
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.
|
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.
|
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).
|
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
|
## Supported LCN Features and openHAB Channels
|
||||||
|
|
||||||
The following table lists all features of LCN and their mappings to 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.
|
LCN group (`group`) has the same Channels, except status-only Channels like binary sensors or transponders.
|
||||||
The PCK gateway (`pckGateway`) has no Channels.
|
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 |
|
| Remote Control | Fernbedienung | code#remotecontrolkey | | Trigger | Receive commands from remote control |
|
||||||
| Access Control | Zutrittskontrolle | code#remotecontrolcode | | Trigger | Receive serial numbers 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 |
|
| 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 | 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 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 |
|
| 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 |
|
| Set S0 Counters | S0-Zähler setzen | - | - | - | Not implemented |
|
||||||
| Status Command | Statuskommandos | - | - | - | 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.
|
- 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.
|
- 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.
|
- 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
|
### Transponder/Fingerprints
|
||||||
|
|
||||||
LCN transponder readers or fingerprint readers can be integrated in openHAB e.g. for access control.
|
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:
|
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"
|
rule "My Transponder"
|
||||||
when
|
when
|
||||||
Channel "lcn:module:b827ebfea4bb:S000M011:code#transponder" triggered "12ABCD"
|
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:
|
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"
|
rule "My Fingerprint"
|
||||||
when
|
when
|
||||||
Channel "lcn:module:b827ebfea4bb:S000M011:code#fingerprint" triggered "AFFE12"
|
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.
|
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.
|
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.
|
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).
|
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.
|
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)
|
![Screenshot, showing the send keys command](doc/host_command_send_keys.png)
|
||||||
|
|
||||||
The following rule can be used to trigger any action:
|
The following rule can be used to trigger any action:
|
||||||
|
|
||||||
```
|
```java
|
||||||
rule "Module 12 sent A1 Hit"
|
rule "Module 12 sent A1 Hit"
|
||||||
when
|
when
|
||||||
Channel "lcn:module:b827ebfea4bb:S000M012:hostcommand#sendKeys" triggered "A1:HIT"
|
Channel "lcn:module:b827ebfea4bb:S000M012:hostcommand#sendKeys" triggered "A1:HIT"
|
||||||
|
@ -253,7 +253,7 @@ then
|
||||||
end
|
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)
|
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.
|
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
|
### 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)
|
![Screenshot, showing the I-port properties for remote controls](doc/ir.png)
|
||||||
|
|
||||||
#### Remote Control Keys
|
#### 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"
|
rule "Remote Control Key 3 on Layer 1 hit"
|
||||||
when
|
when
|
||||||
Channel "lcn:module:b827ebfea4bb:S000M012:code#remotecontrolkey" triggered "A3:HIT"
|
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:
|
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)"
|
rule "Remote Control Key 3 on Layer 1 hit (only executed for serial number AB1234)"
|
||||||
when
|
when
|
||||||
Channel "lcn:module:b827ebfea4bb:S000M012:code#remotecontrolcode" triggered "AB1234:A3:HIT" or
|
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
|
## 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.
|
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).
|
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.
|
The ramp parameter is not available for Color _Item_s.
|
||||||
|
|
||||||
```
|
```java
|
||||||
// Dim output 2 in 0.25s
|
// 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)
|
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
|
// 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)
|
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.
|
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:
|
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.
|
// 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_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]}
|
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
|
### 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.
|
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.
|
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.
|
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.
|
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 />
|
_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 />
|
_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")
|
_action_ - The key's action: HIT (German: "kurz"), MAKE ("lang") or BREAK ("los")
|
||||||
|
|
||||||
```
|
```java
|
||||||
rule "Hit key C4 hourly"
|
rule "Hit key C4 hourly"
|
||||||
when
|
when
|
||||||
Time cron "0 0 * * * ?"
|
Time cron "0 0 * * * ?"
|
||||||
|
@ -359,20 +359,20 @@ end
|
||||||
|
|
||||||
### Dynamic Text
|
### Dynamic Text
|
||||||
|
|
||||||
This *Action* can be used to send custom texts to an LCN-GTxD display.
|
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*:
|
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)
|
![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 />
|
_row_ - The number of the row in the display: 1-4<br />
|
||||||
*text* - The text to be displayed (UTF-8)
|
_text_ - The text to be displayed (UTF-8)
|
||||||
|
|
||||||
The length of the text may not exceed 60 bytes of characters.
|
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).
|
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"
|
rule "Send dynamic Text to GT10D hourly"
|
||||||
when
|
when
|
||||||
Time cron "0 0 * * * ?"
|
Time cron "0 0 * * * ?"
|
||||||
|
@ -384,19 +384,19 @@ end
|
||||||
|
|
||||||
### Flicker Output
|
### 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.
|
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 />
|
_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 />
|
_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 />
|
_ramp_ - The duration/ramp of one flash: 0-2 (0=2sec 1=1sec 2=0.5sec)<br />
|
||||||
*count* - The number of flashes: 1-15
|
_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"
|
rule "Flicker output 1 when window opens"
|
||||||
when
|
when
|
||||||
Item M10_BinarySensor5 changed to OPEN
|
Item M10_BinarySensor5 changed to OPEN
|
||||||
|
@ -409,15 +409,15 @@ end
|
||||||
|
|
||||||
### Relay Timer
|
### 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.
|
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 />
|
_relayNumber_ - The relay number: 1-8<br />
|
||||||
*duration* - Timer duration in milliseconds: 30-240.000 ms<br />
|
_duration_ - Timer duration in milliseconds: 30-240.000 ms<br />
|
||||||
|
|
||||||
```
|
```java
|
||||||
rule "Start relay timer for led driver when dummy switch changed"
|
rule "Start relay timer for led driver when dummy switch changed"
|
||||||
when
|
when
|
||||||
Item Dummy_Switch changed
|
Item Dummy_Switch changed
|
||||||
|
@ -430,14 +430,14 @@ end
|
||||||
|
|
||||||
### Beep
|
### 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.
|
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 />
|
_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 />
|
_tonality_ - The tonality as a String. You need to use quotes. See below.<br />
|
||||||
*count* - Number of beeps (max. 50)
|
_count_ - Number of beeps (max. 50)
|
||||||
|
|
||||||
Tonalities:
|
Tonalities:
|
||||||
|
|
||||||
|
@ -451,7 +451,7 @@ Tonalities:
|
||||||
- "6"=error
|
- "6"=error
|
||||||
- "7"=long
|
- "7"=long
|
||||||
|
|
||||||
```
|
```java
|
||||||
rule "Beep when dummy switch changed"
|
rule "Beep when dummy switch changed"
|
||||||
when
|
when
|
||||||
Item Dummy_Switch changed
|
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.
|
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
|
## Full Example
|
||||||
|
|
||||||
Config `.things`
|
Config `.things`
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge lcn:pckGateway:myPCHK [ hostname="192.168.123.123", port=4114, username="myUser", password="myPassword", mode="native200" ] {
|
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 ] {
|
Thing module M99 "M99 MyModule" [ moduleId=99, segmentId=0 ] {
|
||||||
Channels:
|
Channels:
|
||||||
Rollershutter : rollershutterrelay#1 "My twisted rollershutter relay" [ invertUpDown = true ]
|
Rollershutter : rollershutterrelay#1 "My twisted rollershutter relay" [ invertUpDown = true ]
|
||||||
Contact : binarysensor#6 [ invertState=true ]
|
Contact : binarysensor#6 [ invertState=true ]
|
||||||
Number : rvarsetpoint#1 [ unit="temperature" ]
|
Number : rvarsetpoint#1 [ unit="temperature" ]
|
||||||
Number : variable#3 [ unit="temperature" ]
|
Number : variable#3 [ unit="temperature" ]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Config `.items`
|
Config `.items`
|
||||||
|
|
||||||
```
|
```java
|
||||||
// Dimmer Outputs
|
// Dimmer Outputs
|
||||||
Dimmer M10_Output1 {channel="lcn:module:b827ebfea4bb:S000M010:output#1"}
|
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)
|
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`
|
Config `.sitemap`
|
||||||
|
|
||||||
```
|
```perl
|
||||||
sitemap lcn label="My home automation" {
|
sitemap lcn label="My home automation" {
|
||||||
Frame label="Demo Items" {
|
Frame label="Demo Items" {
|
||||||
// Dimmer Outputs
|
// Dimmer Outputs
|
||||||
|
|
|
@ -43,13 +43,13 @@ This binding specifies 3 profiles for the `gesture` channel to make it easy to l
|
||||||
|
|
||||||
demo.things:
|
demo.things:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing leapmotion:controller:1 MyLeapMotion
|
Thing leapmotion:controller:1 MyLeapMotion
|
||||||
```
|
```
|
||||||
|
|
||||||
demo.items:
|
demo.items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Switch DemoSwitch "Switch" { channel="leapmotion:controller:1:gesture" }
|
Switch DemoSwitch "Switch" { channel="leapmotion:controller:1:gesture" }
|
||||||
Color RGBLight "RGB Light" { 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"] }
|
Dimmer DimmedLight "Dimmer [%d %%]" { channel="leapmotion:controller:1:gesture"[profile="leapmotion:dimmer", mode="fingers"] }
|
||||||
|
|
|
@ -26,7 +26,6 @@ You can also configure the polling interval in seconds by setting "pollingPeriod
|
||||||
|
|
||||||
## Channels
|
## Channels
|
||||||
|
|
||||||
|
|
||||||
| Channel Type ID | Item Type | Description | Read/Write |
|
| Channel Type ID | Item Type | Description | Read/Write |
|
||||||
|-----------------|-----------|--------------------------------------------------------------------------|------------|
|
|-----------------|-----------|--------------------------------------------------------------------------|------------|
|
||||||
| state | String | Current state of the HomBot. | R |
|
| state | String | Current state of the HomBot. | R |
|
||||||
|
@ -59,7 +58,7 @@ Example of how to configure a thing.
|
||||||
|
|
||||||
demo.thing
|
demo.thing
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing lghombot:LGHomBot:mycleanerbot "LGHomBot" @ "Living Room" [ ipAdress="192.168.0.2", pollingPeriod="3", port="6260" ]
|
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:
|
demo.items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
String HomBot_State "State [%s]" <CleaningRobot> { channel="lghombot:LGHomBot:a4_24_56_8f_2c_5b:state" }
|
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" }
|
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" }
|
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:
|
demo.sitemap:
|
||||||
|
|
||||||
```
|
```perl
|
||||||
sitemap demo label="Main Menu"
|
sitemap demo label="Main Menu"
|
||||||
{
|
{
|
||||||
Frame label="HomBot" {
|
Frame label="HomBot" {
|
||||||
|
|
|
@ -20,7 +20,7 @@ If channel `power` receives `ON`, the binding will attempt to power on the TV by
|
||||||
|
|
||||||
## Binding Configuration
|
## Binding Configuration
|
||||||
|
|
||||||
The binding has no configuration parameter.
|
The binding has no configuration parameter.
|
||||||
|
|
||||||
## Discovery
|
## Discovery
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ Parameters:
|
||||||
|
|
||||||
Set host and key parameter as in the following example:
|
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"]
|
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 |
|
| PAUSE | "PAUSE" button |
|
||||||
| STOP | "STOP" button |
|
| STOP | "STOP" button |
|
||||||
|
|
||||||
|
|
||||||
A sample HABPanel remote control widget can be found [in this GitHub repository.](https://github.com/bbrodt/openhab2-misc)
|
A sample HABPanel remote control widget can be found [in this GitHub repository.](https://github.com/bbrodt/openhab2-misc)
|
||||||
|
|
||||||
## Console Commands
|
## 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.
|
The binding provides a few commands you can use in the console.
|
||||||
Enter the command `openhab:lgwebos` to get the usage.
|
Enter the command `openhab:lgwebos` to get the usage.
|
||||||
|
|
||||||
```
|
```shell
|
||||||
Usage: openhab:lgwebos <thingUID> applications - list applications
|
Usage: openhab:lgwebos <thingUID> applications - list applications
|
||||||
Usage: openhab:lgwebos <thingUID> channels - list channels
|
Usage: openhab:lgwebos <thingUID> channels - list channels
|
||||||
Usage: openhab:lgwebos <thingUID> accesskey - show the access key
|
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:
|
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"]
|
Thing lgwebos:WebOSTV:3aab9eea-953b-4272-bdbd-f0cd0ecf4a46 [host="192.168.2.119", key="6ef1dff6c7c936c8dc5056fc85ea3aef", macAddress="3c:cd:93:c2:20:e0"]
|
||||||
```
|
```
|
||||||
|
|
||||||
demo.items:
|
demo.items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Switch LG_TV0_Power "TV Power" <television> { autoupdate="false", channel="lgwebos:WebOSTV:3aab9eea-953b-4272-bdbd-f0cd0ecf4a46:power" }
|
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"}
|
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" }
|
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:
|
demo.sitemap:
|
||||||
|
|
||||||
```
|
```perl
|
||||||
sitemap demo label="Main Menu"
|
sitemap demo label="Main Menu"
|
||||||
{
|
{
|
||||||
Frame label="TV" {
|
Frame label="TV" {
|
||||||
|
@ -152,10 +151,9 @@ sitemap demo label="Main Menu"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
demo.rules:
|
demo.rules:
|
||||||
|
|
||||||
```
|
```java
|
||||||
// for relative volume changes
|
// for relative volume changes
|
||||||
rule "VolumeUpDown"
|
rule "VolumeUpDown"
|
||||||
when Item LG_TV0_VolDummy received command
|
when Item LG_TV0_VolDummy received command
|
||||||
|
@ -183,10 +181,9 @@ then
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
Example of a toast message.
|
Example of a toast message.
|
||||||
|
|
||||||
```
|
```java
|
||||||
LG_TV0_Toast.sendCommand("Hello World")
|
LG_TV0_Toast.sendCommand("Hello World")
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -196,7 +193,7 @@ Multiple actions are supported by this binding. In classic rules these are acces
|
||||||
|
|
||||||
Example
|
Example
|
||||||
|
|
||||||
```
|
```java
|
||||||
val actions = getActions("lgwebos","lgwebos:WebOSTV:3aab9eea-953b-4272-bdbd-f0cd0ecf4a46")
|
val actions = getActions("lgwebos","lgwebos:WebOSTV:3aab9eea-953b-4272-bdbd-f0cd0ecf4a46")
|
||||||
if(null === actions) {
|
if(null === actions) {
|
||||||
logInfo("actions", "Actions not found, check thing ID")
|
logInfo("actions", "Actions not found, check thing ID")
|
||||||
|
@ -216,7 +213,7 @@ Parameters:
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
actions.showToast("Hello World")
|
actions.showToast("Hello World")
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -233,7 +230,7 @@ Parameters:
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
actions.showToast("http://localhost:8080/icon/energy?format=png","Hello World")
|
actions.showToast("http://localhost:8080/icon/energy?format=png","Hello World")
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -249,7 +246,7 @@ Parameters:
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
actions.launchBrowser("https://www.openhab.org")
|
actions.launchBrowser("https://www.openhab.org")
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -265,7 +262,7 @@ Parameters:
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
```
|
```java
|
||||||
actions.launchApplication("com.webos.app.tvguide") // TV Guide
|
actions.launchApplication("com.webos.app.tvguide") // TV Guide
|
||||||
actions.launchApplication("com.webos.app.livetv") // TV
|
actions.launchApplication("com.webos.app.livetv") // TV
|
||||||
actions.launchApplication("com.webos.app.hdmi1") // HDMI1
|
actions.launchApplication("com.webos.app.hdmi1") // HDMI1
|
||||||
|
@ -286,7 +283,7 @@ Parameters:
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
```
|
```java
|
||||||
actions.launchApplication("appId","{\"key\":\"value\"}")
|
actions.launchApplication("appId","{\"key\":\"value\"}")
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -304,7 +301,7 @@ Parameters:
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
actions.sendText("Some text")
|
actions.sendText("Some text")
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -320,7 +317,7 @@ Parameters:
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
actions.sendButton("HOME")
|
actions.sendButton("HOME")
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -339,7 +336,7 @@ ENTER will remove the keyboard when on-screen keyboard is displayed with focus i
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
actions.sendKeyboard("ENTER")
|
actions.sendKeyboard("ENTER")
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -349,7 +346,7 @@ TV will switch one channel up in the current channel list.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
actions.increaseChannel
|
actions.increaseChannel
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -359,7 +356,7 @@ TV will switch one channel down in the current channel list.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
actions.decreaseChannel
|
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:
|
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
|
log:set debug org.openhab.binding.lgwebos
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -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.
|
The binding is able to auto-discover all lights in a network over the LIFX UDP protocol.
|
||||||
Therefore all lights must be turned on.
|
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.
|
The binding is NOT able to add or detect lights outside the network.
|
||||||
|
|
||||||
## Thing Configuration
|
## 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
|
However, in the thing file, a manual configuration looks e.g. like
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing lifx:colorlight:living [ deviceId="D073D5A1A1A1", fadetime=200 ]
|
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).
|
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.
|
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.
|
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 ]
|
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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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.
|
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.
|
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).
|
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.
|
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.
|
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.
|
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 _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.
|
These effects are predefined to their appearance using LIFX application.
|
||||||
Each effect has a separate speed configuration option.
|
Each effect has a separate speed configuration option.
|
||||||
|
|
||||||
## Full Example
|
## 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.
|
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.
|
|
||||||
|
|
||||||
|
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:
|
### demo.things:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing lifx:colorlight:living [ deviceId="D073D5A1A1A1" ]
|
Thing lifx:colorlight:living [ deviceId="D073D5A1A1A1" ]
|
||||||
|
|
||||||
Thing lifx:colorlight:living2 [ deviceId="D073D5A2A2A2" ] {
|
Thing lifx:colorlight:living2 [ deviceId="D073D5A2A2A2" ] {
|
||||||
|
@ -172,7 +171,7 @@ Thing lifx:whitelight:kitchen [ deviceId="D073D5D4D4D4", fadetime=150 ]
|
||||||
|
|
||||||
### demo.items:
|
### demo.items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
// Living
|
// Living
|
||||||
Color Living_Color { channel="lifx:colorlight:living:color" }
|
Color Living_Color { channel="lifx:colorlight:living:color" }
|
||||||
Dimmer Living_Temperature { channel="lifx:colorlight:living:temperature" }
|
Dimmer Living_Temperature { channel="lifx:colorlight:living:temperature" }
|
||||||
|
@ -218,7 +217,7 @@ Number Kitchen_Abs_Temperature { channel="lifx:whitelight:kitchen:abstemperature
|
||||||
|
|
||||||
### demo.sitemap:
|
### demo.sitemap:
|
||||||
|
|
||||||
```
|
```perl
|
||||||
sitemap demo label="Main Menu"
|
sitemap demo label="Main Menu"
|
||||||
{
|
{
|
||||||
Frame label="Living" {
|
Frame label="Living" {
|
||||||
|
|
|
@ -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.
|
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.
|
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.
|
The binding will not provide these informations unless this step is ok.
|
||||||
|
|
||||||
## Supported Things
|
## 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).
|
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).
|
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/.
|
1. Go to <https://mon-compte-client.enedis.fr/>.
|
||||||
2. Select "Particulier" in the drop down list and click on the "Connexion" button.
|
1. 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.
|
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.
|
||||||
4. Clic on "Suivant".
|
1. 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".
|
1. 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.
|
1. You will be directed to your Enedis account environment. Get back to previous page in you browser.
|
||||||
7. Disconnect from your Enedis account
|
1. 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. 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
|
## 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.
|
The binding provides one specific command you can use in the console.
|
||||||
Enter the command `openhab:linky` to get the usage.
|
Enter the command `openhab:linky` to get the usage.
|
||||||
|
|
||||||
```
|
```shell
|
||||||
Usage: openhab:linky <thingUID> report <start day> <end day> [<separator>] - report daily consumptions between two dates
|
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.
|
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
|
### Thing
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing linky:linky:local "Compteur Linky" [ username="example@domaine.fr", password="******" ]
|
Thing linky:linky:local "Compteur Linky" [ username="example@domaine.fr", password="******" ]
|
||||||
```
|
```
|
||||||
|
|
||||||
### Items
|
### Items
|
||||||
|
|
||||||
```
|
```java
|
||||||
Number:Energy ConsoHier "Conso hier [%.0f %unit%]" <energy> { channel="linky:linky:local:daily#yesterday" }
|
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 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" }
|
Number:Energy ConsoSemaineDerniere "Conso semaine dernière [%.0f %unit%]" <energy> { channel="linky:linky:local:weekly#lastWeek" }
|
||||||
|
|
|
@ -36,21 +36,20 @@ The `libevdev` library has to be installed for this plugin to work.
|
||||||
## Thing Configuration
|
## Thing Configuration
|
||||||
|
|
||||||
Each thing has has to be explicitly enabled after it is configured.
|
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!
|
The device will not be available for normal input processing!
|
||||||
|
|
||||||
|
|
||||||
### Static configuration
|
### Static configuration
|
||||||
|
|
||||||
#### Thing
|
#### Thing
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing linuxinput:input-device:some-keyboard [ enable=true, path="/dev/input/eventXX" ]
|
Thing linuxinput:input-device:some-keyboard [ enable=true, path="/dev/input/eventXX" ]
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Item
|
#### Item
|
||||||
|
|
||||||
```
|
```java
|
||||||
Contact SomeButton "Some Button" { channel="linuxinput:input-device:event17:keypresses#KEY_0" }
|
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
|
Each Thing provides multiple channels
|
||||||
|
|
||||||
* A `key` channel that aggregates all events.
|
- A `key` channel that aggregates all events.
|
||||||
* Per physical key channels.
|
- Per physical key channels.
|
||||||
|
|
||||||
### Events
|
### Events
|
||||||
|
|
||||||
|
@ -67,16 +66,16 @@ The following happens when pressing and releasing a key:
|
||||||
|
|
||||||
#### Press
|
#### Press
|
||||||
|
|
||||||
1) State of global key channel updated to new key.
|
1. State of global key channel updated to new key.
|
||||||
2) State of per-key channel updated to `"CLOSED"`.
|
1. State of per-key channel updated to `"CLOSED"`.
|
||||||
3) Global key channel triggered with the current key name.
|
1. Global key channel triggered with the current key name.
|
||||||
4) Per-key channel triggered with `"PRESSED"`".
|
1. Per-key channel triggered with `"PRESSED"`".
|
||||||
5) State of global key channel updated to `""` (Empty string)
|
1. State of global key channel updated to `""` (Empty string)
|
||||||
|
|
||||||
#### Release
|
#### Release
|
||||||
|
|
||||||
1) State of per-key channel updated to `"OPEN"`
|
1. State of per-key channel updated to `"OPEN"`
|
||||||
2) Per-key channel triggered with `"RELEASED"`
|
1. Per-key channel triggered with `"RELEASED"`
|
||||||
|
|
||||||
#### Rationale
|
#### Rationale
|
||||||
|
|
||||||
|
|
|
@ -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).
|
A list of remote configuration files for LIRC is available [here](http://lirc-remotes.sourceforge.net/remotes-table.html).
|
||||||
|
|
||||||
|
|
||||||
## Supported Things
|
## Supported Things
|
||||||
|
|
||||||
This binding supports LIRC and WinLIRC as bridges for accessing the configured remotes.
|
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
|
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.
|
rather run LIRC on a specific port or IP address, you can use `--listen=192.168.1.100:9001` instead.
|
||||||
|
|
||||||
|
|
||||||
## Discovery
|
## Discovery
|
||||||
|
|
||||||
Discovery of the LIRC bridge is not supported. However, remotes will be automatically discovered once
|
Discovery of the LIRC bridge is not supported. However, remotes will be automatically discovered once
|
||||||
|
@ -39,7 +37,7 @@ a bridge is configured.
|
||||||
|
|
||||||
### Things
|
### Things
|
||||||
|
|
||||||
```xtend
|
```java
|
||||||
Bridge lirc:bridge:local [ host="192.168.1.120", portNumber="9001" ] {
|
Bridge lirc:bridge:local [ host="192.168.1.120", portNumber="9001" ] {
|
||||||
Thing remote Onkyo_RC_799M [ remote="Onkyo_RC-799M" ]
|
Thing remote Onkyo_RC_799M [ remote="Onkyo_RC-799M" ]
|
||||||
Thing remote Samsung [ remote="Samsung" ]
|
Thing remote Samsung [ remote="Samsung" ]
|
||||||
|
@ -48,23 +46,23 @@ Bridge lirc:bridge:local [ host="192.168.1.120", portNumber="9001" ] {
|
||||||
|
|
||||||
Bridge:
|
Bridge:
|
||||||
|
|
||||||
* **host**: IP address or hostname of the LIRC server. Defaults to localhost
|
- **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
|
- **port**: The port number the LIRC server is listening on. Defaults to 8765
|
||||||
|
|
||||||
Remote:
|
Remote:
|
||||||
|
|
||||||
* **remote**: The name of the remote as known by LIRC
|
- **remote**: The name of the remote as known by LIRC
|
||||||
|
|
||||||
### Items
|
### Items
|
||||||
|
|
||||||
```xtend
|
```java
|
||||||
String Remote_AVReceiver { channel="lirc:remote:local:Onkyo_RC_799M:transmit" }
|
String Remote_AVReceiver { channel="lirc:remote:local:Onkyo_RC_799M:transmit" }
|
||||||
String Remote_TV { channel="lirc:remote:local:Samsung:transmit" }
|
String Remote_TV { channel="lirc:remote:local:Samsung:transmit" }
|
||||||
```
|
```
|
||||||
|
|
||||||
### Rules
|
### Rules
|
||||||
|
|
||||||
```xtend
|
```java
|
||||||
rule "LIRC Test"
|
rule "LIRC Test"
|
||||||
when
|
when
|
||||||
Channel 'lirc:remote:local:Samsung:event' triggered KEY_DVD
|
Channel 'lirc:remote:local:Samsung:event' triggered KEY_DVD
|
||||||
|
@ -76,7 +74,6 @@ then
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## Channels
|
## Channels
|
||||||
|
|
||||||
This binding currently supports following channels:
|
This binding currently supports following channels:
|
||||||
|
|
|
@ -105,7 +105,6 @@ It is `false` by default.
|
||||||
This means `100` on LIVISI is `UP` and `0` is `DOWN`.
|
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`.
|
When `invert` is `true` than `0` on LIVISI is `UP` and `100` is `DOWN`.
|
||||||
|
|
||||||
|
|
||||||
## Triggers
|
## Triggers
|
||||||
|
|
||||||
| Trigger Type | Description | Available on thing |
|
| 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 |
|
| 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 |
|
| PRESSED | Fired when you press a button (short or long) | BRC8, ISC2, ISD2, ISR2, ISS2, WSC2 |
|
||||||
|
|
||||||
|
|
||||||
## Thing configuration
|
## Thing configuration
|
||||||
|
|
||||||
### Configuring the SmartHome Controller (SHC)
|
### 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.
|
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:
|
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]
|
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.
|
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.
|
So be careful and secure your local network from unauthorized access.
|
||||||
|
|
||||||
All other LIVISI devices can be added using the following syntax:
|
All other LIVISI devices can be added using the following syntax:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing WDS <thing-id> "<thing-name>" @ "<room-name>" [ id="<the-device-id>" ]
|
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:
|
However, a full example .things configuration look like this:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge livisismarthome:bridge:mybride "LIVISI SmartHome Controller" {
|
Bridge livisismarthome:bridge:mybride "LIVISI SmartHome Controller" {
|
||||||
Thing ISD2 myDimmer "Dimmer Kitchen" @ "Kitchen" [ id="<device-id>" ]
|
Thing ISD2 myDimmer "Dimmer Kitchen" @ "Kitchen" [ id="<device-id>" ]
|
||||||
Thing ISS2 myLightSwitch "Light Livingroom" @ "Livingroom" [ 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:
|
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"}
|
Contact myWindowContact "Kitchen" <window> {channel="livisismarthome:WDS:mybridge:myWindowContact:contact"}
|
||||||
Switch myWindowContactBattery "Battery low" <battery> {channel="livisismarthome:WDS:mybridge:myWindowContact:batteryLow"}
|
Switch myWindowContactBattery "Battery low" <battery> {channel="livisismarthome:WDS:mybridge:myWindowContact:batteryLow"}
|
||||||
Number myHeatingTemp "Bath [%.1f °C]" <temperature> {channel="livisismarthome:RST:mybridge:myHeating:currentTemperature"}
|
Number myHeatingTemp "Bath [%.1f °C]" <temperature> {channel="livisismarthome:RST:mybridge:myHeating:currentTemperature"}
|
||||||
|
@ -187,7 +185,7 @@ Number myHeatingHumidity "Bath [%.1f %%]" <humidity> {channel="
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
```
|
```perl
|
||||||
sitemap default label="Home" {
|
sitemap default label="Home" {
|
||||||
Frame {
|
Frame {
|
||||||
Text item=myHeatingTemp label="Temperature"
|
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.
|
Push-buttons provide trigger channels, that can only be used in rules.
|
||||||
Here is an example rule:
|
Here is an example rule:
|
||||||
|
|
||||||
```
|
```java
|
||||||
rule "Button triggered rule"
|
rule "Button triggered rule"
|
||||||
when
|
when
|
||||||
Channel 'livisismarthome:WSC2:mybridge:myPushButton:button1' triggered PRESSED
|
Channel 'livisismarthome:WSC2:mybridge:myPushButton:button1' triggered PRESSED
|
||||||
|
|
|
@ -8,13 +8,13 @@ When certain log events are recognized, openHAB rules can be used to send notifi
|
||||||
This binding supports one ThingType: `reader`.
|
This binding supports one ThingType: `reader`.
|
||||||
A reader supports 3 separate channels
|
A reader supports 3 separate channels
|
||||||
|
|
||||||
* One for errors
|
- One for errors
|
||||||
* one for warnings
|
- one for warnings
|
||||||
* one custom channel for other purposes.
|
- one custom channel for other purposes.
|
||||||
|
|
||||||
## Thing Configuration
|
## 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 |
|
| Parameter | Type | Required | Default if omitted | Description |
|
||||||
| ------------------------------| ------- | -------- | -------------------------------- |-----------------------------------------------------------------------------------------|
|
| ------------------------------| ------- | -------- | -------------------------------- |-----------------------------------------------------------------------------------------|
|
||||||
|
@ -51,7 +51,7 @@ List of channels
|
||||||
|
|
||||||
### example.things
|
### 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" ]
|
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
|
### example.items
|
||||||
|
|
||||||
```xtend
|
```java
|
||||||
|
|
||||||
DateTime logreaderLogRotated "Last Log Rotation [%1$tY.%1$tm.%1$te %1$tR]" <time> { channel="logreader:reader:openhablog:logRotated" }
|
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" }
|
Number logreaderErrors "Error events matched [%d]" <alarm> { channel="logreader:reader:openhablog:errorEvents" }
|
||||||
|
@ -73,25 +73,25 @@ String logreaderLastCustom "Last Custom [%s]"
|
||||||
|
|
||||||
### example.sitemap
|
### example.sitemap
|
||||||
|
|
||||||
```xtend
|
```perl
|
||||||
|
|
||||||
sitemap logreader_example label="Example" {
|
sitemap logreader_example label="Example" {
|
||||||
Frame label="openHAB Log Reader" {
|
Frame label="openHAB Log Reader" {
|
||||||
Text item=logreaderErrors
|
Text item=logreaderErrors
|
||||||
Text item=logreaderLastError
|
Text item=logreaderLastError
|
||||||
Text item=logreaderWarnings
|
Text item=logreaderWarnings
|
||||||
Text item=logreaderLastWarning
|
Text item=logreaderLastWarning
|
||||||
Text item=logreaderCustoms
|
Text item=logreaderCustoms
|
||||||
Text item=logreaderLastCustom
|
Text item=logreaderLastCustom
|
||||||
Text item=logreaderLogRotated
|
Text item=logreaderLogRotated
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### example.rules
|
### example.rules
|
||||||
|
|
||||||
```xtend
|
```java
|
||||||
rule "LogReader"
|
rule "LogReader"
|
||||||
when
|
when
|
||||||
Channel "logreader:reader:openhablog:newErrorEvent" triggered
|
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)
|
Use the rules with your Telegram Bot (need openHAB Telegram Binding installed and configured)
|
||||||
|
|
||||||
```xtend
|
```java
|
||||||
rule "LogReader"
|
rule "LogReader"
|
||||||
when
|
when
|
||||||
Channel 'logreader:reader:openhablog:newErrorEvent' triggered
|
Channel 'logreader:reader:openhablog:newErrorEvent' triggered
|
||||||
|
@ -113,7 +113,7 @@ rule "LogReader"
|
||||||
```
|
```
|
||||||
|
|
||||||
Be careful when sending e.g. email notifications.
|
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
|
### Thing status
|
||||||
|
|
||||||
|
|
|
@ -7,14 +7,15 @@ Miniserver is represented as a [Thing](https://www.openhab.org/docs/configuratio
|
||||||
|
|
||||||
The following features are currently supported:
|
The following features are currently supported:
|
||||||
|
|
||||||
* [Discovery](https://en.wikipedia.org/wiki/Simple_Service_Discovery_Protocol) of Miniservers available on the local network
|
- [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
|
- Creation of channels for Loxone controls that are exposed in the Loxone [UI](https://www.loxone.com/enen/kb/user-interface-configuration/)
|
||||||
* Management of a Websocket connection to the Miniserver and updating Thing status accordingly
|
- 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
|
||||||
* Updates of openHAB channel's state in runtime according to control's state changes on the Miniserver
|
- Management of a Websocket connection to the Miniserver and updating Thing status accordingly
|
||||||
* Passing channel commands to the Miniserver's controls
|
- Updates of openHAB channel's state in runtime according to control's state changes on the Miniserver
|
||||||
* Hash-based and token-based authentication methods
|
- Passing channel commands to the Miniserver's controls
|
||||||
* Command encryption and response decryption
|
- Hash-based and token-based authentication methods
|
||||||
|
- Command encryption and response decryption
|
||||||
|
|
||||||
## Things
|
## Things
|
||||||
|
|
||||||
|
@ -38,48 +39,52 @@ The entry should have the following syntax:
|
||||||
|
|
||||||
Where:
|
Where:
|
||||||
|
|
||||||
* `<thing-id>` is a unique ID for your Miniserver (you can but do not have to use Miniserver's MAC address here)
|
- `<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
|
- `<user>` and `<password>` are the credentials used to log into the Miniserver
|
||||||
* `<host>` is a host name or IP of 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)
|
- `<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
|
- `...` 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:
|
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:
|
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
|
### Thing Offline Reasons
|
||||||
|
|
||||||
There can be following reasons why Miniserver status is `OFFLINE`:
|
There can be following reasons why Miniserver status is `OFFLINE`:
|
||||||
|
|
||||||
* __Configuration Error__
|
- **Configuration Error**
|
||||||
* _Unknown host_
|
- _Unknown host_
|
||||||
* Miniserver host/ip address can't be resolved. No connection attempt will be made.
|
- Miniserver host/ip address can't be resolved. No connection attempt will be made.
|
||||||
* _User authentication error_
|
- _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.
|
- 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_
|
- _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.
|
- 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_
|
- _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.
|
- 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_
|
- _Internal error_
|
||||||
* Probably a code defect, collect debug data and submit an issue. Binding will try to reconnect, but with unknown chance for success.
|
- Probably a code defect, collect debug data and submit an issue. Binding will try to reconnect, but with unknown chance for success.
|
||||||
* _Other_
|
- _Other_
|
||||||
* An exception occured and its details will be displayed
|
- An exception occured and its details will be displayed
|
||||||
* __Communication Error__
|
- **Communication Error**
|
||||||
* _Error communicating with Miniserver_
|
- _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:
|
- 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
|
- _"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
|
- _"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_
|
- _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.
|
- 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_
|
- _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.
|
- 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_
|
- _Other_
|
||||||
* An exception occured and its details will be displayed
|
- An exception occured and its details will be displayed
|
||||||
|
|
||||||
### Security
|
### 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 |
|
| 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 |
|
| 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.
|
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.*` |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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` - operating mode | `DecimalType` - operating mode |
|
||||||
| | | `Number` - prepare state | Read-only channel |
|
| | | `Number` - prepare state | Read-only channel |
|
||||||
| | | `Switch` - open window | Read-only channel |
|
| | | `Switch` - open window | Read-only channel |
|
||||||
| | | `Number` - current temperature | Read-only channel |
|
| | | `Number` - current temperature | Read-only channel |
|
||||||
| | | `Number` - target temperature | `DecimalType` |
|
| | | `Number` - target temperature | `DecimalType` |
|
||||||
| | | `Number` - comfort temperature | `DecimalType` |
|
| | | `Number` - comfort temperature | `DecimalType` |
|
||||||
| | | `Number` - comfort temperature offset | `DecimalType` |
|
| | | `Number` - comfort temperature offset | `DecimalType` |
|
||||||
| | | `Number` - comfort tolerance | `DecimalType` |
|
| | | `Number` - comfort tolerance | `DecimalType` |
|
||||||
| | | `Number` - absent minimum temperature offset | `DecimalType` |
|
| | | `Number` - absent minimum temperature offset | `DecimalType` |
|
||||||
| | | `Number` - absent maximum temperature offset | `DecimalType` |
|
| | | `Number` - absent maximum temperature offset | `DecimalType` |
|
||||||
| | | `Number` - frost protect temperature | Read-only channel |
|
| | | `Number` - frost protect temperature | Read-only channel |
|
||||||
| | | `Number` - heat 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` |
|
| 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` - shading | `OnOffType.ON` - shade |
|
||||||
| | | `Switch` - automatic shading | `OnOffType.*` - automatic shading enabled/disabled |
|
| | | `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:
|
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:
|
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:
|
Channel label is defined in the following way:
|
||||||
|
|
||||||
* For controls that belong to a room: `<Room name> / <Control name>`
|
- For controls that belong to a room: `<Room name> / <Control name>`
|
||||||
* For controls without a room: `<Control name>`
|
- For controls without a room: `<Control name>`
|
||||||
|
|
||||||
Channels have the default tags as follows:
|
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.
|
- **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.
|
- **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.
|
- **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.
|
- **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.
|
- **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
|
## 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:
|
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
|
### Security
|
||||||
|
|
||||||
|
@ -228,47 +235,47 @@ They can be tuned, when abnormal behavior of the binding is observed, which can
|
||||||
|
|
||||||
## Limitations
|
## 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
|
## Automatic Configuration Example
|
||||||
|
|
||||||
The simplest and quickest way of configuring a Loxone Miniserver with openHAB is to use automatic configuration features:
|
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.
|
- 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`.
|
- 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).
|
- 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.
|
- 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.
|
- 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.
|
- 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.
|
- 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.
|
- 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
|
## 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/).
|
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:
|
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 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"
|
- A Miniserver's user named "kryten" and password "jmc2017"
|
||||||
* Items for:
|
- Items for:
|
||||||
* Temperature of the Miniserver - a Virtual Analog State functional block
|
- 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)
|
- 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)
|
- 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)
|
- 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
|
- Kitchen blinds - a Jalousie functional block
|
||||||
* Lighting scene - a Lighting Controller 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
|
- 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 text displaying current alarm's state - a State functional block
|
||||||
|
|
||||||
### things/loxone.things:
|
### things/loxone.things:
|
||||||
|
|
||||||
```
|
```java
|
||||||
loxone:miniserver:504F2414780F [ user="kryten", password="jmc2017", host="192.168.0.220", port=80 ]
|
loxone:miniserver:504F2414780F [ user="kryten", password="jmc2017", host="192.168.0.220", port=80 ]
|
||||||
```
|
```
|
||||||
|
|
||||||
### items/loxone.items:
|
### items/loxone.items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
// Type ID Label Icon Tags Settings
|
// Type ID Label Icon Tags Settings
|
||||||
|
|
||||||
Number Miniserver_Temp "Miniserver temperature: [%.1f °C]" <temperature> {channel="loxone:miniserver:504F2414780F:0F2F2133-017D-3C82-FFFF203EB0C34B9E"}
|
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:
|
### sitemaps/loxone.sitemap:
|
||||||
|
|
||||||
```
|
```perl
|
||||||
sitemap loxone label="Loxone Example Menu"
|
sitemap loxone label="Loxone Example Menu"
|
||||||
{
|
{
|
||||||
Frame label="Demo Controls" {
|
Frame label="Demo Controls" {
|
||||||
|
@ -315,7 +322,7 @@ sitemap loxone label="Loxone Example Menu"
|
||||||
|
|
||||||
### transform/garagedoor.map:
|
### transform/garagedoor.map:
|
||||||
|
|
||||||
```java
|
```text
|
||||||
OFF=Closed
|
OFF=Closed
|
||||||
ON=Open
|
ON=Open
|
||||||
-=Unknown
|
-=Unknown
|
||||||
|
|
|
@ -24,7 +24,7 @@ Choose either a local IP address of your personal owned sensor _or_ a sensor id
|
||||||
| Parameter | Description |
|
| Parameter | Description |
|
||||||
|-----------------|----------------------------------------------------------------------|
|
|-----------------|----------------------------------------------------------------------|
|
||||||
| ipAddress | Local IP address of your personal owned sensor |
|
| 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
|
### 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
|
Perform the following steps to get the appropriate Sensor ID
|
||||||
|
|
||||||
* Go to to [luftdaten.info map](https://deutschland.maps.sensor.community/)
|
- 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
|
- 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 #
|
- 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
|
- Enter this Sensor ID into the thing configuration
|
||||||
|
|
||||||
![Luftdaten.info Logo](doc/LuftdatenInfo-Map.png)
|
![Luftdaten.info Logo](doc/LuftdatenInfo-Map.png)
|
||||||
|
|
||||||
## Channels
|
## Channels
|
||||||
|
|
||||||
### Particulate Sensor
|
### Particulate Sensor
|
||||||
|
|
||||||
| Channel ID | Item Type | Description |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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 | Number:Pressure | Atmospheric Pressure (not supported by all sensors) |
|
||||||
| pressure-sea | Number:Pressure | Atmospheric Pressure on sea level (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 |
|
| 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-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 |
|
| noise-main | Number:Dimensionless | Maximum noise covered in the last 2.5 minutes in db |
|
||||||
|
|
||||||
|
|
||||||
## Full Example
|
## Full Example
|
||||||
|
|
||||||
### Things
|
### Things
|
||||||
|
|
||||||
luftdaten.things
|
luftdaten.things
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing luftdateninfo:particulate:pm_sensor "PM Sensor" [ ipAddress=192.168.178.50 ]
|
Thing luftdateninfo:particulate:pm_sensor "PM Sensor" [ ipAddress=192.168.178.50 ]
|
||||||
Thing luftdateninfo:conditions:cond_sensor "Condition Sensor" [ sensorid=28843 ]
|
Thing luftdateninfo:conditions:cond_sensor "Condition Sensor" [ sensorid=28843 ]
|
||||||
Thing luftdateninfo:noise:noise_sensor "Noise Sensor" [ sensorid=39745 ]
|
Thing luftdateninfo:noise:noise_sensor "Noise Sensor" [ sensorid=39745 ]
|
||||||
|
@ -87,7 +85,7 @@ Thing luftdateninfo:noise:noise_sensor "Noise Sensor" [ sensorid=39745
|
||||||
|
|
||||||
luftdaten.items
|
luftdaten.items
|
||||||
|
|
||||||
```
|
```java
|
||||||
Number:Density PM_25 "PM2.5" { channel="luftdateninfo:particulate:pm_sensor:pm25" }
|
Number:Density PM_25 "PM2.5" { channel="luftdateninfo:particulate:pm_sensor:pm25" }
|
||||||
Number:Density PM_100 "PM10" { channel="luftdateninfo:particulate:pm_sensor:pm100" }
|
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
|
LuftdatenInfo.sitemap
|
||||||
|
|
||||||
```
|
```perl
|
||||||
sitemap LuftdatenInfo label="LuftdatenInfo" {
|
sitemap LuftdatenInfo label="LuftdatenInfo" {
|
||||||
Text item=PM_25 label="Particulate Matter 2.5 [%.1f %unit%]"
|
Text item=PM_25 label="Particulate Matter 2.5 [%.1f %unit%]"
|
||||||
Text item=PM_100 label="Particulate Matter 10 [%.1f %unit%]"
|
Text item=PM_100 label="Particulate Matter 10 [%.1f %unit%]"
|
||||||
|
|
|
@ -3,10 +3,10 @@
|
||||||
This binding integrates with [Lutron](https://www.lutron.com) lighting control and home automation systems.
|
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:
|
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
|
- 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
|
- The original RadioRA system, referred to here as RadioRA Classic
|
||||||
* Legacy HomeWorks RS232 Processors
|
- Legacy HomeWorks RS232 Processors
|
||||||
* Grafik Eye 3x/4x systems with GRX-PRG or GRX-CI-PRG control interfaces
|
- Grafik Eye 3x/4x systems with GRX-PRG or GRX-CI-PRG control interfaces
|
||||||
|
|
||||||
Each is described in a separate section below.
|
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:
|
This binding currently supports the following thing types:
|
||||||
|
|
||||||
* **ipbridge** - The Lutron main repeater/processor/hub
|
- **ipbridge** - The Lutron main repeater/processor/hub
|
||||||
* **leapbridge** - Experimental bridge that uses LEAP protocol (Caseta & RA2 Select only)
|
- **leapbridge** - Experimental bridge that uses LEAP protocol (Caseta & RA2 Select only)
|
||||||
* **dimmer** - Light dimmer
|
- **dimmer** - Light dimmer
|
||||||
* **switch** - Switch or relay module
|
- **switch** - Switch or relay module
|
||||||
* **fan** - Fan controller
|
- **fan** - Fan controller
|
||||||
* **occupancysensor** - Occupancy/vacancy sensor
|
- **occupancysensor** - Occupancy/vacancy sensor
|
||||||
* **ogroup** - Occupancy group
|
- **ogroup** - Occupancy group
|
||||||
* **keypad** - Lutron seeTouch or Hybrid seeTouch Keypad
|
- **keypad** - Lutron seeTouch or Hybrid seeTouch Keypad
|
||||||
* **ttkeypad** - Tabletop seeTouch Keypad
|
- **ttkeypad** - Tabletop seeTouch Keypad
|
||||||
* **intlkeypad** - International seeTouch Keypad (HomeWorks QS only)
|
- **intlkeypad** - International seeTouch Keypad (HomeWorks QS only)
|
||||||
* **palladiomkeypad** - Palladiom Keypad (HomeWorks QS only)
|
- **palladiomkeypad** - Palladiom Keypad (HomeWorks QS only)
|
||||||
* **pico** - Pico Keypad
|
- **pico** - Pico Keypad
|
||||||
* **grafikeyekeypad** - GRAFIK Eye QS Keypad (RadioRA 2/HomeWorks QS only)
|
- **grafikeyekeypad** - GRAFIK Eye QS Keypad (RadioRA 2/HomeWorks QS only)
|
||||||
* **virtualkeypad** - Repeater/processor integration buttons or Caseta Smart Bridge scene buttons
|
- **virtualkeypad** - Repeater/processor integration buttons or Caseta Smart Bridge scene buttons
|
||||||
* **vcrx** - Visor control receiver module (VCRX)
|
- **vcrx** - Visor control receiver module (VCRX)
|
||||||
* **qsio** - QS IO Interface (HomeWorks QS only)
|
- **qsio** - QS IO Interface (HomeWorks QS only)
|
||||||
* **wci** - QS Wallbox Closure Interface (WCI) (HomeWorks QS only)
|
- **wci** - QS Wallbox Closure Interface (WCI) (HomeWorks QS only)
|
||||||
* **cco** - Contact closure output module or VCRX CCO
|
- **cco** - Contact closure output module or VCRX CCO
|
||||||
* **shade** - Lutron shade, motorized drape, or motor controller
|
- **shade** - Lutron shade, motorized drape, or motor controller
|
||||||
* **blind** - Lutron venetian blind or horizontal sheer blind [**Experimental**]
|
- **blind** - Lutron venetian blind or horizontal sheer blind [**Experimental**]
|
||||||
* **greenmode** - Green Mode subsystem
|
- **greenmode** - Green Mode subsystem
|
||||||
* **timeclock** - Scheduling subsystem
|
- **timeclock** - Scheduling subsystem
|
||||||
* **sysvar** - System state variable (HomeWorks QS only) [**Experimental**]
|
- **sysvar** - System state variable (HomeWorks QS only) [**Experimental**]
|
||||||
|
|
||||||
## Discovery
|
## 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:
|
You should be aware of the following functional differences between the protocols:
|
||||||
|
|
||||||
* Using LIP on Caseta you can’t receive notifications of occupancy group status changes (occupied/unoccupied/unknown), but using LEAP you can.
|
- Using LIP on Caseta you can’t 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).
|
- 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 can’t.
|
This means that using ipbridge you can trigger rules and take actions on keypad key presses/releases, but using leapbridge you can’t.
|
||||||
* Caseta and RA2 Select device discovery is supported via LEAP, but not via LIP.
|
- 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.
|
- 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.
|
- 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!
|
Remember that LEAP device IDs and LIP integration IDs are not necessarily equal!
|
||||||
|
|
||||||
#### ipbridge
|
#### ipbridge
|
||||||
|
@ -131,7 +131,7 @@ Note that the user which openHAB runs under must have permission to read the fil
|
||||||
|
|
||||||
Thing configuration file example:
|
Thing configuration file example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge lutron:ipbridge:radiora2 [ ipAddress="192.168.1.2", user="lutron", password="integration" ] {
|
Bridge lutron:ipbridge:radiora2 [ ipAddress="192.168.1.2", user="lutron", password="integration" ] {
|
||||||
Thing ...
|
Thing ...
|
||||||
Thing ...
|
Thing ...
|
||||||
|
@ -167,7 +167,7 @@ It should not normally need to be changed.
|
||||||
|
|
||||||
Thing configuration file example:
|
Thing configuration file example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge lutron:leapbridge:caseta [ ipAddress="192.168.1.3", keystore="/home/openhab/lutron.keystore", keystorePassword="secret" ] {
|
Bridge lutron:leapbridge:caseta [ ipAddress="192.168.1.3", keystore="/home/openhab/lutron.keystore", keystorePassword="secret" ] {
|
||||||
Thing ...
|
Thing ...
|
||||||
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 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.
|
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.
|
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:
|
Thing configuration file example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing dimmer livingroom [ integrationId=8, fadeInTime=0.5, fadeOutTime=5 ]
|
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:
|
The parameters are:
|
||||||
|
|
||||||
* `level` The new light level to set (0-100)
|
- `level` The new light level to set (0-100)
|
||||||
* `fadeTime` The time in seconds over which the dimmer should fade to the new level
|
- `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
|
- `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.
|
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.
|
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
|
||||||
|
|
||||||
Switches take no additional parameters besides `integrationId`.
|
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:
|
Thing configuration file example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing switch porch [ integrationId=8 ]
|
Thing switch porch [ integrationId=8 ]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -226,11 +226,11 @@ Thing switch porch [ integrationId=8 ]
|
||||||
|
|
||||||
Fan speed controllers are interfaced with using the **fan** thing.
|
Fan speed controllers are interfaced with using the **fan** thing.
|
||||||
It accepts no additional parameters besides `integrationId`.
|
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:
|
Thing configuration file example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing fan porchfan [ integrationId=12 ]
|
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`.
|
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.
|
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 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).
|
The sensors cannot be queried for their state, so initial channel state at startup will be undefined (NULL).
|
||||||
|
|
||||||
Thing configuration file example:
|
Thing configuration file example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing occupancysensor shopsensor [ integrationId=7 ]
|
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.
|
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 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 `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".
|
The value can be "OCCUPIED", "UNOCCUPIED", or "UNKNOWN".
|
||||||
|
|
||||||
Thing configuration file example:
|
Thing configuration file example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing ogroup lrgroup [ integrationId=7 ]
|
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".
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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:
|
Thing configuration file example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing keypad entrykeypad [ integrationId=10, model="W7B" autorelease=true ]
|
Thing keypad entrykeypad [ integrationId=10, model="W7B" autorelease=true ]
|
||||||
```
|
```
|
||||||
|
|
||||||
Example rule triggered by a keypad button press:
|
Example rule triggered by a keypad button press:
|
||||||
|
|
||||||
```
|
```java
|
||||||
rule ExampleScene
|
rule ExampleScene
|
||||||
when
|
when
|
||||||
Item entrykeypad_button4 received update ON
|
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.
|
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.
|
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.
|
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.
|
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)
|
Supported settings for `model` parameter: T5RL, T10RL, T15RL, T5CRL, T10CRL, T15CRL, Generic (default)
|
||||||
|
|
||||||
Thing configuration file example:
|
Thing configuration file example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing ttkeypad bedroomkeypad [ integrationId=11, model="T10RL" autorelease=true ]
|
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.
|
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.
|
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 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.
|
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.
|
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.
|
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:
|
Thing configuration file example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing intlkeypad kitchenkeypad [ integrationId=15, model="10BRL" autorelease=true ]
|
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.
|
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.
|
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.
|
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.
|
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:
|
Thing configuration file example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing palladiomkeypad kitchenkeypad [ integrationId=16, model="4W" autorelease=true ]
|
Thing palladiomkeypad kitchenkeypad [ integrationId=16, model="4W" autorelease=true ]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
#### Pico Keypads
|
#### Pico Keypads
|
||||||
|
|
||||||
Pico keypads use the **pico** thing.
|
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.
|
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.
|
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.
|
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.
|
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:
|
Thing configuration file example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing pico hallpico [ integrationId=12, model="3BRL", autorelease=true ]
|
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.
|
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.
|
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).
|
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 **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.
|
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.
|
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 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.
|
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:
|
Thing configuration file example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing lutron:grafikeyekeypad:theaterkeypad (lutron:ipbridge:radiora2) [ integrationId=12, model="3COL", autorelease="true" ]
|
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:
|
Thing configuration file example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing virtualkeypad repeaterbuttons [ integrationId=1, autorelease=true ]
|
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`.
|
Supported options are `integrationId` and `autorelease`.
|
||||||
Supplying a model is not required, as there is only one model.
|
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 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.
|
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.
|
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:
|
Thing configuration file example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing vcrx vcrx1 [ integrationId=13, autorelease=true ]
|
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 5 contact closure outputs (CCOs) are handled by the **cco** thing (see below).
|
||||||
The only configuration option is `integrationId`
|
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 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.
|
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:
|
Thing configuration file example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing qsio sensorinputs [ integrationId=42 ]
|
Thing qsio sensorinputs [ integrationId=42 ]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -506,7 +504,7 @@ See the Lutron documentation for more information.
|
||||||
|
|
||||||
Thing configuration file example:
|
Thing configuration file example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing wci specialkeypad [ integrationId=48, autorelease=true ]
|
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.
|
**Note:** The **ccopulsed** and **ccomaintained** things are now deprecated.
|
||||||
You should use the **cco** thing with the appropriate `outputType` setting instead.
|
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.
|
For pulsed CCOs, sending an ON command will close the output for the configured pulse time.
|
||||||
Sending an OFF command does nothing.
|
Sending an OFF command does nothing.
|
||||||
Because of limitations in RadioRA 2, you cannot monitor the state of a pulsed CCO.
|
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:
|
Thing configuration file example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing cco garage [ integrationId=5, outputType="Pulsed", pulseLength=0.5 ]
|
Thing cco garage [ integrationId=5, outputType="Pulsed", pulseLength=0.5 ]
|
||||||
Thing cco relay1 [ integrationId=7, outputType="Maintained"]
|
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.
|
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`.
|
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.
|
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.
|
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.
|
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.
|
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 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.
|
**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.
|
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:
|
Thing configuration file example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing shade libraryshade [ integrationId=33]
|
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.
|
There is no default.
|
||||||
If discovery is used, the `type` parameter will set automatically when the **blind** thing is created.
|
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.
|
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.
|
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.
|
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:
|
Thing configuration file example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing blind officeblinds [ integrationId=76, type="Venetian"]
|
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.
|
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.
|
It requires that the `integrationId` parameter be set to the ID of the green mode subsystem.
|
||||||
This should generally be 22.
|
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.
|
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.
|
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:
|
Thing configuration file example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing greenmode greenmode [ integrationId=22 ]
|
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:
|
It creates the following six channels:
|
||||||
|
|
||||||
* *clockmode* - Gets or sets the current timeclock mode.
|
- _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.
|
- _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.
|
- _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.
|
- _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.
|
- _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.
|
- _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:
|
Thing configuration file example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing timeclock timeclock [ integrationId=23 ]
|
Thing timeclock timeclock [ integrationId=23 ]
|
||||||
```
|
```
|
||||||
|
|
||||||
Example rule to refresh sunrise/sunset channels daily and at restart:
|
Example rule to refresh sunrise/sunset channels daily and at restart:
|
||||||
|
|
||||||
```
|
```java
|
||||||
import org.openhab.core.types.RefreshType
|
import org.openhab.core.types.RefreshType
|
||||||
|
|
||||||
rule "Lutron sunrise/sunset daily refresh"
|
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.
|
The **sysvar** thing allows state variable values to be read and set from openHAB.
|
||||||
This makes sophisticated integration schemes possible.
|
This makes sophisticated integration schemes possible.
|
||||||
Each **sysvar** thing represents one system state variable.
|
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.
|
Automatic discovery of state variables is not yet supported.
|
||||||
They must be manually configured.
|
They must be manually configured.
|
||||||
|
|
||||||
Thing configuration file example:
|
Thing configuration file example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing sysvar qsstate [ integrationId=80 ]
|
Thing sysvar qsstate [ integrationId=80 ]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -713,34 +711,33 @@ Appropriate channels will be created automatically by the keypad, ttkeypad, intl
|
||||||
|switch |switchstatus |OnOffType |OnOffType |
|
|switch |switchstatus |OnOffType |OnOffType |
|
||||||
|fan |fanspeed |StringType |"OFF","LOW","MEDIUM","MEDIUMHIGH","HIGH" |
|
|fan |fanspeed |StringType |"OFF","LOW","MEDIUM","MEDIUMHIGH","HIGH" |
|
||||||
|fan |fanlevel |PercentType |OnOffType, PercentType |
|
|fan |fanlevel |PercentType |OnOffType, PercentType |
|
||||||
|occ. sensor|occupancystatus|OnOffType |(*readonly*) |
|
|occ. sensor|occupancystatus|OnOffType |(_readonly_) |
|
||||||
|ogroup |groupstate |StringType |"OCCUPIED","UNOCCUPIED","UNKNOWN" (*readonly*) |
|
|ogroup |groupstate |StringType |"OCCUPIED","UNOCCUPIED","UNKNOWN" (_readonly_) |
|
||||||
|cco |switchstatus |OnOffType |OnOffType, RefreshType |
|
|cco |switchstatus |OnOffType |OnOffType, RefreshType |
|
||||||
|keypads |button* |OnOffType |OnOffType |
|
|keypads |button* |OnOffType |OnOffType |
|
||||||
| |led* |OnOffType |OnOffType, RefreshType |
|
| |led* |OnOffType |OnOffType, RefreshType |
|
||||||
| |cci* |OpenClosedType|(*readonly*) |
|
| |cci* |OpenClosedType|(_readonly_) |
|
||||||
|shade |shadelevel |PercentType |PercentType, UpDownType, StopMoveType.STOP, RefreshType|
|
|shade |shadelevel |PercentType |PercentType, UpDownType, StopMoveType.STOP, RefreshType|
|
||||||
|blind |blindliftlevel |PercentType |PercentType, UpDownType, StopMoveType.STOP, RefreshType|
|
|blind |blindliftlevel |PercentType |PercentType, UpDownType, StopMoveType.STOP, RefreshType|
|
||||||
| |blindtiltlevel |PercentType |PercentType, UpDownType, StopMoveType.STOP, RefreshType|
|
| |blindtiltlevel |PercentType |PercentType, UpDownType, StopMoveType.STOP, RefreshType|
|
||||||
|greenmode |step |DecimalType |DecimalType, OnOffType (ON=2,OFF=1), RefreshType |
|
|greenmode |step |DecimalType |DecimalType, OnOffType (ON=2,OFF=1), RefreshType |
|
||||||
|timeclock |clockmode |DecimalType |DecimalType, RefreshType |
|
|timeclock |clockmode |DecimalType |DecimalType, RefreshType |
|
||||||
| |sunrise |DateTimeType |RefreshType (*readonly*) |
|
| |sunrise |DateTimeType |RefreshType (_readonly_) |
|
||||||
| |sunset |DateTimeType |RefreshType (*readonly*) |
|
| |sunset |DateTimeType |RefreshType (_readonly_) |
|
||||||
| |execevent |DecimalType |DecimalType |
|
| |execevent |DecimalType |DecimalType |
|
||||||
| |enableevent |DecimalType |DecimalType |
|
| |enableevent |DecimalType |DecimalType |
|
||||||
| |disableevent |DecimalType |DecimalType |
|
| |disableevent |DecimalType |DecimalType |
|
||||||
|sysvar |varstate |DecimalType |DecimalType (rounded/truncated to integer) |
|
|sysvar |varstate |DecimalType |DecimalType (rounded/truncated to integer) |
|
||||||
|
|
||||||
Most channels receive immediate notifications of device state changes from the Lutron control system.
|
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.
|
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:
|
## RadioRA 2/HomeWorks QS Configuration File Examples:
|
||||||
|
|
||||||
demo.things:
|
demo.things:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge lutron:ipbridge:radiora2 [ ipAddress="192.168.1.123", user="lutron", password="integration" ] {
|
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 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 ]
|
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:
|
demo.items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Dimmer LivingRm_TableLamp "Table Lamp" { channel="lutron:dimmer:radiora2:lrtable:lightlevel" }
|
Dimmer LivingRm_TableLamp "Table Lamp" { channel="lutron:dimmer:radiora2:lrtable:lightlevel" }
|
||||||
Switch FrontYard_PathLight "Path Light" { channel="lutron:switch:radiora2:path:switchstatus" }
|
Switch FrontYard_PathLight "Path Light" { channel="lutron:switch:radiora2:path:switchstatus" }
|
||||||
Switch LaundryRm_Sensor "Occ Sensor" { channel="lutron:occupancysensor:radiora2:laundryocc:occupancystatus" }
|
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:
|
dimmerAction.rules:
|
||||||
|
|
||||||
```
|
```java
|
||||||
rule "Test dimmer action"
|
rule "Test dimmer action"
|
||||||
when
|
when
|
||||||
Item TestSwitch received command ON
|
Item TestSwitch received command ON
|
||||||
|
@ -788,7 +785,6 @@ then
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
# Lutron RadioRA (Classic) Binding
|
# Lutron RadioRA (Classic) Binding
|
||||||
|
|
||||||
This binding integrates with the legacy Lutron RadioRA (Classic) lighting system.
|
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-switch | Thing | Switch control |
|
||||||
| ra-phantomButton | Thing | Phantom Button to control multiple controls (Scenes) |
|
| ra-phantomButton | Thing | Phantom Button to control multiple controls (Scenes) |
|
||||||
|
|
||||||
|
|
||||||
## Thing Configuration Parameters
|
## Thing Configuration Parameters
|
||||||
|
|
||||||
| Thing | Parameter | Description |
|
| Thing | Parameter | Description |
|
||||||
|
@ -841,7 +836,7 @@ The following channels are supported:
|
||||||
|
|
||||||
lutronradiora.things
|
lutronradiora.things
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge lutronradiora:ra-rs232:chronos1 [portName="/dev/ttys002"] {
|
Bridge lutronradiora:ra-rs232:chronos1 [portName="/dev/ttys002"] {
|
||||||
Thing ra-dimmer dimmer1 [ zoneNumber=1 ]
|
Thing ra-dimmer dimmer1 [ zoneNumber=1 ]
|
||||||
Thing ra-dimmer dimmer2 [ zoneNumber=2 ]
|
Thing ra-dimmer dimmer2 [ zoneNumber=2 ]
|
||||||
|
@ -853,7 +848,7 @@ Bridge lutronradiora:ra-rs232:chronos1 [portName="/dev/ttys002"] {
|
||||||
|
|
||||||
lutronradiora.items
|
lutronradiora.items
|
||||||
|
|
||||||
```
|
```java
|
||||||
Dimmer Dimmer_Kitchen "Kitchen Lights" { channel="lutronradiora:dimmer:chronos1:dimmer1:lightlevel" }
|
Dimmer Dimmer_Kitchen "Kitchen Lights" { channel="lutronradiora:dimmer:chronos1:dimmer1:lightlevel" }
|
||||||
Dimmer Dimmer_FamilyRoom "Family Room Lights" { channel="lutronradiora:dimmer:chronos1:dimmer2:lightlevel" }
|
Dimmer Dimmer_FamilyRoom "Family Room Lights" { channel="lutronradiora:dimmer:chronos1:dimmer2:lightlevel" }
|
||||||
Switch Switch_Patio "Patio Light" { channel="lutronradiora:dimmer:chronos1:switch1:switchstatus" }
|
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
|
## Supported Things
|
||||||
|
|
||||||
* HomeWorks RS232-connected Processor Units
|
- HomeWorks RS232-connected Processor Units
|
||||||
* Dimmers
|
- Dimmers
|
||||||
|
|
||||||
Supported in future updates:
|
Supported in future updates:
|
||||||
|
|
||||||
* Keypads
|
- Keypads
|
||||||
* Keypad LEDs
|
- Keypad LEDs
|
||||||
|
|
||||||
## Discovery
|
## 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.
|
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]
|
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).
|
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"]
|
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 |
|
| dimmer | lightlevel | Dimmer | Increase/decrease the light level |
|
||||||
|
|
||||||
|
|
||||||
# Lutron Grafik Eye 3x/4x binding via GRX-PRG or GRX-CI-PRG
|
# 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.
|
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).
|
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).
|
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 ]
|
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
|
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.
|
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" ]
|
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 |
|
| 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 |
|
| buttonpress | Yes | String | Last keypad button pressed (see Appendix A) in protocol guide |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### Grafik Eye channels
|
### Grafik Eye channels
|
||||||
|
|
||||||
| Channel Type ID | Readonly | Item Type | Description |
|
| Channel Type ID | Readonly | Item Type | Description |
|
||||||
|
@ -978,28 +970,27 @@ lutron:grafikeye:home (lutron:prgbridge:home) [ controlUnit=1, fade=10, polling=
|
||||||
|
|
||||||
### Notes
|
### 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.
|
- 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
|
- 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
|
- 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).
|
- 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.
|
- 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
|
- 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
|
- 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.
|
- 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
|
## Example
|
||||||
|
|
||||||
demo.Things:
|
demo.Things:
|
||||||
|
|
||||||
```
|
```java
|
||||||
lutron:prgbridge:home [ ipAddress="192.168.1.51", user="nwk", retryPolling=10 ]
|
lutron:prgbridge:home [ ipAddress="192.168.1.51", user="nwk", retryPolling=10 ]
|
||||||
lutron:grafikeye:home (lutron:prgbridge:home) [ controlUnit=1, fade=10, polling=10 ]
|
lutron:grafikeye:home (lutron:prgbridge:home) [ controlUnit=1, fade=10, polling=10 ]
|
||||||
```
|
```
|
||||||
|
|
||||||
demo.items:
|
demo.items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
String Prg_ButtonPress "Last Button Press [%s]" { channel = "lutron:prgbridge:home:buttonpress" }
|
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_ZoneLowerStop "Zone Lower Stop" { channel = "lutron:prgbridge:home:zonelowerstop",autoupdate="false" }
|
||||||
Switch Prg_ZoneRaiseStop "Zone Raise Stop" { channel = "lutron:prgbridge:home:zoneraisestop",autoupdate="false" }
|
Switch Prg_ZoneRaiseStop "Zone Raise Stop" { channel = "lutron:prgbridge:home:zoneraisestop",autoupdate="false" }
|
||||||
|
|
|
@ -1,20 +1,21 @@
|
||||||
# Luxom Binding
|
# 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 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/27/LUXOM_ASCII.pdf>
|
||||||
* https://old.luxom.io/uploads/ppfiles/28/LUXOM_ASCII_extended.pdf
|
|
||||||
|
- <https://old.luxom.io/uploads/ppfiles/28/LUXOM_ASCII_extended.pdf>
|
||||||
|
|
||||||
## Supported Things
|
## Supported Things
|
||||||
|
|
||||||
This binding currently supports the following thing types:
|
This binding currently supports the following thing types:
|
||||||
|
|
||||||
* **ipbridge** - The Lutron main repeater/processor/hub
|
- **ipbridge** - The Lutron main repeater/processor/hub
|
||||||
* **dimmer** - Light dimmer
|
- **dimmer** - Light dimmer
|
||||||
* **switch** - Switch or relay module
|
- **switch** - Switch or relay module
|
||||||
|
|
||||||
## Thing Configuration
|
## Thing Configuration
|
||||||
|
|
||||||
|
@ -22,10 +23,10 @@ This binding currently supports the following thing types:
|
||||||
|
|
||||||
The Bridge thing has two parameters:
|
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)
|
- port: The listening port (optional, defaults to 2300)
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge luxom:bridge:myhouse [ ipAddress="192.168.0.50", port="2300"] {
|
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
|
### Devices
|
||||||
|
|
||||||
Each device has an address on the Luxom bus, this address must be specified in the 'address' parameter.
|
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.
|
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.
|
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.
|
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.
|
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
|
||||||
|
|
||||||
Dimmers support the optional advanced parameters `onLevel`, `onToLast` and `stepPercentage`:
|
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 `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 `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 `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:
|
Thing configuration file example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing dimmer dimmerLightLiving1 [address="A,02", onLevel="50", onToLast="false", stepPercentage="5"]
|
Thing dimmer dimmerLightLiving1 [address="A,02", onLevel="50", onToLast="false", stepPercentage="5"]
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Switches
|
#### Switches
|
||||||
|
|
||||||
Switches take no additional parameters.
|
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:
|
Thing configuration file example:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing switch switchLiving1 [address="A,02"]
|
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 |
|
| dimmer | brightness | Dimmer | Increase/decrease the light level |
|
||||||
| switch | switch | Switch | Switch the device on/off |
|
| switch | switch | Switch | Switch the device on/off |
|
||||||
|
|
||||||
|
|
||||||
### Full Example
|
### Full Example
|
||||||
|
|
||||||
demo.things:
|
demo.things:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge luxom:bridge:myhouse [ ipAddress="192.168.0.50", port="2300"] {
|
Bridge luxom:bridge:myhouse [ ipAddress="192.168.0.50", port="2300"] {
|
||||||
Thing switch switchBedroom1 "Switch 1" @ "Bedroom" [address="1,01"]
|
Thing switch switchBedroom1 "Switch 1" @ "Bedroom" [address="1,01"]
|
||||||
Thing dimmer dimmerBedroom1 "dimmer 1" @ "Bedroom" [address="A,02"]
|
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:
|
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"}
|
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"}
|
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"}
|
Dimmer FF_Kitchen_Lights "Kitchen dimmer light" <light> (FF_Kitchen, gLight) ["Lighting"] {channel="luxom:dimmer:myhouse:dimmerKitchen1:brightness", ga="Light", homekit="Lighting, Lighting.Brightness"}
|
||||||
|
|
|
@ -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:
|
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
|
- Alpha InnoTec
|
||||||
* Buderus (Logamatic HMC20, HMC20 Z)
|
- Buderus (Logamatic HMC20, HMC20 Z)
|
||||||
* CTA All-In-One (Aeroplus)
|
- CTA All-In-One (Aeroplus)
|
||||||
* Elco
|
- Elco
|
||||||
* Nibe (AP-AW10)
|
- Nibe (AP-AW10)
|
||||||
* Roth (ThermoAura®, ThermoTerra)
|
- Roth (ThermoAura®, ThermoTerra)
|
||||||
* (Siemens) Novelan (WPR NET)
|
- (Siemens) Novelan (WPR NET)
|
||||||
* Wolf Heiztechnik (BWL/BWS)
|
- Wolf Heiztechnik (BWL/BWS)
|
||||||
|
|
||||||
This binding was tested with:
|
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.
|
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 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:
|
The following channels are also writable:
|
||||||
| channel | type | advanced | description |
|
| channel | type | advanced | description |
|
||||||
|----------|--------|----------|------------------------------|
|
|----------|--------|----------|------------------------------|
|
||||||
|
@ -306,14 +307,13 @@ The following channels are also writable:
|
||||||
| comfortCoolingATExcess | Number:Time | | AT Excess |
|
| comfortCoolingATExcess | Number:Time | | AT Excess |
|
||||||
| comfortCoolingATUndercut | Number:Time | | AT undercut |
|
| comfortCoolingATUndercut | Number:Time | | AT undercut |
|
||||||
|
|
||||||
|
|
||||||
## Example
|
## 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).
|
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:_
|
_heatpump.things:_
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing luxtronikheatpump:heatpump:heatpump "Heatpump" [
|
Thing luxtronikheatpump:heatpump:heatpump "Heatpump" [
|
||||||
ipAddress="192.168.178.12",
|
ipAddress="192.168.178.12",
|
||||||
port="8889",
|
port="8889",
|
||||||
|
@ -323,7 +323,7 @@ Thing luxtronikheatpump:heatpump:heatpump "Heatpump" [
|
||||||
|
|
||||||
_heatpump.items:_
|
_heatpump.items:_
|
||||||
|
|
||||||
```
|
```java
|
||||||
Group gHeatpump "Heatpump" <temperature>
|
Group gHeatpump "Heatpump" <temperature>
|
||||||
|
|
||||||
Number:Temperature HeatPump_Temp_Outside "Temperature outside [%.1f °C]" <temperature> (gHeatpump) { channel="luxtronikheatpump:heatpump:heatpump:temperatureOutside" }
|
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:_
|
_heatpump.sitemap:_
|
||||||
|
|
||||||
```
|
```perl
|
||||||
sitemap heatpump label="Heatpump" {
|
sitemap heatpump label="Heatpump" {
|
||||||
Frame label="Heatpump" {
|
Frame label="Heatpump" {
|
||||||
Text item=HeatPump_State_Ext
|
Text item=HeatPump_State_Ext
|
||||||
|
|
|
@ -15,13 +15,15 @@ The binding provides device discovery, sending keys for the remote and also rece
|
||||||
|
|
||||||
### Supported Models
|
### Supported Models
|
||||||
|
|
||||||
* Deutsche Telekom Media Receiver MR401B - fully supported
|
| Model | Status |
|
||||||
* Deutsche Telekom Media Receiver MR201 - fully supported
|
|----------------------------------------|-----------------------------------------------|
|
||||||
* Deutsche Telekom Media Receiver MR400 - supported with minor restrictions (POWER key)
|
| Deutsche Telekom Media Receiver MR401B | fully supported |
|
||||||
* Deutsche Telekom Media Receiver MR200 - supported with minor restrictions (POWER key)
|
| Deutsche Telekom Media Receiver MR201 | fully supported |
|
||||||
* Deutsche Telekom Media Receiver MR601 - should be supported (not verified)
|
| Deutsche Telekom Media Receiver MR400 | supported with minor restrictions (POWER key) |
|
||||||
* Deutsche Telekom Media Receiver MR3xx - NOT supported (different platform)
|
| Deutsche Telekom Media Receiver MR200 | supported with minor restrictions (POWER key) |
|
||||||
* Deutsche Telekom Media Receiver MR1xx - NOT supported (different platform)
|
| 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
|
## 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:
|
Run the following command on the console and provide your Telekom account credentials:
|
||||||
|
|
||||||
```
|
```shell
|
||||||
openhab> openhab:magentatv login
|
openhab> openhab:magentatv login
|
||||||
Username (email): mail@example.com
|
Username (email): mail@example.com
|
||||||
Password: topsecret
|
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&Paste this value to the Thing configuration (parameter `userId`) of the receiver.
|
On successful login the console will show the User ID value. Copy&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.
|
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
|
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
|
### magentatv.things
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing magentatv:receiver:XXXXXXXXXXX "MagentaTV" [
|
Thing magentatv:receiver:XXXXXXXXXXX "MagentaTV" [
|
||||||
udn="XXXXXXXXXXX",
|
udn="XXXXXXXXXXX",
|
||||||
ipAddress="xxx.xxx.xxx.xxx",
|
ipAddress="xxx.xxx.xxx.xxx",
|
||||||
accountName="xxxxxx.xxxx@t-online.de",
|
accountName="xxxxxx.xxxx@t-online.de",
|
||||||
accountPassword="xxxxxxxxxx"
|
accountPassword="xxxxxxxxxx"
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
|
||||||
### magentatv.items
|
### magentatv.items
|
||||||
|
|
||||||
```
|
```java
|
||||||
# MagentaTV Control
|
# MagentaTV Control
|
||||||
Switch MagentaTV_Power "Power" {channel="magentatv:receiver:XXXXXXXXXXX:control#power"}
|
Switch MagentaTV_Power "Power" {channel="magentatv:receiver:XXXXXXXXXXX:control#power"}
|
||||||
Number MagentaTV_Channel "Channel" {channel="magentatv:receiver:XXXXXXXXXXX:status#channel"}
|
Number MagentaTV_Channel "Channel" {channel="magentatv:receiver:XXXXXXXXXXX:status#channel"}
|
||||||
|
@ -231,7 +233,7 @@ String MagentaTV_RunStatus "Run Status" {channel="magentatv:receiver:XXXXXX
|
||||||
|
|
||||||
or
|
or
|
||||||
|
|
||||||
```
|
```java
|
||||||
Group gRB_GF_LR_TVReceiver "RB_GF_LR: TV Receiver"
|
Group gRB_GF_LR_TVReceiver "RB_GF_LR: TV Receiver"
|
||||||
(gRB_GF_LivingRoom, gMedia, gSpeechCmnd)
|
(gRB_GF_LivingRoom, gMedia, gSpeechCmnd)
|
||||||
|
|
||||||
|
@ -283,7 +285,7 @@ String RB_GF_LR_TVReceiver_PlayMode
|
||||||
|
|
||||||
### sitemap
|
### sitemap
|
||||||
|
|
||||||
```
|
```perl
|
||||||
Text label="TV" icon="it_television" {
|
Text label="TV" icon="it_television" {
|
||||||
Frame label="Bedienung" {
|
Frame label="Bedienung" {
|
||||||
Switch item=RB_GF_LR_TVReceiver_Power label="Ein/Aus []" icon="control_on_off" mappings=[ ON="Ein/Aus" ]
|
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
|
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
|
||||||
|
|
||||||
```
|
```java
|
||||||
if (MagentaTV_Power.state != ON) {
|
if (MagentaTV_Power.state != ON) {
|
||||||
sendCommand(MagentaTV_Power, ON)
|
sendCommand(MagentaTV_Power, ON)
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
to switch it ON and
|
to switch it ON and
|
||||||
|
|
||||||
```
|
```java
|
||||||
if (MagentaTV_Power.state != OFF) {
|
if (MagentaTV_Power.state != OFF) {
|
||||||
sendCommand(MagentaTV_Power, OFF)
|
sendCommand(MagentaTV_Power, OFF)
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
to switch it off.
|
to switch it off.
|
||||||
|
|
|
@ -54,7 +54,7 @@ Channels with type `UNREAD` give the number on unread mails in that folder.
|
||||||
|
|
||||||
mail.things:
|
mail.things:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing mail:smtp:samplesmtp [ hostname="smtp.example.com", sender="mail@example.com", security="SSL", username="user", password="pass" ]
|
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" ] {
|
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:
|
mail.items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Number InboxTotal "INBOX [%d]" { channel="mail:imap:sampleimap:inbox_total" }
|
Number InboxTotal "INBOX [%d]" { channel="mail:imap:sampleimap:inbox_total" }
|
||||||
Number InboxUnread "INBOX Unread [%d]" { channel="mail:imap:sampleimap:inbox_unread" }
|
Number InboxUnread "INBOX Unread [%d]" { channel="mail:imap:sampleimap:inbox_unread" }
|
||||||
```
|
```
|
||||||
|
|
||||||
mail.sitemap:
|
mail.sitemap:
|
||||||
|
|
||||||
```
|
```perl
|
||||||
sitemap demo label="Main Menu"
|
sitemap demo label="Main Menu"
|
||||||
{
|
{
|
||||||
Frame {
|
Frame {
|
||||||
|
@ -88,12 +88,12 @@ sitemap demo label="Main Menu"
|
||||||
This binding includes rule actions for sending email.
|
This binding includes rule actions for sending email.
|
||||||
Six different actions available:
|
Six different actions available:
|
||||||
|
|
||||||
* `boolean success = sendMail(String recipient, String subject, String text)`
|
- `boolean success = sendMail(String recipient, String subject, String text)`
|
||||||
* `boolean success = sendMailWithAttachment(String recipient, String subject, String text, String URL)`
|
- `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 = sendMailWithAttachments(String recipient, String subject, String text, List<String> URL)`
|
||||||
* `boolean success = sendHtmlMail(String recipient, String subject, String htmlContent)`
|
- `boolean success = sendHtmlMail(String recipient, String subject, String htmlContent)`
|
||||||
* `boolean success = sendHtmlMailWithAttachment(String recipient, String subject, String htmlContent, String URL)`
|
- `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 = sendHtmlMailWithAttachments(String recipient, String subject, String htmlContent, List<String> URL)`
|
||||||
|
|
||||||
The `sendMail(...)` send a plain text mail (with attachments if supplied).
|
The `sendMail(...)` send a plain text mail (with attachments if supplied).
|
||||||
The `sendHtmlMail(...)` send a HTML 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:
|
Examples:
|
||||||
|
|
||||||
```
|
```java
|
||||||
val mailActions = getActions("mail","mail:smtp:samplesmtp")
|
val mailActions = getActions("mail","mail:smtp:samplesmtp")
|
||||||
val success = mailActions.sendMail("mail@example.com", "Test subject", "This is the mail content.")
|
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.")
|
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
|
import java.util.List
|
||||||
|
|
||||||
val List<String> attachmentUrlList = newArrayList(
|
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.
|
Headers can be added inside a rule by calling the `mailActions.addHeader()` method before calling the respective `mailActions.sendMail()` method.
|
||||||
See the example below.
|
See the example below.
|
||||||
|
|
||||||
```
|
```java
|
||||||
rule "Send Mail with a 'Reference' header; for threaded view in e-mail client"
|
rule "Send Mail with a 'Reference' header; for threaded view in e-mail client"
|
||||||
when
|
when
|
||||||
...
|
...
|
||||||
|
|
|
@ -74,7 +74,7 @@ Bridge max:bridge:KEQ0565026 [ ipAddress="192.168.3.9", serialNumber="KEQ0565026
|
||||||
max.items:
|
max.items:
|
||||||
|
|
||||||
```java
|
```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"}
|
Switch maxBattery "Battery Low" (gMAX) {channel="max:thermostat:KEQ0565026:KEQ0648949:battery_low"}
|
||||||
String maxMode "Thermostat Mode Setting" (gMAX) {channel="max:thermostat:KEQ0565026:KEQ0648949:mode"}
|
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.
|
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:
|
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
|
- _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
|
- _ntpServer2_ The hostname for NTP Server 2 used by the Cube to get the time
|
||||||
|
|
||||||
## Thing Actions
|
## Thing Actions
|
||||||
|
|
||||||
Several Thing Actions are available to trigger special actions on the MAX! Cube
|
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
|
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
|
### Example Rule
|
||||||
|
|
||||||
|
|
|
@ -1,22 +1,19 @@
|
||||||
# MCD Binding
|
# 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.
|
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.
|
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.
|
Please note that a valid account is needed to access MCD and the Sensor API.
|
||||||
|
|
||||||
|
|
||||||
## Supported Things
|
## 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
|
||||||
|
|
||||||
Discovery is not supported.
|
Discovery is not supported.
|
||||||
|
|
||||||
|
|
||||||
## Thing Configuration
|
## Thing Configuration
|
||||||
|
|
||||||
|
@ -24,7 +21,7 @@ This section shows the configuration parameters of both supported things.
|
||||||
|
|
||||||
### MCD Bridge
|
### 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 |
|
| parameter | description |
|
||||||
|-----------|------------------------------------|
|
|-----------|------------------------------------|
|
||||||
|
@ -33,7 +30,7 @@ The MCD Bridge (`mcdBridge`) needs to be configured with your valid C&S MCD / sy
|
||||||
|
|
||||||
### MCD Sensor Thing
|
### 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 |
|
| parameter | description |
|
||||||
|----------------|------------------------------------|
|
|----------------|------------------------------------|
|
||||||
|
@ -41,16 +38,16 @@ Each sensor thing (`mcdSensor`) needs to be configured with the identical serial
|
||||||
|
|
||||||
## Channels
|
## 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 |
|
| channel | type | description |
|
||||||
|-------------|--------|-----------------------------------------------|
|
|-------------|--------|-----------------------------------------------|
|
||||||
| lastEvent | String | shows the last event that was sent with date and time |
|
| 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 |
|
| 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 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.
|
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.
|
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).
|
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 |
|
| 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 |
|
| NUMBERPERSONS |
|
||||||
| BRIGHTNESSZONE |
|
| BRIGHTNESSZONE |
|
||||||
|
|
||||||
|
|
||||||
## Full Example
|
## Full Example
|
||||||
|
|
||||||
Here is an example for the textual configuration. You can of course use the Administration section of the GUI as well.
|
Here is an example for the textual configuration. You can of course use the Administration section of the GUI as well.
|
||||||
|
|
||||||
demo.things:
|
demo.things:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge mcd:mcdBridge:exampleBridge [userEmail="your.email@examle.com", userPassword="your.password"]{
|
Bridge mcd:mcdBridge:exampleBridge [userEmail="your.email@examle.com", userPassword="your.password"]{
|
||||||
Thing mcd:mcdSensor:examlpeSensor [serialNumber="123"]
|
Thing mcd:mcdSensor:examlpeSensor [serialNumber="123"]
|
||||||
Thing mcd:mcdSensor:secondExamlpeSensor [serialNumber="456"]
|
Thing mcd:mcdSensor:secondExamlpeSensor [serialNumber="456"]
|
||||||
|
@ -130,14 +126,14 @@ Bridge mcd:mcdBridge:exampleBridge [userEmail="your.email@examle.com", userPassw
|
||||||
|
|
||||||
demo.items:
|
demo.items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
String lastValue "Last Value" {channel="mcd:mcdSensor:examlpeSensor:lastValue"}
|
String lastValue "Last Value" {channel="mcd:mcdSensor:examlpeSensor:lastValue"}
|
||||||
String sendEvent "Send Event" {channel="mcd:mcdSensor:examlpeSensor:sendEvent"}
|
String sendEvent "Send Event" {channel="mcd:mcdSensor:examlpeSensor:sendEvent"}
|
||||||
```
|
```
|
||||||
|
|
||||||
demo.sitemap:
|
demo.sitemap:
|
||||||
|
|
||||||
```
|
```perl
|
||||||
Text item=sendEvent
|
Text item=sendEvent
|
||||||
Text item=lastValue
|
Text item=lastValue
|
||||||
```
|
```
|
||||||
|
|
|
@ -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.
|
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.
|
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.
|
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
|
## Dependencies
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ mcp23017 - which is a mcp23017 chip connected to an I2C bus on specified HEX add
|
||||||
|
|
||||||
## Thing Configuration
|
## Thing Configuration
|
||||||
|
|
||||||
* Required configuration for mcp23017 thing:
|
- Required configuration for mcp23017 thing:
|
||||||
|
|
||||||
| Parameter | Description | Default value |
|
| 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:
|
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).
|
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.
|
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
|
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:
|
because openHAB will SET state of this PIN. So your config should look like this:
|
||||||
|
|
||||||
* Things:
|
- Things:
|
||||||
|
|
||||||
Minimal configuration:
|
Minimal configuration:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing mcp23017:mcp23017:chipA "MCP23017 chip A" [address=20,bus=1]
|
Thing mcp23017:mcp23017:chipA "MCP23017 chip A" [address=20,bus=1]
|
||||||
```
|
```
|
||||||
|
|
||||||
Configuration with default_state and pull_mode:
|
Configuration with default_state and pull_mode:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing mcp23017:mcp23017:chipA "MCP23017 chip A" [address=20,bus=1] {
|
Thing mcp23017:mcp23017:chipA "MCP23017 chip A" [address=20,bus=1] {
|
||||||
Type output_pin : output#A0 [default_state="HIGH"]
|
Type output_pin : output#A0 [default_state="HIGH"]
|
||||||
Type output_pin : output#A1 [default_state="LOW"]
|
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"}
|
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"}
|
Contact living_room_led_contact "Living room LED contact" {channel="mcp23017:mcp23017:chipA:input#B1"}
|
||||||
```
|
```
|
||||||
|
|
||||||
* Rules:
|
- Rules:
|
||||||
|
|
||||||
```
|
```java
|
||||||
rule "living_room_led contact"
|
rule "living_room_led contact"
|
||||||
when
|
when
|
||||||
Item living_room_led_contact changed to OPEN
|
Item living_room_led_contact changed to OPEN
|
||||||
|
|
|
@ -6,15 +6,13 @@ This binding uses the MEATER Cloud REST API.
|
||||||
|
|
||||||
![Meater+ Probe](doc/meater-plus-side.png)
|
![Meater+ Probe](doc/meater-plus-side.png)
|
||||||
|
|
||||||
|
|
||||||
## Supported Things
|
## Supported Things
|
||||||
|
|
||||||
This binding supports the following thing types:
|
This binding supports the following thing types:
|
||||||
|
|
||||||
- meaterapi: Bridge - Communicates with the MEATER Cloud REST API.
|
- 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
|
## Discovery
|
||||||
|
|
||||||
|
@ -37,7 +35,7 @@ This might help isolating an individual probe.
|
||||||
|
|
||||||
#### Configuration Options
|
#### 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 |
|
| 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 |
|
| 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
|
#### Configuration Options
|
||||||
|
|
||||||
| Parameter | Description | Type | Default | Required |
|
| Parameter | Description | Type | Default | Required |
|
||||||
|-----------|--------------------------------------------------------------|--------|----------|----------|
|
|-----------|--------------------------------------------------------------|--------|----------|----------|
|
||||||
| deviceId | Unique id for your MEATER Probe | String | NA | yes |
|
| deviceId | Unique id for your MEATER Probe | String | NA | yes |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#### Channels
|
#### Channels
|
||||||
|
|
||||||
| Channel Type ID | Item Type | Description |
|
| Channel Type ID | Item Type | Description |
|
||||||
|-----------------------|--------------------|------------------------------------------------------|
|
|-----------------------|--------------------|------------------------------------------------------|
|
||||||
| internalTemperature | Number:Temperature | Internal temperature reading of MEATER probe |
|
| 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 |
|
| 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 |
|
| cookPeakTemperature | Number:Temperature | Peak temperature of current cook |
|
||||||
| lastConnection | DateTime | Date and time of last probe connection |
|
| lastConnection | DateTime | Date and time of last probe connection |
|
||||||
| cookId | String | Unique cook ID of current cook |
|
| 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! |
|
| 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 |
|
| cookElapsedTime | Number:Time | Time since the start of cook in seconds. Default: 0 |
|
||||||
| cookRemainingTime | Number:Time | Remaining time in seconds or UNDEF when unknown. |
|
| cookRemainingTime | Number:Time | Remaining time in seconds or UNDEF when unknown. |
|
||||||
| cookEstimatedEndTime | DateTime | Date and time of estimated end time for current cook |
|
| cookEstimatedEndTime | DateTime | Date and time of estimated end time for current cook |
|
||||||
|
|
||||||
|
|
||||||
## Example
|
## Example
|
||||||
|
|
||||||
### Things-file
|
### Things-file
|
||||||
|
|
||||||
````
|
```java
|
||||||
Bridge meater:meaterapi:block "MEATER Block" [email="", password="", refresh=30] {
|
Bridge meater:meaterapi:block "MEATER Block" [email="", password="", refresh=30] {
|
||||||
meaterprobe probe1 "Meater Probe 1" [deviceId=""]
|
meaterprobe probe1 "Meater Probe 1" [deviceId=""]
|
||||||
meaterprobe probe2 "Meater Probe 2" [deviceId=""]
|
meaterprobe probe2 "Meater Probe 2" [deviceId=""]
|
||||||
meaterprobe probe3 "Meater Probe 3" [deviceId=""]
|
meaterprobe probe3 "Meater Probe 3" [deviceId=""]
|
||||||
meaterprobe probe4 "Meater Probe 4" [deviceId=""]
|
meaterprobe probe4 "Meater Probe 4" [deviceId=""]
|
||||||
}
|
}
|
||||||
````
|
```
|
||||||
|
|
||||||
### Items-file
|
### Items-file
|
||||||
|
|
||||||
````
|
```java
|
||||||
Number:Temperature Probe1InternalTemperature {channel="meater:meaterprobe:block:probe1:internalTemperature"}
|
Number:Temperature Probe1InternalTemperature {channel="meater:meaterprobe:block:probe1:internalTemperature"}
|
||||||
Number:Temperature Probe1AmbientTemperature {channel="meater:meaterprobe:block:probe1:ambientTemperature"}
|
Number:Temperature Probe1AmbientTemperature {channel="meater:meaterprobe:block:probe1:ambientTemperature"}
|
||||||
String Probe1CookId {channel="meater:meaterprobe:block:probe1:cookId"}
|
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"}
|
DateTime Probe4CookEstimatedEndTime {channel="meater:meaterprobe:block:probe4:cookEstimatedEndTime"}
|
||||||
String Probe4Status {channel="meater:meaterprobe:block:probe4:status"}
|
String Probe4Status {channel="meater:meaterprobe:block:probe4:status"}
|
||||||
DateTime Probe4LastConnection {channel="meater:meaterprobe:block:probe4:lastConnection"}
|
DateTime Probe4LastConnection {channel="meater:meaterprobe:block:probe4:lastConnection"}
|
||||||
````
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
This binding reads data from MEC power meter for providing electrical information for the electric circuit.
|
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
|
## Supported Things
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ Its unique ID is the serial number.
|
||||||
|
|
||||||
## Discovery
|
## 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 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.
|
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. |
|
| ip | The IP address of the meter. Mandatory. |
|
||||||
| refreshInterval | Refresh interval in second. Optional, the default value is 5 seconds. |
|
| refreshInterval | Refresh interval in second. Optional, the default value is 5 seconds. |
|
||||||
|
|
||||||
|
|
||||||
## Channels
|
## Channels
|
||||||
|
|
||||||
The meter has the following channels:
|
The meter has the following channels:
|
||||||
|
|
||||||
| Channel Type ID | Item Type | Label | Description |
|
| Channel Type ID | Item Type | Label | Description |
|
||||||
|--------------------------------------------------------------|--------------------------|-----------------------------------|------------------------------------------|
|
|--------------------------------------------------------------|--------------------------|-----------------------------------|------------------------------------------|
|
||||||
|
@ -115,13 +114,13 @@ The meter has the following channels:
|
||||||
|
|
||||||
### mecmeter.things
|
### mecmeter.things
|
||||||
|
|
||||||
```
|
```java
|
||||||
mecmeter:meter:1 [ password="Test1234", ip="192.168.1.16", refreshInterval="10" ]
|
mecmeter:meter:1 [ password="Test1234", ip="192.168.1.16", refreshInterval="10" ]
|
||||||
```
|
```
|
||||||
|
|
||||||
### mecmeter.items
|
### mecmeter.items
|
||||||
|
|
||||||
```
|
```java
|
||||||
Number:Frequency MainFrequency { channel="mecmeter:meter:1:general_group#frequency" }
|
Number:Frequency MainFrequency { channel="mecmeter:meter:1:general_group#frequency" }
|
||||||
Number:Temperature InternalTemperature { channel="mecmeter:meter:1:general_group#temperature" }
|
Number:Temperature InternalTemperature { channel="mecmeter:meter:1:general_group#temperature" }
|
||||||
Number:Time TimeinOperation { channel="mecmeter:meter:1:general_group#op_time" }
|
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
|
### mecmeter.sitemap
|
||||||
|
|
||||||
```
|
```perl
|
||||||
sitemap mecmeter label="MecMeter"
|
sitemap mecmeter label="MecMeter"
|
||||||
{
|
{
|
||||||
Frame label="General" {
|
Frame label="General" {
|
||||||
|
|
|
@ -1,27 +1,26 @@
|
||||||
# MELCloud Binding
|
# 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.
|
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 Things
|
||||||
|
|
||||||
Supported thing types
|
Supported thing types
|
||||||
|
|
||||||
* melcloudaccount (bridge)
|
- melcloudaccount (bridge)
|
||||||
* acdevice
|
- acdevice
|
||||||
* heatpumpdevice
|
- heatpumpdevice
|
||||||
|
|
||||||
A bridge is required to connect to your MELCloud account.
|
A bridge is required to connect to your MELCloud account.
|
||||||
|
|
||||||
|
|
||||||
## Discovery
|
## Discovery
|
||||||
|
|
||||||
Discovery is used _after_ a bridge has been created and configured with your login information.
|
Discovery is used _after_ a bridge has been created and configured with your login information.
|
||||||
|
|
||||||
1. Add the binding
|
1. Add the binding
|
||||||
2. Add a new thing of type melcloudaccount and configure with username and password
|
1. Add a new thing of type melcloudaccount and configure with username and password
|
||||||
3. Go to Inbox and start discovery devices using MELCloud Binding
|
1. Go to Inbox and start discovery devices using MELCloud Binding
|
||||||
4. Supported devices (A.C. Device, Heatpump Device) should appear in your inbox
|
1. Supported devices (A.C. Device, Heatpump Device) should appear in your inbox
|
||||||
|
|
||||||
Binding support also manual thing configuration by thing files.
|
Binding support also manual thing configuration by thing files.
|
||||||
|
|
||||||
|
@ -67,7 +66,6 @@ MELCloud account configuration:
|
||||||
| 24 | Romanian |
|
| 24 | Romanian |
|
||||||
| 25 | Slovenian |
|
| 25 | Slovenian |
|
||||||
|
|
||||||
|
|
||||||
A.C. device and Heatpump device configuration:
|
A.C. device and Heatpump device configuration:
|
||||||
|
|
||||||
| Config | Mandatory | Description |
|
| 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. |
|
| 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. |
|
| pollingInterval | | Refresh time interval in seconds for updates from MELCloud. Defaults to 60 seconds. |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Channels
|
## Channels
|
||||||
|
|
||||||
A.C. device channels
|
A.C. device channels
|
||||||
|
@ -112,18 +108,18 @@ Heatpump device channels
|
||||||
|
|
||||||
## Full Example for items configuration
|
## 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" ] {
|
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 acdevice livingroom "Livingroom A.C. device" [ deviceID=123456, pollingInterval=60 ]
|
||||||
Thing heatpumpdevice attic "Attic Heatpump device" [ deviceID=789012, 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" }
|
Switch power { channel="melcloud:acdevice:myaccount:livingroom:power" }
|
||||||
String operationMode { channel="melcloud:acdevice:myaccount:livingroom:operationMode" }
|
String operationMode { channel="melcloud:acdevice:myaccount:livingroom:operationMode" }
|
||||||
Number setTemperature { channel="melcloud:acdevice:myaccount:livingroom:setTemperature" }
|
Number setTemperature { channel="melcloud:acdevice:myaccount:livingroom:setTemperature" }
|
||||||
|
|
|
@ -8,7 +8,7 @@ If you face some problems during setup or runtime please have a look into the [T
|
||||||
|
|
||||||
## Supported Things
|
## Supported Things
|
||||||
|
|
||||||
| Type | ID | Description |
|
| Type | ID | Description |
|
||||||
|-----------------|---------------|-------------------------------------------------|
|
|-----------------|---------------|-------------------------------------------------|
|
||||||
| Bridge | `account` | Connect your Mercedes Me account |
|
| Bridge | `account` | Connect your Mercedes Me account |
|
||||||
| Thing | `combustion` | Conventional fuel vehicle |
|
| 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 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
|
### 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.
|
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.
|
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**
|
- _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/)
|
- _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**
|
- _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
|
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
|
||||||
4. For all Products perform the same steps
|
1. For all Products perform the same steps
|
||||||
- Select product
|
- Select product
|
||||||
- Choose _Get For Free_
|
- Choose _Get For Free_
|
||||||
- Choose _BYOCAR_ (Build Your Own Car)
|
- Choose _BYOCAR_ (Build Your Own Car)
|
||||||
- Button _Confirm_
|
- Button _Confirm_
|
||||||
5. Select the following products
|
1. Select the following products
|
||||||
- Vehicle Status
|
- Vehicle Status
|
||||||
- Vehicle Lock Status
|
- Vehicle Lock Status
|
||||||
- Pay as you drive insurance
|
- Pay as you drive insurance
|
||||||
- Electric Vehicle Status
|
- Electric Vehicle Status
|
||||||
- Fuel 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.
|
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.
|
||||||
7. Press _Subscribe_ button. Your project should have [these product subscriptions](#mb-product-subscriptions)
|
1. Press _Subscribe_ button. Your project should have [these product subscriptions](#mb-product-subscriptions)
|
||||||
8. Generate the [project credentials](#mb-credentials)
|
1. Generate the [project credentials](#mb-credentials)
|
||||||
9. Open in new browser tab your openHAB page. Add a new Thing _Mercedes Me Account_
|
1. 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
|
1. 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
|
1. Check if the registered Mercedes products _excluding Vehicle Images_ are matching exactly with the openHab configuration switches
|
||||||
12. Create Thing!
|
1. Create Thing!
|
||||||
13. The fresh created [account has one property](#openhab-configuration) `callbackUrl`. Copy it and paste it in a new browser tab
|
1. 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
|
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
|
||||||
15. The copied URL needs to be added in your [Mercedes project credentials](#mb-credentials) from 8
|
1. 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. 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
|
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"/>
|
<img src="./doc/CallbackUrl_Page.png" width="500" height="350"/>
|
||||||
|
|
||||||
|
|
||||||
### Bridge Configuration Parameters
|
### Bridge Configuration Parameters
|
||||||
|
|
||||||
| Name | Type | Description | Default | Required | Advanced |
|
| 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.
|
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.
|
Set the advanced options by yourself if you know your IP and Port, otherwise give auto detect a try.
|
||||||
|
|
||||||
|
|
||||||
## Thing Configuration
|
## Thing Configuration
|
||||||
|
|
||||||
For vehicle images Mercedes Benz Developer offers only a trial version with limited calls.
|
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.
|
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 [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`.
|
For example the EQA doesn't provide `night` images with `background`.
|
||||||
If your configuration is set this way the API calls are wasted!
|
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
|
If you're not satisfied e.g. you want a background you need to
|
||||||
|
|
||||||
1. change the [Advanced Image Configuration Properties](#thing-configuration)
|
1. change the [Advanced Image Configuration Properties](#thing-configuration)
|
||||||
2. Switch `clear-cache` channel item to `ON` to clear all images
|
1. Switch `clear-cache` channel item to `ON` to clear all images
|
||||||
3. request them via `image-view`
|
1. request them via `image-view`
|
||||||
|
|
||||||
### Image View Options
|
### 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"/>
|
<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:
|
Most common errors:
|
||||||
|
|
||||||
- redirect URL doesn't match: Double check if `callbackUrl` is really saved correctly in your Mercedes Benz Developer project
|
- 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.
|
- scope failure: the requested scope doesn't match with the subscribed products.
|
||||||
- Check [openHab configuration switches](#openhab-configuration)
|
- Check [openHab configuration switches](#openhab-configuration)
|
||||||
- apply changes if necessary and don't forget to save
|
- 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
|
- after these steps refresh the `callbackUrl` in [your browser](#callback-page) to apply these changes
|
||||||
- try a new authorization clicking the link
|
- try a new authorization clicking the link
|
||||||
|
|
||||||
### Receive no data
|
### Receive no data
|
||||||
|
|
||||||
Especially after setting the frist Mercedes Benz Developer Project you'll 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 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
|
- 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
|
- wait until values are providing the right states
|
||||||
|
|
||||||
### Images
|
### 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.
|
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)
|
- _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)
|
- _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.
|
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`
|
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
|
## 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
|
Exchange configuration parameters in the Things section
|
||||||
|
|
||||||
Bridge
|
Bridge
|
||||||
|
|
||||||
* 4711 - your desired bridge id
|
- 4711 - your desired bridge id
|
||||||
* YOUR_CLIENT_ID - Client ID of the Mercedes Developer project
|
- YOUR_CLIENT_ID - Client ID of the Mercedes Developer project
|
||||||
* YOUR_CLIENT_SECRET - Client Secret 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_API_KEY - Image API Key of the Mercedes Developer project
|
||||||
* YOUR_OPENHAB_SERVER_IP - IP address of your openHAB server
|
- 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!
|
- 8090 - a **unique** port number - each bridge in your openHAB installation needs to have different port number!
|
||||||
|
|
||||||
Thing
|
Thing
|
||||||
|
|
||||||
* eqa - your desired vehicle thing id
|
- eqa - your desired vehicle thing id
|
||||||
* VEHICLE_VIN - your Vehicle Identification Number
|
- VEHICLE_VIN - your Vehicle Identification Number
|
||||||
|
|
||||||
### Things file
|
### 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] {
|
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"]
|
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
|
### Items file
|
||||||
|
|
||||||
```
|
```java
|
||||||
Number:Length EQA_Mileage "Odometer [%d %unit%]" {channel="mercedesme:bev:4711:eqa:range#mileage" }
|
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_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"}
|
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
|
### Sitemap
|
||||||
|
|
||||||
```
|
```perl
|
||||||
sitemap MB label="Mercedes Benz EQA" {
|
sitemap MB label="Mercedes Benz EQA" {
|
||||||
Frame label="EQA Image" {
|
Frame label="EQA Image" {
|
||||||
Image item=EQA_Image
|
Image item=EQA_Image
|
||||||
|
|
|
@ -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 |
|
| avalanches-icon | Image | Pictogram of Avalanche alert level |
|
||||||
| vague-submersion-icon | Image | Pictogram of Wave Submersion 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 |
|
| 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 |
|
| 2 | Orange | Be "very vigilant" in the concerned areas |
|
||||||
| 3 | Red | Absolute vigilance required |
|
| 3 | Red | Absolute vigilance required |
|
||||||
|
|
||||||
|
|
||||||
## Full Example
|
## Full Example
|
||||||
|
|
||||||
meteoalert.things:
|
meteoalert.things:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Thing meteoalerte:department:yvelines @ "MyCity" [department="YVELINES", refresh=12]
|
Thing meteoalerte:department:yvelines @ "MyCity" [department="YVELINES", refresh=12]
|
||||||
```
|
```
|
||||||
|
|
||||||
meteoalert.items:
|
meteoalert.items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Group gMeteoAlert "Alertes Météo" <weather>
|
Group gMeteoAlert "Alertes Météo" <weather>
|
||||||
String MA_Dept78 "Département 78 [%s]" <aqi> (gMeteoAlert) {channel="meteoalerte:department:yvelines:comment"}
|
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"}
|
Number MA_etat_canicule "Canicule [%s]" <aqi> (gMeteoAlert) {channel="meteoalerte:department:yvelines:canicule"}
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
The meteoblue binding uses the [meteoblue weather service](https://content.meteoblue.com/en/content/view/full/4511)
|
The meteoblue binding uses the [meteoblue weather service](https://content.meteoblue.com/en/content/view/full/4511)
|
||||||
to provide weather information.
|
to provide weather information.
|
||||||
|
|
||||||
|
|
||||||
## Supported Things
|
## Supported Things
|
||||||
|
|
||||||
The binding has two thing types.
|
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
|
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.
|
its child things.
|
||||||
|
|
||||||
|
|
||||||
## Thing Configuration
|
## Thing Configuration
|
||||||
|
|
||||||
### Bridge Thing Configuration
|
### Bridge Thing Configuration
|
||||||
|
@ -21,7 +19,6 @@ its child things.
|
||||||
| ------------- |:-------------:| :-------: | -------------------- |
|
| ------------- |:-------------:| :-------: | -------------------- |
|
||||||
| apiKey | | Yes | The api key to be used with the meteoblue service |
|
| apiKey | | Yes | The api key to be used with the meteoblue service |
|
||||||
|
|
||||||
|
|
||||||
### Weather Thing Configuration
|
### Weather Thing Configuration
|
||||||
|
|
||||||
| Property | Default Value | Required? | Description |
|
| 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' |
|
| 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. |
|
| 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
|
## Channels
|
||||||
|
|
||||||
### Channel Groups
|
### 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 |
|
| precipitationHours | Number | Total hours of the day with precipitation |
|
||||||
| humidityGreater90Hours | Number | Total hours of the day with relative humidity greater than 90% |
|
| humidityGreater90Hours | Number | Total hours of the day with relative humidity greater than 90% |
|
||||||
|
|
||||||
|
|
||||||
## Image Icons
|
## 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.
|
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".
|
The files to extract from the zip file and install in the folder will be named "iday*.png" or "iday*.svg".
|
||||||
|
|
||||||
|
|
||||||
## Full Example
|
## Full Example
|
||||||
|
|
||||||
demo.things:
|
demo.things:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge meteoblue:bridge:metBridge "metBridge" [ apiKey="XXXXXXXXXXXX" ] {
|
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:
|
demo.items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
// ----------------- meteoblue GROUPS ------------------------------------------
|
// ----------------- meteoblue GROUPS ------------------------------------------
|
||||||
Group weatherDay0 "Today's Weather"
|
Group weatherDay0 "Today's Weather"
|
||||||
Group weatherDay1 "Tomorrow'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"}
|
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"}
|
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 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 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 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 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 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"}
|
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:
|
demo.sitemap:
|
||||||
|
|
||||||
````
|
````perl
|
||||||
sitemap weather label="Weather"
|
sitemap weather label="Weather"
|
||||||
{
|
{
|
||||||
Frame label="Weather" {
|
Frame label="Weather" {
|
||||||
|
|
|
@ -12,7 +12,6 @@ This binding support 2 different things types
|
||||||
| meteostick_bridge | Bridge | This is the Meteostick USB stick |
|
| meteostick_bridge | Bridge | This is the Meteostick USB stick |
|
||||||
| meteostick_davis_iss | Thing | This is the Davis Vue ISS |
|
| meteostick_davis_iss | Thing | This is the Davis Vue ISS |
|
||||||
|
|
||||||
|
|
||||||
## Binding Configuration
|
## Binding Configuration
|
||||||
|
|
||||||
The Meteostick things need to be manually added - there is no discovery in the Meteostick binding.
|
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. [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:
|
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:
|
Things can be defined in the .things file as follows:
|
||||||
|
|
||||||
```
|
```java
|
||||||
meteostick:meteostick_bridge:receiver [ port="/dev/tty.usbserial-AI02XA60", mode=1 ]
|
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 ]
|
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
|
### items/meteostick.items
|
||||||
|
|
||||||
```
|
```java
|
||||||
Number:Pressure MeteoStickPressure "Meteostick Pressure [%.1f hPa]"{ channel="meteostick:meteostick_bridge:receiver:pressure" }
|
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: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" }
|
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.
|
Replace `YOUR_ID` and `your_password` below with the values from the the Weather Underground registration process.
|
||||||
|
|
||||||
```
|
```java
|
||||||
import java.net.URLEncoder
|
import java.net.URLEncoder
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
|
@ -133,46 +132,46 @@ import java.util.TimeZone
|
||||||
|
|
||||||
rule PWS
|
rule PWS
|
||||||
when
|
when
|
||||||
Item DavisVantageVueWindDirectionAverage received update
|
Item DavisVantageVueWindDirectionAverage received update
|
||||||
then
|
then
|
||||||
val id = 'YOUR_ID'
|
val id = 'YOUR_ID'
|
||||||
val pw = 'your_password'
|
val pw = 'your_password'
|
||||||
val sdf = new SimpleDateFormat('yyyy-MM-dd HH:mm:ss')
|
val sdf = new SimpleDateFormat('yyyy-MM-dd HH:mm:ss')
|
||||||
sdf.setTimeZone(TimeZone.getTimeZone('UTC'))
|
sdf.setTimeZone(TimeZone.getTimeZone('UTC'))
|
||||||
val double rh = DavisVantageVueHumidity.getStateAs(DecimalType).doubleValue
|
val double rh = DavisVantageVueHumidity.getStateAs(DecimalType).doubleValue
|
||||||
val double tempc = DavisVantageVueOutdoorTemperature.getStateAs(QuantityType).toUnit('°C').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 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 double dewptf = new QuantityType(dewptc, CELSIUS).toUnit('°F').doubleValue
|
||||||
val Map<String, Object> params = newLinkedHashMap(
|
val Map<String, Object> params = newLinkedHashMap(
|
||||||
'action' -> 'updateraw',
|
'action' -> 'updateraw',
|
||||||
'ID' -> id,
|
'ID' -> id,
|
||||||
'PASSWORD' -> pw,
|
'PASSWORD' -> pw,
|
||||||
'dateutc' -> sdf.format(new Date()),
|
'dateutc' -> sdf.format(new Date()),
|
||||||
'winddir' -> DavisVantageVueWindDirection.getStateAs(QuantityType).toUnit('°').intValue,
|
'winddir' -> DavisVantageVueWindDirection.getStateAs(QuantityType).toUnit('°').intValue,
|
||||||
'windspeedmph' -> DavisVantageVueWindSpeed.getStateAs(QuantityType).toUnit('mph').doubleValue,
|
'windspeedmph' -> DavisVantageVueWindSpeed.getStateAs(QuantityType).toUnit('mph').doubleValue,
|
||||||
'windgustmph' -> DavisVantageVueWindSpeedMaximum.getStateAs(QuantityType).toUnit('mph').doubleValue,
|
'windgustmph' -> DavisVantageVueWindSpeedMaximum.getStateAs(QuantityType).toUnit('mph').doubleValue,
|
||||||
'windgustdir' -> DavisVantageVueWindDirectionAverage.getStateAs(QuantityType).toUnit('°').intValue,
|
'windgustdir' -> DavisVantageVueWindDirectionAverage.getStateAs(QuantityType).toUnit('°').intValue,
|
||||||
'windspdmph_avg2m' -> DavisVantageVueWindSpeedAverage.getStateAs(QuantityType).toUnit('mph').doubleValue,
|
'windspdmph_avg2m' -> DavisVantageVueWindSpeedAverage.getStateAs(QuantityType).toUnit('mph').doubleValue,
|
||||||
'winddir_avg2m' -> DavisVantageVueWindDirectionAverage.getStateAs(QuantityType).toUnit('°').intValue,
|
'winddir_avg2m' -> DavisVantageVueWindDirectionAverage.getStateAs(QuantityType).toUnit('°').intValue,
|
||||||
'humidity' -> DavisVantageVueHumidity.state,
|
'humidity' -> DavisVantageVueHumidity.state,
|
||||||
'dewptf' -> dewptf,
|
'dewptf' -> dewptf,
|
||||||
'tempf' -> DavisVantageVueOutdoorTemperature.getStateAs(QuantityType).toUnit('°F').doubleValue,
|
'tempf' -> DavisVantageVueOutdoorTemperature.getStateAs(QuantityType).toUnit('°F').doubleValue,
|
||||||
'rainin' -> DavisVantageVueRainCurrentHour.getStateAs(QuantityType).toUnit('in').doubleValue,
|
'rainin' -> DavisVantageVueRainCurrentHour.getStateAs(QuantityType).toUnit('in').doubleValue,
|
||||||
'baromin' -> MeteoStickPressure.getStateAs(QuantityType).toUnit('inHg').doubleValue,
|
'baromin' -> MeteoStickPressure.getStateAs(QuantityType).toUnit('inHg').doubleValue,
|
||||||
'softwaretype' -> 'openHAB 2.4')
|
'softwaretype' -> 'openHAB 2.4')
|
||||||
|
|
||||||
var url = 'https://weatherstation.wunderground.com/weatherstation/updateweatherstation.php?'
|
var url = 'https://weatherstation.wunderground.com/weatherstation/updateweatherstation.php?'
|
||||||
var first = true
|
var first = true
|
||||||
for (key : params.keySet()) {
|
for (key : params.keySet()) {
|
||||||
if (!first) {
|
if (!first) {
|
||||||
url += '&'
|
url += '&'
|
||||||
}
|
}
|
||||||
url += key + '=' + URLEncoder::encode(params.get(key).toString, 'UTF-8')
|
url += key + '=' + URLEncoder::encode(params.get(key).toString, 'UTF-8')
|
||||||
first = false
|
first = false
|
||||||
}
|
}
|
||||||
|
|
||||||
logDebug('PWS', 'url is {}', url)
|
logDebug('PWS', 'url is {}', url)
|
||||||
sendHttpGetRequest(url)
|
sendHttpGetRequest(url)
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# Miele@home Binding
|
# Miele@home Binding
|
||||||
|
|
||||||
This binding integrates Miele@home appliances.
|
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.
|
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.
|
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.
|
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.
|
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
|
- Coffeemachine
|
||||||
- Dishwasher
|
- Dishwasher
|
||||||
|
@ -37,7 +37,7 @@ To avoid this, there is a discovery configuration parameter `removalGracePeriod`
|
||||||
The default value is 15 seconds.
|
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.
|
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
|
discovery.miele:removalGracePeriod=30
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -407,7 +407,7 @@ See oven.
|
||||||
|
|
||||||
## things/miele.things
|
## things/miele.things
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge miele:xgw3000:home [ipAddress="192.168.0.18", interface="192.168.0.5"] {
|
Bridge miele:xgw3000:home [ipAddress="192.168.0.18", interface="192.168.0.5"] {
|
||||||
Things:
|
Things:
|
||||||
Thing fridgefreezer freezer [uid="00124b000424be44#2"]
|
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
|
## items/miele.items
|
||||||
|
|
||||||
```
|
```java
|
||||||
String Dishwasher_State {channel="miele:dishwasher:home:dishwasher:state"}
|
String Dishwasher_State {channel="miele:dishwasher:home:dishwasher:state"}
|
||||||
Number Dishwasher_RawState {channel="miele:dishwasher:home:dishwasher:rawState"}
|
Number Dishwasher_RawState {channel="miele:dishwasher:home:dishwasher:rawState"}
|
||||||
String Dishwasher_Program "Program [%s]" {channel="miele:dishwasher:home:dishwasher:program"}
|
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
|
## sitemaps/miele.sitemap
|
||||||
|
|
||||||
```
|
```perl
|
||||||
sitemap miele label="Miele" {
|
sitemap miele label="Miele" {
|
||||||
Frame label="Miele" {
|
Frame label="Miele" {
|
||||||
Text item=Oven_State label="Oven [%s]" icon="kitchen" {
|
Text item=Oven_State label="Oven [%s]" icon="kitchen" {
|
||||||
|
|
|
@ -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. |
|
| 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`. |
|
| 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
|
### Appliance Configuration
|
||||||
|
|
||||||
The binding configuration UI will show a things-file template containing things for all supported appliances from the paired account.
|
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. |
|
| deviceIdentifier | required | Technical device identifier uniquely identifying the Miele appliance. Use the discovery result or the things-file template to obtain it. |
|
||||||
|
|
||||||
|
|
||||||
## Channels
|
## Channels
|
||||||
|
|
||||||
The following table lists all available channels.
|
The following table lists all available channels.
|
||||||
|
@ -493,7 +491,7 @@ The following chapters list the properties offered by appliances.
|
||||||
|
|
||||||
### demo.things:
|
### demo.things:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge mielecloud:account:home [ email="me@openhab.org", locale="en" ] {
|
Bridge mielecloud:account:home [ email="me@openhab.org", locale="en" ] {
|
||||||
Thing coffee_system 000703261234 "Coffee machine CVA7440" [ deviceIdentifier="000703261234" ]
|
Thing coffee_system 000703261234 "Coffee machine CVA7440" [ deviceIdentifier="000703261234" ]
|
||||||
Thing hob 000160102345 "Cooktop KM7677" [ deviceIdentifier="000160102345" ]
|
Thing hob 000160102345 "Cooktop KM7677" [ deviceIdentifier="000160102345" ]
|
||||||
|
@ -502,7 +500,7 @@ Bridge mielecloud:account:home [ email="me@openhab.org", locale="en" ] {
|
||||||
|
|
||||||
### demo.items:
|
### demo.items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
// Coffee system
|
// 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_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" }
|
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:
|
### demo.sitemap:
|
||||||
|
|
||||||
```
|
```perl
|
||||||
sitemap demo label="Kitchen"
|
sitemap demo label="Kitchen"
|
||||||
{
|
{
|
||||||
Frame {
|
Frame {
|
||||||
|
@ -620,4 +618,3 @@ Here are some ideas on what could be done with this binding. You have more ideas
|
||||||
## Acknowledgements
|
## Acknowledgements
|
||||||
|
|
||||||
The development of this binding was initiated and sponsored by Miele & Cie. KG.
|
The development of this binding was initiated and sponsored by Miele & Cie. KG.
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
# Xiaomi Mi Smart Home Binding
|
# Xiaomi Mi Smart Home Binding
|
||||||
|
|
||||||
This binding allows your openHAB to communicate with the Xiaomi Smart Home Suite.
|
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 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.
|
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.
|
Zigbee2Mqtt provides an alternative method to integrate Xiaomi devices.
|
||||||
|
@ -15,90 +15,81 @@ Zigbee2Mqtt provides an alternative method to integrate Xiaomi devices.
|
||||||
|
|
||||||
| Device | Picture |
|
| 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) |
|
| 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 | ![](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)|
|
| 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 | ![](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) |
|
| 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 | ![](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) |
|
| 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 | ![](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) |
|
| 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 | ![](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) |
|
| 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) | ![](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) |
|
| 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) | ![](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) |
|
| 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 | ![](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) |
|
| 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 | ![](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 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 | ![](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) |
|
| 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 | ![](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) |
|
| 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 | ![](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 | ![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) | ![](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 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) | ![](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 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) | ![](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 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 | ![](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 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 | ![](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) |
|
| 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 | ![](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 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 | ![](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) |
|
| 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 | ![](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) |
|
| 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
|
## Setup
|
||||||
|
|
||||||
* Install the binding
|
- Install the binding
|
||||||
* Is your gateway already configured to connect to your WiFi? If not:
|
- 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. 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
|
||||||
2. 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.
|
||||||
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
|
||||||
* Enable developer mode of your gateway:
|
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. Select your Gateway in the MiHome app
|
1. You should now have 2 extra options listed: `wireless communication protocol` and `hub info`, it may appear in Chinese
|
||||||
2. Go to the "..." menu on the top right corner and click "About"
|
1. Choose `wireless communication protocol`
|
||||||
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
|
1. Tap the toggle switch to enable WiFi functions. Note down the developer key (aka password), something like: 91bg8zfkf9vd6uw7
|
||||||
4. You should now have 2 extra options listed: `wireless communication protocol` and `hub info`, it may appear in Chinese
|
1. Make sure you hit the OK button (to the right of the cancel button) to save your changes
|
||||||
5. Choose `wireless communication protocol`
|
1. Now update the gateway to the latest firmware
|
||||||
6. Tap the toggle switch to enable WiFi functions. Note down the developer key (aka password), something like: 91bg8zfkf9vd6uw7
|
- Enable developer mode of your gateway (legacy app):
|
||||||
7. Make sure you hit the OK button (to the right of the cancel button) to save your changes
|
1. Select your Gateway in the MiHome app
|
||||||
8. Now update the gateway to the latest firmware
|
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
|
||||||
* Enable developer mode of your gateway (legacy app):
|
1. You should now have 2 extra options listed: `wireless communication protocol` and `hub info`
|
||||||
|
1. Choose `wireless communication protocol`
|
||||||
1. Select your Gateway in the MiHome app
|
1. Tap the toggle switch to enable WiFi functions. Note down the developer key (aka password), something like: 91bg8zfkf9vd6uw7
|
||||||
2. Go to the "..." menu on the top right corner and click "About"
|
1. Make sure you hit the OK button (to the right of the cancel button) to save your changes
|
||||||
3. Tap the version number "Plug-in version : 2.XX.X" at the bottom of the screen repeatedly until you enable developer mode
|
1. Now update the gateway to the latest firmware
|
||||||
4. You should now have 2 extra options listed: `wireless communication protocol` and `hub info`
|
- In openHAB you should now be able to discover the Xiaomi Gateway
|
||||||
5. Choose `wireless communication protocol`
|
- 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)
|
||||||
6. Tap the toggle switch to enable WiFi functions. Note down the developer key (aka password), something like: 91bg8zfkf9vd6uw7
|
- 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)
|
||||||
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)
|
|
||||||
|
|
||||||
## Connecting devices to the gateway
|
## Connecting devices to the gateway
|
||||||
|
|
||||||
There are three ways of connecting supported devices to the gateway:
|
There are three ways of connecting supported devices to the gateway:
|
||||||
|
|
||||||
* Online - within the MiHome App
|
- Online - within the MiHome App
|
||||||
* Offline - manual
|
- 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
|
**Hints:**
|
||||||
2. Gateway will flash in blue and you will hear female voice in Chinese, you have 30 seconds to include your new device
|
|
||||||
3. Place the needle into the sensor and hold it for at least 3 seconds
|
|
||||||
4. You will hear confirmation message in Chinese
|
|
||||||
5. The device appears in openHAB thing Inbox
|
|
||||||
|
|
||||||
* With the binding
|
- 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
|
- 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!
|
||||||
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!
|
|
||||||
|
|
||||||
## Removing devices from the gateway
|
## 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.
|
- 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
|
- 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:
|
- 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", ... ] {
|
Bridge mihome:bridge:f0b429XXXXXX "Xiaomi Gateway" [ ..., interface="eth0", ... ] {
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -119,7 +111,7 @@ Bridge mihome:bridge:f0b429XXXXXX "Xiaomi Gateway" [ ..., interface="eth0", ...
|
||||||
|
|
||||||
### xiaomi.things:
|
### xiaomi.things:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge mihome:bridge:f0b429XXXXXX "Xiaomi Gateway" [ serialNumber="f0b429XXXXXX", ipAddress="192.168.0.3", port=9898, key="XXXXXXXXXXXXXXXX" ] {
|
Bridge mihome:bridge:f0b429XXXXXX "Xiaomi Gateway" [ serialNumber="f0b429XXXXXX", ipAddress="192.168.0.3", port=9898, key="XXXXXXXXXXXXXXXX" ] {
|
||||||
Things:
|
Things:
|
||||||
gateway f0b429XXXXXX "Xiaomi Mi Smart Home Gateway" [itemId="f0b429XXXXXX"]
|
gateway f0b429XXXXXX "Xiaomi Mi Smart Home Gateway" [itemId="f0b429XXXXXX"]
|
||||||
|
@ -135,7 +127,7 @@ Bridge mihome:bridge:f0b429XXXXXX "Xiaomi Gateway" [ serialNumber="f0b429XXXXXX"
|
||||||
|
|
||||||
### xiaomi.items:
|
### xiaomi.items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
// Replace <GwID> with itemId of gateway from Things file
|
// Replace <GwID> with itemId of gateway from Things file
|
||||||
// Replace <ID> with itemId of item from Things file
|
// Replace <ID> with itemId of item from Things file
|
||||||
// Gateway
|
// Gateway
|
||||||
|
@ -241,7 +233,7 @@ Rollershutter CurtainMotorControl <blinds> { channel="curtain:<GwID>:<ID>:curtai
|
||||||
|
|
||||||
### xiaomi.rules:
|
### xiaomi.rules:
|
||||||
|
|
||||||
```
|
```java
|
||||||
rule "Mijia & Aqara Wireless Switch"
|
rule "Mijia & Aqara Wireless Switch"
|
||||||
when
|
when
|
||||||
Channel "mihome:sensor_switch:<GwID>:<ID>:button" triggered
|
Channel "mihome:sensor_switch:<GwID>:<ID>:button" triggered
|
||||||
|
@ -395,10 +387,10 @@ end
|
||||||
|
|
||||||
### xiaomi.sitemap:
|
### xiaomi.sitemap:
|
||||||
|
|
||||||
```
|
```perl
|
||||||
sitemap xiaomi label="Xiaomi" {
|
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!
|
// 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
|
// 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
|
- 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
|
- 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
|
- 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
|
- raw messages from the device
|
||||||
- the data from the four different type of messages (see their details in the next chapter)
|
- the data from the four different type of messages (see their details in the next chapter)
|
||||||
- parameters you can send to the device
|
- parameters you can send to the device
|
||||||
|
|
||||||
### Gather information about the new device for future support
|
### 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.
|
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)
|
1. Heartbeat (usually transmitted every 60 minutes)
|
||||||
2. Report (device reports new sensor or status values)
|
1. Report (device reports new sensor or status values)
|
||||||
3. Read ACK (binding refreshes all sensor values after a restart of openHAB)
|
1. 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. Write ACK (device has received a command) **not available for sensor-only devices**
|
||||||
|
|
||||||
### Open a new issue or get your hands dirty
|
### 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:
|
Post an issue in the GitHub repository with as much information as possible about the new device:
|
||||||
|
|
||||||
- brand and link to device description
|
- brand and link to device description
|
||||||
- model name
|
- model name
|
||||||
- content of all the different message types
|
- 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!
|
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.
|
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_Raw { channel="mihome:basic:xxx:lastMessage" }
|
||||||
String Gateway_Heartbeat { channel="mihome:basic:xxx:heartbeatMessage" }
|
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:
|
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" }
|
String Gateway_Write { channel="mihome:basic:xxx:writeMessage" }
|
||||||
Switch Gateway_AddDevicesSwitch
|
Switch Gateway_AddDevicesSwitch
|
||||||
```
|
```
|
||||||
|
|
||||||
__mihome.rules__
|
#### mihome.rules
|
||||||
|
|
||||||
```
|
```java
|
||||||
rule "Enable device pairing with gateway as basic device thing"
|
rule "Enable device pairing with gateway as basic device thing"
|
||||||
when
|
when
|
||||||
Item Gateway_AddDevicesSwitch changed to ON
|
Item Gateway_AddDevicesSwitch changed to ON
|
||||||
|
@ -514,8 +507,10 @@ then
|
||||||
Gateway_Write.sendCommand("\"join_permission\":\"yes\"")
|
Gateway_Write.sendCommand("\"join_permission\":\"yes\"")
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
You can also send multiple command at once:
|
You can also send multiple command at once:
|
||||||
```
|
|
||||||
|
```java
|
||||||
GatewayWrite.sendCommand("\"rgb\":150000,\"join_permission\":\"yes\"")
|
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.
|
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.
|
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
|
- Set up the developer communication as described in the Setup section
|
||||||
|
|
||||||
### Check if your Linux machine receives multicast traffic
|
### Check if your Linux machine receives multicast traffic
|
||||||
|
|
||||||
- Login to the Linux console
|
- Login to the Linux console
|
||||||
- make sure you have __netcat__ installed
|
- make sure you have **netcat** installed
|
||||||
- Enter ```netcat -ukl 9898```
|
- Enter ```netcat -ukl 9898```
|
||||||
- At least every 10 seconds you should see a message coming in from the gateway which looks like
|
- 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\"}"}```
|
```{"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.
|
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:
|
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`
|
- 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
|
- 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:
|
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)
|
- 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
|
### 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
|
- 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\"}"}```
|
```{"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
|
- Most likely your machine is not receiving multicast messages
|
||||||
- Check your network config:
|
- Check your network config:
|
||||||
- Routers often block multicast - enable it
|
- Routers often block multicast - enable it
|
||||||
- Make sure the gateway and the machine are in the same subnet
|
- Make sure the gateway and the machine are in the same subnet
|
||||||
- Try to connect your machine via Ethernet instead of Wifi
|
- Try to connect your machine via Ethernet instead of Wifi
|
||||||
- Make sure you don't have any firewall rules blocking multicast
|
- 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
|
- 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
|
- Make sure to have the developer mode enabled in the MiHome app
|
||||||
- Reinstall the binding
|
- Reinstall the binding
|
||||||
- Try to update the firmware of the gateway
|
- 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
|
- Search the openHAB Community forum
|
||||||
- Contact Xiaomi support - get your gateway replaced
|
- 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.
|
Check out the Zigbee2Mqtt project on GitHub.
|
||||||
It allows you to use the sensors without the gateway and get their values through MQTT.
|
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.
|
You will need some hardware to act as a gateway which is not expensive.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Xiaomi Wifi devices (Mi IO) Binding
|
# 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.
|
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.
|
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
|
## Tokens
|
||||||
|
|
||||||
The binding needs a token from the Xiaomi Mi Device in order to be able to control it.
|
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.
|
The binding can retrieve the needed tokens from the Xiaomi cloud.
|
||||||
Go to the binding config page and enter your cloud username and password.
|
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 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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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).
|
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).
|
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.
|
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.
|
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.
|
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.
|
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.
|
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 |
|
| 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') |
|
| 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 |
|
| 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.
|
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.
|
Note2: communications parameter is not available for lumi devices. Lumi devices communicate using the bridge/gateway.
|
||||||
|
|
||||||
### Example Thing file
|
### 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:
|
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
|
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
|
# 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
|
## Substitute model for unsupported devices
|
||||||
|
|
||||||
Replace the model with the model which is already supported.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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: …` (
|
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.
|
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.
|
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.
|
For format, please check the current database files in openHAB GitHub.
|
||||||
|
|
||||||
# FAQ.. what to do in case of problems
|
# 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:
|
If your device is not getting online:
|
||||||
|
|
||||||
_Are you using text config?_
|
_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.
|
Or, better, try to get it going first without text config.
|
||||||
|
|
||||||
_The token is wrong_
|
_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?_
|
_My token is coming from the cloud... how can it be wrong?_
|
||||||
Is not very likely but still can happen._
|
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.
|
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.
|
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.
|
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._
|
_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.
|
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._
|
_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.
|
Alternatively as described above, double check for multiple connections for single device.
|
||||||
|
|
||||||
_Your device is on a different subnet?_
|
_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.
|
Firmware of the device don't accept commands coming from other subnets.
|
||||||
Set the communication in the thing configuration to 'cloud'.
|
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).
|
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:
|
If the problem persists you can try the following:
|
||||||
|
|
||||||
* Xiaomi Account verification might be needed. For some users login by the binding is unsuccessful as account verification is required, but the binding currently has no possibilities to handle this.
|
- Xiaomi Account verification might be needed. For some users login by the binding is unsuccessful as account verification is required, but the binding currently has no possibilities to handle this.
|
||||||
In order to pass validation your (openHAB server) ip need to be validated/confirmed.
|
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.
|
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.
|
- 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.
|
- 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.
|
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_
|
_My Roborock vacuum is not found or not reacting_
|
||||||
Did you link the vacuum with the Roborock app?
|
Did you link the vacuum with the Roborock app?
|
||||||
This won't work, the Roborock app is using a different communication method.
|
This won't work, the Roborock app is using a different communication method.
|
||||||
Reset your vacuum and connect it to the Xiaomi MiHome app.
|
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.
|
This will change the communication method and the Mi IO binding can communicate with the vacuum.
|
||||||
|
|
||||||
# Mi IO Devices
|
# Mi IO Devices
|
||||||
|
|
||||||
!!!devices
|
!!!devices
|
||||||
note: Supported means we received feedback from users this device is working with the binding.
|
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.
|
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.)
|
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.
|
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 |
|
| 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
|
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
|
### 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, 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.
|
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
|
!!!channelList
|
||||||
|
|
||||||
|
|
||||||
## Example item file Rockrobo vacuum
|
## Example item file Rockrobo vacuum
|
||||||
|
|
||||||
```
|
```java
|
||||||
Group gVac "Xiaomi Robot Vacuum" <fan>
|
Group gVac "Xiaomi Robot Vacuum" <fan>
|
||||||
Group gVacStat "Status Details" <status> (gVac)
|
Group gVacStat "Status Details" <status> (gVac)
|
||||||
Group gVacCons "Consumables Usage" <line-increase> (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"}
|
Image map "Cleaning Map" (gVacLast) {channel="miio:vacuum:034F0E45:cleaning#map"}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
!!!itemFileExamples
|
!!!itemFileExamples
|
||||||
|
|
||||||
### Country Servers
|
### Country Servers
|
||||||
|
@ -316,7 +311,7 @@ Known country Servers: cn, de, i2, ru, sg, us
|
||||||
Mapping of countries in mihome app to server:
|
Mapping of countries in mihome app to server:
|
||||||
|
|
||||||
| Country | Country Code | Server |
|
| Country | Country Code | Server |
|
||||||
|--------------------------|--------------|--------|
|
|--------------------------|--------------|--------|
|
||||||
| Afghanistan | AF | sg |
|
| Afghanistan | AF | sg |
|
||||||
| Albania | AL | de |
|
| Albania | AL | de |
|
||||||
| Algeria | DZ | sg |
|
| Algeria | DZ | sg |
|
||||||
|
|
|
@ -5,26 +5,24 @@ This binding integrates [Mikrotik](https://mikrotik.com/) [RouterOS](https://hel
|
||||||
|
|
||||||
## Supported Things
|
## Supported Things
|
||||||
|
|
||||||
* `routeros` - An instance of the RouterOS device connection
|
- `routeros` - An instance of the RouterOS device connection
|
||||||
* `interface` - A network interface inside RouterOS device
|
- `interface` - A network interface inside RouterOS device
|
||||||
* `wifiRegistration` - Any wireless client connected to a RouterOS wireless network (regular or CAPsMAN-managed)
|
- `wifiRegistration` - Any wireless client connected to a RouterOS wireless network (regular or CAPsMAN-managed)
|
||||||
|
|
||||||
|
|
||||||
## Discovery
|
## Discovery
|
||||||
|
|
||||||
Discovery is currently not supported, but may be implemented in future versions.
|
Discovery is currently not supported, but may be implemented in future versions.
|
||||||
|
|
||||||
|
|
||||||
## Bridge Configuration
|
## Bridge Configuration
|
||||||
|
|
||||||
To use this binding you need at least one RouterOS-powered device (Bridge) accessible to the host running
|
To use this binding you need at least one RouterOS-powered device (Bridge) accessible to the host running
|
||||||
openHAB via network.
|
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)
|
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
|
configuration section in
|
||||||
[WinBox](https://wiki.mikrotik.com/wiki/Manual:Winbox).
|
[WinBox](https://wiki.mikrotik.com/wiki/Manual:Winbox).
|
||||||
Take note of the API port number as you'll need it below.
|
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.
|
[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.
|
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.
|
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.**
|
**All things provided by this binding require a working bridge to be set up.**
|
||||||
|
|
||||||
|
|
||||||
### Bridge Channels
|
### Bridge Channels
|
||||||
|
|
||||||
| Channel | Type | Description | Comment |
|
| Channel | Type | Description | Comment |
|
||||||
|
@ -56,8 +53,6 @@ The RouterOS Bridge configuration parameters are:
|
||||||
| cpuLoad | Number:Dimensionless | CPU load percentage | |
|
| cpuLoad | Number:Dimensionless | CPU load percentage | |
|
||||||
| upSince | DateTime | Time when thing got up | |
|
| upSince | DateTime | Time when thing got up | |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## WiFi Client Thing Configuration
|
## WiFi Client Thing Configuration
|
||||||
|
|
||||||
> Thing type: `wifiRegistration`
|
> 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.)
|
Represents a network interface from RouterOS system (ethernet, wifi, vpn, etc.)
|
||||||
At the moment the binding supports the following RouterOS interface types:
|
At the moment the binding supports the following RouterOS interface types:
|
||||||
|
|
||||||
* `ether`
|
- `ether`
|
||||||
* `bridge`
|
- `bridge`
|
||||||
* `wlan`
|
- `wlan`
|
||||||
* `cap`
|
- `cap`
|
||||||
* `pppoe-out`
|
- `pppoe-out`
|
||||||
* `ppp-out`
|
- `ppp-out`
|
||||||
* `lte`
|
- `lte`
|
||||||
* `l2tp-in`
|
- `l2tp-in`
|
||||||
* `l2tp-out`
|
- `l2tp-out`
|
||||||
|
|
||||||
The interface thing configuration parameters are:
|
The interface thing configuration parameters are:
|
||||||
|
|
||||||
|
@ -161,24 +156,23 @@ Common for all kinds of interfaces:
|
||||||
|
|
||||||
**Change config options accordingly.**
|
**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 ] {
|
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 eth1 "Eth1" [ name="ether1" ]
|
||||||
Thing interface eth2 "Eth2" [ name="ether2-wan1" ]
|
Thing interface eth2 "Eth2" [ name="ether2-wan1" ]
|
||||||
Thing interface cap1 "Cap1" [ name="cap5" ]
|
Thing interface cap1 "Cap1" [ name="cap5" ]
|
||||||
Thing interface ppp1 "PPPoE1" [ name="isp-pppoe" ]
|
Thing interface ppp1 "PPPoE1" [ name="isp-pppoe" ]
|
||||||
Thing interface tun1 "L2TPSrv1" [ name="l2tp-parents" ]
|
Thing interface tun1 "L2TPSrv1" [ name="l2tp-parents" ]
|
||||||
Thing wifiRegistration wifi1 "Phone1" [ mac="F4:60:E2:C5:47:94", considerContinuous=60 ]
|
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 wifiRegistration wifi2 "Tablet2" [ mac="18:1D:EA:A5:A2:9E" ]
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### items/mikrotik.items
|
||||||
|
|
||||||
_items/mikrotik.items_
|
```java
|
||||||
|
|
||||||
```
|
|
||||||
Group gRB1 "RB3011 System"
|
Group gRB1 "RB3011 System"
|
||||||
Number:DataAmount My_RB_3011_Free_Space "Free space" (gRB1) {channel="mikrotik:routeros:rb1:freeSpace"}
|
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"}
|
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"}
|
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"
|
sitemap mikrotik label="Mikrotik Binding Demo"
|
||||||
{
|
{
|
||||||
Frame label="RouterBOARD 1" {
|
Frame label="RouterBOARD 1" {
|
||||||
Group item=gRB1
|
Group item=gRB1
|
||||||
Group item=gRB1Eth1
|
Group item=gRB1Eth1
|
||||||
Group item=gRB1Eth2
|
Group item=gRB1Eth2
|
||||||
Group item=gRB1Ppp1
|
Group item=gRB1Ppp1
|
||||||
Group item=gRB1Tun1
|
Group item=gRB1Tun1
|
||||||
Group item=gRB1Cap1
|
Group item=gRB1Cap1
|
||||||
Group item=gRB1Wifi1
|
Group item=gRB1Wifi1
|
||||||
Group item=gRB1Wifi2
|
Group item=gRB1Wifi2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
|
@ -38,36 +38,37 @@ configuration file.
|
||||||
iBox and iBox2 have the version 6, older Milight bridges have the version 3.
|
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.
|
The ID is the MAC address of the bridge in hexadecimal digits.
|
||||||
|
|
||||||
Bridge milight:bridgeV3:mybridge [ host="192.168.0.70", bridgeid="ACCF23A6C0B4", passwordByte1=0, passwordByte2=0, repeat=2, delayTime=75 ] {
|
```java
|
||||||
Thing whiteLed myWhite [ zone="0" ]
|
Bridge milight:bridgeV3:mybridge [ host="192.168.0.70", bridgeid="ACCF23A6C0B4", passwordByte1=0, passwordByte2=0, repeat=2, delayTime=75 ] {
|
||||||
Thing rgbwwLed myRGB [ zone="4" ]
|
Thing whiteLed myWhite [ zone="0" ]
|
||||||
Thing rgbLed myOldRGB [ zone="1" ]
|
Thing rgbwwLed myRGB [ zone="4" ]
|
||||||
}
|
Thing rgbLed myOldRGB [ zone="1" ]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
The Thing configuration for the bridge uses the following syntax
|
The Thing configuration for the bridge uses the following syntax
|
||||||
|
|
||||||
* Bridge milight:bridgeV3:<any name> host="<IP-Address of bridge>", bridgeid="<mac>"
|
- 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:bridgeV6:<any name> host="<IP-Address of bridge>", bridgeid="<mac>", passwordByte1="<0-255>", passwordByte2="<0-255>"
|
||||||
|
|
||||||
Optionally, the following parameters can be added
|
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.
|
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.
|
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:
|
The Thing configuration for the bulbs uses the following syntax:
|
||||||
Thing <type of bulb> <any name> zone="<0-4>"
|
Thing <type of bulb> <any name> zone="<0-4>"
|
||||||
|
|
||||||
The following bulb types are valid for configuration:
|
The following bulb types are valid for configuration:
|
||||||
|
|
||||||
* rgbv2Led: The very first available bulb. Not very common anymore.
|
- rgbv2Led: The very first available bulb. Not very common anymore.
|
||||||
* whiteLed: The dual white bulbs (with cold/warm white) used with v3-v5 bridges.
|
- 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).
|
- 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.
|
- 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.
|
- 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.
|
- 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).
|
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.
|
Future bridges may support more zones.
|
||||||
|
@ -76,76 +77,84 @@ Future bridges may support more zones.
|
||||||
|
|
||||||
For dual white bulbs these channels are supported:
|
For dual white bulbs these channels are supported:
|
||||||
|
|
||||||
ledbrightness Controls the brightness of your bulbs
|
```text
|
||||||
ledtemperature Changes from cold white to warm white and vice versa
|
ledbrightness Controls the brightness of your bulbs
|
||||||
lednightmode Dims your bulbs to a very low level to use them as a night light
|
ledtemperature Changes from cold white to warm white and vice versa
|
||||||
animation_mode_relative Changes the animation mode. Use an IncreaseDecrease type of widget
|
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:
|
For rgbv2Led bulbs these channels are supported:
|
||||||
|
|
||||||
ledbrightness Controls the brightness of your bulbs
|
```text
|
||||||
ledcolor Changes the color and brightness of your rgb bulbs when bound to a colorpicker
|
ledbrightness Controls the brightness of your bulbs
|
||||||
or just the brightness if bound to a Dimmer or controls On/Off if bound to a switch.
|
ledcolor Changes the color and brightness of your rgb bulbs when bound to a colorpicker
|
||||||
animation_mode_relative Changes the animation mode. Use an IncreaseDecrease type of widget
|
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:
|
For rgbLed bulbs these channels are supported:
|
||||||
|
|
||||||
lednightmode Dims your bulbs to a very low level to use them as a night light
|
```text
|
||||||
ledwhitemode Disable all color (saturation is 0)
|
lednightmode Dims your bulbs to a very low level to use them as a night light
|
||||||
ledbrightness Controls the brightness of your bulbs
|
ledwhitemode Disable all color (saturation is 0)
|
||||||
ledcolor Changes the color and brightness of your rgb bulbs when bound to a colorpicker
|
ledbrightness Controls the brightness of your bulbs
|
||||||
or just the brightness if bound to a Dimmer or controls On/Off if bound to a switch
|
ledcolor Changes the color and brightness of your rgb bulbs when bound to a colorpicker
|
||||||
animation_mode_relative Changes the animation mode. Use an IncreaseDecrease type of widget
|
or just the brightness if bound to a Dimmer or controls On/Off if bound to a switch
|
||||||
animation_speed_relative Changes the speed of your chosen animation mode
|
animation_mode_relative Changes the animation mode. Use an IncreaseDecrease type of widget
|
||||||
|
animation_speed_relative Changes the speed of your chosen animation mode
|
||||||
|
```
|
||||||
|
|
||||||
For rgbwLed/rgbwwLed bulbs these channels are supported:
|
For rgbwLed/rgbwwLed bulbs these channels are supported:
|
||||||
|
|
||||||
lednightmode Dims your bulbs to a very low level to use them as a night light
|
```text
|
||||||
ledwhitemode Disable all color (saturation is 0)
|
lednightmode Dims your bulbs to a very low level to use them as a night light
|
||||||
ledbrightness Controls the brightness of your bulbs
|
ledwhitemode Disable all color (saturation is 0)
|
||||||
ledsaturation Controls the saturation of your bulbs (not for rgbwLed!)
|
ledbrightness Controls the brightness of your bulbs
|
||||||
ledtemperature Changes from cold white to warm white and vice versa (not for rgbwLed!)
|
ledsaturation Controls the saturation of your bulbs (not for rgbwLed!)
|
||||||
ledcolor Changes the color and brightness of your rgb bulbs when bound to a colorpicker
|
ledtemperature Changes from cold white to warm white and vice versa (not for rgbwLed!)
|
||||||
or just the brightness if bound to a Dimmer or controls On/Off if bound to a switch
|
ledcolor Changes the color and brightness of your rgb bulbs when bound to a colorpicker
|
||||||
animation_mode Changes the animation mode. Chose between animation mode 1 to 9
|
or just the brightness if bound to a Dimmer or controls On/Off if bound to a switch
|
||||||
animation_mode_relative Changes the animation mode. Use an IncreaseDecrease type of widget
|
animation_mode Changes the animation mode. Chose between animation mode 1 to 9
|
||||||
animation_speed_relative Changes the speed of your chosen animation mode
|
animation_mode_relative Changes the animation mode. Use an IncreaseDecrease type of widget
|
||||||
ledlink Sync bulb to this zone within 3 seconds of light bulb socket power on
|
animation_speed_relative Changes the speed of your chosen animation mode
|
||||||
ledunlink Clear bulb from this zone within 3 seconds of light bulb socket power on
|
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:
|
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
|
## Example
|
||||||
|
|
||||||
.items
|
.items
|
||||||
|
|
||||||
```
|
```java
|
||||||
Switch Light_Groundfloor {channel="milight:whiteLed:ACCF23A6C0B4:0:ledbrightness"} //Switch for all white bulbs
|
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_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 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
|
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
|
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.
|
# 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:
|
//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:
|
//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 AnimationMode {channel="milight:rgbLed:ACCF23A6C0B4:5:animation_mode_relative", autoupdate="false"}
|
||||||
Dimmer AnimationSpeed {channel="milight:rgbLed:ACCF23A6C0B4:5:animation_speed", 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.
|
//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
|
.sitemap
|
||||||
|
|
||||||
```
|
```perl
|
||||||
Switch item=AnimationMode mappings=[DECREASE='-', INCREASE='+']
|
Switch item=AnimationMode mappings=[DECREASE='-', INCREASE='+']
|
||||||
Switch item=AnimationSpeed mappings=[DECREASE='-', INCREASE='+']
|
Switch item=AnimationSpeed mappings=[DECREASE='-', INCREASE='+']
|
||||||
Switch item=Light_GroundfloorN mappings=[ON='Night Mode']
|
Switch item=Light_GroundfloorN mappings=[ON='Night Mode']
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
# Millheat Binding
|
# 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
|
## Supported Things
|
||||||
|
|
||||||
This binding supports all Wi-Fi enabled heaters as well as the Wi-Fi socket.
|
This binding supports all Wi-Fi enabled heaters as well as the Wi-Fi socket.
|
||||||
|
|
||||||
* `account` = Mill Heating API - the account bridge
|
- `account` = Mill Heating API - the account bridge
|
||||||
* `heater` = Panel/standalone heater
|
- `heater` = Panel/standalone heater
|
||||||
* `room` = A room defined in the mobile app
|
- `room` = A room defined in the mobile app
|
||||||
* `home` = A home defined in the mobile app
|
- `home` = A home defined in the mobile app
|
||||||
|
|
||||||
## Discovery
|
## Discovery
|
||||||
|
|
||||||
|
@ -23,25 +23,25 @@ See full example below for how to configure using thing files.
|
||||||
|
|
||||||
### Account
|
### Account
|
||||||
|
|
||||||
* `username` = email address used in app
|
- `username` = email address used in app
|
||||||
* `password` = password used in app
|
- `password` = password used in app
|
||||||
* `refreshInterval` = number of seconds between refresh calls to the server
|
- `refreshInterval` = number of seconds between refresh calls to the server
|
||||||
|
|
||||||
### Home
|
### 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
|
### 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
|
### 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.
|
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.
|
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.
|
Used to provide data for the currentPower channel.
|
||||||
|
|
||||||
Either `macAddres` or `heaterId` must be specified.
|
Either `macAddres` or `heaterId` must be specified.
|
||||||
|
@ -88,7 +88,7 @@ Either `macAddres` or `heaterId` must be specified.
|
||||||
|
|
||||||
millheat.things:
|
millheat.things:
|
||||||
|
|
||||||
```
|
```java
|
||||||
Bridge millheat:account:home "Millheat account" [username="email@address.com",password="topsecret"] {
|
Bridge millheat:account:home "Millheat account" [username="email@address.com",password="topsecret"] {
|
||||||
Thing home monaco "Penthouse Monaco" [ homeId=100000000000000 ] // Note: numeric value
|
Thing home monaco "Penthouse Monaco" [ homeId=100000000000000 ] // Note: numeric value
|
||||||
Thing room office "Office room" [ roomId=200000000000000 ] 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:
|
millheat.items:
|
||||||
|
|
||||||
```
|
```java
|
||||||
// Items connected to HOME channels
|
// Items connected to HOME channels
|
||||||
Number:Temperature Vacation_Target_Temperature "Vacation target temp [%d %unit%]" <temperature> {channel="millheat:home:home:monaco:vacationModeTargetTemperature"}
|
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"}
|
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:
|
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 start time (DateTime) on `DateTime` item linked to channel type `vacationModeStart`
|
||||||
* Set end time (DateTime) on `DateTime` item linked to channel type `vacationModeEnd`
|
- Set end time (DateTime) on `DateTime` item linked to channel type `vacationModeEnd`
|
||||||
* Activate vacation mode on `Switch` item linked to channel type `vacationMode`
|
- Activate vacation mode on `Switch` item linked to channel type `vacationMode`
|
||||||
* Optional - set advanced vacation mode on `Switch` item linked to channel type `vacationModeAdvanced`
|
- Optional - set advanced vacation mode on `Switch` item linked to channel type `vacationModeAdvanced`
|
||||||
|
|
|
@ -35,7 +35,6 @@ Depending on the thing type, different channels are provided:
|
||||||
| players | Number | The number of players on server |
|
| players | Number | The number of players on server |
|
||||||
| maxPlayers | Number | The maximum number of players on server |
|
| maxPlayers | Number | The maximum number of players on server |
|
||||||
|
|
||||||
|
|
||||||
### Player
|
### Player
|
||||||
|
|
||||||
| Channel Type ID | Item Type | Description |
|
| Channel Type ID | Item Type | Description |
|
||||||
|
@ -50,14 +49,12 @@ Depending on the thing type, different channels are provided:
|
||||||
| playerLocation | Location | The player location |
|
| playerLocation | Location | The player location |
|
||||||
| playerGameMode | Number | The players game mode |
|
| playerGameMode | Number | The players game mode |
|
||||||
|
|
||||||
|
|
||||||
### Sign
|
### Sign
|
||||||
|
|
||||||
| Channel Type ID | Item Type | Description |
|
| Channel Type ID | Item Type | Description |
|
||||||
|-----------------|-----------|----------------------------------------------|
|
|-----------------|-----------|----------------------------------------------|
|
||||||
| signActive | Switch | Does the sign have powered redstone below it |
|
| signActive | Switch | Does the sign have powered redstone below it |
|
||||||
|
|
||||||
|
|
||||||
#### Active switch (Controllable from openHAB)
|
#### 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>
|
<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
|
### Example Thing Definition
|
||||||
|
|
||||||
The easiest method to add Minecraft servers, players, and signs is use the automatic discovery.
|
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).
|
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 ] {
|
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 my_name "My Minecraft User" @ "Minecraft" [ playerName="minecraft_username" ]
|
||||||
Thing player friends_name "My Friend's Minecraft User" @ "Minecraft" [ playerName="friends_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
Loading…
Reference in New Issue