Hi, interested in learning how Fission might be applicable to IoT – especially with edge devices. Here is some of my current thinking (there are still holes in it, but gives some sense of the type of problems I’m trying to solve):
We had a call with @cbrake to learn more about what his needs are and how Fission could fit in.
One of the opening phrases that stuck with me was “currently I send data from IoT devices to the cloud. What if I could use Fission to skip the cloud?”.
In our discussion, it quickly became clear that there is something interesting here, but it’s also not something that the team at Fission has really looked at.
For starters, Simple IoT already uses Elm for its front end user interface, and we’ve got lots of Elm on Fission experience here. Securely viewing and interacting with IoT data (especially if its sensitive) can be done with FIssion’s webnative apps today, with encryption at rest and each user storing their own data. A lot better than today’s centralized cloud storage of devices from in the home, or any other sensitive / private sensor data.
The other part of data at the edge means diving down into the IPFS layer directly. 10s to 1000s of IoT devices gathering data and posting it.
Another challenge mentioned was config management / versioning. Those 1000s of devices need to get managed remotely. Some of them also have LCD screens and local keyboards for config, which can get out of sync.
One model could be running an instance of the Fission platform as a whole. Each node could have a user account and DNS address of the form NODENAME.YOURNETWORK.TLD
. Some bootstrap info could be stored in DNS (e.g. DID for device identity) to be decentralized and resilient, and have config and other info associated with a DNSLink https://dnslink.io/ entry for storage in IPFS / WNFS, which would also give you revision history.
Edge devices often use CAT-M cellular modems 30kbps / second.
This means that the device nodes themselves may not be great candidates for being IPFS nodes. Perhaps a type of “edge collector” model that collects raw data from the edge nodes, and then posts it to IPFS.
NATSio https://nats.io/ is often used for pub-sub. Could IPFS pub-sub be used for this?
Yes / no / maybe Fission is in the midst of enabling IPFS pub-sub across the platform. We use it today for web-to-web linking of devices. It’s great that it’s built in, it hasn’t proven super stable out in the wild yet. More experimentation needed.
Can Fission help with time series data?
WNFS is both our data “file” storage, but since it’s built on IPFS and has a whole DAG structure, we can build other database structures on top of it. We are planning on event streams, would have to think more about how to handle time series data in particular.
Resources
- ProtoSchool has tutorials on difference parts of IPFS https://proto.school/tutorials – lots of networking at different layers with IoT, so going to have to understand IPFS fully.
- IPFS doesn’t have encryption built in, so using our Web Native File System to add encryption at rest from edge nodes to apps could be a building block
- likewise, using UCAN for decentralized auth – a DID per edge node, etc. User Controlled Authorization Networks (UCAN) Resources
- libp2p pub-sub https://docs.libp2p.io/concepts/publish-subscribe/ – in general, using libp2p might be interesting for lighter weight implementations. It’s what IPFS itself is built on top of, and is generally being adopted by many different p2p protocols and applications