Kickin it hear at the Launch Hackathon! (http://www.facebook.com/Hackathonio)!!!
Created a demo integration between Plantronics headset with wearing sensor events and our nearest neighbour at the event: Firebase, (Based on Firebase chat sample app).
Worn/not worn events with timestamp are inserted into Firebase store when user puts on/takes off their Plantronics headset.
**See attached file for required spokes.js file!**
---
<!doctype html><html><head> <title>Plantronics Firebase Integration Sample</title> <script src='https://cdn.firebase.com/v0/firebase.js'></script> <script src='https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js'></script> <link rel='stylesheet' type='text/css' href='../css/example.css'></head><body onload="connectMain()" onunload="disconnectMain()"> <div id='messagesDiv'></div> <input type='text' id='nameInput' placeholder='Name'> <input type='text' id='messageInput' placeholder='Message'> <script> // INFO: Need to obtain a firebase store, check out: // https://www.firebase.com/signup/ var myDataRef = new Firebase('https://[YOUR FIREBASE ID].firebaseio.com/'); // .firebaseio-demo.com $('#messageInput').keypress(function (e) { if (e.keyCode == 13) { var name = $('#nameInput').val(); var text = $('#messageInput').val(); myDataRef.push({ name: name, text: text }); $('#messageInput').val(''); } }); myDataRef.on('child_added', function (snapshot) { var message = snapshot.val(); displayChatMessage(message.name, message.text); }); function displayChatMessage(name, text) { $('<div/>').text(text).prepend($('<em/>').text(name + ': ')).appendTo($('#messagesDiv')); $('#messagesDiv')[0].scrollTop = $('#messagesDiv')[0].scrollHeight; }; </script> <script type="text/javascript" src="spokes.js"></script> <br /> <br /> <p>Put your Plantronics headset on and off to send data records to Firebase! <br />INFO: You need to obtain a firebase store and paste your store URL at top of this page code, check out: <br /><a href="https://www.firebase.com/signup/">https://www.firebase.com/signup/</a> </p> <br /> <div id="log"> <b>Plantronics Log:</b> </div> <!-- Plantronics Device Services --> <script type="text/javascript"> var spokes; // global Spokes object, initialised on page load var plugin_registered = false; var plugin_name = "Plantronics Firebase Plugin"; var callid = 0; // Button commands: function connectMain() { appendLog("Connecting..."); connectToSpokes(); } function disconnectMain() { disconnectFromSpokes(); } // Helper functions: function getCallId(callid) { return new SpokesCallId({ Id: callid }); } function getContact(contactname) { return new SpokesContact({ Name: contactname }); } // displays status of call commands function showCallStatus(result, toJson) { if (result.isError) { appendLog("Error: " + result.Err.Description); } else { if (toJson) appendLog(JSON.stringify(result.Result)) else appendLog("Success."); } }; function appendLog(str) { log.innerHTML = log.innerHTML + "<br />" + str; } function connectToSpokes() { // check Jquery is loaded before using Spokes object... checkJquery(); //Create my spokes object spokes = new Spokes("http://127.0.0.1:32001/Spokes"); // get list of attached devices spokes.Device.deviceList(function (result) { //Create table of all the devices we found if no errors if (!result.isError) { if (result.Result[0] != null) { // Log Spokes active device found (first in list returned, index 0) appendLog("Device found = " + result.Result[0].ProductName + ", id = " + result.Result[0].Uid); // attach to the device spokes.Device.attach(result.Result[0].Uid, controlInterface); // start polling the device for events... pollDeviceEvents(); } else { appendLog("Error: Device was null on connecting to Spokes. Is there a Plantronics device connected?"); } } else { appendLog("Error connecting to Spokes."); } }); } //Creates a control interface function controlInterface(session) { if (session.isError || !spokes.Device.isAttached) { appendLog("Session Registration Error"); } else { appendLog("Session ID: " + session.Result); registerPlugin(); } } // Register a Spokes Plugin session to get access to Call Services and Session Manager interfaces function registerPlugin() { //Choose to register, or unregister the plugin if (!plugin_registered) { // register new plugin to Spokes spokes.Plugin.register(plugin_name, function (result) { if (!result.isError) { //Set plugin active status to true spokes.Plugin.isActive(plugin_name, true, function (result) { if (!result.isError) { // plugin registered and active. Show UI. plugin_registered = true; appendLog("Plugin \"" + plugin_name + "\" registered successfully."); } else { appendLog("Error checking if plugin is active: " + result.Err.Description); } }); } else { appendLog("Error registering plugin: " + result.Err.Description); } }); } } // Unregister Spokes plugin session function unregisterPlugin() { spokes.Plugin.unRegister(plugin_name); plugin_registered = false; appendLog("Plugin un-registered."); } function disconnectFromSpokes() { unregisterPlugin(); spokes.Device.release(function (result) { if (!result.isError) { appendLog("Released device"); } else { appendLog("Error releasing device"); } spokes = null; appendLog("Disconnected from Spokes"); }); } function getTimeStamp() { var d = new Date(); var h = d.getHours(); var m = d.getMinutes(); var s = d.getSeconds(); return h + ":" + m + ":" + s; } // Set up device event polling if we are connected to Spokes function pollDeviceEvents() { setInterval( function () { if (spokes == null) return; if (!spokes.Device.isAttached) return; //Make an events call spokes.Device.events( function (result) { if (result.isError) { appendLog("Error polling for events: " + result.Err.Description); } else { // display list of events collected from REST service if (result.Result.length > 0) { for (var i = 0; i < result.Result.length; i++) { appendLog("<font color=\"#0000FF\">Device Event: " + result.Result[i].Event_Log_Type_Name + ", " + result.Result[i].Event_Name + "</font>"); if (result.Result[i].Event_Name == "Don") { appendLog("Send Don to Firebase..."); var name = $('#nameInput').val(); if (name=="") name="Plantronics User"; myDataRef.push({ name: name, text: "Is wearing their Legend UC at " + getTimeStamp() }); } if (result.Result[i].Event_Name == "Doff") { appendLog("Send Doff to Firebase..."); var name = $('#nameInput').val(); if (name == "") name = "Plantronics User"; myDataRef.push({ name: name, text: "Has taken off their Legend UC at " + getTimeStamp() }); } } } } }); }, 500); //500ms seconds polling } </script></body></html>
Have fun!