From 704000eda968da56f71bf58dbd94532a79904956 Mon Sep 17 00:00:00 2001 From: Bernd Weymann Date: Tue, 23 Aug 2022 22:42:39 +0200 Subject: [PATCH] [mercedesme] Initial contribution (#13044) Signed-off-by: Bernd Weymann --- bom/openhab-addons/pom.xml | 5 + bundles/org.openhab.binding.mercedesme/NOTICE | 13 + .../org.openhab.binding.mercedesme/README.md | 503 +++++++++++++++ .../doc/CallbackUrl_Page.png | Bin 0 -> 15947 bytes .../doc/ImageRestrictions.png | Bin 0 -> 2831 bytes .../doc/ImageView-CommandOptions.png | Bin 0 -> 86776 bytes .../doc/MBAccessRequest.png | Bin 0 -> 240678 bytes .../doc/MBDeveloper-Credentials.png | Bin 0 -> 24010 bytes .../doc/MBDeveloper-Subscriptions.png | Bin 0 -> 20366 bytes .../doc/MercedesMeConfiguration.png | Bin 0 -> 33113 bytes .../org.openhab.binding.mercedesme/pom.xml | 27 + .../src/main/feature/feature.xml | 9 + .../mercedesme/internal/Constants.java | 98 +++ .../MercedesMeCommandOptionProvider.java | 41 ++ .../internal/MercedesMeHandlerFactory.java | 105 ++++ .../MercedesMeStateOptionProvider.java | 41 ++ .../internal/config/AccountConfiguration.java | 67 ++ .../internal/config/VehicleConfiguration.java | 37 ++ .../internal/handler/AccountHandler.java | 165 +++++ .../internal/handler/VehicleHandler.java | 579 ++++++++++++++++++ .../internal/server/CallbackServer.java | 183 ++++++ .../internal/server/CallbackServlet.java | 73 +++ .../mercedesme/internal/server/Utils.java | 88 +++ .../internal/utils/ChannelStateMap.java | 61 ++ .../mercedesme/internal/utils/Mapper.java | 237 +++++++ .../main/resources/OH-INF/binding/binding.xml | 9 + .../resources/OH-INF/config/bev-config.xml | 57 ++ .../resources/OH-INF/config/bridge-config.xml | 56 ++ .../resources/OH-INF/config/conv-config.xml | 57 ++ .../resources/OH-INF/config/hybrid-config.xml | 61 ++ .../OH-INF/i18n/mercedesme.properties | 218 +++++++ .../resources/OH-INF/thing/bridge-account.xml | 12 + .../OH-INF/thing/door-channel-types.xml | 62 ++ .../resources/OH-INF/thing/doors-group.xml | 20 + .../OH-INF/thing/image-channel-types.xml | 19 + .../resources/OH-INF/thing/image-group.xml | 14 + .../OH-INF/thing/light-channel-types.xml | 44 ++ .../resources/OH-INF/thing/lights-group.xml | 18 + .../OH-INF/thing/location-channel-group.xml | 14 + .../OH-INF/thing/location-channel-types.xml | 16 + .../OH-INF/thing/lock-channel-types.xml | 33 + .../resources/OH-INF/thing/lock-group.xml | 16 + .../OH-INF/thing/range-channel-types.xml | 76 +++ .../OH-INF/thing/range-conv-channel-group.xml | 19 + .../OH-INF/thing/range-ev-channel-group.xml | 19 + .../thing/range-hybrid-channel-group.xml | 26 + .../main/resources/OH-INF/thing/thing-bev.xml | 27 + .../OH-INF/thing/thing-combustion.xml | 27 + .../resources/OH-INF/thing/thing-hybrid.xml | 27 + .../OH-INF/thing/window-channel-types.xml | 67 ++ .../resources/OH-INF/thing/window-group.xml | 17 + .../binding/mercedesme/ConfigurationTest.java | 71 +++ .../openhab/binding/mercedesme/ImageTest.java | 57 ++ .../openhab/binding/mercedesme/JsonTest.java | 250 ++++++++ .../src/test/resources/eqa-light-sample.json | 62 ++ .../src/test/resources/evstatus.json | 14 + .../src/test/resources/fuel.json | 14 + .../src/test/resources/image/ext.json | 13 + .../src/test/resources/invalid-key.json | 8 + .../src/test/resources/invalid-timestamp.json | 7 + .../src/test/resources/lock.json | 26 + .../src/test/resources/odo.json | 8 + .../src/test/resources/status-resources.json | 82 +++ .../src/test/resources/status.json | 98 +++ bundles/pom.xml | 1 + 65 files changed, 4074 insertions(+) create mode 100644 bundles/org.openhab.binding.mercedesme/NOTICE create mode 100644 bundles/org.openhab.binding.mercedesme/README.md create mode 100644 bundles/org.openhab.binding.mercedesme/doc/CallbackUrl_Page.png create mode 100644 bundles/org.openhab.binding.mercedesme/doc/ImageRestrictions.png create mode 100644 bundles/org.openhab.binding.mercedesme/doc/ImageView-CommandOptions.png create mode 100644 bundles/org.openhab.binding.mercedesme/doc/MBAccessRequest.png create mode 100644 bundles/org.openhab.binding.mercedesme/doc/MBDeveloper-Credentials.png create mode 100644 bundles/org.openhab.binding.mercedesme/doc/MBDeveloper-Subscriptions.png create mode 100644 bundles/org.openhab.binding.mercedesme/doc/MercedesMeConfiguration.png create mode 100644 bundles/org.openhab.binding.mercedesme/pom.xml create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/feature/feature.xml create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/Constants.java create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/MercedesMeCommandOptionProvider.java create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/MercedesMeHandlerFactory.java create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/MercedesMeStateOptionProvider.java create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/config/AccountConfiguration.java create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/config/VehicleConfiguration.java create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/handler/AccountHandler.java create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/handler/VehicleHandler.java create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/server/CallbackServer.java create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/server/CallbackServlet.java create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/server/Utils.java create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/utils/ChannelStateMap.java create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/utils/Mapper.java create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/binding/binding.xml create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/config/bev-config.xml create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/config/bridge-config.xml create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/config/conv-config.xml create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/config/hybrid-config.xml create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/i18n/mercedesme.properties create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/bridge-account.xml create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/door-channel-types.xml create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/doors-group.xml create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/image-channel-types.xml create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/image-group.xml create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/light-channel-types.xml create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/lights-group.xml create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/location-channel-group.xml create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/location-channel-types.xml create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/lock-channel-types.xml create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/lock-group.xml create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/range-channel-types.xml create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/range-conv-channel-group.xml create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/range-ev-channel-group.xml create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/range-hybrid-channel-group.xml create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/thing-bev.xml create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/thing-combustion.xml create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/thing-hybrid.xml create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/window-channel-types.xml create mode 100644 bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/window-group.xml create mode 100644 bundles/org.openhab.binding.mercedesme/src/test/java/org/openhab/binding/mercedesme/ConfigurationTest.java create mode 100644 bundles/org.openhab.binding.mercedesme/src/test/java/org/openhab/binding/mercedesme/ImageTest.java create mode 100644 bundles/org.openhab.binding.mercedesme/src/test/java/org/openhab/binding/mercedesme/JsonTest.java create mode 100644 bundles/org.openhab.binding.mercedesme/src/test/resources/eqa-light-sample.json create mode 100644 bundles/org.openhab.binding.mercedesme/src/test/resources/evstatus.json create mode 100644 bundles/org.openhab.binding.mercedesme/src/test/resources/fuel.json create mode 100644 bundles/org.openhab.binding.mercedesme/src/test/resources/image/ext.json create mode 100644 bundles/org.openhab.binding.mercedesme/src/test/resources/invalid-key.json create mode 100644 bundles/org.openhab.binding.mercedesme/src/test/resources/invalid-timestamp.json create mode 100644 bundles/org.openhab.binding.mercedesme/src/test/resources/lock.json create mode 100644 bundles/org.openhab.binding.mercedesme/src/test/resources/odo.json create mode 100644 bundles/org.openhab.binding.mercedesme/src/test/resources/status-resources.json create mode 100644 bundles/org.openhab.binding.mercedesme/src/test/resources/status.json diff --git a/bom/openhab-addons/pom.xml b/bom/openhab-addons/pom.xml index f7cb83f0ef5..2104eaff37d 100644 --- a/bom/openhab-addons/pom.xml +++ b/bom/openhab-addons/pom.xml @@ -906,6 +906,11 @@ org.openhab.binding.melcloud ${project.version} + + org.openhab.addons.bundles + org.openhab.binding.mercedesme + ${project.version} + org.openhab.addons.bundles org.openhab.binding.meteoalerte diff --git a/bundles/org.openhab.binding.mercedesme/NOTICE b/bundles/org.openhab.binding.mercedesme/NOTICE new file mode 100644 index 00000000000..38d625e3492 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/NOTICE @@ -0,0 +1,13 @@ +This content is produced and maintained by the openHAB project. + +* Project home: https://www.openhab.org + +== Declared Project Licenses + +This program and the accompanying materials are made available under the terms +of the Eclipse Public License 2.0 which is available at +https://www.eclipse.org/legal/epl-2.0/. + +== Source Code + +https://github.com/openhab/openhab-addons diff --git a/bundles/org.openhab.binding.mercedesme/README.md b/bundles/org.openhab.binding.mercedesme/README.md new file mode 100644 index 00000000000..ba06c97c5d2 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/README.md @@ -0,0 +1,503 @@ +# MercedesMe Binding + +This binding provides similar access to your Mercedes Benz vehicle like the Smartphone App _Mercedes Me_. +For this you need a Mercedes developer account to get data from your vehicles. +Setup requires some, time so follow [the steps of bridge configuration](#bridge-configuration). + +If you face some problems during setup or runtime please have a look into the [Troubleshooting section](#troubleshooting) + +## Supported Things + +| Type | ID | Description | +|-----------------|---------------|-------------------------------------------------| +| Bridge | `account` | Connect your Mercedes Me account | +| Thing | `combustion` | Conventional fuel vehicle | +| Thing | `hybrid` | Fuel vehicle with supporting electric engine | +| Thing | `bev` | Battery electric vehicle | + +## Bridge Configuration + +Bridge needs configuration in order to connect properly to your Mercedes Me Account. + +### Pre-Conditions + +- **each bridge shall have its own Mercedes Benz Client ID!** + Don't create several `account` bridges with the same client id! If this is not the case the tokens won't be stored properly and the authorization is jeopardized! +- **each bridge shall have its own port.** + It's absolutely necessary to assign a different port for each `account` bridge. If this is not the case the tokens won't be stored properly and the authorization is jeopardized! + +### Bridge Setup + +Perform the following steps to obtain the configuration data and perform the authorization flow. + +1. Go to [Mercedes Developer Page](https://developer.mercedes-benz.com/). Login with your Mercedes Me credentials. +2. Create a project in the [console tab](https://developer.mercedes-benz.com/console) + - _Project Name:_ unique name e.g. **openHAB Mercedes Me binding** plus **Your bridge ID** + - _Purpose URL:_ use link towards [this binding description](https://www.openhab.org/addons/bindings/mercedesme/) + - _Business Purpose:_ e.g. **Private usage in openHAB Smarthome system** +3. After project is created subscribe [to these Mercedes Benz APIs](https://developer.mercedes-benz.com/products?vt=cars&vt=vans&vt=smart&p=BYOCAR) with _Add Products_ button +4. For all Products perform the same steps + - Select product + - Choose _Get For Free_ + - Choose _BYOCAR_ (Build Your Own Car) + - Button _Confirm_ +5. Select the following products + - Vehicle Status + - Vehicle Lock Status + - Pay as you drive insurance + - Electric Vehicle Status + - Fuel Status +6. Optional: Subscribe also to _Vehicle images_. Select the _Basic Trial_ version. The images will be stored so the API is used just a few times. +7. Press _Subscribe_ button. Your project should have [these product subscriptions](#mb-product-subscriptions) +8. Generate the [project credentials](#mb-credentials) +9. Open in new browser tab your openHAB page. Add a new Thing _Mercedes Me Account_ +10. Copy paste _Client ID_ , _Client Secret_ and _API Key_ from the Mercedes tab into the openHAB configuration +11. Check if the registered Mercedes products _excluding Vehicle Images_ are matching exactly with the openHab configuration switches +12. Create Thing! +13. The fresh created [account has one property](#openhab-configuration) `callbackUrl`. Copy it and paste it in a new browser tab +14. A [simple HTML page is shown including a link towards the Authorization flow](#callback-page) - **don't click yet**. If page isn't shown please adapt IP and port in openHAB configuration with Advanced Options activated +15. The copied URL needs to be added in your [Mercedes project credentials](#mb-credentials) from 8 +16. Now click onto the link from 14. You'll be asked one time if you [grant access](#mb-access-request) towards the API. Click OK and authorization is done! + +Some supporting screenshots for the setup + +### MB Credentials + + + +### MB Product Subscriptions + + + +### openHAB Configuration + + + +### MB Access Request + + + +### Callback page + + + + +### Bridge Configuration Parameters + +| Name | Type | Description | Default | Required | Advanced | +|-----------------|---------|---------------------------------------|-------------|----------|----------| +| clientId | text | Mercedes Benz Developer Client ID | N/A | yes | no | +| clientSecret | text | Mercedes Benz Developer Client Secret | N/A | yes | no | +| imageApiKey | text | Mercedes Benz Developer Image API Key | N/A | no | no | +| odoScope | boolean | PayAsYourDrive Insurance | true | yes | no | +| vehicleScope | boolean | Vehicle Status | true | yes | no | +| lockScope | boolean | Lock status of doors and trunk | true | yes | no | +| fuelScope | boolean | Fuel Status | true | yes | no | +| evScope | boolean | Electric Vehicle Status | true | yes | no | +| callbackIp | text | IP address of your openHAB server | auto detect | no | yes | +| callbackPort | integer | **Unique** port number | auto detect | no | yes | + +The `callbackPort` needs to be unique for all created Mercedes Me account things. Otherwise token exchange will be corrupted. +Set the advanced options by yourself if you know your IP and Port, otherwise give auto detect a try. + + +## Thing Configuration + +For vehicle images Mercedes Benz Developer offers only a trial version with limited calls. +Check in **beforehand** if your vehicle has some restrictions or even if it's supported at all. +Visit [Vehicle Image Details](https://developer.mercedes-benz.com/products/vehicle_images/details) in order to check your vehicle capabilities. +Visit [Image Settings](https://developer.mercedes-benz.com/products/vehicle_images/docs#_default_image_settings) to get more information about +For example the EQA doesn't provide `night` images with `background`. +If your configuration is set this way the API calls are wasted! + + + +See also [image channel section](#image) for further advise. + +| Name | Type | Description | Default | Required | Advanced | +|-----------------|---------|-----------------------------------------------------|---------|----------|----------| +| vin | text | Vehicle identification number | N/A | yes | no | +| refreshInterval | integer | Refresh interval in minutes | 5 | yes | no | +| background | boolean | Vehicle images provided with or without background | false | no | yes | +| night | boolean | Vehicle images in night conditions | false | no | yes | +| cropped | boolean | Vehicle images in 4:3 instead of 16:9 | false | no | yes | +| roofOpen | boolean | Vehicle images with open roof (only Cabriolet) | false | no | yes | +| format | text | Vehicle images format (webp or png) | webp | no | yes | + +For all vehicles you're free to give the tank / battery capacity. +Giving these values in configuration the open fuel / charge capacities are reported in the [range](#range) channels. + +| Name | Type | Description | Default | Required | Advanced | combustion | bev | hybrid | +|-----------------|---------|-----------------------------------------------------|---------|----------|----------|------------|-----|--------| +| batteryCapacity | decimal | Battery Capacity | N/A | no | no | | X | X | +| fuelCapacity | decimal | Fuel Capacity | N/A | no | no | X | | X | + +## Channels + +Channels are separated in groups: + +| Channel Group ID | Description | +|----------------------------------|---------------------------------------------------| +| [range](#range) | Provides mileage, range and charge / fuel levels | +| [doors](#doors) | Details of all doors | +| [windows](#windows) | Current position of windows | +| [lights](#lights) | Interior lights and main light switch | +| [lock](#lock) | Overall lock state of vehicle | +| [location](#location) | Heading of the vehicle | +| [image](#image) | Images of your vehicle | + +### Range + +Group name: `range` +All channels `read-only` + +| Channel | Type | Description | bev | hybrid | combustion | +|------------------|----------------------|------------------------------| ----|--------|------------| +| mileage | Number:Length | Total mileage | X | X | X | +| soc | Number:Dimensionless | Battery state of charge | X | X | | +| charged | Number:Energy | Charged Battery Energy | X | X | | +| uncharged | Number:Energy | Uncharged Battery Energy | X | X | | +| soc | Number:Dimensionless | Battery state of charge | X | X | | +| range-electric | Number:Length | Electric range | X | X | | +| radius-electric | Number:Length | Electric radius for map | X | X | | +| fuel-level | Number:Dimensionless | Fuel level in percent | | X | X | +| fuel-remain | Number:Volume | Reamaining Fuel | | X | X | +| fuel-open | Number:Volume | Open Fuel Capacity | | X | X | +| range-fuel | Number:Length | Fuel range | | X | X | +| radius-fuel | Number:Length | Fuel radius for map | | X | X | +| range-hybrid | Number:Length | Hybrid range | | X | | +| radius-hybrid | Number:Length | Hybrid radius for map | | X | | +| last-update | DateTime | Last range update | X | X | X | + +Channels with `radius` are just giving a _guess_ which radius can be reached in a map display. + +### Doors + +Group name: `doors` +All channels `read-only` + +| Channel | Type | Description | +|------------------|----------------------|------------------------------| +| driver-front | Contact | Driver door | +| driver-rear | Contact | Driver door reat | +| passenger-front | Contact | Passenger door | +| passenger-rear | Contact | Passenger door rear | +| deck-lid | Contact | Deck lid | +| sunroof | Number | Sun roof (only Cabriolet) | +| rooftop | Number | Roof top | +| last-update | DateTime | Last doors update | + +Mapping table `sunroof` + +| Number | Mapping | +|-----------------|---------------------| +| 0 | Closed | +| 1 | Open | +| 2 | Open Lifting | +| 3 | Running | +| 4 | Closing | +| 5 | Opening | +| 6 | Closing | + +Mapping table `rootop` + +| Number | Mapping | +|-----------------|---------------------| +| 0 | Unlocked | +| 1 | Open and locked | +| 2 | Closed and locked | + +### Windows + +Group name: `windows` +All channels `readonly` + +| Channel | Type | Description | +|------------------|----------------------|------------------------------| +| driver-front | Number | Driver window | +| driver-rear | Number | Driver window rear | +| passenger-front | Number | Passenger window | +| passenger-rear | Number | Passenger window rear | +| last-update | DateTime | Last windows update | + +Mapping table for all windows + +| Number | Mapping | +|-----------------|---------------------| +| 0 | Intermediate | +| 1 | Open | +| 2 | Closed | +| 3 | Airing | +| 4 | Intermediate | +| 5 | Running | + +### Lights + +Group name: `lights` +All channels `read-only` + +| Channel | Type | Description | +|------------------|----------------------|------------------------------| +| interior-front | Switch | Interior light front | +| interior-rear | Switch | Interior light rear | +| reading-left | Switch | Reading light left | +| reading-right | Switch | Reading light right | +| light-switch | Number | Main light switch | +| last-update | DateTime | Last lights update | + +Mapping table `light-switch` + +| Number | Mapping | +|-----------------|---------------------| +| 0 | Auto | +| 1 | Headlight | +| 2 | Sidelight Left | +| 3 | Sidelight Right | +| 4 | Parking Light | + +### Lock + +Group name: `lock` +All channels `read-only` + +| Channel | Type | Description | +|------------------|----------------------|------------------------------| +| doors | Number | Lock status all doors | +| deck-lid | Switch | Deck lid lock | +| flap | Switch | Flap lock | +| last-update | DateTime | Last lock update | + +Mapping table `doors` + +| Number | Mapping | +|-----------------|---------------------| +| 0 | Unlocked | +| 1 | Locked Internal | +| 2 | Locked External | +| 3 | Unlocked Selective | + +### Location + +Group name: `location` +All channels `readonly` + +| Channel | Type | Description | +|------------------|----------------------|------------------------------| +| heading | Number:Angle | Vehicle heading | +| last-update | DateTime | Last location update | + +### Image + +Provides exterior and interior images for your specific vehicle. +Group name: `image` + +| Channel | Type | Description | Write | +|------------------|----------------------|------------------------------|-------| +| image-data | Raw | Vehicle image | | +| image-view | text | Vehicle image viewpoint | X | +| clear-cache | Switch | Remove all stored images | X | + +**If** the `imageApiKey` in [Bridge Configuration Parameters](#bridge-configuration-parameters) is set the vehicle thing will try to get images. +Pay attention to the [Advanced Image Configuration Properties](#thing-configuration) before requesting new images. +Sending commands towards the `image-view` channel will change the image. +The `image-view` is providing options to select the available images for your specific vehicle. +Images are stored in `jsondb` so if you requested all images the Mercedes Benz Image API will not be called anymore which is good because you have a restricted amount of calls! +If you're not satisfied e.g. you want a background you need to + +1. change the [Advanced Image Configuration Properties](#thing-configuration) +2. Switch `clear-cache` channel item to `ON` to clear all images +3. request them via `image-view` + +### Image View Options + +You can access the options either in a rule via `YOUR_IMAGE_VIEW_ITEM.getStateDescription().getOptions()` or in UI in widget configuration as _Action: Command options_ and as _Action Item: YOUR_IMAGE_VIEW_ITEM_ + + + +## Troubleshooting + +### Authorization fails + +The configuration of openHAB account thing and the Mercedes Developer project need an extract match regarding + +- MB project credentials vs. `clientId` `clientSecret` and `callbackUrl` +- MB project subscription of products vs. `scope` + +If you follow the [bridge configuration steps](#bridge-configuration) both will match. +Otherwise you'll receive some error message when clicking the link after opening the `callbackUrl` in your browser + +Most common errors: + +- redirect URL doesn't match: Double check if `callbackUrl` is really saved correctly in your Mercedes Benz Developer project +- scope failure: the requested scope doesn't match with the subscribed products. + - Check [openHab configuration switches](#openhab-configuration) + - apply changes if necessary and don't forget to save + - after these steps refresh the `callbackUrl` in [your browser](#callback-page) to apply these changes + - try a new authorization clicking the link + +### Receive no data + +Especially after setting the frist Mercedes Benz Developer Project you'll receive no data. +It seems that the API isn't _filled_ yet. + +**Pre-Condition** + +- The Mercedes Me bridge is online = authorization is fine +- The Mercedes Me thing is online = API calls are fine + +**Solution** + +- Reduce `refreshInterval` to 1 minute +- Go to your vehicle, open doors and windows, turn on lights, drive a bit ... +- wait until values are providing the right states + +### Images + +Testing the whole image settings is hard due to the restricted call number towards the Image API. + +My personal experience during limited testing + +| Test |Tested | OK | Not OK | Comment | +|------------------|-------|-----|---------|---------------------------------------------------------| +| `format` webp | Yes | X | | | +| `format` png | Yes | | X | Internal Server Error 500 on Mercedes Server side | +| `format` jpeg | No | | | Not tested due to missing transparency in jpeg format | +| all options off | Yes | X | | | +| `background` | Yes | X | | | +| `night` | No | | | Not support by my vehicle | +| `roofOpen` | No | | | Not support by my vehicle | +| `cropped` | No | | | Not desired from my side | + +## Storage + +Data is stored in directory `%USER_DATA%/jsondb` for handling tokens and vehicle images. + + * _StorageHandler.For.OAuthClientService.json_ - token is stored with key `clientId` which is provided by `account` [Brige Configuration Parameters](#bridge-configuration-parameters) + * _mercedesme_%VEHICLE_VIN%.json_ - images are stored per vehicle. File name contains `vin` configured by [vehicle Thing Configuration](#thing-configuration) + +With this data the binding is able to operate without new authorization towards Mercedes each startup and reduces the restricted calls towards image API. +Also these files are properly stored in your [backup](https://community.openhab.org/t/docs-on-how-to-backup-openhab/100182) e.g. if you perform `openhab-cli backup` + + +## Full example + +The example is based on a battery electric vehicle. +Exchange configuration parameters in the Things section + +Bridge + +* 4711 - your desired bridge id +* YOUR_CLIENT_ID - Client ID of the Mercedes Developer project +* YOUR_CLIENT_SECRET - Client Secret of the Mercedes Developer project +* YOUR_API_KEY - Image API Key of the Mercedes Developer project +* YOUR_OPENHAB_SERVER_IP - IP address of your openHAB server +* 8090 - a **unique** port number - each bridge in your openHAB installation needs to have different port number! + +Thing + +* eqa - your desired vehicle thing id +* VEHICLE_VIN - your Vehicle Identification Number + +### Things file + +``` +Bridge mercedesme:account:4711 "MercedesMe John Doe" [ clientId="YOUR_CLIENT_ID", clientSecret="YOUR_CLIENT_SECRET", imageApiKey="YOUR_API_KEY", callbackIp="YOUR_OPENHAB_SERVER_IP", callbackPort=8092, odoScope=true, vehicleScope=true, lockScope=true, fuelScope=true, evScope=true] { + Thing bev eqa "Mercedes EQA" [ vin="VEHICLE_VIN", refreshInterval=5, background=false, night=false, cropped=false, roofOpen=false, format="webp"] +} +``` + +### Items file + +``` +Number:Length EQA_Mileage "Odometer [%d %unit%]" {channel="mercedesme:bev:4711:eqa:range#mileage" } +Number:Length EQA_Range "Range [%d %unit%]" {channel="mercedesme:bev:4711:eqa:range#range-electric"} +Number:Length EQA_RangeRadius "Range Radius [%d %unit%]" {channel="mercedesme:bev:4711:eqa:range#radius-electric"} +Number:Dimensionless EQA_BatterySoc "Battery Charge [%.1f %%]" {channel="mercedesme:bev:4711:eqa:range#soc"} + +Contact EQA_DriverDoor "Driver Door [%s]" {channel="mercedesme:bev:4711:eqa:doors#driver-front" } +Contact EQA_DriverDoorRear "Driver Door Rear [%s]" {channel="mercedesme:bev:4711:eqa:doors#driver-rear" } +Contact EQA_PassengerDoor "Passenger Door [%s]" {channel="mercedesme:bev:4711:eqa:doors#passenger-front" } +Contact EQA_PassengerDoorRear "Passenger Door Rear [%s]" {channel="mercedesme:bev:4711:eqa:doors#passenger-rear" } +Number EQA_Trunk "Trunk [%s]" {channel="mercedesme:bev:4711:eqa:doors#deck-lid" } +Number EQA_Rooftop "Rooftop [%s]" {channel="mercedesme:bev:4711:eqa:doors#rooftop" } +Number EQA_Sunroof "Sunroof [%s]" {channel="mercedesme:bev:4711:eqa:doors#sunroof" } + +Number EQA_DoorLock "Door Lock [%s]" {channel="mercedesme:bev:4711:eqa:lock#doors" } +Switch EQA_TrunkLock "Trunk Lock [%s]" {channel="mercedesme:bev:4711:eqa:lock#deck-lid" } +Switch EQA_FlapLock "Charge Flap Lock [%s]" {channel="mercedesme:bev:4711:eqa:lock#flap" } + +Number EQA_DriverWindow "Driver Window [%s]" {channel="mercedesme:bev:4711:eqa:windows#driver-front" } +Number EQA_DriverWindowRear "Driver Window Rear [%s]" {channel="mercedesme:bev:4711:eqa:windows#driver-rear" } +Number EQA_PassengerWindow "Passenger Window [%s]" {channel="mercedesme:bev:4711:eqa:windows#passenger-front" } +Number EQA_PassengerWindowRear "Passenger Window Rear [%s]" {channel="mercedesme:bev:4711:eqa:windows#passenger-rear" } + +Number:Angle EQA_Heading "Heading [%.1f %unit%]" {channel="mercedesme:bev:4711:eqa:location#heading" } + +Image EQA_Image "Image" {channel="mercedesme:bev:4711:eqa:image#image-data" } +String EQA_ImageViewport "Image Viewport [%s]" {channel="mercedesme:bev:4711:eqa:image#image-view" } +Switch EQA_ClearCache "Clear Cache [%s]" {channel="mercedesme:bev:4711:eqa:image#clear-cache" } + +Switch EQA_InteriorFront "Interior Front Light [%s]" {channel="mercedesme:bev:4711:eqa:lights#interior-front" } +Switch EQA_InteriorRear "Interior Rear Light [%s]" {channel="mercedesme:bev:4711:eqa:lights#interior-rear" } +Switch EQA_ReadingLeft "Reading Light Left [%s]" {channel="mercedesme:bev:4711:eqa:lights#reading-left" } +Switch EQA_ReadingRight "Reading Light Right [%s]" {channel="mercedesme:bev:4711:eqa:lights#reading-right" } +Number EQA_LightSwitch "Main Light Switch [%s]" {channel="mercedesme:bev:4711:eqa:lights#light-switch" } +``` + +### Sitemap + +``` +sitemap MB label="Mercedes Benz EQA" { + Frame label="EQA Image" { + Image item=EQA_Image + + } + Frame label="Range" { + Text item=EQA_Mileage + Text item=EQA_Range + Text item=EQA_RangeRadius + Text item=EQA_BatterySoc + } + + Frame label="Door Details" { + Text item=EQA_DriverDoor + Text item=EQA_DriverDoorRear + Text item=EQA_PassengerDoor + Text item=EQA_PassengerDoorRear + Text item=EQA_Trunk + Text item=EQA_Rooftop + Text item=EQA_Sunroof + Text item=EQA_DoorLock + Text item=EQA_TrunkLock + Text item=EQA_FlapLock + } + + Frame label="Windows" { + Text item=EQA_DriverWindow + Text item=EQA_DriverWindowRear + Text item=EQA_PassengerWindow + Text item=EQA_PassengerWindowRear + } + + Frame label="Location" { + Text item=EQA_Heading + } + + Frame label="Lights" { + Text item=EQA_InteriorFront + Text item=EQA_InteriorRear + Text item=EQA_ReadingLeft + Text item=EQA_ReadingRight + Text item=EQA_LightSwitch + } + + Frame label="Image Properties" { + Selection item=EQA_ImageViewport + Switch item=EQA_ClearCache + } +} +``` + +## Mercedes Benz Developer + +Visit [Mercedes Benz Developer](https://developer.mercedes-benz.com/) to gain more deep information. diff --git a/bundles/org.openhab.binding.mercedesme/doc/CallbackUrl_Page.png b/bundles/org.openhab.binding.mercedesme/doc/CallbackUrl_Page.png new file mode 100644 index 0000000000000000000000000000000000000000..eb01ea8710af524f65e6157557d7e6c2b653435e GIT binary patch literal 15947 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 L)Maa>%|ibVrGczZ literal 0 HcmV?d00001 diff --git a/bundles/org.openhab.binding.mercedesme/doc/ImageRestrictions.png b/bundles/org.openhab.binding.mercedesme/doc/ImageRestrictions.png new file mode 100644 index 0000000000000000000000000000000000000000..7203cb0e89e64fbee8704dada2293dc06262f5ce GIT binary patch literal 2831 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 z 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"Y&_DgXB_Ikk=cXRa3X;tZq}+Hah{3 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�fc0)hWZGw+VtU*X*6`6wc>Izn3=m(%yAxnpRT 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

Du2R&_{wbE z^3<80v1gA+nI-S#ZJ@(XfH}$|!ez4=?KPM&BO&w2BbR{j{N1~^cvZ zrv9xyPz9qb|G7={)onUMSjw6ix(=WC%heBg()8pP>-2a<=1e%t0XHAVyct+rmm#Fgcm0X4nO#fuy&w^ijbUJiGnU`$i3H)JZ)$i;BH zeJjo7hvM>3aCxYWmr0Y0Nr_%VskqFHx$ST{%i^Cz(a;0r;_|}LO9pdT8DRPQRF@+q z;~}2Iqn|F^`7}#p2bdqtM1C6+jNQ5v2s|d$L^$Jvochx_JjKg9Yx<^FUORG)^13P*M(($o_nc) zCsY0wUpk|JxyAAywSA3;RJZ;V8XCJC9c^Z~sa}PtYI6pjMm9C%oG}qt&bP>yOl2Fy zMPWRrzbq-#R%9GzGmjXbyjE(6zXFFbeM{|m57J%l&TDBV@-_c~QgKVxRz}@?RVs(_ z_GG@GIP59kg<#o~wiUg9%<0S&@Am(zxxkdj?81=dER<(i~Sx`vKNVv zPpg2D_S1`}S2==Zv`w@WjZ#8gdK!v|L7Srud`x6>-&R^X5GeKJ{`_>UtFFY4=(@aJI@@1%cH?%L}59-XnA>MbaQ5OZNXfA!(2Y1=$wbk z@^_UtF3&tSIY5bt8w;9w@8l?tC+H^}p(op0wE9#(^XfjOt4v`V6OEOF_HqA|NK zmR!fEURU2BPBpdU#Ah>w84zP#z+w(O@G>~?h-5j<#y$|-8*{8HC&R(0x^&V#7IXD* zVqL$8y~jAD_9leFP`%KE7kmxrG;^JuoEyqq4x|@Vc_a1ot=MXs;aIoT9BrOqt2%xC z^~8tuU&36jY(=b@`VO|4bpntD;|!XE%k29T%u4nlXqKM1|0ghGW*k|*6JExx)2oMK zX{dYm?vX7Bh~-%z0s7wQvpyG>n~b&CZLk`xvTvCXATBqR4eVt&U>*P+=CTZsjFmI% zOmObkE-Fg0`-)%F&h_X8(P=v{)SVufbBGV6{#28EiyoM3&L3qg+Z9WeD}xz@Z~Rtz zlvFM-CzpYo)8qzwTpk>ZuV!1Q&t+6x78uRt+jAS2PM!q3zh8@6e^B}Rv7QQC7M7_8 zmt0;Jmtz9TbL-#z&3C?YFymz=V{a%SBfj~__~ztvLsm#AHz*CuV6)WrUro}s}CsjJelO;TZ$dQB*TTSpg=bU5O^f53o*tr%>)#Y?R zov1A3mB9>@`x4y&uTRQG_Aw#JqXBbIiqraBuHX*kiA`mcd}%LEjv8qEw!&ZAKFC!YO#u$**2W=i_6QnYYjcqAuC&NHo7PdVid%kIy zbNk#ndAX^k)Yne8_IbS5LIT6ya~bo_$WS4x?)K~Bl6W>!)a|V1F1%ON97YBY*8Mk_ zMdswPrvKT@(BI{_O?68)^Q}eJNIgrcU`QCI#+<;copa#KzX5*%&$Z_I{lbfh00000 LNkvXXu0mjfSA9?_ literal 0 HcmV?d00001 diff --git a/bundles/org.openhab.binding.mercedesme/doc/MBDeveloper-Credentials.png b/bundles/org.openhab.binding.mercedesme/doc/MBDeveloper-Credentials.png new file mode 100644 index 0000000000000000000000000000000000000000..6f4bed5c0fd64b50663c57f6fe2483d10dd8fec8 GIT binary patch literal 24010 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 literal 0 HcmV?d00001 diff --git a/bundles/org.openhab.binding.mercedesme/doc/MBDeveloper-Subscriptions.png b/bundles/org.openhab.binding.mercedesme/doc/MBDeveloper-Subscriptions.png new file mode 100644 index 0000000000000000000000000000000000000000..2a3dc12da9c947e26a71925ae939952df0c0517d GIT binary patch literal 20366 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 + + + 4.0.0 + + + org.openhab.addons.bundles + org.openhab.addons.reactor.bundles + 3.4.0-SNAPSHOT + + + + + + org.json + json + 20180813 + compile + + + + org.openhab.binding.mercedesme + + openHAB Add-ons :: Bundles :: MercedesMe Binding + + diff --git a/bundles/org.openhab.binding.mercedesme/src/main/feature/feature.xml b/bundles/org.openhab.binding.mercedesme/src/main/feature/feature.xml new file mode 100644 index 00000000000..ee51946a903 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/feature/feature.xml @@ -0,0 +1,9 @@ + + + mvn:org.openhab.core.features.karaf/org.openhab.core.features.karaf.openhab-core/${ohc.version}/xml/features + + + openhab-runtime-base + mvn:org.openhab.addons.bundles/org.openhab.binding.mercedesme/${project.version} + + diff --git a/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/Constants.java b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/Constants.java new file mode 100644 index 00000000000..55fd210f5e2 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/Constants.java @@ -0,0 +1,98 @@ +/** + * Copyright (c) 2010-2022 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.mercedesme.internal; + +import javax.measure.Unit; +import javax.measure.quantity.Length; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.openhab.core.library.unit.MetricPrefix; +import org.openhab.core.library.unit.SIUnits; +import org.openhab.core.thing.ThingTypeUID; + +/** + * The {@link Constants} class defines common constants, which are + * used across the whole binding. + * + * @author Bernd Weymann - Initial contribution + */ +@NonNullByDefault +public class Constants { + public static final String BINDING_ID = "mercedesme"; + + public static final String COMBUSTION = "combustion"; + public static final String HYBRID = "hybrid"; + public static final String BEV = "bev"; + + // List of all Thing Type UIDs + public static final ThingTypeUID THING_TYPE_ACCOUNT = new ThingTypeUID(BINDING_ID, "account"); + public static final ThingTypeUID THING_TYPE_COMB = new ThingTypeUID(BINDING_ID, COMBUSTION); + public static final ThingTypeUID THING_TYPE_HYBRID = new ThingTypeUID(BINDING_ID, HYBRID); + public static final ThingTypeUID THING_TYPE_BEV = new ThingTypeUID(BINDING_ID, BEV); + + public static final String GROUP_RANGE = "range"; + public static final String GROUP_DOORS = "doors"; + public static final String GROUP_WINDOWS = "windows"; + public static final String GROUP_LOCK = "lock"; + public static final String GROUP_LIGHTS = "lights"; + public static final String GROUP_LOCATION = "location"; + public static final String GROUP_IMAGE = "image"; + + public static final String MB_AUTH_URL = "https://id.mercedes-benz.com/as/authorization.oauth2"; + public static final String MB_TOKEN_URL = "https://id.mercedes-benz.com/as/token.oauth2"; + public static final String CALLBACK_ENDPOINT = "/mb-callback"; + public static final String OAUTH_CLIENT_NAME = "#byocar"; + + // https://developer.mercedes-benz.com/products/electric_vehicle_status/docs + public static final String SCOPE_EV = "mb:vehicle:mbdata:evstatus"; + // https://developer.mercedes-benz.com/products/fuel_status/docs + public static final String SCOPE_FUEL = "mb:vehicle:mbdata:fuelstatus"; + // https://developer.mercedes-benz.com/products/pay_as_you_drive_insurance/docs + public static final String SCOPE_ODO = "mb:vehicle:mbdata:payasyoudrive"; + // https://developer.mercedes-benz.com/products/vehicle_lock_status/docs + public static final String SCOPE_LOCK = "mb:vehicle:mbdata:vehiclelock"; + // https://developer.mercedes-benz.com/products/vehicle_status/docs + public static final String SCOPE_STATUS = "mb:vehicle:mbdata:vehiclestatus"; + public static final String SCOPE_OFFLINE = "offline_access"; + + public static final String BASE_URL = "https://api.mercedes-benz.com/vehicledata/v2"; + public static final String ODO_URL = BASE_URL + "/vehicles/%s/containers/payasyoudrive"; + public static final String STATUS_URL = BASE_URL + "/vehicles/%s/containers/vehiclestatus"; + public static final String LOCK_URL = BASE_URL + "/vehicles/%s/containers/vehiclelockstatus"; + public static final String FUEL_URL = BASE_URL + "/vehicles/%s/containers/fuelstatus"; + public static final String EV_URL = BASE_URL + "/vehicles/%s/containers/electricvehicle"; + + // https://developer.mercedes-benz.com/content-page/api_migration_guide + public static final String IMAGE_BASE_URL = "https://api.mercedes-benz.com/vehicle_images/v2"; + public static final String IMAGE_EXTERIOR_RESOURCE_URL = IMAGE_BASE_URL + "/vehicles/%s"; + + public static final String STATUS_TEXT_PREFIX = "@text/mercedesme."; + public static final String STATUS_AUTH_NEEDED = ".status.authorization-needed"; + public static final String STATUS_IP_MISSING = ".status.ip-missing"; + public static final String STATUS_PORT_MISSING = ".status.port-missing"; + public static final String STATUS_CLIENT_ID_MISSING = ".status.client-id-missing"; + public static final String STATUS_CLIENT_SECRET_MISSING = ".status.client-secret-missing"; + public static final String STATUS_SERVER_RESTART = ".status.server-restart"; + public static final String STATUS_BRIDGE_MISSING = ".status.bridge-missing"; + public static final String STATUS_BRIDGE_ATHORIZATION = ".status.bridge-authoriziation"; + + public static final String SPACE = " "; + public static final String EMPTY = ""; + public static final String COLON = ":"; + public static final String NOT_SET = "not set"; + + public static final String CODE = "code"; + public static final String MIME_PREFIX = "image/"; + + public static final Unit KILOMETRE_UNIT = MetricPrefix.KILO(SIUnits.METRE); +} diff --git a/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/MercedesMeCommandOptionProvider.java b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/MercedesMeCommandOptionProvider.java new file mode 100644 index 00000000000..ea4a91d43a0 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/MercedesMeCommandOptionProvider.java @@ -0,0 +1,41 @@ +/** + * Copyright (c) 2010-2022 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.mercedesme.internal; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.openhab.core.events.EventPublisher; +import org.openhab.core.thing.binding.BaseDynamicCommandDescriptionProvider; +import org.openhab.core.thing.i18n.ChannelTypeI18nLocalizationService; +import org.openhab.core.thing.link.ItemChannelLinkRegistry; +import org.openhab.core.thing.type.DynamicCommandDescriptionProvider; +import org.osgi.service.component.annotations.Activate; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; + +/** + * Dynamic provider of command options while leaving other state description fields as original. + * + * @author Bernd Weymann - Initial contribution + */ +@NonNullByDefault +@Component(service = { DynamicCommandDescriptionProvider.class, MercedesMeCommandOptionProvider.class }) +public class MercedesMeCommandOptionProvider extends BaseDynamicCommandDescriptionProvider { + @Activate + public MercedesMeCommandOptionProvider(final @Reference EventPublisher eventPublisher, // + final @Reference ItemChannelLinkRegistry itemChannelLinkRegistry, // + final @Reference ChannelTypeI18nLocalizationService channelTypeI18nLocalizationService) { + this.eventPublisher = eventPublisher; + this.itemChannelLinkRegistry = itemChannelLinkRegistry; + this.channelTypeI18nLocalizationService = channelTypeI18nLocalizationService; + } +} diff --git a/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/MercedesMeHandlerFactory.java b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/MercedesMeHandlerFactory.java new file mode 100644 index 00000000000..f6edf1d28d8 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/MercedesMeHandlerFactory.java @@ -0,0 +1,105 @@ +/** + * Copyright (c) 2010-2022 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.mercedesme.internal; + +import static org.openhab.binding.mercedesme.internal.Constants.*; + +import java.util.Set; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; +import org.eclipse.jetty.client.HttpClient; +import org.eclipse.jetty.client.WWWAuthenticationProtocolHandler; +import org.openhab.binding.mercedesme.internal.handler.AccountHandler; +import org.openhab.binding.mercedesme.internal.handler.VehicleHandler; +import org.openhab.core.auth.client.oauth2.OAuthFactory; +import org.openhab.core.i18n.TimeZoneProvider; +import org.openhab.core.io.net.http.HttpClientFactory; +import org.openhab.core.storage.StorageService; +import org.openhab.core.thing.Bridge; +import org.openhab.core.thing.Thing; +import org.openhab.core.thing.ThingTypeUID; +import org.openhab.core.thing.binding.BaseThingHandlerFactory; +import org.openhab.core.thing.binding.ThingHandler; +import org.openhab.core.thing.binding.ThingHandlerFactory; +import org.osgi.service.component.ComponentContext; +import org.osgi.service.component.annotations.Activate; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * The {@link MercedesMeHandlerFactory} is responsible for creating things and thing + * handlers. + * + * @author Bernd Weymann - Initial contribution + */ +@NonNullByDefault +@Component(configurationPid = "binding.mercedesme", service = ThingHandlerFactory.class) +public class MercedesMeHandlerFactory extends BaseThingHandlerFactory { + private static final Set SUPPORTED_THING_TYPES_UIDS = Set.of(THING_TYPE_BEV, THING_TYPE_COMB, + THING_TYPE_HYBRID, THING_TYPE_ACCOUNT); + + private final Logger logger = LoggerFactory.getLogger(MercedesMeHandlerFactory.class); + private final OAuthFactory oAuthFactory; + private final HttpClient httpClient; + private final MercedesMeCommandOptionProvider mmcop; + private final MercedesMeStateOptionProvider mmsop; + private final StorageService storageService; + private final TimeZoneProvider timeZoneProvider; + + @Activate + public MercedesMeHandlerFactory(@Reference OAuthFactory oAuthFactory, @Reference HttpClientFactory hcf, + @Reference StorageService storageService, final @Reference MercedesMeCommandOptionProvider cop, + final @Reference MercedesMeStateOptionProvider sop, final @Reference TimeZoneProvider tzp) { + this.oAuthFactory = oAuthFactory; + this.storageService = storageService; + mmcop = cop; + mmsop = sop; + timeZoneProvider = tzp; + httpClient = hcf.createHttpClient(Constants.BINDING_ID); + // https://github.com/jetty-project/jetty-reactive-httpclient/issues/33 + httpClient.getProtocolHandlers().remove(WWWAuthenticationProtocolHandler.NAME); + try { + httpClient.start(); + } catch (Exception e) { + logger.warn("HTTP client not started: {} - no web access possible!", e.getLocalizedMessage()); + } + } + + @Override + public boolean supportsThingType(ThingTypeUID thingTypeUID) { + return SUPPORTED_THING_TYPES_UIDS.contains(thingTypeUID); + } + + @Override + protected @Nullable ThingHandler createHandler(Thing thing) { + ThingTypeUID thingTypeUID = thing.getThingTypeUID(); + if (THING_TYPE_ACCOUNT.equals(thingTypeUID)) { + return new AccountHandler((Bridge) thing, httpClient, oAuthFactory); + } + return new VehicleHandler(thing, httpClient, thingTypeUID.getId(), storageService, mmcop, mmsop, + timeZoneProvider); + } + + @Override + protected void deactivate(ComponentContext componentContext) { + super.deactivate(componentContext); + try { + httpClient.stop(); + } catch (Exception e) { + logger.debug("HTTP client not stopped: {}", e.getLocalizedMessage()); + } + } +} diff --git a/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/MercedesMeStateOptionProvider.java b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/MercedesMeStateOptionProvider.java new file mode 100644 index 00000000000..ea3ded80c91 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/MercedesMeStateOptionProvider.java @@ -0,0 +1,41 @@ +/** + * Copyright (c) 2010-2022 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.mercedesme.internal; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.openhab.core.events.EventPublisher; +import org.openhab.core.thing.binding.BaseDynamicStateDescriptionProvider; +import org.openhab.core.thing.i18n.ChannelTypeI18nLocalizationService; +import org.openhab.core.thing.link.ItemChannelLinkRegistry; +import org.openhab.core.thing.type.DynamicStateDescriptionProvider; +import org.osgi.service.component.annotations.Activate; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; + +/** + * Dynamic provider of state options while leaving other state description fields as original. + * + * @author Bernd Weymann - Initial contribution + */ +@NonNullByDefault +@Component(service = { DynamicStateDescriptionProvider.class, MercedesMeStateOptionProvider.class }) +public class MercedesMeStateOptionProvider extends BaseDynamicStateDescriptionProvider { + @Activate + public MercedesMeStateOptionProvider(final @Reference EventPublisher eventPublisher, // + final @Reference ItemChannelLinkRegistry itemChannelLinkRegistry, // + final @Reference ChannelTypeI18nLocalizationService channelTypeI18nLocalizationService) { + this.eventPublisher = eventPublisher; + this.itemChannelLinkRegistry = itemChannelLinkRegistry; + this.channelTypeI18nLocalizationService = channelTypeI18nLocalizationService; + } +} diff --git a/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/config/AccountConfiguration.java b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/config/AccountConfiguration.java new file mode 100644 index 00000000000..6c4c43c041c --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/config/AccountConfiguration.java @@ -0,0 +1,67 @@ +/** + * Copyright (c) 2010-2022 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.mercedesme.internal.config; + +import static org.openhab.binding.mercedesme.internal.Constants.*; + +import org.eclipse.jdt.annotation.NonNullByDefault; + +/** + * The {@link AccountConfiguration} class contains fields mapping thing configuration parameters. + * + * @author Bernd Weymann - Initial contribution + */ +@NonNullByDefault +public class AccountConfiguration { + + public String clientId = NOT_SET; + public String clientSecret = NOT_SET; + public String imageApiKey = NOT_SET; + + // Advanced Parameters + public String callbackIP = NOT_SET; + public int callbackPort = -1; + public boolean odoScope = true; + public boolean vehicleScope = true; + public boolean lockScope = true; + public boolean fuelScope = true; + public boolean evScope = true; + + // https://developer.mercedes-benz.com/products/electric_vehicle_status/docs#_required_scopes + public String getScope() { + StringBuffer sb = new StringBuffer(); + sb.append(SCOPE_OFFLINE); + if (odoScope) { + sb.append(SPACE).append(SCOPE_ODO); + } + if (vehicleScope) { + sb.append(SPACE).append(SCOPE_STATUS); + } + if (lockScope) { + sb.append(SPACE).append(SCOPE_LOCK); + } + if (fuelScope) { + sb.append(SPACE).append(SCOPE_FUEL); + } + if (evScope) { + sb.append(SPACE).append(SCOPE_EV); + } + return sb.toString(); + } + + @Override + public String toString() { + return "ID " + clientId + ", Secret " + clientSecret + ", IP " + callbackIP + ", Port " + callbackPort + + ", scope " + getScope(); + } +} diff --git a/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/config/VehicleConfiguration.java b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/config/VehicleConfiguration.java new file mode 100644 index 00000000000..798f1db75e0 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/config/VehicleConfiguration.java @@ -0,0 +1,37 @@ +/** + * Copyright (c) 2010-2022 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.mercedesme.internal.config; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.openhab.binding.mercedesme.internal.Constants; + +/** + * The {@link VehicleConfiguration} class contains fields mapping thing configuration parameters. + * + * @author Bernd Weymann - Initial contribution + */ +@NonNullByDefault +public class VehicleConfiguration { + + public String vin = Constants.NOT_SET; + public int refreshInterval = 5; + public float batteryCapacity = -1; + public float fuelCapacity = -1; + + // Advanced + public boolean background = false; + public boolean night = false; + public boolean cropped = false; + public boolean roofOpen = false; + public String format = "webp"; +} diff --git a/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/handler/AccountHandler.java b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/handler/AccountHandler.java new file mode 100644 index 00000000000..ccb60194eac --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/handler/AccountHandler.java @@ -0,0 +1,165 @@ +/** + * Copyright (c) 2010-2022 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.mercedesme.internal.handler; + +import java.net.SocketException; +import java.util.Optional; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jetty.client.HttpClient; +import org.openhab.binding.mercedesme.internal.Constants; +import org.openhab.binding.mercedesme.internal.config.AccountConfiguration; +import org.openhab.binding.mercedesme.internal.server.CallbackServer; +import org.openhab.binding.mercedesme.internal.server.Utils; +import org.openhab.core.auth.client.oauth2.AccessTokenRefreshListener; +import org.openhab.core.auth.client.oauth2.AccessTokenResponse; +import org.openhab.core.auth.client.oauth2.OAuthFactory; +import org.openhab.core.config.core.Configuration; +import org.openhab.core.thing.Bridge; +import org.openhab.core.thing.ChannelUID; +import org.openhab.core.thing.ThingStatus; +import org.openhab.core.thing.ThingStatusDetail; +import org.openhab.core.thing.binding.BaseBridgeHandler; +import org.openhab.core.types.Command; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * The {@link AccountHandler} takes care of the valid authorization for the user account + * + * @author Bernd Weymann - Initial contribution + */ +@NonNullByDefault +public class AccountHandler extends BaseBridgeHandler implements AccessTokenRefreshListener { + private final Logger logger = LoggerFactory.getLogger(AccountHandler.class); + private final OAuthFactory oAuthFactory; + private final HttpClient httpClient; + private Optional server = Optional.empty(); + + Optional config = Optional.empty(); + + public AccountHandler(Bridge bridge, HttpClient hc, OAuthFactory oaf) { + super(bridge); + httpClient = hc; + oAuthFactory = oaf; + } + + @Override + public void handleCommand(ChannelUID channelUID, Command command) { + // no commands available + } + + @Override + public void initialize() { + config = Optional.of(getConfigAs(AccountConfiguration.class)); + autodetectCallback(); + String configValidReason = configValid(); + if (!configValidReason.isEmpty()) { + updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, configValidReason); + } else { + String callbackUrl = Utils.getCallbackAddress(config.get().callbackIP, config.get().callbackPort); + thing.setProperty("callbackUrl", callbackUrl); + server = Optional.of(new CallbackServer(this, httpClient, oAuthFactory, config.get(), callbackUrl)); + if (!server.get().start()) { + String textKey = Constants.STATUS_TEXT_PREFIX + thing.getThingTypeUID().getId() + + Constants.STATUS_SERVER_RESTART; + updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.NONE, textKey); + } else { + // get fresh token + this.getToken(); + } + } + } + + private void autodetectCallback() { + // if Callback IP and Callback Port are not set => autodetect these values + config = Optional.of(getConfigAs(AccountConfiguration.class)); + Configuration updateConfig = super.editConfiguration(); + if (!updateConfig.containsKey("callbackPort")) { + updateConfig.put("callbackPort", Utils.getFreePort()); + } else { + Utils.addPort(config.get().callbackPort); + } + if (!updateConfig.containsKey("callbackIP")) { + String ip; + try { + ip = Utils.getCallbackIP(); + updateConfig.put("callbackIP", ip); + } catch (SocketException e) { + logger.info("Cannot detect IP address {}", e.getMessage()); + } + } + super.updateConfiguration(updateConfig); + // get new config after update + config = Optional.of(getConfigAs(AccountConfiguration.class)); + } + + private String configValid() { + config = Optional.of(getConfigAs(AccountConfiguration.class)); + String textKey = Constants.STATUS_TEXT_PREFIX + thing.getThingTypeUID().getId(); + if (config.get().callbackIP.equals(Constants.NOT_SET)) { + return textKey + Constants.STATUS_IP_MISSING; + } else if (config.get().callbackPort == -1) { + return textKey + Constants.STATUS_PORT_MISSING; + } else if (config.get().clientId.equals(Constants.NOT_SET)) { + return textKey + Constants.STATUS_CLIENT_ID_MISSING; + } else if (config.get().clientSecret.equals(Constants.NOT_SET)) { + return textKey + Constants.STATUS_CLIENT_SECRET_MISSING; + } else { + return Constants.EMPTY; + } + } + + @Override + public void dispose() { + if (!server.isEmpty()) { + server.get().stop(); + Utils.removePort(config.get().callbackPort); + } + } + + /** + * https://next.openhab.org/javadoc/latest/org/openhab/core/auth/client/oauth2/package-summary.html + */ + @Override + public void onAccessTokenResponse(AccessTokenResponse tokenResponse) { + if (!tokenResponse.getAccessToken().isEmpty()) { + // token not empty - fine + updateStatus(ThingStatus.ONLINE); + } else if (server.isEmpty()) { + // server not running - fix first + String textKey = Constants.STATUS_TEXT_PREFIX + thing.getThingTypeUID().getId() + + Constants.STATUS_SERVER_RESTART; + updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.NONE, textKey); + } else { + // all failed - start manual authorization + String textKey = Constants.STATUS_TEXT_PREFIX + thing.getThingTypeUID().getId() + + Constants.STATUS_AUTH_NEEDED; + updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.NONE, + textKey + " [\"" + thing.getProperties().get("callbackUrl") + "\"]"); + } + } + + public String getToken() { + return server.get().getToken(); + } + + public String getImageApiKey() { + return config.get().imageApiKey; + } + + @Override + public String toString() { + return Integer.toString(config.get().callbackPort); + } +} diff --git a/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/handler/VehicleHandler.java b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/handler/VehicleHandler.java new file mode 100644 index 00000000000..b8f741127ef --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/handler/VehicleHandler.java @@ -0,0 +1,579 @@ +/** + * Copyright (c) 2010-2022 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.mercedesme.internal.handler; + +import static org.openhab.binding.mercedesme.internal.Constants.*; + +import java.io.IOException; +import java.net.URI; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.nio.charset.StandardCharsets; +import java.time.Duration; +import java.time.Instant; +import java.util.ArrayList; +import java.util.Base64; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +import javax.measure.quantity.Length; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; +import org.eclipse.jetty.client.HttpClient; +import org.eclipse.jetty.client.api.ContentResponse; +import org.eclipse.jetty.client.api.Request; +import org.eclipse.jetty.http.HttpHeader; +import org.eclipse.jetty.util.MultiMap; +import org.eclipse.jetty.util.UrlEncoded; +import org.json.JSONArray; +import org.json.JSONObject; +import org.openhab.binding.mercedesme.internal.Constants; +import org.openhab.binding.mercedesme.internal.MercedesMeCommandOptionProvider; +import org.openhab.binding.mercedesme.internal.MercedesMeStateOptionProvider; +import org.openhab.binding.mercedesme.internal.config.VehicleConfiguration; +import org.openhab.binding.mercedesme.internal.utils.ChannelStateMap; +import org.openhab.binding.mercedesme.internal.utils.Mapper; +import org.openhab.core.i18n.TimeZoneProvider; +import org.openhab.core.library.types.DateTimeType; +import org.openhab.core.library.types.OnOffType; +import org.openhab.core.library.types.QuantityType; +import org.openhab.core.library.types.RawType; +import org.openhab.core.library.unit.Units; +import org.openhab.core.storage.Storage; +import org.openhab.core.storage.StorageService; +import org.openhab.core.thing.Bridge; +import org.openhab.core.thing.ChannelUID; +import org.openhab.core.thing.Thing; +import org.openhab.core.thing.ThingStatus; +import org.openhab.core.thing.ThingStatusDetail; +import org.openhab.core.thing.binding.BaseThingHandler; +import org.openhab.core.thing.binding.BridgeHandler; +import org.openhab.core.types.Command; +import org.openhab.core.types.CommandOption; +import org.openhab.core.types.RefreshType; +import org.openhab.core.types.State; +import org.openhab.core.types.StateOption; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * The {@link VehicleHandler} is responsible for handling commands, which are + * sent to one of the channels. + * + * @author Bernd Weymann - Initial contribution + */ +@NonNullByDefault +public class VehicleHandler extends BaseThingHandler { + private static final String EXT_IMG_RES = "ExtImageResources_"; + private static final String INITIALIZE_COMMAND = "Initialze"; + + private final Logger logger = LoggerFactory.getLogger(VehicleHandler.class); + private final Map timeHash = new HashMap(); + private final MercedesMeCommandOptionProvider mmcop; + private final MercedesMeStateOptionProvider mmsop; + private final TimeZoneProvider timeZoneProvider; + private final StorageService storageService; + private final HttpClient httpClient; + private final String uid; + + private Optional> refreshJob = Optional.empty(); + private Optional accountHandler = Optional.empty(); + private Optional> rangeElectric = Optional.empty(); + private Optional> imageStorage = Optional.empty(); + private Optional config = Optional.empty(); + private Optional> rangeFuel = Optional.empty(); + private Instant nextRefresh; + private boolean online = false; + + public VehicleHandler(Thing thing, HttpClient hc, String uid, StorageService storageService, + MercedesMeCommandOptionProvider mmcop, MercedesMeStateOptionProvider mmsop, TimeZoneProvider tzp) { + super(thing); + httpClient = hc; + this.uid = uid; + this.mmcop = mmcop; + this.mmsop = mmsop; + timeZoneProvider = tzp; + this.storageService = storageService; + nextRefresh = Instant.now(); + } + + @Override + public void handleCommand(ChannelUID channelUID, Command command) { + logger.trace("Received {} {} {}", channelUID.getAsString(), command.toFullString(), channelUID.getId()); + if (command instanceof RefreshType) { + /** + * Refresh requested e.g. after adding new item + * Adding several items will frequently raise RefreshType command. Calling API each time shall be avoided + * API update is performed after 5 seconds for all items which should be sufficient for a frequent update + */ + if (Instant.now().isAfter(nextRefresh)) { + nextRefresh = Instant.now().plus(Duration.ofSeconds(5)); + logger.trace("Refresh granted - next at {}", nextRefresh); + scheduler.schedule(this::getData, 5, TimeUnit.SECONDS); + } + } else if ("image-view".equals(channelUID.getIdWithoutGroup())) { + if (imageStorage.isPresent()) { + if (INITIALIZE_COMMAND.equals(command.toFullString())) { + getImageResources(); + } + String key = command.toFullString() + "_" + config.get().vin; + String encodedImage = EMPTY; + if (imageStorage.get().containsKey(key)) { + encodedImage = imageStorage.get().get(key); + logger.trace("Image {} found in storage", key); + } else { + logger.trace("Request Image {} ", key); + encodedImage = getImage(command.toFullString()); + if (!encodedImage.isEmpty()) { + imageStorage.get().put(key, encodedImage); + } + } + if (encodedImage != null && !encodedImage.isEmpty()) { + RawType image = new RawType(Base64.getDecoder().decode(encodedImage), + MIME_PREFIX + config.get().format); + updateState(new ChannelUID(thing.getUID(), GROUP_IMAGE, "image-data"), image); + } else { + logger.debug("Image {} is empty", key); + } + } + } else if (channelUID.getIdWithoutGroup().equals("clear-cache") && command.equals(OnOffType.ON)) { + List removals = new ArrayList(); + imageStorage.get().getKeys().forEach(entry -> { + if (entry.contains("_" + config.get().vin)) { + removals.add(entry); + } + }); + removals.forEach(entry -> { + imageStorage.get().remove(entry); + }); + updateState(new ChannelUID(thing.getUID(), GROUP_IMAGE, "clear-cache"), OnOffType.OFF); + getImageResources(); + } + } + + @Override + public void initialize() { + config = Optional.of(getConfigAs(VehicleConfiguration.class)); + Bridge bridge = getBridge(); + if (bridge != null) { + updateStatus(ThingStatus.UNKNOWN); + BridgeHandler handler = bridge.getHandler(); + if (handler != null) { + accountHandler = Optional.of((AccountHandler) handler); + startSchedule(config.get().refreshInterval); + if (!config.get().vin.equals(NOT_SET)) { + imageStorage = Optional.of(storageService.getStorage(BINDING_ID + "_" + config.get().vin)); + if (!imageStorage.get().containsKey(EXT_IMG_RES + config.get().vin)) { + getImageResources(); + } + setImageOtions(); + } + updateState(new ChannelUID(thing.getUID(), GROUP_IMAGE, "clear-cache"), OnOffType.OFF); + } else { + throw new IllegalStateException("BridgeHandler is null"); + } + } else { + String textKey = Constants.STATUS_TEXT_PREFIX + "vehicle" + Constants.STATUS_BRIDGE_MISSING; + updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, textKey); + } + } + + private void startSchedule(int interval) { + refreshJob.ifPresentOrElse(job -> { + if (job.isCancelled()) { + refreshJob = Optional + .of(scheduler.scheduleWithFixedDelay(this::getData, 0, interval, TimeUnit.MINUTES)); + } // else - scheduler is already running! + }, () -> { + refreshJob = Optional.of(scheduler.scheduleWithFixedDelay(this::getData, 0, interval, TimeUnit.MINUTES)); + }); + } + + @Override + public void dispose() { + refreshJob.ifPresent(job -> job.cancel(true)); + } + + public void getData() { + if (accountHandler.isEmpty()) { + logger.warn("AccountHandler not set"); + return; + } + String token = accountHandler.get().getToken(); + if (token.isEmpty()) { + String textKey = Constants.STATUS_TEXT_PREFIX + "vehicle" + Constants.STATUS_BRIDGE_ATHORIZATION; + updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, textKey); + return; + } else if (!online) { // only update if thing isn't already ONLINE + updateStatus(ThingStatus.ONLINE); + } + + // Mileage for all cars + String odoUrl = String.format(ODO_URL, config.get().vin); + if (accountConfigAvailable()) { + if (accountHandler.get().config.get().odoScope) { + call(odoUrl); + } else { + logger.trace("{} Odo scope not activated", this.getThing().getLabel()); + } + } else { + logger.trace("{} Account not properly configured", this.getThing().getLabel()); + } + + // Electric status for hybrid and electric + if (uid.equals(BEV) || uid.equals(HYBRID)) { + String evUrl = String.format(EV_URL, config.get().vin); + if (accountConfigAvailable()) { + if (accountHandler.get().config.get().evScope) { + call(evUrl); + } else { + logger.trace("{} Electric Status scope not activated", this.getThing().getLabel()); + } + } else { + logger.trace("{} Account not properly configured", this.getThing().getLabel()); + } + } + + // Fuel for hybrid and combustion + if (uid.equals(COMBUSTION) || uid.equals(HYBRID)) { + String fuelUrl = String.format(FUEL_URL, config.get().vin); + if (accountConfigAvailable()) { + if (accountHandler.get().config.get().fuelScope) { + call(fuelUrl); + } else { + logger.trace("{} Fuel scope not activated", this.getThing().getLabel()); + } + } else { + logger.trace("{} Account not properly configured", this.getThing().getLabel()); + } + } + + // Status and Lock for all + String statusUrl = String.format(STATUS_URL, config.get().vin); + if (accountConfigAvailable()) { + if (accountHandler.get().config.get().vehicleScope) { + call(statusUrl); + } else { + logger.trace("{} Vehicle Status scope not activated", this.getThing().getLabel()); + } + } else { + logger.trace("{} Account not properly configured", this.getThing().getLabel()); + } + String lockUrl = String.format(LOCK_URL, config.get().vin); + if (accountConfigAvailable()) { + if (accountHandler.get().config.get().lockScope) { + call(lockUrl); + } else { + logger.trace("{} Lock scope not activated", this.getThing().getLabel()); + } + } else { + logger.trace("{} Account not properly configured", this.getThing().getLabel()); + } + + // Range radius for all types + updateRadius(); + } + + private boolean accountConfigAvailable() { + if (accountHandler.isPresent()) { + if (accountHandler.get().config.isPresent()) { + return true; + } + } + return false; + } + + private void getImageResources() { + if (accountHandler.get().getImageApiKey().equals(NOT_SET)) { + logger.debug("Image API key not set"); + return; + } + // add config parameters + MultiMap parameterMap = new MultiMap(); + parameterMap.add("background", Boolean.toString(config.get().background)); + parameterMap.add("night", Boolean.toString(config.get().night)); + parameterMap.add("cropped", Boolean.toString(config.get().cropped)); + parameterMap.add("roofOpen", Boolean.toString(config.get().roofOpen)); + parameterMap.add("fileFormat", config.get().format); + String params = UrlEncoded.encode(parameterMap, StandardCharsets.UTF_8, false); + String url = String.format(IMAGE_EXTERIOR_RESOURCE_URL, config.get().vin) + "?" + params; + logger.debug("Get Image resources {} {} ", accountHandler.get().getImageApiKey(), url); + Request req = httpClient.newRequest(url); + req.header("x-api-key", accountHandler.get().getImageApiKey()); + req.header(HttpHeader.ACCEPT, "application/json"); + try { + ContentResponse cr = req.send(); + if (cr.getStatus() == 200) { + imageStorage.get().put(EXT_IMG_RES + config.get().vin, cr.getContentAsString()); + setImageOtions(); + } else { + logger.debug("Failed to get image resources {} {}", cr.getStatus(), cr.getContentAsString()); + } + } catch (InterruptedException | TimeoutException | ExecutionException e) { + logger.debug("Error getting image resources {}", e.getMessage()); + } + } + + private void setImageOtions() { + List entries = new ArrayList(); + if (imageStorage.get().containsKey(EXT_IMG_RES + config.get().vin)) { + String resources = imageStorage.get().get(EXT_IMG_RES + config.get().vin); + JSONObject jo = new JSONObject(resources); + jo.keySet().forEach(entry -> { + entries.add(entry); + }); + } + Collections.sort(entries); + List commandOptions = new ArrayList(); + List stateOptions = new ArrayList(); + entries.forEach(entry -> { + CommandOption co = new CommandOption(entry, null); + commandOptions.add(co); + StateOption so = new StateOption(entry, null); + stateOptions.add(so); + }); + if (commandOptions.isEmpty()) { + commandOptions.add(new CommandOption("Initilaze", null)); + stateOptions.add(new StateOption("Initilaze", null)); + } + ChannelUID cuid = new ChannelUID(thing.getUID(), GROUP_IMAGE, "image-view"); + mmcop.setCommandOptions(cuid, commandOptions); + mmsop.setStateOptions(cuid, stateOptions); + } + + private String getImage(String key) { + if (accountHandler.get().getImageApiKey().equals(NOT_SET)) { + logger.debug("Image API key not set"); + return EMPTY; + } + String imageId = EMPTY; + if (imageStorage.get().containsKey(EXT_IMG_RES + config.get().vin)) { + String resources = imageStorage.get().get(EXT_IMG_RES + config.get().vin); + JSONObject jo = new JSONObject(resources); + if (jo.has(key)) { + imageId = jo.getString(key); + } + } else { + getImageResources(); + return EMPTY; + } + + String url = IMAGE_BASE_URL + "/images/" + imageId; + Request req = httpClient.newRequest(url); + req.header("x-api-key", accountHandler.get().getImageApiKey()); + req.header(HttpHeader.ACCEPT, "*/*"); + ContentResponse cr; + try { + cr = req.send(); + byte[] response = cr.getContent(); + return Base64.getEncoder().encodeToString(response); + } catch (InterruptedException | TimeoutException | ExecutionException e) { + logger.warn("Get Image {} error {}", url, e.getMessage()); + } + return EMPTY; + } + + private void call(String url) { + String requestUrl = String.format(url, config.get().vin); + // Calculate endpoint for debugging + String[] endpoint = requestUrl.split("/"); + String finalEndpoint = endpoint[endpoint.length - 1]; + // debug prefix contains Thing label and call endpoint for propper debugging + String debugPrefix = this.getThing().getLabel() + Constants.COLON + finalEndpoint; + + Request req = httpClient.newRequest(requestUrl); + req.header(HttpHeader.AUTHORIZATION, "Bearer " + accountHandler.get().getToken()); + try { + ContentResponse cr = req.send(); + logger.trace("{} Response {} {}", debugPrefix, cr.getStatus(), cr.getContentAsString()); + if (cr.getStatus() == 200) { + distributeContent(cr.getContentAsString().trim()); + } + } catch (InterruptedException | TimeoutException | ExecutionException e) { + logger.info("{} Error getting data {}", debugPrefix, e.getMessage()); + fallbackCall(requestUrl); + } + } + + /** + * Fallback solution with Java11 classes + * Performs try with Java11 HttpClient - https://zetcode.com/java/getpostrequest/ to identify Community problem + * https://community.openhab.org/t/mercedes-me-binding/136852/21 + * + * @param requestUrl + */ + private void fallbackCall(String requestUrl) { + // Calculate endpoint for debugging + String[] endpoint = requestUrl.split("/"); + String finalEndpoint = endpoint[endpoint.length - 1]; + // debug prefix contains Thing label and call endpoint for propper debugging + String debugPrefix = this.getThing().getLabel() + Constants.COLON + finalEndpoint; + + java.net.http.HttpClient client = java.net.http.HttpClient.newHttpClient(); + HttpRequest request = HttpRequest.newBuilder().uri(URI.create(requestUrl)) + .header(HttpHeader.AUTHORIZATION.toString(), "Bearer " + accountHandler.get().getToken()).GET().build(); + try { + HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); + logger.debug("{} Fallback Response {} {}", debugPrefix, response.statusCode(), response.body()); + if (response.statusCode() == 200) { + distributeContent(response.body().trim()); + } + } catch (IOException | InterruptedException e) { + logger.warn("{} Error getting data via fallback {}", debugPrefix, e.getMessage()); + } + } + + private void distributeContent(String json) { + if (json.startsWith("[") && json.endsWith("]")) { + JSONArray ja = new JSONArray(json); + for (Iterator iterator = ja.iterator(); iterator.hasNext();) { + JSONObject jo = (JSONObject) iterator.next(); + ChannelStateMap csm = Mapper.getChannelStateMap(jo); + if (csm.isValid()) { + updateChannel(csm); + + /** + * handle some specific channels + */ + // store ChannelMap for range radius calculation + String channel = csm.getChannel(); + if ("range-electric".equals(channel)) { + rangeElectric = Optional.of((QuantityType) csm.getState()); + } else if ("range-fuel".equals(channel)) { + rangeFuel = Optional.of((QuantityType) csm.getState()); + } else if ("soc".equals(channel)) { + if (config.get().batteryCapacity > 0) { + float socValue = ((QuantityType) csm.getState()).floatValue(); + float batteryCapacity = config.get().batteryCapacity; + float chargedValue = Math.round(socValue * 1000 * batteryCapacity / 1000) / (float) 100; + ChannelStateMap charged = new ChannelStateMap("charged", GROUP_RANGE, + QuantityType.valueOf(chargedValue, Units.KILOWATT_HOUR), csm.getTimestamp()); + updateChannel(charged); + float unchargedValue = Math.round((100 - socValue) * 1000 * batteryCapacity / 1000) + / (float) 100; + ChannelStateMap uncharged = new ChannelStateMap("uncharged", GROUP_RANGE, + QuantityType.valueOf(unchargedValue, Units.KILOWATT_HOUR), csm.getTimestamp()); + updateChannel(uncharged); + } else { + logger.debug("No battery capacity given"); + } + } else if ("fuel-level".equals(channel)) { + if (config.get().fuelCapacity > 0) { + float fuelLevelValue = ((QuantityType) csm.getState()).floatValue(); + float fuelCapacity = config.get().fuelCapacity; + float litersInTank = Math.round(fuelLevelValue * 1000 * fuelCapacity / 1000) / (float) 100; + ChannelStateMap tankFilled = new ChannelStateMap("tank-remain", GROUP_RANGE, + QuantityType.valueOf(litersInTank, Units.LITRE), csm.getTimestamp()); + updateChannel(tankFilled); + float litersFree = Math.round((100 - fuelLevelValue) * 1000 * fuelCapacity / 1000) + / (float) 100; + ChannelStateMap tankOpen = new ChannelStateMap("tank-open", GROUP_RANGE, + QuantityType.valueOf(litersFree, Units.LITRE), csm.getTimestamp()); + updateChannel(tankOpen); + } else { + logger.debug("No fuel capacity given"); + } + } + } else { + logger.warn("Unable to deliver state for {}", jo); + } + } + } else { + logger.debug("JSON Array expected but received {}", json); + } + } + + private void updateRadius() { + if (rangeElectric.isPresent()) { + // update electric radius + ChannelStateMap radiusElectric = new ChannelStateMap("radius-electric", GROUP_RANGE, + guessRangeRadius(rangeElectric.get()), 0); + updateChannel(radiusElectric); + if (rangeFuel.isPresent()) { + // update fuel & hybrid radius + ChannelStateMap radiusFuel = new ChannelStateMap("radius-fuel", GROUP_RANGE, + guessRangeRadius(rangeFuel.get()), 0); + updateChannel(radiusFuel); + int hybridKm = rangeElectric.get().intValue() + rangeFuel.get().intValue(); + QuantityType hybridRangeState = QuantityType.valueOf(hybridKm, KILOMETRE_UNIT); + ChannelStateMap rangeHybrid = new ChannelStateMap("range-hybrid", GROUP_RANGE, hybridRangeState, 0); + updateChannel(rangeHybrid); + ChannelStateMap radiusHybrid = new ChannelStateMap("radius-hybrid", GROUP_RANGE, + guessRangeRadius(hybridRangeState), 0); + updateChannel(radiusHybrid); + } + } else if (rangeFuel.isPresent()) { + // update fuel & hybrid radius + ChannelStateMap radiusFuel = new ChannelStateMap("radius-fuel", GROUP_RANGE, + guessRangeRadius(rangeFuel.get()), 0); + updateChannel(radiusFuel); + } + } + + /** + * Easy function but there's some measures behind: + * Guessing the range of the Vehicle on Map. If you can drive x kilometers with your Vehicle it's not feasible to + * project this x km Radius on Map. The roads to be taken are causing some overhead because they are not a straight + * line from Location A to B. + * I've taken some measurements to calculate the overhead factor based on Google Maps + * Berlin - Dresden: Road Distance: 193 air-line Distance 167 = Factor 87% + * Kassel - Frankfurt: Road Distance: 199 air-line Distance 143 = Factor 72% + * After measuring more distances you'll find out that the outcome is between 70% and 90%. So + * + * This depends also on the roads of a concrete route but this is only a guess without any Route Navigation behind + * + * @param range + * @return mapping from air-line distance to "real road" distance + */ + public static State guessRangeRadius(QuantityType s) { + double radius = s.intValue() * 0.8; + return QuantityType.valueOf(Math.round(radius), KILOMETRE_UNIT); + } + + protected void updateChannel(ChannelStateMap csm) { + updateTime(csm.getGroup(), csm.getTimestamp()); + updateState(new ChannelUID(thing.getUID(), csm.getGroup(), csm.getChannel()), csm.getState()); + } + + private void updateTime(String group, long timestamp) { + boolean updateTime = false; + Long l = timeHash.get(group); + if (l != null) { + if (l.longValue() < timestamp) { + updateTime = true; + } + } else { + updateTime = true; + } + if (updateTime) { + timeHash.put(group, timestamp); + DateTimeType dtt = new DateTimeType(Instant.ofEpochMilli(timestamp).atZone(timeZoneProvider.getTimeZone())); + updateState(new ChannelUID(thing.getUID(), group, "last-update"), dtt); + } + } + + @Override + public void updateStatus(ThingStatus ts, ThingStatusDetail tsd, @Nullable String details) { + online = ts.equals(ThingStatus.ONLINE); + super.updateStatus(ts, tsd, details); + } +} diff --git a/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/server/CallbackServer.java b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/server/CallbackServer.java new file mode 100644 index 00000000000..22e97574e71 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/server/CallbackServer.java @@ -0,0 +1,183 @@ +/** + * Copyright (c) 2010-2022 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.mercedesme.internal.server; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jetty.client.HttpClient; +import org.eclipse.jetty.server.Connector; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.ServerConnector; +import org.eclipse.jetty.servlet.ServletHandler; +import org.openhab.binding.mercedesme.internal.Constants; +import org.openhab.binding.mercedesme.internal.config.AccountConfiguration; +import org.openhab.core.auth.client.oauth2.AccessTokenRefreshListener; +import org.openhab.core.auth.client.oauth2.AccessTokenResponse; +import org.openhab.core.auth.client.oauth2.OAuthClientService; +import org.openhab.core.auth.client.oauth2.OAuthException; +import org.openhab.core.auth.client.oauth2.OAuthFactory; +import org.openhab.core.auth.client.oauth2.OAuthResponseException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * The {@link CallbackServer} class defines an HTTP Server for authentication callbacks + * + * @author Bernd Weymann - Initial contribution + */ +@NonNullByDefault +public class CallbackServer { + private static final Logger LOGGER = LoggerFactory.getLogger(CallbackServer.class); + private static final Map AUTH_MAP = new HashMap(); + private static final Map SERVER_MAP = new HashMap(); + private static final AccessTokenResponse INVALID_ACCESS_TOKEN = new AccessTokenResponse(); + + private Optional server = Optional.empty(); + private AccessTokenRefreshListener listener; + private AccountConfiguration config; + private OAuthClientService oacs; + private String callbackUrl; + + public CallbackServer(AccessTokenRefreshListener l, HttpClient hc, OAuthFactory oAuthFactory, + AccountConfiguration config, String callbackUrl) { + oacs = oAuthFactory.createOAuthClientService(config.clientId, Constants.MB_TOKEN_URL, Constants.MB_AUTH_URL, + config.clientId, config.clientSecret, config.getScope(), false); + listener = l; + AUTH_MAP.put(Integer.valueOf(config.callbackPort), oacs); + SERVER_MAP.put(Integer.valueOf(config.callbackPort), this); + this.config = config; + this.callbackUrl = callbackUrl; + INVALID_ACCESS_TOKEN.setAccessToken(Constants.EMPTY); + } + + public String getAuthorizationUrl() { + try { + return oacs.getAuthorizationUrl(callbackUrl, null, null); + } catch (OAuthException e) { + LOGGER.warn("Error creating Authorization URL {}", e.getMessage()); + return Constants.EMPTY; + } + } + + public String getScope() { + return config.getScope(); + } + + public boolean start() { + LOGGER.debug("Start Callback Server for port {}", config.callbackPort); + if (!server.isEmpty()) { + LOGGER.debug("Callback server for port {} already started", config.callbackPort); + return true; + } + server = Optional.of(new Server()); + ServerConnector connector = new ServerConnector(server.get()); + connector.setPort(config.callbackPort); + server.get().setConnectors(new Connector[] { connector }); + ServletHandler servletHandler = new ServletHandler(); + server.get().setHandler(servletHandler); + servletHandler.addServletWithMapping(CallbackServlet.class, Constants.CALLBACK_ENDPOINT); + try { + server.get().start(); + } catch (Exception e) { + LOGGER.warn("Cannot start Callback Server for port {}, Error {}", config.callbackPort, e.getMessage()); + return false; + } + return true; + } + + public void stop() { + LOGGER.debug("Stop Callback Server"); + try { + if (!server.isEmpty()) { + server.get().stop(); + server = Optional.empty(); + } + } catch (Exception e) { + LOGGER.warn("Cannot start Callback Server for port {}, Error {}", config.callbackPort, e.getMessage()); + } + } + + public String getToken() { + AccessTokenResponse atr = null; + try { + /* + * this will automatically trigger + * - return last stored token if it's still valid + * - refreshToken if current token is expired + * - inform listeners if refresh delivered new token + * - store new token in persistence + */ + atr = oacs.getAccessTokenResponse(); + } catch (OAuthException | IOException | OAuthResponseException e) { + LOGGER.warn("Exception getting token {}", e.getMessage()); + } + if (atr == null) { + LOGGER.debug("Token empty - Manual Authorization needed at {}", callbackUrl); + listener.onAccessTokenResponse(INVALID_ACCESS_TOKEN); + return INVALID_ACCESS_TOKEN.getAccessToken(); + } + listener.onAccessTokenResponse(atr); + return atr.getAccessToken(); + } + + /** + * Static callback for Servlet calls + * + * @param port + * @param code + */ + public static void callback(int port, String code) { + LOGGER.trace("Callback from Servlet {} {}", port, code); + try { + OAuthClientService oacs = AUTH_MAP.get(port); + LOGGER.trace("Get token from code {}", code); + // get CallbackServer instance + CallbackServer srv = SERVER_MAP.get(port); + LOGGER.trace("Deliver token to {}", srv); + if (srv != null && oacs != null) { + // token stored and persisted inside oacs + AccessTokenResponse atr = oacs.getAccessTokenResponseByAuthorizationCode(code, srv.callbackUrl); + // inform listener - not done by oacs + srv.listener.onAccessTokenResponse(atr); + } else { + LOGGER.warn("Either Callbackserver {} or Authorization Service {} not found", srv, oacs); + } + } catch (OAuthException | IOException | OAuthResponseException e) { + LOGGER.warn("Exception getting token from code {} {}", code, e.getMessage()); + } + } + + public static String getAuthorizationUrl(int port) { + CallbackServer srv = SERVER_MAP.get(port); + if (srv != null) { + return srv.getAuthorizationUrl(); + } else { + LOGGER.debug("No Callbackserver found for {}", port); + return Constants.EMPTY; + } + } + + public static String getScope(int port) { + CallbackServer srv = SERVER_MAP.get(port); + if (srv != null) { + return srv.getScope(); + } else { + LOGGER.debug("No Callbackserver found for {}", port); + return Constants.EMPTY; + } + } +} diff --git a/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/server/CallbackServlet.java b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/server/CallbackServlet.java new file mode 100644 index 00000000000..5a418c6e780 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/server/CallbackServlet.java @@ -0,0 +1,73 @@ +/** + * Copyright (c) 2010-2022 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.mercedesme.internal.server; + +import java.io.IOException; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.openhab.binding.mercedesme.internal.Constants; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * The {@link CallbackServlet} class provides authentication callback endpoint + * + * @author Bernd Weymann - Initial contribution + */ +@SuppressWarnings("serial") +@NonNullByDefault +public class CallbackServlet extends HttpServlet { + private final Logger logger = LoggerFactory.getLogger(CallbackServlet.class); + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String code = request.getParameter(Constants.CODE); + if (code != null) { + CallbackServer.callback(request.getLocalPort(), code); + logger.trace("Code successfully extracted {}", request.getParameterMap()); + response.setContentType("application/json"); + response.setStatus(HttpServletResponse.SC_OK); + response.getWriter().println(request.getParameterMap()); + response.getWriter().println("{ \"status\": \"ok\"}"); + } else { + response.setContentType("text/html"); + response.setStatus(HttpServletResponse.SC_OK); + response.getWriter().println(""); + response.getWriter().println(""); + response.getWriter().println("Call Parameters"); + response.getWriter().println("
"); + response.getWriter().println(request.getParameterMap()); + response.getWriter().println("

"); + response.getWriter().println("Configured scopes
"); + String[] scopes = CallbackServer.getScope(request.getLocalPort()).split(Constants.SPACE); + for (int i = 0; i < scopes.length; i++) { + response.getWriter().println(scopes[i] + "
"); + } + response.getWriter().println("

"); + response.getWriter().println("Get your access token for openHAB MercedesMe Binding"); + response.getWriter().println("
"); + response.getWriter().println("Start Authorization"); + response.getWriter().println(""); + response.getWriter().println(""); + } + logger.debug("Call from {}:{} parameters {}", request.getLocalAddr(), request.getLocalPort(), + request.getParameterMap()); + } +} diff --git a/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/server/Utils.java b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/server/Utils.java new file mode 100644 index 00000000000..0c98f72ac6b --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/server/Utils.java @@ -0,0 +1,88 @@ +/** + * Copyright (c) 2010-2022 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.mercedesme.internal.server; + +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.net.SocketException; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.openhab.binding.mercedesme.internal.Constants; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * The {@link Utils} class defines an HTTP Server for authentication callbacks + * + * @author Bernd Weymann - Initial contribution + */ +@NonNullByDefault +public class Utils { + private static final Logger LOGGER = LoggerFactory.getLogger(Utils.class); + private static final List PORTS = new ArrayList(); + private static int port = 8090; + + /** + * Get free port without other Thread interference + * + * @return + */ + public static synchronized int getFreePort() { + while (PORTS.contains(port)) { + port++; + } + PORTS.add(port); + return port; + } + + public static synchronized void addPort(int portNr) { + if (PORTS.contains(portNr)) { + LOGGER.warn("Port {} already occupied", portNr); + } + PORTS.add(portNr); + } + + public static synchronized void removePort(int portNr) { + PORTS.remove(Integer.valueOf(portNr)); + } + + public static String getCallbackIP() throws SocketException { + // https://stackoverflow.com/questions/1062041/ip-address-not-obtained-in-java + for (Enumeration ifaces = NetworkInterface.getNetworkInterfaces(); ifaces + .hasMoreElements();) { + NetworkInterface iface = ifaces.nextElement(); + try { + if (!iface.isLoopback()) { + if (iface.isUp()) { + for (Enumeration addresses = iface.getInetAddresses(); addresses + .hasMoreElements();) { + InetAddress address = addresses.nextElement(); + return address.getHostAddress(); + } + } + } + } catch (SocketException se) { + // Calling one network interface failed - continue searching + LOGGER.trace("Network {} failed {}", iface.getName(), se.getMessage()); + } + } + throw new SocketException("IP address not detected"); + } + + public static String getCallbackAddress(String callbackIP, int callbackPort) { + return "http://" + callbackIP + Constants.COLON + callbackPort + Constants.CALLBACK_ENDPOINT; + } +} diff --git a/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/utils/ChannelStateMap.java b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/utils/ChannelStateMap.java new file mode 100644 index 00000000000..71c1a0e8498 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/utils/ChannelStateMap.java @@ -0,0 +1,61 @@ +/** + * Copyright (c) 2010-2022 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.mercedesme.internal.utils; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.openhab.core.types.State; + +/** + * The {@link ChannelStateMap} holds the necessary values to update a channel state + * + * @author Bernd Weymann - Initial contribution + */ +@NonNullByDefault +public class ChannelStateMap { + private String channel; + private String group; + private State state; + private long timestamp; + + public ChannelStateMap(String ch, String grp, State st, long ts) { + channel = ch; + group = grp; + state = st; + timestamp = ts; + } + + public String getChannel() { + return channel; + } + + public String getGroup() { + return group; + } + + public State getState() { + return state; + } + + public long getTimestamp() { + return timestamp; + } + + @Override + public String toString() { + return group + ":" + channel + " " + state; + } + + public boolean isValid() { + return !channel.isEmpty(); + } +} diff --git a/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/utils/Mapper.java b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/utils/Mapper.java new file mode 100644 index 00000000000..512e843a736 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/utils/Mapper.java @@ -0,0 +1,237 @@ +/** + * Copyright (c) 2010-2022 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.mercedesme.internal.utils; + +import static org.openhab.binding.mercedesme.internal.Constants.*; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.json.JSONObject; +import org.openhab.core.library.types.DecimalType; +import org.openhab.core.library.types.OnOffType; +import org.openhab.core.library.types.OpenClosedType; +import org.openhab.core.library.types.QuantityType; +import org.openhab.core.library.unit.Units; +import org.openhab.core.types.State; +import org.openhab.core.types.UnDefType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * The {@link Mapper} maps a given Json Object towards a channel, group and state + * + * @author Bernd Weymann - Initial contribution + */ +@NonNullByDefault +public class Mapper { + private static final Logger LOGGER = LoggerFactory.getLogger(Mapper.class); + + public static final ChannelStateMap INVALID_MAP = new ChannelStateMap(EMPTY, EMPTY, UnDefType.UNDEF, -1); + public static final Map CHANNELS = new HashMap(); + public static final String TIMESTAMP = "timestamp"; + public static final String VALUE = "value"; + + public static ChannelStateMap getChannelStateMap(JSONObject jo) { + if (CHANNELS.isEmpty()) { + init(); + } + Set s = jo.keySet(); + if (s.size() == 1) { + String id = s.toArray()[0].toString(); + String[] ch = CHANNELS.get(id); + if (ch != null) { + State state; + switch (id) { + // Kilometer values + case "odo": + case "rangeelectric": + case "rangeliquid": + state = getKilometers((JSONObject) jo.get(id)); + return new ChannelStateMap(ch[0], ch[1], state, getTimestamp((JSONObject) jo.get(id))); + + // Percentages + case "soc": + case "tanklevelpercent": + state = getPercentage((JSONObject) jo.get(id)); + return new ChannelStateMap(ch[0], ch[1], state, getTimestamp((JSONObject) jo.get(id))); + + // Contacts + case "decklidstatus": + case "doorstatusfrontleft": + case "doorstatusfrontright": + case "doorstatusrearleft": + case "doorstatusrearright": + state = getContact((JSONObject) jo.get(id)); + return new ChannelStateMap(ch[0], ch[1], state, getTimestamp((JSONObject) jo.get(id))); + + // Number Status + case "lightswitchposition": + case "rooftopstatus": + case "sunroofstatus": + case "windowstatusfrontleft": + case "windowstatusfrontright": + case "windowstatusrearleft": + case "windowstatusrearright": + case "doorlockstatusvehicle": + state = getDecimal((JSONObject) jo.get(id)); + return new ChannelStateMap(ch[0], ch[1], state, getTimestamp((JSONObject) jo.get(id))); + + // Switches + case "interiorLightsFront": + case "interiorLightsRear": + case "readingLampFrontLeft": + case "readingLampFrontRight": + state = getOnOffType((JSONObject) jo.get(id)); + return new ChannelStateMap(ch[0], ch[1], state, getTimestamp((JSONObject) jo.get(id))); + + case "doorlockstatusdecklid": + case "doorlockstatusgas": + state = getOnOffTypeLock((JSONObject) jo.get(id)); + return new ChannelStateMap(ch[0], ch[1], state, getTimestamp((JSONObject) jo.get(id))); + + // Angle + case "positionHeading": + state = getAngle((JSONObject) jo.get(id)); + return new ChannelStateMap(ch[0], ch[1], state, getTimestamp((JSONObject) jo.get(id))); + default: + LOGGER.trace("No mapping available for {}", id); + } + } else { + LOGGER.trace("No mapping available for {}", id); + } + } else { + LOGGER.debug("More than one key found {}", s); + } + return INVALID_MAP; + } + + private static long getTimestamp(JSONObject jo) { + if (jo.has(TIMESTAMP)) { + return jo.getLong(TIMESTAMP); + } + return -1; + } + + private static State getOnOffType(JSONObject jo) { + if (jo.has(VALUE)) { + String value = jo.get(VALUE).toString(); + boolean b = Boolean.valueOf(value); + return OnOffType.from(b); + } else { + LOGGER.warn("JSONObject contains no value {}", jo); + return UnDefType.UNDEF; + } + } + + private static State getOnOffTypeLock(JSONObject jo) { + if (jo.has(VALUE)) { + String value = jo.get(VALUE).toString(); + boolean b = Boolean.valueOf(value); + // Yes, false is locked and true unlocked + // https://developer.mercedes-benz.com/products/vehicle_lock_status/specifications/vehicle_lock_status_api + return OnOffType.from(!b); + } else { + LOGGER.warn("JSONObject contains no value {}", jo); + return UnDefType.UNDEF; + } + } + + private static State getAngle(JSONObject jo) { + if (jo.has(VALUE)) { + String value = jo.get(VALUE).toString(); + return QuantityType.valueOf(Double.valueOf(value), Units.DEGREE_ANGLE); + } else { + LOGGER.warn("JSONObject contains no value {}", jo); + return UnDefType.UNDEF; + } + } + + private static State getDecimal(JSONObject jo) { + if (jo.has(VALUE)) { + String value = jo.get(VALUE).toString(); + return DecimalType.valueOf(value); + } else { + LOGGER.warn("JSONObject contains no value {}", jo); + return UnDefType.UNDEF; + } + } + + private static State getContact(JSONObject jo) { + if (jo.has(VALUE)) { + String value = jo.get(VALUE).toString(); + boolean b = Boolean.valueOf(value); + if (!b) { + return OpenClosedType.CLOSED; + } else { + return OpenClosedType.OPEN; + } + } else { + LOGGER.warn("JSONObject contains no value {}", jo); + return UnDefType.UNDEF; + } + } + + private static State getKilometers(JSONObject jo) { + if (jo.has(VALUE)) { + String value = jo.get(VALUE).toString(); + return QuantityType.valueOf(Integer.valueOf(value), KILOMETRE_UNIT); + } else { + LOGGER.warn("JSONObject contains no value {}", jo); + return UnDefType.UNDEF; + } + } + + private static State getPercentage(JSONObject jo) { + if (jo.has(VALUE)) { + String value = jo.get(VALUE).toString(); + return QuantityType.valueOf(Integer.valueOf(value), Units.PERCENT); + } else { + LOGGER.warn("JSONObject contains no value {}", jo); + return UnDefType.UNDEF; + } + } + + /** + * Mapping of json id towards channel group and id + */ + private static void init() { + CHANNELS.put("odo", new String[] { "mileage", GROUP_RANGE }); + CHANNELS.put("rangeelectric", new String[] { "range-electric", GROUP_RANGE }); + CHANNELS.put("soc", new String[] { "soc", GROUP_RANGE }); + CHANNELS.put("rangeliquid", new String[] { "range-fuel", GROUP_RANGE }); + CHANNELS.put("tanklevelpercent", new String[] { "fuel-level", GROUP_RANGE }); + CHANNELS.put("decklidstatus", new String[] { "deck-lid", GROUP_DOORS }); + CHANNELS.put("doorstatusfrontleft", new String[] { "driver-front", GROUP_DOORS }); + CHANNELS.put("doorstatusfrontright", new String[] { "passenger-front", GROUP_DOORS }); + CHANNELS.put("doorstatusrearleft", new String[] { "driver-rear", GROUP_DOORS }); + CHANNELS.put("doorstatusrearright", new String[] { "passenger-rear", GROUP_DOORS }); + CHANNELS.put("interiorLightsFront", new String[] { "interior-front", GROUP_LIGHTS }); + CHANNELS.put("interiorLightsRear", new String[] { "interior-rear", GROUP_LIGHTS }); + CHANNELS.put("lightswitchposition", new String[] { "light-switch", GROUP_LIGHTS }); + CHANNELS.put("readingLampFrontLeft", new String[] { "reading-left", GROUP_LIGHTS }); + CHANNELS.put("readingLampFrontRight", new String[] { "reading-right", GROUP_LIGHTS }); + CHANNELS.put("rooftopstatus", new String[] { "rooftop", GROUP_DOORS }); + CHANNELS.put("sunroofstatus", new String[] { "sunroof", GROUP_DOORS }); + CHANNELS.put("windowstatusfrontleft", new String[] { "driver-front", GROUP_WINDOWS }); + CHANNELS.put("windowstatusfrontright", new String[] { "passenger-front", GROUP_WINDOWS }); + CHANNELS.put("windowstatusrearleft", new String[] { "driver-rear", GROUP_WINDOWS }); + CHANNELS.put("windowstatusrearright", new String[] { "passenger-rear", GROUP_WINDOWS }); + CHANNELS.put("doorlockstatusvehicle", new String[] { "doors", GROUP_LOCK }); + CHANNELS.put("doorlockstatusdecklid", new String[] { "deck-lid", GROUP_LOCK }); + CHANNELS.put("doorlockstatusgas", new String[] { "flap", GROUP_LOCK }); + CHANNELS.put("positionHeading", new String[] { "heading", GROUP_LOCATION }); + } +} diff --git a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/binding/binding.xml b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/binding/binding.xml new file mode 100644 index 00000000000..e0b0cfa9785 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/binding/binding.xml @@ -0,0 +1,9 @@ + + + + Mercedes Me Binding + The binding provides access to your Mercedes developer account and vehicles + + diff --git a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/config/bev-config.xml b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/config/bev-config.xml new file mode 100644 index 00000000000..78529163386 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/config/bev-config.xml @@ -0,0 +1,57 @@ + + + + + + + + + + Data refresh rate for vehicle data + 5 + + + + Battery capacity in kWh of vehicle + + + + + Vehicle images provided with or without background + false + true + + + + Vehicle images in night conditions + false + true + + + + Vehicle images in 4:3 instead of 16:9 + false + true + + + + Vehicle images with open roof (only Cabriolet) + false + true + + + + Preferred Image Format + webp + true + + + + + + + + diff --git a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/config/bridge-config.xml b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/config/bridge-config.xml new file mode 100644 index 00000000000..30f6b2049fb --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/config/bridge-config.xml @@ -0,0 +1,56 @@ + + + + + + + Mercedes Benz Developer Client ID + + + + Mercedes Benz Developer Client Secret + + + + Mercedes Benz Developer Image API Key + + + + Provides total Mileage + true + + + + Status of doors, windows lights + true + + + + Lock status of doors and trunk + true + + + + Tank level and range + true + + + + Electric charge and range + true + + + + IP address for openHAB callback URL + true + + + + Port Number for openHAB callback URL + true + + + diff --git a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/config/conv-config.xml b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/config/conv-config.xml new file mode 100644 index 00000000000..d4bc9869b33 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/config/conv-config.xml @@ -0,0 +1,57 @@ + + + + + + + + + + Data refresh rate for your vehicle data + 5 + + + + Fuel capacity in liters of vehicle + + + + + Vehicle images provided with or without background + false + true + + + + Vehicle images in night conditions + false + true + + + + Vehicle images in 4:3 instead of 16:9 + false + true + + + + Vehicle images with open roof (only Cabriolet) + false + true + + + + Preferred Image Format + webp + true + + + + + + + + diff --git a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/config/hybrid-config.xml b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/config/hybrid-config.xml new file mode 100644 index 00000000000..55415dd1c2d --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/config/hybrid-config.xml @@ -0,0 +1,61 @@ + + + + + + + + + + Data refresh rate for vehicle data + 5 + + + + Battery capacity in kWh of vehicle + + + + Fuel capacity in liters of vehicle + + + + + Vehicle images provided with or without background + false + true + + + + Vehicle images in night conditions + false + true + + + + Vehicle images in 4:3 instead of 16:9 + false + true + + + + Vehicle images with open roof (only Cabriolet) + false + true + + + + Preferred Image Format + webp + true + + + + + + + + diff --git a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/i18n/mercedesme.properties b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/i18n/mercedesme.properties new file mode 100644 index 00000000000..e9328cf4842 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/i18n/mercedesme.properties @@ -0,0 +1,218 @@ +# binding + +binding.mercedesme.name = Mercedes Me Binding +binding.mercedesme.description = The binding provides access to your Mercedes developer account and vehicles + +# thing types + +thing-type.mercedesme.account.label = Mercedes Me Account +thing-type.mercedesme.account.description = Mercedes Benz account data +thing-type.mercedesme.bev.label = Mercedes Benz BEV +thing-type.mercedesme.bev.description = Battery Electric Vehicle +thing-type.mercedesme.combustion.label = Mercedes Benz +thing-type.mercedesme.combustion.description = Conventional Fuel Vehicle +thing-type.mercedesme.hybrid.label = Mercedes Benz Hybrid +thing-type.mercedesme.hybrid.description = Conventional Fuel Vehicle with supporting Electric Engine + +# thing types config + +thing-type.config.mercedesme.bev.background.label = Background Image +thing-type.config.mercedesme.bev.background.description = Vehicle images provided with or without background +thing-type.config.mercedesme.bev.batteryCapacity.label = Battery Capacity +thing-type.config.mercedesme.bev.batteryCapacity.description = Battery capacity in kwh of vehicle +thing-type.config.mercedesme.bev.cropped.label = Cropped Image +thing-type.config.mercedesme.bev.cropped.description = Vehicle images in 4:3 instead of 16:9 +thing-type.config.mercedesme.bev.format.label = Image Format +thing-type.config.mercedesme.bev.format.description = Preferred Image Format +thing-type.config.mercedesme.bev.format.option.webp = webp +thing-type.config.mercedesme.bev.format.option.png = png +thing-type.config.mercedesme.bev.format.option.jpeg = jpeg +thing-type.config.mercedesme.bev.night.label = Night Image +thing-type.config.mercedesme.bev.night.description = Vehicle images in night conditions +thing-type.config.mercedesme.bev.refreshInterval.label = Refresh Interval +thing-type.config.mercedesme.bev.refreshInterval.description = Data refresh rate for vehicle data +thing-type.config.mercedesme.bev.roofOpen.label = Cabriolet Open Roof +thing-type.config.mercedesme.bev.roofOpen.description = Vehicle images with open roof (only Cabriolet) +thing-type.config.mercedesme.bev.vin.label = Vehicle Identification Number +thing-type.config.mercedesme.bridge.callbackIP.label = Callback IP Address +thing-type.config.mercedesme.bridge.callbackIP.description = IP address for openHAB callback URL +thing-type.config.mercedesme.bridge.callbackPort.label = Callback Port Number +thing-type.config.mercedesme.bridge.callbackPort.description = Port Number for openHAB callback URL +thing-type.config.mercedesme.bridge.clientId.label = MB Developer Client ID +thing-type.config.mercedesme.bridge.clientId.description = Mercedes Benz Developer Client ID +thing-type.config.mercedesme.bridge.clientSecret.label = MB Developer Client Secret +thing-type.config.mercedesme.bridge.clientSecret.description = Mercedes Benz Developer Client Secret +thing-type.config.mercedesme.bridge.evScope.label = Electric Vehicle Status +thing-type.config.mercedesme.bridge.evScope.description = Electric charge and range +thing-type.config.mercedesme.bridge.fuelScope.label = Fuel Status +thing-type.config.mercedesme.bridge.fuelScope.description = Tank level and range +thing-type.config.mercedesme.bridge.imageApiKey.label = MB Developer Image API Key +thing-type.config.mercedesme.bridge.imageApiKey.description = Mercedes Benz Developer Image API Key +thing-type.config.mercedesme.bridge.lockScope.label = Vehicle Lock Status +thing-type.config.mercedesme.bridge.lockScope.description = Lock status of doors and trunk +thing-type.config.mercedesme.bridge.odoScope.label = PayAsYourDrive Insurance +thing-type.config.mercedesme.bridge.odoScope.description = Provides total Mileage +thing-type.config.mercedesme.bridge.vehicleScope.label = Vehicle Status +thing-type.config.mercedesme.bridge.vehicleScope.description = Status of doors, windows lights +thing-type.config.mercedesme.conv.background.label = Background Image +thing-type.config.mercedesme.conv.background.description = Vehicle images provided with or without background +thing-type.config.mercedesme.conv.cropped.label = Cropped Image +thing-type.config.mercedesme.conv.cropped.description = Vehicle images in 4:3 instead of 16:9 +thing-type.config.mercedesme.conv.format.label = Image Format +thing-type.config.mercedesme.conv.format.description = Preferred Image Format +thing-type.config.mercedesme.conv.format.option.webp = webp +thing-type.config.mercedesme.conv.format.option.png = png +thing-type.config.mercedesme.conv.format.option.jpeg = jpeg +thing-type.config.mercedesme.conv.fuelCapacity.label = Fuel Capacity +thing-type.config.mercedesme.conv.fuelCapacity.description = Fuel capacity in liters of vehicle +thing-type.config.mercedesme.conv.night.label = Night Image +thing-type.config.mercedesme.conv.night.description = Vehicle images in night conditions +thing-type.config.mercedesme.conv.refreshInterval.label = Refresh Interval +thing-type.config.mercedesme.conv.refreshInterval.description = Data refresh rate for your vehicle data +thing-type.config.mercedesme.conv.roofOpen.label = Cabriolet Open Roof +thing-type.config.mercedesme.conv.roofOpen.description = Vehicle images with open roof (only Cabriolet) +thing-type.config.mercedesme.conv.vin.label = Vehicle Identification Number +thing-type.config.mercedesme.hybrid.background.label = Background Image +thing-type.config.mercedesme.hybrid.background.description = Vehicle images provided with or without background +thing-type.config.mercedesme.hybrid.batteryCapacity.label = Battery Capacity +thing-type.config.mercedesme.hybrid.batteryCapacity.description = Battery capacity in kwh of vehicle +thing-type.config.mercedesme.hybrid.cropped.label = Cropped Image +thing-type.config.mercedesme.hybrid.cropped.description = Vehicle images in 4:3 instead of 16:9 +thing-type.config.mercedesme.hybrid.format.label = Image Format +thing-type.config.mercedesme.hybrid.format.description = Preferred Image Format +thing-type.config.mercedesme.hybrid.format.option.webp = webp +thing-type.config.mercedesme.hybrid.format.option.png = png +thing-type.config.mercedesme.hybrid.format.option.jpeg = jpeg +thing-type.config.mercedesme.hybrid.fuelCapacity.label = Fuel Capacity +thing-type.config.mercedesme.hybrid.fuelCapacity.description = Fuel capacity in liters of vehicle +thing-type.config.mercedesme.hybrid.night.label = Night Image +thing-type.config.mercedesme.hybrid.night.description = Vehicle images in night conditions +thing-type.config.mercedesme.hybrid.refreshInterval.label = Refresh Interval +thing-type.config.mercedesme.hybrid.refreshInterval.description = Data refresh rate for vehicle data +thing-type.config.mercedesme.hybrid.roofOpen.label = Cabriolet Open Roof +thing-type.config.mercedesme.hybrid.roofOpen.description = Vehicle images with open roof (only Cabriolet) +thing-type.config.mercedesme.hybrid.vin.label = Vehicle Identification Number + +# channel group types + +channel-group-type.mercedesme.door-values.label = Detailed Door Status +channel-group-type.mercedesme.door-values.description = Detailed Status of all Doors and Windows +channel-group-type.mercedesme.image-values.label = Vehicle Images +channel-group-type.mercedesme.light-values.label = Light Status +channel-group-type.mercedesme.light-values.description = Light Status of interior lights and main light switch +channel-group-type.mercedesme.location-values.label = Vehicle Location +channel-group-type.mercedesme.location-values.description = Heading of vehicle +channel-group-type.mercedesme.lock-values.label = Lock Status +channel-group-type.mercedesme.lock-values.description = Vehicle Lock Status +channel-group-type.mercedesme.range-conv-values.label = Range and Fuel Data +channel-group-type.mercedesme.range-conv-values.description = Provides Mileage, remaining range and fuel level values +channel-group-type.mercedesme.range-ev-values.label = Range and Charge Data +channel-group-type.mercedesme.range-ev-values.description = Provides Mileage, remaining range and charge level values +channel-group-type.mercedesme.range-hybrid-values.label = Range, Charge / Fuel Data +channel-group-type.mercedesme.range-hybrid-values.description = Provides mileage, remaining fuel and range data for hybrid vehicles +channel-group-type.mercedesme.window-values.label = Detailed Window Status +channel-group-type.mercedesme.window-values.description = Detailed Status Windows + +# channel types + +channel-type.mercedesme.charged-channel.label = Charged Battery Energy +channel-type.mercedesme.clear-cache-channel.label = Remove All Stored Images +channel-type.mercedesme.deck-lid-channel.label = Deck Lid +channel-type.mercedesme.deck-lid-lock-channel.label = Deck Lid Lock +channel-type.mercedesme.doors-lock-channel.label = Door Lock Status +channel-type.mercedesme.doors-lock-channel.state.option.0 = Unlocked +channel-type.mercedesme.doors-lock-channel.state.option.1 = Locked Internal +channel-type.mercedesme.doors-lock-channel.state.option.2 = Locked External +channel-type.mercedesme.doors-lock-channel.state.option.3 = Unlocked Selective +channel-type.mercedesme.driver-front-channel.label = Driver Door +channel-type.mercedesme.driver-rear-channel.label = Driver Door Rear +channel-type.mercedesme.flap-lock-channel.label = Flap Lock +channel-type.mercedesme.fuel-level-channel.label = Fuel Level +channel-type.mercedesme.fuel-open-channel.label = Open Fuel Capacity +channel-type.mercedesme.fuel-remain-channel.label = Remaining Fuel +channel-type.mercedesme.heading-channel.label = Heading Angle +channel-type.mercedesme.image-data-channel.label = Rendered Vehicle Image +channel-type.mercedesme.image-view-channel.label = Image Viewport +channel-type.mercedesme.interior-front-channel.label = Interior Light Front +channel-type.mercedesme.interior-rear-channel.label = Interior Light Rear +channel-type.mercedesme.last-doors-update-channel.label = Last Doors Update +channel-type.mercedesme.last-doors-update-channel.state.pattern = %1$tA, %1$td.%1$tm. %1$tH:%1$tM +channel-type.mercedesme.last-lights-update-channel.label = Last Light Update +channel-type.mercedesme.last-lights-update-channel.state.pattern = %1$tA, %1$td.%1$tm. %1$tH:%1$tM +channel-type.mercedesme.last-location-update-channel.label = Last Location Update +channel-type.mercedesme.last-location-update-channel.state.pattern = %1$tA, %1$td.%1$tm. %1$tH:%1$tM +channel-type.mercedesme.last-lock-update-channel.label = Last Lock Update +channel-type.mercedesme.last-lock-update-channel.state.pattern = %1$tA, %1$td.%1$tm. %1$tH:%1$tM +channel-type.mercedesme.last-range-update-channel.label = Last Range Update +channel-type.mercedesme.last-range-update-channel.state.pattern = %1$tA, %1$td.%1$tm. %1$tH:%1$tM +channel-type.mercedesme.last-windows-update-channel.label = Last Window Update +channel-type.mercedesme.last-windows-update-channel.state.pattern = %1$tA, %1$td.%1$tm. %1$tH:%1$tM +channel-type.mercedesme.light-switch-channel.label = Main Light Rotary +channel-type.mercedesme.light-switch-channel.state.option.0 = Auto +channel-type.mercedesme.light-switch-channel.state.option.1 = Headlight +channel-type.mercedesme.light-switch-channel.state.option.2 = Sidelight Left +channel-type.mercedesme.light-switch-channel.state.option.3 = Sidelight Right +channel-type.mercedesme.light-switch-channel.state.option.4 = Parking Light +channel-type.mercedesme.mileage-channel.label = Mileage +channel-type.mercedesme.passenger-front-channel.label = Passenger Door +channel-type.mercedesme.passenger-rear-channel.label = Passenger Door Rear +channel-type.mercedesme.radius-electric-channel.label = Electric Radius +channel-type.mercedesme.radius-fuel-channel.label = Fuel Radius +channel-type.mercedesme.radius-hybrid-channel.label = Hybrid Radius +channel-type.mercedesme.range-electric-channel.label = Electric Range +channel-type.mercedesme.range-fuel-channel.label = Fuel Range +channel-type.mercedesme.range-hybrid-channel.label = Hybrid Range +channel-type.mercedesme.reading-left-channel.label = Reading Light Left +channel-type.mercedesme.reading-right-channel.label = Reading Light Right +channel-type.mercedesme.rooftop-channel.label = Roof top +channel-type.mercedesme.rooftop-channel.state.option.0 = Unlocked +channel-type.mercedesme.rooftop-channel.state.option.1 = Open and locked +channel-type.mercedesme.rooftop-channel.state.option.2 = Closed and locked +channel-type.mercedesme.soc-channel.label = Battery Charge Level +channel-type.mercedesme.sunroof-channel.label = Sun Roof +channel-type.mercedesme.sunroof-channel.state.option.0 = Closed +channel-type.mercedesme.sunroof-channel.state.option.1 = Open +channel-type.mercedesme.sunroof-channel.state.option.2 = Open Lifting +channel-type.mercedesme.sunroof-channel.state.option.3 = Running +channel-type.mercedesme.sunroof-channel.state.option.4 = Closing +channel-type.mercedesme.sunroof-channel.state.option.5 = Opening +channel-type.mercedesme.sunroof-channel.state.option.6 = Closing +channel-type.mercedesme.uncharged-channel.label = Uncharged Battery Energy +channel-type.mercedesme.window-driver-front-channel.label = Driver Window +channel-type.mercedesme.window-driver-front-channel.state.option.0 = Intermediate +channel-type.mercedesme.window-driver-front-channel.state.option.1 = Open +channel-type.mercedesme.window-driver-front-channel.state.option.2 = Closed +channel-type.mercedesme.window-driver-front-channel.state.option.3 = Airing +channel-type.mercedesme.window-driver-front-channel.state.option.4 = Intermediate +channel-type.mercedesme.window-driver-front-channel.state.option.5 = Running +channel-type.mercedesme.window-driver-rear-channel.label = Driver Window Rear +channel-type.mercedesme.window-driver-rear-channel.state.option.0 = Intermediate +channel-type.mercedesme.window-driver-rear-channel.state.option.1 = Open +channel-type.mercedesme.window-driver-rear-channel.state.option.2 = Closed +channel-type.mercedesme.window-driver-rear-channel.state.option.3 = Airing +channel-type.mercedesme.window-driver-rear-channel.state.option.4 = Intermediate +channel-type.mercedesme.window-driver-rear-channel.state.option.5 = Running +channel-type.mercedesme.window-passenger-front-channel.label = Passenger Window +channel-type.mercedesme.window-passenger-front-channel.state.option.0 = Intermediate +channel-type.mercedesme.window-passenger-front-channel.state.option.1 = Open +channel-type.mercedesme.window-passenger-front-channel.state.option.2 = Closed +channel-type.mercedesme.window-passenger-front-channel.state.option.3 = Airing +channel-type.mercedesme.window-passenger-front-channel.state.option.4 = Intermediate +channel-type.mercedesme.window-passenger-front-channel.state.option.5 = Running +channel-type.mercedesme.window-passenger-rear-channel.label = Passenger Window Rear +channel-type.mercedesme.window-passenger-rear-channel.state.option.0 = Intermediate +channel-type.mercedesme.window-passenger-rear-channel.state.option.1 = Open +channel-type.mercedesme.window-passenger-rear-channel.state.option.2 = Closed +channel-type.mercedesme.window-passenger-rear-channel.state.option.3 = Airing +channel-type.mercedesme.window-passenger-rear-channel.state.option.4 = Intermediate +channel-type.mercedesme.window-passenger-rear-channel.state.option.5 = Running + +# MercedesMe Things Status Details +mercedesme.account.status.authorization-needed = Manual Authorization needed at {0} +mercedesme.account.status.ip-missing = Callback IP missing +mercedesme.account.status.port-missing = Callback Port missing +mercedesme.account.status.client-id-missing = Client ID missing +mercedesme.account.status.client-secret-missing = Client Secret missing +mercedesme.account.status.server-restart = Disable and enable Bridge to restart Authorization Server +mercedesme.vehicle.status.bridge-missing = Bridge not set +mercedesme.vehicle.status.bridge-authoriziation = Check Bridge Authorization diff --git a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/bridge-account.xml b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/bridge-account.xml new file mode 100644 index 00000000000..91c28fd752f --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/bridge-account.xml @@ -0,0 +1,12 @@ + + + + + + Mercedes Benz account data + + + diff --git a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/door-channel-types.xml b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/door-channel-types.xml new file mode 100644 index 00000000000..c5341b4d9c0 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/door-channel-types.xml @@ -0,0 +1,62 @@ + + + + Contact + + + + + Contact + + + + + Contact + + + + + Contact + + + + + Contact + + + + + Number + + + + + + + + + + + Number + + + + + + + + + + + + + + + DateTime + + + + diff --git a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/doors-group.xml b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/doors-group.xml new file mode 100644 index 00000000000..8d6651098a1 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/doors-group.xml @@ -0,0 +1,20 @@ + + + + + Detailed Status of all Doors and Windows + + + + + + + + + + + + diff --git a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/image-channel-types.xml b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/image-channel-types.xml new file mode 100644 index 00000000000..b0e597ed918 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/image-channel-types.xml @@ -0,0 +1,19 @@ + + + + Image + + + + + String + + + + Switch + + + diff --git a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/image-group.xml b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/image-group.xml new file mode 100644 index 00000000000..2e1e701a54b --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/image-group.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + diff --git a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/light-channel-types.xml b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/light-channel-types.xml new file mode 100644 index 00000000000..029c20c707c --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/light-channel-types.xml @@ -0,0 +1,44 @@ + + + + Switch + + + + + Switch + + + + + Switch + + + + + Switch + + + + + Number + + + + + + + + + + + + + DateTime + + + + diff --git a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/lights-group.xml b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/lights-group.xml new file mode 100644 index 00000000000..3caebd7ae94 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/lights-group.xml @@ -0,0 +1,18 @@ + + + + + Light Status of interior lights and main light switch + + + + + + + + + + diff --git a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/location-channel-group.xml b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/location-channel-group.xml new file mode 100644 index 00000000000..c91bfef0d9e --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/location-channel-group.xml @@ -0,0 +1,14 @@ + + + + + Heading of vehicle + + + + + + diff --git a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/location-channel-types.xml b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/location-channel-types.xml new file mode 100644 index 00000000000..06dfc984450 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/location-channel-types.xml @@ -0,0 +1,16 @@ + + + + Number:Angle + + + + + DateTime + + + + diff --git a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/lock-channel-types.xml b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/lock-channel-types.xml new file mode 100644 index 00000000000..7ce9ccc5a74 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/lock-channel-types.xml @@ -0,0 +1,33 @@ + + + + Number + + + + + + + + + + + + Switch + + + + + Switch + + + + + DateTime + + + + diff --git a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/lock-group.xml b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/lock-group.xml new file mode 100644 index 00000000000..cde1b07f95f --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/lock-group.xml @@ -0,0 +1,16 @@ + + + + + Vehicle Lock Status + + + + + + + + diff --git a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/range-channel-types.xml b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/range-channel-types.xml new file mode 100644 index 00000000000..ac39ba02ad9 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/range-channel-types.xml @@ -0,0 +1,76 @@ + + + + Number:Length + + + + + Number:Length + + + + + Number:Length + + + + + Number:Dimensionless + + + + + Number:Energy + + + + + Number:Energy + + + + + Number:Length + + + + + Number:Length + + + + + Number:Dimensionless + + + + + Number:Volume + + + + + Number:Volume + + + + + Number:Length + + + + + Number:Length + + + + + DateTime + + + + diff --git a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/range-conv-channel-group.xml b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/range-conv-channel-group.xml new file mode 100644 index 00000000000..0599c93ba69 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/range-conv-channel-group.xml @@ -0,0 +1,19 @@ + + + + + Provides Mileage, remaining range and fuel level values + + + + + + + + + + + diff --git a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/range-ev-channel-group.xml b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/range-ev-channel-group.xml new file mode 100644 index 00000000000..4fbd83ebbe7 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/range-ev-channel-group.xml @@ -0,0 +1,19 @@ + + + + + Provides Mileage, remaining range and charge level values + + + + + + + + + + + diff --git a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/range-hybrid-channel-group.xml b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/range-hybrid-channel-group.xml new file mode 100644 index 00000000000..a9ec537ebf1 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/range-hybrid-channel-group.xml @@ -0,0 +1,26 @@ + + + + + Provides mileage, remaining fuel and range data for hybrid vehicles + + + + + + + + + + + + + + + + + + diff --git a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/thing-bev.xml b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/thing-bev.xml new file mode 100644 index 00000000000..8964e7d337d --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/thing-bev.xml @@ -0,0 +1,27 @@ + + + + + + + + + + Battery Electric Vehicle + + + + + + + + + + + + + + diff --git a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/thing-combustion.xml b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/thing-combustion.xml new file mode 100644 index 00000000000..672735d3ba2 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/thing-combustion.xml @@ -0,0 +1,27 @@ + + + + + + + + + + Conventional Fuel Vehicle + + + + + + + + + + + + + + diff --git a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/thing-hybrid.xml b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/thing-hybrid.xml new file mode 100644 index 00000000000..a84adc040d6 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/thing-hybrid.xml @@ -0,0 +1,27 @@ + + + + + + + + + + Conventional Fuel Vehicle with supporting Electric Engine + + + + + + + + + + + + + + diff --git a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/window-channel-types.xml b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/window-channel-types.xml new file mode 100644 index 00000000000..ec59ab2a67f --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/window-channel-types.xml @@ -0,0 +1,67 @@ + + + + Number + + + + + + + + + + + + + + Number + + + + + + + + + + + + + + Number + + + + + + + + + + + + + + Number + + + + + + + + + + + + + + DateTime + + + + diff --git a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/window-group.xml b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/window-group.xml new file mode 100644 index 00000000000..aca8ffb4083 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/window-group.xml @@ -0,0 +1,17 @@ + + + + + Detailed Status Windows + + + + + + + + + diff --git a/bundles/org.openhab.binding.mercedesme/src/test/java/org/openhab/binding/mercedesme/ConfigurationTest.java b/bundles/org.openhab.binding.mercedesme/src/test/java/org/openhab/binding/mercedesme/ConfigurationTest.java new file mode 100644 index 00000000000..d8361a7515a --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/test/java/org/openhab/binding/mercedesme/ConfigurationTest.java @@ -0,0 +1,71 @@ +/** + * Copyright (c) 2010-2022 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.mercedesme; + +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.net.InetAddress; +import java.net.SocketException; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.junit.jupiter.api.Test; +import org.openhab.binding.mercedesme.internal.Constants; +import org.openhab.binding.mercedesme.internal.config.AccountConfiguration; +import org.openhab.binding.mercedesme.internal.server.Utils; + +/** + * The {@link ConfigurationTest} Test configuration settings + * + * @author Bernd Weymann - Initial contribution + */ +@NonNullByDefault +class ConfigurationTest { + + @Test + void testScope() { + AccountConfiguration ac = new AccountConfiguration(); + assertEquals( + "offline_access mb:vehicle:mbdata:payasyoudrive mb:vehicle:mbdata:vehiclestatus mb:vehicle:mbdata:vehiclelock mb:vehicle:mbdata:fuelstatus mb:vehicle:mbdata:evstatus", + ac.getScope()); + } + + @Test + void testApiUrlEndpoint() { + String url = Constants.FUEL_URL; + String[] endpoint = url.split("/"); + String finalEndpoint = endpoint[endpoint.length - 1]; + assertEquals("fuelstatus", finalEndpoint); + } + + @Test + void testRound() { + int socValue = 66; + double batteryCapacity = 66.5; + float chargedValue = Math.round(socValue * 1000 * (float) batteryCapacity / 1000) / (float) 100; + assertEquals(43.89, chargedValue, 0.01); + float unchargedValue = Math.round((100 - socValue) * 1000 * (float) batteryCapacity / 1000) / (float) 100; + assertEquals(22.61, unchargedValue, 0.01); + assertEquals(batteryCapacity, chargedValue + unchargedValue, 0.01); + } + + @Test + public void testCallbackUrl() throws SocketException { + String ip = Utils.getCallbackIP(); + try { + assertTrue(InetAddress.getByName(ip).isReachable(10)); + } catch (IOException e) { + assertTrue(false, "IP " + ip + " not reachable"); + } + } +} diff --git a/bundles/org.openhab.binding.mercedesme/src/test/java/org/openhab/binding/mercedesme/ImageTest.java b/bundles/org.openhab.binding.mercedesme/src/test/java/org/openhab/binding/mercedesme/ImageTest.java new file mode 100644 index 00000000000..1b4556da069 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/test/java/org/openhab/binding/mercedesme/ImageTest.java @@ -0,0 +1,57 @@ +/** + * Copyright (c) 2010-2022 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.mercedesme; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.Optional; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jetty.util.MultiMap; +import org.eclipse.jetty.util.UrlEncoded; +import org.junit.jupiter.api.Test; +import org.openhab.binding.mercedesme.internal.config.VehicleConfiguration; + +/** + * The {@link ImageTest} Test Image conversions + * + * @author Bernd Weymann - Initial contribution + */ +@NonNullByDefault +class ImageTest { + + @Test + public void testConfig() { + Optional config = Optional.of(new VehicleConfiguration()); + MultiMap parameterMap = new MultiMap(); + parameterMap.add("background", Boolean.toString(config.get().background)); + parameterMap.add("night", Boolean.toString(config.get().night)); + parameterMap.add("cropped", Boolean.toString(config.get().cropped)); + parameterMap.add("roofOpen", Boolean.toString(config.get().roofOpen)); + parameterMap.add("format", config.get().format); + String params = UrlEncoded.encode(parameterMap, null, false); + assertEquals("background=false&night=false&cropped=false&roofOpen=false&format=webp", params); + + config.get().background = true; + config.get().format = "png"; + config.get().cropped = true; + parameterMap = new MultiMap(); + parameterMap.add("background", Boolean.toString(config.get().background)); + parameterMap.add("night", Boolean.toString(config.get().night)); + parameterMap.add("cropped", Boolean.toString(config.get().cropped)); + parameterMap.add("roofOpen", Boolean.toString(config.get().roofOpen)); + parameterMap.add("format", config.get().format); + params = UrlEncoded.encode(parameterMap, null, false); + assertEquals("background=true&night=false&cropped=true&roofOpen=false&format=png", params); + } +} diff --git a/bundles/org.openhab.binding.mercedesme/src/test/java/org/openhab/binding/mercedesme/JsonTest.java b/bundles/org.openhab.binding.mercedesme/src/test/java/org/openhab/binding/mercedesme/JsonTest.java new file mode 100644 index 00000000000..4be0d721486 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/test/java/org/openhab/binding/mercedesme/JsonTest.java @@ -0,0 +1,250 @@ +/** + * Copyright (c) 2010-2022 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.mercedesme; + +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Date; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.json.JSONArray; +import org.json.JSONObject; +import org.junit.jupiter.api.Test; +import org.openhab.binding.mercedesme.internal.utils.ChannelStateMap; +import org.openhab.binding.mercedesme.internal.utils.Mapper; + +/** + * The {@link JsonTest} Test Json conversions + * + * @author Bernd Weymann - Initial contribution + */ +@NonNullByDefault +class JsonTest { + public static final String DATE_INPUT_PATTERN_STRING = "yyyy-MM-dd'T'HH:mm:ss"; + public static final DateTimeFormatter DATE_INPUT_PATTERN = DateTimeFormatter.ofPattern(DATE_INPUT_PATTERN_STRING); + + @Test + void testOdoMapper() throws Exception { + List expectedResults = new ArrayList(); + expectedResults.add("range:mileage 4131 km"); + String content = Files.readString(Path.of("src/test/resources/odo.json")); + JSONArray ja = new JSONArray(content); + assertTrue(ja.length() > 0); + ja.forEach(entry -> { + JSONObject jo = (JSONObject) entry; + ChannelStateMap csm = Mapper.getChannelStateMap(jo); + assertNotNull(csm); + assertTrue(expectedResults.contains(csm.toString())); + boolean removed = expectedResults.remove(csm.toString()); + if (!removed) { + assertTrue(false, csm.toString() + " not removed"); + } + }); + assertEquals(0, expectedResults.size(), "All content delivered"); + } + + @Test + void testEVMapper() throws IOException { + List expectedResults = new ArrayList(); + expectedResults.add("range:range-electric 325 km"); + expectedResults.add("range:soc 78 %"); + String content = Files.readString(Path.of("src/test/resources/evstatus.json")); + JSONArray ja = new JSONArray(content); + assertTrue(ja.length() > 0); + ja.forEach(entry -> { + JSONObject jo = (JSONObject) entry; + ChannelStateMap csm = Mapper.getChannelStateMap(jo); + assertNotNull(csm); + assertTrue(expectedResults.contains(csm.toString())); + boolean removed = expectedResults.remove(csm.toString()); + if (!removed) { + assertTrue(false, csm.toString() + " not removed"); + } + }); + assertEquals(0, expectedResults.size(), "All content delivered"); + } + + @Test + void testFuelMapper() throws IOException { + List expectedResults = new ArrayList(); + expectedResults.add("range:range-fuel 1292 km"); + expectedResults.add("range:fuel-level 90 %"); + String content = Files.readString(Path.of("src/test/resources/fuel.json")); + JSONArray ja = new JSONArray(content); + assertTrue(ja.length() > 0); + ja.forEach(entry -> { + JSONObject jo = (JSONObject) entry; + ChannelStateMap csm = Mapper.getChannelStateMap(jo); + assertNotNull(csm); + assertTrue(expectedResults.contains(csm.toString())); + boolean removed = expectedResults.remove(csm.toString()); + if (!removed) { + assertTrue(false, csm.toString() + " not removed"); + } + }); + } + + @Test + void testLockMapper() throws IOException { + List expectedResults = new ArrayList(); + expectedResults.add("lock:doors 0"); + expectedResults.add("lock:deck-lid ON"); + expectedResults.add("lock:flap ON"); + expectedResults.add("location:heading 120 °"); + String content = Files.readString(Path.of("src/test/resources/lock.json")); + JSONArray ja = new JSONArray(content); + assertTrue(ja.length() > 0); + ja.forEach(entry -> { + JSONObject jo = (JSONObject) entry; + ChannelStateMap csm = Mapper.getChannelStateMap(jo); + assertNotNull(csm); + assertTrue(expectedResults.contains(csm.toString())); + boolean removed = expectedResults.remove(csm.toString()); + if (!removed) { + assertTrue(false, csm.toString() + " not removed"); + } + }); + } + + @Test + void testStatusMapper() throws IOException { + List expectedResults = new ArrayList(); + expectedResults.add("doors:deck-lid CLOSED"); + expectedResults.add("doors:driver-front CLOSED"); + expectedResults.add("doors:passenger-front CLOSED"); + expectedResults.add("doors:driver-rear CLOSED"); + expectedResults.add("doors:passenger-rear CLOSED"); + expectedResults.add("lights:interior-front OFF"); + expectedResults.add("lights:interior-rear OFF"); + expectedResults.add("lights:light-switch 0"); + expectedResults.add("lights:reading-left OFF"); + expectedResults.add("lights:reading-right OFF"); + expectedResults.add("doors:rooftop 0"); + expectedResults.add("doors:sunroof 0"); + expectedResults.add("windows:driver-front 0"); + expectedResults.add("windows:passenger-front 0"); + expectedResults.add("windows:driver-rear 0"); + expectedResults.add("windows:passenger-rear 0"); + + String content = Files.readString(Path.of("src/test/resources/status.json")); + JSONArray ja = new JSONArray(content); + assertTrue(ja.length() > 0); + ja.forEach(entry -> { + JSONObject jo = (JSONObject) entry; + ChannelStateMap csm = Mapper.getChannelStateMap(jo); + assertNotNull(csm); + assertTrue(expectedResults.contains(csm.toString())); + boolean removed = expectedResults.remove(csm.toString()); + if (!removed) { + assertTrue(false, csm.toString() + " not removed"); + } + }); + assertEquals(0, expectedResults.size(), "All content delivered"); + } + + @Test + void testEQALightsMapper() throws IOException { + // real life example + List expectedResults = new ArrayList(); + expectedResults.add("doors:passenger-front OPEN"); + expectedResults.add("windows:driver-front 1"); + expectedResults.add("windows:driver-rear 1"); + expectedResults.add("windows:passenger-rear 1"); + expectedResults.add("windows:passenger-front 1"); + expectedResults.add("lights:light-switch 0"); + expectedResults.add("lights:reading-right ON"); + expectedResults.add("lights:reading-left ON"); + expectedResults.add("doors:driver-front CLOSED"); + expectedResults.add("doors:driver-rear CLOSED"); + + String content = Files.readString(Path.of("src/test/resources/eqa-light-sample.json")); + JSONArray ja = new JSONArray(content); + assertTrue(ja.length() > 0); + ja.forEach(entry -> { + JSONObject jo = (JSONObject) entry; + ChannelStateMap csm = Mapper.getChannelStateMap(jo); + assertTrue(expectedResults.contains(csm.toString())); + boolean removed = expectedResults.remove(csm.toString()); + if (!removed) { + assertTrue(false, csm.toString() + " not removed"); + } + }); + assertEquals(0, expectedResults.size(), "All content delivered"); + } + + @Test + void testTimeStamp() throws IOException { + String content = Files.readString(Path.of("src/test/resources/eqa-light-sample.json")); + JSONArray ja = new JSONArray(content); + assertTrue(ja.length() > 0); + long lastTimestamp = 0; + for (Iterator iterator = ja.iterator(); iterator.hasNext();) { + JSONObject jo = (JSONObject) iterator.next(); + Set s = jo.keySet(); + if (!s.isEmpty()) { + String id = s.toArray()[0].toString(); + JSONObject val = jo.getJSONObject(id); + if (val.has("timestamp")) { + lastTimestamp = val.getLong("timestamp"); + } + } + } + Date d = new Date(lastTimestamp); + ZonedDateTime zdt = d.toInstant().atZone(ZoneId.of("Europe/Paris")); + assertEquals("2022-06-19T16:46:31", zdt.format(DATE_INPUT_PATTERN)); + } + + @Test + void testInvalidData() throws IOException { + String content = Files.readString(Path.of("src/test/resources/invalid-key.json")); + JSONArray ja = new JSONArray(content); + assertTrue(ja.length() > 0); + ja.forEach(entry -> { + JSONObject jo = (JSONObject) entry; + ChannelStateMap csm = Mapper.getChannelStateMap(jo); + assertNotNull(csm); + assertFalse(csm.isValid()); + }); + } + + @Test + void testMissingTimestamp() throws IOException { + List expectedResults = new ArrayList(); + expectedResults.add("range:mileage 4131 km"); + String content = Files.readString(Path.of("src/test/resources/invalid-timestamp.json")); + JSONArray ja = new JSONArray(content); + assertTrue(ja.length() > 0); + ja.forEach(entry -> { + JSONObject jo = (JSONObject) entry; + ChannelStateMap csm = Mapper.getChannelStateMap(jo); + assertNotNull(csm); + assertTrue(expectedResults.contains(csm.toString())); + assertEquals(-1, csm.getTimestamp()); + boolean removed = expectedResults.remove(csm.toString()); + if (!removed) { + assertTrue(false, csm.toString() + " not removed"); + } + }); + assertEquals(0, expectedResults.size(), "All content delivered"); + } +} diff --git a/bundles/org.openhab.binding.mercedesme/src/test/resources/eqa-light-sample.json b/bundles/org.openhab.binding.mercedesme/src/test/resources/eqa-light-sample.json new file mode 100644 index 00000000000..8bc65899cba --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/test/resources/eqa-light-sample.json @@ -0,0 +1,62 @@ +[ + { + "doorstatusfrontright": { + "value": "true", + "timestamp": 1655650113000 + } + }, + { + "doorstatusfrontleft": { + "value": "false", + "timestamp": 1655650104000 + } + }, + { + "windowstatusfrontleft": { + "value": "1", + "timestamp": 1655648946000 + } + }, + { + "windowstatusrearleft": { + "value": "1", + "timestamp": 1655648959000 + } + }, + { + "windowstatusrearright": { + "value": "1", + "timestamp": 1655648959000 + } + }, + { + "doorstatusrearleft": { + "value": "false", + "timestamp": 1655498496000 + } + }, + { + "windowstatusfrontright": { + "value": "1", + "timestamp": 1655648953000 + } + }, + { + "lightswitchposition": { + "value": "0", + "timestamp": 1655650824000 + } + }, + { + "readingLampFrontRight": { + "value": "true", + "timestamp": 1655649991000 + } + }, + { + "readingLampFrontLeft": { + "value": "true", + "timestamp": 1655649991000 + } + } +] \ No newline at end of file diff --git a/bundles/org.openhab.binding.mercedesme/src/test/resources/evstatus.json b/bundles/org.openhab.binding.mercedesme/src/test/resources/evstatus.json new file mode 100644 index 00000000000..907154a1171 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/test/resources/evstatus.json @@ -0,0 +1,14 @@ +[ + { + "rangeelectric": { + "value": "325", + "timestamp": 1655401822000 + } + }, + { + "soc": { + "value": "78", + "timestamp": 1655399096000 + } + } +] \ No newline at end of file diff --git a/bundles/org.openhab.binding.mercedesme/src/test/resources/fuel.json b/bundles/org.openhab.binding.mercedesme/src/test/resources/fuel.json new file mode 100644 index 00000000000..a71eb02d2ec --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/test/resources/fuel.json @@ -0,0 +1,14 @@ +[ + { + "tanklevelpercent": { + "value": "90", + "timestamp": 1541080800000 + } + }, + { + "rangeliquid": { + "value": "1292", + "timestamp": 1541080800000 + } + } +] \ No newline at end of file diff --git a/bundles/org.openhab.binding.mercedesme/src/test/resources/image/ext.json b/bundles/org.openhab.binding.mercedesme/src/test/resources/image/ext.json new file mode 100644 index 00000000000..30b34dc4c2b --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/test/resources/image/ext.json @@ -0,0 +1,13 @@ +{ + "EXT000": "5jgA6wXiEiufaoAJcWWhQGALZUoltT2pnoXIFsCc6NBvSKz5wtbR3tfFFRzvg2aZWU9OeL75vJZpAQeh3jgzSDB1vXLyXEtErBzLP7WGVMu1Mvz5w6vf77fW_R_4vE57-FsZZQO8i4VCpAIvOhwTtV-2uvVw9qAtXQrAwpJz7r839JlvNf4uYyVFjiRjrE75_vDZA7bbkw33xDs2fSs5htgd39Zz3KfuKZvLmGW7qpCHRnr9lZixKCGydR8Hj4LM3XsEa0ebaCcdWOg4tuy0qN-YBH2-DrE7xQVso5iEiKIndBdA-ecF42jIYPdKk9x8gIKeSx-zcYFpwYXUZPtWo3vZQjqdiBVTxBVVK2JRYTOk9I0Qzp735Mqi5PtIYGrg2hIOH4F0CKuiknhc4XBabN22dAaxaUuf5juveQVD-h0WwV2xue6vQ8nvaTN2gyVpO4JXDmW9jE8kShKvDRZeh3JZKq8zGW4FfCP78rtyt8kc671d9PLcZBdi1_TgDMUBWldBP4xHrY_5aJvxn9nNji7E1A9Cw8tfmMyjuq0Wy3nsUHpctYXb0eXrrunj0-Uk_Aq2vx1PI1i8ko6-05uilE026reCDysoWY8Re2Ea1SRocp4P3B67Luqa__kgxqtdY3VdYtWuAuPrTESuHQZBEFa2EfNktvpZdXOYrvcqhGGbq76ybJXuQGB6ZwwiCi5ZFsq9ejYt9qcFYN_kxbpk6phLu-2yzqpcMEMMftFhZnY=", + "EXT090": "oHtxoRJTvmza2fm4AFhd2_fFYmRFC-uuZeQP7B8uENz9cCHgN9jMXS0bWGprZhIuhM65tPtdUSsvjoVqYD-n_HcQrqUB_PQkvr61RAiHz5UOXZSW7_5QPv_0Tdt3g1NHQFs5zPdI1KffucgiuNlhLNaWgpzT5z0AcZba9o7IwxzF5WKOkT4HsQ0etc3FYXvfnXeHi71F0223JkRQtlXEu4aNHELonubumptt9YJM0qXbcttPs-eNFE8l2eHOsKvh34g6X4Z2LZAENmABjMXQMQhxyWGRr_N7mIoeQWo6AVQ01QavM_MSKZY6Bw3-WdDHr8pybwg7uee52NgrwMsN7_ufeEG3xkAeSXixMhNt4yutYwaWkdxSdGKp4UnINj493VL8_5XAF7nfeHRioXe3XWU6mfg-PGzJwywm3ll7qbp_8OGkws3u03xXKxINkgZWVjmAtOnmFm80XGTQL8HxsPspI2ItF1QQDyQhvYYrGe-saxRstxxr1HM2VkualA3hxlNkE5CSNfbm3B1fUSH25Ba-YBo4SluEsu5mQIOemT1NBqMMZeQBCiO_73PwgIoRZnjH3cRPl_oUO3jwQEPPqH-jXBdFdQ9mksVWrHBcAQrVPAY5QQYaXN0Io8Va0q11GR8RUj_avraROJ_dLlWUDJCU1DUTv677lifWhIxyDXHj4CfgartLyYAPsGWuXm7wLc41dOXuS-WsiJoJjwuK2S83oUfUVH56Hf6gwZhvK8E=", + "EXT150": "FyyrR6D7K99MXXbCQ2Jt1N2GErxjQricdwDCJtzY5vW3TnqDr3JmEf5PUIy_yYnqscuiVLGTrBw1-9r6eR92uJncUPCkaNYHHIXt3p5ZfEu9TVcnURaydDH6GBB3yV9Cocv-8EeYbT2njjEe-n5qwhj44LfILKmMVC0lFzGRdixcAr1cu4chtnhvitIzOoCIG43BeTfWxjz4CwiIt3d4X05dS15qTWXFFlNCBc1xXGngdrqqO9USE3D8Hrq_0RuL_m4utANmLw2ud_rzlmpJFN7smkUJ62eKrpuJrn-aSrt3q9_OPewzC88-CpybvorcuVK9Oy_UZbU5aTFomUKH5DTEydJFBDeGLF6uZJSySKHWf395mmh1JBIxpghji4NhjONG8vlRKAZu9MbMQSWBiEJj2i1yWQQi9E8tYJN5g8uadP1SpSnIsM1FkDW8Esnu8bfqrYMQoobilCRkrmqaWCE4YDJcJRrf04oas12qqMZwLsRSvafSh7Cc6jIwggXxZ9u5d4wu9ov0oKfWMiBmvyt9Pb1kYxrt-nbL_pTkDOCAkBJw2AjiEFqcocMoCzx2uh1xQ8K9-DP4gGq4yKmY5EizbYMmYYhtorjKzmequ0BbKJ2YG-wIe65XA8i_dE5V-JeTL5CoSsRhoOBQK6hHtXk7PtgcdBV_0RAI85cnDSsoGNti2Nu3WT_S4PIstSSKrPpI9Yj6KeEV2EiM9a6flUkNo_QMwjKCuM3kCnvopjE=", + "EXT180": "h2nEDkftnTN7t3b93Rv-_KnASjdCQMiVbFWDIH4UQPlmDw44dH54TqJg1KgQFqVIojWgPRHLvh9DBfQCHh3wTpk-b_UGrsv22uWrm4DwVgC9ZMPaYM8nWUGmVfN2Aigzp8nH5gWNmRP2rE3rEPRC7W6E3E_-U8CHSEZ9rvld04eYbZEb-zdrcLmo9DhgzX6ETMq3Rac2ehXSO5KipM0t2-X5LtPXmdf1NcH_EBCSBW1bSrRCJr6RvGjRXvPiDFXR7QGhEYKHzIW6o0smbRp8BnIXnL7LlRe4cDH_M4Wk3wYTAsi6ET5gXed82Ubf2qtl-aHLL3_Su5DfyGAuzEc6rjcIljpZrgTE1UfcBxYgob2kYGr8iHBltgNhs69iAe2V_e6mS3ogQE8Hc2BMe9T8aLylmKtainufJKfzCOnyuMUDnBDNe84oKRNsyJHT8pKHewMJVxW8mOsm3sPC_nTb-UsUN9jqXmCugPqYdPAYtEp5mOpBpsltUX7a6LMcJERX0bGRGXYuGSpaFXCeynlQyTCnGJk2tgt65f4c2MGxg3OLWNh5FCQMq3miC8S2tIN15h2rw0vXrTYrvPXJPBk6Kjw74c0xUWtdf9EQwR79g0JPnjEUIeeeJvbipXPvZi3TPCev0d1eE3lOq_3onIZI16Noqjm7WHvUPGgn5g8QxDRI9t4aZ1MSKxxYrKUJBlJrMV7GmGHuLl_jYihCeslaXR5qyirZxB0r4KFyLeXuyJ4=", + "EXT270": "V1B7Vmu7mPFnDobcpvy5gVMAsnmi3sG_1AISG5nFaIhKw3h8NVwLYTAnptyiYtYaqcTzznk9jQROerdO0loInPHaBFN4lY59RoVQv7uA1ZMpQ4TUu_s7igbwgKEdcB55w3oei1ocLWcdn7QNvaxIqYl3ch5MAJlEOxhljGd5Hu4XHtmKe9IW7KZLqSwJKoI6M5HmiVY16UeqRcKJcKRaYoyaIq3jOJSUPfPJw22An2_oAp0aniq6Mydf3t-LNn8oDCPA5ztT9ivDhasZdWwk3dDF_IBEnwBc4X-UKGk04MRwnDkFnE-jmV5f4_k49VcuWLJEq2S5g-5lpZI55Et19lvGZv_tD1rsBMHcZ4beHwsUWrtykLSWRWt9XDVHk9cvgDAWeutKReMp3Rt3yN9gLMV-Puo9wscg51CuDvGXOsVO_V7vF2_1OEq5E6WJcDa9XqqphUrIhMs7l-s5gT16S4wYZ07BrhRWx1vCATJdP0Oo26QvE-tWthaPkcD1PUsePbx-dXrj-5IRsotGgoEzNRMmahkwNbc_SbILNVhCZXVMyo9h32n1Kdf-uNtF-KBb0aODmti2HV3qe52qILoKeO2XoIDMceNeVp_HjO6UL1np-tm4JOEqkF_as6VCGXfz2YE5cq8wIBfX9uKQwmPmtisK3tmfZKF6nuz4yxGo78cDJZdkE6xY8819ObqZyuFCDbONoxOkdA6KYUjjvhiPikDxzhFJXaq-tegNoDNWUJs=", + "EXT330": "-VkMlhWJez5VxQgKzZjpqaXFNL5wjxxAs9TGLMQCkmfrYqHs5qONanQHnzU6Dz7QQwb8a51qk7ULc3dMHtUMvx4ILa-vKpQYGZ2uGenWFIS7lK5YWjHUvHu3uGwgTbAfzigiLq13opE9a5lauK0e4zmJ4aMbWkhIMxHjrak83zsmjFJa0IYhD0qD_f7oH8z-eCJ9tww4cy-p3Rd_pJCfGYi7j3Kz_Z9-gwFe7WFdKLowzzMpCNHr8hQxujtWzZZVQVrH4RSUAZEaN8sMm8uhkR3mE_21wFPFLLG2-Ui3bvObEALZ8ajMUdKJNu0etHGfUTYnHUAWxwesBDu5rqgSXDbeZiN6-4FDSkfTl2IkXOXrtFrW1YzmPvR5SBjed_QuNKrDCvSi9NBxP1vq4by6xJUaSCPyBJb9SfVBswfk6-_2g_d6LNLoT9Qz4Xn9RRHlACNyZe6tb-NNCCHYxY7nz88cDO0Kfb0qkEXyoOXWeDjCLvRXI-dCHCqNSq2D54P_A7e_xtqsoy4qjWp_4EKc7QRDX1j9BN7_CfUtt4MuKLMskP1MpBm07aZFLP6eHwVw8So5cZRDMB1zeQcfjFcHzoZ5nVBvVEPT3UkPfKdFAPkfuf3p233QbJiTGTnbsI05xdQQHtEWbrHc7sf446DsT_oH6w9ej0KwQ41if7jzz5uMIsGTgtOfyGz23k-IUsJQH-T237GegQKNXG0_SetgL8gn0OADUkdkaGbvAAxqMjg=", + "INT1": "Kr29P2pI2LE9y2Y7S7kSD-EzhXs6sOfP-HVFAqoNbaIIb34CaauXwOlTz7NjjJ9xBg88y73aR-RGcIg_aqSqmwZvViIrs5esGXOJOvXROoWpodYsYK65XfmSD3o6PtkPXtTFEtfj_3OEgtmvqXuHLB17VXhPWB-GV5O4U4z8Wki7aZTzQi3Xh8ry9Or3GT7JD6z5JWGDFH3wHDkzNuTzuCR8SocQSDBlkH8uSTtl-ZuSQZczYyLuJcqff86niQZbaXEQGArqYifqW-hs3f0Xjm3-Pqvt8sMQcpDZsNLTOzz5GgExE5BDlMMewVlGHK6SkVmA5DDcXSpr0EQjoWjUET5rLDXNiNUMwk_gCJLFBE3qOP-dNFOYnPtyGCHOAt1fWHrLV-iDXBoyRm5nl7fvxGglECyEB1DVLDvOkd882z32G5OFy2oRMpq3qY1sccPE2L8i_lViNtKUJqRuwygkfEFrygQTaoFhqaGfnAp64a8PDsYMpBlHEl4-Y_m0l-7FhPQiYoYJBZDrKG5h37O9RZ8Jttt0jdzhtgHPnTiyz9LEdtBNMgqGr9QFYjSVnGSE3dAHpNuo6J4VeNTEGViVBj0Imqy5-s9N0VR2aziC4kqhQ2M4mRniu2ad6PycqJEWwP4YzlIKt6Pox9goDEhCpY8d9fuQv5ppj0butxtBDC_nw4eyWRlctlH8Lx-pfwjwQb08H3syFM6eCXCtHKGilsyeN2E7HZ3mq1LoprwZHUo=", + "INT2": "JFFG7zz5OlAgoUkJUUPXu9h29bBg03yCTOCCtGzQPWCW3cqS453QCVSGd_K-TwXuRYnG54ZLHRPdJ4HQjMTDUZv6ExZck9td5r27H5cpO6wpV7hofz4bW5Klj-9kKOcyF8wHTEwPnoDv1lMVSEL6mcVEXFB0CnzngMs-njRnEXdvhgMrprEoSu1hSeikP5kUaFViOBDAuv9-6V6cfpZehoMQhjBmq6WMTNjhDS-fGsZH0Z2jqu7Oe8yaoydD3tJXZ1KY8GRpf048piD9bv-URJPR5531f4t5b6t6l9sivHDW0wgDoa0K-aF5mRKj6k8Psuu_Krsvm4EAJHZCXyZ-ixg8i58X8TODy70HXS1wRGrLVOBqGYsTpMEWxLOl7YLrn3VUCVN8yYavIDNdxU9nr6o5dA187IqStMEUS7NDUxSWcwmFmpeYDImh4or95wa7cEk1-7w74HAyVg8sC8-VHfwgKPLA2QrSVTp-F9lOu4CmStzf7C7SU3mkcb6XmyHQRAavjiCzAI8eeFMgT8ma_8B62gS1XKmppEQwddz5bZ2f8eKSc4q5WKoq9scxur42d-7JjsSzuenPwVAd9MSqWa2q5qnVMTbWtuLlO9ipLXXGTTYacAQJjZ9dOEdJIIh8MsSteJ6tpas3bAoX15IfvLGuObJFs2vjQ1h4AonjTquPIdo1JAhjActBgNCurWElyBpJ3dprvQ_y9qXgt12kKM0SvWV1zky_p8x53UPcHHk=", + "INT3": "utnpbmDAfakTIjB-oSkx7eFoRjXxfxpbexmHUi2RPFCs5A3w8wtH0EM6cThnwEFHulWqSmXFc6v_hd3dyLNsKDAaIUHFktCoE3m5fX2ORgUi4tdXSrx2T8H0xpf0cfFZcg_aS9SK0fgtj2NYaWjoafEI6aLc79XNoiIpTyBONJi0QU6IjlLCA13a47QjVIkrQtPjIntm1EKY34Hyoq8QErZsZQG_f8JEXQMUfM-oOAY0U8gj0outMTtWRAnfdrgaSWhVyIWloUJkXP6cWhZsypKp7e8bm-poc4nE4R-tniMWegY7BLlvtJeSjs71txBaDomr9xqi9lhmX6ENkvGPAHpBbrTOmsMLvEJu6nQR7P08XYalXpiJQjrIQJ77hE499jOIdgSoBjuy6JKlaLc4ejpHeGNXYCPUBJM5KVLITLYpLOjgZFzbhzI8qr4GdjxcfW82PAxhlTDywjDH-eMzbXnVZ-YaLrEocNZ8i88R1bLnv90lUrwzgn7n3zUcTeiRILfkApNZRh_K9ClGSu612LzGv7E-_zN1JdOt4UCcfSSkJLMppbeyIXjE6tDsxjgUyRr0Xj1azvHtEDfFYKj76x9doyk8Xm6_sKF4z9rPrgEmo9u6zr4dhb6fmhTnBjdhWBFjQ1Zpe7P7IfaXeDFrWSQBt7jdADWzB5L8cjaMnULm295uSo1k_ka1FQtFg4NtHiZ2G_zNLINh4DBjZdo5hmqBW7tl4gnNWaUf8YO7J1A=", + "INT4": "kJ4tgroRxuaYe0vF9xMe-nI4NUy4Eg1NyAr_E-WxJKlt5jZuoOcWYijc7cQEOiY3xlRPLTnfN-l9nf4UWO9rN4uMIGH9tuEql1g2ATLxff1ML3tCiexoxn45l-LQRH-PL2bL8jsQ3ByiHxLdzMHUzAarWj76rZk4mDCM9tRAE-hQsUZaaGMbO_hL3BCu6J-mI9hU3em4RuFwNTzCfBxgOJShU_PAU3tt-xROhld5Re3cyZzQZfQI17xDJKpTdZmnZCeabv7BIjh6qEapxhCHi0Ue6_EX3DPld1Faj438FptfBTn8UXW9Es6tkM1BGHw8npbHtGVqI1g7DdWuYUb5qeAtUzkEnFpxIl-67sKctYGBWvGkRnZrpu33jwaorW7xInwSymTg0isVCDQCfTEsa8zszj-bD4UMF2jeWr_pL-g4Vk_Ns0vMDFhsZGJTLO9Vv5DNf0WYOMWBISHXgW9z_d0UzCwlJpojqqO1DNhEt1aRRSb_zIBhdfAUHmJy35KmA0tPiDNb1K6uEVVcKSQBD2G9BfrvGXq-o_E3JAUzO2-u4ues0eWseOa0dQQIasjMZ0ZNAakfxCwg7dHp9Lq0c_0fti37OAk69Cyi0EMThCTYr8Yij_sidT9sts-YeQgTniI2LFsMnDnGkWB7wubmxUvG9qOq5ZmonBArkOt8xHWT9Xy5xq0hQj6Ba6Dgcy8qrcCdq8HoIneUaHH_c7pkRW2V-MKHQ6gr9iopAtP1Ifw=", + "BET1": "hismr3VKvRu_fQ25jJjIjjBKs-nhdOYsbtMA7Sgc0-P99yjGnVvOq8nJBGFHcjCLHGb6lTcLyA4eVSflnKER2r6R35PqRznX63s1bDGZuuyPexBCTVZSh1ubtI3ImQuO5mRb9wFAyeUcG53JnZEXQmOnCdmLW8seIugeSrsj5-HC_Z7vOT-KTmcONFP2q2tbKqDTziLVXEJ0dy2EdgvSk8l-sn1QsgodDVe-FCaAp35jlswp8faJuyTv0j7luc5dRP7xvSVXX08uTD9AWHooVCbsGSJqwVRsjY0bFJMcvKqzCCE5xlyBVVmkbphD3aEsBqMVsG4wL2_W_pEgdbmI06qHgJK0sotwj0iEbGVBOYOuBp4uAQdadKYbQL2OkJaqXkDWJTy0MDUSRBbZ6qH3KCyVRfUFcxlFUxqw9I7l5G35vnDMCpoJyj6wyzyq4oFTKgDXkn6zMTDD7lgpYWW1zRDtCTecU6nkmsUQnwe-9EXBfcePlRtJasG40ykj5x4MRJQoDiX9F8VBDnquaR_8K5HOL3de8ypEl7q22bKkKv-pHEPO8hH5lZynfQ86RHyHhDGxXuNuCEX-ekqK7K8PGTF8gO_fIGMpp_Z5aqWSHQgu7Ge1R-FTtfKZ5L_E-RjnR9QWFqEIC2_hNiZoQBdSTC8XUMmnpltTBQJOngEBhmgGepekZmuGnP3xmmvVbK1VijHtgB6PCtIVaTIzkwpVo1o4aj25zQG_3VSqgT8Ufnw=" +} \ No newline at end of file diff --git a/bundles/org.openhab.binding.mercedesme/src/test/resources/invalid-key.json b/bundles/org.openhab.binding.mercedesme/src/test/resources/invalid-key.json new file mode 100644 index 00000000000..06e434b6a99 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/test/resources/invalid-key.json @@ -0,0 +1,8 @@ +[ + { + "wrong": { + "value": "4131", + "timestamp": 1655399236000 + } + } +] \ No newline at end of file diff --git a/bundles/org.openhab.binding.mercedesme/src/test/resources/invalid-timestamp.json b/bundles/org.openhab.binding.mercedesme/src/test/resources/invalid-timestamp.json new file mode 100644 index 00000000000..a04379f39e3 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/test/resources/invalid-timestamp.json @@ -0,0 +1,7 @@ +[ + { + "odo": { + "value": "4131" + } + } +] \ No newline at end of file diff --git a/bundles/org.openhab.binding.mercedesme/src/test/resources/lock.json b/bundles/org.openhab.binding.mercedesme/src/test/resources/lock.json new file mode 100644 index 00000000000..9655d6bd102 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/test/resources/lock.json @@ -0,0 +1,26 @@ +[ + { + "doorlockstatusvehicle": { + "value": "0", + "timestamp": 1541080800000 + } + }, + { + "doorlockstatusdecklid": { + "value": "false", + "timestamp": 1541080800000 + } + }, + { + "doorlockstatusgas": { + "value": "false", + "timestamp": 1541080800000 + } + }, + { + "positionHeading": { + "value": "120", + "timestamp": 1541080800000 + } + } +] \ No newline at end of file diff --git a/bundles/org.openhab.binding.mercedesme/src/test/resources/odo.json b/bundles/org.openhab.binding.mercedesme/src/test/resources/odo.json new file mode 100644 index 00000000000..bf98a068153 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/test/resources/odo.json @@ -0,0 +1,8 @@ +[ + { + "odo": { + "value": "4131", + "timestamp": 1655399236000 + } + } +] \ No newline at end of file diff --git a/bundles/org.openhab.binding.mercedesme/src/test/resources/status-resources.json b/bundles/org.openhab.binding.mercedesme/src/test/resources/status-resources.json new file mode 100644 index 00000000000..8dc55745372 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/test/resources/status-resources.json @@ -0,0 +1,82 @@ +[ + { + "name": "decklidstatus", + "version": "1.0", + "href": "/vehicles/WDB111111ZZZ22222/resources/decklidstatus" + }, + { + "name": "doorstatusfrontleft", + "version": "1.0", + "href": "/vehicles/WDB111111ZZZ22222/resources/doorstatusfrontleft" + }, + { + "name": "doorstatusfrontright", + "version": "1.0", + "href": "/vehicles/WDB111111ZZZ22222/resources/doorstatusfrontright" + }, + { + "name": "doorstatusrearleft", + "version": "1.0", + "href": "/vehicles/WDB111111ZZZ22222/resources/doorstatusrearleft" + }, + { + "name": "doorstatusrearright", + "version": "1.0", + "href": "/vehicles/WDB111111ZZZ22222/resources/doorstatusrearright" + }, + { + "name": "interiorLightsFront", + "version": "1.0", + "href": "/vehicles/WDB111111ZZZ22222/resources/interiorLightsFront" + }, + { + "name": "interiorLightsRear", + "version": "1.0", + "href": "/vehicles/WDB111111ZZZ22222/resources/interiorLightsRear" + }, + { + "name": "lightswitchposition", + "version": "1.0", + "href": "/vehicles/WDB111111ZZZ22222/resources/lightswitchposition" + }, + { + "name": "readingLampFrontLeft", + "version": "1.0", + "href": "/vehicles/WDB111111ZZZ22222/resources/readingLampFrontLeft" + }, + { + "name": "readingLampFrontRight", + "version": "1.0", + "href": "/vehicles/WDB111111ZZZ22222/resources/readingLampFrontRight" + }, + { + "name": "rooftopstatus", + "version": "1.0", + "href": "/vehicles/WDB111111ZZZ22222/resources/rooftopstatus" + }, + { + "name": "sunroofstatus", + "version": "1.0", + "href": "/vehicles/WDB111111ZZZ22222/resources/sunroofstatus" + }, + { + "name": "windowstatusfrontleft", + "version": "1.0", + "href": "/vehicles/WDB111111ZZZ22222/resources/windowstatusfrontleft" + }, + { + "name": "windowstatusfrontright", + "version": "1.0", + "href": "/vehicles/WDB111111ZZZ22222/resources/windowstatusfrontright" + }, + { + "name": "windowstatusrearleft", + "version": "1.0", + "href": "/vehicles/WDB111111ZZZ22222/resources/windowstatusrearleft" + }, + { + "name": "windowstatusrearright", + "version": "1.0", + "href": "/vehicles/WDB111111ZZZ22222/resources/windowstatusrearright" + } +] \ No newline at end of file diff --git a/bundles/org.openhab.binding.mercedesme/src/test/resources/status.json b/bundles/org.openhab.binding.mercedesme/src/test/resources/status.json new file mode 100644 index 00000000000..6093bb3e801 --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/test/resources/status.json @@ -0,0 +1,98 @@ +[ + { + "decklidstatus": { + "value": "false", + "timestamp": 1541080800000 + } + }, + { + "doorstatusfrontleft": { + "value": "false", + "timestamp": 1541080800000 + } + }, + { + "doorstatusfrontright": { + "value": "false", + "timestamp": 1541080800000 + } + }, + { + "doorstatusrearleft": { + "value": "false", + "timestamp": 1541080800000 + } + }, + { + "doorstatusrearright": { + "value": "false", + "timestamp": 1541080800000 + } + }, + { + "interiorLightsFront": { + "value": "false", + "timestamp": 1541080800000 + } + }, + { + "interiorLightsRear": { + "value": "false", + "timestamp": 1541080800000 + } + }, + { + "lightswitchposition": { + "value": "0", + "timestamp": 1541080800000 + } + }, + { + "readingLampFrontLeft": { + "value": "false", + "timestamp": 1541080800000 + } + }, + { + "readingLampFrontRight": { + "value": "false", + "timestamp": 1541080800000 + } + }, + { + "rooftopstatus": { + "value": "0", + "timestamp": 1541080800000 + } + }, + { + "sunroofstatus": { + "value": "0", + "timestamp": 1541080800000 + } + }, + { + "windowstatusfrontleft": { + "value": "0", + "timestamp": 1541080800000 + } + }, + { + "windowstatusfrontright": { + "value": "0", + "timestamp": 1541080800000 + } + }, + { + "windowstatusrearleft": { + "value": "0", + "timestamp": 1541080800000 + } + }, + { + "windowstatusrearright": { + "value": "0", + "timestamp": 1541080800000 + } + } +] \ No newline at end of file diff --git a/bundles/pom.xml b/bundles/pom.xml index 61df9d6e0ce..6f924d28826 100644 --- a/bundles/pom.xml +++ b/bundles/pom.xml @@ -215,6 +215,7 @@ org.openhab.binding.mcp23017 org.openhab.binding.mecmeter org.openhab.binding.melcloud + org.openhab.binding.mercedesme org.openhab.binding.meteoalerte org.openhab.binding.meteoblue org.openhab.binding.meteostick