Making things that works with us codemotion

Post on 22-Nov-2014

4.092 views 0 download

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.

Transcript of Making things that works with us codemotion

@matteocollinamatteocollina.com

Codemotion Venezia 2012/11/17

Making things that work with us!

Smartphones are changing the world

How many people will own a smartphone by 2014

1.000.000.000

Did you see it coming

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

Stevedid.

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

Thanks.

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

They didn’t!

...

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

50.000.000.000

1.000.000.000

50.000.000.000

"Things"

50.000.000.000interconnected

"things"by

2020

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

Social Web Of Things Video

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

Let's experiment

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

Monitor my housetemperature

Goal:

I want to chat with my house

>: hi househi matteo

>: what's the temperature?36

>: 4 8 15 16 23 42

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

Hubot © 2012 GitHub Inc. All rights

Enter Hubot

Hubot © 2012 GitHub Inc. All rights

A programmable robotthat is controlled through chat

We can supercharge our house with hubot

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

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

From Hubot, I want to do the equivalent of:

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

What about JSON

We are building an API

In Italy,“API” means

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

What do we need to sense my house temperature

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

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

TMP36

TMP36

We add a sensor to an Arduino

TMP36

We add an ethernet shield to connect to the Internet

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

What protocol do we use to push our temperature

to our API?

HTTP POST

We need a fast, binary protocol

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

likes binary

What if we need to interconnect our things?

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

We need a publish/subscribe pattern.

HTTP

Devices need:• binary protocol

• publish/subscribe

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.

• “things” exposed with binary protocol

• publish/subscribe

• topics as the naming system

• “things” exposed to the web

• request/response

• URIs as the naming system

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

Mosquitto

Really Small Message Broker

• the base element of the protocol is a topic

• devices and other systems can publish or subscribe to topics

How to use

on

Step 1: download PubSubClient, the library for

on Arduino: Setup

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

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

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

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

on Arduino: publishing

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.

speaks

, Hubot speak HTTP

speaks

, Hubot speak HTTP

Communication

• 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

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>

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

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

QEST : Scalability

Redis

HTTP/MQTT Clients

REST Server MQTT Server

QESTData Layer

...

Load Balancer

REST Server MQTT Server

QESTData Layer

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?

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

Let’s ask something to my house!

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"

• 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

We need to interconnect UsersSocial profiles tothe Devices!

We need OAuthfor Devices!

I’m working on

it!!

TL;DR• The Internet of Things

will be big

• Devices need binary and pub/sub protocols

• Devs need HTTP API

• QEST does both

Matteo Collina

Software Engineer @ Mavigex

Ph.D. Student @ University of Bologna

@matteocollina matteocollina.com

Credits• Font Awesome for the

Icons.

• Flickr for LOTS of CC images :).

• Balsamiq Mockup for the iPhone Mockup

Matteo Collina (matteo.collina2@unibo.it)

Thank You!

@matteocollina

http://www.flickr.com/photos/axel-d/479627824/

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

Any Questions?