diff --git a/pom.xml b/pom.xml index 20ef4e3..eed23fa 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.bwssystems.HABridge ha-bridge - 1.0.8 + 1.0.9 jar HA Bridge diff --git a/src/main/java/com/bwssystems/HABridge/api/hue/HueApiResponse.java b/src/main/java/com/bwssystems/HABridge/api/hue/HueApiResponse.java index 1134c93..f55d0e9 100644 --- a/src/main/java/com/bwssystems/HABridge/api/hue/HueApiResponse.java +++ b/src/main/java/com/bwssystems/HABridge/api/hue/HueApiResponse.java @@ -14,9 +14,9 @@ public class HueApiResponse { private Map groups; private HueConfig config; - public HueApiResponse(String name, String ipaddress, String username, String userid) { + public HueApiResponse(String name, String ipaddress, String devicetype, String userid) { super(); - this.setConfig(HueConfig.createConfig(name, ipaddress, username, userid)); + this.setConfig(HueConfig.createConfig(name, ipaddress, devicetype, userid)); this.setGroups(new HashMap<>()); this.setScenes(new HashMap<>()); } diff --git a/src/main/java/com/bwssystems/HABridge/api/hue/HueConfig.java b/src/main/java/com/bwssystems/HABridge/api/hue/HueConfig.java index 5b8cf4f..b80b3bc 100644 --- a/src/main/java/com/bwssystems/HABridge/api/hue/HueConfig.java +++ b/src/main/java/com/bwssystems/HABridge/api/hue/HueConfig.java @@ -1,7 +1,14 @@ package com.bwssystems.HABridge.api.hue; +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.net.SocketException; +import java.net.UnknownHostException; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.HashMap; import java.util.Map; +import java.util.TimeZone; public class HueConfig { @@ -26,10 +33,13 @@ public class HueConfig public static HueConfig createConfig(String name, String ipaddress, String devicetype, String userid) { HueConfig aConfig = new HueConfig(); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); + SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); + dateFormatGmt.setTimeZone(TimeZone.getTimeZone("UTC")); + aConfig.setMac(HueConfig.getMacAddress(ipaddress)); aConfig.setApiversion("1.4.0"); aConfig.setPortalservices(false); - aConfig.setGateway("192.168.1.1"); - aConfig.setMac("00:00:88:00:bb:ee"); + aConfig.setGateway(ipaddress); aConfig.setSwversion("01005215"); aConfig.setLinkbutton(false); aConfig.setIpaddress(ipaddress); @@ -38,20 +48,46 @@ public class HueConfig aConfig.setNetmask("255.255.255.0"); aConfig.setName(name); aConfig.setDhcp(true); - aConfig.setUtc("2014-07-17T09:27:35"); - aConfig.setProxyaddress("0.0.0.0"); - aConfig.setLocaltime("2014-07-17T11:27:35"); - aConfig.setTimezone("America/Chicago"); + aConfig.setUtc(dateFormatGmt.format(new Date())); + aConfig.setProxyaddress("none"); + aConfig.setLocaltime(dateFormat.format(new Date())); + aConfig.setTimezone(TimeZone.getDefault().getID()); aConfig.setZigbeechannel("6"); Map awhitelist = new HashMap<>(); awhitelist.put(userid, WhitelistEntry.createEntry(devicetype)); aConfig.setWhitelist(awhitelist); - return aConfig; } - + private static String getMacAddress(String addr) + { + InetAddress ip; + StringBuilder sb = new StringBuilder(); + try { + + ip = InetAddress.getByName(addr); + + NetworkInterface network = NetworkInterface.getByInetAddress(ip); + + byte[] mac = network.getHardwareAddress(); + + for (int i = 0; i < mac.length; i++) { + sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? ":" : "")); + } + + } catch (UnknownHostException e) { + + sb.append("00:00:88:00:bb:ee"); + + } catch (SocketException e){ + + sb.append("00:00:88:00:bb:ee"); + + } + + return sb.toString(); + } public Boolean getPortalservices() { return portalservices; } diff --git a/src/main/java/com/bwssystems/HABridge/hue/HueMulator.java b/src/main/java/com/bwssystems/HABridge/hue/HueMulator.java index 96e41ba..b094194 100644 --- a/src/main/java/com/bwssystems/HABridge/hue/HueMulator.java +++ b/src/main/java/com/bwssystems/HABridge/hue/HueMulator.java @@ -156,6 +156,31 @@ public class HueMulator { return "[{\"success\":{\"username\":\"" + newUser + "\"}}]"; } ); + // http://ip_address:port/api/config returns json objects for the config when no user is given + get(HUE_CONTEXT + "/config", "application/json", (request, response) -> { + String userId = request.params(":userid"); + log.debug("hue api config requested: " + userId + " from " + request.ip()); + HueApiResponse apiResponse = new HueApiResponse("Philips hue", request.ip(), "My App", userId); + + response.type("application/json; charset=utf-8"); + response.status(HttpStatus.SC_OK); + String responseString = null; + responseString = "[{\"swversion\":\"" + apiResponse.getConfig().getSwversion() + "\",\"apiversion\":\"" + apiResponse.getConfig().getApiversion() + "\",\"name\":\"" + apiResponse.getConfig().getName() + "\",\"mac\":\"" + apiResponse.getConfig().getMac() + "\"}]"; + return responseString; + }); + + // http://ip_address:port/api/{userId}/config returns json objects for the config + get(HUE_CONTEXT + "/:userid/config", "application/json", (request, response) -> { + String userId = request.params(":userid"); + log.debug("hue api config requested: " + userId + " from " + request.ip()); + HueApiResponse apiResponse = new HueApiResponse("Philips hue", request.ip(), "My App", userId); + + response.type("application/json; charset=utf-8"); + response.status(HttpStatus.SC_OK); + return apiResponse.getConfig(); + }, new JsonTransformer()); + + // http://ip_address:port/api/{userId} returns json objects for the full state get(HUE_CONTEXT + "/:userid", "application/json", (request, response) -> { String userId = request.params(":userid");