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.ZigBeeNetworkManager;
|
||||||
|
import com.zsmartsystems.zigbee.ZigBeeProfileType;
|
||||||
import com.zsmartsystems.zigbee.ZigBeeStatus;
|
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.cc2531.ZigBeeDongleTiCc2531;
|
||||||
import com.zsmartsystems.zigbee.dongle.conbee.ZigBeeDongleConBee;
|
import com.zsmartsystems.zigbee.dongle.conbee.ZigBeeDongleConBee;
|
||||||
import com.zsmartsystems.zigbee.dongle.xbee.ZigBeeDongleXBee;
|
import com.zsmartsystems.zigbee.dongle.xbee.ZigBeeDongleXBee;
|
||||||
import com.zsmartsystems.zigbee.transport.ZigBeePort;
|
import com.zsmartsystems.zigbee.security.ZigBeeKey;
|
||||||
import com.zsmartsystems.zigbee.transport.ZigBeeTransportTransmit;
|
import com.zsmartsystems.zigbee.serialization.DefaultDeserializer;
|
||||||
|
import com.zsmartsystems.zigbee.serialization.DefaultSerializer;
|
||||||
|
import com.zsmartsystems.zigbee.transport.*;
|
||||||
import se.hal.HalContext;
|
import se.hal.HalContext;
|
||||||
import se.hal.intf.*;
|
import se.hal.intf.*;
|
||||||
import se.hal.struct.AbstractDevice;
|
import se.hal.struct.AbstractDevice;
|
||||||
|
|
@ -49,21 +56,58 @@ public class HalZigbeeController implements HalSensorController, HalEventControl
|
||||||
serialPort = new ZigBeeJSerialCommPort(comPort);
|
serialPort = new ZigBeeJSerialCommPort(comPort);
|
||||||
dataStore = new ZigBeeDataStore();
|
dataStore = new ZigBeeDataStore();
|
||||||
|
|
||||||
ZigBeeTransportTransmit dongle = getDongle("CC2531");
|
// ----------------------------
|
||||||
|
// Initialize Transport Network
|
||||||
|
// ----------------------------
|
||||||
|
|
||||||
|
ZigBeeTransportTransmit dongle = getDongle("CC2531", serialPort);
|
||||||
networkManager = new ZigBeeNetworkManager(dongle);
|
networkManager = new ZigBeeNetworkManager(dongle);
|
||||||
networkManager.setNetworkDataStore(dataStore);
|
networkManager.setNetworkDataStore(dataStore);
|
||||||
|
networkManager.setSerializer(DefaultSerializer.class, DefaultDeserializer.class);
|
||||||
|
|
||||||
|
// Initialize Network
|
||||||
|
|
||||||
|
logger.info("Initializing ZigBee Network...");
|
||||||
ZigBeeStatus initResponse = networkManager.initialize();
|
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;
|
ZigBeeDongleTiCc2531 tiDongle = (ZigBeeDongleTiCc2531) dongle;
|
||||||
tiDongle.setLedMode(1, false);
|
tiDongle.setLedMode(1, false);
|
||||||
tiDongle.setLedMode(2, false);
|
tiDongle.setLedMode(2, false);
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
private ZigBeeTransportTransmit getDongle(String name) {
|
private static ZigBeeTransportTransmit getDongle(String name, ZigBeePort serialPort) {
|
||||||
switch (name) {
|
switch (name) {
|
||||||
case "CC2531":
|
case "CC2531":
|
||||||
return new ZigBeeDongleTiCc2531(serialPort);
|
return new ZigBeeDongleTiCc2531(serialPort);
|
||||||
|
|
|
||||||
|
|
@ -27,31 +27,42 @@ 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 zutil.log.LogUtil;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
|
||||||
public class ZigBeeDataStore implements ZigBeeNetworkDataStore {
|
public class ZigBeeDataStore implements ZigBeeNetworkDataStore {
|
||||||
|
private static final Logger logger = LogUtil.getLogger();
|
||||||
|
private HashMap<IeeeAddress,ZigBeeNodeDao> devices = new HashMap<>();
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Set<IeeeAddress> readNetworkNodes() {
|
public Set<IeeeAddress> readNetworkNodes() {
|
||||||
System.out.println("ZigBeeDataStore.readNetworkNodes()");
|
return devices.keySet();
|
||||||
return new HashSet<>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ZigBeeNodeDao readNode(IeeeAddress address) {
|
public ZigBeeNodeDao readNode(IeeeAddress address) {
|
||||||
System.out.println("ZigBeeDataStore.readNetworkNodes(" + address + ")");
|
System.out.println("ZigBeeDataStore.readNetworkNodes(" + address + ")");
|
||||||
return null;
|
|
||||||
|
return devices.get(address);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeNode(ZigBeeNodeDao node) {
|
public void writeNode(ZigBeeNodeDao node) {
|
||||||
System.out.println("ZigBeeDataStore.writeNode(" + node + ")");
|
System.out.println("ZigBeeDataStore.writeNode(" + node + ")");
|
||||||
|
|
||||||
|
devices.put(node.getIeeeAddress(), node);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void removeNode(IeeeAddress address) {
|
public void removeNode(IeeeAddress address) {
|
||||||
System.out.println("ZigBeeDataStore.removeNode(" + address + ")");
|
System.out.println("ZigBeeDataStore.removeNode(" + address + ")");
|
||||||
|
|
||||||
|
devices.remove(address);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -111,7 +111,7 @@ public class ZigBeeJSerialCommPort implements ZigBeePort {
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.warn("Unable to open serial port: " + e.getMessage());
|
logger.error("Unable to open serial port: " + e.getMessage());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,8 @@
|
||||||
|
|
||||||
package se.hal.plugin.zigbee;
|
package se.hal.plugin.zigbee;
|
||||||
|
|
||||||
|
import com.zsmartsystems.zigbee.ZigBeeNetworkManager;
|
||||||
|
import com.zsmartsystems.zigbee.ZigBeeNode;
|
||||||
import zutil.log.CompactLogFormatter;
|
import zutil.log.CompactLogFormatter;
|
||||||
import zutil.log.LogUtil;
|
import zutil.log.LogUtil;
|
||||||
|
|
||||||
|
|
@ -34,6 +36,7 @@ import java.util.logging.Level;
|
||||||
public class HalZigbeeControllerTest {
|
public class HalZigbeeControllerTest {
|
||||||
|
|
||||||
public static void main(String[] args) throws IOException, InterruptedException {
|
public static void main(String[] args) throws IOException, InterruptedException {
|
||||||
|
LogUtil.readConfiguration("logging.properties");
|
||||||
LogUtil.setGlobalFormatter(new CompactLogFormatter());
|
LogUtil.setGlobalFormatter(new CompactLogFormatter());
|
||||||
LogUtil.setGlobalLevel(Level.ALL);
|
LogUtil.setGlobalLevel(Level.ALL);
|
||||||
|
|
||||||
|
|
@ -43,11 +46,52 @@ public class HalZigbeeControllerTest {
|
||||||
System.out.println("PAN ID = " + controller.networkManager.getZigBeePanId());
|
System.out.println("PAN ID = " + controller.networkManager.getZigBeePanId());
|
||||||
System.out.println("Extended PAN ID = " + controller.networkManager.getZigBeeExtendedPanId());
|
System.out.println("Extended PAN ID = " + controller.networkManager.getZigBeeExtendedPanId());
|
||||||
System.out.println("Channel = " + controller.networkManager.getZigBeeChannel());
|
System.out.println("Channel = " + controller.networkManager.getZigBeeChannel());
|
||||||
controller.networkManager.permitJoin(50);
|
|
||||||
|
|
||||||
System.out.println("Press ENTER to exit application.");
|
handleConsoleInput('h', controller.networkManager);
|
||||||
System.in.read();
|
|
||||||
|
while(true) {
|
||||||
|
char input = waitForInout();
|
||||||
|
handleConsoleInput(input, controller.networkManager);
|
||||||
|
|
||||||
|
if (input == 'q') break;
|
||||||
|
}
|
||||||
|
|
||||||
controller.close();
|
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