Understanding Maintenance Rules
Overview
Maintenance Rules are the building blocks of ARMOR's Maintenance Management system. Each rule defines what maintenance needs to be done, when it should happen, and which assets it applies to. This guide explains every component of a maintenance rule so you can configure them effectively.
What is a Maintenance Rule?
A Maintenance Rule is a configuration that tells ARMOR:
- What maintenance task to track (e.g., "Oil Change")
- When to trigger alerts (e.g., every 250 hours or 365 days)
- Where it applies (all assets, specific sites, or tag-based selection)
- How to initialize counters (start at zero or current value)
Anatomy of a Maintenance Rule
Every maintenance rule consists of two parts:
1. Maintenance Definition (The "What" and "When")
The definition specifies the technical details of the maintenance task:
| Field | Description | Example |
|---|---|---|
| Name | Descriptive name for the maintenance task | "Oil Change" |
| Key | Unique identifier (auto-generated from name) | "oil_change" |
| Data Name | Display name shown in alerts/UI | "Oil Change" |
| Data Field | Telemetry field to monitor | "runtime" or "distance" |
| Threshold | Value at which to trigger alert | 250 (hours) |
| Unit | Measurement unit for threshold | "hours", "miles", "days" |
| Max Days | Calendar backup trigger (0 = disabled) | 365 (trigger after 1 year regardless) |
| Init Mode | How to initialize counters | "zero" or "current" |
| Set Message | Alert text when maintenance is due | "Oil change is due" |
| Clear Message | Alert text when maintenance is completed | "Oil change completed" |
2. Scope (The "Where")
The scope determines which assets the rule applies to:
| Scope Type | How It Works | Use Case |
|---|---|---|
| Account-Wide | Applies to all assets in your organization | Universal maintenance (annual inspections) |
| Site-Based | Applies only to assets at specific sites | Site-specific compliance requirements |
| Asset-Specific | Applies to manually selected assets | Unique one-off maintenance needs |
| Tag-Based | Applies to assets matching tag criteria | Manufacturer/model-specific maintenance |
Field-by-Field Breakdown
Name and Key
Name is the human-readable description of the maintenance task. When you enter a name, ARMOR auto-generates a Key by converting to lowercase and replacing spaces with underscores.
Example:
Name: Oil Change - 250hr Interval
Key: oil_change_250hr_interval
The key is used internally to track maintenance status on each asset. Once created, keys should not be changed or historical data will be lost.
Data Field
The Data Field tells ARMOR which telemetry value to monitor. Common options:
| Data Field | What It Tracks | Typical Use |
|---|---|---|
runtime
|
Total operating hours (lifetime) | Engine maintenance |
distance
|
Total miles/km traveled (odometer) | Vehicle maintenance |
None
|
Calendar time only | Time-based inspections |
Important: The data field must be available in asset telemetry. If an asset doesn't report the field (e.g., stationary equipment doesn't have distance), that asset won't be able to use distance-based maintenance.
Threshold and Unit
The Threshold is the value at which maintenance is triggered. The Unit defines what that value represents.
Example 1: Oil Change
Threshold: 250
Unit: hours
Result: Alert triggers when asset accumulates 250 hours since last oil change
Example 2: Tire Rotation
Threshold: 5000
Unit: miles
Result: Alert triggers when asset travels 5,000 miles since last rotation
Available Units
- minutes - For very short intervals
- hours - Most common for runtime-based maintenance
- days - Calendar-based only (used with Max Days = 0, Threshold > 0)
- miles - Distance-based (US)
- kilometers - Distance-based (metric)
Max Days (Calendar Backup)
The Max Days field provides a time-based safety net. If set to a value > 0, ARMOR triggers maintenance when either the usage threshold OR the calendar limit is reached (whichever comes first).
Max Days Logic
| Configuration | Behavior |
|---|---|
| Max Days = 0 | Usage-based only (no calendar backup) |
| Max Days > 0, Threshold > 0 | Hybrid: triggers on usage OR time (whichever first) |
| Max Days > 0, Threshold = 0 | Time-based only (pure calendar) |
Init Mode (Initialization)
When you create a maintenance rule, Init Mode determines where counters start for existing assets:
| Mode | How It Works | When to Use |
|---|---|---|
| Zero | Set all counters to 0 (maintenance just performed) | Fresh start, or maintenance was just completed on all assets |
| Current | Use current telemetry values as starting point | Phasing in gradually, or unknown maintenance history |
Example Scenarios
Scenario 1: Fleet-wide oil changes just completed
Init Mode: zero
Result: All assets start at 0 hours, alerts trigger after 250 hours of new operation
Scenario 2: Adding rule to existing fleet, unknown maintenance history
Init Mode: current
Result: Assets with 100 hours currently will trigger after next 250 hours (at 350 total), assets with 200 hours trigger at 450 total, etc. This spreads out maintenance events.
Set Message and Clear Message
These fields customize the alert text users see:
- Set Message: Displayed when maintenance alert is triggered (maintenance is due)
- Clear Message: Displayed when maintenance is marked complete (alert cleared)
Example:
Set Message:
"Oil change is due - schedule service within 2 weeks"
Clear Message: "Oil change completed successfully"
If left blank, ARMOR uses default messages based on the maintenance name.
Scope Configuration Deep Dive
Account-Wide Scope
No scope fields populated = rule applies to ALL assets in your account.
When to use:
- Universal maintenance (annual inspections required for all assets)
- Company-wide policies
- Simple fleets where all assets need same maintenance
Site-Based Scope
Select specific sites from scopeSiteIds. Rule applies to all
assets at those sites.
When to use:
- Site-specific compliance (some states require different inspection frequencies)
- Regional differences (winter vs. summer climates)
- Customer-specific requirements (different clients have different standards)
Example:
Rule: "California Emissions Inspection"
Scope: Sites in California only
Result: Only assets located at CA sites get this maintenance rule
Asset-Specific Scope
Manually select individual assets from scopeAssetIds. Rule
applies only to those specific assets.
When to use:
- Unique equipment with special needs
- Prototypes or trial equipment
- VIP customer assets
- One-off maintenance requirements
Tag-Based Scope (Most Powerful)
Define tag criteria in scopeTags. Rule applies to assets
matching the tag logic.
Tag Logic:
- Tags within an array are OR (any match)
- Multiple arrays are AND (all must match)
Example 1: Simple Filter
Scope Tags: [["Manufacturer:Kaivac"]]
Result: Applies to all assets tagged with Manufacturer = Kaivac
Example 2: Complex Filter
Scope Tags:
[["Manufacturer:Kaivac"], ["Model:17CC", "Model:17501"]]
Result: Applies to assets that are:
Manufacturer = Kaivac AND (Model = 17CC
OR Model = 17501)
When to use tag-based scope:
- Manufacturer-specific maintenance (Kaivac vs. Tennant vs. other brands)
- Model-specific intervals (different models have different oil capacities/requirements)
- Fleet segmentation (electric vs. propane vs. diesel)
- Dynamic scoping (as you add new assets with matching tags, rule auto-applies)
How Rules Are Evaluated
Evaluation Cycle
ARMOR checks maintenance status continuously:
Every telemetry update (1-5 minutes):
1. Asset sends new telemetry data (runtime, distance)
2. ARMOR processes data and updates asset fields
3. For each maintenance rule applicable to this asset:
a. Calculate accumulated value since last completion
b. Check if threshold reached (e.g., 250 hours accumulated)
c. Check if max days exceeded (e.g., 365 days since last completion)
d. If either condition true → CREATE ALERT
4. Notifications sent for new alerts
Counter Accumulation
For usage-based maintenance, ARMOR tracks accumulated value since last completion:
Example: Oil Change Every 250 Hours
Asset current runtime: 1,500 hours
Last oil change performed at: 1,250 hours
Accumulated since last change: 1,500 - 1,250 = 250 hours
Threshold: 250 hours
Result: ALERT TRIGGERED (accumulated = threshold)
Alert Lifecycle
- Created: When threshold or max days reached
- Active: Alert appears on dashboard, emails sent, remains active
- Cleared: When user marks maintenance complete, counter resets to 0
- Cycle Repeats: Accumulation starts over, next alert triggers after another 250 hours
Rule Priority and Conflicts
What If Multiple Rules Apply?
An asset can have multiple maintenance rules active simultaneously. Each rule tracks independently.
Example: Floor Scrubber
Rule 1: Oil Change (every 250 hours)
Rule 2: Filter Replacement (every 500 hours)
Rule 3: Annual Inspection (every 365 days)
Result: Asset will trigger 3 separate alerts when each condition is met
Overlapping Scopes
If multiple rules with different scopes could apply, all matching rules are applied. There's no conflict—ARMOR creates maintenance tracking for each applicable rule.
Common Configuration Patterns
Pattern 1: Standard Manufacturer Maintenance
Use Case: Follow Kaivac 17CC maintenance schedule
Configuration:
- Name: "Kaivac 17CC - Oil Change"
- Data Field: runtime
- Threshold: 300 hours
- Max Days: 365
- Scope Tags: [["Manufacturer:Kaivac"], ["Model:17CC"]]
- Init Mode: zero (after performing initial oil change on all)
Pattern 2: Universal Annual Inspection
Use Case: Required annual safety inspection for all equipment
Configuration:
- Name: "Annual Safety Inspection"
- Data Field: None
- Threshold: 0
- Max Days: 365
- Scope: Account-wide (no scope filters)
- Init Mode: current (start from today, stagger inspections)
Pattern 3: High-Use Equipment Accelerated Maintenance
Use Case: Assets with "High-Use" tag need more frequent oil changes
Configuration:
- Name: "Oil Change - High Use"
- Data Field: runtime
- Threshold: 150 hours (shorter interval)
- Max Days: 180
- Scope Tags: [["Usage:High-Use"]]
- Init Mode: zero
Best Practices for Rule Configuration
1. Always Include Max Days
Even for usage-based maintenance, set a reasonable Max Days value. This catches rarely-used equipment that still needs maintenance due to aging components.
2. Use Tag-Based Scoping for Scalability
Instead of manually selecting assets, use manufacturer/model tags. As you add new assets with matching tags, rules auto-apply.
3. Start with Init Mode = Current for Existing Fleets
If you're adding rules to an established fleet, use "current" mode to stagger maintenance events. This prevents 50 assets all triggering alerts on the same day.
4. Customize Alert Messages
Generic alerts like "Maintenance due" aren't helpful. Use specific messages: "Oil change required - schedule with maintenance team by Friday"
5. Test on Pilot Assets First
Create rule with narrow scope (one or two assets), verify it works correctly, then expand scope to full fleet.
6. Document Your Rules
Use clear naming conventions. Instead of "Maint 1", use "Kaivac 17CC - Oil Change 300hr"
Troubleshooting Rule Issues
Rule Applies but No Alerts
Check:
- Threshold hasn't been reached yet (check asset runtime/distance vs. threshold)
- Telemetry device is reporting data (check "Last Update" timestamp)
- Data field exists for this asset type (stationary equipment won't have distance)
Alerts Trigger Immediately After Creation
Cause: Init Mode = "current" and assets already exceed threshold
Fix: Mark maintenance complete to reset counters, or adjust threshold higher
Rule Doesn't Apply to Expected Assets
Check:
- Scope tags are correct and assets have matching tags
- Site IDs are correct if using site-based scope
- Asset IDs are correct if using asset-specific scope
Related Topics
- Introduction to Maintenance Management - Overview of the maintenance system
- Types of Maintenance (Scheduled vs Trigger-Based) - Understanding trigger types
- Creating a Maintenance Plan - Step-by-step rule creation
- Maintenance Not Triggering - Troubleshooting guide
Getting Help
If you need assistance configuring maintenance rules, contact the ARMOR Support Team with your rule configuration details.
Was this article helpful?
That’s Great!
Thank you for your feedback
Sorry! We couldn't be helpful
Thank you for your feedback
Feedback sent
We appreciate your effort and will try to fix the article