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 +156 -115
- package/dist/fault-codes/index.d.ts +2 -0
- package/dist/fault-codes/index.d.ts.map +1 -0
- package/dist/fault-codes/index.js +17 -0
- package/dist/fault-codes/meter-fault-code.d.ts +28 -0
- package/dist/fault-codes/meter-fault-code.d.ts.map +1 -0
- package/dist/fault-codes/meter-fault-code.js +111 -0
- package/dist/fault-codes/meter-fault-code.test.d.ts +2 -0
- package/dist/fault-codes/meter-fault-code.test.d.ts.map +1 -0
- package/dist/fault-codes/meter-fault-code.test.js +59 -0
- package/dist/index.d.ts +2 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -45
- package/dist/system-alarms/index.d.ts +2 -0
- package/dist/system-alarms/index.d.ts.map +1 -0
- package/dist/system-alarms/index.js +17 -0
- package/dist/system-alarms/system-alarm.d.ts +17 -0
- package/dist/system-alarms/system-alarm.d.ts.map +1 -0
- package/dist/system-alarms/system-alarm.js +47 -0
- package/package.json +33 -33
package/README.md
CHANGED
|
@@ -1,115 +1,156 @@
|
|
|
1
|
-
# zdjn-common-utils
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
//
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
- `
|
|
62
|
-
- `
|
|
63
|
-
- `
|
|
64
|
-
- `
|
|
65
|
-
- `
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
- `
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
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 @@
|
|
|
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 @@
|
|
|
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
|
|
2
|
-
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
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.
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
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 @@
|
|
|
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.
|
|
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
|
|
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
|
+
}
|