Skip to content
Innomesh Docs
Portal Since v3.6.0

Asset Automation Overview

Asset Automation lets Innomesh Portal administrators define policies that run asset actions automatically instead of responding to every fault or repeating the same configuration task by hand. A policy decides which assets it applies to, what actions to run on them, and what triggers the run. Innomesh handles the rest, cutting response times and freeing up support resources.

Policies table with Type, Asset, Conditions, Actions, Trigger Time, and Enabled columns across six rows
Every policy in one place. The optional Type column is switched on here, so all three policy types are visible together. The two Tesira property-based policies set the same action to opposite values in the same window, which is exactly the overlap described under Conflict Detection below.

Policies are managed under Administration > Automation > Policies.

📝 Note
Automation is part of the Administration area, so it is only available to roles with Portal administration access. See the RBAC Authorisation Guide.

What a Policy Defines

Every automation policy answers three questions:

  1. Which assets does it target? An asset profile, optionally narrowed by filters on room, template, zone, site, or user group.
  2. What should happen? One or more actions to run on each targeted asset, such as Set Volume, Reboot, or PoE Reboot.
  3. What starts it? A schedule, a matching Hotlist alert, or a device property that has drifted from its desired value.

Actions are only created for assets whose category, brand, and model match the asset profile selected in the policy.

Policy Types

Policy TypeTriggerBest ForAvailable From
Time-basedA daily or weekly schedule, or a maintenance windowConfiguration enforcement, pre-emptive reboots, end-of-day shutdownsv3.6.0
Alert-basedA Hotlist alert matching one or more conditionsSelf-healing: recovering offline devices and connectivity faultsv3.6.0
Property-basedA device property breaching a condition, checked hourlyCompliance and configuration management: firmware drift, wrong input, security settingsv3.6.1
📌 Since
Property-based policies, and the Hotlist compliance alerts they can raise, are available from v3.6.1.

Pick the type by what you know about the problem. If you know when something needs to happen, use time-based. If you are reacting to a fault Innomesh already detects, use alert-based. If you are enforcing a desired state and want to act only on the devices that have drifted from it, use property-based.

Each type has its own configuration guide:

Actions

Actions are the operations performed on each targeted asset. The available list changes with the selected asset profile, because it comes from the driver mapped to that profile. A Neat Bar Pro supports Set Language, Set Volume, Set Auto Update, and Reboot, while a Poly Studio X72 may only support Set Volume and Reboot.

Two actions do not run on the device itself, but on the infrastructure it is connected to:

  • PDU Reboot cycles the power outlet on a connected power distribution unit, rebooting the device.
  • PoE Reboot temporarily cuts power to the asset’s network port on a connected network switch, which also reboots the device.

Both rely on the asset’s PDU or network switch relationship being defined in the room configuration. See Asset PDU Association.

Actions are added and configured one at a time. Click Add Action, choose the action, then set whatever parameters it takes, such as the input to select or the volume level to apply.

Add Action dialog with the action dropdown open, showing a search field above the list of available actions
The action list is drawn from the driver mapped to the selected asset profile, so it differs per device

Within a policy, actions run in the order they are listed. Reorder them by drag and drop, and use the duplicate, edit, and delete controls on each row.

📌 Since
From v3.6.1, the action and parameter value dropdowns are searchable. Type to filter the list instead of scrolling it, which helps on drivers that expose a long list of actions or preset values.

A parameter value does not have to be fixed. It can hold an expression that resolves separately for each asset when the action runs, which is what makes fleet-wide configuration possible from one policy. Pointing every scheduling panel at its own room’s control page takes a single action:

https://ui.example.innomesh.io?roomId={% asset.room_id %}

See Appendix: Dynamic Action Values for the available references and how they behave.

Targeting Assets with Filters

Filters restrict which assets a policy applies to. Without filters, a policy applies to every asset matching the selected asset profile across all rooms.

FilterMatches on
Asset IDThe asset’s identifier
Asset NameThe asset’s display name
Asset HostnameThe asset’s hostname
Room NameThe name of the room the asset sits in
Template NameThe template the room was built from
Zone NameThe zone the room belongs to
SiteThe site the room belongs to
User GroupThe user group the room is assigned to
Filter type dropdown open on a policy form, listing all eight filter types
Each filter pairs a type with a value. Filters can be combined to narrow a policy from every matching asset down to a specific set of rooms.

Filters can be combined. For example, filter by room name and then narrow further by user group. To edit an applied filter, click it. To remove one, click its X button.

When a policy builds its target list, assets in a Parking Lot zone are excluded, so decommissioned or staged devices never pick up scheduled or compliance actions.

📝 Note
An asset that appears in more than one room is only actioned once per policy. Innomesh de-duplicates the target list on brand, model, category, and IP address before scheduling.

A filter value can be a regex pattern rather than literal text, which is how you match a set of rooms by naming convention. See Appendix: Regex Patterns.

Trigger Times

Every policy sets an Action Trigger Time that determines when its actions run. The options available depend on the policy type.

OptionAvailable ForBehaviour
CustomTime-basedRuns at a specific time on selected days of the week
Maintenance WindowAll three typesRuns during a pre-configured window, such as Weekday After Hours, Weekday Mornings, or Weekend Maintenance
ASAPAlert-based, Property-basedSchedules the action at the start of the next minute after the trigger is detected

Maintenance windows are defined once and reused across policies. A policy attached to a disabled maintenance window schedules nothing, which is a clean way to pause a set of policies without editing each one.

Timezone Handling

Three different timezones are in play, and it helps to keep them apart: the one you type a time in, the one an action runs in, and the one the schedule is displayed in.

Timezone used
A maintenance windowEach asset runs at the window’s clock time in its own room’s local zone, so a window set to 22:00 fires at 22:00 locally in every room it reaches.
A custom time on the policy formThe tenant’s timezone, not yours.
The Scheduled Actions pageYour own local timezone. A 10:00 PM action in a USA room shows as 2:00 PM when viewed from Australia.
⚠️ Warning
Custom times are interpreted in the tenant’s timezone. If the tenant is set to Brisbane and you are working from Perth, a time you enter as 8:00 PM is 8:00 PM Brisbane, which is 6:00 PM where you are sitting. Check the tenant timezone before assuming a policy fired at the wrong hour.

Conflict Detection at Save Time

When you save a policy, Innomesh checks whether it would fight with an existing policy. A conflict is reported when another policy targets the same asset profile, uses the same action with different parameters, and shares the same trigger time.

Conflicting policy detected dialog naming TSS-1070 Configuration Enforcement and its Set Brightness 80 action, with Back and Apply Anyway buttons
The warning names the conflicting policy and the actions whose parameters differ

The check runs across all three policy types, so a property-based policy can flag a conflict against a time-based one. Two choices are offered:

  • Back returns to the form without saving, so you can change the action, its parameters, or the trigger time.
  • Apply Anyway saves the policy regardless. Use this when the overlap is deliberate, such as an override during a configuration rollout, or when filters keep the two policies apart.

Only the first conflict found is shown. If several policies conflict, fix the one reported and save again to surface the next.

The pair above shows why it matters. One enforces Brightness ≠ 80 with Set Brightness: 80, the other Brightness ≠ 50 with Set Brightness: 50. Every evaluation, one of them sees a breach and corrects it, which puts the panel in breach of the other. It alternates between the two values indefinitely, and nothing ever errors. You are most likely to notice it as a device that will not hold a setting, or as the same pair of actions repeating against one asset in Action History.

⚠️ Warning
The check only compares policies that share a trigger time. Two policies that would fight this way but run at different times are saved without any warning.
📌 Since
Save-time conflict detection is available from v3.6.1.

Managing Policies

The Policies table lists every policy with its target asset profile, filters, conditions, actions, trigger time, and enabled state. Use the per-column filter and sort controls to find a policy, and the download button to export the list.

Several further columns are available from the Columns button and are hidden by default: Type, Comments, Created, Created By, Updated, and Updated By. Turn on Type when you want to see at a glance which policies are time-based, alert-based, and property-based.

  • Edit a policy by clicking its row. The policy type itself is read-only once a policy has been created.
  • Disable a policy by clearing its Enabled checkbox. A disabled policy stops scheduling new actions, and any actions it had already queued are removed.
  • Delete one or more policies by selecting their checkboxes and clicking Delete.

The Conditions column renders each condition as {property} {operator} {value}, for example HTTPS Enabled ≠ true or Web Page URL ≠ https://ui.example.innomesh.io. Multiple conditions are comma-separated, with a + N more chip when there are too many to fit the column. Time-based policies show At Trigger Time, since they have no conditions to meet.

📝 Note
Deleting or disabling a policy removes its pending actions, but does not undo actions that have already run. Devices stay in whatever state the last run left them.

To see what a policy has queued or already run, open Assets > Actions, which lists scheduled and completed actions from every policy alongside any a user triggered by hand. See Scheduled Actions and History.

Common Use Cases

Configuration enforcement. Ensure newly installed or replaced devices adopt your standard configuration without anyone visiting the room. Create a time-based policy that runs each morning before the work day, targeting the relevant asset profile with actions such as Set Language, Set Volume, Set Auto Update, and Reboot. An integrator can install a device and walk away, and by the next morning it is configured to standard. For large fleets a property-based policy is more efficient, because it only touches the devices that are actually non-compliant.

End-of-day shutdown. Create a time-based policy that sets all displays to the correct input and powers them off at the end of each working day. Target the display asset profile, add Set Input and Set Power actions, and schedule it after business hours.

Self-healing offline devices. Create an alert-based policy targeting touch panels or other network-connected devices, matching Endpoint Reachability alerts, with a PoE Reboot action. When a device drops offline and raises a Hotlist alert, Innomesh cycles its network port to attempt recovery.

Compliance monitoring. Create a property-based policy with conditions describing the non-compliant state, such as TLS Version < 1.2, and set an alert severity without any actions. Innomesh raises a Hotlist alert for each non-compliant device and resolves it automatically once the device is brought into line.

Pre-emptive reboots. For devices known to become unstable over time, schedule a weekly reboot during a maintenance window. This is a time-based policy with a single Reboot action set to run on weekends.

Appendix: Action Staggering and Queuing

Understanding how Innomesh sequences actions helps predict when they will actually execute.

Within a Single Policy

Actions on the same asset are staggered by a minimum of 10 seconds, so each action has time to complete before the next begins. Some action types carry a longer built-in wait, defined by Innomesh per action:

Action typeApproximate wait before the next action
Standard actions (Set Volume, Set Language, Set Input)10 seconds
Reboot30 seconds
Firmware Update5 minutes

Actions on different assets within the same policy run simultaneously. Each asset has its own independent action timeline, so a policy covering 200 rooms does not take 200 times as long as a policy covering one.

Across Multiple Policies

If two policies target the same asset at the same trigger time, the second policy’s actions are queued after the first policy’s actions complete. This prevents two policies issuing overlapping commands to one device.

📝 Note
Actions triggered directly by a user run immediately, regardless of the asset’s current action queue.

Appendix: Dynamic Action Values

An action parameter can contain a JSONata expression that Innomesh resolves separately for each asset at the moment the action runs. The delimiters are the same {% %} used by dynamic hostnames in Room Manager, and that article is the place to learn the expression syntax itself. The difference here is the prefix: action parameters reference the asset being actioned, so expressions begin with asset..

ReferenceResolves to
{% asset.room_id %}The ID of the room the asset sits in
{% asset.hostname %}The asset’s hostname
{% asset.name %}The asset’s display name
{% asset.ip_address %}The asset’s IP address

Expressions mix freely with static text in one value:

https://ui.example.innomesh.io?roomId={% asset.room_id %}

Evaluated against a panel in room room-201, that resolves to https://ui.example.innomesh.io?roomId=room-201. A panel in another room gets its own room ID, with no second policy required.

How Expressions Are Displayed

Values containing an expression are shown in italics, and hovering one reveals the unresolved expression. Clicking into the field swaps the resolved value back to the expression so you can edit it, then resolves again when you click away. The Scheduled Actions and Action History pages render them the same way.

📝 Note
On those pages, column filters match the unresolved expression rather than the resolved value, so searching for a resolved hostname will not find these rows. Asset references also cannot be resolved when a user triggers an action against several assets at once by hand.

Property-based policies accept the same expressions in their condition values, which lets one condition check each asset against its own expected state. See Appendix: Dynamic Condition Values.

Appendix: Regex Patterns

Any value that would otherwise be matched as literal text can be a regex instead. Begin the pattern with ^ and end it with $ for the value to be treated as a regex. An unanchored value is matched as literal text.

Regex works in three places: filter values, alert-based policy conditions, and the text values of property-based policy conditions.

For example, to match all rooms containing “Zoom Room”:

^.*Zoom Room.*$

The pattern breaks down as follows:

CharacterMeaning
^Start of string
.*Any characters (zero or more)
Zoom RoomLiteral text to match
.*Any characters (zero or more)
$End of string

To match any alert description containing the word “reboot”, use ^.*reboot.*$.

📝 Note
Regex matching is case-sensitive, so the pattern must match the casing used in room names or reported values. Plain unanchored text is matched case-insensitively instead. For help building and testing patterns, try regex101.com.