Event Engine User Manual

Event Engine User Manual

Comprehensive reference for all triggers, conditions, actions, and settings.

Overview

Event Engine is an IFTTT-style automation engine that runs directly on your Axis camera as an ACAP application. It replaces and extends the built-in Axis event system with a flexible rule engine that reacts to camera events, schedules, MQTT messages, and webhooks, then responds with notifications, camera commands, logic operations, and more.

Each Rule is composed of three parts:

  • Triggers — what starts the rule (one or more, evaluated as OR or AND)
  • Conditions — optional checks that must pass before actions run
  • Actions — what happens when the rule fires (run in sequence)

Rules take effect immediately when saved — no restart required.

Installation

  1. Download the latest .eap file from Releases. Choose the file that matches your camera architecture:
    • aarch64 — newer Axis cameras (ARTPEC-8, most cameras from 2020+)
    • armv7hf — older Axis cameras (ARTPEC-6/7)
  2. In your camera's web interface, go to Apps.
  3. Click Add app and upload the .eap file.
  4. Once installed, start the app.
💡
If you are unsure which architecture your camera uses, check System → About in the camera web interface.

Accessing the UI

Open a browser and navigate to:

http://<camera-ip>/local/acap_event_engine/index.html

You will be prompted for camera credentials (admin-level account required). The UI has five sections accessible via the top tab bar:

  • Rules — create, manage, and monitor your automation rules
  • Event Log — per-rule firing history
  • Variables — named variables and counters
  • Settings — MQTT broker, SMTP, location, proxy, and backup
  • API Docs — interactive OpenAPI documentation

How Rules Work

A rule fires when any of its triggers activate (OR logic by default, switchable to AND). Before actions run, conditions are checked — by default all must evaluate to true (AND logic), but condition logic can be switched to OR so that any passing condition allows execution. Actions then execute in sequence from top to bottom.

Creating a Rule

  1. Click + New Rule on the Rules tab (or choose a starter from Templates).
  2. Enter a descriptive rule name.
  3. Click + Add Trigger and choose a trigger type from the dropdown.
  4. Optionally click + Add Condition to add guards that must pass.
  5. Click + Add Action and configure what should happen.
  6. Click Save Rule. The rule is active immediately.
💡
Use the Insert variable button in any text field to pick from available {{variable}} placeholders. Available variables change based on the trigger type selected.

Rule Settings

SettingDescription
EnabledToggle to enable or disable a rule without deleting it.
Trigger logicOR (default) — fires when any trigger activates. AND — fires only when all triggers have activated. In AND mode, an optional correlation window (seconds) requires all triggers to activate within that time frame; set to 0 for no time limit.
Condition logicAND (default) — all conditions must pass. OR — any single passing condition allows execution.
CooldownMinimum seconds between firings. Prevents alert floods when a trigger fires repeatedly.
Max ExecutionsLimit how many times the rule can fire within a period: per minute, per hour, per day, or lifetime total. The period counter auto-resets; the lifetime counter resets when the rule is saved.

Managing Rules

Each rule card shows the rule name, trigger and action badges, and a last-fired timestamp. Actions available from the rule card:

  • Edit — open the rule in the editor
  • Duplicate — clone the rule as a starting point
  • Enable / Disable — toggle without deleting
  • Fire Now — manually trigger the rule once for testing
  • Delete — permanently remove the rule

Use the search bar at the top of the Rules tab to filter rules by name. Use Export / Import to download or upload rules as JSON. Individual rules can also be exported from their action menu.

Triggers

A trigger defines what event starts a rule. You can add multiple triggers to a single rule; all triggers of the same type stack as OR conditions by default.

Device Event

Fires when any device event occurs — motion detection, thermometry, tampering, I/O state changes, analytics, air quality, and more. Events are loaded live from the device and presented in a searchable dropdown.

Options

OptionDescription
EventSelect from the live event catalog. Use the search box to filter by name or topic.
Value conditionOptionally filter on an event data field: boolean match (true/false), string value (substring contains), or numeric threshold (is above, is below, equals, is between).
Hold durationRequire the value condition to persist for N seconds before the rule fires. The timer resets if the condition breaks before N seconds elapse.
💡
Use the Device Event Query action after this trigger to fetch additional sensor data from the device and inject it as {{trigger.*}} variables for downstream actions.

Schedule

Fires on a time-based schedule. Four schedule modes are available:

ModeDescription
CronStandard 5-field cron expression (minute hour day month weekday). Use * for "every". Example: 0 8 * * 1-5 = every weekday at 08:00.
IntervalFire repeatedly every N seconds. Minimum: 10 seconds.
Daily timeFire at a specific time of day. Select the days of the week to apply.
Sunrise / SunsetFire at astronomical events: sunrise, sunset, solar noon, civil dawn, or civil dusk. Optional offset in minutes (positive = after, negative = before). Uses latitude/longitude from the Location settings (or a per-trigger override).

MQTT Message

Fires when an incoming MQTT message arrives on a matching topic. Requires the MQTT broker to be configured in Settings.

OptionDescription
TopicMQTT topic to subscribe to. Wildcards + (single level) and # (multi-level) are supported.
Payload filterOptional. Only fire if the payload contains this string.

Available variables injected by this trigger: {{trigger.topic}}, {{trigger.payload}}.

HTTP Webhook

Fires when an external system sends an HTTP POST request to the camera with a matching token. Each webhook trigger has its own unique secret token (up to 120 characters).

POST http://<camera-ip>/local/acap_event_engine/fire
Content-Type: application/json

{
  "token": "my-secret-token",
  "payload": { "source": "doorbell", "floor": 2 }
}

Values from payload are injected as {{trigger.KEY}} variables (e.g. {{trigger.source}}, {{trigger.floor}}).

Webhook requests require admin-level camera credentials (HTTP Basic Auth). Use HTTPS where available to protect the token and credentials in transit.

I/O Input

Fires on a digital input port state change.

OptionDescription
PortThe I/O port number to monitor.
EdgeRising (low→high), Falling (high→low), or Both.
Hold durationRequire the state to persist for N seconds before firing.

Counter Threshold

Fires when a named counter value crosses a configured threshold. Useful for "fire after 10 motion events" type logic in combination with the Increment Counter action.

OptionDescription
Counter nameThe name of the counter to watch.
OperatorComparison: >, >=, <, <=, or =.
ValueThe numeric threshold value.

Rule Chain

Fires when another named rule executes. Use this to build multi-step workflows where one rule triggers another.

OptionDescription
Rule nameThe name of the rule whose execution triggers this one.

AOA Scenario

Fires when an Axis Object Analytics scenario generates an event. Requires the AOA application to be installed and configured on the camera.

OptionDescription
ScenarioSelect from the list of configured AOA scenarios.
Object class filterOptionally limit to a specific class: Human, Car, Truck, Bus, Bike, Other Vehicle, or Any.

Variables injected: {{trigger.scenario_id}}, {{trigger.object_class}}.

Conditions

Conditions act as guards. By default (AND logic), all conditions must evaluate to true before actions run. With OR logic (configurable in Rule Settings), any single passing condition is sufficient. If no conditions pass, the rule silently does nothing for that firing.

Time Window

Only allow the rule to fire between two times of day.

OptionDescription
Start timeThe earliest time (HH:MM) in the allowed window.
End timeThe latest time (HH:MM) in the allowed window. If end < start, the window wraps midnight.
DaysOptional. Select which days of the week the window applies. If left empty, applies every day.

I/O State

Check the current state of a digital I/O port before proceeding.

OptionDescription
PortThe I/O port number to check.
Expected stateHigh or Low.

Counter Compare

Compare a named counter value against a threshold.

OptionDescription
Counter nameName of the counter to read.
Operator>, >=, <, <=, or =
ThresholdNumeric value to compare against.

Variable Compare

Compare a named variable against a string value.

OptionDescription
Variable nameName of the variable to check. Use system.armed for the arm/disarm pattern (see Arm / Disarm).
Operatorequals or not equals.
ValueString to compare against.

HTTP Check

Make an HTTP request and pass the condition only if the response matches expectations.

OptionDescription
URLThe endpoint to check. Supports {{variable}} substitution.
Expected HTTP StatusThe status code the response must return (e.g. 200).
Expected Body ContainsOptional substring that must appear in the response body.
JSON PathOptional dot-notation path into a JSON response to extract a value (e.g. data.temperature).
JSON Expected ValueThe value the extracted JSON field must equal for the condition to pass.
Allow insecureSkip TLS certificate verification for self-signed certificates.

AOA Occupancy

Poll Axis Object Analytics occupancy for a scenario and pass only if the count satisfies a configured threshold.

OptionDescription
ScenarioThe AOA scenario to poll.
Object classWhich class to count: Human, Car, Truck, Bus, Bike, Other Vehicle, or All (total).
Operator>, >=, <, <=, or =
CountNumeric occupancy threshold.

Day / Night

Pass only during daytime (after sunrise) or nighttime (after sunset). Uses the sunrise/sunset engine with the latitude/longitude configured in Location settings.

OptionDescription
PeriodDay or Night.
Lat/Lon overrideOptional per-condition coordinates, overriding the global Location setting.

The rule editor shows today's computed sunrise and sunset times for the configured location.

Device Event State

Check the current state of any device event by polling the device’s event instances.

OptionDescription
Topic substringFilter event instances whose topic contains this string.
Data keyThe event data key to inspect (e.g. active).
Expected valueThe value the data key must equal (e.g. true).

Actions

Actions run in sequence from top to bottom when a rule fires and all conditions pass. You can drag action rows to reorder them. All text fields support {{variable}} substitution — see Dynamic Variables.

HTTP Request

Send an HTTP request to any URL.

OptionDescription
MethodGET, POST, PUT, or DELETE.
URLTarget URL. Supports {{variable}} substitution.
Username / PasswordOptional HTTP Basic Auth credentials.
HeadersOptional key/value pairs (e.g. Authorization: Bearer token).
BodyRequest body (POST/PUT). Template substitution supported.
Attach snapshotFetch a JPEG from the camera and make it available as {{trigger.snapshot_base64}} in subsequent actions and in this action's body.
Allow insecureSkip TLS certificate verification for self-signed certificates.
Fallback actionExecute an alternate action when the request fails (non-2xx or network error): log a syslog message, publish to MQTT, or send a secondary HTTP GET request.

MQTT Publish

Publish a message to an MQTT topic. Requires the MQTT broker to be configured in Settings.

OptionDescription
TopicMQTT topic to publish to. Template substitution supported.
PayloadMessage payload. Template substitution supported.
QoSQuality of service: 0 (at most once) or 1 (at least once).
RetainSet the MQTT retain flag so the broker keeps the last message for new subscribers.

Slack

Send a message to a Slack channel via an incoming webhook.

OptionDescription
Webhook URLThe Slack incoming webhook URL.
MessageMessage text. Template substitution supported. Slack markdown is allowed.
Channel overrideOptional. Override the default channel configured in the webhook.
Username overrideOptional. Override the display name.
Attach snapshotCapture and include a camera snapshot in the Slack message.

Teams

Send an Adaptive Card to Microsoft Teams via a Power Automate / Workflows webhook.

OptionDescription
Webhook URLThe Teams channel incoming webhook URL.
TitleOptional card title. Template substitution supported.
MessageCard body text. Template substitution supported.
Theme colourOptional hex colour for the card accent bar (e.g. #FF0000).
Attach snapshotCapture and include a camera snapshot in the Teams card.

Telegram

Send a message via the Telegram Bot API.

OptionDescription
Bot tokenYour Telegram bot's API token (from @BotFather).
Chat IDThe target chat, group, or channel ID.
MessageMessage text. Template substitution supported. Use MarkdownV2 or HTML parse mode.
Parse modeMarkdown, HTML, or plain text.
Disable link previewSuppress Telegram's URL preview cards.
Attach snapshotCapture a camera snapshot and send it as a photo in the Telegram message.

Email (SMTP)

Send an email. The SMTP server, credentials, and from address are configured once in Settings → Email (SMTP); each action only needs the recipient, subject, and body.

OptionDescription
ToRecipient email address (comma-separated for multiple recipients).
SubjectEmail subject. Template substitution supported.
BodyEmail body. Template substitution supported.
Attach snapshotCapture and attach a camera snapshot JPEG to the email.

Snapshot Upload

Capture a JPEG from the camera and upload it to a URL.

OptionDescription
URLTarget URL. Template substitution supported.
MethodPOST or PUT.
ChannelVideo channel to capture from.
Username / PasswordOptional Basic Auth credentials for the target server.
Extra headersOptional custom HTTP headers for the upload request.

FTP Upload

Capture a JPEG and upload it to an FTP or SFTP server.

OptionDescription
URLFull FTP URL including path. Template-aware (e.g. ftp://server/{{camera.serial}}/{{date}}_{{time}}.jpg). Directories are created automatically.
Username / PasswordFTP credentials.

Send Syslog

Write a message to the camera's system log (visible in the camera's system log view).

OptionDescription
MessageSyslog message text. Template substitution supported.
LevelLog severity: info, warning, or error.

Recording

Start or stop a recording on the camera.

OptionDescription
OperationStart or Stop.
Stream profileRecording profile to use (configured in the camera's recording settings).
Max durationMaximum recording length in seconds. Recording stops automatically after this limit.
While activeAutomatically stop the recording when the triggering condition clears. See While-Active Actions.

Overlay Text

Write text on the live video stream.

OptionDescription
ChannelVideo channel number.
TextOverlay text. Template substitution supported.
PositionWhere to place the text: top-left, top-right, bottom-left, bottom-right, top, or bottom.
Text colourOverlay colour: white, black, red, transparent, or semi-transparent.
DurationSeconds before the overlay is cleared automatically. Set to 0 and enable While active to clear when the triggering condition ends.
While activeAutomatically clear the overlay when the triggering condition clears. See While-Active Actions.

PTZ Preset

Move the camera to a named preset position. Available presets are loaded from the camera.

OptionDescription
ChannelPTZ channel number.
PresetPreset name (selected from a dropdown populated by the camera).

Guard Tour

Start or stop a configured PTZ guard tour. Available tours are loaded from the camera and shown in a dropdown.

OptionDescription
OperationStart or Stop.
TourGuard tour to control (selected from a dropdown).

IR Cut Filter

Force the IR cut filter state.

OptionDescription
ModeDay (IR cut on), Night (IR cut off), or Auto (restore automatic switching).
ChannelVideo channel to apply the filter change to.

Privacy Mask

Enable or disable a named privacy mask.

OptionDescription
Mask nameName of the privacy mask to control (loaded from the camera).
ActionEnable or Disable.
ChannelVideo channel to apply the mask change to.

Wiper

Trigger the windshield wiper on cameras that support it (e.g. outdoor housings).

OptionDescription
OperationStart or Stop.
Device IDWhich wiper device to control (for multi-sensor cameras).
DurationOptional. Seconds to run the wiper (for cameras with variable-duration wipers).

Light Control

Control an Axis illuminator (white light or IR LED).

OptionDescription
OperationOn, Off, or Auto (restore automatic control).
Light IDWhich illuminator to control (loaded from the camera).
IntensityOptional brightness percentage (0–100) when turning on.

Audio Clip

Play a named media clip on the camera. Available clips are loaded from the camera.

OptionDescription
ClipSelect from audio clips installed on the camera.

Siren / Light

Start or stop a named siren/LED profile on devices that support it (e.g. Axis D6310).

OptionDescription
OperationStart or Stop.
ProfileSiren/light profile name (from a dropdown populated by the camera).
While activeAutomatically stop the siren/light when the triggering condition clears. See While-Active Actions.

I/O Output

Set a digital output port high or low.

OptionDescription
PortOutput port number.
StateHigh or Low.
DurationOptional. Automatically reset to the opposite state after N seconds.
While activeAutomatically reset the output when the triggering condition clears. See While-Active Actions.

Notification Digest

Buffer events and send a batched summary on a configurable interval. Useful for sending hourly summaries instead of individual alerts.

OptionDescription
Buffer nameUnique identifier for this digest queue. Multiple rules can contribute to the same digest.
Flush intervalSeconds between sends. Minimum: 30 seconds.
Entry templateTemplate for each buffered event line. Template substitution supported.
DeliveryWhere to send the batched summary: Slack, Teams, Telegram, Email, or MQTT.

Delay

Pause the action sequence for N seconds before continuing to the next action. Use this to create timed sequences within a rule.

Set Variable

Create or update a named persistent variable stored on the camera. Variables survive restarts.

OptionDescription
Variable nameName of the variable to set. Use any alphanumeric name. Use system.armed for arm/disarm.
ValueNew value. Template substitution supported.

Increment Counter

Modify a named persistent counter.

OptionDescription
Counter nameName of the counter to modify. Auto-created on first use.
OperationIncrement (add), Decrement (subtract), Reset (zero the counter), or Set (assign an exact value).
Delta / ValueAmount to add/subtract (for increment/decrement), or the exact value (for set). Default: 1.

Run Rule

Immediately trigger another named rule. Useful for shared action sequences or conditional branching via variable state.

Fire ACAP Event

Fire an ACAP event visible to other Axis applications and built-in action rules on the device.

OptionDescription
EventChoose a preset event (RuleFired, RuleError, EngineReady) or define a Custom event.
Event ID(Custom only) Unique event identifier string.
Type(Custom only) Stateless (one-shot) or Stateful (has active/inactive state).
State(Stateful only) High (active) or Low (inactive).

Device Event Query

Fetch the latest cached data from any device event and inject it as {{trigger.FIELD}} variables for subsequent actions. Used for polling sensor values on a schedule trigger.

OptionDescription
Topic filterPartial topic string to identify the event to query (e.g. AirQuality).

Set Device Parameter

Update any camera parameter via param.cgi.

Expert users only. Incorrect parameter values can disrupt camera operation. Tab out of the parameter field to look up the current value, allowed values, type, and range directly from the camera before applying.
OptionDescription
ParameterFull parameter name (e.g. root.ImageSource.I0.Sensor.Brightness). Tab out of the field to look up the live value.
ValueNew value.

ACAP Control

Start, stop, or restart another installed ACAP application on the camera.

OptionDescription
ApplicationSelect from installed ACAP apps (loaded from the camera).
OperationStart, Stop, or Restart.

InfluxDB Write

Write a data point to InfluxDB using line protocol.

OptionDescription
VersionInfluxDB v1 or v2.
URLInfluxDB server URL.
Database / Bucketv1: database name. v2: bucket name.
Authv1: username/password. v2: API token.
MeasurementLine protocol measurement name. Template substitution supported.
TagsOptional tag key=value pairs. Template substitution supported.
FieldsAt least one field key=value pair. Template substitution supported.

AOA Get Counts

Fetch accumulated crossline counts from an Axis Object Analytics scenario and inject them as template variables for use in subsequent actions.

VariableDescription
{{aoa_total}}Total crossings
{{aoa_human}}Human crossings
{{aoa_car}}Car crossings
{{aoa_truck}}Truck crossings
{{aoa_bus}}Bus crossings
{{aoa_bike}}Bike crossings
{{aoa_otherVehicle}}Other vehicle crossings
{{aoa_timestamp}}Timestamp of latest count

Enable Reset after fetch to zero the counters after reading them.


While-Active Actions

Several actions support a While active mode: Recording, Overlay Text, Siren / Light, and I/O Output. When enabled, the action automatically reverses itself (stops recording, clears overlay, stops siren, resets output) when the triggering condition clears.

This is useful for scenarios like "record while motion is detected" or "activate siren while I/O port 1 is high". The rule must use a stateful trigger (e.g. a Device Event that has active/inactive states) for while-active to function correctly.

💡
While-active works best with a single stateful trigger. Combine with the AND trigger logic when using multiple triggers.

Rule Templates

Click the Templates button on the Rules tab to browse a library of pre-built starter rules. Templates provide a ready-made configuration that you can customise after applying. Available templates include:

  • Device Event → HTTP Webhook
  • Device Event → Email Alert
  • Device Event → Slack / Teams / Telegram
  • Daily Schedule → Syslog
  • MQTT Message → Set Variable
  • I/O Input → I/O Output
  • I/O Input → Siren + MQTT
  • Hourly Snapshot → FTP Upload
  • Manual → PTZ + Overlay
  • Motion → Recording (Business Hours)
  • Arm / Disarm System via MQTT (3 rules)
  • AOA Object Detection → MQTT
  • Schedule → InfluxDB Sensor Write
  • Device Event → Notification Digest
  • Sunrise / Sunset → IR Cut Filter
  • Counter Threshold → Slack Alert

Applying a template opens the rule editor pre-filled with the template's triggers, conditions, and actions. Modify any field before saving.


Dynamic Variables

Most text fields in actions support {{variable}} substitution. Click Insert variable in the rule editor to browse available values for the current trigger type.

Global variables (always available)

VariableValue
{{timestamp}}ISO 8601 UTC timestamp at the moment of firing
{{date}}YYYY-MM-DD
{{time}}HH:MM:SS (24-hour)
{{camera.serial}}Camera serial number
{{camera.model}}Camera model name
{{camera.ip}}Camera IP address
{{trigger_json}}Full trigger event data as a compact JSON string

Trigger variables (set by the fired trigger)

VariableSource
{{trigger.KEY}}Individual field from the trigger event (e.g. {{trigger.CO2}} from an air quality event)
{{trigger.topic}}MQTT topic (MQTT Message trigger)
{{trigger.payload}}MQTT payload (MQTT Message trigger)
{{trigger.scenario_id}}AOA scenario ID (AOA Scenario trigger)
{{trigger.object_class}}Detected object class (AOA Scenario trigger)
{{trigger.snapshot_base64}}Base64-encoded JPEG (when Attach snapshot is enabled on HTTP Request)

Named variables and counters

VariableValue
{{var.NAME}}Value of a named variable (set with Set Variable action)
{{counter.NAME}}Current value of a named counter

Example — MQTT payload with sensor data:

Camera {{camera.serial}} at {{timestamp}}: {{trigger_json}}

Arm / Disarm Pattern

Use the Variable Compare condition with a variable named system.armed (value "true" or "false") to make rules only fire when the system is armed.

Example rules to implement this (available in the Templates picker):

  1. Arm System via MQTT — subscribe to cameras/<serial>/arm, set system.armed = "true"
  2. Disarm System via MQTT — same topic, set system.armed = "false"
  3. Motion Alert When Armed — motion trigger + Variable Compare condition: system.armed = "true"

You can also arm/disarm via an HTTP webhook, a schedule, an I/O input, or any other trigger.

MQTT Setup

Configure the MQTT broker in Settings → MQTT Broker. The built-in client supports MQTT 3.1.1.

OptionDescription
Broker HostHostname or IP of the MQTT broker (e.g. 192.168.1.100 or broker.hivemq.com).
PortDefault 1883; use 8883 for TLS.
Client IDUnique identifier sent to the broker. Default: acap_event_engine.
Username / PasswordOptional broker credentials. Password is stored separately and never returned via GET.
KeepaliveMQTT keepalive interval in seconds. Default: 60.
Use TLSEnable TLS/SSL encryption for secure broker connections.
EnabledToggle MQTT on or off without clearing settings.

Features:

  • QoS 0 and QoS 1 publish
  • Wildcard topic subscriptions (+ and #)
  • Automatic reconnect with exponential backoff
  • TLS/SSL encryption

The Settings tab shows a live connection status indicator next to "MQTT BROKER".

Application Settings

Location

Set the camera's latitude and longitude (decimal degrees). This is required for Sunrise/Sunset triggers and the Day/Night condition to work correctly.

  • North latitude is positive (e.g. 59.3293 for Stockholm)
  • South latitude is negative (e.g. -33.8688 for Sydney)
  • East longitude is positive (e.g. 18.0686)
  • West longitude is negative (e.g. -73.9442 for New York)

Email (SMTP)

Configure once and reuse across all email actions.

OptionDescription
SMTP ServerUse host:port format (e.g. smtp.gmail.com:587).
Use TLSEnable STARTTLS. Recommended for port 587.
Username / PasswordSMTP credentials.
From AddressSender address used in all outbound emails.

SOCKS5 Proxy

Route all outbound connections (HTTP actions, HTTP conditions, and MQTT) through a SOCKS5 proxy. Leave blank to connect directly.

Set to localhost:1055 to tunnel all traffic over Axis Tailscale ACAP.

Device Capabilities

The Settings tab automatically detects and displays your camera's capabilities:

  • Status cards — total rules, enabled rules, events today
  • Device info — model, serial number, IP address, firmware version, engine version
  • PTZ — number of presets per channel
  • Audio clips — available media clips
  • Siren / Light — available profiles
  • Privacy masks — configured masks
  • Guard tours — configured tours
  • Object Analytics (AOA) — installed scenarios
  • Installed ACAPs — other ACAP applications on the camera

These capabilities are used to populate dropdowns in the rule editor (PTZ presets, audio clips, siren profiles, guard tours, AOA scenarios, ACAP apps, privacy masks). If a capability is not available on your camera, the corresponding action types will show an empty dropdown.

Event Log

The Event Log tab shows the most recent rule firings. Each entry includes:

  • Time — exact timestamp of firing
  • Rule — which rule fired
  • Result — success or error code
  • Details — additional context (trigger data, error message)

Use the rule filter dropdown to scope the log to a single rule. Click Refresh to reload. Click Clear to empty the log.

Variables Tab

The Variables tab shows all named variables and counters currently stored on the camera. You can:

  • View the current value of any variable or counter
  • Edit a variable value directly
  • Delete a variable or counter

Variables are persistent — they survive ACAP restarts and in-place updates.

Backup & Restore

Use the Settings → Backup & Restore section to export your configuration before performing updates or camera replacements.

  • Export Rules — download all rules as a JSON file
  • Import Rules — upload a previously exported rules JSON
  • Export Settings — download MQTT, SMTP, location, and proxy settings
  • Import Settings — restore a settings file
Export your rules and settings before uninstalling. A full uninstall clears all stored data. In-place updates (reinstall over existing) preserve data.

Rules can also be exported individually using Export from the rule card's action menu, producing a portable single-rule JSON file that can be shared and imported on any camera.

REST API

All endpoints are under /local/acap_event_engine/ and require HTTP Basic Auth with admin credentials.

MethodPathDescription
GET / POST / DELETE/rulesRule CRUD. POST without id creates; POST with ?id= updates. GET with ?id=<id>&action=export downloads a rule as JSON.
POST/fireFire a rule manually or via webhook token.
GET/triggersAvailable trigger types and their schemas.
GET/actionsAvailable action types and their schemas.
GET / POST / DELETE/variablesNamed variables and counters.
GET/eventsEvent log (most recent rule firings).
GET/engineEngine status, MQTT status, device info.
GET/aoaList configured AOA scenarios (id, name, type).
GET / POST/settingsEngine, MQTT, SMTP, and device configuration.

For interactive documentation, open API Docs.

Event Engine — MIT License