From 3d551201e84fbc54492e9ea0ef738c85dec32365 Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Thu, 10 Aug 2017 14:00:26 +0200 Subject: [PATCH] json stuff --- src/longframe.ts | 4 ++++ src/meterbus.test.ts | 6 ++++++ src/simpleframes.ts | 12 +++++++++++- src/utils.ts | 17 ++++++++++++++++- 4 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/longframe.ts b/src/longframe.ts index 9079648..bb33a7e 100644 --- a/src/longframe.ts +++ b/src/longframe.ts @@ -52,6 +52,10 @@ export namespace MeterbusLibLongFrame { this._signature = this._data.slice(10, 12) } + toJSON() : any { + return MeterbusLibUtils.jsonPrepaper(this, ["_data"]) + } + getJSON() : string { return JSON.stringify(this) } diff --git a/src/meterbus.test.ts b/src/meterbus.test.ts index f947bcb..596c293 100644 --- a/src/meterbus.test.ts +++ b/src/meterbus.test.ts @@ -15,6 +15,9 @@ let inputOkLongFrame_1phase_electric = "68 38 38 68 08 53 72 17 00 13 00 2E 19 2 let inputNOkLongFrame_1phase_electric_wrong_medium = "68 38 38 68 08 53 72 17 00 13 00 2E 19 24 FE D6 00 00 00 8C 10 04 01 02 00 00 8C 11 04 01 02 00 00 02 FD C9 FF 01 E4 00 02 FD DB FF 01 03 00 02 AC FF 01 01 00 82 40 AC FF 01 FA FF 1c 16" let inputNOkLongFrame_1phase_electric_wrong_signature = "68 38 38 68 08 53 72 17 00 13 00 2E 19 24 02 D6 00 00 01 8C 10 04 01 02 00 00 8C 11 04 01 02 00 00 02 FD C9 FF 01 E4 00 02 FD DB FF 01 03 00 02 AC FF 01 01 00 82 40 AC FF 01 FA FF 21 16" +let json_1phase_electric = '{"telegram":[104,56,56,104,8,83,114,23,0,19,0,46,25,36,2,214,0,0,0,140,16,4,1,2,0,0,140,17,4,1,2,0,0,2,253,201,255,1,228,0,2,253,219,255,1,3,0,2,172,255,1,1,0,130,64,172,255,1,250,255,32,22],"cField":8,"address":83,"ciField":114,"fixedDataHeader":{"identNo":17001300,"manufacturer":"FIN","version":36,"medium":"Electrity","accessNo":214,"status":0,"signature":[0,0]}}' + + // electricity let inputOkLongFrame_3phase_electric = "68 92 92 68 08 50 72 81 14 01 11 2E 19 16 02 88 00 00 00 8C 10 04 58 43 86 00 8C 11 04 58 43 86 00 8C 20 04 00 00 00 00 8C 21 04 00 00 00 00 02 FD C9 FF 01 E4 00 02 FD DB FF 01 5A 00 02 AC FF 01 D2 00 82 40 AC FF 01 00 00 02 FD C9 FF 02 DF 00 02 FD DB FF 02 0F 00 02 AC FF 02 21 00 82 40 AC FF 02 FD FF 02 FD C9 FF 03 E3 00 02 FD DB FF 03 04 00 02 AC FF 03 02 00 82 40 AC FF 03 F4 FF 02 FF 68 00 00 02 AC FF 00 F5 00 82 40 AC FF 00 F1 FF 01 FF 13 00 F4 16" @@ -173,6 +176,9 @@ describe('The Meterbus Library', () => { expect((telegram.frame as MeterbusLibLongFrame.LongFrame).fixedDataHeader.signature) .to.deep.equal([0,0]) }) + it('should prepare itself as JSON', () => { + expect((telegram.frame as MeterbusLibLongFrame.LongFrame).getJSON()).to.equal(json_1phase_electric) + }) }) }) \ No newline at end of file diff --git a/src/simpleframes.ts b/src/simpleframes.ts index 8fb99b1..9a55fda 100644 --- a/src/simpleframes.ts +++ b/src/simpleframes.ts @@ -1,5 +1,5 @@ import {MeterbusLibExceptions} from './exceptions' - +import {MeterbusLibUtils} from './utils' export namespace MeterbusLibFrames { export abstract class Frame { @@ -19,6 +19,16 @@ export namespace MeterbusLibFrames { } + + toJSON() : any { + return MeterbusLibUtils.jsonPrepaper(this, ["_startCharacter", "_frameLength", + "_firstPayload", "_payloadLength" ]) + } + + getJSON() : string { + return JSON.stringify(this) + } + verifyChecksumAndEnd() { if (this._firstPayload != 0) { if (this._telegram[this._telegram.length - 1] != 0x16) { diff --git a/src/utils.ts b/src/utils.ts index 3c69b4e..ad3b3b2 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -13,4 +13,19 @@ export namespace MeterbusLibUtils { let v : number = (data[1] << 8) + data[0] return String.fromCharCode((((v >> 10) & 0x1f) + 64), (((v >> 5) & 0x1f) + 64), ((v & 0x1f) + 64)) } -} \ No newline at end of file + + export function jsonPrepaper(obj:any, hideKeys:string[]) : any { + let dup = {} + for (let key in obj) { + if (hideKeys.indexOf(key) == -1) { + //if (key[0] == "_") { + // key = key.slice(1) + //} + let dkey = (key[0] == "_") ? key.slice(1) : key + dup[dkey] = obj[key] + } + } + return dup + } +} +