@mobsean/node-red-vallox-webserver-api
Version:
Connect your vallox HVAC unit with node-red over vallox webserver.
65 lines (59 loc) • 2.17 kB
JavaScript
module.exports = function (RED) {
function getTempNode (config) {
RED.nodes.createNode(this, config)
const node = this
const Vallox = require('@danielbayerlein/vallox-api')
const { ip } = RED.nodes.getNode(config.ip)
const client = new Vallox({ ip, port: 80 })
node.on('input', async (msg, send, done) => {
try {
const metrics = await client.fetchMetrics([
'A_CYC_TEMP_SUPPLY_AIR', // Zuluft
'A_CYC_TEMP_SUPPLY_CELL_AIR', // Zuluft_vom_Wärmetauscher
'A_CYC_TEMP_EXHAUST_AIR', // Fortluft
'A_CYC_TEMP_OUTDOOR_AIR', // Außenluft
'A_CYC_TEMP_EXTRACT_AIR' // Abluft
])
const parsedMetrics = {}
Object.keys(metrics).forEach((key) => {
parsedMetrics[key] = parseFloat(metrics[key])
})
const msg1 = {
payload: parsedMetrics.A_CYC_TEMP_SUPPLY_AIR,
temperatureUnit: '° C',
name: 'A_CYC_TEMP_SUPPLY_AIR / Zuluft'
}
const msg2 = {
payload: parsedMetrics.A_CYC_TEMP_SUPPLY_CELL_AIR,
temperatureUnit: '° C',
name: 'A_CYC_TEMP_SUPPLY_CELL_AIR / Zuluft vom Wärmetauscher'
}
const msg3 = {
payload: parsedMetrics.A_CYC_TEMP_EXHAUST_AIR,
temperatureUnit: '° C',
name: 'A_CYC_TEMP_EXHAUST_AIR / Fortluft'
}
const msg4 = {
payload: parsedMetrics.A_CYC_TEMP_OUTDOOR_AIR,
temperatureUnit: '° C',
name: 'A_CYC_TEMP_OUTDOOR_AIR / Außenluft'
}
const msg5 = {
payload: parsedMetrics.A_CYC_TEMP_EXTRACT_AIR,
temperatureUnit: '° C',
name: 'A_CYC_TEMP_EXTRACT_AIR / Abluft'
}
node.send([msg1, msg2, msg3, msg4, msg5])
node.status({ fill: 'green', shape: 'dot', text: 'connected' })
if (done) {
done()
}
} catch (err) {
node.error(err, msg)
node.status({ fill: 'red', shape: 'ring', text: 'error: open debug' })
done(err)
}
})
}
RED.nodes.registerType('getTemp', getTempNode)
}