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");