[hue] Fix channel refresh (API v2) (#15736)

* Fix refresh/initial state request

Fixes #15735

* Fix channel updates when thing comes online
Fixes #15669

Signed-off-by: Jacob Laursen <jacob-github@vindvejr.dk>
Also-by: Andrew Fiddian-Green <software@whitebear.ch>
This commit is contained in:
Jacob Laursen 2023-10-14 19:18:52 +02:00 committed by GitHub
parent 31101685fc
commit 4b0c551065
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -300,19 +300,8 @@ public class Clip2ThingHandler extends BaseThingHandler {
@Override
public void handleCommand(ChannelUID channelUID, Command commandParam) {
if (RefreshType.REFRESH.equals(commandParam)) {
if ((thing.getStatus() == ThingStatus.ONLINE) && updateDependenciesDone) {
Future<?> task = updateServiceContributorsTask;
if (Objects.isNull(task) || !task.isDone()) {
cancelTask(updateServiceContributorsTask, false);
updateServiceContributorsTask = scheduler.schedule(() -> {
try {
updateServiceContributors();
} catch (ApiException | AssetNotLoadedException e) {
logger.debug("{} -> handleCommand() error {}", resourceId, e.getMessage(), e);
} catch (InterruptedException e) {
}
}, 3, TimeUnit.SECONDS);
}
if (thing.getStatus() == ThingStatus.ONLINE) {
refreshAllChannels();
}
return;
}
@ -524,6 +513,21 @@ public class Clip2ThingHandler extends BaseThingHandler {
}
}
private void refreshAllChannels() {
if (!updateDependenciesDone) {
return;
}
cancelTask(updateServiceContributorsTask, false);
updateServiceContributorsTask = scheduler.schedule(() -> {
try {
updateServiceContributors();
} catch (ApiException | AssetNotLoadedException e) {
logger.debug("{} -> handleCommand() error {}", resourceId, e.getMessage(), e);
} catch (InterruptedException e) {
}
}, 3, TimeUnit.SECONDS);
}
/**
* Apply device specific work-arounds needed for given command.
*
@ -899,11 +903,7 @@ public class Clip2ThingHandler extends BaseThingHandler {
}
} else if (thing.getStatus() != ThingStatus.ONLINE) {
updateStatus(ThingStatus.ONLINE);
// issue REFRESH command to update all channels
Channel lastUpdateChannel = thing.getChannel(CHANNEL_2_LAST_UPDATED);
if (Objects.nonNull(lastUpdateChannel)) {
handleCommand(lastUpdateChannel.getUID(), RefreshType.REFRESH);
}
refreshAllChannels();
}
}
}