mirror of
https://github.com/openhab/openhab-addons.git
synced 2025-01-25 14:55:55 +01:00
Fix scene channel updates (#16018)
Fixes #16000 Also-by: Andrew Fiddian-Green <software@whitebear.ch> Signed-off-by: Jacob Laursen <jacob-github@vindvejr.dk>
This commit is contained in:
parent
ccdb851085
commit
f45630064a
@ -537,7 +537,7 @@ public class Clip2BridgeHandler extends BaseBridgeHandler {
|
|||||||
}
|
}
|
||||||
getThing().getThings().forEach(thing -> {
|
getThing().getThings().forEach(thing -> {
|
||||||
if (thing.getHandler() instanceof Clip2ThingHandler clip2ThingHandler) {
|
if (thing.getHandler() instanceof Clip2ThingHandler clip2ThingHandler) {
|
||||||
resources.forEach(resource -> clip2ThingHandler.onResource(resource));
|
clip2ThingHandler.onResources(resources);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -631,12 +631,38 @@ public class Clip2ThingHandler extends BaseThingHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the channel state depending on new resources sent from the bridge.
|
||||||
|
*
|
||||||
|
* @param resources a collection of Resource objects containing the new state.
|
||||||
|
*/
|
||||||
|
public void onResources(Collection<Resource> resources) {
|
||||||
|
boolean sceneActivated = resources.stream().anyMatch(r -> sceneContributorsCache.containsKey(r.getId())
|
||||||
|
&& (r.getSceneActive().orElse(false) || r.getSmartSceneActive().orElse(false)));
|
||||||
|
for (Resource resource : resources) {
|
||||||
|
// Skip scene deactivation when we have also received a scene activation.
|
||||||
|
boolean updateChannels = !sceneActivated || !sceneContributorsCache.containsKey(resource.getId())
|
||||||
|
|| resource.getSceneActive().orElse(false) || resource.getSmartSceneActive().orElse(false);
|
||||||
|
onResource(resource, updateChannels);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update the channel state depending on a new resource sent from the bridge.
|
* Update the channel state depending on a new resource sent from the bridge.
|
||||||
*
|
*
|
||||||
* @param resource a Resource object containing the new state.
|
* @param resource a Resource object containing the new state.
|
||||||
*/
|
*/
|
||||||
public void onResource(Resource resource) {
|
private void onResource(Resource resource) {
|
||||||
|
onResource(resource, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the channel state depending on a new resource sent from the bridge.
|
||||||
|
*
|
||||||
|
* @param resource a Resource object containing the new state.
|
||||||
|
* @param updateChannels update channels (otherwise only update cache/properties).
|
||||||
|
*/
|
||||||
|
private void onResource(Resource resource, boolean updateChannels) {
|
||||||
if (disposing) {
|
if (disposing) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -658,7 +684,7 @@ public class Clip2ThingHandler extends BaseThingHandler {
|
|||||||
Resource cachedResource = getResourceFromCache(resource);
|
Resource cachedResource = getResourceFromCache(resource);
|
||||||
if (cachedResource != null) {
|
if (cachedResource != null) {
|
||||||
Setters.setResource(resource, cachedResource);
|
Setters.setResource(resource, cachedResource);
|
||||||
resourceConsumed = updateChannels(resource);
|
resourceConsumed = updateChannels && updateChannels(resource);
|
||||||
putResourceToCache(resource);
|
putResourceToCache(resource);
|
||||||
if (ResourceType.LIGHT == resource.getType() && !updateLightPropertiesDone) {
|
if (ResourceType.LIGHT == resource.getType() && !updateLightPropertiesDone) {
|
||||||
updateLightProperties(resource);
|
updateLightProperties(resource);
|
||||||
|
Loading…
Reference in New Issue
Block a user