Skip to main content

IAES

IAES — Industrial Asset Event Standard

A vendor-neutral event format for industrial asset measurements, diagnoses, and maintenance intents.

DOI PyPI npm Node-RED License: CC BY 4.0 ResearchGate Preprint ResearchGate Dataset

Industrial systems speak different languages. A vibration sensor outputs raw waveforms. An AI model outputs health scores. SAP expects maintenance notifications. PI System expects tag values. MaintainX expects user variables.

IAES provides the neutral layer in between — one event format that any producer can emit and any consumer can understand.

Sensors --> Intelligence --> IAES --> Connectors --> Enterprise Systems

Part of IAES

The standard ships as four packages that version together. The first two numbers of a package version are the specification it implements — 1.4.x implements IAES 1.4.

Runtime Package Install
TypeScript / JavaScript @iaes/sdk npm install @iaes/sdk
Python iaes pip install iaes
Node-RED node-red-contrib-iaes npm install node-red-contrib-iaes
n8n n8n-nodes-iaes npm install n8n-nodes-iaes

Specification, JSON Schemas and governance: iaes.dev.

Install

pip install iaes                      # Python
npm install @iaes/sdk                 # TypeScript / Node.js
npm install node-red-contrib-iaes     # Node-RED

Publish Events

The SDK includes a Client that sends IAES events to any compliant endpoint via HTTPS.

Python:

from iaes import Client, AssetMeasurement

client = Client("https://your-endpoint.example.com", api_key="your-key")
event = AssetMeasurement(
    asset_id="MOTOR-001",
    measurement_type="vibration_velocity",
    value=4.2,
    unit="mm/s",
    source="acme.sensors.plant1",
)
result = client.publish(event)

TypeScript:

import { IaesClient, AssetMeasurement } from "@iaes/sdk";

const client = new IaesClient("https://your-endpoint.example.com", {
  apiKey: "your-key",
});
const event = new AssetMeasurement({
  asset_id: "MOTOR-001",
  measurement_type: "vibration_velocity",
  value: 4.2,
  unit: "mm/s",
  source: "acme.sensors.plant1",
});
const result = await client.publish(event);

The endpoint URL is any IAES-compliant receiver — your own backend, a cloud broker, or a third-party integration.

Examples

Vibration measurement

from iaes import AssetMeasurement

event = AssetMeasurement(
    asset_id="MOTOR-001",
    measurement_type="vibration_velocity",
    value=4.2,
    unit="mm/s",
    source="acme.sensors.plant1",
    units_qualifier="rms",           # ISO 17359
    sampling_rate_hz=25600,
)
payload = event.to_dict()  # IAES wire format, ready for json.dumps()
import { AssetMeasurement } from "@iaes/sdk"

const event = new AssetMeasurement({
  asset_id: "MOTOR-001",
  measurement_type: "vibration_velocity",
  value: 4.2,
  unit: "mm/s",
  source: "acme.sensors.plant1",
  units_qualifier: "rms",
  sampling_rate_hz: 25600,
})
const payload = JSON.stringify(event)  // toJSON() called automatically

Energy / power quality

from iaes import AssetMeasurement

pf_event = AssetMeasurement(
    asset_id="SUBSTATION-A",
    measurement_type="power_factor",
    value=0.82,
    unit="ratio",
    source="ion8650.meter_01",
)

thd_event = AssetMeasurement(
    asset_id="SUBSTATION-A",
    measurement_type="thd_voltage",
    value=6.3,
    unit="%",
    source="ion8650.meter_01",
)

AI health diagnosis

from iaes import AssetHealth, Severity

event = AssetHealth(
    asset_id="MOTOR-001",
    health_index=0.16,
    severity=Severity.CRITICAL,
    failure_mode="bearing_inner_race",
    rul_days=5,
    recommended_action="Replace bearing immediately",
    source="ai.vibration_model",
    iso_13374_status="unacceptable",   # ISO 13374
    iso_14224={                         # ISO 14224
        "mechanism_code": "1.1",
        "cause_code": "1",
        "detection_method": "VIB",
    },
)

Work order intent

from iaes import WorkOrderIntent

event = WorkOrderIntent(
    asset_id="MOTOR-001",
    title="Replace bearing DE — AI diagnosis critical",
    priority="high",
    triggered_by="ai_diagnosis",
    recommended_due_days=3,
    source="ai.vibration_model",
    source_event_id="<health_event_id>",  # links to the diagnosis
)

Maintenance completion

from iaes import MaintenanceCompletion

event = MaintenanceCompletion(
    asset_id="MOTOR-001",
    work_order_id="WO-2026-0042",
    status="completed",
    actual_duration_seconds=7200,
    failure_confirmed=True,
    failure_mode="bearing_inner_race",
    source="cmms.sap_pm",
)

Validate

from iaes import validate, ValidationError

try:
    validate(event.to_dict())
    print("Valid IAES event")
except ValidationError as e:
    print(e)

Requires: pip install iaes[validate]

Deserialize

import json
from iaes import from_dict

# Any IAES envelope -> correct model instance
wire = json.loads(mqtt_message)
event = from_dict(wire)  # AssetMeasurement, AssetHealth, etc.
print(event.asset_id, event.value)

Event Types (v1.4)

Event Type Python TypeScript Purpose
asset.measurement AssetMeasurement AssetMeasurement Sensor reading (vibration, temperature, pressure, current, power factor, THD...)
asset.health AssetHealth AssetHealth AI diagnosis or expert assessment (health index, fault, RUL)
maintenance.work_order_intent WorkOrderIntent WorkOrderIntent Intent to create a work order
maintenance.completion MaintenanceCompletion MaintenanceCompletion Work order completion acknowledgment
asset.hierarchy AssetHierarchy AssetHierarchy Asset hierarchy sync (org > plant > area > equipment)
sensor.registration SensorRegistration SensorRegistration Sensor discovery and lifecycle
maintenance.spare_part_usage SparePartUsage SparePartUsage Spare parts consumed during maintenance

Enums

All enums accept either the enum constant or a plain string:

AssetHealth(asset_id="M-001", severity=Severity.CRITICAL)
AssetHealth(asset_id="M-001", severity="critical")  # also works
Enum Values
Severity info, low, medium, high, critical
MeasurementType vibration_velocity, vibration_acceleration, temperature, current, voltage, power, pressure, flow, speed, power_factor, thd_voltage, thd_current, frequency, ...
UnitsQualifier rms, peak, peak_to_peak, average, true_rms
ISO13374Status unknown, normal, satisfactory, unsatisfactory, unacceptable, imminent_failure, failed
WorkOrderPriority low, medium, high, emergency
CompletionStatus completed, partially_completed, cancelled, deferred
HierarchyLevel organization, plant, area, equipment
RelationshipType parent_of, child_of, sibling_of, depends_on
RegistrationStatus discovered, registered, calibrated, decommissioned

Wire Format

Every event serializes to the same envelope structure:

{
  "spec_version": "1.4",
  "event_type": "asset.measurement",
  "event_id": "a9e3c4b2-...",
  "correlation_id": "3b2f9d8c-...",
  "timestamp": "2026-03-08T12:00:00+00:00",
  "source": "acme.sensors.plant1",
  "content_hash": "8a3f9c2e1b4d7e6f",
  "asset": {
    "asset_id": "MOTOR-001",
    "asset_name": "Motor Bomba P-101",
    "plant": "Pesqueria",
    "area": "Turbinas"
  },
  "data": {
    "measurement_type": "vibration_velocity",
    "value": 4.2,
    "unit": "mm/s",
    "units_qualifier": "rms",
    "sampling_rate_hz": 25600
  }
}

content_hash is a 16-char SHA-256 prefix of the data payload, computed identically in Python and TypeScript for cross-language idempotency.

ISO Standards Alignment

Standard IAES Fields Purpose
ISO 17359 units_qualifier, sampling_rate_hz, acquisition_duration_s Condition monitoring measurement metadata
ISO 13374 iso_13374_status 7-level condition status (normal to failed)
ISO 14224 iso_14224 object Failure mechanism, cause, and detection codes
ISO 55000 Architectural Asset management principles embedded in design

All ISO fields are optional. v1.0/v1.1 events remain fully valid.

Zero Dependencies

The core SDK uses only standard library. No runtime dependencies.

Core Validation
Python stdlib only pip install iaes[validate] adds jsonschema
TypeScript Node.js crypto only ajv optional

Cross-Language Compatibility

Both SDKs produce identical wire format and identical content_hash for the same data. Events created in Python validate in TypeScript and vice versa. This is tested on every commit.

Node-RED

node-red-contrib-iaes provides 7 nodes for visual IAES workflows:

Node Purpose
iaes-measurement Create asset.measurement events from sensor inputs
iaes-health Create asset.health events from AI models or expert rules
iaes-work-order Create maintenance.work_order_intent events
iaes-validate Validate any IAES envelope against JSON Schema
iaes-sparkplug Bridge Sparkplug B payloads to/from IAES format
iaes-publish Publish IAES events to any compliant HTTP endpoint
iaes-route Route events by type, severity, or custom expressions
npm install node-red-contrib-iaes

Official Specification

IAES-RFC-001 — Industrial Asset Event Model DOI: 10.5281/zenodo.18973217

Design Principles

  1. Vendor neutrality — No dependency on any specific platform or system
  2. Legacy compatibility — Maps cleanly to CMMS, historians, SCADA, IoT
  3. Event-oriented — Each object represents something that happened
  4. Complete traceability — event_id + correlation_id + source_event_id chain
  5. Extensibility — data payload allows new fields without breaking consumers

System Compatibility

System IAES Mapping
SAP PM Maintenance Notification / Order
PI System / AVEVA Tag value writes / SDS streams
Odoo maintenance.request
MaintainX User Variables
Fracttal Custom fields + OT
Node-RED node-red-contrib-iaes — 7 nodes
MQTT / Kafka JSON payload on any topic

How to Cite IAES

If you use IAES in research or industrial systems, please cite:

Garza, G. (2026).
Industrial Asset Event Standard (IAES) v1.3.
Zenodo.
https://doi.org/10.5281/zenodo.18973217

BibTeX:

@software{garza_iaes_2026,
  author       = {Garza, Gilberto},
  title        = {Industrial Asset Event Standard (IAES)},
  version      = {v1.3.0},
  year         = {2026},
  publisher    = {Zenodo},
  doi          = {10.5281/zenodo.18973217},
  url          = {https://doi.org/10.5281/zenodo.18973217}
}

ResearchGate

License

IAES is an open specification. The specification text and JSON schemas are licensed under CC BY 4.0. Implementations may use any license.


IAES v1.4 — March 2026

Metadata

Release files for iaes 1.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for iaes 1.4.0
File Size Uploaded
iaes-1.4.0.tar.gz 45.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for iaes 1.4.0
File Interpreter ABI Platform
iaes-1.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 72.7 kB

Release files / iaes-1.4.0.tar.gz

Download URL iaes-1.4.0.tar.gz
Size 45.4 kB
Tags Source
SHA-256 checksum
How to use checksums
7e101980a4958652187b3a220ed90aeb430d4d3e59fcc41e36a3bd3c5682e4c0
BLAKE2b-256 checksum
How to use checksums
bcd356e9cdf77426aae6759aadb033e6bc1dcd75fa7d9d6b96f38418012d9404
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 4, 2026.

Transparency log

Release files / iaes-1.4.0-py3-none-any.whl

Download URL iaes-1.4.0-py3-none-any.whl
Size 27.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
391dff63433c3dd2bc47ea3a529059b8336bc92eb07eb6ea45d693551fee21b2
BLAKE2b-256 checksum
How to use checksums
e221c704ff0e8f59668e0033314f112d06fa33d9f7c7c9d9e3c39acb078cc2aa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 4, 2026.

Transparency log

Release history Release notifications | RSS feed

2.0.2

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.4.1

2 release files

This release

1.4.0 This release

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page