use of org.eclipse.smarthome.binding.mqtt.generic.internal.values.TextValue in project smarthome by eclipse.
the class GenericThingHandlerTests method handleCommandRefresh.
@Test
public void handleCommandRefresh() {
ChannelState channelConfig = mock(ChannelState.class);
doReturn(CompletableFuture.completedFuture(true)).when(channelConfig).start(any(), any(), anyInt());
doReturn(CompletableFuture.completedFuture(true)).when(channelConfig).stop();
doReturn(channelConfig).when(thingHandler).createChannelState(any(), any(), any());
thingHandler.initialize();
TextValue value = spy(new TextValue());
doReturn(value).when(channelConfig).getCache();
thingHandler.connection = connection;
thingHandler.handleCommand(textChannelUID, RefreshType.REFRESH);
verify(value).getChannelState();
}
use of org.eclipse.smarthome.binding.mqtt.generic.internal.values.TextValue in project smarthome by eclipse.
the class GenericThingHandlerTests method handleCommandUpdateString.
@Test
public void handleCommandUpdateString() {
TextValue value = spy(new TextValue());
ChannelState channelConfig = spy(new ChannelState(ChannelConfigBuilder.create("stateTopic", "commandTopic").build(), textChannelUID, value, thingHandler));
doReturn(channelConfig).when(thingHandler).createChannelState(any(), any(), any());
thingHandler.initialize();
thingHandler.connection = connection;
StringType updateValue = new StringType("UPDATE");
thingHandler.handleCommand(textChannelUID, updateValue);
verify(value).update(eq(updateValue));
assertThat(channelConfig.getCache().getChannelState().toString(), is("UPDATE"));
}
use of org.eclipse.smarthome.binding.mqtt.generic.internal.values.TextValue in project smarthome by eclipse.
the class GenericThingHandlerTests method processMessage.
@Test
public void processMessage() {
TextValue textValue = new TextValue();
ChannelState channelConfig = spy(new ChannelState(ChannelConfigBuilder.create("test/state", "test/state/set").build(), textChannelUID, textValue, thingHandler));
doReturn(channelConfig).when(thingHandler).createChannelState(any(), any(), any());
thingHandler.initialize();
byte[] payload = "UPDATE".getBytes();
// Test process message
channelConfig.processMessage("test/state", payload);
verify(callback).statusUpdated(eq(thing), argThat(arg -> arg.getStatus().equals(ThingStatus.ONLINE)));
verify(callback).stateUpdated(eq(textChannelUID), argThat(arg -> "UPDATE".equals(arg.toString())));
assertThat(textValue.getChannelState().toString(), is("UPDATE"));
}
use of org.eclipse.smarthome.binding.mqtt.generic.internal.values.TextValue in project smarthome by eclipse.
the class Property method createChannelFromAttribute.
public void createChannelFromAttribute() {
final String commandTopic = topic + "/set";
final String stateTopic = topic;
Value value;
Boolean isDecimal = null;
switch(attributes.datatype) {
case boolean_:
value = new OnOffValue("true", "false");
break;
case color_:
value = new ColorValue(attributes.format.contains("rgb"), null, null, 100);
break;
case enum_:
String[] enumValues = attributes.format.split(",");
value = new TextValue(enumValues);
break;
case float_:
case integer_:
isDecimal = attributes.datatype == DataTypeEnum.float_;
String[] s = attributes.format.split("\\:");
BigDecimal min = s.length == 2 ? convertFromString(s[0]) : null;
BigDecimal max = s.length == 2 ? convertFromString(s[1]) : null;
BigDecimal step = (min != null && max != null) ? max.subtract(min).divide(new BigDecimal(100.0), new MathContext(isDecimal ? 2 : 0)) : null;
if (step != null && !isDecimal && step.intValue() <= 0) {
step = new BigDecimal(1);
}
value = new NumberValue(min, max, step);
break;
case string_:
case unknown:
default:
value = new TextValue();
break;
}
ChannelConfigBuilder b = ChannelConfigBuilder.create().makeTrigger(!attributes.retained).withStateTopic(stateTopic);
if (isDecimal != null && !isDecimal) {
// Apply formatter to only publish integers
b = b.withFormatter("%d");
}
if (attributes.settable) {
b = b.withCommandTopic(commandTopic);
}
final ChannelState channelState = new ChannelState(b.build(), channelUID, value, callback);
this.channelState = channelState;
final ChannelType type = createChannelType(attributes, channelState);
this.type = type;
this.channel = ChannelBuilder.create(channelUID, type.getItemType()).withType(type.getUID()).withKind(type.getKind()).withLabel(attributes.name).withConfiguration(new Configuration(attributes.asMap())).build();
}
Aggregations