SmartThings Community

[WIP] Roomba Control with RooWiFi

I am desperate to get my old Roomba working with SmartThings.

Now that the ThinkingCleaner project is dead, I’m going to attempt to resurrect the old RooWiFi projects.

Project Mission:
A Device Type Handler that can issue commands to the Roomba, a well as receive updates from various sensors all through RooWiFi.

Project Method:
The RooWiFi API allow access to a JSON, and three specific commands that can be sent to the roomba.

HTTP GET, with Basic Authentication

  • http:// Roomba_Wifi_Remote_IP /roomba.cgi?button=CLEAN
  • http:// Roomba_Wifi_Remote_IP /roomba.cgi?button=SPOT
  • http:// Roomba_Wifi_Remote_IP/roomba.cgi?button=DOCK

Project Goals:

  1. Control the Roomba’s Clean/Dock Function
  2. Control the Roomba’s SPOT Function
  3. Parse JSON to return Current Device Activity State
  4. Parse JSON to report Battery Percentage, Charging State
  5. Create SmartApp to manage the creation of the Device

Project Limitations:
I’ve never written anything in Groovy before, let alone for SmartThings. I do have lots of programming experience with other languages though.

Here’s the content of the JSON response from RooWiFi

{
"response": { 
    "r0": {
        "name": "Bumps Wheeldrops",
        "value": "0"
    },
    "r1": {
        "name": "Wall",
        "value": "0"
    },
        "r2": {
        "name": "Cliff Left",
        "value": "0"
    },
    "r3": {
        "name": "Cliff Front Left",
        "value": "0"
    },
    "r4": {
        "name": "Cliff Front Right",
        "value": "0"
    },
    "r5": {
        "name": "Cliff Right",
        "value": "0"
    },
    "r6": {
        "name": "Virtual Wall",
        "value": "0"
    },
    "r7": {
        "name": "Motor Overcurrents",
        "value": "0"
    },
    "r8": {
        "name": "Dirt Detector - Left",
        "value": "0"
    },
    "r9": {
        "name": "Dirt Detector - Right",
        "value": "0"
    },
    "r10": {
        "name": "Remote Opcode",
        "value": "0"
    },
    "r11": {
        "name": "Buttons",
        "value": "0"
    },
    "r12": {
        "name": "Distance",
        "value": "0"
    },
    "r13": {
        "name": "Angle",
        "value": "0"
    },
    "r14": {
        "name": "Charging State",
        "value": "4"
    },
    "r15": {
        "name": "Voltage",
        "value": "16198"
    },
    "r16": {
        "name": "Current",
        "value": "-164"
    },
    "r17": {
        "name": "Temperature",
        "value": "27"
    },
    "r18": {
        "name": "Charge",
        "value": "2542"
    },
    "r19": {
        "name": "Capacity",
        "value": "2696"
    }
}
}

Goal 1 Progress:

Goal 1 has been achieved by using pre-existing HTTP Button Commands

The question is, how can I merge multiple buttons into one Device Type?

Hi, Adam.
I appreciate your efforts and willingness you’re demonstrating to make this project done!

I’m very new to the ST world, have no experience with groovy (two times of copy-paste of device handlers and smart apps in IDE doesn’t count), but worked a bit with Python and in general have done some reverse-engineering in other languages code too.

I’ve received my RooWifi module today to upgrade my Roomba 770 and I was also planning to automate it via either ST or Alexa (ideally, both :slight_smile: )

So, while I understand you might be busy with your primary job, let’s sync once in a while (if you’d like to) and maybe share thoughts and discuss ideas.
I’d be glad to help in anything if I can.

Having an unforeseen delay with this, as my Sofa decided it didn’t like my roowifi and ripped the module out of the port, snapping 2 of the pins. So can’t do more until I can get it repaired, or repair it myself

Lol. Sofa is your dog, I assume?
I haven’t installed mine yet, wonder if my cat would manage to ignore it completely.

No… the “Couch” as you Americans call it.

It sits just high enough for the Roomba to get stuck underneath at times. It usually backs itself out, but when it does, it rips the module off. This time, it broke off 2 pins :-(.

I need to install either some horns ok the Roomba, or some risers on the sofa legs.