@cpzxrobot/sdk 1.0.74 → 1.0.76
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/device_filter.ts +56 -7
- package/dist/device_filter.js +56 -1
- package/dist/sensor_datas.js +76 -0
- package/index.ts +1 -1
- package/package.json +1 -1
- package/sensor_datas.ts +82 -0
- package/types.d.ts +32 -11
package/device_filter.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Cpzxrobot, DataQueryArgs } from ".";
|
|
2
2
|
import type { AxiosResponse } from "axios";
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
import { FieldDatas, SensorDatas } from "./sensor_datas";
|
|
5
4
|
|
|
6
5
|
export abstract class DeviceFilter<T extends { id: number }> {
|
|
7
6
|
context: Cpzxrobot;
|
|
@@ -115,7 +114,7 @@ export abstract class DeviceFilter<T extends { id: number }> {
|
|
|
115
114
|
type: "diffPerDay", // diffPerDay, sumPerDay, latest
|
|
116
115
|
}
|
|
117
116
|
) {
|
|
118
|
-
if(!args.period || args.period.endsWith("d")) {
|
|
117
|
+
if (!args.period || args.period.endsWith("d")) {
|
|
119
118
|
if (!args.stop) {
|
|
120
119
|
args.stop = this.formateDateToYYYYMMDD(new Date());
|
|
121
120
|
}
|
|
@@ -124,7 +123,7 @@ export abstract class DeviceFilter<T extends { id: number }> {
|
|
|
124
123
|
sevenDaysAgo.setDate(sevenDaysAgo.getDate() - 7);
|
|
125
124
|
args.start = this.formateDateToYYYYMMDD(sevenDaysAgo);
|
|
126
125
|
}
|
|
127
|
-
}else if(args.period.endsWith("h")) {
|
|
126
|
+
} else if (args.period.endsWith("h")) {
|
|
128
127
|
if (!args.stop) {
|
|
129
128
|
args.stop = new Date().toISOString();
|
|
130
129
|
}
|
|
@@ -135,7 +134,7 @@ export abstract class DeviceFilter<T extends { id: number }> {
|
|
|
135
134
|
}
|
|
136
135
|
}
|
|
137
136
|
|
|
138
|
-
if(!args.type) {
|
|
137
|
+
if (!args.type) {
|
|
139
138
|
args.type = "last";
|
|
140
139
|
}
|
|
141
140
|
|
|
@@ -147,8 +146,58 @@ export abstract class DeviceFilter<T extends { id: number }> {
|
|
|
147
146
|
params: args,
|
|
148
147
|
}
|
|
149
148
|
);
|
|
150
|
-
|
|
151
|
-
|
|
149
|
+
if (args.type == "raw") {
|
|
150
|
+
return p1.then((res: AxiosResponse) => {
|
|
151
|
+
var string = res.data.data as string;
|
|
152
|
+
string = string.replace(/\r/g, "");
|
|
153
|
+
var arr = string.split("\n");
|
|
154
|
+
var inAnnotation = false;
|
|
155
|
+
var dataGroups = new SensorDatas();
|
|
156
|
+
var field: FieldDatas | null = null;
|
|
157
|
+
for (var i = 0; i < arr.length; i++) {
|
|
158
|
+
var values = arr[i].split(",");
|
|
159
|
+
if (arr[i].startsWith("#")) {
|
|
160
|
+
if (!inAnnotation) {
|
|
161
|
+
inAnnotation = true;
|
|
162
|
+
if (field) {
|
|
163
|
+
dataGroups.push(field);
|
|
164
|
+
}
|
|
165
|
+
field = new FieldDatas();
|
|
166
|
+
}
|
|
167
|
+
switch (values[0]) {
|
|
168
|
+
case "#datatype":
|
|
169
|
+
field!.datatypes = values.slice(1);
|
|
170
|
+
break;
|
|
171
|
+
case "#group":
|
|
172
|
+
field!.groups = values
|
|
173
|
+
.slice(1)
|
|
174
|
+
.map((item) => item == "true");
|
|
175
|
+
break;
|
|
176
|
+
case "#default":
|
|
177
|
+
field!.defaults = values.slice(1);
|
|
178
|
+
break;
|
|
179
|
+
default:
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
} else if (arr[i] != "") {
|
|
183
|
+
if (inAnnotation) {
|
|
184
|
+
inAnnotation = false;
|
|
185
|
+
for (var j = 0; j < values.length; j++) {
|
|
186
|
+
field!.columns.set(values[j], j);
|
|
187
|
+
}
|
|
188
|
+
} else {
|
|
189
|
+
field!.values.push(values);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
if (field) {
|
|
194
|
+
dataGroups!.push(field);
|
|
195
|
+
}
|
|
196
|
+
return dataGroups;
|
|
197
|
+
});
|
|
198
|
+
} else {
|
|
199
|
+
return this.wrapData(id, args, p1);
|
|
200
|
+
}
|
|
152
201
|
})
|
|
153
202
|
.then((res: AxiosResponse) => {
|
|
154
203
|
if (res.data.Error) {
|
package/dist/device_filter.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DeviceFilter = void 0;
|
|
4
|
+
const sensor_datas_1 = require("./sensor_datas");
|
|
4
5
|
class DeviceFilter {
|
|
5
6
|
// private getDetail!: (info: T, id: number, context: Shzx) => Promise<any> | null
|
|
6
7
|
// axios: MyAxiosInstance;
|
|
@@ -122,7 +123,61 @@ class DeviceFilter {
|
|
|
122
123
|
const p1 = this.context.axios.get(`/api/v1/device/${id}/data/${args.type}`, {
|
|
123
124
|
params: args,
|
|
124
125
|
});
|
|
125
|
-
|
|
126
|
+
if (args.type == "raw") {
|
|
127
|
+
return p1.then((res) => {
|
|
128
|
+
var string = res.data.data;
|
|
129
|
+
string = string.replace(/\r/g, "");
|
|
130
|
+
var arr = string.split("\n");
|
|
131
|
+
var inAnnotation = false;
|
|
132
|
+
var dataGroups = new sensor_datas_1.SensorDatas();
|
|
133
|
+
var field = null;
|
|
134
|
+
for (var i = 0; i < arr.length; i++) {
|
|
135
|
+
var values = arr[i].split(",");
|
|
136
|
+
if (arr[i].startsWith("#")) {
|
|
137
|
+
if (!inAnnotation) {
|
|
138
|
+
inAnnotation = true;
|
|
139
|
+
if (field) {
|
|
140
|
+
dataGroups.push(field);
|
|
141
|
+
}
|
|
142
|
+
field = new sensor_datas_1.FieldDatas();
|
|
143
|
+
}
|
|
144
|
+
switch (values[0]) {
|
|
145
|
+
case "#datatype":
|
|
146
|
+
field.datatypes = values.slice(1);
|
|
147
|
+
break;
|
|
148
|
+
case "#group":
|
|
149
|
+
field.groups = values
|
|
150
|
+
.slice(1)
|
|
151
|
+
.map((item) => item == "true");
|
|
152
|
+
break;
|
|
153
|
+
case "#default":
|
|
154
|
+
field.defaults = values.slice(1);
|
|
155
|
+
break;
|
|
156
|
+
default:
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
else if (arr[i] != "") {
|
|
161
|
+
if (inAnnotation) {
|
|
162
|
+
inAnnotation = false;
|
|
163
|
+
for (var j = 0; j < values.length; j++) {
|
|
164
|
+
field.columns.set(values[j], j);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
field.values.push(values);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
if (field) {
|
|
173
|
+
dataGroups.push(field);
|
|
174
|
+
}
|
|
175
|
+
return dataGroups;
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
return this.wrapData(id, args, p1);
|
|
180
|
+
}
|
|
126
181
|
})
|
|
127
182
|
.then((res) => {
|
|
128
183
|
if (res.data.Error) {
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SensorDatas = exports.FieldDatas = void 0;
|
|
4
|
+
class FieldDatas {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.datatypes = [];
|
|
7
|
+
this.groups = [];
|
|
8
|
+
this.defaults = [];
|
|
9
|
+
this.values = [];
|
|
10
|
+
this.columns = new Map();
|
|
11
|
+
}
|
|
12
|
+
get length() {
|
|
13
|
+
return this.values.length;
|
|
14
|
+
}
|
|
15
|
+
valuesAt(at) {
|
|
16
|
+
var values = new Map();
|
|
17
|
+
for (var i = 0; i < this.values.length; i++) {
|
|
18
|
+
if (this.values[i][this.columns.get("_time")] == at) {
|
|
19
|
+
var field = this.values[i][this.columns.get("_field")];
|
|
20
|
+
var value = this.values[i][this.columns.get("_value")];
|
|
21
|
+
values.set(field, value);
|
|
22
|
+
break;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return values;
|
|
26
|
+
}
|
|
27
|
+
get fields() {
|
|
28
|
+
var fields = ["time"];
|
|
29
|
+
for (var i = 0; i < this.values.length; i++) {
|
|
30
|
+
var field = this.values[i][this.columns.get("_field")];
|
|
31
|
+
if (fields.indexOf(field) == -1) {
|
|
32
|
+
fields.push(field);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return fields;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.FieldDatas = FieldDatas;
|
|
39
|
+
class SensorDatas {
|
|
40
|
+
constructor() {
|
|
41
|
+
this.data_fields = [];
|
|
42
|
+
}
|
|
43
|
+
push(datas) {
|
|
44
|
+
this.data_fields.push(datas);
|
|
45
|
+
}
|
|
46
|
+
get datas() {
|
|
47
|
+
var datas = [];
|
|
48
|
+
for (var i = 0; i < this.data_fields[0].values.length; i++) {
|
|
49
|
+
var data = {
|
|
50
|
+
time: this.data_fields[0].values[i][this.data_fields[0].columns.get("_time")],
|
|
51
|
+
};
|
|
52
|
+
for (var j = 0; j < this.data_fields.length; j++) {
|
|
53
|
+
var field = this.data_fields[j];
|
|
54
|
+
var values = field.valuesAt(data.time);
|
|
55
|
+
for (let [key, value] of values.entries()) {
|
|
56
|
+
data[key] = value;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
datas.push(data);
|
|
60
|
+
}
|
|
61
|
+
return datas;
|
|
62
|
+
}
|
|
63
|
+
get fields() {
|
|
64
|
+
var fields = [];
|
|
65
|
+
for (var i = 0; i < this.data_fields.length; i++) {
|
|
66
|
+
var subfields = this.data_fields[i].fields;
|
|
67
|
+
for (var j = 0; j < subfields.length; j++) {
|
|
68
|
+
if (fields.indexOf(subfields[j]) == -1) {
|
|
69
|
+
fields.push(subfields[j]);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return fields;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
exports.SensorDatas = SensorDatas;
|
package/index.ts
CHANGED
|
@@ -32,10 +32,10 @@ export class Cpzxrobot {
|
|
|
32
32
|
_getSelectedFarmFromMiniApp!: () => any;
|
|
33
33
|
_getSelectedUnitFromMiniApp!: () => any;
|
|
34
34
|
_jumpToMiniApp!: (url: string) => any;
|
|
35
|
-
scanQrcode!:() => Promise<string>;
|
|
36
35
|
setTitle!: (title: string) => void;
|
|
37
36
|
saveBase64!: (base64: string, filename: string) => void;
|
|
38
37
|
saveBlob!: (blob: Blob, filename: string) => void;
|
|
38
|
+
scanQrcode!:() => Promise<string>;
|
|
39
39
|
vibrate!: (time?: number) => void;
|
|
40
40
|
assistant: AssistantGateway;
|
|
41
41
|
energy: EnergyGateway;
|
package/package.json
CHANGED
package/sensor_datas.ts
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export class FieldDatas {
|
|
2
|
+
datatypes: string[] = [];
|
|
3
|
+
groups: boolean[] = [];
|
|
4
|
+
defaults: string[] = [];
|
|
5
|
+
values: string[][] = [];
|
|
6
|
+
columns: Map<String, number> = new Map();
|
|
7
|
+
|
|
8
|
+
get length() {
|
|
9
|
+
return this.values.length;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
valuesAt(at: string) {
|
|
14
|
+
var values: Map<string, any> = new Map();
|
|
15
|
+
for (var i = 0; i < this.values.length; i++) {
|
|
16
|
+
if (this.values[i][this.columns.get("_time")!] == at) {
|
|
17
|
+
var field = this.values[i][this.columns.get("_field")!];
|
|
18
|
+
var value = this.values[i][this.columns.get("_value")!];
|
|
19
|
+
values.set(field, value);
|
|
20
|
+
break;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return values;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
get fields() {
|
|
27
|
+
var fields: string[] = ["time"];
|
|
28
|
+
for (var i = 0; i < this.values.length; i++) {
|
|
29
|
+
var field = this.values[i][this.columns.get("_field")!];
|
|
30
|
+
if (fields.indexOf(field) == -1) {
|
|
31
|
+
fields.push(field);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return fields;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export class SensorDatas {
|
|
39
|
+
push(datas: FieldDatas) {
|
|
40
|
+
this.data_fields.push(datas);
|
|
41
|
+
}
|
|
42
|
+
data_fields: FieldDatas[] = [];
|
|
43
|
+
|
|
44
|
+
get datas() {
|
|
45
|
+
var datas: {
|
|
46
|
+
time: string;
|
|
47
|
+
[key: string]: any;
|
|
48
|
+
}[] = [];
|
|
49
|
+
for (var i = 0; i < this.data_fields[0].values.length; i++) {
|
|
50
|
+
var data: {
|
|
51
|
+
time: string;
|
|
52
|
+
[key: string]: any;
|
|
53
|
+
} = {
|
|
54
|
+
time: this.data_fields[0].values[i][
|
|
55
|
+
this.data_fields[0].columns.get("_time")!
|
|
56
|
+
],
|
|
57
|
+
};
|
|
58
|
+
for (var j = 0; j < this.data_fields.length; j++) {
|
|
59
|
+
var field = this.data_fields[j];
|
|
60
|
+
var values = field.valuesAt(data.time);
|
|
61
|
+
for (let [key, value] of values.entries()) {
|
|
62
|
+
data[key] = value;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
datas.push(data);
|
|
66
|
+
}
|
|
67
|
+
return datas;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
get fields() {
|
|
71
|
+
var fields: string[] = [];
|
|
72
|
+
for (var i = 0; i < this.data_fields.length; i++) {
|
|
73
|
+
var subfields = this.data_fields[i].fields;
|
|
74
|
+
for (var j = 0; j < subfields.length; j++) {
|
|
75
|
+
if (fields.indexOf(subfields[j]) == -1) {
|
|
76
|
+
fields.push(subfields[j]);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return fields;
|
|
81
|
+
}
|
|
82
|
+
}
|
package/types.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ import { UserGateway } from "@cpzxrobot/sdk/user_gateway";
|
|
|
5
5
|
import { CameraGateway } from "@cpzxrobot/sdk/camera_gateway";
|
|
6
6
|
import { PigfarmGateway } from "@cpzxrobot/sdk/pigfarm_gateway";
|
|
7
7
|
import { UnitGateway } from "@cpzxrobot/sdk//unit_gateway";
|
|
8
|
+
import { FieldDatas } from "./sensor_datas";
|
|
8
9
|
|
|
9
10
|
type Device = {
|
|
10
11
|
id: number;
|
|
@@ -19,7 +20,7 @@ type Device = {
|
|
|
19
20
|
typeCode: string;
|
|
20
21
|
};
|
|
21
22
|
|
|
22
|
-
|
|
23
|
+
type FeedTowerExtraInfo = {
|
|
23
24
|
currentAmount: number;
|
|
24
25
|
loadAmount: number;
|
|
25
26
|
feedTowerAmount: number;
|
|
@@ -29,7 +30,7 @@ export type FeedTowerExtraInfo = {
|
|
|
29
30
|
};
|
|
30
31
|
|
|
31
32
|
//FodderOrder 料单信息
|
|
32
|
-
|
|
33
|
+
type FodderOrder = {
|
|
33
34
|
id?: number;
|
|
34
35
|
fodderId?: string;
|
|
35
36
|
fodderAmount: number;
|
|
@@ -42,7 +43,7 @@ export type FodderOrder = {
|
|
|
42
43
|
type?: string;
|
|
43
44
|
};
|
|
44
45
|
//
|
|
45
|
-
|
|
46
|
+
type FodderOrderList = {
|
|
46
47
|
car: string; //车牌号
|
|
47
48
|
date: string; //日期
|
|
48
49
|
source: string; //来源
|
|
@@ -55,7 +56,7 @@ type FodderOrderInFactory = {
|
|
|
55
56
|
towers: FodderOrderInTower[];
|
|
56
57
|
};
|
|
57
58
|
|
|
58
|
-
|
|
59
|
+
type FodderOrderInTower = {
|
|
59
60
|
name: string; //料塔名称
|
|
60
61
|
unit: string; //单位
|
|
61
62
|
weight: number; //重量
|
|
@@ -67,7 +68,7 @@ type Assistant = {
|
|
|
67
68
|
name: String;
|
|
68
69
|
id: Number;
|
|
69
70
|
};
|
|
70
|
-
|
|
71
|
+
type Factory = {
|
|
71
72
|
code: string;
|
|
72
73
|
name?: string;
|
|
73
74
|
company_code: string;
|
|
@@ -115,6 +116,21 @@ type DeviceConfig = {
|
|
|
115
116
|
type?: string;
|
|
116
117
|
};
|
|
117
118
|
|
|
119
|
+
type FieldDatas = {
|
|
120
|
+
length: number;
|
|
121
|
+
valuesAt(at: string): Map<string, any>;
|
|
122
|
+
fields: string[];
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
type SensorDatas = {
|
|
126
|
+
push: (data: FieldDatas) => void;
|
|
127
|
+
datas: {
|
|
128
|
+
time: string;
|
|
129
|
+
[key: string]: any;
|
|
130
|
+
}[];
|
|
131
|
+
fields: string[];
|
|
132
|
+
};
|
|
133
|
+
|
|
118
134
|
type Electricity = {
|
|
119
135
|
deviceId: string;
|
|
120
136
|
nextDeviceList: number[] | [];
|
|
@@ -219,7 +235,7 @@ type FeedTowerV2 = {
|
|
|
219
235
|
buildTime: string;
|
|
220
236
|
};
|
|
221
237
|
|
|
222
|
-
|
|
238
|
+
type FeedTower = {
|
|
223
239
|
id: number;
|
|
224
240
|
name: string;
|
|
225
241
|
currentAmount: number;
|
|
@@ -237,23 +253,23 @@ export type FeedTower = {
|
|
|
237
253
|
diff: number;
|
|
238
254
|
};
|
|
239
255
|
|
|
240
|
-
|
|
256
|
+
interface MyAxiosInstance {
|
|
241
257
|
get: (url: string, config?: any) => Promise<any>;
|
|
242
258
|
post: (url: string, data?: any, config?: any) => Promise<any>;
|
|
243
259
|
}
|
|
244
260
|
|
|
245
|
-
|
|
261
|
+
interface Assistant {
|
|
246
262
|
info: String;
|
|
247
263
|
status: Number;
|
|
248
264
|
name: String;
|
|
249
265
|
id: Number;
|
|
250
266
|
}
|
|
251
|
-
|
|
267
|
+
interface ElectricMeter extends Device {
|
|
252
268
|
coefficient: number;
|
|
253
269
|
status: string;
|
|
254
270
|
}
|
|
255
271
|
|
|
256
|
-
|
|
272
|
+
interface DataQueryArgs {
|
|
257
273
|
start?: string;
|
|
258
274
|
stop?: string;
|
|
259
275
|
type?:
|
|
@@ -264,13 +280,14 @@ export interface DataQueryArgs {
|
|
|
264
280
|
| "latest"
|
|
265
281
|
| "latestInRangePerDay"
|
|
266
282
|
| "last"
|
|
283
|
+
| "raw"
|
|
267
284
|
| "difference";
|
|
268
285
|
period?: "1mo" | "1d" | null;
|
|
269
286
|
offset?: string; // 可以设置统计偏移量,比如设置18h, 则统计从当天晚上6点开始
|
|
270
287
|
[key: string]: any;
|
|
271
288
|
}
|
|
272
289
|
|
|
273
|
-
|
|
290
|
+
class Cpzxrobot {
|
|
274
291
|
transport: TransportGateway;
|
|
275
292
|
ready: Promise<MyAxiosInstance>;
|
|
276
293
|
factory: FactoryGateway;
|
|
@@ -289,6 +306,8 @@ export class Cpzxrobot {
|
|
|
289
306
|
setTitle: (title: string) => void;
|
|
290
307
|
saveBase64: (base64: string, filename: string) => void;
|
|
291
308
|
saveBlob: (blob: Blob, filename: string) => void;
|
|
309
|
+
scanQrcode: () => Promise<string>;
|
|
310
|
+
vibrate: (time?: number) => void;
|
|
292
311
|
}
|
|
293
312
|
|
|
294
313
|
declare global {
|
|
@@ -339,5 +358,7 @@ declare module "@cpzxrobot/sdk" {
|
|
|
339
358
|
DataQueryArgs,
|
|
340
359
|
HeatLamp,
|
|
341
360
|
DeviceV2,
|
|
361
|
+
FieldDatas,
|
|
362
|
+
SensorDatas,
|
|
342
363
|
};
|
|
343
364
|
}
|