From 33296956714233116ecae9296d97c40aab501b64 Mon Sep 17 00:00:00 2001 From: Ziver Koc Date: Thu, 30 Mar 2017 18:13:11 +0200 Subject: [PATCH] Added Sensor trigger --- src/se/hal/plugin.json | 1 + src/se/hal/struct/AbstractDevice.java | 3 +- src/se/hal/trigger/DeviceTrigger.java | 69 ++++++++++++++++++++++++++ src/se/hal/trigger/EventTrigger.java | 70 +++------------------------ src/se/hal/trigger/SensorTrigger.java | 35 ++++++++++++++ 5 files changed, 114 insertions(+), 64 deletions(-) create mode 100755 src/se/hal/trigger/DeviceTrigger.java create mode 100755 src/se/hal/trigger/SensorTrigger.java diff --git a/src/se/hal/plugin.json b/src/se/hal/plugin.json index 0fe86c7c..c893c565 100755 --- a/src/se/hal/plugin.json +++ b/src/se/hal/plugin.json @@ -21,6 +21,7 @@ {"se.hal.intf.HalTrigger": "se.hal.trigger.DateTimeTrigger"}, {"se.hal.intf.HalTrigger": "se.hal.trigger.EventTrigger"}, + {"se.hal.intf.HalTrigger": "se.hal.trigger.SensorTrigger"}, {"se.hal.intf.HalTrigger": "se.hal.trigger.TimerTrigger"}, {"se.hal.intf.HalAction": "se.hal.action.SendEventAction"} ] diff --git a/src/se/hal/struct/AbstractDevice.java b/src/se/hal/struct/AbstractDevice.java index b3573d78..5c7dfa9d 100755 --- a/src/se/hal/struct/AbstractDevice.java +++ b/src/se/hal/struct/AbstractDevice.java @@ -2,6 +2,7 @@ package se.hal.struct; import se.hal.ControllerManager; import se.hal.HalContext; +import se.hal.intf.HalDeviceData; import se.hal.intf.HalDeviceReportListener; import zutil.db.DBConnection; import zutil.db.bean.DBBean; @@ -23,7 +24,7 @@ import java.util.logging.Logger; * @param is the device configuration class * @param is the device data class */ -public abstract class AbstractDevice extends DBBean { +public abstract class AbstractDevice extends DBBean { private static final Logger logger = LogUtil.getLogger(); // Sensor specific data diff --git a/src/se/hal/trigger/DeviceTrigger.java b/src/se/hal/trigger/DeviceTrigger.java new file mode 100755 index 00000000..66023125 --- /dev/null +++ b/src/se/hal/trigger/DeviceTrigger.java @@ -0,0 +1,69 @@ +package se.hal.trigger; + +import se.hal.TriggerManager; +import se.hal.intf.HalDeviceData; +import se.hal.intf.HalDeviceReportListener; +import se.hal.intf.HalTrigger; +import se.hal.struct.AbstractDevice; +import zutil.ui.Configurator; +import zutil.ui.Configurator.PostConfigurationActionListener; +import zutil.ui.Configurator.PreConfigurationActionListener; + +/** + * An abstract class that implements generic device data logic + */ +public abstract class DeviceTrigger implements HalTrigger, + PreConfigurationActionListener, + PostConfigurationActionListener, HalDeviceReportListener { + + @Configurator.Configurable("Device ID") + protected int deviceId = -1; + @Configurator.Configurable("Trigger only on change") + protected boolean triggerOnChange = true; + @Configurator.Configurable("Data to compare to") + protected double expectedData; + + private transient HalDeviceData receivedData; + + + + @Override + public void preConfigurationAction(Configurator configurator, Object obj) { + AbstractDevice device = getDevice(deviceId); + if (device != null) + device.removeReportListener(this); + reset(); + } + @Override + public void postConfigurationAction(Configurator configurator, Object obj) { + AbstractDevice device = getDevice(deviceId); + if (device != null) + device.addReportListener(this); + } + + @Override + public void receivedReport(AbstractDevice device) { + receivedData = device.getDeviceData(); + // Instant trigger evaluation + if (triggerOnChange) + TriggerManager.getInstance().evaluateAndExecute(); + } + + + @Override + public boolean evaluate() { + if (receivedData != null) + return expectedData == receivedData.getData(); + return false; + } + + @Override + public void reset() { + if (triggerOnChange) // only reset if we want to trigger on change + receivedData = null; + } + + + + protected abstract AbstractDevice getDevice(long id); +} diff --git a/src/se/hal/trigger/EventTrigger.java b/src/se/hal/trigger/EventTrigger.java index 8cc6fd17..f508ac4f 100755 --- a/src/se/hal/trigger/EventTrigger.java +++ b/src/se/hal/trigger/EventTrigger.java @@ -1,16 +1,8 @@ package se.hal.trigger; import se.hal.HalContext; -import se.hal.TriggerManager; -import se.hal.intf.HalDeviceReportListener; -import se.hal.intf.HalEventData; -import se.hal.intf.HalTrigger; import se.hal.struct.Event; -import zutil.db.DBConnection; import zutil.log.LogUtil; -import zutil.ui.Configurator; -import zutil.ui.Configurator.PostConfigurationActionListener; -import zutil.ui.Configurator.PreConfigurationActionListener; import java.sql.SQLException; import java.util.logging.Level; @@ -19,71 +11,23 @@ import java.util.logging.Logger; /** * */ -public class EventTrigger implements HalTrigger, - PreConfigurationActionListener, - PostConfigurationActionListener, HalDeviceReportListener { - +public class EventTrigger extends DeviceTrigger{ private static final Logger logger = LogUtil.getLogger(); - @Configurator.Configurable("Event Device ID") - private int eventId = -1; - @Configurator.Configurable("Trigger only on change") - private boolean triggerOnChange = true; - @Configurator.Configurable("Data to compare to") - private double expectedData; - - private transient HalEventData receivedData; - - - private Event getEvent(long id){ + @Override + protected Event getDevice(long id) { try { - if (eventId >= 0) - return Event.getEvent(HalContext.getDB(), eventId); + if (id >= 0) + return Event.getEvent(HalContext.getDB(), id); } catch (SQLException e){ logger.log(Level.SEVERE, null, e);} return null; } - @Override - public void preConfigurationAction(Configurator configurator, Object obj) { - Event event = getEvent(eventId); - if (event != null) - event.removeReportListener(this); - reset(); - } - @Override - public void postConfigurationAction(Configurator configurator, Object obj) { - Event event = getEvent(eventId); - if (event != null) - event.addReportListener(this); - } - - @Override - public void receivedReport(Event device) { - receivedData = device.getDeviceData(); - // Instant trigger evaluation - if (triggerOnChange) - TriggerManager.getInstance().evaluateAndExecute(); - } - - - @Override - public boolean evaluate() { - if (receivedData != null) - return expectedData == receivedData.getData(); - return false; - } - - @Override - public void reset() { - if (triggerOnChange) // only reset if we want to trigger on change - receivedData = null; - } - @Override public String toString(){ - Event event = getEvent(eventId); + Event event = getDevice(deviceId); return "Trigger " + (triggerOnChange ? "on" : "when") + - " event: "+eventId+" ("+(event != null ? event.getName() : null) + ")" + + " event: "+ deviceId +" ("+(event != null ? event.getName() : null) + ")" + " == "+ expectedData; } diff --git a/src/se/hal/trigger/SensorTrigger.java b/src/se/hal/trigger/SensorTrigger.java new file mode 100755 index 00000000..1b940801 --- /dev/null +++ b/src/se/hal/trigger/SensorTrigger.java @@ -0,0 +1,35 @@ +package se.hal.trigger; + +import se.hal.HalContext; +import se.hal.struct.Event; +import se.hal.struct.Sensor; +import zutil.log.LogUtil; + +import java.sql.SQLException; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * + */ +public class SensorTrigger extends DeviceTrigger{ + private static final Logger logger = LogUtil.getLogger(); + + @Override + protected Sensor getDevice(long id) { + try { + if (id >= 0) + return Sensor.getSensor(HalContext.getDB(), id); + } catch (SQLException e){ logger.log(Level.SEVERE, null, e);} + return null; + } + + @Override + public String toString(){ + Sensor sensor = getDevice(deviceId); + return "Trigger " + (triggerOnChange ? "on" : "when") + + " sensor: "+ deviceId +" ("+(sensor != null ? sensor.getName() : null) + ")" + + " == "+ expectedData; + } + +}