Updated external content (Jenkins build 910)

pull/1839/head
openHAB Build Server 2022-04-25 18:26:38 +00:00
parent ad3f3bf245
commit ab297074eb
49 changed files with 1980 additions and 41 deletions

File diff suppressed because one or more lines are too long

View File

@ -28,11 +28,22 @@ Each Thing provides one or more warnings for a city.
## Thing Configuration
| Property | Default | Required | Description |
|--------------|---------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| cellId | - | Yes | ID of the area to retrieve weather warnings. See [this list](https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_warncellids_csv.csv) of valid IDs. Using the percent sign (%) as a wildcard, it is possible to query multiple cells. For example, the value `8111%` retrieves all cell IDs that start with `8111`. |
| refresh | 30 | No | Time between API requests in minutes. Minimum 15 minutes. |
| warningCount | 1 | No | Number of warnings to provide. |
| Property | Default | Required | Description |
|--------------|---------|----------|--------------------------------------------------------------------------------------------------------------------------------------------|
| cellId | - | Yes | ID of the area to retrieve weather warnings, only IDs starting with an 8 (exception for Berlin: 7) are supported. See [Cell ID](#cell-id). |
| refresh | 30 | No | Time between API requests in minutes. Minimum 15 minutes. |
| warningCount | 1 | No | Number of warnings to provide. |
### Cell ID
<!-- See page 10-13 (in German) of https://www.dwd.de/DE/wetter/warnungen_aktuell/objekt_einbindung/einbindung_karten_geodienste.pdf?__blob=publicationFile&v=14 for Cell ID documentation. -->
Use [this list](https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_warncellids_csv.csv) of valid IDs, please notice that **only IDs starting with an eight (8) and nine digits are supported** by this binding.
Exeception for Berlin, where the ID of the city's districts are used. Those start with a seven (7).
Using the percent sign (%) as a wildcard, it is possible to query multiple cells.
For example, the value `8111%` retrieves all cell IDs that start with `8111`.
More explanation (in German) for CellID can be found on page 10-13 of [PDF: DWD-Geoserver: Nutzung von WMS-Diensten für eigene Websites](https://www.dwd.de/DE/wetter/warnungen_aktuell/objekt_einbindung/einbindung_karten_geodienste.pdf?__blob=publicationFile&v=14).
The binding will deliver no warnings if the number of retrieved warnings for one Thing is too big.
This can only happen if you select too many cell IDs (more than about 300) with the percent wildcard.
@ -40,7 +51,7 @@ This can only happen if you select too many cell IDs (more than about 300) with
Example:
```
dwdunwetter:dwdwarnings:cologne "Warnings Cologne" [ cellId="105315000", refresh=15, warningCount=1 ]
dwdunwetter:dwdwarnings:cologne "Warnings Cologne" [ cellId="805315000", refresh=15, warningCount=1 ]
```
@ -52,21 +63,21 @@ The warnings will be sorted first by `Severity` and then by the `Valid From` dat
This ensures that the channels for the first warning will always be the highest Severity.
If the API returns more warnings than the configured number in the Thing, the warnings with the lowest Severity will be dropped.
| Channel | Type | Description |
|--------------|-----------------|----------------------------------------------------------------------------------|
| warningN | Switch | ON if a warning is present |
| UpdatedN | Trigger Channel | Triggers NEW when a warning is sent the first time |
| severityN | String | Severity of the warning. Possible values are Minor, Moderate, Severe, and Extreme|
| headlineN | String | Headline of the warning (e.g. "Amtliche Warnung vor FROST") |
| descriptionN | String | Textual description of the warning |
| eventN | String | Type of the warning (e.g. FROST) |
| effectiveN | DateTime | Issued Date and Time |
| onsetN | DateTime | Start Date and Time for which the warning is valid |
| expiresN | DateTime | End Date and Time for which the warning is valid |
| altitudeN | Number:Length | Lower Height above sea level for which the warning is valid |
| ceilingN | Number:Length | Upper Height above sea level for which the warning is valid |
| urgencyN | String | Urgency of the warning. Possible values are Future and Immediate |
| instructionN | String | Additional instructions and safety information |
| Channel | Type | Description |
|--------------|-----------------|-----------------------------------------------------------------------------------|
| warningN | Switch | ON if a warning is present |
| UpdatedN | Trigger Channel | Triggers NEW when a warning is sent the first time |
| severityN | String | Severity of the warning. Possible values are Minor, Moderate, Severe, and Extreme |
| headlineN | String | Headline of the warning (e.g. "Amtliche Warnung vor FROST") |
| descriptionN | String | Textual description of the warning |
| eventN | String | Type of the warning (e.g. FROST) |
| effectiveN | DateTime | Issued Date and Time |
| onsetN | DateTime | Start Date and Time for which the warning is valid |
| expiresN | DateTime | End Date and Time for which the warning is valid |
| altitudeN | Number:Length | Lower Height above sea level for which the warning is valid |
| ceilingN | Number:Length | Upper Height above sea level for which the warning is valid |
| urgencyN | String | Urgency of the warning. Possible values are Future and Immediate |
| instructionN | String | Additional instructions and safety information |
All channels are readonly.
@ -78,14 +89,15 @@ For rules that need to fire if a new warning occurs, there is the trigger channe
That trigger channel fires an event whenever a warning is sent for the first time.
It also triggers if a warning is replaced by another.
More explanations about the specific values of the channels can be found in the PDF documentation of the DWD at: [CAP DWD Profile 1.2](https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_dwd_profile_en_pdf_1_12.html)
More explanations about the specific values of the channels can be found in the PDF documentation of the DWD at: [CAP DWD Profile 1.2](https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_dwd_profile_en_pdf_1_12.html).
Please note that this binding only supports *Gemeinden* (COMMUNE) for *WarncellID*.
## Full Example
dwdunwetter.things:
```
dwdunwetter:dwdwarnings:cologne "Warnings Cologne" [ cellId="105315000", refresh=15, warningCount=1 ]
dwdunwetter:dwdwarnings:cologne "Warnings Cologne" [ cellId="805315000", refresh=15, warningCount=1 ]
```
e.g.
@ -93,7 +105,7 @@ e.g.
to get two warnings like in the item example, set `warningCount=2` in things file
```
dwdunwetter:dwdwarnings:cologne "Warnings Cologne" [ cellId="105315000", refresh=15, warningCount=2
dwdunwetter:dwdwarnings:cologne "Warnings Cologne" [ cellId="805315000", refresh=15, warningCount=2 ]
```
dwdunwetter.items:
@ -122,8 +134,7 @@ DateTime WarningCologneAusgabedatum_2 "Issued at [%s]"
demo.sitemap:
```
sitemap demo label="Main Menu"
{
sitemap demo label="Main Menu" {
Frame {
Text item=WarningCologneTitel visibility=[WarningCologne==ON]
Text item=WarningCologneBeschreibung visibility=[WarningCologne==ON]
@ -172,8 +183,4 @@ NULL=undefiniert
UNDEF=undefiniert
```
If you're unsure if the binding is working correctly, you can access the json directly with curl or any browser [json](https://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json) and have a look for an active ID to test your setup.
```
curl https://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json | less
```
If you're unsure if the binding is working correctly, you can access the data directly by visiting https://maps.dwd.de/geoserver/dwd/ows?service=WFS&version=2.0.0&request=GetFeature&typeName=dwd:Warnungen_Gemeinden&CQL_FILTER=WARNCELLID%20LIKE%20%27CELL_ID%27 (replace `CELL_ID` with your Cell ID), allowing the download and opening the downloaded `.xml` file.

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 460 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 188 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 337 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 740 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

View File

@ -0,0 +1,860 @@
---
id: mybmw
label: MyBMW
title: MyBMW - Bindings
type: binding
description: "The binding provides access like [MyBMW App](https://www.bmw.com/en/footer/mybmw-app.html) to openHAB."
since: 3x
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# MyBMW Binding
The binding provides access like [MyBMW App](https://www.bmw.com/en/footer/mybmw-app.html) to openHAB.
All vehicles connected to an account will be detected by the discovery with the correct type:
* Conventional Fuel Vehicle
* Plugin-Hybrid Electrical Vehicle
* Battery Electric Vehicle with Range Extender
* Battery Electric Vehicle
In addition properties are attached with information and services provided by this vehicle.
The provided data depends on
1. the [Thing Type](#things) and
2. the [Properties](#properties) mentioned in Services
Different channel groups are clustering all information.
Check for each group if it's supported by your vehicle.
Please note **this isn't a real-time binding**.
If a door is opened the state isn't transmitted and changed immediately.
It's not a flaw in the binding itself because the state in BMW's own MyBMW App is also updated with some delay.
## Supported Things
### Bridge
The bridge establishes the connection between BMW API and openHAB.
| Name | Bridge Type ID | Description |
|----------------------------|----------------|------------------------------------------|
| MyBMW Account | `account` | Access to BMW API for a specific user |
### Things
Four different vehicle types are provided.
They differ in the supported channel groups & channels.
Conventional Fuel Vehicles don't provide e.g. _Charging Profile_, Electric Vehicles don't provide a _Fuel Range_.
For hybrid vehicles in addition to _Fuel and Electric Range_ the _Hybrid Range_ is shown.
| Name | Thing Type ID | Supported Channel Groups |
|-------------------------------------|---------------|---------------------------------------------------------------------|
| BMW Electric Vehicle | `bev` | Vehicle with electric drive train |
| BMW Electric Vehicle with REX | `bev_rex` | Vehicle with electric drive train plus fuel powered range extender |
| BMW Plug-In-Hybrid Electric Vehicle | `phev` | Vehicle with combustion and electric drive train |
| BMW Conventional Vehicle | `conv` | Vehicle with combustion drive train |
#### Properties
<img align="right" src="./doc/vehicle-properties.png" width="500" height="350"/>
For each vehicle properties are available.
Basic information is given regarding
* Vehicle properties like model type, drive train and construction year
* Which services are available / not available
In the right picture can see in *remoteServicesEnabled* e.g. the *Door Lock* and *Door Unlock* services are mentioned.
This ensures channel group [Remote Services](#remote-services) is supporting door lock and unlock remote control.
In *Services Supported* the entry *ChargingHistory* is mentioned.
So it's valid to connect channel group [Charge Sessions](#charge-sessions) in order to display your last charging sessions.
| Property Key | Property Value | Supported Channel Groups |
|------------------------|---------------------|------------------------------|
| servicesSupported | ChargingHistory | session |
| remoteServicesEnabled | _list of services_ | remote |
## Discovery
Auto discovery is starting after the bridge is created.
A list of your registered vehicles is queried and all found things are added in the inbox.
Unique identifier is the *Vehicle Identification Number* (VIN).
If a thing is already declared in a _.things_ configuration, discovery won't highlight it again.
Properties will be attached to predefined vehicles if the VIN is matching.
## Configuration
### Bridge Configuration
| Parameter | Type | Description |
|-----------------|---------|--------------------------------------------------------------------|
| userName | text | MyBMW Username |
| password | text | MyBMW Password |
| region | text | Select region in order to connect to the appropriate BMW server. |
The region Configuration has 3 different options
* _NORTH_AMERICA_
* _CHINA_
* _ROW_ (Rest of World)
#### Advanced Configuration
| Parameter | Type | Description |
|-----------------|---------|---------------------------------------------------------|
| language | text | Channel data can be returned in the desired language |
Language is predefined as *AUTODETECT*.
Some textual descriptions, date and times are delivered based on your local language.
You can overwrite this setting with lowercase 2-letter [language code reagrding ISO 639](https://www.oracle.com/java/technologies/javase/jdk8-jre8-suported-locales.html)
So if want your UI in english language place *en* as desired language.
### Thing Configuration
Same configuration is needed for all things
| Parameter | Type | Description |
|-----------------|---------|---------------------------------------|
| vin | text | Vehicle Identification Number (VIN) |
| refreshInterval | integer | Refresh Interval in Minutes |
#### Advanced Configuration
| Parameter | Type | Description |
|-----------------|---------|-----------------------------------|
| vehicleBrand | text | Vehicle Brand like BMW or Mini |
The _vehicleBrand_ is automatically obtained by the discovery service and shall not be changed.
If thing is defined manually via *.things file following brands are supported
* BMW
* MINI
## Channels
There are many channels available for each vehicle.
For better overview they are clustered in different channel groups.
They differ for each vehicle type, build-in sensors and activated services.
### Thing Channel Groups
| Channel Group ID | Description | conv | phev | bev_rex | bev |
|----------------------------------|---------------------------------------------------|------|------|---------|-----|
| [status](#vehicle-status) | Overall vehicle status | X | X | X | X |
| [range](#range-data) | Provides mileage, range and charge / fuel levels | X | X | X | X |
| [doors](#doors-details) | Detials of all doors and windows | X | X | X | X |
| [check](#check-control) | Shows current active CheckControl messages | X | X | X | X |
| [service](#services) | Future vehicle service schedules | X | X | X | X |
| [location](#location) | Coordinates and heading of the vehicle | X | X | X | X |
| [remote](#remote-services) | Remote control of the vehicle | X | X | X | X |
| [profile](#charge-profile) | Scheduled charging profiles of vehicle | | X | X | X |
| [statistic](#charge-statistics) | Charging statistics of current month | | X | X | X |
| [session](#charge-sessions) | Past charging sessions | | X | X | X |
| [tires](#tire-pressure) | Current and wanted pressure for all tires | X | X | X | X |
| [image](#image) | Provides an image of your vehicle | X | X | X | X |
#### Vehicle Status
Reflects overall status of the vehicle.
* Channel Group ID is **status**
* Available for all vehicles
* Read-only values
| Channel Label | Channel ID | Type | Description | conv | phev | bev_rex | bev |
|---------------------------|---------------------|---------------|------------------------------------------------|------|------|---------|-----|
| Overall Door Status | doors | String | Combined status for all doors | X | X | X | X |
| Overall Window Status | windows | String | Combined status for all windows | X | X | X | X |
| Doors Locked | lock | String | Status if vehicle is secured | X | X | X | X |
| Next Service Date | service-date | DateTime | Date of next upcoming service | X | X | X | X |
| Mileage till Next Service | service-mileage | Number:Length | Mileage till upcoming service | X | X | X | X |
| Check Control | check-control | String | Presence of active warning messages | X | X | X | X |
| Plug Connection Status | plug-connection | String | Plug is _Connected_ or _Not connected_ | | X | X | X |
| Charging Status | charge | String | Current charging status | | X | X | X |
| Charging Information | charge-info | String | Information regarding current charging session | | X | X | X |
| Motion Status | motion | Switch | Driving state - depends on vehicle hardware | X | X | X | X |
| Last Status Timestamp | last-update | DateTime | Date and time of last status update | X | X | X | X |
Overall Door Status values
* _Closed_ - all doors closed
* _Open_ - at least one door is open
* _Undef_ - no door data delivered at all
Overall Windows Status values
* _Closed_ - all windows closed
* _Open_ - at least one window is completely open
* _Intermediate_ - at least one window is partially open
* _Undef_ - no window data delivered at all
Check Control values
Localized String of current active warnings.
Examples:
* No Issues
* Multiple Issues
Charging Status values
* _Not Charging_
* _Charging_
* _Plugged In_
* _Fully Charged_
Charging Information values
Localized String of current active charging session
Examples
* 100% at ~00:43
* Starts at ~09:00
##### Vehicle Status Raw Data
The _raw data channel_ is marked as _advanced_ and isn't shown by default.
Target are advanced users to derive even more data out of BMW API replies.
As the replies are formatted as JSON use the [JsonPath Transformation Service](https://www.openhab.org/addons/transformations/jsonpath/) to extract data for an item,
| Channel Label | Channel ID | Type | Description |
|---------------------------|---------------------|---------------|------------------------------------------------|
| Raw Data | raw | String | Unfiltered JSON String of vehicle data |
<img align="right" src="./doc/RawData.png" width="400" height="125"/>
Examples:
_Country ISO Code_
```
$.properties.originCountryISO
```
_Drivers Guide URL_
```
$.driverGuideInfo.androidStoreUrl
```
#### Range Data
Based on vehicle type some channels are present or not.
Conventional fuel vehicles don't provide *Electric Range* and battery electric vehicles don't show *Fuel Range*.
Hybrid vehicles have both and in addition *Hybrid Range*.
See description [Range vs Range Radius](#range-vs-range-radius) to get more information.
* Channel Group ID is **range**
* Availability according to table
* Read-only values
| Channel Label | Channel ID | Type | conv | phev | bev_rex | bev |
|---------------------------|-------------------------|----------------------|------|------|---------|-----|
| Mileage | mileage | Number:Length | X | X | X | X |
| Fuel Range | range-fuel | Number:Length | X | X | X | |
| Electric Range | range-electric | Number:Length | | X | X | X |
| Hybrid Range | range-hybrid | Number:Length | | X | X | |
| Battery Charge Level | soc | Number:Dimensionless | | X | X | X |
| Remaining Fuel | remaining-fuel | Number:Volume | X | X | X | |
| Fuel Range Radius | range-radius-fuel | Number:Length | X | X | X | |
| Electric Range Radius | range-radius-electric | Number:Length | | X | X | X |
| Hybrid Range Radius | range-radius-hybrid | Number:Length | | X | X | |
#### Doors Details
Detailed status of all doors and windows.
* Channel Group ID is **doors**
* Available for all vehicles if corresponding sensors are built-in
* Read-only values
| Channel Label | Channel ID | Type |
|----------------------------|-------------------------|---------------|
| Driver Door | driver-front | String |
| Driver Door Rear | driver-rear | String |
| Passenger Door | passenger-front | String |
| Passenger Door Rear | passenger-rear | String |
| Trunk | trunk | String |
| Hood | hood | String |
| Driver Window | win-driver-front | String |
| Driver Rear Window | win-driver-rear | String |
| Passenger Window | win-passenger-front | String |
| Passenger Rear Window | win-passenger-rear | String |
| Rear Window | win-rear | String |
| Sunroof | sunroof | String |
Possible states
* _Undef_ - no status data available
* _Invalid_ - this door / window isn't applicable for this vehicle
* _Closed_ - the door / window is closed
* _Open_ - the door / window is open
* _Intermediate_ - window in intermediate position, not applicable for doors
#### Check Control
Group for all current active Check Control messages.
If more than one message is active the channel _name_ contains all active messages as options.
* Channel Group ID is **check**
* Available for all vehicles
* Read/Write access
| Channel Label | Channel ID | Type | Access |
|---------------------------------|---------------------|----------------|------------|
| Check Control Description | name | String | Read/Write |
| Check Control Details | details | String | Read |
| Severity Level | severity | String | Read |
Severity Levels
* Ok
* Low
* Medium
#### Services
Group for all upcoming services with description, service date and/or service mileage.
If more than one service is scheduled in the future the channel _name_ contains all future services as options.
* Channel Group ID is **service**
* Available for all vehicles
* Read/Write access
| Channel Label | Channel ID | Type | Access |
|--------------------------------|---------------------|----------------|------------|
| Service Name | name | String | Read/Write |
| Service Details | details | String | Read |
| Service Date | date | DateTime | Read |
| Mileage till Service | mileage | Number:Length | Read |
#### Location
GPS location and heading of the vehicle.
* Channel Group ID is **location**
* Available for all vehicles with built-in GPS sensor. Function can be enabled/disabled in the head unit
* Read-only values
| Channel Label | Channel ID | Type |
|-----------------|---------------------|--------------|
| GPS Coordinates | gps | Location |
| Heading | heading | Number:Angle |
| Address | address | String |
#### Remote Services
Remote control of the vehicle.
Send a *command* to the vehicle and the *state* is reporting the execution progress.
Only one command can be executed each time.
Parallel execution isn't supported.
* Channel Group ID is **remote**
* Available for all commands mentioned in *Services Activated*. See [Vehicle Properties](#properties) for further details
* Read/Write access
| Channel Label | Channel ID | Type | Access |
|-------------------------|---------------------|---------|--------|
| Remote Service Command | command | String | Write |
| Service Execution State | state | String | Read |
The channel _command_ provides options
* _flash-lights_
* _vehicle-finder_
* _door-lock_
* _door-unlock_
* _horn-low_
* _climate-now-start_
* _climate-now-stop_
The channel _state_ shows the progress of the command execution in the following order
1) _initiated_
2) _pending_
3) _delivered_
4) _executed_
#### Charge Profile
Charging options with date and time for preferred time windows and charging modes.
* Channel Group ID is **profile**
* Available for electric and hybrid vehicles
* Read access for UI.
* There are 4 timers *T1, T2, T3 and T4* available. Replace *X* with number 1,2 or 3 to target the correct timer
| Channel Label | Channel ID | Type |
|----------------------------|---------------------------|----------|
| Charge Mode | mode | String |
| Charge Preferences | prefs | String |
| Charging Plan | control | String |
| SoC Target | target | String |
| Charging Energy Limited | limit | Switch |
| Window Start Time | window-start | DateTime |
| Window End Time | window-end | DateTime |
| A/C at Departure | climate | Switch |
| T*X* Enabled | timer*X*-enabled | Switch |
| T*X* Departure Time | timer*X*-departure | DateTime |
| T*X* Monday | timer*X*-day-mon | Switch |
| T*X* Tuesday | timer*X*-day-tue | Switch |
| T*X* Wednesday | timer*X*-day-wed | Switch |
| T*X* Thursday | timer*X*-day-thu | Switch |
| T*X* Friday | timer*X*-day-fri | Switch |
| T*X* Saturday | timer*X*-day-sat | Switch |
| T*X* Sunday | timer*X*-day-sun | Switch |
The channel _profile-mode_ supports
* *immediateCharging*
* *delayedCharging*
The channel _profile-prefs_ supports
* *noPreSelection*
* *chargingWindow*
#### Charge Statistics
Shows charge statistics of the current month
* Channel Group ID is **statistic**
* Available for electric and hybrid vehicles
* Read-only values
| Channel Label | Channel ID | Type |
|----------------------------|-------------------------|----------------|
| Charge Statistic Month | title | String |
| Energy Charged | energy | Number:Energy |
| Charge Sessions | sessions | Number |
#### Charge Sessions
Group for past charging sessions.
If more than one message is active the channel _name_ contains all active messages as options.
* Channel Group ID is **session**
* Available for electric and hybrid vehicles
* Read-only values
| Channel Label | Channel ID | Type |
|---------------------------------|--------------|----------|
| Session Title | title | String |
| Session Details | subtitle | String |
| Charged Energy in Session | energy | String |
| Issues during Session | issue | String |
| Session Status | status | String |
#### Tire Pressure
Current and target tire pressure values
* Channel Group ID is **tires**
* Available for all vehicles if corresponding sensors are built-in
* Read-only values
| Channel Label | Channel ID | Type |
|----------------------------|-------------------------|------------------|
| Front Left | fl-current | Number:Pressure |
| Front Left Target | fl-target | Number:Pressure |
| Front Right | fr-current | Number:Pressure |
| Front Right Target | fr-target | Number:Pressure |
| Rear Left | rl-current | Number:Pressure |
| Rear Left Target | rl-target | Number:Pressure |
| Rear Right | rr-current | Number:Pressure |
| Rear Right Target | rr-target | Number:Pressure |
#### Image
Image representation of the vehicle.
* Channel Group ID is **image**
* Available for all vehicles
* Read/Write access
| Channel Label | Channel ID | Type | Access |
|----------------------------|---------------------|--------|----------|
| Rendered Vehicle Image | png | Image | Read |
| Image Viewport | view | String | Write |
Possible view ports:
* _VehicleStatus_ Front Side View
* _VehicleInfo_ Front View
* _ChargingHistory_ Side View
* _Default_ Front Side View
## Further Descriptions
### Dynamic Data
<img align="right" src="./doc/SessionOptions.png" width="400" height="250"/>
There are 3 occurrences of dynamic data delivered
* Upcoming Services delivered in group [Services](#services)
* Check Control Messages delivered in group [Check Control](#check-control)
* Charging Session data delivered in group [Charge Sessions](#charge-sessions)
The channel id _name_ shows the first element as default.
All other possibilities are attached as options.
The picture on the right shows the _Session Title_ item and 3 possible options.
Select the desired service and the corresponding Charge Session with _Energy Charged_, _Session Status_ and _Session Issues_ will be shown.
### TroubleShooting
BMW has a high range of vehicles supported by their API.
In case of any issues with this binding help to resolve it!
Please perform the following steps:
* Can you log into MyBMW App with your credentials?
* Is the vehicle listed in your account?
* Is the [MyBMW Brige](#bridge) status _Online_?
If these preconditions are fulfilled proceed with the fingerprint generation.
#### Generate Debug Fingerprint
<img align="right" src="./doc/DiscoveryScan.png" width="400" height="350"/>
First [enable debug logging](https://www.openhab.org/docs/administration/logging.html#defining-what-to-log) for the binding.
```
log:set DEBUG org.openhab.binding.mybmw
```
The debug fingerprint is generated every time the discovery is executed.
To force a new fingerprint perform a _Scan_ for MyBMW things.
Personal data is eliminated from the log entries so it should be possible to share them in public.
Data like
* Vehicle Identification Number (VIN)
* Location data
are anonymized.
You'll find the fingerprint in the logs with the command
```
grep "Discovery Fingerprint Data" openhab.log
```
After the corresponding fingerprint is generated please [follow the instructions to raise an issue](https://community.openhab.org/t/how-to-file-an-issue/68464) and attach the fingerprint data!
Your feedback is highly appreciated!
### Range vs Range Radius
<img align="right" src="./doc/range-radius.png" width="400" height="350"/>
You will observe differences in the vehicle range and range radius values.
While range is indicating the possible distance to be driven on roads the range radius indicates the reachable range on the map.
The right picture shows the distance between Kassel and Frankfurt in Germany.
While the air-line distance is 145 kilometers the route distance is 192 kilometers.
So range value is the normal remaining range while the range radius values can be used e.g. on [Mapview](https://www.openhab.org/docs/ui/sitemaps.html#element-type-mapview) to indicate the reachable range on map.
Please note this is just an indicator of the effective range.
Especially for electric vehicles it depends on many factors like driving style and usage of electric consumers.
## Full Example
The example is based on a BMW i3 with range extender (REX).
Exchange configuration parameters in the Things section
* 4711 - any id you want
* YOUR_USERNAME - with your MyBMW login username
* YOUR_PASSWORD - with your MyBMW password credentials
* VEHICLE_VIN - the vehicle identification number
In addition search for all occurrences of *i3* and replace it with your Vehicle Identification like *x3* or *535d* and you're ready to go!
### Things File
```
Bridge mybmw:account:4711 "MyBMW Account" [userName="YOUR_USERNAME",password="YOUR_PASSWORD",region="ROW"] {
Thing bev_rex i3 "BMW i3 94h REX" [ vin="VEHICLE_VIN",refreshInterval=5,vehicleBrand="BMW"]
}
```
### Items File
```
Number:Length i3Mileage "Odometer [%d %unit%]" <line> (i3) {channel="mybmw:bev_rex:4711:i3:range#mileage" }
Number:Length i3Range "Range [%d %unit%]" <motion> (i3) {channel="mybmw:bev_rex:4711:i3:range#hybrid"}
Number:Length i3RangeElectric "Electric Range [%d %unit%]" <motion> (i3,long) {channel="mybmw:bev_rex:4711:i3:range#electric"}
Number:Length i3RangeFuel "Fuel Range [%d %unit%]" <motion> (i3) {channel="mybmw:bev_rex:4711:i3:range#fuel"}
Number:Dimensionless i3BatterySoc "Battery Charge [%.1f %%]" <battery> (i3,long) {channel="mybmw:bev_rex:4711:i3:range#soc"}
Number:Volume i3Fuel "Fuel [%.1f %unit%]" <oil> (i3) {channel="mybmw:bev_rex:4711:i3:range#remaining-fuel"}
Number:Length i3RadiusElectric "Electric Radius [%d %unit%]" <zoom> (i3) {channel="mybmw:bev_rex:4711:i3:range#radius-electric" }
Number:Length i3RadiusFuel "Fuel Radius [%d %unit%]" <zoom> (i3) {channel="mybmw:bev_rex:4711:i3:range#radius-fuel" }
Number:Length i3RadiusHybrid "Hybrid Radius [%d %unit%]" <zoom> (i3) {channel="mybmw:bev_rex:4711:i3:range#radius-hybrid" }
String i3DoorStatus "Door Status [%s]" <lock> (i3) {channel="mybmw:bev_rex:4711:i3:status#doors" }
String i3WindowStatus "Window Status [%s]" <lock> (i3) {channel="mybmw:bev_rex:4711:i3:status#windows" }
String i3LockStatus "Lock Status [%s]" <lock> (i3) {channel="mybmw:bev_rex:4711:i3:status#lock" }
DateTime i3NextServiceDate "Next Service Date [%1$tb %1$tY]" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:status#service-date" }
String i3NextServiceMileage "Next Service Mileage [%d %unit%]" <line> (i3) {channel="mybmw:bev_rex:4711:i3:status#service-mileage" }
String i3CheckControl "Check Control [%s]" <error> (i3) {channel="mybmw:bev_rex:4711:i3:status#check-control" }
String i3PlugConnection "Plug [%s]" <energy> (i3) {channel="mybmw:bev_rex:4711:i3:status#plug-connection" }
String i3ChargingStatus "[%s]" <energy> (i3) {channel="mybmw:bev_rex:4711:i3:status#charge" }
String i3ChargingInfo "[%s]" <energy> (i3) {channel="mybmw:bev_rex:4711:i3:status#charge-info" }
DateTime i3LastUpdate "Update [%1$tA, %1$td.%1$tm. %1$tH:%1$tM]" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:status#last-update"}
Location i3Location "Location [%s]" <zoom> (i3) {channel="mybmw:bev_rex:4711:i3:location#gps" }
Number:Angle i3Heading "Heading [%.1f %unit%]" <zoom> (i3) {channel="mybmw:bev_rex:4711:i3:location#heading" }
String i3RemoteCommand "Command [%s]" <switch> (i3) {channel="mybmw:bev_rex:4711:i3:remote#command" }
String i3RemoteState "Remote Execution State [%s]" <status> (i3) {channel="mybmw:bev_rex:4711:i3:remote#state" }
String i3DriverDoor "Driver Door [%s]" <lock> (i3) {channel="mybmw:bev_rex:4711:i3:doors#driver-front" }
String i3DriverDoorRear "Driver Door Rear [%s]" <lock> (i3) {channel="mybmw:bev_rex:4711:i3:doors#driver-rear" }
String i3PassengerDoor "Passenger Door [%s]" <lock> (i3) {channel="mybmw:bev_rex:4711:i3:doors#passenger-front" }
String i3PassengerDoorRear "Passenger Door Rear [%s]" <lock> (i3) {channel="mybmw:bev_rex:4711:i3:doors#passenger-rear" }
String i3Hood "Hood [%s]" <lock> (i3) {channel="mybmw:bev_rex:4711:i3:doors#hood" }
String i3Trunk "Trunk [%s]" <lock> (i3) {channel="mybmw:bev_rex:4711:i3:doors#trunk" }
String i3DriverWindow "Driver Window [%s]" <lock> (i3) {channel="mybmw:bev_rex:4711:i3:doors#win-driver-front" }
String i3DriverWindowRear "Driver Window Rear [%s]" <lock> (i3) {channel="mybmw:bev_rex:4711:i3:doors#win-driver-rear" }
String i3PassengerWindow "Passenger Window [%s]" <lock> (i3) {channel="mybmw:bev_rex:4711:i3:doors#win-passenger-front" }
String i3PassengerWindowRear "Passenger Window Rear [%s]" <lock> (i3) {channel="mybmw:bev_rex:4711:i3:doors#win-passenger-rear" }
String i3RearWindow "Rear Window [%s]" <lock> (i3) {channel="mybmw:bev_rex:4711:i3:doors#win-rear" }
String i3Sunroof "Sunroof [%s]" <lock> (i3) {channel="mybmw:bev_rex:4711:i3:doors#sunroof" }
String i3ServiceName "Service Name [%s]" <text> (i3) {channel="mybmw:bev_rex:4711:i3:service#name" }
String i3ServiceDetails "Service Details [%s]" <text> (i3) {channel="mybmw:bev_rex:4711:i3:service#details" }
Number:Length i3ServiceMileage "Service Mileage [%d %unit%]" <line> (i3) {channel="mybmw:bev_rex:4711:i3:service#mileage" }
DateTime i3ServiceDate "Service Date [%1$tb %1$tY]" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:service#date" }
String i3CCName "CheckControl Name [%s]" <text> (i3) {channel="mybmw:bev_rex:4711:i3:check#name" }
String i3CCDetails "CheckControl Details [%s]" <text> (i3) {channel="mybmw:bev_rex:4711:i3:check#details" }
String i3CCSeverity "CheckControl Severity [%s]" <line> (i3) {channel="mybmw:bev_rex:4711:i3:check#severity" }
Switch i3ChargeProfileClimate "Charge Profile Climatization" <temperature> (i3) {channel="mybmw:bev_rex:4711:i3:profile#climate" }
String i3ChargeProfileMode "Charge Profile Mode [%s]" <energy> (i3) {channel="mybmw:bev_rex:4711:i3:profile#mode" }
String i3ChargeProfilePrefs "Charge Profile Preference [%s]" <energy> (i3) {channel="mybmw:bev_rex:4711:i3:profile#prefs" }
String i3ChargeProfileCtrl "Charge Profile Control [%s]" <energy> (i3) {channel="mybmw:bev_rex:4711:i3:profile#control" }
Number i3ChargeProfileTarget "Charge Profile SoC Target [%s]" <energy> (i3) {channel="mybmw:bev_rex:4711:i3:profile#target" }
Switch i3ChargeProfileLimit "Charge Profile limited" <energy> (i3) {channel="mybmw:bev_rex:4711:i3:profile#limit" }
DateTime i3ChargeWindowStart "Charge Window Start [%1$tH:%1$tM]" <time> (i3) {channel="mybmw:bev_rex:4711:i3:profile#window-start" }
DateTime i3ChargeWindowEnd "Charge Window End [%1$tH:%1$tM]" <time> (i3) {channel="mybmw:bev_rex:4711:i3:profile#window-end" }
DateTime i3Timer1Departure "Timer 1 Departure [%1$tH:%1$tM]" <time> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer1-departure" }
String i3Timer1Days "Timer 1 Days [%s]" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer1-days" }
Switch i3Timer1DayMon "Timer 1 Monday" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer1-day-mon" }
Switch i3Timer1DayTue "Timer 1 Tuesday" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer1-day-tue" }
Switch i3Timer1DayWed "Timer 1 Wednesday" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer1-day-wed" }
Switch i3Timer1DayThu "Timer 1 Thursday" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer1-day-thu" }
Switch i3Timer1DayFri "Timer 1 Friday" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer1-day-fri" }
Switch i3Timer1DaySat "Timer 1 Saturday" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer1-day-sat" }
Switch i3Timer1DaySun "Timer 1 Sunday" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer1-day-sun" }
Switch i3Timer1Enabled "Timer 1 Enabled" <switch> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer1-enabled" }
DateTime i3Timer2Departure "Timer 2 Departure [%1$tH:%1$tM]" <time> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer2-departure" }
Switch i3Timer2DayMon "Timer 2 Monday" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer2-day-mon" }
Switch i3Timer2DayTue "Timer 2 Tuesday" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer2-day-tue" }
Switch i3Timer2DayWed "Timer 2 Wednesday" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer2-day-wed" }
Switch i3Timer2DayThu "Timer 2 Thursday" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer2-day-thu" }
Switch i3Timer2DayFri "Timer 2 Friday" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer2-day-fri" }
Switch i3Timer2DaySat "Timer 2 Saturday" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer2-day-sat" }
Switch i3Timer2DaySun "Timer 2 Sunday" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer2-day-sun" }
Switch i3Timer2Enabled "Timer 2 Enabled" <switch> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer2-enabled" }
DateTime i3Timer3Departure "Timer 3 Departure [%1$tH:%1$tM]" <time> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer3-departure" }
Switch i3Timer3DayMon "Timer 3 Monday" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer3-day-mon" }
Switch i3Timer3DayTue "Timer 3 Tuesday" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer3-day-tue" }
Switch i3Timer3DayWed "Timer 3 Wednesday" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer3-day-wed" }
Switch i3Timer3DayThu "Timer 3 Thursday" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer3-day-thu" }
Switch i3Timer3DayFri "Timer 3 Friday" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer3-day-fri" }
Switch i3Timer3DaySat "Timer 3 Saturday" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer3-day-sat" }
Switch i3Timer3DaySun "Timer 3 Sunday" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer3-day-sun" }
Switch i3Timer3Enabled "Timer 3 Enabled" <switch> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer3-enabled" }
DateTime i3Timer4Departure "Timer 4 Departure [%1$tH:%1$tM]" <time> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer4-departure" }
Switch i3Timer4DayMon "Timer 4 Monday" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer4-day-mon" }
Switch i3Timer4DayTue "Timer 4 Tuesday" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer4-day-tue" }
Switch i3Timer4DayWed "Timer 4 Wednesday" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer4-day-wed" }
Switch i3Timer4DayThu "Timer 4 Thursday" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer4-day-thu" }
Switch i3Timer4DayFri "Timer 4 Friday" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer4-day-fri" }
Switch i3Timer4DaySat "Timer 4 Saturday" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer4-day-sat" }
Switch i3Timer4DaySun "Timer 4 Sunday" <calendar> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer4-day-sun" }
Switch i3Timer4Enabled "Timer 4 Enabled" <switch> (i3) {channel="mybmw:bev_rex:4711:i3:profile#timer4-enabled" }
String i3StatisticsTitle "[%s]" <text> (i3) {channel="mybmw:bev_rex:4711:i3:statistic#title" }
Number:Energy i3StatisticsEnergy "Charged [%d %unit%]" <energy> (i3) {channel="mybmw:bev_rex:4711:i3:statistic#energy" }
Number i3StatisticsSessions "Sessions [%d]" <line> (i3) {channel="mybmw:bev_rex:4711:i3:statistic#sessions" }
String i3SessionTitle "[%s]" <text> (i3) {channel="mybmw:bev_rex:4711:i3:session#title" }
String i3SessionDetails "[%s]" <text> (i3) {channel="mybmw:bev_rex:4711:i3:session#subtitle" }
String i3SessionCharged "Energy Charged [%s]" <energy> (i3) {channel="mybmw:bev_rex:4711:i3:session#energy" }
String i3SessionProblems "Problems [%s]" <error> (i3) {channel="mybmw:bev_rex:4711:i3:session#issue" }
String i3SessionStatus "Session status [%s]" <text> (i3) {channel="mybmw:bev_rex:4711:i3:session#status" }
Number:Pressure i3TireFLCurrent "Tire Front Left [%.1f %unit%]" <text> (i3) {channel="mybmw:bev_rex:4711:i3:tires#fl-current" }
Number:Pressure i3TireFLTarget "Tire Front Left Target [%.1f %unit%]" <text> (i3) {channel="mybmw:bev_rex:4711:i3:tires#fl-target" }
Number:Pressure i3TireFRCurrent "Tire Front Right [%.1f %unit%]" <text> (i3) {channel="mybmw:bev_rex:4711:i3:tires#fr-current" }
Number:Pressure i3TireFRTarget "Tire Front Right Target [%.1f %unit%]" <text> (i3) {channel="mybmw:bev_rex:4711:i3:tires#fr-target" }
Number:Pressure i3TireRLCurrent "Tire Rear Left [%.1f %unit%]" <text> (i3) {channel="mybmw:bev_rex:4711:i3:tires#rl-current" }
Number:Pressure i3TireRLTarget "Tire Rear Left Target [%.1f %unit%]" <text> (i3) {channel="mybmw:bev_rex:4711:i3:tires#rl-target" }
Number:Pressure i3TireRRCurrent "Tire Rear Right [%.1f %unit%]" <text> (i3) {channel="mybmw:bev_rex:4711:i3:tires#rr-current" }
Number:Pressure i3TireRRTarget "Tire Rear Right Target [%.1f %unit%]" <text> (i3) {channel="mybmw:bev_rex:4711:i3:tires#rr-target" }
Image i3Image "Image" (i3) {channel="mybmw:bev_rex:4711:i3:image#png" }
String i3ImageViewport "Image Viewport [%s]" <zoom> (i3) {channel="mybmw:bev_rex:4711:i3:image#view" }
```
### Sitemap File
```
sitemap BMW label="BMW" {
Frame label="BMW i3" {
Image item=i3Image
}
Frame label="Status" {
Text item=i3DoorStatus
Text item=i3WindowStatus
Text item=i3LockStatus
Text item=i3NextServiceDate
Text item=i3NextServiceMileage
Text item=i3CheckControl
Text item=i3ChargingStatus
Text item=i3LastUpdate
}
Frame label="Range" {
Text item=i3Mileage
Text item=i3Range
Text item=i3RangeElectric
Text item=i3RangeFuel
Text item=i3BatterySoc
Text item=i3Fuel
Text item=i3RadiusElectric
Text item=i3RadiusHybrid
}
Frame label="Remote Services" {
Selection item=i3RemoteCommand
Text item=i3RemoteState
}
Frame label="Services" {
Selection item=i3ServiceName
Text item=i3ServiceDetails
Text item=i3ServiceMileage
Text item=i3ServiceDate
}
Frame label="CheckControl" {
Selection item=i3CCName
Text item=i3CCDetails
Text item=i3CCSeverity
}
Frame label="Door Details" {
Text item=i3DriverDoor visibility=[i3DriverDoor!="INVALID"]
Text item=i3DriverDoorRear visibility=[i3DriverDoorRear!="INVALID"]
Text item=i3PassengerDoor visibility=[i3PassengerDoor!="INVALID"]
Text item=i3PassengerDoorRear visibility=[i3PassengerDoorRear!="INVALID"]
Text item=i3Hood visibility=[i3Hood!="INVALID"]
Text item=i3Trunk visibility=[i3Trunk!="INVALID"]
Text item=i3DriverWindow visibility=[i3DriverWindow!="INVALID"]
Text item=i3DriverWindowRear visibility=[i3DriverWindowRear!="INVALID"]
Text item=i3PassengerWindow visibility=[i3PassengerWindow!="INVALID"]
Text item=i3PassengerWindowRear visibility=[i3PassengerWindowRear!="INVALID"]
Text item=i3RearWindow visibility=[i3RearWindow!="INVALID"]
Text item=i3Sunroof visibility=[i3Sunroof!="INVALID"]
}
Frame label="Location" {
Text item=i3Location
Text item=i3Heading
}
Frame label="Charge Profile" {
Switch item=i3ChargeProfileClimate
Selection item=i3ChargeProfileMode
Text item=i3ChargeWindowStart
Text item=i3ChargeWindowEnd
Text item=i3Timer1Departure
Switch item=i3Timer1DayMon
Switch item=i3Timer1DayTue
Switch item=i3Timer1DayWed
Switch item=i3Timer1DayThu
Switch item=i3Timer1DayFri
Switch item=i3Timer1DaySat
Switch item=i3Timer1DaySun
Switch item=i3Timer1Enabled
Text item=i3Timer2Departure
Switch item=i3Timer2DayMon
Switch item=i3Timer2DayTue
Switch item=i3Timer2DayWed
Switch item=i3Timer2DayThu
Switch item=i3Timer2DayFri
Switch item=i3Timer2DaySat
Switch item=i3Timer2DaySun
Switch item=i3Timer2Enabled
Text item=i3Timer3Departure
Switch item=i3Timer3DayMon
Switch item=i3Timer3DayTue
Switch item=i3Timer3DayWed
Switch item=i3Timer3DayThu
Switch item=i3Timer3DayFri
Switch item=i3Timer3DaySat
Switch item=i3Timer3DaySun
Switch item=i3Timer3Enabled
Text item=i3Timer4Departure
Switch item=i3Timer4DayMon
Switch item=i3Timer4DayTue
Switch item=i3Timer4DayWed
Switch item=i3Timer4DayThu
Switch item=i3Timer4DayFri
Switch item=i3Timer4DaySat
Switch item=i3Timer4DaySun
Switch item=i3Timer4Enabled
}
Frame label="Charge Statistics" {
Text item=i3StatisticsTitle
Text item=i3StatisticsEnergy
Text item=i3StatisticsSessions
}
Frame label="Charge Sessions" {
Selection item=i3SessionTitle
Text item=i3SessionDetails
Text item=i3SessionCharged
Text item=i3SessionProblems
Text item=i3SessionStatus
}
Frame label="Tires" {
Text item=i3TireFLCurrent
Text item=i3TireFLTarget
Text item=i3TireFRCurrent
Text item=i3TireFRTarget
Text item=i3TireRLCurrent
Text item=i3TireRLTarget
Text item=i3TireRRCurrent
Text item=i3TireRRTarget
}
Frame label="Image Properties" {
Selection item=i3ImageViewport
}
}
```
## Credits
This work is based on the project of [Bimmer Connected](https://github.com/bimmerconnected/bimmer_connected).

View File

@ -13,9 +13,14 @@
<config-description>
<parameter name="cellId" type="text" required="true">
<label>Cell-ID</label>
<description><![CDATA[ID of the area to retrieve weather warnings.
For a list of valid IDs look at https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_warncellids_csv.csv.
With the % sign at the end it is possible to query multiple cells at once. For example with 8111% are cells retrieved that starts with 8111.]]></description>
<description>ID of the area to retrieve weather warnings.
For a list of valid IDs look at
https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_warncellids_csv.csv, only
IDs starting with an 8
(exception for Berlin: 7) are supported.
With the % sign at the end it is possible to query multiple cells at once.
For example with 8111% are cells retrieved
that starts with 8111.</description>
</parameter>
<parameter name="refresh" type="integer" unit="min" min="15">
<default>30</default>
@ -25,9 +30,11 @@ With the % sign at the end it is possible to query multiple cells at once. For e
<parameter name="warningCount" type="integer" min="1" max="15">
<default>1</default>
<label>Number of Provided Warnings</label>
<description><![CDATA[Number of warnings to provide.
For each warning there will multiple channels.
The warnings are sorted by severity first and begin second so the first warning is always the one with the highest severity.]]></description>
<description>Number of warnings to provide.
For each warning there will multiple channels.
The warnings are sorted by
severity first and begin second so the first warning is always the one with the highest
severity.</description>
</parameter>
</config-description>
</thing-type>
@ -42,9 +49,10 @@ The warnings are sorted by severity first and begin second so the first warning
<channel-type id="warning">
<item-type>Switch</item-type>
<label>Warning</label>
<description><![CDATA[ON if a warning is present, OFF else.
While be switched to ON only after all other channels - except the trigger channel - are updated.
Will be switched to OFF before all other channels are updated to UNDEF.]]></description>
<description>ON if a warning is present, OFF else.
While be switched to ON only after all other channels - except the
trigger channel - are updated.
Will be switched to OFF before all other channels are updated to UNDEF.</description>
<state readOnly="true"/>
</channel-type>
<channel-type id="updated">

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<bridge-type id="account">
<label>MyBMW Account</label>
<description>Your BMW account data</description>
<config-description-ref uri="thing-type:mybmw:bridge"/>
</bridge-type>
</thing:thing-descriptions>

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<channel-group-type id="charge-statistic">
<label>Charging Statistics</label>
<description>Charging statistics of current month</description>
<channels>
<channel id="title" typeId="statistic-title-channel"/>
<channel id="energy" typeId="statistic-energy-channel"/>
<channel id="sessions" typeId="statistic-sessions-channel"/>
</channels>
</channel-group-type>
</thing:thing-descriptions>

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<channel-type id="statistic-title-channel">
<item-type>String</item-type>
<label>Charge Statistic Month</label>
</channel-type>
<channel-type id="statistic-energy-channel">
<item-type>Number:Energy</item-type>
<label>Energy Charged</label>
<description>Total energy charged in current month</description>
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="statistic-sessions-channel">
<item-type>Number</item-type>
<label>Charge Sessions</label>
<description>Number of charging sessions this month</description>
</channel-type>
</thing:thing-descriptions>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<channel-type id="checkcontrol-name-channel">
<item-type>String</item-type>
<label>CheckControl Description</label>
</channel-type>
<channel-type id="checkcontrol-details-channel">
<item-type>String</item-type>
<label>CheckControl Details</label>
</channel-type>
<channel-type id="checkcontrol-severity-channel">
<item-type>String</item-type>
<label>Severity Level</label>
</channel-type>
</thing:thing-descriptions>

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<channel-group-type id="check-control-values">
<label>Check Control Messages</label>
<description>Shows current active CheckControl messages</description>
<channels>
<channel id="name" typeId="checkcontrol-name-channel"/>
<channel id="details" typeId="checkcontrol-details-channel"/>
<channel id="severity" typeId="checkcontrol-severity-channel"/>
</channels>
</channel-group-type>
</thing:thing-descriptions>

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<channel-group-type id="conv-range-values">
<label>Range and Fuel Data</label>
<description>Provides Mileage, remaining range and fuel level values</description>
<channels>
<channel id="mileage" typeId="mileage-channel"/>
<channel id="fuel" typeId="range-fuel-channel"/>
<channel id="remaining-fuel" typeId="remaining-fuel-channel"/>
<channel id="radius-fuel" typeId="range-radius-fuel-channel"/>
</channels>
</channel-group-type>
</thing:thing-descriptions>

View File

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<channel-type id="driver-front-channel">
<item-type>String</item-type>
<label>Driver Door</label>
<state readOnly="true"/>
</channel-type>
<channel-type id="driver-rear-channel">
<item-type>String</item-type>
<label>Driver Door Rear</label>
<state readOnly="true"/>
</channel-type>
<channel-type id="passenger-front-channel">
<item-type>String</item-type>
<label>Passenger Door</label>
<state readOnly="true"/>
</channel-type>
<channel-type id="passenger-rear-channel">
<item-type>String</item-type>
<label>Passenger Door Rear</label>
<state readOnly="true"/>
</channel-type>
<channel-type id="hood-channel">
<item-type>String</item-type>
<label>Hood</label>
<state readOnly="true"/>
</channel-type>
<channel-type id="trunk-channel">
<item-type>String</item-type>
<label>Trunk</label>
<state readOnly="true"/>
</channel-type>
<channel-type id="window-driver-front-channel">
<item-type>String</item-type>
<label>Driver Window</label>
<state readOnly="true"/>
</channel-type>
<channel-type id="window-driver-rear-channel">
<item-type>String</item-type>
<label>Driver Rear Window</label>
<state readOnly="true"/>
</channel-type>
<channel-type id="window-passenger-front-channel">
<item-type>String</item-type>
<label>Passenger Window</label>
<state readOnly="true"/>
</channel-type>
<channel-type id="window-passenger-rear-channel">
<item-type>String</item-type>
<label>Passenger Rear Window</label>
<state readOnly="true"/>
</channel-type>
<channel-type id="sunroof-channel">
<item-type>String</item-type>
<label>Sunroof</label>
<state readOnly="true"/>
</channel-type>
</thing:thing-descriptions>

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<channel-group-type id="door-values">
<label>Detailed Door Status</label>
<description>Detailed Status of all Doors and Windows</description>
<channels>
<channel id="driver-front" typeId="driver-front-channel"/>
<channel id="driver-rear" typeId="driver-rear-channel"/>
<channel id="passenger-front" typeId="passenger-front-channel"/>
<channel id="passenger-rear" typeId="passenger-rear-channel"/>
<channel id="hood" typeId="hood-channel"/>
<channel id="trunk" typeId="trunk-channel"/>
<channel id="win-driver-front" typeId="window-driver-front-channel"/>
<channel id="win-driver-rear" typeId="window-driver-rear-channel"/>
<channel id="win-passenger-front" typeId="window-passenger-front-channel"/>
<channel id="win-passenger-rear" typeId="window-passenger-rear-channel"/>
<channel id="sunroof" typeId="sunroof-channel"/>
</channels>
</channel-group-type>
</thing:thing-descriptions>

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<channel-group-type id="ev-range-values">
<label>Range and Charge Data</label>
<description>Provides Mileage, remaining range and charge level values</description>
<channels>
<channel id="mileage" typeId="mileage-channel"/>
<channel id="electric" typeId="range-electric-channel"/>
<channel id="radius-electric" typeId="range-radius-electric-channel"/>
<channel id="soc" typeId="soc-channel"/>
</channels>
</channel-group-type>
</thing:thing-descriptions>

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<channel-group-type id="ev-vehicle-status">
<label>Vehicle Status</label>
<description>Overall vehicle status</description>
<channels>
<channel id="doors" typeId="doors-channel"/>
<channel id="windows" typeId="windows-channel"/>
<channel id="lock" typeId="lock-channel"/>
<channel id="service-date" typeId="next-service-date-channel"/>
<channel id="service-mileage" typeId="next-service-mileage-channel"/>
<channel id="check-control" typeId="check-control-channel"/>
<channel id="plug-connection" typeId="plug-connection-channel"/>
<channel id="charge" typeId="charging-status-channel"/>
<channel id="charge-info" typeId="charging-info-channel"/>
<channel id="motion" typeId="motion-channel"/>
<channel id="last-update" typeId="last-update-channel"/>
<channel id="raw" typeId="raw-channel"/>
</channels>
</channel-group-type>
</thing:thing-descriptions>

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<channel-group-type id="hybrid-range-values">
<label>Range, Charge / Fuel Data</label>
<description>Provides mileage, remaining fuel and range data for hybrid vehicles</description>
<channels>
<channel id="mileage" typeId="mileage-channel"/>
<channel id="electric" typeId="range-electric-channel"/>
<channel id="fuel" typeId="range-fuel-channel"/>
<channel id="hybrid" typeId="range-hybrid-channel"/>
<channel id="radius-electric" typeId="range-radius-electric-channel"/>
<channel id="radius-fuel" typeId="range-radius-fuel-channel"/>
<channel id="radius-hybrid" typeId="range-radius-hybrid-channel"/>
<channel id="soc" typeId="soc-channel"/>
<channel id="remaining-fuel" typeId="remaining-fuel-channel"/>
</channels>
</channel-group-type>
</thing:thing-descriptions>

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<channel-group-type id="image-values">
<label>Vehicle Image</label>
<description>Provides an image of your vehicle</description>
<channels>
<channel id="png" typeId="png-channel"/>
<channel id="view" typeId="image-view-channel"/>
</channels>
</channel-group-type>
</thing:thing-descriptions>

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<channel-type id="png-channel">
<item-type>Image</item-type>
<label>Rendered Vehicle Image</label>
<state readOnly="true"/>
</channel-type>
<channel-type id="image-view-channel">
<item-type>String</item-type>
<label>Image Viewport</label>
<command>
<options>
<option value="VehicleStatus">Front Side View</option>
<option value="VehicleInfo">Front View</option>
<option value="ChargingHistory">Side View</option>
<option value="Default">Default View</option>
</options>
</command>
</channel-type>
</thing:thing-descriptions>

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<channel-group-type id="location-values">
<label>Vehicle Location</label>
<description>Coordinates and heading of the vehicle</description>
<channels>
<channel id="gps" typeId="gps-channel"/>
<channel id="heading" typeId="heading-channel"/>
<channel id="address" typeId="address-channel"/>
</channels>
</channel-group-type>
</thing:thing-descriptions>

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<channel-type id="gps-channel">
<item-type>Location</item-type>
<label>GPS Coordinates</label>
</channel-type>
<channel-type id="heading-channel">
<item-type>Number:Angle</item-type>
<label>Heading Angle</label>
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="address-channel">
<item-type>String</item-type>
<label>Address</label>
</channel-type>
</thing:thing-descriptions>

View File

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<channel-group-type id="profile-values">
<label>Electric Charging Profile</label>
<description>Scheduled charging profiles</description>
<channels>
<channel id="climate" typeId="profile-climate-channel"/>
<channel id="mode" typeId="profile-mode-channel"/>
<channel id="prefs" typeId="profile-prefs-channel"/>
<channel id="control" typeId="profile-control-channel"/>
<channel id="target" typeId="profile-target-channel"/>
<channel id="limit" typeId="profile-limit-channel"/>
<channel id="window-start" typeId="window-start-channel"/>
<channel id="window-end" typeId="window-end-channel"/>
<channel id="timer1-departure" typeId="timer1-departure-channel"/>
<channel id="timer1-day-mon" typeId="timer1-day-mon-channel"/>
<channel id="timer1-day-tue" typeId="timer1-day-tue-channel"/>
<channel id="timer1-day-wed" typeId="timer1-day-wed-channel"/>
<channel id="timer1-day-thu" typeId="timer1-day-thu-channel"/>
<channel id="timer1-day-fri" typeId="timer1-day-fri-channel"/>
<channel id="timer1-day-sat" typeId="timer1-day-sat-channel"/>
<channel id="timer1-day-sun" typeId="timer1-day-sun-channel"/>
<channel id="timer1-enabled" typeId="timer1-enabled-channel"/>
<channel id="timer2-departure" typeId="timer2-departure-channel"/>
<channel id="timer2-day-mon" typeId="timer2-day-mon-channel"/>
<channel id="timer2-day-tue" typeId="timer2-day-tue-channel"/>
<channel id="timer2-day-wed" typeId="timer2-day-wed-channel"/>
<channel id="timer2-day-thu" typeId="timer2-day-thu-channel"/>
<channel id="timer2-day-fri" typeId="timer2-day-fri-channel"/>
<channel id="timer2-day-sat" typeId="timer2-day-sat-channel"/>
<channel id="timer2-day-sun" typeId="timer2-day-sun-channel"/>
<channel id="timer2-enabled" typeId="timer2-enabled-channel"/>
<channel id="timer3-departure" typeId="timer3-departure-channel"/>
<channel id="timer3-day-mon" typeId="timer3-day-mon-channel"/>
<channel id="timer3-day-tue" typeId="timer3-day-tue-channel"/>
<channel id="timer3-day-wed" typeId="timer3-day-wed-channel"/>
<channel id="timer3-day-thu" typeId="timer3-day-thu-channel"/>
<channel id="timer3-day-fri" typeId="timer3-day-fri-channel"/>
<channel id="timer3-day-sat" typeId="timer3-day-sat-channel"/>
<channel id="timer3-day-sun" typeId="timer3-day-sun-channel"/>
<channel id="timer3-enabled" typeId="timer3-enabled-channel"/>
<channel id="timer4-departure" typeId="timer4-departure-channel"/>
<channel id="timer4-day-mon" typeId="timer4-day-mon-channel"/>
<channel id="timer4-day-tue" typeId="timer4-day-tue-channel"/>
<channel id="timer4-day-wed" typeId="timer4-day-wed-channel"/>
<channel id="timer4-day-thu" typeId="timer4-day-thu-channel"/>
<channel id="timer4-day-fri" typeId="timer4-day-fri-channel"/>
<channel id="timer4-day-sat" typeId="timer4-day-sat-channel"/>
<channel id="timer4-day-sun" typeId="timer4-day-sun-channel"/>
<channel id="timer4-enabled" typeId="timer4-enabled-channel"/>
</channels>
</channel-group-type>
</thing:thing-descriptions>

View File

@ -0,0 +1,248 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<channel-type id="profile-climate-channel">
<item-type>Switch</item-type>
<label>A/C at Departure Time</label>
</channel-type>
<channel-type id="profile-mode-channel">
<item-type>String</item-type>
<label>Charge Mode</label>
<description>Mode for selecting immediate or delyed charging</description>
<command>
<options>
<option value="immediateCharging">Immediate Charging</option>
<option value="delayedCharging">Use Charging Preference</option>
</options>
</command>
</channel-type>
<channel-type id="profile-prefs-channel">
<item-type>String</item-type>
<label>Charge Preferences</label>
<description>Preferences for delayed charging</description>
<command>
<options>
<option value="noPreSelection">No Selection</option>
<option value="chargingWindow">Charging Window</option>
</options>
</command>
</channel-type>
<channel-type id="profile-control-channel">
<item-type>String</item-type>
<label>Charging Plan</label>
<description>Charging plan selection</description>
<command>
<options>
<option value="weeklyPlanner">Weekly Schedule</option>
</options>
</command>
</channel-type>
<channel-type id="profile-target-channel">
<item-type>Number</item-type>
<label>SOC Target</label>
<description>SOC charging target </description>
</channel-type>
<channel-type id="profile-limit-channel">
<item-type>Switch</item-type>
<label>Charging Energy Limited</label>
<description>Limited charging activated</description>
</channel-type>
<channel-type id="window-start-channel">
<item-type>DateTime</item-type>
<label>Window Start Time</label>
<description>Start time of charging window</description>
<state pattern="%1$tH:%1$tM" readOnly="false"/>
</channel-type>
<channel-type id="window-end-channel">
<item-type>DateTime</item-type>
<label>Window End Time</label>
<description>End time of charging window</description>
<state pattern="%1$tH:%1$tM" readOnly="false"/>
</channel-type>
<channel-type id="timer1-departure-channel">
<item-type>DateTime</item-type>
<label>T1 Departure Time</label>
<description>Departure time for regular schedule timer 1</description>
<state pattern="%1$tH:%1$tM" readOnly="false"/>
</channel-type>
<channel-type id="timer1-day-mon-channel">
<item-type>Switch</item-type>
<label>T1 Monday</label>
<description>Monday scheduled for timer 1</description>
</channel-type>
<channel-type id="timer1-day-tue-channel">
<item-type>Switch</item-type>
<label>T1 Tuesday</label>
<description>Tuesday scheduled for timer 1</description>
</channel-type>
<channel-type id="timer1-day-wed-channel">
<item-type>Switch</item-type>
<label>T1 Wednesday</label>
<description>Wednesday scheduled for timer 1</description>
</channel-type>
<channel-type id="timer1-day-thu-channel">
<item-type>Switch</item-type>
<label>T1 Thursday</label>
<description>Thursday scheduled for timer 1</description>
</channel-type>
<channel-type id="timer1-day-fri-channel">
<item-type>Switch</item-type>
<label>T1 Friday</label>
<description>Friday scheduled for timer 1</description>
</channel-type>
<channel-type id="timer1-day-sat-channel">
<item-type>Switch</item-type>
<label>T1 Saturday</label>
<description>Saturday scheduled for timer 1</description>
</channel-type>
<channel-type id="timer1-day-sun-channel">
<item-type>Switch</item-type>
<label>T1 Sunday</label>
<description>Sunday scheduled for timer 1</description>
</channel-type>
<channel-type id="timer1-enabled-channel">
<item-type>Switch</item-type>
<label>T1 Enabled</label>
<description>Timer 1 enabled</description>
</channel-type>
<channel-type id="timer2-departure-channel">
<item-type>DateTime</item-type>
<label>T2 Departure Time</label>
<description>Departure time for regular schedule timer 2</description>
<state pattern="%1$tH:%1$tM" readOnly="false"/>
</channel-type>
<channel-type id="timer2-day-mon-channel">
<item-type>Switch</item-type>
<label>T2 Monday</label>
<description>Monday scheduled for timer 2</description>
</channel-type>
<channel-type id="timer2-day-tue-channel">
<item-type>Switch</item-type>
<label>T2 Tuesday</label>
<description>Tuesday scheduled for timer 2</description>
</channel-type>
<channel-type id="timer2-day-wed-channel">
<item-type>Switch</item-type>
<label>T2 Wednesday</label>
<description>Wednesday scheduled for timer 2</description>
</channel-type>
<channel-type id="timer2-day-thu-channel">
<item-type>Switch</item-type>
<label>T2 Thursday</label>
<description>Thursday scheduled for timer 2</description>
</channel-type>
<channel-type id="timer2-day-fri-channel">
<item-type>Switch</item-type>
<label>T2 Friday</label>
<description>Friday scheduled for timer 2</description>
</channel-type>
<channel-type id="timer2-day-sat-channel">
<item-type>Switch</item-type>
<label>T2 Saturday</label>
<description>Saturday scheduled for timer 2</description>
</channel-type>
<channel-type id="timer2-day-sun-channel">
<item-type>Switch</item-type>
<label>T2 Sunday</label>
<description>Sunday scheduled for timer 2</description>
</channel-type>
<channel-type id="timer2-enabled-channel">
<item-type>Switch</item-type>
<label>T2 Enabled</label>
<description>Timer 2 enabled</description>
</channel-type>
<channel-type id="timer3-departure-channel">
<item-type>DateTime</item-type>
<label>T3 Departure Time</label>
<description>Departure time for regular schedule timer 3</description>
<state pattern="%1$tH:%1$tM" readOnly="false"/>
</channel-type>
<channel-type id="timer3-day-mon-channel">
<item-type>Switch</item-type>
<label>T3 Monday</label>
<description>Monday scheduled for timer 3</description>
</channel-type>
<channel-type id="timer3-day-tue-channel">
<item-type>Switch</item-type>
<label>T3 Tuesday</label>
<description>Tuesday scheduled for timer 3</description>
</channel-type>
<channel-type id="timer3-day-wed-channel">
<item-type>Switch</item-type>
<label>T3 Wednesday</label>
<description>Wednesday scheduled for timer 3</description>
</channel-type>
<channel-type id="timer3-day-thu-channel">
<item-type>Switch</item-type>
<label>T3 Thursday</label>
<description>Thursday scheduled for timer 3</description>
</channel-type>
<channel-type id="timer3-day-fri-channel">
<item-type>Switch</item-type>
<label>T3 Friday</label>
<description>Friday scheduled for timer 3</description>
</channel-type>
<channel-type id="timer3-day-sat-channel">
<item-type>Switch</item-type>
<label>T3 Saturday</label>
<description>Saturday scheduled for timer 3</description>
</channel-type>
<channel-type id="timer3-day-sun-channel">
<item-type>Switch</item-type>
<label>T3 Sunday</label>
<description>Sunday scheduled for timer 3</description>
</channel-type>
<channel-type id="timer3-enabled-channel">
<item-type>Switch</item-type>
<label>T3 Enabled</label>
<description>Timer 3 enabled</description>
</channel-type>
<channel-type id="timer4-departure-channel">
<item-type>DateTime</item-type>
<label>T4 Departure Time</label>
<description>Departure time for regular schedule timer 4</description>
<state pattern="%1$tH:%1$tM" readOnly="false"/>
</channel-type>
<channel-type id="timer4-day-mon-channel">
<item-type>Switch</item-type>
<label>T4 Monday</label>
<description>Monday scheduled for timer 4</description>
</channel-type>
<channel-type id="timer4-day-tue-channel">
<item-type>Switch</item-type>
<label>T4 Tuesday</label>
<description>Tuesday scheduled for timer 4</description>
</channel-type>
<channel-type id="timer4-day-wed-channel">
<item-type>Switch</item-type>
<label>T4 Wednesday</label>
<description>Wednesday scheduled for timer 4</description>
</channel-type>
<channel-type id="timer4-day-thu-channel">
<item-type>Switch</item-type>
<label>T4 Thursday</label>
<description>Thursday scheduled for timer 4</description>
</channel-type>
<channel-type id="timer4-day-fri-channel">
<item-type>Switch</item-type>
<label>T4 Friday</label>
<description>Friday scheduled for timer 4</description>
</channel-type>
<channel-type id="timer4-day-sat-channel">
<item-type>Switch</item-type>
<label>T4 Saturday</label>
<description>Saturday scheduled for timer 4</description>
</channel-type>
<channel-type id="timer4-day-sun-channel">
<item-type>Switch</item-type>
<label>T4 Sunday</label>
<description>Sunday scheduled for timer 4</description>
</channel-type>
<channel-type id="timer4-enabled-channel">
<item-type>Switch</item-type>
<label>T4 Enabled</label>
<description>Timer 4 enabled</description>
</channel-type>
</thing:thing-descriptions>

View File

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<channel-type id="mileage-channel">
<item-type>Number:Length</item-type>
<label>Total Distance Driven</label>
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="range-electric-channel">
<item-type>Number:Length</item-type>
<label>Electric Range</label>
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="range-fuel-channel">
<item-type>Number:Length</item-type>
<label>Fuel Range</label>
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="range-hybrid-channel">
<item-type>Number:Length</item-type>
<label>Hybrid Range</label>
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="soc-channel">
<item-type>Number:Dimensionless</item-type>
<label>Battery Charge Level</label>
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="remaining-fuel-channel">
<item-type>Number:Volume</item-type>
<label>Remaining Fuel</label>
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="range-radius-electric-channel">
<item-type>Number:Length</item-type>
<label>Electric Range Radius</label>
<state pattern="%.0f %unit%" readOnly="true"/>
</channel-type>
<channel-type id="range-radius-fuel-channel">
<item-type>Number:Length</item-type>
<label>Fuel Range Radius</label>
<state pattern="%.0f %unit%" readOnly="true"/>
</channel-type>
<channel-type id="range-radius-hybrid-channel">
<item-type>Number:Length</item-type>
<label>Hybrid Range Radius</label>
<state pattern="%.0f %unit%" readOnly="true"/>
</channel-type>
</thing:thing-descriptions>

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<channel-group-type id="remote-services">
<label>Remote Services</label>
<description>Remote control of the vehicle</description>
<channels>
<channel id="command" typeId="remote-command-channel"/>
<channel id="state" typeId="remote-state-channel"/>
</channels>
</channel-group-type>
</thing:thing-descriptions>

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<channel-type id="remote-command-channel">
<item-type>String</item-type>
<label>Remote Command</label>
</channel-type>
<channel-type id="remote-state-channel">
<item-type>String</item-type>
<label>Service Execution State</label>
<state readOnly="true"/>
</channel-type>
</thing:thing-descriptions>

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<channel-type id="service-name-channel">
<item-type>String</item-type>
<label>Service Name</label>
</channel-type>
<channel-type id="service-details-channel">
<item-type>String</item-type>
<label>Service Details</label>
</channel-type>
<channel-type id="service-date-channel">
<item-type>DateTime</item-type>
<label>Service Date</label>
<state pattern="%1$tb %1$tY"/>
</channel-type>
<channel-type id="service-mileage-channel">
<item-type>Number:Length</item-type>
<label>Mileage till Service</label>
<state pattern="%d %unit%"/>
</channel-type>
</thing:thing-descriptions>

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<channel-group-type id="service-values">
<label>Vehicle Services</label>
<description>Future vehicle service schedules</description>
<channels>
<channel id="name" typeId="service-name-channel"/>
<channel id="details" typeId="service-details-channel"/>
<channel id="date" typeId="service-date-channel"/>
<channel id="mileage" typeId="service-mileage-channel"/>
</channels>
</channel-group-type>
</thing:thing-descriptions>

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<channel-group-type id="session-values">
<label>Electric Charging Sessions</label>
<description>Past charging sessions</description>
<channels>
<channel id="title" typeId="session-title-channel"/>
<channel id="subtitle" typeId="session-subtitle-channel"/>
<channel id="energy" typeId="session-energy-channel"/>
<channel id="issue" typeId="session-issue-channel"/>
<channel id="status" typeId="session-status-channel"/>
</channels>
</channel-group-type>
</thing:thing-descriptions>

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<channel-type id="session-title-channel">
<item-type>String</item-type>
<label>Session Title</label>
</channel-type>
<channel-type id="session-subtitle-channel">
<item-type>String</item-type>
<label>Session Details</label>
</channel-type>
<channel-type id="session-energy-channel">
<item-type>String</item-type>
<label>Charged Energy in Session</label>
</channel-type>
<channel-type id="session-issue-channel">
<item-type>String</item-type>
<label>Issues during Session</label>
</channel-type>
<channel-type id="session-status-channel">
<item-type>String</item-type>
<label>Session Status</label>
</channel-type>
</thing:thing-descriptions>

View File

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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="bev">
<supported-bridge-type-refs>
<bridge-type-ref id="account"/>
</supported-bridge-type-refs>
<label>Electric Vehicle</label>
<description>Battery Electric Vehicle (BEV)</description>
<channel-groups>
<channel-group id="status" typeId="ev-vehicle-status"/>
<channel-group id="doors" typeId="door-values"/>
<channel-group id="range" typeId="ev-range-values"/>
<channel-group id="check" typeId="check-control-values"/>
<channel-group id="service" typeId="service-values"/>
<channel-group id="location" typeId="location-values"/>
<channel-group id="remote" typeId="remote-services"/>
<channel-group id="profile" typeId="profile-values"/>
<channel-group id="statistic" typeId="charge-statistic"/>
<channel-group id="session" typeId="session-values"/>
<channel-group id="tires" typeId="tire-pressures"/>
<channel-group id="image" typeId="image-values"/>
</channel-groups>
<representation-property>vin</representation-property>
<config-description-ref uri="thing-type:mybmw:vehicle"/>
</thing-type>
</thing:thing-descriptions>

View File

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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="bev_rex">
<supported-bridge-type-refs>
<bridge-type-ref id="account"/>
</supported-bridge-type-refs>
<label>Electric Vehicle with REX</label>
<description>Battery Electric Vehicle with Range Extender (BEV_REX)</description>
<channel-groups>
<channel-group id="status" typeId="ev-vehicle-status"/>
<channel-group id="doors" typeId="door-values"/>
<channel-group id="range" typeId="hybrid-range-values"/>
<channel-group id="check" typeId="check-control-values"/>
<channel-group id="service" typeId="service-values"/>
<channel-group id="location" typeId="location-values"/>
<channel-group id="remote" typeId="remote-services"/>
<channel-group id="profile" typeId="profile-values"/>
<channel-group id="statistic" typeId="charge-statistic"/>
<channel-group id="session" typeId="session-values"/>
<channel-group id="tires" typeId="tire-pressures"/>
<channel-group id="image" typeId="image-values"/>
</channel-groups>
<representation-property>vin</representation-property>
<config-description-ref uri="thing-type:mybmw:vehicle"/>
</thing-type>
</thing:thing-descriptions>

View File

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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="conv">
<supported-bridge-type-refs>
<bridge-type-ref id="account"/>
</supported-bridge-type-refs>
<label>Conventional Vehicle</label>
<description>Conventional Fuel Vehicle (CONV)</description>
<channel-groups>
<channel-group id="status" typeId="vehicle-status"/>
<channel-group id="doors" typeId="door-values"/>
<channel-group id="range" typeId="conv-range-values"/>
<channel-group id="check" typeId="check-control-values"/>
<channel-group id="service" typeId="service-values"/>
<channel-group id="location" typeId="location-values"/>
<channel-group id="remote" typeId="remote-services"/>
<channel-group id="tires" typeId="tire-pressures"/>
<channel-group id="image" typeId="image-values"/>
</channel-groups>
<representation-property>vin</representation-property>
<config-description-ref uri="thing-type:mybmw:vehicle"/>
</thing-type>
</thing:thing-descriptions>

View File

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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="phev">
<supported-bridge-type-refs>
<bridge-type-ref id="account"/>
</supported-bridge-type-refs>
<label>Plug-In-Hybrid Electric Vehicle</label>
<description>Conventional Fuel Vehicle with supporting Electric Engine (PHEV)</description>
<channel-groups>
<channel-group id="status" typeId="ev-vehicle-status"/>
<channel-group id="doors" typeId="door-values"/>
<channel-group id="range" typeId="hybrid-range-values"/>
<channel-group id="check" typeId="check-control-values"/>
<channel-group id="service" typeId="service-values"/>
<channel-group id="location" typeId="location-values"/>
<channel-group id="remote" typeId="remote-services"/>
<channel-group id="profile" typeId="profile-values"/>
<channel-group id="statistic" typeId="charge-statistic"/>
<channel-group id="session" typeId="session-values"/>
<channel-group id="tires" typeId="tire-pressures"/>
<channel-group id="image" typeId="image-values"/>
</channel-groups>
<representation-property>vin</representation-property>
<config-description-ref uri="thing-type:mybmw:vehicle"/>
</thing-type>
</thing:thing-descriptions>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<channel-group-type id="tire-pressures">
<label>Tire Pressure</label>
<description>Current and wanted pressure for all tires</description>
<channels>
<channel id="fl-current" typeId="front-left-current-channel"/>
<channel id="fl-target" typeId="front-left-target-channel"/>
<channel id="fr-current" typeId="front-right-current-channel"/>
<channel id="fr-target" typeId="front-right-target-channel"/>
<channel id="rl-current" typeId="rear-left-current-channel"/>
<channel id="rl-target" typeId="rear-left-target-channel"/>
<channel id="rr-current" typeId="rear-right-current-channel"/>
<channel id="rr-target" typeId="rear-right-target-channel"/>
</channels>
</channel-group-type>
</thing:thing-descriptions>

View File

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<channel-type id="front-left-current-channel">
<item-type>Number:Pressure</item-type>
<label>Tire Pressure Front Left</label>
<state pattern="%.1f %unit%" readOnly="true"/>
</channel-type>
<channel-type id="front-left-target-channel">
<item-type>Number:Pressure</item-type>
<label>Tire Pressure Front Left Target</label>
<state pattern="%.1f %unit%" readOnly="true"/>
</channel-type>
<channel-type id="front-right-current-channel">
<item-type>Number:Pressure</item-type>
<label>Tire Pressure Front Right</label>
<state pattern="%.1f %unit%" readOnly="true"/>
</channel-type>
<channel-type id="front-right-target-channel">
<item-type>Number:Pressure</item-type>
<label>Tire Pressure Front Right Target</label>
<state pattern="%.1f %unit%" readOnly="true"/>
</channel-type>
<channel-type id="rear-left-current-channel">
<item-type>Number:Pressure</item-type>
<label>Tire Pressure Rear Left</label>
<state pattern="%.1f %unit%" readOnly="true"/>
</channel-type>
<channel-type id="rear-left-target-channel">
<item-type>Number:Pressure</item-type>
<label>Tire Pressure Rear Left Target</label>
<state pattern="%.1f %unit%" readOnly="true"/>
</channel-type>
<channel-type id="rear-right-current-channel">
<item-type>Number:Pressure</item-type>
<label>Tire Pressure Rear Right</label>
<state pattern="%.1f %unit%" readOnly="true"/>
</channel-type>
<channel-type id="rear-right-target-channel">
<item-type>Number:Pressure</item-type>
<label>Tire Pressure Rear Right Target</label>
<state pattern="%.1f %unit%" readOnly="true"/>
</channel-type>
</thing:thing-descriptions>

View File

@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<channel-type id="doors-channel">
<item-type>String</item-type>
<label>Overall Door Status</label>
<state readOnly="true"/>
</channel-type>
<channel-type id="windows-channel">
<item-type>String</item-type>
<label>Overall Window Status</label>
<state readOnly="true"/>
</channel-type>
<channel-type id="lock-channel">
<item-type>String</item-type>
<label>Doors Locked</label>
</channel-type>
<channel-type id="next-service-date-channel">
<item-type>DateTime</item-type>
<label>Next Service Date</label>
<state pattern="%1$tb %1$tY" readOnly="true"/>
</channel-type>
<channel-type id="next-service-mileage-channel">
<item-type>Number:Length</item-type>
<label>Mileage Till Next Service</label>
<state pattern="%d %unit%" readOnly="true"/>
</channel-type>
<channel-type id="check-control-channel">
<item-type>String</item-type>
<label>Check Control</label>
<state readOnly="true"/>
</channel-type>
<channel-type id="charging-status-channel">
<item-type>String</item-type>
<label>Charging Status</label>
<state readOnly="true"/>
</channel-type>
<channel-type id="charging-info-channel">
<item-type>String</item-type>
<label>Charging Information</label>
<state readOnly="true"/>
</channel-type>
<channel-type id="plug-connection-channel">
<item-type>String</item-type>
<label>Plug Connection Status</label>
<state readOnly="true"/>
</channel-type>
<channel-type id="motion-channel">
<item-type>Switch</item-type>
<label>Motion Status</label>
<state readOnly="true"/>
</channel-type>
<channel-type id="last-update-channel">
<item-type>DateTime</item-type>
<label>Last Status Timestamp</label>
<state pattern="%1$tA, %1$td.%1$tm. %1$tH:%1$tM" readOnly="true"/>
</channel-type>
<channel-type id="raw-channel" advanced="true">
<item-type>String</item-type>
<label>Raw Data</label>
</channel-type>
</thing:thing-descriptions>

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="mybmw"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<channel-group-type id="vehicle-status">
<label>Vehicle Status</label>
<description>Overall vehicle status</description>
<channels>
<channel id="doors" typeId="doors-channel"/>
<channel id="windows" typeId="windows-channel"/>
<channel id="lock" typeId="lock-channel"/>
<channel id="service-date" typeId="next-service-date-channel"/>
<channel id="service-mileage" typeId="next-service-mileage-channel"/>
<channel id="check-control" typeId="check-control-channel"/>
<channel id="motion" typeId="motion-channel"/>
<channel id="last-update" typeId="last-update-channel"/>
<channel id="raw" typeId="raw-channel"/>
</channels>
</channel-group-type>
</thing:thing-descriptions>