From 2466737da7dd213b71a344e04f26daa7fd8ca6dc Mon Sep 17 00:00:00 2001 From: panaaj <38519157+panaaj@users.noreply.github.com> Date: Fri, 7 Jun 2024 16:48:01 +0930 Subject: [PATCH 1/5] Fix RMB no position handling. Send delta with nextPoint.position value = null --- hooks/RMB.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/hooks/RMB.js b/hooks/RMB.js index ac1868f..89289c9 100644 --- a/hooks/RMB.js +++ b/hooks/RMB.js @@ -20,7 +20,7 @@ const utils = require('@signalk/nmea0183-utilities') const moment = require('moment-timezone') /* -RMC Sentence +RMB Sentence $GPRMB,A,0.66,L,003,004,4917.24,N,12309.57,W,001.3,052.5,000.5,V*20 values: @@ -49,11 +49,17 @@ module.exports = function (input) { let vmg = 0.0 let distance = 0.0 let crossTrackError = 0.0 + let position = null latitude = utils.coordinate(parts[5], parts[6]) longitude = utils.coordinate(parts[7], parts[8]) if (isNaN(latitude) || isNaN(longitude)) { - return null + position = null + } else { + position = { + longitude, + latitude + } } bearing = utils.float(parts[10]) @@ -78,10 +84,7 @@ module.exports = function (input) { values: [ { path: 'navigation.courseRhumbline.nextPoint.position', - value: { - longitude, - latitude, - }, + value: position, }, { From b1237f4f31159f28ecc86cf7573066e05a79753e Mon Sep 17 00:00:00 2001 From: panaaj <38519157+panaaj@users.noreply.github.com> Date: Fri, 7 Jun 2024 17:05:02 +0930 Subject: [PATCH 2/5] Fix empty sentence test. --- test/RMB.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/RMB.js b/test/RMB.js index c853ca2..1a7241c 100644 --- a/test/RMB.js +++ b/test/RMB.js @@ -75,6 +75,9 @@ describe('RMB', () => { it("Doesn't choke on empty sentences", () => { const delta = new Parser().parse('$ECRMB,,,,,,,,,,,,,*77') - should.equal(delta, null) + delta.updates[0].values.should.contain.an.item.with.property( + 'path', + 'navigation.courseRhumbline.nextPoint.position' + ) }) }) From 1ea0c736599aa7a0f61d46bdebbfa1be5997f86b Mon Sep 17 00:00:00 2001 From: panaaj <38519157+panaaj@users.noreply.github.com> Date: Wed, 13 Nov 2024 16:41:43 +1030 Subject: [PATCH 3/5] update RMB test --- test/RMB.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/RMB.js b/test/RMB.js index 1a7241c..a3d143c 100644 --- a/test/RMB.js +++ b/test/RMB.js @@ -79,5 +79,10 @@ describe('RMB', () => { 'path', 'navigation.courseRhumbline.nextPoint.position' ) + delta.updates[0].values.should.contain.an.item({ + path: 'navigation.courseRhumbline.nextPoint.position', + value: null + }) }) + }) From 818c8b23204d22fa7399acb4591f62c2aaec4775 Mon Sep 17 00:00:00 2001 From: panaaj <38519157+panaaj@users.noreply.github.com> Date: Fri, 15 Nov 2024 09:58:58 +1030 Subject: [PATCH 4/5] Fix BWC no position handling. Send delta with nextPoint.position value = null --- hooks/BWC.js | 5 +++++ test/BWC.js | 12 +++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/hooks/BWC.js b/hooks/BWC.js index b4ee813..5d431f3 100644 --- a/hooks/BWC.js +++ b/hooks/BWC.js @@ -66,6 +66,11 @@ module.exports = function BWCHook(input) { latitude, }, }) + } else { + values.push({ + path: 'navigation.courseGreatCircle.nextPoint.position', + value: null, + }) } if (parts[9] !== '' && parts[10] !== '') { diff --git a/test/BWC.js b/test/BWC.js index e1f5349..0a86f0c 100644 --- a/test/BWC.js +++ b/test/BWC.js @@ -63,6 +63,10 @@ describe('BWC', () => { delta.should.be.an('object') delta.updates[0].values.should.deep.equal([ + { + path: 'navigation.courseGreatCircle.nextPoint.position', + value: null, + }, { path: 'navigation.courseGreatCircle.nextPoint.distance', value: 40929.20003454424, @@ -80,6 +84,12 @@ describe('BWC', () => { it("Doesn't choke on an empty sentence", () => { const delta = new Parser().parse('$GPBWC,,,,,,,,,,,,*41') - should.equal(delta, undefined) + + delta.updates[0].values.should.deep.equal([ + { + path: 'navigation.courseGreatCircle.nextPoint.position', + value: null, + }, + ]) }) }) From 1ad79799b3f48c92d8f088f4285df4ca07aa2728 Mon Sep 17 00:00:00 2001 From: panaaj <38519157+panaaj@users.noreply.github.com> Date: Fri, 15 Nov 2024 09:59:13 +1030 Subject: [PATCH 5/5] Fix BWR no position handling. Send delta with nextPoint.position value = null --- hooks/BWR.js | 44 ++++++++++++++++++++++++-------------------- test/BWR.js | 16 +++++++++++++++- 2 files changed, 39 insertions(+), 21 deletions(-) diff --git a/hooks/BWR.js b/hooks/BWR.js index 1b75545..06932bb 100644 --- a/hooks/BWR.js +++ b/hooks/BWR.js @@ -37,6 +37,11 @@ module.exports = function BWRHook(input) { debug(`[BWRHook] decoding sentence ${id} => ${sentence}`) + let timestamp + let position + let distance + const bearingToWaypoint = {} + if ( upper(parts[0]) === '' || upper(parts[1]) === '' || @@ -44,24 +49,26 @@ module.exports = function BWRHook(input) { upper(parts[3]) === '' || upper(parts[4]) === '' ) { - return null + timestamp = tags.timestamp + position = null + distance = null + } else { + timestamp = utils.timestamp(parts[0]) + position = { + latitude: utils.coordinate(parts[1], parts[2]), + longitude: utils.coordinate(parts[3], parts[4]), + } + distance = utils.transform( + parts[9], + upper(parts[10]) === 'N' ? 'nm' : 'km', + 'm' + ) + bearingToWaypoint[upper(parts[6]) === 'T' ? 'True' : 'Magnetic'] = + utils.transform(parts[5], 'deg', 'rad') + bearingToWaypoint[upper(parts[8]) === 'T' ? 'True' : 'Magnetic'] = + utils.transform(parts[7], 'deg', 'rad') } - const timestamp = utils.timestamp(parts[0]) - const latitude = utils.coordinate(parts[1], parts[2]) - const longitude = utils.coordinate(parts[3], parts[4]) - const distance = utils.transform( - parts[9], - upper(parts[10]) === 'N' ? 'nm' : 'km', - 'm' - ) - - const bearingToWaypoint = {} - bearingToWaypoint[upper(parts[6]) === 'T' ? 'True' : 'Magnetic'] = - utils.transform(parts[5], 'deg', 'rad') - bearingToWaypoint[upper(parts[8]) === 'T' ? 'True' : 'Magnetic'] = - utils.transform(parts[7], 'deg', 'rad') - return { updates: [ { @@ -82,10 +89,7 @@ module.exports = function BWRHook(input) { }, { path: 'navigation.courseRhumbline.nextPoint.position', - value: { - longitude, - latitude, - }, + value: position, }, ], }, diff --git a/test/BWR.js b/test/BWR.js index 3df82ff..061c68d 100644 --- a/test/BWR.js +++ b/test/BWR.js @@ -56,6 +56,20 @@ describe('BWR', () => { it("Doesn't choke on an empty sentence", () => { const delta = new Parser().parse('$GPBWR,,,,,,,,,,,,*50') - should.equal(delta, null) + delta.updates[0].values.should.deep.equal([ + { path: 'navigation.courseRhumbline.bearingTrackTrue', value: null }, + { + path: 'navigation.courseRhumbline.bearingTrackMagnetic', + value: null, + }, + { + path: 'navigation.courseRhumbline.nextPoint.distance', + value: null, + }, + { + path: 'navigation.courseRhumbline.nextPoint.position', + value: null, + }, + ]) }) })