code: @Override
    protected final CompletableFuture<Double> getValue() {
      double rounder = 1 / this.minStep;
      return getDoubleValue()
          .thenApply(d -> d == null ? null : Math.round(d * rounder) / rounder)
          .thenApply(
              d -> {
                if (d != null) {
                  if (d < minValue) {
                    LOGGER.warn(
                        "Detected value out of range "
                            + d
                            + ". Returning min value instead. Characteristic "
                            + this);
                    return minValue;
                  }
                  if (d > maxValue) {
                    LOGGER.warn(
                        "Detected value out of range "
                            + d
                            + ". Returning max value instead. Characteristic "
                            + this);
                    return maxValue;
                  }
                  return d;
                }
                return null;
              });
    }
docs: {@inheritDoc}. Calls the getDoubleValue method and applies rounding to the minStep supplied in
  the constructor.