Oh, right. I completely forgot about that: your device does have mapping capability, but there’s no map info in cleaning history (as you’ve seen, there’s just area (a
), timestamp (s
), duration (l
), trigger condition (t
) and stop reason (f
)).
I’ve just done a new release which filters out the unsupported channels (last clean mode, last clean map) on XML devices.
Is there any link where I can find documentation, or all is made by reverse engineer the current official application?
I’m finding several implementation, but not a real documentation.
It’s all reverse engineering, there’s no official documentation that I am aware of.
I have a DEEBOT OZMO 900 and this addon from 20th May. All channels I tested work, but I’m missing two channels:
-
settings#water-amount
: I can set that in the app -
last-clean#last-clean-map
: Maybe not supported by my device, but openhab2-addons/README.md at ecovacs-rebase · maniac103/openhab2-addons · GitHub doesn’t mention a restriction
Things you could add:
- Add
customArea
toactions#command
. - Add “Find DEEBOT”. When pressing this button in the app, the robot plays a sound.
So you have status#water-system-present
, but not settings#water-amount
? That would be weird, because those two have the same condition for removal. You do have Show advanced channels
enabled though, right?
The README doesn’t currently make any efforts of calling out supported device features. The reason for that is that in most cases I can’t validate supported device features myself, simply because I don’t own the devices (I gathered the supported device features from other open source libraries and this list).
I thought about this, but I have no idea what a meaningful parameter format for specifying the area to be cleaned could look like. Do you have an idea there?
I’ll add a playSound
rule action, with a parameter specifying the sound to be played.
No, I wasn’t even aware of that checkbox. After ticking it, settings#water-amount
is now visible
Maybe customArea:(1|2)(3|4)
where (1|2)
stand for the x and y coordinates of the top left hand corner of the custom area and (3|4)
for the bottom right hand corner?
I hope that these coordinates are stable. Otherwise this wouldn’t be useful at all.
At least the room ids change with nearly every run on my device…
And how do you find out the coordinates to put there?
Only idea I have about that is logging custom area runs started by the app (need to see if this is possible). The coordinates should be stable as long as the map has the same size.
Edit:
A cleaning info MQTT message that shows the custom area format (here: a 1.0 x 0.5m area) used by the device looks like this:
{"header":{"pri":1,"tzm":480,"ts":"1653461358022","ver":"0.0. 1","fwVer":"1.8.2","hwVer":"0.1.1"},"body":{"data":{"trigger":"app","state":"clean","cleanState":{"id":"122","router":"plan","type":"customArea","content":"1074.000000,-326.000000,2098.000000,-855.000000","count":1,"motionState":"working"}}}}
A 1.0 x 2.0m area (roughly at the same spot in the map) looks like this:
{"header":{"pri":1,"tzm":480,"ts":"1653461526530","ver":"0.0. 1","fwVer":"1.8.2","hwVer":"0.1.1"},"body":{"data":{"trigger":"app","state":"clean","cleanState":{"id":"122","router":"plan","type":"customArea","content":"992.000000,256.000000,2112.000000,-1702.000000","count":1,"motionState":"working"}}}}
2.0 x 0.5m:
{"header":{"pri":1,"tzm":480,"ts":"1653461720967","ver":"0.0.1","fwVer":"1.8.2","hwVer":"0.1.1"},"body":{"data":{"trigger":"app","state":"clean","cleanState":{"id":"122","router":"plan","type":"customArea","content":"-20.000000,114.000000,2027.000000,-358.000000","count":1,"motionState":"working"}}}}
Coordinate system seems to be x1,y1,x2,y2 in mm, but I’m not sure about the origin point of it. Probably somewhere around the charging station. In any case, I don’t see a user measuring this manually, so logging the coordinates, triggering from the app and using those coordinates seems like the only meaningful choice?
If you agree, it would be great if you could enable TRACE logging for org.openhab.binding.ecovacs
, start a custom area clean run and then send me a PM with the log so I can see the format for XML devices. Thanks.
I guess that’s the best solution.
Yes, I can do that. Is the debug message already implemented or do I need to update the binding first?
It’s already implemented.
Published an update with support for ‘play sound’ rule actions and ‘custom area’ command. For details see README
Hello there,
every time If I install the binding, I ran into the following warning.
2022-07-22 12:07:36.253 [WARN ] [internal.service.FeaturesServiceImpl] - Can't load features repository mvn:org.openhab.core.features.karaf/org.openhab.core.features.karaf.openhab-core/3.3.0-SNAPSHOT/xml/features
java.lang.RuntimeException: Error resolving artifact org.openhab.core.features.karaf:org.openhab.core.features.karaf.openhab-core:xml:features:3.3.0-SNAPSHOT: [Could not find artifact org.openhab.core.features.karaf:org.openhab.core.features.karaf.openhab-core:xml:features:3.3.0-SNAPSHOT] : mvn:org.openhab.core.features.karaf/org.openhab.core.features.karaf.openhab-core/3.3.0-SNAPSHOT/xml/features
at org.apache.karaf.features.internal.service.RepositoryImpl.load(RepositoryImpl.java:121) ~[?:?]
at org.apache.karaf.features.internal.service.RepositoryImpl.<init>(RepositoryImpl.java:51) ~[?:?]
at org.apache.karaf.features.internal.service.RepositoryCacheImpl.create(RepositoryCacheImpl.java:51) ~[?:?]
at org.apache.karaf.features.internal.service.FeaturesServiceImpl.getFeatureCache(FeaturesServiceImpl.java:611) ~[?:?]
at org.apache.karaf.features.internal.service.FeaturesServiceImpl.ensureCacheLoaded(FeaturesServiceImpl.java:582) ~[?:?]
at org.apache.karaf.features.internal.service.FeaturesServiceImpl.getRepository(FeaturesServiceImpl.java:530) ~[?:?]
at org.apache.karaf.kar.internal.KarServiceImpl.findMissingDependency(KarServiceImpl.java:165) ~[?:?]
at org.apache.karaf.kar.internal.KarServiceImpl.install(KarServiceImpl.java:116) ~[?:?]
at org.apache.karaf.kar.internal.KarServiceImpl.install(KarServiceImpl.java:95) ~[?:?]
at org.openhab.core.addon.marketplace.karaf.internal.community.CommunityKarafAddonHandler.installFromCache(CommunityKarafAddonHandler.java:163) ~[?:?]
at org.openhab.core.addon.marketplace.karaf.internal.community.CommunityKarafAddonHandler.install(CommunityKarafAddonHandler.java:110) ~[?:?]
at org.openhab.core.addon.marketplace.AbstractRemoteAddonService.install(AbstractRemoteAddonService.java:176) ~[?:?]
at org.openhab.core.io.rest.core.internal.addons.AddonResource.lambda$1(AddonResource.java:223) ~[?:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
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.io.IOException: Error resolving artifact org.openhab.core.features.karaf:org.openhab.core.features.karaf.openhab-core:xml:features:3.3.0-SNAPSHOT: [Could not find artifact org.openhab.core.features.karaf:org.openhab.core.features.karaf.openhab-core:xml:features:3.3.0-SNAPSHOT]
at org.ops4j.pax.url.mvn.internal.AetherBasedResolver.configureIOException(AetherBasedResolver.java:803) ~[?:?]
at org.ops4j.pax.url.mvn.internal.AetherBasedResolver.resolve(AetherBasedResolver.java:774) ~[?:?]
at org.ops4j.pax.url.mvn.internal.AetherBasedResolver.resolve(AetherBasedResolver.java:657) ~[?:?]
at org.ops4j.pax.url.mvn.internal.AetherBasedResolver.resolve(AetherBasedResolver.java:598) ~[?:?]
at org.ops4j.pax.url.mvn.internal.AetherBasedResolver.resolve(AetherBasedResolver.java:565) ~[?:?]
at org.ops4j.pax.url.mvn.internal.AetherBasedResolver.resolve(AetherBasedResolver.java:555) ~[?:?]
at org.ops4j.pax.url.mvn.internal.Connection.getInputStream(Connection.java:123) ~[?:?]
at java.net.URL.openStream(URL.java:1165) ~[?:?]
at org.apache.karaf.features.internal.service.RepositoryImpl.load(RepositoryImpl.java:114) ~[?:?]
... 17 more
Suppressed: shaded.org.eclipse.aether.transfer.ArtifactNotFoundException: Could not find artifact org.openhab.core.features.karaf:org.openhab.core.features.karaf.openhab-core:xml:features:3.3.0-SNAPSHOT
at shaded.org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:403) ~[?:?]
at shaded.org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:215) ~[?:?]
at shaded.org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:192) ~[?:?]
at shaded.org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveArtifact(DefaultRepositorySystem.java:247) ~[?:?]
at org.ops4j.pax.url.mvn.internal.AetherBasedResolver.resolve(AetherBasedResolver.java:767) ~[?:?]
at org.ops4j.pax.url.mvn.internal.AetherBasedResolver.resolve(AetherBasedResolver.java:657) ~[?:?]
at org.ops4j.pax.url.mvn.internal.AetherBasedResolver.resolve(AetherBasedResolver.java:598) ~[?:?]
at org.ops4j.pax.url.mvn.internal.AetherBasedResolver.resolve(AetherBasedResolver.java:565) ~[?:?]
at org.ops4j.pax.url.mvn.internal.AetherBasedResolver.resolve(AetherBasedResolver.java:555) ~[?:?]
at org.ops4j.pax.url.mvn.internal.Connection.getInputStream(Connection.java:123) ~[?:?]
at java.net.URL.openStream(URL.java:1165) ~[?:?]
at org.apache.karaf.features.internal.service.RepositoryImpl.load(RepositoryImpl.java:114) ~[?:?]
at org.apache.karaf.features.internal.service.RepositoryImpl.<init>(RepositoryImpl.java:51) ~[?:?]
at org.apache.karaf.features.internal.service.RepositoryCacheImpl.create(RepositoryCacheImpl.java:51) ~[?:?]
at org.apache.karaf.features.internal.service.FeaturesServiceImpl.getFeatureCache(FeaturesServiceImpl.java:611) ~[?:?]
at org.apache.karaf.features.internal.service.FeaturesServiceImpl.ensureCacheLoaded(FeaturesServiceImpl.java:582) ~[?:?]
at org.apache.karaf.features.internal.service.FeaturesServiceImpl.getRepository(FeaturesServiceImpl.java:530) ~[?:?]
at org.apache.karaf.kar.internal.KarServiceImpl.findMissingDependency(KarServiceImpl.java:165) ~[?:?]
at org.apache.karaf.kar.internal.KarServiceImpl.install(KarServiceImpl.java:116) ~[?:?]
at org.apache.karaf.kar.internal.KarServiceImpl.install(KarServiceImpl.java:95) ~[?:?]
at org.openhab.core.addon.marketplace.karaf.internal.community.CommunityKarafAddonHandler.installFromCache(CommunityKarafAddonHandler.java:163) ~[?:?]
at org.openhab.core.addon.marketplace.karaf.internal.community.CommunityKarafAddonHandler.install(CommunityKarafAddonHandler.java:110) ~[?:?]
at org.openhab.core.addon.marketplace.AbstractRemoteAddonService.install(AbstractRemoteAddonService.java:176) ~[?:?]
at org.openhab.core.io.rest.core.internal.addons.AddonResource.lambda$1(AddonResource.java:223) ~[?:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
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: shaded.org.eclipse.aether.resolution.ArtifactResolutionException: Error resolving artifact org.openhab.core.features.karaf:org.openhab.core.features.karaf.openhab-core:xml:features:3.3.0-SNAPSHOT
at shaded.org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:413) ~[?:?]
at shaded.org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:215) ~[?:?]
at shaded.org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:192) ~[?:?]
at shaded.org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveArtifact(DefaultRepositorySystem.java:247) ~[?:?]
at org.ops4j.pax.url.mvn.internal.AetherBasedResolver.resolve(AetherBasedResolver.java:767) ~[?:?]
at org.ops4j.pax.url.mvn.internal.AetherBasedResolver.resolve(AetherBasedResolver.java:657) ~[?:?]
at org.ops4j.pax.url.mvn.internal.AetherBasedResolver.resolve(AetherBasedResolver.java:598) ~[?:?]
at org.ops4j.pax.url.mvn.internal.AetherBasedResolver.resolve(AetherBasedResolver.java:565) ~[?:?]
at org.ops4j.pax.url.mvn.internal.AetherBasedResolver.resolve(AetherBasedResolver.java:555) ~[?:?]
at org.ops4j.pax.url.mvn.internal.Connection.getInputStream(Connection.java:123) ~[?:?]
at java.net.URL.openStream(URL.java:1165) ~[?:?]
at org.apache.karaf.features.internal.service.RepositoryImpl.load(RepositoryImpl.java:114) ~[?:?]
... 17 more
I’ve tried everything I think, yesterday I installed a completely fresh install of openhabian… still appears.
current version completely fresh - openHAB 3.3.0 - Release Build
Can anyone support with this ?
I’ve exactly the same issue after updating to 3.3.0 release.
Binding isn’t working any more
I guess this is due to 3.3.0-SNAPSHOT artifacts being removed from the Maven repo after 3.3.0 release. I’ll do a rebuild against 3.4.0-SNAPSHOT ASAP.
It looks like this warning actually is not an issue, at least it doesn’t seem to impair using the binding. I set up a test environment and
- got the warning with 3.3.0 and 20220622 binding, but binding was active nevertheless
- still get the warning with 20220726 binding, which is now built against the 3.4.0-SNAPSHOT runtime, but the binding still seems to work fine
I’m not sure about the source/reason of this warning, because I do not fully understand the distribution model of OH and the repositories used to fetch the various jar files. TBH, I’d suggest ignoring the warnings for now as long as the binding continues to work fine. I hope those warnings will disappear if/when the binding eventually gets merged to the OH distribution.
Today I tested this feature and found two issues:
- It’s not possible to enter
customArea:0,0,100,100=customArea
in the command descriptions textbox on /settings/items/Ecovacs_Command/metadata/commandDescription, because commas are used as option delimiter there. Maybe change the coordinate delimiter to_
, e.g.customArea:0_0_100_100
? - I re-created the robot thing, but I still don’t see the channel
current-cleaning-spot-definition
and this time I checked the “Show advanced” checkbox
My robot is supported by this feature, because sending customArea:100,100,1000,1000
to the command
channel triggers a custom area clean.
I’ve changed the delimiter to semicolon, so now it’s customArea:0;0;100;100
. Same applies to spot area: spotArea:A;B;D
.
I’m not sure what’s going on on your machine then
- The XML clearly lists the channel
- The channel is not among those (potentially removed) at runtime (see removal code)
- It’s present for my devices (950 OZMO and N8), so there doesn’t seem to be an XML issue:
Are you sure you recreated the thing using the latest binding?
I think so. On /settings/addons/marketplace:132989
it says " Updated At: 2. September 2022 10:18" and there’s no “Update” button, so I have the latest version?
You need to reinstall (as in: uninstall and install again) to update the installed binding.
With that the channel appears and the delimiter change I can now control my robot by a single drop down menu that contains my rooms. Thank you
Nit: You could round the values in current-cleaning-spot-definition
. For my device it contains values with 6 positions after decimal point.