Skip to content

# Controller Configuration

In Reactor, controllers are interfaces to other systems that publish entities in the Reactor environment. Reactor comes with a handful of controllers for various HA systems, so you can access the devices controlled there.

- VeraController — for Vera hubs;
- HassController — for Home Assistant;
- HubitatController — for Hubitat hubs;
- EzloController — for eZLO hubs;
- MQTTController — interface for devices that use MQTT to share state and receive commands;
- ZWaveJSController — interface for ZWaveJS servers (zwavejs-server or zwavejs2mqtt);
- NUTController — interface to Network UPS Tools (NUT) servers;
- DynamicGroupController — creates and manages groups of entities, with membership driven conditionally;
- OWMWeatherController — an interface to OpenWeatherMap to publish per-location entities for weather data;
- SystemController — a controller that gives you information about your system runtime environment (memory usage, CPU load, etc.);
- CameraController — a generic interface for IP cameras that makes them available in the Reactor dashboard.

Your configuration can contain any mix of these controllers, and you may have multiple of any of them (although practically speaking there should only be one SystemController).

Eventually, the author and others (hopefully) will write additional controllers to interface to other systems. As you can infer from the list above, a "controller" does not necessarily map to a home automation system, it's really a generic object that communicates with some kind of remote API/endpoint, and publishes what it learns as entities inside of Reactor.

## Basic Configuration

To configure a controller in your Reactor system, you need to add an entry in your `reactor.yaml` file in the `controllers` section. The following keys are known:

- `id` — The ID of the controller; this is a unique string (alphanumeric and underscore allowed only, no spaces or other punctuation) to identify a specific instance of a controller. It must be unique across all configured controllers (no other controller can be assigned the same ID).
- `implementation` — name of the controller class that provides the implementation of the controller (i.e. the code). The list above shows the names of the included controller classes. If you an additional class you want to use, you place the implementation file into the `local` subfolder of your Reactor installation and restart Reactor.
- `name` — a friendly name for your controller (this may contain spaces and punctuation);
- `enabled` — a (boolean) flag that lets you enable or disable a controller. To disable a controller without having to remove its entire configuration, simply set `enabled` to `false`. To re-enable it, set `enabled` to `true` or remove the `enabled` key altogether (`true` is the default).
- `config` — an object that contains the controller-specific configuration data.

Each controller has its own configuration rules and data requirements for the `config` section, so in order to configure a controller, you'll need to follow specific instructions for each. See the left navigation under Controller Configuration for the specific details for each listed controller.

## Other Controllers

Other controllers that you may find as add-ins will each have their own specific configuration instructions. Please refer to their accompanying documentation.

Some are available for download from the `extras` subdirectory of the download server.

Updated: 2022-Jun-01