Added dummy plugin for simulated sensors

This commit is contained in:
Ziver Koc 2020-12-05 00:08:29 +01:00
parent c6f90c42af
commit fc37d158c5
5 changed files with 158 additions and 0 deletions

View file

@ -0,0 +1,3 @@
dependencies {
implementation project(':hal-core')
}

View file

@ -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();
}
}

View file

@ -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;
}
}

View file

@ -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;
}
}

View 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"}
]
}