guh 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fa6cbfff073870eabcc433d92c9f92d48cb8bd0e
4
- data.tar.gz: 34762aeabd46d3c0f8d7aa0aaaf6710d5f5c779f
3
+ metadata.gz: 4960d036bde4cfe611b3c45cbdff866a678ee12e
4
+ data.tar.gz: 74da9d4b1d55d32fb27894c106a0bd181a2220bb
5
5
  SHA512:
6
- metadata.gz: 476d41353de9a87a7ee4585d9317b005e5a837ceccd34f0341c929c1ed0942b7e152387ab35b8382e1db81bbb97fd66ddd6819f403e7ea3a3d622d0c5c7446cd
7
- data.tar.gz: 97c5ff55e9855e436e411905e4c628fee5e66193f214742f102380ec721347403e82df861884f248401dd61dbdeb55077ac588ddb50a5c3825af727385d01f54
6
+ metadata.gz: df55cfb07c687984a6b11991c24d93b0a238c2cd67553c8637ee388a0f078d184def691c387b9072e139dac036c4ae3b976b8d0589541d4148bfa924752a0628
7
+ data.tar.gz: 4d3ce2ff17641939e8e02b91fcd00774afd9bc869e206cc3de513ac4146f20b21ea62b8c5c97a68e7de6f6bd8c4153b831e96b10a97ffa18fe610783f39eb0be
data/Rakefile CHANGED
@@ -12,6 +12,12 @@ task :console do
12
12
  require 'irb/completion'
13
13
  require 'pp'
14
14
  require 'guh'
15
+
16
+ Guh::Base.configure do |c|
17
+ c.guh_ip_address = '192.168.178.31'
18
+ c.guh_port = 1234
19
+ end
20
+
15
21
  ARGV.clear
16
22
  IRB.start
17
23
  end
data/lib/guh/base.rb CHANGED
@@ -70,7 +70,7 @@ module Guh
70
70
  #
71
71
  # Example:
72
72
  #
73
- # Guh.configure do |config|
73
+ # Guh::Base.configure do |config|
74
74
  # config.guh_ip_address = 10.0.0.1
75
75
  # config.guh_port = 6789
76
76
  # end
data/lib/guh/device.rb CHANGED
@@ -2,11 +2,21 @@ module Guh
2
2
  ##
3
3
  # This class wraps everything related to configured Devices.
4
4
  #
5
+ # TODO write up the creation of a normal device
6
+ #
7
+ # TODO write up the creation of a discoverable device.
8
+ #
5
9
  class Device < Base
6
10
 
7
11
 
8
12
  ##
9
13
  #
14
+ # Returns a specific configured Device.
15
+ #
16
+ # Example:
17
+ #
18
+ # Guh::Device.find('{427a4a9a-c107-446f-aadf-f1b2abad607d1}')
19
+ #
10
20
  def self.find(id)
11
21
  device = self.all.detect{|d| d['id']==id}
12
22
 
@@ -30,6 +40,31 @@ module Guh
30
40
  return response['devices']
31
41
  end
32
42
 
43
+ ##
44
+ #
45
+ # Returns a list of recently discovered devices.
46
+ #
47
+ # Example:
48
+ #
49
+ # Guh::Device.discover("{985195aa-17ad-4530-88a4-cdd753d747d7}", [{name: 'location', value: 'Salzburg'}])
50
+ #
51
+ def self.discover(device_class_id, discovery_params = {})
52
+ response = get({
53
+ id: generate_request_id,
54
+ method: "Devices.GetDiscoveredDevices",
55
+ params: {
56
+ deviceClassId: device_class_id,
57
+ discoveryParams: discovery_params
58
+ }
59
+ })
60
+
61
+ if response['success'] == true
62
+ return response['deviceDescriptors']
63
+ else
64
+ raise Guh::ResponseError, response['errorMessage']
65
+ end
66
+ end
67
+
33
68
  ##
34
69
  #
35
70
  # Creates a configured device and returns it's ID.
@@ -49,17 +84,41 @@ module Guh
49
84
  # channel10: false
50
85
  # })
51
86
  #
87
+ # To create a discovered device you have to provide a descriptor ID in the params:
88
+ #
89
+ # Guh::Device.add("{985195aa-17ad-4530-88a4-cdd753d747d7}", {descriptorId: "{727a4a9a-c187-446f-aadf-f1b2220607d1}"})
90
+ #
52
91
  def self.add(device_class_id, params)
92
+ device_class = Guh::DeviceClass.find(device_class_id)
93
+
94
+ case device_class['createMethod']
95
+ when 'CreateMethodUser'
96
+ add_configured_device(device_class_id, params)
97
+ when 'CreateMethodDiscovery'
98
+ add_discovered_device(device_class_id, params[:descriptorId])
99
+ when 'CreateMethodAuto'
100
+ # Nothing to do here
101
+ # TODO should we raise an exception?
102
+ end
103
+ end
104
+
105
+ ##
106
+ #
107
+ # Finishes a pairing process with a device. The user might have to push a button on the device.
108
+ #
109
+ # The +pairing_transaction_id+ can be obtained with the +add_discovered_device()+ method.
110
+ #
111
+ def self.confirm_pairing(pairing_transaction_id)
53
112
  response = get({
54
113
  id: generate_request_id,
55
- method: "Devices.AddConfiguredDevice",
114
+ method: "Devices.PairDevice",
56
115
  params: {
57
- deviceClassId: device_class_id,
58
- deviceParams: params
116
+ pairingTransactionId: pairing_transaction_id
59
117
  }
60
118
  })
119
+
61
120
  if response['success']==true
62
- return response['deviceId']
121
+ return response
63
122
  else
64
123
  raise Guh::ArgumentError, response['errorMessage']
65
124
  end
@@ -100,5 +159,68 @@ module Guh
100
159
  self.all.length
101
160
  end
102
161
 
162
+ private
163
+
164
+ def self.add_configured_device(device_class_id, params)
165
+ response = get({
166
+ id: generate_request_id,
167
+ method: "Devices.AddConfiguredDevice",
168
+ params: {
169
+ deviceClassId: device_class_id,
170
+ deviceParams: params
171
+ }
172
+ })
173
+
174
+ if response['success']==true
175
+ return response['deviceId']
176
+ else
177
+ raise Guh::ArgumentError, response['errorMessage']
178
+ end
179
+ end
180
+
181
+ def self.add_discovered_device(device_class_id, descriptor_id)
182
+ device_class = Guh::DeviceClass.find(device_class_id)
183
+
184
+ if device_class['setupMethod'] == 'SetupMethodJustAdd'
185
+ add_discovered_device_just_add(device_class_id, descriptor_id)
186
+ else
187
+ add_discovered_device_pair(device_class_id, descriptor_id)
188
+ end
189
+ end
190
+
191
+ def self.add_discovered_device_just_add(device_class_id, descriptor_id)
192
+ response = get({
193
+ id: generate_request_id,
194
+ method: "Devices.AddConfiguredDevice",
195
+ params: {
196
+ deviceClassId: device_class_id,
197
+ deviceDescriptorId: descriptor_id
198
+ }
199
+ })
200
+
201
+ if response['success']==true
202
+ return response['deviceId']
203
+ else
204
+ raise Guh::ArgumentError, response['errorMessage']
205
+ end
206
+ end
207
+
208
+ def self.add_discovered_device_pair(device_class_id, descriptor_id)
209
+ response = get({
210
+ id: generate_request_id,
211
+ method: "Devices.PairDevice",
212
+ params: {
213
+ deviceClassId: device_class_id,
214
+ deviceDescriptorId: descriptor_id
215
+ }
216
+ })
217
+
218
+ if response['success']==true
219
+ return response
220
+ else
221
+ raise Guh::ArgumentError, response['errorMessage']
222
+ end
223
+ end
224
+
103
225
  end
104
226
  end
@@ -47,24 +47,5 @@ module Guh
47
47
  end
48
48
  end
49
49
 
50
- ##
51
- #
52
- def self.discover(id, options={})
53
- params = {deviceClassId: id}
54
- params['discoveryParams'] = options
55
-
56
- response = get({
57
- id: generate_request_id,
58
- method: "Devices.GetDiscoveredDevices",
59
- params: params
60
- })
61
-
62
- if response['success']
63
- return response['deviceDescriptors']
64
- else
65
- raise ResponseError, response['errorMessage']
66
- end
67
- end
68
-
69
50
  end
70
51
  end
data/lib/guh/vendor.rb CHANGED
@@ -3,6 +3,17 @@ module Guh
3
3
  # This class wraps everything related to Vendors.
4
4
  #
5
5
  class Vendor < Base
6
+ ##
7
+ #
8
+ # Retrieves a specific vendor
9
+ #
10
+ # Example:
11
+ #
12
+ # Guh::Vendor.find('{b241f7f5-8153-4a72-b260-f62beadc2d19}')
13
+ #
14
+ def self.find(vendor_id)
15
+ all.detect { |vendor| vendor['id'] == vendor_id }
16
+ end
6
17
 
7
18
  ##
8
19
  #
data/lib/guh/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Guh
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
data/spec/helper.rb CHANGED
@@ -9,7 +9,7 @@ RSpec.configure do |config|
9
9
 
10
10
  config.before(:all) do
11
11
  Guh::Base.configure do |c|
12
- c.guh_ip_address = "127.0.0.1"
12
+ c.guh_ip_address = '192.168.178.31'
13
13
  c.guh_port = 1234
14
14
  end
15
15
 
@@ -33,16 +33,4 @@ describe Guh::DeviceClass do
33
33
  end
34
34
  end
35
35
 
36
- it "should discover the openweathermap" do
37
-
38
- device_class_id = "{985195aa-17ad-4530-88a4-cdd753d747d7}"
39
-
40
- pending "TODO wait until issue #13 is fixed"
41
-
42
- # device_descriptors = Guh::DeviceClass.discover(device_class_id, [
43
- # {name: 'location', value: ''}
44
- # ])
45
-
46
- end
47
-
48
36
  end
@@ -19,15 +19,15 @@ describe Guh::Device do
19
19
 
20
20
  -> {
21
21
  response = Guh::Device.add("{308ae6e6-38b3-4b3a-a513-3199da2764f8}", [
22
- {name: 'channel1', value: true},
23
- {name: 'channel2', value: false},
24
- {name: 'channel3', value: false},
25
- {name: 'channel4', value: false},
26
- {name: 'channel5', value: false},
27
- {name: 'A', value: false},
28
- {name: 'B', value: false},
29
- {name: 'C', value: false},
30
- {name: 'D', value: false},
22
+ {name: 'channel1', value: true},
23
+ {name: 'channel2', value: false},
24
+ {name: 'channel3', value: false},
25
+ {name: 'channel4', value: false},
26
+ {name: 'channel5', value: false},
27
+ {name: 'A', value: false},
28
+ {name: 'B', value: false},
29
+ {name: 'C', value: false},
30
+ {name: 'D', value: false},
31
31
  {name: 'E', value: false}
32
32
  ])
33
33
  }.should_not raise_error
@@ -50,7 +50,7 @@ describe Guh::Device do
50
50
 
51
51
  device_id.should match(/^\{[a-z0-9\-]+\}$/i)
52
52
 
53
- Guh::Device.remove(device_id).should be_true
53
+ Guh::Device.remove(device_id).should be_truthy
54
54
 
55
55
  Guh::Device.find(device_id).should be_nil
56
56
  end
@@ -61,4 +61,12 @@ describe Guh::Device do
61
61
  }.should raise_error
62
62
  end
63
63
 
64
+ it "should discover the openweathermap" do
65
+ device_class_id = "{985195aa-17ad-4530-88a4-cdd753d747d7}"
66
+
67
+ device_descriptors = Guh::Device.discover(device_class_id, [{name: 'location', value: 'Salzburg'}])
68
+
69
+ response = Guh::Device.add(device_class_id, {descriptorId: device_descriptors.first['id']})
70
+ end
71
+
64
72
  end
@@ -11,7 +11,11 @@ describe Guh::Vendor do
11
11
  end
12
12
 
13
13
  it "should return information about a specific vendor" do
14
- pending "TODO: Implement Guh::Vendor.find('{abc}')"
14
+ vendor_id = '{b241f7f5-8153-4a72-b260-f62beadc2d19}'
15
+
16
+ vendor = Guh::Vendor.find(vendor_id)
17
+
18
+ vendor['id'].should eq(vendor_id)
15
19
  end
16
20
 
17
21
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: guh
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christoph Edthofer
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-10-03 00:00:00.000000000 Z
12
+ date: 2014-10-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json