KanoaMES v1.11
Release Date - 7/12/25
Implementation Guidance
This release package has been tested against Ignition 8.1.47.
The minimum required version of Ignition is 8.1.33
- kanoaMES_1_11_39.modl
- ApexCharts-signed 1.0.17.modl
- BIJC_Calendar_Component_v1.8.1.modl
Note...
- We have set itemId in the mes.workOrder to NOT NULL. A work order record is invalid if it doesn't contain an itemId. If the module update fails as Hawthorn attempts to set this constraint, go into the database and either delete any workorders that has null itemIds, or set them to a valid itemId.
Summary
Our latest release 1.11 brings more features and a ton of fixes and improvements to all aspects of the KanoaMES product. In summary, we have added...
- Performance Reason Coding - Analyze the reasons your assets ran slowly
- Generate serialized numbers - Create templates that determine how serialized numbers are generated
- Add custom attributes to lots
- Track lot location on mobile assets - assetTransportId
- User configuration of Asset Operation screen
- Search for production order scheduled events
- Import and export dashboard widgets
- Improved Downtime Analysis only include events that occur during production
Performance States
We've added Performance Reason Coding that allows speed loss to be coded and categorized. This addition means that you now have a way to codify all the different reasons that can affect an assets' OEE. We call it the trifecta!
- Downtime Reasons for Availability
- Item States and Scrap Reasons for OEE Quality
- Performance Reasons for OEE Performance

Performance States can be grouped into performance reason state classes and then linked to assets and items, so only those reasons valid for an asset/item combo are available for operator selection.

Performance Events can be added via the Performance Event editor.

We have created three new widgets that you can use to create a dashboard to display Speed Loss analytics.
- kanoa/core/dbp/widgets/analytics/performanceReasonBarChart
- kanoa/core/dbp/widgets/analytics/performanceReasonPieChart
- kanoa/core/dbp/widgets/analytics/performanceReasonTable

Downtime Analysis
We have refactored our asset state event analysis calls to only return downtime events that occur during production runs. Although most of our analysis screens only called for downtime data during production times, it was possible to go the downtime analysis screen and select a period that include non production time and all downtime state events during that time frame would be returned which caused some confusion.
So we have created the following new functions....
- system.kanoa.event.getAssetStateEvents(). Replaces getDowntimeData() and getStateEvents() functions which have been deprecated.
- system.kanoa.event.getAssetStateEventsSummary(). Replaces getDowntimeDataSummary() and getStateEventSummary() functions which have been deprecated.
- system.kanoa.event.getAssetStateEventsByShift(). Replaces getDowntimeDataByShift() which has been deprecated.
- system.kanoa.event.getAssetStateEventsByShiftSummary(). Replaces getDowntimeDataByShiftSummary() which has been deprecated.
- system.kanoa.event.getAssetStateEventsByInterval(). Replaces getDowntimeDataByInterval() which has been deprecated.
- system.kanoa.event.getAssetStateEventsByCategory(). Replaces getDowntimeDataByCategory() which has been deprecated.
All our analysis views have been modified to call the new functions. Any custom screens you have created that call the deprecated functions will still work and they in turn have been modified to also only return downtime during production events.
New Lot Features
Serialized Numbers
We've added 5 new system functions that allow you to define a serialized template to then start generating serial numbers against.
system.kanoa.serial.addSerialNumber() allows you to specify a prefix, suffix, zfill and starting value for a serialized template name.
Example...
serialInfo = {'serialName': 'lpn', 'prefix': 'KAN', 'zfill': 6, 'suffix': '-A'}
userId = system.kanoa.security.getIDPUserId({'userName': 'SYSTEM'})
serialId, msg = system.kanoa.serial.addSerialNumber(serialInfo, userId)
Once a template has been created, you can now call system.kanoa.serial.getNextSerialNumber(serialId, userId) to generate the next unique serialNumber. Other functions added are system.kanoa.serial.deleteSerialNumber(), system.kanoa.serial.getSerialNumbers() and system.kanoa.serial.updateSerialField().
Lot Attributes We've added the ability to add attributes to a lot.
New Lot Attribute functions are system.kanoa.lot.getLotAttributes(), addLotAttribute(), updateLotAttribute(), and deleteLotAttribute().
Attributes of a lot can now be viewed in a lot Attribute table on Trace Graph screen.
assetTransportId
Lot events can now be associated with mobile assets. Simply create your mobile assets in the asset configuration screen and add to the lotEvent using the 'assetTransportId' keyword. Not only can you tell where in your facility a lot is, you can also tell which tray, rack or truck it is on.
Asset Operator Screen Configuration
We have added a new tab to asset configuration that will allow a user to select the navigable items, custom left and right panel and dashboards to be shown to an operator on the Asset Operation screen all in one place.
Info panels and Ops panels have been moved to their own folders to be able to provide a dropdown list of available panels.
- kanoa/mes/asset/operation/infoPanel
- kanoa/mes/asset/operation/opsPanel

To create custom panels, simply add your own to these folders in the kanoaMES project or your runnable project that inherits from kanoaAPP.
To add custom navItems to the navigation selection view, a client will override the following view in the kanoaMES or runnable project that inherits from kanoaAPP...
- kanoa/mes/config/assetOperation/navItems and add elements to defaultNavItems
- kanoa/mes/asset/operation/navigation/navSelector and add elements to defaultNavItems
- kanoa/mes/asset/operation/navigation/navSelector and add elements to navItems. This will need to set any specific viewParams for each added view
New Schedule Features
Production Order Event search
You can now search for scheduled events by production order in both the operations scheduler and in the Order screen.

Adjust Schedule Rate based on shift crew size
It is now possible to have the schedule duration of an order calculated based on crew size scheduled for a shift.
To enable this functionality..
- 'Shift Adherence' and 'Intelligent Scheduling' must be disabled
- Configure an asset attribute called '_adjustScheduleRateBasedOnCrewSize' and set to 1. This can be set at any level of the asset hierarchy
- Order is dragged onto schedule
Order Custom Schedule Rate
It has always been possible to have an order received ERP to contain rate information regarding the expected (standard) rate and schedule rate, and the asset-item rate will be stored. In v1.11.19, we extend this to provide a mechanism for storing a custom schedule rate / standard rate that only applies to the production order and that is used when an order to dragged onto the scheduler. This provides a way of having an order that has specific configuration information regarding the production of an item.
How it works...
When an order from ERP is processed, simply add the custom rate information as a workOrderMetaData field called 'orderScheduleRateInfo' against the order.
orderScheduleRateInfo = {
'scheduleRate': 45,
'standardRate': 60,
'itemPeriodName': 'Hour',
'infeedUnits': 'LB'
}
orderMetaDataInfo = {
'workOrderId': 1,
'metaDataName': 'orderScheduleRateInfo',
'metaDataValue': system.util.jsonEncode(orderScheduleRateInfo)
}
userId = system.kanoa.security.getIDPUserId({'userName': 'SYSTEM'})
workOrderMetaDataId = system.kanoa.order.addProductionOrderMetaData(orderMetaDataInfo, userId)
print workOrderMetaDataId
>>> 10
When the order is dragged onto the calendar, we now check to see the order has a workOrderMetaData field called 'orderScheduleRateInfo' and will use that information, other it will use the item-asset rate information.
New Dashboard Features
You can now export and import widgets as well as dashboards. Go to the widget editor under dashboards and export away.

Change Log
User Security
- Add 'Show disabled' to user table.
- userSource selections are wrong and cannot select default. This has been fixed.
- Cannot set user as gateway admin. This is because the enabled binding was set to false due to the userSource name. This has been fixed.