mios 0.3.0 → 0.3.1
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.
- data/.rubocop.yml +769 -0
- data/README.md +21 -3
- data/lib/mios/action.rb +25 -18
- data/lib/mios/category.rb +14 -0
- data/lib/mios/category_collection.rb +38 -0
- data/lib/mios/client.rb +35 -0
- data/lib/mios/device.rb +47 -55
- data/lib/mios/interface.rb +53 -37
- data/lib/mios/job.rb +33 -34
- data/lib/mios/room.rb +14 -0
- data/lib/mios/scene.rb +22 -0
- data/lib/mios/services/camera1.rb +4 -5
- data/lib/mios/services/dimmable_light1.rb +5 -6
- data/lib/mios/services/door_lock1.rb +12 -13
- data/lib/mios/services/energy_metering1.rb +5 -6
- data/lib/mios/services/generic_sensor1.rb +4 -4
- data/lib/mios/services/ha_device1.rb +7 -8
- data/lib/mios/services/humidity_sensor1.rb +4 -5
- data/lib/mios/services/hvac_fan_operating_mode1.rb +3 -4
- data/lib/mios/services/hvac_operating_state1.rb +3 -4
- data/lib/mios/services/hvac_user_operating_mode1.rb +3 -4
- data/lib/mios/services/light_sensor1.rb +4 -12
- data/lib/mios/services/scene_controller1.rb +4 -4
- data/lib/mios/services/security_sensor1.rb +11 -12
- data/lib/mios/services/switch_power1.rb +7 -8
- data/lib/mios/services/temperature_sensor1.rb +3 -4
- data/lib/mios/services/temperature_setpoint1_cool.rb +3 -4
- data/lib/mios/services/temperature_setpoint1_heat.rb +3 -4
- data/lib/mios/services/window_covering1.rb +5 -6
- data/lib/mios/services/zwave_device1.rb +3 -3
- data/lib/mios/services/zwave_network1.rb +3 -3
- data/lib/mios/type_conversion.rb +21 -0
- data/lib/mios/version.rb +1 -1
- data/lib/mios.rb +12 -6
- data/mios.gemspec +2 -3
- data/spec/integration/lights_spec.rb +17 -0
- data/spec/lib/mios/category_collection_spec.rb +37 -0
- data/spec/lib/mios/category_spec.rb +15 -0
- data/spec/lib/mios/client_spec.rb +28 -0
- data/spec/lib/mios/device_spec.rb +69 -6
- data/spec/lib/mios/interface_spec.rb +123 -7
- data/spec/lib/mios/job_spec.rb +54 -0
- data/spec/lib/mios/room_spec.rb +26 -0
- data/spec/lib/mios/scene_spec.rb +27 -0
- data/spec/lib/mios/services/energy_metering1_spec.rb +1 -1
- data/spec/lib/mios/services/hvac_fan_operating_mode1_spec.rb +1 -1
- data/spec/lib/mios/services/hvac_operating_state1_spec.rb +1 -1
- data/spec/lib/mios/services/hvac_user_operating_mode1_spec.rb +1 -1
- data/spec/lib/mios/services/temperature_setpoint1_cool_spec.rb +1 -1
- data/spec/lib/mios/services/temperature_setpoint1_heat_spec.rb +1 -1
- data/spec/spec_helper.rb +18 -0
- data/spec/support/device_data/category_filter.json +75 -0
- data/spec/support/device_data/data_request.json +7814 -0
- data/spec/support/device_data/device_attributes.json +21 -0
- data/spec/support/vcr_cassettes/data_request_failure.yml +28 -0
- data/spec/support/vcr_cassettes/run_scene.yml +28 -0
- data/spec/support/vcr_cassettes/turn_off_light.yml +2648 -0
- data/spec/support/vcr_cassettes/turn_on_light.yml +2647 -0
- metadata +57 -39
@@ -1,20 +1,19 @@
|
|
1
1
|
module MiOS
|
2
2
|
module Services
|
3
3
|
module EnergyMetering1
|
4
|
-
|
5
|
-
|
6
|
-
end
|
4
|
+
|
5
|
+
URN = 'urn:micasaverde-com:serviceId:EnergyMetering1'
|
7
6
|
|
8
7
|
def watts
|
9
|
-
|
8
|
+
value_for URN, 'Watts', as: Integer
|
10
9
|
end
|
11
10
|
|
12
11
|
def kWh
|
13
|
-
|
12
|
+
value_for URN, 'KWH', as: Float
|
14
13
|
end
|
15
14
|
|
16
15
|
def last_reading_at
|
17
|
-
|
16
|
+
value_for URN, 'KWHReading', as: Time
|
18
17
|
end
|
19
18
|
end
|
20
19
|
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
module MiOS
|
2
2
|
module Services
|
3
3
|
module GenericSensor1
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
|
5
|
+
URN = 'urn:micasaverde-com:serviceId:GenericSensor1'
|
6
|
+
|
7
7
|
end
|
8
8
|
end
|
9
|
-
end
|
9
|
+
end
|
@@ -1,28 +1,27 @@
|
|
1
1
|
module MiOS
|
2
2
|
module Services
|
3
3
|
module HaDevice1
|
4
|
-
|
5
|
-
|
6
|
-
end
|
4
|
+
|
5
|
+
URN = 'urn:micasaverde-com:serviceId:HaDevice1'
|
7
6
|
|
8
7
|
def auto_configure
|
9
|
-
|
8
|
+
value_for(URN, 'AutoConfigure', as: Boolean)
|
10
9
|
end
|
11
10
|
|
12
11
|
def battery_date
|
13
|
-
|
12
|
+
value_for(URN, 'BatteryDate', as: Time)
|
14
13
|
end
|
15
14
|
|
16
15
|
def battery_level
|
17
|
-
|
16
|
+
value_for(URN, 'BatteryLevel', as: Integer)
|
18
17
|
end
|
19
18
|
|
20
19
|
def first_configured
|
21
|
-
|
20
|
+
value_for(URN, 'FirstConfigured', as: Time)
|
22
21
|
end
|
23
22
|
|
24
23
|
def last_update
|
25
|
-
|
24
|
+
value_for(URN, 'LastUpdate', as: Time)
|
26
25
|
end
|
27
26
|
end
|
28
27
|
end
|
@@ -1,13 +1,12 @@
|
|
1
|
-
#
|
1
|
+
# Tested with Everspring Combo Sensor
|
2
2
|
module MiOS
|
3
3
|
module Services
|
4
4
|
module HumiditySensor1
|
5
|
-
|
6
|
-
|
7
|
-
end
|
5
|
+
|
6
|
+
URN = 'urn:micasaverde-com:serviceId:HumiditySensor1'
|
8
7
|
|
9
8
|
def humidity
|
10
|
-
|
9
|
+
value_for URN, 'CurrentLevel', as: Integer
|
11
10
|
end
|
12
11
|
end
|
13
12
|
end
|
@@ -1,12 +1,11 @@
|
|
1
1
|
module MiOS
|
2
2
|
module Services
|
3
3
|
module HVACFanOperatingMode1
|
4
|
-
|
5
|
-
|
6
|
-
end
|
4
|
+
|
5
|
+
URN = 'urn:upnp-org:serviceId:HVAC_FanOperatingMode1'
|
7
6
|
|
8
7
|
def fan_mode
|
9
|
-
value_for
|
8
|
+
value_for URN, 'Mode'
|
10
9
|
end
|
11
10
|
end
|
12
11
|
end
|
@@ -1,12 +1,11 @@
|
|
1
1
|
module MiOS
|
2
2
|
module Services
|
3
3
|
module HVACOperatingState1
|
4
|
-
|
5
|
-
|
6
|
-
end
|
4
|
+
|
5
|
+
URN = 'urn:micasaverde-com:serviceId:HVAC_OperatingState1'
|
7
6
|
|
8
7
|
def operating_state
|
9
|
-
value_for
|
8
|
+
value_for URN, 'ModeState'
|
10
9
|
end
|
11
10
|
end
|
12
11
|
end
|
@@ -1,12 +1,11 @@
|
|
1
1
|
module MiOS
|
2
2
|
module Services
|
3
3
|
module HVACUserOperatingMode1
|
4
|
-
|
5
|
-
|
6
|
-
end
|
4
|
+
|
5
|
+
URN = 'urn:upnp-org:serviceId:HVAC_UserOperatingMode1'
|
7
6
|
|
8
7
|
def mode
|
9
|
-
value_for
|
8
|
+
value_for URN, 'ModeStatus'
|
10
9
|
end
|
11
10
|
end
|
12
11
|
end
|
@@ -1,21 +1,13 @@
|
|
1
1
|
module MiOS
|
2
2
|
module Services
|
3
3
|
module LightSensor1
|
4
|
-
|
5
|
-
|
6
|
-
end
|
4
|
+
|
5
|
+
URN = 'urn:micasaverde-com:serviceId:LightSensor1'
|
7
6
|
|
8
7
|
def level
|
9
|
-
|
10
|
-
if state_hash['service'] == @lightsensor1_urn
|
11
|
-
if state_hash['variable'] == "CurrentLevel"
|
12
|
-
return state_hash['value'].to_i
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
return nil
|
8
|
+
value_for URN, 'CurrentLevel', as: Integer
|
18
9
|
end
|
10
|
+
|
19
11
|
end
|
20
12
|
end
|
21
13
|
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
module MiOS
|
2
2
|
module Services
|
3
3
|
module SceneController1
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
|
5
|
+
URN = 'urn:micasaverde-com:serviceId:SceneController1'
|
6
|
+
|
7
7
|
end
|
8
8
|
end
|
9
|
-
end
|
9
|
+
end
|
@@ -1,32 +1,31 @@
|
|
1
1
|
module MiOS
|
2
2
|
module Services
|
3
3
|
module SecuritySensor1
|
4
|
-
|
5
|
-
|
6
|
-
end
|
4
|
+
|
5
|
+
URN = 'urn:micasaverde-com:serviceId:SecuritySensor1'
|
7
6
|
|
8
7
|
def tripped?
|
9
|
-
|
8
|
+
value_for URN, 'Tripped', as: Boolean
|
10
9
|
end
|
11
|
-
|
10
|
+
|
12
11
|
def armed?
|
13
|
-
|
12
|
+
value_for URN, 'Armed', as: Boolean
|
14
13
|
end
|
15
|
-
|
14
|
+
|
16
15
|
def disarmed?
|
17
16
|
!armed?
|
18
17
|
end
|
19
|
-
|
18
|
+
|
20
19
|
def lasttrip
|
21
|
-
|
20
|
+
value_for URN, 'LastTrip', as: Time
|
22
21
|
end
|
23
|
-
|
22
|
+
|
24
23
|
def arm!(async=false, &block)
|
25
|
-
set(
|
24
|
+
set(URN, 'SetArmed', { "newArmedValue" => 1 }, async, &block)
|
26
25
|
end
|
27
26
|
|
28
27
|
def disarm!(async=false, &block)
|
29
|
-
set(
|
28
|
+
set(URN, 'SetArmed', { "newArmedValue" => 0 }, async, &block)
|
30
29
|
end
|
31
30
|
end
|
32
31
|
end
|
@@ -1,24 +1,23 @@
|
|
1
1
|
module MiOS
|
2
2
|
module Services
|
3
3
|
module SwitchPower1
|
4
|
-
|
5
|
-
|
6
|
-
end
|
4
|
+
|
5
|
+
URN = 'urn:upnp-org:serviceId:SwitchPower1'
|
7
6
|
|
8
7
|
def on?
|
9
|
-
|
8
|
+
value_for URN, 'Status', as: Boolean
|
10
9
|
end
|
11
|
-
|
10
|
+
|
12
11
|
def off?
|
13
12
|
!on?
|
14
13
|
end
|
15
|
-
|
14
|
+
|
16
15
|
def on!(async=false, &block)
|
17
|
-
set(
|
16
|
+
set(URN, 'SetTarget', { "newTargetValue" => 1 }, async, &block)
|
18
17
|
end
|
19
18
|
|
20
19
|
def off!(async=false, &block)
|
21
|
-
set(
|
20
|
+
set(URN, 'SetTarget', { "newTargetValue" => 0 }, async, &block)
|
22
21
|
end
|
23
22
|
end
|
24
23
|
end
|
@@ -1,12 +1,11 @@
|
|
1
1
|
module MiOS
|
2
2
|
module Services
|
3
3
|
module TemperatureSensor1
|
4
|
-
|
5
|
-
|
6
|
-
end
|
4
|
+
|
5
|
+
URN = 'urn:upnp-org:serviceId:TemperatureSensor1'
|
7
6
|
|
8
7
|
def temperature
|
9
|
-
|
8
|
+
value_for URN 'CurrentTemperature', as: Integer
|
10
9
|
end
|
11
10
|
end
|
12
11
|
end
|
@@ -1,12 +1,11 @@
|
|
1
1
|
module MiOS
|
2
2
|
module Services
|
3
3
|
module TemperatureSetpoint1Cool
|
4
|
-
|
5
|
-
|
6
|
-
end
|
4
|
+
|
5
|
+
URN = 'urn:upnp-org:serviceId:TemperatureSetpoint1_Cool'
|
7
6
|
|
8
7
|
def cool_target
|
9
|
-
|
8
|
+
value_for URN, 'CurrentSetpoint', as: Integer
|
10
9
|
end
|
11
10
|
end
|
12
11
|
end
|
@@ -1,12 +1,11 @@
|
|
1
1
|
module MiOS
|
2
2
|
module Services
|
3
3
|
module TemperatureSetpoint1Heat
|
4
|
-
|
5
|
-
|
6
|
-
end
|
4
|
+
|
5
|
+
URN = 'urn:upnp-org:serviceId:TemperatureSetpoint1_Heat'
|
7
6
|
|
8
7
|
def heat_target
|
9
|
-
|
8
|
+
value_for URN, 'CurrentSetpoint', as: Integer
|
10
9
|
end
|
11
10
|
end
|
12
11
|
end
|
@@ -1,20 +1,19 @@
|
|
1
1
|
module MiOS
|
2
2
|
module Services
|
3
3
|
module WindowCovering1
|
4
|
-
|
5
|
-
|
6
|
-
end
|
4
|
+
|
5
|
+
URN = 'urn:upnp-org:serviceId:WindowCovering1'
|
7
6
|
|
8
7
|
def up!(async=false, &block)
|
9
|
-
set(
|
8
|
+
set(URN, 'Up', async, &block)
|
10
9
|
end
|
11
10
|
|
12
11
|
def down!(async=false, &block)
|
13
|
-
set(
|
12
|
+
set(URN, 'Down', async, &block)
|
14
13
|
end
|
15
14
|
|
16
15
|
def stop!(async=false, &block)
|
17
|
-
set(
|
16
|
+
set(URN, 'Stop', async, &block)
|
18
17
|
end
|
19
18
|
end
|
20
19
|
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
module MiOS
|
2
2
|
module Services
|
3
3
|
module ZWaveNetwork1
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
|
5
|
+
URN = 'urn:micasaverde-com:serviceId:ZWaveNetwork1'
|
6
|
+
|
7
7
|
end
|
8
8
|
end
|
9
9
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class Boolean; end
|
2
|
+
|
3
|
+
module MiOS
|
4
|
+
|
5
|
+
def self.cast(value, type)
|
6
|
+
result = case
|
7
|
+
when type == Integer
|
8
|
+
value.to_i
|
9
|
+
when type == Time
|
10
|
+
Time.at(value.to_i)
|
11
|
+
when type == Boolean
|
12
|
+
value.to_i == 1
|
13
|
+
when type == Float
|
14
|
+
value.to_f
|
15
|
+
else
|
16
|
+
value
|
17
|
+
end
|
18
|
+
result
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
data/lib/mios/version.rb
CHANGED
data/lib/mios.rb
CHANGED
@@ -1,8 +1,14 @@
|
|
1
1
|
require 'httpclient'
|
2
|
-
require '
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
2
|
+
require 'json'
|
3
|
+
require 'mios/version'
|
4
|
+
require 'mios/interface'
|
5
|
+
require 'mios/device'
|
6
|
+
require 'mios/action'
|
7
|
+
require 'mios/job'
|
8
|
+
require 'mios/client'
|
9
|
+
require 'mios/category'
|
10
|
+
require 'mios/category_collection'
|
11
|
+
require 'mios/room'
|
12
|
+
require 'mios/type_conversion'
|
13
|
+
require 'mios/scene'
|
8
14
|
Dir[File.dirname(__FILE__) + '/mios/services/*.rb'].each {|file| require file }
|
data/mios.gemspec
CHANGED
@@ -16,10 +16,9 @@ Gem::Specification.new do |gem|
|
|
16
16
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
17
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
18
|
gem.require_paths = ["lib"]
|
19
|
-
|
19
|
+
|
20
20
|
gem.add_dependency "httpclient", ">= 2.2.0"
|
21
|
-
|
22
|
-
|
21
|
+
|
23
22
|
gem.add_development_dependency "rspec", ">= 2.8.0"
|
24
23
|
gem.add_development_dependency "syntax"
|
25
24
|
gem.add_development_dependency "rake", ">= 0.9.2"
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'light type device control' do
|
4
|
+
let(:mios) { MiOS::Interface.new('http://192.168.50.21:3480') }
|
5
|
+
|
6
|
+
it 'should turn on the light' do
|
7
|
+
VCR.use_cassette('turn_on_light') do
|
8
|
+
mios.devices[11].on! { expect(mios.devices[11]).to be_on }
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'should turn off the light' do
|
13
|
+
VCR.use_cassette('turn_off_light') do
|
14
|
+
mios.devices[11].off! { expect(mios.devices[11]).to be_off }
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module MiOS
|
4
|
+
describe CategoryCollection do
|
5
|
+
before do
|
6
|
+
filters = JSON.parse(File.read('spec/support/device_data/category_filter.json'))
|
7
|
+
@category_collection = CategoryCollection.new(filters)
|
8
|
+
@category = @category_collection.all[5]
|
9
|
+
end
|
10
|
+
|
11
|
+
describe :find_for_id do
|
12
|
+
it 'should return a Category object given an id' do
|
13
|
+
category = @category_collection.find_by_id(16)
|
14
|
+
expect(category).to eql @category
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe :find_for_label do
|
19
|
+
it 'should return a Category object given a label' do
|
20
|
+
category = @category_collection.find_by_label('Sensors')
|
21
|
+
expect(category).to eql @category
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe :all do
|
26
|
+
it 'should return an array of all Categories' do
|
27
|
+
expect(@category_collection.all.count).to eql 7
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe :to_s do
|
32
|
+
it 'should return the correct string' do
|
33
|
+
expect(@category_collection.to_s).to_not be_empty
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module MiOS
|
4
|
+
describe Category do
|
5
|
+
before do
|
6
|
+
@category = Category.new('Sensors', [4, 12, 16, 17, 18])
|
7
|
+
end
|
8
|
+
|
9
|
+
describe :to_s do
|
10
|
+
it 'should return the correct string' do
|
11
|
+
expect(@category.to_s).to eql 'Sensors'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MiOS::Client do
|
4
|
+
|
5
|
+
it "can be instantiated" do
|
6
|
+
client = MiOS::Client.new('0.0.0.0:3000')
|
7
|
+
expect(client).to be_a MiOS::Client
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "#data_request" do
|
11
|
+
let(:client) { MiOS::Client.new('http://192.168.50.21:3480') }
|
12
|
+
let(:data_request_json) { JSON.parse(File.read('spec/support/device_data/data_request.json')) }
|
13
|
+
|
14
|
+
it "returns ruby object from parsed json" do
|
15
|
+
VCR.use_cassette('data_request') do
|
16
|
+
test_params = { id: 'user_data', output_format: :json}
|
17
|
+
expect(client.data_request(test_params)).to eq data_request_json
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
it "defaults to json output format" do
|
22
|
+
VCR.use_cassette('data_request') do
|
23
|
+
test_params = { id: 'user_data' }
|
24
|
+
expect(client.data_request(test_params)).to eq data_request_json
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -1,10 +1,73 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
module MiOS
|
4
|
+
describe Device do
|
5
|
+
before :each do
|
6
|
+
@data_request = JSON.parse(File.read('spec/support/device_data/data_request.json'))
|
7
|
+
@states = @data_request['devices'][11]['states']
|
8
|
+
@attributes = JSON.parse(File.read('spec/support/device_data/device_attributes.json'))
|
9
|
+
VCR.use_cassette('data_request') do
|
10
|
+
@interface = MiOS::Interface.new('http://192.168.50.21:3480')
|
11
|
+
@interface.stub(:device_status).and_return('id' => '12', 'states' => @states, 'name' => 'On/Off Outlet')
|
12
|
+
@device = @interface.devices[11]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe :initialize do
|
17
|
+
it 'should be an instance of Device' do
|
18
|
+
expect(@device).to be_an_instance_of(MiOS::Device)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should output a warning for unsupported services' do
|
22
|
+
output = capture_stderr do
|
23
|
+
device = MiOS::Device.new(nil, JSON.parse(File.read('spec/support/device_data/echo-energy-manager.json')))
|
24
|
+
end
|
25
|
+
expect(output).to eql "WARNING: EEMPlugin1 not yet supported\n"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe :method_missing do
|
30
|
+
it 'should throw an exception for missing attributes' do
|
31
|
+
expect {@device.foo}.to raise_error
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'should not throw an exception for defined attributes' do
|
35
|
+
expect {@device.id}.to_not raise_error
|
36
|
+
expect(@device.id).to eql '12'
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe :states do
|
41
|
+
it 'should return the current device states' do
|
42
|
+
expect(@device.states).to eql(@states)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe :room do
|
47
|
+
it 'should return the correct room for the device' do
|
48
|
+
expect(@device.room.name).to eql 'Living Room'
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe :reload do
|
53
|
+
it 'should change state' do
|
54
|
+
expect(@device.states).to eql(@states)
|
55
|
+
@states[1]['value'] = 'off'
|
56
|
+
@device.reload
|
57
|
+
expect(@device.states).to eql(@states)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe :category do
|
62
|
+
it 'should return the appropriate category' do
|
63
|
+
expect(@device.category.label).to eql 'Lights'
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe :attributes do
|
68
|
+
it 'should return the attributes hash' do
|
69
|
+
expect(@device.attributes).to eql(@attributes)
|
70
|
+
end
|
7
71
|
end
|
8
|
-
expect(output).to eql "WARNING: EEMPlugin1 not yet supported\n"
|
9
72
|
end
|
10
|
-
end
|
73
|
+
end
|