SPEC VERSION 1.0 — MARCH 2026

Industrial Asset Event Standard

A vendor-neutral event format for industrial asset intelligence. Defines how signals, diagnoses, and maintenance intents are represented across heterogeneous operational systems.

What is IAES?

IAES defines how industrial asset signals, diagnoses, and maintenance intents are represented and transferred across heterogeneous operational systems.

IAES is not a product. It is a data contract. Any system — sensor platform, AI engine, CMMS, historian, or dashboard — can produce or consume IAES events without knowing the implementation details of the other side.

Key insight: IAES events can originate from any source — AI models, rule engines, SCADA systems, or human experts performing manual inspections. The source field is what makes the standard vendor-neutral.

Principles

  1. Vendor neutrality — No dependency on SAP, PI System, Odoo, or any specific vendor.
  2. Legacy compatibility — Events map cleanly to CMMS, historians, SCADA, and IoT platforms.
  3. Event-oriented — Each object represents something that happened (measurement, diagnosis, intent).
  4. Complete traceability — Every event traces back to its origin via event_id, correlation_id, source_event_id.
  5. Extensibility — The data payload and metadata field allow new fields without breaking consumers.

Terminology

TermDefinition
EventA self-contained JSON object describing something that happened to an industrial asset.
ProducerAny system that creates IAES events — sensor gateways, AI engines, rule engines, human inspectors, SCADA systems.
ConsumerAny system that receives and acts on IAES events — CMMS, historians, dashboards, digital twin platforms.
EnvelopeThe common wrapper fields shared by all IAES events (spec_version, event_type, event_id, etc.).
CorrelationA group of related events sharing the same correlation_id, representing a single observation-to-action flow.
SourceA dot-notation string identifying the producer of an event (e.g. wertek.ai.vibration, operator.field_assessment).
IntentA declaration that an action should be considered, without prescribing how the consumer should act. Used in maintenance.work_order_intent.
Health IndexA normalized 0-1 score representing asset condition (0 = failed, 1 = healthy).
RULRemaining Useful Life — estimated days until the asset requires intervention.

Common Envelope

Every IAES event shares this envelope structure:

{
  "spec_version": "1.0",
  "event_type": "asset.health",
  "event_id": "uuid",
  "correlation_id": "uuid",
  "source_event_id": "uuid" | null,
  "timestamp": "ISO 8601",
  "source": "vendor.system.subsystem",
  "content_hash": "sha256_16char",
  "asset": {
    "asset_id": "string",
    "asset_name": "string" | null,
    "plant": "string" | null,
    "area": "string" | null
  },
  "data": { }
}

Field Definitions

Field Type Required Description
spec_version string yes IAES spec version (currently "1.0")
event_type string yes Dot-notation event type
event_id UUID yes Unique identifier for this event
correlation_id UUID yes Groups related events in a single flow
source_event_id UUID no References the originating event
timestamp ISO 8601 yes When the event occurred
source string yes Dot-notation producer identity (e.g. wertek.ai.diagnosis, operator.manual_inspection)
content_hash string no SHA-256 prefix (16 chars) of data payload for dedup
asset object yes Asset identity (see Asset Identity below)
data object yes Event-specific payload

Asset Identity

{
  "asset_id": "MOTOR-001",
  "asset_name": "Motor Bomba P-101",
  "plant": "Pesqueria",
  "area": "Turbinas"
}

The standard deliberately does not define a full asset hierarchy. Different organizations model hierarchies differently (ISO 14224, ISA-95, custom). IAES only requires enough context to identify the asset.

Event Types (v1.0)

IAES v1.0 defines three event types covering the full observe → diagnose → act pipeline:

asset.measurement

Physical sensor reading. Raw data from vibration sensors, temperature probes, current transformers, or manual instruments.

asset.health

Diagnosis or health assessment. Produced by AI engines, rule engines, or human experts. Includes recommended actions.

maintenance.work_order_intent

Declares the intent to create a work order. The consumer (CMMS, ERP) decides how to act on the intent.

asset.measurement

A physical sensor reading.

{
  "event_type": "asset.measurement",
  "data": {
    "measurement_type": "vibration_rms",
    "value": 4.2,
    "unit": "mm/s",
    "sensor_id": "SENSOR-045",
    "location": "bearing_drive_end"
  }
}
FieldTypeRequiredDescription
measurement_typestringyesType of measurement (vibration_velocity, temperature, current, etc.)
valuenumberyesNumeric value
unitstringyesEngineering unit
sensor_idstringnoPhysical sensor identifier
locationstringnoMeasurement point on the asset

asset.health

AI diagnosis, rule engine alert, or human expert health assessment. Includes recommended action.

{
  "event_type": "asset.health",
  "data": {
    "health_index": 0.16,
    "anomaly_score": 0.92,
    "severity": "critical",
    "failure_mode": "bearing_inner_race",
    "fault_confidence": 0.87,
    "rul_days": 5,
    "recommended_action": "Replace bearing immediately",
    "estimated_downtime_hours": 4
  }
}
FieldTypeRequiredDescription
health_indexfloat 0-1yesNormalized health (0 = failed, 1 = healthy)
anomaly_scorefloat 0-1noProbability of anomaly
severityenumyesinfo, low, medium, high, critical
failure_modestringnoClassified fault type
fault_confidencefloat 0-1noClassification confidence
rul_daysintegernoRemaining Useful Life in days
recommended_actionstringnoHuman-readable action suggestion
estimated_downtime_hoursfloatnoEstimated repair duration

maintenance.work_order_intent

Declares the intent to create a work order. The consumer decides whether and how to act.

{
  "event_type": "maintenance.work_order_intent",
  "data": {
    "title": "Bearing failure predicted",
    "description": "Inner race defect detected by AI diagnosis",
    "priority": "critical",
    "recommended_due_days": 3,
    "triggered_by": "alert"
  }
}
FieldTypeRequiredDescription
titlestringyesWork order title
descriptionstringnoDetailed description
priorityenumyeslow, medium, high, emergency
recommended_due_daysintegernoSuggested deadline in days
triggered_bystringnoWhat caused this intent (alert, schedule, manual, threshold, ai_diagnosis)

Severity Levels

IAES defines five severity levels:

info Informational, no action needed
low Schedule for next planned maintenance
medium Plan intervention within weeks
high Plan intervention within days
critical Immediate action required

Idempotency & Deduplication

Every event includes:

Consumers SHOULD use content_hash + asset.asset_id + event_type to detect duplicate events across retries.

Event Producers

IAES events are produced by systems capable of interpreting operational signals — not by the signals themselves. A PLC knows vibration_rms = 4.6. That is telemetry. IAES begins where interpretation begins.

Intelligence layer producers

AI Diagnosis Engine wertek.ai.vibration
Rule / Threshold Engine acme.rule_engine
Manual Inspection operator.manual_inspection
Technician Assessment operator.field_assessment
Lab Analysis lab.oil_analysis
Maintenance Application wertek.ai.cmms

Signal sources (upstream of IAES)

Operational systems such as PLCs, SCADA platforms, sensor gateways, and historians emit raw signals or measurements. These are converted into IAES events by downstream intelligence layers.

Industrial Signals IAES Events (PLC / Sensors / SCADA) (semantic, interpreted) | | v v Telemetry Layer CMMS, Dashboards, (OPC UA / Modbus / MQTT) Historians, Integrations | ^ v | Intelligence Layer ─────────────────-+ (AI / rules / human expert)

An edge device MAY produce IAES events directly if it has sufficient intelligence (edge AI, embedded rule engine). But the typical flow is: signals are ingested by an intelligence layer, which then emits IAES events.

The source field is what makes IAES vendor-neutral. A technician with a stethoscope and an AI model both produce the same asset.health event — the consumer doesn't need to know the difference.

Producer Guidelines

Systems that emit IAES events MUST follow these rules:

Required behavior

  1. Set all required envelope fields. Every event MUST include spec_version, event_type, event_id, correlation_id, timestamp, source, asset (with at least asset_id), and data.
  2. Generate unique event_id values. Each event MUST have a globally unique event_id (UUID v4 recommended). Never reuse an event_id across events.
  3. Use dot-notation for source. The source field MUST follow the pattern vendor.system[.subsystem]. Use lowercase, alphanumeric characters, dots, and underscores only.
  4. Use ISO 8601 for timestamps. The timestamp field MUST be in UTC with timezone designator (e.g. 2026-03-06T17:50:17Z).
  5. Do not assume consumer behavior. A maintenance.work_order_intent declares intent — the producer MUST NOT assume the consumer will create a work order, or create it in any specific format.

Recommended behavior

  1. Set correlation_id to group related events. When a measurement triggers a diagnosis that triggers a work order intent, all three events SHOULD share the same correlation_id.
  2. Set source_event_id for causal chains. When an event is caused by another event, set source_event_id to the event_id of the cause.
  3. Compute content_hash for deduplication. Producers SHOULD compute content_hash as the first 16 characters of the SHA-256 hex digest of the serialized data payload (canonical JSON, sorted keys).
  4. Include asset_name, plant, and area when available. These fields are optional but significantly improve human readability in logs, dashboards, and audit trails.
  5. Use standard failure_mode values when possible. Common values: bearing_inner_race, bearing_outer_race, misalignment, unbalance, looseness, cavitation, overheating, electrical_fault. Custom values are allowed.

Consumer Guidelines

Systems that receive IAES events MUST follow these rules:

Required behavior

  1. Tolerate unknown fields. Consumers MUST ignore fields in data that they do not recognize. Never reject an event because it contains extra fields. This is essential for forward compatibility.
  2. Tolerate unknown event_type values. If a consumer receives an event with an event_type it does not support (e.g. a future asset.hierarchy), it MUST NOT error. It MAY log the event and skip processing.
  3. Validate spec_version. Consumers SHOULD check spec_version and MAY reject events from unsupported major versions.

Recommended behavior

  1. Deduplicate using content_hash. Consumers SHOULD detect duplicate events using content_hash + asset.asset_id + event_type. If content_hash is not present, fall back to event_id uniqueness.
  2. Use correlation_id to reconstruct flows. Consumers that display or analyze event chains SHOULD group events by correlation_id and order by timestamp.
  3. Use source_event_id for traceability. When displaying a work order intent, consumers SHOULD link back to the health event that triggered it.
  4. Map severity to native priority. Consumers SHOULD map IAES severity levels to their native priority system:
IAES severitySAP PMMaintainXOdooGeneral
infoNo action
lowPriority 4LOW0 (Not Urgent)Low
mediumPriority 3MEDIUM1 (Normal)Medium
highPriority 2HIGH2 (Urgent)High
criticalPriority 1HIGH3 (Very Urgent)Critical
Intent semantics: A maintenance.work_order_intent is a suggestion, not a command. Consumers MAY apply filters, rules, or approval workflows before creating native work orders. The consumer is the authority on what gets created in its system.

Event Flow

A complete observation-to-action pipeline:

Observation Sensor / AI / Human
asset.measurement Raw signal data
asset.health Diagnosis / assessment
work_order_intent Maintenance intent
Connector SAP / Odoo / PI

System Compatibility

SystemIAES Mapping
SAP PMMaintenance Notification / Order
PI SystemTag value writes
AVEVA Data HubSDS Stream writes
Odoomaintenance.request
MaintainXUser Variables
FracttalCustom fields + OT
GrafanaDashboard metrics
Any MQTT brokerJSON payload

Future (v1.1)

Planned additional event types:

Event TypeDescription
asset.hierarchyFull asset tree sync
sensor.registrationSensor discovery and onboarding
maintenance.completionWork order completion acknowledgment
maintenance.spare_part_usageParts consumed during maintenance

Versioning

IAES uses semantic versioning for the specification:

VersionDateChanges
1.0March 2026Initial release. 3 event types, common envelope, JSON Schema.