diff --git a/plugins/hal-zigbee/resources/web/zigbee_network.tmpl b/plugins/hal-zigbee/resources/web/zigbee_network.tmpl
index d41e7082..44ad2855 100644
--- a/plugins/hal-zigbee/resources/web/zigbee_network.tmpl
+++ b/plugins/hal-zigbee/resources/web/zigbee_network.tmpl
@@ -33,24 +33,28 @@
Connected Nodes
diff --git a/plugins/hal-zigbee/src/se/hal/plugin/zigbee/page/api/ZigbeeApiEndpoint.java b/plugins/hal-zigbee/src/se/hal/plugin/zigbee/page/api/ZigbeeApiEndpoint.java
new file mode 100644
index 00000000..62366daf
--- /dev/null
+++ b/plugins/hal-zigbee/src/se/hal/plugin/zigbee/page/api/ZigbeeApiEndpoint.java
@@ -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 session,
+ Map cookie,
+ Map 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;
+ }
+}
diff --git a/plugins/hal-zigbee/src/se/hal/plugin/zigbee/plugin.json b/plugins/hal-zigbee/src/se/hal/plugin/zigbee/plugin.json
index 47e53951..65f0fc41 100644
--- a/plugins/hal-zigbee/src/se/hal/plugin/zigbee/plugin.json
+++ b/plugins/hal-zigbee/src/se/hal/plugin/zigbee/plugin.json
@@ -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"}
]
}
\ No newline at end of file