Open AndreaCCIE opened 1 year ago
I have the same issue
I really hope this project is not dead, @wo-d
I think not, but there are still some issues in it. Hope it gets resolved because it's a very good concept
Hello, the project isn't dead per se, more that I don't have a good way to continue developing. I created this for a neighbor to receive notifications for their non video arlo doorbell to their apple devices. They gave me access to their arlo email account and one of their ipad devices while I developed, tested they received a notification, and I wrapped up some loose ends. I'm an android/nix/windows home LOL.
I can reach out to my neighbor and see if it's still working for them. In the meantime if you add the "debug": true,
setting to the configuration do you get any more log information?
wow, amazing that you helped your neighbour. I'm hooked to the apple ecosystem😂 (I use a windows laptop tho, so no judgment lol) and just for fun I am trying to connect everything with this system, I'm done for the most part with a lot of usage of my homebridge, but the camera's would be amazing if I could connect them with this system. Just for fun, so offcourse I will keep following your repository for future changes, I love how far you got, and would love to see what you make/change in the future.
I will definitely try the debug mode and check if I get some interesting logs, and will share these for sure!
Here is the error code I get, so maybe this helps. it's something with the http request. I removed the credentials, just out of safety, but they do work. checked this multiple times. Hopefully this is helpfull, who knows. If you need me to try anything, just let me know :)
unable to login to Arlo using provided credentials.
[6/10/2023, `11:23:48` PM] [homebridge-arlo-v2] AxiosError: Request failed with status code 403
at settle (/var/lib/homebridge/node_modules/homebridge-arlo-v2/node_modules/axios/lib/core/settle.js:19:12)
at Unzip.handleStreamEnd (/var/lib/homebridge/node_modules/homebridge-arlo-v2/node_modules/axios/lib/adapters/http.js:570:11)
at Unzip.emit (node:events:525:35)
at endReadableNT (node:internal/streams/readable:1359:12)
at processTicksAndRejections (node:internal/process/task_queues:82:21) {
code: 'ERR_BAD_REQUEST',
config: {
transitional: {
silentJSONParsing: true,
forcedJSONParsing: true,
clarifyTimeoutError: false
},
adapter: [ 'xhr', 'http' ],
transformRequest: [ [Function: transformRequest] ],
transformResponse: [ [Function: transformResponse] ],
timeout: 0,
xsrfCookieName: 'XSRF-TOKEN',
xsrfHeaderName: 'X-XSRF-TOKEN',
maxContentLength: -1,
maxBodyLength: -1,
env: { FormData: [Function], Blob: [class Blob] },
validateStatus: [Function: validateStatus],
headers: AxiosHeaders {
Accept: 'application/json, text/plain, */*',
'Content-Type': 'application/json',
'Auth-Version': '2',
DNT: '1',
Origin: 'https://my.arlo.com',
Referer: 'https://my.arlo.com/',
Source: 'arloCamWeb',
TE: 'Trailers',
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_1_2 like Mac OS X) AppleWebKit/604.3.5 (KHTML, like Gecko) Mobile/15B202 NETGEAR/v1 (iOS Vuezone)',
schemaVersion: '1',
'Content-Length': '105',
'Accept-Encoding': 'gzip, compress, deflate, br'
},
jar: CookieJar {
rejectPublicSuffixes: true,
enableLooseMode: false,
allowSpecialUseDomain: true,
store: { idx: {
'ocapi-app.arlo.com': {
'/': {
__cf_bm: Cookie="__cf_bm=Lz7vYrfQQpDyP9t2ZyLOxbKTdA6HmgLbfgsFnVwbSpo-1686432228-0-AQH1+Wvoxew2eGS7qi/Zzd5AmUvlsPNaHko5jozDg8Jj/TqvLYyFNowtkM5/fNqWqsK6Y/+Wfd6FJqjN0FPS+ds=; Expires=Sat, 10 Jun 2023 21:53:48 GMT; Domain=ocapi-app.arlo.com; Path=/; Secure; HttpOnly; hostOnly=false; aAge=190ms; cAge=190ms"
}
}
} },
prefixSecurity: 'silent',
_cloneSync: [Function (anonymous)],
_importCookiesSync: [Function (anonymous)],
getCookiesSync: [Function (anonymous)],
getCookieStringSync: [Function (anonymous)],
getSetCookieStringsSync: [Function (anonymous)],
removeAllCookiesSync: [Function (anonymous)],
setCookieSync: [Function (anonymous)],
serializeSync: [Function (anonymous)]
},
data: '{"EnvSource":"prod","email":"(email)","language":"en","password":"(password)"}',
method: 'post',
url: 'https://ocapi-app.arlo.com/api/auth',
withCredentials: true,
httpAgent: CookieAgent {
_events: [Object: null prototype],
_eventsCount: 2,
_maxListeners: undefined,
defaultPort: 80,
protocol: 'http:',
options: [Object: null prototype],
requests: [Object: null prototype] {},
sockets: [Object: null prototype] {},
freeSockets: [Object: null prototype] {},
keepAliveMsecs: 1000,
keepAlive: false,
maxSockets: Infinity,
maxFreeSockets: 256,
scheduling: 'lifo',
maxTotalSockets: Infinity,
totalSocketCount: 0,
[Symbol(kCapture)]: false,
[Symbol(cookieOptions)]: [Object]
},
httpsAgent: CookieAgent {
_events: [Object: null prototype],
_eventsCount: 2,
_maxListeners: undefined,
defaultPort: 443,
protocol: 'https:',
options: [Object: null prototype],
requests: [Object: null prototype] {},
sockets: [Object: null prototype] {},
freeSockets: [Object: null prototype] {},
keepAliveMsecs: 1000,
keepAlive: false,
maxSockets: Infinity,
maxFreeSockets: 256,
scheduling: 'lifo',
maxTotalSockets: Infinity,
totalSocketCount: 0,
maxCachedSessions: 100,
_sessionCache: [Object],
[Symbol(kCapture)]: false,
[Symbol(cookieOptions)]: [Object]
}
},
request: <ref *1> ClientRequest {
_events: [Object: null prototype] {
abort: [Function (anonymous)],
aborted: [Function (anonymous)],
connect: [Function (anonymous)],
error: [Function (anonymous)],
socket: [Function (anonymous)],
timeout: [Function (anonymous)],
finish: [Function: requestOnFinish]
},
_eventsCount: 7,
_maxListeners: undefined,
outputData: [],
outputSize: 0,
writable: true,
destroyed: true,
_last: true,
chunkedEncoding: false,
shouldKeepAlive: false,
maxRequestsOnConnectionReached: false,
_defaultKeepAlive: true,
useChunkedEncodingByDefault: true,
sendDate: false,
_removedConnection: false,
_removedContLen: false,
_removedTE: false,
strictContentLength: false,
_contentLength: '105',
_hasBody: true,
_trailer: '',
finished: true,
_headerSent: true,
_closed: true,
socket: TLSSocket {
_tlsOptions: [Object],
_secureEstablished: true,
_securePending: false,
_newSessionPending: false,
_controlReleased: true,
secureConnecting: false,
_SNICallback: null,
servername: 'ocapi-app.arlo.com',
alpnProtocol: false,
authorized: true,
authorizationError: null,
encrypted: true,
_events: [Object: null prototype],
_eventsCount: 9,
connecting: false,
_hadError: false,
_parent: null,
_host: 'ocapi-app.arlo.com',
_closeAfterHandlingError: false,
_readableState: [ReadableState],
_maxListeners: undefined,
_writableState: [WritableState],
allowHalfOpen: false,
_sockname: null,
_pendingData: null,
_pendingEncoding: '',
server: undefined,
_server: null,
ssl: null,
_requestCert: true,
_rejectUnauthorized: true,
parser: null,
_httpMessage: [Circular *1],
write: [Function: writeAfterFIN],
[Symbol(res)]: null,
[Symbol(verified)]: true,
[Symbol(pendingSession)]: null,
[Symbol(async_id_symbol)]: 30,
[Symbol(kHandle)]: null,
[Symbol(lastWriteQueueSize)]: 0,
[Symbol(timeout)]: null,
[Symbol(kBuffer)]: null,
[Symbol(kBufferCb)]: null,
[Symbol(kBufferGen)]: null,
[Symbol(kCapture)]: false,
[Symbol(kSetNoDelay)]: false,
[Symbol(kSetKeepAlive)]: true,
[Symbol(kSetKeepAliveInitialDelay)]: 60,
[Symbol(kBytesRead)]: 2914,
[Symbol(kBytesWritten)]: 605,
[Symbol(connect-options)]: [Object]
},
_header: 'POST /api/auth HTTP/1.1\r\n' +
'Accept: application/json, text/plain, */*\r\n' +
'Content-Type: application/json\r\n' +
'Auth-Version: 2\r\n' +
'DNT: 1\r\n' +
'Origin: https://my.arlo.com\r\n' +
'Referer: https://my.arlo.com/\r\n' +
'Source: arloCamWeb\r\n' +
'TE: Trailers\r\n' +
'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_1_2 like Mac OS X) AppleWebKit/604.3.5 (KHTML, like Gecko) Mobile/15B202 NETGEAR/v1 (iOS Vuezone)\r\n' +
'schemaVersion: 1\r\n' +
'Content-Length: 105\r\n' +
'Accept-Encoding: gzip, compress, deflate, br\r\n' +
'Host: ocapi-app.arlo.com\r\n' +
'Connection: close\r\n' +
'\r\n',
_keepAliveTimeout: 0,
_onPendingData: [Function: nop],
agent: CookieAgent {
_events: [Object: null prototype],
_eventsCount: 2,
_maxListeners: undefined,
defaultPort: 443,
protocol: 'https:',
options: [Object: null prototype],
requests: [Object: null prototype] {},
sockets: [Object: null prototype] {},
freeSockets: [Object: null prototype] {},
keepAliveMsecs: 1000,
keepAlive: false,
maxSockets: Infinity,
maxFreeSockets: 256,
scheduling: 'lifo',
maxTotalSockets: Infinity,
totalSocketCount: 0,
maxCachedSessions: 100,
_sessionCache: [Object],
[Symbol(kCapture)]: false,
[Symbol(cookieOptions)]: [Object]
},
socketPath: undefined,
method: 'POST',
maxHeaderSize: undefined,
insecureHTTPParser: undefined,
joinDuplicateHeaders: undefined,
path: '/api/auth',
_ended: true,
res: IncomingMessage {
_readableState: [ReadableState],
_events: [Object: null prototype],
_eventsCount: 4,
_maxListeners: undefined,
socket: [TLSSocket],
httpVersionMajor: 1,
httpVersionMinor: 1,
httpVersion: '1.1',
complete: true,
rawHeaders: [Array],
rawTrailers: [],
joinDuplicateHeaders: undefined,
aborted: false,
upgrade: false,
url: '',
method: null,
statusCode: 403,
statusMessage: 'Forbidden',
client: [TLSSocket],
_consuming: true,
_dumped: false,
req: [Circular *1],
responseUrl: 'https://ocapi-app.arlo.com/api/auth',
redirects: [],
[Symbol(kCapture)]: false,
[Symbol(kHeaders)]: [Object],
[Symbol(kHeadersCount)]: 26,
[Symbol(kTrailers)]: null,
[Symbol(kTrailersCount)]: 0
},
aborted: false,
timeoutCb: null,
upgradeOrConnect: false,
parser: null,
maxHeadersCount: null,
reusedSocket: false,
host: 'ocapi-app.arlo.com',
protocol: 'https:',
_implicitHeader: [Function (anonymous)],
emit: [Function (anonymous)],
_redirectable: Writable {
_writableState: [WritableState],
_events: [Object: null prototype],
_eventsCount: 3,
_maxListeners: undefined,
_options: [Object],
_ended: true,
_ending: true,
_redirectCount: 0,
_redirects: [],
_requestBodyLength: 105,
_requestBodyBuffers: [],
_onNativeResponse: [Function (anonymous)],
_currentRequest: [Circular *1],
_currentUrl: 'https://ocapi-app.arlo.com/api/auth',
[Symbol(kCapture)]: false
},
[Symbol(kCapture)]: false,
[Symbol(kBytesWritten)]: 0,
[Symbol(kNeedDrain)]: false,
[Symbol(corked)]: 0,
[Symbol(kOutHeaders)]: [Object: null prototype] {
accept: [Array],
'content-type': [Array],
'auth-version': [Array],
dnt: [Array],
origin: [Array],
referer: [Array],
source: [Array],
te: [Array],
'user-agent': [Array],
schemaversion: [Array],
'content-length': [Array],
'accept-encoding': [Array],
host: [Array]
},
[Symbol(errored)]: null,
[Symbol(kUniqueHeaders)]: null
},
response: {
status: 403,
statusText: 'Forbidden',
headers: AxiosHeaders {
date: 'Sat, 10 Jun 2023 21:23:48 GMT',
'content-type': 'text/html; charset=UTF-8',
'transfer-encoding': 'chunked',
connection: 'close',
'x-frame-options': 'SAMEORIGIN',
'referrer-policy': 'same-origin',
'cache-control': 'private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0',
expires: 'Thu, 01 Jan 1970 00:00:01 GMT',
'set-cookie': [Array],
vary: 'Accept-Encoding',
server: 'cloudflare',
'cf-ray': '7d54ad7489beb9c0-BRU'
},
config: {
transitional: [Object],
adapter: [Array],
transformRequest: [Array],
transformResponse: [Array],
timeout: 0,
xsrfCookieName: 'XSRF-TOKEN',
xsrfHeaderName: 'X-XSRF-TOKEN',
maxContentLength: -1,
maxBodyLength: -1,
env: [Object],
validateStatus: [Function: validateStatus],
headers: [AxiosHeaders],
jar: [CookieJar],
data: '{"EnvSource":"prod","email":"(email)","language":"en","password":"(password)"}',
method: 'post',
url: 'https://ocapi-app.arlo.com/api/auth',
withCredentials: true,
httpAgent: [CookieAgent],
httpsAgent: [CookieAgent]
},
request: <ref *1> ClientRequest {
_events: [Object: null prototype],
_eventsCount: 7,
_maxListeners: undefined,
outputData: [],
outputSize: 0,
writable: true,
destroyed: true,
_last: true,
chunkedEncoding: false,
shouldKeepAlive: false,
maxRequestsOnConnectionReached: false,
_defaultKeepAlive: true,
useChunkedEncodingByDefault: true,
sendDate: false,
_removedConnection: false,
_removedContLen: false,
_removedTE: false,
strictContentLength: false,
_contentLength: '105',
_hasBody: true,
_trailer: '',
finished: true,
_headerSent: true,
_closed: true,
socket: [TLSSocket],
_header: 'POST /api/auth HTTP/1.1\r\n' +
'Accept: application/json, text/plain, */*\r\n' +
'Content-Type: application/json\r\n' +
'Auth-Version: 2\r\n' +
'DNT: 1\r\n' +
'Origin: https://my.arlo.com\r\n' +
'Referer: https://my.arlo.com/\r\n' +
'Source: arloCamWeb\r\n' +
'TE: Trailers\r\n' +
'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_1_2 like Mac OS X) AppleWebKit/604.3.5 (KHTML, like Gecko) Mobile/15B202 NETGEAR/v1 (iOS Vuezone)\r\n' +
'schemaVersion: 1\r\n' +
'Content-Length: 105\r\n' +
'Accept-Encoding: gzip, compress, deflate, br\r\n' +
'Host: ocapi-app.arlo.com\r\n' +
'Connection: close\r\n' +
'\r\n',
_keepAliveTimeout: 0,
_onPendingData: [Function: nop],
agent: [CookieAgent],
socketPath: undefined,
method: 'POST',
maxHeaderSize: undefined,
insecureHTTPParser: undefined,
joinDuplicateHeaders: undefined,
path: '/api/auth',
_ended: true,
res: [IncomingMessage],
aborted: false,
timeoutCb: null,
upgradeOrConnect: false,
parser: null,
maxHeadersCount: null,
reusedSocket: false,
host: 'ocapi-app.arlo.com',
protocol: 'https:',
_implicitHeader: [Function (anonymous)],
emit: [Function (anonymous)],
_redirectable: [Writable],
[Symbol(kCapture)]: false,
[Symbol(kBytesWritten)]: 0,
[Symbol(kNeedDrain)]: false,
[Symbol(corked)]: 0,
[Symbol(kOutHeaders)]: [Object: null prototype],
[Symbol(errored)]: null,
[Symbol(kUniqueHeaders)]: null
},
data: '<!DOCTYPE html>\n' +
'<html lang="en-US">\n' +
' <head>\n' +
' <title>Access denied</title>\n' +
' <meta http-equiv="X-UA-Compatible" content="IE=Edge" />\n' +
' <meta name="robots" content="noindex, nofollow" />\n' +
' <meta name="viewport" content="width=device-width,initial-scale=1" />\n' +
' <link rel="stylesheet" href="/cdn-cgi/styles/errors.css" media="screen" />\n' +
' <script>\n' +
'(function(){if(document.addEventListener&&window.XMLHttpRequest&&JSON&&JSON.stringify){var e=function(a){var c=document.getElementById("error-feedback-survey"),d=document.getElementById("error-feedback-success"),b=new XMLHttpRequest;a={event:"feedback clicked",properties:{errorCode:1020,helpful:a,version:5}};b.open("POST","https://sparrow.cloudflare.com/api/v1/event");b.setRequestHeader("Content-Type","application/json");b.setRequestHeader("Sparrow-Source-Key","c771f0e4b54944bebf4261d44bd79a1e");\n' +
'b.send(JSON.stringify(a));c.classList.add("feedback-hidden");d.classList.remove("feedback-hidden")};document.addEventListener("DOMContentLoaded",function(){var a=document.getElementById("error-feedback"),c=document.getElementById("feedback-button-yes"),d=document.getElementById("feedback-button-no");"classList"in a&&(a.classList.remove("feedback-hidden"),c.addEventListener("click",function(){e(!0)}),d.addEventListener("click",function(){e(!1)}))})}})();\n' +
'</script>\n' +
'\n' +
' <script>\n' +
' (function(){function d(c){var b=document.getElementById("copy-label"),a=document.getElementById("cf-details-wrapper-expandable");c.target.checked?a.classList.add("expanded"):(a.classList.remove("expanded"),b.innerText="Click to copy")}if(document.addEventListener){var e=function(){var c=document.getElementById("copy-label");var b=document.getElementById("error-details").textContent;if(navigator.clipboard)navigator.clipboard.writeText(b);else{var a=document.createElement("textarea");a.value=b;a.style.top="0";a.style.left="0";a.style.position="fixed";document.body.appendChild(a);a.focus();a.select();document.execCommand("copy");document.body.removeChild(a)}c.innerText="Copied text to clipboard"};document.addEventListener("DOMContentLoaded",function(){var c=document.getElementById("error-details-checkbox"),b=document.getElementById("click-to-copy-btn");document.getElementById("copy-label").classList.remove("hidden");c.addEventListener("change",d);b.addEventListener("click",e)})}})();\n' +
' </script>\n' +
' <script defer src="https://performance.radar.cloudflare.com/beacon.js"></script>\n' +
' </head>\n' +
' <body>\n' +
' <div class="cf-main-wrapper" role="main">\n' +
' <div class="cf-header cf-section">\n' +
' <div class="cf-error-title">\n' +
' <h1>Access denied</h1>\n' +
' <span class="cf-code-label">Error code <span>1020</span></span>\n' +
' </div>\n' +
' <div class="cf-error-description">\n' +
' <p>You do not have access to ocapi-app.arlo.com.</p><p>The site owner may have set restrictions that prevent you from accessing the site.</p>\n' +
' </div>\n' +
' </div>\n' +
' </div>\n' +
'\n' +
' <div class="cf-details-wrapper">\n' +
' <div class="cf-section" role="region">\n' +
' <div class="cf-expandable" id="cf-details-wrapper-expandable">\n' +
' <label for="error-details-checkbox" title="Error details" class="cf-expandable-btn">\n' +
' <p class="cf-dropdown-title">Error details</p>\n' +
' <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAElBMVEUAAAAwMDAxMTEyMjIwMDAxMTF+89HTAAAABXRSTlMAf2CAMKS61bwAAABTSURBVCjPzcq7DcAgFENR5zMATfo06TNCViAS+6+CeFi6gglw4eLqaPVtaQpXnkApaQT/k0dw70EAUhCA1AnABGACMAGYAEwAkCOAydv+I5xaZhXWbQrD80TkkQAAAABJRU5ErkJggg=="\n' +
' class="cf-caret-icon" id="caret-icon" alt="Caret icon" />\n' +
' </label>\n' +
'\n' +
' <input id="error-details-checkbox" class="hidden" type="checkbox">\n' +
'\n' +
' <div class="cf-expandable-error-info hidden">\n' +
' <p class="cf-error-copy-description">Provide the site owner this information.</p>\n' +
' <button class="cf-click-to-copy-btn" id="click-to-copy-btn" title="Click to copy" type="button">\n' +
'<div class="cf-error-wrapper" id="error-details"><p class="cf-error-details-endpoint">I got an error when visiting ocapi-app.arlo.com/api/auth.</p>\n' +
'\n' +
'<p>Error code: 1020</p>\n' +
'<p>Ray ID: 7d54ad7489beb9c0</p>\n' +
'<p>Country: BE</p>\n' +
'<p>Data center: bru01</p>\n' +
'<p>IP: 81.247.109.18</p>\n' +
'<p>Timestamp: 2023-06-10 21:23:48 UTC</p>\n' +
'</div>\n' +
' <p class="cf-copy-label hidden" id="copy-label">Click to copy</p>\n' +
' </button>\n' +
' </div>\n' +
' </div>\n' +
' </div>\n' +
'\n' +
' <div class="clearfix cf-footer cf-section" role="contentinfo">\n' +
' <div class="cf-column">\n' +
' <div class="feedback-hidden py-8 text-center" id="error-feedback">\n' +
' <div id="error-feedback-survey" class="footer-line-wrapper">\n' +
' Was this page helpful?\n' +
' <button class="border border-solid bg-white cf-button cursor-pointer ml-4 px-4 py-2 rounded" id="feedback-button-yes" type="button">Yes</button>\n' +
' <button class="border border-solid bg-white cf-button cursor-pointer ml-4 px-4 py-2 rounded" id="feedback-button-no" type="button">No</button>\n' +
' </div>\n' +
' <div class="feedback-success feedback-hidden" id="error-feedback-success">\n' +
' Thank you for your feedback!\n' +
' </div>\n' +
'</div>\n' +
'\n' +
' </div>\n' +
' <div class="cf-column cf-footer-line-wrapper text-center">\n' +
' <p>\n' +
' Performance & security by <a rel="noopener noreferrer" href="https://www.cloudflare.com?utm_source=1020_error" target="_blank">Cloudflare <img class="external-link" title="Opens in new tab" src="/cdn-cgi/images/external.png" alt="External link"></a>\n' +
' </p>\n' +
' </div>\n' +
' </div>\n' +
' </div>\n' +
'</body>\n' +
'</html>\n'
}
}
/var/lib/homebridge/node_modules/homebridge-arlo-v2/node_modules/axios/lib/core/settle.js:19
reject(new AxiosError(
^
AxiosError: Request failed with status code 401
at settle (/var/lib/homebridge/node_modules/homebridge-arlo-v2/node_modules/axios/lib/core/settle.js:19:12)
at IncomingMessage.handleStreamEnd (/var/lib/homebridge/node_modules/homebridge-arlo-v2/node_modules/axios/lib/adapters/http.js:570:11)
at IncomingMessage.emit (node:events:525:35)
at endReadableNT (node:internal/streams/readable:1359:12)
at processTicksAndRejections (node:internal/process/task_queues:82:21)
[6/10/2023, 11:23:48 PM] [homebridge-arlo-v2] Child bridge process ended
[6/10/2023, 11:23:48 PM] [homebridge-arlo-v2] Process Ended. Code: 1, Signal: null
Hi there. Thanks for this plugin. I have the same issue as @AndreaCCIE. Any update on a possible fix?
Same here: ERROR Unable to login to Arlo using provided credentials. ERROR AxiosError: Request failed with status code 403 WARNING unhandled rejection: AxiosError: Request failed with status code 401
The problem is that the arlo-api library doesn't have anything to bypass the cloudfare anti-bot protection. I'd gladly put up a PR fixing that, but I'm having a hard time finding a library to bypass cloudfare in JS, they're either paid or old. If anyone has suggestions of libs that do that, I'd appreciate the help.
Same issue. Somehow Scrypted project is able to login to the Arlo cloud....
same issues here
Same issue I think. I created a user for my Arlo to be used in Homebridge. When I start Homebridge and this addon I receive an MFA code in mt email but its like the addon cannot fetch the code. Imap is enabled on my google account
This is my error:
[7/12/2024, 11:02:40 AM] [Arlo v2] Unable to login to Arlo using provided credentials. [7/12/2024, 11:02:40 AM] [Arlo v2] Error: Invalid credentials (Failure) at Connection._resTagged (/homebridge/node_modules/homebridge-arlo-v2/node_modules/imap/lib/Connection.js:1502:11) at Parser.<anonymous> (/homebridge/node_modules/homebridge-arlo-v2/node_modules/imap/lib/Connection.js:194:10) at Parser.emit (node:events:513:28) at Parser._resTagged (/homebridge/node_modules/homebridge-arlo-v2/node_modules/imap/lib/Parser.js:175:10) at Parser._parse (/homebridge/node_modules/homebridge-arlo-v2/node_modules/imap/lib/Parser.js:139:16) at Parser._tryread (/homebridge/node_modules/homebridge-arlo-v2/node_modules/imap/lib/Parser.js:82:15) at TLSSocket.Parser._cbReadable (/homebridge/node_modules/homebridge-arlo-v2/node_modules/imap/lib/Parser.js:53:12) at TLSSocket.emit (node:events:513:28) at emitReadable_ (node:internal/streams/readable:590:12) at processTicksAndRejections (node:internal/process/task_queues:81:21) { type: 'no', textCode: 'AUTHENTICATIONFAILED', source: 'authentication' } [7/12/2024, 11:02:40 AM] AxiosError: Request failed with status code 401 at settle (/homebridge/node_modules/homebridge-arlo-v2/node_modules/axios/lib/core/settle.js:19:12) at IncomingMessage.handleStreamEnd (/homebridge/node_modules/homebridge-arlo-v2/node_modules/axios/lib/adapters/http.js:589:11) at IncomingMessage.emit (node:events:525:35) at endReadableNT (node:internal/streams/readable:1359:12) at processTicksAndRejections (node:internal/process/task_queues:82:21) at Axios.request (/homebridge/node_modules/homebridge-arlo-v2/node_modules/axios/lib/core/Axios.js:45:41) at processTicksAndRejections (node:internal/process/task_queues:95:5) at Client.httpRequest (/homebridge/node_modules/homebridge-arlo-v2/node_modules/arlo-api/src/client.ts:327:23) at Client.getDevices (/homebridge/node_modules/homebridge-arlo-v2/node_modules/arlo-api/src/client.ts:348:19) at ArloPlatform.discoverDevices (/homebridge/node_modules/homebridge-arlo-v2/src/arlo-platform.ts:119:21)
Hi there, I'm moving from Home Assistant to Homebridge and struggle with this plugin. I know the credential are correct, as the same ones work in HA. In that platform, I had to enable "backend: sse" to let it work properly, but I can't see the same feature here. Any idea?
[homebridge-arlo-v2] Unable to login to Arlo using provided credentials. [homebridge-arlo-v2] AxiosError: Request failed with status code 403