/** @{inheritDoc */ @Override public void updated(Dictionary<String, ?> config) throws ConfigurationException { if (config == null || config.isEmpty()) { logger.warn("Empty or null configuration. Ignoring."); return; } Set<String> names = getNames(config); for (String name : names) { String value = (String) config.get(name + ".serialPort"); String serialPort = value != null ? value : MeterConfig.DEFAULT_SERIAL_PORT; value = (String) config.get(name + ".baudRateChangeDelay"); int baudRateChangeDelay = value != null ? Integer.valueOf(value) : MeterConfig.DEFAULT_BAUD_RATE_CHANGE_DELAY; value = (String) config.get(name + ".echoHandling"); boolean echoHandling = value != null ? Boolean.valueOf(value) : MeterConfig.DEFAULT_ECHO_HANDLING; Meter meterConfig = createIec6205621MeterConfig( name, new MeterConfig(serialPort, baudRateChangeDelay, echoHandling)); if (meterDeviceConfigurtions.put(meterConfig.getName(), meterConfig) != null) { logger.info( "Recreated reader {} with {}!", meterConfig.getName(), meterConfig.getConfig()); } else { logger.info("Created reader {} with {}!", meterConfig.getName(), meterConfig.getConfig()); } } if (config != null) { // to override the default refresh interval one has to add a // parameter to openhab.cfg like // <bindingName>:refresh=<intervalInMs> if (StringUtils.isNotBlank((String) config.get("refresh"))) { refreshInterval = Long.parseLong((String) config.get("refresh")); } setProperlyConfigured(true); } }
/** @{inheritDoc */ @Override protected void execute() { // the frequently executed code (polling) goes here ... Map<String, Map<String, DataSet>> cache = new HashMap<String, Map<String, DataSet>>(); for (Iec6205621MeterBindingProvider provider : providers) { for (String itemName : provider.getItemNames()) { for (Entry<String, Meter> entry : meterDeviceConfigurtions.entrySet()) { Meter reader = entry.getValue(); String meterName = provider.getMeterName(itemName); if (meterName != null && meterName.equals(entry.getKey())) { Map<String, DataSet> dataSets; if ((dataSets = cache.get(meterName)) == null) { if (logger.isDebugEnabled()) logger.debug( "Read meter: " + meterName + "; " + reader.getConfig().getSerialPort()); dataSets = reader.read(); cache.put(meterName, dataSets); } String obis = provider.getObis(itemName); if (obis != null && dataSets.containsKey(obis)) { DataSet dataSet = dataSets.get(obis); if (logger.isDebugEnabled()) logger.debug( "Updateing item " + itemName + " with OBIS code " + obis + " and value " + dataSet.getValue()); Class<? extends Item> itemType = provider.getItemType(itemName); if (itemType.isAssignableFrom(NumberItem.class)) { eventPublisher.postUpdate(itemName, new DecimalType(dataSet.getValue())); } if (itemType.isAssignableFrom(StringItem.class)) { String value = dataSet.getValue(); eventPublisher.postUpdate(itemName, new StringType(value)); } } } } } } }