koalazak / dorita980

Unofficial iRobot Roomba and Braava (i7/i7+, 980, 960, 900, e5, 690, 675, m6, etc) node.js library (SDK) to control your robot
MIT License
932 stars 147 forks source link

Does Braava use the same API as Roomba? #105

Closed thorazine-12 closed 4 years ago

thorazine-12 commented 4 years ago

I have I7+ and want to buy Braava m6, but don't know if Braava uses the same API? Is it possible to use dorita980 to control Braava too (clean, stop, dock etc. - only basic commands)? Thanks for any help with this!

thorazine-12 commented 4 years ago

Guys, just let you know that Braava can be operated with dorita with no problem! :) Some commands, statuses etc. are different but it was the same with i7+ compared to previous model. Below copy of braava m6 config:

connected
{
  "cmd": "publish",
  "retain": false,
  "qos": 0,
  "dup": false,
  "length": 3680,
  "topic": "$aws/things/2A3E5707267245C9A7D29312A651B874/shadow/update",
  "payload": {
    "state": {
      "reported": {
        "batPct": 100,
        "batteryType": "F12432784",
        "bbchg": {
          "nChatters": 0,
          "nKnockoffs": 0,
          "nLithF": 2,
          "nChgOk": 1,
          "aborts": [
            0,
            16,
            5
          ],
          "smberr": 57344
        },
        "bbchg3": {
          "estCap": 1925,
          "nAvail": 6,
          "hOnDock": 2,
          "avgMin": 43
        },
        "bbmssn": {
          "aCycleM": 84,
          "nMssnF": 0,
          "nMssnC": 0,
          "nMssnOk": 1,
          "aMssnM": 243,
          "nMssn": 1
        },
        "bbnav": {
          "aMtrack": 0,
          "nGoodLmrks": 116,
          "aGain": 16,
          "aExpo": 46
        },
        "bbpause": {
          "pauses": [
            101,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ]
        },
        "bbrstinfo": {
          "nNavRst": 0,
          "nMobRst": 0,
          "causes": "0000",
          "nSafRst": 0,
          "safCauses": [
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ]
        },
        "bbrun": {
          "nOvertemps": 0,
          "nCBump": 0,
          "nWStll": 0,
          "nPanics": 0,
          "nStuck": 1,
          "nPicks": 5,
          "sqft": 8,
          "min": 48,
          "hr": 2,
          "nCliffsF": 295,
          "nCliffsR": 0
        },
        "bbswitch": {
          "nBumper": 4287,
          "nDrops": 26,
          "nDock": 0,
          "nSpot": 0,
          "nClean": 2
        },
        "bbsys": {
          "min": 43,
          "hr": 6
        },
        "cap": {
          "maps": 3,
          "edge": 0,
          "pmaps": 2,
          "tLine": 2,
          "area": 1,
          "eco": 1,
          "multiPass": 2,
          "pose": 1,
          "team": 1,
          "pp": 0,
          "5ghz": 1,
          "prov": 3,
          "sched": 1,
          "svcConf": 1,
          "ota": 2,
          "log": 2
        },
        "carpetBoost": false,
        "cleanMissionStatus": {
          "cycle": "none",
          "phase": "charge",
          "expireM": 0,
          "rechrgM": 0,
          "error": 0,
          "notReady": 0,
          "mssnM": 243,
          "sqft": 872,
          "initiator": "localApp",
          "nMssn": 1
        },
        "cleanSchedule2": [],
        "cloudEnv": "prod",
        "connected": true,
        "country": "PL",
        "deploymentState": 0,
        "detectedPad": "reusableDry",
        "dock": {
          "known": true
        },
        "ecoCharge": false,
        "hwPartsRev": {
          "mobBrd": 9,
          "mobBlid": "6976CD055A3F85701F69EA6ABBF7147C",
          "navSerialNo": "CD0950XAD",
          "wlan0HwAddr": "50:14:79:11:db:a9",
          "NavBrd": 1
        },
        "langs": [
          {
            "cs-CZ": 0
          },
          {
            "da-DK": 1
          },
          {
            "de-DE": 2
          },
          {
            "en-GB": 3
          },
          {
            "en-US": 4
          },
          {
            "es-ES": 5
          },
          {
            "es-XL": 6
          },
          {
            "fi-FI": 7
          },
          {
            "fr-CA": 8
          },
          {
            "fr-FR": 9
          },
          {
            "he-IL": 10
          },
          {
            "it-IT": 11
          },
          {
            "ja-JP": 12
          },
          {
            "nb-NO": 13
          },
          {
            "nl-NL": 14
          },
          {
            "pl-PL": 15
          },
          {
            "pt-BR": 16
          },
          {
            "pt-PT": 17
          },
          {
            "ru-RU": 18
          },
          {
            "sv-SE": 19
          },
          {
            "zh-CN": 20
          },
          {
            "zh-HK": 21
          },
          {
            "zh-TW": 22
          }
        ],
        "language": 15,
        "lastCommand": {
          "command": "addrobotdone",
          "initiator": null,
          "time": null
        },
        "lastDisconnect": 3,
        "mapUploadAllowed": true,
        "mopReady": {
          "tankPresent": false,
          "lidClosed": true
        },
        "mssnNavStats": {
          "nMssn": 1,
          "gLmk": 116,
          "lmk": 178,
          "reLc": 5,
          "plnErr": "none",
          "mTrk": 0,
          "kdp": 0,
          "sfkdp": 0,
          "nmc": 1,
          "nmmc": 0,
          "nrmc": 1,
          "mpSt": "idle",
          "l_drift": 0,
          "h_drift": 0,
          "l_squal": 100,
          "h_squal": 0
        },
        "name": "Braava",
        "noAutoPasses": false,
        "noPP": false,
        "openOnly": false,
        "padWetness": {
          "disposable": 2,
          "reusable": 2
        },
        "pmapLearningAllowed": true,
        "pmaps": [
          {
            "1lHG_7bGROmxe5Tcg8U1qQ": "200110T203452"
          }
        ],
        "rankOverlap": 67,
        "sceneRecog": 1,
        "schedHold": false,
        "secureBoot": {
          "log": 2,
          "flip": 0,
          "sbl1Ver": "B3.2.02_PPUB",
          "stublVer": "B3.2.02_PPUB",
          "efuse": 1,
          "blType": 1,
          "enforce": 2,
          "lastRst": "200000001",
          "recov": "linux+2.0.5+sanmarino-pp-branch+17",
          "idSwitch": 0
        },
        "sku": "m613840",
        "softwareVer": "sanmarino+3.2.5+sanmarino-release-rt419+8",
        "subModSwVer": {
          "nav": "sanmarino-nav+3.2.5-EPMF+build-HEAD-0a29e86b42e+8",
          "mob": "3.2.5-XX+build-HEAD-0a29e86b42e+8",
          "bmp": "",
          "pwr": "0.2.7+build-HEAD-0a29e86b42e+8",
          "sft": "1.1.0+SanMarino-Builds/SanMarino-Certified-Safety/sanmarino-safety-bbbe81f2c82+13",
          "mobBtl": "4.2",
          "linux": "linux+2.1.6+sanmarino-release-rt419+8",
          "con": "2.1.6-tags/release-2.1.6@c6b6585a/build"
        },
        "svcEndpoints": {
          "svcDeplId": "v011"
        },
        "tankLvl": 0,
        "timezone": "Europe/Warsaw",
        "tls": {
          "tzbChk": 1,
          "privKType": 2,
          "lcCiphers": [
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            50380848,
            50380847
          ]
        },
        "twoPass": false,
        "tz": {
          "ver": 7,
          "events": [
            {
              "dt": 1564675200,
              "off": 120
            },
            {
              "dt": 1572138001,
              "off": 60
            },
            {
              "dt": 1585443601,
              "off": 120
            }
          ]
        },
        "vacHigh": false
      }
    }
  }
}

EDIT: Braava makes its own maps, has its own schedule settings and also has its own training cycles. So integration between roomba and brava is far from optimal. But thanks to dorita it can be better ;)

koalazak commented 4 years ago

hey @thorazine-12 can you test this PR with all your robots? https://github.com/koalazak/dorita980/pull/103

It would be very helpful! thank you!