@cpzxrobot/sdk 1.0.74 → 1.0.75
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 +55 -7
- package/dist/device_filter.js +55 -1
- package/dist/sensor_datas.js +72 -0
- package/index.ts +1 -1
- package/package.json +1 -1
- package/sensor_datas.ts +83 -0
- package/types.d.ts +3 -0
package/device_filter.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { Cpzxrobot, DataQueryArgs } from ".";
|
|
2
2
|
import type { AxiosResponse } from "axios";
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
4
|
export abstract class DeviceFilter<T extends { id: number }> {
|
|
7
5
|
context: Cpzxrobot;
|
|
8
6
|
protected devices: T[] = [];
|
|
@@ -115,7 +113,7 @@ export abstract class DeviceFilter<T extends { id: number }> {
|
|
|
115
113
|
type: "diffPerDay", // diffPerDay, sumPerDay, latest
|
|
116
114
|
}
|
|
117
115
|
) {
|
|
118
|
-
if(!args.period || args.period.endsWith("d")) {
|
|
116
|
+
if (!args.period || args.period.endsWith("d")) {
|
|
119
117
|
if (!args.stop) {
|
|
120
118
|
args.stop = this.formateDateToYYYYMMDD(new Date());
|
|
121
119
|
}
|
|
@@ -124,7 +122,7 @@ export abstract class DeviceFilter<T extends { id: number }> {
|
|
|
124
122
|
sevenDaysAgo.setDate(sevenDaysAgo.getDate() - 7);
|
|
125
123
|
args.start = this.formateDateToYYYYMMDD(sevenDaysAgo);
|
|
126
124
|
}
|
|
127
|
-
}else if(args.period.endsWith("h")) {
|
|
125
|
+
} else if (args.period.endsWith("h")) {
|
|
128
126
|
if (!args.stop) {
|
|
129
127
|
args.stop = new Date().toISOString();
|
|
130
128
|
}
|
|
@@ -135,7 +133,7 @@ export abstract class DeviceFilter<T extends { id: number }> {
|
|
|
135
133
|
}
|
|
136
134
|
}
|
|
137
135
|
|
|
138
|
-
if(!args.type) {
|
|
136
|
+
if (!args.type) {
|
|
139
137
|
args.type = "last";
|
|
140
138
|
}
|
|
141
139
|
|
|
@@ -147,8 +145,58 @@ export abstract class DeviceFilter<T extends { id: number }> {
|
|
|
147
145
|
params: args,
|
|
148
146
|
}
|
|
149
147
|
);
|
|
150
|
-
|
|
151
|
-
|
|
148
|
+
if (args.type == "raw") {
|
|
149
|
+
return p1.then((res: AxiosResponse) => {
|
|
150
|
+
var string = res.data.data as string;
|
|
151
|
+
string = string.replace(/\r/g, "");
|
|
152
|
+
var arr = string.split("\n");
|
|
153
|
+
var inAnnotation = false;
|
|
154
|
+
var dataGroups = new SensorDatas();
|
|
155
|
+
var field: FieldDatas | null = null;
|
|
156
|
+
for (var i = 0; i < arr.length; i++) {
|
|
157
|
+
var values = arr[i].split(",");
|
|
158
|
+
if (arr[i].startsWith("#")) {
|
|
159
|
+
if (!inAnnotation) {
|
|
160
|
+
inAnnotation = true;
|
|
161
|
+
if (field) {
|
|
162
|
+
dataGroups.push(field);
|
|
163
|
+
}
|
|
164
|
+
field = new FieldDatas();
|
|
165
|
+
}
|
|
166
|
+
switch (values[0]) {
|
|
167
|
+
case "#datatype":
|
|
168
|
+
field!.datatypes = values.slice(1);
|
|
169
|
+
break;
|
|
170
|
+
case "#group":
|
|
171
|
+
field!.groups = values
|
|
172
|
+
.slice(1)
|
|
173
|
+
.map((item) => item == "true");
|
|
174
|
+
break;
|
|
175
|
+
case "#default":
|
|
176
|
+
field!.defaults = values.slice(1);
|
|
177
|
+
break;
|
|
178
|
+
default:
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
} else if (arr[i] != "") {
|
|
182
|
+
if (inAnnotation) {
|
|
183
|
+
inAnnotation = false;
|
|
184
|
+
for (var j = 0; j < values.length; j++) {
|
|
185
|
+
field!.columns.set(values[j], j);
|
|
186
|
+
}
|
|
187
|
+
} else {
|
|
188
|
+
field!.values.push(values);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
if (field) {
|
|
193
|
+
dataGroups!.push(field);
|
|
194
|
+
}
|
|
195
|
+
return dataGroups;
|
|
196
|
+
});
|
|
197
|
+
} else {
|
|
198
|
+
return this.wrapData(id, args, p1);
|
|
199
|
+
}
|
|
152
200
|
})
|
|
153
201
|
.then((res: AxiosResponse) => {
|
|
154
202
|
if (res.data.Error) {
|
package/dist/device_filter.js
CHANGED
|
@@ -122,7 +122,61 @@ class DeviceFilter {
|
|
|
122
122
|
const p1 = this.context.axios.get(`/api/v1/device/${id}/data/${args.type}`, {
|
|
123
123
|
params: args,
|
|
124
124
|
});
|
|
125
|
-
|
|
125
|
+
if (args.type == "raw") {
|
|
126
|
+
return p1.then((res) => {
|
|
127
|
+
var string = res.data.data;
|
|
128
|
+
string = string.replace(/\r/g, "");
|
|
129
|
+
var arr = string.split("\n");
|
|
130
|
+
var inAnnotation = false;
|
|
131
|
+
var dataGroups = new SensorDatas();
|
|
132
|
+
var field = null;
|
|
133
|
+
for (var i = 0; i < arr.length; i++) {
|
|
134
|
+
var values = arr[i].split(",");
|
|
135
|
+
if (arr[i].startsWith("#")) {
|
|
136
|
+
if (!inAnnotation) {
|
|
137
|
+
inAnnotation = true;
|
|
138
|
+
if (field) {
|
|
139
|
+
dataGroups.push(field);
|
|
140
|
+
}
|
|
141
|
+
field = new FieldDatas();
|
|
142
|
+
}
|
|
143
|
+
switch (values[0]) {
|
|
144
|
+
case "#datatype":
|
|
145
|
+
field.datatypes = values.slice(1);
|
|
146
|
+
break;
|
|
147
|
+
case "#group":
|
|
148
|
+
field.groups = values
|
|
149
|
+
.slice(1)
|
|
150
|
+
.map((item) => item == "true");
|
|
151
|
+
break;
|
|
152
|
+
case "#default":
|
|
153
|
+
field.defaults = values.slice(1);
|
|
154
|
+
break;
|
|
155
|
+
default:
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
else if (arr[i] != "") {
|
|
160
|
+
if (inAnnotation) {
|
|
161
|
+
inAnnotation = false;
|
|
162
|
+
for (var j = 0; j < values.length; j++) {
|
|
163
|
+
field.columns.set(values[j], j);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
field.values.push(values);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
if (field) {
|
|
172
|
+
dataGroups.push(field);
|
|
173
|
+
}
|
|
174
|
+
return dataGroups;
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
return this.wrapData(id, args, p1);
|
|
179
|
+
}
|
|
126
180
|
})
|
|
127
181
|
.then((res) => {
|
|
128
182
|
if (res.data.Error) {
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
class FieldDatas {
|
|
3
|
+
constructor() {
|
|
4
|
+
this.datatypes = [];
|
|
5
|
+
this.groups = [];
|
|
6
|
+
this.defaults = [];
|
|
7
|
+
this.values = [];
|
|
8
|
+
this.columns = new Map();
|
|
9
|
+
}
|
|
10
|
+
get length() {
|
|
11
|
+
return this.values.length;
|
|
12
|
+
}
|
|
13
|
+
valuesAt(at) {
|
|
14
|
+
var values = 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
|
+
get fields() {
|
|
26
|
+
var fields = ["time"];
|
|
27
|
+
for (var i = 0; i < this.values.length; i++) {
|
|
28
|
+
var field = this.values[i][this.columns.get("_field")];
|
|
29
|
+
if (fields.indexOf(field) == -1) {
|
|
30
|
+
fields.push(field);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return fields;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
class SensorDatas {
|
|
37
|
+
constructor() {
|
|
38
|
+
this.data_fields = [];
|
|
39
|
+
}
|
|
40
|
+
push(datas) {
|
|
41
|
+
this.data_fields.push(datas);
|
|
42
|
+
}
|
|
43
|
+
get datas() {
|
|
44
|
+
var datas = [];
|
|
45
|
+
for (var i = 0; i < this.data_fields[0].values.length; i++) {
|
|
46
|
+
var data = {
|
|
47
|
+
time: this.data_fields[0].values[i][this.data_fields[0].columns.get("_time")],
|
|
48
|
+
};
|
|
49
|
+
for (var j = 0; j < this.data_fields.length; j++) {
|
|
50
|
+
var field = this.data_fields[j];
|
|
51
|
+
var values = field.valuesAt(data.time);
|
|
52
|
+
for (let [key, value] of values.entries()) {
|
|
53
|
+
data[key] = value;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
datas.push(data);
|
|
57
|
+
}
|
|
58
|
+
return datas;
|
|
59
|
+
}
|
|
60
|
+
get fields() {
|
|
61
|
+
var fields = [];
|
|
62
|
+
for (var i = 0; i < this.data_fields.length; i++) {
|
|
63
|
+
var subfields = this.data_fields[i].fields;
|
|
64
|
+
for (var j = 0; j < subfields.length; j++) {
|
|
65
|
+
if (fields.indexOf(subfields[j]) == -1) {
|
|
66
|
+
fields.push(subfields[j]);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return fields;
|
|
71
|
+
}
|
|
72
|
+
}
|
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,83 @@
|
|
|
1
|
+
|
|
2
|
+
class FieldDatas {
|
|
3
|
+
datatypes: string[] = [];
|
|
4
|
+
groups: boolean[] = [];
|
|
5
|
+
defaults: string[] = [];
|
|
6
|
+
values: string[][] = [];
|
|
7
|
+
columns: Map<String, number> = new Map();
|
|
8
|
+
|
|
9
|
+
get length() {
|
|
10
|
+
return this.values.length;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
valuesAt(at: string) {
|
|
15
|
+
var values: Map<string, any> = new Map();
|
|
16
|
+
for (var i = 0; i < this.values.length; i++) {
|
|
17
|
+
if (this.values[i][this.columns.get("_time")!] == at) {
|
|
18
|
+
var field = this.values[i][this.columns.get("_field")!];
|
|
19
|
+
var value = this.values[i][this.columns.get("_value")!];
|
|
20
|
+
values.set(field, value);
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return values;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
get fields() {
|
|
28
|
+
var fields: string[] = ["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
|
+
|
|
39
|
+
class SensorDatas {
|
|
40
|
+
push(datas: FieldDatas) {
|
|
41
|
+
this.data_fields.push(datas);
|
|
42
|
+
}
|
|
43
|
+
data_fields: FieldDatas[] = [];
|
|
44
|
+
|
|
45
|
+
get datas() {
|
|
46
|
+
var datas: {
|
|
47
|
+
time: string;
|
|
48
|
+
[key: string]: any;
|
|
49
|
+
}[] = [];
|
|
50
|
+
for (var i = 0; i < this.data_fields[0].values.length; i++) {
|
|
51
|
+
var data: {
|
|
52
|
+
time: string;
|
|
53
|
+
[key: string]: any;
|
|
54
|
+
} = {
|
|
55
|
+
time: this.data_fields[0].values[i][
|
|
56
|
+
this.data_fields[0].columns.get("_time")!
|
|
57
|
+
],
|
|
58
|
+
};
|
|
59
|
+
for (var j = 0; j < this.data_fields.length; j++) {
|
|
60
|
+
var field = this.data_fields[j];
|
|
61
|
+
var values = field.valuesAt(data.time);
|
|
62
|
+
for (let [key, value] of values.entries()) {
|
|
63
|
+
data[key] = value;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
datas.push(data);
|
|
67
|
+
}
|
|
68
|
+
return datas;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
get fields() {
|
|
72
|
+
var fields: string[] = [];
|
|
73
|
+
for (var i = 0; i < this.data_fields.length; i++) {
|
|
74
|
+
var subfields = this.data_fields[i].fields;
|
|
75
|
+
for (var j = 0; j < subfields.length; j++) {
|
|
76
|
+
if (fields.indexOf(subfields[j]) == -1) {
|
|
77
|
+
fields.push(subfields[j]);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return fields;
|
|
82
|
+
}
|
|
83
|
+
}
|
package/types.d.ts
CHANGED
|
@@ -264,6 +264,7 @@ export interface DataQueryArgs {
|
|
|
264
264
|
| "latest"
|
|
265
265
|
| "latestInRangePerDay"
|
|
266
266
|
| "last"
|
|
267
|
+
| "raw"
|
|
267
268
|
| "difference";
|
|
268
269
|
period?: "1mo" | "1d" | null;
|
|
269
270
|
offset?: string; // 可以设置统计偏移量,比如设置18h, 则统计从当天晚上6点开始
|
|
@@ -289,6 +290,8 @@ export class Cpzxrobot {
|
|
|
289
290
|
setTitle: (title: string) => void;
|
|
290
291
|
saveBase64: (base64: string, filename: string) => void;
|
|
291
292
|
saveBlob: (blob: Blob, filename: string) => void;
|
|
293
|
+
scanQrcode:() => Promise<string>;
|
|
294
|
+
vibrate: (time?: number) => void;
|
|
292
295
|
}
|
|
293
296
|
|
|
294
297
|
declare global {
|