Class: Guh::Device

Inherits:
Base
  • Object
show all
Defined in:
lib/guh/device.rb

Overview

This class wraps everything related to configured Devices.

TODO write up the creation of a normal device

TODO write up the creation of a discoverable device.

Class Method Summary collapse

Methods inherited from Base

configure, get, guh_ip_address, guh_ip_address=, guh_port, guh_port=, introspect, version

Class Method Details

.add(device_class_id, device_descriptor_id = nil, params = []) ⇒ Object

Creates a configured device and returns it’s ID.

Example for the “Elro Power Switch”:

Guh::Device.add("{308ae6e6-38b3-4b3a-a513-3199da2764f8}", nil, {
  channel1: true,
  channel2: false,
  channel3: false,
  channel4: false,
  channel5: false,
  channel6: true,
  channel7: false,
  channel8: false,
  channel9: false,
  channel10: false
})

To create a discovered device you have to provide a descriptor ID in the params:

Guh::Device.add("{985195aa-17ad-4530-88a4-cdd753d747d7}", "{727a4a9a-c187-446f-aadf-f1b2220607d1}")


91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/guh/device.rb', line 91

def self.add(device_class_id, device_descriptor_id = nil, params = [])
  device_class = Guh::DeviceClass.find(device_class_id)

  if device_class['createMethods'].include? 'CreateMethodUser'
    add_configured_device(device_class_id, params)
  elsif device_class['createMethods'].include? 'CreateMethodDiscovery'
    add_discovered_device(device_class_id, device_descriptor_id, params)
  elsif device_class['createMethods'].include? 'CreateMethodAuto'
    # Nothing to do here
    # TODO should we raise an exception?
  end
end

.allObject

Returns a list of all configured Devices.

Example:

Guh::Device.all


34
35
36
37
38
39
40
41
# File 'lib/guh/device.rb', line 34

def self.all
  response = get({
    id: generate_request_id,
    method: "Devices.GetConfiguredDevices"
  })

  return response['devices']
end

.confirm_pairing(pairing_transaction_id) ⇒ Object

Finishes a pairing process with a device. The user might have to push a button on the device.

The pairing_transaction_id can be obtained with the add_discovered_device() method.



110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/guh/device.rb', line 110

def self.confirm_pairing(pairing_transaction_id)
  response = get({
    id: generate_request_id,
    method: "Devices.PairDevice",
    params: {
      pairingTransactionId: pairing_transaction_id
    }
  })

  if response['deviceError'] == 'DeviceErrorNoError'
    return response
  else
    raise Guh::DeviceError, response['deviceError']
  end
end

.countObject

Returns current number of configured devices

Example: Guh::Device.count_configured



157
158
159
# File 'lib/guh/device.rb', line 157

def self.count
  self.all.length
end

.discover(device_class_id, discovery_params = []) ⇒ Object

Returns a list of recently discovered devices.

Example:

Guh::Device.discover("{985195aa-17ad-4530-88a4-cdd753d747d7}", [{name: 'location', value: 'Salzburg'}])


51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/guh/device.rb', line 51

def self.discover(device_class_id, discovery_params = [])
  response = get({
    id: generate_request_id,
    method: "Devices.GetDiscoveredDevices",
    params: {
      deviceClassId: device_class_id,
      discoveryParams: discovery_params
    }
  })

  if response['deviceError'] == 'DeviceErrorNoError'
    return response['deviceDescriptors']
  else
    raise Guh::DeviceError, response['deviceError']
  end
end

.find(id) ⇒ Object

Returns a specific configured Device.

Example:

Guh::Device.find('{427a4a9a-c107-446f-aadf-f1b2abad607d1}')


20
21
22
23
24
# File 'lib/guh/device.rb', line 20

def self.find(id)
  device = self.all.detect{|d| d['id']==id}

  return device
end

.remove(device_id) ⇒ Object

Removes a configured device.

Example:

device_id = Guh::Device.add("{ab73ad2f-6594-45a3-9063-8f72d365c5e5}", nil, [{name: 'familyCode', value: 'A'}])

Guh::Device.remove(device_id)


136
137
138
139
140
141
142
143
144
145
146
147
148
149
# File 'lib/guh/device.rb', line 136

def self.remove(device_id)
  response = get({
    id: generate_request_id,
    method: "Devices.RemoveConfiguredDevice",
    params: {
      deviceId: device_id
    }
  })
  if response['deviceError'] == 'DeviceErrorNoError'
    return true
  else
    raise Guh::DeviceError, response['deviceError']
  end
end