redlink 0.1.1 → 0.1.2
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.
- data/Readme.markdown +1 -1
- data/lib/redlink/configuration.rb +11 -3
- data/lib/redlink/endpoint.rb +34 -25
- data/lib/redlink/version.rb +1 -1
- metadata +2 -2
data/Readme.markdown
CHANGED
@@ -21,7 +21,7 @@ Basic location & thermostat discovery functional. Ability to refresh thermostat
|
|
21
21
|
|
22
22
|
Redlink provides a basic CLI experience as well as a growing set of APIs for actual manipulation.
|
23
23
|
|
24
|
-
`
|
24
|
+
`redlink locations` returns a list of locations and thermostats connected to your account.
|
25
25
|
|
26
26
|
# TODO
|
27
27
|
|
@@ -27,7 +27,8 @@ module Redlink
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def self.session_expired?
|
30
|
-
|
30
|
+
return true unless config_file['session_id_expires']
|
31
|
+
config_file['session_id_expires'] < Time.now
|
31
32
|
end
|
32
33
|
|
33
34
|
def self.user
|
@@ -58,12 +59,19 @@ module Redlink
|
|
58
59
|
File.open(File.expand_path(CONFIG_FILE), 'w+') do |f|
|
59
60
|
f.write YAML.dump(@config_file)
|
60
61
|
end
|
62
|
+
|
63
|
+
# reset to force reload next time a read happens
|
64
|
+
@config_file = nil
|
61
65
|
end
|
62
66
|
|
63
67
|
def self.clear!
|
64
|
-
|
65
|
-
|
68
|
+
new_config = @config_file.dup
|
69
|
+
|
70
|
+
[:session_id, :session_id_expires, :user, :username, :password].each do |k|
|
71
|
+
new_config.delete(k.to_s)
|
66
72
|
end
|
73
|
+
|
74
|
+
@config_file = new_config
|
67
75
|
self.save
|
68
76
|
end
|
69
77
|
|
data/lib/redlink/endpoint.rb
CHANGED
@@ -3,16 +3,8 @@ require 'savon'
|
|
3
3
|
module Redlink
|
4
4
|
class Endpoint
|
5
5
|
|
6
|
-
def self.endpoint_client
|
7
|
-
@endpoint_client ||= Savon.client do
|
8
|
-
wsdl File.expand_path("../../../wsdl/MobileV2.xml", __FILE__)
|
9
|
-
log_level :warn
|
10
|
-
log false
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
6
|
def self.login(username = Configuration.username, password = Configuration.password)
|
15
|
-
|
7
|
+
return unless username && password
|
16
8
|
|
17
9
|
params = {
|
18
10
|
username: username,
|
@@ -22,11 +14,11 @@ module Redlink
|
|
22
14
|
uiLanguage: 'Default'
|
23
15
|
}
|
24
16
|
|
25
|
-
|
26
|
-
|
27
|
-
if
|
28
|
-
user =
|
29
|
-
session_id =
|
17
|
+
result = call_remote_method(:authenticate_user_login, message: params)
|
18
|
+
|
19
|
+
if result[:result] == 'Success'
|
20
|
+
user = result[:user_info]
|
21
|
+
session_id = result[:session_id]
|
30
22
|
|
31
23
|
Configuration.username = username
|
32
24
|
Configuration.password = password
|
@@ -41,19 +33,16 @@ module Redlink
|
|
41
33
|
end
|
42
34
|
|
43
35
|
def self.logout
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
if body[:log_off_response][:log_off_result][:result] == 'Success'
|
48
|
-
Configuration.clear!
|
36
|
+
if Configuration.session_id
|
37
|
+
call_remote_method(:log_off, message: {sessionID: Configuration.session_id})
|
49
38
|
end
|
39
|
+
|
40
|
+
Configuration.clear!
|
50
41
|
end
|
51
42
|
|
52
43
|
def self.locations
|
53
|
-
|
54
|
-
|
55
|
-
body = endpoint_client.call(:get_locations, message: {sessionID: Configuration.session_id}).body
|
56
|
-
[body[:get_locations_response][:get_locations_result][:locations]].flatten.map do |loc|
|
44
|
+
result = call_remote_method(:get_locations, message: {sessionID: Configuration.session_id})
|
45
|
+
[result[:locations]].flatten.map do |loc|
|
57
46
|
loc[:location_info]
|
58
47
|
end
|
59
48
|
end
|
@@ -61,9 +50,9 @@ module Redlink
|
|
61
50
|
def self.get_volatile_thermostat_data(thermostat_id)
|
62
51
|
verify_token
|
63
52
|
|
64
|
-
|
53
|
+
result = call_remote_method(:get_locations, message: {sessionID: Configuration.session_id, thermostatID: thermostat_id})
|
65
54
|
|
66
|
-
|
55
|
+
result[:ui]
|
67
56
|
end
|
68
57
|
|
69
58
|
private
|
@@ -74,5 +63,25 @@ module Redlink
|
|
74
63
|
end
|
75
64
|
end
|
76
65
|
|
66
|
+
def self.call_remote_method(method, options)
|
67
|
+
verify_token
|
68
|
+
body = endpoint_client.call(method, options).body
|
69
|
+
result = body["#{method}_response".to_sym]["#{method}_result".to_sym]
|
70
|
+
raise InvalidSessionError.new if result[:result] == 'InvalidSessionID'
|
71
|
+
result
|
72
|
+
end
|
73
|
+
|
74
|
+
|
75
|
+
def self.endpoint_client
|
76
|
+
@endpoint_client ||= Savon.client do
|
77
|
+
wsdl File.expand_path("../../../wsdl/MobileV2.xml", __FILE__)
|
78
|
+
log_level :warn
|
79
|
+
log false
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
class InvalidSessionError < StandardError; end
|
84
|
+
class NoCredentialsError < StandardError; end
|
77
85
|
end
|
86
|
+
|
78
87
|
end
|
data/lib/redlink/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redlink
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-03-
|
12
|
+
date: 2013-03-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: savon
|