On Github hybridgroup / preso-iotworld-2015
var Cylon = require("cylon");
Cylon.robot({
connections: {
arduino: { adaptor: "firmata", port: "/dev/ttyACM0" }
},
devices: {
led: { driver: "led", pin: 13 }
},
work: function(my) {
every((1).second(), my.led.toggle);
}
}).start();
var Cylon = require("cylon");
Cylon.robot({
connections: {
beaglebone: { adaptor: "beaglebone" }
},
devices: {
led: { driver: "led", pin: "P9_12" }
},
work: function(my) {
every((1).second(), my.led.toggle);
}
}).start();
var cylon = require('cylon');
cylon.robot({
name: "brewer",
connections: {
edison: { adaptor: 'intel-iot' },
mqtt: { adaptor: 'mqtt', host: 'tcp://127.0.0.1:1883' }
},
devices: {
lever: { driver: 'button', pin: 2, connection: 'edison' },
fault: { driver: 'button', pin: 4, connection: 'edison' },
pump: { driver: 'direct-pin', pin: 13, connection: 'edison' },
start_pump: { driver: 'mqtt', topic: 'start_pump', connection: 'mqtt' },
start_fault: { driver: 'mqtt', topic: 'start_fault', connection: 'mqtt' }
},
work: function() {
var that = this,
pumping = false,
served = 0,
dgram = {
name: "Four",
event: "online",
details: "dispenser",
drink_id: 0,
dispenser_id: 4
};
that.lever.on('push', function() {
console.log('lever');
that.mqtt.publish('start_pump');
});
that.fault.on('push', function() {
console.log('fault');
that.mqtt.publish('start_fault');
});
that.start_pump.on('message', function(data) {
if (!pumping) {
pumping = true;
that.pump.digitalWrite(1)
dgram.drink_id++
dgram.event = "online";
that.mqtt.publish('pumped', JSON.stringify(dgram));
setTimeout(function() {
that.pump.digitalWrite(0);
pumping = false;
}, 2000);
}
});
that.start_fault.on('message', function(data) {
dgram.event = 'error';
that.mqtt.publish('fault', JSON.stringify(dgram));
});
}
}).start();
var cylon = require('cylon'),
request = require('request');
cylon.api({
host: "0.0.0.0",
port: "8080",
ssl: false
});
cylon.robot({
name: 'hq',
connections: {
mqtt: { adaptor: 'mqtt', host: 'tcp://127.0.0.1:1883' },
pebble: { adaptor: 'pebble' }
},
devices: {
gcs: { driver: 'mqtt', topic: 'gcs', connection: 'mqtt' },
pump: { driver: 'mqtt', topic: 'pump', connection: 'mqtt' },
fault: { driver: 'mqtt', topic: 'fault', connection: 'mqtt' },
drone: { driver: 'mqtt', topic: 'drone', connection: 'mqtt' },
pumped: { driver: 'mqtt', topic: 'pumped', connection: 'mqtt' },
pebble: { driver: 'pebble', connection: 'pebble' }
},
commands: function() {
var that = this;
return {
pump: function() {
that.mqtt.publish("start_pump");
},
fault: function() {
that.mqtt.publish("start_fault");
}
};
},
work: function() {
var that = this,
brewmachine = "https://brewmachine.herokuapp.com/drinks";
that.pump.on("message", function(data) {
that.mqtt.publish("start_pump");
});
that.pumped.on("message", function(data) {
request.post(brewmachine, { form: JSON.parse(data) });
that.pebble.send_notification("Customers served: " + JSON.parse(data).drink_id);
console.log("Customers served: " + JSON.parse(data).drink_id);
});
that.fault.on("message", function(data) {
request.post(brewmachine, { form: JSON.parse(data) });
that.pebble.send_notification("There was a fault!");
console.log("There was a fault!");
});
that.drone.on("message", function(data) {
request.post(brewmachine, { form: JSON.parse(data) });
that.pebble.send_notification("Message from drone: " + data.toString());
console.log("Message from drone: " + data.toString());
});
that.gcs.on("message", function(data) {
request.post(brewmachine, { form: JSON.parse(data) });
console.log(data.toString());
});
}
}).start();
...
commands: function() {
var that = this;
return {
pump: function() {
that.mqtt.publish("start_pump");
},
fault: function() {
that.mqtt.publish("start_fault");
}
};
},
...
var cylon = require("cylon");
cylon.robot({
name: "gcs",
connections: {
joystick: { adaptor: "joystick" },
ardrone: { adaptor: 'rolling-spider', uuid: '276ca7b527984c289e72c5f0daf9ddfa'},
mqtt: { adaptor: "mqtt", host: "tcp://192.168.1.3:1883" }
},
devices: {
controller: { driver: "dualshock-3", connection: "joystick" },
drone: { driver: "rolling-spider", connection: "ardrone" }
},
work: function() {
var that = this;
rightStick = { x: 0.0, y: 0.0 },
leftStick = { x: 0.0, y: 0.0 },
dgram = {
name: "gcs",
dispenser_id: 34,
drink_id: 0,
event: "available",
details: "drone",
};
that.drone.trim();
that.mqtt.publish("gcs", JSON.stringify(dgram));
that.controller.on("circle:press", function() {
that.drone.frontFlip();
dgram.event = "delivery complete";
console.log(dgram);
that.mqtt.publish("gcs", JSON.stringify(dgram));
});
that.controller.on("square:press", function() {
that.drone.takeOff();
dgram.event = "en route";
console.log(dgram);
that.mqtt.publish("gcs", JSON.stringify(dgram));
});
that.controller.on("triangle:press", function() {
that.drone.hover();
});
that.controller.on("x:press", function() {
that.drone.land();
dgram.event = "available";
console.log(dgram);
that.mqtt.publish("gcs", JSON.stringify(dgram));
});
that.controller.on("right_x:move", function(data) {
rightStick.x = data;
});
that.controller.on("right_y:move", function(data) {
rightStick.y = data;
});
that.controller.on("left_x:move", function(data) {
leftStick.x = data;
});
that.controller.on("left_y:move", function(data) {
leftStick.y = data;
});
setInterval(function() {
var pair = leftStick;
if (pair.y < 0) {
that.drone.forward(validatePitch(pair.y));
} else if (pair.y > 0) {
that.drone.backward(validatePitch(pair.y));
}
if (pair.x > 0) {
that.drone.right(validatePitch(pair.x));
} else if (pair.x < 0) {
that.drone.left(validatePitch(pair.x));
}
}, 0);
setInterval(function() {
var pair = rightStick;
if (pair.y < 0) {
that.drone.up(validatePitch(pair.y));
} else if (pair.y > 0) {
that.drone.down(validatePitch(pair.y));
}
if (pair.x > 0) {
that.drone.clockwise(validatePitch(pair.x));
} else if (pair.x < 0) {
that.drone.counterClockwise(validatePitch(pair.x));
}
}, 0);
setInterval(function() {
that.drone.hover();
}, 10);
}
}).start();
function validatePitch(data) {
var value = Math.abs(data);
if (value >= 0.1) {
if (value <= 1.0) {
return (Math.round(value * 100.0) / 100.0) * 100;
} else {
return 1.0 * 100;
}
} else {
return 0.0;
}
}