Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices...

35
© 2015, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Jan Metzner Solutions Architect, Amazon Web Services Build Mobile Apps for IoT Devices and IoT Apps for Mobile Devices Pop-up Loft

Transcript of Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices...

Page 1: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

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

Jan Metzner Solutions Architect, Amazon Web Services

Build Mobile Apps for IoT Devices and IoT Apps for Mobile Devices

Pop-up Loft

Page 2: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

Easy customer setup Think user experience

Build trust Almost “magical” More engagement

Page 3: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

Easy customer setup

Intel Edison

WiFi Router

Mobile Application

User

WiFi

Bluetooth

AWS IoT

Page 4: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

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 5: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

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 6: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

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 7: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

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 8: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

Monitor the system Using the web or mobile

Access Different users Tools

Page 9: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

Telemetry dashboard

Intel Edison Serverless

Web Dashboard

Amazon Cognito

Amazon DynamoDB

Rule

The rule pushes ALL data to an Amazon DynamoDB table

Rule

User

Mobile Application

User

AWS IoT

Page 10: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

Telemetry dashboard

Amazon Cognito

Amazon DynamoDB

User

Smatphone User

Serverless Web Dashboard

Amazon S3

SDK JavaScript

SDK Android

Page 11: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

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 12: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

Control the connected object Whenever, wherever you are

Not always online Visibility Multiple technologies

4G

Page 13: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

AWS IoT Thing Shadow: Desired state

Intel Edison

Desired state

Shadow

Desired state

Shadow

Ask for desired state to activate the pump

Mobile Application

User

AWS IoT

HTTPS MQTTS

Page 14: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

AWS IoT Thing Shadow: Desired state

Shadow

{ "state":{ "desired":{ ”pump":”1" } } }

POST /things/Edison/state

Page 15: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

AWS IoT Thing Shadow: Desired state

Shadow { "state":{ ”pump":”1" }, "version":"3", "metadata":{ "color":<time-stamp> } }

MQTT $aws/things/Edison/shadow/update

Page 16: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

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 Application

User

AWS IoT

Page 17: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

AWS IoT Thing Shadow: Reported state

Shadow

{ "state":{ ”reported":{ ”pump":”1" } } }

MQTT $aws/things/Edison/shadow/update

Page 18: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

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 19: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

Self-regulated IoT systems Be notified, create autonomous systems

Create high value for your customers

Complex and automated IoT applications

Page 20: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

Self-regulated systems

Intel Edison

Rule

AWS Lambda

Triggers Lambda function when humidity is too low

Desired state

Rule

Mobile Application

User

AWS IoT

Page 21: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

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 22: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

AWS IoT SDKs and APIs

Page 23: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

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 24: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

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 25: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

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(AWSIoTConstants.IoTTimeout); mqttConnectOptions.setKeepAliveInterval(AWSIoTConstants.IoTKeepalive); if (AWSIoTConstants.lastWillTestament != "" && AWSIoTConstants.LastWillTopic != null) { mqttConnectOptions.setWill(AWSIoTConstants.LastWillTopic, AWSIoTConstants.lastWillTestament.getBytes(), AWSIoTConstants.IoTQoS, true); } try { connectionListener.setMQTTClient(mqttClient, mqttConnectOptions); mqttClient.connect(mqttConnectOptions, null, connectionListener); instance = this; }

Page 26: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

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 27: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

AWS IoT CLI and Web Console

Additional Access to AWS IoT available: •  AWS CLI •  AWS IoT Web Console

AWS CLI AWS Management Console

Page 28: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

Common Design Architectures with AWS IoT

Page 29: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

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 30: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

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 Devices AWS cloud AWS Lambda

AWS IoT Rule

Mobile Application

Factory

Page 31: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

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

AWS IoT Connected device

AWS Lambda

Amazon DynamoDB

Mobile Application

User

Page 32: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

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 33: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

Demo Documented in our mobile Blog: •  http://bit.ly/1lagaFU •  http://bit.ly/1Pej60L •  http://bit.ly/1RAHuYf Code https://github.com/awslabs/aws-device-farm-sample-app-for-android

Page 34: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

Demo Documented in our mobile Blog: http://bit.ly/1lagaFU http://bit.ly/1Pej60L

http://bit.ly/1RAHuYf

Page 35: Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... · Build Mobile Apps for IoT Devices and IoT Apps for Mobile ... Mobile Application AWS IoT Amazon Kinesis ... //github.com/awslabs/aws-device-farm-sample-app-for-android

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

Thank You

Pop-up Loft

Jan Metzner @janmetzner