class NanoleafRuby::Api

Public Class Methods

new(token: nil, ip_address: nil, raise_errors: false) click to toggle source
# File lib/nanoleaf_ruby.rb, line 9
def initialize(token: nil, ip_address: nil, raise_errors: false)
  @access_token = ENV['NANOLEAF_API_TOKEN'] || token
  @nanoleaf_ip = ENV['NANOLEAF_IP_ADDRESS'] || ip_address
  @api_url = get_api_url
  @requester = BaseRequester.new(raise_errors: raise_errors)
end

Public Instance Methods

brightness_down(increment = 1) click to toggle source
# File lib/nanoleaf_ruby.rb, line 60
def brightness_down(increment = 1)
  brightness_increment(-increment)
end
brightness_increment(increment = 1) click to toggle source

brightness commands

# File lib/nanoleaf_ruby.rb, line 50
def brightness_increment(increment = 1)
  params = { brightness: {} }
  params[:brightness][:increment] = increment
  @requester.put(url: "#{@api_url}/state", params: params)
end
brightness_up(increment = 1) click to toggle source
# File lib/nanoleaf_ruby.rb, line 56
def brightness_up(increment = 1)
  brightness_increment(increment)
end
choose_effect(name) click to toggle source
# File lib/nanoleaf_ruby.rb, line 181
def choose_effect(name)
  params = { select: name }
  @requester.put(url: "#{@api_url}/effects", params: params)
end
color_mode() click to toggle source

color mode

# File lib/nanoleaf_ruby.rb, line 40
def color_mode
  @requester.get(url: "#{@api_url}/state/colorMode")
end
ct_down(increment = 1) click to toggle source
# File lib/nanoleaf_ruby.rb, line 111
def ct_down(increment = 1)
  ct_increment(-increment)
end
ct_increment(increment = 1) click to toggle source

color temperature commands

# File lib/nanoleaf_ruby.rb, line 101
def ct_increment(increment = 1)
  params = { ct: {} }
  params[:ct][:increment] = increment
  @requester.put(url: "#{@api_url}/state", params: params)
end
ct_up(increment = 1) click to toggle source
# File lib/nanoleaf_ruby.rb, line 107
def ct_up(increment = 1)
  ct_increment(increment)
end
delete_auth_token() click to toggle source

user commands

# File lib/nanoleaf_ruby.rb, line 191
def delete_auth_token
  @requester.delete(url: @api_url)
end
effects_list() click to toggle source

effects

# File lib/nanoleaf_ruby.rb, line 176
def effects_list
  response = @requester.get(url: "#{@api_url}/effects/effectsList")
  response[:data]
end
generate_auth_token() click to toggle source
# File lib/nanoleaf_ruby.rb, line 195
def generate_auth_token
  response = @requester.post(url: "http://#{@nanoleaf_ip}/api/v1/new")
  if response[:success]
    puts 'Auth token successfully generated!'
    puts "Token: #{response.dig(:data, 'auth_token')}"
  elsif response[:code] == 403
    puts 'Press and hold the power button for 5-7 seconds first!'
    puts '(Light will begin flashing)'
  else
    puts "Sorry, something went wrong and I don't know what!"
  end
end
get_brightness() click to toggle source
# File lib/nanoleaf_ruby.rb, line 71
def get_brightness
  @requester.get(url: "#{@api_url}/state/brightness")
end
get_ct() click to toggle source
# File lib/nanoleaf_ruby.rb, line 121
def get_ct
  @requester.get(url: "#{@api_url}/state/ct")
end
get_hue() click to toggle source
# File lib/nanoleaf_ruby.rb, line 96
def get_hue
  @requester.get(url: "#{@api_url}/state/hue")
end
get_rgb() click to toggle source

color_commands

# File lib/nanoleaf_ruby.rb, line 151
def get_rgb
  hue = get_hue.dig(:data, 'value')
  saturation = get_sat.dig(:data, 'value')
  brightness = get_brightness.dig(:data, 'value')
  ColorUtils.hsv_to_rgb(hue, saturation, brightness)
end
get_sat() click to toggle source
# File lib/nanoleaf_ruby.rb, line 146
def get_sat
  @requester.get(url: "#{@api_url}/state/sat")
end
hue_down(increment = 1) click to toggle source
# File lib/nanoleaf_ruby.rb, line 86
def hue_down(increment = 1)
  hue_increment(-increment)
end
hue_increment(increment = 1) click to toggle source

hue commands

# File lib/nanoleaf_ruby.rb, line 76
def hue_increment(increment = 1)
  params = { hue: {} }
  params[:hue][:increment] = increment
  @requester.put(url: "#{@api_url}/state", params: params)
end
hue_up(increment = 1) click to toggle source
# File lib/nanoleaf_ruby.rb, line 82
def hue_up(increment = 1)
  hue_increment(increment)
end
identify() click to toggle source

flash panels

# File lib/nanoleaf_ruby.rb, line 45
def identify
  @requester.put(url: "#{@api_url}/identify")
end
info() click to toggle source

info dump from panels

# File lib/nanoleaf_ruby.rb, line 17
def info
  @requester.get(url: @api_url)
end
off() click to toggle source
# File lib/nanoleaf_ruby.rb, line 27
def off
  params = { on: false }
  @requester.put(url: "#{@api_url}/state", params: params)
end
on() click to toggle source

power on/off

# File lib/nanoleaf_ruby.rb, line 22
def on
  params = { on: true }
  @requester.put(url: "#{@api_url}/state", params: params)
end
random_effect() click to toggle source
# File lib/nanoleaf_ruby.rb, line 186
def random_effect
  choose_effect(effects_list.sample)
end
sat_down(increment = 1) click to toggle source
# File lib/nanoleaf_ruby.rb, line 136
def sat_down(increment = 1)
  sat_increment(-increment)
end
sat_increment(increment = 1) click to toggle source

saturation commands

# File lib/nanoleaf_ruby.rb, line 126
def sat_increment(increment = 1)
  params = { sat: {} }
  params[:sat][:increment] = increment
  @requester.put(url: "#{@api_url}/state", params: params)
end
sat_up(increment = 1) click to toggle source
# File lib/nanoleaf_ruby.rb, line 132
def sat_up(increment = 1)
  sat_increment(increment)
end
set_brightness(value, duration = nil) click to toggle source
# File lib/nanoleaf_ruby.rb, line 64
def set_brightness(value, duration = nil)
  params = { brightness: {} }
  params[:brightness][:value] = value
  params[:brightness][:duration] = duration if duration
  @requester.put(url: "#{@api_url}/state", params: params)
end
set_color(string) click to toggle source
# File lib/nanoleaf_ruby.rb, line 158
def set_color(string)
  hsb = ColorUtils.get_color(string)
  write_color(hsb)
end
set_ct(value) click to toggle source
# File lib/nanoleaf_ruby.rb, line 115
def set_ct(value)
  params = { ct: {} }
  params[:ct][:value] = value
  @requester.put(url: "#{@api_url}/state", params: params)
end
set_hue(value) click to toggle source
# File lib/nanoleaf_ruby.rb, line 90
def set_hue(value)
  params = { hue: {} }
  params[:hue][:value] = value
  @requester.put(url: "#{@api_url}/state", params: params)
end
set_rgb(red, green, blue) click to toggle source
# File lib/nanoleaf_ruby.rb, line 163
def set_rgb(red, green, blue)
  hsb = ColorUtils.get_color("rgb(#{red},#{green},#{blue})")
  write_color(hsb)
end
set_sat(value) click to toggle source
# File lib/nanoleaf_ruby.rb, line 140
def set_sat(value)
  params = { sat: {} }
  params[:sat][:value] = value
  @requester.put(url: "#{@api_url}/state", params: params)
end
toggle() click to toggle source
# File lib/nanoleaf_ruby.rb, line 32
def toggle
  response = @requester.get(url: "#{@api_url}/state/on/value")
  on = response.dig(:raw, :body) == 'true'
  params = { on: !on }
  @requester.put(url: "#{@api_url}/state", params: params)
end
write_color(hsb) click to toggle source
# File lib/nanoleaf_ruby.rb, line 168
def write_color(hsb)
  params = { hue: { value: hsb[0] } }
  params[:sat] = { value: hsb[1] }
  params[:brightness] = { value: hsb[2] }
  @requester.put(url: "#{@api_url}/state", params: params)
end

Private Instance Methods

get_api_url() click to toggle source
# File lib/nanoleaf_ruby.rb, line 210
def get_api_url
  raise Errors::Configuration, 'Nanoleaf IP address missing' unless @nanoleaf_ip
  raise Errors::Configuration, 'Nanoleaf access token missing' unless @access_token
  "http://#{@nanoleaf_ip}/api/v1/#{@access_token}"
end