pimatic-johnny-five
Version:
Pimatic Plugin for Johnny Five, a Robotics and IoT programming framework.
86 lines (74 loc) • 2.56 kB
text/coffeescript
module.exports = (env) ->
Promise = env.require 'bluebird'
_ = env.require 'lodash'
five = require('johnny-five')
commons = require('pimatic-plugin-commons')(env)
# Device class representing an Johnny Five digital PWM output
class JohnnyFivePwmOutput extends env.devices.DimmerActuator
# Create a new JohnnyFivePwmOutput device
# [Object] config device configuration
# [JohnnyFivePlugin] plugin plugin instance
# [Object] lastState state information stored in database
constructor: (, , lastState) ->
= .id
= .name
= .config.debug || false
= 0
= off
= commons.base @, .class
= .boardManager.getBoard(.boardId)
super()
.boardReady()
.then( (board)=>
= new five.Led {
pin: .pin
board: board
}
.catch (error) =>
.rejectWithError null, error
)
.catch ((error) =>
.rejectWithError null, error
)
destroy: () ->
super()
_queryLevel: () ->
return new Promise( (resolve, reject) =>
.boardReady()
.then =>
try
resolve .value * 100 / 255
catch e
.rejectWithError reject, e
.catch (error) =>
.rejectWithError reject, error
)
changeDimlevelTo: (newLevelPerCent) ->
.debug "dimlevel change requested to (per cent): #{newLevelPerCent}"
return new Promise( (resolve, reject) =>
.boardReady()
.then =>
try
.brightness newLevelPerCent * 255 / 100
catch e
.rejectWithError reject, e
.then (level) =>
level
resolve level
.catch (error) =>
.rejectWithError reject, error
)
getState: () ->
.then (level) =>
return Promise.resolve level > 0
.catch (error) =>
return .rejectWithError Promise.reject, error
getDimlevel: () ->
.then (level) =>
return Promise.resolve level
.catch (error) =>
return .rejectWithError Promise.reject, error