Added overview Zigbee Node page for troubleshooting

This commit is contained in:
Ziver Koc 2021-07-03 00:03:18 +02:00
parent 81dc81a1ae
commit 902d87a9c5
5 changed files with 191 additions and 6 deletions

View file

@ -26,12 +26,11 @@ import se.hal.plugin.zigbee.device.*;
import zutil.Timer;
import zutil.log.LogUtil;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
@ -55,7 +54,6 @@ public class HalZigbeeController implements HalSensorController,
private static final String CONFIG_ZIGBEE_DONGLE = "zigbee.dongle";
private ZigBeePort serialPort;
private ZigBeeDataStore dataStore;
protected ZigBeeNetworkManager networkManager;
private Timer permitJoinTimer;
@ -80,7 +78,6 @@ public class HalZigbeeController implements HalSensorController,
}
public void initialize(String comPort, String dongleName) {
serialPort = new ZigBeeJSerialCommPort(comPort, ZigBeeJSerialCommPort.DEFAULT_BAUD_RATE, ZigBeePort.FlowControl.FLOWCONTROL_OUT_RTSCTS);
dataStore = new ZigBeeDataStore();
TransportConfig transportOptions = new TransportConfig();
// ----------------------------
@ -89,7 +86,7 @@ public class HalZigbeeController implements HalSensorController,
ZigBeeTransportTransmit dongle = getDongle(dongleName, serialPort, transportOptions);
networkManager = new ZigBeeNetworkManager(dongle);
networkManager.setNetworkDataStore(dataStore);
networkManager.setNetworkDataStore(ZigBeeDataStore.getInstance());
networkManager.setSerializer(DefaultSerializer.class, DefaultDeserializer.class);
networkManager.addAnnounceListener(this);
networkManager.addNetworkNodeListener(this);
@ -235,6 +232,10 @@ public class HalZigbeeController implements HalSensorController,
logger.fine("[Node: " + node.getIeeeAddress() + "]: Node registration has been removed.");
}
public Set<ZigBeeNode> getNodes() {
return networkManager.getNodes();
}
// ------------------------------------------
// Zigbee Endpoint Methods
// ------------------------------------------

View file

@ -36,10 +36,14 @@ import java.util.logging.Logger;
public class ZigBeeDataStore implements ZigBeeNetworkDataStore {
private static final Logger logger = LogUtil.getLogger();
private static ZigBeeDataStore instance;
private HashMap<IeeeAddress,ZigBeeNodeDao> devices = new HashMap<>();
private ZigBeeDataStore() {}
@Override
public Set<IeeeAddress> readNetworkNodes() {
return devices.keySet();
@ -69,4 +73,11 @@ public class ZigBeeDataStore implements ZigBeeNetworkDataStore {
devices.remove(address);
}
public static ZigBeeDataStore getInstance() {
if (instance == null)
instance = new ZigBeeDataStore();
return instance;
}
}

View file

@ -0,0 +1,42 @@
package se.hal.plugin.zigbee.page;
import com.zsmartsystems.zigbee.ZigBeeNode;
import se.hal.HalContext;
import se.hal.intf.HalAbstractController;
import se.hal.intf.HalAbstractControllerManager;
import se.hal.intf.HalWebPage;
import se.hal.plugin.zigbee.HalZigbeeController;
import zutil.io.file.FileUtil;
import zutil.parser.Templator;
import java.util.Map;
import java.util.Set;
public class ZigbeeNodeOverviewPage extends HalWebPage {
private static final String TEMPLATE = HalContext.RESOURCE_WEB_ROOT + "/zigbee_node_overview.tmpl";
public ZigbeeNodeOverviewPage() {
super("zigbee_overview");
super.getRootNav().createSubNav("Settings").createSubNav(this.getId(), "Zigbee Overview").setWeight(10_000);
}
@Override
public Templator httpRespond(
Map<String, Object> session,
Map<String, String> cookie,
Map<String, String> request)
throws Exception {
Set<ZigBeeNode> nodes = null;
for (HalAbstractController controller : HalAbstractControllerManager.getControllers()) {
if (controller instanceof HalZigbeeController) {
nodes = ((HalZigbeeController) controller).getNodes();
break;
}
}
Templator tmpl = new Templator(FileUtil.find(TEMPLATE));
tmpl.set("nodes", nodes);
return tmpl;
}
}

View file

@ -3,6 +3,8 @@
"name": "Hal-Zigbee",
"description": "A Zigbee plugin for directly connecting to a CC2531 device over serial port.",
"interfaces": [
{"se.hal.intf.HalAutostartController": "se.hal.plugin.zigbee.HalZigbeeController"}
{"se.hal.intf.HalAutostartController": "se.hal.plugin.zigbee.HalZigbeeController"},
{"se.hal.intf.HalWebPage": "se.hal.plugin.zigbee.page.ZigbeeNodeOverviewPage"}
]
}