Appearance
Rule metrics
Every quantity a rule condition can test, what it means, its unit, and which operators it accepts.
Read out of the platform
This page is generated from the code that runs your instance, so it cannot drift from what the platform actually does.
A rule is when this metric compares like this to that value, do these actions. This page is the left-hand side of that sentence. You pick it from a dropdown in the rule builder (/admin/manage/rule/create), so you never have to type these names — but the AI rule builder and the API do take them literally, and the exact spelling matters there.
Two things decide whether a rule can fire at all: whether the metric has a value for the scope you chose, and how fresh that value is. Both are in the tables below.
Computed live, when the rule runs
Rules are evaluated every minute. These metrics are worked out at that moment from the live position, occupancy or utilisation services, so what a rule sees is what the Right Now page would show you — there is no rollup delay.
| Metric | What it means | Unit | Operators |
|---|---|---|---|
anomaly_event | Device anomaly detected — Anomaly detection flagged a device (an event, real-time only). value is the type: any, silent, frequency_drop, frequency_spike, rssi_drop, battery_drain, config. Scope a device, label, entity or a place. | — | equal, not_equal, contains |
energy_today_kwh | Energy Used Today — Net energy since local midnight, in kWh, over the meters in scope: the top-level consumption meters (a sub-meter whose parent meter is also in scope is not added again) minus the meters marked as generating power. Negative when the site exported more than it used. A scope of only generating meters gives what they generated, as a positive number. The delta, not the meter reading - the meter only ever rises, so a rule on it would fire once and then for ever. Resets daily, which is what makes a threshold mean something. Use for "this floor has already used more today than it usually does". | kWh | equal, not_equal, less_than, greater_than, between |
entity_field | Label field (person / asset) — A label field on a person or asset (the Label Fields button on the Entity page). field = the field key. A date field is read as days from today, negative once passed ("due within 7 days" = less_than 8). Entity or label (tag) scope; trigger_type "scheduled" (1440 = daily). | — | equal, not_equal, less_than, greater_than, between, contains |
fall_detected | Fall / man-down detected — A worn tag fell or has stopped moving (an event: value "fall" or "man_down"). Real-time trigger; scope to one device, a label or a person / asset. Quiet in rest places. Needs Fall detection on under System > Config. | — | equal, not_equal, contains |
footfall_today | Footfall Today (people so far) — People heard in the place today so far (since local midnight; tags people carry, fixed sensors left out), each once however often they came back - the Footfall report's distinct daily count. Location, venue or zone scope; trigger_type must be "scheduled" (60 is plenty: it moves with the hourly roll-up, so it can be up to about an hour behind). Not computed on a day the place's gateways sent nothing (an outage is not an empty building). Use for "tell me when more than 200 people have come in today": footfall_today greater_than 200. | pax | greater_than, less_than, between |
footfall_vs_usual | Footfall vs Usual (% of a normal day so far) — Today so far as a percent of a normal day for this weekday up to the same hour: the hour-by-hour presence (people heard in each complete hour, added up) today, against the average of the same hours on the last 4 same weekdays. 100 = a normal day, 150 = half as busy again, 50 = half as busy. Compares hour-by-hour presence, not distinct people: someone there for three hours counts three times on both sides. Location, venue or zone scope; trigger_type must be "scheduled". Not computed before the first complete hour of the day, on a day with no or too little data, or when the past weekdays had no data or nobody. Use for "this floor is unusually busy/quiet today": footfall_vs_usual greater_than 150, or less_than 50. | % | greater_than, less_than, between |
gateway_status | Gateway status — A gateway stopped (value "offline") or started again ("online") reporting; fires once per change. Scope a gateway for one, or a venue or location for any gateway in it. Works scheduled too (the current status). | — | equal, not_equal, contains |
geofence_event | Geofence entered / left (GPS) — A tag with GPS (a tracker, or one an Omaya Scout phone places) entered or left a geofence (an event: value "entered" or "left"). Scope the rule to the geofence for any tracker, or to one device for any geofence. | — | equal, not_equal, contains |
home_zone_status | Home Zone Status — Whether a tag is in its assigned home zone. | — | equal, not_equal, contains |
incident_event | Security Watch incident — Security Watch opened an incident in a place: value "opened" (event, real-time only). Location, venue or zone scope. | — | equal |
most_inside_pct_capacity | Most Inside Today (% of capacity) — The most people inside at once today, from the door counters (entries minus exits, hour by hour since local midnight), as a percent of the place's capacity (a venue's own capacity or its zones' sum; a zone's capacity; a location only when every venue in it has one). Location, venue or zone scope; trigger_type must be "scheduled". Only for places with a door counter and a capacity. Use for "we got close to capacity today": most_inside_pct_capacity greater_than 90. | % | greater_than, less_than, between |
outside_min | Time outside (GPS) — Minutes a person or asset has been outside (GPS took over from the gateways), all their tags together. Device, label (tag) or entity scope; checked every minute, fires once each time they are out that long. Use for "tell me when anyone in Field team has been out more than 2 hours": scope_type tag, outside_min greater_than 120. | min | greater_than |
people_count | People Count — How many people are in the zone, venue or location right now (fused radar, counting-sensor and tag count, refreshed every minute), not a running total. Use for occupancy: people_count greater_than 0 means someone is there. | pax | equal, not_equal, less_than, greater_than, between |
place_event | Entered / left a place — A tag was confirmed in a new room: value "entered" or "left" (an event; real-time only). On a zone, venue or location scope the place is the scope itself. On a device, label (tag) or entity scope, set the condition's field to the place as "zone:" + the zone uid, "venue:" + the venue uid or "location:" + the location uid. Use for "tell me when any Tools item leaves Level 5": scope_type tag with the Tools label uid, place_event equal left, field "venue:" + the Level 5 venue uid. A tag that goes silent has not left; use device_status offline for that. | — | equal |
power_w | Power Draw Now — Net electrical draw right now in watts over the meters in scope: the top-level consumption meters (a sub-meter whose parent meter is also in scope is not added again) minus the meters marked as generating power (solar, a generator). Negative when the site is exporting. A scope of only generating meters gives their output as a positive number. Only counts a reading from the last 15 minutes, so a meter that has stopped reporting has no value rather than zero and "below X" never fires on a dead meter. | W | equal, not_equal, less_than, greater_than, between |
quiet_outside_min | Not heard while outside (GPS) — Minutes with nothing heard from a person or asset (no GPS fix, no gateway) when the last thing heard put them outside: a lone-worker check. Not when they were last at home. Device, label (tag) or entity scope; fires once per silence. Use: quiet_outside_min greater_than 30. | min | greater_than |
radar_dwell | Area Occupied For (radar) — Minutes the zone has been continuously occupied according to the radar. Zone-scoped. Use for loitering: radar_dwell greater_than 10. | min | equal, not_equal, less_than, greater_than, between |
radar_people | People in Area (radar) — People a position radar sees inside the zone right now. Zone-scoped; the zone can be a room with a calibrated radar or a smaller area drawn inside it (a door area, a restricted corner). | pax | equal, not_equal, less_than, greater_than, between |
radar_vacant | Area Empty For (radar) — Minutes the zone has been continuously empty according to the radar. Zone-scoped. Use to switch things off after people leave: radar_vacant greater_than 9 with a home_assistant action. Operators are equal, not_equal, less_than, greater_than, between, contains; for "at least N" write greater_than N-1. | min | equal, not_equal, less_than, greater_than, between |
room_next_booking_min | Minutes Until Next Booking (meeting room) — Minutes until the room's next Meeting Room booking: 0 while one is running (a sensor-detected walk-in counts), 1440 when nothing is booked within a day. Zone-scoped; only rooms the Meeting Room app books. Pair with radar_vacant (or people_count equal 0) before switching a room off, so it is not cooled down and switched off minutes before a meeting: radar_vacant greater_than 9 AND room_next_booking_min greater_than 14 -> climate.turn_off. | min | equal, not_equal, less_than, greater_than, between |
sensor_field | Sensor reading (any field) — | — | equal, not_equal, less_than, greater_than, between, contains, becomes, changes |
speed_kmh | Speed (GPS) — Speed in km/h at the latest GPS fix in the last 10 minutes (the tracker's own figure, or worked out from its previous fix). Device, label (tag) or entity scope; fires once per stretch outside. Use for speeding: speed_kmh greater_than 90. | km/h | greater_than, between |
stopped_outside_min | Stopped outside a geofence (GPS) — Minutes a person or asset has been stopped in one spot that is not inside any geofence (0 while moving or inside a geofence). Never counts a person stopped at their home. Device, label (tag) or entity scope; fires once per stop. Use for an unplanned stop: stopped_outside_min greater_than 20. | min | greater_than |
visitor_event | Visitor event — | — | equal, not_equal, contains |
wifi_event | Wi-Fi sign-in (Kiwire) — A guest signed in to the Wi-Fi in a place: value "signed_in" (event, real-time only, from the Kiwire connector). Location, venue or zone scope; the Kiwire zone must be mapped to an Omaya zone. | — | equal |
work_order_event | Work order opened / resolved — A work order was "opened" or "resolved" in a place (event, real-time only). Location, venue or zone scope; a location also hears work orders tied to no room. | — | equal |
zone_density | Zone Density (pax / 100 sqft) — People per 100 square feet in a zone, so the threshold means the same thing in a small room and a big one. | pax/100ft² | equal, not_equal, less_than, greater_than, between |
zone_hours_at_capacity | Hours at Capacity, last 7 days — Operating hours in the last 7 days the zone was at or over its capacity. Zone-scoped; needs a capacity set on the zone. Use for "this room is too small": zone_hours_at_capacity greater_than 5. | h | equal, not_equal, less_than, greater_than, between |
zone_utilisation | Utilisation, last 7 days (% of operating hours occupied) — Share of the venue's operating hours the zone was occupied over the last 7 days, in percent (0-100), from the Space Utilisation report. Zone-scoped; only zones something counts people in get a value. Use for "tell me when a room is underused": zone_utilisation less_than 25. For a weekly note rather than a daily nag, set active_days to one day (e.g. ["mon"]) and action_every to 86400 - one day is the longest cooldown a rule allows. | % | equal, not_equal, less_than, greater_than, between |
Read from the report tables
These come from the rolled-up report tables. Packets are rolled up every five minutes, so a rule on one of these can lag real life by up to about that long. That is the right trade for "temperature above 30 for an hour" and the wrong one for "someone just walked into the server room" — for the second, use a live metric above.
| Metric | What it means | Unit | Operators |
|---|---|---|---|
battery_level | Battery Level — Remaining battery, percent. Low values mean a device needs attention. | % | equal, not_equal, less_than, greater_than, between |
button_pressed | Button Pressed — A panic or call button was pressed. | — | equal, not_equal, contains |
custom_field | Custom Field — A tenant-defined field. Avoid unless the admin names it. | — | equal, not_equal, less_than, greater_than |
device_status | Device Status — Whether a device is reporting. Compare with "online" or "offline". | — | equal, not_equal, contains |
distance | Distance — Distance in metres. | m | equal, not_equal, less_than, greater_than, between |
dwell_time | Dwell Time — How long a visit lasted, in minutes. | min | equal, not_equal, less_than, greater_than, between |
enter_count | Entry Count — Entries counted so far today at the scope; a running daily total, not a rate. | pax | equal, not_equal, less_than, greater_than, between |
exit_count | Exit Count — Exits counted so far today at the scope; a running daily total, not a rate. | pax | equal, not_equal, less_than, greater_than, between |
humidity | Humidity — Relative humidity, percent. | % | equal, not_equal, less_than, greater_than, between |
noise | Noise Level — Sound level in dBA. | dB | equal, not_equal, less_than, greater_than, between |
rssi | RSSI — Signal strength in dBm. Values are negative; -90 is weaker than -60. | dBm | equal, not_equal, less_than, greater_than, between |
temperature | Temperature — Temperature reading in °C. | °C | equal, not_equal, less_than, greater_than, between |
Metrics that compare to a word, not a number
Most metrics take a number. These take one of a fixed set of values, offered as a dropdown in the builder. Anything else is rejected.
| Metric | Accepted values |
|---|---|
device_status | online, offline, stale |
button_pressed | pressed, single_click, double_click, triple_click, long_press, sos, alert, man_down, not_pressed |
home_zone_status | in_home, not_in_home, no_home_set, unmapped |
visitor_event | registered, approved, denied, checked_in, checked_out, cancelled, badge_changed |
geofence_event | entered, left |
fall_detected | fall, man_down |
place_event | entered, left |
gateway_status | offline, online |
anomaly_event | any, silent, frequency_drop, frequency_spike, rssi_drop, battery_drain, config |
work_order_event | opened, resolved |
incident_event | opened |
wifi_event | signed_in |
Operators
| Operator | Symbol | Means |
|---|---|---|
equal | = | Equal to |
not_equal | ≠ | Not equal to |
less_than | < | Less than |
greater_than | > | Greater than |
between | ↔ | Between |
contains | ∋ | Contains |
becomes | → | Becomes (changes to) |
changes | Δ | Changes (any change) |
between is inclusive and needs a second value (value_max). contains is a substring match and only applies to the word-valued metrics above.
There is no greater_or_equal. For "at least 10 people", write greater_than 9 — the values these metrics carry are whole numbers, so the two say the same thing.