IOT is a $235B industry, expected to grow to $520B in 2021 (see forbes.com) and from my experience IOT could benefit from something like SAFE. Putting up even a basic monitoring device like a weather station is definitely not a solved problem yet imo, it’s still a messy ecosystem full of complex decisions. Having a great library for IOT devices to talk with SAFE would be very handy.
There are some considerations we can make right now about IOT and SAFE.
Device Support
Libraries for devices should be simple and lean.
Raspberry Pi is very simple to set up to use with SAFE, which is great news. It feels almost too easy. MaidSafe have done a great job with this subset of the IOT in my opinion (ie ARM SOC).
However cheaper microcontrollers such as ESP8266 / ESP32 or LinkIt7697 have a few challenges.
On-board memory is too small, usually a few MB maximum. A simple upload/download app for SAFE compiles to about 15MB so cannot fit on these microcontrollers. This could be addressed a few ways.
- Wait for microcontrollers with more memory but same price point.
- Simplify the SAFE library so it fits onto devices with less memory.
- Add an SD card to the device, split the operations into smaller sub-units and load each sub-unit into operating memory as needed.
- Ignore very cheap devices (ESP8266 is about $2) and use a slightly more expensive one (Raspberry Pi Zero is about $20).
Lack of filesystem or ways to manage and load the configurations. This means hardcoded values may become obsolete over time, difficult to update, or proxied in a potentially insecure way. This mainly affects bootstrap client IPs, wallet keys, login credentials etc.
This means a potential IOT-specific SAFE library should be flexible and not require configuration as either specifically files or specifically as hardcoded parameters. By default the library should ensure private information is difficult to be accidentally checked into version control or published publicly. Managing secrets on IOT is currently very poor and a well designed IOT+SAFE library could make a huge difference to that problem.
Language Support
Rust is great and can be cross-compiled and supported on many platforms using LLVM. However rust isn’t easy to use with popular IOT environments such as the Arduino IDE (using C/C++) or Espruino (using Javascript). How can this language compatibility be overcome? Maybe a toolchain can be used (eg esp-rs) to transpile rust to other languages? Or maybe some other bindings will become available for compiled rust? Or maybe the library will exist in multiple simultaneous languages? I guess my point is, the language of the library (ie rust) is currently a barrier for using with most microcontrollers, but hopefully in the future this won’t be the case. We can start considering that now (and I feel the frontend team actually are considering it well).
Perception
These challenges pose a fairly significant question: should IOT devices use a proxy to SAFE rather than communicate with it directly? This means introducing a server to pass data coming from IOT devices onto SAFE. Not a big deal perhaps on face value, but it communicates a certain purpose and use-case for SAFE that I’m not comfortable with. SAFE should ideally be a native layer of the internet, not an overlay that’s used for only for special purposes. Can we make that happen? Can you think of other things that are currently getting in the way of deploying IOT devices onto SAFE?
I was hoping in this post to demonstrate a simple weather station on alpha-2 using an ESP32 chip with a DHT22 temperature sensor but it’s too difficult to pull it all together just now (I learned a lot though so no point wasting that experience, hence this post). I’m going to instead get the temperature monitor going with a raspberry pi just so there’s something live, but to me the minimum bar being rpi (ie the exclusion of ‘real’ microcontrollers) is not the vision I have in mind for IOT+SAFE. I’d be keen to hear your thoughts.