[vizio] Prevent thing status from bouncing offline (#16291)

* Prevent thing status from bouncing offline

Signed-off-by: Michael Lobstein <michael.lobstein@gmail.com>
Signed-off-by: Ciprian Pascu <contact@ciprianpascu.ro>
This commit is contained in:
mlobstein 2024-01-17 01:53:52 -06:00 committed by Ciprian Pascu
parent 11933a35b7
commit 5d0b508a03
2 changed files with 19 additions and 42 deletions

View File

@ -86,6 +86,7 @@ public class VizioHandler extends BaseThingHandler {
private List<VizioApp> userConfigApps = new ArrayList<>();
private Object sequenceLock = new Object();
private int failCount = 0;
private int pairingDeviceId = -1;
private int pairingToken = -1;
private Long currentInputHash = 0L;
@ -217,10 +218,16 @@ public class VizioHandler extends BaseThingHandler {
}
}
updateStatus(ThingStatus.ONLINE);
failCount = 0;
} catch (VizioException e) {
logger.debug("Unable to retrieve Vizio TV power mode info. Exception: {}", e.getMessage(), e);
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
"@text/offline.communication-error-get-power");
// A communication error must occur 3 times before updating the thing status
failCount++;
if (failCount > 2) {
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
"@text/offline.communication-error-polling");
}
return;
}
if (powerOn && (isLinked(VOLUME) || isLinked(MUTE))) {
@ -263,8 +270,6 @@ public class VizioHandler extends BaseThingHandler {
} catch (VizioException e) {
logger.debug("Unable to retrieve Vizio TV current audio settings. Exception: {}", e.getMessage(),
e);
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
"@text/offline.communication-error-get-audio");
}
}
@ -280,8 +285,6 @@ public class VizioHandler extends BaseThingHandler {
}
} catch (VizioException e) {
logger.debug("Unable to retrieve Vizio TV current input. Exception: {}", e.getMessage(), e);
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
"@text/offline.communication-error-get-input");
}
}
@ -318,8 +321,6 @@ public class VizioHandler extends BaseThingHandler {
}
} catch (VizioException e) {
logger.debug("Unable to retrieve Vizio TV current running app. Exception: {}", e.getMessage(), e);
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
"@text/offline.communication-error-get-app");
}
}
}
@ -401,10 +402,8 @@ public class VizioHandler extends BaseThingHandler {
powerOn = false;
}
} catch (VizioException e) {
logger.debug("Unable to send power {} command to the Vizio TV, Exception: {}", command,
logger.warn("Unable to send power {} command to the Vizio TV, Exception: {}", command,
e.getMessage());
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
"@text/offline.communication-error-set-power");
}
}
break;
@ -430,12 +429,10 @@ public class VizioHandler extends BaseThingHandler {
.changeVolume(String.format(MODIFY_INT_SETTING_JSON, volume, currentVolumeHash));
currentVolumeHash = 0L;
} catch (VizioException e) {
logger.debug("Unable to set volume on the Vizio TV, command volume: {}, Exception: {}",
logger.warn("Unable to set volume on the Vizio TV, command volume: {}, Exception: {}",
command, e.getMessage());
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
"@text/offline.communication-error-set-volume");
} catch (NumberFormatException e) {
logger.debug("Unable to parse command volume value {} as int", command);
logger.warn("Unable to parse command volume value {} as int", command);
}
}
break;
@ -451,10 +448,8 @@ public class VizioHandler extends BaseThingHandler {
currentMute = false;
}
} catch (VizioException e) {
logger.debug("Unable to send mute {} command to the Vizio TV, Exception: {}", command,
logger.warn("Unable to send mute {} command to the Vizio TV, Exception: {}", command,
e.getMessage());
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
"@text/offline.communication-error-set-mute");
}
}
break;
@ -474,10 +469,8 @@ public class VizioHandler extends BaseThingHandler {
.changeInput(String.format(MODIFY_STRING_SETTING_JSON, command, currentInputHash));
currentInputHash = 0L;
} catch (VizioException e) {
logger.debug("Unable to set current source on the Vizio TV, source: {}, Exception: {}",
logger.warn("Unable to set current source on the Vizio TV, source: {}, Exception: {}",
command, e.getMessage());
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
"@text/offline.communication-error-set-source");
}
}
break;
@ -491,14 +484,12 @@ public class VizioHandler extends BaseThingHandler {
if (selectedApp.isPresent()) {
communicator.launchApp(selectedApp.get().getConfig());
} else {
logger.debug("Unknown app name: '{}', check that it exists in App List configuration",
logger.warn("Unknown app name: '{}', check that it exists in App List configuration",
command);
}
} catch (VizioException e) {
logger.debug("Unable to launch app name: '{}' on the Vizio TV, Exception: {}", command,
logger.warn("Unable to launch app name: '{}' on the Vizio TV, Exception: {}", command,
e.getMessage());
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
"@text/offline.communication-error-launch-app");
}
}
break;
@ -508,10 +499,8 @@ public class VizioHandler extends BaseThingHandler {
try {
handleControlCommand(command);
} catch (VizioException e) {
logger.debug("Unable to send control command: '{}' to the Vizio TV, Exception: {}", command,
logger.warn("Unable to send control command: '{}' to the Vizio TV, Exception: {}", command,
e.getMessage());
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
"@text/offline.communication-error-send-cmd");
}
}
break;
@ -521,10 +510,8 @@ public class VizioHandler extends BaseThingHandler {
KeyCommand keyCommand = KeyCommand.valueOf(command.toString().toUpperCase(Locale.ENGLISH));
communicator.sendKeyPress(keyCommand.getJson());
} catch (IllegalArgumentException | VizioException e) {
logger.debug("Unable to send keypress to the Vizio TV, key: {}, Exception: {}", command,
logger.warn("Unable to send keypress to the Vizio TV, key: {}, Exception: {}", command,
e.getMessage());
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
"@text/offline.communication-error-send-key");
}
}
break;

View File

@ -68,14 +68,4 @@ channel-type.vizio.source.description = Select the Source Input for the TV
offline.configuration-error-hostname = Host Name must be specified
offline.configuration-error-authtoken = Auth Token must be specified, see documentation for details
offline.configuration-error-applist = Invalid App List Configuration in thing configuration
offline.communication-error-get-power = Unable to retrieve power mode info from TV
offline.communication-error-get-audio = Unable to retrieve current audio settings from TV
offline.communication-error-get-input = Unable to retrieve current input from TV
offline.communication-error-get-app = Unable to retrieve current running app from TV
offline.communication-error-set-power = Unable to send power command to the TV
offline.communication-error-set-volume = Unable to set volume on the TV
offline.communication-error-set-mute = Unable to send mute command to the TV
offline.communication-error-set-source = Unable to set current source on the TV
offline.communication-error-launch-app = Unable to launch app on the TV
offline.communication-error-send-cmd = Unable to send control command to the TV
offline.communication-error-send-key = Unable to send keypress to the TV
offline.communication-error-polling = Unable to communicate with the TV