Class: LEDENET::Api

Inherits:
Object
  • Object
show all
Defined in:
lib/ledenet/api.rb

Constant Summary collapse

DEFAULT_OPTIONS =
{
    reuse_connection: false,
    max_retries: 3,
    port: 5577
}

Instance Method Summary collapse

Constructor Details

#initialize(device_address, options = {}) ⇒ Api

Returns a new instance of Api.



14
15
16
17
# File 'lib/ledenet/api.rb', line 14

def initialize(device_address, options = {})
  @device_address = device_address
  @options = DEFAULT_OPTIONS.merge(options)
end

Instance Method Details

#current_color_dataObject



56
57
58
59
60
61
62
# File 'lib/ledenet/api.rb', line 56

def current_color_data
  status_response = status
  color_data = %w{red green blue warm_white}.map do |x|
    [x.to_sym, status_response.send(x)]
  end
  Hash[color_data]
end

#current_rgbObject



48
49
50
# File 'lib/ledenet/api.rb', line 48

def current_rgb
  current_color_data.values_at(:red, :green, :blue)
end

#current_warm_whiteObject



52
53
54
# File 'lib/ledenet/api.rb', line 52

def current_warm_white
  current_color_data[:warm_white]
end

#offObject



23
24
25
# File 'lib/ledenet/api.rb', line 23

def off
  send_packet(LEDENET::Packets::SetPowerRequest.off_request)
end

#onObject



19
20
21
# File 'lib/ledenet/api.rb', line 19

def on
  send_packet(LEDENET::Packets::SetPowerRequest.on_request)
end

#on?Boolean

Returns:

  • (Boolean)


31
32
33
# File 'lib/ledenet/api.rb', line 31

def on?
  status.on?
end

#reconnect!Object



72
73
74
75
# File 'lib/ledenet/api.rb', line 72

def reconnect!
  create_socket
  true
end

#send_packet(packet) ⇒ Object



77
78
79
80
81
82
83
84
85
# File 'lib/ledenet/api.rb', line 77

def send_packet(packet)
  socket_action do
    @socket.write(packet.to_binary_s)

    if packet.response_reader != LEDENET::Packets::EmptyResponse
      packet.response_reader.read(@socket)
    end
  end
end

#set_power(v) ⇒ Object



27
28
29
# File 'lib/ledenet/api.rb', line 27

def set_power(v)
  v ? on : off
end

#update_color_data(o) ⇒ Object



43
44
45
46
# File 'lib/ledenet/api.rb', line 43

def update_color_data(o)
  updated_data = current_color_data.merge(o)
  send_packet(LEDENET::Packets::UpdateColorRequest.new(updated_data))
end

#update_function(fn, speed) ⇒ Object



64
65
66
67
68
69
70
# File 'lib/ledenet/api.rb', line 64

def update_function(fn, speed)
  if fn.is_a?(String) or fn.is_a?(Symbol)
    fn = LEDENET::Functions.const_get(fn.upcase)
  end

  send_packet(LEDENET::Packets::SetFunctionRequest.new(function_id: fn, speed: speed))
end

#update_rgb(r, g, b) ⇒ Object



35
36
37
# File 'lib/ledenet/api.rb', line 35

def update_rgb(r, g, b)
  update_color_data(red: r, green: g, blue: b)
end

#update_warm_white(warm_white) ⇒ Object



39
40
41
# File 'lib/ledenet/api.rb', line 39

def update_warm_white(warm_white)
  update_color_data(warm_white: warm_white)
end