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,
|
HalScannableController,
|
||||||
ZigBeeAnnounceListener,
|
ZigBeeAnnounceListener,
|
||||||
ZigBeeNetworkNodeListener,
|
ZigBeeNetworkNodeListener,
|
||||||
ZigBeeNetworkEndpointListener,
|
ZigBeeNetworkEndpointListener {
|
||||||
ZclAttributeListener {
|
|
||||||
|
|
||||||
private static final Logger logger = LogUtil.getLogger();
|
private static final Logger logger = LogUtil.getLogger();
|
||||||
|
|
||||||
|
|
@ -226,7 +225,7 @@ public class HalZigbeeController implements HalSensorController,
|
||||||
node.addNetworkEndpointListener(this);
|
node.addNetworkEndpointListener(this);
|
||||||
logger.fine("[Node: " + node.getIeeeAddress() + "]: Node has been registered: " +
|
logger.fine("[Node: " + node.getIeeeAddress() + "]: Node has been registered: " +
|
||||||
"Manufacturer=" + node.getNodeDescriptor().getManufacturerCode() +
|
"Manufacturer=" + node.getNodeDescriptor().getManufacturerCode() +
|
||||||
"Type=" + node.getNodeDescriptor().getLogicalType());
|
", Type=" + node.getNodeDescriptor().getLogicalType());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -251,8 +250,11 @@ public class HalZigbeeController implements HalSensorController,
|
||||||
for (int inputClusterId : endpoint.getInputClusterIds()) {
|
for (int inputClusterId : endpoint.getInputClusterIds()) {
|
||||||
ZigbeeHalDeviceConfig config = createDeviceConfig(inputClusterId);
|
ZigbeeHalDeviceConfig config = createDeviceConfig(inputClusterId);
|
||||||
|
|
||||||
if (config != null)
|
if (config != null) {
|
||||||
registerCluster(endpoint, config);
|
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;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void registerCluster(ZigBeeEndpoint endpoint, ZigbeeHalDeviceConfig config) {
|
private void registerCluster(final ZigBeeEndpoint endpoint, ZigbeeHalDeviceConfig config) {
|
||||||
ZclCluster cluster = endpoint.getInputCluster(config.getZigbeeClusterId());
|
final ZclCluster cluster = endpoint.getInputCluster(config.getZigbeeClusterId());
|
||||||
if (cluster != null) {
|
if (cluster != null) {
|
||||||
config.setZigbeeNodeAddress(endpoint.getIeeeAddress());
|
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
|
// // TODO: Notify listener that a device is online
|
||||||
if (deviceListener != null)
|
if (deviceListener != null)
|
||||||
|
|
@ -284,22 +295,6 @@ public class HalZigbeeController implements HalSensorController,
|
||||||
logger.fine("[Node: " + endpoint.getIeeeAddress() + ", Endpoint: " + endpoint.getEndpointId() + "]: Endpoint removed: " + endpoint);
|
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
|
// Hal Overrides
|
||||||
// ------------------------------------------
|
// ------------------------------------------
|
||||||
|
|
|
||||||
|
|
@ -27,14 +27,9 @@ package se.hal.plugin.zigbee;
|
||||||
import com.zsmartsystems.zigbee.IeeeAddress;
|
import com.zsmartsystems.zigbee.IeeeAddress;
|
||||||
import com.zsmartsystems.zigbee.database.ZigBeeNetworkDataStore;
|
import com.zsmartsystems.zigbee.database.ZigBeeNetworkDataStore;
|
||||||
import com.zsmartsystems.zigbee.database.ZigBeeNodeDao;
|
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 zutil.log.LogUtil;
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
|
@ -52,28 +47,26 @@ public class ZigBeeDataStore implements ZigBeeNetworkDataStore {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ZigBeeNodeDao readNode(IeeeAddress address) {
|
public ZigBeeNodeDao readNode(IeeeAddress address) {
|
||||||
System.out.println("ZigBeeDataStore.readNetworkNodes(" + address + ")");
|
|
||||||
|
|
||||||
return devices.get(address);
|
return devices.get(address);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeNode(ZigBeeNodeDao node) {
|
public void writeNode(ZigBeeNodeDao node) {
|
||||||
System.out.println("ZigBeeDataStore.writeNode(" +
|
logger.fine("[Node: " + node.getIeeeAddress() + "] Storing Zigbee Node in DB: " +
|
||||||
"IeeAddr: " + node.getIeeeAddress() + ", " +
|
"IeeAddr: " + node.getIeeeAddress() + ", " +
|
||||||
"NetAddr: " + node.getNetworkAddress() + ", " +
|
"NetAddr: " + node.getNetworkAddress() + ", " +
|
||||||
"binding: " + node.getBindingTable() + ", " +
|
"binding: " + node.getBindingTable() + ", " +
|
||||||
"description: " + node.getNodeDescriptor() + ", " +
|
"description: " + node.getNodeDescriptor() + ", " +
|
||||||
"endpoints: " + node.getEndpoints() + ", " +
|
"endpoints: " + node.getEndpoints() + ", " +
|
||||||
"Power: " + node.getPowerDescriptor() + ", " +
|
"Power: " + node.getPowerDescriptor()
|
||||||
")");
|
);
|
||||||
|
|
||||||
devices.put(node.getIeeeAddress(), node);
|
devices.put(node.getIeeeAddress(), node);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void removeNode(IeeeAddress address) {
|
public void removeNode(IeeeAddress address) {
|
||||||
System.out.println("ZigBeeDataStore.removeNode(" + address + ")");
|
logger.fine("[Node: " + address + "] Removing Node from DB.");
|
||||||
|
|
||||||
devices.remove(address);
|
devices.remove(address);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue