node-red-contrib-victron-ble
Version:
node-red node to parse Instant Readout advertisement data from Victron BLE devices
39 lines (38 loc) • 1.36 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const scanner_1 = require("../scanner");
let scannerInstance = null;
module.exports = function (RED) {
function getScanner() {
if (!scannerInstance) {
scannerInstance = new scanner_1.Scanner();
scannerInstance.start();
}
return scannerInstance;
}
RED.httpAdmin.get('/victron-ble/discover', function (req, res) {
const scanner = getScanner();
res.json(scanner.getDiscoveredDevices());
});
function VictronBleNode(config) {
RED.nodes.createNode(this, config);
const node = this;
const address = (config.address || '').toLowerCase();
const key = this.credentials.key;
const scanner = getScanner();
if (address && key) {
scanner.setKey(address, key);
}
function onPacket(data) {
if (data.address.toLowerCase() === address.toLocaleLowerCase()) {
node.send(data);
}
}
scanner.on('parsed', onPacket);
node.on('close', function () {
// unregister listener when node stops
scanner.removeListener('parsed', onPacket);
});
}
RED.nodes.registerType('victron-ble', VictronBleNode, { credentials: { key: { type: "password" } } });
};