Updated external content (Jenkins build 2303)

pull/2380/head
openHAB Build Server 2024-09-17 20:36:32 +00:00
parent 2b0c2d4d90
commit 77316d0c07
14 changed files with 320 additions and 136 deletions

View File

@ -3,7 +3,7 @@ id: groovyscripting
label: Groovy Scripting label: Groovy Scripting
title: Groovy Scripting - Automation title: Groovy Scripting - Automation
type: automation type: automation
description: "This add-on provides support for [Groovy](https://groovy-lang.org/) 4.0.22 that can be used as a scripting language within automation rules and which eliminates the need to manually install Groovy." description: "This add-on provides support for [Groovy](https://groovy-lang.org/) 4.0.23 that can be used as a scripting language within automation rules and which eliminates the need to manually install Groovy."
since: 3x since: 3x
logo: images/addons/groovyscripting.svg logo: images/addons/groovyscripting.svg
install: auto install: auto
@ -15,7 +15,7 @@ install: auto
# Groovy Scripting # Groovy Scripting
This add-on provides support for [Groovy](https://groovy-lang.org/) 4.0.22 that can be used as a scripting language within automation rules and which eliminates the need to manually install Groovy. This add-on provides support for [Groovy](https://groovy-lang.org/) 4.0.23 that can be used as a scripting language within automation rules and which eliminates the need to manually install Groovy.
## Creating Groovy Scripts ## Creating Groovy Scripts

View File

@ -487,6 +487,9 @@ Calling `Item.persistence` returns an `ItemPersistence` object with the followin
- .minimumSince(timestamp, serviceId) ⇒ `PersistedItem | null` - .minimumSince(timestamp, serviceId) ⇒ `PersistedItem | null`
- .minimumUntil(timestamp, serviceId) ⇒ `PersistedItem | null` - .minimumUntil(timestamp, serviceId) ⇒ `PersistedItem | null`
- .minimumBetween(begin, end, serviceId) ⇒ `PersistedItem | null` - .minimumBetween(begin, end, serviceId) ⇒ `PersistedItem | null`
- .medianSince(timestamp, serviceId) ⇒ `PersistedState | null`
- .medianUntil(timestamp, serviceId) ⇒ `PersistedState | null`
- .medianBetween(begin, end, serviceId) ⇒ `PersistedState | null`
- .persist(serviceId): Tells the persistence service to store the current Item state, which is then done asynchronously. - .persist(serviceId): Tells the persistence service to store the current Item state, which is then done asynchronously.
**Warning:** This has the side effect, that if the Item state changes shortly after `.persist` has been called, the new Item state will be persisted. See [JSDoc](https://openhab.github.io/openhab-js/items.ItemPersistence.html#persist) for a possible work-around. **Warning:** This has the side effect, that if the Item state changes shortly after `.persist` has been called, the new Item state will be persisted. See [JSDoc](https://openhab.github.io/openhab-js/items.ItemPersistence.html#persist) for a possible work-around.
- .persist(timestamp, state, serviceId): Tells the persistence service to store the given state at the given timestamp, which is then done asynchronously. - .persist(timestamp, state, serviceId): Tells the persistence service to store the given state at the given timestamp, which is then done asynchronously.
@ -764,11 +767,13 @@ There are three different types of notifications:
In addition to that, notifications can be updated later be re-using the same `referenceId` and hidden/removed either by `referenceId` or `tag`. In addition to that, notifications can be updated later be re-using the same `referenceId` and hidden/removed either by `referenceId` or `tag`.
To send these three types of notifications, use the `notificationBuilder(message)` method of the `actions` namespace. To send these three types of notifications, use the `notificationBuilder(message)` method of the `actions` namespace.
`message` is optional and may be omitted.
It returns a new `NotificationBuilder` object, which by default sends a broadcast notification and provides the following methods: It returns a new `NotificationBuilder` object, which by default sends a broadcast notification and provides the following methods:
- `.logOnly()`: Send a log notification only. - `.logOnly()`: Send a log notification only.
- `.hide()`: Hides notifications with the specified `referenceId` or `tag`. - `.hide()`: Hides notification(s) with the specified `referenceId` or `tag` (`referenceId` has precedence over `tag`).
- `.addUserId(emailAddress)`: By adding the email address(es) of specific openHAB Cloud user(s), the notification is only sent to this (these) user(s). - `.addUserId(emailAddress)`: By adding the email address(es) of specific openHAB Cloud user(s), the notification is only sent to this (these) user(s).
To add multiple users, either call `addUserId` multiple times or pass mutiple emails as multiple params, e.g. `addUserId(emailAddress1, emailAddress2)`.
- `.withIcon(icon)`: Sets the icon of the notification. - `.withIcon(icon)`: Sets the icon of the notification.
- `.withTag(tag)`: Sets the tag of the notification. Used for grouping notifications and to hide/remove groups of notifications. - `.withTag(tag)`: Sets the tag of the notification. Used for grouping notifications and to hide/remove groups of notifications.
- `.withTitle(title)`: Sets the title of the notification. - `.withTitle(title)`: Sets the title of the notification.
@ -1239,7 +1244,7 @@ Operations and conditions can also optionally take functions:
```javascript ```javascript
rules.when().item("F1_light").changed().then(event => { rules.when().item("F1_light").changed().then(event => {
console.log(event); console.log(event);
}).build("Test Rule", "My Test Rule"); }).build("Test Rule", "My Test Rule");
``` ```
@ -1303,6 +1308,8 @@ Additionally, all the above triggers have the following functions:
- `if(optionalFunction)` - `if(optionalFunction)`
- `.stateOfItem(itemName)` - `.stateOfItem(itemName)`
- `is(state)` - `is(state)`
- `isOn()`
- `isOff()`
- `in(state...)` - `in(state...)`
#### Rule Builder Operations #### Rule Builder Operations
@ -1383,6 +1390,8 @@ This table gives an overview over the `event` object:
| `thingUID` | `Thing****Trigger` | UID of Thing that triggered event | N/A | | `thingUID` | `Thing****Trigger` | UID of Thing that triggered event | N/A |
| `cronExpression` | `GenericCronTrigger` | Cron expression of the trigger | N/A | | `cronExpression` | `GenericCronTrigger` | Cron expression of the trigger | N/A |
| `time` | `TimeOfDayTrigger` | Time of day value of the trigger | N/A | | `time` | `TimeOfDayTrigger` | Time of day value of the trigger | N/A |
| `timeOnly` | `DateTimeTrigger` | Whether the trigger only considers the time part of the DateTime Item | N/A |
| `offset` | `DateTimeTrigger` | Offset in seconds added to the time of the DateTime Item | N/A |
| `eventType` | all except `PWMTrigger`, `PIDTrigger` | Type of event that triggered event (change, command, triggered, update, time) | N/A | | `eventType` | all except `PWMTrigger`, `PIDTrigger` | Type of event that triggered event (change, command, triggered, update, time) | N/A |
| `triggerType` | all except `PWMTrigger`, `PIDTrigger` | Type of trigger that triggered event | N/A | | `triggerType` | all except `PWMTrigger`, `PIDTrigger` | Type of trigger that triggered event | N/A |
| `eventClass` | all | Java class name of the triggering event | N/A | | `eventClass` | all | Java class name of the triggering event | N/A |
@ -1453,76 +1462,24 @@ If you want to get some advanced information, you can read [this blog post](http
### @runtime ### @runtime
One can access many useful utilities and types using `require("@runtime")`, e.g. In most cases, the [Standard Library](#standard-library) provides pure-JS APIs to interact with the openHAB runtime.
Generally speaking, you should therefore prefer to use [Standard Library](#standard-library) provided by this library instead.
However, in some cases, e.g. when needing a [`HSBType`](https://www.openhab.org/javadoc/latest/org/openhab/core/library/types/hsbtype), one needs to access raw Java utilities and types.
This can be achieved by using `require('@runtime')`, e.g.
```javascript ```javascript
var { ON, OFF, QuantityType } = require("@runtime"); var { ON, OFF, QuantityType } = require('@runtime');
// Alternative, more verbose way to achieve the same: // Alternative, more verbose way to achieve the same:
// //
// var runtime = require("@runtime"); // var runtime = require('@runtime');
// //
// var ON = runtime.ON; // var ON = runtime.ON;
// var OFF = runtime.OFF; // var OFF = runtime.OFF;
// var QuantityType = runtime.QuantityType; // var QuantityType = runtime.QuantityType;
``` ```
| Variable | Description | A list of available utilities and types can be found in the [JSR223 Default Preset documentation](https://www.openhab.org/docs/configuration/jsr223.html#default-preset-importpreset-not-required).
|-------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------|
| `State` | [`org.openhab.core.types.State`](https://www.openhab.org/javadoc/latest/org/openhab/core/types/state) |
| `Command` | [`org.openhab.core.types.Command`](https://www.openhab.org/javadoc/latest/org/openhab/core/types/command) |
| `URLEncoder` | [`java.net.URLEncoder`](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/net/URLEncoder.html) |
| `File` | [`java.io.File`](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/File.html) |
| `Files` | [`java.nio.file.Files`](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/file/Files.html) |
| `Path` | [`java.nio.file.Path`](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/file/Path.html) |
| `Paths` | [`java.nio.file.Paths`](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/file/Paths.html) |
| `IncreaseDecreaseType` | [`org.openhab.core.library.types.IncreaseDecreaseType`](https://www.openhab.org/javadoc/latest/org/openhab/core/library/types/increasedecreasetype) |
| `DECREASE` | `IncreaseDecreaseType` enum item |
| `INCREASE` | `IncreaseDecreaseType` enum item |
| `OnOffType` | [`org.openhab.core.library.types.OnOffType`](https://www.openhab.org/javadoc/latest/org/openhab/core/library/types/onofftype) |
| `ON` | `OnOffType` enum item |
| `OFF` | `OnOffType` enum item |
| `OpenClosedType` | [`org.openhab.core.library.types.OpenClosedType`](https://www.openhab.org/javadoc/latest/org/openhab/core/library/types/openclosedtype) |
| `OPEN` | `OpenClosedType` enum item |
| `CLOSED` | `OpenClosedType` enum item |
| `StopMoveType` | [`org.openhab.core.library.types.StopMoveType`](https://www.openhab.org/javadoc/latest/org/openhab/core/library/types/stopmovetype) |
| `STOP` | `StopMoveType` enum item |
| `MOVE` | `StopMoveType` enum item |
| `UpDownType` | [`org.openhab.core.library.types.UpDownType`](https://www.openhab.org/javadoc/latest/org/openhab/core/library/types/updowntype) |
| `UP` | `UpDownType` enum item |
| `DOWN` | `UpDownType` enum item |
| `UnDefType` | [`org.openhab.core.library.types.UnDefType`](https://www.openhab.org/javadoc/latest/org/openhab/core/types/undeftype) |
| `NULL` | `UnDefType` enum item |
| `UNDEF` | `UnDefType` enum item |
| `RefreshType` | [`org.openhab.core.library.types.RefreshType`](https://www.openhab.org/javadoc/latest/org/openhab/core/types/refreshtype) |
| `REFRESH` | `RefreshType` enum item |
| `NextPreviousType` | [`org.openhab.core.library.types.NextPreviusType`](https://www.openhab.org/javadoc/latest/org/openhab/core/library/types/nextprevioustype) |
| `NEXT` | `NextPreviousType` enum item |
| `PREVIOUS` | `NextPreviousType` enum item |
| `PlayPauseType` | [`org.openhab.core.library.types.PlayPauseType`](https://www.openhab.org/javadoc/latest/org/openhab/core/library/types/playpausetype) |
| `PLAY` | `PlayPauseType` enum item |
| `PAUSE` | `PlayPauseType` enum item |
| `RewindFastforwardType` | [`org.openhab.core.library.types.RewindFastforwardType`](https://www.openhab.org/javadoc/latest/org/openhab/core/library/types/rewindfastforwardtype) |
| `REWIND` | `RewindFastforwardType` enum item |
| `FASTFORWARD` | `RewindFastforwardType` enum item |
| `QuantityType` | [`org.openhab.core.library.types.QuantityType`](https://www.openhab.org/javadoc/latest/org/openhab/core/library/types/quantitytype) |
| `StringListType` | [`org.openhab.core.library.types.StringListType`](https://www.openhab.org/javadoc/latest/org/openhab/core/library/types/stringlisttype) |
| `RawType` | [`org.openhab.core.library.types.RawType`](https://www.openhab.org/javadoc/latest/org/openhab/core/library/types/rawtype) |
| `DateTimeType` | [`org.openhab.core.library.types.DateTimeType`](https://www.openhab.org/javadoc/latest/org/openhab/core/library/types/datetimetype) |
| `DecimalType` | [`org.openhab.core.library.types.DecimalType`](https://www.openhab.org/javadoc/latest/org/openhab/core/library/types/decimaltype) |
| `HSBType` | [`org.openhab.core.library.types.HSBType`](https://www.openhab.org/javadoc/latest/org/openhab/core/library/types/hsbtype) |
| `PercentType` | [`org.openhab.core.library.types.PercentType`](https://www.openhab.org/javadoc/latest/org/openhab/core/library/types/percenttype) |
| `PointType` | [`org.openhab.core.library.types.PointType`](https://www.openhab.org/javadoc/latest/org/openhab/core/library/types/pointtype) |
| `StringType` | [`org.openhab.core.library.types.StringType`](https://www.openhab.org/javadoc/latest/org/openhab/core/library/types/stringtype) |
| `SIUnits` | [`org.openhab.core.library.unit.SIUnits`](https://www.openhab.org/javadoc/latest/org/openhab/core/library/unit/siunits) |
| `ImperialUnits` | [`org.openhab.core.library.unit.ImperialUnits`](https://www.openhab.org/javadoc/latest/org/openhab/core/library/unit/imperialunits) |
| `MetricPrefix` | [`org.openhab.core.library.unit.MetricPrefix`](https://www.openhab.org/javadoc/latest/org/openhab/core/library/unit/metricprefix) |
| `Units` | [`org.openhab.core.library.unit.Units`](https://www.openhab.org/javadoc/latest/org/openhab/core/library/unit/units) |
| `BinaryPrefix` | [`org.openhab.core.library.unit.BinaryPrefix`](https://www.openhab.org/javadoc/latest/org/openhab/core/library/unit/binaryprefix) |
| `ChronoUnit` | [`java.time.temporal.ChronoUnit`](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/temporal/ChronoUnit.html) |
| `Duration` | [`java.time.Duration`](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/Duration.html) |
| `ZoneId` | [`java.time.ZoneId`](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/ZoneId.html) |
| `ZonedDateTime` | [`java.time.ZonedDateTime`](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/ZonedDateTime.html) |
`require("@runtime")` also defines "services" such as `items`, `things`, `rules`, `events`, `actions`, `ir`, `itemRegistry`. `require('@runtime')` also defines "services" such as `items`, `things`, `rules`, `events`, `actions`, `ir`, `itemRegistry`.
You can use these services for backwards compatibility purposes or ease migration from JSR223 scripts. You can use these services for backwards compatibility purposes or ease migration from JSR223 scripts.
Generally speaking, you should prefer to use [Standard Library](#standard-library) provided by this library instead.

View File

@ -5,7 +5,7 @@ title: FENECON - Bindings
type: binding type: binding
description: "The FENECON Binding integrates the [FENECON energy storage system](https://fenecon.de/) device into the openHAB system via [REST-API](https://docs.fenecon.de/_/de/fems/fems-app/OEM_App_REST_JSON.html)." description: "The FENECON Binding integrates the [FENECON energy storage system](https://fenecon.de/) device into the openHAB system via [REST-API](https://docs.fenecon.de/_/de/fems/fems-app/OEM_App_REST_JSON.html)."
since: 3x since: 3x
install: manual install: auto
--- ---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository --> <!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->

View File

@ -5,7 +5,7 @@ title: Flume - Bindings
type: binding type: binding
description: "This binding will interface with the cloud API to retrieve water usage from your [Flume](https://flumewater.com/) water monitor." description: "This binding will interface with the cloud API to retrieve water usage from your [Flume](https://flumewater.com/) water monitor."
since: 3x since: 3x
install: manual install: auto
--- ---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository --> <!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->

View File

@ -86,6 +86,7 @@ The following channels are available:
| ui#title_num | Number | The current movie title number that is playing | | ui#title_num | Number | The current movie title number that is playing |
| ui#title_length | Number:Time | The total running time of the currently playing movie (seconds) | | ui#title_length | Number:Time | The total running time of the currently playing movie (seconds) |
| ui#title_loc | Number:Time | The running time elapsed of the currently playing movie (seconds) | | ui#title_loc | Number:Time | The running time elapsed of the currently playing movie (seconds) |
| ui#endtime | DateTime | The date/time when the currently playing movie will end (timestamp) |
| ui#chapter_num | Number | The current chapter number of the movie that is playing | | ui#chapter_num | Number | The current chapter number of the movie that is playing |
| ui#chapter_length | Number:Time | The total running time of the current chapter (seconds) | | ui#chapter_length | Number:Time | The total running time of the current chapter (seconds) |
| ui#chapter_loc | Number:Time | The running time elapsed of the current chapter | | ui#chapter_loc | Number:Time | The running time elapsed of the current chapter |
@ -120,6 +121,7 @@ The following channels are available:
| music#track | String | The name of the currently playing track | | music#track | String | The name of the currently playing track |
| music#artist | String | The name of the currently playing artist | | music#artist | String | The name of the currently playing artist |
| music#album | String | The name of the currently playing album | | music#album | String | The name of the currently playing album |
| music#title | String | The raw output from the MUSIC_TITLE api response for use in rules that require track, artist and album changes in one update |
| music#play_mode | String | The current playback mode of the music | | music#play_mode | String | The current playback mode of the music |
| music#play_speed | String | The speed of playback scanning | | music#play_speed | String | The speed of playback scanning |
| music#track_length | Number:Time | The total running time of the current playing track (seconds) | | music#track_length | Number:Time | The total running time of the current playing track (seconds) |
@ -177,6 +179,7 @@ String z1_Ui_PlaySpeed "Play Speed: [%s]" { channel="kaleidescape:player:myzone1
Number z1_Ui_TitleNum "Title Number: [%s]" { channel="kaleidescape:player:myzone1:ui#title_num" } Number z1_Ui_TitleNum "Title Number: [%s]" { channel="kaleidescape:player:myzone1:ui#title_num" }
Number:Time z1_Ui_TitleLength "Title Length: [JS(ksecondsformat.js):%s]" { channel="kaleidescape:player:myzone1:ui#title_length" } Number:Time z1_Ui_TitleLength "Title Length: [JS(ksecondsformat.js):%s]" { channel="kaleidescape:player:myzone1:ui#title_length" }
Number:Time z1_Ui_TitleLoc "Title Location: [JS(ksecondsformat.js):%s]" { channel="kaleidescape:player:myzone1:ui#title_loc" } Number:Time z1_Ui_TitleLoc "Title Location: [JS(ksecondsformat.js):%s]" { channel="kaleidescape:player:myzone1:ui#title_loc" }
DateTime z1_Ui_TitleEndTime "Title End Time: [%s]" { channel="kaleidescape:player:myzone1:ui#endtime" }
Number z1_Ui_ChapterNum "Chapter Number: [%s]" { channel="kaleidescape:player:myzone1:ui#chapter_num" } Number z1_Ui_ChapterNum "Chapter Number: [%s]" { channel="kaleidescape:player:myzone1:ui#chapter_num" }
Number:Time z1_Ui_ChapterLength "Chapter Length: [JS(ksecondsformat.js):%s]" { channel="kaleidescape:player:myzone1:ui#chapter_length" } Number:Time z1_Ui_ChapterLength "Chapter Length: [JS(ksecondsformat.js):%s]" { channel="kaleidescape:player:myzone1:ui#chapter_length" }
Number:Time z1_Ui_ChapterLoc "Chapter Location: [JS(ksecondsformat.js):%s]" { channel="kaleidescape:player:myzone1:ui#chapter_loc" } Number:Time z1_Ui_ChapterLoc "Chapter Location: [JS(ksecondsformat.js):%s]" { channel="kaleidescape:player:myzone1:ui#chapter_loc" }
@ -218,6 +221,7 @@ String z1_Music_PlaySpeed "Play Speed: [%s]" { channel="kaleidescape:player:myzo
Number:Time z1_Music_TrackLength "Track Length: [JS(ksecondsformat.js):%s]" { channel="kaleidescape:player:myzone1:music#track_length" } Number:Time z1_Music_TrackLength "Track Length: [JS(ksecondsformat.js):%s]" { channel="kaleidescape:player:myzone1:music#track_length" }
Number:Time z1_Music_TrackPosition "Track Position: [JS(ksecondsformat.js):%s]" { channel="kaleidescape:player:myzone1:music#track_position" } Number:Time z1_Music_TrackPosition "Track Position: [JS(ksecondsformat.js):%s]" { channel="kaleidescape:player:myzone1:music#track_position" }
Number z1_Music_TrackProgress "Track Progress: [%s %%]" { channel="kaleidescape:player:myzone1:music#track_progress" } Number z1_Music_TrackProgress "Track Progress: [%s %%]" { channel="kaleidescape:player:myzone1:music#track_progress" }
String z1_Music_Title "Music Title Raw: [%s]" { channel="kaleidescape:player:myzone1:music#title" }
String z1_Music_TrackHandle "Track Handle: [%s]" { channel="kaleidescape:player:myzone1:music#track_handle" } String z1_Music_TrackHandle "Track Handle: [%s]" { channel="kaleidescape:player:myzone1:music#track_handle" }
String z1_Music_AlbumHandle "Album Handle: [%s]" { channel="kaleidescape:player:myzone1:music#album_handle" } String z1_Music_AlbumHandle "Album Handle: [%s]" { channel="kaleidescape:player:myzone1:music#album_handle" }
String z1_Music_NowplayHandle "Now Playing Handle: [%s]" { channel="kaleidescape:player:myzone1:music#nowplay_handle" } String z1_Music_NowplayHandle "Now Playing Handle: [%s]" { channel="kaleidescape:player:myzone1:music#nowplay_handle" }
@ -306,6 +310,7 @@ sitemap kaleidescape label="Kaleidescape" {
Text item=z1_Ui_TitleNum icon="video" Text item=z1_Ui_TitleNum icon="video"
Text item=z1_Ui_TitleLength icon="time" Text item=z1_Ui_TitleLength icon="time"
Text item=z1_Ui_TitleLoc icon="time" Text item=z1_Ui_TitleLoc icon="time"
Text item=z1_Ui_TitleEndTime icon="time"
Text item=z1_Ui_MovieMediaType icon="colorwheel" Text item=z1_Ui_MovieMediaType icon="colorwheel"
Text item=z1_Ui_ChapterNum icon="video" Text item=z1_Ui_ChapterNum icon="video"
Text item=z1_Ui_ChapterLength icon="time" Text item=z1_Ui_ChapterLength icon="time"
@ -349,6 +354,7 @@ sitemap kaleidescape label="Kaleidescape" {
Text item=z1_Music_TrackLength icon="time" Text item=z1_Music_TrackLength icon="time"
Text item=z1_Music_TrackPosition icon="time" Text item=z1_Music_TrackPosition icon="time"
Text item=z1_Music_TrackProgress icon="time" Text item=z1_Music_TrackProgress icon="time"
Text item=z1_Music_Title icon="zoom"
Text item=z1_Music_TrackHandle icon="zoom" Text item=z1_Music_TrackHandle icon="zoom"
Text item=z1_Music_AlbumHandle icon="zoom" Text item=z1_Music_AlbumHandle icon="zoom"
Text item=z1_Music_NowplayHandle icon="zoom" Text item=z1_Music_NowplayHandle icon="zoom"

View File

@ -65,35 +65,40 @@ as multicast traffic is typically not forwarded.
The IP Gateway is the most commonly used way to connect to the KNX bus. 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: At its base, the _ip_ bridge accepts the following configuration parameters:
| Name | Required | Description | Default value | | Name | Required | Description | Default value |
|---------------------|--------------|--------------------------------------------------------------------------------------------------------------|------------------------------------------------------| |---------------------|--------------|----------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------|
| type | Yes | The IP connection type for connecting to the KNX bus (`TUNNEL`, `ROUTER`, `SECURETUNNEL` or `SECUREROUTER`) | - | | type | Yes | The IP connection type for connecting to the KNX bus (`TUNNEL`, `ROUTER`, `SECURETUNNEL` or `SECUREROUTER`) | - |
| ipAddress | for `TUNNEL` | Network address of the KNX/IP gateway. If type `ROUTER` is set, the IPv4 Multicast Address can be set. | for `TUNNEL`: \<nothing\>, for `ROUTER`: 224.0.23.12 | | ipAddress | for `TUNNEL` | Network address of the KNX/IP gateway. If type `ROUTER` is set, the IPv4 Multicast Address can be set. | for `TUNNEL`: \<nothing\>, for `ROUTER`: 224.0.23.12 |
| portNumber | for `TUNNEL` | Port number of the KNX/IP gateway | 3671 | | portNumber | for `TUNNEL` | Port number of the KNX/IP gateway | 3671 |
| localIp | No | Network address of the local host to be used to set up the connection to the KNX/IP gateway | the system-wide configured primary interface address | | localIp | No | Network address of the local host to be used to set up the connection to the KNX/IP gateway | the system-wide configured primary interface address |
| localSourceAddr | No | The (virtual) individual address for identification of this openHAB Thing within the KNX bus <br/><br/>Note: Use a free address, not the one of the interface. Or leave it at `0.0.0` and let openHAB decide which address to use. When using knxd, make sure _not to use_ one of the addresses reserved for tunneling clients. | 0.0.0 | | localSourceAddr | No | The (virtual) individual address for identification of this openHAB Thing within the KNX bus <br/><br/>Note: Use a free address, not the one of the interface. Or leave it at `0.0.0` and let openHAB decide which address to use.<br/>When using knxd, make sure _not to use_ one of the addresses reserved for tunneling clients. | 0.0.0 |
| useNAT | No | Whether there is network address translation between the server and the gateway | false | | useNAT | No | Whether there is network address translation between the server and the gateway | false |
| readingPause | No | Time in milliseconds of how long should be paused between two read requests to the bus during initialization | 50 | | readingPause | No | Time in milliseconds of how long should be paused between two read requests to the bus during initialization | 50 |
| responseTimeout | No | Timeout in seconds to wait for a response from the KNX bus | 10 | | responseTimeout | No | Timeout in seconds to wait for a response from the KNX bus | 10 |
| readRetriesLimit | No | Limits the read retries while initialization from the KNX bus | 3 | | readRetriesLimit | No | Limits the read retries while initialization from the KNX bus | 3 |
| autoReconnectPeriod | No | Seconds between connect retries when KNX link has been lost (0 means never). | 0 | | autoReconnectPeriod | No | Seconds between connect retries when KNX link has been lost (0 means never). | 0 |
| routerBackboneKey | No | KNX secure: Backbone key for secure router mode | - | | routerBackboneKey | No | KNX secure: Backbone key for secure router mode | - |
| tunnelUserId | No | KNX secure: Tunnel user id for secure tunnel mode (if specified, it must be a number >0) | - | | tunnelUserId | No | KNX secure: Tunnel user id for secure tunnel mode (if specified, it must be a number >0) | - |
| 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 | - |
| keyringFile | No | KNX secure: Keyring file exported from ETS and placed in openHAB config/misc folder. Mandatory to decode secure group addresses. | - |
| keyringPassword | No | KNX secure: Keyring file password (set during export from ETS) | - |
| tunnelSourceAddress | No | KNX secure: Physical KNX address of tunnel in secure mode to identify tunnel. If given, openHAB will read tunnelUserId, tunnelUserPassword, tunnelDeviceAuthentication from keyring. | - |
### 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 |
|---------------------|----------|--------------------------------------------------------------------------------------------------------------|---------------| |---------------------|----------|----------------------------------------------------------------------------------------------------------------------------------|---------------|
| serialPort | Y | The serial port to use for connecting to the KNX bus | - | | serialPort | Y | The serial port to use for connecting to the KNX bus | - |
| readingPause | N | Time in milliseconds of how long should be paused between two read requests to the bus during initialization | 50 | | readingPause | N | Time in milliseconds of how long should be paused between two read requests to the bus during initialization | 50 |
| responseTimeout | N | Timeout in seconds to wait for a response from the KNX bus | 10 | | responseTimeout | N | Timeout in seconds to wait for a response from the KNX bus | 10 |
| readRetriesLimit | N | Limits the read retries while initialization from the KNX bus | 3 | | readRetriesLimit | N | Limits the read retries while initialization from the KNX bus | 3 |
| autoReconnectPeriod | N | Seconds between connect retries when KNX link has been lost, 0 means never retry | 0 | | autoReconnectPeriod | N | Seconds between connect retries when KNX link has been lost, 0 means never retry | 0 |
| useCemi | N | Use newer CEMI message format, useful for newer devices like KNX RF sticks, kBerry, etc. | false | | useCemi | N | Use newer CEMI message format, useful for newer devices like KNX RF sticks, kBerry, etc. | false |
| keyringFile | N | KNX secure: Keyring file exported from ETS and placed in openHAB config/misc folder. Mandatory to decode secure group addresses. | - |
| keyringPassword | N | KNX secure: Keyring file password (set during export from ETS) | - |
## Things ## Things
@ -467,16 +472,22 @@ It **requires a KNX Secure Router or a Secure IP Interface** and a KNX installat
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.
There are two possible ways to provide the key to openHAB:
- 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`.
- The backbone key is included in ETS keyring export (ETS, project settings, export keyring). Keyring file is configured using `keyringFile` (put it in `config\misc` folder of the openHAB installation) and also requires `keyringPassword`.
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.
It can be provided to openHAB in two different ways:
- 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`.
`tunnelUserId` is a number that is not directly visible in ETS, but can be looked up in keyring export or deduced (typically 2 for the first tunnel of a device, 3 for the second one, ...). `tunnelUserId` is a number that is not directly visible in ETS, but can be looked up in keyring export or deduced (typically 2 for the first tunnel of a device, 3 for the second one, ...).
`tunnelUserPasswort` is set in ETS in the properties of the tunnel (below the IP interface, you will see the different tunnels listed) and denoted as "Password". `tunnelUserPasswort` is set in ETS in the properties of the tunnel (below the IP interface, you will see the different tunnels listed) and denoted as "Password".
`tunnelDeviceAuthentication` is set in the properties of the IP interface itself; check for the tab "IP" and the description "Authentication Code". `tunnelDeviceAuthentication` is set in the properties of the IP interface itself; check for the tab "IP" and the description "Authentication Code".
- All necessary information is included in ETS keyring export (ETS, project settings, export keyring).
Keyring file is configured using `keyringFile` (put it in `config\misc` folder of the openHAB installation) and `keyringPassword`.
In addition, `tunnelSourceAddress` needs to be set to uniquely identify the tunnel in use.
### KNX Data Secure ### KNX Data Secure
@ -484,7 +495,14 @@ KNX Data Secure protects the content of messages on the KNX bus.
In a KNX installation, both classic and secure group addresses can coexist. In a KNX installation, both classic and secure group addresses can coexist.
Data Secure does _not_ necessarily require a KNX Secure Router or a Secure IP Interface, but a KNX installation with newer KNX devices that support Data Secure and with **security features enabled in the ETS tool**. Data Secure does _not_ necessarily require a KNX Secure Router or a Secure IP Interface, but a KNX installation with newer KNX devices that support Data Secure and with **security features enabled in the ETS tool**.
> NOTE: **openHAB currently ignores messages with secure group addresses.** **openHAB ignores messages with secure group addresses, unless data secure is configured.**
> NOTE: openHAB currently does fully support passive (listening) access to secure group addresses.
Write access to secure group addresses is currently disabled in openHAB.
Initial/periodic read will fail, avoid automatic read (< in thing definition).
All necessary information to decode secure group addresses is included in ETS keyring export (ETS, project settings, export keyring).
Keyring file is configured using `keyringFile` (put it in `config\misc` folder of the openHAB installation) and also requires `keyringPassword`.
## Examples ## Examples

View File

@ -277,6 +277,7 @@ Currently the miio binding supports more than 360 different models.
| MOVA Z500 Robot Vacuum and Mop Cleaner | miio:basic | [dreame.vacuum.p2156o](#dreame-vacuum-p2156o) | Experimental | Experimental support. Please report back if all channels are functional. Preferably share the debug log of property refresh and command responses | | MOVA Z500 Robot Vacuum and Mop Cleaner | miio:basic | [dreame.vacuum.p2156o](#dreame-vacuum-p2156o) | Experimental | Experimental support. Please report back if all channels are functional. Preferably share the debug log of property refresh and command responses |
| MOVA L600 Robot Vacuum and Mop Cleaner | miio:basic | [dreame.vacuum.p2157](#dreame-vacuum-p2157) | Yes | | | MOVA L600 Robot Vacuum and Mop Cleaner | miio:basic | [dreame.vacuum.p2157](#dreame-vacuum-p2157) | Yes | |
| Dreame Bot D9 Max | miio:basic | [dreame.vacuum.p2259](#dreame-vacuum-p2259) | Experimental | Experimental support. Please report back if all channels are functional. Preferably share the debug log of property refresh and command responses | | Dreame Bot D9 Max | miio:basic | [dreame.vacuum.p2259](#dreame-vacuum-p2259) | Experimental | Experimental support. Please report back if all channels are functional. Preferably share the debug log of property refresh and command responses |
| Xiaomi Robot Vacuum X10 | miio:basic | [dreame.vacuum.r2209](#dreame-vacuum-r2209) | Yes | |
| DreameBot L10s Ultra | miio:basic | [dreame.vacuum.r2228o](#dreame-vacuum-r2228o) | Yes | | | DreameBot L10s Ultra | miio:basic | [dreame.vacuum.r2228o](#dreame-vacuum-r2228o) | Yes | |
| HUIZUO ARIES For Bedroom | miio:basic | [huayi.light.ari013](#huayi-light-ari013) | Experimental | Experimental support. Please report back if all channels are functional. Preferably share the debug log of property refresh and command responses | | HUIZUO ARIES For Bedroom | miio:basic | [huayi.light.ari013](#huayi-light-ari013) | Experimental | Experimental support. Please report back if all channels are functional. Preferably share the debug log of property refresh and command responses |
| HUIZUO ARIES For Living Room | miio:basic | [huayi.light.aries](#huayi-light-aries) | Experimental | Experimental support. Please report back if all channels are functional. Preferably share the debug log of property refresh and command responses | | HUIZUO ARIES For Living Room | miio:basic | [huayi.light.aries](#huayi-light-aries) | Experimental | Experimental support. Please report back if all channels are functional. Preferably share the debug log of property refresh and command responses |
@ -1691,6 +1692,59 @@ Note, not all the values need to be in the json file, e.g. a subset of the param
| total_clean_times | Number | Clean Logs - Total Clean Times | | | total_clean_times | Number | Clean Logs - Total Clean Times | |
| total_clean_area | Number | Clean Logs - Total Clean Area | | | total_clean_area | Number | Clean Logs - Total Clean Area | |
### Xiaomi Robot Vacuum X10 (<a name="dreame-vacuum-r2209">dreame.vacuum.r2209</a>) Channels
| Channel | Type | Description | Comment |
|----------------------------|----------------------|------------------------------------------|------------|
| actions | String | Actions | |
| status | Number | Robot Cleaner - Status | Value mapping `["1"="Sweeping","2"="Idle","3"="Paused","4"="Error","5"="Go Charging","6"="Charging","7"="Mopping","11"="Building","13"="Charging Completed"]` |
| fault | Number | Robot Cleaner - Device Fault | |
| mode | Number | Robot Cleaner - Mode | Value mapping `["0"="Silent","1"="Basic","2"="Strong","3"="Full Speed"]` |
| battery_level | Number:Dimensionless | Battery - Battery Level | |
| charging_state | Number | Battery - Charging State | Value mapping `["1"="Charging","2"="Not Charging","5"="Go Charging"]` |
| brush_left_time | Number:Time | Brush Cleaner - Brush Left Time | |
| brush_life_level | Number:Dimensionless | Brush Cleaner - Brush Life Level | |
| brush_left_time1 | Number:Time | Side Cleaning Brush - Brush Left Time | |
| brush_life_level1 | Number:Dimensionless | Side Cleaning Brush - Brush Life Level | |
| filter_life_level | Number:Dimensionless | Filter - Filter Life Level | |
| filter_left_time | Number:Time | Filter - Filter Left Time | |
| work_mode | Number | Vacuum Extend - Work Mode | |
| cleaning_time | Number:Time | Vacuum Extend - Cleaning Time | |
| cleaning_area | Number:Area | Vacuum Extend - Cleaning Area | |
| cleaning_mode | Number | Vacuum Extend - Cleaning Mode | Value mapping `["0"="Quiet","1"="Standard","2"="Medium","3"="Strong"]` |
| mop_mode | Number | Vacuum Extend - Mop Mode | Value mapping `["1"="Low","2"="Medium","3"="High"]` |
| waterbox_status | Number | Vacuum Extend - Waterbox Status | Value mapping `["0"="No","1"="Yes"]` |
| task_status | Number | Vacuum Extend - Task Status | |
| clean_extend_data | String | Vacuum Extend - Clean Extend Data | |
| break_point_restart | Number | Vacuum Extend - Break Point Restart | Value mapping `["0"="Off","1"="On"]` |
| carpet_press | Number | Vacuum Extend - Carpet Press | Value mapping `["0"="Off","1"="On"]` |
| serial_number | String | Vacuum Extend - Serial Number | |
| remote_state | String | Vacuum Extend - Remote State | |
| clean_rags_tip | Number:Time | Vacuum Extend - Clean Rags Tip | |
| keep_sweeper_time | Number:Time | Vacuum Extend - Keep Sweeper Time | |
| faults | String | Vacuum Extend - Faults | |
| nation_matched | String | Vacuum Extend - Nation Matched | |
| relocation_status | Number | Vacuum Extend - Relocation Status | |
| enable | Switch | Do Not Disturb - Enable | |
| start_time | String | Do Not Disturb - Start Time | |
| end_time | String | Do Not Disturb - End Time | |
| frame_info | String | Map - Frame Info | |
| map_extend_data | String | Map - Map Extend Data | |
| mult_map_info | String | Map - Mult Map Info | |
| volume | Number:Dimensionless | Audio - Volume | |
| voice_packet_id | String | Audio - Voice Packet Id | |
| voice_change_state | String | Audio - Voice Change State | |
| set_voice | String | Audio - Set Voice | |
| time_zone | String | Time - Time Zone | |
| timer_clean | String | Time - Timer Clean | |
| first_clean_time | Number | Clean Logs - First Clean Time | |
| total_clean_time | Number:Time | Clean Logs - Total Clean Time | |
| total_clean_times | Number | Clean Logs - Total Clean Times | |
| total_clean_area | Number | Clean Logs - Total Clean Area | |
| auto_collect | Number | Collect Dust - Auto Collect | Value mapping `["0"="Close-auto-collect","1"="Open-auto-collect"]` |
| clean_times | Number | Collect Dust - Clean Times | |
| dust_enable | Number | Collect Dust - Dust Enable | Value mapping `["0"="Disable","1"="Enable"]` |
### DreameBot L10s Ultra (<a name="dreame-vacuum-r2228o">dreame.vacuum.r2228o</a>) Channels ### DreameBot L10s Ultra (<a name="dreame-vacuum-r2228o">dreame.vacuum.r2228o</a>) Channels
| Channel | Type | Description | Comment | | Channel | Type | Description | Comment |
@ -7509,6 +7563,62 @@ Number total_clean_times "Clean Logs - Total Clean Times" (G_vacuum) {channel="m
Number total_clean_area "Clean Logs - Total Clean Area" (G_vacuum) {channel="miio:basic:vacuum:total_clean_area"} Number total_clean_area "Clean Logs - Total Clean Area" (G_vacuum) {channel="miio:basic:vacuum:total_clean_area"}
``` ```
### Xiaomi Robot Vacuum X10 (dreame.vacuum.r2209) item file lines
note: Autogenerated example. Replace the id (vacuum) in the channel with your own. Replace `basic` with `generic` in the thing UID depending on how your thing was discovered.
```java
Group G_vacuum "Xiaomi Robot Vacuum X10" <status>
String actions "Actions" (G_vacuum) {channel="miio:basic:vacuum:actions"}
Number status "Robot Cleaner - Status" (G_vacuum) {channel="miio:basic:vacuum:status"}
Number fault "Robot Cleaner - Device Fault" (G_vacuum) {channel="miio:basic:vacuum:fault"}
Number mode "Robot Cleaner - Mode" (G_vacuum) {channel="miio:basic:vacuum:mode"}
Number:Dimensionless battery_level "Battery - Battery Level" (G_vacuum) {channel="miio:basic:vacuum:battery_level"}
Number charging_state "Battery - Charging State" (G_vacuum) {channel="miio:basic:vacuum:charging_state"}
Number:Time brush_left_time "Brush Cleaner - Brush Left Time" (G_vacuum) {channel="miio:basic:vacuum:brush_left_time"}
Number:Dimensionless brush_life_level "Brush Cleaner - Brush Life Level" (G_vacuum) {channel="miio:basic:vacuum:brush_life_level"}
Number:Time brush_left_time1 "Side Cleaning Brush - Brush Left Time" (G_vacuum) {channel="miio:basic:vacuum:brush_left_time1"}
Number:Dimensionless brush_life_level1 "Side Cleaning Brush - Brush Life Level" (G_vacuum) {channel="miio:basic:vacuum:brush_life_level1"}
Number:Dimensionless filter_life_level "Filter - Filter Life Level" (G_vacuum) {channel="miio:basic:vacuum:filter_life_level"}
Number:Time filter_left_time "Filter - Filter Left Time" (G_vacuum) {channel="miio:basic:vacuum:filter_left_time"}
Number work_mode "Vacuum Extend - Work Mode" (G_vacuum) {channel="miio:basic:vacuum:work_mode"}
Number:Time cleaning_time "Vacuum Extend - Cleaning Time" (G_vacuum) {channel="miio:basic:vacuum:cleaning_time"}
Number:Area cleaning_area "Vacuum Extend - Cleaning Area" (G_vacuum) {channel="miio:basic:vacuum:cleaning_area"}
Number cleaning_mode "Vacuum Extend - Cleaning Mode" (G_vacuum) {channel="miio:basic:vacuum:cleaning_mode"}
Number mop_mode "Vacuum Extend - Mop Mode" (G_vacuum) {channel="miio:basic:vacuum:mop_mode"}
Number waterbox_status "Vacuum Extend - Waterbox Status" (G_vacuum) {channel="miio:basic:vacuum:waterbox_status"}
Number task_status "Vacuum Extend - Task Status" (G_vacuum) {channel="miio:basic:vacuum:task_status"}
String clean_extend_data "Vacuum Extend - Clean Extend Data" (G_vacuum) {channel="miio:basic:vacuum:clean_extend_data"}
Number break_point_restart "Vacuum Extend - Break Point Restart" (G_vacuum) {channel="miio:basic:vacuum:break_point_restart"}
Number carpet_press "Vacuum Extend - Carpet Press" (G_vacuum) {channel="miio:basic:vacuum:carpet_press"}
String serial_number "Vacuum Extend - Serial Number" (G_vacuum) {channel="miio:basic:vacuum:serial_number"}
String remote_state "Vacuum Extend - Remote State" (G_vacuum) {channel="miio:basic:vacuum:remote_state"}
Number:Time clean_rags_tip "Vacuum Extend - Clean Rags Tip" (G_vacuum) {channel="miio:basic:vacuum:clean_rags_tip"}
Number:Time keep_sweeper_time "Vacuum Extend - Keep Sweeper Time" (G_vacuum) {channel="miio:basic:vacuum:keep_sweeper_time"}
String faults "Vacuum Extend - Faults" (G_vacuum) {channel="miio:basic:vacuum:faults"}
String nation_matched "Vacuum Extend - Nation Matched" (G_vacuum) {channel="miio:basic:vacuum:nation_matched"}
Number relocation_status "Vacuum Extend - Relocation Status" (G_vacuum) {channel="miio:basic:vacuum:relocation_status"}
Switch enable "Do Not Disturb - Enable" (G_vacuum) {channel="miio:basic:vacuum:enable"}
String start_time "Do Not Disturb - Start Time" (G_vacuum) {channel="miio:basic:vacuum:start_time"}
String end_time "Do Not Disturb - End Time" (G_vacuum) {channel="miio:basic:vacuum:end_time"}
String frame_info "Map - Frame Info" (G_vacuum) {channel="miio:basic:vacuum:frame_info"}
String map_extend_data "Map - Map Extend Data" (G_vacuum) {channel="miio:basic:vacuum:map_extend_data"}
String mult_map_info "Map - Mult Map Info" (G_vacuum) {channel="miio:basic:vacuum:mult_map_info"}
Number:Dimensionless volume "Audio - Volume" (G_vacuum) {channel="miio:basic:vacuum:volume"}
String voice_packet_id "Audio - Voice Packet Id" (G_vacuum) {channel="miio:basic:vacuum:voice_packet_id"}
String voice_change_state "Audio - Voice Change State" (G_vacuum) {channel="miio:basic:vacuum:voice_change_state"}
String set_voice "Audio - Set Voice" (G_vacuum) {channel="miio:basic:vacuum:set_voice"}
String time_zone "Time - Time Zone" (G_vacuum) {channel="miio:basic:vacuum:time_zone"}
String timer_clean "Time - Timer Clean" (G_vacuum) {channel="miio:basic:vacuum:timer_clean"}
Number first_clean_time "Clean Logs - First Clean Time" (G_vacuum) {channel="miio:basic:vacuum:first_clean_time"}
Number:Time total_clean_time "Clean Logs - Total Clean Time" (G_vacuum) {channel="miio:basic:vacuum:total_clean_time"}
Number total_clean_times "Clean Logs - Total Clean Times" (G_vacuum) {channel="miio:basic:vacuum:total_clean_times"}
Number total_clean_area "Clean Logs - Total Clean Area" (G_vacuum) {channel="miio:basic:vacuum:total_clean_area"}
Number auto_collect "Collect Dust - Auto Collect" (G_vacuum) {channel="miio:basic:vacuum:auto_collect"}
Number clean_times "Collect Dust - Clean Times" (G_vacuum) {channel="miio:basic:vacuum:clean_times"}
Number dust_enable "Collect Dust - Dust Enable" (G_vacuum) {channel="miio:basic:vacuum:dust_enable"}
```
### DreameBot L10s Ultra (dreame.vacuum.r2228o) item file lines ### DreameBot L10s Ultra (dreame.vacuum.r2228o) item file lines
note: Autogenerated example. Replace the id (vacuum) in the channel with your own. Replace `basic` with `generic` in the thing UID depending on how your thing was discovered. note: Autogenerated example. Replace the id (vacuum) in the channel with your own. Replace `basic` with `generic` in the thing UID depending on how your thing was discovered.

View File

@ -43,36 +43,38 @@ The Pi-hole Binding allows you to monitor Pi-hole statistics and control its fun
## Channels ## Channels
| Channel | Type | Read/Write | Description | | Channel | Type | Read/Write | Description |
|-------------------------|--------|------------|------------------------------------------------------------| |-------------------------|----------|------------|------------------------------------------------------------|
| domains-being-blocked | Number | RO | The total number of domains currently being blocked. | | domains-being-blocked | Number | RO | The total number of domains currently being blocked. |
| dns-queries-today | Number | RO | The count of DNS queries made today. | | dns-queries-today | Number | RO | The count of DNS queries made today. |
| ads-blocked-today | Number | RO | The number of ads blocked today. | | ads-blocked-today | Number | RO | The number of ads blocked today. |
| ads-percentage-today | Number | RO | The percentage of ads blocked today. | | ads-percentage-today | Number | RO | The percentage of ads blocked today. |
| unique-domains | Number | RO | The count of unique domains queried. | | unique-domains | Number | RO | The count of unique domains queried. |
| queries-forwarded | Number | RO | The number of queries forwarded to an external DNS server. | | queries-forwarded | Number | RO | The number of queries forwarded to an external DNS server. |
| queries-cached | Number | RO | The number of queries served from the cache. | | queries-cached | Number | RO | The number of queries served from the cache. |
| clients-ever-seen | Number | RO | The total number of unique clients ever seen. | | clients-ever-seen | Number | RO | The total number of unique clients ever seen. |
| unique-clients | Number | RO | The current count of unique clients. | | unique-clients | Number | RO | The current count of unique clients. |
| dns-queries-all-types | Number | RO | The total number of DNS queries of all types. | | dns-queries-all-types | Number | RO | The total number of DNS queries of all types. |
| reply-unknown | Number | RO | DNS replies with an unknown status. | | reply-unknown | Number | RO | DNS replies with an unknown status. |
| reply-nodata | Number | RO | DNS replies indicating no data. | | reply-nodata | Number | RO | DNS replies indicating no data. |
| reply-nxdomain | Number | RO | DNS replies indicating non-existent domain. | | reply-nxdomain | Number | RO | DNS replies indicating non-existent domain. |
| reply-cname | Number | RO | DNS replies with a CNAME record. | | reply-cname | Number | RO | DNS replies with a CNAME record. |
| reply-ip | Number | RO | DNS replies with an IP address. | | reply-ip | Number | RO | DNS replies with an IP address. |
| reply-domain | Number | RO | DNS replies with a domain name. | | reply-domain | Number | RO | DNS replies with a domain name. |
| reply-rrname | Number | RO | DNS replies with a resource record name. | | reply-rrname | Number | RO | DNS replies with a resource record name. |
| reply-servfail | Number | RO | DNS replies indicating a server failure. | | reply-servfail | Number | RO | DNS replies indicating a server failure. |
| reply-refused | Number | RO | DNS replies indicating refusal. | | reply-refused | Number | RO | DNS replies indicating refusal. |
| reply-notimp | Number | RO | DNS replies indicating not implemented. | | reply-notimp | Number | RO | DNS replies indicating not implemented. |
| reply-other | Number | RO | DNS replies with other statuses. | | reply-other | Number | RO | DNS replies with other statuses. |
| reply-dnssec | Number | RO | DNS replies with DNSSEC information. | | reply-dnssec | Number | RO | DNS replies with DNSSEC information. |
| reply-none | Number | RO | DNS replies with no data. | | reply-none | Number | RO | DNS replies with no data. |
| reply-blob | Number | RO | DNS replies with a BLOB (binary large object). | | reply-blob | Number | RO | DNS replies with a BLOB (binary large object). |
| dns-queries-all-replies | Number | RO | The total number of DNS queries with all reply types. | | dns-queries-all-replies | Number | RO | The total number of DNS queries with all reply types. |
| privacy-level | Number | RO | The privacy level setting. | | privacy-level | Number | RO | The privacy level setting. |
| enabled | Switch | RO | The current status of blocking | | enabled | Switch | RO | The current status of blocking |
| disable-enable | String | RW | Is blocking enabled/disabled | | disable-enable | String | RW | Is blocking enabled/disabled |
| gravity-last-update | DateTime | RO | Last update of gravity |
| gravity-file-exists | DateTime | RO | Does gravity file exists |
## Full Example ## Full Example

View File

@ -5,7 +5,7 @@ title: SunSynk - Bindings
type: binding type: binding
description: "This binding integrates the [Sun Synk Connect web services](https://www.sunsynk.net/)." description: "This binding integrates the [Sun Synk Connect web services](https://www.sunsynk.net/)."
since: 3x since: 3x
install: manual install: auto
--- ---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository --> <!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->

View File

@ -33,7 +33,7 @@
<property name="Control Protocol ID">unknown</property> <property name="Control Protocol ID">unknown</property>
<property name="System Version">unknown</property> <property name="System Version">unknown</property>
<property name="Protocol Version">unknown</property> <property name="Protocol Version">unknown</property>
<property name="thingTypeVersion">1</property> <property name="thingTypeVersion">2</property>
</properties> </properties>
<config-description-ref uri="thing-type:kaleidescape:kaleidescapedevice"/> <config-description-ref uri="thing-type:kaleidescape:kaleidescapedevice"/>
@ -68,7 +68,7 @@
<property name="Control Protocol ID">unknown</property> <property name="Control Protocol ID">unknown</property>
<property name="System Version">unknown</property> <property name="System Version">unknown</property>
<property name="Protocol Version">unknown</property> <property name="Protocol Version">unknown</property>
<property name="thingTypeVersion">1</property> <property name="thingTypeVersion">2</property>
</properties> </properties>
<config-description-ref uri="thing-type:kaleidescape:kaleidescapedevice"/> <config-description-ref uri="thing-type:kaleidescape:kaleidescapedevice"/>
@ -99,7 +99,7 @@
<property name="Control Protocol ID">unknown</property> <property name="Control Protocol ID">unknown</property>
<property name="System Version">unknown</property> <property name="System Version">unknown</property>
<property name="Protocol Version">unknown</property> <property name="Protocol Version">unknown</property>
<property name="thingTypeVersion">1</property> <property name="thingTypeVersion">2</property>
</properties> </properties>
<config-description-ref uri="thing-type:kaleidescape:kaleidescapedevice"/> <config-description-ref uri="thing-type:kaleidescape:kaleidescapedevice"/>
@ -130,7 +130,7 @@
<property name="Control Protocol ID">unknown</property> <property name="Control Protocol ID">unknown</property>
<property name="System Version">unknown</property> <property name="System Version">unknown</property>
<property name="Protocol Version">unknown</property> <property name="Protocol Version">unknown</property>
<property name="thingTypeVersion">1</property> <property name="thingTypeVersion">2</property>
</properties> </properties>
<config-description-ref uri="thing-type:kaleidescape:kaleidescapedevice"/> <config-description-ref uri="thing-type:kaleidescape:kaleidescapedevice"/>
@ -150,6 +150,7 @@
<channel id="title_num" typeId="title_num"/> <channel id="title_num" typeId="title_num"/>
<channel id="title_length" typeId="title_length"/> <channel id="title_length" typeId="title_length"/>
<channel id="title_loc" typeId="title_loc"/> <channel id="title_loc" typeId="title_loc"/>
<channel id="endtime" typeId="endtime"/>
<channel id="chapter_num" typeId="chapter_num"/> <channel id="chapter_num" typeId="chapter_num"/>
<channel id="chapter_length" typeId="chapter_length"/> <channel id="chapter_length" typeId="chapter_length"/>
<channel id="chapter_loc" typeId="chapter_loc"/> <channel id="chapter_loc" typeId="chapter_loc"/>
@ -190,6 +191,7 @@
<channel id="title_num" typeId="title_num"/> <channel id="title_num" typeId="title_num"/>
<channel id="title_length" typeId="title_length"/> <channel id="title_length" typeId="title_length"/>
<channel id="title_loc" typeId="title_loc"/> <channel id="title_loc" typeId="title_loc"/>
<channel id="endtime" typeId="endtime"/>
<channel id="chapter_num" typeId="chapter_num"/> <channel id="chapter_num" typeId="chapter_num"/>
<channel id="chapter_length" typeId="chapter_length"/> <channel id="chapter_length" typeId="chapter_length"/>
<channel id="chapter_loc" typeId="chapter_loc"/> <channel id="chapter_loc" typeId="chapter_loc"/>
@ -229,6 +231,7 @@
<channel id="title_num" typeId="title_num"/> <channel id="title_num" typeId="title_num"/>
<channel id="title_length" typeId="title_length"/> <channel id="title_length" typeId="title_length"/>
<channel id="title_loc" typeId="title_loc"/> <channel id="title_loc" typeId="title_loc"/>
<channel id="endtime" typeId="endtime"/>
<channel id="chapter_num" typeId="chapter_num"/> <channel id="chapter_num" typeId="chapter_num"/>
<channel id="chapter_length" typeId="chapter_length"/> <channel id="chapter_length" typeId="chapter_length"/>
<channel id="chapter_loc" typeId="chapter_loc"/> <channel id="chapter_loc" typeId="chapter_loc"/>
@ -267,6 +270,7 @@
<channel id="track" typeId="track"/> <channel id="track" typeId="track"/>
<channel id="artist" typeId="artist"/> <channel id="artist" typeId="artist"/>
<channel id="album" typeId="album"/> <channel id="album" typeId="album"/>
<channel id="title" typeId="music_title"/>
<channel id="play_mode" typeId="music_play_mode"/> <channel id="play_mode" typeId="music_play_mode"/>
<channel id="play_speed" typeId="music_play_speed"/> <channel id="play_speed" typeId="music_play_speed"/>
<channel id="track_length" typeId="track_length"/> <channel id="track_length" typeId="track_length"/>
@ -376,6 +380,18 @@
<state readOnly="true" pattern="%d %unit%"/> <state readOnly="true" pattern="%d %unit%"/>
</channel-type> </channel-type>
<channel-type id="endtime">
<item-type>DateTime</item-type>
<label>Title End Time</label>
<description>The date/time when the currently playing movie will end</description>
<category>Time</category>
<tags>
<tag>Status</tag>
<tag>Timestamp</tag>
</tags>
<state readOnly="true"/>
</channel-type>
<channel-type id="chapter_num"> <channel-type id="chapter_num">
<item-type>Number</item-type> <item-type>Number</item-type>
<label>Chapter Number</label> <label>Chapter Number</label>
@ -602,6 +618,13 @@
<state readOnly="true"/> <state readOnly="true"/>
</channel-type> </channel-type>
<channel-type id="music_title" advanced="true">
<item-type>String</item-type>
<label>Music Title</label>
<description>The raw output from the MUSIC_TITLE api response</description>
<state readOnly="true"/>
</channel-type>
<channel-type id="music_play_mode"> <channel-type id="music_play_mode">
<item-type>String</item-type> <item-type>String</item-type>
<label>Play Mode</label> <label>Play Mode</label>

View File

@ -73,29 +73,61 @@
<description>Seconds between connection retries when KNX link has been lost, 0 means never retry, minimum 30s</description> <description>Seconds between connection retries when KNX link has been lost, 0 means never retry, minimum 30s</description>
<default>60</default> <default>60</default>
</parameter> </parameter>
<parameter name="keyringFile" type="text" groupName="knxsecure">
<label>Keyring file</label>
<description>Keyring file exported from ETS and placed in openHAB config/misc folder, e.g.
knx.knxkeys. This file is
mandatory to decode secure group addresses. It can provide settings
and credentials for IP Secure if not configured
separately.</description>
<advanced>true</advanced>
</parameter>
<parameter name="keyringPassword" type="text" groupName="knxsecure">
<context>password</context>
<label>Keyring password</label>
<description>Keyring file password (set during export from ETS).</description>
<advanced>true</advanced>
</parameter>
<parameter name="routerBackboneKey" type="text" groupName="knxsecure"> <parameter name="routerBackboneKey" type="text" groupName="knxsecure">
<context>password</context> <context>password</context>
<label>Router backbone key</label> <label>Router backbone key</label>
<description>Backbone key for secure router mode. 16 bytes <description>Backbone key for secure router mode. 16 bytes
in hex notation. Can also be found in hex notation. Can also be found
in ETS security report.</description> in ETS security report.
Optional, can be read from
keyring file if it is configured.</description>
<advanced>true</advanced>
</parameter>
<parameter name="tunnelSourceAddress" type="text" groupName="knxsecure">
<label>Tunnel source address</label>
<description>Physical KNX address of tunnel in secure mode. Optional, only used in combination
with keyring file to
uniquely identify a tunnel. If given, openHAB will try to read user id, user
password and device authentication from
keyring.</description>
<advanced>true</advanced> <advanced>true</advanced>
</parameter> </parameter>
<parameter name="tunnelUserId" type="text" groupName="knxsecure"> <parameter name="tunnelUserId" type="text" groupName="knxsecure">
<label>Tunnel user id</label> <label>Tunnel user id</label>
<description>Tunnel user id for secure tunnel mode.</description> <description>Tunnel user id for secure tunnel mode. Optional, can be read from
keyring file if tunnelSourceAddr is
configured.</description>
<advanced>true</advanced> <advanced>true</advanced>
</parameter> </parameter>
<parameter name="tunnelUserPassword" type="text" groupName="knxsecure"> <parameter name="tunnelUserPassword" type="text" groupName="knxsecure">
<context>password</context> <context>password</context>
<label>Tunnel user password</label> <label>Tunnel user password</label>
<description>Tunnel user key for secure tunnel mode.</description> <description>Tunnel user key for secure tunnel mode. Optional, can be read from
keyring file if tunnelSourceAddr is
configured.</description>
<advanced>true</advanced> <advanced>true</advanced>
</parameter> </parameter>
<parameter name="tunnelDeviceAuthentication" type="text" groupName="knxsecure"> <parameter name="tunnelDeviceAuthentication" type="text" groupName="knxsecure">
<context>password</context> <context>password</context>
<label>Tunnel device authentication</label> <label>Tunnel device authentication</label>
<description>Tunnel device authentication for secure tunnel mode.</description> <description>Tunnel device authentication for secure tunnel mode. Optional, can be read from
keyring file if
tunnelSourceAddr is configured.</description>
<advanced>true</advanced> <advanced>true</advanced>
</parameter> </parameter>
</config-description> </config-description>

View File

@ -8,6 +8,10 @@
<label>KNX FT1.2 Interface</label> <label>KNX FT1.2 Interface</label>
<description>This is a serial interface for accessing the KNX bus</description> <description>This is a serial interface for accessing the KNX bus</description>
<config-description> <config-description>
<parameter-group name="knxsecure">
<label>KNX secure</label>
<description>Settings for KNX secure. Optional. Requires KNX secure features to be active in KNX installation.</description>
</parameter-group>
<parameter name="serialPort" type="text" required="true"> <parameter name="serialPort" type="text" required="true">
<context>serial-port </context> <context>serial-port </context>
<limitToOptions>false</limitToOptions> <limitToOptions>false</limitToOptions>
@ -42,6 +46,19 @@
<description>Seconds between connect retries when KNX link has been lost, 0 means never retry</description> <description>Seconds between connect retries when KNX link has been lost, 0 means never retry</description>
<default>0</default> <default>0</default>
</parameter> </parameter>
<parameter name="keyringFile" type="text" groupName="knxsecure">
<label>Keyring file</label>
<description>Keyring file exported from ETS and placed in openHAB config/misc folder, e.g.
knx.knxkeys. This file is
mandatory to decode secure group addresses.</description>
<advanced>true</advanced>
</parameter>
<parameter name="keyringPassword" type="text" groupName="knxsecure">
<context>password</context>
<label>Keyring password</label>
<description>Keyring file password (set during export from ETS).</description>
<advanced>true</advanced>
</parameter>
</config-description> </config-description>
</bridge-type> </bridge-type>

View File

@ -116,6 +116,9 @@
<channel id="enabled" typeId="enabled-channel"/> <channel id="enabled" typeId="enabled-channel"/>
<channel id="disable-enable" typeId="disable-enable-channel"/> <channel id="disable-enable" typeId="disable-enable-channel"/>
</channels> </channels>
<properties>
<property name="thingTypeVersion">1</property>
</properties>
<config-description> <config-description>
<parameter name="hostname" type="text" required="true"> <parameter name="hostname" type="text" required="true">
@ -161,4 +164,15 @@
</options> </options>
</command> </command>
</channel-type> </channel-type>
<channel-type id="gravity-file-exists-channel">
<item-type>Switch</item-type>
<label>Gravity File Exists</label>
<state readOnly="true"/>
</channel-type>
<channel-type id="gravity-last-update-channel">
<item-type>DateTime</item-type>
<label>Gravity Last Update</label>
<category>time</category>
<state readOnly="true"/>
</channel-type>
</thing:thing-descriptions> </thing:thing-descriptions>

View File

@ -11,7 +11,8 @@ source: https://github.com/openhab/openhabian/blob/main/docs/openhabian.md
# openHABian - Hassle-free openHAB Setup # openHABian - Hassle-free openHAB Setup
You just discovered openHAB and now you are eager to start but you're afraid of setting up a computer and OS for it ? You just discovered openHAB and now you are eager to start but you're afraid of setting up a computer and OS for it ?
openHABian is here to help. It's a **self-configuring** Linux system setup to reliably operate your openHAB instance 24 hours a day. openHABian is here to help.
It's a **self-configuring** Linux system setup to reliably operate your openHAB instance 24 hours a day.
It provides: It provides:
* Complete **SD-card images pre-configured with openHAB** for the Raspberry Pi line of small single-board computers. * Complete **SD-card images pre-configured with openHAB** for the Raspberry Pi line of small single-board computers.
@ -284,14 +285,14 @@ They can be changed from openHABian menu.
openHABian is designed to reliably run 24 hours a day, seven days a week. That's a complex challenge involving hardware, software and operational procedures. openHABian is designed to reliably run 24 hours a day, seven days a week. That's a complex challenge involving hardware, software and operational procedures.
This is the right time to prepare your system for disasters such as getting hit by hardware outages or the SD card wear-out/corruption problem. This is the right time to prepare your system for disasters such as getting hit by hardware outages or the SD card wear-out/corruption problem.
Preparing for hardware breakage is the challenge that is the most easy one to overcome with common-off-the-shelf hardware that is known to work as a drop-in replacement the very moment you will be in need of it (i.e. when your smart home server just died). Preparing for hardware breakage is the challenge that is the most easy one to overcome with common-off-the-shelf hardware that is known to work as a drop-in replacement the very moment you will be in need of (e.g. when your smart home server just died).
::: tip get your spare hardware ready ::: tip get your spare hardware ready
Order **spare** pieces of *all* hardware components your home automation relies on to work. At a minimum, that's the computer itself and another storage medium. Order **spare** pieces of *all* hardware components your home automation relies on to work. At a minimum, that's the computer itself and another storage medium.
Have it ready for use *on site*, unboxed, mounted and tested to be working. Have it ready for use *on site*, unboxed, mounted and tested to be working.
::: :::
HEADS UP: that statement applies to EVERY hardware setup, even if you run openHAB in some virtualization environment on a $$$ x86 server rackmounted in your basement. **HEADS UP:** that statement applies to EVERY hardware setup, even if you run openHAB in some virtualization environment on some $$$ x86 server rackmounted in your basement.
For our recommended hardware setup that means getting another Raspberry Pi (same model), 2 more SD cards and a power supply (in case of emergency, a smartphone charger will also do). For our recommended hardware setup that means getting another Raspberry Pi (same model), 2 more SD cards and a power supply (in case of emergency, a smartphone charger will also do).
That being said, openHABian has a number of built in software features we borrowed from professional data center operations. That being said, openHABian has a number of built in software features we borrowed from professional data center operations.
@ -301,7 +302,9 @@ That being said, openHABian has a number of built in software features we borrow
WARNING: power failure will result in some data to get lost (albeit the system should continue to run) so we recommend to also get an UPS. WARNING: power failure will result in some data to get lost (albeit the system should continue to run) so we recommend to also get an UPS.
Zram is enabled by default for swap, logs and persistence data. Zram is enabled by default for swap, logs and persistence data.
You can toggle use in \[menu option 38\]. You can toggle use in \[menu option 38\].
2. Mirror your SD card!
2. SD cards, SSDs and HDDs can break or crash just like any hardware.
Mirror your SD card to have a ready-to-use alternative boot medium ready on site at any time !
Get an USB card writer and another SD card and set up SD mirroring using \[menu option 53\]. Get an USB card writer and another SD card and set up SD mirroring using \[menu option 53\].
This will ensure you have an always ready-to-use clone of your storage medium handy at all times. This will ensure you have an always ready-to-use clone of your storage medium handy at all times.
In case of emergency, you can simply swap SD cards and get back online within just a few minutes. In case of emergency, you can simply swap SD cards and get back online within just a few minutes.
@ -309,14 +312,16 @@ That being said, openHABian has a number of built in software features we borrow
::: tip remote replacement ::: tip remote replacement
Disasters love to happen when you're not at home. Disasters love to happen when you're not at home.
With an openHABian RPi mirror SD setup, you can instruct your partner or even kid or your cottage neighbour to replace the SD card and/or computer from remote, by phone. No need for Internet access. With an openHABian RPi mirror SD setup, you can instruct your partner, kid or your cottage neighbour to replace the SD card and/or computer from remote, by phone. No need for Internet or any sort of configuring to get your system back up running.
::: :::
3. Use the integrated original openHAB [openhab-cli tool](https://community.openhab.org/t/recommended-way-to-backup-restore-oh2-configurations-and-things/7193/82) at regular intervals to interactively backup/restore your openHAB **config** \[menu option 50/51\]. 3. Use the integrated original openHAB [openhab-cli tool](https://community.openhab.org/t/recommended-way-to-backup-restore-oh2-configurations-and-things/7193/82) at regular intervals to interactively backup/restore your openHAB **config** \[menu option 50/51\].
4. Use [Amanda Network Backup](http://www.amanda.org/) to create full system backups. 4. Use [Amanda Network Backup](http://www.amanda.org/) to create full system backups.
HEADS UP: This is NOT meant to be a replacement for #1 or #3, it's a *complement* that will also enable you to restore your system to any point in time of the past. HEADS UP: This is NOT meant to be a replacement for #1 or #3, it's a *complement* that will also enable you to restore your system to any point in time of the past.
The specific [Amanda documentation is here](openhabian-amanda.md). The specific [Amanda documentation is here](openhabian-amanda.md).
Use \[menu option 52\] to set up. Use \[menu option 52\] to set up.
5. For completeness, openHABian still provides the historic option to move the root filesystem to USB-attached devices. See \[menu option 37\]. 5. For completeness, openHABian still provides the historic option to move the root filesystem to USB-attached devices. See \[menu option 37\].
We don't recommend or support doing so but if you're convinced this is beneficial to your situation, feel free to go for it. We don't recommend or support doing so but if you're convinced this is beneficial to your situation, feel free to go for it.