UNPKG

homebridge-rinnai-touch-platform

Version:

Homebridge Plugin to control heating/cooling via a Rinnai Touch WiFi Module

45 lines 1.83 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.UdpService = void 0; const dgram = require("dgram"); class UdpService { constructor(options = {}) { var _a, _b, _c; this.log = (_a = options.log) !== null && _a !== void 0 ? _a : console; this.port = (_b = options.port) !== null && _b !== void 0 ? _b : 50000; this.timeout = (_c = options.timeout) !== null && _c !== void 0 ? _c : 5000; } getAddress() { this.log.debug(this.constructor.name, 'getAddress'); return new Promise((resolve, reject) => { const socket = dgram.createSocket('udp4'); const timer = setTimeout(() => { socket.removeAllListeners(); socket.close(); reject(new Error('Timeout occured. No UDP message received from Rinnai Touch Module')); }, this.timeout); socket.on('message', (message, remote) => { if (message.toString().substring(0, 18) === 'Rinnai_NBW2_Module') { clearTimeout(timer); socket.removeAllListeners(); socket.close(); const port = message.readUInt16BE(32); this.log.info(`Found: Rinnai Touch module [${remote.address}:${port}]`); resolve({ address: remote.address, port: port, }); } }); socket.on('error', (error) => { clearTimeout(timer); socket.removeAllListeners(); socket.close(); reject(error); }); socket.bind(this.port); }); } } exports.UdpService = UdpService; //# sourceMappingURL=UdpService.js.map