deebotuniverse / client.py Goto Github PK
View Code? Open in Web Editor NEWDeebot client library in python
Home Page: https://deebot.readthedocs.io
License: GNU General Public License v3.0
Deebot client library in python
Home Page: https://deebot.readthedocs.io
License: GNU General Public License v3.0
The Position object is missing informations about the robot angle.
Deebot N8
7.2.0
it
eu
Log for PositionsEvent (after a GetPos command).
Notify subscribers with PositionsEvent(positions=[Position(type=<PositionType.DEEBOT: 'deebotPos'>, x=-396, y=10), Position(type=<PositionType.CHARGER: 'chargePos'>, x=-396, y=10)])
The same request made with ecovacs-deebot.js (https://github.com/mrbungle64/ecovacs-deebot.js/blob/master/example/mapInfos.js) returns and object containg "x", "y" and "a" where "a" is bot orientation in degrees.
The GetPos command is not documented but available in source code.
Please add support for Ecovacs X2 Omni
map.py
has an off-by-one error when rendering dashed lines that end up causing a divide by zero:
client.py/deebot_client/map.py
Line 505 in ebfae31
When length is 0, it'll still perform the loop and crash.
Updated it to while position < length:
locally and it now works perfectly on my map.
Deebot T9
2.0.1
ww
au
No response
No response
Map is blurry, not well defined. I have Ecovacs Deebot Omni X1
Command "getMapSubSet" was not successfully: {'ret': 'fail', 'errno': 500, 'debug': 'wait for response timed out'}
Deebot X1 Omni
3.0.0
it
eu
Command "getMapSubSet" was not successfully: {'ret': 'fail', 'errno': 500, 'debug': 'wait for response timed out'}
Command "getMapSubSet" was not successfully: {'ret': 'fail', 'errno': 500, 'debug': 'wait for response timed out'}
No
I'd like for the HA integration to support the "cleaning mode" option of the T20. (this is what is important for me)
However I extracted all options into files with corresponding jsons so it is possible to implement support for all the T20 options and actions.
All files contain options to define how all future cleanings will be performed.
One exception is the "Station start action" file where these jsons are command for the station to perform an action.
Update 2023-10-25 : Added action "Wash station sink" in file "Ecovacs T20 Station start action.txt"
Update 2023-11-03 : Added "Ecovacs T20 Reset dust bag life span.txt"
Update 2023-11-14 : Added get commands
I started the example - login seem to work but got the following error.
bot = VacuumBot(session, devices_[0], api_client)
TypeError: VacuumBot.__init__() takes 3 positional arguments but 4 were given
I am filing it as a bug report rather than a feature request, as I don't know if the provided example code should work for that device or not.
Deebot Ozmo Slim10
1.2.1
de
eu
DEBUG:deebot_client.authentication:No cached credentials, performing login
DEBUG:deebot_client.authentication:Start login to EcovacsAPI
DEBUG:deebot_client.authentication:calling login api
DEBUG:deebot_client.authentication:got {'code': '0000', 'msg': '操作成功', 'time': 1645786538571, 'data': {'uid': '[REMOVED]', 'accessToken': '[REMOVED]', 'userName': '[REMOVED]', 'email': '[REMOVED]', 'mobile': '[REMOVED]', 'isNew': None, 'loginName': '[REMOVED]', 'ucUid': '[REMOVED]'}, 'success': True}
DEBUG:deebot_client.authentication:calling auth api
DEBUG:deebot_client.authentication:got {'code': '0000', 'msg': '操作成功', 'time': 1645786539229, 'data': {'authCode': '[REMOVED]', 'ecovacsUid': '[REMOVED]'}, 'success': True}
DEBUG:deebot_client._api_client:calling api users/user.do with {'edition': 'ECOGLOBLE', 'userId': '[REMOVED]', 'token': '[REMOVED]', 'realm': 'ecouser.net', 'resource': 'xxxxxxxxxxxx', 'org': 'ECOWW', 'last': '', 'country': 'DE', 'todo': 'loginByItToken'}
DEBUG:deebot_client._api_client:got {'todo': 'result', 'result': 'ok', 'userId': '[REMOVED]', 'resource': '7a6xxxxxxxxxxxxxxx', 'token': '[REMOVED]', 'last': 604800000}
DEBUG:deebot_client.authentication:Switching to shorter UID
DEBUG:deebot_client.authentication:Login to EcovacsAPI successfully
DEBUG:deebot_client._api_client:calling api appsvr/app.do with {'userid': '[REMOVED]', 'todo': 'GetGlobalDeviceList'}
DEBUG:deebot_client._api_client:got {'code': 0, 'todo': 'result', 'ret': 'ok', 'devices': [{'did': '[REMOVED]', 'name': 'e000119xxxxxxxxxxxx', 'class': '02uwxm', 'resource': 'Etq0', 'nick': 'Staubi', 'company': 'eco-ng', 'bindTs': 1623691430807, 'service': {'jmq': 'jmq-ngiot-eu.dc.ww.ecouser.net', 'mqs': 'api-ngiot.dc-as.ww.ecouser.net'}, 'deviceName': 'DEEBOT OZMO Slim10 Series', 'icon': 'https://portal-ww.ecouser.net/api/pim/file/get/608xxxxxxxxxxxxxxxxxx', 'ota': False, 'UILogicId': 'D_OZMO_SLIM10', 'materialNo': '110-1715-0201', 'pid': '5aexxxxxxxxxxxxxx', 'product_category': 'DEEBOT', 'model': 'SLIM10', 'updateInfo': {'needUpdate': False, 'changeLog': ''}, 'status': 1}]}
ERROR:asyncio:Task exception was never retrieved
future: <Task finished name='Task-1' coro=<main() done, defined at /github-deebot-api/example.py:22> exception=TypeError('VacuumBot.__init__() takes 3 positional arguments but 4 were given')>
Traceback (most recent call last):
File "/github-deebot-api/example.py", line 33, in main
bot = VacuumBot(session, devices_[0], api_client)
TypeError: VacuumBot.__init__() takes 3 positional arguments but 4 were given
### Additional information
I really want to get the deebot slim10 to work with home-assistant and seeing that it does work with the `ecovacs-deebot.js` makes me want it even more.
If you give me some insights on how the lib works and on which places I may need to convert the data to xml I can play around on my own.
Adding support for the Goat as per DeebotUniverse/Deebot-4-Home-Assistant#341
I've collected some logs so far, not looked into the code too much but I guess there is a need for a new class that is not a vacuum.
cant seem to find a state or button for it. I have it running a few times a day in the same room where cats litter box is but I dont want it mopping 4 times a day. Would be nice to be able to dynamically control that.
ty
I have installed the library with pip install deebot-client .
When I start the sample code from the readme I get the following error:
File "/home/.../env/lib/python3.8/site-packages/.../logging_filter.py", line 12, in SanitizeFilter _SANITIZE_LOG_KEYS: set[str] = { TypeError: 'type' object is not subscriptable
Deebot Ozmo 920
1.4.0
de
eu
No response
No response
No response
Add support for Air Purification Robot Z1, It should use the same server as Deebot and some of the instructions should be the same.
No response
No response
No response
Not working on Windows:
ERROR:deebot_client.mqtt_client:An exception occurred
Traceback (most recent call last):
File "XXX\Python311\Lib\site-packages\deebot_client\mqtt_client.py", line 160, in mqtt
async with (await self._get_client()) as client:
File "XXX\Python311\Lib\site-packages\aiomqtt\client.py", line 1070, in aenter
await loop.run_in_executor(
File "XXX\Python311\Lib\concurrent\futures\thread.py", line 58, in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "XXX\Python311\Lib\site-packages\paho\mqtt\client.py", line 914, in connect
return self.reconnect()
^^^^^^^^^^^^^^^^
File "XXX\Python311\Lib\site-packages\paho\mqtt\client.py", line 1086, in reconnect
self._call_socket_open()
File "XXX\Python311\Lib\site-packages\paho\mqtt\client.py", line 2155, in _call_socket_open
on_socket_open(self, self._userdata, self._sock)
File "XXX\Python311\Lib\site-packages\aiomqtt\client.py", line 1021, in _on_socket_open
self._loop.call_soon_threadsafe(self._loop.add_reader, sock.fileno(), callback)
^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'ProactorEventLoop' object has no attribute 'add_reader'
Deebot X1 Omni
3.0.0
it
eu
AttributeError: 'ProactorEventLoop' object has no attribute 'add_reader'
AttributeError: 'ProactorEventLoop' object has no attribute 'add_reader'
Can be useful for refill planning
A sensor for each tank with a percentage or levels (hi / mid / low)
No response
No response
No response
Following message is in the log:
Could not handle getError message: {'code': []}
I've lookied into the code and found under commands the corresponding error.py.
Looked fine so far, so i have no real clue why this message comes up.
I cant really find any difference from the log-body to the error.py.... codes = data.get("code", []) Should work, or not?
Means that there is an event.py under messages or events needed?
Or is something changed in the code of the ecovacs servers?
Deebot X2 Omni
7.2.0
de
eu
2024-05-15 11:55:23.503 DEBUG (MainThread) [deebot_client.authentication] Success calling api url=https://portal-eu.ecouser.net/api/iot/devmanager.do, params={'mid': 'lf3bn4', 'did': '310b014d-e138-4268-b4f2-eea7bc4bebfa', 'td': 'q', 'u': 'idqmao8ec939fa29', 'cv': '1.67.3', 't': 'a', 'av': '1.3.1'}, json={'cmdName': 'getError', 'payload': {'header': {'pri': '1', 'ts': 1715766923.425819, 'tzm': 480, 'ver': '0.0.50'}}, 'payloadType': 'j', 'td': 'q', 'toId': '310b014d-e138-4268-b4f2-eea7bc4bebfa', 'toRes': 'hOdT', 'toType': 'lf3bn4'}, response={'ret': 'ok', 'resp': {'header': {'pri': 1, 'tzm': 120, 'ts': '1715766923079', 'ver': '0.0.1', 'fwVer': '1.76.0', 'hwVer': '0.1.1', 'wkVer': '0.1.54'}, 'body': {'code': 0, 'data': {'code': []}, 'msg': 'ok'}}, 'id': 'LmAp', 'payloadType': 'j'}
2024-05-15 11:55:23.504 DEBUG (MainThread) [deebot_client.message] Could not handle getError message: {'code': []}
No response
Try to get my X2 Omni fully working in Home assistant
Map and Rooms wont work, but rooms get parsed in debug log...so i'm a bit clueless
But found an error message code 20003 'rcp not support' and have no idea to deal with
Deebot X2 Omni
7.0.0
de
eu
2024-05-02 11:43:16.687 WARNING (MainThread) [deebot_client.message] Could not parse getCleanInfo: {'code': 20003, 'msg': 'rcp not support'}
Traceback (most recent call last):
File "/usr/local/lib/python3.12/site-packages/deebot_client/message.py", line 63, in wrapper
if response.state == HandlingState.ANALYSE:
^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'state'
2024-05-02 11:43:16.689 WARNING (MainThread) [deebot_client.message] Could not parse getCleanInfo: {'header': {'pri': 1, 'tzm': 120, 'ts': '1714642996555', 'ver': '0.0.1', 'fwVer': '1.76.0', 'hwVer': '0.1.1', 'wkVer': '0.1.54'}, 'body': {'code': 20003, 'msg': 'rcp not support'}}
2024-05-02 11:43:16.689 WARNING (MainThread) [deebot_client.command] Could not parse getCleanInfo: {'ret': 'ok', 'resp': {'header': {'pri': 1, 'tzm': 120, 'ts': '1714642996555', 'ver': '0.0.1', 'fwVer': '1.76.0', 'hwVer': '0.1.1', 'wkVer': '0.1.54'}, 'body': {'code': 20003, 'msg': 'rcp not support'}}, 'id': 'CE18', 'payloadType': 'j'}
No response
In HA Integration there is an "advanced mode" - setting switch
According to my ecovacs app this is the multimap feature setting for different environments.(and up to 3 maps saved in bot)
This is in my setting ACTIVATED in the app.
In my HA Integration the advanced mode is off and a test with toggling the switch didnt change anything,
not with set to ON nor OFF. (the setting in my app didnt correspond to that toggling)
In debug log there is no error for that action found...
Any hints to point down the problem?
X2 Omni
7.0.0
de
eu
No response
No response
Hi,
thanks for your wonderful work.
I've an Ecovacs X10 OMNI and I've seen that there's no option for "Mopping Mode" (Standard/Deep) in your integration.
I would like to add this option.
I've sniffed the traffic between Ecovacs app and Ecovacs servers and I've found the command sent. See Api example request.
{
"app": {
"id": "ecovacs"
},
"auth": {
"realm": "ecouser.net",
"resource": "XXXXX",
"token": "XXXXX",
"userid": "XXXXX",
"with": "users"
},
"cmdName": "setCustomAreaMode",
"payload": {
"body": {
"data": {
"sweepMode": 1
}
},
"header": {
"pri": 1,
"ts": "1695644868714",
"tzm": 120,
"ver": "0.0.50"
}
},
"payloadType": "j",
"td": "q",
"toId": "REDACTED",
"toRes": "TNLD",
"toType": "1vxt52"
}
No response
Let me know if you need more informations to add this feature.
Thanks!
Does it make sense to start discussions about porting this custom integration to the official HA integration, so everyone can benefit from a better version, as official integration is using sucks, which is not well maintained and does not work properly.
No response
No response
Hello,
As yeedi uses also the ecovacs api for the control it would be great if they could be added to.
I found this and thought about a implementation:
https://github.com/mrbungle64/ecovacs-deebot.js
But as there is already a plugin for hass it would be great if this could be extended.
Thanks.
No response
No response
No response
Map generation fails if a virtual boundary line has been set rather than a box ( seems the API describes a line as a box with one side zero length )
Deebot t8 AIVI
1.4.1
uk
eu
Log Details (ERROR)
This error originated from a custom integration.
Logger: aiohttp.server
Source: custom_components/deebot/camera.py:53
Integration: Deebot 4 Home Assistant (documentation, issues)
First occurred: 09:29:51 (72 occurrences)
Last logged: 09:43:31
Error handling request
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/aiohttp/web_protocol.py", line 435, in _handle_request
resp = await request_handler(request)
File "/usr/local/lib/python3.9/site-packages/aiohttp/web_app.py", line 504, in _handle
resp = await handler(request)
File "/usr/local/lib/python3.9/site-packages/aiohttp/web_middlewares.py", line 117, in impl
return await handler(request)
File "/usr/src/homeassistant/homeassistant/components/http/security_filter.py", line 60, in security_filter_middleware
return await handler(request)
File "/usr/src/homeassistant/homeassistant/components/http/forwarded.py", line 100, in forwarded_middleware
return await handler(request)
File "/usr/src/homeassistant/homeassistant/components/http/request_context.py", line 28, in request_context_middleware
return await handler(request)
File "/usr/src/homeassistant/homeassistant/components/http/auth.py", line 220, in auth_middleware
return await handler(request)
File "/usr/src/homeassistant/homeassistant/components/http/view.py", line 137, in handle
result = await result
File "/usr/src/homeassistant/homeassistant/components/camera/__init__.py", line 741, in get
return await self.handle(request, camera)
File "/usr/src/homeassistant/homeassistant/components/camera/__init__.py", line 759, in handle
image = await _async_get_image(
File "/usr/src/homeassistant/homeassistant/components/camera/__init__.py", line 179, in _async_get_image
if image_bytes := await camera.async_camera_image(
File "/config/custom_components/deebot/camera.py", line 53, in async_camera_image
return base64.decodebytes(self._vacuum_bot.map.get_base64_map(width))
File "/usr/local/lib/python3.9/site-packages/deebot_client/map.py", line 312, in get_base64_map
_draw_subset(subset, draw, image_box)
File "/usr/local/lib/python3.9/site-packages/deebot_client/map.py", line 126, in _draw_subset
draw.dashed_line(points, dash=(3, 2), fill=_COLORS[subset.type], width=1)
File "/usr/local/lib/python3.9/site-packages/deebot_client/map.py", line 490, in dashed_line
start = position / length
ZeroDivisionError: float division by zero
works fine with virtual boundary boxes.
Using via HACS on HASS, all at current versions as of 19th June 2022
Since Map generation works smoothly now i tried to program something in HA with my bot.
Poorly you can only command him to send his position and to return to station.
Cleaning commands are fully ignored...vacuum only, mop and all other variants same negative result
This is far over my skills :/
Deebot X2 Omni
7.2.0
de
eu
2024-05-12 08:37:38.802 DEBUG (MainThread) [deebot_client.authentication] Calling api(1/3): url=https://portal-eu.ecouser.net/api/iot/devmanager.do, params={'mid': 'lf3bn4', 'did': '310b014d-e138-4268-b4f2-eea7bc4bebfa', 'td': 'q', 'u': 'idqmao8ec939fa29', 'cv': '1.67.3', 't': 'a', 'av': '1.3.1'}, json={'cmdName': 'clean', 'payload': {'header': {'pri': '1', 'ts': 1715495858.802571, 'tzm': 480, 'ver': '0.0.50'}, 'body': {'data': {'act': 'start', 'type': 'auto'}}}, 'payloadType': 'j', 'td': 'q', 'toId': '310b014d-e138-4268-b4f2-eea7bc4bebfa', 'toRes': 'hOdT', 'toType': 'lf3bn4'}
2024-05-12 08:37:38.909 DEBUG (MainThread) [deebot_client.mqtt_client.client] Received PUBLISH (d0, q0, r0, m0), 'iot/p2p/clean/HelperMQClientId-awseu-sts-ngiot-mqsjmq-10/ecosys/1234/310b014d-e138-4268-b4f2-eea7bc4bebfa/lf3bn4/hOdT/q/GZz2/j', ... (116 bytes)
2024-05-12 08:37:38.909 DEBUG (MainThread) [deebot_client.mqtt_client] Got message: topic=iot/p2p/clean/HelperMQClientId-awseu-sts-ngiot-mqsjmq-10/ecosys/1234/310b014d-e138-4268-b4f2-eea7bc4bebfa/lf3bn4/hOdT/q/GZz2/j, payload=b'{"header":{"pri":"1","ts":1715495858.802571,"tzm":480,"ver":"0.0.50"},"body":{"data":{"act":"start","type":"auto"}}}'
2024-05-12 08:37:38.910 DEBUG (MainThread) [deebot_client.mqtt_client] Command clean does not support p2p handling (yet)
2024-05-12 08:37:39.333 DEBUG (MainThread) [deebot_client.authentication] Success calling api url=https://portal-eu.ecouser.net/api/iot/devmanager.do, params={'mid': 'lf3bn4', 'did': '310b014d-e138-4268-b4f2-eea7bc4bebfa', 'td': 'q', 'u': 'idqmao8ec939fa29', 'cv': '1.67.3', 't': 'a', 'av': '1.3.1'}, json={'cmdName': 'clean', 'payload': {'header': {'pri': '1', 'ts': 1715495858.802571, 'tzm': 480, 'ver': '0.0.50'}, 'body': {'data': {'act': 'start', 'type': 'auto'}}}, 'payloadType': 'j', 'td': 'q', 'toId': '310b014d-e138-4268-b4f2-eea7bc4bebfa', 'toRes': 'hOdT', 'toType': 'lf3bn4'}, response={'ret': 'ok', 'resp': {'header': {'pri': 1, 'tzm': 120, 'ts': '1715495858673', 'ver': '0.0.1', 'fwVer': '1.76.0', 'hwVer': '0.1.1', 'wkVer': '0.1.54'}, 'body': {'code': 20003, 'msg': 'rcp not support'}}, 'id': 'GZz2', 'payloadType': 'j'}
2024-05-12 08:37:39.334 WARNING (MainThread) [deebot_client.commands.json.common] Command "clean" was not successfully. body={'code': 20003, 'msg': 'rcp not support'}
This happens in automations and directly by the vacuum entity over the integration of Ecovacs
Since Python 3.8, the default asyncio event loop is the ProactorEventLoop. Said loop doesn't support the add_reader method that is required by aiomqtt. Please switch to an event loop that supports the add_reader method such as the built-in SelectorEventLoop:
if sys.platform.lower() == "win32" or os.name.lower() == "nt":
from asyncio import set_event_loop_policy, WindowsSelectorEventLoopPolicy
set_event_loop_policy(WindowsSelectorEventLoopPolicy())
asyncio.run(main())
Deebot X1 Omni
4.1.0
it
eu
# Change to the "Selector" event loop if platform is Windows
if sys.platform.lower() == "win32" or os.name.lower() == "nt":
from asyncio import set_event_loop_policy, WindowsSelectorEventLoopPolicy
set_event_loop_policy(WindowsSelectorEventLoopPolicy())
# Run your async application as usual
asyncio.run(main())
No response
I've some unknown messages in my logs. As i've learned they are missing in commands directory.
I could need an little "template" then i would try to write that down.
I do atm qualified paste and copy, python itself i need to learn a bit first.
Following commands i've found as missing:
Unknown message "onFwBuryPoint-batteryInfo-evt"
Unknown message "onFwBuryPoint-mop-evt"
Unknown message "onFwBuryPoint-alert-evt"
Unknown message "onFwBuryPoint-common-setting"
Unknown message "onFwBuryPoint-omniState-evt"
Unknown message "onFwBuryPoint-task-evt"
Unknown message "onFwBuryPoint-formulate-setting"
Unknown message "onFwBuryPoint-detectChargerSignal-evt"
Unknown message "onFwBuryPoint-bd_basicinfo"
Unknown message "onFwBuryPoint-mop-evt"
Unknown message "onQuickCommand"
Unknown message "onFurnitureInfo_V2"
Unknown message "onAIMap" ---> i belief this message was coming when i locked the map in app
Unknown message "onLastTimeStats"
Unknown message "onEvt"
Unknown message "onCleanDataUpdate_V2"
Unknown message "onStationState" --->This maybe trigger infos from Station like drying, mop washing etc.
Unknown message "onSleep" ---> this could trigger the "sleep" icon on the map (animated "z z z z z")
Deebot X2 Omni
7.2.0
de
eu
2024-05-11 17:54:49.631 DEBUG (MainThread) [deebot_client.mqtt_client.client] Received PUBLISH (d0, q0, r0, m0), 'iot/atr/onFwBuryPoint-batteryInfo-evt/310b014d-e138-4268-b4f2-eea7bc4bebfa/lf3bn4/hOdT/j', ... (535 bytes)
2024-05-11 17:54:49.632 DEBUG (MainThread) [deebot_client.mqtt_client] Got message: topic=iot/atr/onFwBuryPoint-batteryInfo-evt/310b014d-e138-4268-b4f2-eea7bc4bebfa/lf3bn4/hOdT/j, payload=b'{"header":{"pri":1,"tzm":120,"ts":"1715442888893","ver":"0.0.1","fwVer":"1.76.0","hwVer":"0.1.1","wkVer":"0.1.54"},"body":{"gid":"G1715423186951","index":"0000000673","info":null,"infoStr":"{\\"type\\":\\"BatteryInfo\\",\\"ischarging\\":1,\\"left_wheel_current\\":5,\\"right_wheel_current\\":0,\\"left_mop_current\\":0,\\"right_mop_current\\":0,\\"right_side_current\\":0,\\"roll_current\\":0,\\"battery_current\\":1275,\\"battery_voltage\\":16380,\\"battery_percent\\":94,\\"incarpet\\":0,\\"fan_speed\\":0,\\"battery_temperature\\":\\u0017}","ts":"1715442888873"}}'
2024-05-11 17:54:49.632 DEBUG (MainThread) [deebot_client.event_bus] Event is the same! Skipping (AvailabilityEvent(available=True))
2024-05-11 17:54:49.632 DEBUG (MainThread) [deebot_client.device] Try to handle message onFwBuryPoint-batteryInfo-evt: b'{"header":{"pri":1,"tzm":120,"ts":"1715442888893","ver":"0.0.1","fwVer":"1.76.0","hwVer":"0.1.1","wkVer":"0.1.54"},"body":{"gid":"G1715423186951","index":"0000000673","info":null,"infoStr":"{\\"type\\":\\"BatteryInfo\\",\\"ischarging\\":1,\\"left_wheel_current\\":5,\\"right_wheel_current\\":0,\\"left_mop_current\\":0,\\"right_mop_current\\":0,\\"right_side_current\\":0,\\"roll_current\\":0,\\"battery_current\\":1275,\\"battery_voltage\\":16380,\\"battery_percent\\":94,\\"incarpet\\":0,\\"fan_speed\\":0,\\"battery_temperature\\":\\u0017}","ts":"1715442888873"}}'
2024-05-11 17:54:49.633 DEBUG (MainThread) [deebot_client.messages] Unknown message "onFwBuryPoint-batteryInfo-evt"
These burypoint messages seems to be an feedback from bot with interesting internal informations.
example code in the readme does not work, cant import the required packages.
na
1.6.1
se
eu
python /code/main.py
Traceback (most recent call last):
File "/code/main.py", line 12, in <module>
from deebot_client.mqtt_client import MqttClient, MqttConfiguration
ImportError: cannot import name 'MqttConfiguration' from 'deebot_client.mqtt_client' (/usr/local/lib/python3.10/site-packages/deebot_client/mqtt_client.py)
root@99dc47ae7630:/# pip list
Package Version
------------------ -------
aiohttp 3.8.4
aiosignal 1.3.1
async-timeout 4.0.2
attrs 23.1.0
cachetools 5.3.1
charset-normalizer 3.1.0
deebot-client 1.6.1
frozenlist 1.3.3
gmqtt 0.6.12
idna 3.4
multidict 6.0.4
numpy 1.24.3
Pillow 9.5.0
pip 23.0.1
setuptools 65.5.1
wheel 0.40.0
yarl 1.9.2
[notice] A new release of pip is available: 23.0.1 -> 23.1.2
[notice] To update, run: pip install --upgrade pip
root@99dc47ae7630:/# python --version
Python 3.10.11
No response
None of the sensors work on the X1 Omni, and the log files indicate that the data can't be parsed when received via MQTT.
Deebot Omni X1 Turbo
1.6.0
UK
EU
2022-10-26 19:45:13.468 DEBUG (MainThread) [deebot_client.mqtt_client] Got message: topic=iot/atr/onFwBuryPoint-bd_sysinfo/f18e00c7-6f7a-4934-9750-c11be74177a8/1vxt52/mBBg/j; payload={"header":{"pri":1,"tzm":60,"ts":"1666809916291","ver":"0.0.1","fwVer":"1.14.7","hwVer":"0.1.1","wkVer":"0.1.54"},"body":[{"signal":-39,"uptime":" 18:31:16 up 26 days, 23:00, 0 users, load average: 2.29, 2.26, 2.26, POWER_RESET","meminfo":"625348,385052","pos":"-400,-1699","isvalid":1,"mapid":"1636595110","ts":"1666809916281"},{"signal":-39,"uptime":" 18:32:16 up 26 days, 23:01, 0 users, load average: 2.07, 2.21, 2.24, POWER_RESET","meminfo":"626248,384152","pos":"-400,-1699","isvalid":1,"mapid":"1636595110","ts":"1666809916281"},{"signal":-39,"uptime":" 18:33:16 up 26 days, 23:02, 0 users, load average: 2.15, 2.19, 2.23, POWER_RESET","meminfo":"625396,385004","pos":"-400,-1699","isvalid":1,"mapid":"1636595110","ts":"1666809916281"},{"signal":-39,"uptime":" 18:34:16 up 26 days, 23:03, 0 users, load average: 2.40, 2.23, 2.24, POWER_RESET","meminfo":"625552,384848","pos":"-400,-1699","isvalid":1,"mapid":"1636595110","ts":"1666809916281"},{"signal":-39,"uptime":" 18:35:16 up 26 days, 23:04, 0 users, load average: 2.25, 2.23, 2.25, POWER_RESET","meminfo":"625620,384780","pos":"-400,-1699","isvalid":1,"mapid":"1636595110","ts":"1666809916281"},{"signal":-39,"uptime":" 18:36:16 up 26 days, 23:05, 0 users, load average: 2.05, 2.16, 2.22, POWER_RESET","meminfo":"625540,384860","pos":"-400,-1699","isvalid":1,"mapid":"1636595110","ts":"1666809916281"},{"signal":-39,"uptime":" 18:37:16 up 26 days, 23:06, 0 users, load average: 2.10, 2.16, 2.21, POWER_RESET","meminfo":"625532,384868","pos":"-400,-1699","isvalid":1,"mapid":"1636595110","ts":"1666809916281"},{"signal":-39,"uptime":" 18:38:16 up 26 days, 23:07, 0 users, load average: 2.18, 2.17, 2.21, POWER_RESET","meminfo":"625544,384856","pos":"-400,-1699","isvalid":1,"mapid":"1636595110","ts":"1666809916281"},{"signal":-39,"uptime":" 18:39:16 up 26 days, 23:08, 0 users, load average: 2.18, 2.18, 2.22, POWER_RESET","meminfo":"625496,384904","pos":"-400,-1699","isvalid":1,"mapid":"1636595110","ts":"1666809916281"},{"signal":-39,"uptime":" 18:40:16 up 26 days, 23:09, 0 users, load average: 2.30, 2.22, 2.23, POWER_RESET","meminfo":"625428,384972","pos":"-400,-1699","isvalid":1,"mapid":"1636595110","ts":"1666809916281"},{"signal":-39,"uptime":" 18:41:16 up 26 days, 23:10, 0 users, load average: 2.84, 2.38, 2.28, POWER_RESET","meminfo":"625192,385208","pos":"-400,-1699","isvalid":1,"mapid":"1636595110","ts":"1666809916281"},{"signal":-39,"uptime":" 18:42:16 up 26 days, 23:11, 0 users, load average: 2.47, 2.37, 2.28, POWER_RESET","meminfo":"625748,384652","pos":"-400,-1699","isvalid":1,"mapid":"1636595110","ts":"1666809916281"},{"signal":-39,"uptime":" 18:43:16 up 26 days, 23:12, 0 users, load average: 2.87, 2.50, 2.33, POWER_RESET","meminfo":"625576,384824","pos":"-400,-1699","isvalid":1,"mapid":"1636595110","ts":"1666809916281"},{"signal":-39,"uptime":" 18:44:16 up 26 days, 23:13, 0 users, load average: 2.66, 2.52, 2.35, POWER_RESET","meminfo":"625476,384924","pos":"-400,-1699","isvalid":1,"mapid":"1636595110","ts":"1666809916281"},{"signal":-39,"uptime":" 18:45:16 up 26 days, 23:14, 0 users, load average: 2.68, 2.53, 2.36, POWER_RESET","meminfo":"625352,385048","pos":"-400,-1699","isvalid":1,"mapid":"1636595110","ts":"1666809916281"}]};
2022-10-26 19:45:13.468 DEBUG (MainThread) [deebot_client.vacuum_bot] Handle message onFwBuryPoint-bd_sysinfo: {'header': {'pri': 1, 'tzm': 60, 'ts': '1666809916291', 'ver': '0.0.1', 'fwVer': '1.14.7', 'hwVer': '0.1.1', 'wkVer': '0.1.54'}, 'body': [{'signal': -39, 'uptime': ' 18:31:16 up 26 days, 23:00, 0 users, load average: 2.29, 2.26, 2.26, POWER_RESET', 'meminfo': '625348,385052', 'pos': '-400,-1699', 'isvalid': 1, 'mapid': '1636595110', 'ts': '1666809916281'}, {'signal': -39, 'uptime': ' 18:32:16 up 26 days, 23:01, 0 users, load average: 2.07, 2.21, 2.24, POWER_RESET', 'meminfo': '626248,384152', 'pos': '-400,-1699', 'isvalid': 1, 'mapid': '1636595110', 'ts': '1666809916281'}, {'signal': -39, 'uptime': ' 18:33:16 up 26 days, 23:02, 0 users, load average: 2.15, 2.19, 2.23, POWER_RESET', 'meminfo': '625396,385004', 'pos': '-400,-1699', 'isvalid': 1, 'mapid': '1636595110', 'ts': '1666809916281'}, {'signal': -39, 'uptime': ' 18:34:16 up 26 days, 23:03, 0 users, load average: 2.40, 2.23, 2.24, POWER_RESET', 'meminfo': '625552,384848', 'pos': '-400,-1699', 'isvalid': 1, 'mapid': '1636595110', 'ts': '1666809916281'}, {'signal': -39, 'uptime': ' 18:35:16 up 26 days, 23:04, 0 users, load average: 2.25, 2.23, 2.25, POWER_RESET', 'meminfo': '625620,384780', 'pos': '-400,-1699', 'isvalid': 1, 'mapid': '1636595110', 'ts': '1666809916281'}, {'signal': -39, 'uptime': ' 18:36:16 up 26 days, 23:05, 0 users, load average: 2.05, 2.16, 2.22, POWER_RESET', 'meminfo': '625540,384860', 'pos': '-400,-1699', 'isvalid': 1, 'mapid': '1636595110', 'ts': '1666809916281'}, {'signal': -39, 'uptime': ' 18:37:16 up 26 days, 23:06, 0 users, load average: 2.10, 2.16, 2.21, POWER_RESET', 'meminfo': '625532,384868', 'pos': '-400,-1699', 'isvalid': 1, 'mapid': '1636595110', 'ts': '1666809916281'}, {'signal': -39, 'uptime': ' 18:38:16 up 26 days, 23:07, 0 users, load average: 2.18, 2.17, 2.21, POWER_RESET', 'meminfo': '625544,384856', 'pos': '-400,-1699', 'isvalid': 1, 'mapid': '1636595110', 'ts': '1666809916281'}, {'signal': -39, 'uptime': ' 18:39:16 up 26 days, 23:08, 0 users, load average: 2.18, 2.18, 2.22, POWER_RESET', 'meminfo': '625496,384904', 'pos': '-400,-1699', 'isvalid': 1, 'mapid': '1636595110', 'ts': '1666809916281'}, {'signal': -39, 'uptime': ' 18:40:16 up 26 days, 23:09, 0 users, load average: 2.30, 2.22, 2.23, POWER_RESET', 'meminfo': '625428,384972', 'pos': '-400,-1699', 'isvalid': 1, 'mapid': '1636595110', 'ts': '1666809916281'}, {'signal': -39, 'uptime': ' 18:41:16 up 26 days, 23:10, 0 users, load average: 2.84, 2.38, 2.28, POWER_RESET', 'meminfo': '625192,385208', 'pos': '-400,-1699', 'isvalid': 1, 'mapid': '1636595110', 'ts': '1666809916281'}, {'signal': -39, 'uptime': ' 18:42:16 up 26 days, 23:11, 0 users, load average: 2.47, 2.37, 2.28, POWER_RESET', 'meminfo': '625748,384652', 'pos': '-400,-1699', 'isvalid': 1, 'mapid': '1636595110', 'ts': '1666809916281'}, {'signal': -39, 'uptime': ' 18:43:16 up 26 days, 23:12, 0 users, load average: 2.87, 2.50, 2.33, POWER_RESET', 'meminfo': '625576,384824', 'pos': '-400,-1699', 'isvalid': 1, 'mapid': '1636595110', 'ts': '1666809916281'}, {'signal': -39, 'uptime': ' 18:44:16 up 26 days, 23:13, 0 users, load average: 2.66, 2.52, 2.35, POWER_RESET', 'meminfo': '625476,384924', 'pos': '-400,-1699', 'isvalid': 1, 'mapid': '1636595110', 'ts': '1666809916281'}, {'signal': -39, 'uptime': ' 18:45:16 up 26 days, 23:14, 0 users, load average: 2.68, 2.53, 2.36, POWER_RESET', 'meminfo': '625352,385048', 'pos': '-400,-1699', 'isvalid': 1, 'mapid': '1636595110', 'ts': '1666809916281'}]}
2022-10-26 19:45:13.470 DEBUG (MainThread) [deebot_client.vacuum_bot] Falling back to old handling way for onFwBuryPoint-bd_sysinfo
2022-10-26 19:45:13.470 DEBUG (MainThread) [deebot_client.vacuum_bot] Unknown message "getFwBuryPoint-bd_sysinfo" with {'header': {'pri': 1, 'tzm': 60, 'ts': '1666809916291', 'ver': '0.0.1', 'fwVer': '1.14.7', 'hwVer': '0.1.1', 'wkVer': '0.1.54'}, 'body': [{'signal': -39, 'uptime': ' 18:31:16 up 26 days, 23:00, 0 users, load average: 2.29, 2.26, 2.26, POWER_RESET', 'meminfo': '625348,385052', 'pos': '-400,-1699', 'isvalid': 1, 'mapid': '1636595110', 'ts': '1666809916281'}, {'signal': -39, 'uptime': ' 18:32:16 up 26 days, 23:01, 0 users, load average: 2.07, 2.21, 2.24, POWER_RESET', 'meminfo': '626248,384152', 'pos': '-400,-1699', 'isvalid': 1, 'mapid': '1636595110', 'ts': '1666809916281'}, {'signal': -39, 'uptime': ' 18:33:16 up 26 days, 23:02, 0 users, load average: 2.15, 2.19, 2.23, POWER_RESET', 'meminfo': '625396,385004', 'pos': '-400,-1699', 'isvalid': 1, 'mapid': '1636595110', 'ts': '1666809916281'}, {'signal': -39, 'uptime': ' 18:34:16 up 26 days, 23:03, 0 users, load average: 2.40, 2.23, 2.24, POWER_RESET', 'meminfo': '625552,384848', 'pos': '-400,-1699', 'isvalid': 1, 'mapid': '1636595110', 'ts': '1666809916281'}, {'signal': -39, 'uptime': ' 18:35:16 up 26 days, 23:04, 0 users, load average: 2.25, 2.23, 2.25, POWER_RESET', 'meminfo': '625620,384780', 'pos': '-400,-1699', 'isvalid': 1, 'mapid': '1636595110', 'ts': '1666809916281'}, {'signal': -39, 'uptime': ' 18:36:16 up 26 days, 23:05, 0 users, load average: 2.05, 2.16, 2.22, POWER_RESET', 'meminfo': '625540,384860', 'pos': '-400,-1699', 'isvalid': 1, 'mapid': '1636595110', 'ts': '1666809916281'}, {'signal': -39, 'uptime': ' 18:37:16 up 26 days, 23:06, 0 users, load average: 2.10, 2.16, 2.21, POWER_RESET', 'meminfo': '625532,384868', 'pos': '-400,-1699', 'isvalid': 1, 'mapid': '1636595110', 'ts': '1666809916281'}, {'signal': -39, 'uptime': ' 18:38:16 up 26 days, 23:07, 0 users, load average: 2.18, 2.17, 2.21, POWER_RESET', 'meminfo': '625544,384856', 'pos': '-400,-1699', 'isvalid': 1, 'mapid': '1636595110', 'ts': '1666809916281'}, {'signal': -39, 'uptime': ' 18:39:16 up 26 days, 23:08, 0 users, load average: 2.18, 2.18, 2.22, POWER_RESET', 'meminfo': '625496,384904', 'pos': '-400,-1699', 'isvalid': 1, 'mapid': '1636595110', 'ts': '1666809916281'}, {'signal': -39, 'uptime': ' 18:40:16 up 26 days, 23:09, 0 users, load average: 2.30, 2.22, 2.23, POWER_RESET', 'meminfo': '625428,384972', 'pos': '-400,-1699', 'isvalid': 1, 'mapid': '1636595110', 'ts': '1666809916281'}, {'signal': -39, 'uptime': ' 18:41:16 up 26 days, 23:10, 0 users, load average: 2.84, 2.38, 2.28, POWER_RESET', 'meminfo': '625192,385208', 'pos': '-400,-1699', 'isvalid': 1, 'mapid': '1636595110', 'ts': '1666809916281'}, {'signal': -39, 'uptime': ' 18:42:16 up 26 days, 23:11, 0 users, load average: 2.47, 2.37, 2.28, POWER_RESET', 'meminfo': '625748,384652', 'pos': '-400,-1699', 'isvalid': 1, 'mapid': '1636595110', 'ts': '1666809916281'}, {'signal': -39, 'uptime': ' 18:43:16 up 26 days, 23:12, 0 users, load average: 2.87, 2.50, 2.33, POWER_RESET', 'meminfo': '625576,384824', 'pos': '-400,-1699', 'isvalid': 1, 'mapid': '1636595110', 'ts': '1666809916281'}, {'signal': -39, 'uptime': ' 18:44:16 up 26 days, 23:13, 0 users, load average: 2.66, 2.52, 2.35, POWER_RESET', 'meminfo': '625476,384924', 'pos': '-400,-1699', 'isvalid': 1, 'mapid': '1636595110', 'ts': '1666809916281'}, {'signal': -39, 'uptime': ' 18:45:16 up 26 days, 23:14, 0 users, load average: 2.68, 2.53, 2.36, POWER_RESET', 'meminfo': '625352,385048', 'pos': '-400,-1699', 'isvalid': 1, 'mapid': '1636595110', 'ts': '1666809916281'}]}
{
"code": 0,
"todo": "result",
"ret": "ok",
"devices": [
{
"did": "[REMOVED]",
"name": "E03P15612D09HN7C0332",
"class": "1vxt52",
"resource": "mBBg",
"nick": "Buttercup",
"company": "eco-ng",
"bindTs": 1657780813727,
"service": {
"jmq": "jmq-ngiot-eu.dc.ww.ecouser.net",
"mqs": "api-ngiot.dc-as.ww.ecouser.net"
},
"homeId": "62c5e5d22c176276a62f9002",
"homeSort": 1,
"deviceName": "DEEBOT X1 OMNI",
"icon": "https://portal-ww.ecouser.net/api/pim/file/get/6225bd1c2af2127804f540e5",
"ota": true,
"UILogicId": "t10_ww_n_omni",
"materialNo": "110-2102-0300",
"pid": "6185e29610683da4d6a7a9cd",
"product_category": "DEEBOT",
"model": "EINSTEIN_INT",
"updateInfo": {
"needUpdate": false,
"changeLog": ""
},
"status": 1,
"offmap": true
}
]
}
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.