diff --git a/bundles/org.openhab.binding.resol/src/main/java/org/openhab/binding/resol/handler/ResolThingHandler.java b/bundles/org.openhab.binding.resol/src/main/java/org/openhab/binding/resol/handler/ResolThingHandler.java
index f57afd763..7015b77e5 100644
--- a/bundles/org.openhab.binding.resol/src/main/java/org/openhab/binding/resol/handler/ResolThingHandler.java
+++ b/bundles/org.openhab.binding.resol/src/main/java/org/openhab/binding/resol/handler/ResolThingHandler.java
@@ -65,10 +65,20 @@ public class ResolThingHandler extends ResolBaseThingHandler {
private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat(
DateTimeType.DATE_PATTERN_WITH_TZ_AND_MS_GENERAL);
+ private static final SimpleDateFormat TIME_FORMAT = new SimpleDateFormat("HH:mm");
+
+ private static final SimpleDateFormat WEEK_FORMAT = new SimpleDateFormat("E, HH:mm");
+
static {
synchronized (DATE_FORMAT) {
DATE_FORMAT.setTimeZone(TimeZone.getTimeZone("UTC"));
}
+ synchronized (TIME_FORMAT) {
+ TIME_FORMAT.setTimeZone(TimeZone.getTimeZone("UTC"));
+ }
+ synchronized (WEEK_FORMAT) {
+ WEEK_FORMAT.setTimeZone(TimeZone.getTimeZone("UTC"));
+ }
}
public ResolThingHandler(Thing thing, ResolStateDescriptionOptionProvider stateDescriptionProvider) {
@@ -134,7 +144,11 @@ public class ResolThingHandler extends ResolBaseThingHandler {
channelTypeUID = new ChannelTypeUID(ResolBindingConstants.BINDING_ID,
pfv.getPacketFieldSpec().getUnit().getUnitCodeText());
} else if (pfv.getPacketFieldSpec().getType() == SpecificationFile.Type.DateTime) {
- channelTypeUID = new ChannelTypeUID(ResolBindingConstants.BINDING_ID, "DateTime");
+ channelTypeUID = new ChannelTypeUID(ResolBindingConstants.BINDING_ID, "datetime");
+ } else if (pfv.getPacketFieldSpec().getType() == SpecificationFile.Type.WeekTime) {
+ channelTypeUID = new ChannelTypeUID(ResolBindingConstants.BINDING_ID, "weektime");
+ } else if (pfv.getPacketFieldSpec().getType() == SpecificationFile.Type.Time) {
+ channelTypeUID = new ChannelTypeUID(ResolBindingConstants.BINDING_ID, "time");
} else {
/* used for enums and the numeric types without unit */
channelTypeUID = new ChannelTypeUID(ResolBindingConstants.BINDING_ID, "None");
@@ -144,10 +158,10 @@ public class ResolThingHandler extends ResolBaseThingHandler {
Thing thing = getThing();
switch (pfv.getPacketFieldSpec().getType()) {
+ case WeekTime:
case DateTime:
acceptedItemType = "DateTime";
break;
- case WeekTime:
case Number:
acceptedItemType = ResolChannelTypeProvider.itemTypeForUnit(pfv.getPacketFieldSpec().getUnit());
break;
@@ -178,6 +192,21 @@ public class ResolThingHandler extends ResolBaseThingHandler {
Channel channel = ChannelBuilder.create(channelUID, "Number").withType(channelTypeUID)
.withLabel(pfv.getName(lang)).build();
+ thingBuilder.withChannel(channel).withLabel(thing.getLabel());
+ updateThing(thingBuilder.build());
+ } else if ("DateTime".equals(acceptedItemType)) {
+ /* a date channel */
+ Channel channel = ChannelBuilder.create(channelUID, acceptedItemType).withType(channelTypeUID)
+ .withLabel(pfv.getName(lang)).build();
+
+ thingBuilder.withChannel(channel).withLabel(thing.getLabel());
+ updateThing(thingBuilder.build());
+
+ } else if ("String".equals(acceptedItemType)) {
+ /* a string channel */
+ Channel channel = ChannelBuilder.create(channelUID, "String").withType(channelTypeUID)
+ .withLabel(pfv.getName(lang)).build();
+
thingBuilder.withChannel(channel).withLabel(thing.getLabel());
updateThing(thingBuilder.build());
} else if (pfv.getRawValueDouble() != null) {
@@ -185,6 +214,13 @@ public class ResolThingHandler extends ResolBaseThingHandler {
Channel channel = ChannelBuilder.create(channelUID, acceptedItemType).withType(channelTypeUID)
.withLabel(pfv.getName(lang)).build();
+ thingBuilder.withChannel(channel).withLabel(thing.getLabel());
+ updateThing(thingBuilder.build());
+ } else {
+ /* a string channel */
+ Channel channel = ChannelBuilder.create(channelUID, "String").withType(channelTypeUID)
+ .withLabel(pfv.getName(lang)).build();
+
thingBuilder.withChannel(channel).withLabel(thing.getLabel());
updateThing(thingBuilder.build());
}
@@ -229,19 +265,33 @@ public class ResolThingHandler extends ResolBaseThingHandler {
* }
*/
break;
+ case Time:
+ synchronized (TIME_FORMAT) {
+ this.updateState(channelId, new StringType(TIME_FORMAT.format(pfv.getRawValueDate())));
+ }
+ break;
+ case WeekTime:
+ synchronized (WEEK_FORMAT) {
+ DateTimeType d = new DateTimeType(WEEK_FORMAT.format(pfv.getRawValueDate()));
+ this.updateState(channelId, d);
+ }
+ break;
case DateTime:
synchronized (DATE_FORMAT) {
DateTimeType d = new DateTimeType(DATE_FORMAT.format(pfv.getRawValueDate()));
this.updateState(channelId, d);
}
break;
- case WeekTime:
- case Time:
default:
Bridge b = getBridge();
if (b != null) {
- String value = pfv.formatTextValue(pfv.getPacketFieldSpec().getUnit(),
- ((ResolBridgeHandler) b).getLocale());
+ ResolBridgeHandler handler = (ResolBridgeHandler) b.getHandler();
+ String value;
+ if (handler != null) {
+ value = pfv.formatTextValue(pfv.getPacketFieldSpec().getUnit(), handler.getLocale());
+ } else {
+ value = pfv.formatTextValue(pfv.getPacketFieldSpec().getUnit(), Locale.getDefault());
+ }
try {
QuantityType> q = new QuantityType<>(value);
this.updateState(channelId, q);
diff --git a/bundles/org.openhab.binding.resol/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.resol/src/main/resources/OH-INF/thing/thing-types.xml
index f17db0e12..1099e9c42 100644
--- a/bundles/org.openhab.binding.resol/src/main/resources/OH-INF/thing/thing-types.xml
+++ b/bundles/org.openhab.binding.resol/src/main/resources/OH-INF/thing/thing-types.xml
@@ -144,6 +144,29 @@
+
+ DateTime
+
+ Time and day of week.
+ Time
+
+
+
+
+ String
+
+ Time
+
+
+
+
+ DateTime
+
+ Time and date.
+ Time
+
+
+
Number