UNPKG

1.94 kBtext/coffeescriptView Raw
1_ = require 'lodash'
2HueUtil = require 'hue-util'
3{EventEmitter} = require 'events'
4tinycolor = require 'tinycolor2'
5debug = require('debug')('meshblu-connector-hue:hue-manager')
6
7class HueManager extends EventEmitter
8 connect: ({@ipAddress, @apiUsername, @sensorName, @sensorPollInterval, @apikey}, callback) =>
9 @_emit = _.throttle @emit, 500, {leading: true, trailing: false}
10 @apikey ?= {}
11 {username} = @apikey
12 @apiUsername ?= 'newdeveloper'
13 @apikey.devicetype = @apiUsername
14 @hue = new HueUtil @apiUsername, @ipAddress, username, @_onUsernameChange
15 @verify (error) =>
16 return callback error if error?
17 @_setInitialState (error) =>
18 return callback error if error?
19 @_createPollInterval()
20 callback()
21
22 verify: (callback) => #for testing
23 @hue.verify callback
24
25 close: (callback) =>
26 clearInterval @pollInterval
27 callback()
28
29 _checkButtons: (callback) =>
30 @hue.checkButtons @sensorName, (error, result) =>
31 console.error error if error?
32 return callback error if error?
33 callback null, result
34
35 _createPollInterval: =>
36 clearInterval @pollInterval
37 @pollInterval = setInterval @_pollSensor, @sensorPollInterval if @sensorPollInterval?
38
39 _onUsernameChange: (username) =>
40 return if username == @apikey.username
41 @apikey.username = username
42 @_emit 'change:username', {@apikey}
43
44 _pollSensor: (callback) =>
45 callback ?= (error) =>
46 @emit 'error', error if error?
47
48 @_checkButtons (error, result) =>
49 return callback error if error?
50 {state, button} = result ? {}
51 return callback() if _.isEqual result, @previousResult
52 @previousResult = result
53 @_emit 'click', {button, state}
54
55 _setInitialState: (callback) =>
56 @_checkButtons (error, result) =>
57 return callback error if error?
58 @previousResult = result
59 callback()
60
61module.exports = HueManager