View
3.698
Download
2
Category
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
http://www.flickr.com/photos/clearlyambiguous/48185613/
HTTP is slow and safe
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
QESTDiscover
qest.me
• 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