Project Noisy at Satori Live Data Hackathon

On September I participated in the Satori Live Data Hackathon. Satori (https://www.satori.com/) is part of the videogames company MachineZone (https://www.mz.com/). They took their live data streams technology used in their massive multiplayer games and made it available for other companies to use. Powering everything from SmartCities, Games, IM, etc.

Image for post
Image for post

I have to say their technology is pretty awesome and easy to use. You can create a channel in their dashboard, obtain an AppKey and a secure Web Socket endpoint and start sending packages immediately, so, any client subscribed to the same channel will receive the packages with very low latency. They also provide SDK for Javascript, Python, Java, that are easy to integrate.

Other features include creating StreamBots, basic stateful execution client that listens to a channel (or query) and can process incoming messages, allowing the bot to re-send different messages to the channel. (Sadly for now the bot cannot use external services, so no fancy third part API integrations yet). Views is another nice feature, allowing any client to have queries that can filter the channel or even do aggregation of messages.

So, with this technology in place, a large group of developers, designers, product managers and hackers in general went on to create a solutions for problems they found and could be solved using live data channels.

Three categories awarding prices: Best use of Satori technology, Best use of Satori technology for smart cities planning of transportation an a grand prize for the best hack.

For some time I was testing and trying to came up with ideas of how to use Bluetooth Low Energy. In this hackathon I saw the opportunity to put some of this ideas to work. Especially one, count how many Bluetooth LE devices where close by and approximate how many people are in a space by using their BLE signal signatures.

The way it works is:

  1. A Scanner, installed in a space, is continuously detecting BLE devices and sending that information to a Satori channel.
  2. A Satori StreamBot is receiving all BLE devices detection and performing a logic for time stamping them and maintaining a record of how many times one particular device is found and the timing associated. Since we wanted to use this scanning capability on Bus Stops and inside buses itself. This bot is also sending periodic results of density approximations.
  3. A periodic bot fetches information from Muni prediction API and sends the information to a Satori live channel.
  4. A mobile web app client displays the information from the channels.

You can find the source code on Hithub:

  1. Scanner: https://github.com/ernestofreyreg/noisyscanner
  2. Muni API to Channel: https://github.com/ernestofreyreg/noisymuni
  3. Web Client: https://github.com/ernestofreyreg/noisyclient

Examples

Satori has SDK for several popular languages: JavaScript, Python, Java, etc. Let me show an example using JavaScript.

You can install the Satori JS SDK on NodeJS by:

$ yarn add satori-rtm-sdk

You nodeJs code is as easier as:

You can also use publishing and subscribing capabilities on the frontend. Luckily the satory-rtm-sdk package can be “browserified”, meaning integrate it in your build bundle using browserify or webpack.

I regularly use Nextjs (https://github.com/zeit/next.js) and integrating Satori SDK with it is also very easy.

Again you will need to add the SDK to you package.json

$ yarn add satori-rtm-sdk

And add it to you page, my preferred way to do it is in the event cycles for mount and unmount:

Once you have the client working a very simple way to test it is to use the Satori CLI Client.

This is a simple command line tool that allows you to publish or subscribe to your channels. Its a Python program installable via pip.

Once installed, to publish on a channel just do:

$ echo '{"type": "dashboard", "talk": "Hell Mat"}' | satori-rtm-cli -e YOUR_ENDPOINT -a YOUR_APPKEY publish YOUR_CHANNEL

You can also subscribe to all messages in a channel:

$ satori-rtm-cli -e YOUR_ENDPOINT -a YOUR_APPKEY subscribe YOUR_CHANNEL

Is a good thing to have a terminal apart listening to all messages in your channel.

Satori also provides other smart features, like Views, StreamBots, Roles. You can check them out in their documentation page.

It was a good hackathon. Is nice to learn a new technology that you know will probably continue using in your projects (I also used Satori channels while participating in the Techcrunch SF Hackathon 2017 with very good results)

Software Engineer @ Coalition Inc., Miami FL

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store