mirror of
https://github.com/bwssytems/ha-bridge.git
synced 2025-12-19 00:20:26 +00:00
Fixed color handling, starter Mozilla IOT integration
This commit is contained in:
@@ -216,6 +216,7 @@ public class BridgeSettings extends BackupHandler {
|
|||||||
theBridgeSettings.setHomeWizardConfigured(theBridgeSettings.isValidHomeWizard());
|
theBridgeSettings.setHomeWizardConfigured(theBridgeSettings.isValidHomeWizard());
|
||||||
theBridgeSettings.setOpenhabconfigured(theBridgeSettings.isValidOpenhab());
|
theBridgeSettings.setOpenhabconfigured(theBridgeSettings.isValidOpenhab());
|
||||||
theBridgeSettings.setFhemconfigured(theBridgeSettings.isValidFhem());
|
theBridgeSettings.setFhemconfigured(theBridgeSettings.isValidFhem());
|
||||||
|
theBridgeSettings.setMoziotconfigured(theBridgeSettings.isValidMozIot());
|
||||||
// Lifx is either configured or not, so it does not need an update.
|
// Lifx is either configured or not, so it does not need an update.
|
||||||
if(serverPortOverride != null)
|
if(serverPortOverride != null)
|
||||||
theBridgeSettings.setServerPort(serverPortOverride);
|
theBridgeSettings.setServerPort(serverPortOverride);
|
||||||
|
|||||||
@@ -90,6 +90,9 @@ public class BridgeSettingsDescriptor {
|
|||||||
@SerializedName("openhabaddress")
|
@SerializedName("openhabaddress")
|
||||||
@Expose
|
@Expose
|
||||||
private IpList openhabaddress;
|
private IpList openhabaddress;
|
||||||
|
@SerializedName("moziotgateway")
|
||||||
|
@Expose
|
||||||
|
private IpList moziotgateway;
|
||||||
@SerializedName("hubversion")
|
@SerializedName("hubversion")
|
||||||
@Expose
|
@Expose
|
||||||
private String hubversion;
|
private String hubversion;
|
||||||
@@ -114,6 +117,9 @@ public class BridgeSettingsDescriptor {
|
|||||||
@SerializedName("broadlinkconfigured")
|
@SerializedName("broadlinkconfigured")
|
||||||
@Expose
|
@Expose
|
||||||
private boolean broadlinkconfigured;
|
private boolean broadlinkconfigured;
|
||||||
|
@SerializedName("tracestate")
|
||||||
|
@Expose
|
||||||
|
private boolean tracestate;
|
||||||
// @SerializedName("activeloggers")
|
// @SerializedName("activeloggers")
|
||||||
// @Expose
|
// @Expose
|
||||||
// private List<NameValue> activeloggers;
|
// private List<NameValue> activeloggers;
|
||||||
@@ -132,6 +138,7 @@ public class BridgeSettingsDescriptor {
|
|||||||
private boolean homewizardconfigured;
|
private boolean homewizardconfigured;
|
||||||
private boolean openhabconfigured;
|
private boolean openhabconfigured;
|
||||||
private boolean fhemconfigured;
|
private boolean fhemconfigured;
|
||||||
|
private boolean moziotconfigured;
|
||||||
|
|
||||||
// Deprecated settings
|
// Deprecated settings
|
||||||
private String haltoken;
|
private String haltoken;
|
||||||
@@ -156,6 +163,7 @@ public class BridgeSettingsDescriptor {
|
|||||||
this.homewizardconfigured = false;
|
this.homewizardconfigured = false;
|
||||||
this.lifxconfigured = false;
|
this.lifxconfigured = false;
|
||||||
this.openhabconfigured = false;
|
this.openhabconfigured = false;
|
||||||
|
this.moziotconfigured = false;
|
||||||
this.farenheit = true;
|
this.farenheit = true;
|
||||||
this.securityData = null;
|
this.securityData = null;
|
||||||
this.settingsChanged = false;
|
this.settingsChanged = false;
|
||||||
@@ -166,313 +174,417 @@ public class BridgeSettingsDescriptor {
|
|||||||
// this.activeloggers = null;
|
// this.activeloggers = null;
|
||||||
this.upnpsenddelay = Configuration.UPNP_SEND_DELAY;
|
this.upnpsenddelay = Configuration.UPNP_SEND_DELAY;
|
||||||
this.broadlinkconfigured = false;
|
this.broadlinkconfigured = false;
|
||||||
|
this.tracestate = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getUpnpConfigAddress() {
|
public String getUpnpConfigAddress() {
|
||||||
return upnpconfigaddress;
|
return upnpconfigaddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUpnpConfigAddress(String upnpConfigAddress) {
|
public void setUpnpConfigAddress(String upnpConfigAddress) {
|
||||||
this.upnpconfigaddress = upnpConfigAddress;
|
this.upnpconfigaddress = upnpConfigAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isUseupnpiface() {
|
public boolean isUseupnpiface() {
|
||||||
return useupnpiface;
|
return useupnpiface;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUseupnpiface(boolean useupnpiface) {
|
public void setUseupnpiface(boolean useupnpiface) {
|
||||||
this.useupnpiface = useupnpiface;
|
this.useupnpiface = useupnpiface;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isUserooms() {
|
public boolean isUserooms() {
|
||||||
return userooms;
|
return userooms;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUserooms(boolean userooms) {
|
public void setUserooms(boolean userooms) {
|
||||||
this.userooms = userooms;
|
this.userooms = userooms;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getServerPort() {
|
public Integer getServerPort() {
|
||||||
return serverport;
|
return serverport;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setServerPort(Integer serverPort) {
|
public void setServerPort(Integer serverPort) {
|
||||||
this.serverport = serverPort;
|
this.serverport = serverPort;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setServerPort(String serverPort) {
|
public void setServerPort(String serverPort) {
|
||||||
this.serverport = Integer.valueOf(serverPort);
|
this.serverport = Integer.valueOf(serverPort);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getUpnpResponsePort() {
|
public Integer getUpnpResponsePort() {
|
||||||
return upnpresponseport;
|
return upnpresponseport;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUpnpResponsePort(Integer upnpResponsePort) {
|
public void setUpnpResponsePort(Integer upnpResponsePort) {
|
||||||
this.upnpresponseport = upnpResponsePort;
|
this.upnpresponseport = upnpResponsePort;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUpnpResponsePort(String upnpResponsePort) {
|
public void setUpnpResponsePort(String upnpResponsePort) {
|
||||||
this.upnpresponseport = Integer.valueOf(upnpResponsePort);
|
this.upnpresponseport = Integer.valueOf(upnpResponsePort);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getUpnpDeviceDb() {
|
public String getUpnpDeviceDb() {
|
||||||
return upnpdevicedb;
|
return upnpdevicedb;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUpnpDeviceDb(String upnpDeviceDb) {
|
public void setUpnpDeviceDb(String upnpDeviceDb) {
|
||||||
this.upnpdevicedb = upnpDeviceDb;
|
this.upnpdevicedb = upnpDeviceDb;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getUpnpGroupDb() {
|
public String getUpnpGroupDb() {
|
||||||
return upnpgroupdb;
|
return upnpgroupdb;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUpnpGroupDb(String upnpGroupDb) {
|
public void setUpnpGroupDb(String upnpGroupDb) {
|
||||||
this.upnpgroupdb = upnpGroupDb;
|
this.upnpgroupdb = upnpGroupDb;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IpList getVeraAddress() {
|
public IpList getVeraAddress() {
|
||||||
return veraaddress;
|
return veraaddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IpList getFibaroAddress() {
|
public IpList getFibaroAddress() {
|
||||||
return fibaroaddress;
|
return fibaroaddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IpList getSomfyAddress() {
|
public IpList getSomfyAddress() {
|
||||||
return somfyaddress;
|
return somfyaddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IpList getHomeWizardAddress() {
|
public IpList getHomeWizardAddress() {
|
||||||
return homewizardaddress;
|
return homewizardaddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setVeraAddress(IpList veraAddress) {
|
public void setVeraAddress(IpList veraAddress) {
|
||||||
this.veraaddress = veraAddress;
|
this.veraaddress = veraAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setFibaroAddress(IpList fibaroAddress) {
|
public void setFibaroAddress(IpList fibaroAddress) {
|
||||||
this.fibaroaddress = fibaroAddress;
|
this.fibaroaddress = fibaroAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSomfyAddress(IpList somfyAddress) {
|
public void setSomfyAddress(IpList somfyAddress) {
|
||||||
this.somfyaddress = somfyAddress;
|
this.somfyaddress = somfyAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setHomeWizardAddress(IpList homewizardaddress) {
|
public void setHomeWizardAddress(IpList homewizardaddress) {
|
||||||
this.homewizardaddress = homewizardaddress;
|
this.homewizardaddress = homewizardaddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IpList getHarmonyAddress() {
|
public IpList getHarmonyAddress() {
|
||||||
return harmonyaddress;
|
return harmonyaddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setHarmonyAddress(IpList harmonyaddress) {
|
public void setHarmonyAddress(IpList harmonyaddress) {
|
||||||
this.harmonyaddress = harmonyaddress;
|
this.harmonyaddress = harmonyaddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isUpnpStrict() {
|
public boolean isUpnpStrict() {
|
||||||
return upnpstrict;
|
return upnpstrict;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUpnpStrict(boolean upnpStrict) {
|
public void setUpnpStrict(boolean upnpStrict) {
|
||||||
this.upnpstrict = upnpStrict;
|
this.upnpstrict = upnpStrict;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isTraceupnp() {
|
public boolean isTraceupnp() {
|
||||||
return traceupnp;
|
return traceupnp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setTraceupnp(boolean traceupnp) {
|
public void setTraceupnp(boolean traceupnp) {
|
||||||
this.traceupnp = traceupnp;
|
this.traceupnp = traceupnp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getNestuser() {
|
public String getNestuser() {
|
||||||
return nestuser;
|
return nestuser;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setNestuser(String nestuser) {
|
public void setNestuser(String nestuser) {
|
||||||
this.nestuser = nestuser;
|
this.nestuser = nestuser;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getNestpwd() {
|
public String getNestpwd() {
|
||||||
return nestpwd;
|
return nestpwd;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setNestpwd(String nestpwd) {
|
public void setNestpwd(String nestpwd) {
|
||||||
this.nestpwd = nestpwd;
|
this.nestpwd = nestpwd;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isVeraconfigured() {
|
public boolean isVeraconfigured() {
|
||||||
return veraconfigured;
|
return veraconfigured;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isFibaroconfigured() {
|
public boolean isFibaroconfigured() {
|
||||||
return fibaroconfigured;
|
return fibaroconfigured;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isSomfyconfigured() {
|
public boolean isSomfyconfigured() {
|
||||||
return somfyconfigured;
|
return somfyconfigured;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isHomeWizardConfigured() {
|
public boolean isHomeWizardConfigured() {
|
||||||
return homewizardconfigured;
|
return homewizardconfigured;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setVeraconfigured(boolean veraconfigured) {
|
public void setVeraconfigured(boolean veraconfigured) {
|
||||||
this.veraconfigured = veraconfigured;
|
this.veraconfigured = veraconfigured;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setFibaroconfigured(boolean fibaroconfigured) {
|
public void setFibaroconfigured(boolean fibaroconfigured) {
|
||||||
this.fibaroconfigured = fibaroconfigured;
|
this.fibaroconfigured = fibaroconfigured;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSomfyconfigured(boolean somfyconfigured) {
|
public void setSomfyconfigured(boolean somfyconfigured) {
|
||||||
this.somfyconfigured = somfyconfigured;
|
this.somfyconfigured = somfyconfigured;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setHomeWizardConfigured(boolean homewizardconfigured) {
|
public void setHomeWizardConfigured(boolean homewizardconfigured) {
|
||||||
this.homewizardconfigured = homewizardconfigured;
|
this.homewizardconfigured = homewizardconfigured;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isHarmonyconfigured() {
|
public boolean isHarmonyconfigured() {
|
||||||
return harmonyconfigured;
|
return harmonyconfigured;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setHarmonyconfigured(boolean harmonyconfigured) {
|
public void setHarmonyconfigured(boolean harmonyconfigured) {
|
||||||
this.harmonyconfigured = harmonyconfigured;
|
this.harmonyconfigured = harmonyconfigured;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isNestConfigured() {
|
public boolean isNestConfigured() {
|
||||||
return nestconfigured;
|
return nestconfigured;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setNestConfigured(boolean isNestConfigured) {
|
public void setNestConfigured(boolean isNestConfigured) {
|
||||||
this.nestconfigured = isNestConfigured;
|
this.nestconfigured = isNestConfigured;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getButtonsleep() {
|
public Integer getButtonsleep() {
|
||||||
return buttonsleep;
|
return buttonsleep;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setButtonsleep(Integer buttonsleep) {
|
public void setButtonsleep(Integer buttonsleep) {
|
||||||
this.buttonsleep = buttonsleep;
|
this.buttonsleep = buttonsleep;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getConfigfile() {
|
public String getConfigfile() {
|
||||||
return configfile;
|
return configfile;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setConfigfile(String configfile) {
|
public void setConfigfile(String configfile) {
|
||||||
this.configfile = configfile;
|
this.configfile = configfile;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getNumberoflogmessages() {
|
public Integer getNumberoflogmessages() {
|
||||||
return numberoflogmessages;
|
return numberoflogmessages;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setNumberoflogmessages(Integer numberoflogmessages) {
|
public void setNumberoflogmessages(Integer numberoflogmessages) {
|
||||||
this.numberoflogmessages = numberoflogmessages;
|
this.numberoflogmessages = numberoflogmessages;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isFarenheit() {
|
public boolean isFarenheit() {
|
||||||
return farenheit;
|
return farenheit;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setFarenheit(boolean farenheit) {
|
public void setFarenheit(boolean farenheit) {
|
||||||
this.farenheit = farenheit;
|
this.farenheit = farenheit;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IpList getHueaddress() {
|
public IpList getHueaddress() {
|
||||||
return hueaddress;
|
return hueaddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setHueaddress(IpList hueaddress) {
|
public void setHueaddress(IpList hueaddress) {
|
||||||
this.hueaddress = hueaddress;
|
this.hueaddress = hueaddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isHueconfigured() {
|
public boolean isHueconfigured() {
|
||||||
return hueconfigured;
|
return hueconfigured;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setHueconfigured(boolean hueconfigured) {
|
public void setHueconfigured(boolean hueconfigured) {
|
||||||
this.hueconfigured = hueconfigured;
|
this.hueconfigured = hueconfigured;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IpList getHaladdress() {
|
public IpList getHaladdress() {
|
||||||
return haladdress;
|
return haladdress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setHaladdress(IpList haladdress) {
|
public void setHaladdress(IpList haladdress) {
|
||||||
this.haladdress = haladdress;
|
this.haladdress = haladdress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getHaltoken() {
|
public String getHaltoken() {
|
||||||
return haltoken;
|
return haltoken;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setHaltoken(String haltoken) {
|
public void setHaltoken(String haltoken) {
|
||||||
this.haltoken = haltoken;
|
this.haltoken = haltoken;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isHalconfigured() {
|
public boolean isHalconfigured() {
|
||||||
return halconfigured;
|
return halconfigured;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setHalconfigured(boolean halconfigured) {
|
public void setHalconfigured(boolean halconfigured) {
|
||||||
this.halconfigured = halconfigured;
|
this.halconfigured = halconfigured;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<String, WhitelistEntry> getWhitelist() {
|
public Map<String, WhitelistEntry> getWhitelist() {
|
||||||
return whitelist;
|
return whitelist;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void removeWhitelist() {
|
protected void removeWhitelist() {
|
||||||
whitelist = null;
|
whitelist = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isSettingsChanged() {
|
public boolean isSettingsChanged() {
|
||||||
return settingsChanged;
|
return settingsChanged;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSettingsChanged(boolean settingsChanged) {
|
public void setSettingsChanged(boolean settingsChanged) {
|
||||||
this.settingsChanged = settingsChanged;
|
this.settingsChanged = settingsChanged;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getMyechourl() {
|
public String getMyechourl() {
|
||||||
return myechourl;
|
return myechourl;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMyechourl(String myechourl) {
|
public void setMyechourl(String myechourl) {
|
||||||
this.myechourl = myechourl;
|
this.myechourl = myechourl;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getWebaddress() {
|
public String getWebaddress() {
|
||||||
return webaddress;
|
return webaddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setWebaddress(String webaddress) {
|
public void setWebaddress(String webaddress) {
|
||||||
this.webaddress = webaddress;
|
this.webaddress = webaddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IpList getMqttaddress() {
|
public IpList getMqttaddress() {
|
||||||
return mqttaddress;
|
return mqttaddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMqttaddress(IpList mqttaddress) {
|
public void setMqttaddress(IpList mqttaddress) {
|
||||||
this.mqttaddress = mqttaddress;
|
this.mqttaddress = mqttaddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isMqttconfigured() {
|
public boolean isMqttconfigured() {
|
||||||
return mqttconfigured;
|
return mqttconfigured;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMqttconfigured(boolean mqttconfigured) {
|
public void setMqttconfigured(boolean mqttconfigured) {
|
||||||
this.mqttconfigured = mqttconfigured;
|
this.mqttconfigured = mqttconfigured;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IpList getHassaddress() {
|
public IpList getHassaddress() {
|
||||||
return hassaddress;
|
return hassaddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setHassaddress(IpList hassaddress) {
|
public void setHassaddress(IpList hassaddress) {
|
||||||
this.hassaddress = hassaddress;
|
this.hassaddress = hassaddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isHassconfigured() {
|
public boolean isHassconfigured() {
|
||||||
return hassconfigured;
|
return hassconfigured;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setHassconfigured(boolean hassconfigured) {
|
public void setHassconfigured(boolean hassconfigured) {
|
||||||
this.hassconfigured = hassconfigured;
|
this.hassconfigured = hassconfigured;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IpList getOpenhabaddress() {
|
public IpList getOpenhabaddress() {
|
||||||
return openhabaddress;
|
return openhabaddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setOpenhabaddress(IpList openhabaddress) {
|
public void setOpenhabaddress(IpList openhabaddress) {
|
||||||
this.openhabaddress = openhabaddress;
|
this.openhabaddress = openhabaddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isOpenhabconfigured() {
|
public boolean isOpenhabconfigured() {
|
||||||
return openhabconfigured;
|
return openhabconfigured;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setOpenhabconfigured(boolean openhabconfigured) {
|
public void setOpenhabconfigured(boolean openhabconfigured) {
|
||||||
this.openhabconfigured = openhabconfigured;
|
this.openhabconfigured = openhabconfigured;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getHubversion() {
|
public String getHubversion() {
|
||||||
return hubversion;
|
return hubversion;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setHubversion(String hubversion) {
|
public void setHubversion(String hubversion) {
|
||||||
this.hubversion = hubversion;
|
this.hubversion = hubversion;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getHubmac() {
|
public String getHubmac() {
|
||||||
return hubmac;
|
return hubmac;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setHubmac(String hubmac) {
|
public void setHubmac(String hubmac) {
|
||||||
this.hubmac = hubmac;
|
this.hubmac = hubmac;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IpList getDomoticzaddress() {
|
public IpList getDomoticzaddress() {
|
||||||
return domoticzaddress;
|
return domoticzaddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDomoticzaddress(IpList domoticzaddress) {
|
public void setDomoticzaddress(IpList domoticzaddress) {
|
||||||
this.domoticzaddress = domoticzaddress;
|
this.domoticzaddress = domoticzaddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isDomoticzconfigured() {
|
public boolean isDomoticzconfigured() {
|
||||||
return domoticzconfigured;
|
return domoticzconfigured;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDomoticzconfigured(boolean domoticzconfigured) {
|
public void setDomoticzconfigured(boolean domoticzconfigured) {
|
||||||
this.domoticzconfigured = domoticzconfigured;
|
this.domoticzconfigured = domoticzconfigured;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isLifxconfigured() {
|
public boolean isLifxconfigured() {
|
||||||
return lifxconfigured;
|
return lifxconfigured;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLifxconfigured(boolean lifxconfigured) {
|
public void setLifxconfigured(boolean lifxconfigured) {
|
||||||
this.lifxconfigured = lifxconfigured;
|
this.lifxconfigured = lifxconfigured;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getSecurityData() {
|
public String getSecurityData() {
|
||||||
return securityData;
|
return securityData;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSecurityData(String securityData) {
|
public void setSecurityData(String securityData) {
|
||||||
this.securityData = securityData;
|
this.securityData = securityData;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getUpnpsenddelay() {
|
public Integer getUpnpsenddelay() {
|
||||||
return upnpsenddelay;
|
return upnpsenddelay;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUpnpsenddelay(Integer upnpsenddelay) {
|
public void setUpnpsenddelay(Integer upnpsenddelay) {
|
||||||
this.upnpsenddelay = upnpsenddelay;
|
this.upnpsenddelay = upnpsenddelay;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IpList getFhemaddress() {
|
public IpList getFhemaddress() {
|
||||||
return fhemaddress;
|
return fhemaddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setFhemaddress(IpList fhemaddress) {
|
public void setFhemaddress(IpList fhemaddress) {
|
||||||
this.fhemaddress = fhemaddress;
|
this.fhemaddress = fhemaddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isFhemconfigured() {
|
public boolean isFhemconfigured() {
|
||||||
return fhemconfigured;
|
return fhemconfigured;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setFhemconfigured(boolean fhemconfigured) {
|
public void setFhemconfigured(boolean fhemconfigured) {
|
||||||
this.fhemconfigured = fhemconfigured;
|
this.fhemconfigured = fhemconfigured;
|
||||||
}
|
}
|
||||||
|
|
||||||
// public List<NameValue> getActiveloggers() {
|
// public List<NameValue> getActiveloggers() {
|
||||||
// return activeloggers;
|
// return activeloggers;
|
||||||
// }
|
// }
|
||||||
@@ -482,9 +594,11 @@ public class BridgeSettingsDescriptor {
|
|||||||
public boolean isBroadlinkconfigured() {
|
public boolean isBroadlinkconfigured() {
|
||||||
return broadlinkconfigured;
|
return broadlinkconfigured;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setBroadlinkconfigured(boolean broadlinkconfigured) {
|
public void setBroadlinkconfigured(boolean broadlinkconfigured) {
|
||||||
this.broadlinkconfigured = broadlinkconfigured;
|
this.broadlinkconfigured = broadlinkconfigured;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean isValidVera() {
|
public Boolean isValidVera() {
|
||||||
if (this.getVeraAddress() == null || this.getVeraAddress().getDevices().size() <= 0)
|
if (this.getVeraAddress() == null || this.getVeraAddress().getDevices().size() <= 0)
|
||||||
return false;
|
return false;
|
||||||
@@ -493,6 +607,7 @@ public class BridgeSettingsDescriptor {
|
|||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean isValidFibaro() {
|
public Boolean isValidFibaro() {
|
||||||
if (this.getFibaroAddress() == null || this.getFibaroAddress().getDevices().size() <= 0)
|
if (this.getFibaroAddress() == null || this.getFibaroAddress().getDevices().size() <= 0)
|
||||||
return false;
|
return false;
|
||||||
@@ -501,6 +616,7 @@ public class BridgeSettingsDescriptor {
|
|||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean isValidHarmony() {
|
public Boolean isValidHarmony() {
|
||||||
if (this.getHarmonyAddress() == null || this.getHarmonyAddress().getDevices().size() <= 0)
|
if (this.getHarmonyAddress() == null || this.getHarmonyAddress().getDevices().size() <= 0)
|
||||||
return false;
|
return false;
|
||||||
@@ -509,6 +625,7 @@ public class BridgeSettingsDescriptor {
|
|||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean isValidNest() {
|
public Boolean isValidNest() {
|
||||||
if (this.getNestpwd() == null || this.getNestpwd().equals(""))
|
if (this.getNestpwd() == null || this.getNestpwd().equals(""))
|
||||||
return false;
|
return false;
|
||||||
@@ -516,6 +633,7 @@ public class BridgeSettingsDescriptor {
|
|||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean isValidHue() {
|
public Boolean isValidHue() {
|
||||||
if (this.getHueaddress() == null || this.getHueaddress().getDevices().size() <= 0)
|
if (this.getHueaddress() == null || this.getHueaddress().getDevices().size() <= 0)
|
||||||
return false;
|
return false;
|
||||||
@@ -524,6 +642,7 @@ public class BridgeSettingsDescriptor {
|
|||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean isValidHal() {
|
public Boolean isValidHal() {
|
||||||
if (this.getHaladdress() == null || this.getHaladdress().getDevices().size() <= 0)
|
if (this.getHaladdress() == null || this.getHaladdress().getDevices().size() <= 0)
|
||||||
return false;
|
return false;
|
||||||
@@ -536,6 +655,7 @@ public class BridgeSettingsDescriptor {
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean isValidMQTT() {
|
public Boolean isValidMQTT() {
|
||||||
if (this.getMqttaddress() == null || this.getMqttaddress().getDevices().size() <= 0)
|
if (this.getMqttaddress() == null || this.getMqttaddress().getDevices().size() <= 0)
|
||||||
return false;
|
return false;
|
||||||
@@ -544,6 +664,7 @@ public class BridgeSettingsDescriptor {
|
|||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean isValidHass() {
|
public Boolean isValidHass() {
|
||||||
if (this.getHassaddress() == null || this.getHassaddress().getDevices().size() <= 0)
|
if (this.getHassaddress() == null || this.getHassaddress().getDevices().size() <= 0)
|
||||||
return false;
|
return false;
|
||||||
@@ -552,6 +673,7 @@ public class BridgeSettingsDescriptor {
|
|||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean isValidDomoticz() {
|
public Boolean isValidDomoticz() {
|
||||||
if (this.getDomoticzaddress() == null || this.getDomoticzaddress().getDevices().size() <= 0)
|
if (this.getDomoticzaddress() == null || this.getDomoticzaddress().getDevices().size() <= 0)
|
||||||
return false;
|
return false;
|
||||||
@@ -560,6 +682,7 @@ public class BridgeSettingsDescriptor {
|
|||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean isValidSomfy() {
|
public Boolean isValidSomfy() {
|
||||||
if (this.getSomfyAddress() == null || this.getSomfyAddress().getDevices().size() <= 0)
|
if (this.getSomfyAddress() == null || this.getSomfyAddress().getDevices().size() <= 0)
|
||||||
return false;
|
return false;
|
||||||
@@ -568,9 +691,11 @@ public class BridgeSettingsDescriptor {
|
|||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean isValidLifx() {
|
public Boolean isValidLifx() {
|
||||||
return this.isLifxconfigured();
|
return this.isLifxconfigured();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateHue(NamedIP aHue) {
|
public void updateHue(NamedIP aHue) {
|
||||||
int indexHue = -1;
|
int indexHue = -1;
|
||||||
for (int i = 0; i < hueaddress.getDevices().size(); i++) {
|
for (int i = 0; i < hueaddress.getDevices().size(); i++) {
|
||||||
@@ -582,6 +707,7 @@ public class BridgeSettingsDescriptor {
|
|||||||
this.setSettingsChanged(true);
|
this.setSettingsChanged(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean isValidHomeWizard() {
|
public Boolean isValidHomeWizard() {
|
||||||
if (this.getHomeWizardAddress() == null || this.getHomeWizardAddress().getDevices().size() <= 0)
|
if (this.getHomeWizardAddress() == null || this.getHomeWizardAddress().getDevices().size() <= 0)
|
||||||
return false;
|
return false;
|
||||||
@@ -592,6 +718,7 @@ public class BridgeSettingsDescriptor {
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean isValidOpenhab() {
|
public Boolean isValidOpenhab() {
|
||||||
if (this.getOpenhabaddress() == null || this.getOpenhabaddress().getDevices().size() <= 0)
|
if (this.getOpenhabaddress() == null || this.getOpenhabaddress().getDevices().size() <= 0)
|
||||||
return false;
|
return false;
|
||||||
@@ -602,6 +729,7 @@ public class BridgeSettingsDescriptor {
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean isValidFhem() {
|
public Boolean isValidFhem() {
|
||||||
if (this.getFhemaddress() == null || this.getFhemaddress().getDevices().size() <= 0)
|
if (this.getFhemaddress() == null || this.getFhemaddress().getDevices().size() <= 0)
|
||||||
return false;
|
return false;
|
||||||
@@ -612,7 +740,43 @@ public class BridgeSettingsDescriptor {
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean isValidBroadlink() {
|
public Boolean isValidBroadlink() {
|
||||||
return this.isBroadlinkconfigured();
|
return this.isBroadlinkconfigured();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isTracestate() {
|
||||||
|
return tracestate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTracestate(boolean tracestate) {
|
||||||
|
this.tracestate = tracestate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IpList getMoziotgateway() {
|
||||||
|
return moziotgateway;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMoziotgateway(IpList moziotgateway) {
|
||||||
|
this.moziotgateway = moziotgateway;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean isValidMozIot() {
|
||||||
|
if (this.getMoziotgateway() == null || this.getMoziotgateway().getDevices().size() <= 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
List<NamedIP> devicesList = this.getMoziotgateway().getDevices();
|
||||||
|
if (devicesList.get(0).getIp().contains(Configuration.DEFAULT_ADDRESS))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isMoziotconfigured() {
|
||||||
|
return moziotconfigured;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMoziotconfigured(boolean moziotconfigured) {
|
||||||
|
this.moziotconfigured = moziotconfigured;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,4 +19,10 @@ public class ColorData {
|
|||||||
return mode;
|
return mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
String formatString;
|
||||||
|
|
||||||
|
formatString = "Color Data mode: " + mode + ", data: " + data;
|
||||||
|
return formatString;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -23,7 +23,7 @@ public class ColorDecode {
|
|||||||
private static final String COLOR_HSL = "${color.hsl}";
|
private static final String COLOR_HSL = "${color.hsl}";
|
||||||
private static final Pattern COLOR_MILIGHT = Pattern.compile("\\$\\{color.milight\\:([01234])\\}");
|
private static final Pattern COLOR_MILIGHT = Pattern.compile("\\$\\{color.milight\\:([01234])\\}");
|
||||||
|
|
||||||
public static List<Integer> convertHSLtoRGB(int hue, int sat, int brightness) {
|
public static List<Integer> convertHSLtoRGB(HueSatBri hsl) {
|
||||||
List<Integer> rgb;
|
List<Integer> rgb;
|
||||||
float decimalBrightness = (float) 0.0;
|
float decimalBrightness = (float) 0.0;
|
||||||
float var_1 = (float) 0.0;
|
float var_1 = (float) 0.0;
|
||||||
@@ -35,25 +35,25 @@ public class ColorDecode {
|
|||||||
double g = 0.0;
|
double g = 0.0;
|
||||||
double b = 0.0;
|
double b = 0.0;
|
||||||
|
|
||||||
if(brightness > 0)
|
if(hsl.getBri() > 0)
|
||||||
decimalBrightness = (float) (brightness / 255.0);
|
decimalBrightness = (float) (hsl.getBri() / 255.0);
|
||||||
|
|
||||||
if(hue > 0) {
|
if(hsl.getHue() > 0) {
|
||||||
h = (float)(hue / 65535.0);
|
h = ((float)hsl.getHue() / (float)65535.0);
|
||||||
h2 = h + (float)0.5;
|
h2 = h + (float)0.5;
|
||||||
if(h2 > 1) {
|
if(h2 > 1.0) {
|
||||||
h2 = h2 * (float) -1.0;
|
h2 = h2 - (float)1.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(sat > 0) {
|
if(hsl.getSat() > 0) {
|
||||||
s = (float)(sat / 254.0);
|
s = (float)(hsl.getSat() / 254.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (s == 0)
|
if (s == 0)
|
||||||
{
|
{
|
||||||
r = decimalBrightness * 255;
|
r = decimalBrightness * (float)255;
|
||||||
g = decimalBrightness * 255;
|
g = decimalBrightness * (float)255;
|
||||||
b = decimalBrightness * 255;
|
b = decimalBrightness * (float)255;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -67,43 +67,50 @@ public class ColorDecode {
|
|||||||
};
|
};
|
||||||
|
|
||||||
var_1 = 2 * decimalBrightness - var_2;
|
var_1 = 2 * decimalBrightness - var_2;
|
||||||
r = 255 * hue_2_rgb(var_1,var_2,h2 + (1 / 3));
|
float onethird = (float)0.33333;
|
||||||
|
float h2Plus = (h2 + onethird);
|
||||||
|
float h2Minus = (h2 - onethird);
|
||||||
|
log.debug("calculate HSL vars - var1: " + var_1 + ", var_2: " + var_2 + ", h2: " + h2 + ", h2 + 1/3: " + h2Plus + ", h2 - 1/3: " + h2Minus);
|
||||||
|
r = 255 * hue_2_rgb(var_1, var_2, h2Plus);
|
||||||
g = 255 * hue_2_rgb(var_1, var_2, h2);
|
g = 255 * hue_2_rgb(var_1, var_2, h2);
|
||||||
b = 255 * hue_2_rgb(var_1,var_2,h2 - (1 / 3));
|
b = 255 * hue_2_rgb(var_1, var_2, h2Minus);
|
||||||
};
|
};
|
||||||
|
|
||||||
rgb = new ArrayList<Integer>();
|
rgb = new ArrayList<Integer>();
|
||||||
rgb.add((int) Math.round(r * 255));
|
rgb.add((int) Math.round(r));
|
||||||
rgb.add((int) Math.round(g * 255));
|
rgb.add((int) Math.round(g));
|
||||||
rgb.add((int) Math.round(b * 255));
|
rgb.add((int) Math.round(b));
|
||||||
|
|
||||||
|
log.debug("Color change with HSL: " + hsl + ". Resulting RGB Values: " + rgb.get(0) + " " + rgb.get(1) + " "
|
||||||
|
+ rgb.get(2));
|
||||||
return rgb;
|
return rgb;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static float hue_2_rgb(float v1, float v2, float vh) {
|
public static float hue_2_rgb(float v1, float v2, float vh) {
|
||||||
if (vh < 0)
|
log.debug("hue_2_rgb vh: " + vh);
|
||||||
|
if (vh < 0.0)
|
||||||
{
|
{
|
||||||
vh += 1;
|
vh = vh + (float)1;
|
||||||
};
|
};
|
||||||
|
|
||||||
if (vh > 1)
|
if (vh > 1.0)
|
||||||
{
|
{
|
||||||
vh -= 1;
|
vh = vh - (float)1;
|
||||||
};
|
};
|
||||||
|
|
||||||
if ((6 * vh) < 1)
|
if (((float)6.0 * vh) < 1.0)
|
||||||
{
|
{
|
||||||
return (v1 + (v2 - v1) * 6 * vh);
|
return (v1 + (v2 - v1) * (float)6.0 * vh);
|
||||||
};
|
};
|
||||||
|
|
||||||
if ((2 * vh) < 1)
|
if (((float)2.0 * vh) < 1.0)
|
||||||
{
|
{
|
||||||
return (v2);
|
return (v2);
|
||||||
};
|
};
|
||||||
|
|
||||||
if ((3 * vh) < 2)
|
if ((3.0 * vh) < 2.0)
|
||||||
{
|
{
|
||||||
return (v1 + (v2 - v1) * ((2 / 3 - vh) * 6));
|
return (v1 + (v2 - v1) * (((float)2.0 / (float)3.0 - vh) * (float)6.0));
|
||||||
};
|
};
|
||||||
|
|
||||||
return (v1);
|
return (v1);
|
||||||
@@ -245,6 +252,8 @@ public class ColorDecode {
|
|||||||
rgb = convertCIEtoRGB((List<Double>) colorData.getData(), setIntensity);
|
rgb = convertCIEtoRGB((List<Double>) colorData.getData(), setIntensity);
|
||||||
} else if (colorMode == ColorData.ColorMode.CT) {
|
} else if (colorMode == ColorData.ColorMode.CT) {
|
||||||
rgb = convertCTtoRGB((Integer) colorData.getData());
|
rgb = convertCTtoRGB((Integer) colorData.getData());
|
||||||
|
} else if (colorMode == ColorData.ColorMode.HS) {
|
||||||
|
rgb = convertHSLtoRGB((HueSatBri) colorData.getData());
|
||||||
}
|
}
|
||||||
|
|
||||||
while (notDone) {
|
while (notDone) {
|
||||||
|
|||||||
@@ -44,7 +44,8 @@ import java.util.Map;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Based on Armzilla's HueMulator - a Philips Hue emulator using sparkjava rest server
|
* Based on Armzilla's HueMulator - a Philips Hue emulator using sparkjava rest
|
||||||
|
* server
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class HueMulator {
|
public class HueMulator {
|
||||||
@@ -60,7 +61,8 @@ public class HueMulator {
|
|||||||
private Gson aGsonHandler;
|
private Gson aGsonHandler;
|
||||||
private DeviceMapTypes validMapTypes;
|
private DeviceMapTypes validMapTypes;
|
||||||
|
|
||||||
public HueMulator(BridgeSettings bridgeMaster, DeviceRepository aDeviceRepository, GroupRepository aGroupRepository, HomeManager aHomeManager) {
|
public HueMulator(BridgeSettings bridgeMaster, DeviceRepository aDeviceRepository, GroupRepository aGroupRepository,
|
||||||
|
HomeManager aHomeManager) {
|
||||||
repository = aDeviceRepository;
|
repository = aDeviceRepository;
|
||||||
groupRepository = aGroupRepository;
|
groupRepository = aGroupRepository;
|
||||||
validMapTypes = new DeviceMapTypes();
|
validMapTypes = new DeviceMapTypes();
|
||||||
@@ -81,7 +83,8 @@ public class HueMulator {
|
|||||||
// if (path.endsWith("/")) { // it should work with or without a trailing slash
|
// if (path.endsWith("/")) { // it should work with or without a trailing slash
|
||||||
// response.redirect(path.substring(0, path.length() - 1));
|
// response.redirect(path.substring(0, path.length() - 1));
|
||||||
// }
|
// }
|
||||||
log.debug("HueMulator " + request.requestMethod() + " called on api/* with request <<<" + request.pathInfo() + ">>>, and body <<<" + request.body() + ">>>");
|
log.debug("HueMulator " + request.requestMethod() + " called on api/* with request <<<" + request.pathInfo()
|
||||||
|
+ ">>>, and body <<<" + request.body() + ">>>");
|
||||||
if (bridgeSettingMaster.getBridgeSecurity().isSecure()) {
|
if (bridgeSettingMaster.getBridgeSecurity().isSecure()) {
|
||||||
String pathInfo = request.pathInfo();
|
String pathInfo = request.pathInfo();
|
||||||
if (pathInfo != null && pathInfo.contains(HUE_CONTEXT + "/devices")) {
|
if (pathInfo != null && pathInfo.contains(HUE_CONTEXT + "/devices")) {
|
||||||
@@ -152,7 +155,8 @@ public class HueMulator {
|
|||||||
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
||||||
response.type("application/json");
|
response.type("application/json");
|
||||||
response.status(HttpStatus.SC_OK);
|
response.status(HttpStatus.SC_OK);
|
||||||
return changeGroupState(request.params(":userid"), request.params(":groupid"), request.body(), request.ip(), false);
|
return changeGroupState(request.params(":userid"), request.params(":groupid"), request.body(), request.ip(),
|
||||||
|
false);
|
||||||
});
|
});
|
||||||
// http://ip_address:port/api/{userId}/scenes returns json objects of
|
// http://ip_address:port/api/{userId}/scenes returns json objects of
|
||||||
// all scenes configured
|
// all scenes configured
|
||||||
@@ -177,7 +181,8 @@ public class HueMulator {
|
|||||||
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
||||||
response.type("application/json");
|
response.type("application/json");
|
||||||
response.status(HttpStatus.SC_OK);
|
response.status(HttpStatus.SC_OK);
|
||||||
log.debug("scene add requested from " + request.ip() + " user " + request.params(":userid") + " with body " + request.body());
|
log.debug("scene add requested from " + request.ip() + " user " + request.params(":userid") + " with body "
|
||||||
|
+ request.body());
|
||||||
return "[{\"success\":{\"id\":\"1\"}}]";
|
return "[{\"success\":{\"id\":\"1\"}}]";
|
||||||
});
|
});
|
||||||
// http://ip_address:port/api/{userId}/schedules returns json objects of
|
// http://ip_address:port/api/{userId}/schedules returns json objects of
|
||||||
@@ -203,7 +208,8 @@ public class HueMulator {
|
|||||||
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
||||||
response.type("application/json");
|
response.type("application/json");
|
||||||
response.status(HttpStatus.SC_OK);
|
response.status(HttpStatus.SC_OK);
|
||||||
log.debug("schedules add requested from " + request.ip() + " user " + request.params(":userid") + " with body " + request.body());
|
log.debug("schedules add requested from " + request.ip() + " user " + request.params(":userid")
|
||||||
|
+ " with body " + request.body());
|
||||||
return "[{\"success\":{\"id\":\"1\"}}]";
|
return "[{\"success\":{\"id\":\"1\"}}]";
|
||||||
});
|
});
|
||||||
// http://ip_address:port/api/{userId}/sensors returns json objects of
|
// http://ip_address:port/api/{userId}/sensors returns json objects of
|
||||||
@@ -229,7 +235,8 @@ public class HueMulator {
|
|||||||
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
||||||
response.type("application/json");
|
response.type("application/json");
|
||||||
response.status(HttpStatus.SC_OK);
|
response.status(HttpStatus.SC_OK);
|
||||||
log.debug("sensors add requested from " + request.ip() + " user " + request.params(":userid") + " with body " + request.body());
|
log.debug("sensors add requested from " + request.ip() + " user " + request.params(":userid")
|
||||||
|
+ " with body " + request.body());
|
||||||
return "[{\"success\":{\"id\":\"1\"}}]";
|
return "[{\"success\":{\"id\":\"1\"}}]";
|
||||||
});
|
});
|
||||||
// http://ip_address:port/api/{userId}/rules returns json objects of all
|
// http://ip_address:port/api/{userId}/rules returns json objects of all
|
||||||
@@ -255,7 +262,8 @@ public class HueMulator {
|
|||||||
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
||||||
response.type("application/json");
|
response.type("application/json");
|
||||||
response.status(HttpStatus.SC_OK);
|
response.status(HttpStatus.SC_OK);
|
||||||
log.debug("rules add requested from " + request.ip() + " user " + request.params(":userid") + " with body " + request.body());
|
log.debug("rules add requested from " + request.ip() + " user " + request.params(":userid") + " with body "
|
||||||
|
+ request.body());
|
||||||
return "[{\"success\":{\"id\":\"1\"}}]";
|
return "[{\"success\":{\"id\":\"1\"}}]";
|
||||||
});
|
});
|
||||||
// http://ip_address:port/api/{userId}/resourcelinks returns json
|
// http://ip_address:port/api/{userId}/resourcelinks returns json
|
||||||
@@ -281,7 +289,8 @@ public class HueMulator {
|
|||||||
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
||||||
response.type("application/json");
|
response.type("application/json");
|
||||||
response.status(HttpStatus.SC_OK);
|
response.status(HttpStatus.SC_OK);
|
||||||
log.debug("resourcelinks add requested from " + request.ip() + " user " + request.params(":userid") + " with body " + request.body());
|
log.debug("resourcelinks add requested from " + request.ip() + " user " + request.params(":userid")
|
||||||
|
+ " with body " + request.body());
|
||||||
return "[{\"success\":{\"id\":\"1\"}}]";
|
return "[{\"success\":{\"id\":\"1\"}}]";
|
||||||
});
|
});
|
||||||
// http://ip_address:port/api/{userId}/lights returns json objects of
|
// http://ip_address:port/api/{userId}/lights returns json objects of
|
||||||
@@ -370,7 +379,8 @@ public class HueMulator {
|
|||||||
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
response.header("Access-Control-Allow-Origin", request.headers("Origin"));
|
||||||
response.type("application/json");
|
response.type("application/json");
|
||||||
response.status(HttpStatus.SC_OK);
|
response.status(HttpStatus.SC_OK);
|
||||||
log.debug("Config change requested from " + request.ip() + " user " + request.params(":userid") + " with body " + request.body());
|
log.debug("Config change requested from " + request.ip() + " user " + request.params(":userid")
|
||||||
|
+ " with body " + request.body());
|
||||||
HueConfig aConfig = aGsonHandler.fromJson(request.body(), HueConfig.class);
|
HueConfig aConfig = aGsonHandler.fromJson(request.body(), HueConfig.class);
|
||||||
if (aConfig.getPortalservices() != null) {
|
if (aConfig.getPortalservices() != null) {
|
||||||
return "[{\"success\":{\"/config/portalservices\":true}}]";
|
return "[{\"success\":{\"/config/portalservices\":true}}]";
|
||||||
@@ -471,8 +481,8 @@ public class HueMulator {
|
|||||||
if (body.contains("\"bri\"")) {
|
if (body.contains("\"bri\"")) {
|
||||||
if (notFirstChange)
|
if (notFirstChange)
|
||||||
responseString = responseString + ",";
|
responseString = responseString + ",";
|
||||||
responseString = responseString + "{\"success\":{\"/lights/" + lightId + "/state/bri\":" + stateChanges.getBri()
|
responseString = responseString + "{\"success\":{\"/lights/" + lightId + "/state/bri\":"
|
||||||
+ "}}";
|
+ stateChanges.getBri() + "}}";
|
||||||
if (deviceState != null)
|
if (deviceState != null)
|
||||||
deviceState.setBri(stateChanges.getBri());
|
deviceState.setBri(stateChanges.getBri());
|
||||||
notFirstChange = true;
|
notFirstChange = true;
|
||||||
@@ -494,16 +504,16 @@ public class HueMulator {
|
|||||||
if (body.contains("\"xy\"")) {
|
if (body.contains("\"xy\"")) {
|
||||||
if (notFirstChange)
|
if (notFirstChange)
|
||||||
responseString = responseString + ",";
|
responseString = responseString + ",";
|
||||||
responseString = responseString + "{\"success\":{\"/lights/" + lightId + "/state/xy\":" + stateChanges.getXy()
|
responseString = responseString + "{\"success\":{\"/lights/" + lightId + "/state/xy\":"
|
||||||
+ "}}";
|
+ stateChanges.getXy() + "}}";
|
||||||
if (deviceState != null)
|
if (deviceState != null)
|
||||||
deviceState.setXy(stateChanges.getXy());
|
deviceState.setXy(stateChanges.getXy());
|
||||||
notFirstChange = true;
|
notFirstChange = true;
|
||||||
} else if (body.contains("\"ct\"")) {
|
} else if (body.contains("\"ct\"")) {
|
||||||
if (notFirstChange)
|
if (notFirstChange)
|
||||||
responseString = responseString + ",";
|
responseString = responseString + ",";
|
||||||
responseString = responseString + "{\"success\":{\"/lights/" + lightId + "/state/ct\":" + stateChanges.getCt()
|
responseString = responseString + "{\"success\":{\"/lights/" + lightId + "/state/ct\":"
|
||||||
+ "}}";
|
+ stateChanges.getCt() + "}}";
|
||||||
if (deviceState != null)
|
if (deviceState != null)
|
||||||
deviceState.setCt(stateChanges.getCt());
|
deviceState.setCt(stateChanges.getCt());
|
||||||
notFirstChange = true;
|
notFirstChange = true;
|
||||||
@@ -511,8 +521,8 @@ public class HueMulator {
|
|||||||
if (body.contains("\"hue\"")) {
|
if (body.contains("\"hue\"")) {
|
||||||
if (notFirstChange)
|
if (notFirstChange)
|
||||||
responseString = responseString + ",";
|
responseString = responseString + ",";
|
||||||
responseString = responseString + "{\"success\":{\"/lights/" + lightId + "/state/hue\":" + stateChanges.getHue()
|
responseString = responseString + "{\"success\":{\"/lights/" + lightId + "/state/hue\":"
|
||||||
+ "}}";
|
+ stateChanges.getHue() + "}}";
|
||||||
if (deviceState != null)
|
if (deviceState != null)
|
||||||
deviceState.setHue(stateChanges.getHue());
|
deviceState.setHue(stateChanges.getHue());
|
||||||
notFirstChange = true;
|
notFirstChange = true;
|
||||||
@@ -521,8 +531,8 @@ public class HueMulator {
|
|||||||
if (body.contains("\"sat\"")) {
|
if (body.contains("\"sat\"")) {
|
||||||
if (notFirstChange)
|
if (notFirstChange)
|
||||||
responseString = responseString + ",";
|
responseString = responseString + ",";
|
||||||
responseString = responseString + "{\"success\":{\"/lights/" + lightId + "/state/sat\":" + stateChanges.getSat()
|
responseString = responseString + "{\"success\":{\"/lights/" + lightId + "/state/sat\":"
|
||||||
+ "}}";
|
+ stateChanges.getSat() + "}}";
|
||||||
if (deviceState != null)
|
if (deviceState != null)
|
||||||
deviceState.setSat(stateChanges.getSat());
|
deviceState.setSat(stateChanges.getSat());
|
||||||
notFirstChange = true;
|
notFirstChange = true;
|
||||||
@@ -600,7 +610,8 @@ public class HueMulator {
|
|||||||
if ((deviceState != null) && deviceState.isOn() && deviceState.getBri() <= 0)
|
if ((deviceState != null) && deviceState.isOn() && deviceState.getBri() <= 0)
|
||||||
deviceState.setBri(254);
|
deviceState.setBri(254);
|
||||||
|
|
||||||
// if((deviceState != null) && !deviceState.isOn() && (targetBri != null || targetBriInc != null))
|
// if((deviceState != null) && !deviceState.isOn() && (targetBri != null ||
|
||||||
|
// targetBriInc != null))
|
||||||
// deviceState.setOn(true);
|
// deviceState.setOn(true);
|
||||||
|
|
||||||
responseString = responseString + "]";
|
responseString = responseString + "]";
|
||||||
@@ -628,7 +639,8 @@ public class HueMulator {
|
|||||||
|
|
||||||
private String basicListHandler(String type, String userId, String requestIp) {
|
private String basicListHandler(String type, String userId, String requestIp) {
|
||||||
log.debug("hue " + type + " list requested by user: " + userId + " from address: " + requestIp);
|
log.debug("hue " + type + " list requested by user: " + userId + " from address: " + requestIp);
|
||||||
HueError[] theErrors = bridgeSettingMaster.getBridgeSecurity().validateWhitelistUser(userId, null, bridgeSettingMaster.getBridgeSecurity().isUseLinkButton());
|
HueError[] theErrors = bridgeSettingMaster.getBridgeSecurity().validateWhitelistUser(userId, null,
|
||||||
|
bridgeSettingMaster.getBridgeSecurity().isUseLinkButton());
|
||||||
if (theErrors != null) {
|
if (theErrors != null) {
|
||||||
if (bridgeSettingMaster.getBridgeSecurity().isSettingsChanged())
|
if (bridgeSettingMaster.getBridgeSecurity().isSettingsChanged())
|
||||||
bridgeSettingMaster.updateConfigFile();
|
bridgeSettingMaster.updateConfigFile();
|
||||||
@@ -642,7 +654,8 @@ public class HueMulator {
|
|||||||
private Object addGroup(String userId, String ip, String body) {
|
private Object addGroup(String userId, String ip, String body) {
|
||||||
HueError[] theErrors = null;
|
HueError[] theErrors = null;
|
||||||
log.debug("group add requested from " + ip + " user " + userId + " with body " + body);
|
log.debug("group add requested from " + ip + " user " + userId + " with body " + body);
|
||||||
theErrors = bridgeSettingMaster.getBridgeSecurity().validateWhitelistUser(userId, null, bridgeSettingMaster.getBridgeSecurity().isUseLinkButton());
|
theErrors = bridgeSettingMaster.getBridgeSecurity().validateWhitelistUser(userId, null,
|
||||||
|
bridgeSettingMaster.getBridgeSecurity().isUseLinkButton());
|
||||||
if (theErrors == null) {
|
if (theErrors == null) {
|
||||||
if (bridgeSettingMaster.getBridgeSecurity().isSettingsChanged())
|
if (bridgeSettingMaster.getBridgeSecurity().isSettingsChanged())
|
||||||
bridgeSettingMaster.updateConfigFile();
|
bridgeSettingMaster.updateConfigFile();
|
||||||
@@ -655,8 +668,9 @@ public class HueMulator {
|
|||||||
}
|
}
|
||||||
if (theGroup == null) {
|
if (theGroup == null) {
|
||||||
log.warn("Could not parse add group body. No group created.");
|
log.warn("Could not parse add group body. No group created.");
|
||||||
return aGsonHandler.toJson(HueErrorResponse.createResponse("5", "/groups/lights",
|
return aGsonHandler.toJson(HueErrorResponse
|
||||||
"invalid/missing parameters in body", null, null, null).getTheErrors(), HueError[].class);
|
.createResponse("5", "/groups/lights", "invalid/missing parameters in body", null, null, null)
|
||||||
|
.getTheErrors(), HueError[].class);
|
||||||
}
|
}
|
||||||
|
|
||||||
List<GroupDescriptor> groups = groupRepository.findAll();
|
List<GroupDescriptor> groups = groupRepository.findAll();
|
||||||
@@ -681,8 +695,10 @@ public class HueMulator {
|
|||||||
if (groupClass == null || groupClass.trim().equals("")) {
|
if (groupClass == null || groupClass.trim().equals("")) {
|
||||||
groupClass = GroupClassTypes.OTHER;
|
groupClass = GroupClassTypes.OTHER;
|
||||||
} else if (!new GroupClassTypes().validateType(groupClass)) {
|
} else if (!new GroupClassTypes().validateType(groupClass)) {
|
||||||
return aGsonHandler.toJson(HueErrorResponse.createResponse("7", "/groups/class",
|
return aGsonHandler.toJson(HueErrorResponse
|
||||||
"invalid value, " + groupClass + ", for parameter, class", null, null, null).getTheErrors(), HueError[].class);
|
.createResponse("7", "/groups/class",
|
||||||
|
"invalid value, " + groupClass + ", for parameter, class", null, null, null)
|
||||||
|
.getTheErrors(), HueError[].class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
String name = theGroup.getName();
|
String name = theGroup.getName();
|
||||||
@@ -706,15 +722,19 @@ public class HueMulator {
|
|||||||
private Object deleteGroup(String userId, String groupId, String ip) {
|
private Object deleteGroup(String userId, String groupId, String ip) {
|
||||||
HueError[] theErrors = null;
|
HueError[] theErrors = null;
|
||||||
log.debug("group delete requested from " + ip + " user " + userId);
|
log.debug("group delete requested from " + ip + " user " + userId);
|
||||||
theErrors = bridgeSettingMaster.getBridgeSecurity().validateWhitelistUser(userId, null, bridgeSettingMaster.getBridgeSecurity().isUseLinkButton());
|
theErrors = bridgeSettingMaster.getBridgeSecurity().validateWhitelistUser(userId, null,
|
||||||
|
bridgeSettingMaster.getBridgeSecurity().isUseLinkButton());
|
||||||
if (theErrors == null) {
|
if (theErrors == null) {
|
||||||
if (bridgeSettingMaster.getBridgeSecurity().isSettingsChanged())
|
if (bridgeSettingMaster.getBridgeSecurity().isSettingsChanged())
|
||||||
bridgeSettingMaster.updateConfigFile();
|
bridgeSettingMaster.updateConfigFile();
|
||||||
|
|
||||||
GroupDescriptor group = groupRepository.findOne(groupId);
|
GroupDescriptor group = groupRepository.findOne(groupId);
|
||||||
if (group == null || group.isInactive()) {
|
if (group == null || group.isInactive()) {
|
||||||
return aGsonHandler.toJson(HueErrorResponse.createResponse("3", "/groups/" + groupId,
|
return aGsonHandler
|
||||||
"resource, /groups/" + groupId + ", not available", null, null, null).getTheErrors(), HueError[].class);
|
.toJson(HueErrorResponse
|
||||||
|
.createResponse("3", "/groups/" + groupId,
|
||||||
|
"resource, /groups/" + groupId + ", not available", null, null, null)
|
||||||
|
.getTheErrors(), HueError[].class);
|
||||||
} else {
|
} else {
|
||||||
groupRepository.delete(group);
|
groupRepository.delete(group);
|
||||||
return "[{\"success\":\"/groups/" + groupId + " deleted\"}}]";
|
return "[{\"success\":\"/groups/" + groupId + " deleted\"}}]";
|
||||||
@@ -726,15 +746,19 @@ public class HueMulator {
|
|||||||
private Object modifyGroup(String userId, String groupId, String ip, String body) {
|
private Object modifyGroup(String userId, String groupId, String ip, String body) {
|
||||||
HueError[] theErrors = null;
|
HueError[] theErrors = null;
|
||||||
log.debug("group modify requested from " + ip + " user " + userId + " with body " + body);
|
log.debug("group modify requested from " + ip + " user " + userId + " with body " + body);
|
||||||
theErrors = bridgeSettingMaster.getBridgeSecurity().validateWhitelistUser(userId, null, bridgeSettingMaster.getBridgeSecurity().isUseLinkButton());
|
theErrors = bridgeSettingMaster.getBridgeSecurity().validateWhitelistUser(userId, null,
|
||||||
|
bridgeSettingMaster.getBridgeSecurity().isUseLinkButton());
|
||||||
if (theErrors == null) {
|
if (theErrors == null) {
|
||||||
if (bridgeSettingMaster.getBridgeSecurity().isSettingsChanged())
|
if (bridgeSettingMaster.getBridgeSecurity().isSettingsChanged())
|
||||||
bridgeSettingMaster.updateConfigFile();
|
bridgeSettingMaster.updateConfigFile();
|
||||||
|
|
||||||
GroupDescriptor group = groupRepository.findOne(groupId);
|
GroupDescriptor group = groupRepository.findOne(groupId);
|
||||||
if (group == null || group.isInactive()) {
|
if (group == null || group.isInactive()) {
|
||||||
return aGsonHandler.toJson(HueErrorResponse.createResponse("3", "/groups/" + groupId,
|
return aGsonHandler
|
||||||
"resource, /groups/" + groupId + ", not available", null, null, null).getTheErrors(), HueError[].class);
|
.toJson(HueErrorResponse
|
||||||
|
.createResponse("3", "/groups/" + groupId,
|
||||||
|
"resource, /groups/" + groupId + ", not available", null, null, null)
|
||||||
|
.getTheErrors(), HueError[].class);
|
||||||
} else {
|
} else {
|
||||||
String successString = "[";
|
String successString = "[";
|
||||||
GroupResponse theGroup = null;
|
GroupResponse theGroup = null;
|
||||||
@@ -757,37 +781,48 @@ public class HueMulator {
|
|||||||
}
|
}
|
||||||
if (!group.getGroupType().equals("Room")) {
|
if (!group.getGroupType().equals("Room")) {
|
||||||
if (!(groupClass == null || groupClass.trim().equals(""))) {
|
if (!(groupClass == null || groupClass.trim().equals(""))) {
|
||||||
return aGsonHandler.toJson(HueErrorResponse.createResponse("6", "/groups/" + groupId + "/class",
|
return aGsonHandler.toJson(HueErrorResponse
|
||||||
"parameter, /groups/" + groupId + "/class, not available", null, null, null).getTheErrors(), HueError[].class);
|
.createResponse("6", "/groups/" + groupId + "/class",
|
||||||
|
"parameter, /groups/" + groupId + "/class, not available", null, null, null)
|
||||||
|
.getTheErrors(), HueError[].class);
|
||||||
}
|
}
|
||||||
if (theGroup.getLights() != null) {
|
if (theGroup.getLights() != null) {
|
||||||
if (theGroup.getLights().length == 0) {
|
if (theGroup.getLights().length == 0) {
|
||||||
return aGsonHandler.toJson(HueErrorResponse.createResponse("7", "/groups/" + groupId + "/lights",
|
return aGsonHandler
|
||||||
"invalid value, " + Arrays.toString(theGroup.getLights()) + ", for parameter, /groups" + groupId + "/lights", null, null, null).getTheErrors(), HueError[].class);
|
.toJson(HueErrorResponse.createResponse("7", "/groups/" + groupId + "/lights",
|
||||||
|
"invalid value, " + Arrays.toString(theGroup.getLights())
|
||||||
|
+ ", for parameter, /groups" + groupId + "/lights",
|
||||||
|
null, null, null).getTheErrors(), HueError[].class);
|
||||||
} else {
|
} else {
|
||||||
group.setLights(theGroup.getLights());
|
group.setLights(theGroup.getLights());
|
||||||
successString += "{\"success\":{\"/groups/" + groupId + "/lights\":\"" + Arrays.toString(theGroup.getLights()) + "\"}},";
|
successString += "{\"success\":{\"/groups/" + groupId + "/lights\":\""
|
||||||
|
+ Arrays.toString(theGroup.getLights()) + "\"}},";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else { // check room class if it's a room
|
} else { // check room class if it's a room
|
||||||
if (!(groupClass == null || groupClass.trim().equals(""))) {
|
if (!(groupClass == null || groupClass.trim().equals(""))) {
|
||||||
if (!new GroupClassTypes().validateType(groupClass)) {
|
if (!new GroupClassTypes().validateType(groupClass)) {
|
||||||
return aGsonHandler.toJson(HueErrorResponse.createResponse("7", "/groups/class",
|
return aGsonHandler.toJson(HueErrorResponse
|
||||||
"invalid value, " + groupClass + ", for parameter, class", null, null, null).getTheErrors(), HueError[].class);
|
.createResponse("7", "/groups/class",
|
||||||
|
"invalid value, " + groupClass + ", for parameter, class", null, null, null)
|
||||||
|
.getTheErrors(), HueError[].class);
|
||||||
} else {
|
} else {
|
||||||
group.setGroupClass(groupClass);
|
group.setGroupClass(groupClass);
|
||||||
successString += "{\"success\":{\"/groups/" + groupId + "/class\":\"" + groupClass + "\"}},";
|
successString += "{\"success\":{\"/groups/" + groupId + "/class\":\"" + groupClass
|
||||||
|
+ "\"}},";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (theGroup.getLights() != null) {
|
if (theGroup.getLights() != null) {
|
||||||
group.setLights(theGroup.getLights());
|
group.setLights(theGroup.getLights());
|
||||||
successString += "{\"success\":{\"/groups/" + groupId + "/lights\":\"" + Arrays.toString(theGroup.getLights()) + "\"}},";
|
successString += "{\"success\":{\"/groups/" + groupId + "/lights\":\""
|
||||||
|
+ Arrays.toString(theGroup.getLights()) + "\"}},";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
groupRepository.save();
|
groupRepository.save();
|
||||||
return (successString.length() == 1) ? "[]" : successString.substring(0, successString.length()-1) + "]";
|
return (successString.length() == 1) ? "[]"
|
||||||
|
: successString.substring(0, successString.length() - 1) + "]";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return theErrors;
|
return theErrors;
|
||||||
@@ -799,7 +834,8 @@ public class HueMulator {
|
|||||||
if (bridgeSettings.isTraceupnp())
|
if (bridgeSettings.isTraceupnp())
|
||||||
log.info("Traceupnp: hue group list requested: " + userId + " from " + requestIp);
|
log.info("Traceupnp: hue group list requested: " + userId + " from " + requestIp);
|
||||||
log.debug("hue group list requested: " + userId + " from " + requestIp);
|
log.debug("hue group list requested: " + userId + " from " + requestIp);
|
||||||
theErrors = bridgeSettingMaster.getBridgeSecurity().validateWhitelistUser(userId, null, bridgeSettingMaster.getBridgeSecurity().isUseLinkButton());
|
theErrors = bridgeSettingMaster.getBridgeSecurity().validateWhitelistUser(userId, null,
|
||||||
|
bridgeSettingMaster.getBridgeSecurity().isUseLinkButton());
|
||||||
if (theErrors == null) {
|
if (theErrors == null) {
|
||||||
if (bridgeSettingMaster.getBridgeSecurity().isSettingsChanged())
|
if (bridgeSettingMaster.getBridgeSecurity().isSettingsChanged())
|
||||||
bridgeSettingMaster.updateConfigFile();
|
bridgeSettingMaster.updateConfigFile();
|
||||||
@@ -809,7 +845,8 @@ public class HueMulator {
|
|||||||
for (GroupDescriptor group : groupList) {
|
for (GroupDescriptor group : groupList) {
|
||||||
GroupResponse groupResponse = null;
|
GroupResponse groupResponse = null;
|
||||||
if (!group.isInactive()) {
|
if (!group.isInactive()) {
|
||||||
Map<String, DeviceResponse> lights = repository.findAllByGroupWithState(group.getLights(), requestIp, myHueHome, aGsonHandler);
|
Map<String, DeviceResponse> lights = repository.findAllByGroupWithState(group.getLights(),
|
||||||
|
requestIp, myHueHome, aGsonHandler);
|
||||||
groupResponse = GroupResponse.createResponse(group, lights);
|
groupResponse = GroupResponse.createResponse(group, lights);
|
||||||
groupResponseMap.put(group.getId(), groupResponse);
|
groupResponseMap.put(group.getId(), groupResponse);
|
||||||
}
|
}
|
||||||
@@ -822,26 +859,30 @@ public class HueMulator {
|
|||||||
return groupResponseMap;
|
return groupResponseMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private Object groupsIdHandler(String groupId, String userId, String requestIp) {
|
private Object groupsIdHandler(String groupId, String userId, String requestIp) {
|
||||||
log.debug("hue group id: <" + groupId + "> requested: " + userId + " from " + requestIp);
|
log.debug("hue group id: <" + groupId + "> requested: " + userId + " from " + requestIp);
|
||||||
HueError[] theErrors = null;
|
HueError[] theErrors = null;
|
||||||
theErrors = bridgeSettingMaster.getBridgeSecurity().validateWhitelistUser(userId, null, bridgeSettingMaster.getBridgeSecurity().isUseLinkButton());
|
theErrors = bridgeSettingMaster.getBridgeSecurity().validateWhitelistUser(userId, null,
|
||||||
|
bridgeSettingMaster.getBridgeSecurity().isUseLinkButton());
|
||||||
if (theErrors == null) {
|
if (theErrors == null) {
|
||||||
if (bridgeSettingMaster.getBridgeSecurity().isSettingsChanged())
|
if (bridgeSettingMaster.getBridgeSecurity().isSettingsChanged())
|
||||||
bridgeSettingMaster.updateConfigFile();
|
bridgeSettingMaster.updateConfigFile();
|
||||||
|
|
||||||
if (groupId.equalsIgnoreCase("0")) {
|
if (groupId.equalsIgnoreCase("0")) {
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
GroupResponse theResponse = GroupResponse.createDefaultGroupResponse((Map<String, DeviceResponse>)lightsListHandler(userId, requestIp));
|
GroupResponse theResponse = GroupResponse
|
||||||
|
.createDefaultGroupResponse((Map<String, DeviceResponse>) lightsListHandler(userId, requestIp));
|
||||||
return theResponse;
|
return theResponse;
|
||||||
} else {
|
} else {
|
||||||
GroupDescriptor group = groupRepository.findOne(groupId);
|
GroupDescriptor group = groupRepository.findOne(groupId);
|
||||||
if (group == null || group.isInactive()) {
|
if (group == null || group.isInactive()) {
|
||||||
return aGsonHandler.toJson(HueErrorResponse.createResponse("3", "/groups/" + groupId,
|
return aGsonHandler.toJson(HueErrorResponse
|
||||||
"resource, /groups/" + groupId + ", not available", null, null, null).getTheErrors(), HueError[].class);
|
.createResponse("3", "/groups/" + groupId,
|
||||||
|
"resource, /groups/" + groupId + ", not available", null, null, null)
|
||||||
|
.getTheErrors(), HueError[].class);
|
||||||
} else {
|
} else {
|
||||||
Map<String, DeviceResponse> lights = repository.findAllByGroupWithState(group.getLights(), requestIp, myHueHome, aGsonHandler);
|
Map<String, DeviceResponse> lights = repository.findAllByGroupWithState(group.getLights(),
|
||||||
|
requestIp, myHueHome, aGsonHandler);
|
||||||
GroupResponse theResponse = GroupResponse.createResponse(group, lights);
|
GroupResponse theResponse = GroupResponse.createResponse(group, lights);
|
||||||
return theResponse;
|
return theResponse;
|
||||||
}
|
}
|
||||||
@@ -858,7 +899,8 @@ public class HueMulator {
|
|||||||
if (bridgeSettings.isTraceupnp())
|
if (bridgeSettings.isTraceupnp())
|
||||||
log.info("Traceupnp: hue lights list requested by user: " + userId + " from address: " + requestIp);
|
log.info("Traceupnp: hue lights list requested by user: " + userId + " from address: " + requestIp);
|
||||||
log.debug("hue lights list requested: " + userId + " from " + requestIp);
|
log.debug("hue lights list requested: " + userId + " from " + requestIp);
|
||||||
theErrors = bridgeSettingMaster.getBridgeSecurity().validateWhitelistUser(userId, null, bridgeSettingMaster.getBridgeSecurity().isUseLinkButton());
|
theErrors = bridgeSettingMaster.getBridgeSecurity().validateWhitelistUser(userId, null,
|
||||||
|
bridgeSettingMaster.getBridgeSecurity().isUseLinkButton());
|
||||||
if (theErrors == null) {
|
if (theErrors == null) {
|
||||||
if (bridgeSettingMaster.getBridgeSecurity().isSettingsChanged())
|
if (bridgeSettingMaster.getBridgeSecurity().isSettingsChanged())
|
||||||
bridgeSettingMaster.updateConfigFile();
|
bridgeSettingMaster.updateConfigFile();
|
||||||
@@ -874,13 +916,15 @@ public class HueMulator {
|
|||||||
if (device.getOnUrl() != null)
|
if (device.getOnUrl() != null)
|
||||||
callItems = aGsonHandler.fromJson(device.getOnUrl(), CallItem[].class);
|
callItems = aGsonHandler.fromJson(device.getOnUrl(), CallItem[].class);
|
||||||
} catch (JsonSyntaxException e) {
|
} catch (JsonSyntaxException e) {
|
||||||
log.warn("Could not decode Json for url items to get Hue state for device: " + device.getName());
|
log.warn("Could not decode Json for url items to get Hue state for device: "
|
||||||
|
+ device.getName());
|
||||||
callItems = null;
|
callItems = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; callItems != null && i < callItems.length; i++) {
|
for (int i = 0; callItems != null && i < callItems.length; i++) {
|
||||||
if((callItems[i].getType() != null && callItems[i].getType().equals(DeviceMapTypes.HUE_DEVICE[DeviceMapTypes.typeIndex])) ||
|
if ((callItems[i].getType() != null && callItems[i].getType()
|
||||||
(callItems[i].getItem().getAsString().contains("hueName"))) {
|
.equals(DeviceMapTypes.HUE_DEVICE[DeviceMapTypes.typeIndex]))
|
||||||
|
|| (callItems[i].getItem().getAsString().contains("hueName"))) {
|
||||||
deviceResponse = myHueHome.getHueDeviceInfo(callItems[i], device);
|
deviceResponse = myHueHome.getHueDeviceInfo(callItems[i], device);
|
||||||
i = callItems.length;
|
i = callItems.length;
|
||||||
}
|
}
|
||||||
@@ -893,7 +937,8 @@ public class HueMulator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// handle groups which shall be exposed as fake lights to selected devices like amazon echos
|
// handle groups which shall be exposed as fake lights to selected devices like
|
||||||
|
// amazon echos
|
||||||
List<GroupDescriptor> groups = groupRepository.findVirtualLights(requestIp);
|
List<GroupDescriptor> groups = groupRepository.findVirtualLights(requestIp);
|
||||||
for (GroupDescriptor group : groups) {
|
for (GroupDescriptor group : groups) {
|
||||||
deviceResponseMap.put(String.valueOf(Integer.parseInt(group.getId()) + 10000),
|
deviceResponseMap.put(String.valueOf(Integer.parseInt(group.getId()) + 10000),
|
||||||
@@ -918,7 +963,8 @@ public class HueMulator {
|
|||||||
else
|
else
|
||||||
log.debug("hue api user create requested: " + body + " from address: " + ipAddress);
|
log.debug("hue api user create requested: " + body + " from address: " + ipAddress);
|
||||||
|
|
||||||
if(bridgeSettingMaster.getBridgeSecurity().isUseLinkButton() && bridgeSettingMaster.getBridgeControl().isLinkButton())
|
if (bridgeSettingMaster.getBridgeSecurity().isUseLinkButton()
|
||||||
|
&& bridgeSettingMaster.getBridgeControl().isLinkButton())
|
||||||
toContinue = true;
|
toContinue = true;
|
||||||
else if (!bridgeSettingMaster.getBridgeSecurity().isUseLinkButton())
|
else if (!bridgeSettingMaster.getBridgeSecurity().isUseLinkButton())
|
||||||
toContinue = true;
|
toContinue = true;
|
||||||
@@ -931,8 +977,9 @@ public class HueMulator {
|
|||||||
aNewUser = aGsonHandler.fromJson(body, UserCreateRequest.class);
|
aNewUser = aGsonHandler.fromJson(body, UserCreateRequest.class);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.warn("Could not add user. Request garbled: " + body);
|
log.warn("Could not add user. Request garbled: " + body);
|
||||||
return aGsonHandler.toJson(HueErrorResponse.createResponse("2", "/",
|
return aGsonHandler.toJson(HueErrorResponse
|
||||||
"Could not add user.", null, null, null).getTheErrors(), HueError[].class);
|
.createResponse("2", "/", "Could not add user.", null, null, null).getTheErrors(),
|
||||||
|
HueError[].class);
|
||||||
}
|
}
|
||||||
newUser = aNewUser.getUsername();
|
newUser = aNewUser.getUsername();
|
||||||
aDeviceType = aNewUser.getDevicetype();
|
aDeviceType = aNewUser.getDevicetype();
|
||||||
@@ -945,8 +992,7 @@ public class HueMulator {
|
|||||||
|
|
||||||
if (newUser == null) {
|
if (newUser == null) {
|
||||||
newUser = bridgeSettingMaster.getBridgeSecurity().createWhitelistUser(aDeviceType);
|
newUser = bridgeSettingMaster.getBridgeSecurity().createWhitelistUser(aDeviceType);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
bridgeSettingMaster.getBridgeSecurity().validateWhitelistUser(newUser, aDeviceType, false);
|
bridgeSettingMaster.getBridgeSecurity().validateWhitelistUser(newUser, aDeviceType, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -956,19 +1002,22 @@ public class HueMulator {
|
|||||||
if (bridgeSettings.isTraceupnp() && !aDeviceType.equals("test_ha_bridge"))
|
if (bridgeSettings.isTraceupnp() && !aDeviceType.equals("test_ha_bridge"))
|
||||||
log.info("Traceupnp: hue api user create requested for device type: " + aDeviceType + " and username: "
|
log.info("Traceupnp: hue api user create requested for device type: " + aDeviceType + " and username: "
|
||||||
+ newUser + (followingSlash ? " /api/ called" : ""));
|
+ newUser + (followingSlash ? " /api/ called" : ""));
|
||||||
log.debug("hue api user create requested for device type: " + aDeviceType + " and username: " + newUser + (followingSlash ? " /api/ called" : ""));
|
log.debug("hue api user create requested for device type: " + aDeviceType + " and username: " + newUser
|
||||||
|
+ (followingSlash ? " /api/ called" : ""));
|
||||||
return "[{\"success\":{\"username\":\"" + newUser + "\"}}]";
|
return "[{\"success\":{\"username\":\"" + newUser + "\"}}]";
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
log.debug("user add toContinue was false, returning not authorized");
|
log.debug("user add toContinue was false, returning not authorized");
|
||||||
return aGsonHandler.toJson(HueErrorResponse.createResponse("101", "/api/", "link button not pressed", null, null, null).getTheErrors());
|
return aGsonHandler.toJson(HueErrorResponse
|
||||||
|
.createResponse("101", "/api/", "link button not pressed", null, null, null).getTheErrors());
|
||||||
}
|
}
|
||||||
|
|
||||||
private Object getConfig(String userId, String ipAddress) {
|
private Object getConfig(String userId, String ipAddress) {
|
||||||
if (bridgeSettings.isTraceupnp())
|
if (bridgeSettings.isTraceupnp())
|
||||||
log.info("Traceupnp: hue api/:userid/config config requested from user: " + userId + " from address: " + ipAddress);
|
log.info("Traceupnp: hue api/:userid/config config requested from user: " + userId + " from address: "
|
||||||
|
+ ipAddress);
|
||||||
log.debug("hue api config requested: " + userId + " from " + ipAddress);
|
log.debug("hue api config requested: " + userId + " from " + ipAddress);
|
||||||
if (bridgeSettingMaster.getBridgeSecurity().validateWhitelistUser(userId, null, bridgeSettingMaster.getBridgeSecurity().isUseLinkButton()) != null) {
|
if (bridgeSettingMaster.getBridgeSecurity().validateWhitelistUser(userId, null,
|
||||||
|
bridgeSettingMaster.getBridgeSecurity().isUseLinkButton()) != null) {
|
||||||
log.debug("hue api config requested, User invalid, returning public config");
|
log.debug("hue api config requested, User invalid, returning public config");
|
||||||
HuePublicConfig apiResponse = HuePublicConfig.createConfig("HA-Bridge",
|
HuePublicConfig apiResponse = HuePublicConfig.createConfig("HA-Bridge",
|
||||||
bridgeSettings.getUpnpConfigAddress(), bridgeSettings.getHubversion(), bridgeSettings.getHubmac());
|
bridgeSettings.getUpnpConfigAddress(), bridgeSettings.getHubversion(), bridgeSettings.getHubmac());
|
||||||
@@ -976,7 +1025,8 @@ public class HueMulator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
HueApiResponse apiResponse = new HueApiResponse("HA-Bridge", bridgeSettings.getUpnpConfigAddress(),
|
HueApiResponse apiResponse = new HueApiResponse("HA-Bridge", bridgeSettings.getUpnpConfigAddress(),
|
||||||
bridgeSettingMaster.getBridgeSecurity().getWhitelist(), bridgeSettings.getHubversion(), bridgeSettingMaster.getBridgeControl().isLinkButton(), bridgeSettings.getHubmac());
|
bridgeSettingMaster.getBridgeSecurity().getWhitelist(), bridgeSettings.getHubversion(),
|
||||||
|
bridgeSettingMaster.getBridgeControl().isLinkButton(), bridgeSettings.getHubmac());
|
||||||
log.debug("api response config <<<" + aGsonHandler.toJson(apiResponse.getConfig()) + ">>>");
|
log.debug("api response config <<<" + aGsonHandler.toJson(apiResponse.getConfig()) + ">>>");
|
||||||
return apiResponse.getConfig();
|
return apiResponse.getConfig();
|
||||||
}
|
}
|
||||||
@@ -984,14 +1034,16 @@ public class HueMulator {
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
private Object getFullState(String userId, String ipAddress) {
|
private Object getFullState(String userId, String ipAddress) {
|
||||||
log.debug("hue api full state requested: " + userId + " from " + ipAddress);
|
log.debug("hue api full state requested: " + userId + " from " + ipAddress);
|
||||||
HueError[] theErrors = bridgeSettingMaster.getBridgeSecurity().validateWhitelistUser(userId, null, bridgeSettingMaster.getBridgeSecurity().isUseLinkButton());
|
HueError[] theErrors = bridgeSettingMaster.getBridgeSecurity().validateWhitelistUser(userId, null,
|
||||||
|
bridgeSettingMaster.getBridgeSecurity().isUseLinkButton());
|
||||||
if (theErrors != null) {
|
if (theErrors != null) {
|
||||||
log.debug("full state error occurred <<<" + aGsonHandler.toJson(theErrors) + ">>>");
|
log.debug("full state error occurred <<<" + aGsonHandler.toJson(theErrors) + ">>>");
|
||||||
return theErrors;
|
return theErrors;
|
||||||
}
|
}
|
||||||
|
|
||||||
HueApiResponse apiResponse = new HueApiResponse("HA-Bridge", bridgeSettings.getUpnpConfigAddress(),
|
HueApiResponse apiResponse = new HueApiResponse("HA-Bridge", bridgeSettings.getUpnpConfigAddress(),
|
||||||
bridgeSettingMaster.getBridgeSecurity().getWhitelist(), bridgeSettings.getHubversion(), bridgeSettingMaster.getBridgeControl().isLinkButton(), bridgeSettings.getHubmac());
|
bridgeSettingMaster.getBridgeSecurity().getWhitelist(), bridgeSettings.getHubversion(),
|
||||||
|
bridgeSettingMaster.getBridgeControl().isLinkButton(), bridgeSettings.getHubmac());
|
||||||
apiResponse.setLights((Map<String, DeviceResponse>) this.lightsListHandler(userId, ipAddress));
|
apiResponse.setLights((Map<String, DeviceResponse>) this.lightsListHandler(userId, ipAddress));
|
||||||
apiResponse.setGroups((Map<String, GroupResponse>) this.groupsListHandler(userId, ipAddress));
|
apiResponse.setGroups((Map<String, GroupResponse>) this.groupsListHandler(userId, ipAddress));
|
||||||
|
|
||||||
@@ -1000,7 +1052,8 @@ public class HueMulator {
|
|||||||
|
|
||||||
private Object getLight(String userId, String lightId, String ipAddress) {
|
private Object getLight(String userId, String lightId, String ipAddress) {
|
||||||
log.debug("hue light requested: " + lightId + " for user: " + userId + " from " + ipAddress);
|
log.debug("hue light requested: " + lightId + " for user: " + userId + " from " + ipAddress);
|
||||||
HueError[] theErrors = bridgeSettingMaster.getBridgeSecurity().validateWhitelistUser(userId, null, bridgeSettingMaster.getBridgeSecurity().isUseLinkButton());
|
HueError[] theErrors = bridgeSettingMaster.getBridgeSecurity().validateWhitelistUser(userId, null,
|
||||||
|
bridgeSettingMaster.getBridgeSecurity().isUseLinkButton());
|
||||||
if (theErrors != null)
|
if (theErrors != null)
|
||||||
return theErrors;
|
return theErrors;
|
||||||
|
|
||||||
@@ -1012,7 +1065,9 @@ public class HueMulator {
|
|||||||
DeviceDescriptor device = repository.findOne(lightId);
|
DeviceDescriptor device = repository.findOne(lightId);
|
||||||
if (device == null) {
|
if (device == null) {
|
||||||
// response.status(HttpStatus.SC_NOT_FOUND);
|
// response.status(HttpStatus.SC_NOT_FOUND);
|
||||||
return HueErrorResponse.createResponse("3", "/api/" + userId + "/lights/" + lightId, "Object not found", null, null, null).getTheErrors();
|
return HueErrorResponse
|
||||||
|
.createResponse("3", "/api/" + userId + "/lights/" + lightId, "Object not found", null, null, null)
|
||||||
|
.getTheErrors();
|
||||||
} else {
|
} else {
|
||||||
log.debug("found device named: " + device.getName());
|
log.debug("found device named: " + device.getName());
|
||||||
}
|
}
|
||||||
@@ -1028,7 +1083,9 @@ public class HueMulator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; callItems != null && i < callItems.length; i++) {
|
for (int i = 0; callItems != null && i < callItems.length; i++) {
|
||||||
if((callItems[i].getType() != null && callItems[i].getType().equals(DeviceMapTypes.HUE_DEVICE[DeviceMapTypes.typeIndex])) || callItems[i].getItem().getAsString().startsWith("{\"ipAddress\":\"")) {
|
if ((callItems[i].getType() != null
|
||||||
|
&& callItems[i].getType().equals(DeviceMapTypes.HUE_DEVICE[DeviceMapTypes.typeIndex]))
|
||||||
|
|| callItems[i].getItem().getAsString().startsWith("{\"ipAddress\":\"")) {
|
||||||
lightResponse = myHueHome.getHueDeviceInfo(callItems[i], device);
|
lightResponse = myHueHome.getHueDeviceInfo(callItems[i], device);
|
||||||
i = callItems.length;
|
i = callItems.length;
|
||||||
}
|
}
|
||||||
@@ -1050,9 +1107,13 @@ public class HueMulator {
|
|||||||
Integer targetBriInc = null;
|
Integer targetBriInc = null;
|
||||||
ColorData colorData = null;
|
ColorData colorData = null;
|
||||||
|
|
||||||
|
if (bridgeSettings.isTracestate())
|
||||||
|
log.info("Tracestate: Update state requested: " + userId + " from " + ipAddress + " body: " + body);
|
||||||
|
|
||||||
log.debug("Update state requested: " + userId + " from " + ipAddress + " body: " + body);
|
log.debug("Update state requested: " + userId + " from " + ipAddress + " body: " + body);
|
||||||
|
|
||||||
HueError[] theErrors = bridgeSettingMaster.getBridgeSecurity().validateWhitelistUser(userId, null, bridgeSettingMaster.getBridgeSecurity().isUseLinkButton());
|
HueError[] theErrors = bridgeSettingMaster.getBridgeSecurity().validateWhitelistUser(userId, null,
|
||||||
|
bridgeSettingMaster.getBridgeSecurity().isUseLinkButton());
|
||||||
if (theErrors != null)
|
if (theErrors != null)
|
||||||
return aGsonHandler.toJson(theErrors);
|
return aGsonHandler.toJson(theErrors);
|
||||||
|
|
||||||
@@ -1060,8 +1121,9 @@ public class HueMulator {
|
|||||||
theStateChanges = aGsonHandler.fromJson(body, StateChangeBody.class);
|
theStateChanges = aGsonHandler.fromJson(body, StateChangeBody.class);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.warn("Could not parse state change body. Light state not changed.");
|
log.warn("Could not parse state change body. Light state not changed.");
|
||||||
return aGsonHandler.toJson(HueErrorResponse.createResponse("2", "/lights/" + lightId,
|
return aGsonHandler.toJson(HueErrorResponse
|
||||||
"Could not parse state change body.", null, null, null).getTheErrors(), HueError[].class);
|
.createResponse("2", "/lights/" + lightId, "Could not parse state change body.", null, null, null)
|
||||||
|
.getTheErrors(), HueError[].class);
|
||||||
}
|
}
|
||||||
|
|
||||||
DeviceDescriptor device = repository.findOne(lightId);
|
DeviceDescriptor device = repository.findOne(lightId);
|
||||||
@@ -1082,26 +1144,10 @@ public class HueMulator {
|
|||||||
if (state == null)
|
if (state == null)
|
||||||
state = DeviceState.createDeviceState(device.isColorDevice());
|
state = DeviceState.createDeviceState(device.isColorDevice());
|
||||||
|
|
||||||
if (body.contains("\"xy\"") || body.contains("\"ct\"") || body.contains("\"hue\"") || body.contains("\"xy_inc\"") || body.contains("\"ct_inc\"") || body.contains("\"hue_inc\"")) {
|
colorData = parseColorInfo(body, theStateChanges, state, targetBri, targetBriInc);
|
||||||
List<Double> xy = theStateChanges.getXy();
|
|
||||||
List<Double> xyInc = theStateChanges.getXy_inc();
|
|
||||||
Integer ct = theStateChanges.getCt();
|
|
||||||
Integer ctInc = theStateChanges.getCt_inc();
|
|
||||||
if (xy != null && xy.size() == 2) {
|
|
||||||
colorData = new ColorData(ColorData.ColorMode.XY, xy);
|
|
||||||
} else if (xyInc != null && xyInc.size() == 2) {
|
|
||||||
List<Double> current = state.getXy();
|
|
||||||
current.set(0, current.get(0) + xyInc.get(0));
|
|
||||||
current.set(1, current.get(1) + xyInc.get(1));
|
|
||||||
colorData = new ColorData(ColorData.ColorMode.XY, current);
|
|
||||||
} else if (ct != null && ct != 0) {
|
|
||||||
colorData = new ColorData(ColorData.ColorMode.CT, ct);
|
|
||||||
} else if (ctInc != null && ctInc != 0) {
|
|
||||||
colorData = new ColorData(ColorData.ColorMode.CT, state.getCt() + ctInc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
responseString = this.formatSuccessHueResponse(theStateChanges, body, lightId, state, targetBri, targetBriInc, colorData, device.isOffState());
|
responseString = this.formatSuccessHueResponse(theStateChanges, body, lightId, state, targetBri, targetBriInc,
|
||||||
|
colorData, device.isOffState());
|
||||||
device.setDeviceState(state);
|
device.setDeviceState(state);
|
||||||
|
|
||||||
return responseString;
|
return responseString;
|
||||||
@@ -1121,8 +1167,12 @@ public class HueMulator {
|
|||||||
boolean isDimRequest = false;
|
boolean isDimRequest = false;
|
||||||
boolean isOnRequest = false;
|
boolean isOnRequest = false;
|
||||||
ColorData colorData = null;
|
ColorData colorData = null;
|
||||||
|
if (bridgeSettings.isTracestate())
|
||||||
|
log.info("Tracestate: hue state change requested: " + userId + " from " + ipAddress + " body: " + body);
|
||||||
|
|
||||||
log.debug("hue state change requested: " + userId + " from " + ipAddress + " body: " + body);
|
log.debug("hue state change requested: " + userId + " from " + ipAddress + " body: " + body);
|
||||||
HueError[] theErrors = bridgeSettingMaster.getBridgeSecurity().validateWhitelistUser(userId, null, bridgeSettingMaster.getBridgeSecurity().isUseLinkButton());
|
HueError[] theErrors = bridgeSettingMaster.getBridgeSecurity().validateWhitelistUser(userId, null,
|
||||||
|
bridgeSettingMaster.getBridgeSecurity().isUseLinkButton());
|
||||||
if (theErrors != null) {
|
if (theErrors != null) {
|
||||||
log.warn("Errors in security: <<<" + aGsonHandler.toJson(theErrors) + ">>>");
|
log.warn("Errors in security: <<<" + aGsonHandler.toJson(theErrors) + ">>>");
|
||||||
return aGsonHandler.toJson(theErrors);
|
return aGsonHandler.toJson(theErrors);
|
||||||
@@ -1134,8 +1184,9 @@ public class HueMulator {
|
|||||||
}
|
}
|
||||||
if (theStateChanges == null) {
|
if (theStateChanges == null) {
|
||||||
log.warn("Could not parse state change body. Light state not changed.");
|
log.warn("Could not parse state change body. Light state not changed.");
|
||||||
return aGsonHandler.toJson(HueErrorResponse.createResponse("2", "/lights/" + lightId,
|
return aGsonHandler.toJson(HueErrorResponse
|
||||||
"Could not parse state change body.", null, null, null).getTheErrors(), HueError[].class);
|
.createResponse("2", "/lights/" + lightId, "Could not parse state change body.", null, null, null)
|
||||||
|
.getTheErrors(), HueError[].class);
|
||||||
}
|
}
|
||||||
|
|
||||||
DeviceDescriptor device = repository.findOne(lightId);
|
DeviceDescriptor device = repository.findOne(lightId);
|
||||||
@@ -1155,32 +1206,14 @@ public class HueMulator {
|
|||||||
if (body.contains("\"bri_inc\"")) {
|
if (body.contains("\"bri_inc\"")) {
|
||||||
targetBriInc = Integer.valueOf(theStateChanges.getBri_inc());
|
targetBriInc = Integer.valueOf(theStateChanges.getBri_inc());
|
||||||
isDimRequest = true;
|
isDimRequest = true;
|
||||||
}
|
} else if (body.contains("\"bri\"")) {
|
||||||
else if (body.contains("\"bri\"")) {
|
|
||||||
targetBri = Integer.valueOf(theStateChanges.getBri());
|
targetBri = Integer.valueOf(theStateChanges.getBri());
|
||||||
isDimRequest = true;
|
isDimRequest = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (body.contains("\"xy\"") || body.contains("\"ct\"") || body.contains("\"hue\"") || body.contains("\"xy_inc\"") || body.contains("\"ct_inc\"") || body.contains("\"hue_inc\"")) {
|
colorData = parseColorInfo(body, theStateChanges, state, targetBri, targetBriInc);
|
||||||
List<Double> xy = theStateChanges.getXy();
|
|
||||||
List<Double> xyInc = theStateChanges.getXy_inc();
|
|
||||||
Integer ct = theStateChanges.getCt();
|
|
||||||
Integer ctInc = theStateChanges.getCt_inc();
|
|
||||||
if (xy != null && xy.size() == 2) {
|
|
||||||
colorData = new ColorData(ColorData.ColorMode.XY, xy);
|
|
||||||
} else if (xyInc != null && xyInc.size() == 2) {
|
|
||||||
List<Double> current = state.getXy();
|
|
||||||
current.set(0, current.get(0) + xyInc.get(0));
|
|
||||||
current.set(1, current.get(1) + xyInc.get(1));
|
|
||||||
colorData = new ColorData(ColorData.ColorMode.XY, current);
|
|
||||||
} else if (ct != null && ct != 0) {
|
|
||||||
colorData = new ColorData(ColorData.ColorMode.CT, ct);
|
|
||||||
} else if (ctInc != null && ctInc != 0) {
|
|
||||||
colorData = new ColorData(ColorData.ColorMode.CT, state.getCt() + ctInc);
|
|
||||||
}
|
|
||||||
if (colorData != null)
|
if (colorData != null)
|
||||||
isColorRequest = true;
|
isColorRequest = true;
|
||||||
}
|
|
||||||
|
|
||||||
if (body.contains("\"on\"")) {
|
if (body.contains("\"on\"")) {
|
||||||
isOnRequest = true;
|
isOnRequest = true;
|
||||||
@@ -1212,6 +1245,9 @@ public class HueMulator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (isOnRequest) {
|
if (isOnRequest) {
|
||||||
|
if (bridgeSettings.isTracestate())
|
||||||
|
log.info("Tracestate: Calling on-off as requested.");
|
||||||
|
|
||||||
log.debug("Calling on-off as requested.");
|
log.debug("Calling on-off as requested.");
|
||||||
if (theStateChanges.isOn()) {
|
if (theStateChanges.isOn()) {
|
||||||
url = device.getOnUrl();
|
url = device.getOnUrl();
|
||||||
@@ -1220,25 +1256,31 @@ public class HueMulator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// code for backwards compatibility
|
// code for backwards compatibility
|
||||||
if(device.getMapType() != null && device.getMapType().equalsIgnoreCase(DeviceMapTypes.HUE_DEVICE[DeviceMapTypes.typeIndex])) {
|
if (device.getMapType() != null
|
||||||
|
&& device.getMapType().equalsIgnoreCase(DeviceMapTypes.HUE_DEVICE[DeviceMapTypes.typeIndex])) {
|
||||||
if (url == null)
|
if (url == null)
|
||||||
url = device.getOnUrl();
|
url = device.getOnUrl();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (url != null && !url.equals("")) {
|
if (url != null && !url.equals("")) {
|
||||||
responseString = callUrl(url, device, userId, lightId, body, ipAddress, ignoreRequester, targetBri, targetBriInc, colorData);
|
responseString = callUrl(url, device, userId, lightId, body, ipAddress, ignoreRequester, targetBri,
|
||||||
|
targetBriInc, colorData);
|
||||||
} else {
|
} else {
|
||||||
log.info("On/off url not available for state change, lightId: " + lightId + ", userId: " + userId + ", from IP: "
|
log.info("On/off url not available for state change, lightId: " + lightId + ", userId: " + userId
|
||||||
+ ipAddress + ", body: " + body);
|
+ ", from IP: " + ipAddress + ", body: " + body);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isDimRequest) {
|
if (isDimRequest) {
|
||||||
|
if (bridgeSettings.isTracestate())
|
||||||
|
log.info("Tracestate: Calling dim as requested.");
|
||||||
|
|
||||||
log.debug("Calling dim as requested.");
|
log.debug("Calling dim as requested.");
|
||||||
url = device.getDimUrl();
|
url = device.getDimUrl();
|
||||||
|
|
||||||
// code for backwards compatibility
|
// code for backwards compatibility
|
||||||
if(device.getMapType() != null && device.getMapType().equalsIgnoreCase(DeviceMapTypes.HUE_DEVICE[DeviceMapTypes.typeIndex])) {
|
if (device.getMapType() != null
|
||||||
|
&& device.getMapType().equalsIgnoreCase(DeviceMapTypes.HUE_DEVICE[DeviceMapTypes.typeIndex])) {
|
||||||
if (url == null)
|
if (url == null)
|
||||||
url = device.getOnUrl();
|
url = device.getOnUrl();
|
||||||
}
|
}
|
||||||
@@ -1251,18 +1293,23 @@ public class HueMulator {
|
|||||||
// ignore
|
// ignore
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
responseString = callUrl(url, device, userId, lightId, body, ipAddress, ignoreRequester, targetBri, targetBriInc, colorData);
|
responseString = callUrl(url, device, userId, lightId, body, ipAddress, ignoreRequester, targetBri,
|
||||||
|
targetBriInc, colorData);
|
||||||
} else {
|
} else {
|
||||||
log.info("Dim url not available for state change, lightId: " + lightId + ", userId: " + userId + ", from IP: "
|
log.info("Dim url not available for state change, lightId: " + lightId + ", userId: " + userId
|
||||||
+ ipAddress + ", body: " + body);
|
+ ", from IP: " + ipAddress + ", body: " + body);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isColorRequest) {
|
if (isColorRequest) {
|
||||||
|
if (bridgeSettings.isTracestate())
|
||||||
|
log.info("Tracestate: Calling color as requested. With " + colorData);
|
||||||
|
|
||||||
log.debug("Calling color as requested.");
|
log.debug("Calling color as requested.");
|
||||||
url = device.getColorUrl();
|
url = device.getColorUrl();
|
||||||
// code for backwards compatibility
|
// code for backwards compatibility
|
||||||
if(device.getMapType() != null && device.getMapType().equalsIgnoreCase(DeviceMapTypes.HUE_DEVICE[DeviceMapTypes.typeIndex])) {
|
if (device.getMapType() != null
|
||||||
|
&& device.getMapType().equalsIgnoreCase(DeviceMapTypes.HUE_DEVICE[DeviceMapTypes.typeIndex])) {
|
||||||
if (url == null)
|
if (url == null)
|
||||||
url = device.getOnUrl();
|
url = device.getOnUrl();
|
||||||
}
|
}
|
||||||
@@ -1275,20 +1322,23 @@ public class HueMulator {
|
|||||||
// ignore
|
// ignore
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
responseString = callUrl(url, device, userId, lightId, body, ipAddress, ignoreRequester, targetBri, targetBriInc, colorData);
|
responseString = callUrl(url, device, userId, lightId, body, ipAddress, ignoreRequester, targetBri,
|
||||||
|
targetBriInc, colorData);
|
||||||
} else {
|
} else {
|
||||||
log.info("Color url not available for state change, lightId: " + lightId + ", userId: " + userId + ", from IP: "
|
log.info("Color url not available for state change, lightId: " + lightId + ", userId: " + userId
|
||||||
+ ipAddress + ", body: " + body);
|
+ ", from IP: " + ipAddress + ", body: " + body);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (responseString == null || !responseString.contains("[{\"error\":")) {
|
if (responseString == null || !responseString.contains("[{\"error\":")) {
|
||||||
if (!device.isNoState()) {
|
if (!device.isNoState()) {
|
||||||
responseString = this.formatSuccessHueResponse(theStateChanges, body, lightId, state, targetBri, targetBriInc, colorData, device.isOffState());
|
responseString = this.formatSuccessHueResponse(theStateChanges, body, lightId, state, targetBri,
|
||||||
|
targetBriInc, colorData, device.isOffState());
|
||||||
device.setDeviceState(state);
|
device.setDeviceState(state);
|
||||||
} else {
|
} else {
|
||||||
DeviceState dummyState = DeviceState.createDeviceState(device.isColorDevice());
|
DeviceState dummyState = DeviceState.createDeviceState(device.isColorDevice());
|
||||||
responseString = this.formatSuccessHueResponse(theStateChanges, body, lightId, dummyState, targetBri, targetBriInc, colorData, device.isOffState());
|
responseString = this.formatSuccessHueResponse(theStateChanges, body, lightId, dummyState, targetBri,
|
||||||
|
targetBriInc, colorData, device.isOffState());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1296,13 +1346,120 @@ public class HueMulator {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ColorData parseColorInfo(String body, StateChangeBody theStateChanges, DeviceState state, Integer targetBri, Integer targetBriInc) {
|
||||||
|
ColorData colorData = null;
|
||||||
|
List<Double> xy = null;
|
||||||
|
List<Double> xyInc = null;
|
||||||
|
Integer ct = null;
|
||||||
|
Integer ctInc = null;
|
||||||
|
HueSatBri anHSL = null;
|
||||||
|
Integer hue = null;
|
||||||
|
Integer sat = null;
|
||||||
|
Integer hueInc = null;
|
||||||
|
Integer satInc = null;
|
||||||
|
|
||||||
|
if (body.contains("\"xy\"")) {
|
||||||
|
xy = theStateChanges.getXy();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (body.contains("\"ct\"")) {
|
||||||
|
ct = theStateChanges.getCt();
|
||||||
|
}
|
||||||
|
if (body.contains("\"hue\"")) {
|
||||||
|
hue = theStateChanges.getHue();
|
||||||
|
}
|
||||||
|
if (body.contains("\"sat\"")) {
|
||||||
|
sat = theStateChanges.getSat();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (body.contains("\"xy_inc\"")) {
|
||||||
|
xyInc = theStateChanges.getXy_inc();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (body.contains("\"ct_inc\"")) {
|
||||||
|
ctInc = theStateChanges.getCt_inc();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (body.contains("\"hue_inc\"")) {
|
||||||
|
hueInc = theStateChanges.getHue_inc();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (body.contains("\"sat_inc\"")) {
|
||||||
|
satInc = theStateChanges.getSat_inc();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (xy != null && xy.size() == 2) {
|
||||||
|
colorData = new ColorData(ColorData.ColorMode.XY, xy);
|
||||||
|
} else if (xyInc != null && xyInc.size() == 2) {
|
||||||
|
List<Double> current = state.getXy();
|
||||||
|
current.set(0, current.get(0) + xyInc.get(0));
|
||||||
|
current.set(1, current.get(1) + xyInc.get(1));
|
||||||
|
colorData = new ColorData(ColorData.ColorMode.XY, current);
|
||||||
|
} else if (ct != null) {
|
||||||
|
colorData = new ColorData(ColorData.ColorMode.CT, ct);
|
||||||
|
} else if (ctInc != null) {
|
||||||
|
colorData = new ColorData(ColorData.ColorMode.CT, state.getCt() + ctInc);
|
||||||
|
} else if (hue != null || sat != null) {
|
||||||
|
anHSL = new HueSatBri();
|
||||||
|
int bri = 0;
|
||||||
|
if(targetBriInc != null) {
|
||||||
|
bri = state.getBri() - targetBriInc;
|
||||||
|
if(bri < 0)
|
||||||
|
bri = 0;
|
||||||
|
} else if (targetBri != null) {
|
||||||
|
bri = targetBri;
|
||||||
|
} else {
|
||||||
|
bri = state.getBri();
|
||||||
|
}
|
||||||
|
anHSL.setBri(bri);
|
||||||
|
if(hue != null)
|
||||||
|
anHSL.setHue(hue);
|
||||||
|
else
|
||||||
|
anHSL.setHue(state.getHue());
|
||||||
|
|
||||||
|
if(sat != null)
|
||||||
|
anHSL.setSat(sat);
|
||||||
|
else
|
||||||
|
anHSL.setSat(state.getSat());
|
||||||
|
log.info("hue/sat request - " + anHSL);
|
||||||
|
colorData = new ColorData(ColorData.ColorMode.HS, anHSL);
|
||||||
|
} else if (hueInc != null || satInc != null) {
|
||||||
|
anHSL = new HueSatBri();
|
||||||
|
int bri = 0;
|
||||||
|
if(targetBriInc != null) {
|
||||||
|
bri = state.getBri() - targetBriInc;
|
||||||
|
if(bri < 0)
|
||||||
|
bri = 0;
|
||||||
|
} else if (targetBri != null) {
|
||||||
|
bri = targetBri;
|
||||||
|
} else {
|
||||||
|
bri = state.getBri();
|
||||||
|
}
|
||||||
|
anHSL.setBri(bri);
|
||||||
|
if(hueInc != null)
|
||||||
|
anHSL.setHue(state.getHue() - hueInc);
|
||||||
|
else
|
||||||
|
anHSL.setHue(state.getHue());
|
||||||
|
|
||||||
|
if(satInc != null)
|
||||||
|
anHSL.setSat(state.getSat() - satInc);
|
||||||
|
else
|
||||||
|
anHSL.setSat(state.getSat());
|
||||||
|
log.info("hue/sat inc request - " + anHSL);
|
||||||
|
colorData = new ColorData(ColorData.ColorMode.HS, anHSL);
|
||||||
|
|
||||||
|
}
|
||||||
|
return colorData;
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
private String changeGroupState(String userId, String groupId, String body, String ipAddress, boolean fakeLightResponse) {
|
private String changeGroupState(String userId, String groupId, String body, String ipAddress,
|
||||||
|
boolean fakeLightResponse) {
|
||||||
ColorData colorData = null;
|
ColorData colorData = null;
|
||||||
log.debug("PUT action to group " + groupId + " from " + ipAddress + " user " + userId + " with body " + body);
|
log.debug("PUT action to group " + groupId + " from " + ipAddress + " user " + userId + " with body " + body);
|
||||||
HueError[] theErrors = null;
|
HueError[] theErrors = null;
|
||||||
theErrors = bridgeSettingMaster.getBridgeSecurity().validateWhitelistUser(userId, null, bridgeSettingMaster.getBridgeSecurity().isUseLinkButton());
|
theErrors = bridgeSettingMaster.getBridgeSecurity().validateWhitelistUser(userId, null,
|
||||||
|
bridgeSettingMaster.getBridgeSecurity().isUseLinkButton());
|
||||||
if (theErrors == null) {
|
if (theErrors == null) {
|
||||||
if (bridgeSettingMaster.getBridgeSecurity().isSettingsChanged())
|
if (bridgeSettingMaster.getBridgeSecurity().isSettingsChanged())
|
||||||
bridgeSettingMaster.updateConfigFile();
|
bridgeSettingMaster.updateConfigFile();
|
||||||
@@ -1317,13 +1474,17 @@ public class HueMulator {
|
|||||||
} else {
|
} else {
|
||||||
group = groupRepository.findOne(groupId);
|
group = groupRepository.findOne(groupId);
|
||||||
if (group == null || group.isInactive()) {
|
if (group == null || group.isInactive()) {
|
||||||
return aGsonHandler.toJson(HueErrorResponse.createResponse("3", "/groups/" + groupId,
|
return aGsonHandler.toJson(HueErrorResponse
|
||||||
"resource, /groups/" + groupId + ", not available", null, null, null).getTheErrors(), HueError[].class);
|
.createResponse("3", "/groups/" + groupId,
|
||||||
|
"resource, /groups/" + groupId + ", not available", null, null, null)
|
||||||
|
.getTheErrors(), HueError[].class);
|
||||||
} else {
|
} else {
|
||||||
if (fakeLightResponse) {
|
if (fakeLightResponse) {
|
||||||
lights = repository.findAllByGroupWithState(group.getLights(), ipAddress, myHueHome, aGsonHandler, true);
|
lights = repository.findAllByGroupWithState(group.getLights(), ipAddress, myHueHome,
|
||||||
|
aGsonHandler, true);
|
||||||
} else {
|
} else {
|
||||||
lights = repository.findAllByGroupWithState(group.getLights(), ipAddress, myHueHome, aGsonHandler);
|
lights = repository.findAllByGroupWithState(group.getLights(), ipAddress, myHueHome,
|
||||||
|
aGsonHandler);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1337,15 +1498,16 @@ public class HueMulator {
|
|||||||
}
|
}
|
||||||
if (theStateChanges == null) {
|
if (theStateChanges == null) {
|
||||||
log.warn("Could not parse state change body. Light state not changed.");
|
log.warn("Could not parse state change body. Light state not changed.");
|
||||||
return aGsonHandler.toJson(HueErrorResponse.createResponse("2", "/groups/" + groupId + "/action",
|
return aGsonHandler.toJson(
|
||||||
"Could not parse state change body.", null, null, null).getTheErrors(), HueError[].class);
|
HueErrorResponse.createResponse("2", "/groups/" + groupId + "/action",
|
||||||
|
"Could not parse state change body.", null, null, null).getTheErrors(),
|
||||||
|
HueError[].class);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (group != null) {
|
if (group != null) {
|
||||||
if (body.contains("\"bri_inc\"")) {
|
if (body.contains("\"bri_inc\"")) {
|
||||||
targetBriInc = Integer.valueOf(theStateChanges.getBri_inc());
|
targetBriInc = Integer.valueOf(theStateChanges.getBri_inc());
|
||||||
}
|
} else if (body.contains("\"bri\"")) {
|
||||||
else if (body.contains("\"bri\"")) {
|
|
||||||
targetBri = Integer.valueOf(theStateChanges.getBri());
|
targetBri = Integer.valueOf(theStateChanges.getBri());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1356,7 +1518,6 @@ public class HueMulator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
boolean turnOn = false;
|
boolean turnOn = false;
|
||||||
boolean turnOff = false;
|
boolean turnOff = false;
|
||||||
if (!(body.contains("\"bri_inc\"") || body.contains("\"bri\""))) {
|
if (!(body.contains("\"bri_inc\"") || body.contains("\"bri\""))) {
|
||||||
@@ -1369,7 +1530,8 @@ public class HueMulator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (Map.Entry<String, DeviceResponse> light : lights.entrySet()) {
|
for (Map.Entry<String, DeviceResponse> light : lights.entrySet()) {
|
||||||
log.debug("Processing light" + light.getKey() + ": " + turnOn + " " + turnOff + " " + light.getValue().getState().isOn());
|
log.debug("Processing light" + light.getKey() + ": " + turnOn + " " + turnOff + " "
|
||||||
|
+ light.getValue().getState().isOn());
|
||||||
// ignore on/off for devices that are already on/off
|
// ignore on/off for devices that are already on/off
|
||||||
if (turnOff && !light.getValue().getState().isOn())
|
if (turnOff && !light.getValue().getState().isOn())
|
||||||
continue;
|
continue;
|
||||||
@@ -1377,10 +1539,12 @@ public class HueMulator {
|
|||||||
continue;
|
continue;
|
||||||
changeState(userId, light.getKey(), body, ipAddress, fakeLightResponse);
|
changeState(userId, light.getKey(), body, ipAddress, fakeLightResponse);
|
||||||
}
|
}
|
||||||
// construct success response: one success message per changed property, but not per light
|
// construct success response: one success message per changed property, but not
|
||||||
|
// per light
|
||||||
if (group != null) { // if not group 0
|
if (group != null) { // if not group 0
|
||||||
String response = formatSuccessHueResponse(theStateChanges, body, String.valueOf(Integer.parseInt(groupId) + 10000),
|
String response = formatSuccessHueResponse(theStateChanges, body,
|
||||||
state, targetBri, targetBriInc, colorData, true);
|
String.valueOf(Integer.parseInt(groupId) + 10000), state, targetBri, targetBriInc,
|
||||||
|
colorData, true);
|
||||||
group.setAction(state);
|
group.setAction(state);
|
||||||
if (fakeLightResponse) {
|
if (fakeLightResponse) {
|
||||||
return response;
|
return response;
|
||||||
@@ -1391,20 +1555,24 @@ public class HueMulator {
|
|||||||
for (String pairStr : body.replaceAll("[{|}]", "").split(",\\s*\"")) {
|
for (String pairStr : body.replaceAll("[{|}]", "").split(",\\s*\"")) {
|
||||||
String[] pair = pairStr.split(":");
|
String[] pair = pairStr.split(":");
|
||||||
if (fakeLightResponse) {
|
if (fakeLightResponse) {
|
||||||
successString += "{\"success\":{ \"/lights/" + String.valueOf(Integer.parseInt(groupId) + 10000) + "/state/" + pair[0].replaceAll("\"", "").trim() + "\": " + pair[1].trim() + "}},";
|
successString += "{\"success\":{ \"/lights/" + String.valueOf(Integer.parseInt(groupId) + 10000)
|
||||||
|
+ "/state/" + pair[0].replaceAll("\"", "").trim() + "\": " + pair[1].trim() + "}},";
|
||||||
} else {
|
} else {
|
||||||
successString += "{\"success\":{ \"address\": \"/groups/" + groupId + "/action/" + pair[0].replaceAll("\"", "").trim() + "\", \"value\": " + pair[1].trim() + "}},";
|
successString += "{\"success\":{ \"address\": \"/groups/" + groupId + "/action/"
|
||||||
|
+ pair[0].replaceAll("\"", "").trim() + "\", \"value\": " + pair[1].trim() + "}},";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
return (successString.length() == 1) ? "[]" : successString.substring(0, successString.length()-1) + "]";
|
return (successString.length() == 1) ? "[]"
|
||||||
|
: successString.substring(0, successString.length() - 1) + "]";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return aGsonHandler.toJson(theErrors);
|
return aGsonHandler.toJson(theErrors);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String callUrl(String url, DeviceDescriptor device, String userId, String lightId, String body, String ipAddress, boolean ignoreRequester, Integer targetBri, Integer targetBriInc, ColorData colorData) {
|
protected String callUrl(String url, DeviceDescriptor device, String userId, String lightId, String body,
|
||||||
|
String ipAddress, boolean ignoreRequester, Integer targetBri, Integer targetBriInc, ColorData colorData) {
|
||||||
String responseString = null;
|
String responseString = null;
|
||||||
MultiCommandUtil aMultiUtil = new MultiCommandUtil();
|
MultiCommandUtil aMultiUtil = new MultiCommandUtil();
|
||||||
aMultiUtil.setTheDelay(bridgeSettings.getButtonsleep());
|
aMultiUtil.setTheDelay(bridgeSettings.getButtonsleep());
|
||||||
@@ -1428,16 +1596,18 @@ public class HueMulator {
|
|||||||
try {
|
try {
|
||||||
callItems = aGsonHandler.fromJson(url, CallItem[].class);
|
callItems = aGsonHandler.fromJson(url, CallItem[].class);
|
||||||
} catch (JsonSyntaxException e) {
|
} catch (JsonSyntaxException e) {
|
||||||
log.warn("Could not decode Json for url items: " + lightId + " for hue state change request: " + userId + " from "
|
log.warn("Could not decode Json for url items: " + lightId + " for hue state change request: " + userId
|
||||||
+ ipAddress + " body: " + body + " url items: " + url);
|
+ " from " + ipAddress + " body: " + body + " url items: " + url);
|
||||||
return aGsonHandler.toJson(HueErrorResponse.createResponse("3", "/lights/" + lightId,
|
return aGsonHandler.toJson(HueErrorResponse.createResponse("3", "/lights/" + lightId,
|
||||||
"Could decode json in request", "/lights/" + lightId, null, null).getTheErrors(), HueError[].class);
|
"Could decode json in request", "/lights/" + lightId, null, null).getTheErrors(), HueError[].class);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; callItems != null && i < callItems.length; i++) {
|
for (int i = 0; callItems != null && i < callItems.length; i++) {
|
||||||
if (!ignoreRequester) {
|
if (!ignoreRequester) {
|
||||||
if(!filterByRequester(device.getRequesterAddress(), ipAddress) || !filterByRequester(callItems[i].getFilterIPs(), ipAddress)) {
|
if (!filterByRequester(device.getRequesterAddress(), ipAddress)
|
||||||
log.warn("filter for requester address not present in: (device)" + device.getRequesterAddress() + " OR then (item)" + callItems[i].getFilterIPs() + " with request ip of: " + ipAddress);
|
|| !filterByRequester(callItems[i].getFilterIPs(), ipAddress)) {
|
||||||
|
log.warn("filter for requester address not present in: (device)" + device.getRequesterAddress()
|
||||||
|
+ " OR then (item)" + callItems[i].getFilterIPs() + " with request ip of: " + ipAddress);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1471,13 +1641,14 @@ public class HueMulator {
|
|||||||
aMultiUtil.setTheDelay(aMultiUtil.getDelayDefault());
|
aMultiUtil.setTheDelay(aMultiUtil.getDelayDefault());
|
||||||
|
|
||||||
log.debug("Calling Home device handler for type : " + callItems[i].getType().trim());
|
log.debug("Calling Home device handler for type : " + callItems[i].getType().trim());
|
||||||
responseString = homeManager.findHome(callItems[i].getType().trim()).deviceHandler(callItems[i], aMultiUtil, lightId, device.getDeviceState().getBri(), targetBri, targetBriInc, colorData, device, body);
|
responseString = homeManager.findHome(callItems[i].getType().trim()).deviceHandler(callItems[i],
|
||||||
|
aMultiUtil, lightId, device.getDeviceState().getBri(), targetBri, targetBriInc, colorData,
|
||||||
|
device, body);
|
||||||
if (responseString != null && responseString.contains("{\"error\":")) {
|
if (responseString != null && responseString.contains("{\"error\":")) {
|
||||||
x = aMultiUtil.getSetCount();
|
x = aMultiUtil.getSetCount();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
log.warn("Call Items type is null <<<" + callItems[i] + ">>>");
|
log.warn("Call Items type is null <<<" + callItems[i] + ">>>");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
38
src/main/java/com/bwssystems/HABridge/hue/HueSatBri.java
Normal file
38
src/main/java/com/bwssystems/HABridge/hue/HueSatBri.java
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
package com.bwssystems.HABridge.hue;
|
||||||
|
|
||||||
|
public class HueSatBri {
|
||||||
|
int hue;
|
||||||
|
int sat;
|
||||||
|
int bri;
|
||||||
|
|
||||||
|
public int getHue() {
|
||||||
|
return hue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHue(int hue) {
|
||||||
|
this.hue = hue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSat() {
|
||||||
|
return sat;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSat(int sat) {
|
||||||
|
this.sat = sat;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getBri() {
|
||||||
|
return bri;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBri(int bri) {
|
||||||
|
this.bri = bri;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
String formatString = new String();
|
||||||
|
|
||||||
|
formatString = "Hue: " + Integer.toString(hue) + ", Sat: " + Integer.toString(sat) + ", Bri: " + Integer.toString(bri);
|
||||||
|
return formatString;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -19,6 +19,7 @@
|
|||||||
<li ng-if="bridge.showHomeWizard" role="presentation"><a href="#!/homewizarddevices">HomeWizard Devices</a></li>
|
<li ng-if="bridge.showHomeWizard" role="presentation"><a href="#!/homewizarddevices">HomeWizard Devices</a></li>
|
||||||
<li ng-if="bridge.showOpenHAB" role="presentation"><a href="#!/openhabdevices">OpenHAB Devices</a></li>
|
<li ng-if="bridge.showOpenHAB" role="presentation"><a href="#!/openhabdevices">OpenHAB Devices</a></li>
|
||||||
<li ng-if="bridge.showFHEM" role="presentation"><a href="#!/fhemdevices">FHEM Devices</a></li>
|
<li ng-if="bridge.showFHEM" role="presentation"><a href="#!/fhemdevices">FHEM Devices</a></li>
|
||||||
|
<li ng-if="bridge.showMozIot" role="presentation"><a href="#!/moziotdevices">Mozilla IOT Devices</a></li>
|
||||||
<li ng-if="bridge.showBroadlink" role="presentation"><a href="#!/broadlinkdevices">Broadlink Devices</a></li>
|
<li ng-if="bridge.showBroadlink" role="presentation"><a href="#!/broadlinkdevices">Broadlink Devices</a></li>
|
||||||
<li role="presentation"><a href="#!/editdevice">Add/Edit</a></li>
|
<li role="presentation"><a href="#!/editdevice">Add/Edit</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
@@ -738,6 +739,73 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</table></td>
|
</table></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Mozilla IOT Names and IP Addresses</td>
|
||||||
|
<td><table
|
||||||
|
class="table table-bordered table-striped table-hover">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>IP</th>
|
||||||
|
<th>Port</th>
|
||||||
|
<th>Username (opt)</th>
|
||||||
|
<th>Password (opt)</th>
|
||||||
|
<th>Use SSL</th>
|
||||||
|
<th>Manage</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tr ng-repeat="moziot in bridge.settings.moziotaddress.devices">
|
||||||
|
<td><input id="bridge-settings-next-moziot-name"
|
||||||
|
class="form-control" type="text" ng-model="moziot.name"
|
||||||
|
placeholder="An moziot"></td>
|
||||||
|
<td><input id="bridge-settings-next-moziot-ip"
|
||||||
|
class="form-control" type="text" ng-model="moziot.ip"
|
||||||
|
placeholder="192.168.1.3"></td>
|
||||||
|
<td><input id="bridge-settings-next-moziot-port"
|
||||||
|
class="form-control" type="text" ng-model="moziot.port"
|
||||||
|
placeholder="8080"></td>
|
||||||
|
<td><input id="bridge-settings-next-moziot-username"
|
||||||
|
class="form-control" type="text" ng-model="moziot.username"
|
||||||
|
placeholder="moziot username"></td>
|
||||||
|
<td><input id="bridge-settings-next-moziot-password"
|
||||||
|
class="form-control" type="password" ng-model="moziot.password"
|
||||||
|
placeholder="moziot password (opt)"></td>
|
||||||
|
<td><input id="bridge-settings-next-moziot-webhook"
|
||||||
|
class="form-control" type="text" ng-model="moziot.webhook"
|
||||||
|
placeholder="Room Name"></td>
|
||||||
|
<td><input type="checkbox"
|
||||||
|
ng-model="moziot.secure" ng-true-value=true
|
||||||
|
ng-false-value=false></td>
|
||||||
|
<td><button class="btn btn-danger" type="submit"
|
||||||
|
ng-click="removemoziottoSettings(moziot.name, moziot.ip)">Del</button></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><input id="bridge-settings-new-moziot-name"
|
||||||
|
class="form-control" type="text" ng-model="newmoziotname"
|
||||||
|
placeholder="A moziot"></td>
|
||||||
|
<td><input id="bridge-settings-new-moziot-ip"
|
||||||
|
class="form-control" type="text" ng-model="newmoziotip"
|
||||||
|
placeholder="192.168.1.3"></td>
|
||||||
|
<td><input id="bridge-settings-new-moziot-port"
|
||||||
|
class="form-control" type="text" ng-model="newmoziotport"
|
||||||
|
placeholder="8080"></td>
|
||||||
|
<td><input id="bridge-settings-new-moziot-username"
|
||||||
|
class="form-control" type="text" ng-model="newmoziotusername"
|
||||||
|
placeholder="moziot username"></td>
|
||||||
|
<td><input id="bridge-settings-new-moziot-password"
|
||||||
|
class="form-control" type="password" ng-model="newmoziotpassword"
|
||||||
|
placeholder="moziot password (opt)"></td>
|
||||||
|
<td><input id="bridge-settings-new-moziot-webhook"
|
||||||
|
class="form-control" type="text" ng-model="newmoziotwebhook"
|
||||||
|
placeholder="Room Name"></td>
|
||||||
|
<td><input type="checkbox"
|
||||||
|
ng-model="newmoziotsecure" ng-true-value=true
|
||||||
|
ng-false-value=false></td>
|
||||||
|
<td><button class="btn btn-success" type="submit"
|
||||||
|
ng-click="addmoziottoSettings(newmoziotname, newmoziotip, newmoziotport, newsmoziotusername, newmoziotpassword, newmoziotwebhook, newmoziotsecure)">Add</button></td>
|
||||||
|
</tr>
|
||||||
|
</table></td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Nest</td>
|
<td>Nest</td>
|
||||||
<td><table class="table table-bordered table-striped table-hover">
|
<td><table class="table table-bordered table-striped table-hover">
|
||||||
@@ -803,6 +871,12 @@
|
|||||||
ng-model="bridge.settings.traceupnp" ng-true-value=true
|
ng-model="bridge.settings.traceupnp" ng-true-value=true
|
||||||
ng-false-value=false> {{bridge.settings.traceupnp}}</td>
|
ng-false-value=false> {{bridge.settings.traceupnp}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Trace State Changes</td>
|
||||||
|
<td><input type="checkbox"
|
||||||
|
ng-model="bridge.settings.tracestate" ng-true-value=true
|
||||||
|
ng-false-value=false> {{bridge.settings.tracestate}}</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>UPNP Send Delay</td>
|
<td>UPNP Send Delay</td>
|
||||||
<td><input id="bridge-settings-upnpsenddelay"
|
<td><input id="bridge-settings-upnpsenddelay"
|
||||||
|
|||||||
Reference in New Issue
Block a user