@Override public PowerConsumptionState getPowerConsumptionState(final UnitType unitType) throws NotAvailableException { double consumptionSum = 0; double averageCurrent = 0; double averageVoltage = 0; long timestamp = 0; Collection<PowerConsumptionStateProviderService> powerConsumptionStateProviderServices = getServices(unitType); int amount = powerConsumptionStateProviderServices.size(); for (PowerConsumptionStateProviderService service : powerConsumptionStateProviderServices) { if (!((UnitRemote) service).isDataAvailable()) { amount--; continue; } consumptionSum += service.getPowerConsumptionState().getConsumption(); averageCurrent += service.getPowerConsumptionState().getCurrent(); averageVoltage += service.getPowerConsumptionState().getVoltage(); timestamp = Math.max(timestamp, service.getPowerConsumptionState().getTimestamp().getTime()); } averageCurrent = averageCurrent / amount; averageVoltage = averageVoltage / amount; return TimestampProcessor.updateTimestamp(timestamp, PowerConsumptionState.newBuilder().setConsumption(consumptionSum).setCurrent(averageCurrent).setVoltage(averageVoltage), TimeUnit.MICROSECONDS, logger).build(); } }
/** * OpenHAB receives the value for the current in milli ampere and therefore * must be transformed. * * @param value the new value for the current in mA * @return a PowerConsumptionState with the given current and a voltage of * 230V */ public static PowerConsumptionState transform(final Double value) { PowerConsumptionState.Builder state = PowerConsumptionState.newBuilder(); state.setCurrent(value / MILLITOAMPERE); state.setVoltage(DEFAULTVOLTAGE); state.setConsumption(state.getCurrent() * state.getVoltage()); return state.build(); }