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.DateTimeTrigger"},
|
||||||
{"se.hal.intf.HalTrigger": "se.hal.trigger.EventTrigger"},
|
{"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.HalTrigger": "se.hal.trigger.TimerTrigger"},
|
||||||
{"se.hal.intf.HalAction": "se.hal.action.SendEventAction"}
|
{"se.hal.intf.HalAction": "se.hal.action.SendEventAction"}
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ package se.hal.struct;
|
||||||
|
|
||||||
import se.hal.ControllerManager;
|
import se.hal.ControllerManager;
|
||||||
import se.hal.HalContext;
|
import se.hal.HalContext;
|
||||||
|
import se.hal.intf.HalDeviceData;
|
||||||
import se.hal.intf.HalDeviceReportListener;
|
import se.hal.intf.HalDeviceReportListener;
|
||||||
import zutil.db.DBConnection;
|
import zutil.db.DBConnection;
|
||||||
import zutil.db.bean.DBBean;
|
import zutil.db.bean.DBBean;
|
||||||
|
|
@ -23,7 +24,7 @@ import java.util.logging.Logger;
|
||||||
* @param <C> is the device configuration class
|
* @param <C> is the device configuration class
|
||||||
* @param <D> is the device data 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();
|
private static final Logger logger = LogUtil.getLogger();
|
||||||
|
|
||||||
// Sensor specific data
|
// 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;
|
package se.hal.trigger;
|
||||||
|
|
||||||
import se.hal.HalContext;
|
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 se.hal.struct.Event;
|
||||||
import zutil.db.DBConnection;
|
|
||||||
import zutil.log.LogUtil;
|
import zutil.log.LogUtil;
|
||||||
import zutil.ui.Configurator;
|
|
||||||
import zutil.ui.Configurator.PostConfigurationActionListener;
|
|
||||||
import zutil.ui.Configurator.PreConfigurationActionListener;
|
|
||||||
|
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
@ -19,71 +11,23 @@ import java.util.logging.Logger;
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class EventTrigger implements HalTrigger,
|
public class EventTrigger extends DeviceTrigger{
|
||||||
PreConfigurationActionListener,
|
|
||||||
PostConfigurationActionListener, HalDeviceReportListener<Event> {
|
|
||||||
|
|
||||||
private static final Logger logger = LogUtil.getLogger();
|
private static final Logger logger = LogUtil.getLogger();
|
||||||
|
|
||||||
@Configurator.Configurable("Event Device ID")
|
@Override
|
||||||
private int eventId = -1;
|
protected Event getDevice(long id) {
|
||||||
@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){
|
|
||||||
try {
|
try {
|
||||||
if (eventId >= 0)
|
if (id >= 0)
|
||||||
return Event.getEvent(HalContext.getDB(), eventId);
|
return Event.getEvent(HalContext.getDB(), id);
|
||||||
} catch (SQLException e){ logger.log(Level.SEVERE, null, e);}
|
} catch (SQLException e){ logger.log(Level.SEVERE, null, e);}
|
||||||
return null;
|
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
|
@Override
|
||||||
public String toString(){
|
public String toString(){
|
||||||
Event event = getEvent(eventId);
|
Event event = getDevice(deviceId);
|
||||||
return "Trigger " + (triggerOnChange ? "on" : "when") +
|
return "Trigger " + (triggerOnChange ? "on" : "when") +
|
||||||
" event: "+eventId+" ("+(event != null ? event.getName() : null) + ")" +
|
" event: "+ deviceId +" ("+(event != null ? event.getName() : null) + ")" +
|
||||||
" == "+ expectedData;
|
" == "+ 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