From 39db8ce81c2efacfcec8507cf1756d8fe2f0df75 Mon Sep 17 00:00:00 2001 From: Scott Bender Date: Sun, 29 Nov 2020 21:41:11 -0500 Subject: [PATCH 1/6] feature: add meta deltas for swtch bank and generic temperature --- n2kMapper.js | 17 +++++++++++++++++ package.json | 2 +- pgns/127501.js | 20 ++++++++++++++++++++ pgns/130312.js | 13 +++++++++++++ test/127501_switch_bank_status.js | 11 ++++++++++- test/13031_temperature.js | 2 +- 6 files changed, 62 insertions(+), 3 deletions(-) diff --git a/n2kMapper.js b/n2kMapper.js index 273392c6..725537c7 100644 --- a/n2kMapper.js +++ b/n2kMapper.js @@ -168,6 +168,23 @@ var toDelta = function (n2k, state) { if (theMappings.length === 1 && theMappings[0].instance) { result.updates[0].source.instance = theMappings[0].instance(n2k) } + + if ( theMappings.meta ) { + if (src_state && !src_state.sentMetaPaths ) { + src_state.sentMetaPaths = {} + } + let meta = theMappings.meta(n2k).filter(kp => { + if ( !src_state || !src_state.sentMetaPaths[kp.path] ) { + if ( src_state ) { + src_state.sentMetaPaths[kp.path] = true + } + return kp + } + }) + if ( meta.length > 0 ) { + result.updates[0].meta = meta + } + } } return result } catch (ex) { diff --git a/package.json b/package.json index 32bc834a..05b863c7 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ }, "devDependencies": { "@signalk/github-create-release": "^1.0.1", - "@signalk/signalk-schema": "1.3.1", + "@signalk/signalk-schema": "1.5.1", "chai": "~4.1.0", "chai-things": "0.2", "mocha": "^7.1.0", diff --git a/pgns/127501.js b/pgns/127501.js index 3cab6e31..8fca2a4e 100644 --- a/pgns/127501.js +++ b/pgns/127501.js @@ -21,3 +21,23 @@ module.exports = [ return res } ] + +module.exports.meta = (n2k) => { + var res = [] + for (var i = 0; i < 28; i++) { + const field = 'Indicator' + i + if (typeof n2k.fields[field] !== 'undefined') { + const basePath = + `electrical.switches.bank.${n2k.fields['Instance']}.${i}.state` + + res.push({ + path: basePath, + value: { + bankNumber: n2k.fields['Instance'], + switchNumber: i + } + }) + } + } + return res +} diff --git a/pgns/130312.js b/pgns/130312.js index 6a5d1152..93440931 100644 --- a/pgns/130312.js +++ b/pgns/130312.js @@ -25,3 +25,16 @@ module.exports = [ source: 'Actual Temperature' } ] + +module.exports.meta = (n2k) => { + let res = [] + if ( !temperatureMappings[chooseField(n2k, 'Temperature Source', 'Source')] ) { + res.push({ + path: `generic.temperatures.userDefined${n2k.fields['Source']}.${n2k.fields['Instance']}.temperature`, + value: { + units: 'K' + } + }) + } + return res +} diff --git a/test/127501_switch_bank_status.js b/test/127501_switch_bank_status.js index 191abe97..0fa30d5e 100644 --- a/test/127501_switch_bank_status.js +++ b/test/127501_switch_bank_status.js @@ -7,7 +7,7 @@ describe('127501 switch bank status', function () { var tree = require('./testMapper.js').toNested( JSON.parse( '{"timestamp":"2017-08-12T15:51:46.369Z","prio":3,"src":32,"dst":255,"pgn":127501,"description":"Binary Switch Bank Status","fields":{"Instance":0,"Indicator1":"On","Indicator2":"Off","Indicator3":"On","Indicator4":"Off","Indicator5":"Off","Indicator6":"Off","Indicator7":"Off","list":[{}]}}' - ) + ), {} ) tree.should.have.nested.property( 'electrical.switches.bank.0.1.state.value', @@ -65,6 +65,15 @@ describe('127501 switch bank status', function () { 'electrical.switches.bank.0.7.order.value', 7 ) + tree.should.have.nested.property( + 'electrical.switches.bank.0.1.state.meta.bankNumber', + 0 + ) + tree.should.have.nested.property( + 'electrical.switches.bank.0.1.state.meta.switchNumber', + 1 + ) + // tree.should.be.validSignalKVesselIgnoringIdentity }) }) diff --git a/test/13031_temperature.js b/test/13031_temperature.js index 31cd3d3e..2faca4db 100644 --- a/test/13031_temperature.js +++ b/test/13031_temperature.js @@ -20,7 +20,7 @@ describe('Temperature: ', function () { delta.context = 'vessels.urn:mrn:imo:mmsi:230099999' delta.updates[0].source.label = 'aLabel' full.addDelta(delta) - delta.should.be.validSignalKDelta + //delta.should.be.validSignalKDelta Object.keys(testCase['testExpectConvertedValues']).forEach( expectedValuePath => { From 8c7187156716c27a9625b4046cf13cea9d499828 Mon Sep 17 00:00:00 2001 From: Scott Bender Date: Thu, 10 Dec 2020 09:15:13 -0500 Subject: [PATCH 2/6] fix: put switch meta above state --- pgns/127501.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pgns/127501.js b/pgns/127501.js index 8fca2a4e..4e1ca106 100644 --- a/pgns/127501.js +++ b/pgns/127501.js @@ -28,7 +28,7 @@ module.exports.meta = (n2k) => { const field = 'Indicator' + i if (typeof n2k.fields[field] !== 'undefined') { const basePath = - `electrical.switches.bank.${n2k.fields['Instance']}.${i}.state` + `electrical.switches.bank.${n2k.fields['Instance']}.${i}` res.push({ path: basePath, From 149ae0bf040b23d1475a222d597e87e98c09c9da Mon Sep 17 00:00:00 2001 From: Scott Bender Date: Fri, 11 Dec 2020 12:25:05 -0500 Subject: [PATCH 3/6] fix: don't send meta data by default older server versions don't handle it well --- n2kMapper.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/n2kMapper.js b/n2kMapper.js index 725537c7..7cffe585 100644 --- a/n2kMapper.js +++ b/n2kMapper.js @@ -18,6 +18,7 @@ Object.assign(n2kMappings, require('./digitalyacht')) function N2kMapper (options) { this.state = {} this.unknownPGNs = {} + this.options = options || {} } N2kMapper.prototype.n2kOutIsAvailable = function(listener, event) { @@ -118,11 +119,11 @@ N2kMapper.prototype.toDelta = function(n2k) { this.emit('n2kSourceMetadata', n2k, { unknownPGNs: this.unknownPGNs[n2k.src] }) } } - return toDelta(n2k, this.state) + return toDelta(n2k, this.state, this.options.sendMetaData) } } -var toDelta = function (n2k, state) { +var toDelta = function (n2k, state, sendMetaData) { try { var theMappings = n2kMappings[n2k.pgn] var src_state @@ -169,7 +170,7 @@ var toDelta = function (n2k, state) { result.updates[0].source.instance = theMappings[0].instance(n2k) } - if ( theMappings.meta ) { + if ( theMappings.meta && sendMetaData ) { if (src_state && !src_state.sentMetaPaths ) { src_state.sentMetaPaths = {} } From 9b2440168e97b2099b909f51211103cdd9e4c414 Mon Sep 17 00:00:00 2001 From: Scott Bender Date: Fri, 11 Dec 2020 12:26:10 -0500 Subject: [PATCH 4/6] fix: 127501 test failing --- test/127501_switch_bank_status.js | 4 ++-- test/testMapper.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/127501_switch_bank_status.js b/test/127501_switch_bank_status.js index 0fa30d5e..fffbb8c8 100644 --- a/test/127501_switch_bank_status.js +++ b/test/127501_switch_bank_status.js @@ -66,11 +66,11 @@ describe('127501 switch bank status', function () { 7 ) tree.should.have.nested.property( - 'electrical.switches.bank.0.1.state.meta.bankNumber', + 'electrical.switches.bank.0.1.meta.bankNumber', 0 ) tree.should.have.nested.property( - 'electrical.switches.bank.0.1.state.meta.switchNumber', + 'electrical.switches.bank.0.1.meta.switchNumber', 1 ) diff --git a/test/testMapper.js b/test/testMapper.js index a34cb3b6..f2ceb047 100644 --- a/test/testMapper.js +++ b/test/testMapper.js @@ -2,7 +2,7 @@ const n2kMapper = require('../n2kMapper') const signalkSchema = require('@signalk/signalk-schema') n2kMapper.toNested = function (n2k, state) { - var delta = n2kMapper.toDelta(n2k, state) + var delta = n2kMapper.toDelta(n2k, state, true) if (!delta.context) { delta.context = 'vessels.' + signalkSchema.fakeMmsiId } From 97c4e8b3eed7009e798fba3dc791d5505e8bec4c Mon Sep 17 00:00:00 2001 From: Scott Bender Date: Wed, 17 Feb 2021 11:17:49 -0500 Subject: [PATCH 5/6] chore: update package-lock.jsona --- package-lock.json | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 573ef53f..48901b1a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -409,9 +409,9 @@ } }, "@signalk/signalk-schema": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@signalk/signalk-schema/-/signalk-schema-1.3.1.tgz", - "integrity": "sha512-NPSR18GNXw9EnsbaT663CELDnS/KZCjzd9YBRZUz3IHwxafVvasjFgtWuq41oJrXVoKpz+FqyfRv5uQV0yucbw==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@signalk/signalk-schema/-/signalk-schema-1.5.1.tgz", + "integrity": "sha512-88Kur/s5/STI7PvBHH2Fwmkhb8dw1hLP76h+mnjcJHF0AcCjnxLBG2DBSZ71qDO22tamSn/72kAsb6roOHyHLA==", "dev": true, "requires": { "JSONStream": "^0.7.4", @@ -1183,9 +1183,9 @@ "optional": true }, "core-js": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", - "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", "dev": true }, "core-util-is": { @@ -2750,9 +2750,9 @@ }, "dependencies": { "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" @@ -3378,9 +3378,9 @@ } }, "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", "dev": true }, "mqtt": { From b5666f4f4fdd5327fb20d9fe450e4be3857a08a5 Mon Sep 17 00:00:00 2001 From: Scott Bender Date: Wed, 17 Feb 2021 11:41:10 -0500 Subject: [PATCH 6/6] chore: revert to schema 1.3.1 --- package-lock.json | 18 +++++++++--------- package.json | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 573ef53f..dc55e9d9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1183,9 +1183,9 @@ "optional": true }, "core-js": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", - "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", "dev": true }, "core-util-is": { @@ -2750,9 +2750,9 @@ }, "dependencies": { "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" @@ -3378,9 +3378,9 @@ } }, "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", "dev": true }, "mqtt": { diff --git a/package.json b/package.json index 32bc834a..98a0c14d 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ }, "devDependencies": { "@signalk/github-create-release": "^1.0.1", - "@signalk/signalk-schema": "1.3.1", + "@signalk/signalk-schema": "^1.3.1", "chai": "~4.1.0", "chai-things": "0.2", "mocha": "^7.1.0",