New Plugin - OctoEverywhere! - Looking For Alpha Testers!

Hello!

Here’s my story. I’m a single dev who finally got too annoyed with setting up remote access form my home for OctoPrint. I thought there has to be a better way, so for the last few months I have been working on a project called OctoEverywhere!

OctoEverywhere is a plugin / service that gives you access to your full OctoPrint instance in a simple, safe, and secure way. You get access to the entire web portal, so you can use all of your plugins just as you would expect. OctoEverywhere even supports 3rd party apps and allows them to work from anywhere!

My project is in early alpha, but I think its at the point where I need more testers. I have all of the functionality on the website done, but I’m not a front-end guy so it doesn’t look amazing. I don’t have too many known issues, but I’m sure we will come across some when we put some miles on the system.

What I am looking for are people are might be interested in trying out the project and giving me feedback. I would love any and all feedback, suggestions, or bug reports. I am mainly going to track them on my subreddit, since it works well for that kind of discussion.

The only thing I ask is to not broadcast this plugin too widely right now (beyond this forum). I don’t have any idea what to expect in terms of usage on the service, so I want to keep the audience small to prevent overwhelming the servers. I also would like to get a little more refinement on the system before going broader. :blush:

All of that said, if you’re reading this and interested, check out this link! You can get everything up and running in about 2 minutes!
https://octoeverywhere.com/getstarted

Enjoy! And please remember to leave feedback over at:
https://www.reddit.com/r/OctoEverywhere/

1 Like

It might be a good idea to divulge what technologies are being used to make it "safe and secure". Is the project open source; some people may be interested in reviewing the code prior to giving up their email address to a stranger.

How does this differ from the ngrok tunnel plugin, astroprint, octoprint anywhere plugins?

Please don't take this the wrong way, I just believe people would be interested in knowing that information up front.

3 Likes

I got the following error when trying to install.

ERROR: Could not find a version that satisfies the requirement zlib (from octoeverywhere==0.1.0) (from versions: none)
ERROR: No matching distribution found for zlib (from octoeverywhere==0.1.0)
Error!
Could not parse output from pip, see plugin_pluginmanager_console.log for generated output

Here's my plugin_pluginmanager_console.log file

2020-08-05 20:37:30,240   /home/pi/oprint/bin/python2 -m pip --disable-pip-version-check install file:///tmp/tmpN4f6DK/OctoPrint-OctoEverywhere-master.zip --no-cache-dir
2020-08-05 20:37:32,690 > Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
2020-08-05 20:37:32,691 > Processing /tmp/tmpN4f6DK/OctoPrint-OctoEverywhere-master.zip
2020-08-05 20:37:34,523 > Requirement already satisfied: OctoPrint in /home/pi/oprint/lib/python2.7/site-packages (from octoeverywhere==0.1.0) (1.4.1)
2020-08-05 20:37:34,524 > Requirement already satisfied: websocket_client>=0.56.0 in /home/pi/oprint/lib/python2.7/site-packages (from octoeverywhere==0.1.0) (0.57.0)
2020-08-05 20:37:34,534 > Requirement already satisfied: requests>=2.24.0 in /home/pi/oprint/lib/python2.7/site-packages (from octoeverywhere==0.1.0) (2.24.0)
2020-08-05 20:37:36,202 > Collecting jsonpickle>=1.4.1
2020-08-05 20:37:36,203 > Downloading https://www.piwheels.org/simple/jsonpickle/jsonpickle-1.4.1-py2.py3-none-any.whl
2020-08-05 20:37:37,172 ! ERROR: Could not find a version that satisfies the requirement zlib (from octoeverywhere==0.1.0) (from versions: none)
2020-08-05 20:37:37,173 ! ERROR: No matching distribution found for zlib (from octoeverywhere==0.1.0)

@yaksha42 good catch! I just accidentally committed that error and was just fixing it now. Try it again and let me know if it works for you. This is one of my first projects using Python for the plugin (the service is C#), I'm a CPP developer in my day job. :slight_smile:

@jneilliii haha, that's totally fair. I totally failed to consider in my post that most of the readers here are very technical and would want to know the details. One of my major goals with the project was to make a very simple and easy to use system for anyone, so I tried to abstract away as much complexity as I could.

The plugin is open source (obviously) but the service code isn’t right now. I was considering opening it up in the future, but right now since it’s very alpha I didn’t want to. The basic architecture of the system is that the plugin opens a persistent WebSocket to the service that’s used to tunnel all of the HTTP activity across. Since the WebSocket is reaching out from your local network to the service, there is no need for port forwarding or to open local ports on your router at all. The service enforces all communication must be https, and thus the WebSocket connect securely to the service. Each plugin instance is identified by a 40 alpha numeric string that is cryptographically securely generated when it first starts.

The service is hosted in Azure, so beyond my service code I don’t have to worry about machine or other layers of security. When you make an account, I ask for only your email to identify you, I don’t want to know anything else about you.

After you setup your printer and attach it to your account, you can access it via a subdomain name of your choice. You can choose any name you wish because it only must be unique to your account. I use the combination of your logged in session cookie and the subdomain name to route your request to the correct printer plugin.

From all of that, the way it works is basically like an http tunnel. Any web request, websocket, or http request stream made to the subdomain will be bundled up, sent to the plugin, the plugin makes the request locally to OctoPrint, bundles up the response, sends it back to the service, and the service spits it back out as the response.

So you also asked how this compares to other remote services. The cool thing about my architecture that I described above is that your full OctoPrint web portal can be securely accessed from any browser anywhere. All of your plugins and such just work, since all http requests and websockets are supported.

Furthermore, the system also works in 3rd party apps, they can use a special subdomain that maps directly to your printer to hit the APIs. (the direct subdomain name is a long crypto secure id as well, I can’t use the subdomain name + cookie system because the 3rd party apps don’t know how to set the cookie).

If you have any more questions, I would be happy to answer them!

1 Like

It is always great to have more options to access your octoprint instance securely.

Since you are doing things fairly similar to the ngrok tunnel plugin, I am interested to see how you will handle webcams that are not using a reverse proxy so they can work via the same http tunnel you have set up for the OctoPrint instance itself. Will you be handling the webcam stream differently at all? It can be a lot of data per user.

@fieldOfView oh that's a cool plugin, I didn't know that existed. Yeah your correct, it's very similar to ngrok's system, but custom for only OctoPrint.

Your 100% right about the webcam and bandwidth. It fully works right now by proxying the http stream through the service. My hope is that I can support free and supporter accounts. Free accounts will have full access to everything, but limited somehow. The plan is to have the funds from the supporter accounts offset the cost of the free accounts.

But I need to look at the usage of the alpha users to understand what limitations I can put in place that protect the service, but still give the free user's enough power.

1 Like

Yeah, I mentioned NGROK before, which is why I asked, they seemed to be the same basic thing. But your last comment brings up another good point that should probably be disclosed prior to registration. What the different tiers of users are and the benefits of "supporter account" vs "free account". Since I haven't registered I'm sure I've just missed that detail in the website, but would be good to know up front.

Just installed it. Very clean. I like it. Thanks!

1 Like

Maybe you could use WebRTC to have P2P webcam connections instead of wasting bandwidth?

1 Like

I think that's what astroprint does using gstreamer on the pi side.

Yeah! I was considering that, but it would take more of a complex setup. It might be something I consider doing in the future. What that would involve is I would need to get WebRTC setup in the plugin and then I would have to have some modifications to the OctoPrint UI to try a WebRTC stream for the cam over the http call.

It also wouldn't work in apps, unless they add logic to support it. All of those reasons is why I was for now I went with this costly but universal approach. :slight_smile:

Thanks everyone for the feedback so far! Keep it coming if you discover anymore!