[knx] Improve rounding when encoding DPT 232.60000 (#14772)
* [knx] Improve rounding when encoding DPT 232.60000 * [knx] SAT and warnings Signed-off-by: Holger Friedrich <mail@holger-friedrich.de>
This commit is contained in:
parent
eb668bfe0c
commit
b3dfba8cf5
@ -251,7 +251,7 @@ public abstract class AbstractKNXClient implements NetworkLinkListener, KNXClien
|
||||
state = ClientState.RUNNING;
|
||||
return true;
|
||||
} catch (InterruptedException e) {
|
||||
final var lastState = state;
|
||||
ClientState lastState = state;
|
||||
state = ClientState.INTERRUPTED;
|
||||
|
||||
logger.trace("Bridge {}, connection interrupted", thingUID);
|
||||
@ -458,7 +458,7 @@ public abstract class AbstractKNXClient implements NetworkLinkListener, KNXClien
|
||||
|
||||
@Override
|
||||
public boolean isConnected() {
|
||||
final var tmpLink = link;
|
||||
KNXNetworkLink tmpLink = link;
|
||||
return tmpLink != null && tmpLink.isOpen();
|
||||
}
|
||||
|
||||
|
||||
@ -310,8 +310,8 @@ public class ValueDecoder {
|
||||
if (stringY == null) {
|
||||
return ColorUtil.xyToHsb(new double[] { x, y });
|
||||
} else {
|
||||
double Y = Double.parseDouble(stringY.replace(",", "."));
|
||||
return ColorUtil.xyToHsb(new double[] { x, y, Y });
|
||||
double pY = Double.parseDouble(stringY.replace(",", "."));
|
||||
return ColorUtil.xyToHsb(new double[] { x, y, pY });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -154,7 +154,7 @@ public class ValueEncoder {
|
||||
case "232.60000":
|
||||
// MDT specific: mis-use 232.600 for hsv instead of rgb
|
||||
int hue = hsb.getHue().toBigDecimal().multiply(BigDecimal.valueOf(255))
|
||||
.divide(BigDecimal.valueOf(360), 2, RoundingMode.HALF_UP).intValue();
|
||||
.divide(BigDecimal.valueOf(360), 0, RoundingMode.HALF_UP).intValue();
|
||||
return "r:" + hue + " g:" + convertPercentToByte(hsb.getSaturation()) + " b:"
|
||||
+ convertPercentToByte(hsb.getBrightness());
|
||||
case "242.600":
|
||||
@ -188,14 +188,20 @@ public class ValueEncoder {
|
||||
|| DPTXlator2ByteFloat.DPT_KELVIN_PER_PERCENT.getID().equals(dptId)) {
|
||||
// match unicode character or °C
|
||||
if (value.toString().contains(SIUnits.CELSIUS.getSymbol()) || value.toString().contains("°C")) {
|
||||
unit = unit.replace("K", "°C");
|
||||
if (unit != null) {
|
||||
unit = unit.replace("K", "°C");
|
||||
}
|
||||
} else if (value.toString().contains("°F")) {
|
||||
unit = unit.replace("K", "°F");
|
||||
if (unit != null) {
|
||||
unit = unit.replace("K", "°F");
|
||||
}
|
||||
value = ((QuantityType<?>) value).multiply(BigDecimal.valueOf(5.0 / 9.0));
|
||||
}
|
||||
} else if (DPTXlator4ByteFloat.DPT_LIGHT_QUANTITY.getID().equals(dptId)) {
|
||||
if (!value.toString().contains("J")) {
|
||||
unit = unit.replace("J", "lm*s");
|
||||
if (unit != null) {
|
||||
unit = unit.replace("J", "lm*s");
|
||||
}
|
||||
}
|
||||
} else if (DPTXlator4ByteFloat.DPT_ELECTRIC_FLUX.getID().equals(dptId)) {
|
||||
// use alternate definition of flux
|
||||
@ -250,6 +256,6 @@ public class ValueEncoder {
|
||||
*/
|
||||
private static int convertPercentToByte(PercentType percent) {
|
||||
return percent.toBigDecimal().multiply(BigDecimal.valueOf(255))
|
||||
.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP).intValue();
|
||||
.divide(BigDecimal.valueOf(100), 0, RoundingMode.HALF_UP).intValue();
|
||||
}
|
||||
}
|
||||
|
||||
@ -505,12 +505,12 @@ public class DeviceThingHandler extends BaseThingHandler implements GroupAddress
|
||||
}
|
||||
|
||||
protected void detachFromClient() {
|
||||
final var pollingJobSynced = pollingJob;
|
||||
ScheduledFuture<?> pollingJobSynced = pollingJob;
|
||||
if (pollingJobSynced != null) {
|
||||
pollingJobSynced.cancel(true);
|
||||
pollingJob = null;
|
||||
}
|
||||
final var descriptionJobSynced = descriptionJob;
|
||||
ScheduledFuture<?> descriptionJobSynced = descriptionJob;
|
||||
if (descriptionJobSynced != null) {
|
||||
descriptionJobSynced.cancel(true);
|
||||
descriptionJob = null;
|
||||
|
||||
@ -171,12 +171,13 @@ public class IPBridgeThingHandler extends KNXBridgeBaseThingHandler {
|
||||
if (!config.getLocalIp().isEmpty()) {
|
||||
localEndPoint = new InetSocketAddress(config.getLocalIp(), 0);
|
||||
} else {
|
||||
if (networkAddressService == null) {
|
||||
NetworkAddressService localNetworkAddressService = networkAddressService;
|
||||
if (localNetworkAddressService == null) {
|
||||
logger.debug("NetworkAddressService not available, cannot create bridge {}", thing.getUID());
|
||||
updateStatus(ThingStatus.OFFLINE);
|
||||
return;
|
||||
} else {
|
||||
localEndPoint = new InetSocketAddress(networkAddressService.getPrimaryIpv4HostAddress(), 0);
|
||||
localEndPoint = new InetSocketAddress(localNetworkAddressService.getPrimaryIpv4HostAddress(), 0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -186,7 +187,7 @@ public class IPBridgeThingHandler extends KNXBridgeBaseThingHandler {
|
||||
secureTunnel.user, secureTunnel.userKey, thing.getUID(), config.getResponseTimeout(),
|
||||
config.getReadingPause(), config.getReadRetriesLimit(), getScheduler(), this);
|
||||
|
||||
final var tmpClient = client;
|
||||
IPClient tmpClient = client;
|
||||
if (tmpClient != null) {
|
||||
tmpClient.initialize();
|
||||
}
|
||||
@ -196,7 +197,7 @@ public class IPBridgeThingHandler extends KNXBridgeBaseThingHandler {
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
final var tmpInitJob = initJob;
|
||||
Future<?> tmpInitJob = initJob;
|
||||
if (tmpInitJob != null) {
|
||||
while (!tmpInitJob.isDone()) {
|
||||
logger.trace("Bridge {}, shutdown during init, trying to cancel", thing.getUID());
|
||||
@ -209,7 +210,7 @@ public class IPBridgeThingHandler extends KNXBridgeBaseThingHandler {
|
||||
}
|
||||
initJob = null;
|
||||
}
|
||||
final var tmpClient = client;
|
||||
IPClient tmpClient = client;
|
||||
if (tmpClient != null) {
|
||||
tmpClient.dispose();
|
||||
client = null;
|
||||
|
||||
@ -65,7 +65,7 @@ public class SerialBridgeThingHandler extends KNXBridgeBaseThingHandler {
|
||||
}
|
||||
|
||||
public void initializeLater() {
|
||||
final var tmpClient = client;
|
||||
SerialClient tmpClient = client;
|
||||
if (tmpClient != null) {
|
||||
tmpClient.initialize();
|
||||
}
|
||||
@ -73,7 +73,7 @@ public class SerialBridgeThingHandler extends KNXBridgeBaseThingHandler {
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
final var tmpInitJob = initJob;
|
||||
Future<?> tmpInitJob = initJob;
|
||||
if (tmpInitJob != null) {
|
||||
if (!tmpInitJob.isDone()) {
|
||||
logger.trace("Bridge {}, shutdown during init, trying to cancel", thing.getUID());
|
||||
@ -87,7 +87,7 @@ public class SerialBridgeThingHandler extends KNXBridgeBaseThingHandler {
|
||||
initJob = null;
|
||||
}
|
||||
|
||||
final var tmpClient = client;
|
||||
SerialClient tmpClient = client;
|
||||
if (tmpClient != null) {
|
||||
tmpClient.dispose();
|
||||
client = null;
|
||||
|
||||
@ -326,6 +326,10 @@ class DPTTest {
|
||||
assertEquals(173.6, hsbType.getHue().doubleValue(), 0.1);
|
||||
assertEquals(17.6, hsbType.getSaturation().doubleValue(), 0.1);
|
||||
assertEquals(26.3, hsbType.getBrightness().doubleValue(), 0.1);
|
||||
|
||||
String encoded = ValueEncoder.encode(hsbType, "232.60000");
|
||||
assertNotNull(encoded);
|
||||
assertEquals(encoded, "r:" + data[0] + " g:" + data[1] + " b:" + data[2]);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user