@Override public Double apply(SensorEvent<T> event) { synchronized (lock) { Double current = TypeCoercions.coerce(event.getValue(), Double.class); if (current == null) return null; long eventTime = event.getTimestamp(); long unitMillis = getConfig(DELTA_PERIOD).toMilliseconds(); Double result = null; if (eventTime > 0 && eventTime > lastTime) { if (lastValue == null || lastTime < 0) { // cannot calculate time-based delta with a single value if (LOG.isTraceEnabled()) LOG.trace("{} received event but no last value so will not emit, null -> {} at {}", new Object[] {this, current, eventTime}); } else { double duration = eventTime - lastTime; result = (current - lastValue.doubleValue()) / (duration / unitMillis); } } lastValue = current; lastTime = eventTime; return result; } } };
@Override public void setEntity(EntityLocal entity) { super.setEntity(entity); // Check that sourceSensor has been set (rather than triggerSensors) getRequiredConfig(SOURCE_SENSOR); }
.configure(YamlTimeWeightedDeltaEnricher.TARGET_SENSOR, deltaSensor)); delta.onEvent(newIntSensorEvent(0, 0)); delta.onEvent(newIntSensorEvent(0, 2000)); assertEquals(producer.getAttribute(deltaSensor), 0d); delta.onEvent(newIntSensorEvent(3, 5000)); assertEquals(producer.getAttribute(deltaSensor), 1d); delta.onEvent(newIntSensorEvent(7, 7000)); assertEquals(producer.getAttribute(deltaSensor), 2d); delta.onEvent(newIntSensorEvent(12, 7500)); assertEquals(producer.getAttribute(deltaSensor), 10d); delta.onEvent(newIntSensorEvent(15, 9500)); assertEquals(producer.getAttribute(deltaSensor), 1.5d);
.configure(YamlTimeWeightedDeltaEnricher.TARGET_SENSOR, deltaSensor)); delta.onEvent(newIntSensorEvent(0, 0)); assertEquals(producer.getAttribute(deltaSensor), null); delta.onEvent(newIntSensorEvent(0, 1000)); assertEquals(producer.getAttribute(deltaSensor), 0d); delta.onEvent(newIntSensorEvent(1, 2000)); assertEquals(producer.getAttribute(deltaSensor), 1d); delta.onEvent(newIntSensorEvent(3, 3000)); assertEquals(producer.getAttribute(deltaSensor), 2d); delta.onEvent(newIntSensorEvent(8, 4000)); assertEquals(producer.getAttribute(deltaSensor), 5d);