diff --git a/index.js b/index.js index 1e54c8d..8aae029 100644 --- a/index.js +++ b/index.js @@ -11,7 +11,7 @@ class FindUnits extends EventEmitter { this.finder.on('message', function (message, remote) { _this.foundServer(message, remote); }).on('close', function() { - console.log('finder closed'); + //console.log('finder closed'); }); } @@ -25,19 +25,21 @@ class FindUnits extends EventEmitter { } foundServer(message, remote) { - console.log('Found something'); - var server = { - address: remote.address, - type: message.readInt32LE(0), - port: message.readInt16LE(8), - gatewayType: message.readUInt8(10), - gatewaySubtype: message.readUInt8(11), - gatewayName: message.toString('utf8', 12, 28) - }; + //console.log('Found something'); + if (message.length >= 40) { + var server = { + address: remote.address, + type: message.readInt32LE(0), + port: message.readInt16LE(8), + gatewayType: message.readUInt8(10), + gatewaySubtype: message.readUInt8(11), + gatewayName: message.toString('utf8', 12, 28) + }; - console.log(' type: ' + server.type + ', host: ' + server.address + ':' + server.port + ', identified as ' + server.gatewayName); - if (server.type === 2) { - this.emit('serverFound', server); + //console.log(' type: ' + server.type + ', host: ' + server.address + ':' + server.port + ', identified as ' + server.gatewayName); + if (server.type === 2) { + this.emit('serverFound', server); + } } } @@ -45,7 +47,7 @@ class FindUnits extends EventEmitter { var message = new Uint8Array(8); message[0] = 1; this.finder.send(message, 0, message.length, 1444, "255.255.255.255"); - console.log("Looking for ScreenLogic hosts..."); + //console.log("Looking for ScreenLogic hosts..."); } close() { @@ -63,7 +65,7 @@ class UnitConnection extends EventEmitter { this.client.on('data', function(msg) { _this.onClientMessage(msg); }).on('close', function(had_error) { - console.log('unit connection closed'); + //console.log('unit connection closed'); }); } @@ -72,7 +74,7 @@ class UnitConnection extends EventEmitter { } connect() { - console.log("connecting..."); + //console.log("connecting..."); var _this = this; this.client.connect(this.server.port, this.server.address, function() { _this.onConnected(); @@ -80,78 +82,91 @@ class UnitConnection extends EventEmitter { } onConnected() { - console.log('connected'); + //console.log('connected'); - console.log('sending init message...'); + //console.log('sending init message...'); this.client.write('CONNECTSERVERHOST\r\n\r\n'); - console.log('sending challenge message...'); + //console.log('sending challenge message...'); this.client.write(new messages.SLChallengeMessage().toBuffer()); } login() { - console.log('sending login message...'); + //console.log('sending login message...'); this.client.write(new messages.SLLoginMessage().toBuffer()); } getPoolStatus() { - console.log('sending pool status query...'); + //console.log('sending pool status query...'); this.client.write(new messages.SLPoolStatusMessage().toBuffer()); } getControllerConfig() { - console.log('sending controller config query...'); + //console.log('sending controller config query...'); this.client.write(new messages.SLControllerConfigMessage().toBuffer()); } getChemicalData() { - console.log('sending chemical data query...'); + //console.log('sending chemical data query...'); this.client.write(new messages.SLChemDataMessage().toBuffer()); } getSaltCellConfig() { - console.log('sending salt cell config query...'); + //console.log('sending salt cell config query...'); this.client.write(new messages.SLSaltCellConfigMessage().toBuffer()); } getVersion() { - console.log('sending version query...'); + //console.log('sending version query...'); this.client.write(new messages.SLVersionMessage().toBuffer()); } onClientMessage(msg) { - console.log('received message of length ' + msg.length); + //console.log('received message of length ' + msg.length); + if (msg.length < 4) { + return; + } + var msgType = msg.readInt16LE(2); - if (msgType === 15) { - console.log(" it's a challenge response"); - this.login(); - } else if (msgType === 28) { - console.log(" it's a login response"); - this.emit('loggedIn'); - } else if (msgType === 12527) { - console.log(" it's pool status"); - this.emit('poolStatus', new messages.SLPoolStatusMessage(msg)); - } else if (msgType === 12533) { - console.log(" it's controller configuration"); - this.emit('controllerConfig', new messages.SLControllerConfigMessage(msg)); - } else if (msgType === 12593) { - console.log(" it's chem data"); - this.emit('chemicalData', new messages.SLChemDataMessage(msg)); - } else if (msgType === 12573) { - console.log(" it's salt cell config"); - this.emit('saltCellConfig', new messages.SLSaltCellConfigMessage(msg)); - } else if (msgType === 8121) { - console.log(" it's version"); - this.emit('version', new messages.SLVersionMessage(msg)); - } else { - console.log(" it's unknown. type: " + msgType); + switch (msgType) { + case messages.SLChallengeMessage.getResponseId(): + //console.log(" it's a challenge response"); + this.login(); + break; + case messages.SLLoginMessage.getResponseId(): + //console.log(" it's a login response"); + this.emit('loggedIn'); + break; + case messages.SLPoolStatusMessage.getResponseId(): + //console.log(" it's pool status"); + this.emit('poolStatus', new messages.SLPoolStatusMessage(msg)); + break; + case messages.SLControllerConfigMessage.getResponseId(): + //console.log(" it's controller configuration"); + this.emit('controllerConfig', new messages.SLControllerConfigMessage(msg)); + break; + case messages.SLChemDataMessage.getResponseId(): + //console.log(" it's chem data"); + this.emit('chemicalData', new messages.SLChemDataMessage(msg)); + break; + case messages.SLSaltCellConfigMessage.getResponseId(): + //console.log(" it's salt cell config"); + this.emit('saltCellConfig', new messages.SLSaltCellConfigMessage(msg)); + break; + case messages.SLVersionMessage.getResponseId(): + //console.log(" it's version"); + this.emit('version', new messages.SLVersionMessage(msg)); + break; + default: + //console.log(" it's unknown. type: " + msgType); + break; } } } /* debug print full buffer contents: for (const value of buf.values()) { - console.log(value.toString(16)); + //console.log(value.toString(16)); } */ diff --git a/messages/SLChallengeMessage.js b/messages/SLChallengeMessage.js index 739b223..407e9fb 100755 --- a/messages/SLChallengeMessage.js +++ b/messages/SLChallengeMessage.js @@ -1,7 +1,13 @@ const SLMessage = require('./SLMessage.js').SLMessage; +const MSG_ID = 14; + exports.SLChallengeMessage = class SLChallengeMessage extends SLMessage { constructor() { - super(0, 14); + super(0, MSG_ID); + } + + static getResponseId() { + return MSG_ID + 1; } } diff --git a/messages/SLChemDataMessage.js b/messages/SLChemDataMessage.js index 9ed57d4..17b583d 100755 --- a/messages/SLChemDataMessage.js +++ b/messages/SLChemDataMessage.js @@ -1,8 +1,10 @@ const SLMessage = require('./SLMessage.js').SLMessage; +const MSG_ID = 12592; + exports.SLChemDataMessage = class SLChemDataMessage extends SLMessage { constructor(buf) { - super(0, 12592); + super(0, MSG_ID); if (!buf) { this.writeInt32LE(0); // controller index } else { @@ -45,4 +47,8 @@ exports.SLChemDataMessage = class SLChemDataMessage extends SLMessage { this.error = (salt & 128) !== 0; } } + + static getResponseId() { + return MSG_ID + 1; + } } diff --git a/messages/SLControllerConfigMessage.js b/messages/SLControllerConfigMessage.js index 02e1fd2..7a3e544 100755 --- a/messages/SLControllerConfigMessage.js +++ b/messages/SLControllerConfigMessage.js @@ -1,8 +1,10 @@ const SLMessage = require('./SLMessage.js').SLMessage; +const MSG_ID = 12532; + exports.SLControllerConfigMessage = class SLControllerConfigMessage extends SLMessage { constructor(buf) { - super(0, 12532); + super(0, MSG_ID); if (!buf) { this.writeInt32LE(0); this.writeInt32LE(0); @@ -74,4 +76,8 @@ exports.SLControllerConfigMessage = class SLControllerConfigMessage extends SLMe this.interfaceTabFlags = this.readInt32LE(); this.showAlarms = this.readInt32LE(); } + + static getResponseId() { + return MSG_ID + 1; + } } diff --git a/messages/SLLoginMessage.js b/messages/SLLoginMessage.js index 0a5c798..0525b6a 100755 --- a/messages/SLLoginMessage.js +++ b/messages/SLLoginMessage.js @@ -1,12 +1,18 @@ const SLMessage = require('./SLMessage.js').SLMessage; +const MSG_ID = 27; + exports.SLLoginMessage = class SLLoginMessage extends SLMessage { constructor() { - super(0, 27); + super(0, MSG_ID); this.writeInt32LE(348); // schema this.writeInt32LE(0); // connection type this.writeSLString('node-screenlogic'); // version this.writeSLBuffer(Buffer.alloc(16)); // encoded password. empty/unused for local connections this.writeInt32LE(2); // procID } + + static getResponseId() { + return MSG_ID + 1; + } } diff --git a/messages/SLPoolStatusMessage.js b/messages/SLPoolStatusMessage.js index 6a2b860..8fa7103 100755 --- a/messages/SLPoolStatusMessage.js +++ b/messages/SLPoolStatusMessage.js @@ -1,11 +1,13 @@ const SLMessage = require('./SLMessage.js').SLMessage; +const MSG_ID = 12526; + const SPA_CIRCUIT_ID = 500; const POOL_CIRCUIT_ID = 505; exports.SLPoolStatusMessage = class SLPoolStatusMessage extends SLMessage { constructor(buf) { - super(0, 12526); + super(0, MSG_ID); if (!buf) { this.writeInt32LE(0); } else { @@ -98,4 +100,8 @@ exports.SLPoolStatusMessage = class SLPoolStatusMessage extends SLMessage { } } } + + static getResponseId() { + return MSG_ID + 1; + } } diff --git a/messages/SLSaltCellConfigMessage.js b/messages/SLSaltCellConfigMessage.js index b542f31..4804f34 100755 --- a/messages/SLSaltCellConfigMessage.js +++ b/messages/SLSaltCellConfigMessage.js @@ -1,8 +1,10 @@ const SLMessage = require('./SLMessage.js').SLMessage; +const MSG_ID = 12572; + exports.SLSaltCellConfigMessage = class SLSaltCellConfigMessage extends SLMessage { constructor(buf) { - super(0, 12572); + super(0, MSG_ID); if (!buf) { this.writeInt32LE(0); // controller index } else { @@ -24,4 +26,8 @@ exports.SLSaltCellConfigMessage = class SLSaltCellConfigMessage extends SLMessag this.flags = this.readInt32LE(); this.superChlorTimer = this.readInt32LE(); } + + static getResponseId() { + return MSG_ID + 1; + } } diff --git a/messages/SLVersionMessage.js b/messages/SLVersionMessage.js index 35c58de..bb93b66 100755 --- a/messages/SLVersionMessage.js +++ b/messages/SLVersionMessage.js @@ -1,8 +1,10 @@ const SLMessage = require('./SLMessage.js').SLMessage; +const MSG_ID = 8120; + exports.SLVersionMessage = class SLVersionMessage extends SLMessage { constructor(buf) { - super(0, 8120); + super(0, MSG_ID); if (buf) { this._wroteSize = true; this.writeBuffer(buf, 0); @@ -16,4 +18,8 @@ exports.SLVersionMessage = class SLVersionMessage extends SLMessage { this.version = this.readSLString(); } + + static getResponseId() { + return MSG_ID + 1; + } }