Skip to content

Instantly share code, notes, and snippets.

@roelandp
Last active April 4, 2019 16:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save roelandp/cd897072052b40f76913bcf52a872a8a to your computer and use it in GitHub Desktop.
Save roelandp/cd897072052b40f76913bcf52a872a8a to your computer and use it in GitHub Desktop.
var noble = require('noble-mac');
const control_service = "7d8f60dda0684320a05ffcb8c60d86bc";
const battery_service = "180f";
const state_characteristic = "88d3cea890bf40acae8d4ba145d6b009"
const speed_characteristic = "7653f4cc08594387a35789dfd4593a3c";
const mode_characteristic = "d49d811f8acc4bd0b020b64b26d0b038";
const battery_characteristic = "2a19";
var char_state;
var char_speed;
var char_mode;
var peripheral_global;
var dsteem = require('dsteem')
var mode = 2; // available modes: 0 = stop, 1 = snooze, 2 = wave, 3 = swing
var modes = ['stop','snooze','wave','swing'];
function message(msg){
process.stdout.write('\033c');
process.stdout.clearLine();
process.stdout.cursorTo(0);
process.stdout.write(msg);
}
function setSpeed(speed) {
var speeddata = new Uint8Array(1);
speeddata[0] = speed; // mode wave... (0 = stop)
char_speed.write(new Buffer(speeddata), false, function(char_mode_write_err){
if(char_mode_write_err) {
message('char_speed_write_err', char_mode_write_err);
} else {
//message('wrote to characteristic and put the thing on speed: ',speed);
}
});
}
function setMode(mode) {
var wavedata = new Uint8Array(1);
wavedata[0] = mode; // mode wave... (0 = stop)
char_mode.write(new Buffer(wavedata), false, function(char_mode_write_err){
if(char_mode_write_err) {
message('char_mode_write_err', char_mode_write_err);
} else {
message('Started Cradle Wave');
}
});
}
noble.on('stateChange', function(state) {
if (state === 'poweredOn') {
(noble.startScanning(control_service, false, function(err) {
if(err) {
message('err',err);
} else {
message('started scanning for peripherals');
}
}));
noble.on('discover', function(peripheral) {
//message(peripheral);
if(peripheral.id == "53aaf079d3784934b5deb7b3e143d26d"){
//message((peripheral))
message('peripheral found!');
peripheral_global = peripheral;
var serviceUUIDs = [control_service];
message('connecting to cradle...');
peripheral.connect(function(err){
if(err) {
message('connect err', err);
}
message(peripheral.state);
//peripheral.disconnect();
if(peripheral.state == "connected") {
peripheral.discoverServices(serviceUUIDs, function(error, services){
if(error) {
message('servdiscovery error',error);
} else {
message(':::::service found ::::');
services[0].discoverCharacteristics([state_characteristic,speed_characteristic,mode_characteristic], function(charerr,characteristics){
if(charerr) {
message('characteristics error',charerr);
} else {
message(':::::characteristics found, now mapping ::::', characteristics.length);
message("\n\n");
for(var i = 0; i < characteristics.length; i++) {
if(characteristics[i].uuid == state_characteristic) {
char_state = characteristics[i];
}
if(characteristics[i].uuid == speed_characteristic) {
char_speed = characteristics[i];
}
if(characteristics[i].uuid == mode_characteristic) {
char_mode = characteristics[i];
}
}
message('mapped characteristics');
message('connecting to Steem chain');
var currentspeed = 0
var currenttxsize = 0
var maxtxsize = 0
var blockcount = 0;
var totaltx = 0;
var averagespeed = 2;
var client = new dsteem.Client('https://rpc.steemviz.com')
stream = client.blockchain.getBlockStream();
var waving = false;
stream.on('data', function(block) {
if(!waving) {
setMode(mode);
waving = true;
}
//console.log(block);
// analyse tx length
var txsize = block.transactions.length
totaltx += txsize;
blockcount++;
var avgtx = totaltx / blockcount;
// if tx length > maxtxsize = maxtxsize = tx.length;
var modifier = (txsize - avgtx) / avgtx;
var speedmodifier = 4 * modifier;
var cradlespeed = ((averagespeed + speedmodifier))
if(cradlespeed < 0){
cradlespeed = 0;
}
if(cradlespeed > 4){
cradlespeed = 4;
}
var swappedtxt = '';
if(block.witness == "roelandp") {
// swap modes (!)
mode++;
if(mode > 3) {
mode = 1;
}
setMode(mode);
swappedtxt = 'OMG! Block signed by daddy! Swapping rocker mode to '+modes[mode];
}
message(block.block_id + ' signed by '+ block.witness + ' on ' + block.timestamp + '\n\nTransactions in block: + '+ block.transactions.length + 'tx\nAverage transactions: '+ avgtx+'\nModifier:'+ modifier +'\n\nSetting cradle wave speed to: '+ cradlespeed+'\n\n'+swappedtxt);
setSpeed(cradlespeed);
})
.on('end', function() {
// done
message('END STREAMING BLOCKS');
});
}
});
}
}); // particular UUID's
}
});
}
});
} else {
message('stop scanning');
noble.stopScanning();
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment