@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 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
- return this.wrapData(id, args, p1);
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) {
@@ -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
- return this.wrapData(id, args, p1);
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cpzxrobot/sdk",
3
- "version": "1.0.74",
3
+ "version": "1.0.76",
4
4
  "description": "提供给上海正芯数智APP第三方H5应用使用的SDK",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -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
- export type FeedTowerExtraInfo = {
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
- export type FodderOrder = {
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
- export type FodderOrderList = {
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
- export type FodderOrderInTower = {
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
- export type Factory = {
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
- export type FeedTower = {
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
- export interface MyAxiosInstance {
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
- export interface Assistant {
261
+ interface Assistant {
246
262
  info: String;
247
263
  status: Number;
248
264
  name: String;
249
265
  id: Number;
250
266
  }
251
- export interface ElectricMeter extends Device {
267
+ interface ElectricMeter extends Device {
252
268
  coefficient: number;
253
269
  status: string;
254
270
  }
255
271
 
256
- export interface DataQueryArgs {
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
- export class Cpzxrobot {
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
  }