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.
@@ -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
+ }