Skip to content

Commit

Permalink
Reintroduce LK Wiser dimmer work-around for API v2
Browse files Browse the repository at this point in the history
Fixes #15315

Signed-off-by: Jacob Laursen <jacob-github@vindvejr.dk>
  • Loading branch information
jlaur committed Jul 28, 2023
1 parent f6e750a commit 5b5b6ed
Showing 1 changed file with 28 additions and 1 deletion.
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;

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

0 comments on commit 5b5b6ed

Please sign in to comment.