From d827605fa5e38008d9390b52a5b2997d809936c1 Mon Sep 17 00:00:00 2001 From: bwssystems Date: Mon, 26 Dec 2016 11:28:06 -0600 Subject: [PATCH] Conitnuation of refactoring --- pom.xml | 2 +- .../bwssystems/HABridge/hue/HueMulator.java | 340 +----------------- .../HABridge/hue/HueMulatorHandler.java | 3 +- .../com/bwssystems/NestBridge/NestHome.java | 3 +- .../java/com/bwssystems/exec/CommandHome.java | 3 +- src/main/java/com/bwssystems/hal/HalHome.java | 3 +- .../com/bwssystems/harmony/ButtonPress.java | 7 + .../com/bwssystems/harmony/HarmonyHome.java | 84 ++++- .../com/bwssystems/harmony/RunActivity.java | 9 + .../java/com/bwssystems/hass/HassHome.java | 3 +- .../java/com/bwssystems/http/HTTPHandler.java | 10 + .../java/com/bwssystems/http/HTTPHome.java | 3 +- src/main/java/com/bwssystems/hue/HueHome.java | 70 +++- src/main/java/com/bwssystems/hue/HueInfo.java | 7 - src/main/java/com/bwssystems/hue/HueUtil.java | 3 +- .../java/com/bwssystems/mqtt/MQTTHome.java | 47 ++- src/main/java/com/bwssystems/tcp/TCPHome.java | 3 +- src/main/java/com/bwssystems/udp/UDPHome.java | 3 +- .../java/com/bwssystems/vera/VeraHome.java | 3 +- 19 files changed, 251 insertions(+), 355 deletions(-) diff --git a/pom.xml b/pom.xml index 9da37ab..466e043 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.bwssystems.HABridge ha-bridge - 3.5.1n + 3.5.1o jar HA Bridge diff --git a/src/main/java/com/bwssystems/HABridge/hue/HueMulator.java b/src/main/java/com/bwssystems/HABridge/hue/HueMulator.java index fdd2db9..bf83e09 100644 --- a/src/main/java/com/bwssystems/HABridge/hue/HueMulator.java +++ b/src/main/java/com/bwssystems/HABridge/hue/HueMulator.java @@ -16,16 +16,10 @@ import com.bwssystems.HABridge.api.hue.HuePublicConfig; import com.bwssystems.HABridge.api.hue.StateChangeBody; import com.bwssystems.HABridge.api.hue.WhitelistEntry; import com.bwssystems.HABridge.dao.*; -import com.bwssystems.harmony.ButtonPress; -import com.bwssystems.harmony.HarmonyHandler; -import com.bwssystems.harmony.HarmonyHome; -import com.bwssystems.harmony.RunActivity; +import com.bwssystems.http.HTTPHandler; import com.bwssystems.hue.HueDeviceIdentifier; import com.bwssystems.hue.HueHome; import com.bwssystems.hue.HueUtil; -import com.bwssystems.mqtt.MQTTHandler; -import com.bwssystems.mqtt.MQTTHome; -import com.bwssystems.mqtt.MQTTMessage; import com.bwssystems.util.JsonTransformer; import com.bwssystems.util.UDPDatagramSender; import com.google.gson.Gson; @@ -36,22 +30,8 @@ import static spark.Spark.options; import static spark.Spark.post; import static spark.Spark.put; -import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; -import org.apache.http.client.HttpClient; -import org.apache.http.client.config.CookieSpecs; -import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.client.methods.HttpPut; -import org.apache.http.client.methods.HttpUriRequest; -import org.apache.http.conn.ssl.SSLConnectionSocketFactory; -import org.apache.http.entity.ContentType; -import org.apache.http.entity.StringEntity; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.ssl.SSLContexts; -import org.apache.http.util.EntityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -60,9 +40,6 @@ import java.io.DataOutputStream; import java.io.IOException; import java.net.InetAddress; import java.net.Socket; -import java.net.URI; -import java.net.URISyntaxException; -import java.nio.charset.Charset; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -71,7 +48,6 @@ import java.util.Set; import java.util.StringTokenizer; import java.util.UUID; -import javax.net.ssl.SSLContext; import javax.xml.bind.DatatypeConverter; /** @@ -85,44 +61,22 @@ public class HueMulator { private DeviceRepository repository; private HomeManager homeManager; private HueHome myHueHome; - private HarmonyHome myHarmonyHome; - private MQTTHome mqttHome; - private HttpClient httpClient; - private CloseableHttpClient httpclientSSL; - private SSLContext sslcontext; - private SSLConnectionSocketFactory sslsf; - private RequestConfig globalConfig; private BridgeSettingsDescriptor bridgeSettings; private UDPDatagramSender theUDPDatagramSender; private byte[] sendData; - private String hueUser; - private String errorString; private Gson aGsonHandler; + private HTTPHandler anHttpHandler; public HueMulator(BridgeSettingsDescriptor theBridgeSettings, DeviceRepository aDeviceRepository, HomeManager aHomeManager, UDPDatagramSender aUdpDatagramSender) { - httpClient = HttpClients.createDefault(); - // Trust own CA and all self-signed certs - sslcontext = SSLContexts.createDefault(); - // Allow TLSv1 protocol only - sslsf = new SSLConnectionSocketFactory(sslcontext, new String[] { "TLSv1" }, null, - SSLConnectionSocketFactory.getDefaultHostnameVerifier()); - globalConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD).build(); - httpclientSSL = HttpClients.custom().setSSLSocketFactory(sslsf).setDefaultRequestConfig(globalConfig).build(); - repository = aDeviceRepository; bridgeSettings = theBridgeSettings; theUDPDatagramSender = aUdpDatagramSender; homeManager= aHomeManager; myHueHome = (HueHome) homeManager.findHome(DeviceMapTypes.HUE_DEVICE[DeviceMapTypes.typeIndex]); - myHarmonyHome = (HarmonyHome) homeManager.findHome(DeviceMapTypes.HARMONY_ACTIVITY[DeviceMapTypes.typeIndex]); - mqttHome = (MQTTHome) homeManager.findHome(DeviceMapTypes.MQTT_MESSAGE[DeviceMapTypes.typeIndex]); - hueUser = null; - errorString = null; aGsonHandler = new GsonBuilder() - // .registerTypeAdapter(CallItem.class, new CallItemDeserializer()) - .create(); - + .create(); + anHttpHandler = new HTTPHandler(); } // This function sets up the sparkjava rest calls for the hue api @@ -323,84 +277,6 @@ public class HueMulator { }); } - // This function executes the url from the device repository against the - // target as http or https as defined - protected String doHttpRequest(String url, String httpVerb, String contentType, String body, NameValue[] headers) { - HttpUriRequest request = null; - String theContent = null; - URI theURI = null; - ContentType parsedContentType = null; - StringEntity requestBody = null; - if (contentType != null && contentType.length() > 0) { - parsedContentType = ContentType.parse(contentType); - if (body != null && body.length() > 0) - requestBody = new StringEntity(body, parsedContentType); - } - try { - theURI = new URI(url); - } catch (URISyntaxException e1) { - log.warn("Error creating URI http request: " + url + " with message: " + e1.getMessage()); - return null; - } - try { - if (HttpGet.METHOD_NAME.equalsIgnoreCase(httpVerb) || httpVerb == null) { - request = new HttpGet(theURI); - } else if (HttpPost.METHOD_NAME.equalsIgnoreCase(httpVerb)) { - HttpPost postRequest = new HttpPost(theURI); - if (requestBody != null) - postRequest.setEntity(requestBody); - request = postRequest; - } else if (HttpPut.METHOD_NAME.equalsIgnoreCase(httpVerb)) { - HttpPut putRequest = new HttpPut(theURI); - if (requestBody != null) - putRequest.setEntity(requestBody); - request = putRequest; - } - } catch (IllegalArgumentException e) { - log.warn("Error creating outbound http request: IllegalArgumentException in log", e); - return null; - } - log.debug("Making outbound call in doHttpRequest: " + request); - if (headers != null && headers.length > 0) { - for (int i = 0; i < headers.length; i++) { - request.setHeader(headers[i].getName(), headers[i].getValue()); - } - } - try { - HttpResponse response; - if (url.startsWith("https")) - response = httpclientSSL.execute(request); - else - response = httpClient.execute(request); - log.debug((httpVerb == null ? "GET" : httpVerb) + " execute on URL responded: " - + response.getStatusLine().getStatusCode()); - if (response.getStatusLine().getStatusCode() >= 200 && response.getStatusLine().getStatusCode() < 300) { - if (response.getEntity() != null) { - try { - theContent = EntityUtils.toString(response.getEntity(), Charset.forName("UTF-8")); // read - // content - // for - // data - EntityUtils.consume(response.getEntity()); // close out - // inputstream - // ignore - // content - } catch (Exception e) { - log.debug( - "Error ocurred in handling response entity after successful call, still responding success. " - + e.getMessage(), - e); - } - } - if (theContent == null) - theContent = ""; - } - } catch (IOException e) { - log.warn("Error calling out to HA gateway: IOException in log", e); - } - return theContent; - } - private String doExecRequest(String anItem, int intensity, String lightId) { log.debug("Executing request: " + anItem); String responseString = null; @@ -681,7 +557,7 @@ public class HueMulator { theErrors = validateHueUser(userId, deviceId.getIpAddress(), device.getName()); if (theErrors == null) { // make call - responseString = doHttpRequest( + responseString = anHttpHandler.doHttpRequest( "http://" + deviceId.getIpAddress() + "/api/" + myHueHome.getTheHUERegisteredUser() + "/lights/" + deviceId.getDeviceId(), HttpGet.METHOD_NAME, device.getContentType(), null, null); @@ -798,7 +674,7 @@ public class HueMulator { theErrors = validateHueUser(userId, deviceId.getIpAddress(), device.getName()); if (theErrors == null) { // make call - responseString = doHttpRequest("http://" + deviceId.getIpAddress() + "/api/" + responseString = anHttpHandler.doHttpRequest("http://" + deviceId.getIpAddress() + "/api/" + myHueHome.getTheHUERegisteredUser() + "/lights/" + deviceId.getDeviceId(), HttpGet.METHOD_NAME, device.getContentType(), null, null); if (responseString == null) { @@ -893,7 +769,7 @@ public class HueMulator { String hueUser; HueErrorResponse theErrorResp = null; if (myHueHome.getTheHUERegisteredUser() == null) { - hueUser = HueUtil.registerWithHue(httpClient, ipAddress, aName, + hueUser = HueUtil.registerWithHue(anHttpHandler, ipAddress, aName, myHueHome.getTheHUERegisteredUser()); if (hueUser == null) { theErrorResp = HueErrorResponse.createResponse("901", "/api/" + userId, "Could not register proxy to other hue hub", null, null, null); @@ -907,7 +783,7 @@ public class HueMulator { return null; } - private String changeState(String userId, String lightId, String body,String ipAddress) { + private String changeState(String userId, String lightId, String body, String ipAddress) { String responseString = null; String url = null; NameValue[] theHeaders = null; @@ -1029,203 +905,21 @@ public class HueMulator { } if (callItems[i].getType() != null && callItems[i].getType().trim().equalsIgnoreCase(DeviceMapTypes.HUE_DEVICE[DeviceMapTypes.typeIndex])) { - if (myHueHome != null) { - - HueDeviceIdentifier deviceId = aGsonHandler.fromJson(callItems[i].getItem(), HueDeviceIdentifier.class); - if (myHueHome.getTheHUERegisteredUser() == null) { - hueUser = HueUtil.registerWithHue(httpClient, deviceId.getIpAddress(), device.getName(), - myHueHome.getTheHUERegisteredUser()); - if (hueUser == null) { - return errorString; - } - myHueHome.setTheHUERegisteredUser(hueUser); - } - - // make call - for (int x = 0; x < aMultiUtil.getSetCount(); x++) { - if (x > 0 || i > 0) { - try { - Thread.sleep(aMultiUtil.getTheDelay()); - } catch (InterruptedException e) { - // ignore - } - } - if (callItems[i].getDelay() != null && callItems[i].getDelay() > 0) - aMultiUtil.setTheDelay(callItems[i].getDelay()); - else - aMultiUtil.setTheDelay(bridgeSettings.getButtonsleep()); - responseString = doHttpRequest( - "http://" + deviceId.getIpAddress() + "/api/" + myHueHome.getTheHUERegisteredUser() - + "/lights/" + deviceId.getDeviceId() + "/state", - HttpPut.METHOD_NAME, device.getContentType(), body, null); - if (responseString.contains("[{\"error\":")) - x = aMultiUtil.getSetCount(); - } - if (responseString == null) { - log.warn("Error on calling url to change device state: " + url); - responseString = "[{\"error\":{\"type\": 6, \"address\": \"/lights/" + lightId - + "\",\"description\": \"Error on calling HUE to change device state\", \"parameter\": \"/lights/" - + lightId + "state\"}}]"; - } else if (responseString.contains("[{\"error\":")) { - if(responseString.contains("unauthorized user")) { - myHueHome.setTheHUERegisteredUser(null); - hueUser = HueUtil.registerWithHue(httpClient, deviceId.getIpAddress(), device.getName(), - myHueHome.getTheHUERegisteredUser()); - if (hueUser == null) { - return errorString; - } - myHueHome.setTheHUERegisteredUser(hueUser); - } - else - log.warn("Error occurred when calling Hue Passthru: " + responseString); - } - } else { - log.warn("No HUE home configured for HUE device passthru call for deviceID: " + device.getId()); - responseString = "[{\"error\":{\"type\": 6, \"address\": \"/lights/" + lightId - + "\",\"description\": \"No HUE configured\", \"parameter\": \"/lights/" + lightId - + "state\"}}]"; - } + return homeManager.findHome(DeviceMapTypes.HUE_DEVICE[DeviceMapTypes.typeIndex]).deviceHandler(callItems[i], aMultiUtil, lightId, i, state, theStateChanges, stateHasBri, stateHasBriInc, device, body); } else if (callItems[i].getType() != null && callItems[i].getType().trim().equalsIgnoreCase(DeviceMapTypes.HARMONY_ACTIVITY[DeviceMapTypes.typeIndex])) { - log.debug("executing HUE api request to change activity to Harmony: " + url); - if (myHarmonyHome != null) { - RunActivity anActivity = aGsonHandler.fromJson(url, RunActivity.class); - HarmonyHandler myHarmony = myHarmonyHome.getHarmonyHandler(device.getTargetDevice()); - if (myHarmony == null) { - log.warn("Should not get here, no harmony hub available"); - responseString = "[{\"error\":{\"type\": 6, \"address\": \"/lights/" + lightId - + "\",\"description\": \"Should not get here, no harmony hub available\", \"parameter\": \"/lights/" - + lightId + "state\"}}]"; - } else { - for (int x = 0; x < aMultiUtil.getSetCount(); x++) { - if (x > 0 || i > 0) { - try { - Thread.sleep(aMultiUtil.getTheDelay()); - } catch (InterruptedException e) { - // ignore - } - } - if (callItems[i].getDelay() != null && callItems[i].getDelay() > 0) - aMultiUtil.setTheDelay(callItems[i].getDelay()); - else - aMultiUtil.setTheDelay(bridgeSettings.getButtonsleep()); - myHarmony.startActivity(anActivity); - } - } - } else { - log.warn("Should not get here, no harmony configured"); - responseString = "[{\"error\":{\"type\": 6, \"address\": \"/lights/" + lightId - + "\",\"description\": \"Should not get here, no harmony configured\", \"parameter\": \"/lights/" - + lightId + "state\"}}]"; - } + return homeManager.findHome(DeviceMapTypes.HARMONY_ACTIVITY[DeviceMapTypes.typeIndex]).deviceHandler(callItems[i], aMultiUtil, lightId, i, state, theStateChanges, stateHasBri, stateHasBriInc, device, body); } else if (callItems[i].getType() != null && callItems[i].getType().trim().equalsIgnoreCase(DeviceMapTypes.HARMONY_BUTTON[DeviceMapTypes.typeIndex])) { - log.debug("executing HUE api request to button press(es) to Harmony: " + url); - if (myHarmonyHome != null) { - if (url.substring(0, 1).equalsIgnoreCase("{")) { - url = "[" + url + "]"; - } - ButtonPress[] deviceButtons = aGsonHandler.fromJson(url, ButtonPress[].class); - HarmonyHandler myHarmony = myHarmonyHome.getHarmonyHandler(device.getTargetDevice()); - if (myHarmony == null) { - log.warn("Should not get here, no harmony hub available"); - responseString = "[{\"error\":{\"type\": 6, \"address\": \"/lights/" + lightId - + "\",\"description\": \"Should not get here, no harmony hub available\", \"parameter\": \"/lights/" - + lightId + "state\"}}]"; - } else { - if(deviceButtons.length > 1) { - Integer theCount = 1; - for(int z = 0; z < deviceButtons.length; z++) { - if(deviceButtons[z].getCount() != null && deviceButtons[z].getCount() > 0) - theCount = deviceButtons[z].getCount(); - else - theCount = 1; - for(int y = 0; y < theCount; y++) { - if( y > 0 || z > 0) { - try { - Thread.sleep(aMultiUtil.getTheDelay()); - } catch (InterruptedException e) { - // ignore - } - } - if (callItems[i].getDelay() != null && callItems[i].getDelay() > 0) - aMultiUtil.setTheDelay(callItems[i].getDelay()); - else - aMultiUtil.setTheDelay(bridgeSettings.getButtonsleep()); - log.debug("pressing button: " + deviceButtons[z].getDevice() + " - " + deviceButtons[z].getButton() + " - iteration: " + String.valueOf(z) + " - count: " + String.valueOf(y)); - myHarmony.pressButton(deviceButtons[z]); - } - } - } - else { - for (int x = 0; x < aMultiUtil.getSetCount(); x++) { - if (x > 0 || i > 0) { - try { - Thread.sleep(aMultiUtil.getTheDelay()); - } catch (InterruptedException e) { - // ignore - } - } - if (callItems[i].getDelay() != null && callItems[i].getDelay() > 0) - aMultiUtil.setTheDelay(callItems[i].getDelay()); - else - aMultiUtil.setTheDelay(bridgeSettings.getButtonsleep()); - log.debug("pressing button: " + deviceButtons[i].getDevice() + " - " - + deviceButtons[i].getButton() + " - iteration: " + String.valueOf(i) - + " - count: " + String.valueOf(x)); - myHarmony.pressButton(deviceButtons[i]); - } - } - } - } else { - log.warn("Should not get here, no harmony configured"); - responseString = "[{\"error\":{\"type\": 6, \"address\": \"/lights/" + lightId - + "\",\"description\": \"Should not get here, no harmony configured\", \"parameter\": \"/lights/" - + lightId + "state\"}}]"; - - } + return homeManager.findHome(DeviceMapTypes.HARMONY_BUTTON[DeviceMapTypes.typeIndex]).deviceHandler(callItems[i], aMultiUtil, lightId, i, state, theStateChanges, stateHasBri, stateHasBriInc, device, body); } else if (callItems[i].getType() != null && callItems[i].getType().trim().equalsIgnoreCase(DeviceMapTypes.NEST_HOMEAWAY[DeviceMapTypes.typeIndex])) { - return homeManager.findHome(DeviceMapTypes.NEST_HOMEAWAY[DeviceMapTypes.typeIndex]).deviceHandler(callItems[i], aMultiUtil, lightId, i, state, theStateChanges, stateHasBri, stateHasBriInc); + return homeManager.findHome(DeviceMapTypes.NEST_HOMEAWAY[DeviceMapTypes.typeIndex]).deviceHandler(callItems[i], aMultiUtil, lightId, i, state, theStateChanges, stateHasBri, stateHasBriInc, device, body); } else if (callItems[i].getType() != null && callItems[i].getType().trim().equalsIgnoreCase(DeviceMapTypes.NEST_THERMO_SET[DeviceMapTypes.typeIndex])) { - return homeManager.findHome(DeviceMapTypes.NEST_THERMO_SET[DeviceMapTypes.typeIndex]).deviceHandler(callItems[i], aMultiUtil, lightId, i, state, theStateChanges, stateHasBri, stateHasBriInc); + return homeManager.findHome(DeviceMapTypes.NEST_THERMO_SET[DeviceMapTypes.typeIndex]).deviceHandler(callItems[i], aMultiUtil, lightId, i, state, theStateChanges, stateHasBri, stateHasBriInc, device, body); } else if (callItems[i].getType() != null && callItems[i].getType().trim().equalsIgnoreCase(DeviceMapTypes.MQTT_MESSAGE[DeviceMapTypes.typeIndex])) { - log.debug("executing HUE api request to send message to MQTT broker: " + url); - if (mqttHome != null) { - MQTTMessage[] mqttMessages = aGsonHandler.fromJson(BrightnessDecode.replaceIntensityValue(url, - BrightnessDecode.calculateIntensity(state, theStateChanges, stateHasBri, stateHasBriInc), false), MQTTMessage[].class); - MQTTHandler mqttHandler = mqttHome.getMQTTHandler(mqttMessages[i].getClientId()); - if (mqttHandler == null) { - log.warn("Should not get here, no mqtt hanlder available"); - responseString = "[{\"error\":{\"type\": 6, \"address\": \"/lights/" + lightId - + "\",\"description\": \"Should not get here, no mqtt handler available\", \"parameter\": \"/lights/" - + lightId + "state\"}}]"; - } - for (int x = 0; x < aMultiUtil.getSetCount(); x++) { - if (x > 0 || i > 0) { - try { - Thread.sleep(aMultiUtil.getTheDelay()); - } catch (InterruptedException e) { - // ignore - } - } - if (callItems[i].getDelay() != null && callItems[i].getDelay() > 0) - aMultiUtil.setTheDelay(callItems[i].getDelay()); - else - aMultiUtil.setTheDelay(bridgeSettings.getButtonsleep()); - log.debug("publishing message: " + mqttMessages[i].getClientId() + " - " - + mqttMessages[i].getTopic() + " - " + mqttMessages[i].getMessage() - + " - iteration: " + String.valueOf(i) + " - count: " + String.valueOf(x)); - mqttHandler.publishMessage(mqttMessages[i].getTopic(), mqttMessages[i].getMessage()); - } - } else { - log.warn("Should not get here, no mqtt brokers configured"); - responseString = "[{\"error\":{\"type\": 6, \"address\": \"/lights/" + lightId - + "\",\"description\": \"Should not get here, no mqtt brokers configured\", \"parameter\": \"/lights/" - + lightId + "state\"}}]"; - - } + return homeManager.findHome(DeviceMapTypes.MQTT_MESSAGE[DeviceMapTypes.typeIndex]).deviceHandler(callItems[i], aMultiUtil, lightId, i, state, theStateChanges, stateHasBri, stateHasBriInc, device, body); } else if (callItems[i].getType() != null && callItems[i].getType().trim().equalsIgnoreCase(DeviceMapTypes.HASS_DEVICE[DeviceMapTypes.typeIndex])) { - responseString = homeManager.findHome(DeviceMapTypes.HASS_DEVICE[DeviceMapTypes.typeIndex]).deviceHandler(callItems[i], aMultiUtil, lightId, i, state, theStateChanges, stateHasBri, stateHasBriInc); + responseString = homeManager.findHome(DeviceMapTypes.HASS_DEVICE[DeviceMapTypes.typeIndex]).deviceHandler(callItems[i], aMultiUtil, lightId, i, state, theStateChanges, stateHasBri, stateHasBriInc, device, body); } else if (callItems[i].getType() != null && callItems[i].getType().trim().equalsIgnoreCase(DeviceMapTypes.EXEC_DEVICE[DeviceMapTypes.typeIndex])) { - responseString = homeManager.findHome(DeviceMapTypes.EXEC_DEVICE[DeviceMapTypes.typeIndex]).deviceHandler(callItems[i], aMultiUtil, lightId, i, state, theStateChanges, stateHasBri, stateHasBriInc); + responseString = homeManager.findHome(DeviceMapTypes.EXEC_DEVICE[DeviceMapTypes.typeIndex]).deviceHandler(callItems[i], aMultiUtil, lightId, i, state, theStateChanges, stateHasBri, stateHasBriInc, device, body); } else // This section allows the usage of http/tcp/udp/exec // calls in a given set of items { @@ -1313,7 +1007,7 @@ public class HueMulator { state, theStateChanges, stateHasBri, stateHasBriInc, false); // make call - if (doHttpRequest(anUrl, device.getHttpVerb(), device.getContentType(), aBody, + if (anHttpHandler.doHttpRequest(anUrl, device.getHttpVerb(), device.getContentType(), aBody, theHeaders) == null) { log.warn("Error on calling url to change device state: " + anUrl); responseString = "[{\"error\":{\"type\": 6, \"address\": \"/lights/" + lightId diff --git a/src/main/java/com/bwssystems/HABridge/hue/HueMulatorHandler.java b/src/main/java/com/bwssystems/HABridge/hue/HueMulatorHandler.java index 714686c..24d4a4b 100644 --- a/src/main/java/com/bwssystems/HABridge/hue/HueMulatorHandler.java +++ b/src/main/java/com/bwssystems/HABridge/hue/HueMulatorHandler.java @@ -3,7 +3,8 @@ package com.bwssystems.HABridge.hue; import com.bwssystems.HABridge.api.CallItem; import com.bwssystems.HABridge.api.hue.DeviceState; import com.bwssystems.HABridge.api.hue.StateChangeBody; +import com.bwssystems.HABridge.dao.DeviceDescriptor; public interface HueMulatorHandler { - public String deviceHandler(CallItem anItem, MultiCommandUtil aMultiUtil, String lightId, int iterationCount, DeviceState state, StateChangeBody theStateChanges, boolean stateHasBri, boolean stateHasBriInc); + public String deviceHandler(CallItem anItem, MultiCommandUtil aMultiUtil, String lightId, int iterationCount, DeviceState state, StateChangeBody theStateChanges, boolean stateHasBri, boolean stateHasBriInc, DeviceDescriptor device, String body); } diff --git a/src/main/java/com/bwssystems/NestBridge/NestHome.java b/src/main/java/com/bwssystems/NestBridge/NestHome.java index 70aab30..5bcbbb4 100644 --- a/src/main/java/com/bwssystems/NestBridge/NestHome.java +++ b/src/main/java/com/bwssystems/NestBridge/NestHome.java @@ -12,6 +12,7 @@ import com.bwssystems.HABridge.DeviceMapTypes; import com.bwssystems.HABridge.api.CallItem; import com.bwssystems.HABridge.api.hue.DeviceState; import com.bwssystems.HABridge.api.hue.StateChangeBody; +import com.bwssystems.HABridge.dao.DeviceDescriptor; import com.bwssystems.HABridge.hue.BrightnessDecode; import com.bwssystems.HABridge.hue.MultiCommandUtil; import com.bwssystems.nest.controller.Home; @@ -103,7 +104,7 @@ public class NestHome implements com.bwssystems.HABridge.Home { @Override public String deviceHandler(CallItem anItem, MultiCommandUtil aMultiUtil, String lightId, int iterationCount, - DeviceState state, StateChangeBody theStateChanges, boolean stateHasBri, boolean stateHasBriInc) { + DeviceState state, StateChangeBody theStateChanges, boolean stateHasBri, boolean stateHasBriInc, DeviceDescriptor device, String body) { String responseString = null; log.debug("executing HUE api request to set away for nest " + anItem.getType() + ": " + anItem.getItem().toString()); if(!validNest) { diff --git a/src/main/java/com/bwssystems/exec/CommandHome.java b/src/main/java/com/bwssystems/exec/CommandHome.java index 9549a11..e45ff39 100644 --- a/src/main/java/com/bwssystems/exec/CommandHome.java +++ b/src/main/java/com/bwssystems/exec/CommandHome.java @@ -10,6 +10,7 @@ import com.bwssystems.HABridge.Home; import com.bwssystems.HABridge.api.CallItem; import com.bwssystems.HABridge.api.hue.DeviceState; import com.bwssystems.HABridge.api.hue.StateChangeBody; +import com.bwssystems.HABridge.dao.DeviceDescriptor; import com.bwssystems.HABridge.hue.BrightnessDecode; import com.bwssystems.HABridge.hue.MultiCommandUtil; @@ -23,7 +24,7 @@ public class CommandHome implements Home { @Override public String deviceHandler(CallItem anItem, MultiCommandUtil aMultiUtil, String lightId, int iterationCount, - DeviceState state, StateChangeBody theStateChanges, boolean stateHasBri, boolean stateHasBriInc) { + DeviceState state, StateChangeBody theStateChanges, boolean stateHasBri, boolean stateHasBriInc, DeviceDescriptor device, String body) { log.debug("Exec Request called with url: " + anItem.getItem().toString()); String responseString = null; String intermediate; diff --git a/src/main/java/com/bwssystems/hal/HalHome.java b/src/main/java/com/bwssystems/hal/HalHome.java index a8c72ad..d9c9ced 100644 --- a/src/main/java/com/bwssystems/hal/HalHome.java +++ b/src/main/java/com/bwssystems/hal/HalHome.java @@ -15,6 +15,7 @@ import com.bwssystems.HABridge.NamedIP; import com.bwssystems.HABridge.api.CallItem; import com.bwssystems.HABridge.api.hue.DeviceState; import com.bwssystems.HABridge.api.hue.StateChangeBody; +import com.bwssystems.HABridge.dao.DeviceDescriptor; import com.bwssystems.HABridge.hue.MultiCommandUtil; public class HalHome implements Home { @@ -107,7 +108,7 @@ public class HalHome implements Home { @Override public String deviceHandler(CallItem anItem, MultiCommandUtil aMultiUtil, String lightId, int iterationCount, - DeviceState state, StateChangeBody theStateChanges, boolean stateHasBri, boolean stateHasBriInc) { + DeviceState state, StateChangeBody theStateChanges, boolean stateHasBri, boolean stateHasBriInc, DeviceDescriptor device, String body) { log.info("device handler not implemented"); return null; } diff --git a/src/main/java/com/bwssystems/harmony/ButtonPress.java b/src/main/java/com/bwssystems/harmony/ButtonPress.java index d11d0c6..975911c 100644 --- a/src/main/java/com/bwssystems/harmony/ButtonPress.java +++ b/src/main/java/com/bwssystems/harmony/ButtonPress.java @@ -5,6 +5,7 @@ public class ButtonPress { private String button; private Integer delay; private Integer count; + private String hub; public String getDevice() { return device; } @@ -36,4 +37,10 @@ public class ButtonPress { } return false; } + public String getHub() { + return hub; + } + public void setHub(String hub) { + this.hub = hub; + } } diff --git a/src/main/java/com/bwssystems/harmony/HarmonyHome.java b/src/main/java/com/bwssystems/harmony/HarmonyHome.java index 8c1cd45..d0f3b76 100644 --- a/src/main/java/com/bwssystems/harmony/HarmonyHome.java +++ b/src/main/java/com/bwssystems/harmony/HarmonyHome.java @@ -18,7 +18,10 @@ import com.bwssystems.HABridge.NamedIP; import com.bwssystems.HABridge.api.CallItem; import com.bwssystems.HABridge.api.hue.DeviceState; import com.bwssystems.HABridge.api.hue.StateChangeBody; +import com.bwssystems.HABridge.dao.DeviceDescriptor; import com.bwssystems.HABridge.hue.MultiCommandUtil; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; import net.whistlingfish.harmony.config.Activity; import net.whistlingfish.harmony.config.Device; @@ -28,6 +31,7 @@ public class HarmonyHome implements Home { private Map hubs; private Boolean isDevMode; private Boolean validHarmony; + private Gson aGsonHandler; public HarmonyHome(BridgeSettingsDescriptor bridgeSettings) { super(); @@ -114,10 +118,79 @@ public class HarmonyHome implements Home { @Override public String deviceHandler(CallItem anItem, MultiCommandUtil aMultiUtil, String lightId, int iterationCount, - DeviceState state, StateChangeBody theStateChanges, boolean stateHasBri, boolean stateHasBriInc) { - // TODO Auto-generated method stub - log.info("device handler not implemented"); - return null; + DeviceState state, StateChangeBody theStateChanges, boolean stateHasBri, boolean stateHasBriInc, DeviceDescriptor device, String body) { + String responseString = null; + log.debug("executing HUE api request to change " + anItem.getType() + " to Harmony: " + device.getTargetDevice()); + if(!validHarmony) { + log.warn("Should not get here, no harmony configured"); + responseString = "[{\"error\":{\"type\": 6, \"address\": \"/lights/" + lightId + + "\",\"description\": \"Should not get here, no harmony configured\", \"parameter\": \"/lights/" + + lightId + "state\"}}]"; + } else { + if(anItem.getType().trim().equalsIgnoreCase(DeviceMapTypes.HARMONY_ACTIVITY[DeviceMapTypes.typeIndex])) + { + RunActivity anActivity = aGsonHandler.fromJson(anItem.getItem().toString(), RunActivity.class); + HarmonyHandler myHarmony = getHarmonyHandler(device.getTargetDevice()); + if (myHarmony == null) { + log.warn("Should not get here, no harmony hub available"); + responseString = "[{\"error\":{\"type\": 6, \"address\": \"/lights/" + lightId + + "\",\"description\": \"Should not get here, no harmony hub available\", \"parameter\": \"/lights/" + + lightId + "state\"}}]"; + } else { + for (int x = 0; x < aMultiUtil.getSetCount(); x++) { + if (x > 0 || iterationCount > 0) { + try { + Thread.sleep(aMultiUtil.getTheDelay()); + } catch (InterruptedException e) { + // ignore + } + } + if (anItem.getDelay() != null && anItem.getDelay() > 0) + aMultiUtil.setTheDelay(anItem.getDelay()); + else + aMultiUtil.setTheDelay(aMultiUtil.getDelayDefault()); + myHarmony.startActivity(anActivity); + } + } + } else if(anItem.getType().trim().equalsIgnoreCase(DeviceMapTypes.HARMONY_BUTTON[DeviceMapTypes.typeIndex])) { + String url = anItem.getItem().toString(); + if (url.substring(0, 1).equalsIgnoreCase("{")) { + url = "[" + url + "]"; + } + ButtonPress[] deviceButtons = aGsonHandler.fromJson(url, ButtonPress[].class); + HarmonyHandler myHarmony = getHarmonyHandler(device.getTargetDevice()); + if (myHarmony == null) { + log.warn("Should not get here, no harmony hub available"); + responseString = "[{\"error\":{\"type\": 6, \"address\": \"/lights/" + lightId + + "\",\"description\": \"Should not get here, no harmony hub available\", \"parameter\": \"/lights/" + + lightId + "state\"}}]"; + } else { + Integer theCount = 1; + for(int z = 0; z < deviceButtons.length; z++) { + if(deviceButtons[z].getCount() != null && deviceButtons[z].getCount() > 0) + theCount = deviceButtons[z].getCount(); + else + theCount = aMultiUtil.getSetCount(); + for(int y = 0; y < theCount; y++) { + if( y > 0 || z > 0) { + try { + Thread.sleep(aMultiUtil.getTheDelay()); + } catch (InterruptedException e) { + // ignore + } + } + if (anItem.getDelay() != null && anItem.getDelay() > 0) + aMultiUtil.setTheDelay(anItem.getDelay()); + else + aMultiUtil.setTheDelay(aMultiUtil.getDelayDefault()); + log.debug("pressing button: " + deviceButtons[z].getDevice() + " - " + deviceButtons[z].getButton() + " - iteration: " + String.valueOf(z) + " - count: " + String.valueOf(y)); + myHarmony.pressButton(deviceButtons[z]); + } + } + } + } + } + return responseString; } @Override @@ -128,6 +201,9 @@ public class HarmonyHome implements Home { log.debug("No valid Harmony config"); } else { hubs = new HashMap(); + aGsonHandler = + new GsonBuilder() + .create(); if(isDevMode) { NamedIP devModeIp = new NamedIP(); devModeIp.setIp("10.10.10.10"); diff --git a/src/main/java/com/bwssystems/harmony/RunActivity.java b/src/main/java/com/bwssystems/harmony/RunActivity.java index e39afc9..7166418 100644 --- a/src/main/java/com/bwssystems/harmony/RunActivity.java +++ b/src/main/java/com/bwssystems/harmony/RunActivity.java @@ -2,6 +2,7 @@ package com.bwssystems.harmony; public class RunActivity { private String name; + private String hub; public String getName() { return name; @@ -15,4 +16,12 @@ public class RunActivity { return true; return false; } + + public String getHub() { + return hub; + } + + public void setHub(String hub) { + this.hub = hub; + } } diff --git a/src/main/java/com/bwssystems/hass/HassHome.java b/src/main/java/com/bwssystems/hass/HassHome.java index 3569753..8ce56ec 100644 --- a/src/main/java/com/bwssystems/hass/HassHome.java +++ b/src/main/java/com/bwssystems/hass/HassHome.java @@ -15,6 +15,7 @@ import com.bwssystems.HABridge.NamedIP; import com.bwssystems.HABridge.api.CallItem; import com.bwssystems.HABridge.api.hue.DeviceState; import com.bwssystems.HABridge.api.hue.StateChangeBody; +import com.bwssystems.HABridge.dao.DeviceDescriptor; import com.bwssystems.HABridge.hue.BrightnessDecode; import com.bwssystems.HABridge.hue.MultiCommandUtil; import com.google.gson.Gson; @@ -110,7 +111,7 @@ public class HassHome implements Home { @Override public String deviceHandler(CallItem anItem, MultiCommandUtil aMultiUtil, String lightId, int iterationCount, DeviceState state, - StateChangeBody theStateChanges, boolean stateHasBri, boolean stateHasBriInc) { + StateChangeBody theStateChanges, boolean stateHasBri, boolean stateHasBriInc, DeviceDescriptor device, String body) { String theReturn = null; log.debug("executing HUE api request to send message to HomeAssistant: " + anItem.getItem().toString()); if(!validHass) { diff --git a/src/main/java/com/bwssystems/http/HTTPHandler.java b/src/main/java/com/bwssystems/http/HTTPHandler.java index da335ae..a4cfacb 100644 --- a/src/main/java/com/bwssystems/http/HTTPHandler.java +++ b/src/main/java/com/bwssystems/http/HTTPHandler.java @@ -126,6 +126,16 @@ public class HTTPHandler { return theContent; } + public HttpClient getHttpClient() { + return httpClient; + } + + + public CloseableHttpClient getHttpclientSSL() { + return httpclientSSL; + } + + public void closeHandler() { httpClient = null; try { diff --git a/src/main/java/com/bwssystems/http/HTTPHome.java b/src/main/java/com/bwssystems/http/HTTPHome.java index a3556ba..6d9f31d 100644 --- a/src/main/java/com/bwssystems/http/HTTPHome.java +++ b/src/main/java/com/bwssystems/http/HTTPHome.java @@ -9,6 +9,7 @@ import com.bwssystems.HABridge.api.CallItem; import com.bwssystems.HABridge.api.NameValue; import com.bwssystems.HABridge.api.hue.DeviceState; import com.bwssystems.HABridge.api.hue.StateChangeBody; +import com.bwssystems.HABridge.dao.DeviceDescriptor; import com.bwssystems.HABridge.hue.BrightnessDecode; import com.bwssystems.HABridge.hue.MultiCommandUtil; import com.google.gson.Gson; @@ -24,7 +25,7 @@ public class HTTPHome implements Home { @Override public String deviceHandler(CallItem anItem, MultiCommandUtil aMultiUtil, String lightId, int iterationCount, - DeviceState state, StateChangeBody theStateChanges, boolean stateHasBri, boolean stateHasBriInc) { + DeviceState state, StateChangeBody theStateChanges, boolean stateHasBri, boolean stateHasBriInc, DeviceDescriptor device, String body) { String responseString = null; log.debug("executing HUE api request to Http " + (anItem.getHttpVerb() == null ? "GET" : anItem.getHttpVerb()) + ": " diff --git a/src/main/java/com/bwssystems/hue/HueHome.java b/src/main/java/com/bwssystems/hue/HueHome.java index 419c0ed..36c00aa 100644 --- a/src/main/java/com/bwssystems/hue/HueHome.java +++ b/src/main/java/com/bwssystems/hue/HueHome.java @@ -5,6 +5,7 @@ import java.util.HashMap; import java.util.Iterator; import java.util.Map; +import org.apache.http.client.methods.HttpPut; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -16,13 +17,19 @@ import com.bwssystems.HABridge.api.hue.DeviceResponse; import com.bwssystems.HABridge.api.hue.DeviceState; import com.bwssystems.HABridge.api.hue.HueApiResponse; import com.bwssystems.HABridge.api.hue.StateChangeBody; +import com.bwssystems.HABridge.dao.DeviceDescriptor; import com.bwssystems.HABridge.hue.MultiCommandUtil; +import com.bwssystems.http.HTTPHandler; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; public class HueHome implements Home { private static final Logger log = LoggerFactory.getLogger(HueHome.class); private Map hues; private String theHUERegisteredUser; private Boolean validHue; + private Gson aGsonHandler; + private HTTPHandler anHttpHandler; public HueHome(BridgeSettingsDescriptor bridgeSettings) { super(); @@ -72,10 +79,58 @@ public class HueHome implements Home { @Override public String deviceHandler(CallItem anItem, MultiCommandUtil aMultiUtil, String lightId, int iterationCount, - DeviceState state, StateChangeBody theStateChanges, boolean stateHasBri, boolean stateHasBriInc) { - // TODO Auto-generated method stub - log.info("device handler not implemented"); - return null; + DeviceState state, StateChangeBody theStateChanges, boolean stateHasBri, boolean stateHasBriInc, DeviceDescriptor device, String body) { + String responseString = null; + String hueUser; + HueDeviceIdentifier deviceId = aGsonHandler.fromJson(anItem.getItem(), HueDeviceIdentifier.class); + if (getTheHUERegisteredUser() == null) { + hueUser = HueUtil.registerWithHue(anHttpHandler, deviceId.getIpAddress(), device.getName(), + getTheHUERegisteredUser()); + if (hueUser == null) { + return responseString; + } + setTheHUERegisteredUser(hueUser); + } + + // make call + for (int x = 0; x < aMultiUtil.getSetCount(); x++) { + if (x > 0 || iterationCount > 0) { + try { + Thread.sleep(aMultiUtil.getTheDelay()); + } catch (InterruptedException e) { + // ignore + } + } + if (anItem.getDelay() != null && anItem.getDelay() > 0) + aMultiUtil.setTheDelay(anItem.getDelay()); + else + aMultiUtil.setTheDelay(aMultiUtil.getDelayDefault()); + responseString = anHttpHandler.doHttpRequest( + "http://" + deviceId.getIpAddress() + "/api/" + getTheHUERegisteredUser() + + "/lights/" + deviceId.getDeviceId() + "/state", + HttpPut.METHOD_NAME, "application/json", body, null); + if (responseString.contains("[{\"error\":")) + x = aMultiUtil.getSetCount(); + } + if (responseString == null) { + log.warn("Error on calling Hue passthru to change device state: " + device.getName()); + responseString = "[{\"error\":{\"type\": 6, \"address\": \"/lights/" + lightId + + "\",\"description\": \"Error on calling HUE to change device state\", \"parameter\": \"/lights/" + + lightId + "state\"}}]"; + } else if (responseString.contains("[{\"error\":")) { + if(responseString.contains("unauthorized user")) { + setTheHUERegisteredUser(null); + hueUser = HueUtil.registerWithHue(anHttpHandler, deviceId.getIpAddress(), device.getName(), + getTheHUERegisteredUser()); + if (hueUser == null) { + return responseString; + } + setTheHUERegisteredUser(hueUser); + } + else + log.warn("Error occurred when calling Hue Passthru: " + responseString); + } + return responseString; } @Override @@ -91,13 +146,16 @@ public class HueHome implements Home { hues.put(aHue.getName(), new HueInfo(aHue, this)); } theHUERegisteredUser = null; + aGsonHandler = + new GsonBuilder() + // .registerTypeAdapter(CallItem.class, new CallItemDeserializer()) + .create(); } return this; } @Override public void closeHome() { - // TODO Auto-generated method stub - + anHttpHandler.closeHandler(); } } diff --git a/src/main/java/com/bwssystems/hue/HueInfo.java b/src/main/java/com/bwssystems/hue/HueInfo.java index 7c92c82..ef656c3 100644 --- a/src/main/java/com/bwssystems/hue/HueInfo.java +++ b/src/main/java/com/bwssystems/hue/HueInfo.java @@ -1,12 +1,5 @@ package com.bwssystems.hue; -import java.io.IOException; -import java.nio.charset.Charset; -import org.apache.http.HttpResponse; -import org.apache.http.client.HttpClient; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.util.EntityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/com/bwssystems/hue/HueUtil.java b/src/main/java/com/bwssystems/hue/HueUtil.java index 8b9ccda..14b2fe8 100644 --- a/src/main/java/com/bwssystems/hue/HueUtil.java +++ b/src/main/java/com/bwssystems/hue/HueUtil.java @@ -20,7 +20,7 @@ public class HueUtil { private static final Logger log = LoggerFactory.getLogger(HueUtil.class); public static final String HUE_REQUEST = "/api"; - public static final String registerWithHue(HTTPHandler anHttpClient, String ipAddress, String aName, String theUser) { + public static final String registerWithHue(HTTPHandler anHttpHandler, String ipAddress, String aName, String theUser) { UserCreateRequest theLogin = new UserCreateRequest(); theLogin.setDevicetype("HABridge#MyMachine"); HttpPost postRequest = new HttpPost("http://" + ipAddress + HUE_REQUEST); @@ -28,6 +28,7 @@ public class HueUtil { StringEntity requestBody = new StringEntity(new Gson().toJson(theLogin), parsedContentType); HttpResponse response = null; postRequest.setEntity(requestBody); + HttpClient anHttpClient = anHttpHandler.getHttpClient(); try { response = anHttpClient.execute(postRequest); log.debug("POST execute on URL responded: " + response.getStatusLine().getStatusCode()); diff --git a/src/main/java/com/bwssystems/mqtt/MQTTHome.java b/src/main/java/com/bwssystems/mqtt/MQTTHome.java index 8cc448b..efbd7fb 100644 --- a/src/main/java/com/bwssystems/mqtt/MQTTHome.java +++ b/src/main/java/com/bwssystems/mqtt/MQTTHome.java @@ -14,12 +14,17 @@ import com.bwssystems.HABridge.NamedIP; import com.bwssystems.HABridge.api.CallItem; import com.bwssystems.HABridge.api.hue.DeviceState; import com.bwssystems.HABridge.api.hue.StateChangeBody; +import com.bwssystems.HABridge.dao.DeviceDescriptor; +import com.bwssystems.HABridge.hue.BrightnessDecode; import com.bwssystems.HABridge.hue.MultiCommandUtil; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; public class MQTTHome implements Home { private static final Logger log = LoggerFactory.getLogger(MQTTHome.class); private Map handlers; private Boolean validMqtt; + private Gson aGsonHandler; public MQTTHome(BridgeSettingsDescriptor bridgeSettings) { super(); @@ -72,10 +77,41 @@ public class MQTTHome implements Home { @Override public String deviceHandler(CallItem anItem, MultiCommandUtil aMultiUtil, String lightId, int iterationCount, - DeviceState state, StateChangeBody theStateChanges, boolean stateHasBri, boolean stateHasBriInc) { - // TODO Auto-generated method stub - log.info("device handler not implemented"); - return null; + DeviceState state, StateChangeBody theStateChanges, boolean stateHasBri, boolean stateHasBriInc, DeviceDescriptor device, String body) { + String responseString = null; + log.debug("executing HUE api request to send message to MQTT broker: " + anItem.getItem().toString()); + if (validMqtt) { + MQTTMessage[] mqttMessages = aGsonHandler.fromJson(BrightnessDecode.replaceIntensityValue(anItem.getItem().toString(), + BrightnessDecode.calculateIntensity(state, theStateChanges, stateHasBri, stateHasBriInc), false), MQTTMessage[].class); + Integer theCount = 1; + for(int z = 0; z < mqttMessages.length; z++) { + if(mqttMessages[z].getCount() != null && mqttMessages[z].getCount() > 0) + theCount = mqttMessages[z].getCount(); + else + theCount = aMultiUtil.getSetCount(); + for(int y = 0; y < theCount; y++) { + if( y > 0 || z > 0) { + log.debug("publishing message: " + mqttMessages[y].getClientId() + " - " + + mqttMessages[y].getTopic() + " - " + mqttMessages[y].getMessage() + + " - iteration: " + String.valueOf(iterationCount) + " - count: " + String.valueOf(z)); + + MQTTHandler mqttHandler = getMQTTHandler(mqttMessages[y].getClientId()); + if (mqttHandler == null) { + log.warn("Should not get here, no mqtt hanlder available"); + } else { + mqttHandler.publishMessage(mqttMessages[y].getTopic(), mqttMessages[y].getMessage()); + } + } + } + } + } else { + log.warn("Should not get here, no mqtt brokers configured"); + responseString = "[{\"error\":{\"type\": 6, \"address\": \"/lights/" + lightId + + "\",\"description\": \"Should not get here, no mqtt brokers configured\", \"parameter\": \"/lights/" + + lightId + "state\"}}]"; + + } + return responseString; } @Override @@ -84,6 +120,9 @@ public class MQTTHome implements Home { if(!validMqtt) { log.debug("No MQTT configuration"); } else { + aGsonHandler = + new GsonBuilder() + .create(); handlers = new HashMap(); Iterator theList = bridgeSettings.getMqttaddress().getDevices().iterator(); while(theList.hasNext()) { diff --git a/src/main/java/com/bwssystems/tcp/TCPHome.java b/src/main/java/com/bwssystems/tcp/TCPHome.java index 0c0ce99..098cc38 100644 --- a/src/main/java/com/bwssystems/tcp/TCPHome.java +++ b/src/main/java/com/bwssystems/tcp/TCPHome.java @@ -5,6 +5,7 @@ import com.bwssystems.HABridge.Home; import com.bwssystems.HABridge.api.CallItem; import com.bwssystems.HABridge.api.hue.DeviceState; import com.bwssystems.HABridge.api.hue.StateChangeBody; +import com.bwssystems.HABridge.dao.DeviceDescriptor; import com.bwssystems.HABridge.hue.MultiCommandUtil; public class TCPHome implements Home { @@ -15,7 +16,7 @@ public class TCPHome implements Home { @Override public String deviceHandler(CallItem anItem, MultiCommandUtil aMultiUtil, String lightId, int iterationCount, - DeviceState state, StateChangeBody theStateChanges, boolean stateHasBri, boolean stateHasBriInc) { + DeviceState state, StateChangeBody theStateChanges, boolean stateHasBri, boolean stateHasBriInc, DeviceDescriptor device, String body) { // TODO Auto-generated method stub return null; } diff --git a/src/main/java/com/bwssystems/udp/UDPHome.java b/src/main/java/com/bwssystems/udp/UDPHome.java index 27ed023..3bc24cc 100644 --- a/src/main/java/com/bwssystems/udp/UDPHome.java +++ b/src/main/java/com/bwssystems/udp/UDPHome.java @@ -5,6 +5,7 @@ import com.bwssystems.HABridge.Home; import com.bwssystems.HABridge.api.CallItem; import com.bwssystems.HABridge.api.hue.DeviceState; import com.bwssystems.HABridge.api.hue.StateChangeBody; +import com.bwssystems.HABridge.dao.DeviceDescriptor; import com.bwssystems.HABridge.hue.MultiCommandUtil; public class UDPHome implements Home { @@ -15,7 +16,7 @@ public class UDPHome implements Home { @Override public String deviceHandler(CallItem anItem, MultiCommandUtil aMultiUtil, String lightId, int iterationCount, - DeviceState state, StateChangeBody theStateChanges, boolean stateHasBri, boolean stateHasBriInc) { + DeviceState state, StateChangeBody theStateChanges, boolean stateHasBri, boolean stateHasBriInc, DeviceDescriptor device, String body) { // TODO Auto-generated method stub return null; } diff --git a/src/main/java/com/bwssystems/vera/VeraHome.java b/src/main/java/com/bwssystems/vera/VeraHome.java index 2236c1b..a6cb475 100644 --- a/src/main/java/com/bwssystems/vera/VeraHome.java +++ b/src/main/java/com/bwssystems/vera/VeraHome.java @@ -16,6 +16,7 @@ import com.bwssystems.HABridge.NamedIP; import com.bwssystems.HABridge.api.CallItem; import com.bwssystems.HABridge.api.hue.DeviceState; import com.bwssystems.HABridge.api.hue.StateChangeBody; +import com.bwssystems.HABridge.dao.DeviceDescriptor; import com.bwssystems.HABridge.hue.MultiCommandUtil; import com.bwssystems.luupRequests.Device; import com.bwssystems.luupRequests.Scene; @@ -74,7 +75,7 @@ public class VeraHome implements Home { @Override public String deviceHandler(CallItem anItem, MultiCommandUtil aMultiUtil, String lightId, int iterationCount, - DeviceState state, StateChangeBody theStateChanges, boolean stateHasBri, boolean stateHasBriInc) { + DeviceState state, StateChangeBody theStateChanges, boolean stateHasBri, boolean stateHasBriInc, DeviceDescriptor device, String body) { // Not a device handler return null; }