use of org.eclipse.smarthome.binding.mqtt.generic.internal.values.OnOffValue in project smarthome by eclipse.
the class GenericThingHandlerTests method handleCommandUpdateBoolean.
@Test
public void handleCommandUpdateBoolean() {
OnOffValue value = spy(new OnOffValue("ON", "OFF"));
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("ON");
thingHandler.handleCommand(textChannelUID, updateValue);
verify(value).update(eq(updateValue));
assertThat(channelConfig.getCache().getChannelState(), is(OnOffType.ON));
}
use of org.eclipse.smarthome.binding.mqtt.generic.internal.values.OnOffValue 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