Skip to content

Instantly share code, notes, and snippets.

@AdamMagaluk
Last active August 29, 2015 14:02
Show Gist options
  • Save AdamMagaluk/55cd4c2d986bd18862dd to your computer and use it in GitHub Desktop.
Save AdamMagaluk/55cd4c2d986bd18862dd to your computer and use it in GitHub Desktop.
Zetta Style Convention

Zetta Coding Convention

File Names

Use underscores.

Scouts and drivers appended with _scout.js or _driver.js unless in separate folder.

Examples

  • led_driver.js
  • robot_driver.js
  • therometer_driver.js
  • microphone_driver.js
  • arduino_scout.js
  • lcd_driver.js

Directory Structure

I Heard Dat! App

  • test/
  • app.js - use "app.js" for app file name.
  • scouts/ - use "scouts" folder for internal scouts/drivers.
    • arduino/
      • index.js
      • microphone_driver.js
      • lcd_driver.js
  • package.json

Packaged NPM Module

  • test/
  • index.js
  • lcd_driver.js
  • microphone_driver.js
  • package.json

Syntax

App.js

var zetta = require('zetta');
var Arduino = require('./scouts/arduino');

var app = zetta();
// app.name() is optional
app.expose('*');
app.load(Arduino);

// geo location observe
app.observe('type="sound" AND location within 30 of 42.213,85.23"', function(microphone){

});


// observe sound sensor in san jose, and update Detroit lcd
app.observe('type="sound" AND city="San Jose"', function(microphone){
  app.observe('type="lcd" AND city="Detroit"', function(lcd){

  });
});

app.observe(['sound', 'lcd'], function(sound, lcd) {
  var amplitudeStream = sound.streams.amplitude;
  amplitudeStream.on('data', function(amplitude) {
    if (amplitude > 160) {
      lcd.call('update', 'I heard dat!');
    }
  });
});

app.listen(3000); // Use "3000" for examples!

Driver

var Driver = require('zetta').Driver;
var util = require('util');

// Name your driver the device it's modeling
var Microphone = module.exports = function(port){
  Driver.call(this);

  // not saved and not exposed in api
  this._port = port;
  // saved and exposed in api
  this.amplitude = 123;
};
util.inherits(Microphone, Driver);

// must include init function
Microphone.prototype.init = function(config) {
  config
    .state('ready')
    .name('Matt\'s Sound Sensor') // name is optional but our examples should show it.
    .type('sound')
    .stream('amplitude', this.streamAmplitude); // .stream{Name} as function
}

Microphone.prototype.streamAmplitude = function(stream) {
  var self = this;
  this._port.on('data', function(d) {
    var data = Number(d.toString());

    self.amplitude = data;

    stream.write(data);
  });
};

Scouts

var util = require('util');
var Scout = require('zetta').Scout;
var SerialPort = require('serialport').SerialPort;
var Microphone = require('./microphone_driver');

var Arduino = module.exports = function(runtime) {
  Scout.call(this);
  // allow access to runtime to other methods.
  this.runtime = runtime;
  this.portName = '/dev/tty.usbserial';
};
util.inherits(Arduino, Scout);

// Must include init function
Arduino.prototype.init = function(cb) {
  var self = this;
  var port = new SerialPort(portName, function(err) {
    if(err) {
      return cb(err);
    }

    self.discover(Microphone, port);
  });
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment