It is not clear how Power Monitoring Expert handles roll over conditions for accumulated values such as energy.
Struxureware Power Monitoring 7.0.1
Power Monitoring Expert 7.2 8.0 8.1
Accumulated values in web reporter
See below for a detailed explanation as to how a rollover is handled in the Dashboards gadgets:
1. Roll-over is only an issue for cumulative topics. For our purposes, a cumulative topic is one whose metadata defines its accumulation type as "cumulative." We normally identify a topic as cumulative because it grows incrementally until it encounters a numeric overflow for its data type, and then resets to zero or near zero.
2. Our general scheme for detecting cumulative roll-over is as follows:
if (currentCumulativeValue / previousCumulativeValue < 0.1)
then we have a roll-over condition
we don't have a roll-over condition
This calculation assumes that the data is sorted by date/time in ascending order. In other words, "previousCumulativeValue" refers to the value which occurs immediately prior in time to "currentCumulativeValue."
3. To display or aggregate cumulative values, we will always turn the cumulative values into "interval" values a.k.a. "deltas." We do this as follows:
(a) Sort series data in ascending order by date/time
(b) For each cumulative value at a given date/time, we calculate the interval value for that date/time by subtracting the prior cumulative value, as follows:
intervalValue = currentCumulativeValue - previousCumulativeValue
For negative energies, this produces negative interval/delta values; for positive energies, it produces positive interval/delta values. Roll-over, meter swap-outs, and meter resets are the things which might upset this scheme. However, as detailed below, we attempt to correct for the roll-over case (but not yet guaranteed for swap-outs and resets).
4. Once detected, our general scheme for correcting cumulative roll-over is as follows:
(a) Obtain the two data points immediately prior to the roll-over point
(b) Calculate the difference between these two prior points and call this value the "prior interval"
(c) Obtain the one data point immediately after the roll-over point
(d) Calculate the difference between the roll-over point and this subsequent point and call this value the "following interval"
(e) Calculate the average of these two intervals with: (priorIntervalValue / 2) + (followingIntervalValue / 2)
(f) Make this average value the "corrected" interval/delta value for the data point at the roll-over point's date/time
Here is an example of an ideal situation in which we correct for roll-over:
Requested date range is from 12:30:00.000 (inclusive) to 13:15:00.000 (exclusive)
Time: 12:00:00.000 Reading: 4000000
Time: 12:15:00.000 Reading: 4000100
Time: 12:30:00.000 Reading: 1000 <== This is our roll-over point...you can see that the value dropped significantly
Time: 12:45:00.000 Reading: 1100
Time: 13:00:00.000 Reading: 1200
Time: 13:15:00.000 Reading: 1300
Note that we have read in some data points (at 12:00:00.000 and 12:15:00.000) prior to our actual requested date range and one (at 13:15:00.000) after our range so that we have enough context to (a) calculate interval/delta values for all data points in our date range, and (b) calculate prior interval values in case our first data point is a roll-over point.
In this case, we detect a roll-over condition at 12:30:00.000 because (1000 / 4000100) < 0.1. As we convert these cumulative values to interval/delta values, we correct for this roll-over condition:
Time: 12:30:00.000 Interval: 100 ==> ((4000100 - 4000000) / 2) + ((1100 - 1000) / 2) <== Roll-over interval calculation
Time: 12:45:00.000 Interval: 100 ==> (1100 - 1000) <== Normal interval calculation
Time: 13:00:00.000 Interval: 100 ==> (1200 - 1100) <== Normal interval calculation
5. Although it is unlikely, it is possible to see different roll-over detection/correction between Dashboards and ION-E. This might occur if you happen to have a roll-over condition at the first sample in a requested date range. In that case, if the previous data points are more than two hours prior to the roll-over date/time, then Dashboards will not detect or correct for roll-over when ION-E will. This is not an error, but merely a difference in capabilities between the two systems.
6. If the context point following a roll-over point is invalid (e.g. double.NaN or database-null) then the corrected roll-over interval value will equal the prior interval value (rather than the average of the prior and subsequent interval values). See Case #2 of the "Rollover User Cases."
7. If the context point preceding a roll-over point is invalid (e.g. double.NaN or database-null) then the corrected roll-over interval value will equal the subsequent interval value (rather than the average of the prior and subsequent interval values). See Case #3 of the "Rollover User Cases."
8. If the context points preceding and following a roll-over point are invalid (e.g. double.NaN or database-null) then we cannot calculate a corrected interval value at the roll-over point, and the interval value at that point is set to double.NaN. See Case #4 of the "Rollover User Cases."
9. If an actual roll-over point is the first point in a requested date/data range, and the preceding data point is invalid (e.g. double.NaN or database-null) then we will not detect or correct for roll-over. See Case #6 of the "Rollover User Cases."
10. If you wish to see interval values calculated from a cumulative topic, then do the following:
(a) Create an instance of the "Trending" gadget
(b) Select a cumulative topic, such as CDM.UnitSymbol.KVARH1 (TopicID=1625)
(c) Select "Yesterday" as the period
(d) Select "By Interval" as the aggregation
The key here is to select a cumulative topic, and a period which allows the "By Interval" aggregation. "By Interval" for a cumulative topic will plot the interval values against the actual time stamps of the data samples. It will not attempt to aggregate values together, which allows you to more readily see the interval values which were calculated from the cumulative ones.