/Paradrop

An Edge-computing platform based on Wi-Fi routers

Primary LanguagePythonApache License 2.0Apache-2.0

Paradrop

Documentation Status Coverage Status Build Status Snap Status Docker Image

Get it from the Snap Store

What is Paradrop?

Paradrop is a software platform that brings the cloud into the home by enabling apps to exist on Wi-Fi routers. The Wi-Fi router is the last always-on, always-connected, ubiquitous device in the home today. At Paradrop Labs, we believe that some (if not most) cloud or smart-hub services should actually exist on Wi-Fi routers.

Read our paper or visit our website to learn more!

What can I do with Paradrop?

Since Wi-Fi routers are the central nervous system for all Internet based services in the home, the possibilities are quite endless. We have implemented many example applications, you can see the source code here. We encourage you to test out Paradrop by cloning our repo and checking out our getting started page.

Get Started

Paradrop uses Docker containers to run edge computing services, but Paradrop itself can also run as a Docker container. This is a good option if you want to try out Paradrop's core functionality without using special hardware or changing your operating system.

Docker Container in Safe Mode

Run the following command if you only want to test the core edge computing functionality. This will allow you to install and remove chutes, experiment with the edge API and connect the node to the cloud controller. Since this command creates a container separated from the host network, Paradrop will not be able to manage the network interfaces, wireless networks, and firewall settings of the host operating system.

docker run --privileged --name paradrop --publish 8080:80 -v /var/run/docker.sock:/var/run/docker.sock paradrop/daemon

After the Paradrop daemon is running, you can access the admin panel with a web browser by going to http://localhost:8080. If prompted, enter the user name paradrop and no password. You can also use pdtools node commands such as the install-chute command. The following example assumes you are running it from a directory containing the source code for a chute, which means there should be a valid paradrop.yaml file in the directory.

pdtools node --target localhost:8080 install-chute

Docker Container with Host Network Access

Run the following command if you want to test all of Paradrop's functions. Giving the Paradrop container access to the host network stack will enable it to manage network interfaces, wireless networks, and firewall settings. By default, Paradrop will try to create a wireless access point using one of the machine's WiFi interfaces. Warning: because Paradrop will make potentially disruptive system configuration changes, we do not recommend running Paradrop using the following command on a workstation that you use for other purposes. Consider running it in a virtual machine instead.

docker run --privileged --name paradrop --net=host -v /var/run/docker.sock:/var/run/docker.sock paradrop/daemon

You can access the Paradrop node in the same way as described in the Safe Mode section above. However, the node is listening directly on the host port 80. That means you can access http://localhost or use pdtools node --target localhost.

Applications

Paradrop is just a platform for running edge computing applications, which we call chutes. Once you have a Paradrop node running, you may want to check out one or more of the following example chutes that can run on Paradrop.

  • captive-portal This chute creates a WiFi network that uses iptables rules to redirect users to a landing when they first connect to the network. It works nicely with CNA implementations on most popular devices.
  • Cells A multiplayer browser-based action game where players take control of a cell. The goal is to gain as much mass as possible by eating food and smaller cells and avoid being eaten. The code was developed by another team and adapted to run on Paradrop.
  • Drop64 Run a Nintendo 64 emulator in a browser window. This chute was created by using emscripten to compile mupen64plus to JavaScript.
  • go-hello-world Example chute that implements a web server in Go.
  • gradle-hello-world Example chute that implements a web server using Java and Gradle.
  • node-hello-world Example chute that implements a web server using Node.js.
  • ParentalControlStarterChute This chute creates a WiFi network that implements content filtering at the HTTP and DNS levels. This code has been used in tutorials, so it is intended to be a starting point rather than a complete application.
  • python-socket-example Example chute that implements a basic TCP server in Python along with example client code.
  • Security-Camera This chute works with wireless cameras to implement basic motion detection. The code has been used in tutorials, so it is more of a starting point than a complete application.
  • StickyBoard This project demonstrates using edge computing for localized content. Users who connect to the Paradrop node are able to post pictures on the "sticky board" that are only viewable by other people on the same network.
  • traffic-camera This chute demonstrates a computer vision task implemented at the edge. It uses an OpenCV cascade classifier to detect and count vehicles in video from a traffic camera.
  • WiFiSense This chute uses WiFi monitor mode to detect nearby devices and send periodic reports to a configurable server. Running this on multiple Paradrop nodes could be used to implement interesting behavior analytics.
  • wiki This project implements a simple wiki page. The code is from an open source project that was adapted to run on Paradrop.

Preparing a new release

  1. Merge changes into the master branch.
  2. Run ./pdbuild.sh release <version> to update version number and tag the release.
  3. Run ./pdbuild.sh build to build a new snap.
  4. Run ./pdbuild.sh image to build a new disk image.