From: Mike Major Date: Mon, 23 Nov 2020 18:15:56 +0000 (+0000) Subject: Support Colour item and Group item with a state (#9111) X-Git-Url: https://git.basschouten.com/?a=commitdiff_plain;h=9de9955c4914627872dfc047243a36188f9ef750;p=openhab-addons.git Support Colour item and Group item with a state (#9111) Signed-off-by: Mike Major --- diff --git a/bundles/org.openhab.persistence.rrd4j/README.md b/bundles/org.openhab.persistence.rrd4j/README.md index 86395eee78..b77c4981b8 100644 --- a/bundles/org.openhab.persistence.rrd4j/README.md +++ b/bundles/org.openhab.persistence.rrd4j/README.md @@ -12,7 +12,7 @@ This service cannot be directly queried, because of its data compression, which NOTE: rrd4j is for storing numerical data only. It cannot store complex data types. -The supported item types are therefore only `Switch` (internally mapped to 0/1), `Dimmer`, `Number`, `Contact` (internally mapped to 0/1) and `Rollershutter`. +The supported item types are therefore only `Switch` (internally mapped to 0/1), `Dimmer`, `Number`, `Contact` (internally mapped to 0/1), `Rollershutter` and `Color` (only brightness component stored). ## Configuration diff --git a/bundles/org.openhab.persistence.rrd4j/src/main/java/org/openhab/persistence/rrd4j/internal/RRD4jPersistenceService.java b/bundles/org.openhab.persistence.rrd4j/src/main/java/org/openhab/persistence/rrd4j/internal/RRD4jPersistenceService.java index 6e1a6615ab..cc68989b3c 100644 --- a/bundles/org.openhab.persistence.rrd4j/src/main/java/org/openhab/persistence/rrd4j/internal/RRD4jPersistenceService.java +++ b/bundles/org.openhab.persistence.rrd4j/src/main/java/org/openhab/persistence/rrd4j/internal/RRD4jPersistenceService.java @@ -38,11 +38,13 @@ import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; import org.openhab.core.OpenHAB; import org.openhab.core.common.NamedThreadFactory; +import org.openhab.core.items.GroupItem; import org.openhab.core.items.Item; import org.openhab.core.items.ItemNotFoundException; import org.openhab.core.items.ItemRegistry; import org.openhab.core.items.ItemUtil; import org.openhab.core.library.CoreItemFactory; +import org.openhab.core.library.items.ColorItem; import org.openhab.core.library.items.ContactItem; import org.openhab.core.library.items.DimmerItem; import org.openhab.core.library.items.NumberItem; @@ -96,7 +98,7 @@ public class RRD4jPersistenceService implements QueryablePersistenceService { private static final String DEFAULT_QUANTIFIABLE = "default_quantifiable"; private static final Set SUPPORTED_TYPES = Set.of(CoreItemFactory.SWITCH, CoreItemFactory.CONTACT, - CoreItemFactory.DIMMER, CoreItemFactory.NUMBER, CoreItemFactory.ROLLERSHUTTER); + CoreItemFactory.DIMMER, CoreItemFactory.NUMBER, CoreItemFactory.ROLLERSHUTTER, CoreItemFactory.COLOR); private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(3, new NamedThreadFactory("RRD4j")); @@ -400,11 +402,15 @@ public class RRD4jPersistenceService implements QueryablePersistenceService { @SuppressWarnings({ "unchecked", "rawtypes" }) private State mapToState(double value, @Nullable Item item, @Nullable Unit unit) { + if (item instanceof GroupItem) { + item = ((GroupItem) item).getBaseItem(); + } + if (item instanceof SwitchItem && !(item instanceof DimmerItem)) { return value == 0.0d ? OnOffType.OFF : OnOffType.ON; } else if (item instanceof ContactItem) { return value == 0.0d ? OpenClosedType.CLOSED : OpenClosedType.OPEN; - } else if (item instanceof DimmerItem || item instanceof RollershutterItem) { + } else if (item instanceof DimmerItem || item instanceof RollershutterItem || item instanceof ColorItem) { // make sure Items that need PercentTypes instead of DecimalTypes do receive the right information return new PercentType((int) Math.round(value * 100)); } else if (item instanceof NumberItem) { @@ -418,6 +424,13 @@ public class RRD4jPersistenceService implements QueryablePersistenceService { } private boolean isSupportedItemType(Item item) { + if (item instanceof GroupItem) { + final Item baseItem = ((GroupItem) item).getBaseItem(); + if (baseItem != null) { + item = baseItem; + } + } + return SUPPORTED_TYPES.contains(ItemUtil.getMainItemType(item.getType())); }