homebridge-rinnai-touch-platform
Version:
Homebridge Plugin to control heating/cooling via a Rinnai Touch WiFi Module
45 lines • 1.83 kB
JavaScript
;
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