Skip to content

Commit

Permalink
Feature: add sensors.ais.class to additional PGNs (#228)
Browse files Browse the repository at this point in the history
  • Loading branch information
tkurki authored Dec 30, 2021
1 parent dfabe4a commit b3970a4
Show file tree
Hide file tree
Showing 13 changed files with 77 additions and 3 deletions.
6 changes: 6 additions & 0 deletions pgns/129038.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,12 @@ module.exports = [
},
{
context: getMmsiContext
},
{
node: 'sensors.ais.class',
value: function (n2k) {
return 'A'
}
}
]

Expand Down
6 changes: 6 additions & 0 deletions pgns/129039.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,5 +34,11 @@ module.exports = [
},
{
context: getMmsiContext
},
{
node: 'sensors.ais.class',
value: function (n2k) {
return 'B'
}
}
]
6 changes: 6 additions & 0 deletions pgns/129040.js
Original file line number Diff line number Diff line change
Expand Up @@ -84,5 +84,11 @@ module.exports = [
},
{
context: getMmsiContext
},
{
node: 'sensors.ais.class',
value: function (n2k) {
return 'B'
}
}
]
6 changes: 6 additions & 0 deletions pgns/129041.js
Original file line number Diff line number Diff line change
Expand Up @@ -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'
}
}
]

Expand Down
6 changes: 6 additions & 0 deletions pgns/129793.js
Original file line number Diff line number Diff line change
Expand Up @@ -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'
}
}
]
6 changes: 6 additions & 0 deletions pgns/129798.js
Original file line number Diff line number Diff line change
Expand Up @@ -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'
}
}
]
6 changes: 6 additions & 0 deletions test/129038_ais_class_a.js
Original file line number Diff line number Diff line change
@@ -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)
Expand Down Expand Up @@ -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 () {
Expand Down
11 changes: 11 additions & 0 deletions test/129039_ais_class_b.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 () {
Expand All @@ -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 () {
Expand All @@ -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')
})
})
7 changes: 7 additions & 0 deletions test/129040_class_b_extended.js
Original file line number Diff line number Diff line change
@@ -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)
Expand All @@ -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)
Expand All @@ -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
})
})
4 changes: 3 additions & 1 deletion test/129793_ais_base_station_data.js
Original file line number Diff line number Diff line change
@@ -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)
Expand Down Expand Up @@ -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,
Expand All @@ -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')
})
})
3 changes: 2 additions & 1 deletion test/129794_ais_class_a_static_data.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
*/

const chai = require('chai')
const { assertSensorClass } = require('./ais_utils')
const expect = chai.expect
chai.Should()
chai.use(require('chai-things'))
Expand All @@ -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)
Expand Down
7 changes: 6 additions & 1 deletion test/129798_sar.js
Original file line number Diff line number Diff line change
@@ -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)
Expand All @@ -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)
Expand All @@ -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
})
})
6 changes: 6 additions & 0 deletions test/ais_utils.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module.exports = {
assertSensorClass: (delta, theClass) =>
delta.updates[0].values
.find((pathValue) => pathValue.path === "sensors.ais.class")
.value.should.equal(theClass)
}

0 comments on commit b3970a4

Please sign in to comment.