All Collections
User Guides
Calculating OEE in Ubidots
Calculating OEE in Ubidots

Learn how to calculate Overall Equipment Effectiveness using synthetic variables and other Ubidots' tools.

Sergio M avatar
Written by Sergio M
Updated over a week ago

Manufacturers often use the metric OEE (Overall Equipment Effectiveness) to track the efficiency of industrial processes, encompassing machines, people, and materials. OEE takes into account 3 key performance indicators: The availability of resources (i.e., machine uptime), their performance (i.e., runtime), and the quality of their output.

This article looks into how these indicators can be calculated using Ubidots’ Synthetic Variables to then calculate the OEE using those results.

OEE = Availability x Performance x Quality

1. Availability Calculation

The availability of a machine refers to the time it actually operates for compared to the planned production time.

For the planned production time, things like duration of shifts and breaks are taken into account.

The time the machine actually operates for is usually less than the planned time due to multiple, varying factors that range from human issues to even machine breakdowns, all of which have to be properly calculated here.

You might decide not to include some type of downtime in your calculation, the important thing, however, is to be consistent and to always factor in stoppages the same way.

Availability % = Operating Time / Planned Production Time

Both the operating time and the planned time should be expressed in minutes.

1.1. Calculating availability in Ubidots

For our example, we’re assuming the following data setup:

  • Status variable: Every minute a machine sends the value “1” to an Ubidots variable called “status”.

  • Downtime variable: Oftentimes a machine might keep running without actually producing, which can disrupt the results; this is why we also keep track of that type of downtime by logging it with a Manual Input widget once a day.

  • Planned production per day: We’ll assume a fixed number of 480 minutes a day. In a more realistic scenario, you may want to log this variable dynamically based on planned shifts. Such data could be either manually entered, or pulled from an external system. To create custom ETLs and get data from external systems, such as ERPs or MES, into Ubidots, check out our UbiFunctions module.

With these variables, we can calculate machine availability using this synthetic variable expression:

(count(<status>, "1D") - last(<downtime>, "1D")) / 480

The count expression will return the total number of dots within the specified variable in 1 day. Since we know 1 dot equals 1 minute, the result serves as our operating time.

Note:

Every use case is different and your machine might be sending runtime data differently (i.e., a cumulative number of hours). In such cases, you may adjust the synthetic variable accordingly.

2. Performance Calculation

The performance factor points at how well a machine operates by looking at its working speed compared to its optimal speed.

Performance is measured as a percentage and takes into account all the output of the machine, including scraps. The easiest way to calculate the performance factor is to compare the actual quantity produced to the capacity of the machine.

Performance % = Total Produced / Capacity

2.1. Calculating performance in Ubidots

Continuing with our example, let’s assume the following data setup:

  • Output variable: Every hour our machine sends the amount of produced units to an Ubidots variable called “output per hour”. This would not be a cumulative counter and would reset every hour.

  • Machine capacity: We’ll assume a fixed capacity of 460 units per day. In a more realistic scenario, you may want to log this variable dynamically based on planned production figures. Such data could be either manually entered, or pulled from an external system. To create custom ETLs (Extract, Transform, Load) and get data from external systems, such as Enterprise Resource Planning (ERPs) or Manufacturing Execution Systems (MES), into Ubidots, check out our UbiFunctions module.

We would then create a synthetic variable with the following formula:

sum(<output>, “1D”) / 460

The sum expression adds all the values of the selected variable in the defined range of time.

Note:

Every use case is different and your machine might be sending output data differently (i.e., every minute, or cumulative number). In such cases, you may adjust the synthetic variable accordingly.

3. Quality Calculation

The quality factor, as the name suggests, cares about the produced units that can actually be sold/used compared to the total output of the machine.

Quality % = (Total Produced – Total Scrap) / Total Produced

3.1. Calculating quality in Ubidots

Let’s assume the following data setup:

  • Output variable: The same variable used in the “Performance” calculation.

  • Scrap variable: The number of scrap units each machine produces would be logged manually by the operators using a Manual Input widget in Ubidots. The scrap value is logged once a day, so we can use the last expression in our synthetic variable.

    • In a more sophisticated scenario, the scrap counter could be automated by using computer vision systems to determine if a produced unit is defective or not.

This is how our synthetic variable would look like:

(sum(<output>, "1D") - last(<scrap>, "1D")) / sum(<output>, "1D")

4. OEE Calculation

Once we have the availability, performance, and quality indicators, calculating the OEE is very easy. However, even this can be calculated in Ubidots with Synthetic Variables.

  • The OEE formula is Availability x Performance x Quality = OEE

  • The synthetic variable we’ll use is <availability> * <performance> * <quality> * 100

That’s it, the OEE of our machine was 77.7%.

Did this answer your question?