Worx Landroid Binding

Yes, I’m working on it…

4 Likes

It would be cool if you could intigrate the new “cut edge now” functionallity also :grimacing: :smiley:

1 Like

hi all,

I just released a new version!

Version 2.1

with some new channels (ONLY if supported by your mower):

  • start edgecut
  • start OneTimeScheduler
  • rain state and rain counter
  • partymode (pause mowing)
  • current blade time (blade time since last reset)
  • current battery charge cycles (cycles since last reset)
  • schedule slot 2

Many thanks to @INT5749 for testing!

And please check the release notes first!!!

Your feedback is appreciated!

4 Likes

This topic was automatically closed 41 days after the last reply. New replies are no longer allowed.

The version for openhab 3, is this working?

Regards Mads

@Mads_Bloch

Hi the binding itself is working. But the big point is the dependancy to the Landroid API. I’ve recently seen a lot of errors with that connection. but the reason for this might also be within my own network.

Regards
Stefan

1 Like

Hi, if you interesting about the daily usage of your Landroid, I’ve made some simple snippets. I visualize the daily distance, run and blade time.

I’ve made some dummy items:

Zero means the floating zero for the particular day

Number LandroidDailyZeroTime          "Daily Zero Time [JS(minstohours.js):%s]"             <time>
Number:Length LandroidDailyZeroDistance "Daily Zero Distance [%s m]"                        <chart>
Number LandroidDailyZeroBladeTime     "Daily Zero Bladetime [JS(minstohours.js):%s]"        <time>

The Daily measurement is the total for the particular day. These items go written to the persistense storage for visualizing.

Number LandroidDailyTime          "Daily Time [JS(minstohours.js):%s]"                 <time>
Number:Length LandroidDailyDistance "Daily Distance [%s m]"                            <chart>
Number LandroidDailyBladeTime     "Daily Bladetime [JS(minstohours.js):%s]"            <time>

The rules:
I set the floating zero at every midnight, and zeroize the daily summary.

rule MowerSetZero
when
Time cron "0 0 0 * * ?"
then {
  LandroidDailyZeroTime.postUpdate(LandroidTotalTime.state)
  LandroidDailyTime.postUpdate(0)
  LandroidDailyZeroDistance.postUpdate(LandroidTotalDistance.state)
  LandroidDailyDistance.postUpdate(0)
  LandroidDailyZeroBladeTime.postUpdate(LandroidTotalBladeTime.state)
  LandroidDailyBladeTime.postUpdate(0)
}
end

I catch the updates from the API, and extract it the floating zero from the current value

rule MowerTime
when
  Item LandroidTotalTime changed
then
{
  var dTime = (LandroidTotalTime.state as Number) - (LandroidDailyZeroTime.state as Number)
  LandroidDailyTime.postUpdate(dTime)
}
end

rule MowerDistance
when
  Item LandroidTotalDistance changed
then
{
  var Number dDistance = (LandroidTotalDistance.state as Number) - (LandroidDailyZeroDistance.state as Number)
  LandroidDailyDistance.postUpdate(dDistance)
}
end

rule MowerBladeTime
when
  Item LandroidTotalBladeTime changed
then
{
  var dBladeTime = (LandroidTotalBladeTime.state as Number) - (LandroidDailyZeroBladeTime.state as Number)
  LandroidDailyBladeTime.postUpdate(dBladeTime)
}
end

I’ve made a page on Habpanel for Landroid’s data, there are the graphs from grafana:

1 Like

I love this integration. Coordinating the mowing times with when the sprinklers run is very useful. However, I can’t get the “start edgecut” or the “start oneTimeScheduler” to work. Looking at the code, the channels don’t actually seem to be defined as far as I can see. At least they seem to be missing from the README.md. The mower supports them since they seem to work from the app. The values of the equivalent items are NULL and cannot be changed. I am using v2.1 of the binding (haven’t upgraded to 3 yet).

Nevermind. I deleted and re-added the mower and now all the channels are there. Weird.

Yeah, this seems to be in correlation with Landroid Server Instance. I had this once after I migrated to OH 3 Binding and since than all is working fine.

Hello just wanted to say thank you for this binding and excellent write-up (that i only needed to do some copy and paste into my setup)

1 Like

Hi!

I just registered to also say thank thank you!! - The binding worx perfectly!

Is there a certain reason why it is not included “officially” to Openhab, so having the possibility to install it via openhab panel?

KR and thank you!
Michael

3 Likes

Wow, just copied the files to the addons folder, started a scan, added my worx account credentials et voila, the mower was discovered! Never had an easier binding in action. Thanks for your work!!

PS @Kai pls add this binding to the official bindings repository!

Hi all,

First of all Kudos to @nibi79! An awesome plugin, worked out of the box.
I’m using it now since round about 3 Weeks and it worked awesome!

The only problem I’m facing is :

[ERROR] [d.internal.WorxLandroidBridgeHandler] - Connection blocked from Worx, please try again in 24h

I have this issue now since round about one Week (Enabled and disabled the plugin also over night).
The Service was really blocked, I was not even able to use the App.

Now the App is unlocked again but I still cannot connect with the Binding.
Any ideas here?

THX
/Franz

Hi all,

short Feedback from my side, changing the Password back and forth worked to resolve the connection Issue.

BR
/Franz

1 Like

Hi all,

Do you also get this error Message nearly every Minute in the log?
I’ve already tried things like getting the certificate and add it to the keystore but did not succeed.
Any Ideas?

2022-04-19 15:55:22.474 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20183019090500156968: Unknown error
org.openhab.binding.worxlandroid.internal.webapi.WebApiException: org.eclipse.jetty.client.HttpResponseException: HTTP protocol violation: Authentication challenge without WWW-Authenticate header
	at org.openhab.binding.worxlandroid.internal.webapi.request.WebApiRequest.callWebApi(WebApiRequest.java:122) ~[bundleFile:?]
	at org.openhab.binding.worxlandroid.internal.webapi.request.WebApiRequest.callWebApiGet(WebApiRequest.java:79) ~[bundleFile:?]
	at org.openhab.binding.worxlandroid.internal.webapi.request.ProductItemsRequest.call(ProductItemsRequest.java:46) ~[bundleFile:?]
	at org.openhab.binding.worxlandroid.internal.webapi.WorxLandroidWebApiImpl.retrieveUserDevices(WorxLandroidWebApiImpl.java:100) ~[bundleFile:?]
	at org.openhab.binding.worxlandroid.internal.WorxLandroidMowerHandler$1.run(WorxLandroidMowerHandler.java:108) [bundleFile:?]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) [?:?]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) [?:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
	at java.lang.Thread.run(Thread.java:829) [?:?]

Use this version:

3 Likes

@sihui
Thanks for this hint. I also had issues with the previous version.
:slightly_smiling_face:

1 Like

Last weekend I installed the Landroid Binding (thank you for that great addon!). However, from time to time I get the same log entry as reported by others:


2022-05-03 07:31:13.278 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
org.openhab.binding.worxlandroid.internal.webapi.WebApiException: java.io.EOFException: HttpConnectionOverHTTP@5a824bad::DecryptedEndPoint@251b125b{l=/192.168.15.24:41710,r=api.worxlandroid.com/52.48.247.219:443,OPEN,fill=-,flush=W,to=60001/0}
	at org.openhab.binding.worxlandroid.internal.webapi.request.WebApiRequest.callWebApi(WebApiRequest.java:122) ~[bundleFile:?]
	at org.openhab.binding.worxlandroid.internal.webapi.request.WebApiRequest.callWebApiGet(WebApiRequest.java:79) ~[bundleFile:?]
	at org.openhab.binding.worxlandroid.internal.webapi.request.ProductItemsRequest.call(ProductItemsRequest.java:46) ~[bundleFile:?]
	at org.openhab.binding.worxlandroid.internal.webapi.WorxLandroidWebApiImpl.retrieveUserDevices(WorxLandroidWebApiImpl.java:101) ~[bundleFile:?]
	at org.openhab.binding.worxlandroid.internal.WorxLandroidMowerHandler$1.run(WorxLandroidMowerHandler.java:112) [bundleFile:?]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) [?:?]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) [?:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
	at java.lang.Thread.run(Thread.java:829) [?:?]
Caused by: java.util.concurrent.ExecutionException: java.io.EOFException: HttpConnectionOverHTTP@5a824bad::DecryptedEndPoint@251b125b{l=/192.168.15.24:41710,r=api.worxlandroid.com/52.48.247.219:443,OPEN,fill=-,flush=W,to=60001/0}
	at org.eclipse.jetty.client.util.FutureResponseListener.getResult(FutureResponseListener.java:118) ~[bundleFile:9.4.43.v20210629]
	at org.eclipse.jetty.client.util.FutureResponseListener.get(FutureResponseListener.java:101) ~[bundleFile:9.4.43.v20210629]
	at org.eclipse.jetty.client.HttpRequest.send(HttpRequest.java:730) ~[bundleFile:9.4.43.v20210629]
	at org.openhab.binding.worxlandroid.internal.webapi.request.WebApiRequest.callWebApi(WebApiRequest.java:92) ~[bundleFile:?]
	... 10 more
Caused by: java.io.EOFException: HttpConnectionOverHTTP@5a824bad::DecryptedEndPoint@251b125b{l=/192.168.15.24:41710,r=api.worxlandroid.com/52.48.247.219:443,OPEN,fill=-,flush=W,to=60001/0}
	at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.earlyEOF(HttpReceiverOverHTTP.java:376) ~[?:?]
	at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:1614) ~[?:?]
	at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.shutdown(HttpReceiverOverHTTP.java:259) ~[?:?]
	at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.process(HttpReceiverOverHTTP.java:181) ~[?:?]
	at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.receive(HttpReceiverOverHTTP.java:79) ~[?:?]
	at org.eclipse.jetty.client.http.HttpChannelOverHTTP.receive(HttpChannelOverHTTP.java:131) ~[?:?]
	at org.eclipse.jetty.client.http.HttpConnectionOverHTTP.onFillable(HttpConnectionOverHTTP.java:172) ~[?:?]
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) ~[?:?]
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) ~[?:?]
	at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:555) ~[?:?]
	at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:410) ~[?:?]
	at org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:164) ~[?:?]
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) ~[?:?]
	at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) ~[?:?]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) ~[?:?]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315) ~[?:?]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173) ~[?:?]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131) ~[?:?]
	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:386) ~[?:?]
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883) ~[?:?]
	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034) ~[?:?]
	... 1 more

A grep in the logs shows that the error occurs several times per hour:

grep -a "20213026720900xxxxxx: Unknown error"
2022-05-03 03:21:14.615 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 03:31:16.441 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 03:34:17.711 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 03:36:17.899 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 03:41:18.643 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 03:46:22.002 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 03:50:22.632 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 03:53:23.016 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 03:56:23.341 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 03:58:23.516 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 04:45:33.860 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 04:49:34.431 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 04:53:35.058 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 04:59:35.999 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 05:05:37.877 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 05:14:39.439 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 05:21:40.587 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 05:23:40.756 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 05:27:41.337 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 05:34:43.700 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 05:36:43.932 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 05:41:44.655 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 06:02:51.081 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 06:05:51.467 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 06:07:51.683 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 06:13:52.658 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 06:16:54.740 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 06:18:54.907 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 06:20:55.076 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 06:28:56.379 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 06:38:59.280 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 06:48:01.550 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 06:50:01.762 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 06:52:02.469 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 07:00:05.341 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 07:13:08.279 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 07:17:08.845 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 07:28:12.907 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error
2022-05-03 07:31:13.278 [ERROR] [id.internal.WorxLandroidMowerHandler] - RefreshStatusRunnable 20213026720900xxxxxx: Unknown error

Installed version of openhab: 3.2 (on ubuntu 18.04)
Installed version of the binding: 3.1-beta
Configuration is made via config files. Intervalls defined for the mower:
refreshStatusInterval=60, pollingInterval=300

Any ideas?