Updated external content (Jenkins build 54)

pull/1325/head
openHAB Build Server 2020-10-25 05:32:57 +00:00
parent 90311ce89b
commit 2469e8612d
5 changed files with 186 additions and 23 deletions

File diff suppressed because one or more lines are too long

View File

@ -51,7 +51,7 @@ Go to Preferences/Connection and set:
### GPSLogger
Install [GPSLogger for Android](https://play.google.com/store/apps/details?id=com.mendhak.gpslogger) on your device.
Install [GPSLogger for Android](https://github.com/mendhak/gpslogger/releases) on your device.
After the launch, go to General Options.
Enable **Start on boot-up** and **Start on app launch**.

View File

@ -20,12 +20,16 @@ Furthermore it is possible to embed `command tags` in the calendar event descrip
## Supported Things
The only thing type is the calendar.
It is based on a single iCalendar file.
The primary thing type is the calendar.
It is based on a single iCalendar file and implemented as bridge.
There can be multiple things having different properties representing different calendars.
Each calendar can have event filters which allow to get multiple events, maybe filtered by additional criteria. Time based filtering is done by each event's start.
## Thing Configuration
### Configuration for `calendar`
Each `calendar` thing requires the following configuration parameters:
| parameter name | description | optional |
@ -37,20 +41,60 @@ Each `calendar` thing requires the following configuration parameters:
| `maxSize` | The maximum size of the iCal-file in Mebibytes. | mandatory (default available) |
| `authorizationCode` | The authorization code to permit the execution of embedded command tags. If set, the binding checks that the authorization code in the command tag matches before executing any commands. | optional |
### Configuration for `eventfilter`
Each `eventfilter` thing requires a bridge of type `calendar` and has following configuration options:
| parameter name | description | optional |
|------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------|
| `maxEvents` | The count of expected results. | mandatory |
| `refreshTime` | The frequency in minutes the channels get refreshed. | mandatory (default available) |
| `datetimeUnit` | A unit for time settings in this filter. Valid values: `MINUTE`, `HOUR`, `DAY` and `WEEK`. | optional (required for time-based filtering) |
| `datetimeStart` | The start of the time frame where to search for events relative to current time. Combined with `datetimeUnit`. | optional |
| `datetimeEnd` | The end of the time frame where to search for events relative to current time. Combined with `datetimeUnit`. The value must be greater than `datetimeStart` to get results. | optional |
| `datetimeRound` | Whether to round the datetimes of start and end down to the earlier time unit. Example if set: current time is 13:00, timeunit is set to `DAY`. Resulting search will start and end at 0:00. | optional |
| `textEventField` | A field to filter the events text-based. Valid values: `SUMMARY`, `DESCRIPTION`, `COMMENT`, `CONTACT` and `LOCATION` (as described in RFC 5545). | optional/required for text-based filtering |
| `textEventValue` | The text to filter events with. | optional |
| `textValueType` | The type of the text to filter with. Valid values: `TEXT` (field must contain value), `REGEX` (field must match value, completely, dot matches all, case insensetive). | optional/required for text-based filtering |
## Channels
The channels describe the current and the next forthcoming event.
### Channels for `calendar`
The channels of `calendar` describe the current and the next forthcoming event.
They are all read-only.
| Channel | Type | Description |
|-------------------|-----------|--------------------------------------------------------------------------------|
| current_presence | Switch | Current presence of an event, `ON` if there is currently an event, `OFF` otherwise |
| current_title | String | Title of a currently present event |
| current_start | DateTime | Start of a currently present event |
| current_end | DateTime | End of a currently present event |
| next_title | String | Title of the next event |
| next_start | DateTime | Start of the next event |
| next_end | DateTime | End of the next event |
| Channel | Type | Description |
|-------------------|-----------|-------------------------------------------------------------------------------------|
| current_presence | Switch | Current presence of an event, `ON` if there is currently an event, `OFF` otherwise |
| current_title | String | Title of a currently present event |
| current_start | DateTime | Start of a currently present event |
| current_end | DateTime | End of a currently present event |
| next_title | String | Title of the next event |
| next_start | DateTime | Start of the next event |
| next_end | DateTime | End of the next event |
### Channels for `eventfilter`
The channels of `eventfilter` are generated using following scheme, all are read-only.
| Channel-scheme | Type | Description |
|---------------------|-----------|------------------------|
| `result_<no>#begin` | DateTime | The begin of an event |
| `result_<no>#end` | DateTime | The end of an event |
| `result_<no>#title` | String | The title of an event |
The scheme replaces `<no>` by the results index, beginning at `0`. An `eventfilter` having `maxEvents` set to 3 will have following channels:
* `result_0#begin`
* `result_0#end`
* `result_0#title`
* `result_1#begin`
* `result_1#end`
* `result_1#title`
* `result_2#begin`
* `result_2#end`
* `result_2#title`
## Command Tags
@ -90,16 +134,19 @@ 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..
```
Thing 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 ]
```
Link the channels as usual to items:
```
String current_event_name "current event [%s]" <calendar> { channel="icalendar:calendar:deadbeef:current_title" }
DateTime current_event_until "current until [%1$tT, %1$tY-%1$tm-%1$td]" <calendar> { channel="icalendar:calendar:deadbeef:current_end" }
String next_event_name "next event [%s]" <calendar> { channel="icalendar:calendar:deadbeef:next_title" }
DateTime next_event_at "next at [%1$tT, %1$tY-%1$tm-%1$td]" <calendar> { channel="icalendar:calendar:deadbeef:next_start" }
String current_event_name "current event [%s]" <calendar> { channel="icalendar:calendar:deadbeef:current_title" }
DateTime current_event_until "current until [%1$tT, %1$tY-%1$tm-%1$td]" <calendar> { channel="icalendar:calendar:deadbeef:current_end" }
String next_event_name "next event [%s]" <calendar> { channel="icalendar:calendar:deadbeef:next_title" }
DateTime next_event_at "next at [%1$tT, %1$tY-%1$tm-%1$td]" <calendar> { channel="icalendar:calendar:deadbeef:next_start" }
String first_event_name_tomorrow "first event [%s]" <calendar> { channel="icalendar:eventfilter:feedd0d0:event_0#title" }
DateTime first_event_at_tomorrow "first at [%1$tT, %1$tY-%1$tm-%1$td]" <calendar> { channel="icalendar:eventfilter:feedd0d0:event_0#begin" }
```
Sitemap just showing the current event and the beginning of the next:
@ -112,6 +159,10 @@ sitemap local label="My Calendar Sitemap" {
Text item=next_event_name label="next event [%s]"
Text item=next_event_at label="next at [%1$tT, %1$tY-%1$tm-%1$td]"
}
Frame label="tomorrow" {
Text item=first_event_name_tomorrow
Text item=first_event_at_tomorrow
}
}
```
@ -128,3 +179,7 @@ Command tags in a calendar event (in the case that configuration parameter `auth
BEGIN:Calendar_Test_Switch:ON
END:Calendar_Test_Switch:OFF
```
## Breaking changes
In OH3 `calendar` was changed from Thing to Bridge. You need to recreate calendars (or replace `Thing` by `Bridge` in your `.things` file).

View File

@ -75,7 +75,7 @@ This service can be configured in the file `services/jdbc.cfg`.
| tableUseRealItemNames | `false` | No | table name prefix generation. When set to `true`, real item names are used for table names and `tableNamePrefix` is ignored. When set to `false`, the `tableNamePrefix` is used to generate table names with sequential numbers. |
| tableIdDigitCount | 4 | No | when `tableUseRealItemNames` is `false` and thus table names are generated sequentially, this controls how many zero-padded digits are used in the table name. With the default of 4, the first table name will end with `0001`. For migration from the MySQL persistence service, set this to 0. |
| rebuildTableNames | false | No | rename existing tables using `tableUseRealItemNames` and `tableIdDigitCount`. USE WITH CARE! Deactivate after Renaming is done! |
| jdbc.maximumPoolSize | configured per database in package `org.openhab.persistence.jdbc.db.*` | No | Some embeded databases can handle only one connection. See [this link](https://github.com/brettwooldridge/HikariCP/issues/256) for more information |
| jdbc.maximumPoolSize | configured per database in package `org.openhab.persistence.jdbc.db.*` | No | Some embedded databases can handle only one connection. See [this link](https://github.com/brettwooldridge/HikariCP/issues/256) for more information |
| jdbc.minimumIdle | see above | No | see above |
| enableLogTime | `false` | No | timekeeping |
@ -186,4 +186,3 @@ then
}
end
```

View File

@ -4,7 +4,7 @@
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
<thing-type id="calendar">
<bridge-type id="calendar">
<label>Calendar</label>
<description>Calendar based on an iCal calendar.</description>
@ -55,7 +55,7 @@
</parameter>
</config-description>
</thing-type>
</bridge-type>
<channel-type id="event_current_title">
<item-type>String</item-type>
@ -99,4 +99,113 @@
<description>End of the next event in calendar</description>
<state readOnly="true"/>
</channel-type>
<channel-type id="result_start">
<item-type>DateTime</item-type>
<label>Start of Result</label>
<description>Start of the found result in calendar</description>
<state readOnly="true"/>
</channel-type>
<channel-type id="result_end">
<item-type>DateTime</item-type>
<label>End of Result</label>
<description>End of the found result in calendar</description>
<state readOnly="true"/>
</channel-type>
<channel-type id="result_title">
<item-type>String</item-type>
<label>Title of Result</label>
<description>Title of the found result in calendar</description>
<state readOnly="true"/>
</channel-type>
<channel-group-type id="result">
<label>Result Event</label>
<description>A resulting event found by filter</description>
<channels>
<channel typeId="result_start" id="begin"/>
<channel typeId="result_end" id="end"/>
<channel typeId="result_title" id="title"/>
</channels>
</channel-group-type>
<thing-type id="eventfilter">
<supported-bridge-type-refs>
<bridge-type-ref id="calendar"/>
</supported-bridge-type-refs>
<label>Event Filter</label>
<description>Filtered Events from the calendar</description>
<config-description>
<parameter-group name="general">
<label>General Filter Options</label>
</parameter-group>
<parameter-group name="datetime_based">
<label>Date and Time based Filter</label>
</parameter-group>
<parameter-group name="text_based">
<label>Text based Filter</label>
</parameter-group>
<parameter name="maxEvents" type="integer" min="0" groupName="general">
<label>Maximum Matches</label>
<required>true</required>
</parameter>
<parameter name="refreshTime" type="integer" min="1" groupName="general" unit="min">
<label>Refresh Time</label>
<description>The frequency in minutes the channels get refreshed</description>
<required>true</required>
<default>15</default>
</parameter>
<parameter name="datetimeUnit" type="text" groupName="datetime_based">
<limitToOptions>true</limitToOptions>
<options>
<option value="MINUTE">minute</option>
<option value="HOUR">hour</option>
<option value="DAY">day</option>
<option value="WEEK">week</option>
</options>
<default>HOUR</default>
<label>Date or Time Unit for Start and End</label>
</parameter>
<parameter name="datetimeStart" type="integer" groupName="datetime_based">
<label>Start</label>
<description>Start date/time amount to find events relative to "now" (inclusive)</description>
</parameter>
<parameter name="datetimeEnd" type="integer" groupName="datetime_based">
<label>End</label>
<description>End date/time amount to find events relative to "now" (exclusive)</description>
</parameter>
<parameter name="datetimeRound" type="boolean" groupName="datetime_based">
<label>Round to Date/Time unit</label>
<description>Setting this will round start and end date/time to the unit down (e.g. if unit is day: start and end
will be rounded to 0:00 day time)</description>
</parameter>
<parameter name="textEventField" type="text" groupName="text_based">
<label>Event Field</label>
<description>iCal field to match</description>
<limitToOptions>true</limitToOptions>
<options>
<option value="SUMMARY">summary/subject</option>
<option value="DESCRIPTION">description/content</option>
<option value="COMMENT">comment</option>
<option value="CONTACT">contact</option>
<option value="LOCATION">location</option>
</options>
</parameter>
<parameter name="textEventValue" type="text" groupName="text_based">
<label>Event Value</label>
</parameter>
<parameter name="textValueType" type="text" groupName="text_based">
<limitToOptions>true</limitToOptions>
<options>
<option value="REGEX">Regular Expression</option>
<option value="TEXT">Text</option>
</options>
<default>TEXT</default>
<label>Value Type</label>
<description>"text" checks the value for containment, "regular expression" matches whole value</description>
</parameter>
</config-description>
</thing-type>
</thing:thing-descriptions>