rzwaveway 0.0.11 → 0.0.13

Sign up to get free protection for your applications and to get access to all the features.
@@ -18,7 +18,8 @@ Gem::Specification.new do |s|
18
18
  [:runtime, 'faraday'],
19
19
  [:runtime, 'httpclient'],
20
20
  [:development, 'bundler', '~> 1.0'],
21
- [:development, 'rspec', '~> 3.0.0']
21
+ [:development, 'rspec', '~> 3.0.0'],
22
+ [:development, 'pry-byebug']
22
23
  ]
23
24
 
24
25
  dependencies.each do |type, name, version|
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ module RZWaveWay
4
+ module CommandClasses
5
+ describe Alarm do
6
+ let(:device) { ZWaveDevice.new(create_id, create_device_data) }
7
+ let(:command_class) { Alarm.new(device) }
8
+
9
+ describe '#process' do
10
+ it 'yields an alarm event (v1 event)' do
11
+ updates = File.read('spec/data/alarm_v1.json')
12
+ updates = JSON.parse updates
13
+ zway = ZWay.instance
14
+ updates_per_device = zway.send(:group_per_device, updates)
15
+ updates_per_cc = device.send(:group_per_commandclass, updates_per_device[12])
16
+
17
+ event = nil
18
+ command_class.process(updates_per_cc[113]) {|e| event = e}
19
+ expect(event.alarm_type).to eq :power_management
20
+ expect(event.level).to eq 2
21
+ end
22
+
23
+ it 'yields an alarm event' do
24
+ updates = File.read('spec/data/alarm.json')
25
+ updates = JSON.parse updates
26
+ zway = ZWay.instance
27
+ updates_per_device = zway.send(:group_per_device, updates)
28
+ updates_per_cc = device.send(:group_per_commandclass, updates_per_device[24])
29
+
30
+ event = nil
31
+ command_class.process(updates_per_cc[113]) {|e| event = e}
32
+ expect(event.alarm_type).to eq :burglar
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -3,20 +3,21 @@ require 'spec_helper'
3
3
  module RZWaveWay
4
4
  module CommandClasses
5
5
  describe Battery do
6
+ let(:command_class) { Battery.new(device) }
6
7
  let(:device) { ZWaveDevice.new(create_id, create_device_data) }
7
- let(:command_class) do
8
- Battery.new(
9
- {'data' => { 'last' => {
10
- 'value' => 60,
11
- 'type' => 'int',
12
- 'updateTime' => 1409681662
13
- }}}, device)
14
- end
8
+ let(:data) {
9
+ {'data' => { 'last' => {
10
+ 'value' => 60,
11
+ 'type' => 'int',
12
+ 'updateTime' => 1409681662
13
+ }}}
14
+ }
15
+
16
+ before { command_class.build_from(data) }
15
17
 
16
- describe '#new' do
17
- it 'stores interesting properties' do
18
- command_class
19
- expect(device.get_property(:battery_level)).to eq [60, 1409681662]
18
+ describe '#build_from' do
19
+ it 'adds the battery level property' do
20
+ expect(command_class.battery_level).to eq 60
20
21
  end
21
22
  end
22
23
 
@@ -25,14 +26,15 @@ module RZWaveWay
25
26
  expect(command_class.process({})).to be_nil
26
27
  end
27
28
 
28
- it 'returns a battery event' do
29
+ it 'yields a battery event' do
29
30
  updates = {
30
31
  'data.last' => {
31
32
  'value' => 50,
32
33
  'type' => 'int',
33
34
  'updateTime' => 1409681762
34
35
  }}
35
- event = command_class.process(updates)
36
+ event = nil
37
+ command_class.process(updates) {|e| event = e}
36
38
  expect(event.class).to be RZWaveWay::BatteryValueEvent
37
39
  expect(event.value).to eq 50
38
40
  expect(event.device_id).to eq device.id
@@ -3,19 +3,20 @@ require 'spec_helper'
3
3
  module RZWaveWay
4
4
  module CommandClasses
5
5
  describe SensorBinary do
6
+ let(:command_class) { SensorBinary.new(device) }
6
7
  let(:device) { ZWaveDevice.new(create_id, create_device_data) }
7
- let(:command_class) do
8
- SensorBinary.new(
9
- {'data' => { '1' => { 'level' => {
10
- 'value' => false,
11
- 'updateTime' => 1405102560
12
- }}}}, device)
13
- end
8
+ let(:data) {
9
+ {'data' => { '1' => { 'level' => {
10
+ 'value' => false,
11
+ 'updateTime' => 1405102560
12
+ }}}}
13
+ }
14
+
15
+ before { command_class.build_from(data) }
14
16
 
15
- describe '#new' do
16
- it 'stores interesting properties' do
17
- command_class
18
- expect(device.get_property(:level)).to eq [false, 1405102560]
17
+ describe '#build_from' do
18
+ it 'adds a property for level' do
19
+ expect(command_class.level).to eq false
19
20
  end
20
21
  end
21
22
 
@@ -24,13 +25,14 @@ module RZWaveWay
24
25
  expect(command_class.process({})).to be_nil
25
26
  end
26
27
 
27
- it 'returns a level event' do
28
+ it 'yields a level event' do
28
29
  updates = {
29
30
  'data.1' => { 'level' => {
30
31
  'value' => true,
31
32
  'updateTime' => 1405102860
32
33
  }}}
33
- event = command_class.process(updates)
34
+ event = nil
35
+ command_class.process(updates) {|e| event = e}
34
36
  expect(event.class).to be RZWaveWay::LevelEvent
35
37
  expect(event.level).to eq true
36
38
  expect(event.device_id).to eq device.id
@@ -3,19 +3,20 @@ require 'spec_helper'
3
3
  module RZWaveWay
4
4
  module CommandClasses
5
5
  describe SwitchBinary do
6
+ let(:command_class) { SwitchBinary.new(device) }
6
7
  let(:device) { ZWaveDevice.new(create_id, create_device_data) }
7
- let(:command_class) do
8
- SwitchBinary.new(
9
- {'data' => { 'level' => {
10
- 'value' => false,
11
- 'updateTime' => 1405102560
12
- }}}, device)
13
- end
8
+ let(:data) {
9
+ {'data' => { 'level' => {
10
+ 'value' => false,
11
+ 'updateTime' => 1405102560
12
+ }}}
13
+ }
14
+
15
+ before { command_class.build_from(data) }
14
16
 
15
- describe '#it caches the level' do
16
- it 'stores interesting properties' do
17
- command_class
18
- expect(device.get_property(:level)).to eq [false, 1405102560]
17
+ describe '#build_from' do
18
+ it 'adds a property for level' do
19
+ expect(command_class.level).to eq false
19
20
  end
20
21
  end
21
22
 
@@ -24,13 +25,14 @@ module RZWaveWay
24
25
  expect(command_class.process({})).to be_nil
25
26
  end
26
27
 
27
- it 'returns a multi level event' do
28
+ it 'yields a multi level event' do
28
29
  updates = {
29
30
  'data.level' => {
30
31
  'value' => true,
31
32
  'updateTime' => 1405102860
32
33
  }}
33
- event = command_class.process(updates)
34
+ event = nil
35
+ command_class.process(updates) {|e| event = e}
34
36
  expect(event.class).to be RZWaveWay::LevelEvent
35
37
  expect(event.level).to eq true
36
38
  expect(event.device_id).to eq device.id
@@ -3,19 +3,20 @@ require 'spec_helper'
3
3
  module RZWaveWay
4
4
  module CommandClasses
5
5
  describe SwitchMultiLevel do
6
+ let(:command_class) { SwitchMultiLevel.new(device) }
6
7
  let(:device) { ZWaveDevice.new(create_id, create_device_data) }
7
- let(:command_class) do
8
- SwitchMultiLevel.new(
9
- {'data' => { 'level' => {
10
- 'value' => 33,
11
- 'updateTime' => 1405102560
12
- }}}, device)
13
- end
8
+ let(:data) {
9
+ {'data' => { 'level' => {
10
+ 'value' => 33,
11
+ 'updateTime' => 1405102560
12
+ }}}
13
+ }
14
+
15
+ before { command_class.build_from(data) }
14
16
 
15
- describe '#new' do
16
- it 'stores interesting properties' do
17
- command_class
18
- expect(device.get_property(:level)).to eq [33, 1405102560]
17
+ describe '#build_from' do
18
+ it 'adds a property for level' do
19
+ expect(command_class.level).to eq 33
19
20
  end
20
21
  end
21
22
 
@@ -24,13 +25,14 @@ module RZWaveWay
24
25
  expect(command_class.process({})).to be_nil
25
26
  end
26
27
 
27
- it 'returns a multi level event' do
28
+ it 'yields a multi level event' do
28
29
  updates = {
29
30
  'data.level' => {
30
31
  'value' => 66,
31
32
  'updateTime' => 1405102860
32
33
  }}
33
- event = command_class.process(updates)
34
+ event = nil
35
+ command_class.process(updates) {|e| event = e}
34
36
  expect(event.class).to be RZWaveWay::MultiLevelEvent
35
37
  expect(event.level).to eq 66
36
38
  expect(event.device_id).to eq device.id
@@ -3,24 +3,65 @@ require 'spec_helper'
3
3
  module RZWaveWay
4
4
  module CommandClasses
5
5
  describe WakeUp do
6
+ let(:command_class) { WakeUp.new(device) }
6
7
  let(:device) { ZWaveDevice.new(create_id, create_device_data) }
7
- let(:command_class) do
8
- WakeUp.new(
9
- {'data' => {
10
- 'interval' => {'value' => 300, 'updateTime' => 1394983000},
11
- 'lastSleep' => {'value' => 1394983222, 'updateTime' => 1394983222},
12
- 'lastWakeup' => {'value' => 1394983222, 'updateTime' => 1394983222}
13
- }}, device)
8
+ let(:data) {
9
+ {'data' => {
10
+ 'interval' => {'value' => contact_frequency, 'updateTime' => 1394983000},
11
+ 'lastSleep' => {'value' => time, 'updateTime' => time},
12
+ 'lastWakeup' => {'value' => time, 'updateTime' => time}
13
+ }}
14
+ }
15
+ let(:contact_frequency) { 300 }
16
+ let(:time) { 1394983222 }
17
+
18
+ before { command_class.build_from(data) }
19
+
20
+ describe '#build_from' do
21
+ it 'adds a property for wakeup interval' do
22
+ expect(command_class.contact_frequency).to eq 300
23
+ end
24
+
25
+ it 'adds a property for last sleep/wakeup time' do
26
+ expect(command_class.last_sleep_time).to eq time
27
+ end
28
+
29
+ it 'updates the last contact time' do
30
+ expect(command_class.device.last_contact_time).to eq time
31
+ end
14
32
  end
15
33
 
16
- describe '#new' do
17
- it 'stores interesting properties' do
18
- command_class
19
- expect(device.get_property(:wakeup_interval)).to eq [300, 1394983000]
20
- expect(device.contact_frequency).to eq 300
21
- expect(device.get_property(:wakeup_last_sleep_time)).to eq [1394983222, 1394983222]
22
- expect(device.get_property(:wakeup_last_wakeup_time)).to eq [1394983222, 1394983222]
23
- expect(device.last_contact_time).to eq 1394983222
34
+ describe '#missed_contact_count' do
35
+ it 'returns 0' do
36
+ expect(command_class.missed_contact_count(time + (contact_frequency - 1))).to eq 0
37
+ end
38
+
39
+ it 'returns 1' do
40
+ expect(command_class.missed_contact_count(time + contact_frequency)).to eq 1
41
+ end
42
+ end
43
+
44
+ describe '#on_time?' do
45
+ context 'no contact with device during wake up interval' do
46
+ it 'returns true (wake up time not yet reached)' do
47
+ expect(command_class.on_time?(time + (contact_frequency - 1))).to eq true
48
+ end
49
+
50
+ it 'returns true (wake up time reached but with small latency' do
51
+ expect(command_class.on_time?(time + (contact_frequency + 2))).to eq true
52
+ end
53
+
54
+ it 'returns false' do
55
+ expect(command_class.on_time?(time + (contact_frequency * 1.5))).to eq false
56
+ end
57
+ end
58
+
59
+ context 'contact with device during wake up interval' do
60
+ before { device.notify_contacted(time + 120) }
61
+
62
+ it 'return true' do
63
+ expect(command_class.on_time?(time + 120 + (contact_frequency - 1))).to eq true
64
+ end
24
65
  end
25
66
  end
26
67
 
@@ -29,15 +70,13 @@ module RZWaveWay
29
70
  expect(command_class.process({})).to be_nil
30
71
  end
31
72
 
32
- it 'returns an alive event' do
73
+ it 'updates the last contact time' do
33
74
  updates = {
34
75
  'data.lastWakeup' => {'value' => 1395247772, 'updateTime' => 1395247772},
35
76
  'data.lastSleep' => {'value' => 1395247772, 'updateTime' => 1395247772}
36
77
  }
37
- event = command_class.process(updates)
38
- expect(event.class).to be RZWaveWay::AliveEvent
39
- expect(event.device_id).to eq device.id
40
- expect(event.time).to eq 1395247772
78
+ command_class.process(updates)
79
+ expect(device.last_contact_time).to eq 1395247772
41
80
  end
42
81
  end
43
82
  end
@@ -0,0 +1,69 @@
1
+ {
2
+ "devices.24.data.isAwake": {
3
+ "value": true,
4
+ "type": "bool",
5
+ "invalidateTime": 1496580849,
6
+ "updateTime": 1497033124
7
+ },
8
+ "devices.24.data.lastSend": {
9
+ "value": 34492540,
10
+ "type": "int",
11
+ "invalidateTime": 1496676167,
12
+ "updateTime": 1497033124
13
+ },
14
+ "devices.24.data.lastReceived": {
15
+ "value": 0,
16
+ "type": "int",
17
+ "invalidateTime": 1496580849,
18
+ "updateTime": 1497033124
19
+ },
20
+ "devices.24.instances.0.commandClasses.113.data.7": {
21
+ "value": null,
22
+ "type": "empty",
23
+ "typeString": {
24
+ "value": "Burglar",
25
+ "type": "string",
26
+ "invalidateTime": 1496581247,
27
+ "updateTime": 1496581248
28
+ },
29
+ "status": {
30
+ "value": 255,
31
+ "type": "int",
32
+ "invalidateTime": 1496581247,
33
+ "updateTime": 1497033124
34
+ },
35
+ "eventMask": {
36
+ "value": 265,
37
+ "type": "int",
38
+ "invalidateTime": 1496581247,
39
+ "updateTime": 1496581249
40
+ },
41
+ "event": {
42
+ "value": 8,
43
+ "type": "int",
44
+ "invalidateTime": 1496581247,
45
+ "updateTime": 1497033124
46
+ },
47
+ "eventString": {
48
+ "value": "Motion detected, location unknown",
49
+ "type": "string",
50
+ "invalidateTime": 1496581247,
51
+ "updateTime": 1497033124
52
+ },
53
+ "eventParameters": {
54
+ "value": [],
55
+ "type": "binary",
56
+ "invalidateTime": 1496581247,
57
+ "updateTime": 1497033124
58
+ },
59
+ "eventSequence": {
60
+ "value": null,
61
+ "type": "empty",
62
+ "invalidateTime": 1496676245,
63
+ "updateTime": 1496676246
64
+ },
65
+ "invalidateTime": 1496581247,
66
+ "updateTime": 1497033124
67
+ },
68
+ "updateTime": 1497033128
69
+ }
@@ -0,0 +1,69 @@
1
+ {
2
+ "devices.12.instances.0.commandClasses.113.data.V1event": {
3
+ "value": null,
4
+ "type": "empty",
5
+ "alarmType": {
6
+ "value": 8,
7
+ "type": "int",
8
+ "invalidateTime": 1476129162,
9
+ "updateTime": 1476903673
10
+ },
11
+ "level": {
12
+ "value": 2,
13
+ "type": "int",
14
+ "invalidateTime": 1476129162,
15
+ "updateTime": 1476903673
16
+ },
17
+ "invalidateTime": 1476129162,
18
+ "updateTime": 1476903673
19
+ },
20
+ "devices.12.instances.0.commandClasses.113.data.8": {
21
+ "value": null,
22
+ "type": "empty",
23
+ "typeString": {
24
+ "value": "Power Management",
25
+ "type": "string",
26
+ "invalidateTime": 1476129182,
27
+ "updateTime": 1476129183
28
+ },
29
+ "status": {
30
+ "value": 255,
31
+ "type": "int",
32
+ "invalidateTime": 1476129182,
33
+ "updateTime": 1476903673
34
+ },
35
+ "eventMask": {
36
+ "value": 12,
37
+ "type": "int",
38
+ "invalidateTime": 1476129182,
39
+ "updateTime": 1476129183
40
+ },
41
+ "event": {
42
+ "value": 2,
43
+ "type": "int",
44
+ "invalidateTime": 1476129182,
45
+ "updateTime": 1476903673
46
+ },
47
+ "eventString": {
48
+ "value": "AC mains disconnected",
49
+ "type": "string",
50
+ "invalidateTime": 1476129182,
51
+ "updateTime": 1476903673
52
+ },
53
+ "eventParameters": {
54
+ "value": [ ],
55
+ "type": "binary",
56
+ "invalidateTime": 1476129182,
57
+ "updateTime": 1476903673
58
+ },
59
+ "eventSequence": {
60
+ "value": null,
61
+ "type": "empty",
62
+ "invalidateTime": 1476129182,
63
+ "updateTime": 1476129183
64
+ },
65
+ "invalidateTime": 1476129182,
66
+ "updateTime": 1476903673
67
+ },
68
+ "updateTime": 1476903675
69
+ }