[jablotron] fixed updating of JA100 PG channels (#9003)

* [jablotron] fixed bug when bridge stays offline forever in some cases
* [jablotron] fixed the JA100 channel update bug

Signed-off-by: Ondrej Pecta <opecta@gmail.com>
This commit is contained in:
Ondrej Pecta 2020-11-16 21:31:49 +01:00 committed by GitHub
parent d6d68c7a96
commit 8aa4be628a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 21 additions and 3 deletions

View File

@ -72,9 +72,13 @@ public abstract class JablotronAlarmHandler extends BaseThingHandler {
@Override @Override
public void bridgeStatusChanged(ThingStatusInfo bridgeStatusInfo) { public void bridgeStatusChanged(ThingStatusInfo bridgeStatusInfo) {
super.bridgeStatusChanged(bridgeStatusInfo); super.bridgeStatusChanged(bridgeStatusInfo);
if (ThingStatus.UNINITIALIZED == bridgeStatusInfo.getStatus()) { if (ThingStatus.OFFLINE == bridgeStatusInfo.getStatus()
|| ThingStatus.UNINITIALIZED == bridgeStatusInfo.getStatus()) {
cleanup(); cleanup();
} }
if (ThingStatus.ONLINE == bridgeStatusInfo.getStatus()) {
initialize();
}
} }
@Override @Override
@ -85,6 +89,7 @@ public abstract class JablotronAlarmHandler extends BaseThingHandler {
@Override @Override
public void initialize() { public void initialize() {
logger.debug("Initializing the alarm: {}", getThing().getUID());
thingConfig = getConfigAs(JablotronDeviceConfig.class); thingConfig = getConfigAs(JablotronDeviceConfig.class);
future = scheduler.scheduleWithFixedDelay(this::updateAlarmStatus, 1, thingConfig.getRefresh(), future = scheduler.scheduleWithFixedDelay(this::updateAlarmStatus, 1, thingConfig.getRefresh(),
TimeUnit.SECONDS); TimeUnit.SECONDS);
@ -144,6 +149,7 @@ public abstract class JablotronAlarmHandler extends BaseThingHandler {
} }
protected synchronized boolean updateAlarmStatus() { protected synchronized boolean updateAlarmStatus() {
logger.debug("Updating status of alarm: {}", getThing().getUID());
JablotronDataUpdateResponse dataUpdate = sendGetStatusRequest(); JablotronDataUpdateResponse dataUpdate = sendGetStatusRequest();
if (dataUpdate == null) { if (dataUpdate == null) {
return false; return false;

View File

@ -90,9 +90,14 @@ public class JablotronBridgeHandler extends BaseBridgeHandler {
} }
private void updateAlarmThings() { private void updateAlarmThings() {
logger.debug("Updating overall alarm's statuses...");
@Nullable @Nullable
List<JablotronDiscoveredService> services = discoverServices(); List<JablotronDiscoveredService> services = discoverServices();
if (services != null) { if (services != null) {
Bridge localBridge = getThing();
if (localBridge != null && ThingStatus.ONLINE != localBridge.getStatus()) {
updateStatus(ThingStatus.ONLINE);
}
for (JablotronDiscoveredService service : services) { for (JablotronDiscoveredService service : services) {
updateAlarmThing(service); updateAlarmThing(service);
} }
@ -101,6 +106,11 @@ public class JablotronBridgeHandler extends BaseBridgeHandler {
private void updateAlarmThing(JablotronDiscoveredService service) { private void updateAlarmThing(JablotronDiscoveredService service) {
for (Thing th : getThing().getThings()) { for (Thing th : getThing().getThings()) {
if (ThingStatus.ONLINE != th.getStatus()) {
logger.debug("Thing {} is not online", th.getUID());
continue;
}
JablotronAlarmHandler handler = (JablotronAlarmHandler) th.getHandler(); JablotronAlarmHandler handler = (JablotronAlarmHandler) th.getHandler();
if (handler == null) { if (handler == null) {
@ -150,12 +160,13 @@ public class JablotronBridgeHandler extends BaseBridgeHandler {
private @Nullable <T> T sendMessage(String url, String urlParameters, Class<T> classOfT, String encoding, private @Nullable <T> T sendMessage(String url, String urlParameters, Class<T> classOfT, String encoding,
boolean relogin) { boolean relogin) {
String line = "";
try { try {
ContentResponse resp = createRequest(url).content(new StringContentProvider(urlParameters), encoding) ContentResponse resp = createRequest(url).content(new StringContentProvider(urlParameters), encoding)
.send(); .send();
logger.trace("Request: {} with data: {}", url, urlParameters); logger.trace("Request: {} with data: {}", url, urlParameters);
String line = resp.getContentAsString(); line = resp.getContentAsString();
logger.trace("Response: {}", line); logger.trace("Response: {}", line);
return gson.fromJson(line, classOfT); return gson.fromJson(line, classOfT);
} catch (TimeoutException e) { } catch (TimeoutException e) {
@ -166,6 +177,7 @@ public class JablotronBridgeHandler extends BaseBridgeHandler {
"Interrupt during calling url: " + url); "Interrupt during calling url: " + url);
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
} catch (JsonSyntaxException e) { } catch (JsonSyntaxException e) {
logger.debug("Invalid JSON received: {}", line);
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
"Syntax error during calling url: " + url); "Syntax error during calling url: " + url);
} catch (ExecutionException e) { } catch (ExecutionException e) {

View File

@ -160,7 +160,7 @@ public class JablotronJa100Handler extends JablotronAlarmHandler {
if (channel != null) { if (channel != null) {
logger.debug("Updating channel: {} to value: {}", channel.getUID(), segment.getSegmentState()); logger.debug("Updating channel: {} to value: {}", channel.getUID(), segment.getSegmentState());
State newState; State newState;
if (segmentId.startsWith("PGM_")) { if (segmentId.startsWith("pgm_")) {
newState = "unset".equals(segment.getSegmentState()) ? OnOffType.OFF : OnOffType.ON; newState = "unset".equals(segment.getSegmentState()) ? OnOffType.OFF : OnOffType.ON;
} else { } else {
newState = new StringType(segment.getSegmentState()); newState = new StringType(segment.getSegmentState());