Blynk = function (auth, options) { var self = this; if (needsEmitter()) { events.EventEmitter.call(this); } this.auth = auth; var options = options || {}; this.heartbeat = options.heartbeat || (10*1000); // Auto-detect board if (options.board) { this.board = options.board; } else if (isEspruino()) { this.board = new BoardEspruinoPico(); } else if (isBrowser()) { this.board = new BoardDummy(); } else { [ bl_node.BoardMRAA, bl_node.BoardOnOff, BoardDummy ].some(function(b){ try { self.board = new b(); return true; } catch (e) { return false; } }); } self.board.init(self); // Auto-detect connector if (options.connector) { this.conn = options.connector; } else if (isEspruino()) { this.conn = new EspruinoTCP(options); } else if (isBrowser()) { this.conn = new bl_browser.WsClient(options); } else { this.conn = new bl_node.SslClient(options); } this.buff_in = ''; this.msg_id = 1; this.vpins = []; this.profile = options.profile; this.VirtualPin = function(vPin) { if (needsEmitter()) { events.EventEmitter.call(this); } this.pin = vPin; self.vpins[vPin] = this; this.write = function(value) { self.virtualWrite(this.pin, value); }; }; this.WidgetBridge = function(vPin) { this.pin = vPin; this.setAuthToken = function(token) { self.sendMsg(MsgType.BRIDGE, [this.pin, 'i', token]); }; this.digitalWrite = function(pin, val) { self.sendMsg(MsgType.BRIDGE, [this.pin, 'dw', pin, val]); }; this.analogWrite = function(pin, val) { self.sendMsg(MsgType.BRIDGE, [this.pin, 'aw', pin, val]); }; this.virtualWrite = function(pin, val) { self.sendMsg(MsgType.BRIDGE, [this.pin, 'vw', pin].concat(val)); }; }; this.WidgetTerminal = function(vPin) { if (needsEmitter()) { events.EventEmitter.call(this); } this.pin = vPin; self.vpins[vPin] = this; this.write = function(data) { self.virtualWrite(this.pin, data); }; }; this.WidgetLCD = function(vPin) { this.pin = vPin; this.clear = function() { self.virtualWrite(this.pin, 'clr'); }; this.print = function(x, y, val) { self.sendMsg(MsgType.HW, ['vw', this.pin, 'p', x, y, val]); }; }; this.WidgetLED = function(vPin) { this.pin = vPin; this.setValue = function(val) { self.virtualWrite(this.pin, val); }; this.turnOn = function() { self.virtualWrite(this.pin, 255); }; this.turnOff = function() { self.virtualWrite(this.pin, 0); }; }; if (needsEmitter()) { util.inherits(this.VirtualPin, events.EventEmitter); util.inherits(this.WidgetBridge, events.EventEmitter); util.inherits(this.WidgetTerminal, events.EventEmitter); } if (!options.skip_connect) { this.connect(); } }
...
* [Blynk + JavaScript in 20 minutes (Raspberry Pi, Edison, Espruino...)](http://www.instructables.com/id/Blynk-JavaScript-in-20-
minutes-Raspberry-Pi-Edison/)
* [Raspberry Pi + DHT11/DHT22/AM2302](http://www.instructables.com/id/Raspberry-Pi-Nodejs-Blynk-App-DHT11DHT22AM2302/)
## Usage example:
```js
var BlynkLib = require('blynk-library');
var blynk = new BlynkLib.Blynk('715f8caae9bf4a91bae319d0376caa8d');
var v1 = new blynk.VirtualPin(1);
var v9 = new blynk.VirtualPin(9);
v1.on('write', function(param) {
console.log('V1:', param);
});
...
BoardMRAA = function () { var self = this; var mraa = require('mraa'); console.log('MRAA Version: ' + mraa.getVersion()); this.init = function(blynk) { self.blynk = blynk; }; this.process = function(values) { switch(values[0]) { case 'pm': break; case 'dw': { var pin = new mraa.Gpio(parseInt(values[1])); pin.dir(mraa.DIR_OUT); pin.write(parseInt(values[2])); } break; case 'aw': { var pwm = new mraa.Pwm(parseInt(values[1])); pwm.enable(true); pwm.period_us(700); pwm.write(scale(parseFloat(values[2]), 0, 255, 0, 1)); } break; case 'dr': { var pin = new mraa.Gpio(parseInt(values[1])); pin.dir(mraa.DIR_IN); self.blynk.sendMsg(MsgType.HW, null, ['dw', values[1], pin.read()]); } break; case 'ar': { var pin = new mraa.Aio(parseInt(values[1])-14); // TODO self.blynk.sendMsg(MsgType.HW, null, ['aw', values[1], pin.read()]); } break; default: return false; } return true; }; }
n/a
BoardOnOff = function () { var self = this; var Gpio; try { Gpio = require('onoff').Gpio; console.log("OnOff mode"); } catch (e) { // Workaround for Omega Gpio = require('/usr/bin/onoff-node/onoff').Gpio; console.log("OnOff-Omega mode"); } this.init = function(blynk) { self.blynk = blynk; }; this.process = function(values) { switch(values[0]) { case 'pm': break; case 'dw': var pin = new Gpio(parseInt(values[1]), 'out'); pin.write(parseInt(values[2])); break; case 'dr': var pin = new Gpio(values[1], 'in'); pin.read(function(err, value) { if (!err) { self.blynk.sendMsg(MsgType.HW, null, ['dw', values[1], value]); } }); break; case 'ar': case 'aw': break; default: return false; } return true; }; }
n/a
SslClient = function (options) { var self = this; events.EventEmitter.call(this); var options = options || {}; var certs_path = options.certs_path || default_certs_path; self.addr = options.addr || "blynk-cloud.com"; self.port = options.port || 8441; // These are necessary only if using the client certificate authentication self.key = options.key || null; self.cert = options.cert || null; self.pass = options.pass || null; // This is necessary only if the server uses the self-signed certificate self.ca = options.ca || [ path.join(certs_path, 'server.crt') ]; self.servername = options.servername || self.addr; var net = require('net'); var tls = require('tls'); var fs = require('fs'); this.write = function(data) { if (self.sock) { self.sock.write(data, 'binary'); } }; this.connect = function(done) { if (self.sock) { self.disconnect(); } var opts = { host: self.addr, port: self.port, servername: self.servername, rejectUnauthorized: false, family: 4 }; if (self.key) { if (Buffer.isBuffer(self.key)) { opts.key = self.key; } else { opts.key = fs.readFileSync(self.key); } } if (self.cert) { if (Buffer.isBuffer(self.cert)) { opts.cert = self.cert; } else { opts.cert = fs.readFileSync(self.cert); } } if (self.pass) { opts.passphrase = self.pass; } if (self.ca) { if (Buffer.isBuffer(options.ca)) { opts.ca = options.ca; } else { opts.ca = self.ca.map(function(item){ return fs.readFileSync(item); }); } } console.log("Connecting to:", self.addr, self.port); var sock = new net.Socket(); sock.on('error', function(e) { console.log(e) }); sock.connect({ host: self.addr, family: 4, port: self.port }, function() { console.log("SSL authorization..."); opts.socket = sock; self.sock = tls.connect(opts, function() { if (!self.sock.authorized) { console.log('SSL not authorized'); return; } console.log('Connected'); self.sock.setNoDelay(true); self.sock.setEncoding('binary'); self.sock.on('data', function(data) { self.emit('data', data); }); self.sock.on('end', function(data) { self.emit('end', data); }); done(); }); self.sock.on('error', function(err) { //console.log('error', err.code); self.emit('error', err); }); }); }; this.disconnect = function() { if (self.sock) { self.sock.destroy(); self.sock.removeAllListeners(); self.sock = null; } }; }
...
if (options.connector) {
this.conn = options.connector;
} else if (isEspruino()) {
this.conn = new EspruinoTCP(options);
} else if (isBrowser()) {
this.conn = new bl_browser.WsClient(options);
} else {
this.conn = new bl_node.SslClient(options);
}
this.buff_in = '';
this.msg_id = 1;
this.vpins = [];
this.profile = options.profile;
...
SslServer = function (options) { var self = this; events.EventEmitter.call(this); var options = options || {}; var certs_path = options.certs_path || default_certs_path; self.addr = options.addr || "0.0.0.0"; self.port = options.port || 8443; self.key = options.key || path.join(certs_path, 'server.pem'); self.cert = options.cert || path.join(certs_path, 'server.crt'); self.pass = options.pass || null; // This is necessary only if the server uses the self-signed certificate self.ca = options.ca || [ path.join(certs_path, 'client.crt') ]; var tls = require('tls'); var fs = require('fs'); this.write = function(data) { if (self.sock) { self.sock.write(data, 'binary'); } }; this.connect = function(done) { if (self.sock) { self.disconnect(); } var opts = { }; if (self.key) { opts.key = fs.readFileSync(self.key); } if (self.cert) { opts.cert = fs.readFileSync(self.cert); } if (self.pass) { opts.passphrase = self.pass; } if (self.ca) { opts.ca = self.ca.map(fs.readFileSync); } if (self.ca) { opts.requestCert = true; } self.srvr = tls.createServer(opts, function(conn) { self.sock = conn; console.log(self.sock.authorized ? 'Authorized' : 'Unauthorized'); self.sock.setNoDelay(true); self.sock.setEncoding('binary'); self.sock.on('data', function(data) { self.emit('data', data); }); self.sock.on('end', function() { self.emit('end'); }); done(); }); console.log("SSL server:", self.addr, self.port); self.srvr.listen(self.port, self.addr); }; this.disconnect = function() { if (self.sock) { self.sock.destroy(); self.sock = null; } }; }
n/a
TcpClient = function (options) { var self = this; events.EventEmitter.call(this); var options = options || {}; self.addr = options.addr || "blynk-cloud.com"; self.port = options.port || 8442; var net = require('net'); this.write = function(data) { if (self.sock) { self.sock.write(data, 'binary'); } }; this.connect = function(done) { if (self.sock) { self.disconnect(); } console.log("Connecting to TCP:", self.addr, self.port); self.sock = new net.Socket(); self.sock.setNoDelay(true); self.sock.setEncoding('binary'); self.sock.connect({ host: self.addr, family: 4, port: self.port }, function() { console.log('Connected'); self.sock.on('data', function(data) { self.emit('data', data); }); self.sock.on('end', function(data) { self.emit('end', data); }); done(); }); self.sock.on('error', function(err) { //console.log('error', err.code); self.emit('error', err); }); }; this.disconnect = function() { if (self.sock) { self.sock.destroy(); self.sock.removeAllListeners(); self.sock = null; } }; }
n/a
TcpServer = function (options) { var self = this; events.EventEmitter.call(this); var options = options || {}; self.addr = options.addr || '0.0.0.0'; self.port = options.port || 8442; var net = require('net'); this.write = function(data) { if (self.sock) { self.sock.write(data, 'binary'); } }; this.connect = function(done) { if (self.sock) { self.disconnect(); } self.srvr = net.createServer(function(conn) { self.sock = conn; console.log('Connected'); self.sock.setNoDelay(true); self.sock.setEncoding('binary'); self.sock.on('data', function(data) { self.emit('data', data); }); self.sock.on('end', function() { self.emit('end'); }); done(); }); console.log("TCP server:", self.addr, self.port); self.srvr.listen(self.port, self.addr); }; this.disconnect = function() { if (self.sock) { self.sock.destroy(); self.sock = null; } }; }
n/a
Blynk = function (auth, options) { var self = this; if (needsEmitter()) { events.EventEmitter.call(this); } this.auth = auth; var options = options || {}; this.heartbeat = options.heartbeat || (10*1000); // Auto-detect board if (options.board) { this.board = options.board; } else if (isEspruino()) { this.board = new BoardEspruinoPico(); } else if (isBrowser()) { this.board = new BoardDummy(); } else { [ bl_node.BoardMRAA, bl_node.BoardOnOff, BoardDummy ].some(function(b){ try { self.board = new b(); return true; } catch (e) { return false; } }); } self.board.init(self); // Auto-detect connector if (options.connector) { this.conn = options.connector; } else if (isEspruino()) { this.conn = new EspruinoTCP(options); } else if (isBrowser()) { this.conn = new bl_browser.WsClient(options); } else { this.conn = new bl_node.SslClient(options); } this.buff_in = ''; this.msg_id = 1; this.vpins = []; this.profile = options.profile; this.VirtualPin = function(vPin) { if (needsEmitter()) { events.EventEmitter.call(this); } this.pin = vPin; self.vpins[vPin] = this; this.write = function(value) { self.virtualWrite(this.pin, value); }; }; this.WidgetBridge = function(vPin) { this.pin = vPin; this.setAuthToken = function(token) { self.sendMsg(MsgType.BRIDGE, [this.pin, 'i', token]); }; this.digitalWrite = function(pin, val) { self.sendMsg(MsgType.BRIDGE, [this.pin, 'dw', pin, val]); }; this.analogWrite = function(pin, val) { self.sendMsg(MsgType.BRIDGE, [this.pin, 'aw', pin, val]); }; this.virtualWrite = function(pin, val) { self.sendMsg(MsgType.BRIDGE, [this.pin, 'vw', pin].concat(val)); }; }; this.WidgetTerminal = function(vPin) { if (needsEmitter()) { events.EventEmitter.call(this); } this.pin = vPin; self.vpins[vPin] = this; this.write = function(data) { self.virtualWrite(this.pin, data); }; }; this.WidgetLCD = function(vPin) { this.pin = vPin; this.clear = function() { self.virtualWrite(this.pin, 'clr'); }; this.print = function(x, y, val) { self.sendMsg(MsgType.HW, ['vw', this.pin, 'p', x, y, val]); }; }; this.WidgetLED = function(vPin) { this.pin = vPin; this.setValue = function(val) { self.virtualWrite(this.pin, val); }; this.turnOn = function() { self.virtualWrite(this.pin, 255); }; this.turnOff = function() { self.virtualWrite(this.pin, 0); }; }; if (needsEmitter()) { util.inherits(this.VirtualPin, events.EventEmitter); util.inherits(this.WidgetBridge, events.EventEmitter); util.inherits(this.WidgetTerminal, events.EventEmitter); } if (!options.skip_connect) { this.connect(); } }
...
* [Blynk + JavaScript in 20 minutes (Raspberry Pi, Edison, Espruino...)](http://www.instructables.com/id/Blynk-JavaScript-in-20-
minutes-Raspberry-Pi-Edison/)
* [Raspberry Pi + DHT11/DHT22/AM2302](http://www.instructables.com/id/Raspberry-Pi-Nodejs-Blynk-App-DHT11DHT22AM2302/)
## Usage example:
```js
var BlynkLib = require('blynk-library');
var blynk = new BlynkLib.Blynk('715f8caae9bf4a91bae319d0376caa8d');
var v1 = new blynk.VirtualPin(1);
var v9 = new blynk.VirtualPin(9);
v1.on('write', function(param) {
console.log('V1:', param);
});
...
function EventEmitter() { EventEmitter.init.call(this); }
n/a
connect = function () { var self = this; var doConnect = function() { if(self.conn) { //cleanup events self.conn.removeAllListeners(); } self.conn.connect(function() { self.conn.on('data', function(data) { self.onReceive(data); }); self.conn.on('end', function() { self.end(); }); self.sendRsp(MsgType.LOGIN, 1, self.auth.length, self.auth); }); self.conn.on('error', function(err) { self.error(err); }); }; if (self.profile) { doConnect(); } else { self.timerConn = setInterval(doConnect, 10000); doConnect(); } }
...
};
this.connect = function(done) {
if (self.sock) {
self.disconnect();
}
console.log("Connecting to TCP:", self.addr, self.port);
self.sock = net.connect({host : self.addr, port: self.port}, function() {
console.log('Connected');
self.sock.on('data', function(data) {
self.emit('data', data);
});
self.sock.on('end', function() {
self.emit('end', '');
});
...
disconnect = function (reconnect) { console.log('Disconnect blynk'); if(typeof reconnect === 'undefined' ) { reconnect = true; } var self = this; this.conn.disconnect(); if (this.timerHb) { clearInterval(this.timerHb); this.timerHb = null; } this.emit('disconnect'); //cleanup to avoid multiplying listeners this.conn.removeAllListeners(); //starting reconnect procedure if not already in connecting loop and reconnect is true if(reconnect && !self.timerConn) { console.log("REARMING DISCONNECT"); setTimeout(function () {self.connect()}, 5000); } }
...
if (self.sock) {
self.sock.write(data, 'binary');
}
};
this.connect = function(done) {
if (self.sock) {
self.disconnect();
}
console.log("Connecting to TCP:", self.addr, self.port);
self.sock = net.connect({host : self.addr, port: self.port}, function() {
console.log('Connected');
self.sock.on('data', function(data) {
self.emit('data', data);
});
...
email = function (to, topic, message) { this.sendMsg(MsgType.EMAIL, [to, topic, message]); }
n/a
end = function () { var self = this; self.disconnect(); }
...
var doConnect = function() {
if(self.conn) {
//cleanup events
self.conn.removeAllListeners();
}
self.conn.connect(function() {
self.conn.on('data', function(data) { self.onReceive(data); });
self.conn.on('end', function() { self.end(); });
self.sendRsp(MsgType.LOGIN, 1, self.auth.length, self.auth);
});
self.conn.on('error', function(err) { self.error(err); });
};
if (self.profile) {
...
error = function (err) { var self = this; //if we throw error and user doesn't handle it, app crashes. is it worth it? this.emit('error', err.code?err.code:'ERROR'); console.error('Error', err.code); //starting reconnect procedure if not already in connecting loop if(!self.timerConn) { setTimeout(function () {self.connect()}, 5000); } }
...
}
self.conn.connect(function() {
self.conn.on('data', function(data) { self.onReceive(data); });
self.conn.on('end', function() { self.end(); });
self.sendRsp(MsgType.LOGIN, 1, self.auth.length, self.auth);
});
self.conn.on('error', function(err) { self.error(err); });
};
if (self.profile) {
doConnect();
} else {
self.timerConn = setInterval(doConnect, 10000);
doConnect();
...
notify = function (message) { this.sendMsg(MsgType.NOTIFY, [message]); }
n/a
onReceive = function (data) {
var self = this;
self.buff_in += data;
while (self.buff_in.length >= 5) {
var msg_type = self.buff_in.charCodeAt(0);
var msg_id = self.buff_in.charCodeAt(1) << 8 | self.buff_in.charCodeAt(2);
var msg_len = self.buff_in.charCodeAt(3) << 8 | self.buff_in.charCodeAt(4);
if (msg_id === 0) { return self.disconnect(); }
if (msg_type === MsgType.RSP) {
//console.log('> ', string_of_enum(MsgType, msg_type), msg_id, string_of_enum(MsgStatus, msg_len));
if (!self.profile) {
if (self.timerConn && msg_id === 1) {
if (msg_len === MsgStatus.OK || msg_len === MsgStatus.ALREADY_REGISTERED) {
clearInterval(self.timerConn);
self.timerConn = null;
self.timerHb = setInterval(function() {
//console.log('Heartbeat');
self.sendMsg(MsgType.PING);
}, self.heartbeat);
console.log('Authorized');
self.sendMsg(MsgType.INTERNAL, ['ver', '0.4.7', 'dev', 'js']);
self.emit('connect');
} else {
console.log('Could not login:', string_of_enum(MsgStatus, msg_len));
//if invalid token, no point in trying to reconnect
if (msg_len === MsgStatus.INVALID_TOKEN) {
//letting main app know why we failed
self.emit('error', string_of_enum(MsgStatus, msg_len));
//console.log('Disconnecting because of invalid token');
self.disconnect();
if(self.timerConn) {
//clear connecting timer
console.log('clear conn timer');
clearInterval(self.timerConn);
self.timerConn = null;
}
}
}
}
}
self.buff_in = self.buff_in.substr(5);
continue;
}
if (msg_len > 1024) { return self.disconnect(); }
if (self.buff_in.length < msg_len+5) {
return;
}
var values = self.buff_in.substr(5, msg_len).split('\0');
self.buff_in = self.buff_in.substr(msg_len+5);
/*if (msg_len) {
console.log('> ', string_of_enum(MsgType, msg_type), msg_id, msg_len, values.join('|'));
} else {
console.log('> ', string_of_enum(MsgType, msg_type), msg_id, msg_len);
}*/
if (msg_type === MsgType.LOGIN ||
msg_type === MsgType.PING)
{
self.sendRsp(MsgType.RSP, msg_id, MsgStatus.OK);
} else if (msg_type === MsgType.GET_TOKEN) {
self.sendRsp(MsgType.GET_TOKEN, msg_id, self.auth.length, self.auth);
} else if (msg_type === MsgType.LOAD_PROF) {
self.sendRsp(MsgType.LOAD_PROF, msg_id, self.profile.length, self.profile);
} else if (msg_type === MsgType.HW ||
msg_type === MsgType.BRIDGE)
{
if (values[0] === 'vw') {
var pin = parseInt(values[1]);
if (self.vpins[pin]) {
self.vpins[pin].emit('write', values.slice(2));
}
} else if (values[0] === 'vr') {
var pin = parseInt(values[1]);
if (self.vpins[pin]) {
self.vpins[pin].emit('read');
}
} else if (self.board.process(values)) {
} else {
console.log('Invalid cmd: ', values[0]);
//self.sendRsp(MsgType.RSP, msg_id, MsgStatus.ILLEGAL_COMMAND);
}
} else if (msg_type === MsgType.REDIRECT) {
self.conn.addr = values[0];
if (values[1]) {
self.conn.port = parseInt(values[1]);
}
console.log('Redirecting to ', self.conn.addr, ':', self.conn.port);
self.disconnect();
} else if (msg_type === MsgType.DEBUG_PRINT) {
console.log('Server: ', values[0]);
} else if (msg_type === MsgType.REGISTER ||
msg_type === MsgType.SAVE_PROF ||
msg_type === MsgType.INTERNAL ||
msg_type === MsgType.ACTIVATE ||
msg_type === MsgType.DEACTIVATE ||
msg_type === MsgType.REFRESH)
{
// these make no sence...
} else {
console.log('Invalid msg type: ', msg_type);
self.sendRsp(MsgType.RSP, msg_id, MsgStatus.ILLEGAL_COMMA ...
...
var doConnect = function() {
if(self.conn) {
//cleanup events
self.conn.removeAllListeners();
}
self.conn.connect(function() {
self.conn.on('data', function(data) { self.onReceive(data); });
self.conn.on('end', function() { self.end(); });
self.sendRsp(MsgType.LOGIN, 1, self.auth.length, self.auth);
});
self.conn.on('error', function(err) { self.error(err); });
};
...
sendMsg = function (msg_type, values, msg_id) { var values = values || ['']; var data = values.join('\0'); this.sendRsp(msg_type, msg_id, data.length, data); }
...
var pin = Pin(values[1]);
var val = parseInt(values[2]);
pinMode(pin, 'output');
digitalWrite(pin, val);
break;
case 'dr':
var pin = Pin(values[1]);
self.blynk.sendMsg(MsgType.HW, ['dw', values[1], digitalRead(pin)]);
break;
case 'aw':
var pin = Pin(values[1]);
var val = parseFloat(values[2]);
pinMode(pin, 'output');
analogWrite(pin, val / 255);
break;
...
sendRsp = function (msg_type, msg_id, msg_len, data) {
var self = this;
data = data || "";
msg_id = msg_id || (self.msg_id++);
if (msg_type == MsgType.RSP) {
//console.log('< ', string_of_enum(MsgType, msg_type), msg_id, string_of_enum(MsgStatus, msg_len));
data = blynkHeader(msg_type, msg_id, msg_len)
} else {
/*if (msg_len) {
console.log('< ', string_of_enum(MsgType, msg_type), msg_id, msg_len, data.split('\0').join('|'));
} else {
console.log('< ', string_of_enum(MsgType, msg_type), msg_id, msg_len);
}*/
data = blynkHeader(msg_type, msg_id, msg_len) + data;
}
self.conn.write(data)
// TODO: track also recieving time
/*if (!self.profile) {
if (self.timerHb) {
clearInterval(self.timerHb);
self.timerHb = setInterval(function(){
//console.log('Heartbeat');
self.sendMsg(MsgType.PING);
}, self.heartbeat);
}
}*/
}
...
} else {
console.log('> ', string_of_enum(MsgType, msg_type), msg_id, msg_len);
}*/
if (msg_type === MsgType.LOGIN ||
msg_type === MsgType.PING)
{
self.sendRsp(MsgType.RSP, msg_id, MsgStatus.OK);
} else if (msg_type === MsgType.HW ||
msg_type === MsgType.BRIDGE)
{
if (values[0] === 'vw') {
var pin = parseInt(values[1]);
if (self.vpins[pin]) {
self.vpins[pin].emit('write', values.slice(2));
...
setProperty = function (pin, prop, val) { this.sendMsg(MsgType.PROPERTY, [pin, prop].concat(val)); }
n/a
sms = function (message) { this.sendMsg(MsgType.SMS, [message]); }
n/a
syncAll = function () { this.sendMsg(MsgType.HW_SYNC); }
n/a
syncVirtual = function (pin) { this.sendMsg(MsgType.HW_SYNC, ['vr', pin]); }
...
args.ops.forEach(function(op) {
switch(op[0]) {
case 'dw': bridge.digitalWrite(op[1], op[2]); break;
case 'aw': bridge.analogWrite (op[1], op[2]); break;
case 'vw': bridge.virtualWrite(op[1], op.slice(2)); break;
case 'dr': blynk.syncDigital(op[1]); break;
case 'ar': blynk.syncAnalog (op[1]); break;
case 'vr': blynk.syncVirtual(op[1]); break;
}
});
});
...
tweet = function (message) { this.sendMsg(MsgType.TWEET, [message]); }
n/a
virtualWrite = function (pin, val) { this.sendMsg(MsgType.HW, ['vw', pin].concat(val)); }
...
this.profile = options.profile;
this.VirtualPin = function(vPin) {
this.pin = vPin;
self.vpins[vPin] = this;
this.write = function(value) {
self.virtualWrite(this.pin, value);
};
};
this.WidgetBridge = function(vPin) {
this.pin = vPin;
this.setAuthToken = function(token) {
...
SslClient = function (options) { var self = this; events.EventEmitter.call(this); var options = options || {}; var certs_path = options.certs_path || default_certs_path; self.addr = options.addr || "blynk-cloud.com"; self.port = options.port || 8441; // These are necessary only if using the client certificate authentication self.key = options.key || null; self.cert = options.cert || null; self.pass = options.pass || null; // This is necessary only if the server uses the self-signed certificate self.ca = options.ca || [ path.join(certs_path, 'server.crt') ]; self.servername = options.servername || self.addr; var net = require('net'); var tls = require('tls'); var fs = require('fs'); this.write = function(data) { if (self.sock) { self.sock.write(data, 'binary'); } }; this.connect = function(done) { if (self.sock) { self.disconnect(); } var opts = { host: self.addr, port: self.port, servername: self.servername, rejectUnauthorized: false, family: 4 }; if (self.key) { if (Buffer.isBuffer(self.key)) { opts.key = self.key; } else { opts.key = fs.readFileSync(self.key); } } if (self.cert) { if (Buffer.isBuffer(self.cert)) { opts.cert = self.cert; } else { opts.cert = fs.readFileSync(self.cert); } } if (self.pass) { opts.passphrase = self.pass; } if (self.ca) { if (Buffer.isBuffer(options.ca)) { opts.ca = options.ca; } else { opts.ca = self.ca.map(function(item){ return fs.readFileSync(item); }); } } console.log("Connecting to:", self.addr, self.port); var sock = new net.Socket(); sock.on('error', function(e) { console.log(e) }); sock.connect({ host: self.addr, family: 4, port: self.port }, function() { console.log("SSL authorization..."); opts.socket = sock; self.sock = tls.connect(opts, function() { if (!self.sock.authorized) { console.log('SSL not authorized'); return; } console.log('Connected'); self.sock.setNoDelay(true); self.sock.setEncoding('binary'); self.sock.on('data', function(data) { self.emit('data', data); }); self.sock.on('end', function(data) { self.emit('end', data); }); done(); }); self.sock.on('error', function(err) { //console.log('error', err.code); self.emit('error', err); }); }); }; this.disconnect = function() { if (self.sock) { self.sock.destroy(); self.sock.removeAllListeners(); self.sock = null; } }; }
...
if (options.connector) {
this.conn = options.connector;
} else if (isEspruino()) {
this.conn = new EspruinoTCP(options);
} else if (isBrowser()) {
this.conn = new bl_browser.WsClient(options);
} else {
this.conn = new bl_node.SslClient(options);
}
this.buff_in = '';
this.msg_id = 1;
this.vpins = [];
this.profile = options.profile;
...
function EventEmitter() { EventEmitter.init.call(this); }
n/a
SslServer = function (options) { var self = this; events.EventEmitter.call(this); var options = options || {}; var certs_path = options.certs_path || default_certs_path; self.addr = options.addr || "0.0.0.0"; self.port = options.port || 8443; self.key = options.key || path.join(certs_path, 'server.pem'); self.cert = options.cert || path.join(certs_path, 'server.crt'); self.pass = options.pass || null; // This is necessary only if the server uses the self-signed certificate self.ca = options.ca || [ path.join(certs_path, 'client.crt') ]; var tls = require('tls'); var fs = require('fs'); this.write = function(data) { if (self.sock) { self.sock.write(data, 'binary'); } }; this.connect = function(done) { if (self.sock) { self.disconnect(); } var opts = { }; if (self.key) { opts.key = fs.readFileSync(self.key); } if (self.cert) { opts.cert = fs.readFileSync(self.cert); } if (self.pass) { opts.passphrase = self.pass; } if (self.ca) { opts.ca = self.ca.map(fs.readFileSync); } if (self.ca) { opts.requestCert = true; } self.srvr = tls.createServer(opts, function(conn) { self.sock = conn; console.log(self.sock.authorized ? 'Authorized' : 'Unauthorized'); self.sock.setNoDelay(true); self.sock.setEncoding('binary'); self.sock.on('data', function(data) { self.emit('data', data); }); self.sock.on('end', function() { self.emit('end'); }); done(); }); console.log("SSL server:", self.addr, self.port); self.srvr.listen(self.port, self.addr); }; this.disconnect = function() { if (self.sock) { self.sock.destroy(); self.sock = null; } }; }
n/a
function EventEmitter() { EventEmitter.init.call(this); }
n/a
TcpClient = function (options) { var self = this; events.EventEmitter.call(this); var options = options || {}; self.addr = options.addr || "blynk-cloud.com"; self.port = options.port || 8442; var net = require('net'); this.write = function(data) { if (self.sock) { self.sock.write(data, 'binary'); } }; this.connect = function(done) { if (self.sock) { self.disconnect(); } console.log("Connecting to TCP:", self.addr, self.port); self.sock = new net.Socket(); self.sock.setNoDelay(true); self.sock.setEncoding('binary'); self.sock.connect({ host: self.addr, family: 4, port: self.port }, function() { console.log('Connected'); self.sock.on('data', function(data) { self.emit('data', data); }); self.sock.on('end', function(data) { self.emit('end', data); }); done(); }); self.sock.on('error', function(err) { //console.log('error', err.code); self.emit('error', err); }); }; this.disconnect = function() { if (self.sock) { self.sock.destroy(); self.sock.removeAllListeners(); self.sock = null; } }; }
n/a
function EventEmitter() { EventEmitter.init.call(this); }
n/a
TcpServer = function (options) { var self = this; events.EventEmitter.call(this); var options = options || {}; self.addr = options.addr || '0.0.0.0'; self.port = options.port || 8442; var net = require('net'); this.write = function(data) { if (self.sock) { self.sock.write(data, 'binary'); } }; this.connect = function(done) { if (self.sock) { self.disconnect(); } self.srvr = net.createServer(function(conn) { self.sock = conn; console.log('Connected'); self.sock.setNoDelay(true); self.sock.setEncoding('binary'); self.sock.on('data', function(data) { self.emit('data', data); }); self.sock.on('end', function() { self.emit('end'); }); done(); }); console.log("TCP server:", self.addr, self.port); self.srvr.listen(self.port, self.addr); }; this.disconnect = function() { if (self.sock) { self.sock.destroy(); self.sock = null; } }; }
n/a
function EventEmitter() { EventEmitter.init.call(this); }
n/a
Blynk = function (auth, options) { var self = this; if (needsEmitter()) { events.EventEmitter.call(this); } this.auth = auth; var options = options || {}; this.heartbeat = options.heartbeat || (10*1000); // Auto-detect board if (options.board) { this.board = options.board; } else if (isEspruino()) { this.board = new BoardEspruinoPico(); } else if (isBrowser()) { this.board = new BoardDummy(); } else { [ bl_node.BoardMRAA, bl_node.BoardOnOff, BoardDummy ].some(function(b){ try { self.board = new b(); return true; } catch (e) { return false; } }); } self.board.init(self); // Auto-detect connector if (options.connector) { this.conn = options.connector; } else if (isEspruino()) { this.conn = new EspruinoTCP(options); } else if (isBrowser()) { this.conn = new bl_browser.WsClient(options); } else { this.conn = new bl_node.SslClient(options); } this.buff_in = ''; this.msg_id = 1; this.vpins = []; this.profile = options.profile; this.VirtualPin = function(vPin) { if (needsEmitter()) { events.EventEmitter.call(this); } this.pin = vPin; self.vpins[vPin] = this; this.write = function(value) { self.virtualWrite(this.pin, value); }; }; this.WidgetBridge = function(vPin) { this.pin = vPin; this.setAuthToken = function(token) { self.sendMsg(MsgType.BRIDGE, [this.pin, 'i', token]); }; this.digitalWrite = function(pin, val) { self.sendMsg(MsgType.BRIDGE, [this.pin, 'dw', pin, val]); }; this.analogWrite = function(pin, val) { self.sendMsg(MsgType.BRIDGE, [this.pin, 'aw', pin, val]); }; this.virtualWrite = function(pin, val) { self.sendMsg(MsgType.BRIDGE, [this.pin, 'vw', pin].concat(val)); }; }; this.WidgetTerminal = function(vPin) { if (needsEmitter()) { events.EventEmitter.call(this); } this.pin = vPin; self.vpins[vPin] = this; this.write = function(data) { self.virtualWrite(this.pin, data); }; }; this.WidgetLCD = function(vPin) { this.pin = vPin; this.clear = function() { self.virtualWrite(this.pin, 'clr'); }; this.print = function(x, y, val) { self.sendMsg(MsgType.HW, ['vw', this.pin, 'p', x, y, val]); }; }; this.WidgetLED = function(vPin) { this.pin = vPin; this.setValue = function(val) { self.virtualWrite(this.pin, val); }; this.turnOn = function() { self.virtualWrite(this.pin, 255); }; this.turnOff = function() { self.virtualWrite(this.pin, 0); }; }; if (needsEmitter()) { util.inherits(this.VirtualPin, events.EventEmitter); util.inherits(this.WidgetBridge, events.EventEmitter); util.inherits(this.WidgetTerminal, events.EventEmitter); } if (!options.skip_connect) { this.connect(); } }
...
* [Blynk + JavaScript in 20 minutes (Raspberry Pi, Edison, Espruino...)](http://www.instructables.com/id/Blynk-JavaScript-in-20-
minutes-Raspberry-Pi-Edison/)
* [Raspberry Pi + DHT11/DHT22/AM2302](http://www.instructables.com/id/Raspberry-Pi-Nodejs-Blynk-App-DHT11DHT22AM2302/)
## Usage example:
```js
var BlynkLib = require('blynk-library');
var blynk = new BlynkLib.Blynk('715f8caae9bf4a91bae319d0376caa8d');
var v1 = new blynk.VirtualPin(1);
var v9 = new blynk.VirtualPin(9);
v1.on('write', function(param) {
console.log('V1:', param);
});
...
BoardMRAA = function () { var self = this; var mraa = require('mraa'); console.log('MRAA Version: ' + mraa.getVersion()); this.init = function(blynk) { self.blynk = blynk; }; this.process = function(values) { switch(values[0]) { case 'pm': break; case 'dw': { var pin = new mraa.Gpio(parseInt(values[1])); pin.dir(mraa.DIR_OUT); pin.write(parseInt(values[2])); } break; case 'aw': { var pwm = new mraa.Pwm(parseInt(values[1])); pwm.enable(true); pwm.period_us(700); pwm.write(scale(parseFloat(values[2]), 0, 255, 0, 1)); } break; case 'dr': { var pin = new mraa.Gpio(parseInt(values[1])); pin.dir(mraa.DIR_IN); self.blynk.sendMsg(MsgType.HW, null, ['dw', values[1], pin.read()]); } break; case 'ar': { var pin = new mraa.Aio(parseInt(values[1])-14); // TODO self.blynk.sendMsg(MsgType.HW, null, ['aw', values[1], pin.read()]); } break; default: return false; } return true; }; }
n/a
BoardOnOff = function () { var self = this; var Gpio; try { Gpio = require('onoff').Gpio; console.log("OnOff mode"); } catch (e) { // Workaround for Omega Gpio = require('/usr/bin/onoff-node/onoff').Gpio; console.log("OnOff-Omega mode"); } this.init = function(blynk) { self.blynk = blynk; }; this.process = function(values) { switch(values[0]) { case 'pm': break; case 'dw': var pin = new Gpio(parseInt(values[1]), 'out'); pin.write(parseInt(values[2])); break; case 'dr': var pin = new Gpio(values[1], 'in'); pin.read(function(err, value) { if (!err) { self.blynk.sendMsg(MsgType.HW, null, ['dw', values[1], value]); } }); break; case 'ar': case 'aw': break; default: return false; } return true; }; }
n/a
SslClient = function (options) { var self = this; events.EventEmitter.call(this); var options = options || {}; var certs_path = options.certs_path || default_certs_path; self.addr = options.addr || "blynk-cloud.com"; self.port = options.port || 8441; // These are necessary only if using the client certificate authentication self.key = options.key || null; self.cert = options.cert || null; self.pass = options.pass || null; // This is necessary only if the server uses the self-signed certificate self.ca = options.ca || [ path.join(certs_path, 'server.crt') ]; self.servername = options.servername || self.addr; var net = require('net'); var tls = require('tls'); var fs = require('fs'); this.write = function(data) { if (self.sock) { self.sock.write(data, 'binary'); } }; this.connect = function(done) { if (self.sock) { self.disconnect(); } var opts = { host: self.addr, port: self.port, servername: self.servername, rejectUnauthorized: false, family: 4 }; if (self.key) { if (Buffer.isBuffer(self.key)) { opts.key = self.key; } else { opts.key = fs.readFileSync(self.key); } } if (self.cert) { if (Buffer.isBuffer(self.cert)) { opts.cert = self.cert; } else { opts.cert = fs.readFileSync(self.cert); } } if (self.pass) { opts.passphrase = self.pass; } if (self.ca) { if (Buffer.isBuffer(options.ca)) { opts.ca = options.ca; } else { opts.ca = self.ca.map(function(item){ return fs.readFileSync(item); }); } } console.log("Connecting to:", self.addr, self.port); var sock = new net.Socket(); sock.on('error', function(e) { console.log(e) }); sock.connect({ host: self.addr, family: 4, port: self.port }, function() { console.log("SSL authorization..."); opts.socket = sock; self.sock = tls.connect(opts, function() { if (!self.sock.authorized) { console.log('SSL not authorized'); return; } console.log('Connected'); self.sock.setNoDelay(true); self.sock.setEncoding('binary'); self.sock.on('data', function(data) { self.emit('data', data); }); self.sock.on('end', function(data) { self.emit('end', data); }); done(); }); self.sock.on('error', function(err) { //console.log('error', err.code); self.emit('error', err); }); }); }; this.disconnect = function() { if (self.sock) { self.sock.destroy(); self.sock.removeAllListeners(); self.sock = null; } }; }
...
if (options.connector) {
this.conn = options.connector;
} else if (isEspruino()) {
this.conn = new EspruinoTCP(options);
} else if (isBrowser()) {
this.conn = new bl_browser.WsClient(options);
} else {
this.conn = new bl_node.SslClient(options);
}
this.buff_in = '';
this.msg_id = 1;
this.vpins = [];
this.profile = options.profile;
...
SslServer = function (options) { var self = this; events.EventEmitter.call(this); var options = options || {}; var certs_path = options.certs_path || default_certs_path; self.addr = options.addr || "0.0.0.0"; self.port = options.port || 8443; self.key = options.key || path.join(certs_path, 'server.pem'); self.cert = options.cert || path.join(certs_path, 'server.crt'); self.pass = options.pass || null; // This is necessary only if the server uses the self-signed certificate self.ca = options.ca || [ path.join(certs_path, 'client.crt') ]; var tls = require('tls'); var fs = require('fs'); this.write = function(data) { if (self.sock) { self.sock.write(data, 'binary'); } }; this.connect = function(done) { if (self.sock) { self.disconnect(); } var opts = { }; if (self.key) { opts.key = fs.readFileSync(self.key); } if (self.cert) { opts.cert = fs.readFileSync(self.cert); } if (self.pass) { opts.passphrase = self.pass; } if (self.ca) { opts.ca = self.ca.map(fs.readFileSync); } if (self.ca) { opts.requestCert = true; } self.srvr = tls.createServer(opts, function(conn) { self.sock = conn; console.log(self.sock.authorized ? 'Authorized' : 'Unauthorized'); self.sock.setNoDelay(true); self.sock.setEncoding('binary'); self.sock.on('data', function(data) { self.emit('data', data); }); self.sock.on('end', function() { self.emit('end'); }); done(); }); console.log("SSL server:", self.addr, self.port); self.srvr.listen(self.port, self.addr); }; this.disconnect = function() { if (self.sock) { self.sock.destroy(); self.sock = null; } }; }
n/a
TcpClient = function (options) { var self = this; events.EventEmitter.call(this); var options = options || {}; self.addr = options.addr || "blynk-cloud.com"; self.port = options.port || 8442; var net = require('net'); this.write = function(data) { if (self.sock) { self.sock.write(data, 'binary'); } }; this.connect = function(done) { if (self.sock) { self.disconnect(); } console.log("Connecting to TCP:", self.addr, self.port); self.sock = new net.Socket(); self.sock.setNoDelay(true); self.sock.setEncoding('binary'); self.sock.connect({ host: self.addr, family: 4, port: self.port }, function() { console.log('Connected'); self.sock.on('data', function(data) { self.emit('data', data); }); self.sock.on('end', function(data) { self.emit('end', data); }); done(); }); self.sock.on('error', function(err) { //console.log('error', err.code); self.emit('error', err); }); }; this.disconnect = function() { if (self.sock) { self.sock.destroy(); self.sock.removeAllListeners(); self.sock = null; } }; }
n/a
TcpServer = function (options) { var self = this; events.EventEmitter.call(this); var options = options || {}; self.addr = options.addr || '0.0.0.0'; self.port = options.port || 8442; var net = require('net'); this.write = function(data) { if (self.sock) { self.sock.write(data, 'binary'); } }; this.connect = function(done) { if (self.sock) { self.disconnect(); } self.srvr = net.createServer(function(conn) { self.sock = conn; console.log('Connected'); self.sock.setNoDelay(true); self.sock.setEncoding('binary'); self.sock.on('data', function(data) { self.emit('data', data); }); self.sock.on('end', function() { self.emit('end'); }); done(); }); console.log("TCP server:", self.addr, self.port); self.srvr.listen(self.port, self.addr); }; this.disconnect = function() { if (self.sock) { self.sock.destroy(); self.sock = null; } }; }
n/a
Blynk = function (auth, options) { var self = this; this.auth = auth; var options = options || {}; this.heartbeat = options.heartbeat || (10*1000); // Auto-detect board if (options.board) { this.board = options.board; } else { this.board = new BoardEspruino(); } self.board.init(self); // Auto-detect connector if (options.connector) { this.conn = options.connector; } else { this.conn = new EspruinoTCP(options); } this.buff_in = ''; this.msg_id = 1; this.vpins = []; this.profile = options.profile; this.VirtualPin = function(vPin) { this.pin = vPin; self.vpins[vPin] = this; this.write = function(value) { self.virtualWrite(this.pin, value); }; }; this.WidgetBridge = function(vPin) { this.pin = vPin; this.setAuthToken = function(token) { self.sendMsg(MsgType.BRIDGE, [this.pin, 'i', token]); }; this.digitalWrite = function(pin, val) { self.sendMsg(MsgType.BRIDGE, [this.pin, 'dw', pin, val]); }; this.analogWrite = function(pin, val) { self.sendMsg(MsgType.BRIDGE, [this.pin, 'aw', pin, val]); }; this.virtualWrite = function(pin, val) { self.sendMsg(MsgType.BRIDGE, [this.pin, 'vw', pin].concat(val)); }; }; this.WidgetTerminal = function(vPin) { if (needsEmitter()) { events.EventEmitter.call(this); } this.pin = vPin; self.vpins[vPin] = this; this.write = function(data) { self.virtualWrite(this.pin, data); }; }; this.WidgetLCD = function(vPin) { this.pin = vPin; this.clear = function() { self.virtualWrite(this.pin, 'clr'); }; this.print = function(x, y, val) { self.sendMsg(MsgType.HW, ['vw', this.pin, 'p', x, y, val]); }; }; this.WidgetLED = function(vPin) { this.pin = vPin; this.setValue = function(val) { self.virtualWrite(this.pin, val); }; this.turnOn = function() { self.virtualWrite(this.pin, 255); }; this.turnOff = function() { self.virtualWrite(this.pin, 0); }; }; if (!options.skip_connect) { this.connect(); } }
...
* [Blynk + JavaScript in 20 minutes (Raspberry Pi, Edison, Espruino...)](http://www.instructables.com/id/Blynk-JavaScript-in-20-
minutes-Raspberry-Pi-Edison/)
* [Raspberry Pi + DHT11/DHT22/AM2302](http://www.instructables.com/id/Raspberry-Pi-Nodejs-Blynk-App-DHT11DHT22AM2302/)
## Usage example:
```js
var BlynkLib = require('blynk-library');
var blynk = new BlynkLib.Blynk('715f8caae9bf4a91bae319d0376caa8d');
var v1 = new blynk.VirtualPin(1);
var v9 = new blynk.VirtualPin(9);
v1.on('write', function(param) {
console.log('V1:', param);
});
...
BoardMRAA = function () { var self = this; var mraa = require('mraa'); console.log('MRAA Version: ' + mraa.getVersion()); this.init = function(blynk) { self.blynk = blynk; }; this.process = function(values) { switch(values[0]) { case 'pm': break; case 'dw': { var pin = new mraa.Gpio(parseInt(values[1])); pin.dir(mraa.DIR_OUT); pin.write(parseInt(values[2])); } break; case 'aw': { var pwm = new mraa.Pwm(parseInt(values[1])); pwm.enable(true); pwm.period_us(700); pwm.write(scale(parseFloat(values[2]), 0, 255, 0, 1)); } break; case 'dr': { var pin = new mraa.Gpio(parseInt(values[1])); pin.dir(mraa.DIR_IN); self.blynk.sendMsg(MsgType.HW, null, ['dw', values[1], pin.read()]); } break; case 'ar': { var pin = new mraa.Aio(parseInt(values[1])-14); // TODO self.blynk.sendMsg(MsgType.HW, null, ['aw', values[1], pin.read()]); } break; default: return false; } return true; }; }
n/a
BoardOnOff = function () { var self = this; var Gpio; try { Gpio = require('onoff').Gpio; console.log("OnOff mode"); } catch (e) { // Workaround for Omega Gpio = require('/usr/bin/onoff-node/onoff').Gpio; console.log("OnOff-Omega mode"); } this.init = function(blynk) { self.blynk = blynk; }; this.process = function(values) { switch(values[0]) { case 'pm': break; case 'dw': var pin = new Gpio(parseInt(values[1]), 'out'); pin.write(parseInt(values[2])); break; case 'dr': var pin = new Gpio(values[1], 'in'); pin.read(function(err, value) { if (!err) { self.blynk.sendMsg(MsgType.HW, null, ['dw', values[1], value]); } }); break; case 'ar': case 'aw': break; default: return false; } return true; }; }
n/a
SslClient = function (options) { var self = this; events.EventEmitter.call(this); var options = options || {}; var certs_path = options.certs_path || default_certs_path; self.addr = options.addr || "blynk-cloud.com"; self.port = options.port || 8441; // These are necessary only if using the client certificate authentication self.key = options.key || null; self.cert = options.cert || null; self.pass = options.pass || null; // This is necessary only if the server uses the self-signed certificate self.ca = options.ca || [ path.join(certs_path, 'server.crt') ]; self.servername = options.servername || self.addr; var net = require('net'); var tls = require('tls'); var fs = require('fs'); this.write = function(data) { if (self.sock) { self.sock.write(data, 'binary'); } }; this.connect = function(done) { if (self.sock) { self.disconnect(); } var opts = { host: self.addr, port: self.port, servername: self.servername, rejectUnauthorized: false, family: 4 }; if (self.key) { if (Buffer.isBuffer(self.key)) { opts.key = self.key; } else { opts.key = fs.readFileSync(self.key); } } if (self.cert) { if (Buffer.isBuffer(self.cert)) { opts.cert = self.cert; } else { opts.cert = fs.readFileSync(self.cert); } } if (self.pass) { opts.passphrase = self.pass; } if (self.ca) { if (Buffer.isBuffer(options.ca)) { opts.ca = options.ca; } else { opts.ca = self.ca.map(function(item){ return fs.readFileSync(item); }); } } console.log("Connecting to:", self.addr, self.port); var sock = new net.Socket(); sock.on('error', function(e) { console.log(e) }); sock.connect({ host: self.addr, family: 4, port: self.port }, function() { console.log("SSL authorization..."); opts.socket = sock; self.sock = tls.connect(opts, function() { if (!self.sock.authorized) { console.log('SSL not authorized'); return; } console.log('Connected'); self.sock.setNoDelay(true); self.sock.setEncoding('binary'); self.sock.on('data', function(data) { self.emit('data', data); }); self.sock.on('end', function(data) { self.emit('end', data); }); done(); }); self.sock.on('error', function(err) { //console.log('error', err.code); self.emit('error', err); }); }); }; this.disconnect = function() { if (self.sock) { self.sock.destroy(); self.sock.removeAllListeners(); self.sock = null; } }; }
...
if (options.connector) {
this.conn = options.connector;
} else if (isEspruino()) {
this.conn = new EspruinoTCP(options);
} else if (isBrowser()) {
this.conn = new bl_browser.WsClient(options);
} else {
this.conn = new bl_node.SslClient(options);
}
this.buff_in = '';
this.msg_id = 1;
this.vpins = [];
this.profile = options.profile;
...
SslServer = function (options) { var self = this; events.EventEmitter.call(this); var options = options || {}; var certs_path = options.certs_path || default_certs_path; self.addr = options.addr || "0.0.0.0"; self.port = options.port || 8443; self.key = options.key || path.join(certs_path, 'server.pem'); self.cert = options.cert || path.join(certs_path, 'server.crt'); self.pass = options.pass || null; // This is necessary only if the server uses the self-signed certificate self.ca = options.ca || [ path.join(certs_path, 'client.crt') ]; var tls = require('tls'); var fs = require('fs'); this.write = function(data) { if (self.sock) { self.sock.write(data, 'binary'); } }; this.connect = function(done) { if (self.sock) { self.disconnect(); } var opts = { }; if (self.key) { opts.key = fs.readFileSync(self.key); } if (self.cert) { opts.cert = fs.readFileSync(self.cert); } if (self.pass) { opts.passphrase = self.pass; } if (self.ca) { opts.ca = self.ca.map(fs.readFileSync); } if (self.ca) { opts.requestCert = true; } self.srvr = tls.createServer(opts, function(conn) { self.sock = conn; console.log(self.sock.authorized ? 'Authorized' : 'Unauthorized'); self.sock.setNoDelay(true); self.sock.setEncoding('binary'); self.sock.on('data', function(data) { self.emit('data', data); }); self.sock.on('end', function() { self.emit('end'); }); done(); }); console.log("SSL server:", self.addr, self.port); self.srvr.listen(self.port, self.addr); }; this.disconnect = function() { if (self.sock) { self.sock.destroy(); self.sock = null; } }; }
n/a
TcpClient = function (options) { var self = this; events.EventEmitter.call(this); var options = options || {}; self.addr = options.addr || "blynk-cloud.com"; self.port = options.port || 8442; var net = require('net'); this.write = function(data) { if (self.sock) { self.sock.write(data, 'binary'); } }; this.connect = function(done) { if (self.sock) { self.disconnect(); } console.log("Connecting to TCP:", self.addr, self.port); self.sock = new net.Socket(); self.sock.setNoDelay(true); self.sock.setEncoding('binary'); self.sock.connect({ host: self.addr, family: 4, port: self.port }, function() { console.log('Connected'); self.sock.on('data', function(data) { self.emit('data', data); }); self.sock.on('end', function(data) { self.emit('end', data); }); done(); }); self.sock.on('error', function(err) { //console.log('error', err.code); self.emit('error', err); }); }; this.disconnect = function() { if (self.sock) { self.sock.destroy(); self.sock.removeAllListeners(); self.sock = null; } }; }
n/a
TcpServer = function (options) { var self = this; events.EventEmitter.call(this); var options = options || {}; self.addr = options.addr || '0.0.0.0'; self.port = options.port || 8442; var net = require('net'); this.write = function(data) { if (self.sock) { self.sock.write(data, 'binary'); } }; this.connect = function(done) { if (self.sock) { self.disconnect(); } self.srvr = net.createServer(function(conn) { self.sock = conn; console.log('Connected'); self.sock.setNoDelay(true); self.sock.setEncoding('binary'); self.sock.on('data', function(data) { self.emit('data', data); }); self.sock.on('end', function() { self.emit('end'); }); done(); }); console.log("TCP server:", self.addr, self.port); self.srvr.listen(self.port, self.addr); }; this.disconnect = function() { if (self.sock) { self.sock.destroy(); self.sock = null; } }; }
n/a