Skip to main content
Version: V3 (Ignition 8.3)

system.mes.oee.getStateRecordsForPeriod

Description

Retrieves the OEE state records that overlap the given time period across one or more locations, clipped to that period: a record that started before startDate is returned starting at startDate, and a record that ends after endDate (or is still open) is returned ending at endDate, with its duration recomputed accordingly.

Unlike getStateRecordTimeline (single location, optional micro-stop merge), this performs no micro-stop consolidation and works across multiple locations: the locationPath accepts a wildcard, so a parent or line path returns the records for every matching child location, each tagged with its locationName. Records are sorted ascending by start date.

This is the data provider for the Status Chart report component, which renders one ribbon row per location.

Permissions

This method requires the OEE.READ.GET permission.

Syntax

system.mes.oee.getStateRecordsForPeriod(locationPath, startDate, endDate=None)

Parameters

ParameterTypeNullableDescription
locationPathStringFalseThe MES location path to search. Supports * and % as a wildcard, so a parent/line path matches all children.
startDateDateFalseThe start time for the period. Records are clipped to start no earlier than this.
endDateDateTrueThe end time for the period. Records are clipped to end no later than this. If omitted, the current time is used.

Returns

A list of JSON representations of OeeStateRecordDTO objects, each representing a recorded OEE state event.

Each object has the following properties:

NameTypeNullableDescriptionDefault Value
idStringTrueThe id of the OEE State Recordnull
codeIntegerFalseInteger state numbernull
locationIdStringFalseIdentifier of the associated location where this state record was recordednull
locationNameStringTrueName of the associated locationnull
locationPathStringTruePath of the location where this state record was recordednull
nameStringFalseName of the recorded statenull
calculationTypeOeeStateCalculationTypeFalseSpecifies how this state contributes to OEE calculationsDOWNTIME
colorStringFalseHex color code representing the state visually"#000000"
statusStatusFalseStatus of the OEE record (e.g., running, faulted, canceled, complete)UNKNOWN
startDateInstantFalseStart date and time of the state recordInstant.now()
endDateInstantTrueEnd date and time of the state recordnull
durationDoubleFalseDuration of the state record in seconds0.0
downtimeReasonIdStringTrueIdentifier of the associated downtime reason, if applicablenull
downtimeReasonStringTrueTitle of the downtime reason. (Name - Code) For display purposes onlynull
downtimeReasonPathStringTruePath to the current downtime reasonnull
interruptionLocationIdStringTrueLocation id that caused the blocked/starved state on the machinenull
interruptionLocationNameStringTrueName of the interruption location that caused the blocked/starved statenull
interruptionLocationPathStringTrueLocation path that caused the blocked/starved state on the machinenull
acknowledgedBooleanFalseBoolean indicating whether the state record has been acknowledgedfalse
acknowledgedByStringTrueAcknowledged By. This is the user who acknowledged the state recordnull
acknowledgedDateInstantTrueAcknowledged Date. This is the date when the state record was acknowledgednull
modeRecordIdStringTrueIdentifier of the associated mode recordnull
rootCauseStateRecordIdStringTrueIdentifier of the root cause state record, if applicablenull
primaryAlarmRecordIdStringTrueIdentifier of the associated OEE Alarm Record, if applicablenull
primaryAlarmNameStringTruePrimary alarm name, if applicablenull
primaryAlarmDisplayPathStringTruePrimary alarm display path, if applicablenull
primaryAlarmLabelStringTruePrimary alarm display name, if applicablenull

Code Examples

from java.util import Date
from java.util.concurrent import TimeUnit

# Get every state record for all machines on a line over the last 8 hours.
linePath = "Enterprise/Site/Area/Line1/%"
endTime = Date()
startTime = Date(endTime.getTime() - TimeUnit.HOURS.toMillis(8))

records = system.mes.oee.getStateRecordsForPeriod(
locationPath=linePath,
startDate=startTime,
endDate=endTime
)

# Group by location to build one ribbon row per machine.
byLocation = {}
for record in records:
byLocation.setdefault(record['locationName'], []).append(record)

for locationName, states in byLocation.items():
print locationName, "->", len(states), "states"