zdjn-common-utils 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,115 +1,156 @@
1
- # zdjn-common-utils
2
-
3
- 中电节能常用工具库。
4
-
5
- ## 安装
6
-
7
- ```bash
8
- npm install zdjn-common-utils
9
- ```
10
-
11
- ## 更新版本
12
-
13
- 为确保使用最新的功能,请定期更新包版本:
14
-
15
- ```bash
16
- # 检查是否有更新版本
17
- npm outdated zdjn-common-utils
18
-
19
- # 更新到最新版本
20
- npm update zdjn-common-utils
21
-
22
- # 或者安装指定版本
23
- npm install zdjn-common-utils@latest
24
- ```
25
-
26
- **注意**:版本更新可能包含新增的报警类型或功能优化,建议每次更新后查看版本日志。
27
-
28
- ## 使用
29
-
30
- ```typescript
31
- import { parseSystemAlarmBits, SystemAlarmType } from 'zdjn-common-utils';
32
-
33
- // 解析位标志值
34
- const alarms = parseSystemAlarmBits(5); // bit0 + bit2 = 1 + 4 = 5
35
-
36
- console.log(alarms);
37
- // 输出: [
38
- // '供水温度上限报警',
39
- // '供水温度传感器断线报警'
40
- // ]
41
-
42
- // 检查特定报警类型
43
- const hasAlarm = alarms.includes(SystemAlarmType.WaterSupplyTempHigh);
44
- console.log(hasAlarm); // true
45
- ```
46
-
47
- ## API
48
-
49
- ### SystemAlarmType
50
-
51
- 系统报警类型枚举:
52
-
53
- - `WaterSupplyTempHigh` - 供水温度上限报警
54
- - `WaterSupplyTempLow` - 供水温度下限报警
55
- - `WaterSupplyTempSensorBreak` - 供水温度传感器断线报警
56
- - `WaterSupplyTempStatus` - 供水温度状态报警
57
- - `ReturnWaterTempHigh` - 回水温度上限报警
58
- - `ReturnWaterTempLow` - 回水温度下限报警
59
- - `ReturnWaterTempSensorBreak` - 回水温度传感器断线报警
60
- - `ReturnWaterTempStatus` - 回水温度状态报警
61
- - `ElectromagneticFlowmeterFault` - 电磁流量计连接故障
62
- - `ExcitationAlarm` - 励磁报警
63
- - `EmptyPipeAlarm` - 空管报警
64
- - `BatteryVoltageFault` - 电池电压故障
65
- - `SystemAlarm` - 系统报警
66
-
67
- ### parseSystemAlarmBits(bitValue)
68
-
69
- 解析系统报警位标志值,返回激活的报警类型数组。
70
-
71
- **参数:**
72
- - `bitValue` (number): 位标志值,每个 bit 代表一种报警状态
73
-
74
- **返回值:**
75
- - `SystemAlarmType[]`: 激活的报警类型数组
76
-
77
- **示例:**
78
-
79
- ```typescript
80
- // 单个报警
81
- parseSystemAlarmBits(1); // ['供水温度上限报警']
82
-
83
- // 多个报警
84
- parseSystemAlarmBits(7); // bit0 + bit1 + bit2
85
- // ['供水温度上限报警', '供水温度下限报警', '供水温度传感器断线报警']
86
-
87
- // 所有报警
88
- parseSystemAlarmBits(8191); // 所有位都为1
89
- ```
90
-
91
- ## 位标志说明
92
-
93
- | | 值 | 报警类型 |
94
- |---|---|---|
95
- | bit0 | 1 | 供水温度上限报警 |
96
- | bit1 | 2 | 供水温度下限报警 |
97
- | bit2 | 4 | 供水温度传感器断线报警 |
98
- | bit3 | 8 | 供水温度状态报警 |
99
- | bit4 | 16 | 回水温度上限报警 |
100
- | bit5 | 32 | 回水温度下限报警 |
101
- | bit6 | 64 | 回水温度传感器断线报警 |
102
- | bit7 | 128 | 回水温度状态报警 |
103
- | bit8 | 256 | 电磁流量计连接故障 |
104
- | bit9 | 512 | 励磁报警 |
105
- | bit10 | 1024 | 空管报警 |
106
- | bit11 | 2048 | 电池电压故障 |
107
- | bit12 | 4096 | 系统报警 |
108
-
109
- ## 类型定义
110
-
111
- 完整的 TypeScript 类型支持,无需额外配置。
112
-
113
- ## 许可证
114
-
115
- MIT
1
+ # zdjn-common-utils
2
+
3
+ 中电节能通用工具库(TypeScript)。
4
+
5
+ 当前包含两类能力:
6
+
7
+ - 系统报警位解析(bit0-bit12)
8
+ - 仪表故障代码解析(bit0-bit4,支持按品牌映射原始报警项)
9
+
10
+ ## 安装
11
+
12
+ ```bash
13
+ npm install zdjn-common-utils
14
+ ```
15
+
16
+ ## 使用
17
+
18
+ ### 1) 系统报警位解析
19
+
20
+ ```typescript
21
+ import { parseSystemAlarmBits, SystemAlarmType } from 'zdjn-common-utils';
22
+
23
+ const alarms = parseSystemAlarmBits(5); // bit0 + bit2
24
+ // ['供水温度上限报警', '供水温度传感器断线报警']
25
+
26
+ const hasAlarm = alarms.includes(SystemAlarmType.WaterSupplyTempHigh);
27
+ // true
28
+ ```
29
+
30
+ ### 2) 仪表故障代码解析
31
+
32
+ ```typescript
33
+ import {
34
+ MeterBrand,
35
+ MeterFaultCodeType,
36
+ parseMeterFaultCodeBits,
37
+ parseMeterFaultCodeByBrand,
38
+ hasMeterFaultCode,
39
+ parseMeterFaultCodeDetails
40
+ } from 'zdjn-common-utils';
41
+
42
+ const standardFaults = parseMeterFaultCodeBits(7); // bit0 + bit1 + bit2
43
+ // ['供水温度报警', '回水温度报警', '励磁报警']
44
+
45
+ const aikeRawFaults = parseMeterFaultCodeByBrand(7, MeterBrand.Aike);
46
+ // ['T1上限报警', 'T1下限报警', 'T1传感器连接故障', 'T2上限报警', 'T2下限报警', 'T2传感器连接故障', '电磁流量计连接故障']
47
+
48
+ const hasSystemFault = hasMeterFaultCode(16, MeterFaultCodeType.SystemAlarm);
49
+ // true
50
+
51
+ const details = parseMeterFaultCodeDetails(18); // bit1 + bit4
52
+ // [{ bit: 1, ... }, { bit: 4, ... }]
53
+ ```
54
+
55
+ ## API
56
+
57
+ ### 系统报警模块
58
+
59
+ #### `SystemAlarmType`
60
+
61
+ - `WaterSupplyTempHigh` - 供水温度上限报警
62
+ - `WaterSupplyTempLow` - 供水温度下限报警
63
+ - `WaterSupplyTempSensorBreak` - 供水温度传感器断线报警
64
+ - `WaterSupplyTempStatus` - 供水温度状态报警
65
+ - `ReturnWaterTempHigh` - 回水温度上限报警
66
+ - `ReturnWaterTempLow` - 回水温度下限报警
67
+ - `ReturnWaterTempSensorBreak` - 回水温度传感器断线报警
68
+ - `ReturnWaterTempStatus` - 回水温度状态报警
69
+ - `ExcitationAlarm` - 励磁报警
70
+ - `ElectromagneticFlowmeterFault` - 电磁流量计连接故障
71
+ - `EmptyPipeAlarm` - 空管报警
72
+ - `BatteryVoltageFault` - 电池电压故障
73
+ - `SystemAlarm` - 系统报警
74
+
75
+ #### `parseSystemAlarmBits(bitValue: number): SystemAlarmType[]`
76
+
77
+ 解析系统报警位标志值,返回激活的报警类型数组。
78
+
79
+ ### 仪表故障代码模块
80
+
81
+ #### `MeterBrand`
82
+
83
+ - `Aike` - 艾科
84
+ - `Tianchuangda` - 天创达
85
+ - `Yuanpai` - 源牌
86
+
87
+ #### `MeterFaultCodeType`
88
+
89
+ - `WaterSupplyTempAlarm` - 供水温度报警
90
+ - `ReturnWaterTempAlarm` - 回水温度报警
91
+ - `ExcitationAlarm` - 励磁报警
92
+ - `EmptyPipeAlarm` - 空管报警
93
+ - `SystemAlarm` - 系统报警
94
+
95
+ #### `parseMeterFaultCodeBits(code: number): MeterFaultCodeType[]`
96
+
97
+ 解析故障代码位标志,返回标准故障项。
98
+
99
+ #### `parseMeterFaultCodeByBrand(code: number, brand: MeterBrand): string[]`
100
+
101
+ 按品牌解析故障代码,返回该品牌原始报警项。
102
+
103
+ #### `hasMeterFaultCode(code: number, type: MeterFaultCodeType): boolean`
104
+
105
+ 判断故障代码是否命中某个标准故障项。
106
+
107
+ #### `parseMeterFaultCodeDetails(code: number)`
108
+
109
+ 解析故障代码详细信息,返回包含 `bit`、标准故障项、品牌原始报警映射的数组。
110
+
111
+ ## 位定义
112
+
113
+ ### 系统报警位(bit0-bit12)
114
+
115
+ | 位 | 值 | 报警类型 |
116
+ |---|---|---|
117
+ | bit0 | 1 | 供水温度上限报警 |
118
+ | bit1 | 2 | 供水温度下限报警 |
119
+ | bit2 | 4 | 供水温度传感器断线报警 |
120
+ | bit3 | 8 | 供水温度状态报警 |
121
+ | bit4 | 16 | 回水温度上限报警 |
122
+ | bit5 | 32 | 回水温度下限报警 |
123
+ | bit6 | 64 | 回水温度传感器断线报警 |
124
+ | bit7 | 128 | 回水温度状态报警 |
125
+ | bit8 | 256 | 电磁流量计连接故障 |
126
+ | bit9 | 512 | 励磁报警 |
127
+ | bit10 | 1024 | 空管报警 |
128
+ | bit11 | 2048 | 电池电压故障 |
129
+ | bit12 | 4096 | 系统报警 |
130
+
131
+ ### 仪表故障代码位(bit0-bit4)
132
+
133
+ | 位 | 值 | 标准故障项 |
134
+ |---|---|---|
135
+ | bit0 | 1 | 供水温度报警 |
136
+ | bit1 | 2 | 回水温度报警 |
137
+ | bit2 | 4 | 励磁报警 |
138
+ | bit3 | 8 | 空管报警 |
139
+ | bit4 | 16 | 系统报警 |
140
+
141
+ ## 项目结构
142
+
143
+ ```text
144
+ src/
145
+ index.ts
146
+ system-alarms/
147
+ index.ts
148
+ system-alarm.ts
149
+ fault-codes/
150
+ index.ts
151
+ meter-fault-code.ts
152
+ ```
153
+
154
+ ## 许可证
155
+
156
+ MIT
@@ -0,0 +1,2 @@
1
+ export * from './meter-fault-code.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fault-codes/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./meter-fault-code.js"), exports);
@@ -0,0 +1,28 @@
1
+ export declare enum MeterBrand {
2
+ Aike = "\u827E\u79D1",
3
+ Tianchuangda = "\u5929\u521B\u8FBE",
4
+ Yuanpai = "\u6E90\u724C"
5
+ }
6
+ export declare enum MeterFaultCodeType {
7
+ WaterSupplyTempAlarm = "\u4F9B\u6C34\u6E29\u5EA6\u62A5\u8B66",
8
+ ReturnWaterTempAlarm = "\u56DE\u6C34\u6E29\u5EA6\u62A5\u8B66",
9
+ ExcitationAlarm = "\u52B1\u78C1\u62A5\u8B66",
10
+ EmptyPipeAlarm = "\u7A7A\u7BA1\u62A5\u8B66",
11
+ SystemAlarm = "\u7CFB\u7EDF\u62A5\u8B66"
12
+ }
13
+ export interface MeterFaultCodeDefinition {
14
+ bit: number;
15
+ type: MeterFaultCodeType;
16
+ rawAlarmsByBrand: Partial<Record<MeterBrand, readonly string[]>>;
17
+ }
18
+ export interface ParsedMeterFaultCodeDetail {
19
+ bit: number;
20
+ type: MeterFaultCodeType;
21
+ rawAlarmsByBrand: Partial<Record<MeterBrand, readonly string[]>>;
22
+ }
23
+ export declare const METER_FAULT_CODE_DEFINITIONS: readonly MeterFaultCodeDefinition[];
24
+ export declare function parseMeterFaultCodeBits(code: number): MeterFaultCodeType[];
25
+ export declare function parseMeterFaultCodeByBrand(code: number, brand: MeterBrand): string[];
26
+ export declare function hasMeterFaultCode(code: number, type: MeterFaultCodeType): boolean;
27
+ export declare function parseMeterFaultCodeDetails(code: number): ParsedMeterFaultCodeDetail[];
28
+ //# sourceMappingURL=meter-fault-code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meter-fault-code.d.ts","sourceRoot":"","sources":["../../src/fault-codes/meter-fault-code.ts"],"names":[],"mappings":"AAGA,oBAAY,UAAU;IACpB,IAAI,iBAAO;IACX,YAAY,uBAAQ;IACpB,OAAO,iBAAO;CACf;AAKD,oBAAY,kBAAkB;IAC5B,oBAAoB,yCAAW;IAC/B,oBAAoB,yCAAW;IAC/B,eAAe,6BAAS;IACxB,cAAc,6BAAS;IACvB,WAAW,6BAAS;CACrB;AAED,MAAM,WAAW,wBAAwB;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,kBAAkB,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;CAClE;AAED,MAAM,WAAW,0BAA0B;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,kBAAkB,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;CAClE;AAKD,eAAO,MAAM,4BAA4B,EAAE,SAAS,wBAAwB,EA2C3E,CAAC;AAOF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAW1E;AAKD,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE,CAkBpF;AAKD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAEjF;AAKD,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,0BAA0B,EAAE,CAmBrF"}
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.METER_FAULT_CODE_DEFINITIONS = exports.MeterFaultCodeType = exports.MeterBrand = void 0;
4
+ exports.parseMeterFaultCodeBits = parseMeterFaultCodeBits;
5
+ exports.parseMeterFaultCodeByBrand = parseMeterFaultCodeByBrand;
6
+ exports.hasMeterFaultCode = hasMeterFaultCode;
7
+ exports.parseMeterFaultCodeDetails = parseMeterFaultCodeDetails;
8
+ var MeterBrand;
9
+ (function (MeterBrand) {
10
+ MeterBrand["Aike"] = "\u827E\u79D1";
11
+ MeterBrand["Tianchuangda"] = "\u5929\u521B\u8FBE";
12
+ MeterBrand["Yuanpai"] = "\u6E90\u724C";
13
+ })(MeterBrand || (exports.MeterBrand = MeterBrand = {}));
14
+ var MeterFaultCodeType;
15
+ (function (MeterFaultCodeType) {
16
+ MeterFaultCodeType["WaterSupplyTempAlarm"] = "\u4F9B\u6C34\u6E29\u5EA6\u62A5\u8B66";
17
+ MeterFaultCodeType["ReturnWaterTempAlarm"] = "\u56DE\u6C34\u6E29\u5EA6\u62A5\u8B66";
18
+ MeterFaultCodeType["ExcitationAlarm"] = "\u52B1\u78C1\u62A5\u8B66";
19
+ MeterFaultCodeType["EmptyPipeAlarm"] = "\u7A7A\u7BA1\u62A5\u8B66";
20
+ MeterFaultCodeType["SystemAlarm"] = "\u7CFB\u7EDF\u62A5\u8B66";
21
+ })(MeterFaultCodeType || (exports.MeterFaultCodeType = MeterFaultCodeType = {}));
22
+ exports.METER_FAULT_CODE_DEFINITIONS = [
23
+ {
24
+ bit: 0,
25
+ type: MeterFaultCodeType.WaterSupplyTempAlarm,
26
+ rawAlarmsByBrand: {
27
+ [MeterBrand.Aike]: ['T1上限报警', 'T1下限报警', 'T1传感器连接故障'],
28
+ [MeterBrand.Tianchuangda]: ['供水温度上限报警', '供水温度下限报警', '进温断线报警'],
29
+ [MeterBrand.Yuanpai]: ['供水温度断线报警', '供水温度状态报警']
30
+ }
31
+ },
32
+ {
33
+ bit: 1,
34
+ type: MeterFaultCodeType.ReturnWaterTempAlarm,
35
+ rawAlarmsByBrand: {
36
+ [MeterBrand.Aike]: ['T2上限报警', 'T2下限报警', 'T2传感器连接故障'],
37
+ [MeterBrand.Tianchuangda]: ['回水温度上限报警', '回水温度下限报警', '出温断线报警'],
38
+ [MeterBrand.Yuanpai]: ['回水温度断线报警', '回水水温度状态报警']
39
+ }
40
+ },
41
+ {
42
+ bit: 2,
43
+ type: MeterFaultCodeType.ExcitationAlarm,
44
+ rawAlarmsByBrand: {
45
+ [MeterBrand.Aike]: ['电磁流量计连接故障'],
46
+ [MeterBrand.Yuanpai]: ['励磁报警']
47
+ }
48
+ },
49
+ {
50
+ bit: 3,
51
+ type: MeterFaultCodeType.EmptyPipeAlarm,
52
+ rawAlarmsByBrand: {
53
+ [MeterBrand.Tianchuangda]: ['空管报警'],
54
+ [MeterBrand.Yuanpai]: ['空管报警']
55
+ }
56
+ },
57
+ {
58
+ bit: 4,
59
+ type: MeterFaultCodeType.SystemAlarm,
60
+ rawAlarmsByBrand: {
61
+ [MeterBrand.Aike]: ['电池电压故障'],
62
+ [MeterBrand.Tianchuangda]: ['系统报警']
63
+ }
64
+ }
65
+ ];
66
+ const MAX_FAULT_BIT = 4;
67
+ function parseMeterFaultCodeBits(code) {
68
+ const alarms = [];
69
+ for (const definition of exports.METER_FAULT_CODE_DEFINITIONS) {
70
+ const mask = 1 << definition.bit;
71
+ if ((code & mask) !== 0) {
72
+ alarms.push(definition.type);
73
+ }
74
+ }
75
+ return alarms;
76
+ }
77
+ function parseMeterFaultCodeByBrand(code, brand) {
78
+ const alarms = new Set();
79
+ for (const definition of exports.METER_FAULT_CODE_DEFINITIONS) {
80
+ const mask = 1 << definition.bit;
81
+ if ((code & mask) === 0) {
82
+ continue;
83
+ }
84
+ const rawAlarms = definition.rawAlarmsByBrand[brand];
85
+ if (!rawAlarms) {
86
+ continue;
87
+ }
88
+ rawAlarms.forEach((alarm) => alarms.add(alarm));
89
+ }
90
+ return Array.from(alarms);
91
+ }
92
+ function hasMeterFaultCode(code, type) {
93
+ return parseMeterFaultCodeBits(code).includes(type);
94
+ }
95
+ function parseMeterFaultCodeDetails(code) {
96
+ const details = [];
97
+ for (const definition of exports.METER_FAULT_CODE_DEFINITIONS) {
98
+ if (definition.bit < 0 || definition.bit > MAX_FAULT_BIT) {
99
+ continue;
100
+ }
101
+ const mask = 1 << definition.bit;
102
+ if ((code & mask) !== 0) {
103
+ details.push({
104
+ bit: definition.bit,
105
+ type: definition.type,
106
+ rawAlarmsByBrand: definition.rawAlarmsByBrand
107
+ });
108
+ }
109
+ }
110
+ return details;
111
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=meter-fault-code.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meter-fault-code.test.d.ts","sourceRoot":"","sources":["../../src/fault-codes/meter-fault-code.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_test_1 = require("node:test");
7
+ const node_assert_1 = __importDefault(require("node:assert"));
8
+ const meter_fault_code_js_1 = require("./meter-fault-code.js");
9
+ (0, node_test_1.describe)('meter fault code parser', () => {
10
+ (0, node_test_1.it)('应该正确解析标准故障项 bit0-bit4', () => {
11
+ const result = (0, meter_fault_code_js_1.parseMeterFaultCodeBits)(31);
12
+ node_assert_1.default.deepStrictEqual(result, [
13
+ meter_fault_code_js_1.MeterFaultCodeType.WaterSupplyTempAlarm,
14
+ meter_fault_code_js_1.MeterFaultCodeType.ReturnWaterTempAlarm,
15
+ meter_fault_code_js_1.MeterFaultCodeType.ExcitationAlarm,
16
+ meter_fault_code_js_1.MeterFaultCodeType.EmptyPipeAlarm,
17
+ meter_fault_code_js_1.MeterFaultCodeType.SystemAlarm
18
+ ]);
19
+ });
20
+ (0, node_test_1.it)('应该按品牌解析艾科原始报警项', () => {
21
+ const result = (0, meter_fault_code_js_1.parseMeterFaultCodeByBrand)(7, meter_fault_code_js_1.MeterBrand.Aike);
22
+ node_assert_1.default.deepStrictEqual(result, [
23
+ 'T1上限报警',
24
+ 'T1下限报警',
25
+ 'T1传感器连接故障',
26
+ 'T2上限报警',
27
+ 'T2下限报警',
28
+ 'T2传感器连接故障',
29
+ '电磁流量计连接故障'
30
+ ]);
31
+ });
32
+ (0, node_test_1.it)('应该按品牌解析天创达原始报警项', () => {
33
+ const result = (0, meter_fault_code_js_1.parseMeterFaultCodeByBrand)(25, meter_fault_code_js_1.MeterBrand.Tianchuangda);
34
+ node_assert_1.default.deepStrictEqual(result, [
35
+ '供水温度上限报警',
36
+ '供水温度下限报警',
37
+ '进温断线报警',
38
+ '空管报警',
39
+ '系统报警'
40
+ ]);
41
+ });
42
+ (0, node_test_1.it)('应该按品牌解析源牌原始报警项', () => {
43
+ const result = (0, meter_fault_code_js_1.parseMeterFaultCodeByBrand)(6, meter_fault_code_js_1.MeterBrand.Yuanpai);
44
+ node_assert_1.default.deepStrictEqual(result, ['回水温度断线报警', '回水水温度状态报警', '励磁报警']);
45
+ });
46
+ (0, node_test_1.it)('应该正确判断是否命中某故障项', () => {
47
+ node_assert_1.default.strictEqual((0, meter_fault_code_js_1.hasMeterFaultCode)(16, meter_fault_code_js_1.MeterFaultCodeType.SystemAlarm), true);
48
+ node_assert_1.default.strictEqual((0, meter_fault_code_js_1.hasMeterFaultCode)(16, meter_fault_code_js_1.MeterFaultCodeType.EmptyPipeAlarm), false);
49
+ });
50
+ (0, node_test_1.it)('应该返回故障代码详细信息', () => {
51
+ const result = (0, meter_fault_code_js_1.parseMeterFaultCodeDetails)(18);
52
+ node_assert_1.default.strictEqual(result.length, 2);
53
+ node_assert_1.default.deepStrictEqual(result.map((item) => item.bit), [1, 4]);
54
+ node_assert_1.default.deepStrictEqual(result.map((item) => item.type), [
55
+ meter_fault_code_js_1.MeterFaultCodeType.ReturnWaterTempAlarm,
56
+ meter_fault_code_js_1.MeterFaultCodeType.SystemAlarm
57
+ ]);
58
+ });
59
+ });
package/dist/index.d.ts CHANGED
@@ -1,17 +1,3 @@
1
- export declare enum SystemAlarmType {
2
- WaterSupplyTempHigh = "\u4F9B\u6C34\u6E29\u5EA6\u4E0A\u9650\u62A5\u8B66",
3
- WaterSupplyTempLow = "\u4F9B\u6C34\u6E29\u5EA6\u4E0B\u9650\u62A5\u8B66",
4
- WaterSupplyTempSensorBreak = "\u4F9B\u6C34\u6E29\u5EA6\u4F20\u611F\u5668\u65AD\u7EBF\u62A5\u8B66",
5
- WaterSupplyTempStatus = "\u4F9B\u6C34\u6E29\u5EA6\u72B6\u6001\u62A5\u8B66",
6
- ReturnWaterTempHigh = "\u56DE\u6C34\u6E29\u5EA6\u4E0A\u9650\u62A5\u8B66",
7
- ReturnWaterTempLow = "\u56DE\u6C34\u6E29\u5EA6\u4E0B\u9650\u62A5\u8B66",
8
- ReturnWaterTempSensorBreak = "\u56DE\u6C34\u6E29\u5EA6\u4F20\u611F\u5668\u65AD\u7EBF\u62A5\u8B66",
9
- ReturnWaterTempStatus = "\u56DE\u6C34\u6E29\u5EA6\u72B6\u6001\u62A5\u8B66",
10
- ElectromagneticFlowmeterFault = "\u7535\u78C1\u6D41\u91CF\u8BA1\u8FDE\u63A5\u6545\u969C",
11
- ExcitationAlarm = "\u52B1\u78C1\u62A5\u8B66",
12
- EmptyPipeAlarm = "\u7A7A\u7BA1\u62A5\u8B66",
13
- BatteryVoltageFault = "\u7535\u6C60\u7535\u538B\u6545\u969C",
14
- SystemAlarm = "\u7CFB\u7EDF\u62A5\u8B66"
15
- }
16
- export declare function parseSystemAlarmBits(bitValue: number): SystemAlarmType[];
1
+ export * from './system-alarms/index.js';
2
+ export * from './fault-codes/index.js';
17
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,oBAAY,eAAe;IACzB,mBAAmB,qDAAa;IAChC,kBAAkB,qDAAa;IAC/B,0BAA0B,uEAAgB;IAC1C,qBAAqB,qDAAa;IAClC,mBAAmB,qDAAa;IAChC,kBAAkB,qDAAa;IAC/B,0BAA0B,uEAAgB;IAC1C,qBAAqB,qDAAa;IAClC,6BAA6B,2DAAc;IAC3C,eAAe,6BAAS;IACxB,cAAc,6BAAS;IACvB,mBAAmB,yCAAW;IAC9B,WAAW,6BAAS;CACrB;AA0BD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE,CAaxE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC"}
package/dist/index.js CHANGED
@@ -1,47 +1,18 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SystemAlarmType = void 0;
4
- exports.parseSystemAlarmBits = parseSystemAlarmBits;
5
- var SystemAlarmType;
6
- (function (SystemAlarmType) {
7
- SystemAlarmType["WaterSupplyTempHigh"] = "\u4F9B\u6C34\u6E29\u5EA6\u4E0A\u9650\u62A5\u8B66";
8
- SystemAlarmType["WaterSupplyTempLow"] = "\u4F9B\u6C34\u6E29\u5EA6\u4E0B\u9650\u62A5\u8B66";
9
- SystemAlarmType["WaterSupplyTempSensorBreak"] = "\u4F9B\u6C34\u6E29\u5EA6\u4F20\u611F\u5668\u65AD\u7EBF\u62A5\u8B66";
10
- SystemAlarmType["WaterSupplyTempStatus"] = "\u4F9B\u6C34\u6E29\u5EA6\u72B6\u6001\u62A5\u8B66";
11
- SystemAlarmType["ReturnWaterTempHigh"] = "\u56DE\u6C34\u6E29\u5EA6\u4E0A\u9650\u62A5\u8B66";
12
- SystemAlarmType["ReturnWaterTempLow"] = "\u56DE\u6C34\u6E29\u5EA6\u4E0B\u9650\u62A5\u8B66";
13
- SystemAlarmType["ReturnWaterTempSensorBreak"] = "\u56DE\u6C34\u6E29\u5EA6\u4F20\u611F\u5668\u65AD\u7EBF\u62A5\u8B66";
14
- SystemAlarmType["ReturnWaterTempStatus"] = "\u56DE\u6C34\u6E29\u5EA6\u72B6\u6001\u62A5\u8B66";
15
- SystemAlarmType["ElectromagneticFlowmeterFault"] = "\u7535\u78C1\u6D41\u91CF\u8BA1\u8FDE\u63A5\u6545\u969C";
16
- SystemAlarmType["ExcitationAlarm"] = "\u52B1\u78C1\u62A5\u8B66";
17
- SystemAlarmType["EmptyPipeAlarm"] = "\u7A7A\u7BA1\u62A5\u8B66";
18
- SystemAlarmType["BatteryVoltageFault"] = "\u7535\u6C60\u7535\u538B\u6545\u969C";
19
- SystemAlarmType["SystemAlarm"] = "\u7CFB\u7EDF\u62A5\u8B66";
20
- })(SystemAlarmType || (exports.SystemAlarmType = SystemAlarmType = {}));
21
- const ALARM_BIT_MAP = {
22
- 0: SystemAlarmType.WaterSupplyTempHigh,
23
- 1: SystemAlarmType.WaterSupplyTempLow,
24
- 2: SystemAlarmType.WaterSupplyTempSensorBreak,
25
- 3: SystemAlarmType.WaterSupplyTempStatus,
26
- 4: SystemAlarmType.ReturnWaterTempHigh,
27
- 5: SystemAlarmType.ReturnWaterTempLow,
28
- 6: SystemAlarmType.ReturnWaterTempSensorBreak,
29
- 7: SystemAlarmType.ReturnWaterTempStatus,
30
- 8: SystemAlarmType.ElectromagneticFlowmeterFault,
31
- 9: SystemAlarmType.ExcitationAlarm,
32
- 10: SystemAlarmType.EmptyPipeAlarm,
33
- 11: SystemAlarmType.BatteryVoltageFault,
34
- 12: SystemAlarmType.SystemAlarm
35
- };
36
- function parseSystemAlarmBits(bitValue) {
37
- const alarms = [];
38
- for (let bit = 0; bit <= 12; bit++) {
39
- const mask = 1 << bit;
40
- if ((bitValue & mask) !== 0) {
41
- if (ALARM_BIT_MAP[bit]) {
42
- alarms.push(ALARM_BIT_MAP[bit]);
43
- }
44
- }
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
45
7
  }
46
- return alarms;
47
- }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./system-alarms/index.js"), exports);
18
+ __exportStar(require("./fault-codes/index.js"), exports);
@@ -0,0 +1,2 @@
1
+ export * from './system-alarm.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/system-alarms/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./system-alarm.js"), exports);
@@ -0,0 +1,17 @@
1
+ export declare enum SystemAlarmType {
2
+ WaterSupplyTempHigh = "\u4F9B\u6C34\u6E29\u5EA6\u4E0A\u9650\u62A5\u8B66",
3
+ WaterSupplyTempLow = "\u4F9B\u6C34\u6E29\u5EA6\u4E0B\u9650\u62A5\u8B66",
4
+ WaterSupplyTempSensorBreak = "\u4F9B\u6C34\u6E29\u5EA6\u4F20\u611F\u5668\u65AD\u7EBF\u62A5\u8B66",
5
+ WaterSupplyTempStatus = "\u4F9B\u6C34\u6E29\u5EA6\u72B6\u6001\u62A5\u8B66",
6
+ ReturnWaterTempHigh = "\u56DE\u6C34\u6E29\u5EA6\u4E0A\u9650\u62A5\u8B66",
7
+ ReturnWaterTempLow = "\u56DE\u6C34\u6E29\u5EA6\u4E0B\u9650\u62A5\u8B66",
8
+ ReturnWaterTempSensorBreak = "\u56DE\u6C34\u6E29\u5EA6\u4F20\u611F\u5668\u65AD\u7EBF\u62A5\u8B66",
9
+ ReturnWaterTempStatus = "\u56DE\u6C34\u6E29\u5EA6\u72B6\u6001\u62A5\u8B66",
10
+ ElectromagneticFlowmeterFault = "\u7535\u78C1\u6D41\u91CF\u8BA1\u8FDE\u63A5\u6545\u969C",
11
+ ExcitationAlarm = "\u52B1\u78C1\u62A5\u8B66",
12
+ EmptyPipeAlarm = "\u7A7A\u7BA1\u62A5\u8B66",
13
+ BatteryVoltageFault = "\u7535\u6C60\u7535\u538B\u6545\u969C",
14
+ SystemAlarm = "\u7CFB\u7EDF\u62A5\u8B66"
15
+ }
16
+ export declare function parseSystemAlarmBits(bitValue: number): SystemAlarmType[];
17
+ //# sourceMappingURL=system-alarm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-alarm.d.ts","sourceRoot":"","sources":["../../src/system-alarms/system-alarm.ts"],"names":[],"mappings":"AAGA,oBAAY,eAAe;IACzB,mBAAmB,qDAAa;IAChC,kBAAkB,qDAAa;IAC/B,0BAA0B,uEAAgB;IAC1C,qBAAqB,qDAAa;IAClC,mBAAmB,qDAAa;IAChC,kBAAkB,qDAAa;IAC/B,0BAA0B,uEAAgB;IAC1C,qBAAqB,qDAAa;IAClC,6BAA6B,2DAAc;IAC3C,eAAe,6BAAS;IACxB,cAAc,6BAAS;IACvB,mBAAmB,yCAAW;IAC9B,WAAW,6BAAS;CACrB;AA0BD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE,CAaxE"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SystemAlarmType = void 0;
4
+ exports.parseSystemAlarmBits = parseSystemAlarmBits;
5
+ var SystemAlarmType;
6
+ (function (SystemAlarmType) {
7
+ SystemAlarmType["WaterSupplyTempHigh"] = "\u4F9B\u6C34\u6E29\u5EA6\u4E0A\u9650\u62A5\u8B66";
8
+ SystemAlarmType["WaterSupplyTempLow"] = "\u4F9B\u6C34\u6E29\u5EA6\u4E0B\u9650\u62A5\u8B66";
9
+ SystemAlarmType["WaterSupplyTempSensorBreak"] = "\u4F9B\u6C34\u6E29\u5EA6\u4F20\u611F\u5668\u65AD\u7EBF\u62A5\u8B66";
10
+ SystemAlarmType["WaterSupplyTempStatus"] = "\u4F9B\u6C34\u6E29\u5EA6\u72B6\u6001\u62A5\u8B66";
11
+ SystemAlarmType["ReturnWaterTempHigh"] = "\u56DE\u6C34\u6E29\u5EA6\u4E0A\u9650\u62A5\u8B66";
12
+ SystemAlarmType["ReturnWaterTempLow"] = "\u56DE\u6C34\u6E29\u5EA6\u4E0B\u9650\u62A5\u8B66";
13
+ SystemAlarmType["ReturnWaterTempSensorBreak"] = "\u56DE\u6C34\u6E29\u5EA6\u4F20\u611F\u5668\u65AD\u7EBF\u62A5\u8B66";
14
+ SystemAlarmType["ReturnWaterTempStatus"] = "\u56DE\u6C34\u6E29\u5EA6\u72B6\u6001\u62A5\u8B66";
15
+ SystemAlarmType["ElectromagneticFlowmeterFault"] = "\u7535\u78C1\u6D41\u91CF\u8BA1\u8FDE\u63A5\u6545\u969C";
16
+ SystemAlarmType["ExcitationAlarm"] = "\u52B1\u78C1\u62A5\u8B66";
17
+ SystemAlarmType["EmptyPipeAlarm"] = "\u7A7A\u7BA1\u62A5\u8B66";
18
+ SystemAlarmType["BatteryVoltageFault"] = "\u7535\u6C60\u7535\u538B\u6545\u969C";
19
+ SystemAlarmType["SystemAlarm"] = "\u7CFB\u7EDF\u62A5\u8B66";
20
+ })(SystemAlarmType || (exports.SystemAlarmType = SystemAlarmType = {}));
21
+ const ALARM_BIT_MAP = {
22
+ 0: SystemAlarmType.WaterSupplyTempHigh,
23
+ 1: SystemAlarmType.WaterSupplyTempLow,
24
+ 2: SystemAlarmType.WaterSupplyTempSensorBreak,
25
+ 3: SystemAlarmType.WaterSupplyTempStatus,
26
+ 4: SystemAlarmType.ReturnWaterTempHigh,
27
+ 5: SystemAlarmType.ReturnWaterTempLow,
28
+ 6: SystemAlarmType.ReturnWaterTempSensorBreak,
29
+ 7: SystemAlarmType.ReturnWaterTempStatus,
30
+ 8: SystemAlarmType.ElectromagneticFlowmeterFault,
31
+ 9: SystemAlarmType.ExcitationAlarm,
32
+ 10: SystemAlarmType.EmptyPipeAlarm,
33
+ 11: SystemAlarmType.BatteryVoltageFault,
34
+ 12: SystemAlarmType.SystemAlarm
35
+ };
36
+ function parseSystemAlarmBits(bitValue) {
37
+ const alarms = [];
38
+ for (let bit = 0; bit <= 12; bit++) {
39
+ const mask = 1 << bit;
40
+ if ((bitValue & mask) !== 0) {
41
+ if (ALARM_BIT_MAP[bit]) {
42
+ alarms.push(ALARM_BIT_MAP[bit]);
43
+ }
44
+ }
45
+ }
46
+ return alarms;
47
+ }
package/package.json CHANGED
@@ -1,33 +1,33 @@
1
- {
2
- "name": "zdjn-common-utils",
3
- "version": "1.0.0",
4
- "description": "中电节能常用工具库",
5
- "main": "dist/index.js",
6
- "types": "dist/index.d.ts",
7
- "scripts": {
8
- "build": "tsc",
9
- "dev": "tsc --watch",
10
- "prepublishOnly": "npm run build",
11
- "test": "node --test dist/index.test.js"
12
- },
13
- "keywords": [
14
- "utils",
15
- "utilities",
16
- "helper",
17
- "common",
18
- "typescript"
19
- ],
20
- "author": "",
21
- "license": "MIT",
22
- "repository": {
23
- "type": "git",
24
- "url": ""
25
- },
26
- "files": [
27
- "dist"
28
- ],
29
- "devDependencies": {
30
- "@types/node": "^20.11.0",
31
- "typescript": "^5.3.3"
32
- }
33
- }
1
+ {
2
+ "name": "zdjn-common-utils",
3
+ "version": "1.1.0",
4
+ "description": "中电节能常用工具库",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "scripts": {
8
+ "build": "tsc",
9
+ "dev": "tsc --watch",
10
+ "prepublishOnly": "npm run build",
11
+ "test": "node --test \"dist/**/*.test.js\""
12
+ },
13
+ "keywords": [
14
+ "utils",
15
+ "utilities",
16
+ "helper",
17
+ "common",
18
+ "typescript"
19
+ ],
20
+ "author": "江军",
21
+ "license": "MIT",
22
+ "repository": {
23
+ "type": "git",
24
+ "url": ""
25
+ },
26
+ "files": [
27
+ "dist"
28
+ ],
29
+ "devDependencies": {
30
+ "@types/node": "^20.11.0",
31
+ "typescript": "^5.3.3"
32
+ }
33
+ }