guh 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/Rakefile +6 -0
- data/lib/guh/base.rb +1 -1
- data/lib/guh/device.rb +126 -4
- data/lib/guh/device_class.rb +0 -19
- data/lib/guh/vendor.rb +11 -0
- data/lib/guh/version.rb +1 -1
- data/spec/helper.rb +1 -1
- data/spec/integration/device_class_spec.rb +0 -12
- data/spec/integration/device_spec.rb +18 -10
- data/spec/integration/vendor_spec.rb +5 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4960d036bde4cfe611b3c45cbdff866a678ee12e
|
4
|
+
data.tar.gz: 74da9d4b1d55d32fb27894c106a0bd181a2220bb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df55cfb07c687984a6b11991c24d93b0a238c2cd67553c8637ee388a0f078d184def691c387b9072e139dac036c4ae3b976b8d0589541d4148bfa924752a0628
|
7
|
+
data.tar.gz: 4d3ce2ff17641939e8e02b91fcd00774afd9bc869e206cc3de513ac4146f20b21ea62b8c5c97a68e7de6f6bd8c4153b831e96b10a97ffa18fe610783f39eb0be
|
data/Rakefile
CHANGED
data/lib/guh/base.rb
CHANGED
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.
|
114
|
+
method: "Devices.PairDevice",
|
56
115
|
params: {
|
57
|
-
|
58
|
-
deviceParams: params
|
116
|
+
pairingTransactionId: pairing_transaction_id
|
59
117
|
}
|
60
118
|
})
|
119
|
+
|
61
120
|
if response['success']==true
|
62
|
-
return response
|
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
|
data/lib/guh/device_class.rb
CHANGED
@@ -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
data/spec/helper.rb
CHANGED
@@ -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',
|
23
|
-
{name: 'channel2',
|
24
|
-
{name: 'channel3',
|
25
|
-
{name: 'channel4',
|
26
|
-
{name: 'channel5',
|
27
|
-
{name: 'A',
|
28
|
-
{name: 'B',
|
29
|
-
{name: 'C',
|
30
|
-
{name: 'D',
|
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
|
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
|
-
|
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.
|
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-
|
12
|
+
date: 2014-10-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|