mirror of
https://github.com/bwssytems/ha-bridge.git
synced 2025-12-18 16:17:30 +00:00
111 lines
3.2 KiB
Java
111 lines
3.2 KiB
Java
package com.bwssystems.NestBridge;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.ListIterator;
|
|
import java.util.Set;
|
|
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import com.bwssystems.HABridge.BridgeSettingsDescriptor;
|
|
import com.bwssystems.nest.controller.Home;
|
|
import com.bwssystems.nest.controller.Nest;
|
|
import com.bwssystems.nest.controller.NestSession;
|
|
import com.bwssystems.nest.controller.Thermostat;
|
|
import com.bwssystems.nest.protocol.error.LoginException;
|
|
import com.bwssystems.nest.protocol.status.WhereDetail;
|
|
import com.bwssystems.nest.protocol.status.WhereItem;
|
|
|
|
public class NestHome {
|
|
private static final Logger log = LoggerFactory.getLogger(NestHome.class);
|
|
private NestSession theSession;
|
|
private Nest theNest;
|
|
private ArrayList<NestItem> nestItems;
|
|
|
|
public NestHome(BridgeSettingsDescriptor bridgeSettings) {
|
|
theSession = null;
|
|
theNest = null;
|
|
nestItems = null;
|
|
|
|
if(!bridgeSettings.isValidNest()) {
|
|
log.debug("not a valid nest");
|
|
return;
|
|
}
|
|
|
|
try {
|
|
theSession = new NestSession(bridgeSettings.getNestuser(), bridgeSettings.getNestpwd());
|
|
theNest = new Nest(theSession);
|
|
} catch (LoginException e) {
|
|
log.error("Caught Login Exception, exiting....");
|
|
theSession = null;
|
|
}
|
|
}
|
|
|
|
public List<NestItem> getItems() {
|
|
if(theNest == null)
|
|
return null;
|
|
|
|
if(nestItems == null) {
|
|
nestItems = new ArrayList<NestItem>();
|
|
Set<String> homeNames = theNest.getHomeNames();
|
|
Home aHome = null;
|
|
NestItem anItem = null;
|
|
for(String name : homeNames) {
|
|
aHome = theNest.getHome(name);
|
|
anItem = new NestItem();
|
|
anItem.setId(name);
|
|
anItem.setName(aHome.getDetail().getName());
|
|
anItem.setType("Home");
|
|
anItem.setLocation(aHome.getDetail().getLocation());
|
|
nestItems.add(anItem);
|
|
}
|
|
Thermostat thermo = null;
|
|
Set<String> thermoNames = theNest.getThermostatNames();
|
|
for(String name : thermoNames) {
|
|
thermo = theNest.getThermostat(name);
|
|
anItem = new NestItem();
|
|
anItem.setId(name);
|
|
anItem.setType("Thermostat");
|
|
String where = null;
|
|
String homeName= null;
|
|
Boolean found = false;
|
|
for(String aHomeName : homeNames) {
|
|
WhereDetail aDetail = theNest.getWhere(aHomeName);
|
|
ListIterator<WhereItem> anIterator = aDetail.getWheres().listIterator();
|
|
while(anIterator.hasNext()) {
|
|
WhereItem aWhereItem = (WhereItem) anIterator.next();
|
|
if(aWhereItem.getWhereId().equals(thermo.getDeviceDetail().getWhereId())) {
|
|
where = aWhereItem.getName();
|
|
homeName = theNest.getHome(aHomeName).getDetail().getName();
|
|
found = true;
|
|
break;
|
|
}
|
|
}
|
|
if(found)
|
|
break;
|
|
}
|
|
anItem.setName(where + "(" + name.substring(name.length() - 4) + ")");
|
|
anItem.setLocation(where + " - " + homeName);
|
|
nestItems.add(anItem);
|
|
}
|
|
}
|
|
|
|
return nestItems;
|
|
}
|
|
|
|
public Nest getTheNest() {
|
|
return theNest;
|
|
}
|
|
|
|
public void closeTheNest() {
|
|
if(theSession != null) {
|
|
theNest.endNestSession();
|
|
theNest = null;
|
|
theSession = null;
|
|
nestItems = null;
|
|
}
|
|
}
|
|
}
|
|
|