Refactored Zigbee attribute listener
This commit is contained in:
parent
3a49b15dea
commit
8d9896f8b4
2 changed files with 22 additions and 34 deletions
|
|
@ -42,8 +42,7 @@ public class HalZigbeeController implements HalSensorController,
|
|||
HalScannableController,
|
||||
ZigBeeAnnounceListener,
|
||||
ZigBeeNetworkNodeListener,
|
||||
ZigBeeNetworkEndpointListener,
|
||||
ZclAttributeListener {
|
||||
ZigBeeNetworkEndpointListener {
|
||||
|
||||
private static final Logger logger = LogUtil.getLogger();
|
||||
|
||||
|
|
@ -226,7 +225,7 @@ public class HalZigbeeController implements HalSensorController,
|
|||
node.addNetworkEndpointListener(this);
|
||||
logger.fine("[Node: " + node.getIeeeAddress() + "]: Node has been registered: " +
|
||||
"Manufacturer=" + node.getNodeDescriptor().getManufacturerCode() +
|
||||
"Type=" + node.getNodeDescriptor().getLogicalType());
|
||||
", Type=" + node.getNodeDescriptor().getLogicalType());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -251,8 +250,11 @@ public class HalZigbeeController implements HalSensorController,
|
|||
for (int inputClusterId : endpoint.getInputClusterIds()) {
|
||||
ZigbeeHalDeviceConfig config = createDeviceConfig(inputClusterId);
|
||||
|
||||
if (config != null)
|
||||
if (config != null) {
|
||||
registerCluster(endpoint, config);
|
||||
} else {
|
||||
logger.finest("[Node: " + endpoint.getIeeeAddress() + "] Cluster ID '" + inputClusterId + "' is not supported.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -267,11 +269,20 @@ public class HalZigbeeController implements HalSensorController,
|
|||
return null;
|
||||
}
|
||||
|
||||
private void registerCluster(ZigBeeEndpoint endpoint, ZigbeeHalDeviceConfig config) {
|
||||
ZclCluster cluster = endpoint.getInputCluster(config.getZigbeeClusterId());
|
||||
private void registerCluster(final ZigBeeEndpoint endpoint, ZigbeeHalDeviceConfig config) {
|
||||
final ZclCluster cluster = endpoint.getInputCluster(config.getZigbeeClusterId());
|
||||
if (cluster != null) {
|
||||
config.setZigbeeNodeAddress(endpoint.getIeeeAddress());
|
||||
cluster.addAttributeListener(this);
|
||||
|
||||
cluster.addAttributeListener(new ZclAttributeListener() {
|
||||
@Override
|
||||
public void attributeUpdated(ZclAttribute attribute, Object value) {
|
||||
if (deviceListener != null) {
|
||||
logger.finer("[Node: " + endpoint.getIeeeAddress() + ", Endpoint: " + endpoint.getEndpointId() + ", Cluster: " + attribute.getCluster().getId() + "] Attribute updated: attribute_name=" + attribute.getName() + ", value=" + attribute.getLastValue());
|
||||
deviceListener.reportReceived(config, config.getDeviceData(attribute));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// // TODO: Notify listener that a device is online
|
||||
if (deviceListener != null)
|
||||
|
|
@ -284,22 +295,6 @@ public class HalZigbeeController implements HalSensorController,
|
|||
logger.fine("[Node: " + endpoint.getIeeeAddress() + ", Endpoint: " + endpoint.getEndpointId() + "]: Endpoint removed: " + endpoint);
|
||||
}
|
||||
|
||||
// ------------------------------------------
|
||||
// Zigbee Cluster Attribute Methods
|
||||
// ------------------------------------------
|
||||
|
||||
@Override
|
||||
public void attributeUpdated(ZclAttribute attribute, Object value) {
|
||||
if (deviceListener != null) {
|
||||
ZigbeeHalDeviceConfig config = createDeviceConfig(attribute.getCluster().getId());
|
||||
|
||||
if (config != null)
|
||||
deviceListener.reportReceived(config, config.getDeviceData(attribute));
|
||||
else
|
||||
logger.severe("Cluster ID (" + attribute.getCluster().getId() + ") is not supported but a listener was added.");
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------------
|
||||
// Hal Overrides
|
||||
// ------------------------------------------
|
||||
|
|
|
|||
|
|
@ -27,14 +27,9 @@ package se.hal.plugin.zigbee;
|
|||
import com.zsmartsystems.zigbee.IeeeAddress;
|
||||
import com.zsmartsystems.zigbee.database.ZigBeeNetworkDataStore;
|
||||
import com.zsmartsystems.zigbee.database.ZigBeeNodeDao;
|
||||
import com.zsmartsystems.zigbee.zdo.field.BindingTable;
|
||||
import zutil.StringUtil;
|
||||
import zutil.converter.Converter;
|
||||
import zutil.log.LogUtil;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
|
|
@ -52,28 +47,26 @@ public class ZigBeeDataStore implements ZigBeeNetworkDataStore {
|
|||
|
||||
@Override
|
||||
public ZigBeeNodeDao readNode(IeeeAddress address) {
|
||||
System.out.println("ZigBeeDataStore.readNetworkNodes(" + address + ")");
|
||||
|
||||
return devices.get(address);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeNode(ZigBeeNodeDao node) {
|
||||
System.out.println("ZigBeeDataStore.writeNode(" +
|
||||
logger.fine("[Node: " + node.getIeeeAddress() + "] Storing Zigbee Node in DB: " +
|
||||
"IeeAddr: " + node.getIeeeAddress() + ", " +
|
||||
"NetAddr: " + node.getNetworkAddress() + ", " +
|
||||
"binding: " + node.getBindingTable() + ", " +
|
||||
"description: " + node.getNodeDescriptor() + ", " +
|
||||
"endpoints: " + node.getEndpoints() + ", " +
|
||||
"Power: " + node.getPowerDescriptor() + ", " +
|
||||
")");
|
||||
"Power: " + node.getPowerDescriptor()
|
||||
);
|
||||
|
||||
devices.put(node.getIeeeAddress(), node);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeNode(IeeeAddress address) {
|
||||
System.out.println("ZigBeeDataStore.removeNode(" + address + ")");
|
||||
logger.fine("[Node: " + address + "] Removing Node from DB.");
|
||||
|
||||
devices.remove(address);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue