mirror of
https://github.com/bwssytems/ha-bridge.git
synced 2025-12-21 01:05:43 +00:00
Finished implementation for multiple vera support. Tweaks to the UI.
Fixes #19 Fixes #21 Fixes #23 Fixes #26 Fixes #28 Fixes #30 Fixes #31
This commit is contained in:
@@ -7,7 +7,7 @@ public class BridgeSettings {
|
||||
private String serverport;
|
||||
private String upnpresponseport;
|
||||
private String upnpdevicedb;
|
||||
private String veraaddress;
|
||||
private IpList veraaddress;
|
||||
private IpList harmonyaddress;
|
||||
private String harmonyuser;
|
||||
private String harmonypwd;
|
||||
@@ -43,10 +43,10 @@ public class BridgeSettings {
|
||||
public void setUpnpDeviceDb(String upnpDeviceDb) {
|
||||
this.upnpdevicedb = upnpDeviceDb;
|
||||
}
|
||||
public String getVeraAddress() {
|
||||
public IpList getVeraAddress() {
|
||||
return veraaddress;
|
||||
}
|
||||
public void setVeraAddress(String veraAddress) {
|
||||
public void setVeraAddress(IpList veraAddress) {
|
||||
this.veraaddress = veraAddress;
|
||||
}
|
||||
public IpList getHarmonyAddress() {
|
||||
@@ -110,7 +110,8 @@ public class BridgeSettings {
|
||||
this.nestconfigured = isNestConfigured;
|
||||
}
|
||||
public Boolean isValidVera() {
|
||||
if(this.veraaddress.contains(Configuration.DEFAULT_ADDRESS))
|
||||
List<NamedIP> devicesList = this.veraaddress.getDevices();
|
||||
if(devicesList.get(0).getIp().contains(Configuration.DEFAULT_ADDRESS))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -89,7 +89,19 @@ public class HABridge {
|
||||
|
||||
bridgeSettings.setUpnpDeviceDb(System.getProperty("upnp.device.db", Configuration.DEVICE_DB_DIRECTORY));
|
||||
bridgeSettings.setUpnpResponsePort(System.getProperty("upnp.response.port", Configuration.UPNP_RESPONSE_PORT));
|
||||
bridgeSettings.setVeraAddress(System.getProperty("vera.address", Configuration.DEFAULT_ADDRESS));
|
||||
IpList theVeraList;
|
||||
|
||||
try {
|
||||
theVeraList = new Gson().fromJson(System.getProperty("vera.address", Configuration.DEFAULT_HARMONY_ADDRESS_LIST), IpList.class);
|
||||
} catch (Exception e) {
|
||||
try {
|
||||
theVeraList = new Gson().fromJson("{devices:[{name:default,ip:" + System.getProperty("vera.address", Configuration.DEFAULT_ADDRESS) + "}]}", IpList.class);
|
||||
} catch (Exception et) {
|
||||
log.error("Cannot parse vera.address, Exiting with message: " + e.getMessage(), e);
|
||||
return;
|
||||
}
|
||||
}
|
||||
bridgeSettings.setVeraAddress(theVeraList);
|
||||
IpList theHarmonyList;
|
||||
|
||||
try {
|
||||
|
||||
@@ -24,6 +24,7 @@ import com.bwssystems.HABridge.dao.DeviceRepository;
|
||||
import com.bwssystems.NestBridge.NestHome;
|
||||
import com.bwssystems.harmony.HarmonyHome;
|
||||
import com.bwssystems.luupRequests.Sdata;
|
||||
import com.bwssystems.vera.VeraHome;
|
||||
import com.bwssystems.vera.VeraInfo;
|
||||
import com.google.gson.Gson;
|
||||
|
||||
@@ -35,7 +36,7 @@ public class DeviceResource {
|
||||
private static final Logger log = LoggerFactory.getLogger(DeviceResource.class);
|
||||
|
||||
private DeviceRepository deviceRepository;
|
||||
private VeraInfo veraInfo;
|
||||
private VeraHome veraHome;
|
||||
private Version version;
|
||||
private HarmonyHome myHarmonyHome;
|
||||
private NestHome nestHome;
|
||||
@@ -43,7 +44,12 @@ public class DeviceResource {
|
||||
|
||||
public DeviceResource(BridgeSettings theSettings, Version theVersion, HarmonyHome theHarmonyHome, NestHome aNestHome) {
|
||||
this.deviceRepository = new DeviceRepository(theSettings.getUpnpDeviceDb());
|
||||
this.veraInfo = new VeraInfo(theSettings.getVeraAddress(), theSettings.isValidVera());
|
||||
|
||||
if(theSettings.isValidVera())
|
||||
this.veraHome = new VeraHome(theSettings);
|
||||
else
|
||||
this.veraHome = null;
|
||||
|
||||
if(theSettings.isValidHarmony())
|
||||
this.myHarmonyHome = theHarmonyHome;
|
||||
else
|
||||
@@ -53,6 +59,7 @@ public class DeviceResource {
|
||||
this.nestHome = aNestHome;
|
||||
else
|
||||
this.nestHome = null;
|
||||
|
||||
this.version = theVersion;
|
||||
setupEndpoints();
|
||||
}
|
||||
@@ -175,25 +182,23 @@ public class DeviceResource {
|
||||
|
||||
get (API_CONTEXT + "/vera/devices", "application/json", (request, response) -> {
|
||||
log.debug("Get vera devices");
|
||||
Sdata sData = veraInfo.getSdata();
|
||||
if(sData == null){
|
||||
if(veraHome == null){
|
||||
response.status(HttpStatus.SC_NOT_FOUND);
|
||||
return null;
|
||||
}
|
||||
|
||||
response.status(HttpStatus.SC_OK);
|
||||
return sData.getDevices();
|
||||
return veraHome.getDevices();
|
||||
}, new JsonTransformer());
|
||||
|
||||
get (API_CONTEXT + "/vera/scenes", "application/json", (request, response) -> {
|
||||
log.debug("Get vera scenes");
|
||||
Sdata sData = veraInfo.getSdata();
|
||||
if(sData == null){
|
||||
if(veraHome == null){
|
||||
response.status(HttpStatus.SC_NOT_FOUND);
|
||||
return null;
|
||||
}
|
||||
response.status(HttpStatus.SC_OK);
|
||||
return sData.getScenes();
|
||||
return veraHome.getScenes();
|
||||
}, new JsonTransformer());
|
||||
|
||||
get (API_CONTEXT + "/harmony/activities", "application/json", (request, response) -> {
|
||||
|
||||
@@ -13,6 +13,8 @@ public class Device {
|
||||
private String level;
|
||||
private String state;
|
||||
private String comment;
|
||||
private String veraname;
|
||||
private String veraaddress;
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
@@ -79,5 +81,17 @@ public class Device {
|
||||
public void setComment(String comment) {
|
||||
this.comment = comment;
|
||||
}
|
||||
public String getVeraname() {
|
||||
return veraname;
|
||||
}
|
||||
public void setVeraname(String veraname) {
|
||||
this.veraname = veraname;
|
||||
}
|
||||
public String getVeraaddress() {
|
||||
return veraaddress;
|
||||
}
|
||||
public void setVeraaddress(String veraaddress) {
|
||||
this.veraaddress = veraaddress;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -5,6 +5,8 @@ public class Scene {
|
||||
private String name;
|
||||
private String id;
|
||||
private String room;
|
||||
private String veraname;
|
||||
private String veraaddress;
|
||||
public String getActive() {
|
||||
return active;
|
||||
}
|
||||
@@ -29,5 +31,17 @@ public class Scene {
|
||||
public void setRoom(String room) {
|
||||
this.room = room;
|
||||
}
|
||||
public String getVeraname() {
|
||||
return veraname;
|
||||
}
|
||||
public void setVeraname(String veraname) {
|
||||
this.veraname = veraname;
|
||||
}
|
||||
public String getVeraaddress() {
|
||||
return veraaddress;
|
||||
}
|
||||
public void setVeraaddress(String veraaddress) {
|
||||
this.veraaddress = veraaddress;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
58
src/main/java/com/bwssystems/vera/VeraHome.java
Normal file
58
src/main/java/com/bwssystems/vera/VeraHome.java
Normal file
@@ -0,0 +1,58 @@
|
||||
package com.bwssystems.vera;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import com.bwssystems.HABridge.BridgeSettings;
|
||||
import com.bwssystems.HABridge.NamedIP;
|
||||
import com.bwssystems.luupRequests.Device;
|
||||
import com.bwssystems.luupRequests.Scene;
|
||||
|
||||
public class VeraHome {
|
||||
private static final Logger log = LoggerFactory.getLogger(VeraHome.class);
|
||||
private Map<String, VeraInfo> veras;
|
||||
|
||||
public VeraHome(BridgeSettings bridgeSettings) {
|
||||
veras = new HashMap<String, VeraInfo>();
|
||||
if(!bridgeSettings.isValidVera())
|
||||
return;
|
||||
Iterator<NamedIP> theList = bridgeSettings.getVeraAddress().getDevices().iterator();
|
||||
while(theList.hasNext()) {
|
||||
NamedIP aVera = theList.next();
|
||||
veras.put(aVera.getName(), new VeraInfo(aVera, bridgeSettings.isValidVera()));
|
||||
}
|
||||
}
|
||||
|
||||
public List<Device> getDevices() {
|
||||
log.debug("consolidating devices for veras");
|
||||
Iterator<String> keys = veras.keySet().iterator();
|
||||
ArrayList<Device> deviceList = new ArrayList<Device>();
|
||||
while(keys.hasNext()) {
|
||||
String key = keys.next();
|
||||
Iterator<Device> devices = veras.get(key).getSdata().getDevices().iterator();
|
||||
while(devices.hasNext()) {
|
||||
deviceList.add(devices.next());
|
||||
}
|
||||
}
|
||||
return deviceList;
|
||||
}
|
||||
public List<Scene> getScenes() {
|
||||
log.debug("consolidating scenes for veras");
|
||||
Iterator<String> keys = veras.keySet().iterator();
|
||||
ArrayList<Scene> sceneList = new ArrayList<Scene>();
|
||||
while(keys.hasNext()) {
|
||||
String key = keys.next();
|
||||
Iterator<Scene> scenes = veras.get(key).getSdata().getScenes().iterator();
|
||||
while(scenes.hasNext()) {
|
||||
sceneList.add(scenes.next());
|
||||
}
|
||||
}
|
||||
return sceneList;
|
||||
}
|
||||
}
|
||||
@@ -13,6 +13,7 @@ import org.apache.http.util.EntityUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import com.bwssystems.HABridge.NamedIP;
|
||||
import com.bwssystems.luupRequests.Categorie;
|
||||
import com.bwssystems.luupRequests.Device;
|
||||
import com.bwssystems.luupRequests.Room;
|
||||
@@ -25,13 +26,13 @@ public class VeraInfo {
|
||||
private static final Logger log = LoggerFactory.getLogger(VeraInfo.class);
|
||||
private HttpClient httpClient;
|
||||
private static final String SDATA_REQUEST = ":3480/data_request?id=sdata&output_format=json";
|
||||
private String veraAddressString;
|
||||
private NamedIP veraAddress;
|
||||
private Boolean validVera;
|
||||
|
||||
public VeraInfo(String addressString, Boolean isValidVera) {
|
||||
public VeraInfo(NamedIP addressName, Boolean isValidVera) {
|
||||
super();
|
||||
httpClient = HttpClients.createDefault();
|
||||
veraAddressString = addressString;
|
||||
veraAddress = addressName;
|
||||
validVera = isValidVera;
|
||||
}
|
||||
|
||||
@@ -39,7 +40,7 @@ public class VeraInfo {
|
||||
if(!validVera)
|
||||
return new Sdata();
|
||||
|
||||
String theUrl = "http://" + veraAddressString + SDATA_REQUEST;
|
||||
String theUrl = "http://" + veraAddress.getIp() + SDATA_REQUEST;
|
||||
String theData;
|
||||
|
||||
theData = doHttpGETRequest(theUrl);
|
||||
@@ -71,6 +72,8 @@ public class VeraInfo {
|
||||
theDevice.setCategory(categoryMap.get(theDevice.getCategory()).getName());
|
||||
else
|
||||
theDevice.setCategory("<unknown>");
|
||||
theDevice.setVeraaddress(veraAddress.getIp());
|
||||
theDevice.setVeraname(veraAddress.getName());
|
||||
}
|
||||
|
||||
ListIterator<Scene> theSecneIter = theSdata.getScenes().listIterator();
|
||||
@@ -81,6 +84,8 @@ public class VeraInfo {
|
||||
theScene.setRoom(roomMap.get(theScene.getRoom()).getName());
|
||||
else
|
||||
theScene.setRoom("no room");
|
||||
theScene.setVeraaddress(veraAddress.getIp());
|
||||
theScene.setVeraname(veraAddress.getName());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user