Ask HN: Best way to input data to a RasPi, from browsers on the same LAN?
I was originally thinking of making a Python/Flask or PHP web app that can take form field inputs and then run a subprocess to run the command, with the inputted data as argument values.
Eg I can input "microsoft.com" into a form field (or passed in the URL like http://raspi/pingapp/microsoft.com), and the RasPi runs "ping microsoft.com > microsoft.txt" in Raspbian (not that exact command obviously, but it's the best way to explain it).
Ideally they'd then see the progress and output of the command in their browser, after submitting.
This won't have public access, so auth/security is not a concern. Pretend every user is 100% trusted, and data does not need to be cleaned or checked in any way.
I'm open to any language, tool, or framework. I just want it to be as light and reliable as possible.
Anyone got any ideas? Thanks.
15 comments
[ 113 ms ] story [ 1128 ms ] threadIf you want to have a preprocessing step, then you need an API to take the commands, process them, run them, and then return the output. If you want to stream the output, you should look into something like websockets. There are also libraries built specifically for streaming logs to the browser, e.g. [0]
But might I suggest a simpler approach? How about a JS terminal emulator that is SSHed into the raspberry pi? I've used a library called "wetty" [1] successfully in the past. It's a node server + JS terminal emulator (based on hterm, used in chromebooks). The node server SSH's into the target box on behalf of the client, and then forwards the tty over the link `client <-> server <-> ssh <-> target`. All you need to do is install the node server on the pi and have it SSH into localhost.
[0] https://github.com/mthenw/frontail
[1] https://github.com/krishnasrinivas/wetty
I haven't personally tried it on raspi yet since I don't have one, but I invite you to give this a try
If I understand correctly you should be able to run the arm7 static build directly
You can find the docs here at https://docs.dapt.in
There is a nice dashboard accessible over the web which you can completely protect after signing up on it. Daptin is completely standalone and can work offline (doesn't load any asset from internet as such, everything is packed in). You can reach me out via my github profile.
[1] https://github.com/daptin/daptin/releases/tag/v0.6.8
edit:
a little bit more details of how you would build what you asked
- create a subsite exposing html form
- use js to call daptin api
- daptin creates a sqlite db (unless configured otherwise)
- share subsite address with users
- take dump from admin dashboard
Daptin on the other hands manages your database, build REST/Graphql APIs which you can use from any page and provides automation using actions/outcomes.
it has a terminal you can remotely run anything.
https://github.com/h-c-c/IOT-LAMP
I set up a 'util' feed for system commands and have implemented a shutdown routine so far. I send my lamp commands with Google Assistant through IFTTT.
If you want to host it on the lan just play with IPtables to get your port through and host a little web server. Shouldn't be too complicated. Look in to gunicorn for a production capable flask server. I have used Monit to keep gunicorn alive as a second line of defense. You could use init instead if you prefer.
If this is over your head let me know and I can break it down to more detail.
https://github.com/dddomodossola/remi/blob/master/README.md