45 lines
1.3 KiB
JavaScript
45 lines
1.3 KiB
JavaScript
module.exports = function (RED) {
|
|
function UILedNode (config) {
|
|
RED.nodes.createNode(this, config)
|
|
|
|
const node = this
|
|
|
|
// which group are we rendering this widget
|
|
const group = RED.nodes.getNode(config.group)
|
|
|
|
const base = group.getBase()
|
|
|
|
// server-side event handlers
|
|
const evts = {
|
|
onInput: function (msg, send, done) {
|
|
// store the latest value in our Node-RED datastore
|
|
base.stores.data.save(base, node, msg)
|
|
|
|
// send it to any connected nodes in Node-RED
|
|
send(msg)
|
|
}
|
|
}
|
|
|
|
// evaluated (server-side) the colour value options, so we can compute which colour to display client-side
|
|
const evalColors = []
|
|
config.states.forEach((state) => {
|
|
const value = RED.util.evaluateNodeProperty(state.value, state.valueType, node)
|
|
evalColors.push({
|
|
value,
|
|
color: state.color
|
|
})
|
|
})
|
|
|
|
config.evaluated = evalColors
|
|
|
|
// inform the dashboard UI that we are adding this node
|
|
if (group) {
|
|
group.register(node, config, evts)
|
|
} else {
|
|
node.error('No group configured')
|
|
}
|
|
}
|
|
|
|
RED.nodes.registerType('ui-led', UILedNode)
|
|
}
|