Class: Particle::Device

Inherits:
Model
  • Object
show all
Defined in:
lib/particle/device.rb

Overview

Domain model for one Particle device

Constant Summary collapse

ID_REGEX =
/^\h{24}$/
PRODUCT_IDS =
{
  0 => "Core".freeze,
  6 => "Photon".freeze,
  8 => "P1".freeze,
  10 => "Electron".freeze,
  31 => "Raspberry Pi".freeze
}

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Model

attribute_reader, #attributes, #inspect

Constructor Details

#initialize(client, attributes) ⇒ Device

Returns a new instance of Device.



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/particle/device.rb', line 16

def initialize(client, attributes)
  super(client, attributes)

  if attributes.is_a? String
    if attributes =~ ID_REGEX
      @attributes = { id: attributes }
    else
      @attributes = { name: attributes }
    end
  else
    # Listing all devices returns partial attributes so check if the
    # device was fully loaded or not
    @fully_loaded = true if attributes.key?(:variables)
  end
end

Class Method Details

.claim_pathObject



177
178
179
# File 'lib/particle/device.rb', line 177

def self.claim_path
  "v1/devices"
end

.list_pathObject



173
174
175
# File 'lib/particle/device.rb', line 173

def self.list_path
  "v1/devices"
end

.provision_pathObject



181
182
183
# File 'lib/particle/device.rb', line 181

def self.provision_path
  "v1/devices"
end

Instance Method Details

#claimObject

Add a Particle device to your account

Examples:

Add a Photon by its id

Particle.device('f8bbe1e6e69e05c9c405ba1ca504d438061f1b0d').claim


74
75
76
77
# File 'lib/particle/device.rb', line 74

def claim
  new_device = @client.claim_device(self)
  self
end

#compile(file_paths) ⇒ OpenStruct

Compile firmware from source code for this device

Parameters:

  • file_paths (Array<String>)

    File paths to send to cloud and flash

Returns:

  • (OpenStruct)

    Result of flashing. :ok => true on success :errors => String with compile errors



158
159
160
# File 'lib/particle/device.rb', line 158

def compile(file_paths)
  @client.compile(file_paths, device_id: id)
end

#flash(file_paths, options = {}) ⇒ OpenStruct

Flash new firmware to this device from source code or binary

Parameters:

  • file_paths (Array<String>)

    File paths to send to cloud and flash

  • options (Hash) (defaults to: {})

    Flashing options :binary => true to skip the compile stage

Returns:

  • (OpenStruct)

    Result of flashing. :ok => true on success :errors => String with compile errors



146
147
148
# File 'lib/particle/device.rb', line 146

def flash(file_paths, options = {})
  @client.flash_device(self, file_paths, options)
end

#function(name, argument = "") ⇒ Object Also known as: call

Call a function in the firmware of a Particle device

Examples:

Call the thinker digitalWrite function

Particle.device('white_whale').function('digitalWrite', '0')

Parameters:

  • name (String)

    Function to run on firmware

  • argument (String) (defaults to: "")

    Argument string to pass to the firmware function



102
103
104
# File 'lib/particle/device.rb', line 102

def function(name, argument = "")
  @client.call_function(self, name, argument)
end

#function_path(name) ⇒ Object



193
194
195
# File 'lib/particle/device.rb', line 193

def function_path(name)
  path + "/#{name}"
end

#functionsObject



51
52
53
54
# File 'lib/particle/device.rb', line 51

def functions
  get_attributes unless @fully_loaded
  @attributes[:functions]
end

#get_attributesObject



65
66
67
68
# File 'lib/particle/device.rb', line 65

def get_attributes
  @loaded = @fully_loaded = true
  @attributes = @client.device_attributes(self)
end

#idObject



32
33
34
35
# File 'lib/particle/device.rb', line 32

def id
  get_attributes unless @attributes[:id]
  @attributes[:id]
end

#id_or_nameObject



42
43
44
# File 'lib/particle/device.rb', line 42

def id_or_name
  @attributes[:id] || @attributes[:name]
end

#nameObject



37
38
39
40
# File 'lib/particle/device.rb', line 37

def name
  get_attributes unless @attributes[:name]
  @attributes[:name]
end

#pathObject



189
190
191
# File 'lib/particle/device.rb', line 189

def path
  "/v1/devices/#{id_or_name}"
end

#pingboolean

Ping a device to see if it is online

Returns:

  • (boolean)

    true when online, false when offline



122
123
124
# File 'lib/particle/device.rb', line 122

def ping
  @client.ping_device(self)
end

#ping_pathObject



201
202
203
# File 'lib/particle/device.rb', line 201

def ping_path
  path + "/ping"
end

#productObject



61
62
63
# File 'lib/particle/device.rb', line 61

def product
  PRODUCT_IDS[product_id]
end

#removeObject

Remove a Particle device from your account

Examples:

Add a Photon by its id

Particle.device('f8bbe1e6e69e05c9c405ba1ca504d438061f1b0d').claim


83
84
85
# File 'lib/particle/device.rb', line 83

def remove
  @client.remove_device(self)
end

#rename(name) ⇒ Object

Rename a Particle device on your account

Examples:

Change the name of a Photon

Particle.device('blue').rename('red')

Parameters:

  • name (String)

    New name for the device



92
93
94
# File 'lib/particle/device.rb', line 92

def rename(name)
  @client.rename_device(self, name)
end

#signal(enabled = true) ⇒ boolean

Signal the device to start blinking the RGB LED in a rainbow pattern. Useful to identify a particular device.

Parameters:

  • enabled (String) (defaults to: true)

    Whether to enable or disable the rainbow signal

Returns:

  • (boolean)

    true when signaling, false when stopped



131
132
133
# File 'lib/particle/device.rb', line 131

def signal(enabled = true)
  @client.signal_device(self, enabled)
end

#update_keys_pathObject



185
186
187
# File 'lib/particle/device.rb', line 185

def update_keys_path
  "/v1/provisioning/#{id}"
end

#update_public_key(public_key, algorithm = 'rsa') ⇒ boolean

Update the public key for this device

Parameters:

  • public_key (String)

    The public key in PEM format (default format generated by openssl)

  • algorithm (String) (defaults to: 'rsa')

    The encryption algorithm for the key (default rsa)

Returns:

  • (boolean)

    true when successful



169
170
171
# File 'lib/particle/device.rb', line 169

def update_public_key(public_key, algorithm = 'rsa')
  @client.update_device_public_key(self, public_key, algorithm)
end

#variable(name) ⇒ String, Number Also known as: get

Get the value of a variable in the firmware of a Particle device

Examples:

Get the battery voltage

Particle.device('mycar').variable('battery') == 12.5

Parameters:

  • target (String, Device)

    A device id, name or Particle::Device object

  • name (String)

    Variable on firmware

Returns:

  • (String, Number)

    Value from the firmware variable



114
115
116
# File 'lib/particle/device.rb', line 114

def variable(name)
  @client.get_variable(self, name)
end

#variable_path(name) ⇒ Object



197
198
199
# File 'lib/particle/device.rb', line 197

def variable_path(name)
  path + "/#{name}"
end

#variablesObject



56
57
58
59
# File 'lib/particle/device.rb', line 56

def variables
  get_attributes unless @fully_loaded
  @attributes[:variables]
end