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);
/**
private boolean updateLightPropertiesDone;
private boolean updatePropertiesDone;
private boolean updateDependenciesDone;
+ private boolean applyOffTransitionWorkaround;
private @Nullable Future<?> alertResetTask;
private @Nullable Future<?> dynamicsResetTask;
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:
case CHANNEL_2_ON_OFF_ONLY:
putResource = new Resource(lightResourceType).setOnOff(command);
+ applyDeviceSpecificWorkArounds(command, putResource);
break;
case CHANNEL_2_TEMPERATURE_ENABLED:
}
}
+ /**
+ * 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.
*
// 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();
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);