mirror of
https://github.com/bwssytems/ha-bridge.git
synced 2025-12-18 00:10:20 +00:00
99 lines
3.5 KiB
Java
99 lines
3.5 KiB
Java
package com.bwssystems.HABridge.plugins.http;
|
|
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import com.bwssystems.HABridge.BridgeSettingsDescriptor;
|
|
import com.bwssystems.HABridge.Home;
|
|
import com.bwssystems.HABridge.api.CallItem;
|
|
import com.bwssystems.HABridge.api.NameValue;
|
|
import com.bwssystems.HABridge.api.hue.DeviceState;
|
|
import com.bwssystems.HABridge.api.hue.HueError;
|
|
import com.bwssystems.HABridge.api.hue.HueErrorResponse;
|
|
import com.bwssystems.HABridge.api.hue.StateChangeBody;
|
|
import com.bwssystems.HABridge.dao.DeviceDescriptor;
|
|
import com.bwssystems.HABridge.hue.BrightnessDecode;
|
|
import com.bwssystems.HABridge.hue.MultiCommandUtil;
|
|
import com.google.gson.Gson;
|
|
|
|
public class HTTPHome implements Home {
|
|
private static final Logger log = LoggerFactory.getLogger(HTTPHome.class);
|
|
private HTTPHandler anHttpHandler;
|
|
|
|
public HTTPHome(BridgeSettingsDescriptor bridgeSettings) {
|
|
super();
|
|
createHome(bridgeSettings);
|
|
}
|
|
|
|
@Override
|
|
public String deviceHandler(CallItem anItem, MultiCommandUtil aMultiUtil, String lightId, int iterationCount,
|
|
DeviceState state, StateChangeBody theStateChanges, boolean stateHasBri, boolean stateHasBriInc, DeviceDescriptor device, String body) {
|
|
String responseString = null;
|
|
|
|
//Backwards Compatibility Items
|
|
if(anItem.getHttpVerb() == null || anItem.getHttpVerb().isEmpty())
|
|
{
|
|
if(device.getHttpVerb() != null && !device.getHttpVerb().isEmpty())
|
|
anItem.setHttpVerb(device.getHttpVerb());
|
|
}
|
|
|
|
if(anItem.getHttpHeaders() == null || anItem.getHttpHeaders().isEmpty()) {
|
|
if(device.getHeaders() != null && !device.getHeaders().isEmpty() )
|
|
anItem.setHttpHeaders(device.getHeaders());
|
|
}
|
|
|
|
log.debug("executing HUE api request to Http "
|
|
+ (anItem.getHttpVerb() == null ? "GET" : anItem.getHttpVerb()) + ": "
|
|
+ anItem.getItem().getAsString());
|
|
|
|
for (int x = 0; x < aMultiUtil.getSetCount(); x++) {
|
|
if (x > 0 || iterationCount > 0) {
|
|
try {
|
|
Thread.sleep(aMultiUtil.getTheDelay());
|
|
} catch (InterruptedException e) {
|
|
// ignore
|
|
}
|
|
}
|
|
if (anItem.getDelay() != null && anItem.getDelay() > 0)
|
|
aMultiUtil.setTheDelay(anItem.getDelay());
|
|
else
|
|
aMultiUtil.setTheDelay(aMultiUtil.getDelayDefault());
|
|
String anUrl = BrightnessDecode.calculateReplaceIntensityValue(anItem.getItem().getAsString(),
|
|
state, theStateChanges, stateHasBri, stateHasBriInc, false);
|
|
String aBody;
|
|
aBody = BrightnessDecode.calculateReplaceIntensityValue(anItem.getHttpBody(),
|
|
state, theStateChanges, stateHasBri, stateHasBriInc,
|
|
false);
|
|
// make call
|
|
if (anHttpHandler.doHttpRequest(anUrl, anItem.getHttpVerb(), anItem.getContentType(), aBody,
|
|
new Gson().fromJson(anItem.getHttpHeaders(), NameValue[].class)) == null) {
|
|
log.warn("Error on calling url to change device state: " + anUrl);
|
|
responseString = new Gson().toJson(HueErrorResponse.createResponse("6", "/lights/" + lightId,
|
|
"Error on calling url to change device state", "/lights/"
|
|
+ lightId + "state", null, null).getTheErrors(), HueError[].class);
|
|
x = aMultiUtil.getSetCount();
|
|
}
|
|
}
|
|
return responseString;
|
|
}
|
|
|
|
@Override
|
|
public Home createHome(BridgeSettingsDescriptor bridgeSettings) {
|
|
anHttpHandler = new HTTPHandler();
|
|
log.info("Http Home created.");
|
|
return this;
|
|
}
|
|
|
|
@Override
|
|
public Object getItems(String type) {
|
|
// Not a resource
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public void closeHome() {
|
|
anHttpHandler.closeHandler();
|
|
}
|
|
|
|
}
|