internet of things the salesforce lego machine cloud
TRANSCRIPT
![Page 1: Internet of things the salesforce lego machine cloud](https://reader036.vdocuments.net/reader036/viewer/2022062523/58ee15221a28ab12408b46b9/html5/thumbnails/1.jpg)
Internet of Things - The Salesforce Lego Machine CloudAndrew FawcettFinancialForce.com, CTO@andyinthecloud
![Page 2: Internet of things the salesforce lego machine cloud](https://reader036.vdocuments.net/reader036/viewer/2022062523/58ee15221a28ab12408b46b9/html5/thumbnails/2.jpg)
Andrew FawcettFinancialForce.com, CTO@andyinthecloud
![Page 3: Internet of things the salesforce lego machine cloud](https://reader036.vdocuments.net/reader036/viewer/2022062523/58ee15221a28ab12408b46b9/html5/thumbnails/3.jpg)
About FinancialForce.com
• San Francisco Headquarters• Harrogate, UK• Granada, Spain• Toronto, Canada• Manchester, US• Opening Sydney, AUS in Sept, 2014
• 350+ Employees• 400+ by 12/31/2014
• Customers in 31 countries• 80% Y-o-Y revenue growth• Advent commitment of $50 million
![Page 4: Internet of things the salesforce lego machine cloud](https://reader036.vdocuments.net/reader036/viewer/2022062523/58ee15221a28ab12408b46b9/html5/thumbnails/4.jpg)
Session Resources• Follow the Session in the Dreamforce
App, I will share this slide deck and other related links on the Feed
• Be social and feel free to ask follow up questions!
![Page 5: Internet of things the salesforce lego machine cloud](https://reader036.vdocuments.net/reader036/viewer/2022062523/58ee15221a28ab12408b46b9/html5/thumbnails/5.jpg)
Introduction• What are the device requirements?• How intelligent does the device need to be?• What is a Machine Cloud?• Building a Machine Cloud with Salesforce1 Platform• Demos• How to make your own Machine Cloud with with Lego Mindstorms EV3
![Page 6: Internet of things the salesforce lego machine cloud](https://reader036.vdocuments.net/reader036/viewer/2022062523/58ee15221a28ab12408b46b9/html5/thumbnails/6.jpg)
What does a Device need to call the Salesforce API’s?
• Ability to connect to a local internet gateway– e.g. phone or other computer connected to Internet
• Ability to connect direct to Internet– SSL support ideally, though non-SSL end points
proxies can be used• Ability to parse XML or JSON
– String manipulation or ideally JSON or XML parsers• Ability to consume Java libraries
– Ideally Salesforce Web Service Connector
Basic Capabilities, limited RAM/CPU
Advanced Capabilities e.g. running OS’s
![Page 7: Internet of things the salesforce lego machine cloud](https://reader036.vdocuments.net/reader036/viewer/2022062523/58ee15221a28ab12408b46b9/html5/thumbnails/7.jpg)
What does a Device need to call the Salesforce API’s?• Common runtime language
– Such as Java!• Oracle port to ARMv5 process running on Lego Mindstorms EV3• Community Java runtime known as Lejos for Lego Mindstorms NXT
![Page 8: Internet of things the salesforce lego machine cloud](https://reader036.vdocuments.net/reader036/viewer/2022062523/58ee15221a28ab12408b46b9/html5/thumbnails/8.jpg)
How intelligent should the device be?• Processing power and storage can vary
– Depends on sensor input and output demands– Cloud based logic can be used via HTTPS communications– HTTPS communications
• Streaming communications vs Polling• Ability to connect locally to the device is useful
– Lego Mindstorms EV3 runs a Lego variation of Linux– Can TELNET to it and execute Unix commands– Java Remote Debug is also possible
![Page 9: Internet of things the salesforce lego machine cloud](https://reader036.vdocuments.net/reader036/viewer/2022062523/58ee15221a28ab12408b46b9/html5/thumbnails/9.jpg)
LEGO Mindstorms EV3 Programmable Brick
Feature SpecDisplay Monochrome LCD
178 x 128 pixelsOperating System Linux based
Main Processor 300 MH Texas Instruments Sitara AM11808 (ARM9 core)
Main Memory 64 MB RAM, 16 MB Flash
USB Host Port Yes
WiFi Yes via USB Dongle
Bluetooth Yes
![Page 10: Internet of things the salesforce lego machine cloud](https://reader036.vdocuments.net/reader036/viewer/2022062523/58ee15221a28ab12408b46b9/html5/thumbnails/10.jpg)
What is a Machine Cloud?• A single place for machines to communicate and share information
• Machines can communicate to us and other machines across the world
• Can be used to store data• Can perform calculations on behalf of devices, with access to more information, also easier maintenance and updates to software
![Page 11: Internet of things the salesforce lego machine cloud](https://reader036.vdocuments.net/reader036/viewer/2022062523/58ee15221a28ab12408b46b9/html5/thumbnails/11.jpg)
Introducing a Machine Cloud built with Salesforce1 Platform
Salesforce1 Mobile
Custom Objects
REST and Streaming
API’s
Connected Applications
![Page 12: Internet of things the salesforce lego machine cloud](https://reader036.vdocuments.net/reader036/viewer/2022062523/58ee15221a28ab12408b46b9/html5/thumbnails/12.jpg)
Controlling Machines through Custom Objects#clicksnotcode
![Page 13: Internet of things the salesforce lego machine cloud](https://reader036.vdocuments.net/reader036/viewer/2022062523/58ee15221a28ab12408b46b9/html5/thumbnails/13.jpg)
Controlling Machines through Custom Objects#clicksnotcode
![Page 14: Internet of things the salesforce lego machine cloud](https://reader036.vdocuments.net/reader036/viewer/2022062523/58ee15221a28ab12408b46b9/html5/thumbnails/14.jpg)
Demo : PairingPairing Mindstorm EV3 Robots to our Machine Cloud and sending commands
![Page 15: Internet of things the salesforce lego machine cloud](https://reader036.vdocuments.net/reader036/viewer/2022062523/58ee15221a28ab12408b46b9/html5/thumbnails/15.jpg)
Ok so what just happened under the hood?
SalesforceStreaming and
REST APIEV3 #1
ev3force.jar
Heroku Connected App
EV3 Pairing REST API
EV3 #2
ev3force.jar
Custom Objects
Commands
Commands
Pairing Pairing
![Page 16: Internet of things the salesforce lego machine cloud](https://reader036.vdocuments.net/reader036/viewer/2022062523/58ee15221a28ab12408b46b9/html5/thumbnails/16.jpg)
You want to go further under the hood?
SalesforceStreaming and
REST API
Heroku Connected App
EV3 Pairing REST API
EV3
2. Get Pin
3. Wait for PIN Entry and receive oAuth Token
4. User Enters PIN, oAuth Token is passed
/ev3force.properties5. EV3 stores oAuth Token
ev3force.jar
Custom Objects
1. oAuth Token stored?
First time ev3force.jar runs
Each time ev3force.jar runs
6. Read Robot Details
7. Start Listening8. Create Command records
![Page 17: Internet of things the salesforce lego machine cloud](https://reader036.vdocuments.net/reader036/viewer/2022062523/58ee15221a28ab12408b46b9/html5/thumbnails/17.jpg)
Demo: Controlling a Lego RobotMoving a Robot around
![Page 18: Internet of things the salesforce lego machine cloud](https://reader036.vdocuments.net/reader036/viewer/2022062523/58ee15221a28ab12408b46b9/html5/thumbnails/18.jpg)
Demo: Programming a RobotPre-creating Command records and sending a Run Program command
![Page 19: Internet of things the salesforce lego machine cloud](https://reader036.vdocuments.net/reader036/viewer/2022062523/58ee15221a28ab12408b46b9/html5/thumbnails/19.jpg)
How is it implemented?
![Page 20: Internet of things the salesforce lego machine cloud](https://reader036.vdocuments.net/reader036/viewer/2022062523/58ee15221a28ab12408b46b9/html5/thumbnails/20.jpg)
Code: Pairing// Http commons with pairing serviceHttpClient httpClient = new HttpClient();httpClient.setConnectTimeout(20 * 1000); // Connection timeouthttpClient.setTimeout(120 * 1000); // Read timeouthttpClient.start();
// Get a pin numberContentExchange getPin = new ContentExchange();getPin.setMethod("GET");getPin.setURL("https://ev3forcepairing.herokuapp.com/service/pin");httpClient.send(getPin);getPin.waitForDone();Map<String, Object> parsed = (Map<String, Object>) JSON.parse(getPin.getResponseContent()); // Display pin number to enter into SalesforceLCD.clear();LCD.drawString("Pin " + parsed.get("pin"), 0, 3);
![Page 21: Internet of things the salesforce lego machine cloud](https://reader036.vdocuments.net/reader036/viewer/2022062523/58ee15221a28ab12408b46b9/html5/thumbnails/21.jpg)
Code: Pairing// Wait for oAuth token for the given pin numberwhile(true){ getPin = new ContentExchange(); getPin.setMethod("GET"); getPin.setURL("https://ev3forcepairing.herokuapp.com/service/pin?pin=" + pin); httpClient.send(getPin); getPin.waitForDone(); parsed = (Map<String, Object>) JSON.parse(getPin.getResponseContent()); oAuthToken = (String) parsed.get("oAuthToken"); robotId = (String) parsed.get("robotId"); serverUrl = (String) parsed.get(”serverUrl"); if(oAuthToken!=null)
break; LCD.drawString("Waiting " + waitCount++, 0, 4); Delay.msDelay(1000);}
![Page 22: Internet of things the salesforce lego machine cloud](https://reader036.vdocuments.net/reader036/viewer/2022062523/58ee15221a28ab12408b46b9/html5/thumbnails/22.jpg)
Code: Pairing<td><b>Pin:</b></td> <td> <form action="/default/pinset.jsp">
<input name="pin"/><input type="submit" value="Pair"/><input name=”refreshToken" type="hidden"
value="${canvasRequest.client.refreshToken}"/><input name="recordId" type="hidden"
value="${canvasRequest.context.environmentContext.record.Id}"/> </form> </td>
<body><%
String pin = request.getParameter("pin");String refreshToken = request.getParameter(”refreshToken");String robotId = request.getParameter("recordId"); PairingResource.setConnection(pin, refreshToken, robotId);
%>Now check your EV3!</body>
![Page 23: Internet of things the salesforce lego machine cloud](https://reader036.vdocuments.net/reader036/viewer/2022062523/58ee15221a28ab12408b46b9/html5/thumbnails/23.jpg)
Code: Listening for Commands via Streaming API // Subscribe to the 'commands' topic to listen for new Command__c records client.getChannel("/topic/commands").subscribe(new ClientSessionChannel.MessageListener() {
public void onMessage(ClientSessionChannel channel, Message message) {
HashMap<String, Object> data = (HashMap<String, Object>) JSON.parse(message.toString()); HashMap<String, Object> record = (HashMap<String, Object>) data.get("data"); HashMap<String, Object> sobject = (HashMap<String, Object>) record.get("sobject"); String commandName = (String) sobject.get("Name"); String command = (String) sobject.get("Command__c"); String commandParameter = (String) sobject.get("CommandParameter__c"); String programToRunId = (String) sobject.get("ProgramToRun__c"); executeCommand( commandName, command, commandParameter, programToRunId, partnerConnection); } });
![Page 24: Internet of things the salesforce lego machine cloud](https://reader036.vdocuments.net/reader036/viewer/2022062523/58ee15221a28ab12408b46b9/html5/thumbnails/24.jpg)
Code: Moving the Robot around with Lejosimport lejos.hardware.motor.Motor;
public static void moveForward(int rotations){ Motor.B.rotate((180 * rotations)*1, true); Motor.C.rotate((180 * rotations)*1, true); while (Motor.B.isMoving() || Motor.C.isMoving()); Motor.B.flt(true); Motor.C.flt(true);}
public static void moveBackwards(int rotations){ Motor.B.rotate((180 * rotations)*-1, true); Motor.C.rotate((180 * rotations)*-1, true); while (Motor.B.isMoving() || Motor.C.isMoving()); Motor.B.flt(true); Motor.C.flt(true);}
![Page 25: Internet of things the salesforce lego machine cloud](https://reader036.vdocuments.net/reader036/viewer/2022062523/58ee15221a28ab12408b46b9/html5/thumbnails/25.jpg)
Building your Lego Robot• What do I need?
– Edimax EW-7811UN 150Mbps Wireless Nano USB Adapter– Micro SD Card (SDHC Only), 1GB, no greater than 32GB– Lego Mindstorms EV3 Set, Gripper Robot!
![Page 26: Internet of things the salesforce lego machine cloud](https://reader036.vdocuments.net/reader036/viewer/2022062523/58ee15221a28ab12408b46b9/html5/thumbnails/26.jpg)
Creating your own Lego Robot Machine Cloud!• Installation in Salesforce
– Install the Machine Cloud managed package (see Readme)• https://github.com/afawcett/legoev3-machinecloud
• Installation on Lego Mindstorms EV31. Install Lejos on your SDCard and install in the EV3
• http://sourceforge.net/p/lejos/wiki/Home/
2. Use the Lejos menu on the EV3 to connect to your Wifi3. Copy the ev3force.jar to your EV3 Robot (from /dist folder in GitHub Repo)
• Run the /bin/ev3console UI and deploy using the Programs tab
![Page 27: Internet of things the salesforce lego machine cloud](https://reader036.vdocuments.net/reader036/viewer/2022062523/58ee15221a28ab12408b46b9/html5/thumbnails/27.jpg)
Creating your own Lego Robot Machine Cloud!• Connecting your Robots
1. Run the ev3force.jar application on the EV32. Note the PIN number shown on the EV3 Robot3. Login to your Salesforce org and create a Robot record4. Enter PIN number, wait for the device to connect to Salesforce5. Send it commands and programs to run!
![Page 28: Internet of things the salesforce lego machine cloud](https://reader036.vdocuments.net/reader036/viewer/2022062523/58ee15221a28ab12408b46b9/html5/thumbnails/28.jpg)
Further Ideas…• Expose the Machine Cloud via Salesforce Communities• Machine Cloud API?
– Perhaps we already have this?• Using the Salesforce API to insert records to the Command__c object?
• Add support for other Devices?– Watches, Phones etc
• Add support for Generic Streaming API events– Events not driven by Database events but by processes
![Page 29: Internet of things the salesforce lego machine cloud](https://reader036.vdocuments.net/reader036/viewer/2022062523/58ee15221a28ab12408b46b9/html5/thumbnails/29.jpg)
Session Resources• Follow the Session in the Dreamforce
App, I will share this slide deck and other related links on the Feed
• Be social and feel free to ask follow up questions!
![Page 30: Internet of things the salesforce lego machine cloud](https://reader036.vdocuments.net/reader036/viewer/2022062523/58ee15221a28ab12408b46b9/html5/thumbnails/30.jpg)