rzwaveway 0.0.11 → 0.0.13
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +4 -4
- data/lib/rzwaveway.rb +3 -1
- data/lib/rzwaveway/command_class.rb +21 -10
- data/lib/rzwaveway/command_classes.rb +25 -11
- data/lib/rzwaveway/command_classes/alarm.rb +43 -0
- data/lib/rzwaveway/command_classes/alarm_sensor.rb +17 -0
- data/lib/rzwaveway/command_classes/battery.rb +8 -12
- data/lib/rzwaveway/command_classes/sensor_binary.rb +8 -16
- data/lib/rzwaveway/command_classes/switch_binary.rb +10 -19
- data/lib/rzwaveway/command_classes/switch_multi_level.rb +10 -19
- data/lib/rzwaveway/command_classes/wake_up.rb +23 -26
- data/lib/rzwaveway/events.rb +15 -63
- data/lib/rzwaveway/extensions/ssa_siren_strobe_alarm.rb +1 -6
- data/lib/rzwaveway/properties_cache.rb +38 -0
- data/lib/rzwaveway/property.rb +47 -0
- data/lib/rzwaveway/version.rb +1 -1
- data/lib/rzwaveway/zwave_device.rb +77 -82
- data/lib/rzwaveway/zway.rb +54 -48
- data/rzwaveway.gemspec +2 -1
- data/spec/command_classes/alarm_spec.rb +37 -0
- data/spec/command_classes/battery_spec.rb +16 -14
- data/spec/command_classes/sensor_binary_spec.rb +15 -13
- data/spec/command_classes/switch_binary_spec.rb +15 -13
- data/spec/command_classes/switch_multi_level_spec.rb +15 -13
- data/spec/command_classes/wake_up_spec.rb +59 -20
- data/spec/data/alarm.json +69 -0
- data/spec/data/alarm_v1.json +69 -0
- data/spec/events_spec.rb +27 -0
- data/spec/property_spec.rb +83 -0
- data/spec/spec_helper.rb +13 -2
- data/spec/zwave_device_spec.rb +12 -149
- metadata +25 -2
data/spec/events_spec.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module RZWaveWay
|
4
|
+
describe Event do
|
5
|
+
describe '#new' do
|
6
|
+
it 'enforces a non-nil argument' do
|
7
|
+
expect { Event.new(nil) }
|
8
|
+
.to raise_error ArgumentError
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'requires a device id' do
|
12
|
+
expect { Event.new(foo: 'bar') }
|
13
|
+
.to raise_error ArgumentError
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'adds a time if none is provided' do
|
17
|
+
event = AliveDevice.new(device_id: 123)
|
18
|
+
expect(event[:time]).not_to be_nil
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'keeps the existing time if provided' do
|
22
|
+
event = Event.new(device_id: 123, time: 1472373723)
|
23
|
+
expect(event[:time]).to eq 1472373723
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module RZWaveWay
|
4
|
+
describe Property do
|
5
|
+
let(:property) { Property.new(value: 123, update_time: 0) }
|
6
|
+
|
7
|
+
describe '#changed?' do
|
8
|
+
it 'returns false when no change is performed on property' do
|
9
|
+
expect(property.changed?).to eq false
|
10
|
+
|
11
|
+
property.update(123, 10)
|
12
|
+
expect(property.changed?).to eq false
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'returns true when the value is changed' do
|
16
|
+
property.update(456, 0)
|
17
|
+
expect(property.changed?).to eq true
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '#read_only?' do
|
22
|
+
it 'is false when not specified' do
|
23
|
+
expect(property.read_only?).to eq false
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'is true when specified to true' do
|
27
|
+
special_property = Property.new(value: 456, update_time: 0, read_only: true)
|
28
|
+
expect(special_property.read_only?).to eq true
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe '#save' do
|
33
|
+
it '"applies/persists" the value update' do
|
34
|
+
property.update(456, 10)
|
35
|
+
property.save
|
36
|
+
expect(property.changed?).to eq false
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '#to_hash' do
|
41
|
+
it 'returns a hash with value, update time and read-only' do
|
42
|
+
hash = property.to_hash
|
43
|
+
expect(hash.class).to eq Hash
|
44
|
+
expect(hash.keys).to include(:value, :read_only, :update_time)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe '#update' do
|
49
|
+
it 'updates the value and update time' do
|
50
|
+
property.update(456, 10)
|
51
|
+
expect(property.value).to eq 456
|
52
|
+
expect(property.update_time).to eq 10
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'updates the update time' do
|
56
|
+
property.update(123, 10)
|
57
|
+
expect(property.update_time).to eq 10
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'does not update with a past value' do
|
61
|
+
property.update(0, -10)
|
62
|
+
expect(property.value).to eq 123
|
63
|
+
expect(property.update_time).to eq 0
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'does not update the value and time' do
|
67
|
+
property.update(123, 0)
|
68
|
+
expect(property.value).to eq 123
|
69
|
+
expect(property.update_time).to eq 0
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'returns true when the value is changed' do
|
73
|
+
result = property.update(456, 10)
|
74
|
+
expect(result).to eq true
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'returns false when the value is unchanged' do
|
78
|
+
result = property.update(123, 10)
|
79
|
+
expect(result).to eq false
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'pry-byebug'
|
1
2
|
require 'rzwaveway'
|
2
3
|
require 'securerandom'
|
3
4
|
|
@@ -10,9 +11,19 @@ module SpecHelpers
|
|
10
11
|
{
|
11
12
|
'data' => {
|
12
13
|
'givenName' => {
|
13
|
-
'value' => 'device name'
|
14
|
-
|
14
|
+
'value' => 'device name',
|
15
|
+
'updateTime' => 0
|
16
|
+
},
|
17
|
+
'failureCount' => {
|
18
|
+
'value' => 0,
|
19
|
+
'updateTime' => 0
|
20
|
+
},
|
21
|
+
'isFailed' => {
|
22
|
+
'value' => false,
|
23
|
+
'updateTime' => 0
|
24
|
+
},
|
15
25
|
'lastReceived' => {
|
26
|
+
'value' => 0,
|
16
27
|
'updateTime' => last_contact_time
|
17
28
|
},
|
18
29
|
'lastSend' => {
|
data/spec/zwave_device_spec.rb
CHANGED
@@ -2,7 +2,6 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
module RZWaveWay
|
4
4
|
describe ZWaveDevice do
|
5
|
-
let(:now) { Time.now }
|
6
5
|
let(:device) do
|
7
6
|
ZWaveDevice.new(create_id,
|
8
7
|
create_device_data({CommandClass::WAKEUP =>
|
@@ -15,6 +14,7 @@ module RZWaveWay
|
|
15
14
|
}
|
16
15
|
}))
|
17
16
|
end
|
17
|
+
let(:ac_powered_device) { ZWaveDevice.new(create_id, create_device_data({}, 1390252000)) }
|
18
18
|
|
19
19
|
describe '#new' do
|
20
20
|
it 'sets last contact time from data (wake up command class)' do
|
@@ -34,37 +34,20 @@ module RZWaveWay
|
|
34
34
|
expect(battery_device.last_contact_time).to eq 1390252000
|
35
35
|
end
|
36
36
|
|
37
|
-
it 'sets the
|
38
|
-
ac_powered_device
|
39
|
-
expect(ac_powered_device.last_contact_time).to eq 1390252000
|
37
|
+
it 'sets the failure count' do
|
38
|
+
expect(ac_powered_device.failure_count).to eq 0
|
40
39
|
end
|
41
40
|
|
42
|
-
it 'sets the
|
43
|
-
expect(
|
41
|
+
it 'sets the is failed flag' do
|
42
|
+
expect(ac_powered_device.is_failed).to eq false
|
44
43
|
end
|
45
|
-
end
|
46
|
-
|
47
|
-
describe '#add_property' do
|
48
|
-
it 'stores a property' do
|
49
|
-
property = { name: 'prop1', value: 123, update_time: Time.now.to_i, read_only: true }
|
50
|
-
device.add_property(property)
|
51
44
|
|
52
|
-
|
53
|
-
|
54
|
-
end
|
55
|
-
|
56
|
-
describe '#properties' do
|
57
|
-
it 'returns the name and value of all properties' do
|
58
|
-
device.add_property({ name: 'prop1', value: 123, update_time: 1390252000 })
|
59
|
-
device.add_property({ name: 'prop2', value: 456, update_time: 1390252000 })
|
60
|
-
|
61
|
-
expect(device.properties).to eq( 'prop1' => { value: 123, update_time: 1390252000, read_only: true },
|
62
|
-
'prop2' => { value: 456, update_time: 1390252000, read_only: true })
|
45
|
+
it 'sets the last contact time from data (device data)' do
|
46
|
+
expect(ac_powered_device.last_contact_time).to eq 1390252000
|
63
47
|
end
|
64
48
|
|
65
|
-
it '
|
66
|
-
device.
|
67
|
-
expect(device.properties).to be_empty
|
49
|
+
it 'sets the name from data' do
|
50
|
+
expect(device.name).to eq 'device name'
|
68
51
|
end
|
69
52
|
end
|
70
53
|
|
@@ -110,131 +93,11 @@ module RZWaveWay
|
|
110
93
|
device.process(updates)
|
111
94
|
expect(device.last_contact_time).to eq 1409490977
|
112
95
|
end
|
113
|
-
|
114
|
-
it 'updates the last contact time (from lastSend)' do
|
115
|
-
updates = {
|
116
|
-
'data.lastSend' => {
|
117
|
-
'name' => 'lastSend',
|
118
|
-
'value' => 176428709,
|
119
|
-
'type' => 'int',
|
120
|
-
'invalidateTime' => 1390251561,
|
121
|
-
'updateTime' => 1409490970
|
122
|
-
}
|
123
|
-
}
|
124
|
-
device.process(updates)
|
125
|
-
expect(device.last_contact_time).to eq 1409490970
|
126
|
-
end
|
127
|
-
|
128
|
-
it 'updates the last contact time' do
|
129
|
-
updates = {
|
130
|
-
'data.lastReceived' => {
|
131
|
-
'name' => 'lastReceived',
|
132
|
-
'value' => 176428709,
|
133
|
-
'type' => 'int',
|
134
|
-
'invalidateTime' => 1390251561,
|
135
|
-
'updateTime' => 1409490977
|
136
|
-
},
|
137
|
-
'data.lastSend' => {
|
138
|
-
'name' => 'lastSend',
|
139
|
-
'value' => 176428709,
|
140
|
-
'type' => 'int',
|
141
|
-
'invalidateTime' => 1390251561,
|
142
|
-
'updateTime' => 1409490970
|
143
|
-
}
|
144
|
-
}
|
145
|
-
device.process(updates)
|
146
|
-
expect(device.last_contact_time).to eq 1409490977
|
147
|
-
end
|
148
|
-
|
149
|
-
it 'generates an AliveEvent when last contact time got updated' do
|
150
|
-
device.notify_contacted(now)
|
151
|
-
updates = {
|
152
|
-
'data.lastReceived' => {
|
153
|
-
'name' => 'lastReceived',
|
154
|
-
'value' => 176428709,
|
155
|
-
'type' => 'int',
|
156
|
-
'invalidateTime' => 1390251561,
|
157
|
-
'updateTime' => now+100
|
158
|
-
},
|
159
|
-
'data.lastSend' => {
|
160
|
-
'name' => 'lastSend',
|
161
|
-
'value' => 176428709,
|
162
|
-
'type' => 'int',
|
163
|
-
'invalidateTime' => 1390251561,
|
164
|
-
'updateTime' => now+100
|
165
|
-
}
|
166
|
-
}
|
167
|
-
events = device.process(updates)
|
168
|
-
expect(events.size).to eq 1
|
169
|
-
event = events.first
|
170
|
-
expect(event.class).to be AliveEvent
|
171
|
-
expect(event.device_id).to eq device.id
|
172
|
-
expect(event.time).to eq (now+100)
|
173
|
-
end
|
174
|
-
|
175
|
-
it 'does not generate an AliveEvent when last contact time is not updated' do
|
176
|
-
device.notify_contacted(now)
|
177
|
-
updates = {
|
178
|
-
'data.lastReceived' => {
|
179
|
-
'name' => 'lastReceived',
|
180
|
-
'value' => 176428709,
|
181
|
-
'type' => 'int',
|
182
|
-
'invalidateTime' => 1390251561,
|
183
|
-
'updateTime' => 1409490970
|
184
|
-
},
|
185
|
-
'data.lastSend' => {
|
186
|
-
'name' => 'lastSend',
|
187
|
-
'value' => 176428709,
|
188
|
-
'type' => 'int',
|
189
|
-
'invalidateTime' => 1390251561,
|
190
|
-
'updateTime' => 1409490970
|
191
|
-
}
|
192
|
-
}
|
193
|
-
events = device.process(updates)
|
194
|
-
expect(events.size).to eq 0
|
195
|
-
end
|
196
|
-
end
|
197
|
-
|
198
|
-
describe '#process_alive_check' do
|
199
|
-
it 'generates no event' do
|
200
|
-
device.notify_contacted(now)
|
201
|
-
event = device.process_alive_check
|
202
|
-
expect(event).to be_nil
|
203
|
-
end
|
204
|
-
|
205
|
-
it 'generates a NotAliveEvent' do
|
206
|
-
device.notify_contacted(now - 600)
|
207
|
-
event = device.process_alive_check
|
208
|
-
expect(event.class).to be NotAliveEvent
|
209
|
-
expect(event.device_id).to eq device.id
|
210
|
-
end
|
211
|
-
|
212
|
-
it 'does not generate a NotAliveEvent at each check' do
|
213
|
-
device.notify_contacted(now - 600)
|
214
|
-
event = device.process_alive_check
|
215
|
-
event = device.process_alive_check
|
216
|
-
expect(event).to be_nil
|
217
|
-
end
|
218
|
-
|
219
|
-
it 'generates a DeadEvent' do
|
220
|
-
device.notify_contacted(now - 6000)
|
221
|
-
event = device.process_alive_check
|
222
|
-
expect(event.class).to be DeadEvent
|
223
|
-
expect(event.device_id).to eq device.id
|
224
|
-
end
|
225
|
-
|
226
|
-
it 'does not generate a DeadEvent multiple times' do
|
227
|
-
device.notify_contacted(now - 6000)
|
228
|
-
event = device.process_alive_check
|
229
|
-
event = device.process_alive_check
|
230
|
-
expect(event).to be_nil
|
231
|
-
end
|
232
96
|
end
|
233
97
|
|
234
|
-
describe '#
|
235
|
-
it 'returns
|
236
|
-
|
237
|
-
expect(json.size).not_to eq 0
|
98
|
+
describe '#to_hash' do
|
99
|
+
it 'returns a Hash' do
|
100
|
+
expect(device.to_hash.class).to eq Hash
|
238
101
|
end
|
239
102
|
end
|
240
103
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rzwaveway
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vincent Touchard
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 3.0.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: pry-byebug
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
83
97
|
description: A Ruby API to use the Razberry ZWave ZWay interface
|
84
98
|
email: touchardv@yahoo.com
|
85
99
|
executables: []
|
@@ -93,6 +107,8 @@ files:
|
|
93
107
|
- lib/rzwaveway.rb
|
94
108
|
- lib/rzwaveway/command_class.rb
|
95
109
|
- lib/rzwaveway/command_classes.rb
|
110
|
+
- lib/rzwaveway/command_classes/alarm.rb
|
111
|
+
- lib/rzwaveway/command_classes/alarm_sensor.rb
|
96
112
|
- lib/rzwaveway/command_classes/battery.rb
|
97
113
|
- lib/rzwaveway/command_classes/sensor_binary.rb
|
98
114
|
- lib/rzwaveway/command_classes/switch_binary.rb
|
@@ -103,19 +119,26 @@ files:
|
|
103
119
|
- lib/rzwaveway/extensions/fibaro_smoke_sensor.rb
|
104
120
|
- lib/rzwaveway/extensions/ssa_siren_strobe_alarm.rb
|
105
121
|
- lib/rzwaveway/logger.rb
|
122
|
+
- lib/rzwaveway/properties_cache.rb
|
123
|
+
- lib/rzwaveway/property.rb
|
106
124
|
- lib/rzwaveway/version.rb
|
107
125
|
- lib/rzwaveway/zwave_device.rb
|
108
126
|
- lib/rzwaveway/zway.rb
|
109
127
|
- rzwaveway.gemspec
|
128
|
+
- spec/command_classes/alarm_spec.rb
|
110
129
|
- spec/command_classes/battery_spec.rb
|
111
130
|
- spec/command_classes/sensor_binary_spec.rb
|
112
131
|
- spec/command_classes/switch_binary_spec.rb
|
113
132
|
- spec/command_classes/switch_multi_level_spec.rb
|
114
133
|
- spec/command_classes/wake_up_spec.rb
|
134
|
+
- spec/data/alarm.json
|
135
|
+
- spec/data/alarm_v1.json
|
115
136
|
- spec/data/battery_get.txt
|
116
137
|
- spec/data/sensor_level.txt
|
117
138
|
- spec/data/switch_multi_level_get.txt
|
118
139
|
- spec/data/wake_up.txt
|
140
|
+
- spec/events_spec.rb
|
141
|
+
- spec/property_spec.rb
|
119
142
|
- spec/spec_helper.rb
|
120
143
|
- spec/zwave_device_spec.rb
|
121
144
|
- spec/zway_spec.rb
|
@@ -138,7 +161,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
138
161
|
version: '0'
|
139
162
|
requirements: []
|
140
163
|
rubyforge_project:
|
141
|
-
rubygems_version: 2.
|
164
|
+
rubygems_version: 2.6.13
|
142
165
|
signing_key:
|
143
166
|
specification_version: 4
|
144
167
|
summary: ZWave API for ZWay
|