rzwaveway 0.0.11 → 0.0.13
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/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
|