Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Getting password on Roomba j7+ #95

Open
jdiegmueller opened this issue Sep 14, 2021 · 30 comments
Open

Getting password on Roomba j7+ #95

jdiegmueller opened this issue Sep 14, 2021 · 30 comments

Comments

@jdiegmueller
Copy link

Hello. I just got myself a Roomba j7+ and am having trouble fetching the username/password from it using the methods listed here. I'm also seeing the same thing on the dorita980 project, so I suspect this is more about the j7+ needing some new mojo vs. the older models, but that's purely a guess.

Here's the behavior I'm seeing when trying to fetch the username/password:

[jdiegmueller@nv-dc2-rproxy1 roomba]# ./getpassword.py -R 10.245.2.102
2021-09-14 13:15:16 INFO [Roomba.Password] Using Password version 2.0a
2021-09-14 13:15:16 INFO [Roomba.Password] reading/writing info from config file ./config.ini
2021-09-14 13:15:16 INFO [Roomba.Password] waiting on port: 5678 for data
2021-09-14 13:15:17 INFO [Roomba.Password] Robot at IP: 10.245.2.102 Data: {
  "ver": "4",
  "hostname": "iRobot-15DF6D60B10A4BA48A53015E91E330D2",
  "robotname": "Roomba",
  "robotid": "15DF6D60B10A4BA48A53015E91E330D2",
  "ip": "10.245.2.102",
  "mac": "50:14:79:B1:DF:0C",
  "sw": "sapphire+1.0.17+Firmware-Production+52",
  "sku": "j755020",
  "nc": 0,
  "proto": "mqtt",
  "cap": {
    "binFullDetect": 2,
    "dockComm": 1,
    "edge": 0,
    "maps": 3,
    "pmaps": 5,
    "tLine": 2,
    "area": 1,
    "eco": 1,
    "multiPass": 2,
    "pose": 1,
    "team": 1,
    "pp": 0,
    "lang": 2,
    "5ghz": 1,
    "prov": 3,
    "sched": 1,
    "svcConf": 1,
    "ota": 2,
    "log": 2,
    "langOta": 0,
    "expectingUserConf": 1
  },
  "cloudConnState": 14
}
2021-09-14 13:15:27 INFO [Roomba.Password] 0 robot(s) already defined in file./config.ini, found 1 robot(s) on network
2021-09-14 13:15:27 INFO [Roomba.Password] To add/update Your robot details,make sure your robot (Roomba) at IP 10.245.2.102 is on the Home Base and powered on (green lights on). Then press and hold the HOME button on your robot until it plays a series of tones (about 2 seconds). Release the button and your robot will flash WIFI light.
Press <Enter> to continue...
s<Enter> to skip configuring this robot: 
2021-09-14 13:15:38 INFO [Roomba.Password] Roomba (Roomba) IP address is: 10.245.2.102
2021-09-14 13:15:42 DEBUG [Roomba.Password] Connection Successful
2021-09-14 13:15:42 DEBUG [Roomba.Password] Waiting for data
2021-09-14 13:15:52 ERROR [Roomba.Password] Connection Timeout Error (for 10.245.2.102): The read operation timed out
2021-09-14 13:15:52 ERROR [Roomba.Password] Unable to get password from roomba
2021-09-14 13:15:52 ERROR [Roomba.Password] Error getting password for robot Roomba at ip10.245.2.102, received 7 bytes. Follow the instructions and try again.
@NickWaterton
Copy link
Owner

NickWaterton commented Sep 14, 2021 via email

@jdiegmueller
Copy link
Author

What happens when you press and hold the home button as instructed?

The white circle "fills up" with blue for ~2 seconds, then plays a happy little chime. Once that happens, I hit enter and get the output you see above.

@NickWaterton
Copy link
Owner

NickWaterton commented Sep 15, 2021 via email

@jdiegmueller
Copy link
Author

Appreciate you trying to help out on this.

Yeah, same deal even with phone shutdown, so it doesn't appear to be competing MQTT clients. I grabbed a packet capture off of 10.245.2.116, which is the Rocky Linux box I spun up on the same subnet as the j7+. The j7+ itself is 10.245.2.102.

Github won't let me directly attach the pcap, so I'm zipping it and attaching it. Let me know if there's anything else I can do to be helpful.
roomba-j7+.zip

@jdiegmueller
Copy link
Author

Taking Roomba980-Python out of the equation, I am trying to connect directly using openssl with the iRobot intermediate & root chain passed as CA. It seems "unsupported certificate purpose" is what's biting me, although I can't sort out why. Also tried with MQTT Explorer on Windows in TLS mode, I get the same "unsupported certificate purpose".

I'm not smart enough to sort this out, but hopefully this is useful:

[jdiegmueller@nv-dc2-centos1 ~]$ openssl11 s_client -CAfile chain.cer -showcerts -state -msg -connect 10.245.2.102:8883
CONNECTED(00000003)
SSL_connect:before SSL initialization
>>> ??? [length 0005]
    16 03 01 01 20
>>> TLS 1.3, Handshake [length 0120], ClientHello
    01 00 01 1c 03 03 4c 68 14 a3 fa c8 c3 df fa 3d
    39 20 5f a2 35 70 c8 9f 5f b1 18 35 b2 3f eb e2
    49 d4 a5 fd 70 35 20 2f 3a 81 53 a3 0c bb 10 b0
    2c 6a cf 8a 6e 9e 07 41 5b 2c ed b5 88 f8 c9 e9
    16 89 1b 69 24 34 fa 00 3e 13 02 13 03 13 01 c0
    2c c0 30 00 9f cc a9 cc a8 cc aa c0 2b c0 2f 00
    9e c0 24 c0 28 00 6b c0 23 c0 27 00 67 c0 0a c0
    14 00 39 c0 09 c0 13 00 33 00 9d 00 9c 00 3d 00
    3c 00 35 00 2f 00 ff 01 00 00 95 00 0b 00 04 03
    00 01 02 00 0a 00 0c 00 0a 00 1d 00 17 00 1e 00
    19 00 18 00 23 00 00 00 16 00 00 00 17 00 00 00
    0d 00 30 00 2e 04 03 05 03 06 03 08 07 08 08 08
    09 08 0a 08 0b 08 04 08 05 08 06 04 01 05 01 06
    01 03 03 02 03 03 01 02 01 03 02 02 02 04 02 05
    02 06 02 00 2b 00 09 08 03 04 03 03 03 02 03 01
    00 2d 00 02 01 01 00 33 00 26 00 24 00 1d 00 20
    1a af 39 f3 67 bb 2b eb cb 11 2b a5 4e 2e 13 44
    99 44 86 c6 e1 bd 89 25 77 52 02 93 07 64 af 3a
SSL_connect:SSLv3/TLS write client hello
<<< ??? [length 0005]
    16 03 03 00 7a
SSL_connect:SSLv3/TLS write client hello
<<< TLS 1.3, Handshake [length 007a], ServerHello
    02 00 00 76 03 03 11 58 b4 f1 5e bb 4e a0 29 ef
    57 c0 52 e2 dc 0e ca 6b e2 e9 03 5f 68 df b1 19
    d1 84 53 2e e3 88 20 2f 3a 81 53 a3 0c bb 10 b0
    2c 6a cf 8a 6e 9e 07 41 5b 2c ed b5 88 f8 c9 e9
    16 89 1b 69 24 34 fa 13 02 00 00 2e 00 2b 00 02
    03 04 00 33 00 24 00 1d 00 20 99 bc f7 43 c8 11
    d7 6e d0 ff 54 d8 0b b3 90 23 eb 57 ac ef e2 78
    b9 38 29 a5 9a 2e a9 2c 9a 05
<<< ??? [length 0005]
    14 03 03 00 01
<<< ??? [length 0005]
    17 03 03 00 17
<<< TLS 1.3 [length 0001]
    16
SSL_connect:SSLv3/TLS read server hello
<<< TLS 1.3, Handshake [length 0006], EncryptedExtensions
    08 00 00 02 00 00
Can't use SSL_get_servername
<<< ??? [length 0005]
    17 03 03 09 d6
<<< TLS 1.3 [length 0001]
    16
SSL_connect:TLSv1.3 read encrypted extensions
<<< TLS 1.3, Handshake [length 09c5], Certificate
    0b 00 09 c1 00 00 09 bd 00 04 f8 30 82 04 f4 30
    82 02 dc a0 03 02 01 02 02 12 7f 02 60 6d df 15
    0a b1 a4 4b 8a 53 01 5e 91 e3 30 d2 30 0d 06 09
    2a 86 48 86 f7 0d 01 01 0b 05 00 30 81 85 31 0b
    30 09 06 03 55 04 06 13 02 55 53 31 16 30 14 06
    03 55 04 08 13 0d 4d 61 73 73 61 63 68 75 73 65
    74 74 73 31 0f 30 0d 06 03 55 04 07 13 06 42 65
    66 6f 72 64 31 1b 30 19 06 03 55 04 0a 13 12 69
    52 6f 62 6f 74 20 43 6f 72 70 6f 72 61 74 69 6f
    6e 31 0c 30 0a 06 03 55 04 0b 13 03 48 42 55 31
    22 30 20 06 03 55 04 03 13 19 52 6f 62 6f 74 20
    49 6e 74 65 72 6d 65 64 69 61 74 65 20 43 41 20
    41 30 31 30 1e 17 0d 32 31 30 35 31 39 32 32 30
    39 30 39 5a 17 0d 33 31 30 35 32 30 32 32 30 39
    30 39 5a 30 81 9b 31 0b 30 09 06 03 55 04 06 13
    02 55 53 31 16 30 14 06 03 55 04 08 13 0d 4d 61
    73 73 61 63 68 75 73 65 74 74 73 31 10 30 0e 06
    03 55 04 07 13 07 42 65 64 66 6f 72 64 31 1b 30
    19 06 03 55 04 0a 13 12 69 52 6f 62 6f 74 20 43
    6f 72 70 6f 72 61 74 69 6f 6e 31 13 30 11 06 03
    55 04 0b 13 0a 50 72 6f 64 75 63 74 69 6f 6e 31
    30 30 2e 06 03 55 04 03 13 27 69 52 6f 62 6f 74
    2d 31 35 44 46 36 44 36 30 42 31 30 41 34 42 41
    34 38 41 35 33 30 31 35 45 39 31 45 33 33 30 44
    32 30 82 01 22 30 0d 06 09 2a 86 48 86 f7 0d 01
    01 01 05 00 03 82 01 0f 00 30 82 01 0a 02 82 01
    01 00 da c3 85 67 79 ba 14 c1 13 9a b4 14 6f ad
    bf 98 ec d3 5e b1 b7 01 19 81 31 fa c4 07 73 74
    2c 5f 13 7c 5c d7 a6 72 d8 43 70 10 95 56 40 73
    3f 15 f7 a5 94 94 2b 8b 2f db ea bb b5 7d b6 c6
    d2 c5 d3 20 0f 74 f1 1e 3f 2f e7 8e 21 d8 f6 f6
    76 5e 39 5f 3a 3b 9c a8 78 91 ea f1 9a 01 df 4b
    c9 5e 7c 65 71 40 65 28 7f 95 3d b6 ae f5 f0 b8
    66 6a aa 6e 7d e5 53 78 73 dc 22 c1 d7 fd d1 01
    40 31 79 d9 d8 b6 b0 db d8 c3 3c 6d c5 03 ee 61
    93 cf 9d 62 d2 0b d0 aa ed 99 3e 20 78 cd 5b 88
    da c3 94 5b 17 37 ed 05 24 9f 6c b2 df 4a 10 b7
    8b 00 9f 6c ba ec 8b a9 2e c7 48 0d ef 2d da 1f
    9e ee 34 7e ee 81 bb e6 f1 39 32 39 9d e3 e3 cf
    72 03 cc 5b e8 f1 a2 f7 c2 8d cb 8a 31 2e a4 a8
    54 dd 0c de e0 97 c1 5c 24 80 fd 06 29 03 d9 b5
    44 5b 37 70 98 8d 54 5f 4c 34 22 3b d1 e2 5d 4c
    5b 11 02 03 01 00 01 a3 46 30 44 30 0b 06 03 55
    1d 0f 04 04 03 02 03 a8 30 09 06 03 55 1d 13 04
    02 30 00 30 2a 06 03 55 1d 25 04 23 30 21 06 08
    2b 06 01 05 05 07 03 01 06 08 2b 06 01 05 05 07
    03 02 06 0b 2b 06 01 04 01 83 8c 3c 02 02 04 30
    0d 06 09 2a 86 48 86 f7 0d 01 01 0b 05 00 03 82
    02 01 00 81 21 c0 33 8d e4 4a 7a b5 e6 a9 8b fc
    1d 77 0f 76 88 d2 7a ed f0 a8 b7 a8 e3 e0 40 d7
    58 78 44 a5 10 98 83 a7 37 c2 d5 29 ae 82 9c 27
    ab 1f 6b cd 4e 03 f9 c5 bb a3 5c 3f c7 73 4e 01
    98 18 85 bd 77 69 45 81 e3 fb a4 5c 5e 51 29 17
    9a 62 cf f0 61 d0 5f 0a 00 83 6b d0 4d 3d 86 34
    bb 2b 8d e4 fc ce 09 ab 15 2f b7 b3 5d 61 42 e4
    d8 d1 c9 2f 15 1b e8 dc 47 09 f2 0b 1c b2 75 82
    9f da 74 7f 04 cc 50 ab db 14 1e c3 72 d7 8b 0a
    c4 04 e5 e9 60 38 47 c0 dd ea c7 2b b0 02 9f 89
    a6 69 a4 2d 31 fa 6d fb 95 fb fa 79 25 71 e8 e0
    ec 0b b1 2a e0 72 9b ab 0d 43 36 60 82 d6 63 8b
    d5 96 31 81 2c 44 e0 6a 60 e0 8a 94 bb 0b af df
    ab af 00 fb c1 2b 6a 0e a7 45 27 b3 ac c3 63 a5
    88 46 a9 09 db 5b c8 e4 61 2e 4a ad cb 40 e6 b6
    25 87 c6 d8 8a 9e 12 39 5c ac df 97 14 54 61 ad
    81 8a a9 85 73 b2 7c ba 6f ad 11 08 c0 88 9c 0f
    8b 0a c7 5e a9 5a 72 d5 24 b7 31 3a 8b 01 6f e5
    64 91 a2 7d 50 8a c4 81 ad bf 7d b6 21 34 ca 0b
    61 ab 63 09 60 39 38 b6 58 28 a9 47 0b 4b 61 dc
    6c fb 1e b3 59 9f e6 15 bb 20 f4 09 e8 86 5f db
    48 d0 43 f6 bc b9 8f 3a 0f 69 20 15 50 6f 3d 63
    d7 db a2 e8 c0 73 dd fb e7 da 90 da 0f 05 f8 e0
    9f 50 69 a6 3c 05 42 9f e1 55 88 6c c4 4e f6 45
    74 1e 3c 35 65 a9 80 b5 a6 5d 3c 53 7d 4b 0c b9
    7d 5f 67 98 5e 5e 2c b9 02 ba ff 4d fa a1 a0 e2
    89 cd 0c bc 38 19 c1 b1 22 f1 c9 49 4a 89 dd 11
    c2 41 33 c0 eb ec 08 16 cd e1 ea 22 23 e4 0e 36
    55 ff e8 18 96 f9 96 4f af 9f e9 3a 2f 0c 8f 5c
    e8 28 ed 6a 9c 53 ea ec 77 50 ca a1 83 dc 4f 67
    ab 2d 4c 87 0d 10 15 9c 83 c0 a8 b8 24 02 36 6e
    e2 50 63 38 54 43 90 dc 5c 3d df 6e 98 ee a1 6c
    72 6b f4 00 00 00 04 bb 30 82 04 b7 30 82 03 9f
    a0 03 02 01 02 02 12 7f ff ad ad 33 1e 00 38 32
    4c a1 5d 3b 9a 0b 27 38 1c 30 0d 06 09 2a 86 48
    86 f7 0d 01 01 0b 05 00 30 5f 31 0b 30 09 06 03
    55 04 06 13 02 55 53 31 0b 30 09 06 03 55 04 08
    13 02 4d 41 31 10 30 0e 06 03 55 04 07 13 07 42
    65 64 66 6f 72 64 31 0f 30 0d 06 03 55 04 0a 13
    06 69 52 6f 62 6f 74 31 0c 30 0a 06 03 55 04 0b
    13 03 48 42 55 31 12 30 10 06 03 55 04 03 13 09
    52 6f 6f 6d 62 61 20 43 41 30 20 17 0d 31 38 30
    35 30 37 31 38 31 31 34 32 5a 18 0f 32 30 32 35
    31 32 33 31 30 30 30 30 30 30 5a 30 81 85 31 0b
    30 09 06 03 55 04 06 13 02 55 53 31 16 30 14 06
    03 55 04 08 13 0d 4d 61 73 73 61 63 68 75 73 65
    74 74 73 31 0f 30 0d 06 03 55 04 07 13 06 42 65
    66 6f 72 64 31 1b 30 19 06 03 55 04 0a 13 12 69
    52 6f 62 6f 74 20 43 6f 72 70 6f 72 61 74 69 6f
    6e 31 0c 30 0a 06 03 55 04 0b 13 03 48 42 55 31
    22 30 20 06 03 55 04 03 13 19 52 6f 62 6f 74 20
    49 6e 74 65 72 6d 65 64 69 61 74 65 20 43 41 20
    41 30 31 30 82 02 22 30 0d 06 09 2a 86 48 86 f7
    0d 01 01 01 05 00 03 82 02 0f 00 30 82 02 0a 02
    82 02 01 00 e4 dd ee 49 ec 5d ce 40 85 a8 a7 5e
    c9 5c 89 1c ff c2 a5 f2 e6 b5 eb 9c b8 57 cd 59
    c3 22 68 be 3b 55 07 6b 7d 81 2d 32 05 4f 36 72
    07 4e ad 9e 2d 63 9a f3 f3 10 a2 63 9c 15 47 14
    68 a5 cc 93 16 b1 b4 64 19 1c 48 44 c0 f7 3d f3
    8e a1 9e e2 0c bf 71 a9 1c 0f 36 0b e1 e9 8f 7d
    4f 6d f2 6e 79 d0 6f 6e f9 8f a5 56 47 18 93 ef
    c7 4c 3f a8 c9 b8 a9 0c 78 ce 0a 8f f9 ef bb be
    15 3f dc ee b5 0e be 5c 06 84 d3 c0 57 a3 9a 18
    46 e8 0d 43 07 fe ba c8 85 20 be 5f f3 14 df c0
    0a 43 ac 5f ad a8 6f a7 44 f3 25 d9 7d c2 c7 55
    1e 57 ba 97 fc 5b 15 62 a0 75 b4 d0 10 d4 60 71
    c8 9b 8c d7 78 c1 37 50 e3 b3 c5 f0 12 f6 e9 fc
    cd 96 35 86 b2 c8 ac ce a4 b5 ba 0a 2e 91 e0 ad
    2c ae 91 ce 5c d7 b0 4f a0 33 7a b5 a9 ca df 0e
    8d 49 47 f3 cc 9b 8a 24 0c 95 40 46 96 db 43 a2
    00 b8 2e 6a e8 b9 cd 67 0f 86 4e dd 7f 5d b0 21
    b7 0d 3e 66 ad 59 c7 6c 24 95 2c 47 81 dc 80 5f
    e0 b7 64 db 9f 9a a6 a2 a3 ff 51 b2 57 f2 b3 2d
    07 6a 5f 79 b7 28 cb cb 9f 5f 50 67 bf 1f 04 5b
    2d 45 d5 e6 97 56 a0 b2 0a 68 8f 31 2b 43 61 24
    c5 e1 ba af 48 46 5e fc 0c 7c 8e c6 cb ab 76 d1
    ef a0 88 c0 f0 8c 09 02 9e 33 b5 d4 8e 35 25 67
    fa 80 b5 24 85 34 c1 ff 5f e1 c4 95 de f1 ec fc
    9e 91 41 f4 2a 7a e8 7c ad b4 72 39 01 5e 37 d4
    50 55 40 b4 26 6c 0e e4 f9 a5 9b f2 3b 78 4b 3c
    88 53 e3 e4 4f 39 b4 12 14 c8 db 04 d5 43 4e 74
    00 89 d5 79 88 06 95 46 42 45 3f 81 a2 92 6b 73
    22 42 63 3c a1 5d 47 e1 3e 33 94 4d 7d 54 91 ad
    17 13 6c 48 36 51 24 22 6b 75 01 5d 58 d2 fb c8
    33 8d 43 3d 7f e3 1f f7 ce c1 43 62 da f9 89 5e
    a1 a6 a4 eb 3a d6 df b5 81 96 a8 bc be bb f4 ab
    e0 73 3b 89 02 03 01 00 01 a3 44 30 42 30 0e 06
    03 55 1d 0f 01 01 ff 04 04 03 02 02 04 30 12 06
    03 55 1d 13 01 01 ff 04 08 30 06 01 01 ff 02 01
    00 30 1c 06 03 55 1d 25 04 15 30 13 06 04 55 1d
    25 00 06 0b 2b 06 01 04 01 83 8c 3c 02 02 08 30
    0d 06 09 2a 86 48 86 f7 0d 01 01 0b 05 00 03 82
    01 01 00 97 e3 5c 2b bc dd c2 04 9c 48 78 df 36
    6e 43 34 43 22 8e da 40 c3 c8 b1 91 6a 46 c1 c1
    75 c2 a2 05 3c 32 53 57 7b 14 06 c9 c2 c8 eb 62
    bf 47 9e f1 93 8b af 75 52 54 34 ca 33 3c 4c 7c
    5a 41 76 c6 49 95 ef 59 48 80 25 27 f1 e4 ce 7a
    33 fb ff fb e2 03 c4 1d f2 31 1b dc 0c dc 3f 65
    19 dc 8f b6 17 23 76 98 37 69 7e ee a8 be b2 45
    18 60 e8 cd 48 f1 2a 96 96 32 22 da e9 39 e6 3b
    02 c1 0c 69 89 bd d1 71 49 28 f4 ac 17 d6 b7 f2
    7a 91 e8 11 f5 41 95 5e 7b 11 c9 40 49 2f e5 2c
    82 59 ba 3c 56 66 4a 71 70 3b fb 31 30 c0 67 03
    44 43 39 f0 ed 31 6d ef f3 81 6e 2d e1 c8 9a e7
    ad 51 80 dd 83 27 dc 9c cc 54 31 d6 b0 54 8a 9f
    44 2e cd 8e 5c 9b ec b2 f3 16 6a a2 5d 92 fb fb
    8b e7 0a 55 ac d0 06 c6 51 ba d6 47 ce 60 d6 2d
    e8 6f 04 1f cc f1 f4 96 e2 f7 35 13 b2 5d 53 f2
    ae 2b c5 00 00
depth=1 C = US, ST = Massachusetts, L = Beford, O = iRobot Corporation, OU = HBU, CN = Robot Intermediate CA A01
verify error:num=26:unsupported certificate purpose
verify return:1
depth=2 C = US, ST = MA, L = Bedford, O = iRobot, OU = HBU, CN = Roomba CA
verify return:1
depth=1 C = US, ST = Massachusetts, L = Beford, O = iRobot Corporation, OU = HBU, CN = Robot Intermediate CA A01
verify return:1
depth=0 C = US, ST = Massachusetts, L = Bedford, O = iRobot Corporation, OU = Production, CN = iRobot-15DF6D60B10A4BA48A53015E91E330D2
verify return:1
<<< ??? [length 0005]
    17 03 03 01 19
<<< TLS 1.3 [length 0001]
    16
SSL_connect:SSLv3/TLS read server certificate
<<< TLS 1.3, Handshake [length 0108], CertificateVerify
    0f 00 01 04 08 04 01 00 10 76 91 02 b7 07 16 5f
    7e 74 f9 4f c8 8e 76 0f ac 42 dc 04 f2 5d 48 ef
    79 c4 46 ab 36 15 c1 10 0e 76 fc 74 13 c9 49 f8
    04 fc 81 79 28 59 8e 7a 3b f2 83 56 ab d6 bb f0
    6d ce 8f 8c 48 7c 3c c7 aa 4c 7c 71 ca b0 aa 43
    43 9f ae 7c cb d4 cb e8 94 63 3b 81 5a 12 89 7c
    3b 67 20 c5 c0 2d a0 30 09 3d 40 fa dc ad a4 26
    3c a8 f1 d6 7f 8c 90 2e 3f b2 47 81 f0 d0 e5 9e
    ed 78 cf e2 b7 1d 94 60 b9 f5 55 9c f8 db b1 0b
    8f 25 41 c2 03 f6 1b 0b a9 f7 03 02 84 00 2d 48
    68 d7 e7 f4 7a 0d 36 72 e2 e7 72 c2 ff 0d 7f e3
    7b c8 67 38 63 2c c4 19 60 5a 55 35 34 31 e6 f2
    01 20 0e 28 f2 f2 e9 83 77 7f 37 53 a9 fd 7a d6
    19 0f 43 c8 49 21 24 65 9a 22 39 a6 2d 6c 7a 4d
    df b3 e7 09 2e 5f 6e 2a 03 d6 0f 40 db 07 8b 64
    2d 69 28 c1 bc c3 9d a9 ec e0 af 84 93 a9 87 0f
    fa 6d f6 31 cf 18 37 ab
<<< ??? [length 0005]
    17 03 03 00 45
<<< TLS 1.3 [length 0001]
    16
SSL_connect:TLSv1.3 read server certificate verify
<<< TLS 1.3, Handshake [length 0034], Finished
    14 00 00 30 8f 5a 13 66 2f b6 b9 1e 24 68 8d 2e
    19 29 62 16 a1 cc 0d 3f 73 eb d0 49 3e c2 6c 85
    8c 8a 00 6a ce 7c 22 9b ca ee f0 d4 e9 74 02 2e
    94 07 d6 70
SSL_connect:SSLv3/TLS read finished
>>> ??? [length 0005]
    14 03 03 00 01
>>> TLS 1.3, ChangeCipherSpec [length 0001]
    01
SSL_connect:SSLv3/TLS write change cipher spec
>>> ??? [length 0005]
    17 03 03 00 45
>>> TLS 1.3 [length 0001]
    16
>>> TLS 1.3, Handshake [length 0034], Finished
    14 00 00 30 52 5e 80 10 eb 17 cb 74 c4 4b 9a 42
    2e 99 0a d4 89 e1 6c fe 25 f5 b4 0e f8 5b a4 0a
    c0 b1 9c 9b 43 ec 1d 4d 30 46 6b 47 7a 85 d0 8e
    11 77 97 42
SSL_connect:SSLv3/TLS write finished
---
Certificate chain
 0 s:C = US, ST = Massachusetts, L = Bedford, O = iRobot Corporation, OU = Production, CN = iRobot-15DF6D60B10A4BA48A53015E91E330D2
   i:C = US, ST = Massachusetts, L = Beford, O = iRobot Corporation, OU = HBU, CN = Robot Intermediate CA A01
-----BEGIN CERTIFICATE-----
MIIE9DCCAtygAwIBAgISfwJgbd8VCrGkS4pTAV6R4zDSMA0GCSqGSIb3DQEBCwUA
MIGFMQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czEPMA0GA1UE
BxMGQmVmb3JkMRswGQYDVQQKExJpUm9ib3QgQ29ycG9yYXRpb24xDDAKBgNVBAsT
A0hCVTEiMCAGA1UEAxMZUm9ib3QgSW50ZXJtZWRpYXRlIENBIEEwMTAeFw0yMTA1
MTkyMjA5MDlaFw0zMTA1MjAyMjA5MDlaMIGbMQswCQYDVQQGEwJVUzEWMBQGA1UE
CBMNTWFzc2FjaHVzZXR0czEQMA4GA1UEBxMHQmVkZm9yZDEbMBkGA1UEChMSaVJv
Ym90IENvcnBvcmF0aW9uMRMwEQYDVQQLEwpQcm9kdWN0aW9uMTAwLgYDVQQDEydp
Um9ib3QtMTVERjZENjBCMTBBNEJBNDhBNTMwMTVFOTFFMzMwRDIwggEiMA0GCSqG
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaw4VneboUwROatBRvrb+Y7NNesbcBGYEx
+sQHc3QsXxN8XNemcthDcBCVVkBzPxX3pZSUK4sv2+q7tX22xtLF0yAPdPEePy/n
jiHY9vZ2XjlfOjucqHiR6vGaAd9LyV58ZXFAZSh/lT22rvXwuGZqqm595VN4c9wi
wdf90QFAMXnZ2Law29jDPG3FA+5hk8+dYtIL0KrtmT4geM1biNrDlFsXN+0FJJ9s
st9KELeLAJ9suuyLqS7HSA3vLdofnu40fu6Bu+bxOTI5nePjz3IDzFvo8aL3wo3L
ijEupKhU3Qze4JfBXCSA/QYpA9m1RFs3cJiNVF9MNCI70eJdTFsRAgMBAAGjRjBE
MAsGA1UdDwQEAwIDqDAJBgNVHRMEAjAAMCoGA1UdJQQjMCEGCCsGAQUFBwMBBggr
BgEFBQcDAgYLKwYBBAGDjDwCAgQwDQYJKoZIhvcNAQELBQADggIBAIEhwDON5Ep6
teapi/wddw92iNJ67fCot6jj4EDXWHhEpRCYg6c3wtUproKcJ6sfa81OA/nFu6Nc
P8dzTgGYGIW9d2lFgeP7pFxeUSkXmmLP8GHQXwoAg2vQTT2GNLsrjeT8zgmrFS+3
s11hQuTY0ckvFRvo3EcJ8gscsnWCn9p0fwTMUKvbFB7DcteLCsQE5elgOEfA3erH
K7ACn4mmaaQtMfpt+5X7+nklcejg7AuxKuBym6sNQzZggtZji9WWMYEsROBqYOCK
lLsLr9+rrwD7wStqDqdFJ7Osw2OliEapCdtbyORhLkqty0DmtiWHxtiKnhI5XKzf
lxRUYa2BiqmFc7J8um+tEQjAiJwPiwrHXqlactUktzE6iwFv5WSRon1QisSBrb99
tiE0ygthq2MJYDk4tlgoqUcLS2HcbPses1mf5hW7IPQJ6IZf20jQQ/a8uY86D2kg
FVBvPWPX26LowHPd++fakNoPBfjgn1BppjwFQp/hVYhsxE72RXQePDVlqYC1pl08
U31LDLl9X2eYXl4suQK6/036oaDiic0MvDgZwbEi8clJSondEcJBM8Dr7AgWzeHq
IiPkDjZV/+gYlvmWT6+f6TovDI9c6CjtapxT6ux3UMqhg9xPZ6stTIcNEBWcg8Co
uCQCNm7iUGM4VEOQ3Fw9326Y7qFscmv0
-----END CERTIFICATE-----
 1 s:C = US, ST = Massachusetts, L = Beford, O = iRobot Corporation, OU = HBU, CN = Robot Intermediate CA A01
   i:C = US, ST = MA, L = Bedford, O = iRobot, OU = HBU, CN = Roomba CA
-----BEGIN CERTIFICATE-----
MIIEtzCCA5+gAwIBAgISf/+trTMeADgyTKFdO5oLJzgcMA0GCSqGSIb3DQEBCwUA
MF8xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJNQTEQMA4GA1UEBxMHQmVkZm9yZDEP
MA0GA1UEChMGaVJvYm90MQwwCgYDVQQLEwNIQlUxEjAQBgNVBAMTCVJvb21iYSBD
QTAgFw0xODA1MDcxODExNDJaGA8yMDI1MTIzMTAwMDAwMFowgYUxCzAJBgNVBAYT
AlVTMRYwFAYDVQQIEw1NYXNzYWNodXNldHRzMQ8wDQYDVQQHEwZCZWZvcmQxGzAZ
BgNVBAoTEmlSb2JvdCBDb3Jwb3JhdGlvbjEMMAoGA1UECxMDSEJVMSIwIAYDVQQD
ExlSb2JvdCBJbnRlcm1lZGlhdGUgQ0EgQTAxMIICIjANBgkqhkiG9w0BAQEFAAOC
Ag8AMIICCgKCAgEA5N3uSexdzkCFqKdeyVyJHP/CpfLmteucuFfNWcMiaL47VQdr
fYEtMgVPNnIHTq2eLWOa8/MQomOcFUcUaKXMkxaxtGQZHEhEwPc9846hnuIMv3Gp
HA82C+Hpj31PbfJuedBvbvmPpVZHGJPvx0w/qMm4qQx4zgqP+e+7vhU/3O61Dr5c
BoTTwFejmhhG6A1DB/66yIUgvl/zFN/ACkOsX62ob6dE8yXZfcLHVR5Xupf8WxVi
oHW00BDUYHHIm4zXeME3UOOzxfAS9un8zZY1hrLIrM6ktboKLpHgrSyukc5c17BP
oDN6tanK3w6NSUfzzJuKJAyVQEaW20OiALguaui5zWcPhk7df12wIbcNPmatWcds
JJUsR4HcgF/gt2Tbn5qmoqP/UbJX8rMtB2pfebcoy8ufX1Bnvx8EWy1F1eaXVqCy
CmiPMStDYSTF4bqvSEZe/Ax8jsbLq3bR76CIwPCMCQKeM7XUjjUlZ/qAtSSFNMH/
X+HEld7x7PyekUH0KnrofK20cjkBXjfUUFVAtCZsDuT5pZvyO3hLPIhT4+RPObQS
FMjbBNVDTnQAidV5iAaVRkJFP4GikmtzIkJjPKFdR+E+M5RNfVSRrRcTbEg2USQi
a3UBXVjS+8gzjUM9f+Mf987BQ2La+Yleoaak6zrW37WBlqi8vrv0q+BzO4kCAwEA
AaNEMEIwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwHAYDVR0l
BBUwEwYEVR0lAAYLKwYBBAGDjDwCAggwDQYJKoZIhvcNAQELBQADggEBAJfjXCu8
3cIEnEh43zZuQzRDIo7aQMPIsZFqRsHBdcKiBTwyU1d7FAbJwsjrYr9HnvGTi691
UlQ0yjM8THxaQXbGSZXvWUiAJSfx5M56M/v/++IDxB3yMRvcDNw/ZRncj7YXI3aY
N2l+7qi+skUYYOjNSPEqlpYyItrpOeY7AsEMaYm90XFJKPSsF9a38nqR6BH1QZVe
exHJQEkv5SyCWbo8VmZKcXA7+zEwwGcDREM58O0xbe/zgW4t4cia561RgN2DJ9yc
zFQx1rBUip9ELs2OXJvssvMWaqJdkvv7i+cKVazQBsZRutZHzmDWLehvBB/M8fSW
4vc1E7JdU/KuK8U=
-----END CERTIFICATE-----
---
Server certificate
subject=C = US, ST = Massachusetts, L = Bedford, O = iRobot Corporation, OU = Production, CN = iRobot-15DF6D60B10A4BA48A53015E91E330D2

issuer=C = US, ST = Massachusetts, L = Beford, O = iRobot Corporation, OU = HBU, CN = Robot Intermediate CA A01

---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA-PSS
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 3044 bytes and written 373 bytes
Verification error: unsupported certificate purpose
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 2048 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 26 (unsupported certificate purpose)
---
<<< ??? [length 0005]
    17 03 03 00 ea
<<< TLS 1.3 [length 0001]
    16
SSL_connect:SSL negotiation finished successfully
SSL_connect:SSL negotiation finished successfully
<<< TLS 1.3, Handshake [length 00d9], NewSessionTicket
    04 00 00 d5 00 00 1c 20 cb 26 88 95 08 00 00 00
    00 00 00 00 00 00 c0 27 18 a1 8d 10 6b 00 f3 e0
    14 35 3e 98 72 78 5f e3 9e 10 e1 9b 40 71 63 1d
    a9 ee 56 cb e2 0f be 27 d8 1f f4 62 49 9b 21 e2
    2c a2 77 35 58 72 ba 3e 29 60 e6 1f 6f d8 c3 21
    35 b5 8b 8a c8 56 a6 0c 6d 21 25 12 0a 15 e8 51
    bd 6d 4d 62 a7 39 56 8f eb d3 6f 2b 1a 40 89 7e
    db e6 fc fa 03 03 0d 13 c0 92 1e 82 03 58 e9 21
    6a bf e4 68 3e df 5a 1e d7 f2 2e 9f 27 0c 1c 56
    22 36 7e f2 b6 35 f4 cf 4a 05 d1 cc 01 44 47 f5
    b4 df 71 7e 36 29 1d 82 e5 1b b5 2d 88 25 61 ea
    f3 5f 72 bd 78 e0 b1 69 d6 3d c4 e8 99 fc ec dd
    fb ef a1 38 f0 11 38 d6 3c ba 2e 65 4b 3a 76 86
    b7 db dd 15 cc 05 03 00 00
---
Post-Handshake New Session Ticket arrived:
SSL-Session:
    Protocol  : TLSv1.3
    Cipher    : TLS_AES_256_GCM_SHA384
    Session-ID: B1C9F03726261750363BAD08AF8F5F859ACA90739B9E8270740E35E6A0404524
    Session-ID-ctx: 
    Resumption PSK: 0FABAED61D8508CF9B2D25485B7E5877EDDB0BD160E1BA1E0956D996BDBAF19411F447BD2427A73DC05C41C0FB77B287
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 7200 (seconds)
    TLS session ticket:
    0000 - 27 18 a1 8d 10 6b 00 f3-e0 14 35 3e 98 72 78 5f   '....k....5>.rx_
    0010 - e3 9e 10 e1 9b 40 71 63-1d a9 ee 56 cb e2 0f be   .....@qc...V....
    0020 - 27 d8 1f f4 62 49 9b 21-e2 2c a2 77 35 58 72 ba   '...bI.!.,.w5Xr.
    0030 - 3e 29 60 e6 1f 6f d8 c3-21 35 b5 8b 8a c8 56 a6   >)`..o..!5....V.
    0040 - 0c 6d 21 25 12 0a 15 e8-51 bd 6d 4d 62 a7 39 56   .m!%....Q.mMb.9V
    0050 - 8f eb d3 6f 2b 1a 40 89-7e db e6 fc fa 03 03 0d   ...o+.@.~.......
    0060 - 13 c0 92 1e 82 03 58 e9-21 6a bf e4 68 3e df 5a   ......X.!j..h>.Z
    0070 - 1e d7 f2 2e 9f 27 0c 1c-56 22 36 7e f2 b6 35 f4   .....'..V"6~..5.
    0080 - cf 4a 05 d1 cc 01 44 47-f5 b4 df 71 7e 36 29 1d   .J....DG...q~6).
    0090 - 82 e5 1b b5 2d 88 25 61-ea f3 5f 72 bd 78 e0 b1   ....-.%a.._r.x..
    00a0 - 69 d6 3d c4 e8 99 fc ec-dd fb ef a1 38 f0 11 38   i.=.........8..8
    00b0 - d6 3c ba 2e 65 4b 3a 76-86 b7 db dd 15 cc 05 03   .<..eK:v........

    Start Time: 1631736170
    Timeout   : 7200 (sec)
    Verify return code: 26 (unsupported certificate purpose)
    Extended master secret: no
    Max Early Data: 0
---
SSL_connect:SSLv3/TLS read server session ticket
read R BLOCK
<<< ??? [length 0005]
    17 03 03 00 ea
<<< TLS 1.3 [length 0001]
    16
SSL_connect:SSL negotiation finished successfully
SSL_connect:SSL negotiation finished successfully
<<< TLS 1.3, Handshake [length 00d9], NewSessionTicket
    04 00 00 d5 00 00 1c 20 5a 34 54 66 08 00 00 00
    00 00 00 00 01 00 c0 27 18 a1 8d 10 6b 00 f3 e0
    14 35 3e 98 72 78 5f 5b 4d dd df 2a 0a 1e f9 5d
    33 84 7e e5 0f f8 b2 da ba 5c fd 7b 3d d9 d3 f0
    6a 7f 92 62 34 e2 f7 0b dc b5 89 bc 72 7f df 46
    09 00 44 35 ba 08 9e 0c d3 12 56 83 a4 5d 3e 34
    4c 6c d9 6b cc d0 5f ec 3e 3e 64 2a 9d 58 d5 05
    25 7b d6 06 07 6a cc 77 4f 4e ca bb 4d b3 c1 77
    64 95 62 68 aa 6b 6d 5e 1e 5f 23 e2 19 50 7c 44
    01 0a bc ee 17 b3 c5 bc bb 10 d8 b9 69 dc cb fa
    22 0a d7 35 05 ec 4d c4 9d 59 eb 6c 07 c8 4d 36
    30 cb 8f e3 ca 6b 20 16 67 82 34 6e 70 db f8 2c
    0a 9d 97 8e 86 cc 7b a8 e6 4a 51 41 ae ea 62 3d
    a4 59 99 79 c1 ba 6f 00 00
---
Post-Handshake New Session Ticket arrived:
SSL-Session:
    Protocol  : TLSv1.3
    Cipher    : TLS_AES_256_GCM_SHA384
    Session-ID: 552176B7D5729BCB57219590B2D08091F93546987A655B1FB123A437D945AED9
    Session-ID-ctx: 
    Resumption PSK: 7E503CD3688F5A761539EB16EF0BC891645737561657BF6999E79430F8671479B4DE346E719DAD203431AC8D0FF281A6
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 7200 (seconds)
    TLS session ticket:
    0000 - 27 18 a1 8d 10 6b 00 f3-e0 14 35 3e 98 72 78 5f   '....k....5>.rx_
    0010 - 5b 4d dd df 2a 0a 1e f9-5d 33 84 7e e5 0f f8 b2   [M..*...]3.~....
    0020 - da ba 5c fd 7b 3d d9 d3-f0 6a 7f 92 62 34 e2 f7   ..\.{=...j..b4..
    0030 - 0b dc b5 89 bc 72 7f df-46 09 00 44 35 ba 08 9e   .....r..F..D5...
    0040 - 0c d3 12 56 83 a4 5d 3e-34 4c 6c d9 6b cc d0 5f   ...V..]>4Ll.k.._
    0050 - ec 3e 3e 64 2a 9d 58 d5-05 25 7b d6 06 07 6a cc   .>>d*.X..%{...j.
    0060 - 77 4f 4e ca bb 4d b3 c1-77 64 95 62 68 aa 6b 6d   wON..M..wd.bh.km
    0070 - 5e 1e 5f 23 e2 19 50 7c-44 01 0a bc ee 17 b3 c5   ^._#..P|D.......
    0080 - bc bb 10 d8 b9 69 dc cb-fa 22 0a d7 35 05 ec 4d   .....i..."..5..M
    0090 - c4 9d 59 eb 6c 07 c8 4d-36 30 cb 8f e3 ca 6b 20   ..Y.l..M60....k 
    00a0 - 16 67 82 34 6e 70 db f8-2c 0a 9d 97 8e 86 cc 7b   .g.4np..,......{
    00b0 - a8 e6 4a 51 41 ae ea 62-3d a4 59 99 79 c1 ba 6f   ..JQA..b=.Y.y..o

    Start Time: 1631736170
    Timeout   : 7200 (sec)
    Verify return code: 26 (unsupported certificate purpose)
    Extended master secret: no
    Max Early Data: 0
---
SSL_connect:SSLv3/TLS read server session ticket
read R BLOCK

@NickWaterton
Copy link
Owner

NickWaterton commented Sep 23, 2021

I've looked into this a bit. I don't think TLS is the problem, the connection seems to be made correctly.

You don't need a certificate to connect to the iRobot MQTT server, it doesn't use them, it's just using TLS encryption, it doesn't verify certificates.

What should happen is that we connect (using TLS) to port 8883 on the Roomba (which seems to work), then we send an MQTT reserved command (0xf0, followed by payload size 0x05) with a magic packet payload 0xefcc3b2900.

The Roomba should respond with the same payload (in this case f005efcc3b2900 ie 7 bytes) followed by the password (30 bytes). It seems that the Roomba is responding with the expected 7 bytes, but is not then sending the password, and the socket connection times out (10 second timeout).

I can't tell what happens from your pcap file - there doesn't seem to be any TLS negotiation packets or anything. Maybe if you try the openssl connection (but without the certificates) we might get something, but it's possible that iRobot has changed the way the Roomba password is retrieved. What we really need is a raw pcap of the exchange between the app and the Roomba when it sets up the connection for the first time.

You could try getting the password after a reset (press the clean button for 10 seconds) - sometimes this is all it needs.

Unfortunately, I don't have a j7 to test things out on.

We may have to wait for someone with a j7 to figure it out - it probably isn't that different from what we currently have.

@Mechotronic
Copy link

Mechotronic commented Sep 27, 2021

Is this an OpenSSL issue? Could just be an issue with our tools?
https://serverfault.com/questions/989230/openssl-s-client-returns-unsupported-certificate-purpose-on-one-machine-but-work
https://trac.nginx.org/nginx/ticket/1760#comment:5

EDIT: I'm a bit naive on the cert intricacies, but maybe something here as well with the way the cert was built?
https://security.stackexchange.com/questions/237742/unsupported-certificate-purpose-for-nginx-client-auth

@DiegoCarrilho
Copy link

Another way to get password is using the IOS app Thor to sniff ssl connection on roomba app start, you dont need to reset the device.

01C0F85E-6377-42EE-8808-A10AD9539426
B9AE0573-AA50-4D0D-BE42-57F811BDEB5C

@NickWaterton
Copy link
Owner

NickWaterton commented Oct 3, 2021 via email

@binary64
Copy link

The j7 has just one button indeed. When it's docked, and I hold the button..

  • After 2 seconds, I get a happy chime and blue animated light
  • After ~10-15 seconds, I get a chime and a white light

Output using npm install -g dorita980:-

$ get-roomba-password 192.168.1.136
Make sure your robot is on the Home Base and powered on (green lights on). Then
press and hold the HOME button (or DOCK+SPOT on some models) on your robot until
 it plays a series of tones (about 2 seconds). Release the button and your robot
 will flash WIFI light.
Then press any key here...
Robot Data:
{
  ver: '4',
  hostname: 'iRobot-XXX',
  robotname: 'Roomba',
  robotid: 'XXX',
  ip: '192.168.1.136',
  mac: 'XXX',
  sw: 'sapphire+1.0.17+Firmware-Production+52',
  sku: 'j755840',
  nc: 0,
  proto: 'mqtt',
  cap: {
    binFullDetect: 2,
    dockComm: 1,
    edge: 0,
    maps: 3,
    pmaps: 5,
    tLine: 2,
    area: 1,
    eco: 1,
    multiPass: 2,
    pose: 1,
    team: 1,
    pp: 0,
    lang: 2,
    '5ghz': 1,
    prov: 3,
    sched: 1,
    svcConf: 1,
    ota: 2,
    log: 2,
    langOta: 0,
    expectingUserConf: 1
  },
  cloudConnState: 14,
  blid: 'XXX'
}

If a dev would like to work closely with me to debug this thing, I can follow some instructions, maybe over a screenshare.

@mpreissner
Copy link

Following, as I've got the same issue. Can easily get packet captures for any device on the network, just need to know what to collect.

@NickWaterton
Copy link
Owner

A packet capture (decrypted) of the interaction with the j7 when you try to retrieve the password would be useful.

Also a capture of what happens when a new j7 is added to the app may shed some light on how the password is retrieved by the app.

It seems that pressing the start button is not putting the j7 in password retrieval mode, like pressing the home button does.

It’s hard to troubleshoot without actually having a j7.

a Wireshark .pcap file is fine, or a text file.

@mpreissner
Copy link

I’ll see what I can do about getting some captures. I did use Charles Proxy on my iPad to sniff what was happening when I launch the iRobot app. I believe I have gotten my blid and password (will try tomorrow and see if I can get the plugin to work), but also found some aws access keys. From what I can tell, the app logs into AWS cognito, and retrieves information about the robots linked to the account, including the password. If this is the case, then maybe a more effective method of getting the necessary info would be to have the plugin simulate logging into the iRobot app and parsing the json output for the necessary fields. No need to interact with the roomba, press buttons, sniff traffic, etc. Will check tomorrow and see if I can link my homebridge to my j7 and report back.

@uvNikita
Copy link

Here are some instructions on how to get BLID and password with mitmproxy if you are using Android 11 and don't want/trust to download apks from external websites like apkpure: https://gist.github.com/uvNikita/f9dbbc09cdd71cbcac3a24beac62f355.

@ljmerza
Copy link

ljmerza commented Oct 31, 2021

The command works for my j7+but there's no password

hostname=iRobot-xxx, firmware=sapphire+1.0.20+Firmware-Production+54, ip=192.168.1.122, mac=xx, 
robot_name=Roomba, sku=j755020, capabilities={'binFullDetect': 2, 'dockComm': 1, 'edge': 0, 'maps': 3, 'pmaps': 5, 'tLine': 2,
 'area': 1, 'eco': 1, 'multiPass': 2, 'pose': 1, 'team': 1, 'pp': 0, 'lang': 2, '5ghz': 1, 'prov': 3, 'sched': 1, 'svcConf': 1, 'ota': 2, 'log': 2, 
'langOta': 0, 'expectingUserConf': 1}, blid=xxx, password=

@alexlmiller
Copy link

Following this as I'm having the same issue on a Roomba 694

@NickWaterton
Copy link
Owner

Should work on a 600 series Roomba. How old is it? And what firmware version does it have?

@alexlmiller
Copy link

@NickWaterton my bad, turns out that being on separate VLANs was the problem. Stuff passes fine between them for control but not the BLID/Password discovery. All good now

@mjg59
Copy link

mjg59 commented Dec 7, 2021

@NickWaterton
Copy link
Owner

Thank you Matthew! @mjg59 that solves the whole problem.

Code is now updated to use cloud passwords. You have to run:

./password.py <login> <password>

Where <login> and <password> are your iRobot account login and password. This will then fetch the passwords(s) from the iRobots aws cloud. The config.ini file will be updated.

@Mechotronic
Copy link

I can confirm on my J7+ the password worked in the HomeAssistant integration with the new method. Thanks to everyone for the great work!

@mermelmadness
Copy link

mermelmadness commented Feb 6, 2022

Thank you Matthew! @mjg59 that solves the whole problem.

Code is now updated to use cloud passwords. You have to run:

./password.py <login> <password>

Where <login> and <password> are your iRobot account login and password. This will then fetch the passwords(s) from the iRobots aws cloud. The config.ini file will be updated.

Are there dumbed down instructions for making this work? I'm not good with code. I can run CLI commands easily enough through SSH but I don't see any instructions for how to use what @mjg59 linked.

@NickWaterton
Copy link
Owner

NickWaterton commented Feb 6, 2022

This assumes you have downloaded Roomba980-Python, and you have a console window open, in the roomba directory (the one with password.py in it).

You literally type ./password.py login password
Where login is your iRobot login and password is your iRobot password.

That's it. Nothing else to do. Your Roomba IP address, blid, Roomba password etc are now all in the config.ini file.

Everything should now work as described in the README file.

@mermelmadness
Copy link

Thank you. That did it.

@tessanadik
Copy link

Another way to get password is using the IOS app Thor to sniff ssl connection on roomba app start, you dont need to reset the device.

01C0F85E-6377-42EE-8808-A10AD9539426 B9AE0573-AA50-4D0D-BE42-57F811BDEB5C

I did this method, but not seeing a robots or password field in the json

@Punkerschaf
Copy link

I had the same problem, but got it working this way on:
Following the instructions to execute the script in commandline (macOS):

  • cloning the whole git
  • manual installing requirements.txt via pip3
  • manual installing requests via pip3

I had an error using an old version if pip. Updating pip, did it again.
Trying python3 password.py --> Error:

Traceback (most recent call last):
  File "/Users/username/Roomba980-Python/roomba/password.py", line 293, in <module>
    main()
  File "/Users/username/Roomba980-Python/roomba/password.py", line 290, in main
    get_passwd.get_password()
  File "/Users/username/Roomba980-Python/roomba/password.py", line 119, in get_password
    iRobot.login()
  File "/Users/username/Roomba980-Python/roomba/getcloudpassword.py", line 107, in login
    uid = response['UID']
KeyError: 'UID'

Then executing not ./password.py, but directly
python3 getcloudpassword.py 'irobotmailadress' 'irobotpassword'

While trying all this, I copied my commands to an RTF, where the upper single quotation marks 'login' got changed to ‚login‘. Maybe this was also an issue. After correcting this ./getcloudpassword.py was working immediately.

The only issue I noticed was, that there no config.ini was created. So I saved my whole command line output.

@benlbaum
Copy link

I had the same problem, but got it working this way on: Following the instructions to execute the script in commandline (macOS):

  • cloning the whole git
  • manual installing requirements.txt via pip3
  • manual installing requests via pip3

I had an error using an old version if pip. Updating pip, did it again. Trying python3 password.py --> Error:

Traceback (most recent call last):
  File "/Users/username/Roomba980-Python/roomba/password.py", line 293, in <module>
    main()
  File "/Users/username/Roomba980-Python/roomba/password.py", line 290, in main
    get_passwd.get_password()
  File "/Users/username/Roomba980-Python/roomba/password.py", line 119, in get_password
    iRobot.login()
  File "/Users/username/Roomba980-Python/roomba/getcloudpassword.py", line 107, in login
    uid = response['UID']
KeyError: 'UID'

Then executing not ./password.py, but directly python3 getcloudpassword.py 'irobotmailadress' 'irobotpassword'

While trying all this, I copied my commands to an RTF, where the upper single quotation marks 'login' got changed to ‚login‘. Maybe this was also an issue. After correcting this ./getcloudpassword.py was working immediately.

The only issue I noticed was, that there no config.ini was created. So I saved my whole command line output.

I finally got this working by using double quotes around my username and password.

python getcloudpassword.py "username" "password"

Everything else gave me the same KeyError: 'UID' that you were getting.

@TheFitzZZ
Copy link

TheFitzZZ commented Mar 28, 2023

Did anyone not from the US test this? I have a j7+ and a m6, both available via the app, but using this method I get:

2023-03-28 16:32:34 INFO [Roomba.Password] Got cloud info: {}
2023-03-28 16:32:34 INFO [Roomba.Password] Found 0 roombas defined in the cloud
2023-03-28 16:32:34 WARNING [Roomba.Password] No Roombas found on network, try again...

The M6 password was no issue, but the j7 still eludes my grasp :-)

Asking for the region, as I saw "/v1/discover/endpoints?country_code=US" in the getcloudpassword.py. Changing it to DE (since I am in Germany) didn't help, still 0.

Any ideas?

@LucaDiba
Copy link

LucaDiba commented Apr 5, 2023

I was getting the same KeyError: 'UID' issue:

Traceback (most recent call last):
  File "./getcloudpassword.py", line 186, in <module>
    main()
  File "./getcloudpassword.py", line 176, in main
    irobot.login()
  File "./getcloudpassword.py", line 108, in login
    uid = response['UID']
KeyError: 'UID'

Using quotes for username and password didn't work for me.
I had to hard-code my credentials into the getcloudpassword.py file at lines 92-93:

data = {"apiKey": self.apikey,
        "targetenv": "mobile",
        "loginID": self.username,  # <- changed with: "loginID": "my_email"
        "password": self.password, # <- changed with: "password": "my_password"
        "format": "json",
        "targetEnv": "mobile",
}

@Boldfor
Copy link

Boldfor commented Jul 25, 2023

In case this helps someone (was trying out multiple things unsuccessfully), the following worked for me:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests