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}$/
PLATFORM_IDS =
Platform::IDS

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.



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/particle/device.rb', line 11

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



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

def self.claim_path
  "v1/devices"
end

.list_pathObject



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

def self.list_path
  "v1/devices"
end

.provision_pathObject



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

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


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

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



167
168
169
# File 'lib/particle/device.rb', line 167

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

#dev_kit?Boolean

Returns:

  • (Boolean)


70
71
72
# File 'lib/particle/device.rb', line 70

def dev_kit?
  product_id && PLATFORM_IDS.include?(product_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



155
156
157
# File 'lib/particle/device.rb', line 155

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



111
112
113
# File 'lib/particle/device.rb', line 111

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

#function_path(name) ⇒ Object



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

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

#functionsObject



48
49
50
51
# File 'lib/particle/device.rb', line 48

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

#get_attributesObject



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

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

#idObject



27
28
29
30
# File 'lib/particle/device.rb', line 27

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

#id_or_nameObject



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

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

#nameObject



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

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

#pathObject



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

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



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

def ping
  @client.ping_device(self)
end

#ping_pathObject



210
211
212
# File 'lib/particle/device.rb', line 210

def ping_path
  path + "/ping"
end

#platformObject



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

def platform
  @platform ||= Platform.new(@client, platform_id)
end

#platform_nameObject



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

def platform_name
  platform.name
end

#productObject



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

def product
  @product ||= dev_kit? ? nil : Product.new(@client, product_id)
end

#removeObject

Remove a Particle device from your account

Examples:

Add a Photon by its id

Particle.device('f8bbe1e6e69e05c9c405ba1ca504d438061f1b0d').claim


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

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



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

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



140
141
142
# File 'lib/particle/device.rb', line 140

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

#update_keys_pathObject



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

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



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

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



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

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

#variable_path(name) ⇒ Object



206
207
208
# File 'lib/particle/device.rb', line 206

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

#variablesObject



53
54
55
56
# File 'lib/particle/device.rb', line 53

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