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,24 +33,28 @@
<div id="network_graph"></div> <div id="network_graph"></div>
<script> <script>
var nodes = [ fetch('/api/zigbee')
{{#nodes}}{"id": "{{.getIeeeAddress()}}", "name": "{{.getIeeeAddress()}}"}, .then(response => response.json())
{{/nodes}} .then(data => {
] var nodes = [];
var links = [];
var links = [ data.forEach(node => {
{{#nodes}}{{#.getNeighbors()}}{"source": "", "target": "{{.getNetworkAddress()}}"}, nodes.add({"id": node.address, "name": node.address});
{{/.getNeighbors()}}{{/nodes}} nodes.neighbours.forEach(neighbour => {
] links.add({"source": node.address, "target": neighbour})
}
});
const Graph = ForceGraph() const Graph = ForceGraph()
(document.getElementById('network_graph')) (document.getElementById('network_graph'))
.linkDirectionalParticles(2) .linkDirectionalParticles(2)
.graphData({ .graphData({
nodes: nodes, nodes: nodes,
links: links links: links
} }
); );
});
</script> </script>
<h2>Connected Nodes</h2> <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.HalAutostartController": "se.hal.plugin.zigbee.ZigbeeController"},
{"se.hal.intf.HalDaemon": "se.hal.plugin.zigbee.ZigbeeAttributeUpdateDaemon"}, {"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"}
] ]
} }