@starak/sim800c 2.0.5 → 2.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 +7 -0
- package/dist/lib/at-serial.js +3 -3
- package/dist/lib/sim800c.js +2 -2
- package/dist/lib/types.d.ts +58 -0
- package/package.json +5 -5
- package/dist/lib/logger.d.ts +0 -11
- package/dist/lib/logger.js +0 -35
- package/dist/lib/sim800c-2.d.ts +0 -15
- package/dist/lib/sim800c-2.js +0 -109
package/README.md
CHANGED
|
@@ -25,4 +25,11 @@ const {SIM800C} = require('@starak/sim800c');
|
|
|
25
25
|
});
|
|
26
26
|
|
|
27
27
|
})();
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Setup environment
|
|
31
|
+
You'll need to create a `.env` file in the root directory of the project. It should look like this:
|
|
32
|
+
```bash
|
|
33
|
+
DEBUG_SIM=true # to enable debug messages
|
|
34
|
+
SERIAL_PORT=/dev/serial0 # or whatever your SIM800C is connected to
|
|
28
35
|
```
|
package/dist/lib/at-serial.js
CHANGED
|
@@ -26,7 +26,6 @@ class AtSerial extends eventemitter3_1.default {
|
|
|
26
26
|
this.options = Object.assign({}, DEFAULT_PORT_OPTIONS, options);
|
|
27
27
|
}
|
|
28
28
|
open() {
|
|
29
|
-
// TODO: return single promise for open
|
|
30
29
|
return new Promise((resolve, reject) => {
|
|
31
30
|
this.port = new serialport_1.SerialPort(this.options);
|
|
32
31
|
this.parser = new parser_readline_1.ReadlineParser({ delimiter: '\r\n' });
|
|
@@ -84,10 +83,11 @@ class AtSerial extends eventemitter3_1.default {
|
|
|
84
83
|
response: response.join(''),
|
|
85
84
|
});
|
|
86
85
|
}
|
|
87
|
-
if (lastLine.
|
|
86
|
+
if (lastLine.includes('>') && commands.length > 1) {
|
|
88
87
|
const c = `${commands[1]}${terminators[1]}`;
|
|
89
88
|
this.serialStream.outgoing(c + '\n');
|
|
90
89
|
port.write(c);
|
|
90
|
+
commands.pop();
|
|
91
91
|
}
|
|
92
92
|
};
|
|
93
93
|
port.on('data', listener);
|
|
@@ -102,4 +102,4 @@ class AtSerial extends eventemitter3_1.default {
|
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
104
|
exports.AtSerial = AtSerial;
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXQtc2VyaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9hdC1zZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMkNBQXNDO0FBQ3RDLGlFQUF1RTtBQUN2RSxrRUFBeUM7QUFDekMsc0RBQTRCO0FBQzVCLHFDQUFnQztBQUdoQyxNQUFNLG9CQUFvQixHQUFpQjtJQUN2QyxRQUFRLEVBQUcsTUFBTTtJQUNqQixRQUFRLEVBQUcsQ0FBQztJQUNaLFFBQVEsRUFBRyxDQUFDO0lBQ1osTUFBTSxFQUFLLE1BQU07SUFDakIsUUFBUSxFQUFHLE1BQU07SUFDakIsU0FBUyxFQUFFLElBQUk7SUFDZixJQUFJLEVBQU8sRUFBRTtDQUNoQixDQUFDO0FBRUYsTUFBYSxRQUFTLFNBQVEsdUJBQVk7SUFNdEMsWUFBYSxPQUFPLEdBQUcsRUFBRTtRQUNyQixLQUFLLEVBQUUsQ0FBQztRQUxMLGlCQUFZLEdBQUcsSUFBSSxlQUFNLEVBQUUsQ0FBQztRQUczQixpQkFBWSxHQUFVLElBQUksaUJBQUssQ0FBQyxFQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDO1FBR3RELElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVNLElBQUk7UUFDUCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ25DLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSx1QkFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUV6QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZ0NBQVEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUks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
|
package/dist/lib/sim800c.js
CHANGED
|
@@ -50,7 +50,7 @@ class SIM800C extends at_serial_1.AtSerial {
|
|
|
50
50
|
const userDataLength = (pdu.length - smscInfoLength) / 2;
|
|
51
51
|
const command = `AT+CMGS=${userDataLength} > ${pdu}`;
|
|
52
52
|
const terminator = `\r > ${CTRL_Z}`;
|
|
53
|
-
const c = await this.sendCommand(command, terminator);
|
|
53
|
+
const c = await this.sendCommand(command, terminator, 60000);
|
|
54
54
|
logger.debug(JSON.stringify(c));
|
|
55
55
|
}
|
|
56
56
|
}).catch(e => {
|
|
@@ -106,4 +106,4 @@ class SIM800C extends at_serial_1.AtSerial {
|
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
108
|
exports.SIM800C = SIM800C;
|
|
109
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltODAwYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvc2ltODAwYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwyQ0FBcUM7QUFDckMsdUNBQWdDO0FBQ2hDLHNEQUE0QjtBQUU1QixtQ0FBaUY7QUFDakYsa0VBQStCO0FBRS9CLE1BQU0sTUFBTSxHQUFHLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBRSxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUUsQ0FBQztBQUNyRSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFFdEIsTUFBYSxPQUFRLFNBQVEsb0JBQVE7SUFHakMsWUFBWSxPQUF1QjtRQUMvQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFIWCxVQUFLLEdBQUcsSUFBSSxpQkFBSyxDQUFDLEVBQUMsV0FBVyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7UUFJeEMsSUFBQSx1QkFBRSxFQUFFLE1BQU0sRUFBRSxFQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsUUFBUSxJQUFJLE1BQU0sRUFBQyxDQUFDLENBQUE7UUFDaEQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsS0FBYSxFQUFFLEVBQUU7WUFDbEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUMsSUFBRyxPQUFPLEVBQUM7Z0JBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDakM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBSztRQUNkLE1BQU0sQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxD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
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import {Header} from "node-pdu/dist/utils";
|
|
2
|
+
|
|
3
|
+
export interface Message {
|
|
4
|
+
index: number;
|
|
5
|
+
parts: number;
|
|
6
|
+
indexes: number[];
|
|
7
|
+
text: string;
|
|
8
|
+
sender: string;
|
|
9
|
+
time: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
interface RawMessagePDU {
|
|
13
|
+
index: number;
|
|
14
|
+
raw: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
interface TempMessage {
|
|
18
|
+
time: string;
|
|
19
|
+
sender: string;
|
|
20
|
+
data: string;
|
|
21
|
+
size: number;
|
|
22
|
+
text: string;
|
|
23
|
+
header: Header | null;
|
|
24
|
+
multipart?: boolean,
|
|
25
|
+
parts?: number,
|
|
26
|
+
parts_raw?: TempMessageParsed[]
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
interface TempMessageParsed {
|
|
30
|
+
index: number;
|
|
31
|
+
message: TempMessage;
|
|
32
|
+
error?: string
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export interface PORT_OPTIONS {
|
|
36
|
+
baudRate: number;
|
|
37
|
+
dataBits: 7 | 8 | 5 | 6 | undefined;
|
|
38
|
+
stopBits: 1 | 2 | undefined;
|
|
39
|
+
parity: 'none' | 'even' | 'mark' | 'odd' | 'space';
|
|
40
|
+
line_end: string;
|
|
41
|
+
read_time: number;
|
|
42
|
+
path: string;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export interface SendCommandResponse {
|
|
46
|
+
command: string;
|
|
47
|
+
start: Date;
|
|
48
|
+
end: Date;
|
|
49
|
+
waitFor?: string[];
|
|
50
|
+
executionTime: number;
|
|
51
|
+
response: string;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export interface SIM800COptions {
|
|
55
|
+
path: string;
|
|
56
|
+
baudRate?: number;
|
|
57
|
+
logLevel?: 'debug' | 'info' | 'warn' | 'error';
|
|
58
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@starak/sim800c",
|
|
3
|
-
"version": "2.0
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "Simple library for sending and receiving messages with sim800c",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"files": [
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
},
|
|
22
22
|
"license": "MIT",
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"console-stamp": "^3.1.
|
|
25
|
-
"eventemitter3": "^5.0.
|
|
24
|
+
"console-stamp": "^3.1.2",
|
|
25
|
+
"eventemitter3": "^5.0.1",
|
|
26
26
|
"node-pdu": "^2.0.2",
|
|
27
27
|
"p-queue": "^6.6.2",
|
|
28
28
|
"serialport": "^10.5.0"
|
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@types/node": "^17.0.21",
|
|
32
32
|
"dotenv": "^16.3.1",
|
|
33
|
-
"nodemon": "^3.0
|
|
34
|
-
"ts-node": "^10.9.
|
|
33
|
+
"nodemon": "^3.1.0",
|
|
34
|
+
"ts-node": "^10.9.2",
|
|
35
35
|
"typescript": "^4.9.5"
|
|
36
36
|
},
|
|
37
37
|
"keywords": [
|
package/dist/lib/logger.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
import { Readable, ReadableOptions } from "stream";
|
|
3
|
-
export declare class Logger extends Readable {
|
|
4
|
-
private debug;
|
|
5
|
-
private readonly console;
|
|
6
|
-
constructor(opts: ReadableOptions, debug?: boolean);
|
|
7
|
-
_read(_: number): void;
|
|
8
|
-
incomming(message?: string): void;
|
|
9
|
-
outgoing(message?: string): void;
|
|
10
|
-
log(message?: string): void;
|
|
11
|
-
}
|
package/dist/lib/logger.js
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
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
|
-
exports.Logger = void 0;
|
|
7
|
-
const stream_1 = require("stream");
|
|
8
|
-
const console_stamp_1 = __importDefault(require("console-stamp"));
|
|
9
|
-
class Logger extends stream_1.Readable {
|
|
10
|
-
constructor(opts, debug = false) {
|
|
11
|
-
super(opts);
|
|
12
|
-
this.debug = debug;
|
|
13
|
-
this.console = new console.Console(process.stdout, process.stderr);
|
|
14
|
-
(0, console_stamp_1.default)(this.console, {
|
|
15
|
-
format: '(SIM800C).yellow :date(yyyy/mm/dd HH:MM:ss.l).white :label.cyan',
|
|
16
|
-
stdout: process.stdout,
|
|
17
|
-
stderr: process.stderr,
|
|
18
|
-
level: this.debug ? 'debug' : 'info',
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
_read(_) {
|
|
22
|
-
// No implementation needed for pushing data manually
|
|
23
|
-
}
|
|
24
|
-
incomming(message = '') {
|
|
25
|
-
this.push(`>> ${message.toString().replace(/ /g, '\u2e31')}`);
|
|
26
|
-
}
|
|
27
|
-
outgoing(message = '') {
|
|
28
|
-
this.push(`<< ${message.replace(/ /g, '\u2e31')}`);
|
|
29
|
-
}
|
|
30
|
-
log(message = '') {
|
|
31
|
-
this.console.debug(message);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
exports.Logger = Logger;
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9sb2dnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbUNBQWlEO0FBQ2pELGtFQUE4QjtBQUU5QixNQUFhLE1BQU8sU0FBUSxpQkFBUTtJQUVoQyxZQUFZLElBQXFCLEVBQVUsUUFBUSxLQUFLO1FBQ3BELEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUQyQixVQUFLLEdBQUwsS0FBSyxDQUFRO1FBRXBELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBRSxDQUFDO1FBQ3JFLElBQUEsdUJBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2QsTUFBTSxFQUFFLGlFQUFpRTtZQUN6RSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07WUFDdEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1lBQ3RCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU07U0FDdkMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELEtBQUssQ0FBQyxDQUFTO1FBQ1gscURBQXFEO0lBQ3pELENBQUM7SUFFRCxTQUFTLENBQUMsT0FBTyxHQUFHLEVBQUU7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsUUFBUSxDQUFDLE9BQU8sR0FBRyxFQUFFO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELEdBQUcsQ0FBQyxPQUFPLEdBQUcsRUFBRTtRQUNaLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7Q0FDSjtBQTVCRCx3QkE0QkMifQ==
|
package/dist/lib/sim800c-2.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { AtSerial } from "./at-serial";
|
|
2
|
-
import { Message, RawMessagePDU, SIM800COptions } from "./types";
|
|
3
|
-
export declare class SIM800C extends AtSerial {
|
|
4
|
-
private queue;
|
|
5
|
-
constructor(options: SIM800COptions);
|
|
6
|
-
reset(): Promise<void>;
|
|
7
|
-
rejectCalls(): Promise<void>;
|
|
8
|
-
private setPDUMode;
|
|
9
|
-
sendMessage(number: string, message: string): Promise<void>;
|
|
10
|
-
getAllPDUMessages(): Promise<RawMessagePDU[]>;
|
|
11
|
-
getMessages(): Promise<Message[]>;
|
|
12
|
-
getMessage(index: number): Promise<Message>;
|
|
13
|
-
deleteMessage(msg: Message): Promise<void>;
|
|
14
|
-
deleteAllMessages(): Promise<void>;
|
|
15
|
-
}
|
package/dist/lib/sim800c-2.js
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
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
|
-
exports.SIM800C = void 0;
|
|
7
|
-
const at_serial_1 = require("./at-serial");
|
|
8
|
-
const node_pdu_1 = require("node-pdu");
|
|
9
|
-
const p_queue_1 = __importDefault(require("p-queue"));
|
|
10
|
-
const utils_1 = require("./utils");
|
|
11
|
-
const console_stamp_1 = __importDefault(require("console-stamp"));
|
|
12
|
-
const logger = new console.Console(process.stdout, process.stderr);
|
|
13
|
-
(0, console_stamp_1.default)(logger, { level: 'warn' });
|
|
14
|
-
const CTRL_Z = '\x1a';
|
|
15
|
-
class SIM800C extends at_serial_1.AtSerial {
|
|
16
|
-
constructor(options) {
|
|
17
|
-
super(options);
|
|
18
|
-
this.queue = new p_queue_1.default({ concurrency: 1 });
|
|
19
|
-
this.on('_incomming_message', async (index) => {
|
|
20
|
-
const message = await this.getMessage(+index);
|
|
21
|
-
if (message) {
|
|
22
|
-
this.emit('message', message);
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
async reset() {
|
|
27
|
-
const c = await this.sendCommand('ATZ');
|
|
28
|
-
logger.debug(JSON.stringify(c));
|
|
29
|
-
await this.rejectCalls();
|
|
30
|
-
}
|
|
31
|
-
async rejectCalls() {
|
|
32
|
-
const c = await this.sendCommand('AT+GSMBUSY=1');
|
|
33
|
-
logger.debug(JSON.stringify(c));
|
|
34
|
-
}
|
|
35
|
-
async setPDUMode() {
|
|
36
|
-
const c = await this.sendCommand(`AT+CMGF=0`);
|
|
37
|
-
logger.debug(JSON.stringify(c));
|
|
38
|
-
}
|
|
39
|
-
async sendMessage(number, message) {
|
|
40
|
-
return this.queue.add(async () => {
|
|
41
|
-
message += "\u200B"; // Add zero-width space to the end of the message to force unicode as a workaround for the 7-bit bug in node-pdu.
|
|
42
|
-
let submit = new node_pdu_1.Submit(number, message);
|
|
43
|
-
submit.dataCodingScheme.setUseMessageClass(false);
|
|
44
|
-
const parts = submit.getPartStrings();
|
|
45
|
-
await this.reset();
|
|
46
|
-
await this.setPDUMode();
|
|
47
|
-
for (let i = 0; i < parts.length; i++) {
|
|
48
|
-
const pdu = parts[i];
|
|
49
|
-
const smscInfoLength = (parseInt(pdu.substring(0, 2), 16) + 1) * 2;
|
|
50
|
-
const userDataLength = (pdu.length - smscInfoLength) / 2;
|
|
51
|
-
const command = `AT+CMGS=${userDataLength} > ${pdu}`;
|
|
52
|
-
const terminator = `\r > ${CTRL_Z}`;
|
|
53
|
-
const c = await this.sendCommand(command, terminator);
|
|
54
|
-
logger.debug(JSON.stringify(c));
|
|
55
|
-
}
|
|
56
|
-
}).catch(e => {
|
|
57
|
-
throw e;
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
async getAllPDUMessages() {
|
|
61
|
-
await this.reset();
|
|
62
|
-
await this.setPDUMode();
|
|
63
|
-
const data = await this.sendCommand('AT+CMGL=4');
|
|
64
|
-
logger.debug(JSON.stringify(data));
|
|
65
|
-
const response = data.response.split('\r\n').filter(Boolean).slice(0, -1);
|
|
66
|
-
let messages = [];
|
|
67
|
-
let current = {};
|
|
68
|
-
for (const line of response) {
|
|
69
|
-
if (line.startsWith('+CMGL: ')) {
|
|
70
|
-
const [index] = line.replace(/^\+CMGL:\s/, '').split(',');
|
|
71
|
-
current = { index: +index, raw: '' };
|
|
72
|
-
messages.push(current);
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
current.raw += line.replace(/\s/g, '');
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
return messages;
|
|
79
|
-
}
|
|
80
|
-
async getMessages() {
|
|
81
|
-
return this.queue.add(async () => {
|
|
82
|
-
const rawMessages = await this.getAllPDUMessages();
|
|
83
|
-
const parsedMessages = rawMessages.map(utils_1.parsePDUMessage);
|
|
84
|
-
const processedMessages = (0, utils_1.processMessages)(parsedMessages);
|
|
85
|
-
return processedMessages.map(utils_1.convertToCleanMessage);
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
async getMessage(index) {
|
|
89
|
-
const messages = await this.getMessages();
|
|
90
|
-
let message = messages.find(m => (m === null || m === void 0 ? void 0 : m.index) === index) || messages.find(m => { var _a; return (_a = m === null || m === void 0 ? void 0 : m.indexes) === null || _a === void 0 ? void 0 : _a.find(m2 => m2 === index); });
|
|
91
|
-
return message || undefined;
|
|
92
|
-
}
|
|
93
|
-
async deleteMessage(msg) {
|
|
94
|
-
return this.queue.add(async () => {
|
|
95
|
-
if (!msg)
|
|
96
|
-
return;
|
|
97
|
-
for (const i of msg.indexes) {
|
|
98
|
-
const c = await this.sendCommand(`AT+CMGD=${i}`);
|
|
99
|
-
logger.debug(JSON.stringify(c));
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
async deleteAllMessages() {
|
|
104
|
-
const c = this.queue.add(async () => this.sendCommand('AT+CMGD=1,4'));
|
|
105
|
-
logger.debug(JSON.stringify(c));
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
exports.SIM800C = SIM800C;
|
|
109
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltODAwYy0yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9zaW04MDBjLTIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMkNBQXFDO0FBQ3JDLHVDQUFnQztBQUNoQyxzREFBNEI7QUFFNUIsbUNBQWlGO0FBQ2pGLGtFQUErQjtBQUUvQixNQUFNLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFFLENBQUM7QUFDckUsSUFBQSx1QkFBRSxFQUFFLE1BQU0sRUFBRSxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFBO0FBQzVCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUV0QixNQUFhLE9BQVEsU0FBUSxvQkFBUTtJQUdqQyxZQUFZLE9BQXVCO1FBQy9CLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUhYLFVBQUssR0FBRyxJQUFJLGlCQUFLLENBQUMsRUFBQyxXQUFXLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztRQUl4QyxJQUFJLENBQUMsRUFBRSxDQUFDLG9CQUFvQixFQUFFLEtBQUssRUFBRSxLQUFhLEVBQUUsRUFBRTtZQUNsRCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QyxJQUFHLE9BQU8sRUFBQztnQkFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQzthQUNqQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLEtBQUssQ0FBQyxLQUFLO1FBQ2QsTUFBTSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTSxLQUFLLENBQUMsV0FBVztRQUNwQixNQUFNLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDakQsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVPLEtBQUssQ0FBQyxVQUFVO1FBQ3BCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5QyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU0sS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFjLEVBQUUsT0FBZTtRQUNwRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQzdCLE9BQU8sSUFBSSxRQUFRLENBQUMsQ0FBQyxpSEFBaUg7WUFDdEksSUFBSSxNQUFNLEdBQUcsSUFBSSxpQkFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN6QyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25CLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBRXhCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNuQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JCLE1BQU0sY0FBYyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbkUsTUFBTSxjQUFjLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDekQsTUFBTSxPQUFPLEdBQUcsV0FBVyxjQUFjLE1BQU0sR0FBRyxFQUFFLENBQUM7Z0JBQ3JELE1BQU0sVUFBVSxHQUFHLFFBQVEsTUFBTSxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQ3RELE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ25DO1FBQ0wsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ1QsTUFBTSxDQUFDLENBQUM7UUFDWixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxLQUFLLENBQUMsaUJBQWlCO1FBQzFCLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25CLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqRCxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNuQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLElBQUksUUFBUSxHQUFvQixFQUFFLENBQUM7UUFDbkMsSUFBSSxPQUFPLEdBQUcsRUFBbUIsQ0FBQztRQUNsQyxLQUFLLE1BQU0sSUFBSSxJQUFJLFFBQVEsRUFBRTtZQUN6QixJQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUM7Z0JBQzFCLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzFELE9BQU8sR0FBRyxFQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFDLENBQUM7Z0JBQ25DLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDMUI7aUJBQUk7Z0JBQ0QsT0FBTyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQzthQUMxQztTQUNKO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVNLEtBQUssQ0FBQyxXQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDN0IsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNuRCxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLHVCQUFlLENBQUMsQ0FBQztZQUN4RCxNQUFNLGlCQUFpQixHQUFHLElBQUEsdUJBQWUsRUFBQyxjQUFjLENBQUMsQ0FBQztZQUMxRCxPQUFPLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyw2QkFBcUIsQ0FBQyxDQUFDO1FBQ3hELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBYTtRQUNqQyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxQyxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQSxDQUFDLGFBQUQsQ0FBQyx1QkFBRCxDQUFDLENBQUUsS0FBSyxNQUFLLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBQyxPQUFBLE1BQUEsQ0FBQyxhQUFELENBQUMsdUJBQUQsQ0FBQyxDQUFFLE9BQU8sMENBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQyxDQUFBLEVBQUEsQ0FBQyxDQUFDO1FBQ2pILE9BQU8sT0FBa0IsSUFBSSxTQUFTLENBQUM7SUFDM0MsQ0FBQztJQUVNLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBWTtRQUNuQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQzdCLElBQUksQ0FBQyxHQUFHO2dCQUFFLE9BQU87WUFDakIsS0FBSyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUN6QixNQUFNLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRCxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNuQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLEtBQUssQ0FBQyxpQkFBaUI7UUFDMUIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDdEUsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQztDQUNKO0FBdEdELDBCQXNHQyJ9
|