SerialPort-GSM is a simplified plugin for communicating with gsm modems, primarily for sms. (This library is focused in 'PDU'
mode)
npm install serialport-gsm
A full example can be found in the example directory.
let serialportgsm = require('serialport-gsm')
serialportgsm.list((err, result) => {
console.log(result)
})
Call other functions after the port has been opened.
open(path, options, callback)
When opening a serial port, specify (in this order)
- Path to Serial Port - required.
- Options
(see sample options on code)
.
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 |
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. |
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])
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.)
modem.on('open', data => {
modem.initializeModem(callback[optional])
})
Closes an open connection
close(callback[optional])
modem.close()
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.
modem.on('open', data => {
modem.setModemMode(callback, 'PDU')
})
Send simple command to check communication with device
modem.checkModem(callback)
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. |
modem.sendSMS('63999XXXXX19', 'Hello there Zab!', true, callback)
Shows messages of sim inbox
modem.getSimInbox(callback)
Delete a sim message by message object (Use Sim Inbox data)
modem.deleteMessage(messageObj, callback)
modem.deleteAllSimMessages(callback)
modem.getModemSerial(callback)
modem.getNetworkSignal(callback)
modem.getOwnNumber(callback)
setOwnNumber('number', callback, name[optional || default 'OwnNumber'])
modem.setOwnNumber(number, callback)
modem.hangupCall(callback)
For executing a complex custom command with multi-line responses, you need your own parsing logic - see examples
modem.executeCommand(command, callback, priority, timeout)
modem.on('open', result => { /*do something*/ })
modem.on('close', result => { /*do something*/ })
modem.on('error', result => { /*do something*/ })
modem.on('onSendingMessage', result => { status, request, data })
modem.on('onNewMessage', messageDetails)
modem.on('onNewMessageIndicator', result => { sender, timeSent })
modem.on('onNewIncomingCall', result => { number, numberScheme })
modem.on('onMemoryFull', result => { status, data })
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/
Access base serialport. Please refer to SerialPort Docs for documentation
let serialportgsm = require('serialport-gsm')
let serialport = serialportgsm.serialport
Access modem serialport.
modem.port.SERIAL_PORT_PROTOTYPES
Thanks goes to these wonderful people who contributed a lot in this project:
Made with contributors-img.
SerialPort-GSM is MIT licensed and all it's dependencies are MIT or BSD licensed.