diff --git a/pom.xml b/pom.xml index f3ea4a4..6a481ee 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.bwssystems.HABridge ha-bridge - 5.2.0RC13 + 5.2.0RC14 jar HA Bridge diff --git a/src/main/java/com/bwssystems/HABridge/plugins/broadlink/BroadlinkHome.java b/src/main/java/com/bwssystems/HABridge/plugins/broadlink/BroadlinkHome.java index 1003b6e..9a3808e 100644 --- a/src/main/java/com/bwssystems/HABridge/plugins/broadlink/BroadlinkHome.java +++ b/src/main/java/com/bwssystems/HABridge/plugins/broadlink/BroadlinkHome.java @@ -16,6 +16,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.bwssystems.HABridge.BridgeSettings; +import com.bwssystems.HABridge.BridgeSettingsDescriptor; import com.bwssystems.HABridge.Configuration; import com.bwssystems.HABridge.Home; import com.bwssystems.HABridge.api.CallItem; @@ -44,6 +45,7 @@ public class BroadlinkHome implements Home { private Boolean validBroadlink; private boolean closed; private Boolean isDevMode; + private BridgeSettingsDescriptor bridgeSettingsDesc; public BroadlinkHome(BridgeSettings bridgeSettings) { super(); @@ -55,62 +57,60 @@ public class BroadlinkHome implements Home { @Override public Home createHome(BridgeSettings bridgeSettings) { broadlinkMap = null; - BLDevice[] clients; + bridgeSettingsDesc = bridgeSettings.getBridgeSettingsDescriptor(); isDevMode = Boolean.parseBoolean(System.getProperty("dev.mode", "false")); validBroadlink = bridgeSettings.getBridgeSettingsDescriptor().isValidBroadlink(); log.info("Broadlink Home created." + (validBroadlink ? "" : " No Broadlinks configured.") + (isDevMode ? " DevMode is set." : "")); - if(validBroadlink) { - broadlinkMap = new HashMap(); - int aDiscoverPort = Configuration.BROADLINK_DISCOVER_PORT; - while(aDiscoverPort > 0) { - try { - log.info("Broadlink discover...."); - if(isDevMode) { - clients = TestBLDevice.discoverDevices(InetAddress.getByName(bridgeSettings.getBridgeSettingsDescriptor().getUpnpConfigAddress()), aDiscoverPort, Configuration.BROADLINK_DISCONVER_TIMEOUT); - } - else - clients = BLDevice.discoverDevices(InetAddress.getByName(bridgeSettings.getBridgeSettingsDescriptor().getUpnpConfigAddress()), aDiscoverPort, Configuration.BROADLINK_DISCONVER_TIMEOUT); - if(clients.length <= 0) { - log.warn("Did not discover any Broadlinks, try again with bridge reinitialization"); - broadlinkMap = null; - validBroadlink = false; - return this; - } - for(int i = 0; i < clients.length; i++) { - if(clients[i].getDeviceType() != BLDevice.DEV_A1) { - broadlinkMap.put(clients[i].getHost() + "-" + String.format("%04x", clients[i].getDeviceType()), clients[i]); - log.debug("Adding Device to Map - host: " + clients[i].getHost() + ", device Type: " + clients[i].getDeviceDescription() + ", mac: " + (clients[i].getMac() == null ? "no Mac in client" : clients[i].getMac().getMacString())); - } else { - log.debug("Ignoring A1 Device - host: " + clients[i].getHost() + ", device Type: " + clients[i].getDeviceDescription() + ", mac: " + (clients[i].getMac() == null ? "no Mac in client" : clients[i].getMac().getMacString())); - } - } - aDiscoverPort = 0; - } catch (BindException e) { - log.warn("Could not discover Broadlinks, Port in use, increasing by 11"); - aDiscoverPort += 11; - if(aDiscoverPort > Configuration.BROADLINK_DISCOVER_PORT + 110) - aDiscoverPort = 0; - } catch (IOException e) { - log.warn("Could not discover Broadlinks, with IO Exception", e); - broadlinkMap = null; - validBroadlink = false; - aDiscoverPort = 0; - } - } - } return this; } @Override public Object getItems(String type) { + BLDevice[] clients; + BroadlinkEntry theResponse = null; + List deviceList = new ArrayList(); log.debug("consolidating devices for Broadlink"); if(!validBroadlink) return null; - BroadlinkEntry theResponse = null; + broadlinkMap = new HashMap(); + int aDiscoverPort = Configuration.BROADLINK_DISCOVER_PORT; + while(aDiscoverPort > 0) { + try { + log.info("Broadlink discover...."); + if(isDevMode) { + clients = TestBLDevice.discoverDevices(InetAddress.getByName(bridgeSettingsDesc.getUpnpConfigAddress()), aDiscoverPort, Configuration.BROADLINK_DISCONVER_TIMEOUT); + } + else + clients = BLDevice.discoverDevices(InetAddress.getByName(bridgeSettingsDesc.getUpnpConfigAddress()), aDiscoverPort, Configuration.BROADLINK_DISCONVER_TIMEOUT); + if(clients.length <= 0) { + log.warn("Did not discover any Broadlinks."); + broadlinkMap = null; + return deviceList; + } + for(int i = 0; i < clients.length; i++) { + if(clients[i].getDeviceType() != BLDevice.DEV_A1) { + broadlinkMap.put(clients[i].getHost() + "-" + String.format("%04x", clients[i].getDeviceType()), clients[i]); + log.debug("Adding Device to Map - host: " + clients[i].getHost() + ", device Type: " + clients[i].getDeviceDescription() + ", mac: " + (clients[i].getMac() == null ? "no Mac in client" : clients[i].getMac().getMacString())); + } else { + log.debug("Ignoring A1 Device - host: " + clients[i].getHost() + ", device Type: " + clients[i].getDeviceDescription() + ", mac: " + (clients[i].getMac() == null ? "no Mac in client" : clients[i].getMac().getMacString())); + } + } + aDiscoverPort = 0; + } catch (BindException e) { + log.warn("Could not discover Broadlinks, Port in use, increasing by 11"); + aDiscoverPort += 11; + if(aDiscoverPort > Configuration.BROADLINK_DISCOVER_PORT + 110) + aDiscoverPort = 0; + } catch (IOException e) { + log.warn("Could not discover Broadlinks, with IO Exception", e); + broadlinkMap = null; + validBroadlink = false; + aDiscoverPort = 0; + } + } Iterator keys = broadlinkMap.keySet().iterator(); - List deviceList = new ArrayList(); while(keys.hasNext()) { String key = keys.next(); theResponse = toEntry(broadlinkMap.get(key)); @@ -341,8 +341,10 @@ public class BroadlinkHome implements Home { if(!validBroadlink) return; log.debug("Closing Home."); - broadlinkMap.clear(); - broadlinkMap = null; + if(broadlinkMap != null) { + broadlinkMap.clear(); + broadlinkMap = null; + } if(closed) { log.debug("Home is already closed...."); return;