Skip to content

Configuring a Real Deployment

ygina edited this page Jun 3, 2021 · 2 revisions

The Wiki contains the information for building a real smart home around the home cloud.

Installation

Follow the steps from the README to install code dependencies and build the binaries. From the dedicated computer, start the controller:

cd karl-controller && ./target/release/karl-controller --dashboard --autoconfirm &

For simplicity, on the same computer, start the host:

cd karl-host && sudo ./target/release/karl-host &

Note that there can be any number of hosts on any number of computers, as long as they are connected to the same local network and can communicate with the controller.

Building Karl Sensors

Karl sensor code must use the provided sensor SDK to publish data according to the home cloud's execution model. Thus existing IoT devices will not interoperate with Karl out-of-the-box. In this execution model, most of the functionality is executed in the home cloud, as opposed to the local device or cloud services. However, with the home cloud, actual hardware can be cheap and the device logic can be simple. To use data from real, physical devices (as opposed to emulated sensors), we recommend some of the following approaches:

  • Smart camera: modify custom firmware for a hackable device.
  • Voice assistant: run open-source code on a Raspberry Pi. Of course, replace API calls to cloud services with calls to the home cloud!

Router Configuration

(WARNING: This section is still in progress. Do NOT configure your router unless you know what you're doing, as there could be dangerous security implications.)

To take full advantage of the privacy benefits and functionality of the home cloud, you will need to configure your home network through your router. You can usually find this interface by typing an IP address such as 192.168.1.1 or 10.0.0.1 into a web browser from a connected computer. We recommend installing OpenWRT if possible, but most router consoles will allow you to do the same configurations from a different interface.

  1. Use DHCP to assign a static IP to the computer running the controller.
  2. Use VLANS to configure IoT devices such that they can only communicate with the controller on the Karl port.
  3. Assuming your ISP gives your router a public IP, port forward to the port of the web UI on your controller. You should configure something like an NGINX proxy in front of your web UI on the same device and enable authentication, since this is a public-facing interface! This exposes your internal network to the outside world, so do NOT do this unless you know what you're doing!
  4. Configure dynamic DNS with TLS to be able to remotely access the web UI.