[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:
parent
d6d68c7a96
commit
8aa4be628a
@ -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;
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
@ -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());
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user