Streams is a level 2 cryptographic framework to send data over the IOTA Tangle. We developed a generic gateway to allow different devices using the I2T Standard, to publish their data on Streams in an easy fashion.
To this end, our I2T Gateway listens for data sent via POST requests and sends it to the Tangle via Streams. On the other end, we have provided a I2T Decoder, allowing for subscriptions to existing channels carrying information.
Streams acts as your immutable data storage, distributing the information amongst the network nodes. What is published there is there for good.
Streams runs on top of IOTA transactions. Therefore, each data set sent requires a little proof-of-work, limiting the granularity of inputs. Sending a data set per second would result in an overloaded full node, breaking the Gateway’s ability to do its job.
On the other side, Streams channels do not allow to get a subset of messages (i.e. the last 5 published messages). This proved to be an issue while designing IoT applications that needed to persist object’s statuses such as your living room lamp and access it to perform actions.
Keepy is here to help you to overcome these two obstacles.
Keepy is a small Nodejs application that sits in front of the Streams Gateway to receive sensors’ data and return it on demand. It basically mounts an endpoint you can POST data to. The data is stored on Streams and a local Database that keeps an association between each data set and the Streams channel id containing it. You can query Keepy for a certain number of datasets (i.e. the last one) on a given channel and get an immediate response from the local database, including the datasets requested and their channel ids. This way you get fast read times and the ability to validate the data integrity against the Tangle.
Eduardo Pelitti and Andy Espagnolo, from the Argentinian open-source community, saw the limitations that Streams had in terms of i/o and decided to code this useful little app in Nodejs, a language chosen considering its easy-to-implement and modify nature.
Keepy also includes a buffer system to handle numerous data insert requests. You can send data on a per second basis to Keepy. It will store it for an amount of seconds defined by the user and send it to the Tangle as a bundle after that time limit is met, thus allowing the ability to store granular reads in the Tangle, regardless the required PoW.
We believe this is a very simple but valuable application. It helps solving some of the issues observed while mentoring the “Integrate Everything with IOTA” Hackathon contestants, it is open-source and extremely easy to customize by the users. We encourage everyone to try it out and play with it!
On behalf of the I2T crew, we want to thank to all the amazing open-source members that are actively collaborating from different angles to make IoT/IOTA integrations easier and better.
See you on the I2T Discord!