Changed device listener to be a list instead of single listener
This commit is contained in:
parent
8d9896f8b4
commit
53d471c0aa
24 changed files with 120 additions and 97 deletions
|
|
@ -7,14 +7,14 @@ import se.hal.intf.*;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
|
||||
public class DummyController implements HalSensorController, HalEventController, Runnable, HalDaemon {
|
||||
private List<DummyDevice> registeredDevices = new ArrayList();
|
||||
private HalDeviceReportListener sensorListener;
|
||||
private HalDeviceReportListener eventListener;
|
||||
private List<HalDeviceReportListener> deviceListeners = new CopyOnWriteArrayList<>();
|
||||
|
||||
|
||||
public DummyController() {}
|
||||
|
|
@ -36,10 +36,8 @@ public class DummyController implements HalSensorController, HalEventController,
|
|||
for (DummyDevice device : registeredDevices) {
|
||||
HalDeviceData data = device.generateData();
|
||||
|
||||
if (sensorListener != null && data instanceof HalSensorData) {
|
||||
sensorListener.reportReceived((HalSensorConfig) device, (HalSensorData) data);
|
||||
} else if (eventListener != null && data instanceof HalEventData) {
|
||||
eventListener.reportReceived((HalEventConfig) device, (HalEventData) data);
|
||||
for (HalDeviceReportListener deviceListener : deviceListeners) {
|
||||
deviceListener.reportReceived(device, data);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
|
|
@ -60,7 +58,7 @@ public class DummyController implements HalSensorController, HalEventController,
|
|||
|
||||
@Override
|
||||
public synchronized void send(HalEventConfig eventConfig, HalEventData eventData) {
|
||||
// Nothing to do as this is a dummy
|
||||
// Nothing to do as this is a dummy controller
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -69,11 +67,8 @@ public class DummyController implements HalSensorController, HalEventController,
|
|||
}
|
||||
|
||||
@Override
|
||||
public void setListener(HalDeviceReportListener listener) {
|
||||
if (listener instanceof SensorControllerManager)
|
||||
sensorListener = listener;
|
||||
else if (listener instanceof EventControllerManager)
|
||||
eventListener = listener;
|
||||
public void addListener(HalDeviceReportListener listener) {
|
||||
deviceListeners.add(listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -24,9 +24,10 @@
|
|||
|
||||
package se.hal.plugin.dummy;
|
||||
|
||||
import se.hal.intf.HalDeviceConfig;
|
||||
import se.hal.intf.HalDeviceData;
|
||||
|
||||
public interface DummyDevice {
|
||||
public interface DummyDevice extends HalDeviceConfig {
|
||||
|
||||
public HalDeviceData generateData();
|
||||
HalDeviceData generateData();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,11 @@
|
|||
package se.hal.plugin.dummy;
|
||||
package se.hal.plugin.dummy.device;
|
||||
|
||||
import se.hal.intf.HalDeviceData;
|
||||
import se.hal.intf.HalSensorConfig;
|
||||
import se.hal.intf.HalSensorController;
|
||||
import se.hal.intf.HalSensorData;
|
||||
import se.hal.plugin.dummy.DummyController;
|
||||
import se.hal.plugin.dummy.DummyDevice;
|
||||
import se.hal.struct.devicedata.HumiditySensorData;
|
||||
|
||||
|
||||
|
|
@ -1,9 +1,11 @@
|
|||
package se.hal.plugin.dummy;
|
||||
package se.hal.plugin.dummy.device;
|
||||
|
||||
import se.hal.intf.HalDeviceData;
|
||||
import se.hal.intf.HalEventConfig;
|
||||
import se.hal.intf.HalEventController;
|
||||
import se.hal.intf.HalEventData;
|
||||
import se.hal.plugin.dummy.DummyController;
|
||||
import se.hal.plugin.dummy.DummyDevice;
|
||||
import se.hal.struct.devicedata.OnOffEventData;
|
||||
|
||||
public class DummySwitchEvent implements DummyDevice, HalEventConfig {
|
||||
|
|
@ -1,9 +1,11 @@
|
|||
package se.hal.plugin.dummy;
|
||||
package se.hal.plugin.dummy.device;
|
||||
|
||||
import se.hal.intf.HalDeviceData;
|
||||
import se.hal.intf.HalSensorConfig;
|
||||
import se.hal.intf.HalSensorController;
|
||||
import se.hal.intf.HalSensorData;
|
||||
import se.hal.plugin.dummy.DummyController;
|
||||
import se.hal.plugin.dummy.DummyDevice;
|
||||
import se.hal.struct.devicedata.TemperatureSensorData;
|
||||
|
||||
|
||||
|
|
@ -3,8 +3,8 @@
|
|||
"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.DummyHumiditySensor"},
|
||||
{"se.hal.intf.HalEventConfig": "se.hal.plugin.dummy.DummySwitchEvent"},
|
||||
{"se.hal.intf.HalSensorConfig": "se.hal.plugin.dummy.DummyTemperatureSensor"}
|
||||
{"se.hal.intf.HalEventConfig": "se.hal.plugin.dummy.device.DummySwitchEvent"},
|
||||
{"se.hal.intf.HalSensorConfig": "se.hal.plugin.dummy.device.DummyHumiditySensor"},
|
||||
{"se.hal.intf.HalSensorConfig": "se.hal.plugin.dummy.device.DummyTemperatureSensor"}
|
||||
]
|
||||
}
|
||||
|
|
@ -36,6 +36,8 @@ import zutil.net.mqtt.MqttSubscriptionListener;
|
|||
import java.io.IOException;
|
||||
import java.net.InetAddress;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
|
|
@ -46,7 +48,7 @@ public class HalMqttController implements HalAutostartController, MqttSubscripti
|
|||
private MqttBroker mqttBroker;
|
||||
|
||||
private HashMap<String, HalMqttDeviceConfig> topics = new HashMap<>();
|
||||
private HalDeviceReportListener eventListener;
|
||||
private List<HalDeviceReportListener> deviceListeners = new CopyOnWriteArrayList<>();
|
||||
|
||||
// --------------------------
|
||||
// Lifecycle methods
|
||||
|
|
@ -105,8 +107,10 @@ public class HalMqttController implements HalAutostartController, MqttSubscripti
|
|||
if (eventConfig != null && data.length > 0) {
|
||||
HalMqttDeviceData eventData = new HalMqttDeviceData(data);
|
||||
|
||||
if (eventListener != null) {
|
||||
eventListener.reportReceived(eventConfig, eventData);
|
||||
if (deviceListeners != null) {
|
||||
for (HalDeviceReportListener deviceListener : deviceListeners) {
|
||||
deviceListener.reportReceived(eventConfig, eventData);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -120,8 +124,10 @@ public class HalMqttController implements HalAutostartController, MqttSubscripti
|
|||
if (deviceConfig instanceof HalMqttDeviceConfig) {
|
||||
HalMqttDeviceConfig mqttEvent = (HalMqttDeviceConfig) deviceConfig;
|
||||
topics.put(mqttEvent.getTopic(), mqttEvent);
|
||||
} else throw new IllegalArgumentException(
|
||||
"Device config is not an instance of " + HalMqttDeviceConfig.class + ": " + deviceConfig.getClass());
|
||||
} else {
|
||||
throw new IllegalArgumentException(
|
||||
"Device config is not an instance of " + HalMqttDeviceConfig.class + ": " + deviceConfig.getClass());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -147,7 +153,7 @@ public class HalMqttController implements HalAutostartController, MqttSubscripti
|
|||
}
|
||||
|
||||
@Override
|
||||
public void setListener(HalDeviceReportListener listener) {
|
||||
eventListener = listener;
|
||||
public void addListener(HalDeviceReportListener listener) {
|
||||
deviceListeners.add(listener);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,9 @@ import zutil.osal.MultiCommandExecutor;
|
|||
|
||||
import java.net.InetAddress;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
|
@ -25,19 +27,18 @@ public class NetScanController implements HalEventController, HalAutostartContro
|
|||
private static final String PARAM_IPSCAN = "netscan.ipscan";
|
||||
|
||||
private ScheduledExecutorService executor;
|
||||
private HalDeviceReportListener listener;
|
||||
private List<HalDeviceReportListener> deviceListeners = new CopyOnWriteArrayList<>();
|
||||
/** A register and a cache of previous state **/
|
||||
private HashMap<NetworkDevice, AvailabilityEventData> devices = new HashMap<>();
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public boolean isAvailable() {
|
||||
return ! InetUtil.getLocalInet4Address().isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initialize() throws Exception {
|
||||
public void initialize() {
|
||||
executor = Executors.newScheduledThreadPool(2);
|
||||
executor.scheduleAtFixedRate(NetScanController.this, 10_000, PING_INTERVAL, TimeUnit.MILLISECONDS);
|
||||
if (HalContext.getBooleanProperty(PARAM_IPSCAN, true)) {
|
||||
|
|
@ -64,7 +65,8 @@ public class NetScanController implements HalEventController, HalAutostartContro
|
|||
for (Map.Entry<NetworkDevice, AvailabilityEventData> entry : devices.entrySet()) {
|
||||
NetworkDevice device = entry.getKey();
|
||||
AvailabilityEventData prevData = entry.getValue();
|
||||
if (listener != null) {
|
||||
|
||||
if (!deviceListeners.isEmpty()) {
|
||||
// We ping two times to increase reliability
|
||||
boolean ping = false;
|
||||
ping |= InetScanner.isReachable(device.getHost(), executor);
|
||||
|
|
@ -76,7 +78,10 @@ public class NetScanController implements HalEventController, HalAutostartContro
|
|||
AvailabilityEventData newData = new AvailabilityEventData(ping, System.currentTimeMillis());
|
||||
entry.setValue(newData);
|
||||
logger.fine("IP " + device.getHost() + " state has changed to " + newData);
|
||||
listener.reportReceived(device, newData);
|
||||
|
||||
for (HalDeviceReportListener deviceListener : deviceListeners) {
|
||||
deviceListener.reportReceived(device, newData);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -86,11 +91,13 @@ public class NetScanController implements HalEventController, HalAutostartContro
|
|||
}
|
||||
@Override
|
||||
public void foundInetAddress(InetAddress ip) {
|
||||
logger.fine("Auto Detected ip: "+ip.getHostAddress());
|
||||
if (listener != null)
|
||||
listener.reportReceived(
|
||||
logger.fine("Auto Detected ip: " + ip.getHostAddress());
|
||||
|
||||
for (HalDeviceReportListener deviceListener : deviceListeners) {
|
||||
deviceListener.reportReceived(
|
||||
new NetworkDevice(ip.getHostAddress()),
|
||||
new AvailabilityEventData(true, System.currentTimeMillis()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -117,8 +124,8 @@ public class NetScanController implements HalEventController, HalAutostartContro
|
|||
|
||||
|
||||
@Override
|
||||
public void setListener(HalDeviceReportListener listener) {
|
||||
this.listener = listener;
|
||||
public void addListener(HalDeviceReportListener listener) {
|
||||
deviceListeners.add(listener);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -57,6 +57,8 @@ import zutil.log.LogUtil;
|
|||
import zutil.osal.linux.app.NutUPSClient;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
|
@ -74,7 +76,7 @@ public class NutUpsController implements HalSensorController, HalAutostartContro
|
|||
private HashMap<String, NutUpsDevice> registeredDevices = new HashMap<>();
|
||||
private NutUPSClient client;
|
||||
private ScheduledExecutorService executor;
|
||||
private HalDeviceReportListener listener;
|
||||
private List<HalDeviceReportListener> deviceListeners = new CopyOnWriteArrayList<>();
|
||||
|
||||
|
||||
|
||||
|
|
@ -98,20 +100,23 @@ public class NutUpsController implements HalSensorController, HalAutostartContro
|
|||
|
||||
|
||||
@Override
|
||||
public void setListener(HalDeviceReportListener listener) {
|
||||
this.listener = listener;
|
||||
public void addListener(HalDeviceReportListener listener) {
|
||||
deviceListeners.add(listener);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
if (client != null && listener != null) {
|
||||
for (NutUPSClient.UPSDevice ups : client.getUPSList()) {
|
||||
NutUpsDevice device = registeredDevices.get(ups.getId());
|
||||
if (device == null)
|
||||
device = new NutUpsDevice(ups);
|
||||
listener.reportReceived(device, device.read(ups));
|
||||
if (client != null) {
|
||||
for (HalDeviceReportListener deviceListener : deviceListeners) {
|
||||
for (NutUPSClient.UPSDevice ups : client.getUPSList()) {
|
||||
NutUpsDevice device = registeredDevices.get(ups.getId());
|
||||
if (device == null)
|
||||
device = new NutUpsDevice(ups);
|
||||
|
||||
deviceListener.reportReceived(device, device.read(ups));
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e){
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ import zutil.log.LogUtil;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
|
||||
|
|
@ -40,7 +41,7 @@ public class RTSPController implements HalCameraController {
|
|||
private static final String CONFIG_RECORDING_PATH = "nvr.recording_path";
|
||||
|
||||
private List<RTSPCameraConfig> cameras = new ArrayList<>();
|
||||
private HalDeviceReportListener listener;
|
||||
private List<HalDeviceReportListener> deviceListeners = new CopyOnWriteArrayList<>();
|
||||
|
||||
|
||||
public RTSPController() {}
|
||||
|
|
@ -81,8 +82,8 @@ public class RTSPController implements HalCameraController {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void setListener(HalDeviceReportListener listener) {
|
||||
this.listener = listener;
|
||||
public void addListener(HalDeviceReportListener listener) {
|
||||
deviceListeners.add(listener);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,15 @@
|
|||
package se.hal.plugin.raspberry;
|
||||
|
||||
import se.hal.intf.*;
|
||||
import se.hal.plugin.raspberry.device.RPiPowerConsumptionSensor;
|
||||
import se.hal.plugin.raspberry.device.RPiTemperatureSensor;
|
||||
import se.hal.plugin.raspberry.hardware.RPiDS18B20;
|
||||
import se.hal.plugin.raspberry.hardware.RPiInteruptPulseFlankCounter;
|
||||
import zutil.log.LogUtil;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
|
|
@ -13,34 +17,31 @@ public class RPiController implements HalSensorController {
|
|||
private static final Logger logger = LogUtil.getLogger();
|
||||
|
||||
private HashMap<String, RPiSensor> pinToSensorMap = new HashMap<>();
|
||||
private HalDeviceReportListener sensorListener;
|
||||
private List<HalDeviceReportListener> deviceListeners = new CopyOnWriteArrayList<>();
|
||||
|
||||
public RPiController(){
|
||||
|
||||
}
|
||||
public RPiController() {}
|
||||
|
||||
@Override
|
||||
public void initialize() throws Exception {
|
||||
|
||||
}
|
||||
public void initialize() {}
|
||||
|
||||
@Override
|
||||
public void register(HalDeviceConfig deviceConfig) {
|
||||
if (deviceConfig instanceof RPiPowerConsumptionSensor){
|
||||
RPiPowerConsumptionSensor powerConsumptionSensor = (RPiPowerConsumptionSensor) deviceConfig;
|
||||
int gpioPin = powerConsumptionSensor.getGpioPin();
|
||||
if (!pinToSensorMap.containsKey("GPIO_"+gpioPin)){
|
||||
if (!pinToSensorMap.containsKey("GPIO_" + gpioPin)){
|
||||
RPiInteruptPulseFlankCounter impulseCounter = new RPiInteruptPulseFlankCounter(gpioPin, this);
|
||||
pinToSensorMap.put("GPIO_"+gpioPin, impulseCounter);
|
||||
pinToSensorMap.put("GPIO_" + gpioPin, impulseCounter);
|
||||
} else {
|
||||
logger.warning("Cannot create a RPiPowerConsumptionSensor on GPIO pin " + gpioPin + " since is already is in use by another sensor.");
|
||||
}
|
||||
} else if (deviceConfig instanceof RPiTemperatureSensor){
|
||||
RPiTemperatureSensor temperatureSensor = (RPiTemperatureSensor) deviceConfig;
|
||||
String w1Address = temperatureSensor.get1WAddress();
|
||||
if (!pinToSensorMap.containsKey("W1_"+w1Address)){
|
||||
if (!pinToSensorMap.containsKey("W1_" + w1Address)){
|
||||
RPiDS18B20 ds12b20 = new RPiDS18B20(w1Address, this);
|
||||
pinToSensorMap.put("W1_"+w1Address, ds12b20);
|
||||
pinToSensorMap.put("W1_" + w1Address, ds12b20);
|
||||
} else {
|
||||
logger.warning("Cannot create a RPi1WireTemperatureSensor on 1-Wire address " + w1Address + " since is already is in use by another sensor.");
|
||||
}
|
||||
|
|
@ -53,13 +54,13 @@ public class RPiController implements HalSensorController {
|
|||
public void deregister(HalDeviceConfig deviceConfig) {
|
||||
if (deviceConfig instanceof RPiPowerConsumptionSensor){
|
||||
RPiPowerConsumptionSensor powerConsumptionSensor = (RPiPowerConsumptionSensor) deviceConfig;
|
||||
RPiSensor sensorToDeregister = pinToSensorMap.remove("GPIO_"+powerConsumptionSensor.getGpioPin());
|
||||
RPiSensor sensorToDeregister = pinToSensorMap.remove("GPIO_" + powerConsumptionSensor.getGpioPin());
|
||||
if (sensorToDeregister != null){
|
||||
sensorToDeregister.close();
|
||||
}
|
||||
} else if (deviceConfig instanceof RPiTemperatureSensor){
|
||||
RPiTemperatureSensor temperatureSensor = (RPiTemperatureSensor) deviceConfig;
|
||||
RPiSensor sensorToDeregister = pinToSensorMap.remove("W1_"+temperatureSensor.get1WAddress());
|
||||
RPiSensor sensorToDeregister = pinToSensorMap.remove("W1_" + temperatureSensor.get1WAddress());
|
||||
if (sensorToDeregister != null){
|
||||
sensorToDeregister.close();
|
||||
}
|
||||
|
|
@ -75,8 +76,8 @@ public class RPiController implements HalSensorController {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void setListener(HalDeviceReportListener listener) {
|
||||
sensorListener = listener;
|
||||
public void addListener(HalDeviceReportListener listener) {
|
||||
deviceListeners.add(listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -88,10 +89,8 @@ public class RPiController implements HalSensorController {
|
|||
}
|
||||
|
||||
public void sendDataReport(HalSensorConfig sensorConfig, HalSensorData sensorData){
|
||||
if (sensorListener != null){
|
||||
sensorListener.reportReceived(sensorConfig, sensorData);
|
||||
} else {
|
||||
logger.log(Level.WARNING, "Could not report data. No registered listener");
|
||||
for (HalDeviceReportListener deviceListener : deviceListeners) {
|
||||
deviceListener.reportReceived(sensorConfig, sensorData);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +1,9 @@
|
|||
package se.hal.plugin.raspberry;
|
||||
package se.hal.plugin.raspberry.device;
|
||||
|
||||
import se.hal.intf.HalSensorConfig;
|
||||
import se.hal.intf.HalSensorController;
|
||||
import se.hal.intf.HalSensorData;
|
||||
import se.hal.plugin.raspberry.RPiController;
|
||||
import se.hal.struct.devicedata.PowerConsumptionSensorData;
|
||||
import zutil.ui.conf.Configurator;
|
||||
|
||||
|
|
@ -1,8 +1,9 @@
|
|||
package se.hal.plugin.raspberry;
|
||||
package se.hal.plugin.raspberry.device;
|
||||
|
||||
import se.hal.intf.HalSensorConfig;
|
||||
import se.hal.intf.HalSensorController;
|
||||
import se.hal.intf.HalSensorData;
|
||||
import se.hal.plugin.raspberry.RPiController;
|
||||
import se.hal.struct.devicedata.TemperatureSensorData;
|
||||
import zutil.ui.conf.Configurator;
|
||||
|
||||
|
|
@ -5,7 +5,7 @@ import com.pi4j.io.w1.W1Master;
|
|||
import com.pi4j.temperature.TemperatureScale;
|
||||
import se.hal.plugin.raspberry.RPiController;
|
||||
import se.hal.plugin.raspberry.RPiSensor;
|
||||
import se.hal.plugin.raspberry.RPiTemperatureSensor;
|
||||
import se.hal.plugin.raspberry.device.RPiTemperatureSensor;
|
||||
import se.hal.struct.devicedata.TemperatureSensorData;
|
||||
import zutil.log.LogUtil;
|
||||
|
||||
|
|
@ -33,12 +33,11 @@ public class RPiDS18B20 implements RPiSensor, Runnable {
|
|||
|
||||
//print out all sensors found
|
||||
for (TemperatureSensor device : w1Mater.getDevices(TemperatureSensor.class)) {
|
||||
logger.info(String.format("1-Wire temperature sensor divice found: %-20s: %3.1f"+DEGREE_SIGN+"C\n", device.getName(), device.getTemperature(TemperatureScale.CELSIUS)));
|
||||
logger.info(String.format("1-Wire temperature sensor device found: %-20s: %3.1f"+DEGREE_SIGN+"C\n", device.getName(), device.getTemperature(TemperatureScale.CELSIUS)));
|
||||
}
|
||||
|
||||
//schedule job
|
||||
scheduler.scheduleAtFixedRate(this, 10, 60, TimeUnit.SECONDS); //wait 10s and run every 60s
|
||||
|
||||
}
|
||||
|
||||
public void close() {
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import com.pi4j.io.gpio.event.GpioPinDigitalStateChangeEvent;
|
|||
import com.pi4j.io.gpio.event.GpioPinListenerDigital;
|
||||
import com.pi4j.wiringpi.GpioUtil;
|
||||
import se.hal.plugin.raspberry.RPiController;
|
||||
import se.hal.plugin.raspberry.RPiPowerConsumptionSensor;
|
||||
import se.hal.plugin.raspberry.device.RPiPowerConsumptionSensor;
|
||||
import se.hal.plugin.raspberry.RPiSensor;
|
||||
import se.hal.plugin.raspberry.RPiUtility;
|
||||
import se.hal.struct.devicedata.PowerConsumptionSensorData;
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
"version": 1.0,
|
||||
"name": "Hal-RaspberryPi Sensors",
|
||||
"interfaces": [
|
||||
{"se.hal.intf.HalSensorConfig": "se.hal.plugin.raspberry.RPiPowerConsumptionSensor"},
|
||||
{"se.hal.intf.HalSensorConfig": "se.hal.plugin.raspberry.RPiTemperatureSensor"}
|
||||
{"se.hal.intf.HalSensorConfig": "se.hal.plugin.raspberry.device.RPiPowerConsumptionSensor"},
|
||||
{"se.hal.intf.HalSensorConfig": "se.hal.plugin.raspberry.device.RPiTemperatureSensor"}
|
||||
]
|
||||
}
|
||||
|
|
@ -36,6 +36,7 @@ import java.io.OutputStream;
|
|||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
|
@ -61,7 +62,7 @@ public class TellstickSerialComm implements Runnable,
|
|||
|
||||
protected TellstickParser parser = new TellstickParser();
|
||||
|
||||
private HalDeviceReportListener deviceListener;
|
||||
private List<HalDeviceReportListener> deviceListeners = new CopyOnWriteArrayList<>();
|
||||
private List<HalDeviceConfig> registeredDevices = Collections.synchronizedList(new ArrayList<HalDeviceConfig>());
|
||||
|
||||
|
||||
|
|
@ -185,8 +186,9 @@ public class TellstickSerialComm implements Runnable,
|
|||
receivedTransmissionSet.add(data);
|
||||
}
|
||||
private void reportEvent(HalDeviceConfig tellstickDevice, HalDeviceData deviceData) {
|
||||
if (deviceListener != null)
|
||||
for (HalDeviceReportListener deviceListener : deviceListeners) {
|
||||
deviceListener.reportReceived(tellstickDevice, deviceData);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -249,8 +251,8 @@ public class TellstickSerialComm implements Runnable,
|
|||
}
|
||||
|
||||
@Override
|
||||
public void setListener(HalDeviceReportListener listener) {
|
||||
deviceListener = listener;
|
||||
public void addListener(HalDeviceReportListener listener) {
|
||||
deviceListeners.add(listener);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -77,7 +77,7 @@ public class DeConzZigbeeController implements HalSensorController, HalEventCont
|
|||
}
|
||||
|
||||
@Override
|
||||
public void setListener(HalDeviceReportListener listener) {
|
||||
public void addListener(HalDeviceReportListener listener) {
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ import java.lang.reflect.InvocationTargetException;
|
|||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
|
|
@ -58,7 +59,7 @@ public class HalZigbeeController implements HalSensorController,
|
|||
protected ZigBeeNetworkManager networkManager;
|
||||
|
||||
private Timer permitJoinTimer;
|
||||
private HalDeviceReportListener deviceListener;
|
||||
private List<HalDeviceReportListener> deviceListeners = new CopyOnWriteArrayList<>();
|
||||
private List<ZigbeeHalDeviceConfig> registeredDevices = new ArrayList<>();
|
||||
|
||||
|
||||
|
|
@ -277,7 +278,7 @@ public class HalZigbeeController implements HalSensorController,
|
|||
cluster.addAttributeListener(new ZclAttributeListener() {
|
||||
@Override
|
||||
public void attributeUpdated(ZclAttribute attribute, Object value) {
|
||||
if (deviceListener != null) {
|
||||
for (HalDeviceReportListener deviceListener : deviceListeners) {
|
||||
logger.finer("[Node: " + endpoint.getIeeeAddress() + ", Endpoint: " + endpoint.getEndpointId() + ", Cluster: " + attribute.getCluster().getId() + "] Attribute updated: attribute_name=" + attribute.getName() + ", value=" + attribute.getLastValue());
|
||||
deviceListener.reportReceived(config, config.getDeviceData(attribute));
|
||||
}
|
||||
|
|
@ -285,8 +286,9 @@ public class HalZigbeeController implements HalSensorController,
|
|||
});
|
||||
|
||||
// // TODO: Notify listener that a device is online
|
||||
if (deviceListener != null)
|
||||
for (HalDeviceReportListener deviceListener : deviceListeners) {
|
||||
deviceListener.reportReceived(config, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -325,8 +327,8 @@ public class HalZigbeeController implements HalSensorController,
|
|||
}
|
||||
|
||||
@Override
|
||||
public void setListener(HalDeviceReportListener listener) {
|
||||
deviceListener = listener;
|
||||
public void addListener(HalDeviceReportListener listener) {
|
||||
deviceListeners.add(listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import se.hal.intf.*;
|
|||
import zutil.log.LogUtil;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
|
|
@ -27,8 +28,7 @@ public class HalZWaveController implements HalSensorController, HalEventControll
|
|||
private Options options;
|
||||
private Manager manager;
|
||||
|
||||
private HalDeviceReportListener sensorListener;
|
||||
private HalDeviceReportListener deviceListener;
|
||||
private List<HalDeviceReportListener> deviceListeners = new CopyOnWriteArrayList<>();
|
||||
private List<HalAbstractDevice> registeredDevices;
|
||||
|
||||
|
||||
|
|
@ -320,8 +320,8 @@ public class HalZWaveController implements HalSensorController, HalEventControll
|
|||
}
|
||||
|
||||
@Override
|
||||
public void setListener(HalDeviceReportListener listener) {
|
||||
deviceListener = listener;
|
||||
public void addListener(HalDeviceReportListener listener) {
|
||||
deviceListeners.add(listener);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue