1 | _ = require 'lodash'
|
2 | HueUtil = require 'hue-util'
|
3 | {EventEmitter} = require 'events'
|
4 | tinycolor = require 'tinycolor2'
|
5 | debug = require('debug')('meshblu-connector-hue:hue-manager')
|
6 |
|
7 | class 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) =>
|
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 |
|
61 | module.exports = HueManager
|