From 571658477263240db8d0463b1452304f1d835df1 Mon Sep 17 00:00:00 2001 From: Ziver Koc Date: Thu, 29 Apr 2021 01:10:45 +0200 Subject: [PATCH] Some small refactoring --- .../resource/resource/web/event_config.tmpl | 8 +- hal-core/resource/resource/web/js/hal.js | 38 ++++-- .../resource/resource/web/sensor_config.tmpl | 8 +- .../src/se/hal/EventControllerManager.java | 2 +- .../src/se/hal/SensorControllerManager.java | 2 +- .../intf/HalAbstractControllerManager.java | 4 +- hal-core/src/se/hal/intf/HalDaemon.java | 4 +- .../src/se/hal/page/EventConfigWebPage.java | 8 +- .../src/se/hal/page/SensorConfigWebPage.java | 4 +- .../se/hal/page/SensorOverviewWebPage.java | 1 - .../se/hal/EventControllerManagerTest.java | 8 +- .../se/hal/SensorControllerManagerTest.java | 8 +- .../plugin/nvr/CameraControllerManager.java | 2 +- plugins/hal-zigbee/build.gradle | 3 +- .../plugin/zigbee/HalZigbeeController.java | 129 +++++++++++++++--- 15 files changed, 161 insertions(+), 68 deletions(-) diff --git a/hal-core/resource/resource/web/event_config.tmpl b/hal-core/resource/resource/web/event_config.tmpl index 4ce353a2..14cd4fb8 100644 --- a/hal-core/resource/resource/web/event_config.tmpl +++ b/hal-core/resource/resource/web/event_config.tmpl @@ -122,9 +122,9 @@
@@ -142,7 +142,7 @@ diff --git a/hal-core/resource/resource/web/js/hal.js b/hal-core/resource/resource/web/js/hal.js index 8f290c34..47971b62 100644 --- a/hal-core/resource/resource/web/js/hal.js +++ b/hal-core/resource/resource/web/js/hal.js @@ -1,11 +1,16 @@ -///////////////////////////////// Autostart +// -------------------------------------------------------- +// Autostart +// -------------------------------------------------------- + $(function(){ $(".toggle-switch").bootstrapSwitch(); $(".timestamp").relTimestamp(); }); -////////////////////////////////////// JQuery helper functions +// -------------------------------------------------------- +// JQuery helper functions +// -------------------------------------------------------- // $.attr() # returns all attributes of an element (function(old) { @@ -28,7 +33,11 @@ $(function(){ }; })($.fn.attr); -// converts all timestamps to human readable time and date +// -------------------------------------------------------- +// Timestamps +// -------------------------------------------------------- + +// Converts all timestamps to human readable time and date $.fn.relTimestamp = function() { return this.each(function() { var timestamp = parseInt($(this).text()); @@ -45,10 +54,10 @@ $.fn.relTimestamp = function() { }); }; +// -------------------------------------------------------- +// Chart functions +// -------------------------------------------------------- -////////////////////////////////////// Hal functions - -////////////// Chart functions function createChart(elementId, url, updateTime=-1){ var tickConf = {count: 20}; if (updateTime < 60*60*1000) @@ -127,30 +136,33 @@ function getChartData(json){ }; } -////////////// Dynamic forms +// -------------------------------------------------------- +// Dynamic forms +// -------------------------------------------------------- + var dynamicConf = {}; function initDynamicModalForm(modalId, formTemplateId = null, templateID = null){ // read in all configurations into global variable (to skip naming issues) if (formTemplateId != null) { dynamicConf[formTemplateId] = []; - $("#"+templateID+" div").each(function(){ + $("#" + templateID + " div").each(function(){ dynamicConf[formTemplateId][$(this).attr("id")] = $(this).html(); }); // Update dynamic inputs - $("#"+modalId+" select[name=type]").change(function(){ - $("#"+modalId+" #"+formTemplateId).html(dynamicConf[formTemplateId][$(this).val()]); + $("#" + modalId + " select[name=type]").change(function(){ + $("#" + modalId + " #" + formTemplateId).html(dynamicConf[formTemplateId][$(this).val()]); }); } // click event - $("#"+modalId).on('show.bs.modal', function (event) { + $("#" + modalId).on('show.bs.modal', function (event) { var button = $(event.relatedTarget); var modal = $(this); // Reset all inputs if (formTemplateId != null) - modal.find("#"+formTemplateId).empty(); // clear form div + modal.find("#" + formTemplateId).empty(); // clear form div // select dynamic form var selector = modal.find("select[name=type]"); @@ -169,7 +181,7 @@ function initDynamicModalForm(modalId, formTemplateId = null, templateID = null) if (value=="true") input.attr("checked", "true"); else input.removeAttr("checked"); // Add default false value as a unchecked checkbox is not included in the post - input.parent().prepend(""); + input.parent().prepend(""); } else { input.val(value); } diff --git a/hal-core/resource/resource/web/sensor_config.tmpl b/hal-core/resource/resource/web/sensor_config.tmpl index 789ec4c5..e2d8d66a 100644 --- a/hal-core/resource/resource/web/sensor_config.tmpl +++ b/hal-core/resource/resource/web/sensor_config.tmpl @@ -224,9 +224,9 @@
@@ -251,7 +251,7 @@
diff --git a/hal-core/src/se/hal/EventControllerManager.java b/hal-core/src/se/hal/EventControllerManager.java index 7f856b78..3658349c 100644 --- a/hal-core/src/se/hal/EventControllerManager.java +++ b/hal-core/src/se/hal/EventControllerManager.java @@ -109,7 +109,7 @@ public class EventControllerManager extends HalAbstractControllerManager eventClass) { + public void addAvailableDeviceConfig(Class eventClass) { if (!availableEvents.contains(eventClass)) availableEvents.add(eventClass); } diff --git a/hal-core/src/se/hal/SensorControllerManager.java b/hal-core/src/se/hal/SensorControllerManager.java index 1cbc89f2..d9ec0eed 100644 --- a/hal-core/src/se/hal/SensorControllerManager.java +++ b/hal-core/src/se/hal/SensorControllerManager.java @@ -111,7 +111,7 @@ public class SensorControllerManager extends HalAbstractControllerManager sensorConfigClass) { + public void addAvailableDeviceConfig(Class sensorConfigClass) { if (!availableSensors.contains(sensorConfigClass)) availableSensors.add(sensorConfigClass); } diff --git a/hal-core/src/se/hal/intf/HalAbstractControllerManager.java b/hal-core/src/se/hal/intf/HalAbstractControllerManager.java index 4889b11e..8e6b945c 100644 --- a/hal-core/src/se/hal/intf/HalAbstractControllerManager.java +++ b/hal-core/src/se/hal/intf/HalAbstractControllerManager.java @@ -31,7 +31,7 @@ public abstract class HalAbstractControllerManager= 1 && genericClasses[0] != null) { for (Iterator> it = pluginManager.getClassIterator(genericClasses[0]); it.hasNext(); ) { - addAvailableDevice(it.next()); + addAvailableDeviceConfig(it.next()); } } else { logger.severe("Unable to retrieve Controller class from generics."); @@ -63,7 +63,7 @@ public abstract class HalAbstractControllerManager deviceConfigClass); + public abstract void addAvailableDeviceConfig(Class deviceConfigClass); /** * @return a List of all available devices that can be registered with this manager diff --git a/hal-core/src/se/hal/intf/HalDaemon.java b/hal-core/src/se/hal/intf/HalDaemon.java index c07186ca..126b509d 100644 --- a/hal-core/src/se/hal/intf/HalDaemon.java +++ b/hal-core/src/se/hal/intf/HalDaemon.java @@ -3,14 +3,14 @@ package se.hal.intf; import java.util.concurrent.ScheduledExecutorService; /** - * Defines a stand alone process that will run parallel to Hal + * Defines a standalone process that will run parallel to the main application */ public interface HalDaemon extends Runnable { /** * Setup the execution of the daemon with the provided executor. * - * @param executor the scheduler provided by HAL for the daemon to setup its execution. + * @param executor the scheduler provided for the daemon to setup its execution. */ void initiate(ScheduledExecutorService executor); diff --git a/hal-core/src/se/hal/page/EventConfigWebPage.java b/hal-core/src/se/hal/page/EventConfigWebPage.java index df336993..82fa6c7c 100644 --- a/hal-core/src/se/hal/page/EventConfigWebPage.java +++ b/hal-core/src/se/hal/page/EventConfigWebPage.java @@ -22,14 +22,13 @@ public class EventConfigWebPage extends HalWebPage { private static final Logger logger = LogUtil.getLogger(); private static final String TEMPLATE = HalContext.RESOURCE_WEB_ROOT + "/event_config.tmpl"; - private ArrayList eventConfigurations; + private ArrayList eventConfigurations = new ArrayList<>(); public EventConfigWebPage() { super("event_config"); super.getRootNav().createSubNav("Settings").createSubNav(this.getId(), "Event Settings").setWeight(200); - eventConfigurations = new ArrayList<>(); for (Class c : EventControllerManager.getInstance().getAvailableDeviceConfigs()) eventConfigurations.add(new ClassConfigurationData(c)); } @@ -50,7 +49,6 @@ public class EventConfigWebPage extends HalWebPage { Event event; switch(request.get("action")) { - // Local events case "create_local_event": logger.info("Creating new event: " + request.get("name")); event = new Event(); @@ -110,9 +108,9 @@ public class EventConfigWebPage extends HalWebPage { Templator tmpl = new Templator(FileUtil.find(TEMPLATE)); tmpl.set("user", localUser); tmpl.set("localEvents", Event.getLocalEvents(db)); - tmpl.set("localEventConf", eventConfigurations); tmpl.set("detectedEvents", EventControllerManager.getInstance().getDetectedDevices()); - tmpl.set("availableEvents", EventControllerManager.getInstance().getAvailableDeviceConfigs()); + tmpl.set("availableEventConfigClasses", EventControllerManager.getInstance().getAvailableDeviceConfigs()); + tmpl.set("availableEventObjectConfig", eventConfigurations); return tmpl; } diff --git a/hal-core/src/se/hal/page/SensorConfigWebPage.java b/hal-core/src/se/hal/page/SensorConfigWebPage.java index bd74e6e0..f1bd12fd 100644 --- a/hal-core/src/se/hal/page/SensorConfigWebPage.java +++ b/hal-core/src/se/hal/page/SensorConfigWebPage.java @@ -174,11 +174,11 @@ public class SensorConfigWebPage extends HalWebPage { Templator tmpl = new Templator(FileUtil.find(TEMPLATE)); tmpl.set("user", localUser); tmpl.set("localSensors", Sensor.getLocalSensors(db)); - tmpl.set("localSensorConf", sensorConfigurations); tmpl.set("detectedSensors", SensorControllerManager.getInstance().getDetectedDevices()); tmpl.set("extUsers", User.getExternalUsers(db)); tmpl.set("extSensor", Sensor.getExternalSensors(db)); - tmpl.set("availableSensors", SensorControllerManager.getInstance().getAvailableDeviceConfigs()); + tmpl.set("availableSensorConfigClasses", SensorControllerManager.getInstance().getAvailableDeviceConfigs()); + tmpl.set("availableSensorObjectConfig", sensorConfigurations); return tmpl; diff --git a/hal-core/src/se/hal/page/SensorOverviewWebPage.java b/hal-core/src/se/hal/page/SensorOverviewWebPage.java index 8881afc9..f1e2a35f 100644 --- a/hal-core/src/se/hal/page/SensorOverviewWebPage.java +++ b/hal-core/src/se/hal/page/SensorOverviewWebPage.java @@ -38,7 +38,6 @@ public class SensorOverviewWebPage extends HalWebPage { DBConnection db = HalContext.getDB(); int id = (ObjectUtil.isEmpty(request.get("id")) ? -1 : Integer.parseInt(request.get("id"))); - // Save new input if (id >= 0) { Sensor sensor = Sensor.getSensor(db, id); diff --git a/hal-core/test/se/hal/EventControllerManagerTest.java b/hal-core/test/se/hal/EventControllerManagerTest.java index ee667a76..ff485590 100644 --- a/hal-core/test/se/hal/EventControllerManagerTest.java +++ b/hal-core/test/se/hal/EventControllerManagerTest.java @@ -20,17 +20,17 @@ public class EventControllerManagerTest { public void addAvailableEventDevice(){ assertEquals(0, manager.getAvailableDeviceConfigs().size()); - manager.addAvailableDevice(TestEvent1.class); + manager.addAvailableDeviceConfig(TestEvent1.class); assertEquals(1, manager.getAvailableDeviceConfigs().size()); assertTrue(manager.getAvailableDeviceConfigs().contains(TestEvent1.class)); - manager.addAvailableDevice(TestEvent2.class); + manager.addAvailableDeviceConfig(TestEvent2.class); assertEquals(2, manager.getAvailableDeviceConfigs().size()); assertTrue(manager.getAvailableDeviceConfigs().contains(TestEvent1.class)); assertTrue(manager.getAvailableDeviceConfigs().contains(TestEvent2.class)); // Add duplicate Event - manager.addAvailableDevice(TestEvent1.class); + manager.addAvailableDeviceConfig(TestEvent1.class); assertEquals("No duplicate check",2, manager.getAvailableDeviceConfigs().size()); } @@ -76,7 +76,7 @@ public class EventControllerManagerTest { private Event registerEvent(HalEventConfig config){ Event Event = new Event(); Event.setDeviceConfig(config); - manager.addAvailableDevice(config.getClass()); + manager.addAvailableDeviceConfig(config.getClass()); manager.register(Event); return Event; } diff --git a/hal-core/test/se/hal/SensorControllerManagerTest.java b/hal-core/test/se/hal/SensorControllerManagerTest.java index 5a4c2298..f9d67a26 100644 --- a/hal-core/test/se/hal/SensorControllerManagerTest.java +++ b/hal-core/test/se/hal/SensorControllerManagerTest.java @@ -20,17 +20,17 @@ public class SensorControllerManagerTest { public void addAvailableDevice(){ assertEquals(Collections.EMPTY_LIST, manager.getAvailableDeviceConfigs()); - manager.addAvailableDevice(TestSensor1.class); + manager.addAvailableDeviceConfig(TestSensor1.class); assertEquals(1, manager.getAvailableDeviceConfigs().size()); assertTrue(manager.getAvailableDeviceConfigs().contains(TestSensor1.class)); - manager.addAvailableDevice(TestSensor2.class); + manager.addAvailableDeviceConfig(TestSensor2.class); assertEquals(2, manager.getAvailableDeviceConfigs().size()); assertTrue(manager.getAvailableDeviceConfigs().contains(TestSensor1.class)); assertTrue(manager.getAvailableDeviceConfigs().contains(TestSensor2.class)); // Add duplicate sensor - manager.addAvailableDevice(TestSensor1.class); + manager.addAvailableDeviceConfig(TestSensor1.class); assertEquals("No duplicate check",2, manager.getAvailableDeviceConfigs().size()); } @@ -77,7 +77,7 @@ public class SensorControllerManagerTest { private Sensor registerSensor(HalSensorConfig config){ Sensor sensor = new Sensor(); sensor.setDeviceConfig(config); - manager.addAvailableDevice(config.getClass()); + manager.addAvailableDeviceConfig(config.getClass()); manager.register(sensor); return sensor; } diff --git a/plugins/hal-nvr/src/se/hal/plugin/nvr/CameraControllerManager.java b/plugins/hal-nvr/src/se/hal/plugin/nvr/CameraControllerManager.java index cfaf9238..7aac62d2 100644 --- a/plugins/hal-nvr/src/se/hal/plugin/nvr/CameraControllerManager.java +++ b/plugins/hal-nvr/src/se/hal/plugin/nvr/CameraControllerManager.java @@ -43,7 +43,7 @@ public class CameraControllerManager extends HalAbstractControllerManager clusters = new HashSet<>(); + clusters.add(ZclIasZoneCluster.CLUSTER_ID); + + transportOptions.addOption(TransportConfigOption.SUPPORTED_OUTPUT_CLUSTERS, clusters); transportOptions.addOption(TransportConfigOption.RADIO_TX_POWER, 3); + return new ZigBeeDongleTiCc2531(serialPort); case ZIGBEE_DONGLE_CONBEE: return new ZigBeeDongleConBee(serialPort); @@ -127,12 +167,57 @@ public class HalZigbeeController implements HalSensorController, HalEventControl @Override public void close() { - logger.info("Shutting down Zigbee port."); + logger.info("Shutting down Zigbee network."); networkManager.shutdown(); serialPort.close(); } + // -------------------------- + // Zigbee Methods + // -------------------------- + + @Override + public void deviceStatusUpdate(ZigBeeNodeStatus deviceStatus, Integer networkAddress, IeeeAddress ieeeAddress) { + System.out.println(deviceStatus.name() + " status updated."); + } + + @Override + public void announceUnknownDevice(Integer networkAddress) { + System.out.println("Unknown device: " + networkAddress); + } + + @Override + public void nodeAdded(final ZigBeeNode node) { + System.out.println("nodeAdded: " + node); + + // If this is the coordinator (NWK address 0), ignore this device + if (node.getLogicalType() == NodeDescriptor.LogicalType.COORDINATOR || node.getNetworkAddress() == 0) { + System.out.println(node.getIeeeAddress() + ": is a coordinator, skipping."); + return; + } + + if (!node.isDiscovered()) { + System.out.println(node.getIeeeAddress() + ": Node discovery not complete"); + return; + } + + // Perform the device properties discovery. + + System.out.println(node.getIeeeAddress() + ": " + + "Manufacturer=" + node.getNodeDescriptor().getManufacturerCode()); + } + + @Override + public void nodeUpdated(final ZigBeeNode node) { + System.out.println("nodeUpdated: " + node); + } + + @Override + public void nodeRemoved(final ZigBeeNode node) { + System.out.println("nodeRemoved: " + node); + } + // -------------------------- // Hal Overrides // --------------------------