serialport-gsm
Version:
Serialport implementation for GSM commands (send text/flash messages, read, etc.)
285 lines (236 loc) • 9.46 kB
Markdown
# Node SerialPort-GSM
[](https://nodei.co/npm/serialport-gsm/)
## Intro
SerialPort-GSM is a simplified plugin for communicating with gsm modems, primarily for sms. (This library is focused in `'PDU'` mode)
***
## Table of Contents
* [Installation](#installation-instructions)
* [Usage](#usage)
* [Methods](#methods)
* [List Ports](#list-available-ports)
* [Open](#opening-a-port)
* [Initialize Modem](#initialize-modem)
* [Close](#close-modem)
* [Set Modem Mode](#set-modem-mode)
* [Send SMS](#send-message)
* [Get Sim Inbox](#get-sim-inbox)
* [Delete Message](#delete-sim-message)
* [Delete All SIm MEssages](#delete-all-sim-messages)
* [Get Modem Serial](#get-modem-serial)
* [Get Network Signal](#get-network-signal)
* [Get Own Number](#get-own-number)
* [Set Own Number](#set-own-number)
* [Hangup current call](#hangup-call)
* [Execute AT Command](#execute-at-command)
* [Events](#events)
* [open](#open)
* [close](#close)
* [error](#error)
* [onSendingMessage](#onsendingmessage)
* [onNewMessage](#onnewmessage)
* [onNewMessageIndicator](#onnewmessage-indicator)
* [onNewIncomingCall](#onnewincomingcall)
* [onMemoryFull](#onmemoryfull)
* [SerialPort](#serialport)
* [Contributors](#contributors)
* [License](#license)
***
## Installation Instructions
```terminal
npm install serialport-gsm
```
## Example
A full example can be found in the example directory.
## Usage
### Methods
#### List Available Ports
```js
let serialportgsm = require('serialport-gsm')
serialportgsm.list((err, result) => {
console.log(result)
})
```
#### Opening a Port
Call other functions after the port has been opened.
`open(path, options, callback)`
When opening a serial port, specify (in this order)
1. Path to Serial Port - required.
2. Options `(see sample options on code)`.
#### SerialPort openOptions
| Name | Type | Default | Description |
| --------------------- | ------------- | ----------- | ----------- |
| baudRate | number | 9600 | The port's baudRate. |
| dataBits | number | 8 | Must be one of: 8, 7, 6, or 5. |
| stopBits | number | 1 | Must be one of: 1 or 2. |
| highWaterMark | number | 16384 | The size of the read and write buffers defaults to 16k. |
| parity | string | "none | Must be one of: 'none', 'even', 'mark', 'odd', 'space'. |
| rtscts | boolean | false | flow control setting |
| xon | boolean | false | flow control setting |
| xoff | boolean | false | flow control setting |
| xany | boolean | false | flow control settings |
#### SerialPort-GSM additional openOptions
| Name | Type | Default | Description |
| ---------------------- | ------------- | ----------- | ----------- |
| autoDeleteOnReceive | boolean | false | Delete from `'sim'` after receiving. |
| enableConcatenation | boolean | false | Receive concatenated messages as one. |
| incomingCallIndication | boolean | false | Receive `'onNewIncomingCall'` event when receiving calls. |
| incomingSMSIndication | boolean | true | Enables the modem to notify that a new SMS message has been received. |
| pin | string | | If your SIM card is protected by a PIN provide the PIN as String and it will be used to unlock the SIM card during initialization (empty, means "no PIN existing on the SIM card"). |
| customInitCommand | string | | If your device needs a custom initialization command it can be provided and will be used after PIN check. The command is expected to return `'OK'` (empty, means "no custom command for init"). |
| cnmiCommand | string | 'AT+CNMI=2,1,0,2,1' | Defines if messages are saved on SIM or delivered directly
| logger | | | Provide a logger instance, currently `'debug'` is used only to output written and received serial data. Use `'console'` for debugging purposes. |
```js
let serialportgsm = require('serialport-gsm')
let modem = serialportgsm.Modem()
let options = {
baudRate: 115200,
dataBits: 8,
stopBits: 1,
parity: 'none',
rtscts: false,
xon: false,
xoff: false,
xany: false,
autoDeleteOnReceive: true,
enableConcatenation: true,
incomingCallIndication: true,
incomingSMSIndication: true,
pin: '',
customInitCommand: '',
cnmiCommand: 'AT+CNMI=2,1,0,2,1',
logger: console
}
modem.open('COM', options, callback[Optional])
```
#### Initialize Modem
This function starts the modem. (If your port fails to work or does not respond to commands, don't forget to call `initializeModem` after opening the port.)
```js
modem.on('open', data => {
modem.initializeModem(callback[optional])
})
```
#### Close Modem
Closes an open connection
`close(callback[optional])`
``` js
modem.close()
```
#### Set Modem Mode
`setModemMode(callback, type)`
* type can be `'PDU'` or `'SMS'`
* Note: This module is focused on PDU mode as it is more supported in most GSMs.
``` js
modem.on('open', data => {
modem.setModemMode(callback, 'PDU')
})
```
#### Check Modem Communication
Send simple command to check communication with device
```js
modem.checkModem(callback)
```
#### Send Message
Sends sms. `sendSMS(recipient, message, alert, callback)`
| Name | Type | Default | Description |
| --------- | ---------- | ------- | ----------- |
| recipient | string | | The recipient number should start with the location code or `'+'` then the location code `(Ex. '63999XXXXX19', '+63999XXXXX19' )`. |
| message | string | | The text message to send. |
| alert | boolean | false | Enable to send as class 0 message (flash message), or Disable to send as a normal sms. |
| callback | [function] | | The callback is called twice. First time when queued for sending and second time when message was really send out. |
```js
modem.sendSMS('63999XXXXX19', 'Hello there Zab!', true, callback)
```
#### Get Sim Inbox
Shows messages of sim inbox
```js
modem.getSimInbox(callback)
```
#### Delete Sim Message
Delete a sim message by message object `(Use Sim Inbox data)`
```js
modem.deleteMessage(messageObj, callback)
```
#### Delete All Sim Messages
```js
modem.deleteAllSimMessages(callback)
```
#### Get Modem Serial
```js
modem.getModemSerial(callback)
```
#### Get Network Signal
```js
modem.getNetworkSignal(callback)
```
#### Get Own Number
```js
modem.getOwnNumber(callback)
```
#### Set Own Number
`setOwnNumber('number', callback, name[optional || default 'OwnNumber'])`
```js
modem.setOwnNumber(number, callback)
```
#### Hangup Call
```js
modem.hangupCall(callback)
```
#### Execute AT Command
For executing a complex custom command with multi-line responses, you need your own parsing logic - see examples
```js
modem.executeCommand(command, callback, priority, timeout)
```
## Other Usage
### Events
#### open
```js
modem.on('open', result => { /*do something*/ })
```
#### close
```js
modem.on('close', result => { /*do something*/ })
```
#### error
```js
modem.on('error', result => { /*do something*/ })
```
#### onSendingMessage
```js
modem.on('onSendingMessage', result => { status, request, data })
```
#### onNewMessage
```js
modem.on('onNewMessage', messageDetails)
```
#### onNewMessage Indicator
```js
modem.on('onNewMessageIndicator', result => { sender, timeSent })
```
#### onNewIncomingCall
```js
modem.on('onNewIncomingCall', result => { number, numberScheme })
```
#### onMemoryFull
```js
modem.on('onMemoryFull', result => { status, data })
```
## Errors
When errors are returned and the error originated from the device, then in the error message, an error code should be listed, e.g. "+CMS ERROR: 500". An (incomplete) list of possible error codes and their meanings can be found e.g. at https://www.activexperts.com/sms-component/gsm-error-codes/
## SerialPort
Access base serialport. Please refer to [***SerialPort Docs***](https://serialport.io/docs/en/api-serialport) for documentation
```js
let serialportgsm = require('serialport-gsm')
let serialport = serialportgsm.serialport
```
Access modem serialport.
```js
modem.port.SERIAL_PORT_PROTOTYPES
```
## Contributors
Thanks goes to these wonderful people who contributed a lot in this project:
<a href="https://github.com/zabsalahid/serialport-gsm/graphs/contributors">
<img src="https://contributors-img.firebaseapp.com/image?repo=zabsalahid/serialport-gsm" />
</a>
Made with [contributors-img](https://contributors-img.firebaseapp.com).
## License
SerialPort-GSM is [MIT licensed](LICENSE) and all it's dependencies are MIT or BSD licensed.