diff --git a/hal-core/src/se/hal/SensorControllerManager.java b/hal-core/src/se/hal/SensorControllerManager.java index 632bfa2f..14726c10 100644 --- a/hal-core/src/se/hal/SensorControllerManager.java +++ b/hal-core/src/se/hal/SensorControllerManager.java @@ -26,7 +26,7 @@ public class SensorControllerManager extends HalAbstractControllerManager registeredSensors = Collections.synchronizedList(new ArrayList<>()); - /** List of auto detected sensors **/ + /** List of auto-detected sensors **/ private List detectedSensors = Collections.synchronizedList(new ArrayList<>()); @@ -122,7 +122,7 @@ public class SensorControllerManager extends HalAbstractControllerManager getPossibleValues() { - return new ArrayList(events.keySet()); + return new ArrayList<>(events.keySet()); } @Override diff --git a/plugins/hal-zigbee/src/se/hal/plugin/zigbee/ZigbeeController.java b/plugins/hal-zigbee/src/se/hal/plugin/zigbee/ZigbeeController.java index 0fb9ac09..29b259d1 100644 --- a/plugins/hal-zigbee/src/se/hal/plugin/zigbee/ZigbeeController.java +++ b/plugins/hal-zigbee/src/se/hal/plugin/zigbee/ZigbeeController.java @@ -318,8 +318,12 @@ public class ZigbeeController implements HalSensorController, @Override public void attributeUpdated(ZclAttribute attribute, Object value) { logger.finer("[Node: " + endpoint.getIeeeAddress() + ", Endpoint: " + endpoint.getEndpointId() + ", Cluster: " + attribute.getCluster().getId() + "] Attribute " + config.getClass().getSimpleName() + " updated: id=" + attribute.getId() + ", attribute_name=" + attribute.getName() + ", value=" + attribute.getLastValue()); - for (HalDeviceReportListener deviceListener : deviceListeners) { - deviceListener.reportReceived(config, config.getDeviceData(attribute)); + + HalDeviceData data = config.getDeviceData(attribute); + if (data != null) { + for (HalDeviceReportListener deviceListener : deviceListeners) { + deviceListener.reportReceived(config, data); + } } } }); diff --git a/plugins/hal-zigbee/src/se/hal/plugin/zigbee/device/ZigbeeHalDeviceConfig.java b/plugins/hal-zigbee/src/se/hal/plugin/zigbee/device/ZigbeeHalDeviceConfig.java index c28bce30..38b2914e 100644 --- a/plugins/hal-zigbee/src/se/hal/plugin/zigbee/device/ZigbeeHalDeviceConfig.java +++ b/plugins/hal-zigbee/src/se/hal/plugin/zigbee/device/ZigbeeHalDeviceConfig.java @@ -56,8 +56,8 @@ public abstract class ZigbeeHalDeviceConfig implements HalDeviceConfig { public void initialize(ZclCluster cluster) {} /** - * @param zclAttribute - * @return a HalDeviceData object containing the same value representation as the endpoint. + * @param zclAttribute is the object that should be mapped to a HalDeviceFata object. + * @return a HalDeviceData object containing the same value representation as the endpoint or null if this attribute is not translatable. */ public abstract HalDeviceData getDeviceData(ZclAttribute zclAttribute); diff --git a/plugins/hal-zigbee/src/se/hal/plugin/zigbee/device/ZigbeeHumidityConfig.java b/plugins/hal-zigbee/src/se/hal/plugin/zigbee/device/ZigbeeHumidityConfig.java index 40b40599..fc9ace3a 100644 --- a/plugins/hal-zigbee/src/se/hal/plugin/zigbee/device/ZigbeeHumidityConfig.java +++ b/plugins/hal-zigbee/src/se/hal/plugin/zigbee/device/ZigbeeHumidityConfig.java @@ -18,7 +18,8 @@ public class ZigbeeHumidityConfig extends ZigbeeHalDeviceConfig implements HalSe @Override public HalDeviceData getDeviceData(ZclAttribute zclAttribute) { - if (zclAttribute.getId() == ZclRelativeHumidityMeasurementCluster.ATTR_MEASUREDVALUE) + if (zclAttribute.getCluster().getId() == getZigbeeClusterId() && + zclAttribute.getId() == ZclRelativeHumidityMeasurementCluster.ATTR_MEASUREDVALUE) return new HumiditySensorData( ((int) zclAttribute.getLastValue()) / 100.0, zclAttribute.getLastReportTime().getTimeInMillis()); diff --git a/plugins/hal-zigbee/src/se/hal/plugin/zigbee/device/ZigbeeOnOffConfig.java b/plugins/hal-zigbee/src/se/hal/plugin/zigbee/device/ZigbeeOnOffConfig.java index 091e6ce8..85b20042 100644 --- a/plugins/hal-zigbee/src/se/hal/plugin/zigbee/device/ZigbeeOnOffConfig.java +++ b/plugins/hal-zigbee/src/se/hal/plugin/zigbee/device/ZigbeeOnOffConfig.java @@ -41,7 +41,8 @@ public class ZigbeeOnOffConfig extends ZigbeeHalEventDeviceConfig implements Hal @Override public HalDeviceData getDeviceData(ZclAttribute zclAttribute) { - if (zclAttribute.getId() == ZclOnOffCluster.ATTR_ONOFF) + if (zclAttribute.getCluster().getId() == getZigbeeClusterId() && + zclAttribute.getId() == ZclOnOffCluster.ATTR_ONOFF) return new OnOffEventData( (boolean) zclAttribute.getLastValue(), zclAttribute.getLastReportTime().getTimeInMillis()); diff --git a/plugins/hal-zigbee/src/se/hal/plugin/zigbee/device/ZigbeePressureConfig.java b/plugins/hal-zigbee/src/se/hal/plugin/zigbee/device/ZigbeePressureConfig.java index 08ce3d6c..b375b2ed 100644 --- a/plugins/hal-zigbee/src/se/hal/plugin/zigbee/device/ZigbeePressureConfig.java +++ b/plugins/hal-zigbee/src/se/hal/plugin/zigbee/device/ZigbeePressureConfig.java @@ -19,7 +19,8 @@ public class ZigbeePressureConfig extends ZigbeeHalDeviceConfig implements HalSe @Override public HalDeviceData getDeviceData(ZclAttribute zclAttribute) { - if (zclAttribute.getId() == ZclTemperatureMeasurementCluster.ATTR_MAXMEASUREDVALUE) + if (zclAttribute.getCluster().getId() == getZigbeeClusterId() && + zclAttribute.getId() == ZclTemperatureMeasurementCluster.ATTR_MAXMEASUREDVALUE) return new PressureSensorData( (int) zclAttribute.getLastValue(), zclAttribute.getLastReportTime().getTimeInMillis()); diff --git a/plugins/hal-zigbee/src/se/hal/plugin/zigbee/device/ZigbeeTemperatureConfig.java b/plugins/hal-zigbee/src/se/hal/plugin/zigbee/device/ZigbeeTemperatureConfig.java index 9db529bb..a093e4f7 100644 --- a/plugins/hal-zigbee/src/se/hal/plugin/zigbee/device/ZigbeeTemperatureConfig.java +++ b/plugins/hal-zigbee/src/se/hal/plugin/zigbee/device/ZigbeeTemperatureConfig.java @@ -18,7 +18,8 @@ public class ZigbeeTemperatureConfig extends ZigbeeHalDeviceConfig implements Ha @Override public HalDeviceData getDeviceData(ZclAttribute zclAttribute) { - if (zclAttribute.getId() == ZclTemperatureMeasurementCluster.ATTR_MEASUREDVALUE) + if (zclAttribute.getCluster().getId() == getZigbeeClusterId() && + zclAttribute.getId() == ZclTemperatureMeasurementCluster.ATTR_MEASUREDVALUE) return new TemperatureSensorData( ((int) zclAttribute.getLastValue()) / 100.0, zclAttribute.getLastReportTime().getTimeInMillis());