Quipu
This modules provides SMS and 3G functionnalities in node.js.
From Wikipedia article:
"A quipu usually consisted of colored, spun, and plied thread or strings made from cotton or camelid fiber. For the Inca, the system aided in collecting data and keeping records, ranging from monitoring tax obligations, properly collecting census records, calendrical information, and military organization."
Getting started
After creating a file called myPINcode.js
containing module.exports = xxxx;
your pin code, you can use the library as follows:
var quipu = require("./index.js");
var yourNumber = "336........";
var devices = {
modem: "/dev/ttyUSB0",
sms: "/dev/ttyUSB2"
};
quipu.handle("initialize", devices);
quipu.sendSMS("Hello from quipu.", yourNumber);
quipu.on("smsReceived", function(sms){
console.log(sms);
});
quipu.handle("open3G");
setTimeout(function(){
quipu.handle("close3G");
}, 30000)
quipu.handle("openTunnel", 2222, 9632, "kerrigan");
setTimeout(function(){
quipu.handle("closeTunnel");
}, 30000)
Behind the scene, there is a final state machine (FSM) with the following states:
- uninitialized: quipu was just turned on, nothing's happening.
- initialized: quipu has its sms and modem ports open. It is then capable of receiving/sending sms, and opening a 3G connection.
- 3G_connected: quipu is now connected to internet via a 3G connection.
- tunnelling: quipu has a ssh connection opened with some remote server.
Compressing messages
If you're using the SMS protocol, you may have some troubles sending some messages, because of the size (160 characters) or some characters, such as curly braces. The file parser.js
provides and encode
and decode
functions that can help you, for example, passing json objects through the air:
// to send encoded, as sms don't like curly braces and other stuff
var parser = require("./parser.js")
parser.encode(devices)
.then(function(msg){
quipu.sendSMS(msg, yourNumber);
})
.catch(function(err){
console.log(err);
});
// and to decode use
quipu.on("smsReceived", function(sms){
parser.decode(sms.body)
.then(function(object){
console.log(object);
})
});
Compatibility
This project has been developped and tested for the following 3G devices:
References
AT commands:
SMS format:
PPP: