Class: NanoleafRuby::Api

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

Instance Method Summary collapse

Constructor Details

#initialize(token: nil, ip_address: nil, raise_errors: false) ⇒ Api

Returns a new instance of Api.



9
10
11
12
13
14
# 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

Instance Method Details

#brightness_down(increment = 1) ⇒ Object



60
61
62
# File 'lib/nanoleaf_ruby.rb', line 60

def brightness_down(increment = 1)
  brightness_increment(-increment)
end

#brightness_increment(increment = 1) ⇒ Object

brightness commands



50
51
52
53
54
# 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) ⇒ Object



56
57
58
# File 'lib/nanoleaf_ruby.rb', line 56

def brightness_up(increment = 1)
  brightness_increment(increment)
end

#choose_effect(name) ⇒ Object



181
182
183
184
# File 'lib/nanoleaf_ruby.rb', line 181

def choose_effect(name)
  params = { select: name }
  @requester.put(url: "#{@api_url}/effects", params: params)
end

#color_modeObject

color mode



40
41
42
# File 'lib/nanoleaf_ruby.rb', line 40

def color_mode
  @requester.get(url: "#{@api_url}/state/colorMode")
end

#ct_down(increment = 1) ⇒ Object



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

def ct_down(increment = 1)
  ct_increment(-increment)
end

#ct_increment(increment = 1) ⇒ Object

color temperature commands



101
102
103
104
105
# 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) ⇒ Object



107
108
109
# File 'lib/nanoleaf_ruby.rb', line 107

def ct_up(increment = 1)
  ct_increment(increment)
end

#delete_auth_tokenObject

user commands



191
192
193
# File 'lib/nanoleaf_ruby.rb', line 191

def delete_auth_token
  @requester.delete(url: @api_url)
end

#effects_listObject

effects



176
177
178
179
# File 'lib/nanoleaf_ruby.rb', line 176

def effects_list
  response = @requester.get(url: "#{@api_url}/effects/effectsList")
  response[:data]
end

#generate_auth_tokenObject



195
196
197
198
199
200
201
202
203
204
205
206
# 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_brightnessObject



71
72
73
# File 'lib/nanoleaf_ruby.rb', line 71

def get_brightness
  @requester.get(url: "#{@api_url}/state/brightness")
end

#get_ctObject



121
122
123
# File 'lib/nanoleaf_ruby.rb', line 121

def get_ct
  @requester.get(url: "#{@api_url}/state/ct")
end

#get_hueObject



96
97
98
# File 'lib/nanoleaf_ruby.rb', line 96

def get_hue
  @requester.get(url: "#{@api_url}/state/hue")
end

#get_rgbObject

color_commands



151
152
153
154
155
156
# 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_satObject



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

def get_sat
  @requester.get(url: "#{@api_url}/state/sat")
end

#hue_down(increment = 1) ⇒ Object



86
87
88
# File 'lib/nanoleaf_ruby.rb', line 86

def hue_down(increment = 1)
  hue_increment(-increment)
end

#hue_increment(increment = 1) ⇒ Object

hue commands



76
77
78
79
80
# 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) ⇒ Object



82
83
84
# File 'lib/nanoleaf_ruby.rb', line 82

def hue_up(increment = 1)
  hue_increment(increment)
end

#identifyObject

flash panels



45
46
47
# File 'lib/nanoleaf_ruby.rb', line 45

def identify
  @requester.put(url: "#{@api_url}/identify")
end

#infoObject

info dump from panels



17
18
19
# File 'lib/nanoleaf_ruby.rb', line 17

def info
  @requester.get(url: @api_url)
end

#offObject



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

def off
  params = { on: false }
  @requester.put(url: "#{@api_url}/state", params: params)
end

#onObject

power on/off



22
23
24
25
# File 'lib/nanoleaf_ruby.rb', line 22

def on
  params = { on: true }
  @requester.put(url: "#{@api_url}/state", params: params)
end

#random_effectObject



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

def random_effect
  choose_effect(effects_list.sample)
end

#sat_down(increment = 1) ⇒ Object



136
137
138
# File 'lib/nanoleaf_ruby.rb', line 136

def sat_down(increment = 1)
  sat_increment(-increment)
end

#sat_increment(increment = 1) ⇒ Object

saturation commands



126
127
128
129
130
# 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) ⇒ Object



132
133
134
# File 'lib/nanoleaf_ruby.rb', line 132

def sat_up(increment = 1)
  sat_increment(increment)
end

#set_brightness(value, duration = nil) ⇒ Object



64
65
66
67
68
69
# 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) ⇒ Object



158
159
160
161
# File 'lib/nanoleaf_ruby.rb', line 158

def set_color(string)
  hsb = ColorUtils.get_color(string)
  write_color(hsb)
end

#set_ct(value) ⇒ Object



115
116
117
118
119
# 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) ⇒ Object



90
91
92
93
94
# 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) ⇒ Object



163
164
165
166
# 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) ⇒ Object



140
141
142
143
144
# 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

#toggleObject



32
33
34
35
36
37
# 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) ⇒ Object



168
169
170
171
172
173
# 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