Making things that works with us - First Italian Internet of Things Day

Preview:

DESCRIPTION

 

Citation preview

@matteocollinamatteocollina.com

IoT Day Trento 2013/04/09

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

50.000.000.000interconnected

"things"by

2020

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?19

>: 4 8 15 16 23 42

Hubot © 2012-2013 GitHub Inc. All rights reserved.

Enter Hubot

A programmable robotthat is controlled through chat

Hubot © 2012-2013 GitHub Inc. All rights reserved.

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

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

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

• will support MongoDB, RabbitMQ and many others.

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 into 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

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 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

Ph.D. Student @ University of Bologna

@matteocollina matteocollina.com

Credits• Font-Awesome for the

Icons.

• Flickr for the CC images.

• Balsamiq Mockup for the iPhone Mockup.

• Unibo for my Ph.D.

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?

Recommended