[racket] Internet of Things/ Marketplace

From: Jukka Tuominen (jukka.tuominen at finndesign.fi)
Date: Sat Nov 16 01:48:16 EST 2013

Hi all,

some time ago I built a simple client/server proof-of-concept for the
Liitin project ( www.liitin.org )
http://lists.racket-lang.org/users/archive/2011-June/046372.html

Although this is still valid for a direct, one-way device/service
communication, I now have a more generic and UX-oriented p-o-c in mind to
follow the Liitin philosophy. Here’s my Internet of Things vision in
brief:


- A publish/ subscribe server that both users and devices can access
through firewalls. Only the server requires a static, public IP. This will
be available for Liitin users by default.

- Once a device is turned on, it automatically connects to the pub/sub
server as a publisher to provide a two-way communication channel: pushing
event notifications to subscribers and acting on subscribers’ commands. SW
services may use the same method.

- Once the user has signed onto his/her (Liitin) account, a daemon is
automatically launched to connect to the pub/sub server as a subscriber to
both receive push notifications and allowing to send commands to the
device.

- There’s a Device Manager GUI to add and manage devices. The devices only
contain primitive functions in Racket syntax and all the higher-level
programming is handled by Racket on the client side and stored as Liitin
Objects. In effect, you can freely combine functionality from different
devices and between users when shared. E.g.
(when (below-zero? thermometer-x)(turn-on! heater-y))
The event stream can be parsed e.g. for notifications and direct
reactions, or be integrated into various GUI applications.


I was happy to hear about the package Marketplace for Racket (
http://blog.racket-lang.org/2013/05/marketplace-language-for-network-aware.html
), and I wonder if it could be used as a starting point? It would be
native Racket all the way through. Another option is to choose some 
generic open-source pub-sub server, and make the user and device ends
speak racket.

I’m still speaking of a p-o-c, so it’s more important at this phase to be
able to have the ends communicate with each other and to manage multi-user
and multi-device traffic than to make the implementation robust and
secure. Those come later.

I will use virtual machines for the pub/sub server and device clients to
begin with. The user clients will be integrated into Liitin accounts. It
would be great to add Arduino support at some point.

What do you think, would the Marketplace be a good starting point or do
you recommend some other approach? Any pointers and comments regarding
either the concept or the implementation are greatly appreciated.


br, jukka




Posted on the users mailing list.