From f30307229fb6c3407e86ace7379ab83027436111 Mon Sep 17 00:00:00 2001 From: Ethan Fang Date: Thu, 26 Sep 2024 15:32:28 +1200 Subject: [PATCH 1/4] new changes --- lib/AdroitVW/AdroitVW-converter.ts | 29 +++++++++++++ lib/AdroitVW/test/AdroitVW-converter.test.ts | 18 ++++++++ lib/AdroitVW/test/input.dat | 44 ++++++++++++++++++++ 3 files changed, 91 insertions(+) create mode 100644 lib/AdroitVW/AdroitVW-converter.ts create mode 100644 lib/AdroitVW/test/AdroitVW-converter.test.ts create mode 100644 lib/AdroitVW/test/input.dat diff --git a/lib/AdroitVW/AdroitVW-converter.ts b/lib/AdroitVW/AdroitVW-converter.ts new file mode 100644 index 0000000..ad027ce --- /dev/null +++ b/lib/AdroitVW/AdroitVW-converter.ts @@ -0,0 +1,29 @@ +import { JtsDocument, TimeSeries } from '@eagle-io/timeseries'; +import { Converter } from '../../converter'; + +/** + * Convert the JSON data from Adroit VW Logger + * example: https://adroitplatform.com/api/points/34404/feeds/54553 + */ +export class AdroitVWJsonConverter extends Converter { + convert(input: Buffer): JtsDocument { + const series1 = new TimeSeries({ name: 'frequency' }); + + // Parse the input buffer to JSON object + const record = JSON.parse(input.toString()); + + // Convert the single frequency value to eagle-io's format + //const timestamp = new Date(record.lastUpdate); // using 'lastUpdate' as timestamp + //const timestamp = new Date(record.lastUpdate * 1000).toLocaleString("en-NZ", { timeZone: "Pacific/Auckland" }); + const timestamp_ep = new Date(record.lastUpdate); + const timestamp = new Date(timestamp_ep.getTime() + (12 * 60 * 60 * 1000)); + const value = Number(record.value); // converting value to number + + // Insert the time series data + series1.insert({ timestamp, value }); + + // Return the JTS document + return new JtsDocument({ series: [series1] }); + } +} + diff --git a/lib/AdroitVW/test/AdroitVW-converter.test.ts b/lib/AdroitVW/test/AdroitVW-converter.test.ts new file mode 100644 index 0000000..dc39dab --- /dev/null +++ b/lib/AdroitVW/test/AdroitVW-converter.test.ts @@ -0,0 +1,18 @@ +import * as fs from 'fs' +import { AdroitVWJsonConverter } from '../AdroitVW-converter' + +describe('Unit test for AdroitVWJson', function () { + it('converts sample file', async () => { + const converter = new AdroitVWJsonConverter() + const buff = fs.readFileSync('lib/AdroitVW/test/input.dat') + const result = converter.convert(buff) + + // Corrected quotes and numeric timestamp for lastUpdate + expect(result.series[0].first.timestamp).toEqual(new Date('2024-09-16T08:00:00Z')) + expect(result.series[0].values).toEqual([2928.3]) + + }) +}) + + + diff --git a/lib/AdroitVW/test/input.dat b/lib/AdroitVW/test/input.dat new file mode 100644 index 0000000..4eb32fe --- /dev/null +++ b/lib/AdroitVW/test/input.dat @@ -0,0 +1,44 @@ +{ + "id": 54553, + "name": "VWS1 Frequency", + "point": 34404, + "creationDate": 1724640746000, + "lastUpdate": 1726430400000, + "value": "2928.3", + "sourceStatus": "ACTIVE", + "path": "Site/dvwt-01-st12429/VWS1 Frequency", + "pathId": "17597/34404/54553/", + "alarmState": "NORMAL", + "alarmMessage": "STATE_NORMAL", + "sourceType": "DEVICE_SENSOR", + "sourceId": 56680, + "contextId": 9138, + "unit": { + "id": 28, + "name": "HERTZ", + "symbol": "Hz", + "readingTypeId": 40, + "system": "SI", + "precision": 1, + "context": null, + "guid": "7c805b6e-a879-11e9-83cd-0a0027000005", + "readingTypeName": "FREQUENCY", + "inUse": true + }, + "minimum": null, + "maximum": null, + "trend": "STEADY", + "validity": 30, + "thresholdsEnabled": false, + "originType": "FEED", + "readingType": { + "id": 40, + "name": "FREQUENCY", + "dataType": "NUMERIC", + "size": 1, + "labels": null, + "iconName": null + }, + "originId": 54553, + "message": "STATE_NORMAL" +} \ No newline at end of file From 8fefe7e9c1225a89f77a206db4e4d5d652193e16 Mon Sep 17 00:00:00 2001 From: Ethan-beca Date: Tue, 15 Oct 2024 16:01:04 +1300 Subject: [PATCH 2/4] Rename AdroitVW-converter.ts to adroitvw-converter.ts --- lib/AdroitVW/{AdroitVW-converter.ts => adroitvw-converter.ts} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename lib/AdroitVW/{AdroitVW-converter.ts => adroitvw-converter.ts} (100%) diff --git a/lib/AdroitVW/AdroitVW-converter.ts b/lib/AdroitVW/adroitvw-converter.ts similarity index 100% rename from lib/AdroitVW/AdroitVW-converter.ts rename to lib/AdroitVW/adroitvw-converter.ts From 910d63aa9a70a29e06f5c4980c395b80cc716a01 Mon Sep 17 00:00:00 2001 From: Ethan-beca Date: Tue, 15 Oct 2024 16:01:30 +1300 Subject: [PATCH 3/4] Rename AdroitVW-converter.test.ts to adroitvw-converter.test.ts --- .../{AdroitVW-converter.test.ts => adroitvw-converter.test.ts} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename lib/AdroitVW/test/{AdroitVW-converter.test.ts => adroitvw-converter.test.ts} (100%) diff --git a/lib/AdroitVW/test/AdroitVW-converter.test.ts b/lib/AdroitVW/test/adroitvw-converter.test.ts similarity index 100% rename from lib/AdroitVW/test/AdroitVW-converter.test.ts rename to lib/AdroitVW/test/adroitvw-converter.test.ts From 137bc3aae767e41295b83f77df66f84528c1f09a Mon Sep 17 00:00:00 2001 From: Ethan-beca Date: Fri, 15 Nov 2024 14:24:16 +1300 Subject: [PATCH 4/4] Update adroitvw-converter.ts --- lib/AdroitVW/adroitvw-converter.ts | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/lib/AdroitVW/adroitvw-converter.ts b/lib/AdroitVW/adroitvw-converter.ts index ad027ce..c9d607e 100644 --- a/lib/AdroitVW/adroitvw-converter.ts +++ b/lib/AdroitVW/adroitvw-converter.ts @@ -1,27 +1,27 @@ import { JtsDocument, TimeSeries } from '@eagle-io/timeseries'; import { Converter } from '../../converter'; - +import moment from 'moment-timezone'; + /** - * Convert the JSON data from Adroit VW Logger - * example: https://adroitplatform.com/api/points/34404/feeds/54553 - */ +* Convert the JSON data from Adroit VW Logger +* example: https://adroitplatform.com/api/points/34404/feeds/54553 +*/ export class AdroitVWJsonConverter extends Converter { convert(input: Buffer): JtsDocument { - const series1 = new TimeSeries({ name: 'frequency' }); - - // Parse the input buffer to JSON object + // Parse the input buffer to JSON object const record = JSON.parse(input.toString()); + // Convert the epoch time to a moment object + let timestamp = moment.utc(record.lastUpdate).tz('Pacific/Auckland').toDate(); + + // Create a TimeSeries object + const series1 = new TimeSeries({ name: record.name }); - // Convert the single frequency value to eagle-io's format - //const timestamp = new Date(record.lastUpdate); // using 'lastUpdate' as timestamp - //const timestamp = new Date(record.lastUpdate * 1000).toLocaleString("en-NZ", { timeZone: "Pacific/Auckland" }); - const timestamp_ep = new Date(record.lastUpdate); - const timestamp = new Date(timestamp_ep.getTime() + (12 * 60 * 60 * 1000)); - const value = Number(record.value); // converting value to number - + // Convert the value to a number + const value = Number(record.value); + // Insert the time series data series1.insert({ timestamp, value }); - + // Return the JTS document return new JtsDocument({ series: [series1] }); }