Some small refactoring
This commit is contained in:
parent
edaa23f0f6
commit
5716584772
15 changed files with 161 additions and 68 deletions
|
|
@ -43,7 +43,7 @@ public class CameraControllerManager extends HalAbstractControllerManager<HalCam
|
|||
}
|
||||
|
||||
@Override
|
||||
public void addAvailableDevice(Class deviceConfigClass) {
|
||||
public void addAvailableDeviceConfig(Class deviceConfigClass) {
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
dependencies {
|
||||
def ZIGBEE_LIB_VERSION = "1.3.10"
|
||||
//def ZIGBEE_LIB_VERSION = "1.3.11-SNAPSHOT"
|
||||
def ZIGBEE_LIB_VERSION = "1.3.11"
|
||||
|
||||
implementation project(':hal-core')
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,10 @@
|
|||
package se.hal.plugin.zigbee;
|
||||
|
||||
|
||||
import com.zsmartsystems.zigbee.ZigBeeNetworkManager;
|
||||
import com.zsmartsystems.zigbee.ZigBeeProfileType;
|
||||
import com.zsmartsystems.zigbee.ZigBeeStatus;
|
||||
import com.zsmartsystems.zigbee.*;
|
||||
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;
|
||||
|
|
@ -14,18 +13,29 @@ import com.zsmartsystems.zigbee.security.ZigBeeKey;
|
|||
import com.zsmartsystems.zigbee.serialization.DefaultDeserializer;
|
||||
import com.zsmartsystems.zigbee.serialization.DefaultSerializer;
|
||||
import com.zsmartsystems.zigbee.transport.*;
|
||||
import com.zsmartsystems.zigbee.zcl.clusters.*;
|
||||
import com.zsmartsystems.zigbee.zdo.command.NetworkAddressRequest;
|
||||
import com.zsmartsystems.zigbee.zdo.field.NodeDescriptor;
|
||||
import se.hal.HalContext;
|
||||
import se.hal.intf.*;
|
||||
import se.hal.intf.HalAbstractDevice;
|
||||
import zutil.log.LogUtil;
|
||||
|
||||
import java.util.List;
|
||||
import java.nio.channels.Channel;
|
||||
import java.util.*;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public class HalZigbeeController implements HalSensorController, HalEventController, HalAutoScannableController {
|
||||
public class HalZigbeeController implements HalSensorController,
|
||||
HalEventController,
|
||||
HalAutoScannableController,
|
||||
ZigBeeAnnounceListener,
|
||||
ZigBeeNetworkNodeListener {
|
||||
|
||||
private static final Logger logger = LogUtil.getLogger();
|
||||
|
||||
public static final String ZIGBEE_DONGLE_CC2531 = "CC2531";
|
||||
|
|
@ -45,6 +55,9 @@ public class HalZigbeeController implements HalSensorController, HalEventControl
|
|||
|
||||
public HalZigbeeController() {}
|
||||
|
||||
// --------------------------
|
||||
// Lifecycle Methods
|
||||
// --------------------------
|
||||
|
||||
@Override
|
||||
public boolean isAvailable() {
|
||||
|
|
@ -56,7 +69,7 @@ public class HalZigbeeController implements HalSensorController, HalEventControl
|
|||
initialize(HalContext.getStringProperty(CONFIG_ZIGBEE_PORT), HalContext.getStringProperty(CONFIG_ZIGBEE_DONGLE));
|
||||
}
|
||||
public void initialize(String comPort, String dongleName) {
|
||||
serialPort = new ZigBeeJSerialCommPort(comPort);
|
||||
serialPort = new ZigBeeJSerialCommPort(comPort, ZigBeeJSerialCommPort.DEFAULT_BAUD_RATE, ZigBeePort.FlowControl.FLOWCONTROL_OUT_RTSCTS);
|
||||
dataStore = new ZigBeeDataStore();
|
||||
TransportConfig transportOptions = new TransportConfig();
|
||||
|
||||
|
|
@ -68,6 +81,8 @@ public class HalZigbeeController implements HalSensorController, HalEventControl
|
|||
networkManager = new ZigBeeNetworkManager(dongle);
|
||||
networkManager.setNetworkDataStore(dataStore);
|
||||
networkManager.setSerializer(DefaultSerializer.class, DefaultDeserializer.class);
|
||||
networkManager.addAnnounceListener(this);
|
||||
networkManager.addNetworkNodeListener(this);
|
||||
|
||||
// Initialize Network
|
||||
|
||||
|
|
@ -80,40 +95,65 @@ public class HalZigbeeController implements HalSensorController, HalEventControl
|
|||
// ------------------------
|
||||
|
||||
networkManager.setDefaultProfileId(ZigBeeProfileType.ZIGBEE_HOME_AUTOMATION.getKey());
|
||||
|
||||
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[] { // Add the default ZigBeeAlliance09 HA link key
|
||||
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
|
||||
|
||||
networkManager.addExtension(new ZigBeeOtaUpgradeExtension());
|
||||
networkManager.addExtension(new ZigBeeBasicServerExtension());
|
||||
networkManager.addExtension(new ZigBeeDiscoveryExtension());
|
||||
networkManager.addExtension(new ZigBeeIasCieExtension());
|
||||
|
||||
networkManager.addSupportedClientCluster(ZclBasicCluster.CLUSTER_ID);
|
||||
networkManager.addSupportedClientCluster(ZclIdentifyCluster.CLUSTER_ID);
|
||||
networkManager.addSupportedClientCluster(ZclGroupsCluster.CLUSTER_ID);
|
||||
networkManager.addSupportedClientCluster(ZclScenesCluster.CLUSTER_ID);
|
||||
networkManager.addSupportedClientCluster(ZclPollControlCluster.CLUSTER_ID);
|
||||
networkManager.addSupportedClientCluster(ZclOnOffCluster.CLUSTER_ID);
|
||||
networkManager.addSupportedClientCluster(ZclLevelControlCluster.CLUSTER_ID);
|
||||
networkManager.addSupportedClientCluster(ZclColorControlCluster.CLUSTER_ID);
|
||||
networkManager.addSupportedClientCluster(ZclPressureMeasurementCluster.CLUSTER_ID);
|
||||
networkManager.addSupportedClientCluster(ZclTemperatureMeasurementCluster.CLUSTER_ID);
|
||||
networkManager.addSupportedClientCluster(ZclThermostatCluster.CLUSTER_ID);
|
||||
networkManager.addSupportedClientCluster(ZclRelativeHumidityMeasurementCluster.CLUSTER_ID);
|
||||
networkManager.addSupportedClientCluster(ZclWindowCoveringCluster.CLUSTER_ID);
|
||||
networkManager.addSupportedClientCluster(ZclBinaryInputBasicCluster.CLUSTER_ID);
|
||||
|
||||
networkManager.addSupportedServerCluster(ZclBasicCluster.CLUSTER_ID);
|
||||
networkManager.addSupportedServerCluster(ZclIdentifyCluster.CLUSTER_ID);
|
||||
networkManager.addSupportedServerCluster(ZclGroupsCluster.CLUSTER_ID);
|
||||
networkManager.addSupportedServerCluster(ZclScenesCluster.CLUSTER_ID);
|
||||
networkManager.addSupportedServerCluster(ZclPollControlCluster.CLUSTER_ID);
|
||||
networkManager.addSupportedServerCluster(ZclOnOffCluster.CLUSTER_ID);
|
||||
networkManager.addSupportedServerCluster(ZclLevelControlCluster.CLUSTER_ID);
|
||||
networkManager.addSupportedServerCluster(ZclColorControlCluster.CLUSTER_ID);
|
||||
networkManager.addSupportedServerCluster(ZclPressureMeasurementCluster.CLUSTER_ID);
|
||||
networkManager.addSupportedServerCluster(ZclWindowCoveringCluster.CLUSTER_ID);
|
||||
networkManager.addSupportedServerCluster(ZclBinaryInputBasicCluster.CLUSTER_ID);
|
||||
|
||||
// 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 static ZigBeeTransportTransmit getDongle(String name, ZigBeePort serialPort, TransportConfig transportOptions) {
|
||||
switch (name) {
|
||||
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:
|
||||
return new ZigBeeDongleConBee(serialPort);
|
||||
|
|
@ -127,12 +167,57 @@ public class HalZigbeeController implements HalSensorController, HalEventControl
|
|||
|
||||
@Override
|
||||
public void close() {
|
||||
logger.info("Shutting down Zigbee port.");
|
||||
logger.info("Shutting down Zigbee network.");
|
||||
|
||||
networkManager.shutdown();
|
||||
serialPort.close();
|
||||
}
|
||||
|
||||
// --------------------------
|
||||
// Zigbee Methods
|
||||
// --------------------------
|
||||
|
||||
@Override
|
||||
public void deviceStatusUpdate(ZigBeeNodeStatus deviceStatus, Integer networkAddress, IeeeAddress ieeeAddress) {
|
||||
System.out.println(deviceStatus.name() + " status updated.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void announceUnknownDevice(Integer networkAddress) {
|
||||
System.out.println("Unknown device: " + networkAddress);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void nodeAdded(final ZigBeeNode node) {
|
||||
System.out.println("nodeAdded: " + node);
|
||||
|
||||
// If this is the coordinator (NWK address 0), ignore this device
|
||||
if (node.getLogicalType() == NodeDescriptor.LogicalType.COORDINATOR || node.getNetworkAddress() == 0) {
|
||||
System.out.println(node.getIeeeAddress() + ": is a coordinator, skipping.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!node.isDiscovered()) {
|
||||
System.out.println(node.getIeeeAddress() + ": Node discovery not complete");
|
||||
return;
|
||||
}
|
||||
|
||||
// Perform the device properties discovery.
|
||||
|
||||
System.out.println(node.getIeeeAddress() + ": " +
|
||||
"Manufacturer=" + node.getNodeDescriptor().getManufacturerCode());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void nodeUpdated(final ZigBeeNode node) {
|
||||
System.out.println("nodeUpdated: " + node);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void nodeRemoved(final ZigBeeNode node) {
|
||||
System.out.println("nodeRemoved: " + node);
|
||||
}
|
||||
|
||||
// --------------------------
|
||||
// Hal Overrides
|
||||
// --------------------------
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue