diff --git a/plugins/hal-dummy/build.gradle b/plugins/hal-dummy/build.gradle new file mode 100644 index 00000000..81fb360f --- /dev/null +++ b/plugins/hal-dummy/build.gradle @@ -0,0 +1,3 @@ +dependencies { + implementation project(':hal-core') +} diff --git a/plugins/hal-dummy/src/se/hal/plugin/dummy/DummyController.java b/plugins/hal-dummy/src/se/hal/plugin/dummy/DummyController.java new file mode 100644 index 00000000..a7771ee1 --- /dev/null +++ b/plugins/hal-dummy/src/se/hal/plugin/dummy/DummyController.java @@ -0,0 +1,89 @@ +package se.hal.plugin.dummy; + +import se.hal.intf.*; +import se.hal.struct.devicedata.TemperatureSensorData; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.*; + + +public class DummyController implements HalSensorController, HalEventController, Runnable { + private List registeredDevices = new ArrayList(); + private ScheduledExecutorService executor; + private HalSensorReportListener sensorListener; + private HalEventReportListener eventListener; + + + public DummyController() {} + + + @Override + public void initialize() { + executor = Executors.newScheduledThreadPool(1); + executor.scheduleAtFixedRate(this, 0, 60, TimeUnit.SECONDS); + } + + + @Override + public void run() { + if (registeredDevices != null) { + for (Object device : registeredDevices) { + if (sensorListener != null && device instanceof DummyTemperatureSensor) { + sensorListener.reportReceived( + (HalSensorConfig) device, + new TemperatureSensorData( + (int)(Math.random()*30), + System.currentTimeMillis() + ) + ); + } + } + } + } + + @Override + public void register(HalSensorConfig sensorConfig) { + if (sensorConfig instanceof DummyTemperatureSensor) { + registeredDevices.add(sensorConfig); + } + } + + @Override + public void register(HalEventConfig eventConfig) { + if (eventConfig instanceof DummySwitchEvent) { + registeredDevices.add(eventConfig); + } + } + + @Override + public void deregister(HalSensorConfig sensorConfig) { + registeredDevices.remove(sensorConfig); + } + + @Override + public void deregister(HalEventConfig eventConfig) { + registeredDevices.remove(eventConfig); + } + + @Override + public void send(HalEventConfig eventConfig, HalEventData eventData) { + // Nothing to do as this is a dummy + } + + @Override + public int size() { + return registeredDevices.size(); + } + + @Override + public void setListener(HalSensorReportListener listener) { sensorListener = listener; } + + @Override + public void setListener(HalEventReportListener listener) { eventListener = listener; } + + @Override + public void close() { + executor.shutdown(); + } +} diff --git a/plugins/hal-dummy/src/se/hal/plugin/dummy/DummySwitchEvent.java b/plugins/hal-dummy/src/se/hal/plugin/dummy/DummySwitchEvent.java new file mode 100644 index 00000000..ef8afb42 --- /dev/null +++ b/plugins/hal-dummy/src/se/hal/plugin/dummy/DummySwitchEvent.java @@ -0,0 +1,22 @@ +package se.hal.plugin.dummy; + +import se.hal.intf.*; +import se.hal.struct.devicedata.SwitchEventData; +import se.hal.struct.devicedata.TemperatureSensorData; + +public class DummySwitchEvent implements HalEventConfig { + + + public DummySwitchEvent() { } + + + @Override + public Class getEventControllerClass() { + return DummyController.class; + } + + @Override + public Class getEventDataClass() { + return SwitchEventData.class; + } +} diff --git a/plugins/hal-dummy/src/se/hal/plugin/dummy/DummyTemperatureSensor.java b/plugins/hal-dummy/src/se/hal/plugin/dummy/DummyTemperatureSensor.java new file mode 100644 index 00000000..68e0661e --- /dev/null +++ b/plugins/hal-dummy/src/se/hal/plugin/dummy/DummyTemperatureSensor.java @@ -0,0 +1,35 @@ +package se.hal.plugin.dummy; + +import se.hal.intf.HalSensorConfig; +import se.hal.intf.HalSensorController; +import se.hal.intf.HalSensorData; +import se.hal.struct.devicedata.TemperatureSensorData; + + +public class DummyTemperatureSensor implements HalSensorConfig { + + + public DummyTemperatureSensor() { } + + + @Override + public long getDataInterval() { + return 60*1000; // 1 min + } + + @Override + public AggregationMethod getAggregationMethod() { + return AggregationMethod.AVERAGE; + } + + @Override + public Class getSensorControllerClass() { + return DummyController.class; + } + + @Override + public Class getSensorDataClass() { + return TemperatureSensorData.class; + } + +} diff --git a/plugins/hal-dummy/src/se/hal/plugin/dummy/plugin.json b/plugins/hal-dummy/src/se/hal/plugin/dummy/plugin.json new file mode 100644 index 00000000..1ee1cff2 --- /dev/null +++ b/plugins/hal-dummy/src/se/hal/plugin/dummy/plugin.json @@ -0,0 +1,9 @@ +{ + "version": 0.1, + "name": "Hal-Dummy Devices", + "description": "Dummy devices with simulated data, can be used for demo or testing purposes.", + "interfaces": [ + {"se.hal.intf.HalSensorConfig": "se.hal.plugin.dummy.DummyTemperatureSensor"}, + {"se.hal.intf.HalEventConfig": "se.hal.plugin.dummy.DummySwitchEvent"} + ] +} \ No newline at end of file