From 7948d210e007d07557b86075ee02641299078c38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20L=27hopital?= Date: Wed, 19 Jun 2024 14:57:02 +0200 Subject: [PATCH 01/20] Worxlandroid new binding MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Gaël L'hopital --- CODEOWNERS | 1 + bom/openhab-addons/pom.xml | 5 + .../org.openhab.binding.worxlandroid/NOTICE | 13 + .../README.md | 858 +++++++++ .../doc/products.json | 1690 +++++++++++++++++ .../images/SC_BasicUI_Main_Action.png | Bin 0 -> 28963 bytes .../images/SC_BasicUI_Main_Battery.png | Bin 0 -> 4693 bytes .../images/SC_BasicUI_Main_DeviceInfo.png | Bin 0 -> 8528 bytes .../images/SC_BasicUI_Main_Home.png | Bin 0 -> 31412 bytes .../images/SC_BasicUI_Main_Orientation.png | Bin 0 -> 4092 bytes .../images/SC_BasicUI_Main_Settings.png | Bin 0 -> 9561 bytes .../SC_BasicUI_Main_Settings_MultiZone.png | Bin 0 -> 45386 bytes .../SC_BasicUI_Main_Settings_Schedule.png | Bin 0 -> 31193 bytes .../images/SC_BasicUI_Main_Statistic.png | Bin 0 -> 49291 bytes .../images/SC_BasicUI_Main_Status.png | Bin 0 -> 5169 bytes .../images/SC_Bridge.png | Bin 0 -> 39423 bytes .../images/SC_Mower.png | Bin 0 -> 40000 bytes .../images/SC_PaperUI_Mower.png | Bin 0 -> 17109 bytes .../org.openhab.binding.worxlandroid/pom.xml | 30 + .../src/main/feature/feature.xml | 9 + .../WorxLandroidBindingConstants.java | 111 ++ .../internal/WorxLandroidConfiguration.java | 31 + .../internal/WorxLandroidHandlerFactory.java | 98 + .../internal/WorxLandroidIconProvider.java | 123 ++ .../internal/api/WebApiException.java | 52 + .../internal/api/WorxApiDeserializer.java | 86 + .../internal/api/WorxApiHandler.java | 127 ++ .../internal/api/dto/Commands.java | 78 + .../internal/api/dto/LastStatus.java | 29 + .../internal/api/dto/Payload.java | 179 ++ .../internal/api/dto/ProductItemStatus.java | 128 ++ .../internal/api/dto/UsersMeResponse.java | 32 + .../codes/WorxLandroidActionCodes.java | 38 + .../internal/codes/WorxLandroidDayCodes.java | 47 + .../codes/WorxLandroidErrorCodes.java | 66 + .../codes/WorxLandroidStatusCodes.java | 71 + .../internal/config/MowerConfiguration.java | 36 + .../internal/config/WebApiConfiguration.java | 32 + .../discovery/MowerDiscoveryService.java | 84 + .../handler/AWSClientThingHandler.java | 231 +++ .../internal/handler/ThingHandlerHelper.java | 130 ++ .../handler/WorxLandroidBridgeHandler.java | 210 ++ .../handler/WorxLandroidMowerHandler.java | 577 ++++++ .../worxlandroid/internal/mqtt/AWSClient.java | 185 ++ .../internal/mqtt/AWSClientCallbackI.java | 40 + .../worxlandroid/internal/vo/Mower.java | 419 ++++ .../internal/vo/ScheduledDay.java | 88 + .../src/main/resources/OH-INF/addon/addon.xml | 11 + .../OH-INF/i18n/worxlandroid.properties | 355 ++++ .../main/resources/OH-INF/thing/bridge.xml | 22 + .../main/resources/OH-INF/thing/channels.xml | 241 +++ .../main/resources/OH-INF/thing/groups.xml | 222 +++ .../src/main/resources/OH-INF/thing/mower.xml | 97 + .../resources/OH-INF/thing/thing-types.xml | 48 + .../src/main/resources/icon/charging-off.svg | 29 + .../src/main/resources/icon/charging-on.svg | 31 + .../src/main/resources/icon/charging.svg | 29 + .../src/main/resources/icon/counter.svg | 10 + .../src/main/resources/icon/distance-0.svg | 4 + .../src/main/resources/icon/distance.svg | 4 + .../src/main/resources/icon/landroid.png | Bin 0 -> 5739 bytes .../src/main/resources/icon/lawnmower.svg | 38 + .../src/main/resources/icon/lock-off.svg | 6 + .../src/main/resources/icon/lock-on.svg | 6 + .../src/main/resources/icon/lock.svg | 6 + .../src/main/resources/icon/rain-off.svg | 79 + .../src/main/resources/icon/rain-on.svg | 65 + .../src/main/resources/icon/rain.svg | 374 ++++ .../src/main/resources/icon/refresh.svg | 14 + .../src/main/resources/icon/zones-0.svg | 18 + .../src/main/resources/icon/zones-1.svg | 15 + .../src/main/resources/icon/zones-2.svg | 15 + .../src/main/resources/icon/zones-3.svg | 15 + .../src/main/resources/icon/zones.svg | 18 + bundles/pom.xml | 1 + 75 files changed, 7707 insertions(+) create mode 100644 bundles/org.openhab.binding.worxlandroid/NOTICE create mode 100644 bundles/org.openhab.binding.worxlandroid/README.md create mode 100644 bundles/org.openhab.binding.worxlandroid/doc/products.json create mode 100644 bundles/org.openhab.binding.worxlandroid/images/SC_BasicUI_Main_Action.png create mode 100644 bundles/org.openhab.binding.worxlandroid/images/SC_BasicUI_Main_Battery.png create mode 100644 bundles/org.openhab.binding.worxlandroid/images/SC_BasicUI_Main_DeviceInfo.png create mode 100644 bundles/org.openhab.binding.worxlandroid/images/SC_BasicUI_Main_Home.png create mode 100644 bundles/org.openhab.binding.worxlandroid/images/SC_BasicUI_Main_Orientation.png create mode 100644 bundles/org.openhab.binding.worxlandroid/images/SC_BasicUI_Main_Settings.png create mode 100644 bundles/org.openhab.binding.worxlandroid/images/SC_BasicUI_Main_Settings_MultiZone.png create mode 100644 bundles/org.openhab.binding.worxlandroid/images/SC_BasicUI_Main_Settings_Schedule.png create mode 100644 bundles/org.openhab.binding.worxlandroid/images/SC_BasicUI_Main_Statistic.png create mode 100644 bundles/org.openhab.binding.worxlandroid/images/SC_BasicUI_Main_Status.png create mode 100644 bundles/org.openhab.binding.worxlandroid/images/SC_Bridge.png create mode 100644 bundles/org.openhab.binding.worxlandroid/images/SC_Mower.png create mode 100644 bundles/org.openhab.binding.worxlandroid/images/SC_PaperUI_Mower.png create mode 100644 bundles/org.openhab.binding.worxlandroid/pom.xml create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/feature/feature.xml create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/java/org/openhab/binding/worxlandroid/internal/WorxLandroidBindingConstants.java create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/java/org/openhab/binding/worxlandroid/internal/WorxLandroidConfiguration.java create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/java/org/openhab/binding/worxlandroid/internal/WorxLandroidHandlerFactory.java create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/java/org/openhab/binding/worxlandroid/internal/WorxLandroidIconProvider.java create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/java/org/openhab/binding/worxlandroid/internal/api/WebApiException.java create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/java/org/openhab/binding/worxlandroid/internal/api/WorxApiDeserializer.java create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/java/org/openhab/binding/worxlandroid/internal/api/WorxApiHandler.java create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/java/org/openhab/binding/worxlandroid/internal/api/dto/Commands.java create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/java/org/openhab/binding/worxlandroid/internal/api/dto/LastStatus.java create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/java/org/openhab/binding/worxlandroid/internal/api/dto/Payload.java create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/java/org/openhab/binding/worxlandroid/internal/api/dto/ProductItemStatus.java create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/java/org/openhab/binding/worxlandroid/internal/api/dto/UsersMeResponse.java create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/java/org/openhab/binding/worxlandroid/internal/codes/WorxLandroidActionCodes.java create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/java/org/openhab/binding/worxlandroid/internal/codes/WorxLandroidDayCodes.java create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/java/org/openhab/binding/worxlandroid/internal/codes/WorxLandroidErrorCodes.java create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/java/org/openhab/binding/worxlandroid/internal/codes/WorxLandroidStatusCodes.java create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/java/org/openhab/binding/worxlandroid/internal/config/MowerConfiguration.java create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/java/org/openhab/binding/worxlandroid/internal/config/WebApiConfiguration.java create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/java/org/openhab/binding/worxlandroid/internal/discovery/MowerDiscoveryService.java create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/java/org/openhab/binding/worxlandroid/internal/handler/AWSClientThingHandler.java create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/java/org/openhab/binding/worxlandroid/internal/handler/ThingHandlerHelper.java create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/java/org/openhab/binding/worxlandroid/internal/handler/WorxLandroidBridgeHandler.java create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/java/org/openhab/binding/worxlandroid/internal/handler/WorxLandroidMowerHandler.java create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/java/org/openhab/binding/worxlandroid/internal/mqtt/AWSClient.java create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/java/org/openhab/binding/worxlandroid/internal/mqtt/AWSClientCallbackI.java create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/java/org/openhab/binding/worxlandroid/internal/vo/Mower.java create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/java/org/openhab/binding/worxlandroid/internal/vo/ScheduledDay.java create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/resources/OH-INF/addon/addon.xml create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/resources/OH-INF/i18n/worxlandroid.properties create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/resources/OH-INF/thing/bridge.xml create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/resources/OH-INF/thing/channels.xml create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/resources/OH-INF/thing/groups.xml create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/resources/OH-INF/thing/mower.xml create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/resources/OH-INF/thing/thing-types.xml create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/resources/icon/charging-off.svg create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/resources/icon/charging-on.svg create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/resources/icon/charging.svg create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/resources/icon/counter.svg create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/resources/icon/distance-0.svg create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/resources/icon/distance.svg create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/resources/icon/landroid.png create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/resources/icon/lawnmower.svg create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/resources/icon/lock-off.svg create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/resources/icon/lock-on.svg create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/resources/icon/lock.svg create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/resources/icon/rain-off.svg create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/resources/icon/rain-on.svg create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/resources/icon/rain.svg create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/resources/icon/refresh.svg create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/resources/icon/zones-0.svg create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/resources/icon/zones-1.svg create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/resources/icon/zones-2.svg create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/resources/icon/zones-3.svg create mode 100644 bundles/org.openhab.binding.worxlandroid/src/main/resources/icon/zones.svg diff --git a/CODEOWNERS b/CODEOWNERS index 7ca2d5d362f02..da38d0ee73337 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -442,6 +442,7 @@ /bundles/org.openhab.binding.wlanthermo/ @CSchlipp /bundles/org.openhab.binding.wled/ @Skinah /bundles/org.openhab.binding.wolfsmartset/ @BoBiene +/bundles/org.openhab.binding.worxlandroid/ @clinique /bundles/org.openhab.binding.wundergroundupdatereceiver/ @danieldemus /bundles/org.openhab.binding.x/ @computergeek1507 /bundles/org.openhab.binding.xmltv/ @clinique diff --git a/bom/openhab-addons/pom.xml b/bom/openhab-addons/pom.xml index 2aa407838123e..e954b8c268d8d 100644 --- a/bom/openhab-addons/pom.xml +++ b/bom/openhab-addons/pom.xml @@ -2186,6 +2186,11 @@ org.openhab.binding.wolfsmartset ${project.version} + + org.openhab.addons.bundles + org.openhab.binding.worxlandroid + ${project.version} + org.openhab.addons.bundles org.openhab.binding.wundergroundupdatereceiver diff --git a/bundles/org.openhab.binding.worxlandroid/NOTICE b/bundles/org.openhab.binding.worxlandroid/NOTICE new file mode 100644 index 0000000000000..38d625e349232 --- /dev/null +++ b/bundles/org.openhab.binding.worxlandroid/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.worxlandroid/README.md b/bundles/org.openhab.binding.worxlandroid/README.md new file mode 100644 index 0000000000000..f98435d550b1b --- /dev/null +++ b/bundles/org.openhab.binding.worxlandroid/README.md @@ -0,0 +1,858 @@ + + +# WorxLandroid Binding + +This binding connects openHAB with your WorxLandroid Mower using the API and MQTT. + +# Table of contents + + 1. [Disclaimer](https://github.com/nibi79/worxlandroid/tree/master#disclaimer) + 2. [Installation and upgrade](https://github.com/nibi79/worxlandroid/tree/master#installation-and-upgrade) + 3. [Supported Things](https://github.com/nibi79/worxlandroid/tree/master#supported-things) + 4. [Discovery](https://github.com/nibi79/worxlandroid/tree/master#discovery) + 5. [Binding Configuration](https://github.com/nibi79/worxlandroid/tree/master#binding-configuration) + 6. [Properties](https://github.com/nibi79/worxlandroid/tree/master#properties) + 7. [Channels](https://github.com/nibi79/worxlandroid/tree/master#channels) + 8. [File based configuration](https://github.com/nibi79/worxlandroid/tree/master#file-based-configuration) + 9. [Iconset](https://github.com/nibi79/worxlandroid/tree/master#iconset) +10. [Support](https://github.com/nibi79/worxlandroid/tree/master#support) + +*** + +## Disclaimer + +This binding is currently under development. Your help and testing would be greatly appreciated but there is no stability or functionality warranty. + +## Installation and upgrade + +For the first installation of the binding you need to copy the [latest release](https://github.com/nibi79/worxlandroid/releases) into the /addons folder of your openHAB installation. In case you want to upgrade the binding to a newer version, please check the release notes first. + +## Supported Things + +Currently following Things are supported: + +- **WorxLandroid Bridge** Thing representing the handler for Worx API +- One or many Things for supported **WorxLandroid Mower** + +## Discovery + +Bridge Configuration can be achieved via PaperUI - Configuration - Things - Add Thing “+” Button - WorxLandroid Binding - Add manually - **Bridge Worx Landroid API**. Here you can provide your credentials for your WorxLandroid account. Once the bridge has been added **Worx Landroid Mower**s will be discovered automatically and appear in your PaperUI inbox. You just need to add them as new things. + +For textual configuration go to [File based configuration](https://github.com/nibi79/worxlandroid/tree/master#file-based-configuration) + +## Binding Configuration + +Following options can be set for the **Bridge Worx Landroid API**: + +| Property | Description | +|-------------------|-------------------------------------------------------------------------------------------------------------------------------------------| +| username | Username to access the WorxLandroid API. | +| password | Password to access the WorxLandroid API. | + + +Following options can be set for the **WorxLandroid Mower**: + +| Property | Description | +|-----------------------|--------------------------------------------------------------------------------------------------------| +| serialNumber | Serial Number of the mower | +| refreshStatusInterval | Interval for refreshing mower status (ONLINE/OFFLINE) and channel 'common#online' in seconds (min="30")| +| pollingInterval | Interval for polling in seconds (min="30" max="7200"). | + + +In order to prevent a 24h ban from worx, the following recommended settings seem to work: +| Property | Value | +|-----------------------|-------| +| refreshStatusInterval | 1200 | +| pollingInterval | 3600 | +| reconnectInterval | 0 | + +Lower polling and refresh values will likely result in a 24h ban for your account. + + +## Properties + +The binding retrieves properties from the API. To view the properties open the thing in PaperUI and click on 'SHOW PROPERTIES': + +Bridge: +
+ + +Mower: +
+ + +## Channels + +Currently following **Channels** are supported on the **Worx Landroid Mower**: + +##### common + +| Channel | Type | ChannelName | Values | +|------------|-----------|-----------|-----------| +| online | `Switch` | common#online | | +| lastUpdateOnlineStatus | `DateTime` | common#lastUpdateOnlineStatus | | +| enable | `Switch` | common#enable | | +| action | `String` | common#action | START, STOP, HOME | +| lock | `Switch` | common#lock | | + +##### AWS + +| Channel | Type | ChannelName | +|-----------|---- -------|---------------| +| poll | `Switch` | aws#poll | +| connected | `Switch` | aws#connected | + +##### cfgCommon + +| Channel | Type | ChannelName | +|------------|-----------|-----------| +| id | `Switch` | cfgCommon#id | +| serialNumber | `String` | cfgCommon#serialNumber | +| language | `String` | cfgCommon#language | +| lastUpdate | `DateTime` | cfgCommon#lastUpdate | +| command | `Number` | cfgCommon#command | +| rainDelay | `Number` | cfgCommon#rainDelay | + +##### datCommon + +| Channel | Type | ChannelName | +|------------|-----------|-----------| +| macAdress | `String` | datCommon#macAdress | +| firmware | `Number` | datCommon#firmware | +| wifiQuality | `Number` | datCommon#wifiQuality | +| status-code | `Number` | datCommon#status-code | +| status-description | `String` | datCommon#status-description | +| error-code | `Number` | datCommon#error-code | +| error-description | `String` | datCommon#error-description | +| last-zone | `Number` | datCommon#last-zone | + +##### datBattery + +| Channel | Type | ChannelName | | +|------------|-----------|-----------|-----------| +| batteryTemperature | `Number` | datBattery#batteryTemperature | | +| batteryVoltage | `Number` | datBattery#batteryVoltage | | +| batteryLevel | `Number` | datBattery#batteryLevel | | +| batteryChargeCycle | `Number` | datBattery#batteryChargeCycle | | +| batteryChargeCycleCurent | `Number` | datBattery#batteryChargeCycleCurrent | cycles since last reset | +| batteryCharging | `Switch` | datBattery#batteryCharging | | + +##### datDmp + +| Channel | Type | ChannelName | +|------------|-----------|-----------| +| pitch | `Number` | datDmp#pitch | +| roll | `Number` | datDmp#roll | +| yaw | `Number` | datDmp#yaw | + +##### datSt + +| Channel | Type | ChannelName || +|------------|-----------|-----------|-----------------| +| totalBladeTime | `Number` | datSt#totalBladeTime | | +| currentBladeTime | `Number` | datSt#currentBladeTime | time since last reset | +| totalDistance | `Number` | datSt#totalDistance | | +| totalTime | `Number` | datSt#totalTime | | + +##### datRain + +| Channel | Type | ChannelName | | +|------------|-----------|-----------|-----------------| +| state | `Switch` | datRain#state | ONLY IF SUPPORTED - property 'rain_delay_start' | +| counter | `Number` | datRain#counter | ONLY IF SUPPORTED - property 'rain_delay_start'| + +##### cfgSc + +| Channel | Type | ChannelName | | +|------------|-----------|-----------|-----------| +| scheduleTimeExtension | `Number` | cfgSc#scheduleTimeExtension | | +| scheduleMode | `Number` | cfgSc#scheduleMode | ONLY IF SUPPORTED - property 'one_time_scheduler'| + +##### cfgScSunday + +| Channel | Type | ChannelName | +|------------|-----------|-----------| +| enable | `Switch` | cfgScSunday#enable | +| scheduleStartHour | `Number` | cfgScSunday#schedule-start-hour | +| schedule-start-minutes | `Number` | cfgScSunday#schedule-start-minutes | +| schedule-duration | `Number` | cfgScSunday#schedule-duration | +| schedule-edgecut | `Number` | cfgScSunday#schedule-edgecut | + +##### cfgScSunday Slot 2 + +| Channel | Type | ChannelName | | +|------------|-----------|-----------|-----------| +| enable | `Switch` | cfgScSunday2#enable | ONLY IF SUPPORTED - property 'scheduler_two_slots'| +| scheduleStartHour | `Number` | cfgScSunday2#schedule-start-hour | ONLY IF SUPPORTED - property 'scheduler_two_slots'| +| schedule-start-minutes | `Number` | cfgScSunday2#schedule-start-minutes | ONLY IF SUPPORTED - property 'scheduler_two_slots'| +| scheduleDuration | `Number` | cfgScSunday2#schedule-duration | ONLY IF SUPPORTED - property 'scheduler_two_slots'| +| schedule-edgecut | `Number` | cfgScSunday2#schedule-edgecut | ONLY IF SUPPORTED - property 'scheduler_two_slots'| + +##### cfgScMonday + +| Channel | Type | ChannelName | +|------------|-----------|-----------| +| enable | `Switch` | cfgScMonday#enable | +| scheduleStartHour | `Number` | cfgScMonday#schedule-start-hour | +| schedule-start-minutes | `Number` | cfgScMonday#schedule-start-minutes | +| schedule-duration | `Number` | cfgScMonday#scheduleDuration | +| schedule-edgecut | `Number` | cfgScMonday#schedule-edgecut | + +##### cfgScMonday Slot 2 + +| Channel | Type | ChannelName | | +|------------|-----------|-----------|-----------| +| enable | `Switch` | cfgScMonday2#enable | ONLY IF SUPPORTED - property 'scheduler_two_slots'| +| scheduleStartHour | `Number` | cfgScMonday2#schedule-start-hour | ONLY IF SUPPORTED - property 'scheduler_two_slots'| +| schedule-start-minutes | `Number` | cfgScMonday2#schedule-start-minutes | ONLY IF SUPPORTED - property 'scheduler_two_slots'| +| schedule-duration | `Number` | cfgScMonday2#schedule-duration | ONLY IF SUPPORTED - property 'scheduler_two_slots'| +| schedule-edgecut | `Number` | cfgScMonday2#schedule-edgecut | ONLY IF SUPPORTED - property 'scheduler_two_slots'| + +##### cfgScTuesday + +| Channel | Type | ChannelName | +|------------|-----------|-----------| +| enable | `Switch` | cfgScTuesday#enable | +| scheduleStartHour | `Number` | cfgScTuesday#schedule-start-hour | +| schedule-start-minutes | `Number` | cfgScTuesday#schedule-start-minutes | +| schedule-duration | `Number` | cfgScTuesday#schedule-duration | +| schedule-edgecut | `Number` | cfgScTuesday#schedule-edgecut | + +##### cfgScTuesday Slot 2 + +| Channel | Type | ChannelName | | +|------------|-----------|-----------|-----------| +| enable | `Switch` | cfgScTuesday2#enable | ONLY IF SUPPORTED - property 'scheduler_two_slots'| +| scheduleStartHour | `Number` | cfgScTuesday2#schedule-start-hour | ONLY IF SUPPORTED - property 'scheduler_two_slots'| +| schedule-start-minutes | `Number` | cfgScTuesday2#schedule-start-minutes | ONLY IF SUPPORTED - property 'scheduler_two_slots'| +| schedule-duration | `Number` | cfgScTuesday2#schedule-duration | ONLY IF SUPPORTED - property 'scheduler_two_slots'| +| schedule-edgecut | `Number` | cfgScTuesday2#schedule-edgecut | ONLY IF SUPPORTED - property 'scheduler_two_slots'| + +##### cfgScWednesday + +| Channel | Type | ChannelName | +|------------|-----------|-----------| +| enable | `Switch` | cfgScWednesday#enable | +| scheduleStartHour | `Number` | cfgScWednesday#schedule-start-hour | +| schedule-start-minutes | `Number` | cfgScWednesday#schedule-start-minutes | +| scheduleDuration | `Number` | cfgScWednesday#scheduleDuration | +| schedule-edgecut | `Number` | cfgScWednesday#schedule-edgecut | + +##### cfgScWednesday Slot 2 + +| Channel | Type | ChannelName | | +|------------|-----------|-----------|-----------| +| enable | `Switch` | cfgScWednesday2#enable | ONLY IF SUPPORTED - property 'scheduler_two_slots'| +| scheduleStartHour | `Number` | cfgScWednesday2#schedule-start-hour | ONLY IF SUPPORTED - property 'scheduler_two_slots'| +| schedule-start-minutes | `Number` | cfgScWednesday2#schedule-start-minutes | ONLY IF SUPPORTED - property 'scheduler_two_slots'| +| schedule-duration | `Number` | cfgScWednesday2#schedule-duration | ONLY IF SUPPORTED - property 'scheduler_two_slots'| +| schedule-edgecut | `Number` | cfgScWednesday2#schedule-edgecut | ONLY IF SUPPORTED - property 'scheduler_two_slots'| + +##### cfgScThursday + +| Channel | Type | ChannelName | +|------------|-----------|-----------| +| enable | `Switch` | cfgScThursday#enable | +| scheduleStartHour | `Number` | cfgScThursday#schedule-start-hour | +| schedule-start-minutes | `Number` | cfgScThursday#schedule-start-minutes | +| schedule-duration | `Number` | cfgScThursday#schedule-duration | +| schedule-edgecut | `Number` | cfgScThursday#schedule-edgecut | + +##### cfgScThursday Slot 2 + +| Channel | Type | ChannelName | | +|------------|-----------|-----------|-----------| +| enable | `Switch` | cfgScThursday2#enable | ONLY IF SUPPORTED - property 'scheduler_two_slots'| +| scheduleStartHour | `Number` | cfgScThursday2#schedule-start-hour | ONLY IF SUPPORTED - property 'scheduler_two_slots'| +| schedule-start-minutes | `Number` | cfgScThursday2#schedule-start-minutes | ONLY IF SUPPORTED - property 'scheduler_two_slots'| +| schedule-duration | `Number` | cfgScThursday2#schedule-duration | ONLY IF SUPPORTED - property 'scheduler_two_slots'| +| schedule-edgecut | `Number` | cfgScThursday2#schedule-edgecut | ONLY IF SUPPORTED - property 'scheduler_two_slots'| + +##### cfgScFriday + +| Channel | Type | ChannelName | +|------------|-----------|-----------| +| enable | `Switch` | cfgScFriday#enable | +| scheduleStartHour | `Number` | cfgScFriday#schedule-start-hour | +| schedule-start-minutes | `Number` | cfgScFriday#schedule-start-minutes | +| schedule-duration | `Number` | cfgScFriday#schedule-duration | +| schedule-edgecut | `Number` | cfgScFriday#schedule-edgecut | + +##### cfgScFriday Slot 2 + +| Channel | Type | ChannelName | | +|------------|-----------|-----------|-----------| +| enable | `Switch` | cfgScFriday2#enable | ONLY IF SUPPORTED - property 'scheduler_two_slots'| +| scheduleStartHour | `Number` | cfgScFriday2#schedule-start-hour | ONLY IF SUPPORTED - property 'scheduler_two_slots'| +| schedule-start-minutes | `Number` | cfgScFriday2#schedule-start-minutes | ONLY IF SUPPORTED - property 'scheduler_two_slots'| +| schedule-duration | `Number` | cfgScFriday2#schedule-duration | ONLY IF SUPPORTED - property 'scheduler_two_slots'| +| schedule-edgecut | `Number` | cfgScFriday2#schedule-edgecut | ONLY IF SUPPORTED - property 'scheduler_two_slots'| + +##### cfgScSaturday + +| Channel | Type | ChannelName | +|------------|-----------|-----------| +| enable | `Switch` | cfgScSaturday#enable | +| scheduleStartHour | `Number` | cfgScSaturday#schedule-start-hour | +| schedule-start-minutes | `Number` | cfgScSaturday#schedule-start-minutes | +| schedule-duration | `Number` | cfgScSaturday#schedule-duration | +| schedule-edgecut | `Number` | cfgScSaturday#schedule-edgecut | + +##### cfgScSaturday Slot 2 + +| Channel | Type | ChannelName | | +|------------|-----------|-----------|-----------| +| enable | `Switch` | cfgScSaturday2#enable | ONLY IF SUPPORTED - property 'scheduler_two_slots'| +| scheduleStartHour | `Number` | cfgScSaturday2#schedule-start-hour | ONLY IF SUPPORTED - property 'scheduler_two_slots'| +| schedule-start-minutes | `Number` | cfgScSaturday2#schedule-start-minutes | ONLY IF SUPPORTED - property 'scheduler_two_slots'| +| schedule-duration | `Number` | cfgScSaturday2#schedule-duration | ONLY IF SUPPORTED - property 'scheduler_two_slots'| +| schedule-edgecut | `Number` | cfgScSaturday2#schedule-edgecut | ONLY IF SUPPORTED - property 'scheduler_two_slots'| + +##### cfgMultiZones + +If Multi Zones are supported, you are able to define 4 separate Zones and split working times by 10 to those. + +| Channel | Type | ChannelName | +|------------|-----------|-----------| +| enable | `Switch` | cfgMultiZones#enable | + +To ease Zone Configuration, you are able to set distance in meters where a specific Zone starts. Bearing in mind that you roughly shall know how many meters of cable have been used (without buffer). + +| Channel | Type | ChannelName | +|------------|-----------|-----------| +| zone1Meter | `Number` | cfgMultiZones#zone1Meter | +| zone2Meter | `Number` | cfgMultiZones#zone2Meter | +| zone3Meter | `Number` | cfgMultiZones#zone3Meter | +| zone4Meter | `Number` | cfgMultiZones#zone4Meter | + +As second step you are able to set time in percent and split in parts of 10 between zones, + +| Channel | Type | ChannelName | +|------------|-----------|-----------| +| allocation0 | `Number` | cfgMultiZones#allocation0 | +| allocation1 | `Number` | cfgMultiZones#allocation1 | +| allocation2 | `Number` | cfgMultiZones#allocation2 | +| allocation3 | `Number` | cfgMultiZones#allocation3 | +| allocation4 | `Number` | cfgMultiZones#allocation4 | +| allocation5 | `Number` | cfgMultiZones#allocation5 | +| allocation6 | `Number` | cfgMultiZones#allocation6 | +| allocation7 | `Number` | cfgMultiZones#allocation7 | +| allocation8 | `Number` | cfgMultiZones#allocation8 | +| allocation9 | `Number` | cfgMultiZones#allocation9 | + +## File based configuration + +You have to have Persistence Service configured in order to use statistic graphs +It's recommended to use rr4dj + +### .persist + +``` +MowerBat_Chart*, MowerBatTemp_Chart*, MowerBatStatus_Chart* : strategy = everyMinute +``` + +### .things + +``` +Bridge worxlandroid:bridge:1 "_ Worx API" @ "node0" [ + username = "myEmailAddress", + password = "myPassword" +] { + mower 1 "Worx Mower Robot" @ "outside" [pollingInterval= 3600, refreshStatusInterval=1200, serialNumber= "20223xxxxxB0"] +} +``` + +### .items + +``` +Group All + Group Mower (All) + Group MowerBat (Mower) + Group MowerStatus (Mower) + Group MowerSchedule (Mower) + Group MowerBat_Chart (Mower) + Group MowerBatTemp_Chart (Mower) + Group MowerBatStatus_Chart (Mower) + + +/* Chart Parameters */ +Number Mower_Chart_Period "Chart Period" + +/* Landroid */ +String Shaun "Shaun [%s]" +Switch LandroidEnable "Mowing enabled" {channel="worxlandroid:mower:MyWorxBridge:mymower:common#enable"} + +String LandroidAction "Action []" {channel="worxlandroid:mower:MyWorxBridge:mymower:common#action"} +String LandroidLastUpdate "Last Update [%1$td.%1$tm.%1$ty / %1$tH:%1$tM:%1$tS]" {channel="worxlandroid:mower:MyWorxBridge:mymower:cfgCommon#lastUpdate"} +Switch LandroidPoll "Poll []" {channel="worxlandroid:mower:MyWorxBridge:mymower:common#poll"} +Switch LandroidLock "Lock" {channel="worxlandroid:mower:MyWorxBridge:mymower:common#lock"} +String LandroidScheduleMode "Schedule Mode []" {channel="worxlandroid:mower:MyWorxBridge:mymower:cfgSc#scheduleMode"} + +String LandroidMacAdress "MAC [%s]" {channel="worxlandroid:mower:MyWorxBridge:mymower:datCommon#macAdress"} +String LandroidSerialNumber "Serial Number [%s]" {channel="worxlandroid:mower:MyWorxBridge:mymower:cfgCommon#serialNumber"} +Number LandroidFirmware "Firmware [v%s]" {channel="worxlandroid:mower:MyWorxBridge:mymower:datCommon#firmware"} +Switch LandroidOnline "Onlinestatus [%s]" {channel="worxlandroid:mower:MyWorxBridge:mymower:common#online"} +Number LandroidId "Id []" {channel="worxlandroid:mower:MyWorxBridge:mymower:cfgCommon#id"} + +String LandroidLastUpdateOnlineStatus "Last Update Online Status [%1$td.%1$tm.%1$ty / %1$tH:%1$tM:%1$tS]" {channel="worxlandroid:mower:MyWorxBridge:mymower:common#lastUpdateOnlineStatus"} + +// Multizone +Switch LandroidMultizoneEnable "Multizone enable []" {channel="worxlandroid:mower:MyWorxBridge:mymower:cfgMultiZones#enable"} +Number LandroidLastZone "Start Zone []" {channel="worxlandroid:mower:MyWorxBridge:mymower:datCommon#lastZone"} + +// Zone Meters +Number LandroidMeterZone1 "Meters Zone 1 [%d]" {channel="worxlandroid:mower:MyWorxBridge:mymower:cfgMultiZones#zone1Meter"} +Number LandroidMeterZone2 "Meters Zone 2 [%d]" {channel="worxlandroid:mower:MyWorxBridge:mymower:cfgMultiZones#zone2Meter"} +Number LandroidMeterZone3 "Meters Zone 3 [%d]" {channel="worxlandroid:mower:MyWorxBridge:mymower:cfgMultiZones#zone3Meter"} +Number LandroidMeterZone4 "Meters Zone 4 [%d]" {channel="worxlandroid:mower:MyWorxBridge:mymower:cfgMultiZones#zone4Meter"} + +// Allocation Zones +Number LandroidAllocation0 "Allocation 0 []" {channel="worxlandroid:mower:MyWorxBridge:mymower:cfgMultiZones#allocation0"} +Number LandroidAllocation1 "Allocation 1 []" {channel="worxlandroid:mower:MyWorxBridge:mymower:cfgMultiZones#allocation1"} +Number LandroidAllocation2 "Allocation 2 []" {channel="worxlandroid:mower:MyWorxBridge:mymower:cfgMultiZones#allocation2"} +Number LandroidAllocation3 "Allocation 3 []" {channel="worxlandroid:mower:MyWorxBridge:mymower:cfgMultiZones#allocation3"} +Number LandroidAllocation4 "Allocation 4 []" {channel="worxlandroid:mower:MyWorxBridge:mymower:cfgMultiZones#allocation4"} +Number LandroidAllocation5 "Allocation 5 []" {channel="worxlandroid:mower:MyWorxBridge:mymower:cfgMultiZones#allocation5"} +Number LandroidAllocation6 "Allocation 6 []" {channel="worxlandroid:mower:MyWorxBridge:mymower:cfgMultiZones#allocation6"} +Number LandroidAllocation7 "Allocation 7 []" {channel="worxlandroid:mower:MyWorxBridge:mymower:cfgMultiZones#allocation7"} +Number LandroidAllocation8 "Allocation 8 []" {channel="worxlandroid:mower:MyWorxBridge:mymower:cfgMultiZones#allocation8"} +Number LandroidAllocation9 "Allocation 9 []" {channel="worxlandroid:mower:MyWorxBridge:mymower:cfgMultiZones#allocation9"} + +// Status +Number LandroidWifiQuality "Wifi Quality [%d]" {channel="worxlandroid:mower:MyWorxBridge:mymower:datCommon#wifiQuality"} +Switch LandroidBatteryCharging "Battery charging [%s]" {channel="worxlandroid:mower:MyWorxBridge:mymower:datBattery#batteryCharging"} +Number LandroidStatusCode "Status Code [%d]" {channel="worxlandroid:mower:MyWorxBridge:mymower:datCommon#status-code"} +String LandroidStatusDescription "[%s]" {channel="worxlandroid:mower:MyWorxBridge:mymower:datCommon#statusDescription"} +Number LandroidErrorCode "Error Code [%d]" {channel="worxlandroid:mower:MyWorxBridge:mymower:datCommon#error-code"} +String LandroidErrorDescription "Error: [%s]" {channel="worxlandroid:mower:MyWorxBridge:mymower:datCommon#errorDescription"} + +// Rain +Switch LandroidRainState "Rain State []" {channel="worxlandroid:mower:MyWorxBridge:mymower:datRain#state"} +Number LandroidRainCounter "Rain Counter [%d]"