Upload
matteo-collina
View
8.091
Download
6
Tags:
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
@matteocollinamatteocollina.com
Better Software - Florence 2012/09/26
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
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
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.
• 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
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
• 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?
Built BDD-style, with Cucumber-js and mocha
Continuous Integration based on Travis-CI
Written in CoffeeScript
Patches are welcome!
http://www.flickr.com/photos/mpirotta/4944504834
QEST:
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!!
QESTtry
qest.me
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
Ph.D. Student
@matteocollina matteocollina.com
www.mavigex.comwww.wemobi.it
Credits• Font Awesome for the
Icons.
• Flickr for LOTS of CC images :).
• Balsamiq Mockup for the iPhone Mockup
Thank You!
http://www.flickr.com/photos/alexindigo/1606826416
Any Questions?