Added dummy plugin for simulated sensors
This commit is contained in:
parent
c6f90c42af
commit
fc37d158c5
5 changed files with 158 additions and 0 deletions
3
plugins/hal-dummy/build.gradle
Normal file
3
plugins/hal-dummy/build.gradle
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
dependencies {
|
||||||
|
implementation project(':hal-core')
|
||||||
|
}
|
||||||
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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<? extends HalEventController> getEventControllerClass() {
|
||||||
|
return DummyController.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<? extends HalEventData> getEventDataClass() {
|
||||||
|
return SwitchEventData.class;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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<? extends HalSensorController> getSensorControllerClass() {
|
||||||
|
return DummyController.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<? extends HalSensorData> getSensorDataClass() {
|
||||||
|
return TemperatureSensorData.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
9
plugins/hal-dummy/src/se/hal/plugin/dummy/plugin.json
Normal file
9
plugins/hal-dummy/src/se/hal/plugin/dummy/plugin.json
Normal file
|
|
@ -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"}
|
||||||
|
]
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue