Serialport implementation for GSM commands (send text/flash messages, read, etc.)
npm install serialport-gsm'PDU' mode)
terminal
npm install serialport-gsm
`
Example
A full example can be found in the example directory.
Usage
$3
#### 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
$3
#### 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 for documentation
`js
let serialportgsm = require('serialport-gsm')
let serialport = serialportgsm.serialport
`
Access modem serialport.
`js
modem.port.SERIAL_PORT_PROTOTYPES
``