Neato XV - adding ESPHome control to remotely activate older Neato robotic vacuum

Tags: #<Tag:0x00007f73991edb38> #<Tag:0x00007f73991ed818> #<Tag:0x00007f73991ed688>

Hi all

I’m trying to figure out if I can use an esp8266 or esp32 to connect to my neato xv signature. This is one of the older models which is pre-wifi, so it would be great to be able to trigger it using esphome and home assistant.

The Neato has a usb port, which you can talk to it as a serial port, and (using minicom on linux or screen on macos and connecting to the right com port) issue commands such as “clean” and you can poll it for various bits of information about its sensors. There’s even a small cubby at the back of the robot which would nicely fit a D1 mini!

I’d power it using a buck converter from the main power lines in the robot (as the USB port has to be disconnected once you’ve issued the command as it’s expecting it to be tethered to a computer!) but I can’t figure out how I could issue such commands to it via the ESP, even with the ESP externally powered.

Would UART work? It seems to contain the same parameters (baud of 115200, parity bits, stop bits and data bits) but when I’ve connected it up and tried to issue a UART command using the uart.write action, nothing happens.

I’m probably miles off here and trying to combine protocols which aren’t at all similar, so I wondered if anyone else had any ideas?

Thanks in advance!

1 Like

Yes the uart works with serial data.

Are you me? I am quite literally where you are with the very same objective, rigging up an ESP8266 to an older pre-wifi Neato XV-11. My unit’s, LCD has failed but everything else remains perfectly serviceable.

The difference in my plan is that I’m looking to cut out the USB middleman and directly attach the module to the XV’s PCB. The neato’s electronics operate at 3.3v and while I was planning to tear into mine tomorrow to confirm, what I’ve found so far suggests most of the XV series have unpopulated serial ports on the control board. This would eliminate any buck/boost converters and make it a matter of tapping into the serial port.

My plan was initially to pick up one of the two other functional Neato XV web socket/MQTT implementations and massage them to use the current arduino libraries and make them more robust (ex. Add an RTC and support detached programmable scheduling), but then it clicked that ESPHome should be Able to work.

Would you mind sharing your YAML? I’d love to compare notes and team up.

Perhaps another approach would be to use micopython and run this https://github.com/jeroenterheerdt/neato-serial

esphome has uart.write but not uart.read, so you’ll get no feedback without writing a whole bunch of lambda c++ stuff, whereas jeroen seems to have done a lot of work for you :slight_smile:

That certainly does complicate things. I could always presume action is being taken, but I’d never be able to log charge levels or current status reliably. In all of my years using ESP8266’s, I’ve never actually had a use case for micropython. I’ll dig into it, this seems like it could be the option.

I’m in the process of tearing mine open to verify what I’ll be able to do, but I’m fighting Toddler Naptime Protest so it may end up spending another week on the back burner.

I saw the neato-serial project, but:

  1. I had no idea micropython was a thing or that this would run on an ESP; and

  2. I’d just be creating another problem by then needing to integrate this with Home Assistant.

Thanks for the push in that direction though Nick - I’d kinda assumes that uart.read was a thing without it actually saying that in the docs, so thats a useful thing to know as without the read function half the utility is gone as @Sanfam says! I will have to investigate this further!

I’m so glad I wasn’t the only one looking into this and our timing is uncanny!

I was only trying to avoid going too deep inside the XV out of a combination of fear and laziness! I Think your suggestion is a great one - I fear that mine may be one of the later models where they stopped putting the serial headers on, though if I remember correctly the XV-11 is a slightly earlier model, and the signature is the latest one before they moved to the botvacs, so you might have more of a chance than me! I shall have to work up the courage to follow you and dive inside though I think!

I’d rather avoid MQTT I must admit as I have avoided it for everything else. Not out of fear of it but more because I just don’t like it haha.

Good luck with the Toddler Naptime Protest… I’ll have to take a look into neato serial and micropython and see where I can get if you don’t beat me to it :slight_smile:

The software has mqtt built in for heaven’s sake.

Yeah - I don’t use MQTT and have avoided it and actually moved devices off of it in the past - I guess I was looking for something as simple as the ESPhome API integration.

This really does look like a complete solution though which just needs to be adjusted to work on the ESP using micropython instead of the rpi, thanks agin for sharing it and mentioning micropython. I wish I was better with code, but only one way to learn I suppose! :slight_smile:

Some people just want everything handed to them on a plate!

Anyway, you could get a pi zero and use the software out of the box.

Don’t quite understand why you think that - I was saying what I was looking for not saying I wasn’t willing to learn or to figure it out? I did also say thanks for your suggestions. Just find that a bit of an odd reply!

I could indeed. I could also just buy a botvac. Instead I wanted to deploy an ESP, and thanks to your links, I’ll see what I can figure out. I thought it useful to post that on here and share the idea!

I had the same issue with an old robot vac, my solution was to install an IR and a limit switch to the base to a D1 mini. That way I could know if it’s at the base or not and I would be able to start it using HA.

The limit switches I bought are these:

The IR TX is this:

I had to use an IR RX to use my remote and learn the IR codes.

I got the idea from this video, I added the limit switch to know if the vacuum in on the base or not. When the vacuum is docked it presses on the switch.