function(auth, options) {
  var self = this;
  if (needsEmitter()) {
    events.EventEmitter.call(this);
  }

  this.auth = auth;
  var options = options || {};
  this.heartbeat = options.heartbeat || 10000;

  console.log("\n\
    ___  __          __\n\
   / _ )/ /_ _____  / /__\n\
  / _  / / // / _ \\/  '_/\n\
 /____/_/\\_, /_//_/_/\\_\\\n\
        /___/\n\
\n\
  Give Blynk a Github star! => https://github.com/vshymanskyy/blynk-library-js\n\
");

  // 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.WidgetTable = function(vPin) {
    this.pin = vPin;

    this.clear = function() {
      self.virtualWrite(this.pin, 'clr');
    };
    
    this.add_row = function(id, name, value) {
      self.virtualWrite(this.pin, ['add', id, name, value]);
    };
    
    this.update_row = function(id, name, value) {
	  self.virtualWrite(this.pin, ['update', id, name, value]);
    };

    this.highlight_row = function(id) {
      self.virtualWrite(this.pin, ['pick', id]);
    };

    this.select_row = function(id) {
      self.virtualWrite(this.pin, ['select', id]);
    };

    this.deselect_row = function(id) {
      self.virtualWrite(this.pin, ['deselect', id]);
    };

    this.move_row = function(old_row, new_row) {
      self.virtualWrite(this.pin, ['order', old_row, new_row]);
    };
  };

  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);
    };
  };
  
  this.WidgetMAP = function(vPin) {
    this.pin = vPin;
    
    this.location = function(index, lat, lon, value) {
      var locationdata = [index, lat, lon, value]
      self.virtualWrite(this.pin, locationdata);
    }
  };

  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();
  }
}
function(auth, options) {
  var self = this;
  if (needsEmitter()) {
    events.EventEmitter.call(this);
  }

  this.auth = auth;
  var options = options || {};
  this.heartbeat = options.heartbeat || 10000;

  console.log("\n\
    ___  __          __\n\
   / _ )/ /_ _____  / /__\n\
  / _  / / 
 /____/_/\\_, /_
        /___/\n\
\n\
  Give Blynk a Github star! => https:
");

  
  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);

  
  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.WidgetTable = function(vPin) {
    this.pin = vPin;

    this.clear = function() {
      self.virtualWrite(this.pin, 'clr');
    };
    
    this.add_row = function(id, name, value) {
      self.virtualWrite(this.pin, ['add', id, name, value]);
    };
    
    this.update_row = function(id, name, value) {
	  self.virtualWrite(this.pin, ['update', id, name, value]);
    };

    this.highlight_row = function(id) {
      self.virtualWrite(this.pin, ['pick', id]);
    };

    this.select_row = function(id) {
      self.virtualWrite(this.pin, ['select', id]);
    };

    this.deselect_row = function(id) {
      self.virtualWrite(this.pin, ['deselect', id]);
    };

    this.move_row = function(old_row, new_row) {
      self.virtualWrite(this.pin, ['order', old_row, new_row]);
    };
  };

  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);
    };
  };
  
  this.WidgetMAP = function(vPin) {
    this.pin = vPin;
    
    this.location = function(index, lat, lon, value) {
      var locationdata = [index, lat, lon, value]
      self.virtualWrite(this.pin, locationdata);
    }
  };

  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();
  }
}
function ( auth , options ) { var self = this ; if ( needsEmitter ( ) ) { events . EventEmitter . call ( this ) ; } this . auth = auth ; var options = options || { } ; this . heartbeat = options . heartbeat || 10000 ; console . log ( "\n\
    ___  __          __\n\
   / _ )/ /_ _____  / /__\n\
  / _  / / // / _ \\/  '_/\n\
 /____/_/\\_, /_//_/_/\\_\\\n\
        /___/\n\
\n\
  Give Blynk a Github star! => https://github.com/vshymanskyy/blynk-library-js\n\
" ) ; // 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 . WidgetTable = function ( vPin ) { this . pin = vPin ; this . clear = function ( ) { self . virtualWrite ( this . pin , 'clr' ) ; } ; this . add_row = function ( id , name , value ) { self . virtualWrite ( this . pin , [ 'add' , id , name , value ] ) ; } ; this . update_row = function ( id , name , value ) { self . virtualWrite ( this . pin , [ 'update' , id , name , value ] ) ; } ; this . highlight_row = function ( id ) { self . virtualWrite ( this . pin , [ 'pick' , id ] ) ; } ; this . select_row = function ( id ) { self . virtualWrite ( this . pin , [ 'select' , id ] ) ; } ; this . deselect_row = function ( id ) { self . virtualWrite ( this . pin , [ 'deselect' , id ] ) ; } ; this . move_row = function ( old_row , new_row ) { self . virtualWrite ( this . pin , [ 'order' , old_row , new_row ] ) ; } ; } ; 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 ) ; } ; } ; this . WidgetMAP = function ( vPin ) { this . pin = vPin ; this . location = function ( index , lat , lon , value ) { var locationdata = [ index , lat , lon , value ] self . virtualWrite ( this . pin , locationdata ) ; } } ; 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
/ * Blynk