Fix for #10982 - Binding not working properly HANDLER_REGISTERING_ERROR (#11108)

Signed-off-by: Jan Gustafsson <jannegpriv@gmail.com>
This commit is contained in:
Jan Gustafsson 2021-08-16 14:06:16 +02:00 committed by GitHub
parent 62f169d649
commit 02d8e43d37
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 11 deletions

View File

@ -117,8 +117,11 @@ public class VerisureSession {
public boolean refresh() {
try {
if (logIn()) {
updateStatus();
return true;
if (updateStatus()) {
return true;
} else {
return false;
}
} else {
return false;
}
@ -246,13 +249,20 @@ public class VerisureSession {
}
public @Nullable String getPinCode(BigDecimal installationId) {
return verisureInstallations.get(installationId).getPinCode();
VerisureInstallation inst = verisureInstallations.get(installationId);
if (inst != null) {
return inst.getPinCode();
} else {
logger.debug("Installation is null!");
return null;
}
}
private void setPasswordFromCookie() {
CookieStore c = httpClient.getCookieStore();
List<HttpCookie> cookies = c.getCookies();
cookies.forEach(cookie -> {
final List<HttpCookie> unmodifiableList = List.of(cookies.toArray(new HttpCookie[] {}));
unmodifiableList.forEach(cookie -> {
logger.trace("Response Cookie: {}", cookie);
if (cookie.getName().equals(PASSWORD_NAME)) {
password = cookie.getValue();
@ -347,6 +357,9 @@ public class VerisureSession {
// Maybe Verisure has switched API server in use?
logger.debug("Changed API server! Response: {}", content);
setApiServerInUse(getNextApiServer());
} else if (content.contains("\"message\":\"Request Failed")
&& content.contains("Invalid session cookie")) {
throw new PostToAPIException("Invalid session cookie");
} else {
String contentChomped = content.trim();
logger.trace("Response body: {}", content);
@ -515,9 +528,10 @@ public class VerisureSession {
}
}
private void updateStatus() {
private boolean updateStatus() {
logger.debug("Update status");
verisureInstallations.forEach((installationId, installation) -> {
for (Map.Entry<BigDecimal, VerisureInstallation> verisureInstallations : verisureInstallations.entrySet()) {
VerisureInstallation installation = verisureInstallations.getValue();
try {
configureInstallationInstance(installation.getInstallationId());
int httpResultCode = setSessionCookieAuthLogin();
@ -534,11 +548,14 @@ public class VerisureSession {
updateGatewayStatus(installation);
} else {
logger.debug("Failed to set session cookie and auth login, HTTP result code: {}", httpResultCode);
return false;
}
} catch (ExecutionException | InterruptedException | TimeoutException e) {
} catch (ExecutionException | InterruptedException | TimeoutException | PostToAPIException e) {
logger.debug("Failed to update status {}", e.getMessage());
return false;
}
});
}
return true;
}
private String createOperationJSON(String operation, VariablesDTO variables, String query) {
@ -549,7 +566,7 @@ public class VerisureSession {
return gson.toJson(Collections.singletonList(operationJSON));
}
private synchronized void updateAlarmStatus(VerisureInstallation installation) {
private synchronized void updateAlarmStatus(VerisureInstallation installation) throws PostToAPIException {
BigDecimal installationId = installation.getInstallationId();
String url = START_GRAPHQL;
String operation = "ArmState";
@ -567,8 +584,7 @@ public class VerisureSession {
String deviceId = "alarm" + installationId;
thing.setDeviceId(deviceId);
notifyListenersIfChanged(thing, installation, deviceId);
} catch (ExecutionException | InterruptedException | TimeoutException | JsonSyntaxException
| PostToAPIException e) {
} catch (ExecutionException | InterruptedException | TimeoutException | JsonSyntaxException e) {
logger.warn("Failed to send a POST to the API {}", e.getMessage());
}
}

View File

@ -129,6 +129,8 @@ public class VerisureBridgeHandler extends BaseBridgeHandler {
logger.warn("Failed to initialize bridge, please check your credentials!");
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.HANDLER_REGISTERING_ERROR,
"Failed to login to Verisure, please check your credentials!");
dispose();
initialize();
return;
}
startAutomaticRefresh();