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 f7cb83f0e..2104eaff3 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 000000000..38d625e34 --- /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 000000000..ba06c97c5 --- /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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 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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 literal 0 HcmV?d00001 diff --git a/bundles/org.openhab.binding.mercedesme/doc/ImageView-CommandOptions.png b/bundles/org.openhab.binding.mercedesme/doc/ImageView-CommandOptions.png new file mode 100644 index 0000000000000000000000000000000000000000..2df39306e97bf56eb6f6a98f34f8be5cce42f855 GIT binary patch literal 86776 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
  • ^B8oEsoCca5JQAOIUHpnHK; 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

    #}@*2dHI>!-hM*(Z+8 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�l*}TB-l-t!T?CtgtknXEggnRA=CxCBcgR+LbaCg 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

    pn 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

    (<%0Zp^5&M%( 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

    Du2R&_{wbE^3<80v1gA+nI-S#ZJ@(X zfH}$|!ez4=?KPM&BO&w2BbR{j{N1~^cvZrv9xyPz9qb|G7={)onUM zSjw6ix(=WC%heBg()8pP>-2a<=1e%t0XHAVyc zt+rmm#Fgcm0X4nO#fuy&w^ijbUJiGnU`$i3H)JZ)$i;BHeJjo7hvM>3aCxYWmr0Y0 zNr_%VskqFHx$ST{%i^Cz(a;0r;_|}LO9pdT8DRPQRF@+q;~}2Iqn|F^`7}#p2bdqt zM1C6+jNQ5 zv2s|d$L^$Jvochx_JjKg9Yx<^FUORG)^13P*M(($o_nc)CsY0wUpk|JxyAAywSA3; zRJZ;V8XCJC9c^Z~sa}PtYI6pjMm9C%oG}qt&bP>yOl2FyMPWRrzbq-#R%9GzGmjXb zyjE(6zXFFbeM{|m57J%l&TDBV@-_c~QgKVxRz}@?RVs(__GG@GIP59kg<#o~wiUg9 z%<0S&@Am(zxxkdj?81=dER<(i~Sx`vKNVvPpg2D_S1`}S2==Zv`w@W zjZ#8gdK!v|L7Srud`x6>-&R^X5GeKJ{`_>UtFFY z4=(@aJI@@1%cH?%L}59-XnA>MbaQ5OZNXfA!(2Y1=$wbk@^_UtF3&tSIY5bt8w z;9w@8l?tC+H^}p(op0wE9#(^XfjOt4v`V6OEOF_HqA|NKmR!fEURU2BPBpdU#Ah>w z84zP#z+w(O@G>~?h-5j<#y$|-8*{8HC&R(0x^&V#7IXD*VqL$8y~jAD_9leFP`%KE z7kmxrG;^JuoEyqq4x|@Vc_a1ot=MXs;aIoT9BrOqt2%xC^~8tuU&36jY(=b@`VO|4 zbpntD;|!XE%k29T%u4nlXqKM1|0ghGW*k|*6JExx)2oMKX{dYm?vX7Bh~-%z0s7wQ zvpyG>n~b&CZLk`xvTvCXATBqR4eVt&U>*P+=CTZsjFmI%OmObkE-Fg0`-)%F&h_X8 z(P=v{)SVufbBGV6{#28EiyoM3&L3qg+Z9WeD}xz@Z~RtzlvFM-CzpYo)8qzwTpk>Z zuV!1Q&t+6x78uRt+jAS2PM!q3zh8@6e^B}Rv7QQC7M7_8mt0;Jmtz9TbL-#z&3C?Y zFymz=V{a%SBfj~__~ztvLsm#AHz*CuV6)WrU zro}s}CsjJelO;TZ$dQB*TTSpg=bU5O^f53o*tr%>)#Y?Rov1A3mB9>@`x4y&uTRQG z_Aw#JqXBbIiqraBuHX*kiA`mcd}%LEjv8qEw z!&ZAKFC!YO#u$**2W=i_6QnYYjcqAuC&NHo7PdVid%kIybNk#ndAX^k)Yne8_IbS5 zLIT6ya~bo_$WS4x?)K~Bl6W>!)a|V1F1%ON97YBY*8Mk_MdswPrvKT@(BI{_O?68) v^Q}eJNIgrcU`QCI#+<;copa#KzX5*%&$Z_I{lbfh00000NkvXXu0mjfSA9?_ 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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 + + + 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 000000000..ee51946a9 --- /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 000000000..55fd210f5 --- /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 000000000..ea4a91d43 --- /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 000000000..f6edf1d28 --- /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 000000000..ea3ded80c --- /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 000000000..6c4c43c04 --- /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 000000000..798f1db75 --- /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 000000000..ccb60194e --- /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 000000000..b8f741127 --- /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 000000000..22e97574e --- /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 000000000..5a418c6e7 --- /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 000000000..0c98f72ac --- /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 000000000..71c1a0e84 --- /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 000000000..512e843a7 --- /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 000000000..e0b0cfa97 --- /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 000000000..785291633 --- /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 000000000..30f6b2049 --- /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 000000000..d4bc9869b --- /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 000000000..55415dd1c --- /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 000000000..e9328cf48 --- /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 000000000..91c28fd75 --- /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 000000000..c5341b4d9 --- /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 000000000..8d6651098 --- /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 000000000..b0e597ed9 --- /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 000000000..2e1e701a5 --- /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 000000000..029c20c70 --- /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 000000000..3caebd7ae --- /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 000000000..c91bfef0d --- /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 000000000..06dfc9844 --- /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 000000000..7ce9ccc5a --- /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 000000000..cde1b07f9 --- /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 000000000..ac39ba02a --- /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 000000000..0599c93ba --- /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 000000000..4fbd83ebb --- /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 000000000..a9ec537eb --- /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 000000000..8964e7d33 --- /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 000000000..672735d3b --- /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 000000000..a84adc040 --- /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 000000000..ec59ab2a6 --- /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 000000000..aca8ffb40 --- /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 000000000..d8361a751 --- /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 000000000..1b4556da0 --- /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 000000000..4be0d7214 --- /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 000000000..8bc65899c --- /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 000000000..907154a11 --- /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 000000000..a71eb02d2 --- /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 000000000..30b34dc4c --- /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 000000000..06e434b6a --- /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 000000000..a04379f39 --- /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 000000000..9655d6bd1 --- /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 000000000..bf98a0681 --- /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 000000000..8dc557453 --- /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 000000000..6093bb3e8 --- /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 61df9d6e0..6f924d288 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