Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[hue] Reintroduce LK Wiser dimmer work-around for API v2 #15316

Merged
merged 1 commit into from
Jul 31, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,8 @@ public class Clip2ThingHandler extends BaseThingHandler {

private static final Duration DYNAMICS_ACTIVE_WINDOW = Duration.ofSeconds(10);

private static final String LK_WISER_DIMMER_MODEL_ID = "LK Dimmer";

private final Logger logger = LoggerFactory.getLogger(Clip2ThingHandler.class);

/**
Expand Down Expand Up @@ -163,6 +165,7 @@ public class Clip2ThingHandler extends BaseThingHandler {
private boolean updateLightPropertiesDone;
private boolean updatePropertiesDone;
private boolean updateDependenciesDone;
private boolean applyOffTransitionWorkaround;
andrewfg marked this conversation as resolved.
Show resolved Hide resolved

private @Nullable Future<?> alertResetTask;
private @Nullable Future<?> dynamicsResetTask;
Expand Down Expand Up @@ -402,6 +405,7 @@ public void handleCommand(ChannelUID channelUID, Command commandParam) {
case CHANNEL_2_SWITCH:
putResource = Objects.nonNull(putResource) ? putResource : new Resource(lightResourceType);
putResource.setOnOff(command);
applyDeviceSpecificWorkArounds(command, putResource);
break;

case CHANNEL_2_COLOR_XY_ONLY:
Expand All @@ -414,6 +418,7 @@ public void handleCommand(ChannelUID channelUID, Command commandParam) {

case CHANNEL_2_ON_OFF_ONLY:
putResource = new Resource(lightResourceType).setOnOff(command);
applyDeviceSpecificWorkArounds(command, putResource);
break;

case CHANNEL_2_TEMPERATURE_ENABLED:
Expand Down Expand Up @@ -514,6 +519,18 @@ public void handleCommand(ChannelUID channelUID, Command commandParam) {
}
}

/**
* Apply device specific work-arounds needed for given command.
*
* @param command the handled command.
* @param putResource the resource that will be adjusted if needed.
*/
private void applyDeviceSpecificWorkArounds(Command command, Resource putResource) {
if (command == OnOffType.OFF && applyOffTransitionWorkaround) {
putResource.setDynamicsDuration(dynamicsDuration);
}
}

/**
* Handle a 'dynamics' command for the given channel ID for the given dynamics duration.
*
Expand Down Expand Up @@ -1020,9 +1037,11 @@ private synchronized void updateProperties(Resource resource) {
// product data
ProductData productData = thisResource.getProductData();
if (Objects.nonNull(productData)) {
String modelId = productData.getModelId();

// standard properties
properties.put(PROPERTY_RESOURCE_ID, resourceId);
properties.put(Thing.PROPERTY_MODEL_ID, productData.getModelId());
properties.put(Thing.PROPERTY_MODEL_ID, modelId);
properties.put(Thing.PROPERTY_VENDOR, productData.getManufacturerName());
properties.put(Thing.PROPERTY_FIRMWARE_VERSION, productData.getSoftwareVersion());
String hardwarePlatformType = productData.getHardwarePlatformType();
Expand All @@ -1034,6 +1053,14 @@ private synchronized void updateProperties(Resource resource) {
properties.put(PROPERTY_PRODUCT_NAME, productData.getProductName());
properties.put(PROPERTY_PRODUCT_ARCHETYPE, productData.getProductArchetype().toString());
properties.put(PROPERTY_PRODUCT_CERTIFIED, productData.getCertified().toString());

// Check device for needed work-arounds.
if (LK_WISER_DIMMER_MODEL_ID.equals(modelId)) {
// Apply transition time as a workaround for LK Wiser Dimmer firmware bug.
// Additional details here: https://techblog.vindvejr.dk/?p=455
applyOffTransitionWorkaround = true;
logger.debug("{} -> enabling work-around for turning off LK Wiser Dimmer", resourceId);
}
}

thing.setProperties(properties);
Expand Down