Added Sensor plugin logic
Former-commit-id: d1cd27bf98192e0976b078eabb202bd13496df5c
This commit is contained in:
parent
275ffd97c2
commit
fc05f82f31
7 changed files with 109 additions and 5 deletions
84
src/se/koc/hal/ControllerManager.java
Executable file
84
src/se/koc/hal/ControllerManager.java
Executable file
|
|
@ -0,0 +1,84 @@
|
||||||
|
package se.koc.hal;
|
||||||
|
|
||||||
|
import se.koc.hal.intf.HalSensorController;
|
||||||
|
import se.koc.hal.struct.HalEvent;
|
||||||
|
import se.koc.hal.struct.HalSensor;
|
||||||
|
import zutil.log.LogUtil;
|
||||||
|
import zutil.plugin.PluginData;
|
||||||
|
import zutil.plugin.PluginManager;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class manages all SensorController and EventController objects
|
||||||
|
*/
|
||||||
|
public class ControllerManager {
|
||||||
|
private static final Logger logger = LogUtil.getLogger();
|
||||||
|
private static ControllerManager instance;
|
||||||
|
|
||||||
|
|
||||||
|
private ArrayList<Class<?>> availableSensors = new ArrayList<>();
|
||||||
|
private HashMap<Class,HalSensorController> controllerMap = new HashMap<>();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void register(HalSensor sensor) throws IllegalAccessException, InstantiationException {
|
||||||
|
Class<? extends HalSensorController> c = sensor.getController();
|
||||||
|
HalSensorController controller;
|
||||||
|
if (controllerMap.containsKey(c))
|
||||||
|
controller = controllerMap.get(c);
|
||||||
|
else {
|
||||||
|
// Instantiate controller
|
||||||
|
logger.fine("Instantiating controller: " + c.getName());
|
||||||
|
controller = c.newInstance();
|
||||||
|
controllerMap.put(c, controller);
|
||||||
|
}
|
||||||
|
|
||||||
|
controller.register(sensor);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deregister(HalSensor sensor){
|
||||||
|
Class<? extends HalSensorController> c = sensor.getController();
|
||||||
|
HalSensorController controller;
|
||||||
|
if (controllerMap.containsKey(c)) {
|
||||||
|
controller = controllerMap.get(c);
|
||||||
|
controller.deregister(sensor);
|
||||||
|
if(controller.size() == 0){
|
||||||
|
// Remove controller as it has no more registered sensors
|
||||||
|
logger.fine("Closing controller as it has no more registered sensors: "+c.getName());
|
||||||
|
controller.close();
|
||||||
|
controllerMap.remove(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Class<?>> getAvailableSensors(){
|
||||||
|
return availableSensors;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static void initialize(){
|
||||||
|
ControllerManager manager = new ControllerManager();
|
||||||
|
PluginManager pluginManager = new PluginManager("./");
|
||||||
|
Iterator<PluginData> it = pluginManager.iterator();
|
||||||
|
while (it.hasNext()){
|
||||||
|
PluginData plugin = it.next();
|
||||||
|
Iterator<Class<?>> pluginIt = plugin.getClassIterator(HalSensor.class);
|
||||||
|
while (pluginIt.hasNext()){
|
||||||
|
manager.availableSensors.add(pluginIt.next());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
instance = manager;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ControllerManager getInstance(){
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -23,7 +23,7 @@ import java.util.regex.Pattern;
|
||||||
* Date: 2013-12-17
|
* Date: 2013-12-17
|
||||||
* Time: 10:59
|
* Time: 10:59
|
||||||
*/
|
*/
|
||||||
public class HALClient{
|
public class HalClient {
|
||||||
private static HashMap<String, SwitchEvent> switches = new HashMap<String, SwitchEvent>();
|
private static HashMap<String, SwitchEvent> switches = new HashMap<String, SwitchEvent>();
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -78,7 +78,7 @@ public class HalContext {
|
||||||
FileUtil.copy(dbFile, backupDB);
|
FileUtil.copy(dbFile, backupDB);
|
||||||
|
|
||||||
logger.fine(String.format("Upgrading DB (from: v%s, to: v%s)...", dbVersion, defaultDBVersion));
|
logger.fine(String.format("Upgrading DB (from: v%s, to: v%s)...", dbVersion, defaultDBVersion));
|
||||||
DBUpgradeHandler handler = new DBUpgradeHandler(referenceDB);
|
final DBUpgradeHandler handler = new DBUpgradeHandler(referenceDB);
|
||||||
handler.setTargetDB(db);
|
handler.setTargetDB(db);
|
||||||
|
|
||||||
//read upgrade path preferences from the reference database
|
//read upgrade path preferences from the reference database
|
||||||
|
|
@ -90,13 +90,16 @@ public class HalContext {
|
||||||
public Object handleQueryResult(Statement stmt, ResultSet result) throws SQLException {
|
public Object handleQueryResult(Statement stmt, ResultSet result) throws SQLException {
|
||||||
while(result.next()){
|
while(result.next()){
|
||||||
if(result.getBoolean("force_upgrade")){
|
if(result.getBoolean("force_upgrade")){
|
||||||
|
logger.fine("Forced upgrade enabled");
|
||||||
handler.setForcedDBUpgrade(true); //set to true if any of the intermediate db version requires it.
|
handler.setForcedDBUpgrade(true); //set to true if any of the intermediate db version requires it.
|
||||||
}
|
}
|
||||||
if(result.getBoolean("clear_external_aggr_data")){
|
if(result.getBoolean("clear_external_aggr_data")){
|
||||||
|
logger.fine("Clearing external aggregate data");
|
||||||
db.exec("DELETE FROM sensor_data_aggr WHERE sensor_id = "
|
db.exec("DELETE FROM sensor_data_aggr WHERE sensor_id = "
|
||||||
+ "(SELECT sensor_id FROM user, sensor WHERE user.external == 1 AND sensor.user_id = user.id)");
|
+ "(SELECT sensor_id FROM user, sensor WHERE user.external == 1 AND sensor.user_id = user.id)");
|
||||||
}
|
}
|
||||||
if(result.getBoolean("clear_internal_aggr_data")){
|
if(result.getBoolean("clear_internal_aggr_data")){
|
||||||
|
logger.fine("Clearing local aggregate data");
|
||||||
db.exec("DELETE FROM sensor_data_aggr WHERE sensor_id = "
|
db.exec("DELETE FROM sensor_data_aggr WHERE sensor_id = "
|
||||||
+ "(SELECT sensor_id FROM user, sensor WHERE user.external == 0 AND sensor.user_id = user.id)");
|
+ "(SELECT sensor_id FROM user, sensor WHERE user.external == 0 AND sensor.user_id = user.id)");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,8 @@ import se.koc.hal.intf.HalHttpPage;
|
||||||
import se.koc.hal.page.PCConfigureHttpPage;
|
import se.koc.hal.page.PCConfigureHttpPage;
|
||||||
import se.koc.hal.page.PCHeatMapHttpPage;
|
import se.koc.hal.page.PCHeatMapHttpPage;
|
||||||
import se.koc.hal.page.PCOverviewHttpPage;
|
import se.koc.hal.page.PCOverviewHttpPage;
|
||||||
|
import se.koc.hal.struct.HalSensor;
|
||||||
|
import zutil.db.DBConnection;
|
||||||
import zutil.io.file.FileUtil;
|
import zutil.io.file.FileUtil;
|
||||||
import zutil.log.CompactLogFormatter;
|
import zutil.log.CompactLogFormatter;
|
||||||
import zutil.log.LogUtil;
|
import zutil.log.LogUtil;
|
||||||
|
|
@ -40,6 +42,13 @@ public class PowerChallenge {
|
||||||
|
|
||||||
// init DB and other configurations
|
// init DB and other configurations
|
||||||
HalContext.initialize();
|
HalContext.initialize();
|
||||||
|
DBConnection db = HalContext.getDB();
|
||||||
|
|
||||||
|
// Init sensors and controllers
|
||||||
|
ControllerManager.initialize();
|
||||||
|
for(HalSensor sensor : HalSensor.getLocalSensors(db)){
|
||||||
|
//ControllerManager.getInstance().register(sensor);
|
||||||
|
}
|
||||||
|
|
||||||
// init daemons
|
// init daemons
|
||||||
daemons = new HalDaemon[]{
|
daemons = new HalDaemon[]{
|
||||||
|
|
|
||||||
8
src/se/koc/hal/plugin/tellstick/plugin.json
Executable file
8
src/se/koc/hal/plugin/tellstick/plugin.json
Executable file
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"version": 1.0,
|
||||||
|
"name": "Tellstick",
|
||||||
|
"interfaces": [
|
||||||
|
{"se.koc.hal.struct.HalSensor": "se.koc.hal.plugin.tellstick.protocols.Oregon0x1A2D"},
|
||||||
|
{"se.koc.hal.struct.HalEvent": "se.koc.hal.plugin.tellstick.protocols.NexaSelfLearning"}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -31,7 +31,7 @@ public class HalEvent extends DBBean{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public HalEventController getController(){
|
public Class<? extends HalEventController> getController(){
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -111,7 +111,7 @@ public class HalSensor extends DBBean{
|
||||||
return AggregationMethod.SUM;
|
return AggregationMethod.SUM;
|
||||||
}
|
}
|
||||||
|
|
||||||
public HalSensorController getController(){
|
public Class<? extends HalSensorController> getController(){
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue