Integration of Ecovacs Deebot OZMO 950 robot vacuum cleaner

Introduction

According to experts, Ozmo 950 is currently one of the best cleaning robots on the market and I believe this might be true as after 3 months of use I'm constantly satisfied with it. The device is quite new so unfortunately there are no many integration options. But I've finally sorted it out, in the best possible style (using MQTT both ways). This little how-to below is somehow reverse order: first you see the final result and screenshots from the app, then goes Loxone Config diagram and finally all "internals". It was not the easiest integration I've made but thanks to this description it will be easier for you now. Have fun!

Presentation

This video shows how you control Ozmo 950 from Loxone App:



There are 6 fields in the Loxone App. Three push buttons for basic operations (start, pause, abort cleaning), current robot status, cleaning history (in form of a Tracker) and info on consumables lifespan:



Tracker shows last cleanings and how long did they take:



Status field is instantly updated with one of 14 combined states robot can be in.



When finished the job Ozmo enters "Returning" state, then "Charging" after he docks. When battery hits 100% it changes status to "Standby".



Diagram

Here comes the logic diagram I made, I hope it's clean to understand. Correct state/status detection based on three different virtual inputs is most challenging here.
Robot starts to clean 20 minutes after leaving home pulse but only on selected cleaning days (Wen, Thu, Sat). Cleaning my apartment takes 35-40 minutes.
If I come home before cleaning is finished, Ozmo aborts its mission and returns to docking station.
If I come home after cleaning (usually), Loxone app reminds to clean the dust bin. It also notifies when filter or brushes require replacement.



This is the same diagram with visible configuration of not obvious blocks. Image is large so you might need to download or open it in new window.
The most complex element here is the status block detecting robot combined state.
All communication with robot is done over MQTT, using ioBroker run in Docker on LoxBerry and of course with MQTT Gateway plugin.



Please note

Reset CD means "Reset Cleaning Done". I made Deebot run only once a day. But you might need it run more than once (for instance you want to clean it again one day or when you return home during its job and it will be aborted - you might want to do it all over). So I made this memory flag and connected to Retractive Switch in Settings category so that manual resetting Cleaning Done state was possible.



Communication

I have not used ioBroker before but was forced to use it this time as probably no other tool has support for Ozmo 950 yet.
I must say ioBroker is a great tool especially for integrations.
It's based on modules/plugins called "adapters", that support given protocol or device. Amazing how many devices are already supported.
In this integration I've used two adapters: Ecovacs Deebot and MQTT-client:



Each adapter creates at least one "instance" that you usually need to configure. Instance of Ecovacs adapter needs login and password to Ecovacs cloud (same as Ecovacs Home mobile app).



MQTT-client instance requires MQTT server IP, login and password:



After completing the configs you move to "objects" and all device states already there. You may publish selected states to MQTT broker or control states subscribing to MQTT topics.



Configuration of stats that is to be published to MQTT (filter lifespan here):



Configuration of state that is to be managed (run) by MQTT:



When states are successfully published to MQTT you need to do some string conversion in MQTT Gateway plugin. I marked relevant conversions:



Then you just add iobroker/# to MQTT Gateway subscriptions and you're done:

A summary of all MQTT topics I've used

MQTT topics used as virtual inputs:

  • iobroker/ecovacs-deebot/0/info/connection

  • iobroker/ecovacs-deebot/0/info/deviceStatus

  • iobroker/ecovacs-deebot/0/info/cleanstatus

  • iobroker/ecovacs-deebot/0/info/chargestatus

  • iobroker/ecovacs-deebot/0/info/battery

  • iobroker/ecovacs-deebot/0/consumable/filter

  • iobroker/ecovacs-deebot/0/consumable/main_brush

  • iobroker/ecovacs-deebot/0/consumable/side_brush

Not exactly required but might be used:

  • iobroker/ecovacs-deebot/0/history/timestampOfLastStartCharging

  • iobroker/ecovacs-deebot/0/history/timestampOfLastStartCleaning

MQTT topics used as virtual outputs:

  • loxone/ecovacs-deebot/0/control/clean

  • loxone/ecovacs-deebot/0/control/pause

  • loxone/ecovacs-deebot/0/control/charge

Not exactly required but might be used:

  • loxone/ecovacs-deebot/0/control/resume

  • loxone/ecovacs-deebot/0/control/stop



Supplement

You may also integrate area / room cleaning to Loxone. You just need to activate MQTT subscription for following topics marked with green here:

Number of spots / areas is defined in adapter configuration: