Downgraded zigbee framework to work with CC2531 dongle

This commit is contained in:
Ziver Koc 2021-06-06 04:33:28 +02:00
parent d68c3cae54
commit 132bd3b29d
9 changed files with 107 additions and 41 deletions

View file

@ -1,5 +1,5 @@
dependencies {
def ZIGBEE_LIB_VERSION = "1.3.11"
def ZIGBEE_LIB_VERSION = "1.3.8"
implementation project(':hal-core')

View file

@ -19,6 +19,7 @@ import com.zsmartsystems.zigbee.zcl.clusters.*;
import com.zsmartsystems.zigbee.zdo.field.NodeDescriptor;
import se.hal.HalContext;
import se.hal.intf.*;
import zutil.Timer;
import zutil.log.LogUtil;
import java.util.HashSet;
@ -32,7 +33,8 @@ public class HalZigbeeController implements HalSensorController,
HalEventController,
HalAutoScannableController,
ZigBeeAnnounceListener,
ZigBeeNetworkNodeListener {
ZigBeeNetworkNodeListener,
HalScannableController {
private static final Logger logger = LogUtil.getLogger();
@ -47,6 +49,7 @@ public class HalZigbeeController implements HalSensorController,
private ZigBeeDataStore dataStore;
protected ZigBeeNetworkManager networkManager;
private Timer permitJoinTimer;
private HalDeviceReportListener deviceListener;
private List<HalAbstractDevice> registeredDevices;
@ -92,23 +95,17 @@ public class HalZigbeeController implements HalSensorController,
// Startup Network
// ------------------------
networkManager.setDefaultProfileId(ZigBeeProfileType.ZIGBEE_HOME_AUTOMATION.getKey());
networkManager.setZigBeeLinkKey(new ZigBeeKey(new int[] { // Add the default ZigBeeAlliance09 HA link key
0x5A, 0x69, 0x67, 0x42, 0x65, 0x65, 0x41, 0x6C, 0x6C, 0x69, 0x61, 0x6E, 0x63, 0x65, 0x30, 0x39 }));
networkManager.setZigBeeNetworkKey(new ZigBeeKey("552FAAF9B5F49E75F1ADDA12215C2CA1")); // ZigBeeKey.createRandom();
networkManager.setZigBeeChannel(ZigBeeChannel.create(11));
networkManager.setZigBeePanId(65534); // (int) Math.floor((Math.random() * 65534));
networkManager.setZigBeeExtendedPanId(new ExtendedPanId("00124B001CCE1B5F")); // ExtendedPanId.createRandom();
//transportOptions.addOption(TransportConfigOption.TRUST_CENTRE_JOIN_MODE, TrustCentreJoinMode.TC_JOIN_INSECURE); // TC_JOIN_SECURE
dongle.updateTransportConfig(transportOptions);
// Register extensions
ZigBeeDiscoveryExtension discoveryExtension = new ZigBeeDiscoveryExtension();
discoveryExtension.setUpdatePeriod(86400); // in seconds, 24h
networkManager.addExtension(discoveryExtension);
networkManager.addExtension(new ZigBeeOtaUpgradeExtension());
networkManager.addExtension(new ZigBeeDiscoveryExtension());
networkManager.addExtension(new ZigBeeIasCieExtension());
// Register clusters
networkManager.addSupportedClientCluster(ZclBasicCluster.CLUSTER_ID);
networkManager.addSupportedClientCluster(ZclIdentifyCluster.CLUSTER_ID);
networkManager.addSupportedClientCluster(ZclGroupsCluster.CLUSTER_ID);
@ -136,6 +133,19 @@ public class HalZigbeeController implements HalSensorController,
networkManager.addSupportedServerCluster(ZclWindowCoveringCluster.CLUSTER_ID);
networkManager.addSupportedServerCluster(ZclBinaryInputBasicCluster.CLUSTER_ID);
// Configure network
networkManager.setDefaultProfileId(ZigBeeProfileType.ZIGBEE_HOME_AUTOMATION.getKey());
networkManager.setZigBeeNetworkKey(ZigBeeKey.createRandom());//new ZigBeeKey("552FAAF9B5F49E75F1ADDA12215C2CA1")); // ZigBeeKey.createRandom();
networkManager.setZigBeeLinkKey(new ZigBeeKey(new int[] { // Add the default ZigBeeAlliance09 HA link key
0x5A, 0x69, 0x67, 0x42, 0x65, 0x65, 0x41, 0x6C, 0x6C, 0x69, 0x61, 0x6E, 0x63, 0x65, 0x30, 0x39 }));
networkManager.setZigBeeChannel(ZigBeeChannel.create(11));
networkManager.setZigBeePanId(65534); // (int) Math.floor((Math.random() * 65534));
networkManager.setZigBeeExtendedPanId(new ExtendedPanId("00124B001CCE1B5F")); // ExtendedPanId.createRandom();
//transportOptions.addOption(TransportConfigOption.TRUST_CENTRE_JOIN_MODE, TrustCentreJoinMode.TC_JOIN_INSECURE); // TC_JOIN_SECURE
dongle.updateTransportConfig(transportOptions);
// Startup Network
logger.info("Starting up ZigBee Network...");
@ -148,9 +158,7 @@ public class HalZigbeeController implements HalSensorController,
case ZIGBEE_DONGLE_CC2531:
HashSet<Integer> clusters = new HashSet<>();
clusters.add(ZclIasZoneCluster.CLUSTER_ID);
transportOptions.addOption(TransportConfigOption.SUPPORTED_OUTPUT_CLUSTERS, clusters);
transportOptions.addOption(TransportConfigOption.RADIO_TX_POWER, 3);
return new ZigBeeDongleTiCc2531(serialPort);
case ZIGBEE_DONGLE_CONBEE:
@ -244,4 +252,16 @@ public class HalZigbeeController implements HalSensorController,
public void setListener(HalDeviceReportListener listener) {
deviceListener = listener;
}
@Override
public void startScan() {
networkManager.permitJoin(120);
permitJoinTimer = new Timer(120_000);
permitJoinTimer.start();
}
@Override
public boolean isScanning() {
return permitJoinTimer != null && !permitJoinTimer.hasTimedOut();
}
}

View file

@ -27,9 +27,14 @@ 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;
@ -40,6 +45,36 @@ public class ZigBeeDataStore implements ZigBeeNetworkDataStore {
private HashMap<IeeeAddress,ZigBeeNodeDao> devices = new HashMap<>();
public ZigBeeDataStore() {
/*ZigBeeNodeDao controller = new ZigBeeNodeDao();
controller.setIeeeAddress(new IeeeAddress("00124B001CCE1B5F"));
controller.setNetworkAddress(0);
controller.setBindingTable(new HashSet<>());
controller.setEndpoints(Collections.EMPTY_LIST);
controller.setNodeDescriptor(null);
controller.setPowerDescriptor(null);
writeNode(controller);
ZigBeeNodeDao ikeaOutlet = new ZigBeeNodeDao();
ikeaOutlet.setIeeeAddress(new IeeeAddress("00158D000488A47F"));
ikeaOutlet.setNetworkAddress(10697);
ikeaOutlet.setBindingTable(new HashSet<>());
ikeaOutlet.setEndpoints(Collections.EMPTY_LIST);
ikeaOutlet.setNodeDescriptor(null);
ikeaOutlet.setPowerDescriptor(null);
writeNode(ikeaOutlet);
ZigBeeNodeDao aquaraTemp = new ZigBeeNodeDao();
aquaraTemp.setIeeeAddress(new IeeeAddress("842E14FFFE63AE4B"));
aquaraTemp.setNetworkAddress(52953);
aquaraTemp.setBindingTable(new HashSet<>());
aquaraTemp.setEndpoints(Collections.EMPTY_LIST);
aquaraTemp.setNodeDescriptor(null);
aquaraTemp.setPowerDescriptor(null);
writeNode(aquaraTemp);*/
}
@Override
public Set<IeeeAddress> readNetworkNodes() {
return devices.keySet();
@ -56,11 +91,11 @@ public class ZigBeeDataStore implements ZigBeeNetworkDataStore {
public void writeNode(ZigBeeNodeDao node) {
System.out.println("ZigBeeDataStore.writeNode(" +
"IeeAddr: " + node.getIeeeAddress() + ", " +
"binding: "+node.getBindingTable()+", " +
"description: "+node.getNodeDescriptor()+", " +
"endpoints: "+node.getEndpoints()+", " +
"NetAddr: "+node.getNetworkAddress()+", " +
"Power: "+node.getPowerDescriptor()+", " +
"NetAddr: " + node.getNetworkAddress() + ", " +
"binding: " + node.getBindingTable() + ", " +
"description: " + node.getNodeDescriptor() + ", " +
"endpoints: " + node.getEndpoints() + ", " +
"Power: " + node.getPowerDescriptor() + ", " +
")");
devices.put(node.getIeeeAddress(), node);

View file

@ -132,8 +132,11 @@ public class ZigBeeJSerialCommPort implements ZigBeePort {
serialPort = SerialPort.getCommPort(portName);
serialPort.setBaudRate(baudRate);
serialPort.setNumDataBits(8);
serialPort.setNumStopBits(SerialPort.ONE_STOP_BIT);
serialPort.setParity(SerialPort.NO_PARITY);
serialPort.setComPortTimeouts(
SerialPort.TIMEOUT_READ_BLOCKING, 0, 0);
SerialPort.TIMEOUT_READ_SEMI_BLOCKING, 0, 0);
if (!serialPort.openPort()) {
throw new RuntimeException("Error opening serial port: " + portName);

View file

@ -42,7 +42,7 @@ public class HalZigbeeControllerTest {
LogUtil.setGlobalLevel(Level.ALL);
HalZigbeeController controller = new HalZigbeeController();
controller.initialize("COM5", HalZigbeeController.ZIGBEE_DONGLE_CC2531);
controller.initialize("COM3", HalZigbeeController.ZIGBEE_DONGLE_CC2531);
handleConsoleInput('h', controller.networkManager);
@ -67,7 +67,7 @@ public class HalZigbeeControllerTest {
case 'l':
for (ZigBeeNode node : networkManager.getNodes()) {
System.out.println(node);
System.out.println(node + " (" + node.getNodeState() + ")");
for (ZigBeeEndpoint endpoint : node.getEndpoints()) {
System.out.println(" - " + endpoint);