Fixed device pairing for ZigBee devices, endpoints not working still
This commit is contained in:
parent
3b949b13f7
commit
326d773741
4 changed files with 113 additions and 14 deletions
|
|
@ -2,12 +2,19 @@ package se.hal.plugin.zigbee;
|
|||
|
||||
|
||||
import com.zsmartsystems.zigbee.ZigBeeNetworkManager;
|
||||
import com.zsmartsystems.zigbee.ZigBeeProfileType;
|
||||
import com.zsmartsystems.zigbee.ZigBeeStatus;
|
||||
import com.zsmartsystems.zigbee.app.basic.ZigBeeBasicServerExtension;
|
||||
import com.zsmartsystems.zigbee.app.discovery.ZigBeeDiscoveryExtension;
|
||||
import com.zsmartsystems.zigbee.app.iasclient.ZigBeeIasCieExtension;
|
||||
import com.zsmartsystems.zigbee.app.otaserver.ZigBeeOtaUpgradeExtension;
|
||||
import com.zsmartsystems.zigbee.dongle.cc2531.ZigBeeDongleTiCc2531;
|
||||
import com.zsmartsystems.zigbee.dongle.conbee.ZigBeeDongleConBee;
|
||||
import com.zsmartsystems.zigbee.dongle.xbee.ZigBeeDongleXBee;
|
||||
import com.zsmartsystems.zigbee.transport.ZigBeePort;
|
||||
import com.zsmartsystems.zigbee.transport.ZigBeeTransportTransmit;
|
||||
import com.zsmartsystems.zigbee.security.ZigBeeKey;
|
||||
import com.zsmartsystems.zigbee.serialization.DefaultDeserializer;
|
||||
import com.zsmartsystems.zigbee.serialization.DefaultSerializer;
|
||||
import com.zsmartsystems.zigbee.transport.*;
|
||||
import se.hal.HalContext;
|
||||
import se.hal.intf.*;
|
||||
import se.hal.struct.AbstractDevice;
|
||||
|
|
@ -49,21 +56,58 @@ public class HalZigbeeController implements HalSensorController, HalEventControl
|
|||
serialPort = new ZigBeeJSerialCommPort(comPort);
|
||||
dataStore = new ZigBeeDataStore();
|
||||
|
||||
ZigBeeTransportTransmit dongle = getDongle("CC2531");
|
||||
// ----------------------------
|
||||
// Initialize Transport Network
|
||||
// ----------------------------
|
||||
|
||||
ZigBeeTransportTransmit dongle = getDongle("CC2531", serialPort);
|
||||
networkManager = new ZigBeeNetworkManager(dongle);
|
||||
networkManager.setNetworkDataStore(dataStore);
|
||||
networkManager.setSerializer(DefaultSerializer.class, DefaultDeserializer.class);
|
||||
|
||||
// Initialize Network
|
||||
|
||||
logger.info("Initializing ZigBee Network...");
|
||||
ZigBeeStatus initResponse = networkManager.initialize();
|
||||
System.out.println("NetworkManager.initialize() returned " + initResponse);
|
||||
logger.info("ZigBee Network initialization finished with: " + initResponse);
|
||||
|
||||
if (dongle instanceof ZigBeeDongleTiCc2531) {
|
||||
// ------------------------
|
||||
// Startup Network
|
||||
// ------------------------
|
||||
|
||||
networkManager.setDefaultProfileId(ZigBeeProfileType.ZIGBEE_HOME_AUTOMATION.getKey());
|
||||
|
||||
TransportConfig transportOptions = new TransportConfig();
|
||||
transportOptions.addOption(TransportConfigOption.RADIO_TX_POWER, 3);
|
||||
transportOptions.addOption(TransportConfigOption.TRUST_CENTRE_JOIN_MODE, TrustCentreJoinMode.TC_JOIN_SECURE);
|
||||
transportOptions.addOption(TransportConfigOption.TRUST_CENTRE_LINK_KEY, new ZigBeeKey(new int[] {
|
||||
0x5A, 0x69, 0x67, 0x42, 0x65, 0x65, 0x41, 0x6C, 0x6C, 0x69, 0x61, 0x6E, 0x63, 0x65, 0x30, 0x39 }));
|
||||
dongle.updateTransportConfig(transportOptions);
|
||||
|
||||
// Register extensions
|
||||
|
||||
networkManager.addExtension(new ZigBeeOtaUpgradeExtension());
|
||||
networkManager.addExtension(new ZigBeeBasicServerExtension());
|
||||
networkManager.addExtension(new ZigBeeDiscoveryExtension());
|
||||
|
||||
// Startup Network
|
||||
|
||||
logger.info("Starting up ZigBee Network...");
|
||||
ZigBeeStatus startResponse = networkManager.startup(false);
|
||||
logger.info("ZigBee Network startup finished with: " + startResponse);
|
||||
|
||||
// -----------
|
||||
// Other stuff
|
||||
// -----------
|
||||
|
||||
/*if (dongle instanceof ZigBeeDongleTiCc2531) {
|
||||
ZigBeeDongleTiCc2531 tiDongle = (ZigBeeDongleTiCc2531) dongle;
|
||||
tiDongle.setLedMode(1, false);
|
||||
tiDongle.setLedMode(2, false);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
private ZigBeeTransportTransmit getDongle(String name) {
|
||||
private static ZigBeeTransportTransmit getDongle(String name, ZigBeePort serialPort) {
|
||||
switch (name) {
|
||||
case "CC2531":
|
||||
return new ZigBeeDongleTiCc2531(serialPort);
|
||||
|
|
|
|||
|
|
@ -27,31 +27,42 @@ package se.hal.plugin.zigbee;
|
|||
import com.zsmartsystems.zigbee.IeeeAddress;
|
||||
import com.zsmartsystems.zigbee.database.ZigBeeNetworkDataStore;
|
||||
import com.zsmartsystems.zigbee.database.ZigBeeNodeDao;
|
||||
import zutil.log.LogUtil;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
|
||||
public class ZigBeeDataStore implements ZigBeeNetworkDataStore {
|
||||
private static final Logger logger = LogUtil.getLogger();
|
||||
private HashMap<IeeeAddress,ZigBeeNodeDao> devices = new HashMap<>();
|
||||
|
||||
|
||||
@Override
|
||||
public Set<IeeeAddress> readNetworkNodes() {
|
||||
System.out.println("ZigBeeDataStore.readNetworkNodes()");
|
||||
return new HashSet<>();
|
||||
return devices.keySet();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ZigBeeNodeDao readNode(IeeeAddress address) {
|
||||
System.out.println("ZigBeeDataStore.readNetworkNodes(" + address + ")");
|
||||
return null;
|
||||
|
||||
return devices.get(address);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeNode(ZigBeeNodeDao node) {
|
||||
System.out.println("ZigBeeDataStore.writeNode(" + node + ")");
|
||||
|
||||
devices.put(node.getIeeeAddress(), node);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeNode(IeeeAddress address) {
|
||||
System.out.println("ZigBeeDataStore.removeNode(" + address + ")");
|
||||
|
||||
devices.remove(address);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -111,7 +111,7 @@ public class ZigBeeJSerialCommPort implements ZigBeePort {
|
|||
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
logger.warn("Unable to open serial port: " + e.getMessage());
|
||||
logger.error("Unable to open serial port: " + e.getMessage());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,6 +24,8 @@
|
|||
|
||||
package se.hal.plugin.zigbee;
|
||||
|
||||
import com.zsmartsystems.zigbee.ZigBeeNetworkManager;
|
||||
import com.zsmartsystems.zigbee.ZigBeeNode;
|
||||
import zutil.log.CompactLogFormatter;
|
||||
import zutil.log.LogUtil;
|
||||
|
||||
|
|
@ -34,6 +36,7 @@ import java.util.logging.Level;
|
|||
public class HalZigbeeControllerTest {
|
||||
|
||||
public static void main(String[] args) throws IOException, InterruptedException {
|
||||
LogUtil.readConfiguration("logging.properties");
|
||||
LogUtil.setGlobalFormatter(new CompactLogFormatter());
|
||||
LogUtil.setGlobalLevel(Level.ALL);
|
||||
|
||||
|
|
@ -43,11 +46,52 @@ public class HalZigbeeControllerTest {
|
|||
System.out.println("PAN ID = " + controller.networkManager.getZigBeePanId());
|
||||
System.out.println("Extended PAN ID = " + controller.networkManager.getZigBeeExtendedPanId());
|
||||
System.out.println("Channel = " + controller.networkManager.getZigBeeChannel());
|
||||
controller.networkManager.permitJoin(50);
|
||||
|
||||
System.out.println("Press ENTER to exit application.");
|
||||
System.in.read();
|
||||
handleConsoleInput('h', controller.networkManager);
|
||||
|
||||
while(true) {
|
||||
char input = waitForInout();
|
||||
handleConsoleInput(input, controller.networkManager);
|
||||
|
||||
if (input == 'q') break;
|
||||
}
|
||||
|
||||
controller.close();
|
||||
}
|
||||
|
||||
|
||||
private static void handleConsoleInput(char input, ZigBeeNetworkManager networkManager) {
|
||||
switch (input) {
|
||||
case 'l':
|
||||
for (ZigBeeNode node : networkManager.getNodes()) {
|
||||
System.out.println(node);
|
||||
}
|
||||
System.out.println("Number of ZigBee Nodes: " + networkManager.getNodes().size());
|
||||
break;
|
||||
|
||||
case 'p':
|
||||
System.out.println("Enabling pairing.");
|
||||
networkManager.permitJoin(200);
|
||||
break;
|
||||
|
||||
case 'q':
|
||||
System.out.println("Shutting down.");
|
||||
break;
|
||||
|
||||
case 'h':
|
||||
default:
|
||||
System.out.println("Available commands:");
|
||||
System.out.println(" l: List available ZigBee Nodes");
|
||||
System.out.println(" p: Enable pairing of ZigBee devices");
|
||||
System.out.println(" q: Quit");
|
||||
System.out.println(" h: Help text");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private static char waitForInout() throws IOException {
|
||||
System.out.print("Input command and finish with ENTER: ");
|
||||
|
||||
return (char) System.in.read();
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue