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