Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. General Discussion
  3. Hacking a Neato Robotics BotVac Connected

Hacking a Neato Robotics BotVac Connected

Scheduled Pinned Locked Moved General Discussion
70 Posts 28 Posters 78.2k Views 24 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • Daniel ErikssonD Offline
    Daniel ErikssonD Offline
    Daniel Eriksson
    wrote on last edited by
    #34

    Already sniffed the Web Socket traffic - was the first thing I did. No sensible easy output - needs more analysing and so. Need to start on the end with reversing the control-part of the app to see what it does.

    1 Reply Last reply
    0
    • enloE Offline
      enloE Offline
      enlo
      wrote on last edited by
      #35

      This is the code I found in the app. there is also a selfsigned certificate, which probably matches the robot.
      So the reason why you can't make out anything useful in the traffic: It's SSL encrypted.

                  HttpsURLConnection httpsURLConnection3 = (HttpsURLConnection) new URL(str2).openConnection();
                  try {
                      if ("neatoProduction".contains("vorwerk")) {
                          httpsURLConnection3.setSSLSocketFactory(C0751h.m5821a(0));
                      }
                      httpsURLConnection3.setConnectTimeout(60000);
                      httpsURLConnection3.setReadTimeout(60000);
                      if (str.equals("GET") || str.equals("DELETE")) {
                          httpsURLConnection3.setDoOutput(false);
                      } else {
                          httpsURLConnection3.setDoOutput(true);
                      }
                      httpsURLConnection3.setRequestMethod(str);
                      String a = C0742a.m5803a(NeatoApplication.m5360a(), "ACCESS_TOKEN");
                      if (a != null) {
                          httpsURLConnection3.setRequestProperty("Authorization", "Token token=" + a);
                      }
                      httpsURLConnection3.setRequestProperty("Accept", "application/vnd.neato.beehive.v1+json");
                      httpsURLConnection3.setRequestProperty("Content-type", "application/json");
                      httpsURLConnection3.setRequestProperty("X-Agent", C0765b.m5864f());```
      Daniel ErikssonD 1 Reply Last reply
      0
      • enloE enlo

        This is the code I found in the app. there is also a selfsigned certificate, which probably matches the robot.
        So the reason why you can't make out anything useful in the traffic: It's SSL encrypted.

                    HttpsURLConnection httpsURLConnection3 = (HttpsURLConnection) new URL(str2).openConnection();
                    try {
                        if ("neatoProduction".contains("vorwerk")) {
                            httpsURLConnection3.setSSLSocketFactory(C0751h.m5821a(0));
                        }
                        httpsURLConnection3.setConnectTimeout(60000);
                        httpsURLConnection3.setReadTimeout(60000);
                        if (str.equals("GET") || str.equals("DELETE")) {
                            httpsURLConnection3.setDoOutput(false);
                        } else {
                            httpsURLConnection3.setDoOutput(true);
                        }
                        httpsURLConnection3.setRequestMethod(str);
                        String a = C0742a.m5803a(NeatoApplication.m5360a(), "ACCESS_TOKEN");
                        if (a != null) {
                            httpsURLConnection3.setRequestProperty("Authorization", "Token token=" + a);
                        }
                        httpsURLConnection3.setRequestProperty("Accept", "application/vnd.neato.beehive.v1+json");
                        httpsURLConnection3.setRequestProperty("Content-type", "application/json");
                        httpsURLConnection3.setRequestProperty("X-Agent", C0765b.m5864f());```
        Daniel ErikssonD Offline
        Daniel ErikssonD Offline
        Daniel Eriksson
        wrote on last edited by
        #36

        @enlo That there isn't the problem - if you read my above post the problem is generating the HMAC correctly. I have already proxied the traffic from the app - since they don't used pinned certifications

        1 Reply Last reply
        0
        • kangguruK Offline
          kangguruK Offline
          kangguru
          wrote on last edited by
          #37

          There's good news guys. I finally figured out how the HMAC signature is calculated and now i'm able to control the neato without the mobile application, which offers all kinds of new integration options.

          What can be found in com/neatorobotics/android/activities/robot/C0645j.java is just half of the truth and i was looking at this part for way to long, i'm not sure where this part is used. maybe this would be the part where one can communicate with the neato without making use of the cloudservice. who knows ;)

          The actual fun starts in com/neatorobotics/android/p040c/p042b/C0898b.java the code reveals that there are 3 ingredients making up the HMAC signature

          • the robot's serial number
          • the current date (as also found in the Date header)
          • the http body

          Together with the robot's secret key we're now able to properly sign the requests.

          I've packaged this in a small ruby library https://github.com/kangguru/botvac which is
          quite basic and just covers just a little more than i needed for my usecase
          but i'm happy to extend this over time.

          Especially the part to obtain the secret key for the robot just be done via
          trafic capturing, which is not the most convinent thing i can think of :)

          I hope this already helps some people to build new things around their robot. I've mixed the
          stuff with ifttt.com and now can plan the cleaning schedule via a google calendar, which
          makes it really convinent to skip single days in a given schedule, which ist kinda painful to
          solve with the mobile app.

          happy hacking

          UbiquitousU d96mbeD 2 Replies Last reply
          6
          • B Offline
            B Offline
            Brutus
            wrote on last edited by
            #38

            Thats good news Kangguru. Nice job.

            So maybe a noob question but How can I use this in my domotica program Domoticz running on Windows.
            I can use LUA, Curl, Batch as far is a know.

            Thnx for helping.

            1 Reply Last reply
            1
            • kangguruK kangguru

              There's good news guys. I finally figured out how the HMAC signature is calculated and now i'm able to control the neato without the mobile application, which offers all kinds of new integration options.

              What can be found in com/neatorobotics/android/activities/robot/C0645j.java is just half of the truth and i was looking at this part for way to long, i'm not sure where this part is used. maybe this would be the part where one can communicate with the neato without making use of the cloudservice. who knows ;)

              The actual fun starts in com/neatorobotics/android/p040c/p042b/C0898b.java the code reveals that there are 3 ingredients making up the HMAC signature

              • the robot's serial number
              • the current date (as also found in the Date header)
              • the http body

              Together with the robot's secret key we're now able to properly sign the requests.

              I've packaged this in a small ruby library https://github.com/kangguru/botvac which is
              quite basic and just covers just a little more than i needed for my usecase
              but i'm happy to extend this over time.

              Especially the part to obtain the secret key for the robot just be done via
              trafic capturing, which is not the most convinent thing i can think of :)

              I hope this already helps some people to build new things around their robot. I've mixed the
              stuff with ifttt.com and now can plan the cleaning schedule via a google calendar, which
              makes it really convinent to skip single days in a given schedule, which ist kinda painful to
              solve with the mobile app.

              happy hacking

              UbiquitousU Offline
              UbiquitousU Offline
              Ubiquitous
              wrote on last edited by
              #39

              @kangguru

              I also figured it out some time ago. You get the robot secret key and serial number when you log in to beehive.neatocloud.com and request https://beehive.neatocloud.com/dashboard
              I've written a powershell module where I exposed the entire api (as implemented in the android and iphone app), complete with login. I've yet to upload it to github but I can send it to you if you're unsure about the beehive part.

              B 1 Reply Last reply
              3
              • UbiquitousU Offline
                UbiquitousU Offline
                Ubiquitous
                wrote on last edited by
                #40

                As for replacing the cloud server, I don't think it's possible without rooting the robot. The first thing it does when it's connected to the internet is to start an HTTPS Comet session (long polling). The robot will kill the connection immediately if you try to MiTM it with a selfsigned certificate and there is no way to install new certificates on the robot. If anyone has opened the robot I'd be interested in pictures of the motherboard, especially of any pads labeled JTAG.

                RawLiquidR 1 Reply Last reply
                0
                • UbiquitousU Ubiquitous

                  @kangguru

                  I also figured it out some time ago. You get the robot secret key and serial number when you log in to beehive.neatocloud.com and request https://beehive.neatocloud.com/dashboard
                  I've written a powershell module where I exposed the entire api (as implemented in the android and iphone app), complete with login. I've yet to upload it to github but I can send it to you if you're unsure about the beehive part.

                  B Offline
                  B Offline
                  Brutus
                  wrote on last edited by Brutus
                  #41

                  @Ubiquitous

                  Also nice job! Hope to see a link soon to github so we can experiment with this to.

                  Thanks for the work.

                  1 Reply Last reply
                  0
                  • kangguruK Offline
                    kangguruK Offline
                    kangguru
                    wrote on last edited by
                    #42

                    @Ubiquitous yea, i just was too lazy about the login stuff :) but i added the stuff over the weekend, to make it more "end"-user friendly.

                    1 Reply Last reply
                    0
                    • kangguruK kangguru

                      There's good news guys. I finally figured out how the HMAC signature is calculated and now i'm able to control the neato without the mobile application, which offers all kinds of new integration options.

                      What can be found in com/neatorobotics/android/activities/robot/C0645j.java is just half of the truth and i was looking at this part for way to long, i'm not sure where this part is used. maybe this would be the part where one can communicate with the neato without making use of the cloudservice. who knows ;)

                      The actual fun starts in com/neatorobotics/android/p040c/p042b/C0898b.java the code reveals that there are 3 ingredients making up the HMAC signature

                      • the robot's serial number
                      • the current date (as also found in the Date header)
                      • the http body

                      Together with the robot's secret key we're now able to properly sign the requests.

                      I've packaged this in a small ruby library https://github.com/kangguru/botvac which is
                      quite basic and just covers just a little more than i needed for my usecase
                      but i'm happy to extend this over time.

                      Especially the part to obtain the secret key for the robot just be done via
                      trafic capturing, which is not the most convinent thing i can think of :)

                      I hope this already helps some people to build new things around their robot. I've mixed the
                      stuff with ifttt.com and now can plan the cleaning schedule via a google calendar, which
                      makes it really convinent to skip single days in a given schedule, which ist kinda painful to
                      solve with the mobile app.

                      happy hacking

                      d96mbeD Offline
                      d96mbeD Offline
                      d96mbe
                      wrote on last edited by
                      #43

                      @kangguru I have not done any ruby before and I'm stuck trying to use the gem. I think I've managed to install Ruby, devkit and Git (and added git.exe to path which is needed to be able to 'bundle install'). I don't see any errors, but I am unable to find any binary named botvac to run. I've run "gem env" and none of the variables seems strange.

                      Any suggestions? I'm on Windows 10 btw.

                      BR / M

                      1 Reply Last reply
                      0
                      • korttomaK Offline
                        korttomaK Offline
                        korttoma
                        Hero Member
                        wrote on last edited by
                        #44

                        FYI, a friend of mine has created a PHP library for the Neato cloud service -> https://github.com/tomrosenback/botvac

                        It is based on the work @kangguru has done.

                        • Tomas
                        d96mbeD 1 Reply Last reply
                        1
                        • korttomaK korttoma

                          FYI, a friend of mine has created a PHP library for the Neato cloud service -> https://github.com/tomrosenback/botvac

                          It is based on the work @kangguru has done.

                          d96mbeD Offline
                          d96mbeD Offline
                          d96mbe
                          wrote on last edited by
                          #45

                          @korttoma Works like a charm. Used PHP CLI on Windows 10. You have to enable extensions; php_curl and php_openssl in php.ini.

                          1 Reply Last reply
                          0
                          • Jonathan8301J Offline
                            Jonathan8301J Offline
                            Jonathan8301
                            wrote on last edited by
                            #46

                            The PHP API Works great for me. I have two questions though.

                            1. The [isCharging] value in the [details] array of the State JSON is always empty, even when it is clearly charging i.e. the [charge] value changes. Any Idea why?
                            2. Whenever I call the pause cleaning, and then return to base, the robot will go back to its base, but it will not dock with it, is there any particular reason for this? and is there a way to have it return to the dock, and actually dock and charge with out just letting run through the entire cleaning cycle?
                            RawLiquidR 1 Reply Last reply
                            0
                            • Jonathan8301J Jonathan8301

                              The PHP API Works great for me. I have two questions though.

                              1. The [isCharging] value in the [details] array of the State JSON is always empty, even when it is clearly charging i.e. the [charge] value changes. Any Idea why?
                              2. Whenever I call the pause cleaning, and then return to base, the robot will go back to its base, but it will not dock with it, is there any particular reason for this? and is there a way to have it return to the dock, and actually dock and charge with out just letting run through the entire cleaning cycle?
                              RawLiquidR Offline
                              RawLiquidR Offline
                              RawLiquid
                              wrote on last edited by
                              #47

                              @Jonathan8301
                              You know, I've had that happen once or twice before I even found this page, but when I just tried it out, my botvac did dock properly.

                              I just wish there were some way to get at the lower level sensor readings through this, I'd love to be able to see the 'map' that it builds when it cleans....

                              1 Reply Last reply
                              0
                              • UbiquitousU Ubiquitous

                                As for replacing the cloud server, I don't think it's possible without rooting the robot. The first thing it does when it's connected to the internet is to start an HTTPS Comet session (long polling). The robot will kill the connection immediately if you try to MiTM it with a selfsigned certificate and there is no way to install new certificates on the robot. If anyone has opened the robot I'd be interested in pictures of the motherboard, especially of any pads labeled JTAG.

                                RawLiquidR Offline
                                RawLiquidR Offline
                                RawLiquid
                                wrote on last edited by
                                #48

                                @Ubiquitous
                                I have plans to open up my D80 the day that the warrantee is up, not sure if that will or won't help you any...

                                1 Reply Last reply
                                0
                                • Jonathan8301J Offline
                                  Jonathan8301J Offline
                                  Jonathan8301
                                  wrote on last edited by
                                  #49

                                  Hmm it almost sounds like the Botvac could go for a firmware update, unfortunately it looks like Neato's post launch product support is severely lacking

                                  RawLiquidR 1 Reply Last reply
                                  0
                                  • Jonathan8301J Jonathan8301

                                    Hmm it almost sounds like the Botvac could go for a firmware update, unfortunately it looks like Neato's post launch product support is severely lacking

                                    RawLiquidR Offline
                                    RawLiquidR Offline
                                    RawLiquid
                                    wrote on last edited by
                                    #50

                                    @Jonathan8301
                                    Funny thing is, before the connected was launched, I remember being able to find an API document and programming info for interfacing with the lower models...NOW, I can't so much as even find any page that contains a link to anything resembling an update file or api documentation...

                                    1 Reply Last reply
                                    0
                                    • korttomaK Offline
                                      korttomaK Offline
                                      korttoma
                                      Hero Member
                                      wrote on last edited by
                                      #51

                                      @RawLiquid So you are looking for this -> https://www.neatorobotics.com/resources/programmersmanual_20140305.pdf

                                      Or something else?

                                      • Tomas
                                      RawLiquidR 1 Reply Last reply
                                      0
                                      • korttomaK korttoma

                                        @RawLiquid So you are looking for this -> https://www.neatorobotics.com/resources/programmersmanual_20140305.pdf

                                        Or something else?

                                        RawLiquidR Offline
                                        RawLiquidR Offline
                                        RawLiquid
                                        wrote on last edited by
                                        #52

                                        @korttoma actually, I already had that very document, and that is the one I was referring to. I might suggest keeping mentions of the exact url fairly low, It's likely an oversight that it's available still and if so, likely to be removed if they notice it. maybe use bitly to reference it instead...
                                        I don't know what exactly changed within the company to cause such a drastic shift, but it's obvious that something changed....

                                        1 Reply Last reply
                                        0
                                        • jcolterJ Offline
                                          jcolterJ Offline
                                          jcolter
                                          wrote on last edited by
                                          #53

                                          Did anyone ever get this working with the Vera?

                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          20

                                          Online

                                          11.7k

                                          Users

                                          11.2k

                                          Topics

                                          113.1k

                                          Posts


                                          Copyright 2025 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • MySensors
                                          • OpenHardware.io
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular