(mbl303) build mobile apps for iot devices and iot apps for devices

40
© 2015, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Tara E. Walker AWS Technical Evangelist Michaël Garcia AWS Solution Architect October 2015 Build Mobile Apps for IoT Devices and IoT Apps for Mobile Devices MBL 303

Upload: amazon-web-services

Post on 16-Apr-2017

4.014 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

© 2015, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

Tara E. Walker – AWS Technical Evangelist

Michaël Garcia – AWS Solution Architect

October 2015

Build Mobile Apps for IoT Devices

and IoT Apps for Mobile Devices

MBL 303

Page 2: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

What to Expect from the Session

Demonstration

Mobile and IoT Usage Scenarios

AWS IoT SDKs and API

Architecture with AWS IoT

Page 3: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

WiFi Router

Smartphone

Plants Computer

My Home

Car

Demonstration

Page 4: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

Demonstration

A.S.F.A

(Autonomous system for agriculture)

Page 5: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

Demonstration

Page 6: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

Mobile usage scenarios:

Autonomous system for agriculture

Page 7: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

Easy customer setupThink user experience

Build trustAlmost “magical” More engagement

Page 8: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

Easy customer setup

Intel Edison

WiFi Router

Mobile

ApplicationUser

WiFi

Bluetooth

AWS IoT

Page 9: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

Sending data to AWS IoT

Node.js

// Certificates for secure communications

var KEY = fs.readFileSync(pathToPrivateKey);

var CERT = fs.readFileSync(pathToCert);

var TRUSTED_CA_LIST =

[fs.readFileSync(pathToROOTCA)];

// Set connections parameters

var options = {

port: 8883,

host: <AWS IoT Endpoint>,

protocol: 'mqtts',

ca: TRUSTED_CA_LIST,

key: KEY,

cert: CERT,

secureProtocol: 'TLSv1_2_method',

protocolId: 'MQIsdp',

clientId: ’Edison’,

protocolVersion: 3

};

Node.js

Node.js

// Connect to the MQTT broker

var client = mqtt.connect(options);

Page 10: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

Sending data to AWS IoT

client.on('connect', function () {

//Do stuff here when connection is established

});

client.on('message', function (topic, message) {

//Do stuff here when a message is received

});

// Subscribe to an MQTT topic

client.subscribe(topic);

// Publish data on MQTT topic

client.publish(topic, JSON.stringify(myMsg));

Node.js

Page 11: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

Bluetooth on the AWS IoT Device

// Bluetooth Low Energy Library

var bleno = require('bleno');

// When starting up

bleno.on('stateChange', function(state) {

if (state === 'poweredOn') {

bleno.startAdvertising('ASFA device', ['f00df00ddffb48d2b060d0f5a71096e0']);

}

});

// Reads data and update WiFi configuration

BLEConnectCharacteristic.prototype.onWriteRequest = function(data, offset,

withoutResponse, callback) {

updateWPASupplicant(JSON.parse(data));

callback(this.RESULT_SUCCESS);

};

Node.js

Page 12: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

Bluetooth on Android

// Initializes a Bluetooth adapter on Android

final BluetoothManager bluetoothManager =

(BluetoothManager)

getSystemService(Context.BLUETOOTH_SERVICE);

mBluetoothAdapter = bluetoothManager.getAdapter();

// Automatically connects to the device upon successful start-up initialization.

mBluetoothLeService.connect(mDeviceAddress);

// Write data

characteristic.setValue(this.chunks[0].toString());

mBluetoothGatt.writeCharacteristic(characteristic);

Node.js

Page 13: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

Monitor the systemUsing the web or mobile

AccessDifferent users Tools

Page 14: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

Telemetry dashboard

Intel EdisonServerless

Web Dashboard

Amazon Cognito

Amazon

DynamoDB

Rule

The rule pushes ALL data to an Amazon DynamoDB table

Rule

User

Mobile

ApplicationUser

AWS IoT

Page 15: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

Telemetry dashboard

Amazon Cognito

Amazon

DynamoDB

User

SmatphoneUser

Serverless

Web Dashboard

Amazon S3

SDK JavaScript

SDK Android

Page 16: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

Telemetry dashboard

Rule

{

"sql": "SELECT * FROM 'things/data'",

"ruleDisabled": false,

"actions": [

{

"dynamoDB": {

"roleArn": "arn:aws:iam::xxxxxxxxxxx:role/iot-role",

"tableName": "thingsData”,

"hashKeyField": "topic",

"hashKeyValue": "things/data",

"rangeKeyField": "timestamp",

"rangeKeyValue": "${devicetimestamp}"

}

}

]

}

Page 17: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

Control the connected objectWhenever, wherever you are

Not always online VisibilityMultiple technologies

4G

Page 18: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

AWS IoT Thing Shadow: Desired state

Intel Edison

Desired

state

Shadow

Desired state

Shadow

Ask for desired state to activate the pump

Mobile

ApplicationUser

AWS IoT

HTTPSMQTTS

Page 19: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

AWS IoT Thing Shadow: Desired state

Shadow

{

"state":{

"desired":{

”pump":”1"

}

}

}

POST /things/Edison/state

Page 20: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

AWS IoT Thing Shadow: Desired state

Shadow

{

"state":{

”pump":”1"

},

"version":"3",

"metadata":{

"color":<time-stamp>

}

}

MQTT $aws/things/Edison/shadow/update

Page 21: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

AWS IoT Thing Shadow: Reported state

Intel Edison

Shadow

Reported

state

Rule

Amazon SNS

Mobile push

Send SNS Mobile Push Notification when pump has been activated

Rule

”reported": { "pump": 1 }

Shadow

Mobile

ApplicationUser

AWS IoT

Page 22: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

AWS IoT Thing Shadow: Reported state

Shadow

{

"state":{

”reported":{

”pump":”1"

}

}

}

MQTT $aws/things/Edison/shadow/update

Page 23: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

AWS IoT Thing Shadow: Reported state

Rule

{

"sql": "SELECT * FROM '$aws/things/Edison/shadow/update/delta'

WHERE state.desired.pump = 1 AND state.reported.pump = 1",

"ruleDisabled": false,

"actions": [

{

"sns": {

"roleArn": "arn:aws:iam::xxxxxxxxxxx:role/iot-role",

”targetArn": "arn:aws:sns:us-east-1:xxxxxxxxxxx:ReInventDemo"

}

}

]

}

Page 24: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

Self-regulated IoT systemsBe notified, create autonomous systems

Create high value for

your customersComplex and automated

IoT applications

Page 25: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

Self-regulated systems

Intel Edison

Rule

AWS Lambda

Triggers Lambda function when humidity is too low

Desired

state

Rule

Mobile

ApplicationUser

AWS IoT

Page 26: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

Self-regulated systems

Rule

{

"sql": "SELECT * FROM 'things/data' WHERE humidity < 20",

"ruleDisabled": false,

"actions": [

{

"lambda": {

"functionArn": "arn:aws:lambda:us-east-

1:xxxxxxxxxxx:function:pumpAlert"

}

}

]

}

Page 27: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

AWS IoT SDKs and APIs

Page 28: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

AWS IoT Device C SDK

// Libraries

#include "mqtt_interface.h"

#include "iot_version.h"

// Connecting to MQTT broker

MQTTConnectParams connectParams;

connectParams.MQTTVersion = MQTT_3_1_1;

connectParams.pClientID = "CSDK-test-device";

connectParams.pHostURL = HostAddress;

connectParams.port = port;

iot_mqtt_connect(connectParams);

// Subscribing to a topic

MQTTSubscribeParams subParams;

subParams.mHandler = MQTTcallbackHandler;

subParams.pTopic = "sdkTest/sub";

subParams.qos = qos;

iot_mqtt_subscribe(subParams);

Page 29: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

AWS IoT SDK for Javascript

// Enable AWS SDK for JavaScript support using a service model file

var myService = new AWS.Service({apiConfig:

require('./path/to/service-model.json'), endpoint: "service endpoint"});

// Initialize SDK

var aws = require('aws-sdk');

var iot = new aws.Service({apiConfig: require('./iot-service-model.json'),

endpoint: ”iot.us-east-1.amazonaws.com” });

var iotData = new aws.Service({apiConfig: require('./iot-data-service-model.json'),

endpoint: "data.iot.us-east-1.amazonaws.com“ });

// Publish message on MQTT topic

var params = { "topic" : "foo/bar", "payload" : "hello world" };

iotData.publish(params, function(err, data) {

console.log(err, data);});

Page 30: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

Using MQTT on Android with Paho

// Use TLS1.2 to connect to AWS IoT

SSLContext sslContext =

SSLContext.getInstance("TLSv1.2"); sslContext.init(keyManagerFactory.getKeyManagers()

, null, new

SecureRandom()); mqttConnectOptions.setSocketFactory(sslContext.getSocketFactory());

// Use Android MQTT Paho Library to establish connection

mqttConnectOptions.setCleanSession(true); mqttConnectOptions.setConnectionTimeout(AWSIo

TConstants.IoTTimeout); mqttConnectOptions.setKeepAliveInterval(AWSIoTConstants.IoTKeepali

ve); if (AWSIoTConstants.lastWillTestament != "" && AWSIoTConstants.LastWillTopic !=

null) { mqttConnectOptions.setWill(AWSIoTConstants.LastWillTopic, AWSIoTConst

ants.lastWillTestament.getBytes(), AWSIoTConstants.IoTQoS, true); } try

{ connectionListener.setMQTTClient(mqttClient,

mqttConnectOptions); mqttClient.connect(mqttConnectOptions, null,

connectionListener); instance = this; }

Page 31: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

Amazon Cognito and AWS Identity and

Access Management (IAM) policies

Policy variables

cognito-identity.amazonaws.com:amr

cognito-identity.amazonaws.com:aud

cognito-identity.amazonaws.com:sub

{ "Version": "2012-10-17",

"Statement": [

{

"Effect": "Allow",

"Action": [

"iot:Publish"

],

"Resource": [

"arn:aws:iot:us-east-1:

420622145616:topic/foo/bar/${cognito-identity.amazonaws.com:aud}"

],

"Condition": {

"ForAnyValue:StringLike": {

"cognito-identity.amazonaws.com:amr": "graph.facebook.com"

}

}

}

]}

Page 32: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

AWS IoT CLI and Web Console

Additional Access to AWS IoT available:

• AWS CLI

• AWS IoT Web Console

AWS CLI AWS Management

Console

Page 33: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

Common Design Architectures

with AWS IoT

Page 34: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

Using Smartphone as a hub

Intel Edison AWS cloud

Amazon Cognito

Mobile

Application

• No connectivity: Very limited resources / Saving costs

• Security: Use Amazon Cognito to securely send data to AWS IoT or to the

AWS cloud

• Hub: Use Smartphone’s capabilities (WiFi/4G)

Page 35: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

Building Automation / Mobile Control of IoT

• Dynamic Automation: Dynamically respond to Events happening

in the Factory

ex. Opening doors and requesting assistance when emergency button is pushed

• Mobile Control: Simplify mobile control of IoT/Factory automation

devices with AWS IoT rules

IoT DevicesAWS cloudAWS Lambda

AWS

IoT Rule

Mobile

Application

Factory

Page 36: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

Display complex metrics…… Using processing power from the AWS Cloud

AWS IoTConnected

device

AWS Lambda

Amazon

DynamoDB

Mobile

ApplicationUser

Page 37: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

Learn your user preferences…… And anticipate their needs

Serverless

Web Dashboard

Millions of sources

producing

terabytes of data

IoT Devices

Mobile

Application

AWS IoT Amazon

Kinesis

Amazon

Machine Learning

Amazon S3

Page 38: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices
Page 39: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

Remember to complete

your evaluations!

Page 40: (MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices

Thank you!

Tara E. Walker @taraw

Michaël Garcia @michaelgarcia__