Downgraded zigbee framework to work with CC2531 dongle
This commit is contained in:
parent
d68c3cae54
commit
132bd3b29d
9 changed files with 107 additions and 41 deletions
|
|
@ -1,5 +1,5 @@
|
|||
dependencies {
|
||||
def ZIGBEE_LIB_VERSION = "1.3.11"
|
||||
def ZIGBEE_LIB_VERSION = "1.3.8"
|
||||
|
||||
implementation project(':hal-core')
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue