Gladly, everyone !
My reason for doing this, is to challenge the idea that IoT needs some server in "the cloud" to handle your data processing. Instead, I want to bring the cloud of devices that I already own and online to Me.
The stated goal why many companies' IoT hardware offerings use their servers is so that you, the user, can communicate from anywhere to your devices. This also has the added effect of lockin and access to all your data. And the fact that it adds a single point of failure to your IoT network, it seems a bad deal. Of course, how do we compensate for this if we roll our own? We need our servers, sitting somewhere, handling the data (MQTT) and routing and making decisions on data (Node-Red)....
So why not make the server and all your clients in different locations to the same network? If they could talk to each other as if on a simple LAN, would be a tremendous advantage. Doing that the "standard" way means VPNs and pain and suffering. And then on the same network, the machines start chattering.
Right now, I have a home which I'm slowly wiring up with Arduino Nano/nRF24L01+/MySensors library kit. I also have a PIR sensor on my work machine's serial port to see if someone comes to my desk. And I also am a member of the local hackerspace, where I use that as a testbed for less stable rollouts. And I also have a private workshop where my 3d printer is located. I have internet in all places, and yet I want to submit data to my main MQTT server so I have it all in 1 place. Before, this wasn't possible. I don't control the routers some of those areas, so they were islands of data.
Now, with full .onion resolution, I can take local data and do an MQTT-in to my hrfuwhrf43fif3o.onion (made up address) main server from all my remote nodes, along with being able to subscribe to data on the MQTT as well. This also means that I can support websockets as well now with Node-red webpages and my Mosquitto client.
Another nice effect, when comparing to things like
no-ip.org, is that griefers and hacklets routinely scan their DNS block for ripe machines to exploit and/or DOS. Even though your machine is fully patched and running current, you still have to deal with the greatly increased inbound traffic. With TOR, since the name is based upon your public key, it is effectively random. Scanning that whole space entails of around 36^16 addresses, or 65535*36^16 ports (?!). Effectively, unless you make your address public, it's probably going to stay hidden and garner less ingress. For me, that matters on my home network, as I only have 300KBs/100KBs.
And yes, the connections are all encrypted and anonymous, per the benefits of TOR hidden services. I really am not counting on using those abilities, because I know where my machines are. However as a really cool side effect, if one of my laptops do get stolen, if they connect to wifi (enabled guest acct with wifi access), I can log in via ssh-tor and record them :)
So, perhaps that gives a better background as to why this was an important piece of coming up with an alternate solution than "go through servers elsewhere". No, because I'll bring the servers to me.
Sincerely
Josh Conway