Skip to content
Snippets Groups Projects
Commit 0906fa76 authored by René Schöne's avatar René Schöne
Browse files

EraserHandler: Also try to set state directly if new mqtt message is received...

EraserHandler: Also try to set state directly if new mqtt message is received (and not only try to post a new command).

- This enables to correctly handle ContactItems
parent 6f5b3495
No related branches found
No related tags found
No related merge requests found
...@@ -149,10 +149,11 @@ public class EraserHandler extends AbstractMqttHandler implements StateChangeLis ...@@ -149,10 +149,11 @@ public class EraserHandler extends AbstractMqttHandler implements StateChangeLis
@Override @Override
public void processMessage(String topic, byte[] payload) { public void processMessage(String topic, byte[] payload) {
// check topic, and forward payload to respective item // check topic, and forward payload to respective item
logger.debug("Got message, in topc: '" + topic + "'"); final String stringPayload = new String(payload);
logger.debug("{} got message, in topc: '{}' with payload '{}'", this, topic, stringPayload);
int indexOfLastSlash = topic.lastIndexOf('/'); int indexOfLastSlash = topic.lastIndexOf('/');
String itemName = topic.substring(indexOfLastSlash + 1); String itemName = topic.substring(indexOfLastSlash + 1);
logger.debug("Using item name: '" + itemName + "'"); logger.debug("{} using item name: '{}'", this, itemName);
ItemRegistry registry = this.itemRegistry; ItemRegistry registry = this.itemRegistry;
if (registry != null) { if (registry != null) {
Item item; Item item;
...@@ -165,13 +166,22 @@ public class EraserHandler extends AbstractMqttHandler implements StateChangeLis ...@@ -165,13 +166,22 @@ public class EraserHandler extends AbstractMqttHandler implements StateChangeLis
// assume this is a GenericItem // assume this is a GenericItem
GenericItem genericItem = (GenericItem) item; GenericItem genericItem = (GenericItem) item;
// State newState = parseState(genericItem, new String(payload)); // State newState = parseState(genericItem, new String(payload));
Command command = TypeParser.parseCommand(genericItem.getAcceptedCommandTypes(), new String(payload)); Command command = TypeParser.parseCommand(genericItem.getAcceptedCommandTypes(), stringPayload);
EventPublisher localEventPublisher = this.eventPublisher; EventPublisher localEventPublisher = this.eventPublisher;
if (command != null && localEventPublisher != null) { if (command != null && localEventPublisher != null) {
localEventPublisher.post(ItemEventFactory.createCommandEvent(itemName, command)); localEventPublisher.post(ItemEventFactory.createCommandEvent(itemName, command));
} else { } else {
logger.debug("Could not create command for event-publisher {}, item {} and payload {}", logger.debug(
localEventPublisher, itemName, new String(payload)); "Could not create command for event-publisher {}, item {} with accecpted command types {} and payload {}",
localEventPublisher, itemName, genericItem.getAcceptedCommandTypes(), stringPayload);
logger.debug("Trying to set state instead");
State state = TypeParser.parseState(genericItem.getAcceptedDataTypes(), stringPayload);
if (state != null) {
genericItem.setState(state);
} else {
logger.debug("Could not create new state for item {} with accepted date types {} and payload {}",
itemName, genericItem.getAcceptedDataTypes(), stringPayload);
}
} }
// if (newState != null) { // if (newState != null) {
// logger.debug("Setting state {} of type {} for {}", newState, newState.getClass().getSimpleName(), // logger.debug("Setting state {} of type {} for {}", newState, newState.getClass().getSimpleName(),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment