arlo 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +48 -8
- data/changelog.md +14 -0
- data/lib/arlo.rb +1 -1
- data/lib/arlo/devices.rb +27 -5
- data/lib/arlo/{token.rb → init.rb} +19 -6
- data/lib/arlo/library.rb +4 -4
- data/lib/arlo/network_helper.rb +14 -5
- data/lib/arlo/profile.rb +3 -3
- data/lib/arlo/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2ef361a03fce87641da660189ebb83dd3b7fbfc4
|
4
|
+
data.tar.gz: d89c72f4e22601bf702807624fb515116b8c5f68
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5aa0bccc7721415c7a78e6b745b45a81acf4ed67828dbe12de1099ca3362fd47e839e2d97c4f25b0f7140f6ff634495052fa394855321359c878a86d9b289657
|
7
|
+
data.tar.gz: 96c787a6bd3f6716e8f43c1a64fc44adc5cb80d11ffe308e006a34c9e65123b1f891b7da39b8c19f43a89c549f2fc3c08712db39f9b063801b98abae5ad6d07b
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
[](https://badge.fury.io/rb/arlo) [](https://travis-ci.org/ihassin/arlo)
|
4
4
|
|
5
|
-
Get information about your Arlo account as well as your devices.
|
5
|
+
Get and set information about your Arlo account as well as your devices.
|
6
6
|
|
7
7
|
# Installation
|
8
8
|
|
@@ -35,37 +35,77 @@ Set up the environment variables reflecting your Arlo credentials:
|
|
35
35
|
export ARLO_EMAIL=xxx
|
36
36
|
export ARLO_PASSWORD=yyy
|
37
37
|
|
38
|
-
## get_token
|
39
|
-
|
40
|
-
Call this to gain access to the other APIs.
|
41
|
-
|
42
38
|
## get_profile
|
43
39
|
|
44
40
|
Call this to get your profile information.
|
45
41
|
|
42
|
+
```
|
43
|
+
api = Arlo::API.new
|
44
|
+
profile = api.get_profile
|
45
|
+
firstName = api.profile['data']['firstName']
|
46
|
+
```
|
47
|
+
|
48
|
+
Note: This method is implicitly called when instantiating the API object, so you can directly see the profile by:
|
49
|
+
```
|
50
|
+
api = Arlo::API.new
|
51
|
+
firstName = api.profile['data']['firstName']
|
52
|
+
```
|
53
|
+
|
46
54
|
## get_devices
|
47
55
|
|
48
56
|
Call this to get the list of devices (including basestations) registered with the account.
|
49
57
|
|
58
|
+
```
|
59
|
+
api = Arlo::API.new
|
60
|
+
devices = api.get_devices
|
61
|
+
first_device = api.devices['data'][0]
|
62
|
+
```
|
63
|
+
|
64
|
+
Note: This method is implicitly called when instantiating the API object, so you can directly see the devices by:
|
65
|
+
```
|
66
|
+
api = Arlo::API.new
|
67
|
+
first_device = api.devices['data'][0]
|
68
|
+
```
|
69
|
+
|
50
70
|
## get_device_info
|
51
71
|
|
52
72
|
Call this to get device information.
|
53
73
|
|
74
|
+
```
|
75
|
+
api = Arlo::API.new
|
76
|
+
camera1 = api.get_device_info 'Camera1"
|
77
|
+
```
|
78
|
+
|
79
|
+
## arm_device
|
80
|
+
|
81
|
+
Call this to arm or disarm a device
|
82
|
+
|
83
|
+
```
|
84
|
+
api = Arlo::API.new
|
85
|
+
camera1 = api.arm_device 'Camera1", true|false
|
86
|
+
```
|
87
|
+
|
54
88
|
## get_library
|
55
89
|
|
56
90
|
Call this to get the library's index of all the recordings it has between the two supplied dates.
|
57
91
|
|
92
|
+
```
|
93
|
+
api = Arlo::API.new
|
94
|
+
library = api.get_library '20180802', '20180803'
|
95
|
+
```
|
96
|
+
|
58
97
|
# TODO
|
59
98
|
|
60
|
-
*
|
61
|
-
* Control cameras (start/stop recordings)
|
99
|
+
* Control cameras (start/stop recordings, take snapshots)
|
62
100
|
* Download videos
|
63
101
|
|
64
102
|
# Development
|
65
103
|
|
66
104
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
67
105
|
|
68
|
-
To install this gem onto your local machine, run `bundle exec rake install`.
|
106
|
+
To install this gem onto your local machine, run `bundle exec rake install`.
|
107
|
+
|
108
|
+
To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
69
109
|
|
70
110
|
# Contributing
|
71
111
|
|
data/changelog.md
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
## 2018-08-05
|
4
|
+
|
5
|
+
### Breaking
|
6
|
+
|
7
|
+
* No need to pass the token to methods anymore
|
8
|
+
* No need to pass the device-list to methods
|
9
|
+
|
10
|
+
### Non-breaking
|
11
|
+
|
12
|
+
* API object is logged-in when created
|
13
|
+
* Devices and Profile are loaded when API object is created
|
14
|
+
* Added arm/disarm API method
|
data/lib/arlo.rb
CHANGED
data/lib/arlo/devices.rb
CHANGED
@@ -1,13 +1,35 @@
|
|
1
|
+
require 'securerandom'
|
2
|
+
|
1
3
|
module Arlo
|
2
4
|
class API
|
3
|
-
def get_devices
|
4
|
-
|
5
|
-
JSON.parse(
|
5
|
+
def get_devices
|
6
|
+
devices = get 'https://arlo.netgear.com/hmsweb/users/devices'
|
7
|
+
@devices = JSON.parse(devices.body)
|
6
8
|
end
|
7
9
|
|
8
|
-
def get_device_info
|
10
|
+
def get_device_info(device_name)
|
9
11
|
raise 'Missing device_name' unless device_name
|
10
|
-
|
12
|
+
@devices['data'].select {|device| device['deviceName'] == device_name }[0]
|
13
|
+
end
|
14
|
+
|
15
|
+
def arm_device(base_station, armed)
|
16
|
+
station_id = base_station['deviceId']
|
17
|
+
payload = {
|
18
|
+
'from': 'arlogem',
|
19
|
+
'to': station_id,
|
20
|
+
'action': 'set',
|
21
|
+
'resource': 'modes',
|
22
|
+
'transId': SecureRandom.uuid,
|
23
|
+
'publishResponse': true,
|
24
|
+
'properties': {
|
25
|
+
'active': armed ? 'mode1' : 'mode0'
|
26
|
+
}
|
27
|
+
}
|
28
|
+
|
29
|
+
ret_val = post("https://arlo.netgear.com/hmsweb/users/devices/notify/#{station_id}",
|
30
|
+
payload,
|
31
|
+
'xcloudId': base_station['xCloudId'])
|
32
|
+
JSON.parse(ret_val.body)
|
11
33
|
end
|
12
34
|
end
|
13
35
|
end
|
@@ -2,22 +2,35 @@ module Arlo
|
|
2
2
|
class API
|
3
3
|
|
4
4
|
def initialize
|
5
|
-
|
5
|
+
@token = login
|
6
|
+
@devices = get_devices
|
7
|
+
@profile = get_profile
|
6
8
|
end
|
7
9
|
|
8
|
-
def
|
9
|
-
|
10
|
+
def token
|
11
|
+
@token
|
12
|
+
end
|
13
|
+
|
14
|
+
def devices
|
15
|
+
@devices
|
16
|
+
end
|
17
|
+
|
18
|
+
def profile
|
19
|
+
@profile
|
20
|
+
end
|
21
|
+
|
22
|
+
def login
|
10
23
|
email = ENV['ARLO_EMAIL']
|
11
24
|
raise 'Missing ARLO_EMAIL environment variable' unless email
|
12
25
|
password = ENV['ARLO_PASSWORD']
|
13
26
|
raise 'Missing ARLO_PASSWORD environment variable' unless password
|
14
27
|
|
15
28
|
payload = {
|
16
|
-
|
17
|
-
|
29
|
+
'email': email,
|
30
|
+
'password': password
|
18
31
|
}
|
19
32
|
response = post('https://arlo.netgear.com/hmsweb/login/v2', payload)
|
20
|
-
|
33
|
+
JSON.parse(response.body)['data']['token']
|
21
34
|
end
|
22
35
|
|
23
36
|
end
|
data/lib/arlo/library.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
module Arlo
|
2
2
|
class API
|
3
|
-
def get_library(
|
3
|
+
def get_library(from_date, to_date)
|
4
4
|
payload = {
|
5
|
-
|
6
|
-
|
5
|
+
'dateFrom': from_date,
|
6
|
+
'dateTo': to_date
|
7
7
|
}
|
8
|
-
library = post('https://arlo.netgear.com/hmsweb/users/library', payload
|
8
|
+
library = post('https://arlo.netgear.com/hmsweb/users/library', payload)
|
9
9
|
JSON.parse(library.body)
|
10
10
|
end
|
11
11
|
end
|
data/lib/arlo/network_helper.rb
CHANGED
@@ -5,26 +5,35 @@ require 'openssl'
|
|
5
5
|
|
6
6
|
module Arlo
|
7
7
|
class API
|
8
|
-
def get url
|
8
|
+
def get url
|
9
9
|
uri = URI.parse(url)
|
10
10
|
http = Net::HTTP.new(uri.host, uri.port)
|
11
11
|
http.use_ssl = true
|
12
12
|
|
13
13
|
request = Net::HTTP::Get.new(uri)
|
14
14
|
request.add_field('Content-Type', 'application/json;charset=UTF-8')
|
15
|
-
request.add_field('Authorization', token)
|
15
|
+
request.add_field('Authorization', @token)
|
16
16
|
|
17
17
|
http.request(request)
|
18
18
|
end
|
19
19
|
|
20
|
-
def post url, payload,
|
20
|
+
def post url, payload, xheaders = nil
|
21
21
|
uri = URI.parse(url)
|
22
22
|
http = Net::HTTP.new(uri.host, uri.port)
|
23
23
|
http.use_ssl = true
|
24
24
|
|
25
25
|
request = Net::HTTP::Post.new(uri)
|
26
|
-
|
27
|
-
|
26
|
+
|
27
|
+
headers = {
|
28
|
+
'Content-Type': 'application/json;charset=UTF-8',
|
29
|
+
'Authorization': @token
|
30
|
+
}
|
31
|
+
|
32
|
+
headers.merge!(xheaders) if xheaders
|
33
|
+
|
34
|
+
headers.each do |key, value|
|
35
|
+
request.add_field(key, value)
|
36
|
+
end
|
28
37
|
request.body = payload.to_json
|
29
38
|
|
30
39
|
http.request(request)
|
data/lib/arlo/profile.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
module Arlo
|
2
2
|
class API
|
3
|
-
def get_profile
|
4
|
-
profile = get
|
5
|
-
JSON.parse(profile.body)
|
3
|
+
def get_profile
|
4
|
+
profile = get 'https://arlo.netgear.com/hmsweb/users/profile'
|
5
|
+
@profile = JSON.parse(profile.body)
|
6
6
|
end
|
7
7
|
end
|
8
8
|
end
|
data/lib/arlo/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arlo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Itamar Hassin
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-08-
|
11
|
+
date: 2018-08-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -106,13 +106,14 @@ files:
|
|
106
106
|
- arlo.gemspec
|
107
107
|
- bin/console
|
108
108
|
- bin/setup
|
109
|
+
- changelog.md
|
109
110
|
- exe/arlo
|
110
111
|
- lib/arlo.rb
|
111
112
|
- lib/arlo/devices.rb
|
113
|
+
- lib/arlo/init.rb
|
112
114
|
- lib/arlo/library.rb
|
113
115
|
- lib/arlo/network_helper.rb
|
114
116
|
- lib/arlo/profile.rb
|
115
|
-
- lib/arlo/token.rb
|
116
117
|
- lib/arlo/version.rb
|
117
118
|
homepage: https://github.com/ihassin/arlo
|
118
119
|
licenses:
|