70
@matteocollina matteocollina.com Better Software - Florence 2012/09/26 Making things that work with us!

Making things that works with us

Embed Size (px)

DESCRIPTION

In the ”Internet of Things” (IoT) vision the physical world blends with virtual one, while machine-to-machine interaction improve our daily life. Clearly, how these virtual objects are exposed to us is critical, so that their user interface must be designed to support the easiness of usage that is driven by the users’ needs, which is different from what machines requires. These two requirements must be solved, and an integrated solution should emerge, if we want to bring the IoT to the 50 billions network that is predicted to became in the next years. In this talk, you will see how these requirements cannot be met by the same communication protocol, as the user interfaces dictates a way of communication that is no suitable for the "machines". We will analyze what are the state-of-art protocols for both machines and users, and finally we will propose a solution to solve this problem.

Citation preview

Page 1: Making things that works with us

@matteocollinamatteocollina.com

Better Software - Florence 2012/09/26

Making things that work with us!

Page 2: Making things that works with us

Smartphones are changing the world

Page 3: Making things that works with us

How many people will own a smartphone by 2014

1.000.000.000

Page 4: Making things that works with us

Did you see it coming

http://www.flickr.com/photos/12738000@N00/360231193/

Page 5: Making things that works with us

Stevedid.

http://www.flickr.com/photos/noppyfoto/6216399465/

Page 6: Making things that works with us

Thanks.

http://www.flickr.com/photos/noppyfoto/6216399465/

Page 7: Making things that works with us

They didn’t!

...

Page 8: Making things that works with us

What's next(hint: it's a big number)

50.000.000.000

Page 9: Making things that works with us

1.000.000.000

50.000.000.000

Page 10: Making things that works with us

"Things"

Page 11: Making things that works with us

50.000.000.000interconnected

"things"by

2020

http://www.flickr.com/photos/adactio/2337914481

Page 12: Making things that works with us

Social Web Of Things Video

http://www.youtube.com/watch?v=i5AuzQXBsG4

Page 13: Making things that works with us

Let's experiment

Page 14: Making things that works with us

http://www.flickr.com/photos/jurvetson/2798315677

Page 15: Making things that works with us

Monitor my housetemperature

Goal:

Page 16: Making things that works with us

I want to chat with my house

Page 17: Making things that works with us

>: hi househi matteo

>: what's the temperature?36

Page 18: Making things that works with us

>: 4 8 15 16 23 42

If you don’t understand this, you are not a geek!

Page 19: Making things that works with us

Hubot © 2012 GitHub Inc. All rights

Enter Hubot

Page 20: Making things that works with us

Hubot © 2012 GitHub Inc. All rights

A programmable robotthat is controlled through chat

Page 21: Making things that works with us

We can supercharge our house with hubot

Page 22: Making things that works with us

module.exports = (robot) ->

robot.respond /what’s the temperature?/i, (msg) -> msg.http("http://mchouse.it/temperature") .header("Accept", "application/json") .get() (err, res, body) -> msg.send JSON.parse(body)

We can supercharge our house with hubot

How

Page 23: Making things that works with us

In order to ask our temp to hubot, we need to:

1. sense the temp2. get the temp on the web3. build a web API

Page 24: Making things that works with us

From Hubot, I want to do the equivalent of:

>: curl http://mchouse.it/temp

What about JSON

Page 25: Making things that works with us

We are building an API

In Italy,“API” means

“bees”http://www.flickr.com/photos/theseanster93/4056815767

Page 26: Making things that works with us

What do we need to sense my house temperature

Page 27: Making things that works with us

Arduino is an open source microcontroller, that you can use to hack things

http://www.flickr.com/photos/mattrichardson/5029708468/

Page 28: Making things that works with us

TMP36

TMP36

We add a sensor to an Arduino

Page 29: Making things that works with us

TMP36

We add an ethernet shield to connect to the Internet

http://www.flickr.com/photos/snootlab/6052465980/

Page 30: Making things that works with us

What protocol do we use to push our temperature

to our API?

HTTP POST

Page 32: Making things that works with us

We need a fast, binary protocol

http://www.flickr.com/photos/grrphoto/305649629

Page 33: Making things that works with us

likes binary

Page 34: Making things that works with us

What if we need to interconnect our things?

Page 35: Making things that works with us

To build a social web of things we need to react to events.

Page 36: Making things that works with us

We need a publish/subscribe pattern.

Page 37: Making things that works with us

HTTP

Page 38: Making things that works with us

Devices need:• binary protocol

• publish/subscribe

Page 39: Making things that works with us

Binary vs REST“Things” should interact with our lives, and all the technology should be built to make them easy to use.

M2M protocols are ad-hoc, and researchers and businesses focus on low level problems.

Page 40: Making things that works with us

• binary protocol

• publish/subscribe

• topics as the naming system

• royalty free

• open source implementations

• devices exposed to the web

• REST architecture

• URIs as the naming system

• syndication

Page 41: Making things that works with us

MQTT is the state of art protocol for the Internet of Things

Page 42: Making things that works with us

Mosquitto

Really Small Message Broker

Page 43: Making things that works with us

• the base element of the protocol is a topic

• devices and other systems can publish or subscribe to topics

Page 44: Making things that works with us

How to use

on

Page 45: Making things that works with us

Step 1: download PubSubClient, the library for

Page 46: Making things that works with us

on Arduino: Setup

String server = String("qest.me");

PubSubClient client = PubSubClient(server, 1883, callback);

Page 47: Making things that works with us

if (!client.connected()) { client.connect("arduino");}client.loop();

char s[10];itoa(get_temperature(), s, 10);client.publish("temp", s);

on Arduino: publishing

Page 48: Making things that works with us

if (!client.connected()) { client.connect("arduino");}client.loop();

char s[10];itoa(get_temperature(), s, 10);client.publish("temp", s);

on Arduino: publishing

This is called a topic, and it is where we publish

things on MQTT.

Page 49: Making things that works with us

speaks

, Hubot speak HTTP

Page 50: Making things that works with us

speaks

, Hubot speak HTTP

Communication

Page 52: Making things that works with us

• MQTT broker

• REST interface

• HTTP semantics

• no QoS

• built in node.js

• crafted by me

QEST

REST Server

Redis

MQTT Server

QEST

Data Layer

HTTP Clients MQTT Clients

Page 53: Making things that works with us

QEST• retains every message received

: MQTT to REST

curl -H "Accept: txt" \ http://qest.me/topics/temp

client.publish("temp", "30");

• every topic has its own URI: /topics/<NAME>

Page 54: Making things that works with us

QEST• transform every HTTP PUT received to a

MQTT message

: REST to MQTT

void callback(char* topic, byte* payload, int length) { ...}PubSubClient(server, 1883, callback);client.subscribe("temp");

curl -X PUT -d '{ "housetemp": 42 }' \-H "Content-Type: application/json" \http://qest.me/topics/temp

• devices can listen directly to MQTT topics

Page 55: Making things that works with us

Web App

DeviceSC

LS

DA

AR

EF

GN

D

IOR

EF

RE

SE

T3V

3P

WM

PW

MP

WM

L

TXRX ON

ICSP

PW

MP

WM

PW

M TX RX

31

21

11

01

9 8DIGITAL

7 6 5 4 3 2 1 0

1

5V GndPOWER

www.arduino.cc

ANALOG INVin 0 1 2 3 4 5

Arduino UNO

IoTBroker

QEST

state-of-artapproach to IoT apps

QEST-basedsolution to IoT apps

Bridge

Web App

DeviceSC

LS

DA

AR

EF

GN

D

IOR

EF

RE

SE

T3V

3P

WM

PW

MP

WM

L

TXRX ON

ICSP

PW

MP

WM

PW

M TX RX

31

21

11

01

9 8DIGITAL

7 6 5 4 3 2 1 0

1

5V GndPOWER

www.arduino.cc

ANALOG INVin 0 1 2 3 4 5

Arduino UNO

Page 56: Making things that works with us

QEST : Scalability

Redis

HTTP/MQTT Clients

REST Server MQTT Server

QESTData Layer

...

Load Balancer

REST Server MQTT Server

QESTData Layer

Page 57: Making things that works with us

JavaScript Apps are often a mess

We mix logic with presentation with persistance.

Is QEST different?http://www.flickr.com/photos/mpirotta/4944504834

Do you like Spaghetti Code?

Page 59: Making things that works with us

http://www.flickr.com/photos/oneaustin/1261907803

Let’s ask something to my house!

Page 60: Making things that works with us

Hubot © 2012 GitHub Inc. All rights

Hubot Integrationmodule.exports = (robot) ->

robot.respond /qest check ([a-z0-9A-Z]+)/i, (msg) -> topic = msg.match[1] if topic? msg.http("http://qest.me/topics/#{topic}") .header("Accept", "application/json") .get() (err, res, body) -> msg.send JSON.parse(body) else msg.send "No topic specified"

Page 61: Making things that works with us

• What devices can a user monitor?

• What devices can 'listen' to the state of other devices?

• Who can access the devices state?

• Is the communication secure?

Security Issues

Page 62: Making things that works with us

We need to interconnect UsersSocial profiles tothe Devices!

Page 63: Making things that works with us

We need OAuthfor Devices!

I’m working on

it!!

Page 65: Making things that works with us

TL;DR• The Internet of Things

will be big

• Devices need binary and pub/sub protocols

• Devs need HTTP API

• QEST does both

Page 66: Making things that works with us

Matteo Collina

Software Engineer

Ph.D. Student

@matteocollina matteocollina.com

Page 68: Making things that works with us

Credits• Font Awesome for the

Icons.

• Flickr for LOTS of CC images :).

• Balsamiq Mockup for the iPhone Mockup

Page 69: Making things that works with us

Thank You!

Page 70: Making things that works with us

http://www.flickr.com/photos/alexindigo/1606826416

Any Questions?