Moved Zigbee neighbour info to API

This commit is contained in:
Ziver Koc 2024-05-27 00:01:22 +02:00
parent 784844b85f
commit ce73bd70fe
3 changed files with 82 additions and 17 deletions

View file

@ -33,15 +33,18 @@
<div id="network_graph"></div>
<script>
var nodes = [
{{#nodes}}{"id": "{{.getIeeeAddress()}}", "name": "{{.getIeeeAddress()}}"},
{{/nodes}}
]
fetch('/api/zigbee')
.then(response => response.json())
.then(data => {
var nodes = [];
var links = [];
var links = [
{{#nodes}}{{#.getNeighbors()}}{"source": "", "target": "{{.getNetworkAddress()}}"},
{{/.getNeighbors()}}{{/nodes}}
]
data.forEach(node => {
nodes.add({"id": node.address, "name": node.address});
nodes.neighbours.forEach(neighbour => {
links.add({"source": node.address, "target": neighbour})
}
});
const Graph = ForceGraph()
(document.getElementById('network_graph'))
@ -51,6 +54,7 @@
links: links
}
);
});
</script>
<h2>Connected Nodes</h2>

View file

@ -0,0 +1,60 @@
package se.hal.plugin.zigbee.page.api;
import com.zsmartsystems.zigbee.ZigBeeNode;
import com.zsmartsystems.zigbee.zdo.field.NeighborTable;
import se.hal.intf.HalAbstractControllerManager;
import se.hal.intf.HalApiEndpoint;
import se.hal.plugin.zigbee.ZigbeeController;
import zutil.log.LogUtil;
import zutil.parser.DataNode;
import java.util.Map;
import java.util.logging.Logger;
/**
* RESTish API for accessing and managing Zigbee devices.
* For web interface definition see the OpenApi definition hal-core/resources/web/api/doc.html
*/
public class ZigbeeApiEndpoint extends HalApiEndpoint {
private static final Logger logger = LogUtil.getLogger();
public ZigbeeApiEndpoint() {
super("api/zigbee");
}
@Override
public DataNode jsonRespond(
Map<String, Object> session,
Map<String, String> cookie,
Map<String, String> request) throws Exception{
DataNode root = new DataNode(DataNode.DataType.List);
ZigbeeController controller = HalAbstractControllerManager.getController(ZigbeeController.class);
// --------------------------------------
// Generate DataNode
// --------------------------------------
for (ZigBeeNode node : controller.getNodes()) {
DataNode zigbeeNode = new DataNode(DataNode.DataType.Map);
zigbeeNode.set("address", node.getIeeeAddress().toString());
zigbeeNode.set("logicalType", node.getLogicalType().toString());
DataNode powerNode = new DataNode(DataNode.DataType.Map);
powerNode.set("currentPowerMode", node.getPowerDescriptor().getCurrentPowerMode().toString());
powerNode.set("currentPowerSource", node.getPowerDescriptor().getCurrentPowerSource().toString());
powerNode.set("powerLevel", node.getPowerDescriptor().getPowerLevel().toString());
DataNode neighborsNode = new DataNode(DataNode.DataType.List);
for (NeighborTable neighbor : node.getNeighbors()) {
neighborsNode.add(neighbor.getExtendedAddress().toString());
}
zigbeeNode.set("neighbors", neighborsNode);
}
return root;
}
}

View file

@ -17,6 +17,7 @@
{"se.hal.intf.HalAutostartController": "se.hal.plugin.zigbee.ZigbeeController"},
{"se.hal.intf.HalDaemon": "se.hal.plugin.zigbee.ZigbeeAttributeUpdateDaemon"},
{"se.hal.intf.HalWebPage": "se.hal.plugin.zigbee.page.ZigbeeNetworkPage"}
{"se.hal.intf.HalWebPage": "se.hal.plugin.zigbee.page.ZigbeeNetworkPage"},
{"se.hal.intf.HalApiEndpoint": "se.hal.plugin.zigbee.page.api.ZigbeeApiEndpoint"}
]
}