initial, start porting Python MeterbusLib to node
This commit is contained in:
commit
d1c969a793
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
node_modules
|
||||||
|
*.map
|
1
dist/index.d.ts
vendored
Normal file
1
dist/index.d.ts
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
export { MeterbusLib } from './meterbus';
|
4
dist/index.js
vendored
Normal file
4
dist/index.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
var meterbus_1 = require("./meterbus");
|
||||||
|
exports.MeterbusLib = meterbus_1.MeterbusLib;
|
10
dist/meterbus.d.ts
vendored
Normal file
10
dist/meterbus.d.ts
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
export declare namespace MeterbusLib {
|
||||||
|
class Telegram {
|
||||||
|
private _hexString;
|
||||||
|
private _telegram;
|
||||||
|
constructor();
|
||||||
|
readonly hexString: string;
|
||||||
|
readonly telegram: number[];
|
||||||
|
fromHexString(hexString: string): void;
|
||||||
|
}
|
||||||
|
}
|
28
dist/meterbus.js
vendored
Normal file
28
dist/meterbus.js
vendored
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
var MeterbusLib;
|
||||||
|
(function (MeterbusLib) {
|
||||||
|
var Telegram = (function () {
|
||||||
|
function Telegram() {
|
||||||
|
}
|
||||||
|
Object.defineProperty(Telegram.prototype, "hexString", {
|
||||||
|
get: function () {
|
||||||
|
return this._hexString;
|
||||||
|
},
|
||||||
|
enumerable: true,
|
||||||
|
configurable: true
|
||||||
|
});
|
||||||
|
Object.defineProperty(Telegram.prototype, "telegram", {
|
||||||
|
get: function () {
|
||||||
|
return this._telegram;
|
||||||
|
},
|
||||||
|
enumerable: true,
|
||||||
|
configurable: true
|
||||||
|
});
|
||||||
|
Telegram.prototype.fromHexString = function (hexString) {
|
||||||
|
this._hexString = hexString;
|
||||||
|
};
|
||||||
|
return Telegram;
|
||||||
|
}());
|
||||||
|
MeterbusLib.Telegram = Telegram;
|
||||||
|
})(MeterbusLib = exports.MeterbusLib || (exports.MeterbusLib = {}));
|
0
dist/meterbus.test.d.ts
vendored
Normal file
0
dist/meterbus.test.d.ts
vendored
Normal file
12
dist/meterbus.test.js
vendored
Normal file
12
dist/meterbus.test.js
vendored
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
var meterbus_1 = require("./meterbus");
|
||||||
|
var chai = require("chai");
|
||||||
|
var expect = chai.expect;
|
||||||
|
describe('Meterbus Library', function () {
|
||||||
|
it('should store hexString', function () {
|
||||||
|
var telegram = new meterbus_1.MeterbusLib.Telegram();
|
||||||
|
telegram.fromHexString("01 02 03");
|
||||||
|
expect(telegram.hexString).to.equal("01 02 03");
|
||||||
|
});
|
||||||
|
});
|
33
package.json
Normal file
33
package.json
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"name": "meterbuslibts",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Parser for MBus telegrams into JS/TS objects",
|
||||||
|
"main": "dist/index.js",
|
||||||
|
"types": "dist/index.d.ts",
|
||||||
|
"scripts": {
|
||||||
|
"build": "./node_modules/typescript/bin/tsc",
|
||||||
|
"test": "./node_modules/mocha/bin/mocha -r ts-node/register src/**/*.test.ts"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+ssh://git@gitlab.com/wolutator/meterbuslibts.git"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"mbus"
|
||||||
|
],
|
||||||
|
"author": "Wolfgang Hottgenroth <woho@hottis.de>",
|
||||||
|
"license": "MIT",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://gitlab.com/wolutator/meterbuslibts/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://gitlab.com/wolutator/meterbuslibts#README",
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/chai": "^4.0.2",
|
||||||
|
"@types/mocha": "^2.2.41",
|
||||||
|
"@types/node": "^8.0.20",
|
||||||
|
"chai": "^4.1.1",
|
||||||
|
"mocha": "^3.5.0",
|
||||||
|
"ts-node": "^3.3.0",
|
||||||
|
"typescript": "^2.4.2"
|
||||||
|
}
|
||||||
|
}
|
1
src/index.ts
Normal file
1
src/index.ts
Normal file
@ -0,0 +1 @@
|
|||||||
|
export {MeterbusLib} from './meterbus'
|
44
src/meterbus.test.ts
Normal file
44
src/meterbus.test.ts
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
import {MeterbusLib} from './meterbus'
|
||||||
|
|
||||||
|
import * as mocha from 'mocha'
|
||||||
|
import * as chai from 'chai'
|
||||||
|
|
||||||
|
const expect = chai.expect
|
||||||
|
|
||||||
|
describe('The Meterbus Library', () => {
|
||||||
|
it('should store hexString', () => {
|
||||||
|
const telegram = new MeterbusLib.Telegram()
|
||||||
|
telegram.fromHexString("01 02 03")
|
||||||
|
expect(telegram.hexString).to.equal("01 02 03")
|
||||||
|
})
|
||||||
|
it('should parse the hexString into the telegram array', () => {
|
||||||
|
const telegram = new MeterbusLib.Telegram()
|
||||||
|
telegram.fromHexString("01 02 03")
|
||||||
|
expect(telegram.telegram).to.deep.equal([1, 2, 3])
|
||||||
|
})
|
||||||
|
it('should detect a control frame', () => {
|
||||||
|
const telegram = new MeterbusLib.Telegram()
|
||||||
|
telegram.fromHexString("68 03")
|
||||||
|
telegram.parse()
|
||||||
|
expect(telegram.frame).instanceof(MeterbusLib.ControlFrame)
|
||||||
|
})
|
||||||
|
it('should detect a short frame', () => {
|
||||||
|
const telegram = new MeterbusLib.Telegram()
|
||||||
|
telegram.fromHexString("10")
|
||||||
|
telegram.parse()
|
||||||
|
expect(telegram.frame).instanceof(MeterbusLib.ShortFrame)
|
||||||
|
})
|
||||||
|
it('should detect a long frame', () => {
|
||||||
|
const telegram = new MeterbusLib.Telegram()
|
||||||
|
telegram.fromHexString("68 10")
|
||||||
|
telegram.parse()
|
||||||
|
expect(telegram.frame).instanceof(MeterbusLib.LongFrame)
|
||||||
|
})
|
||||||
|
it('should detect a single char frame', () => {
|
||||||
|
const telegram = new MeterbusLib.Telegram()
|
||||||
|
telegram.fromHexString("e5")
|
||||||
|
telegram.parse()
|
||||||
|
expect(telegram.frame).instanceof(MeterbusLib.SingleCharFrame)
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
75
src/meterbus.ts
Normal file
75
src/meterbus.ts
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
export namespace MeterbusLib {
|
||||||
|
export class Frame {
|
||||||
|
private _telegram : number[]
|
||||||
|
|
||||||
|
constructor(telegram : number[]) {
|
||||||
|
this._telegram = telegram
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ControlFrame extends Frame {
|
||||||
|
constructor(telegram : number[]) {
|
||||||
|
super(telegram)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ShortFrame extends Frame {
|
||||||
|
constructor(telegram : number[]) {
|
||||||
|
super(telegram)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class LongFrame extends Frame {
|
||||||
|
constructor(telegram : number[]) {
|
||||||
|
super(telegram)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class SingleCharFrame extends Frame {
|
||||||
|
constructor(telegram : number[]) {
|
||||||
|
super(telegram)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Telegram {
|
||||||
|
private _hexString : string
|
||||||
|
private _telegram : number[]
|
||||||
|
private _frame : Frame
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
}
|
||||||
|
|
||||||
|
get hexString() : string {
|
||||||
|
return this._hexString
|
||||||
|
}
|
||||||
|
|
||||||
|
get telegram() : number[] {
|
||||||
|
return this._telegram
|
||||||
|
}
|
||||||
|
|
||||||
|
get frame() : Frame {
|
||||||
|
return this._frame
|
||||||
|
}
|
||||||
|
|
||||||
|
fromHexString(hexString : string) {
|
||||||
|
this._hexString = hexString
|
||||||
|
this._telegram = this._hexString.split(' ').map<number>((val) => {
|
||||||
|
return parseInt(val, 16)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
parse() {
|
||||||
|
if (this._telegram[0] === 0x68 && this._telegram[1] === 0x03) {
|
||||||
|
this._frame = new ControlFrame(this._telegram)
|
||||||
|
} else if (this._telegram[0] === 0x68) {
|
||||||
|
this._frame = new LongFrame(this._telegram)
|
||||||
|
} else if (this._telegram[0] === 0x10) {
|
||||||
|
this._frame = new ShortFrame(this._telegram)
|
||||||
|
} else if (this._telegram[0] === 0xe5) {
|
||||||
|
this._frame = new SingleCharFrame(this._telegram)
|
||||||
|
} else {
|
||||||
|
throw Error('invalid start char')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
11
tsconfig.json
Normal file
11
tsconfig.json
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"module": "commonjs",
|
||||||
|
"target": "es5",
|
||||||
|
"declaration": true,
|
||||||
|
"outDir": "./dist"
|
||||||
|
},
|
||||||
|
"include": [
|
||||||
|
"src/**/*"
|
||||||
|
]
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user