DISCLAIMER: This software is neither affiliated with nor endorsed by either Control4 or InfluxData.
The InfluxDB Data Logger driver allows you to log Control4 variable changes to an InfluxDB time-series database. Configure measurements, bind Control4 variables as fields or tags, and let the driver handle batched writes with automatic offline buffering and retry.
- Control4 OS 3.3.0 or later
- InfluxDB 3.x instance accessible from the Control4 controller over the network
- A valid InfluxDB API token with write permissions
- Log any Control4 variable to InfluxDB as a field or tag
- Define multiple measurements with independent write intervals
- Configurable timestamp precision (nanoseconds, microseconds, milliseconds, seconds)
- Automatic offline buffering with configurable capacity
- Exponential-backoff retry when the InfluxDB server is unreachable
- Extended outage notification event
- Connection status events and conditionals for programming
Driver installation and setup are similar to most other ip-based drivers. Below is an outline of the basic steps for your convenience.
- Download the latest
control4-influxdb.zipfrom Github. - Extract and
install
all
.c4zfiles. - Use the "Search" tab to find the "Influxdb" driver and add it to your
project.

- Configure the InfluxDB Settings with the connection
information for your InfluxDB instance. The
Driver Statuswill displayConnectedautomatically once the URL, API Token, and Database are set. - Create measurements using the Measurement Configuration properties and bind Control4 variables to them.
Additional tabs shown while in the System Design mode, next to the "Properties", "Actions", "Documentation", and "Lua" tabs.
The Settings tab contains three views:
Displays the current connection status and write metrics.
- Connection - shows the connection state, InfluxDB URL, and database name.
- Write Metrics - points buffered, written, dropped, and write errors.
Displays the driver properties in a grouped layout. See Driver Properties for details on each setting.
Configure measurements, schemas, and per-device readings.
- + Add Measurement - create a new measurement (the name becomes the InfluxDB table name)
- Measurement name - click to open the editor. The table shows configured fields, tags, reading count, and status at a glance.
- Delete - remove the measurement and all its readings
Click a measurement name in the list to open the editor. The editor lets you define the schema, configure write settings, and map device variables to each column.
- Back to Measurements - return to the list view
- Schema - define the InfluxDB columns. Add fields (numeric data like
level,temperature) and tags (string labels likedevice_name,room_name). Use the input boxes and Add buttons to create them. - Settings - Write Interval controls how often data is sent (use
Defaultto inherit the global interval). Dedup skips writes when values haven't changed. Enabled toggles data collection. - Readings - each reading represents one device's data mapped to this measurement's schema. Add one reading per device you want to log.
- Add Reading - enter a label and click to add a new reading
- Reading card - shows the reading label, + Device Tags shortcut
(auto-populates
device_nameandroom_namefrom the device ID), Enabled toggle, and Remove button - Mapping row - one row per schema column. Each row has:
- Name - the field or tag from the schema (blue = field, green = tag)
- Source -
Variable(from a device) orLiteral(a fixed value) - Device - searchable picker for the Control4 device (Variable only)
- Variable - the device variable to read (Variable only)
- Transform - optional Lua expression (see Transforms)
- Preview - live result evaluated on the controller
Transforms are standard Lua expressions. The raw value is available as value.
| Function | Description | Example |
|---|---|---|
device_name(value) |
Resolve device ID to its display name | 850 → Entry Door Lock |
room_name(value) |
Resolve device ID to its room name | 850 → 1-Car Garage |
map({key = val}) |
Map string values to numbers | map({normal = 100, warning = 30}) |
c2f(value) |
Celsius to Fahrenheit | 20 → 68 |
f2c(value) |
Fahrenheit to Celsius | 68 → 20 |
You can also use any Lua math expression:
value * 100- scale a valuemath.floor(value)- round downtonumber(value) or 0- ensure numeric
Note: Transform expressions use standard Lua syntax. Table constructors use
=not:(e.g.,map({normal = 100})notmap({"normal": 100})).
Enables or disables automatic driver updates from GitHub releases.
Sets the update channel for which releases are considered during automatic updates from GitHub releases.
Displays the current status of the driver.
Displays the current version of the driver.
Sets the logging level. Default is 3 - Info.
Sets the logging mode. Default is Off.
Full URL of the InfluxDB instance (e.g., http://influxdb.local:8086).
InfluxDB API authentication token. This field is masked in Composer Pro.
InfluxDB database (bucket) name to write into.
Timestamp precision for line protocol writes. Default is ms.
How often the driver flushes buffered data points to InfluxDB. Individual
measurements can override this value. Default is 1m.
Maximum number of data points to buffer when the InfluxDB server is unreachable.
Default is 10000.
Fires the Extended Outage event after the driver has been disconnected for
this duration. Default is 5m.
Displays the current number of data points in the offline buffer.
Trigger the driver to update from the latest release on GitHub, regardless of the current version.
Discards all data points in the offline buffer without writing them.
| Event | Description |
|---|---|
| Connected | Fires when the driver successfully connects to the InfluxDB server |
| Disconnected | Fires when the driver loses connectivity to the InfluxDB server |
| Write Error | Fires when a batch write returns a non-2xx response from InfluxDB |
| Buffer Full | Fires when the write buffer reaches the configured Max Buffer Size |
| Extended Outage | Fires when the driver has been disconnected longer than the Outage Notification Threshold |
This driver does not expose Control4 variables. It subscribes to variables from other drivers to log their values to InfluxDB.
| Conditional | Type | Description |
|---|---|---|
| INFLUXDB_CONNECTED | BOOL | True when the driver is connected to InfluxDB, False otherwise |
If you have any questions or issues integrating this driver with Control4, you can file an issue on GitHub:
https://github.com/finitelabs/control4-influxdb/issues/new
- Web UI for configuring measurement schemas, per-device readings, and transforms
- Initial Release





