Ecovacs DEEBOT OZMO 930 Support

673 views
Skip to first unread message

Jordan Jacob

unread,
Feb 18, 2019, 11:20:57 PM2/18/19
to sucks-users
Hello all, I am currently testing out @bmartin5692's fork for the D901 with my OZMO 930. It appears I have connection to my OZMO 930 as I can see the S/N and battery status from the ping commands however it will not follow any of the commands I issue such as "suck clean 5" or "sucks charge". Here is a debug log below with S/N omitted. I have specified the 'verify_ssl' value to false in the config and uninstalled pyasn1 and pyasn1-modules to resolve connection errors. Any advice?

sucks      DEBUG    ----------------- starting session ----------------

sucks      DEBUG    event = {}

performing clean command

sucks      DEBUG    Sending command <iq id="0053c25a-da87-404e-9a9d-dea238317753-3" to="SNH...@115.ecorobot.net/atom" from="dbjteqp8...@ecouser.net/4ba787af879cbe233f5b204f3bdc0caa" type="set"><query xmlns="com:ctl"><ctl td="Clean"><clean type="auto" speed="standard" /></ctl></query></iq>

waiting for 300.0s

sucks      DEBUG    *** sending ping ***

sucks      DEBUG    *** sending ping ***

sucks      DEBUG    *** battery_status = 99%

sucks      DEBUG    *** sending ping ***

sucks      DEBUG    *** sending ping ***

sucks      DEBUG    *** sending ping ***

sucks      DEBUG    *** sending ping ***

sucks      DEBUG    *** sending ping ***

sucks      DEBUG    *** sending ping ***

sucks      DEBUG    *** sending ping ***

sucks      DEBUG    *** sending ping ***

performing charge command

sucks      DEBUG    Sending command <iq id="0053c25a-da87-404e-9a9d-dea238317753-E" to="SNH...@115.ecorobot.net/atom" from="dbjteqp8...@ecouser.net/4ba787af879cbe233f5b204f3bdc0caa" type="set"><query xmlns="com:ctl"><ctl td="Charge"><charge type="go" /></ctl></query></iq>

sucks.cli  DEBUG    waiting on charge_status for value charging

sucks      DEBUG    *** sending ping ***

sucks      DEBUG    *** sending ping ***

sucks      DEBUG    *** sending ping ***

sucks      DEBUG    *** sending ping ***

sucks      DEBUG    *** sending ping ***

Jonathan Woodall

unread,
Feb 19, 2019, 1:03:00 AM2/19/19
to Jordan Jacob, sucks-users
Jordan,

Can you get the output of ’sucks —debug stop’ as well as ‘pip list’ for me? I would just like to see the full verbose debug.

Thanks,

Jon

--
You received this message because you are subscribed to the Google Groups "sucks-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sucks-users...@googlegroups.com.
To post to this group, send email to sucks...@googlegroups.com.
Visit this group at https://groups.google.com/group/sucks-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/sucks-users/2a2bb10d-72ba-408f-9229-453a6445a463%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Jordan Jacob

unread,
Feb 19, 2019, 12:30:05 PM2/19/19
to sucks-users
Here is the information as requested. It just sits with an endless sending ping command.

administrator@hb-svr1-sbc:~$ pip3 list
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
asn1crypto (0.24.0)
atomicwrites (1.3.0)
attrs (18.2.0)
Automat (0.6.0)
blinker (1.4)
certifi (2018.11.29)
chardet (3.0.4)
Click (7.0)
cloud-init (18.4)
colorama (0.3.7)
command-not-found (0.3)
configobj (5.0.6)
constantly (15.1.0)
coverage (4.5.2)
cryptography (2.1.4)
distro-info (0.18)
dnspython (1.15.0)
dnspython3 (1.15.0)
httplib2 (0.9.2)
hyperlink (17.3.1)
idna (2.8)
incremental (16.10.1)
Jinja2 (2.10)
jsonpatch (1.16)
jsonpointer (1.10)
jsonschema (2.6.0)
keyring (10.6.0)
keyrings.alt (3.0)
language-selector (0.1)
MarkupSafe (1.0)
more-itertools (6.0.0)
netifaces (0.10.4)
oauthlib (2.0.6)
paho-mqtt (1.4.0)
PAM (0.4.2)
pip (9.0.1)
pluggy (0.8.1)
pprintpp (0.4.0)
py (1.7.0)
pycountry (18.12.8)
pycountry-convert (0.7.2)
pycrypto (2.6.1)
pycryptodome (3.7.3)
pygobject (3.26.1)
PyJWT (1.5.3)
pyOpenSSL (17.5.0)
pyserial (3.4)
pytest (4.3.0)
pytest-cov (2.6.1)
pytest-mock (1.10.1)
python-apt (1.6.3+ubuntu1)
python-debian (0.1.32)
pyxdg (0.25)
PyYAML (3.12)
repoze.lru (0.7)
requests (2.21.0)
requests-unixsocket (0.1.5)
SecretStorage (2.3.1)
setuptools (40.8.0)
six (1.12.0)
sleekxmpp (1.3.2)
ssh-import-id (5.7)
stringcase (1.2.0)
sucks (0.9.3)
systemd-python (234)
ufw (0.35)
unattended-upgrades (0.1)
urllib3 (1.24.1)
wheel (0.33.0)
zope.interface (4.3.2)

administrator@hb-svr1-sbc:~$ sucks --debug stop
sucks.cli DEBUG will run [<sucks.cli.CliAction object at 0x7faecf8585c0>]
sucks DEBUG Setting up EcoVacsAPI
sucks DEBUG calling main api user/login with (('account', 'ACCOUNTID'), ('password', 'PASSWORD'))
/home/administrator/.local/lib/python3.6/site-packages/urllib3/connectionpool.py:847: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
InsecureRequestWarning)
sucks DEBUG got {'code': '0000', 'msg': '操作成功', 'time': 1550596205114, 'data': {'uid': 'UID', 'username': 'EAEDNETH', 'email': 'E-MAIL', 'country': 'us', 'accessToken': 'TOKEN'}}
sucks DEBUG calling main api user/getAuthCode with (('uid', 'UID'), ('accessToken', 'TOKEN'))
/home/administrator/.local/lib/python3.6/site-packages/urllib3/connectionpool.py:847: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
InsecureRequestWarning)
sucks DEBUG got {'code': '0000', 'msg': '操作成功', 'time': 1550596205560, 'data': {'authCode': 'AUTHCODE', 'ecovacsUid': 'UID'}}
sucks DEBUG calling portal api users/user.do function loginByItToken with {'country': 'US', 'resource': '761bf9e6', 'realm': 'ecouser.net', 'userId': 'USERID', 'token': 'TOKEN'}
/home/administrator/.local/lib/python3.6/site-packages/urllib3/connectionpool.py:847: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
InsecureRequestWarning)
sucks DEBUG got {'todo': 'result', 'result': 'ok', 'userId': 'USERID', 'resource': '761bf9e6', 'token': 'TOKEN'}
sucks DEBUG calling portal api users/user.do function GetDeviceList with {'userid': 'dbjteqp8adc04ce1', 'auth': {'with': 'users', 'userid': 'dbjteqp8adc04ce1', 'realm': 'ecouser.net', 'token': 'TOKEN', 'resource': '761bf9e6'}}
/home/administrator/.local/lib/python3.6/site-packages/urllib3/connectionpool.py:847: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
InsecureRequestWarning)
sucks DEBUG got {'todo': 'result', 'result': 'ok', 'devices': [{'did': 'SNHERE', 'name': 'SNHERE', 'class': '115', 'resource': 'atom', 'nick': 'Rosie', 'company': 'eco-legacy'}]}
sleekxmpp.basexmpp WARNING fulljid property deprecated. Use boundjid.resource
sleekxmpp.xmlstream.cert WARNING Could not find pyasn1 and pyasn1_modules. SSL certificate COULD NOT BE VERIFIED.
sleekxmpp.xmlstream.cert WARNING Could not find pyasn1 and pyasn1_modules. SSL certificate expiration COULD NOT BE VERIFIED.
sucks DEBUG ----------------- starting session ----------------
sucks DEBUG event = {}
performing stop command
sucks DEBUG Sending command <iq id="a33451ca-2edf-4002-b342-81744f91ee0f-3" to="SNH...@115.ecorobot.net/atom" from="dbjteqp8...@ecouser.net/be55a06d9aebee7e728e71dec27ec5b8" type="set"><query xmlns="com:ctl"><ctl td="Clean"><clean type="stop" speed="standard" /></ctl></query></iq>
sucks.cli DEBUG waiting on clean_status for value stop

Jonathan Woodall

unread,
Feb 19, 2019, 10:06:01 PM2/19/19
to sucks-users
Jordan,

All looks well until the last reply from ecovacs. The 900/901 company is eco-ng whereas yours is eco-legacy. I've only seen eco-legacy on the older XMPP vacuums like the N79. Out of curiosity, what happens when you use wpietri's master? I'm guessing you have SSL issues. Without a capture of the unencrypted traffic from the real app, this may be difficult to diagnose without guessing. Someone hopefully knows more about this than me. 

Mine:
sucks      DEBUG    got {'todo': 'result', 'result': 'ok', 'devices': [{'did': 'SN', 'name': 'name', 'class': 'ls1ok3', 'resource': 'ffU0', 'nick': None, 'company': 'eco-ng'}]}

Yours:
sucks      DEBUG    got {'todo': 'result', 'result': 'ok', 'devices': [{'did': 'SNHERE', 'name': 'SNHERE', 'class': '115', 'resource': 'atom', 'nick': 'Rosie', 'company': 'eco-legacy'}]}


This last reply should be followed by the start of MQTT comms:

sucks      DEBUG    EcoVacsMQTT - Connected with result code 0
sucks      DEBUG    EcoVacsMQTT - Subscribing to all
performing stop command

sucks      DEBUG    Sending command {'auth': {'realm': 'ecouser.net', 'resource': '275817dd', 'token': 'token', 'userid': 'userid', 'with': 'users'}, 'cmdName': 'Clean', 'payload': '<ctl><clean act="s" speed="standard" type="stop" /></ctl>', 'payloadType': 'x', 'td': 'q', 'toId': 'string', 'toRes': 'ffU0', 'toType': 'ls1ok3'}

sucks      DEBUG    calling iotdevmanager api with {'auth': {'realm': 'ecouser.net', 'resource': '275817dd', 'token': 'token', 'userid': 'userid', 'with': 'users'}, 'cmdName': 'Clean', 'payload': '<ctl><clean act="s" speed="standard" type="stop" /></ctl>', 'payloadType': 'x', 'td': 'q', 'toId': 'string', 'toRes': 'ffU0', 'toType': 'ls1ok3'}
sucks.cli  DEBUG    waiting on clean_status for value stop


On Monday, February 18, 2019 at 11:20:57 PM UTC-5, Jordan Jacob wrote:
Hello all, I am currently testing out @bmartin5692's fork for the D901 with my OZMO 930. It appears I have connection to my OZMO 930 as I can see the S/N and battery status from the ping commands however it will not follow any of the commands I issue such as "suck clean 5" or "sucks charge". Here is a debug log below with S/N omitted. I have specified the 'verify_ssl' value to false in the config and uninstalled pyasn1 and pyasn1-modules to resolve connection errors. Any advice?

sucks      DEBUG    ----------------- starting session ----------------

sucks      DEBUG    event = {}

performing clean command

sucks      DEBUG    Sending command <iq id="0053c25a-da87-404e-9a9d-dea238317753-3" to="SNH...@115.ecorobot.net/atom" from="dbjteqp8adc04ce1@ecouser.net/4ba787af879cbe233f5b204f3bdc0caa" type="set"><query xmlns="com:ctl"><ctl td="Clean"><clean type="auto" speed="standard" /></ctl></query></iq>

waiting for 300.0s

sucks      DEBUG    *** sending ping ***

sucks      DEBUG    *** sending ping ***

sucks      DEBUG    *** battery_status = 99%

sucks      DEBUG    *** sending ping ***

sucks      DEBUG    *** sending ping ***

sucks      DEBUG    *** sending ping ***

sucks      DEBUG    *** sending ping ***

sucks      DEBUG    *** sending ping ***

sucks      DEBUG    *** sending ping ***

sucks      DEBUG    *** sending ping ***

sucks      DEBUG    *** sending ping ***

performing charge command

sucks      DEBUG    Sending command <iq id="0053c25a-da87-404e-9a9d-dea238317753-E" to="SNH...@115.ecorobot.net/atom" from="dbjteqp8adc04ce1@ecouser.net/4ba787af879cbe233f5b204f3bdc0caa" type="set"><query xmlns="com:ctl"><ctl td="Charge"><charge type="go" /></ctl></query></iq>

Brian Martin

unread,
Feb 19, 2019, 11:11:04 PM2/19/19
to sucks-users
I'm pretty sure based on my research and testing that the Ozmo 930 uses XMPP as well.  I've only been able to see the D900 series using the MQTT protocols.  You are right with the eco-ng vs eco-legacy and I believe that is the main distinction in MQTT vs XMPP usage.

Could you run XMPPEEK and get some more details on what the app is doing?

Jordan Jacob

unread,
Feb 20, 2019, 12:44:25 AM2/20/19
to sucks-users
I'll see what I can do related to running XMPPeek however this might be worth noting regarding App compatibility. The OZMO 930 Series uses the ECOVACS app whereas the DEEBOT 901 uses ECOVACS Home. This could differentiate why we're seeing the legacy call.


ECOVACS HOME
These models are supported
DEEBOT 600,DEEBOT 601,DEEBOT 605
DEEBOT 710,DEEBOT 711,DEEBOT 715
DEEBOT 900,DEEBOT 901,DEEBOT 907
DEEBOT OZMO 900
DEEBOT OZMO Slim10,DEEBOT OZMO Slim11,DEEBOT OZMO Slim15


ECOVACS
These models are supported
ATMOBOT 650
DEEBOT M80 Pro
DEEBOT M81 Pro
DEEBOT M86
DEEBOT M87
DEEBOT M88
DEEBOT Mini2
DEEBOT N79
DEEBOT N79S,DEEBOT N79SE,DEEBOT N79T,DEEBOT N79W
DEEBOT OZMO 600
DEEBOT OZMO 601
DEEBOT OZMO 610,DEEBOT OZMO 615
DEEBOT OZMO 930,DEEBOT OZMO 937
DEEBOT PRO 930
DEEBOT R95
DEEBOT R96
DEEBOT R98
DEEBOT Slim2,DEEBOT Slim2 Marvel,DEEBOT Slim Neo

Jonathan Woodall

unread,
Feb 20, 2019, 12:48:55 AM2/20/19
to Jordan Jacob, sucks-users
If that is the case, it is potentially an XMPP call vs MQTT. I would definitely try wpietri’s release of sucks, which was written for XMPP.
> --
> You received this message because you are subscribed to the Google Groups "sucks-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to sucks-users...@googlegroups.com.
> To post to this group, send email to sucks...@googlegroups.com.
> Visit this group at https://groups.google.com/group/sucks-users.
> To view this discussion on the web visit https://groups.google.com/d/msgid/sucks-users/ca400d66-86e4-4127-849d-9737339befe2%40googlegroups.com.

Jordan Jacob

unread,
Feb 20, 2019, 2:15:23 AM2/20/19
to sucks-users
I tried it and unfortunately experienced the same results. Command sent, bot does nothing and caught in endless loop of "Sending Ping".

Jordan Jacob

unread,
Feb 20, 2019, 2:16:07 PM2/20/19
to sucks-users
Ok, so I tried running XMPPpeek with no luck. According to Wireshark it appears that my DEEBOT OZMO 930 doesn't use a host name but instead connects with IP 47.88.66.164. I tried running a ping for that IP address with the -a flag but no luck.

Jonathan Woodall

unread,
Feb 20, 2019, 2:36:50 PM2/20/19
to Jordan Jacob, sucks-users
I saw that same address in a capture, and it didn’t resolve as you said. It was registered in China I believe. I’ll check into it again. I can’t remember what my findings were :)

Sent from my iPhone

On Feb 20, 2019, at 2:16 PM, Jordan Jacob <rushh...@gmail.com> wrote:

Ok, so I tried running XMPPpeek with no luck. According to Wireshark it appears that my DEEBOT OZMO 930 doesn't use a host name but instead connects with IP 47.88.66.164. I tried running a ping for that IP address with the -a flag but no luck.

--
You received this message because you are subscribed to the Google Groups "sucks-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sucks-users...@googlegroups.com.
To post to this group, send email to sucks...@googlegroups.com.
Visit this group at https://groups.google.com/group/sucks-users.

Jordan Jacob

unread,
Feb 20, 2019, 2:46:14 PM2/20/19
to sucks-users
I did some extra digging. While the IP doesn't resolve to a hostname low and behold a ping to portal-na.ecouser.net returns the following. After finding that portal-na.ecouser.net was the IP it was calling I modified the XMPP calls to go to that hostname and it doesn't work. I'm totally at a loss here.

PING portal-na.ecouser.net (47.88.66.164) 56(84) bytes of data.

64 bytes from 47.88.66.164 (47.88.66.164): icmp_seq=1 ttl=86 time=205 ms

64 bytes from 47.88.66.164 (47.88.66.164): icmp_seq=2 ttl=86 time=222 ms

64 bytes from 47.88.66.164 (47.88.66.164): icmp_seq=3 ttl=86 time=226 ms

Jordan Jacob

unread,
Feb 20, 2019, 2:52:12 PM2/20/19
to sucks-users
So it seems msg-na.ecouser.net and portal-na.ecouser.net are interchangeable. Same IP addresses. For some reason I cannot get XMPPpeek to intercept traffic.

PING msg-na.ecouser.net (47.88.66.164) 56(84) bytes of data.

64 bytes from 47.88.66.164 (47.88.66.164): icmp_seq=1 ttl=86 time=134 ms

64 bytes from 47.88.66.164 (47.88.66.164): icmp_seq=2 ttl=86 time=110 ms

Jonathan Woodall

unread,
Feb 20, 2019, 4:14:34 PM2/20/19
to Jordan Jacob, sucks-users
What are you using for DNS? I would just reroute ALL queries to your XMPPeek box, or if you have anything fancy you can source route from the vacuum to XMPPeek.

--
You received this message because you are subscribed to the Google Groups "sucks-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sucks-users...@googlegroups.com.
To post to this group, send email to sucks...@googlegroups.com.
Visit this group at https://groups.google.com/group/sucks-users.

Jordan Jacob

unread,
Feb 20, 2019, 5:21:35 PM2/20/19
to sucks-users
Well it wasn't easy and it did not work 100% as expected but I was able to at least capture traffic on port 5223 to and from the Ecovac DEEBOT OZMO 930. Wasn't able to capture from the phone though as it wouldn't work correctly. I'm assuming Pastebin would be best to upload the traffic. Do I need to hide anything on the logs other than the S/N?

Brian Martin

unread,
Feb 20, 2019, 5:48:18 PM2/20/19
to sucks-users
Good work - You could try the log_clean.py script in the repo to clean it.  I think it clears the S/N, userids, ips, and resourceids, but I haven't tried it myself.

Jordan Jacob

unread,
Feb 20, 2019, 8:07:52 PM2/20/19
to sucks-users
Anyone know how to use it? I can't seem to figure it out. I run the script and expect to supply an input file but it just hangs.

Brian Martin

unread,
Feb 20, 2019, 8:28:13 PM2/20/19
to sucks-users
I just gave it a try.  Looks like you can do something like "python log_clean.py < your_xmpplog.txt > clean_xmpplog.txt"

It ended up erroring out on my test files and didn't clean the logs fully, but maybe it will work for yours.

Jordan Jacob

unread,
Feb 20, 2019, 9:32:47 PM2/20/19
to sucks-users
Brian, I also received errors. What errors were you seeing?

Jordan Jacob

unread,
Feb 20, 2019, 9:55:36 PM2/20/19
to sucks-users
Ok, so I think I have it cleaned up. One interesting bit I noticed is that the ROBOTID came in 2 forms one with a capital "E" and one with a lowercase "e". My serial number contains only 1 letter at the beginning of it.

Brian Martin

unread,
Feb 20, 2019, 9:58:08 PM2/20/19
to sucks-users
I'm seeing this:
Traceback (most recent call last):
  File "log_clean.py", line 75, in <module>
    (authentication_id, authorization_id, password) = base64.b64decode(auth_glob).decode().split(sep='\0')
  File "/usr/local/Cellar/python/3.7.2_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/base64.py", line 80, in b64decode
    s = _bytes_from_decode_data(s)
  File "/usr/local/Cellar/python/3.7.2_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/base64.py", line 46, in _bytes_from_decode_data
    "string, not %r" % s.__class__.__name__) from None
TypeError: argument should be a bytes-like object or ASCII string, not 'NoneType'

Jordan Jacob

unread,
Feb 20, 2019, 10:06:28 PM2/20/19
to sucks-users
Looks to be the same for me. I had to edit the None fields for the following source_ip, userid, resourceid, robotid and auth_glob. The only thing it did not cover was capitalization on the robotid value. I had to manually clean up those. After that the file compiled pretty well but still did present some small errors.

Traceback (most recent call last):

  File "./go/src/github.com/wpietri/sucks/log_clean.py", line 78, in <module>

    (mystery, resource, secret) = password.split('/')

ValueError: not enough values to unpack (expected 3, got 1)

Brian Martin

unread,
Feb 21, 2019, 9:04:25 AM2/21/19
to sucks-users
This is good. I see what look like a number of good commands and responses, then a few bad-request items.

Good requests:
17:00:06 S <iq type="set" id="3" to="ROBOTID (CAPITAL LETTERS)@115.ecorobot.net/atom" from="USE...@ecouser.net/RESOURCEID"><query xmlns="com:ctl"><ctl id="92207165" td="GetVersion" name="FW"/></query></iq>
17:00:06 C <iq to='USE...@ecouser.net/RESOURCEID' type='set' id='00E01DD64810'><query xmlns='com:ctl'><ctl id='92207165' ret='ok'>
<ver name='FW'>1.9.9</ver>
</
ctl></query></iq>

17:00:30 S <iq type="set" id="13" to="ROBOTID (CAPITAL LETTERS)@115.ecorobot.net/atom" from="USE...@ecouser.net/RESOURCEID"><query xmlns="com:ctl"><ctl td="GetBatteryInfo" id="29180767"/></query></iq>
17:00:37 C <iq to='USE...@ecouser.net/RESOURCEID' type='set' id='078923F283F0'><query xmlns='com:ctl'><ctl id='29180767' ret='ok'><battery power='95'/></ctl></query></iq>


17:00:33 S <iq type="set" id="16" to="ROBOTID (CAPITAL LETTERS)@115.ecorobot.net/atom" from="USE...@ecouser.net/RESOURCEID"><query xmlns="com:ctl"><ctl id="39917149" td="GetMapM"/></query></iq>
17:00:47 C <iq to='USE...@ecouser.net/RESOURCEID' type='set' id='076C15BF1830'><query xmlns='com:ctl'><ctl id='39917149' i='786430625' w='100' h='100' r='8' c='8' p='50' m='1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014,1295764014'/></query></iq>


Bad requests:
The bad-request items always involve "de.ecorobot.net":

17:05:44 C <iq to='de.ecorobot.net' type='set' id='0867BAEE9DD0'><query xmlns='com:ctl'><ctl ts='217149532' td='ChargeState'><charge type='SlotCharging' h='' r='' s=''/></ctl></query></iq>
17:05:44 S <iq type="error" to="ROBOTID (CAPITAL LETTERS)@115.ecorobot.net/atom" from="de.ecorobot.net" id="0867BAEE9DD0"><error type="modify" code="400"><bad-request xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq>

Does the app work through xmpppeek?  I'm having trouble seeing anything extremely wrong.  Maybe make two logs: One for the app login + executing auto clean, One for sucks login + executing auto clean.

Jordan Jacob

unread,
Feb 21, 2019, 1:23:33 PM2/21/19
to sucks-users
Brian, as requested. I was able to capture traffic this time around.

Brian Martin

unread,
Feb 21, 2019, 7:39:07 PM2/21/19
to sucks-users

I think it could be a missing option for clean - "act", which specifies the action for the command.  If you are testing with my D901 branch, make sure you have the latest and try the following modification:

In __init__.py comment out lines 998-1000, and then see if it works.  This will add the act option and default to start. 


If this works, we'll see about next steps.  I think "act" could probably be added as default, and it would work with all models - obviously that would need testing.

Jordan Jacob

unread,
Feb 21, 2019, 9:46:58 PM2/21/19
to sucks-users
Brian, comment out the lines but no action from the bot.

performing clean command

sucks      DEBUG    Sending command <iq id="e7bf0253-6c87-4fd6-ac53-afeacc009136-3" to="ROBOTID (CAPITAL LETTERS)@115.ecorobot.net/atom" from="USE...@ecouser.net/RESOURCEID" type="set"><query xmlns="com:ctl"><ctl td="Clean"><clean type="auto" speed="standard" act="s" /></ctl></query></iq>

waiting for 60.0s

Brian Martin

unread,
Feb 21, 2019, 11:11:45 PM2/21/19
to sucks-users
Thanks for trying that, I was hoping it would be simple.

The only other thing I noticed is the app is binding to a resource and sending a presence, these are things that sucks doesn't currently do:
12:36:56 C <iq type="set" id="9457ACF5-EE29-4E97-9C06-A7EA0E5DDC7B"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><resource>RESOURCEID</resource></bind></iq>
12:36:56 S <iq type="result" id="9457ACF5-EE29-4E97-9C06-A7EA0E5DDC7B"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><jid>USERID@ecouser.net/RESOURCEID</jid></bind></iq>

12:36:56 C <presence type="available"/>
12:36:56 S <presence to="USE...@ecouser.net/RESOURCEID"> dummy </presence>


This may be something to look into deeper.







Jordan Jacob

unread,
Feb 22, 2019, 5:04:08 PM2/22/19
to sucks-users
Brian, I'm not home to test but taking a look at Zenconomy's branch for "Publish-Subscribe Implemented for Status and Errors" and curious if this may resolve the issue. What's your opinion in relation to the resource binding? Also, what do you feel the next steps are for this?

Brian Martin

unread,
Feb 22, 2019, 10:05:25 PM2/22/19
to sucks-users
Hey Jordan,

I don't think the referenced branch would add much, I believe a more robust implementation was already implemented in #41 -  https://github.com/wpietri/sucks/pull/41.  The publish/subscribe is for library use so you can subscribe to events and get notified when an event occurs for example when the battery or charging status changes.

I think the resource bind could be key, but need more detailed traffic to review.  I think I'll be able to get access to an Ozmo 930 this weekend and plan to dig into the traffic closer, with the other goal to make it work with Bumper.  I'll see what I can figure out by the end of the weekend and circle back.

Jordan Jacob

unread,
Feb 23, 2019, 7:50:56 AM2/23/19
to sucks-users
Brian, sounds good. Thank you. I'll be out of town for the day but back home Sunday.

Brian Martin

unread,
Feb 25, 2019, 9:59:11 AM2/25/19
to sucks-users
Hi Jordan,

I was able to get this working over the weekend.
I pushed a new branch in my repo for the Ozmo 930 - https://github.com/bmartin5692/sucks/tree/Ozmo930

Please test that and let me know if it works.

On a side note, I've also got Bumper working with the Ozmo930 and should be able to get some updates pushed to that later this week.

Jordan Jacob

unread,
Feb 25, 2019, 4:55:15 PM2/25/19
to sucks-users
Brian, you sir are a steely-eyed missile man! Started right up! Thank you so much!

Lorenzo

unread,
Jul 18, 2020, 4:05:07 PM7/18/20
to sucks-users
Hi all I'm new to the group!

It seems that the link is broken but am not an Expert on github..
I want to test for another time this library (the first time did not work), webmail ecovacs deebot 920 robot.

I haven't found nothing about this popular robot in Italy, due to special Price on Amazon.

Thank you!

Donnie Karns

unread,
Apr 1, 2021, 7:51:10 PM4/1/21
to sucks-users
Lorenzo, it looks like the Ozmo930 branch was merged into the master branch already with this pull request: https://github.com/bmartin5692/sucks/pull/3

Unfortunately, I can't help much more than that. Although I was able to use bmartin's fork to get past a connection error from the original sucks api, my commands aren't actually making the vacuum do anything.

I've been trying on and off to get XMPPPeek working, but without success (I believe because I can't get the router to do the correct DNS mapping as described in the sucks api developer docs: https://github.com/bmartin5692/sucks/blob/master/developing.md#mitm-xmpp-traffic-between-the-android-or-ios-app-and-the-ecovacs-server

I'll post again here if I'm ever able to get it to work with my Deebot Ozmo T8
Reply all
Reply to author
Forward
0 new messages