1691 lines
79 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<meta name="generator" content="pdoc 0.5.1" />
<title>arlo API documentation</title>
<meta name="description" content="Copyright 2016 Jeffrey D. Walter …" />
<link href='https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.0/normalize.min.css' rel='stylesheet'>
<link href='https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/8.0.0/sanitize.min.css' rel='stylesheet'>
<style>.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id=^header-]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:1px solid #ddd;margin:1em 0 1em 4ch}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{font-weight:bold}#index h4 + ul{margin-bottom:.6em}#index .two-column{column-count:2}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.name small{font-weight:normal}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary{background:#ffc;font-weight:400;font-size:.8em;width:11em;text-transform:uppercase;padding:0px 8px;border:1px solid #fd6;border-radius:5px;cursor:pointer}.source summary:hover{background:#fe9 !important}.source[open] summary{background:#fda}.source pre{max-height:500px;overflow-y:scroll;margin-bottom:15px}.hlist{list-syle:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}.admonition{padding:.1em .5em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink;]</style>
<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:45%}#content{width:55%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
</head>
<body>
<main>
<article id="content">
<header>
<h1 class="title"><code>arlo</code> module</h1>
</header>
<section id="section-intro">
<p>Copyright 2016 Jeffrey D. Walter</p>
<p>Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at</p>
<p>http://www.apache.org/licenses/LICENSE-2.0</p>
<p>Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS ISBASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.</p>
</section>
<section>
</section>
<section>
</section>
<section>
</section>
<section>
<h2 class="section-title" id="header-classes">Classes</h2>
<dl>
<dt id="arlo.Arlo"><code class="flex name class">
<span>class <span class="ident">Arlo</span></span>
</code></dt>
<dd>
<section class="desc"></section>
<h3>Class variables</h3>
<dl>
<dt id="arlo.Arlo.TRANSID_PREFIX"><code class="name">var <span class="ident">TRANSID_PREFIX</span></code></dt>
<dd>
<section class="desc"></section>
</dd>
</dl>
<h3>Methods</h3>
<dl>
<dt id="arlo.Arlo.__init__"><code class="name flex">
<span>def <span class="ident">__init__</span></span>(<span>self, username, password)</span>
</code></dt>
<dd>
<section class="desc"><p>Initialize self.
See help(type(self)) for accurate signature.</p></section>
</dd>
<dt id="arlo.Arlo.AddFriend"><code class="name flex">
<span>def <span class="ident">AddFriend</span></span>(<span>self, firstname, lastname, email, devices={}, admin=False)</span>
</code></dt>
<dd>
<section class="desc"><p>This API will send an email to a user and if they accept, will give them access to the devices you specify.
NOTE: XXX-XXXXXXX_XXXXXXXXXXXX is the uniqueId field in your device object.</p>
<p>{adminUser:false,firstName:John,lastName:Doe,email:john.doe@example.com,devices:{XXX-XXXXXXX_XXXXXXXXXXXX:Camera1,XXX-XXXXXXX_XXXXXXXXXXXX:Camera2}}</p></section>
</dd>
<dt id="arlo.Arlo.AdjustBrightness"><code class="name flex">
<span>def <span class="ident">AdjustBrightness</span></span>(<span>self, basestation, camera, brightness=0)</span>
</code></dt>
<dd>
<section class="desc"><p>NOTE: Brightness is between -2 and 2 in increments of 1 (-2, -1, 0, 1, 2).
Setting it to an invalid value has no effect.</p>
<p>Returns:
{
"action": "is",
"from": "XXXXXXXXXXXXX",
"properties": {
"brightness": -2
},
"resource": "cameras/XXXXXXXXXXXXX",
"to": "336-XXXXXXX_web",
"transId": "web!XXXXXXXX.389518!1514956240683"
}</p></section>
</dd>
<dt id="arlo.Arlo.AlertNotificationMethods"><code class="name flex">
<span>def <span class="ident">AlertNotificationMethods</span></span>(<span>self, basestation, action=&#39;disabled&#39;, email=False, push=False)</span>
</code></dt>
<dd>
<section class="desc"><dl>
<dt><strong><code>action</code></strong> :&ensp;<code>disabled</code> <code>OR</code> <code>recordSnapshot</code> <code>OR</code> <code>recordVideo</code></dt>
<dd>&nbsp;</dd>
</dl></section>
</dd>
<dt id="arlo.Arlo.Arm"><code class="name flex">
<span>def <span class="ident">Arm</span></span>(<span>self, device)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.BatchDeleteRecordings"><code class="name flex">
<span>def <span class="ident">BatchDeleteRecordings</span></span>(<span>self, recordings)</span>
</code></dt>
<dd>
<section class="desc"><p>Delete a batch of video recordings from Arlo.</p>
<p>The GetLibrary() call response json can be passed directly to this method if you'd like to delete the same list of videos you queried for.
If you want to delete some other batch of videos, then you need to send an array of objects representing each video you want to delete.</p>
<p>[
{
"createdDate":"20160904",
"utcCreatedDate":1473010280395,
"deviceId":"XXXXXXXXXXXXX"
},
{
"createdDate":"20160904",
"utcCreatedDate":1473010280395,
"deviceId":"XXXXXXXXXXXXX"
}
]</p></section>
</dd>
<dt id="arlo.Arlo.Calendar"><code class="name flex">
<span>def <span class="ident">Calendar</span></span>(<span>self, basestation, active=True)</span>
</code></dt>
<dd>
<section class="desc"><p>DEPRECATED: This API appears to still do stuff, but I don't see it called in the web UI anymore when switching the mode to a schedule.</p>
<p>NOTE: The Arlo API seems to disable calendar mode when switching to other modes, if it's enabled.
You should probably do the same, although, the UI reflects the switch from calendar mode to say armed mode without explicitly setting calendar mode to inactive.</p></section>
</dd>
<dt id="arlo.Arlo.CustomMode"><code class="name flex">
<span>def <span class="ident">CustomMode</span></span>(<span>self, device, mode, schedules=[])</span>
</code></dt>
<dd>
<section class="desc"><p>device can be any object that has parentId == deviceId. i.e., not a camera</p></section>
</dd>
<dt id="arlo.Arlo.DeleteMode"><code class="name flex">
<span>def <span class="ident">DeleteMode</span></span>(<span>self, device, mode)</span>
</code></dt>
<dd>
<section class="desc"><p>device can be any object that has parentId == deviceId. i.e., not a camera</p></section>
</dd>
<dt id="arlo.Arlo.DeleteRecording"><code class="name flex">
<span>def <span class="ident">DeleteRecording</span></span>(<span>self, recording)</span>
</code></dt>
<dd>
<section class="desc"><p>Delete a single video recording from Arlo.
All of the date info and device id you need to pass into this method are given in the results of the GetLibrary() call.</p></section>
</dd>
<dt id="arlo.Arlo.Disarm"><code class="name flex">
<span>def <span class="ident">Disarm</span></span>(<span>self, device)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.DownloadRecording"><code class="name flex">
<span>def <span class="ident">DownloadRecording</span></span>(<span>self, url, to)</span>
</code></dt>
<dd>
<section class="desc"><p>Writes a video to a given local file path.</p>
<dl>
<dt><strong><code>url</code></strong> :&ensp;<code>presignedContentUrl</code></dt>
<dd>&nbsp;</dd>
<dt><strong><code>to</code></strong> :&ensp;<code>path</code> <code>where</code> <code>the</code> <code>file</code> <code>should</code> <code>be</code> <code>written</code></dt>
<dd>&nbsp;</dd>
</dl></section>
</dd>
<dt id="arlo.Arlo.DownloadSnapshot"><code class="name flex">
<span>def <span class="ident">DownloadSnapshot</span></span>(<span>self, url, to, chunk_size=4096)</span>
</code></dt>
<dd>
<section class="desc"><p>Writes a snapshot to a given local file path.</p>
<dl>
<dt><strong><code>url</code></strong> :&ensp;<code>presignedContentUrl</code> or <code>presignedFullFrameSnapshotUrl</code></dt>
<dd>&nbsp;</dd>
<dt><strong><code>to</code></strong> :&ensp;<code>path</code> <code>where</code> <code>the</code> <code>file</code> <code>should</code> <code>be</code> <code>written</code></dt>
<dd>&nbsp;</dd>
</dl></section>
</dd>
<dt id="arlo.Arlo.Geofencing"><code class="name flex">
<span>def <span class="ident">Geofencing</span></span>(<span>self, location_id, active=True)</span>
</code></dt>
<dd>
<section class="desc"><p>Get location_id is the id field from the return of GetLocations()
NOTE: The Arlo API seems to disable geofencing mode when switching to other modes, if it's enabled.
You should probably do the same, although, the UI reflects the switch from calendar mode to say armed mode without explicitly setting calendar mode to inactive.</p></section>
</dd>
<dt id="arlo.Arlo.GetAudioPlayback"><code class="name flex">
<span>def <span class="ident">GetAudioPlayback</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.GetAutomationActivityZones"><code class="name flex">
<span>def <span class="ident">GetAutomationActivityZones</span></span>(<span>self, camera)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.GetAutomationDefinitions"><code class="name flex">
<span>def <span class="ident">GetAutomationDefinitions</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.GetBaseStationState"><code class="name flex">
<span>def <span class="ident">GetBaseStationState</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.GetCalendar"><code class="name flex">
<span>def <span class="ident">GetCalendar</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.GetCameraState"><code class="name flex">
<span>def <span class="ident">GetCameraState</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.GetCameraTempReading"><code class="name flex">
<span>def <span class="ident">GetCameraTempReading</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.GetCvrPlaylist"><code class="name flex">
<span>def <span class="ident">GetCvrPlaylist</span></span>(<span>self, camera, fromDate, toDate)</span>
</code></dt>
<dd>
<section class="desc"><p>This function downloads a Cvr Playlist file for the period fromDate to toDate.</p></section>
</dd>
<dt id="arlo.Arlo.GetDeviceCapabilities"><code class="name flex">
<span>def <span class="ident">GetDeviceCapabilities</span></span>(<span>self, device)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.GetDeviceSupport"><code class="name flex">
<span>def <span class="ident">GetDeviceSupport</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"><p>DEPRECATED: This API still works, but I don't see it being called in the web UI anymore.</p>
<p>This API looks like it's mainly used by the website, but I'm including it for completeness sake.
It returns something like the following:
{
"devices": [
{
"deviceType": "arloq",
"urls": {
"troubleshoot": "https://vzs3-prod-common.s3.amazonaws.com/static/html/en/pc_troubleshoot.html",
"plugin": "https://vzs3-prod-common.s3.amazonaws.com/static/html/en/pc_plugin.html",
"connection": "https://vzs3-prod-common.s3.amazonaws.com/static/html/en/pc_connection.html",
"connectionFailed": "https://vzs3-prod-common.s3.amazonaws.com/static/html/en/pc_connection_fail.html",
"press_sync": "https://vzs3-prod-common.s3. amazonaws.com/static/html/en/pc_press_sync.html",
"resetDevice": "https://vzs3-prod-common.s3.amazonaws.com/static/html/en/reset_arloq.html",
"qr_how_to": "https://vzs3-prod-common.s3.amazonaws.com/static/html/en/pc_qr_how_to.html"
}
},
{
"deviceType": "basestation",
"urls": {
"troubleshoot": "https://vzs3-prod-common.s3.amazonaws.com/static/html/en/bs_troubleshoot.html",
"connection": "https://vzs3-prod-common.s3.amazonaws.com/static/html/en/bs_connection.html",
"sync": "https://vzs3-prod-common.s3.amazonaws.com/static/html/en/bs_sync_camera.html"
}
},
{
"deviceType": "arloqs",
"urls": {
"ethernetSetup": "https://vzs3-prod-common.s3.amazonaws.com/static/html/en/arloqs/ethernet_setup.html",
"plugin": "https://
vzs3-prod-common.s3.amazonaws.com/static/html/en/arloqs/aqp_plugin.html",
"connectionWiFi": "https://vzs3-prod-common.s3.amazonaws.com/static/html/en/arloqs/connection_in_progress_wifi.html",
"poeSetup": "https://vzs3-prod-common.s3.
amazonaws.com/static/html/en/arloqs/poe_setup.html",
"connection": "https://vzs3-prod-common.s3.amazonaws.com/static/html/en/arloqs/connection_in_progress.html",
"connectionFailed": "https://vzs3-prod-common.s3.amazonaws.com/static/html/en/arloqs/connection_fail.html",
"press_sync": "https://vzs3-prod-common.s3.amazonaws.com/static/html/en/arloqs/press_sync.html",
"connectionType": "https://vzs3-prod-common.s3.amazonaws.com/static/html/en/arloqs/connection_type.html",
"resetDevice": "https://vzs3-prod-common.s3.amazonaws.com/static/html/en/arloqs/reset_device.html",
"qr_how_to": "https://vzs3-prod-common.s3.amazonaws.com/static/html/en/arloqs/qr_how_to.html"
}
}
]
}</p></section>
</dd>
<dt id="arlo.Arlo.GetDeviceSupportV3"><code class="name flex">
<span>def <span class="ident">GetDeviceSupportV3</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"><p>This is the latest version of the device support api.
It returns something like the following:
{
"data": {
"devices": {
"camera": {
"modelIds": [
"VMC3010",
"VMC3030",
"VMC4030",
"VMC4030P",
"VMC5040",
"VZC3010",
"VZC3030"
],
"connectionTypes": {
"WPS": true,
"BLE": true
},
"kbArticles": {
"insertBatteries": "https://kb.arlo.com/980150/Safety-Rules-for-Arlo-Wire-Free-Camera-Batteries",
"syncBasestation": "https://kb.arlo.com/987/How-do-I-set-up-and-sync-my-Arlo-Wire-Free-cameras",
"sync": "https://kb.arlo.com/987/How-do-I-set-up-and-sync-my-Arlo-Wire-Free-camera",
"firmwareUpdate": "https://kb.arlo.com/4736/How-do-I-update-my-Arlo-firmware-manually"
}
},
"arloq": {
"modelIds": [
"VMC3040",
"VMC3040S"
],
"kbArticles": {
"power": "https://kb.arlo.com/1001944/How-do-I-set-up-Arlo-Q-on-iOS",
"qrCode": "https://kb.arlo.com/1001944/How-do-I-set-up-Arlo-Q-on-iOS",
"power_android": "https://kb.arlo.com/1002006/How-do-I-set-up-Arlo-Q-on-Android",
"qrCode_android":
"https://kb.arlo.com/1002006/How-do-I-set-up-Arlo-Q-on-Android"
}
},
"basestation": {
"modelIds": [
"VMB3010",
"VMB4000",
"VMB3010r2",
"VMB3500",
"VZB3010",
"VMB4500",
"VMB5000"
],
"smartHubs": [
"VMB5000"
],
"kbArticles": {
"pluginNetworkCable": "https://kb.arlo.com/1179139/How-do-I-connect-my-Arlo-or-Arlo-Pro-base-station-to-the-Internet",
"power": "https://kb.arlo.com/1179139/How-do-I-connect-my-Arlo-or-Arlo-Pro-base-station-to-the-Internet",
"led": "https://kb.arlo.com/1179139/How-do-I-connect-my-Arlo-or-Arlo-Pro-base-station-to-the-Internet",
"learnMore": "https://kb.arlo.com/000062124/How-do-I-record-4K-videos-to-a-microSD-card"
}
},
"arlobaby": {
"modelIds": [
"ABC1000"
],
"kbArticles": {
"power": "https://kb.arlo.com/1282682/How-do-I-power-cycle-my-Arlo-Baby-camera",
"qrCode": "https://kb.arlo.com/1282700/How-do-I-set-up-my-Arlo-Baby-camera"
}
},
"lteCamera":{
"modelIds":[
"VML4030"
],
"kbArticles":{
"servicePlan":"https://kb.arlo.com/1286865/What-Arlo-Mobile-service-plans-are-available",
"simActivation":"https://kb.arlo.com/1286865/What-Arlo-Mobile-service-plans-are-available",
"qrCode":"https://kb.arlo.com/1201822/How-do-I-set-up-my-Arlo-Go-camera"
}
},
"bridge": {
"modelIds": [
"ABB1000"
],
"kbArticles": {
"power": "https://kb.arlo.com/000062047",
"sync": "https://kb.arlo.com/000062037",
"qrCode": "https://kb.arlo.com/000061886",
"factoryReset": "https://kb.arlo.com/000061837"
}
},
"lights": {
"modelIds": [
"AL1101"
],
"kbArticles": {
"sync": "https://kb.arlo.com/000062005",
"insertBatteries": "https://kb.arlo.com/000061952",
"qrCode": "https://kb.arlo.com/000061886"
}
},
"routerM1":{
"modelIds":[
"MR1100"
],
"kbArticles":{
"lookupFailed":"https://kb.arlo.com/1179130/Arlo-can-t-discover-my-base-station-during-installation-what-do-I-do"
}
},
"chime": {
"modelIds": [
"AC1001"
],
"kbArticles": {
"ledNotBlinking":"https://kb.arlo.com/000061924",
"led":"https://kb.arlo.com/000061847",
"factoryReset":"https://kb.arlo.com/000061879",
"connectionFailed":"https://kb.arlo.com/000061880"
}
},
"doorbell": {
"modelIds": [
"AAD1001"
],
"kbArticles": {
"led":"https://kb.arlo.com/000061847",
"factoryReset":"https://kb.arlo.com/000061842",
"pairCamera":"https://kb.arlo.com/000061897",
"existingChime":"https://kb.arlo.com/000061856",
"noWiring":"https://kb.arlo.com/000061859",
"connectionFailed":"https://kb.arlo.com/000061868",
"pairCameraFailed":"https://kb.arlo.com/000061893",
"testChimeFailed":"https://kb.arlo.com/000061944"
},
"videos": {
"chimeType": "https://youtu.be/axytuF63VC0",
"wireDoorbell": "https://youtu.be/_5D2n3iPqW0",
"switchSetting": "https://youtu.be/BUmd4fik2RE"
},
"arloVideos": {
"chimeType": "https://vzs3-prod-common.s3.amazonaws.com/static/devicesupport/Arlo_Audio_Doorbell_Chime.mp4",
"wireDoorbell": "https://vzs3-prod-common.s3.amazonaws.com/static/devicesupport/Arlo_Audio_Doorbell_Wired.mp4",
"switchSetting": "https://vzs3-prod-common.s3.amazonaws.com/static/devicesupport/Arlo_Audio_Doorbell_Switch.mp4"
}
}
},
"arlosmart": {
"kbArticles": {
"e911": "https://www.arlo.com/en-us/landing/arlosmart/",
"callFriend": "https://www.arlo.com/en-us/landing/arlosmart/",
"4kAddOnPopup": "https://www.arlo.com/en-us/landing/arlosmart/",
"cloudRecording": "https://www.arlo.com/en-us/landing/arlosmart/",
"manageArloSmart": "https://kb.arlo.com/000062115",
"otherVideo": "https://kb.arlo.com/000062115",
"packageDetection": "https://kb.arlo.com/000062114",
"whereIsBasicSubscriptionGone": "https://kb.arlo.com/000062163"
}
}
},
"success":true
}</p></section>
</dd>
<dt id="arlo.Arlo.GetDeviceSupportv2"><code class="name flex">
<span>def <span class="ident">GetDeviceSupportv2</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"><p>DEPRECATED: This API still works, but I don't see it being called in the web UI anymore.</p>
<p>It returns something like the following:
{
"devices": [
{
"deviceType": "arloq",
"modelId": [
"VMC3040"
],
"urls": {
"troubleshoot": "arloq/troubleshoot.html",
"plugin": "arloq/plugin.html",
"qrHowTo": "arloq/qrHowTo.html",
"connection": "arloq/connection.html",
"connectionInProgress": "arloq/connectionInProgress.html",
"connectionFailed": "arloq/connectionFailed.html",
"pressSync": "arloq/pressSync.html",
"resetDevice": "arloq/resetDevice.html"
}
},
{
"deviceType": "basestation",
"modelId": [
"VMB3010",
"VMB3010r2",
"VMB3500",
"VMB4000",
"VMB4500",
"VZB3010"
],
"urls": {
"troubleshoot": "basestation/troubleshoot.html",
"plugin": "basestation/plugin.html",
"sync3": "basestation/sync3.html",
"troubleshootBS": "basestation/troubleshootBS.html",
"connection": "basestation/connection.html",
"connectionInProgress": "basestation/connectionInProgress.html",
"sync2": "basestation/sync2.html",
"connectionFailed": "basestation/connectionFailed.html",
"sync1": "basestation/sync1.html",
"resetDevice": "basestation/resetDevice.html",
"syncComplete": "basestation/syncComplete.html"
}
},
{
"deviceType": "arlobaby",
"modelId": [
"ABC1000"
],
"urls": {
"bleSetupError": "arlobaby/bleSetupError.html",
"troubleshoot": "arlobaby/troubleshoot.html",
"homekitCodeInstruction": "arlobaby/homekitCodeInstruction.html",
"connectionInProgress": "arlobaby/connectionInProgress.html",
"connectionFailed": "arlobaby/connectionFailed.html",
"resetDevice": "arlobaby/resetDevice.html",
"plugin": "arlobaby/plugin.html",
"qrHowTo": "arlobaby/qrHowTo.html",
"warning": "arlobaby/warning.html",
"connection": "arlobaby/connection.html",
"pressSync": "arlobaby/pressSync.html",
"bleInactive": "arlobaby/bleInactive.html",
"pluginIOS": "arlobaby/pluginIOS.html",
"homekitSetup": "arlobaby/homekitSetup.html"
}
},
{
"deviceType": "lteCamera",
"modelId": [
"VML4030"
],
"urls": {
"troubleshoot": "lteCamera/troubleshoot.html",
"resetHowTo": "lteCamera/resetHowTo.html",
"plugin": "lteCamera/plugin.html",
"qrHowTo": "lteCamera/qrHowTo.html",
"connectionInProgress": "lteCamera/connectionInProgress.html",
"connectionFailed": "lteCamera/connectionFailed.html",
"resetDevice": "lteCamera/resetHowTo.html",
"resetComplete": "lteCamera/resetComplete.html",
"syncComplete": "lteCamera/syncComplete.html"
}
},
{
"deviceType": "arloqs",
"modelId": [
"VMC3040S"
],
"urls": {
"ethernetSetup": "arloqs/ethernetSetup.html",
"troubleshoot": "arloqs/troubleshoot.html",
"plugin": "arloqs/plugin.html",
"poeSetup": "arloqs/poeSetup.html",
"connectionInProgressWiFi": "arloqs/connectionInProgressWifi.html",
"qrHowTo": "arloqs/qrHowTo.html",
"connectionInProgress": "arloqs/connectionInProgress.html",
"connectionFailed": "arloqs/connectionFailed.html",
"pressSync": "arloqs/pressSync.html",
"connectionType": "arloqs/connectionType.html",
"resetDevice": "arloqs/resetDevice.html"
}
},
{
"deviceType": "bridge",
"modelId": [
"ABB1000"
],
"urls": {
"troubleshoot": "bridge/troubleshoot.html",
"fwUpdateInProgress": "bridge/fwUpdateInProgress.html",
"qrHowToUnplug": "bridge/qrHowToUnplug.html",
"fwUpdateDone": "bridge/fwUpdateDone.html",
"fwUpdateAvailable": "bridge/fwUpdateAvailable.html",
"needHelp": "https://www.arlo.com/en-us/support/#support_arlo_light",
"wifiError": "bridge/wifiError.html",
"bleAndroid": "bridge/bleInactiveAND.html",
"bleIOS": "bridge/bleInactiveIOS.html",
"connectionInProgress": "bridge/connectionInProgress.html",
"connectionFailed": "bridge/connectionFailed.html",
"manualPair": "bridge/manualPairing.html",
"resetDevice": "bridge/resetDevice.html",
"lowPower": "bridge/lowPowerZoneSetup.html",
"fwUpdateFailed": "bridge/fwUpdateFailed.html",
"fwUpdateCheckFailed": "bridge/fwUpdateCheckFailed.html",
"plugin": "bridge/plugin.html",
"qrHowTo": "bridge/qrHowTo.html",
"pressSync": "bridge/pressSync.html",
"pluginNoLED": "bridge/pluginNoLED.html",
"fwUpdateCheck": "bridge/fwUpdateCheck.html"
}
},
{
"deviceType": "lights",
"modelId": [
"AL1101"
],
"urls": {
"troubleshoot": "lights/troubleshoot.html",
"needHelp": "https://kb.netgear.com/000053159/Light-discovery-failed.html",
"bleInactiveAND": "lights/bleInactiveAND.html",
"connectionInProgress": "lights/connectionInProgress.html",
"connectionFailed": "lights/connectionFailed.html",
"addBattery": "lights/addBattery.html",
"tutorial1": "lights/tutorial1.html",
"plugin": "lights/plugin.html",
"tutorial2": "lights/tutorial2.html",
"tutorial3": "lights/tutorial3.html",
"configurationInProgress": "lights/configurationInProgress.html",
"qrHowTo": "lights/qrHowTo.html",
"pressSync": "lights/pressSync.html",
"bleInactiveIOS": "lights/bleInactiveIOS.html",
"syncComplete": "lights/syncComplete.html"
}
},
{
"deviceType": "routerM1",
"modelId": [
"MR1100"
],
"urls": {
"troubleshoot": "routerM1/troubleshoot.html",
"help": "routerM1/help.html",
"pairingFailed": "routerM1/pairingFailed.html",
"needHelp": "https://acupdates.netgear.com/help/redirect.aspx?url=m1arlo-kbb",
"plugin": "routerM1/plugin.html",
"pairing": "routerM1/pairing.html",
"connectionInProgress": "routerM1/connectionInProgress.html",
"sync2": "routerM1/sync2.html",
"connectionFailed": "routerM1/connectionFailed.html",
"sync1": "routerM1/sync1.html",
"sync": "routerM1/sync.html",
"syncComplete": "routerM1/syncComplete.html"
}
}
],
"selectionUrls": {
"addDevice": "addDeviceBsRuAqAqpLteAbcMrBgLt.html",
"selectBasestation": "selectBsMr.html",
"deviceSelection": "deviceBsAqAqpLteAbcMrLtSelection.html",
"selectLights": "selectBgLt.html"
},
"baseUrl": "https://vzs3-prod-common.s3.amazonaws.com/static/v2/html/en/"
}</p></section>
</dd>
<dt id="arlo.Arlo.GetDevices"><code class="name flex">
<span>def <span class="ident">GetDevices</span></span>(<span>self, device_type=None, filter_provisioned=None)</span>
</code></dt>
<dd>
<section class="desc"><p>This method returns an array that contains the basestation, cameras, etc. and their metadata.
If you pass in a valid device type, as a string or a list, this method will return an array of just those devices that match that type. An example would be ['basestation', 'camera']
To filter provisioned or unprovisioned devices pass in a True/False value for filter_provisioned. By default both types are returned.</p></section>
</dd>
<dt id="arlo.Arlo.GetEmergencyLocations"><code class="name flex">
<span>def <span class="ident">GetEmergencyLocations</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.GetFriends"><code class="name flex">
<span>def <span class="ident">GetFriends</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.GetLibrary"><code class="name flex">
<span>def <span class="ident">GetLibrary</span></span>(<span>self, from_date, to_date)</span>
</code></dt>
<dd>
<section class="desc"><p>This call returns the following:
presignedContentUrl is a link to the actual video in Amazon AWS.
presignedThumbnailUrl is a link to the thumbnail .jpg of the actual video in Amazon AWS.</p>
<p>[
{
"mediaDurationSecond": 30,
"contentType": "video/mp4",
"name": "XXXXXXXXXXXXX",
"presignedContentUrl": "https://arlos3-prod-z2.s3.amazonaws.com/XXXXXXX_XXXX_XXXX_XXXX_XXXXXXXXXXXXX/XXX-XXXXXXX/XXXXXXXXXXXXX/recordings/XXXXXXXXXXXXX.mp4?AWSAccessKeyId=XXXXXXXXXXXXXXXXXXXX&amp;Expires=1472968703&amp;Signature=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"lastModified": 1472881430181,
"localCreatedDate": XXXXXXXXXXXXX,
"presignedThumbnailUrl": "https://arlos3-prod-z2.s3.amazonaws.com/XXXXXXX_XXXX_XXXX_XXXX_XXXXXXXXXXXXX/XXX-XXXXXXX/XXXXXXXXXXXXX/recordings/XXXXXXXXXXXXX_thumb.jpg?AWSAccessKeyId=XXXXXXXXXXXXXXXXXXXX&amp;Expires=1472968703&amp;Signature=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"reason": "motionRecord",
"deviceId": "XXXXXXXXXXXXX",
"createdBy": "XXXXXXXXXXXXX",
"createdDate": "20160903",
"timeZone": "America/Chicago",
"ownerId": "XXX-XXXXXXX",
"utcCreatedDate": XXXXXXXXXXXXX,
"currentState": "new",
"mediaDuration": "00:00:30"
}
]</p></section>
</dd>
<dt id="arlo.Arlo.GetLibraryMetaData"><code class="name flex">
<span>def <span class="ident">GetLibraryMetaData</span></span>(<span>self, from_date, to_date)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.GetLocations"><code class="name flex">
<span>def <span class="ident">GetLocations</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"><p>This call returns the following:
{
"id":"XXX-XXXXXXX_20160823042047",
"name":"Home",
"ownerId":"XXX-XXXXXXX",
"longitude":X.XXXXXXXXXXXXXXXX,
"latitude":X.XXXXXXXXXXXXXXXX,
"address":"123 Middle Of Nowhere Bumbfuck, EG, 12345",
"homeMode":"schedule",
"awayMode":"mode1",
"geoEnabled":false,
"geoRadius":150.0,
"uniqueIds":[
"XXX-XXXXXXX_XXXXXXXXXXXXX"
],
"smartDevices":[
"XXXXXXXXXX",
"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
],
"pushNotifyDevices":[
"XXXXXXXXXX"
]
}</p></section>
</dd>
<dt id="arlo.Arlo.GetModes"><code class="name flex">
<span>def <span class="ident">GetModes</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"><p>DEPRECATED: This is the older API for getting the "mode". It still works, but GetModesV2 is the way the Arlo software does it these days.</p></section>
</dd>
<dt id="arlo.Arlo.GetModesV2"><code class="name flex">
<span>def <span class="ident">GetModesV2</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"><p>This is the newer API for getting the "mode". This method also returns the schedules.
Set a non-schedule mode to be active: {"activeAutomations":[{"deviceId":"XXXXXXXXXXXXX","timestamp":1532015622105,"activeModes":["mode1"],"activeSchedules":[]}]}
Set a schedule to be active: {"activeAutomations":[{"deviceId":"XXXXXXXXXXXXX","timestamp":1532015790139,"activeModes":[],"activeSchedules":["schedule.1"]}]}</p></section>
</dd>
<dt id="arlo.Arlo.GetOCProfile"><code class="name flex">
<span>def <span class="ident">GetOCProfile</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.GetPaymentBilling"><code class="name flex">
<span>def <span class="ident">GetPaymentBilling</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.GetPaymentOffers"><code class="name flex">
<span>def <span class="ident">GetPaymentOffers</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"><p>DEPRECATED: This API still works, but I don't see it being called in the web UI anymore.</p></section>
</dd>
<dt id="arlo.Arlo.GetPaymentOffersV2"><code class="name flex">
<span>def <span class="ident">GetPaymentOffersV2</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"><p>DEPRECATED: This API still works, but I don't see it being called in the web UI anymore.</p></section>
</dd>
<dt id="arlo.Arlo.GetPaymentOffersV3"><code class="name flex">
<span>def <span class="ident">GetPaymentOffersV3</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"><p>DEPRECATED: This API still works, but I don't see it being called in the web UI anymore.</p></section>
</dd>
<dt id="arlo.Arlo.GetPaymentOffersV4"><code class="name flex">
<span>def <span class="ident">GetPaymentOffersV4</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.GetProfile"><code class="name flex">
<span>def <span class="ident">GetProfile</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.GetRecording"><code class="name flex">
<span>def <span class="ident">GetRecording</span></span>(<span>self, url, chunk_size=4096)</span>
</code></dt>
<dd>
<section class="desc"><p>Returns the whole video from the presignedContentUrl.</p></section>
</dd>
<dt id="arlo.Arlo.GetRules"><code class="name flex">
<span>def <span class="ident">GetRules</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.GetSensorConfig"><code class="name flex">
<span>def <span class="ident">GetSensorConfig</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.GetServiceLevel"><code class="name flex">
<span>def <span class="ident">GetServiceLevel</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.GetServiceLevelSettings"><code class="name flex">
<span>def <span class="ident">GetServiceLevelSettings</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.GetServiceLevelV2"><code class="name flex">
<span>def <span class="ident">GetServiceLevelV2</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"><p>DEPRECATED: This API still works, but I don't see it being called in the web UI anymore.</p></section>
</dd>
<dt id="arlo.Arlo.GetServiceLevelV3"><code class="name flex">
<span>def <span class="ident">GetServiceLevelV3</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"><p>DEPRECATED: This API still works, but I don't see it being called in the web UI anymore.</p></section>
</dd>
<dt id="arlo.Arlo.GetServiceLevelV4"><code class="name flex">
<span>def <span class="ident">GetServiceLevelV4</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.GetSession"><code class="name flex">
<span>def <span class="ident">GetSession</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"><p>Returns something like the following:
{
"userId": "XXX-XXXXXXX",
"email": "jeffreydwalter@gmail.com",
"token": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"paymentId": "XXXXXXXX",
"accountStatus": "registered",
"serialNumber": "XXXXXXXXXXXXXX",
"countryCode": "US",
"tocUpdate": false,
"policyUpdate": false,
"validEmail": true,
"arlo": true,
"dateCreated": 1463975008658
}</p></section>
</dd>
<dt id="arlo.Arlo.GetSmartAlerts"><code class="name flex">
<span>def <span class="ident">GetSmartAlerts</span></span>(<span>self, camera)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.GetSmartFeatures"><code class="name flex">
<span>def <span class="ident">GetSmartFeatures</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.GetUpdateFeatures"><code class="name flex">
<span>def <span class="ident">GetUpdateFeatures</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.HandleEvents"><code class="name flex">
<span>def <span class="ident">HandleEvents</span></span>(<span>self, basestation, callback, timeout=120)</span>
</code></dt>
<dd>
<section class="desc"><p>Use this method to subscribe to the event stream and provide a callback that will be called for event event received.
This function will allow you to potentially write a callback that can handle all of the events received from the event stream.</p></section>
</dd>
<dt id="arlo.Arlo.Login"><code class="name flex">
<span>def <span class="ident">Login</span></span>(<span>self, username, password)</span>
</code></dt>
<dd>
<section class="desc"><p>This call returns the following:
{
"userId":"XXX-XXXXXXX",
"email":"user@example.com",
"token":"2_5HicFJMXXXXX-S_7IuK2EqOUHXXXXXXXXXXX1CXKWTThgU18Va_XXXXXX5S00hUafv3PV_if_Bl_rhiFsDHYwhxI3CxlVnR5f3q2XXXXXX-Wnt9F7D82uN1f4cXXXXX-FMUsWF_6tMBqwn6DpzOaIB7ciJrnr2QJyKewbQouGM6",
"paymentId":"XXXXXXXX",
"authenticated":1472961381,
"accountStatus":"registered",
"serialNumber":"XXXXXXXXXXXXX",
"countryCode":"US",
"tocUpdate":false,
"policyUpdate":false,
"validEmail":true
}</p></section>
</dd>
<dt id="arlo.Arlo.Logout"><code class="name flex">
<span>def <span class="ident">Logout</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.Notify"><code class="name flex">
<span>def <span class="ident">Notify</span></span>(<span>self, basestation, body)</span>
</code></dt>
<dd>
<section class="desc"><p>The following are examples of the json you would need to pass in the body of the Notify() call to interact with Arlo:</p>
<h6 id="_1"></h6>
<h6 id="_2"></h6>
<dl>
<dt><strong><code>NOTE</code></strong> :&ensp;<code>While</code> <code>you</code> <code>can</code> <code>call</code> <code>Notify</code>() <code>directly</code>, <code>responses</code> <code>from</code> <code>these</code> <code>notify</code> <code>calls</code> <code>are</code> <code>sent</code> <code>to</code> <code>the</code> <code>EventStream</code> (<code>see</code> <code>Subscribe</code>()),</dt>
<dd>&nbsp;</dd>
</dl>
<p>and so it's better to use the Get/Set methods that are implemented using the NotifyAndGetResponse() method.</p>
<h6 id="_3"></h6>
<h6 id="_4"></h6>
<p>Set System Mode (Armed, Disarmed) - {"from":"XXX-XXXXXXX_web","to":"XXXXXXXXXXXXX","action":"set","resource":"modes","transId":"web!XXXXXXXX.XXXXXXXXXXXXXXXXXXXX","publishResponse":true,"properties":{"active":"mode0"}}
Set System Mode (Calendar) - {"from":"XXX-XXXXXXX_web","to":"XXXXXXXXXXXXX","action":"set","resource":"schedule","transId":"web!XXXXXXXX.XXXXXXXXXXXXXXXXXXXX","publishResponse":true,"properties":{"active":true}}
Configure The Schedule (Calendar) - {"from":"XXX-XXXXXXX_web","to":"XXXXXXXXXXXXX","action":"set","resource":"schedule","transId":"web!XXXXXXXX.XXXXXXXXXXXXXXXXXXXX","publishResponse":true,"properties":{"schedule":[{"modeId":"mode0","startTime":0},{"modeId":"mode2","startTime":28800000},{"modeId":"mode0","startTime":64800000},{"modeId":"mode0","startTime":86400000},{"modeId":"mode2","startTime":115200000},{"modeId":"mode0","startTime":151200000},{"modeId":"mode0","startTime":172800000},{"modeId":"mode2","startTime":201600000},{"modeId":"mode0","startTime":237600000},{"modeId":"mode0","startTime":259200000},{"modeId":"mode2","startTime":288000000},{"modeId":"mode0","startTime":324000000},{"modeId":"mode0","startTime":345600000},{"modeId":"mode2","startTime":374400000},{"modeId":"mode0","startTime":410400000},{"modeId":"mode0","startTime":432000000},{"modeId":"mode0","startTime":518400000}]}
Create Mode -
{"from":"XXX-XXXXXXX_web","to":"XXXXXXXXXXXXX","action":"add","resource":"rules","transId":"web!XXXXXXXX.XXXXXXXXXXXXXXXXXXXX","publishResponse":true,"properties":{"name":"Record video on Camera 1 if Camera 1 detects motion","id":"ruleNew","triggers":[{"type":"pirMotionActive","deviceId":"XXXXXXXXXXXXX","sensitivity":80}],"actions":[{"deviceId":"XXXXXXXXXXXXX","type":"recordVideo","stopCondition":{"type":"timeout","timeout":15}},{"type":"sendEmailAlert","recipients":["<strong>OWNER_EMAIL</strong>"]},{"type":"pushNotification"}]}}
{"from":"XXX-XXXXXXX_web","to":"XXXXXXXXXXXXX","action":"add","resource":"modes","transId":"web!XXXXXXXX.XXXXXXXXXXXXXXXXXXXX","publishResponse":true,"properties":{"name":"Test","rules":["rule3"]}}
Delete Mode - {"from":"XXX-XXXXXXX_web","to":"XXXXXXXXXXXXX","action":"delete","resource":"modes/mode3","transId":"web!XXXXXXXX.XXXXXXXXXXXXXXXXXXXX","publishResponse":true}
Camera Off - {"from":"XXX-XXXXXXX_web","to":"XXXXXXXXXXXXX","action":"set","resource":"cameras/XXXXXXXXXXXXX","transId":"web!XXXXXXXX.XXXXXXXXXXXXXXXXXXXX","publishResponse":true,"properties":{"privacyActive":false}}
Night Vision On - {"from":"XXX-XXXXXXX_web","to":"XXXXXXXXXXXXX","action":"set","resource":"cameras/XXXXXXXXXXXXX","transId":"web!XXXXXXXX.XXXXXXXXXXXXXXXXXXXX","publishResponse":true,"properties":{"zoom":{"topleftx":0,"toplefty":0,"bottomrightx":1280,"bottomrighty":720},"mirror":true,"flip":true,"nightVisionMode":1,"powerSaveMode":2}}
Motion Detection Test - {"from":"XXX-XXXXXXX_web","to":"XXXXXXXXXXXXX","action":"set","resource":"cameras/XXXXXXXXXXXXX","transId":"web!XXXXXXXX.XXXXXXXXXXXXXXXXXXXX","publishResponse":true,"properties":{"motionSetupModeEnabled":true,"motionSetupModeSensitivity":80}}</p>
<p>device_id = locations.data.uniqueIds</p>
<p>System Properties: ("resource":"modes")
active (string) - Mode Selection (mode2 = All Motion On, mode1 = Armed, mode0 = Disarmed, etc.)</p>
<p>System Properties: ("resource":"schedule")
active (bool) - Mode Selection (true = Calendar)</p>
<p>Camera Properties: ("resource":"cameras/{id}")
privacyActive (bool) - Camera On/Off
zoom (topleftx (int), toplefty (int), bottomrightx (int), bottomrighty (int)) - Camera Zoom Level
mirror (bool) - Mirror Image (left-to-right or right-to-left)
flip (bool) - Flip Image Vertically
nightVisionMode (int) - Night Mode Enabled/Disabled (1, 0)
powerSaveMode (int) - PowerSaver Mode (3 = Best Video, 2 = Optimized, 1 = Best Battery Life)
motionSetupModeEnabled (bool) - Motion Detection Setup Enabled/Disabled
motionSetupModeSensitivity (int 0-100) - Motion Detection Sensitivity</p></section>
</dd>
<dt id="arlo.Arlo.NotifyAndGetResponse"><code class="name flex">
<span>def <span class="ident">NotifyAndGetResponse</span></span>(<span>self, basestation, body, timeout=120)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.PauseTrack"><code class="name flex">
<span>def <span class="ident">PauseTrack</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.Ping"><code class="name flex">
<span>def <span class="ident">Ping</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.PlayTrack"><code class="name flex">
<span>def <span class="ident">PlayTrack</span></span>(<span>self, basestation, track_id=&#39;2391d620-e491-4412-99f6-e9a40d6046ed&#39;, position=0)</span>
</code></dt>
<dd>
<section class="desc"><p>Defaulting to 'hugh little baby', which is a supplied track. I hope the ID is the same for all.</p></section>
</dd>
<dt id="arlo.Arlo.PushToTalk"><code class="name flex">
<span>def <span class="ident">PushToTalk</span></span>(<span>self, camera)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.RemoveFriend"><code class="name flex">
<span>def <span class="ident">RemoveFriend</span></span>(<span>self, email)</span>
</code></dt>
<dd>
<section class="desc"><p>Removes a person you've granted access to.</p>
<p>email: email of user you want to revoke access from.</p></section>
</dd>
<dt id="arlo.Arlo.ResendFriendInvite"><code class="name flex">
<span>def <span class="ident">ResendFriendInvite</span></span>(<span>self, friend)</span>
</code></dt>
<dd>
<section class="desc"><dl>
<dt>This API will resend an invitation email to a user that you've AddFriend'd. You will need to get the friend object by calling GetFriend() because it includes a token that must be passed to this API.</dt>
<dt><strong><code>friend</code></strong> :&ensp;{<code>"ownerId"</code>:<code>"XXX</code>-<code>XXXXXXX"</code>,<code>"token"</code>:<code>"really</code> <code>long</code> <code>string</code> <code>that</code> <code>you</code> <code>get</code> <code>from</code> <code>the</code> <code>GetFriends</code>() <code>API"</code>,<code>"firstName"</code>:<code>"John"</code>,<code>"lastName"</code>:<code>"Doe"</code>,<code>"devices"</code>:{<code>"XXX</code>-<code>XXXXXXX_XXXXXXXXXXXX"</code>:<code>"Camera1"</code>,<code>"XXX</code>-<code>XXXXXXX_XXXXXXXXXXXX"</code>:<code>"Camera2"</code>},<code>"lastModified"</code>:<code>1548470485419</code>,<code>"adminUser"</code>:<code>false</code>,<code>"email"</code>:<code>"john.doe</code>@<code>example.com"</code>}</dt>
<dd>&nbsp;</dd>
</dl></section>
</dd>
<dt id="arlo.Arlo.Reset"><code class="name flex">
<span>def <span class="ident">Reset</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.RestartBasestation"><code class="name flex">
<span>def <span class="ident">RestartBasestation</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetAirQualityAlertOff"><code class="name flex">
<span>def <span class="ident">SetAirQualityAlertOff</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetAirQualityAlertOn"><code class="name flex">
<span>def <span class="ident">SetAirQualityAlertOn</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetAirQualityAlertThresholdMax"><code class="name flex">
<span>def <span class="ident">SetAirQualityAlertThresholdMax</span></span>(<span>self, basestation, number=700)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetAirQualityAlertThresholdMin"><code class="name flex">
<span>def <span class="ident">SetAirQualityAlertThresholdMin</span></span>(<span>self, basestation, number=400)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetAirQualityRecordingOff"><code class="name flex">
<span>def <span class="ident">SetAirQualityRecordingOff</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetAirQualityRecordingOn"><code class="name flex">
<span>def <span class="ident">SetAirQualityRecordingOn</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetAudioAlertsOff"><code class="name flex">
<span>def <span class="ident">SetAudioAlertsOff</span></span>(<span>self, basestation, sensitivity=3)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetAudioAlertsOn"><code class="name flex">
<span>def <span class="ident">SetAudioAlertsOn</span></span>(<span>self, basestation, sensitivity=3)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetAutomationActivityZones"><code class="name flex">
<span>def <span class="ident">SetAutomationActivityZones</span></span>(<span>self, camera, zone, coords, color)</span>
</code></dt>
<dd>
<section class="desc"><p>An activity zone is the area you draw in your video in the UI to tell Arlo what part of the scene to "watch".
This method takes 4 arguments.
camera: the camera you want to set an activity zone for.
name: "Zone 1" - the name of your activity zone.
coords: [{"x":0.37946943483275664,"y":0.3790983606557377},{"x":0.8685121107266436,"y":0.3790983606557377},{"x":0.8685121107266436,"y":1},{"x":0.37946943483275664,"y":1}] - these coordinates are the bonding box for the activity zone.
color: 45136 - the color for your bounding box.</p></section>
</dd>
<dt id="arlo.Arlo.SetHumidityAlertOff"><code class="name flex">
<span>def <span class="ident">SetHumidityAlertOff</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetHumidityAlertOn"><code class="name flex">
<span>def <span class="ident">SetHumidityAlertOn</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetHumidityAlertThresholdMax"><code class="name flex">
<span>def <span class="ident">SetHumidityAlertThresholdMax</span></span>(<span>self, basestation, number=800)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetHumidityAlertThresholdMin"><code class="name flex">
<span>def <span class="ident">SetHumidityAlertThresholdMin</span></span>(<span>self, basestation, number=400)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetHumidityRecordingOff"><code class="name flex">
<span>def <span class="ident">SetHumidityRecordingOff</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetHumidityRecordingOn"><code class="name flex">
<span>def <span class="ident">SetHumidityRecordingOn</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetLoopBackModeContinuous"><code class="name flex">
<span>def <span class="ident">SetLoopBackModeContinuous</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetLoopBackModeSingleTrack"><code class="name flex">
<span>def <span class="ident">SetLoopBackModeSingleTrack</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetMotionAlertsOff"><code class="name flex">
<span>def <span class="ident">SetMotionAlertsOff</span></span>(<span>self, basestation, sensitivity=5)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetMotionAlertsOn"><code class="name flex">
<span>def <span class="ident">SetMotionAlertsOn</span></span>(<span>self, basestation, sensitivity=5)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetNightLightBrightness"><code class="name flex">
<span>def <span class="ident">SetNightLightBrightness</span></span>(<span>self, basestation, level=200)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetNightLightColor"><code class="name flex">
<span>def <span class="ident">SetNightLightColor</span></span>(<span>self, basestation, red=255, green=255, blue=255)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetNightLightMode"><code class="name flex">
<span>def <span class="ident">SetNightLightMode</span></span>(<span>self, basestation, mode=&#39;rainbow&#39;)</span>
</code></dt>
<dd>
<section class="desc"><p>mode: rainbow or rgb.</p></section>
</dd>
<dt id="arlo.Arlo.SetNightLightOff"><code class="name flex">
<span>def <span class="ident">SetNightLightOff</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetNightLightOn"><code class="name flex">
<span>def <span class="ident">SetNightLightOn</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetNightLightTimerOff"><code class="name flex">
<span>def <span class="ident">SetNightLightTimerOff</span></span>(<span>self, basestation, time=0, timediff=300)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetNightLightTimerOn"><code class="name flex">
<span>def <span class="ident">SetNightLightTimerOn</span></span>(<span>self, basestation, time=1576435472, timediff=0)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetOCProfile"><code class="name flex">
<span>def <span class="ident">SetOCProfile</span></span>(<span>self, firstName, lastName, country=&#39;United States&#39;, language=&#39;en&#39;, spam_me=0)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetSchedule"><code class="name flex">
<span>def <span class="ident">SetSchedule</span></span>(<span>self, basestation, schedule)</span>
</code></dt>
<dd>
<section class="desc"><p>The following json is what was sent to the API when I edited my schedule. It contains all of the data necessary to configure a whole week. It's a little convoluted, but you can just play around with the scheduler in Chrome and watch the schema that gets sent.</p>
<p>{
"schedule": [
{
"duration": 600,
"startActions": {
"disableModes": [
"mode0"
],
"enableModes": [
"mode1"
]
},
"days": [
"Mo",
"Tu",
"We",
"Th",
"Fr",
"Sa",
"Su"
],
"startTime": 0,
"type": "weeklyAction",
"endActions": {
"disableModes": [
"mode1"
],
"enableModes": [
"mode0"
]
}
},
{
"duration": 360,
"startActions": {
"disableModes": [
"mode0"
],
"enableModes": [
"mode2"
]
},
"days": [
"Mo",
"Tu",
"We",
"Th",
"Fr",
"Sa",
"Su"
],
"startTime": 1080,
"type": "weeklyAction",
"endActions": {
"disableModes": [
"mode2"
],
"enableModes": [
"mode0"
]
}
},
{
"duration": 480,
"startActions": {
"disableModes": [
"mode0"
],
"enableModes": [
"mode3"
]
},
"days": [
"Tu"
],
"startTime": 600,
"type": "weeklyAction",
"endActions": {
"disableModes": [
"mode3"
],
"enableModes": [
"mode0"
]
}
}
],
"name": "",
"id": "schedule.1",
"enabled": true
}</p></section>
</dd>
<dt id="arlo.Arlo.SetShuffleOff"><code class="name flex">
<span>def <span class="ident">SetShuffleOff</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetShuffleOn"><code class="name flex">
<span>def <span class="ident">SetShuffleOn</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetSleepTimerOff"><code class="name flex">
<span>def <span class="ident">SetSleepTimerOff</span></span>(<span>self, basestation, time=0, timediff=300)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetSleepTimerOn"><code class="name flex">
<span>def <span class="ident">SetSleepTimerOn</span></span>(<span>self, basestation, time=1576435472, timediff=0)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetTempAlertOff"><code class="name flex">
<span>def <span class="ident">SetTempAlertOff</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetTempAlertOn"><code class="name flex">
<span>def <span class="ident">SetTempAlertOn</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetTempAlertThresholdMax"><code class="name flex">
<span>def <span class="ident">SetTempAlertThresholdMax</span></span>(<span>self, basestation, number=240)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetTempAlertThresholdMin"><code class="name flex">
<span>def <span class="ident">SetTempAlertThresholdMin</span></span>(<span>self, basestation, number=200)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetTempRecordingOff"><code class="name flex">
<span>def <span class="ident">SetTempRecordingOff</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetTempRecordingOn"><code class="name flex">
<span>def <span class="ident">SetTempRecordingOn</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetTempUnit"><code class="name flex">
<span>def <span class="ident">SetTempUnit</span></span>(<span>self, uniqueId, unit=&#39;C&#39;)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SetVolume"><code class="name flex">
<span>def <span class="ident">SetVolume</span></span>(<span>self, basestation, mute=False, volume=50)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SirenOff"><code class="name flex">
<span>def <span class="ident">SirenOff</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SirenOn"><code class="name flex">
<span>def <span class="ident">SirenOn</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.SkipTrack"><code class="name flex">
<span>def <span class="ident">SkipTrack</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.StartRecording"><code class="name flex">
<span>def <span class="ident">StartRecording</span></span>(<span>self, basestation, camera)</span>
</code></dt>
<dd>
<section class="desc"><p>This function causes the camera to start recording.
You can get the timezone from GetDevices().</p></section>
</dd>
<dt id="arlo.Arlo.StartStream"><code class="name flex">
<span>def <span class="ident">StartStream</span></span>(<span>self, basestation, camera)</span>
</code></dt>
<dd>
<section class="desc"><p>This function returns the url of the rtsp video stream.
This stream needs to be called within 30 seconds or else it becomes invalid.
It can be streamed with: ffmpeg -re -i 'rtsps://<url>' -acodec copy -vcodec copy test.mp4
The request to /users/devices/startStream returns: { url:rtsp://<url>:443/vzmodulelive?egressToken=b<xx>&amp;userAgent=iOS&amp;cameraId=<camid>}</p></section>
</dd>
<dt id="arlo.Arlo.StopRecording"><code class="name flex">
<span>def <span class="ident">StopRecording</span></span>(<span>self, camera)</span>
</code></dt>
<dd>
<section class="desc"><p>This function causes the camera to stop recording.
You can get the timezone from GetDevices().</p></section>
</dd>
<dt id="arlo.Arlo.StopStream"><code class="name flex">
<span>def <span class="ident">StopStream</span></span>(<span>self, basestation, camera)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.StreamRecording"><code class="name flex">
<span>def <span class="ident">StreamRecording</span></span>(<span>self, url, chunk_size=4096)</span>
</code></dt>
<dd>
<section class="desc"><p>Returns a generator that is the chunked video stream from the presignedContentUrl.</p>
<dl>
<dt><strong><code>url</code></strong> :&ensp;<code>presignedContentUrl</code></dt>
<dd>&nbsp;</dd>
</dl></section>
</dd>
<dt id="arlo.Arlo.Subscribe"><code class="name flex">
<span>def <span class="ident">Subscribe</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"><p>Arlo uses the EventStream interface in the browser to do pub/sub style messaging.
Unfortunately, this appears to be the only way Arlo communicates these messages.</p>
<p>This function makes the initial GET request to /subscribe, which returns the EventStream socket.
Once we have that socket, the API requires a POST request to /notify with the "subscriptionsresource.
This call "registersthe device (which should be the basestation) so that events will be sent to the EventStream
when subsequent calls to /notify are made.</p>
<p>Since this interface is asynchronous, and this is a quick and dirty hack to get this working, I'm using a thread
to listen to the EventStream. This thread puts events into a queue. Some polling is required (see NotifyAndGetResponse()) because
the event messages aren't guaranteed to be delivered in any specific order, but I wanted to maintain a synchronous style API.</p>
<p>You generally shouldn't need to call Subscribe() directly, although I'm leaving it "publicfor now.</p></section>
</dd>
<dt id="arlo.Arlo.SubscribeToMotionEvents"><code class="name flex">
<span>def <span class="ident">SubscribeToMotionEvents</span></span>(<span>self, basestation, callback, timeout=120)</span>
</code></dt>
<dd>
<section class="desc"><p>Use this method to subscribe to motion events. You must provide a callback function which will get called once per motion event.</p>
<p>The callback function should have the following signature:
def callback(self, event)</p>
<p>This is an example of handling a specific event, in reality, you'd probably want to write a callback for HandleEvents()
that has a big switch statement in it to handle all the various events Arlo produces.</p></section>
</dd>
<dt id="arlo.Arlo.ToggleCamera"><code class="name flex">
<span>def <span class="ident">ToggleCamera</span></span>(<span>self, basestation, camera, active=True)</span>
</code></dt>
<dd>
<section class="desc"><p>active: True - Camera is off.
active: False - Camera is on.</p></section>
</dd>
<dt id="arlo.Arlo.TriggerAndHandleEvent"><code class="name flex">
<span>def <span class="ident">TriggerAndHandleEvent</span></span>(<span>self, basestation, trigger, callback, timeout=120)</span>
</code></dt>
<dd>
<section class="desc"><p>Use this method to subscribe to the event stream and provide a callback that will be called for event event received.
This function will allow you to potentially write a callback that can handle all of the events received from the event stream.
NOTE: Use this function if you need to run some code after subscribing to the eventstream, but before your callback to handle the events runs.</p></section>
</dd>
<dt id="arlo.Arlo.TriggerFullFrameSnapshot"><code class="name flex">
<span>def <span class="ident">TriggerFullFrameSnapshot</span></span>(<span>self, basestation, camera)</span>
</code></dt>
<dd>
<section class="desc"><p>This function causes the camera to record a fullframe snapshot.
The presignedFullFrameSnapshotUrl url is returned.
Use DownloadSnapshot() to download the actual image file.</p></section>
</dd>
<dt id="arlo.Arlo.TriggerStreamSnapshot"><code class="name flex">
<span>def <span class="ident">TriggerStreamSnapshot</span></span>(<span>self, basestation, camera)</span>
</code></dt>
<dd>
<section class="desc"><p>This function causes the camera to snapshot while recording.
NOTE: You MUST call StartStream() before calling this function.
If you call StartStream(), you have to start reading data from the stream, or streaming will be cancelled
and taking a snapshot may fail (since it requires the stream to be active).</p>
<p>NOTE: You should not use this function is you just want a snapshot and aren't intending to stream.
Use TriggerFullFrameSnapshot() instead.</p>
<p>NOTE: Use DownloadSnapshot() to download the actual image file.</p></section>
</dd>
<dt id="arlo.Arlo.UnPauseTrack"><code class="name flex">
<span>def <span class="ident">UnPauseTrack</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.Unsubscribe"><code class="name flex">
<span>def <span class="ident">Unsubscribe</span></span>(<span>self, basestation)</span>
</code></dt>
<dd>
<section class="desc"><p>This method stops the EventStream subscription and removes it from the event_stream collection.</p></section>
</dd>
<dt id="arlo.Arlo.UpdateDeviceName"><code class="name flex">
<span>def <span class="ident">UpdateDeviceName</span></span>(<span>self, device, name)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.UpdateDisplayOrder"><code class="name flex">
<span>def <span class="ident">UpdateDisplayOrder</span></span>(<span>self, body)</span>
</code></dt>
<dd>
<section class="desc"><p>This is an example of the json you would pass in the body to UpdateDisplayOrder() of your devices in the UI.</p>
<p>XXXXXXXXXXXXX is the device id of each camera. You can get this from GetDevices().
{
"devices":{
"XXXXXXXXXXXXX":1,
"XXXXXXXXXXXXX":2,
"XXXXXXXXXXXXX":3
}
}</p></section>
</dd>
<dt id="arlo.Arlo.UpdateFriend"><code class="name flex">
<span>def <span class="ident">UpdateFriend</span></span>(<span>self, body)</span>
</code></dt>
<dd>
<section class="desc"><p>This is an example of the json you would pass in the body:
{
"firstName":"Some",
"lastName":"Body",
"devices":{
"XXXXXXXXXXXXX":"Camera 1",
"XXXXXXXXXXXXX":"Camera 2 ",
"XXXXXXXXXXXXX":"Camera 3"
},
"lastModified":1463977440911,
"adminUser":true,
"email":"user@example.com",
"id":"XXX-XXXXXXX"
}</p></section>
</dd>
<dt id="arlo.Arlo.UpdatePassword"><code class="name flex">
<span>def <span class="ident">UpdatePassword</span></span>(<span>self, password)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.UpdateProfile"><code class="name flex">
<span>def <span class="ident">UpdateProfile</span></span>(<span>self, first_name, last_name)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.genTransId"><code class="name flex">
<span>def <span class="ident">genTransId</span></span>(<span>self, trans_type=&#39;web&#39;)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.interrupt_handler"><code class="name flex">
<span>def <span class="ident">interrupt_handler</span></span>(<span>self, signum, frame)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
<dt id="arlo.Arlo.to_timestamp"><code class="name flex">
<span>def <span class="ident">to_timestamp</span></span>(<span>self, dt)</span>
</code></dt>
<dd>
<section class="desc"></section>
</dd>
</dl>
</dd>
</dl>
</section>
</article>
<nav id="sidebar">
<h1>Index</h1>
<div class="toc">
<ul></ul>
</div>
<ul id="index">
<li><h3><a href="#header-classes">Classes</a></h3>
<ul>
<li>
<h4><code><a title="arlo.Arlo" href="#arlo.Arlo">Arlo</a></code></h4>
<ul class="two-column">
<li><code><a title="arlo.Arlo.AddFriend" href="#arlo.Arlo.AddFriend">AddFriend</a></code></li>
<li><code><a title="arlo.Arlo.AdjustBrightness" href="#arlo.Arlo.AdjustBrightness">AdjustBrightness</a></code></li>
<li><code><a title="arlo.Arlo.AlertNotificationMethods" href="#arlo.Arlo.AlertNotificationMethods">AlertNotificationMethods</a></code></li>
<li><code><a title="arlo.Arlo.Arm" href="#arlo.Arlo.Arm">Arm</a></code></li>
<li><code><a title="arlo.Arlo.BatchDeleteRecordings" href="#arlo.Arlo.BatchDeleteRecordings">BatchDeleteRecordings</a></code></li>
<li><code><a title="arlo.Arlo.Calendar" href="#arlo.Arlo.Calendar">Calendar</a></code></li>
<li><code><a title="arlo.Arlo.CustomMode" href="#arlo.Arlo.CustomMode">CustomMode</a></code></li>
<li><code><a title="arlo.Arlo.DeleteMode" href="#arlo.Arlo.DeleteMode">DeleteMode</a></code></li>
<li><code><a title="arlo.Arlo.DeleteRecording" href="#arlo.Arlo.DeleteRecording">DeleteRecording</a></code></li>
<li><code><a title="arlo.Arlo.Disarm" href="#arlo.Arlo.Disarm">Disarm</a></code></li>
<li><code><a title="arlo.Arlo.DownloadRecording" href="#arlo.Arlo.DownloadRecording">DownloadRecording</a></code></li>
<li><code><a title="arlo.Arlo.DownloadSnapshot" href="#arlo.Arlo.DownloadSnapshot">DownloadSnapshot</a></code></li>
<li><code><a title="arlo.Arlo.Geofencing" href="#arlo.Arlo.Geofencing">Geofencing</a></code></li>
<li><code><a title="arlo.Arlo.GetAudioPlayback" href="#arlo.Arlo.GetAudioPlayback">GetAudioPlayback</a></code></li>
<li><code><a title="arlo.Arlo.GetAutomationActivityZones" href="#arlo.Arlo.GetAutomationActivityZones">GetAutomationActivityZones</a></code></li>
<li><code><a title="arlo.Arlo.GetAutomationDefinitions" href="#arlo.Arlo.GetAutomationDefinitions">GetAutomationDefinitions</a></code></li>
<li><code><a title="arlo.Arlo.GetBaseStationState" href="#arlo.Arlo.GetBaseStationState">GetBaseStationState</a></code></li>
<li><code><a title="arlo.Arlo.GetCalendar" href="#arlo.Arlo.GetCalendar">GetCalendar</a></code></li>
<li><code><a title="arlo.Arlo.GetCameraState" href="#arlo.Arlo.GetCameraState">GetCameraState</a></code></li>
<li><code><a title="arlo.Arlo.GetCameraTempReading" href="#arlo.Arlo.GetCameraTempReading">GetCameraTempReading</a></code></li>
<li><code><a title="arlo.Arlo.GetCvrPlaylist" href="#arlo.Arlo.GetCvrPlaylist">GetCvrPlaylist</a></code></li>
<li><code><a title="arlo.Arlo.GetDeviceCapabilities" href="#arlo.Arlo.GetDeviceCapabilities">GetDeviceCapabilities</a></code></li>
<li><code><a title="arlo.Arlo.GetDeviceSupport" href="#arlo.Arlo.GetDeviceSupport">GetDeviceSupport</a></code></li>
<li><code><a title="arlo.Arlo.GetDeviceSupportV3" href="#arlo.Arlo.GetDeviceSupportV3">GetDeviceSupportV3</a></code></li>
<li><code><a title="arlo.Arlo.GetDeviceSupportv2" href="#arlo.Arlo.GetDeviceSupportv2">GetDeviceSupportv2</a></code></li>
<li><code><a title="arlo.Arlo.GetDevices" href="#arlo.Arlo.GetDevices">GetDevices</a></code></li>
<li><code><a title="arlo.Arlo.GetEmergencyLocations" href="#arlo.Arlo.GetEmergencyLocations">GetEmergencyLocations</a></code></li>
<li><code><a title="arlo.Arlo.GetFriends" href="#arlo.Arlo.GetFriends">GetFriends</a></code></li>
<li><code><a title="arlo.Arlo.GetLibrary" href="#arlo.Arlo.GetLibrary">GetLibrary</a></code></li>
<li><code><a title="arlo.Arlo.GetLibraryMetaData" href="#arlo.Arlo.GetLibraryMetaData">GetLibraryMetaData</a></code></li>
<li><code><a title="arlo.Arlo.GetLocations" href="#arlo.Arlo.GetLocations">GetLocations</a></code></li>
<li><code><a title="arlo.Arlo.GetModes" href="#arlo.Arlo.GetModes">GetModes</a></code></li>
<li><code><a title="arlo.Arlo.GetModesV2" href="#arlo.Arlo.GetModesV2">GetModesV2</a></code></li>
<li><code><a title="arlo.Arlo.GetOCProfile" href="#arlo.Arlo.GetOCProfile">GetOCProfile</a></code></li>
<li><code><a title="arlo.Arlo.GetPaymentBilling" href="#arlo.Arlo.GetPaymentBilling">GetPaymentBilling</a></code></li>
<li><code><a title="arlo.Arlo.GetPaymentOffers" href="#arlo.Arlo.GetPaymentOffers">GetPaymentOffers</a></code></li>
<li><code><a title="arlo.Arlo.GetPaymentOffersV2" href="#arlo.Arlo.GetPaymentOffersV2">GetPaymentOffersV2</a></code></li>
<li><code><a title="arlo.Arlo.GetPaymentOffersV3" href="#arlo.Arlo.GetPaymentOffersV3">GetPaymentOffersV3</a></code></li>
<li><code><a title="arlo.Arlo.GetPaymentOffersV4" href="#arlo.Arlo.GetPaymentOffersV4">GetPaymentOffersV4</a></code></li>
<li><code><a title="arlo.Arlo.GetProfile" href="#arlo.Arlo.GetProfile">GetProfile</a></code></li>
<li><code><a title="arlo.Arlo.GetRecording" href="#arlo.Arlo.GetRecording">GetRecording</a></code></li>
<li><code><a title="arlo.Arlo.GetRules" href="#arlo.Arlo.GetRules">GetRules</a></code></li>
<li><code><a title="arlo.Arlo.GetSensorConfig" href="#arlo.Arlo.GetSensorConfig">GetSensorConfig</a></code></li>
<li><code><a title="arlo.Arlo.GetServiceLevel" href="#arlo.Arlo.GetServiceLevel">GetServiceLevel</a></code></li>
<li><code><a title="arlo.Arlo.GetServiceLevelSettings" href="#arlo.Arlo.GetServiceLevelSettings">GetServiceLevelSettings</a></code></li>
<li><code><a title="arlo.Arlo.GetServiceLevelV2" href="#arlo.Arlo.GetServiceLevelV2">GetServiceLevelV2</a></code></li>
<li><code><a title="arlo.Arlo.GetServiceLevelV3" href="#arlo.Arlo.GetServiceLevelV3">GetServiceLevelV3</a></code></li>
<li><code><a title="arlo.Arlo.GetServiceLevelV4" href="#arlo.Arlo.GetServiceLevelV4">GetServiceLevelV4</a></code></li>
<li><code><a title="arlo.Arlo.GetSession" href="#arlo.Arlo.GetSession">GetSession</a></code></li>
<li><code><a title="arlo.Arlo.GetSmartAlerts" href="#arlo.Arlo.GetSmartAlerts">GetSmartAlerts</a></code></li>
<li><code><a title="arlo.Arlo.GetSmartFeatures" href="#arlo.Arlo.GetSmartFeatures">GetSmartFeatures</a></code></li>
<li><code><a title="arlo.Arlo.GetUpdateFeatures" href="#arlo.Arlo.GetUpdateFeatures">GetUpdateFeatures</a></code></li>
<li><code><a title="arlo.Arlo.HandleEvents" href="#arlo.Arlo.HandleEvents">HandleEvents</a></code></li>
<li><code><a title="arlo.Arlo.Login" href="#arlo.Arlo.Login">Login</a></code></li>
<li><code><a title="arlo.Arlo.Logout" href="#arlo.Arlo.Logout">Logout</a></code></li>
<li><code><a title="arlo.Arlo.Notify" href="#arlo.Arlo.Notify">Notify</a></code></li>
<li><code><a title="arlo.Arlo.NotifyAndGetResponse" href="#arlo.Arlo.NotifyAndGetResponse">NotifyAndGetResponse</a></code></li>
<li><code><a title="arlo.Arlo.PauseTrack" href="#arlo.Arlo.PauseTrack">PauseTrack</a></code></li>
<li><code><a title="arlo.Arlo.Ping" href="#arlo.Arlo.Ping">Ping</a></code></li>
<li><code><a title="arlo.Arlo.PlayTrack" href="#arlo.Arlo.PlayTrack">PlayTrack</a></code></li>
<li><code><a title="arlo.Arlo.PushToTalk" href="#arlo.Arlo.PushToTalk">PushToTalk</a></code></li>
<li><code><a title="arlo.Arlo.RemoveFriend" href="#arlo.Arlo.RemoveFriend">RemoveFriend</a></code></li>
<li><code><a title="arlo.Arlo.ResendFriendInvite" href="#arlo.Arlo.ResendFriendInvite">ResendFriendInvite</a></code></li>
<li><code><a title="arlo.Arlo.Reset" href="#arlo.Arlo.Reset">Reset</a></code></li>
<li><code><a title="arlo.Arlo.RestartBasestation" href="#arlo.Arlo.RestartBasestation">RestartBasestation</a></code></li>
<li><code><a title="arlo.Arlo.SetAirQualityAlertOff" href="#arlo.Arlo.SetAirQualityAlertOff">SetAirQualityAlertOff</a></code></li>
<li><code><a title="arlo.Arlo.SetAirQualityAlertOn" href="#arlo.Arlo.SetAirQualityAlertOn">SetAirQualityAlertOn</a></code></li>
<li><code><a title="arlo.Arlo.SetAirQualityAlertThresholdMax" href="#arlo.Arlo.SetAirQualityAlertThresholdMax">SetAirQualityAlertThresholdMax</a></code></li>
<li><code><a title="arlo.Arlo.SetAirQualityAlertThresholdMin" href="#arlo.Arlo.SetAirQualityAlertThresholdMin">SetAirQualityAlertThresholdMin</a></code></li>
<li><code><a title="arlo.Arlo.SetAirQualityRecordingOff" href="#arlo.Arlo.SetAirQualityRecordingOff">SetAirQualityRecordingOff</a></code></li>
<li><code><a title="arlo.Arlo.SetAirQualityRecordingOn" href="#arlo.Arlo.SetAirQualityRecordingOn">SetAirQualityRecordingOn</a></code></li>
<li><code><a title="arlo.Arlo.SetAudioAlertsOff" href="#arlo.Arlo.SetAudioAlertsOff">SetAudioAlertsOff</a></code></li>
<li><code><a title="arlo.Arlo.SetAudioAlertsOn" href="#arlo.Arlo.SetAudioAlertsOn">SetAudioAlertsOn</a></code></li>
<li><code><a title="arlo.Arlo.SetAutomationActivityZones" href="#arlo.Arlo.SetAutomationActivityZones">SetAutomationActivityZones</a></code></li>
<li><code><a title="arlo.Arlo.SetHumidityAlertOff" href="#arlo.Arlo.SetHumidityAlertOff">SetHumidityAlertOff</a></code></li>
<li><code><a title="arlo.Arlo.SetHumidityAlertOn" href="#arlo.Arlo.SetHumidityAlertOn">SetHumidityAlertOn</a></code></li>
<li><code><a title="arlo.Arlo.SetHumidityAlertThresholdMax" href="#arlo.Arlo.SetHumidityAlertThresholdMax">SetHumidityAlertThresholdMax</a></code></li>
<li><code><a title="arlo.Arlo.SetHumidityAlertThresholdMin" href="#arlo.Arlo.SetHumidityAlertThresholdMin">SetHumidityAlertThresholdMin</a></code></li>
<li><code><a title="arlo.Arlo.SetHumidityRecordingOff" href="#arlo.Arlo.SetHumidityRecordingOff">SetHumidityRecordingOff</a></code></li>
<li><code><a title="arlo.Arlo.SetHumidityRecordingOn" href="#arlo.Arlo.SetHumidityRecordingOn">SetHumidityRecordingOn</a></code></li>
<li><code><a title="arlo.Arlo.SetLoopBackModeContinuous" href="#arlo.Arlo.SetLoopBackModeContinuous">SetLoopBackModeContinuous</a></code></li>
<li><code><a title="arlo.Arlo.SetLoopBackModeSingleTrack" href="#arlo.Arlo.SetLoopBackModeSingleTrack">SetLoopBackModeSingleTrack</a></code></li>
<li><code><a title="arlo.Arlo.SetMotionAlertsOff" href="#arlo.Arlo.SetMotionAlertsOff">SetMotionAlertsOff</a></code></li>
<li><code><a title="arlo.Arlo.SetMotionAlertsOn" href="#arlo.Arlo.SetMotionAlertsOn">SetMotionAlertsOn</a></code></li>
<li><code><a title="arlo.Arlo.SetNightLightBrightness" href="#arlo.Arlo.SetNightLightBrightness">SetNightLightBrightness</a></code></li>
<li><code><a title="arlo.Arlo.SetNightLightColor" href="#arlo.Arlo.SetNightLightColor">SetNightLightColor</a></code></li>
<li><code><a title="arlo.Arlo.SetNightLightMode" href="#arlo.Arlo.SetNightLightMode">SetNightLightMode</a></code></li>
<li><code><a title="arlo.Arlo.SetNightLightOff" href="#arlo.Arlo.SetNightLightOff">SetNightLightOff</a></code></li>
<li><code><a title="arlo.Arlo.SetNightLightOn" href="#arlo.Arlo.SetNightLightOn">SetNightLightOn</a></code></li>
<li><code><a title="arlo.Arlo.SetNightLightTimerOff" href="#arlo.Arlo.SetNightLightTimerOff">SetNightLightTimerOff</a></code></li>
<li><code><a title="arlo.Arlo.SetNightLightTimerOn" href="#arlo.Arlo.SetNightLightTimerOn">SetNightLightTimerOn</a></code></li>
<li><code><a title="arlo.Arlo.SetOCProfile" href="#arlo.Arlo.SetOCProfile">SetOCProfile</a></code></li>
<li><code><a title="arlo.Arlo.SetSchedule" href="#arlo.Arlo.SetSchedule">SetSchedule</a></code></li>
<li><code><a title="arlo.Arlo.SetShuffleOff" href="#arlo.Arlo.SetShuffleOff">SetShuffleOff</a></code></li>
<li><code><a title="arlo.Arlo.SetShuffleOn" href="#arlo.Arlo.SetShuffleOn">SetShuffleOn</a></code></li>
<li><code><a title="arlo.Arlo.SetSleepTimerOff" href="#arlo.Arlo.SetSleepTimerOff">SetSleepTimerOff</a></code></li>
<li><code><a title="arlo.Arlo.SetSleepTimerOn" href="#arlo.Arlo.SetSleepTimerOn">SetSleepTimerOn</a></code></li>
<li><code><a title="arlo.Arlo.SetTempAlertOff" href="#arlo.Arlo.SetTempAlertOff">SetTempAlertOff</a></code></li>
<li><code><a title="arlo.Arlo.SetTempAlertOn" href="#arlo.Arlo.SetTempAlertOn">SetTempAlertOn</a></code></li>
<li><code><a title="arlo.Arlo.SetTempAlertThresholdMax" href="#arlo.Arlo.SetTempAlertThresholdMax">SetTempAlertThresholdMax</a></code></li>
<li><code><a title="arlo.Arlo.SetTempAlertThresholdMin" href="#arlo.Arlo.SetTempAlertThresholdMin">SetTempAlertThresholdMin</a></code></li>
<li><code><a title="arlo.Arlo.SetTempRecordingOff" href="#arlo.Arlo.SetTempRecordingOff">SetTempRecordingOff</a></code></li>
<li><code><a title="arlo.Arlo.SetTempRecordingOn" href="#arlo.Arlo.SetTempRecordingOn">SetTempRecordingOn</a></code></li>
<li><code><a title="arlo.Arlo.SetTempUnit" href="#arlo.Arlo.SetTempUnit">SetTempUnit</a></code></li>
<li><code><a title="arlo.Arlo.SetVolume" href="#arlo.Arlo.SetVolume">SetVolume</a></code></li>
<li><code><a title="arlo.Arlo.SirenOff" href="#arlo.Arlo.SirenOff">SirenOff</a></code></li>
<li><code><a title="arlo.Arlo.SirenOn" href="#arlo.Arlo.SirenOn">SirenOn</a></code></li>
<li><code><a title="arlo.Arlo.SkipTrack" href="#arlo.Arlo.SkipTrack">SkipTrack</a></code></li>
<li><code><a title="arlo.Arlo.StartRecording" href="#arlo.Arlo.StartRecording">StartRecording</a></code></li>
<li><code><a title="arlo.Arlo.StartStream" href="#arlo.Arlo.StartStream">StartStream</a></code></li>
<li><code><a title="arlo.Arlo.StopRecording" href="#arlo.Arlo.StopRecording">StopRecording</a></code></li>
<li><code><a title="arlo.Arlo.StopStream" href="#arlo.Arlo.StopStream">StopStream</a></code></li>
<li><code><a title="arlo.Arlo.StreamRecording" href="#arlo.Arlo.StreamRecording">StreamRecording</a></code></li>
<li><code><a title="arlo.Arlo.Subscribe" href="#arlo.Arlo.Subscribe">Subscribe</a></code></li>
<li><code><a title="arlo.Arlo.SubscribeToMotionEvents" href="#arlo.Arlo.SubscribeToMotionEvents">SubscribeToMotionEvents</a></code></li>
<li><code><a title="arlo.Arlo.TRANSID_PREFIX" href="#arlo.Arlo.TRANSID_PREFIX">TRANSID_PREFIX</a></code></li>
<li><code><a title="arlo.Arlo.ToggleCamera" href="#arlo.Arlo.ToggleCamera">ToggleCamera</a></code></li>
<li><code><a title="arlo.Arlo.TriggerAndHandleEvent" href="#arlo.Arlo.TriggerAndHandleEvent">TriggerAndHandleEvent</a></code></li>
<li><code><a title="arlo.Arlo.TriggerFullFrameSnapshot" href="#arlo.Arlo.TriggerFullFrameSnapshot">TriggerFullFrameSnapshot</a></code></li>
<li><code><a title="arlo.Arlo.TriggerStreamSnapshot" href="#arlo.Arlo.TriggerStreamSnapshot">TriggerStreamSnapshot</a></code></li>
<li><code><a title="arlo.Arlo.UnPauseTrack" href="#arlo.Arlo.UnPauseTrack">UnPauseTrack</a></code></li>
<li><code><a title="arlo.Arlo.Unsubscribe" href="#arlo.Arlo.Unsubscribe">Unsubscribe</a></code></li>
<li><code><a title="arlo.Arlo.UpdateDeviceName" href="#arlo.Arlo.UpdateDeviceName">UpdateDeviceName</a></code></li>
<li><code><a title="arlo.Arlo.UpdateDisplayOrder" href="#arlo.Arlo.UpdateDisplayOrder">UpdateDisplayOrder</a></code></li>
<li><code><a title="arlo.Arlo.UpdateFriend" href="#arlo.Arlo.UpdateFriend">UpdateFriend</a></code></li>
<li><code><a title="arlo.Arlo.UpdatePassword" href="#arlo.Arlo.UpdatePassword">UpdatePassword</a></code></li>
<li><code><a title="arlo.Arlo.UpdateProfile" href="#arlo.Arlo.UpdateProfile">UpdateProfile</a></code></li>
<li><code><a title="arlo.Arlo.__init__" href="#arlo.Arlo.__init__">__init__</a></code></li>
<li><code><a title="arlo.Arlo.genTransId" href="#arlo.Arlo.genTransId">genTransId</a></code></li>
<li><code><a title="arlo.Arlo.interrupt_handler" href="#arlo.Arlo.interrupt_handler">interrupt_handler</a></code></li>
<li><code><a title="arlo.Arlo.to_timestamp" href="#arlo.Arlo.to_timestamp">to_timestamp</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</main>
<footer id="footer">
<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.5.1</a>.</p>
</footer>
</body>
</html>