class Arlo::API
Public Class Methods
new()
click to toggle source
# File lib/arlo/init.rb, line 4 def initialize @token = login @devices = get_devices @profile = get_profile end
Public Instance Methods
arm_device(device, armed)
click to toggle source
# File lib/arlo/devices.rb, line 15 def arm_device(device, armed) device_id = device['deviceId'] payload = { 'from': 'arlogem', 'to': device_id, 'action': 'set', 'resource': 'modes', 'transId': SecureRandom.uuid, 'publishResponse': true, 'properties': { 'active': armed ? 'mode1' : 'mode0' } } ret_val = post("https://arlo.netgear.com/hmsweb/users/devices/notify/#{device_id}", payload, 'xcloudId': device['xCloudId']) JSON.parse(ret_val.body) end
devices()
click to toggle source
# File lib/arlo/init.rb, line 14 def devices @devices end
get(url)
click to toggle source
# File lib/arlo/network_helper.rb, line 8 def get url uri = URI.parse(url) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true request = Net::HTTP::Get.new(uri) request.add_field('Content-Type', 'application/json;charset=UTF-8') request.add_field('Authorization', @token) http.request(request) end
get_device_info(device_name)
click to toggle source
# File lib/arlo/devices.rb, line 10 def get_device_info(device_name) raise 'Missing device_name' unless device_name @devices['data'].select {|device| device['deviceName'] == device_name }[0] end
get_devices()
click to toggle source
# File lib/arlo/devices.rb, line 5 def get_devices devices = get 'https://arlo.netgear.com/hmsweb/users/devices' @devices = JSON.parse(devices.body) end
get_library(from_date, to_date)
click to toggle source
# File lib/arlo/library.rb, line 3 def get_library(from_date, to_date) payload = { 'dateFrom': from_date, 'dateTo': to_date } library = post('https://arlo.netgear.com/hmsweb/users/library', payload) JSON.parse(library.body) end
get_profile()
click to toggle source
# File lib/arlo/profile.rb, line 3 def get_profile profile = get 'https://arlo.netgear.com/hmsweb/users/profile' @profile = JSON.parse(profile.body) end
login()
click to toggle source
# File lib/arlo/init.rb, line 22 def login email = ENV['ARLO_EMAIL'] raise 'Missing ARLO_EMAIL environment variable' unless email password = ENV['ARLO_PASSWORD'] raise 'Missing ARLO_PASSWORD environment variable' unless password payload = { 'email': email, 'password': password } response = post('https://arlo.netgear.com/hmsweb/login/v2', payload) JSON.parse(response.body)['data']['token'] end
post(url, payload, xheaders = nil)
click to toggle source
# File lib/arlo/network_helper.rb, line 20 def post url, payload, xheaders = nil uri = URI.parse(url) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true request = Net::HTTP::Post.new(uri) headers = { 'Content-Type': 'application/json;charset=UTF-8', 'Authorization': @token } headers.merge!(xheaders) if xheaders headers.each do |key, value| request.add_field(key, value) end request.body = payload.to_json http.request(request) end
profile()
click to toggle source
# File lib/arlo/init.rb, line 18 def profile @profile end
record_video(camera, duration)
click to toggle source
# File lib/arlo/devices.rb, line 81 def record_video(camera, duration) camera_id = camera['deviceId'] parent_id = camera['parentId'] ret_val = start_stream(camera, parent_id) return ret_val unless ret_val['success'] # ret_val['data']['url'] payload = { 'xcloudId': camera['xCloudId'], 'parentId': parent_id, 'deviceId': camera_id, 'olsonTimeZone': camera['properties']['olsonTimeZone'] } ret_val = post('https://arlo.netgear.com/hmsweb/users/devices/startRecord', payload, 'xcloudId': camera['xCloudId']) sleep(duration) stop_stream(camera) JSON.parse(ret_val.body) end
set_siren_on(device, duration)
click to toggle source
# File lib/arlo/devices.rb, line 35 def set_siren_on(device, duration) device_id = device['deviceId'] payload = { 'from': 'arlogem', 'to': device_id, 'action': 'set', 'transId': SecureRandom.uuid, 'publishResponse': true, 'resource': 'siren', 'properties': { 'duration': duration, 'pattern': 'alarm', 'sirenState': 'on', 'volume': 8 } } ret_val = post("https://arlo.netgear.com/hmsweb/users/devices/notify/#{device_id}", payload, 'xcloudId': device['xCloudId']) JSON.parse(ret_val.body) end
take_snapshot(camera)
click to toggle source
# File lib/arlo/devices.rb, line 59 def take_snapshot(camera) camera_id = camera['deviceId'] ret_val = start_stream(camera, camera_id) return ret_val unless ret_val['success'] payload = { 'cameraId': camera_id, 'parentId': camera_id, 'deviceId': camera_id, 'olsonTimeZone': camera['properties']['olsonTimeZone'] } ret_val = post('https://arlo.netgear.com/hmsweb/users/devices/takeSnapshot', payload, 'xcloudId': camera['xCloudId']) snapshot_ret_val = JSON.parse(ret_val.body) stop_stream(camera) snapshot_ret_val end
token()
click to toggle source
# File lib/arlo/init.rb, line 10 def token @token end
Private Instance Methods
start_stream(camera, dest)
click to toggle source
# File lib/arlo/devices.rb, line 130 def start_stream(camera, dest) camera_id = camera['deviceId'] payload = { 'to': dest, 'from': 'ArloGem', 'resource': "cameras/#{camera_id}", 'action': 'set', 'publishResponse': true, 'transId': SecureRandom.uuid, 'properties': { 'activityState': 'startUserStream', 'cameraId': camera_id } } ret_val = post('https://arlo.netgear.com/hmsweb/users/devices/startStream', payload, 'xcloudId': camera['xCloudId']) JSON.parse(ret_val.body) end
stop_stream(camera)
click to toggle source
# File lib/arlo/devices.rb, line 108 def stop_stream(camera) camera_id = camera['deviceId'] payload = { 'to': camera_id, 'from': 'ArloGem', 'resource': "cameras/#{camera_id}", 'action': 'set', 'publishResponse': true, 'transId': SecureRandom.uuid, 'properties': { 'activityState': 'stopUserStream', 'cameraId': camera_id } } ret_val = post('https://arlo.netgear.com/hmsweb/users/devices/stopStream', payload, 'xcloudId': camera['xCloudId']) JSON.parse(ret_val.body) end