diff --git a/pgns/129038.js b/pgns/129038.js index ede74b4..48143c3 100644 --- a/pgns/129038.js +++ b/pgns/129038.js @@ -56,6 +56,12 @@ module.exports = [ }, { context: getMmsiContext + }, + { + node: 'sensors.ais.class', + value: function (n2k) { + return 'A' + } } ] diff --git a/pgns/129039.js b/pgns/129039.js index b81382d..570d0a0 100644 --- a/pgns/129039.js +++ b/pgns/129039.js @@ -34,5 +34,11 @@ module.exports = [ }, { context: getMmsiContext + }, + { + node: 'sensors.ais.class', + value: function (n2k) { + return 'B' + } } ] diff --git a/pgns/129040.js b/pgns/129040.js index 5f56e24..8236d45 100644 --- a/pgns/129040.js +++ b/pgns/129040.js @@ -84,5 +84,11 @@ module.exports = [ }, { context: getMmsiContext + }, + { + node: 'sensors.ais.class', + value: function (n2k) { + return 'B' + } } ] diff --git a/pgns/129041.js b/pgns/129041.js index 028810f..76bd7fe 100644 --- a/pgns/129041.js +++ b/pgns/129041.js @@ -90,6 +90,12 @@ module.exports = [ context: function (n2k) { return n2k.fields['User ID'] ? 'atons.urn:mrn:imo:mmsi:' + n2k.fields['User ID'] : undefined } + }, + { + node: 'sensors.ais.class', + value: function (n2k) { + return 'ATON' + } } ] diff --git a/pgns/129793.js b/pgns/129793.js index 5f349ce..f5f71b4 100644 --- a/pgns/129793.js +++ b/pgns/129793.js @@ -31,5 +31,11 @@ module.exports = [ context: function (n2k) { return n2k.fields['User ID'] ? 'shore.basestations.urn:mrn:imo:mmsi:' + n2k.fields['User ID'] : undefined } + }, + { + node: 'sensors.ais.class', + value: function (n2k) { + return 'BASE' + } } ] diff --git a/pgns/129798.js b/pgns/129798.js index ebdd014..0360f00 100644 --- a/pgns/129798.js +++ b/pgns/129798.js @@ -35,5 +35,11 @@ module.exports = [ context: function (n2k) { return n2k.fields['User ID'] ? 'sar.urn:mrn:imo:mmsi:' + n2k.fields['User ID'] : undefined } + }, + { + node: 'sensors.ais.class', + value: function (n2k) { + return 'SAR' + } } ] diff --git a/test/129038_ais_class_a.js b/test/129038_ais_class_a.js index aaedd90..2d029cc 100644 --- a/test/129038_ais_class_a.js +++ b/test/129038_ais_class_a.js @@ -1,4 +1,5 @@ var chai = require('chai') +const { assertSensorClass } = require('./ais_utils') chai.Should() chai.use(require('chai-things')) chai.use(require('@signalk/signalk-schema').chaiModule) @@ -26,10 +27,15 @@ describe('129038 Class A Update', function () { tree.should.have.nested.property('navigation.headingTrue.value', 153.0) tree.should.have.nested.property('navigation.state') tree.should.have.nested.property('navigation.state.value', 'motoring') + + //TODO remove when sensors.ais.class is in schema + delete tree.sensors.ais + tree.should.be.validSignalKVesselIgnoringIdentity var delta = mapper.toDelta(msg) delta.updates.length.should.equal(1) delta.context.should.equal('vessels.urn:mrn:imo:mmsi:230982000') + assertSensorClass(delta, 'A') }) it('special maneuver converts', function () { diff --git a/test/129039_ais_class_b.js b/test/129039_ais_class_b.js index 746a4b7..0cb4fdc 100644 --- a/test/129039_ais_class_b.js +++ b/test/129039_ais_class_b.js @@ -5,6 +5,7 @@ chai.use(require('chai-things')) chai.use(require('@signalk/signalk-schema').chaiModule) var mapper = require('./testMapper') +const { assertSensorClass } = require('./ais_utils') describe('129039 Class B Update', function () { it('complete self sentence converts', function () { @@ -23,10 +24,15 @@ describe('129039 Class B Update', function () { tree.navigation.position.value.latitude.should.equal(60.03951) tree.should.have.nested.property('navigation.headingTrue') tree.should.have.nested.property('navigation.headingTrue.value', 153.0) + + //TODO remove when sensors.ais.class is in schema + delete tree.sensors.ais + tree.should.be.validSignalKVesselIgnoringIdentity var delta = mapper.toDelta(msg) delta.updates.length.should.equal(1) assert.equal(delta.context, 'vessels.urn:mrn:imo:mmsi:230035780') + assertSensorClass(delta, 'B') }) it('complete other sentence converts', function () { @@ -43,9 +49,14 @@ describe('129039 Class B Update', function () { tree.should.have.nested.property('navigation.speedOverGround.value', 2.88) tree.navigation.position.value.longitude.should.equal(-76.1882515) tree.navigation.position.value.latitude.should.equal(39.1087383) + + //TODO remove when sensors.ais.class is in schema + delete tree.sensors.ais + tree.should.be.validSignalKVesselIgnoringIdentity var delta = mapper.toDelta(msg) delta.updates.length.should.equal(1) delta.context.should.equal('vessels.urn:mrn:imo:mmsi:235087238') + assertSensorClass(delta, 'B') }) }) diff --git a/test/129040_class_b_extended.js b/test/129040_class_b_extended.js index 0febb4b..18a095d 100644 --- a/test/129040_class_b_extended.js +++ b/test/129040_class_b_extended.js @@ -1,4 +1,5 @@ var chai = require('chai') +const { assertSensorClass } = require('./ais_utils') chai.Should() chai.use(require('chai-things')) chai.use(require('@signalk/signalk-schema').chaiModule) @@ -15,6 +16,8 @@ describe('129040 AIS Class B Extended Position Repeat', function () { delta.context.should.equal('vessels.urn:mrn:imo:mmsi:230939100') delta.updates[0].values[0].path.should.equal('') delta.updates[0].values[0].value.name.should.equal('RESCUE RAUTAUOMA') + assertSensorClass(delta, 'B') + var tree = mapper.toNested(msg) tree.should.have.nested.property('design.length.value.overall', 16.0) tree.should.have.nested.property('design.aisShipType.value.id', 51) @@ -37,6 +40,10 @@ describe('129040 AIS Class B Extended Position Repeat', function () { tree.should.have.nested.property('sensors.ais.fromBow.value', 9.0) tree.should.have.nested.property('sensors.ais.fromCenter.value', 0) delete tree.design.aisShipType + + //TODO remove when sensors.ais.class is in schema + delete tree.sensors.ais + tree.should.be.validSignalKVesselIgnoringIdentity }) }) diff --git a/test/129793_ais_base_station_data.js b/test/129793_ais_base_station_data.js index 3bf1caa..9e12bf5 100644 --- a/test/129793_ais_base_station_data.js +++ b/test/129793_ais_base_station_data.js @@ -1,4 +1,5 @@ var chai = require('chai') +const { assertSensorClass } = require('./ais_utils') chai.Should() chai.use(require('chai-things')) chai.use(require('@signalk/signalk-schema').chaiModule) @@ -35,7 +36,7 @@ describe('129793 AIS UTC and Date Report (Base Station)', function () { console.log(JSON.stringify(delta, null, 2)) delta.updates.length.should.equal(1) const values = delta.updates[0].values - values.length.should.equal(2) + values.length.should.equal(3) values[0].path.should.equal('navigation.position') values[0].value.should.deep.equal({ longitude: 4.5183933, @@ -46,5 +47,6 @@ describe('129793 AIS UTC and Date Report (Base Station)', function () { mmsi: '2442103' }) delta.context.should.equal('shore.basestations.urn:mrn:imo:mmsi:2442103') + assertSensorClass(delta, 'BASE') }) }) diff --git a/test/129794_ais_class_a_static_data.js b/test/129794_ais_class_a_static_data.js index 0ef28ed..244303d 100644 --- a/test/129794_ais_class_a_static_data.js +++ b/test/129794_ais_class_a_static_data.js @@ -32,6 +32,7 @@ */ const chai = require('chai') +const { assertSensorClass } = require('./ais_utils') const expect = chai.expect chai.Should() chai.use(require('chai-things')) @@ -47,7 +48,7 @@ describe('129794 AIS Class A Static and Voyage Related Data', function () { var delta = mapper.toDelta(msg) delta.updates.length.should.equal(1) delta.context.should.equal('vessels.urn:mrn:imo:mmsi:356307000') - delta.updates[0].values.find(pathValue => pathValue.path === 'sensors.ais.class').value.should.equal('A') + assertSensorClass(delta, 'A') const valuesWithEmptyPath = delta.updates[0].values.filter(pathValue => pathValue.path === '') valuesWithEmptyPath.length.should.equal(3) diff --git a/test/129798_sar.js b/test/129798_sar.js index 6527924..01d8bf1 100644 --- a/test/129798_sar.js +++ b/test/129798_sar.js @@ -1,4 +1,5 @@ var chai = require('chai') +const { assertSensorClass } = require('./ais_utils') chai.Should() chai.use(require('chai-things')) chai.use(require('@signalk/signalk-schema').chaiModule) @@ -13,6 +14,7 @@ describe('129798 AIS SAR Aircraft Position Report', function () { var delta = mapper.toDelta(msg) delta.updates.length.should.equal(1) delta.context.should.equal('sar.urn:mrn:imo:mmsi:100046') + assertSensorClass(delta, 'SAR') var tree = mapper.toNested(msg) tree.navigation.position.value.longitude.should.equal(-75.8338099) tree.navigation.position.value.latitude.should.equal(39.6475617) @@ -21,7 +23,10 @@ describe('129798 AIS SAR Aircraft Position Report', function () { 2.227 ) tree.should.have.nested.property('navigation.speedOverGround.value', 694.4) - console.log(JSON.stringify(tree)) + + //TODO remove when sensors.ais.class is in schema + delete tree.sensors.ais + tree.should.be.validSignalKVesselIgnoringIdentity }) }) diff --git a/test/ais_utils.js b/test/ais_utils.js new file mode 100644 index 0000000..00b3b8a --- /dev/null +++ b/test/ais_utils.js @@ -0,0 +1,6 @@ +module.exports = { + assertSensorClass: (delta, theClass) => + delta.updates[0].values + .find((pathValue) => pathValue.path === "sensors.ais.class") + .value.should.equal(theClass) +}