Skip to content

emilsedgh/modem.js

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 

Repository files navigation

Modem.js, GSM Modems on Node

Modem.js allows you to use your GSM modems on node. It offers a very simple API. It supports:

  • Sending SMS messages
  • Receiving SMS messages
  • Getting delivery reports
  • Deleting messages from memory
  • Getting notifications when memory is full
  • Getting signal quality
  • Making ussd sessions
  • 16bit (ucsd messages)
  • 7bit (ascii) messages
  • Multipart messages

Installation

npm install modem```

Instantiate
-----------
```javascript
var modem = require('modem').Modem()```

Open modem
----------
```javascript
modem.open(device, callback)```

* device `String` Path to device, like `/dev/ttyUSB0`
* callback `Function` called when modem is ready for further action

Send a message
--------------
```javascript
modem.sms(message, callback)```

* message `Object`
    * text `String` message body. Longs messages will be splitted and 
        sent in multiple parts transparently.
    * msisdn `String` receiver number.
    * encoding `String`. '16bit' or '7bit'. Use 7bit in case of English messages.

callback `Function` is called with `false` as first argument in case of failure.
    If sending message(s) is succeeded, it will receive message id of each sent
    part. (Which could be used to gettind delivery reports)


Get delivery reports
--------------------
```javascript
modem.on('delivery', callback)```

* callback `Function` is called with the following arguments:

* details `Object` detailed status report
    * smsc `String` Msisdn of SMS Sender
    * reference `String` Reference number of the delivered message
    * sender  `Msisdn of receiver`
    * status `Delivery status`

* message_id `String` message_id which has been delivered
This should be obtained from callback of modem.sms()

Receive a message
-----------------
```javascript
modem.on('sms received', callback)```

* callback `Function` will be called on each new message with following arguments:
* message `Object`
    * smsc `String` MSISDN of SMS Center
    * sender `String` MSISDN of sender
    * time `Date` Send time
    * text  `String` message body

Get stored messages
-------------------
```javascript
modem.getMessages(callback)```
* callback `Function` will be called with a single argument
  messages `Array`, which contains stores messages

Delete a message
----------------
```javascript
modem.deleteMessage(message_index, callback)```

* message_index `Int` is the message index to be deleted
* callback `Function` called when message is deleted

Get notified when memory is full
--------------------------------
```javascript
modem.on('memory full', callback)```
* callback `Function` will be called when modem has no more space
for further messages

Running custom AT commands
==========================
> Modem.js allows you to run AT commands in a queue and manage them without messing the modem.  
API is still quite simple.

Run a command
-------------
```javascript
job = modem.execute(at_command, [callback], [priority], [timeout])```

* at_command `String` AT command you would like to execute
* callback `Function` called when execution is done, in form of `(escape_char, [response])`
    * escape_char `String` could be 'OK', 'ERROR' or '>'.
    * response `String` modem's response
* prior `Boolean` if set to true, command will be executed immediately
* timeout `Integer` timeout, in milliseconds, defaults to 60 seconds.
* job `EventEmitter` represents the added job.
    * it will emit `timeout` if executing job times out

USS Sessions
============
> Modem.js allows you ro tun ussd sessions.

Instantiate
-----------
```javascript
var Session = require('modem').Ussd_Session```

Create a session
----------------
```javascript
var Session = require('modem').Ussd_Session
var CheckBalance = function(c) {
    var session = new Session;
    session.callback = c;

    session.parseResponse = function(response_code, message) {
        this.close();

        var match = message.match(/([0-9,\,]+)\sRial/);
        if(!match) {
            if(this.callback)
                this.callback(false);
            return ;
        }


        if(this.callback)
            this.callback(match[1]);

        session.modem.credit = match[1];
    }

    session.execute = function() {
        this.query('*141*#', session.parseResponse);
    }

    return session;
}```

About

Offers a high level API for working with AT modems

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published