Added Sensor trigger
This commit is contained in:
parent
5b67dde4e4
commit
3329695671
5 changed files with 114 additions and 64 deletions
|
|
@ -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"}
|
||||
]
|
||||
|
|
|
|||
|
|
@ -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 <C> is the device configuration class
|
||||
* @param <D> is the device data class
|
||||
*/
|
||||
public abstract class AbstractDevice<T extends AbstractDevice, C,D> extends DBBean {
|
||||
public abstract class AbstractDevice<T extends AbstractDevice, C,D extends HalDeviceData> extends DBBean {
|
||||
private static final Logger logger = LogUtil.getLogger();
|
||||
|
||||
// Sensor specific data
|
||||
|
|
|
|||
69
src/se/hal/trigger/DeviceTrigger.java
Executable file
69
src/se/hal/trigger/DeviceTrigger.java
Executable file
|
|
@ -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<AbstractDevice> {
|
||||
|
||||
@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);
|
||||
}
|
||||
|
|
@ -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<Event> {
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
|||
35
src/se/hal/trigger/SensorTrigger.java
Executable file
35
src/se/hal/trigger/SensorTrigger.java
Executable file
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue