diff --git a/src/main/java/org/openhab/binding/openlicht/handler/EraserHandler.java b/src/main/java/org/openhab/binding/openlicht/handler/EraserHandler.java index 4cd5ffb16e8ef301ef01c0bb40044c5f560a8247..b9478a6ccbfad64f2827b56e80517db04fbb8a1a 100644 --- a/src/main/java/org/openhab/binding/openlicht/handler/EraserHandler.java +++ b/src/main/java/org/openhab/binding/openlicht/handler/EraserHandler.java @@ -7,12 +7,14 @@ import java.util.Set; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; +import org.eclipse.smarthome.core.events.EventPublisher; import org.eclipse.smarthome.core.items.GenericItem; import org.eclipse.smarthome.core.items.GroupItem; import org.eclipse.smarthome.core.items.Item; import org.eclipse.smarthome.core.items.ItemNotFoundException; import org.eclipse.smarthome.core.items.ItemRegistry; import org.eclipse.smarthome.core.items.StateChangeListener; +import org.eclipse.smarthome.core.items.events.ItemEventFactory; import org.eclipse.smarthome.core.library.types.DateTimeType; import org.eclipse.smarthome.core.library.types.DecimalType; import org.eclipse.smarthome.core.library.types.HSBType; @@ -22,6 +24,7 @@ import org.eclipse.smarthome.core.thing.ChannelUID; import org.eclipse.smarthome.core.thing.Thing; import org.eclipse.smarthome.core.types.Command; import org.eclipse.smarthome.core.types.State; +import org.eclipse.smarthome.core.types.TypeParser; import org.openhab.binding.openlicht.BindingConstants; import org.openhab.binding.openlicht.internal.ConfigurationHolder; import org.openhab.binding.openlicht.internal.DelegateEraserRegistryChangeListener; @@ -41,10 +44,12 @@ public class EraserHandler extends AbstractMqttHandler implements StateChangeLis private HandlerPhase lastStatusUpdatePhase; private boolean lastStatusUpdateSuccess; private String lastStatusUpdateDescription; + private @Nullable EventPublisher eventPublisher; public EraserHandler(Thing thing, ConfigurationHolder configurationHolder) { super(thing, configurationHolder); this.itemRegistry = configurationHolder.getItemRegistry(); + this.eventPublisher = configurationHolder.getEventPublisher(); ItemRegistry registry = this.itemRegistry; if (registry != null) { delegateListener = new WeakReference<DelegateEraserRegistryChangeListener>( @@ -159,14 +164,23 @@ public class EraserHandler extends AbstractMqttHandler implements StateChangeLis } // assume this is a GenericItem GenericItem genericItem = (GenericItem) item; - State newState = parseState(genericItem, new String(payload)); - if (newState != null) { - logger.debug("Setting state {} of type {} for {}", newState, newState.getClass().getSimpleName(), - genericItem.getName()); - genericItem.setState(newState); + // State newState = parseState(genericItem, new String(payload)); + Command command = TypeParser.parseCommand(genericItem.getAcceptedCommandTypes(), new String(payload)); + EventPublisher localEventPublisher = this.eventPublisher; + if (command != null && localEventPublisher != null) { + localEventPublisher.post(ItemEventFactory.createCommandEvent(itemName, command)); } else { - logger.warn("Could not set state for {} using '{}'", genericItem, new String(payload)); + logger.debug("Could not create command for event-publisher {}, item {} and payload {}", + localEventPublisher, itemName, new String(payload)); } + // if (newState != null) { + // logger.debug("Setting state {} of type {} for {}", newState, newState.getClass().getSimpleName(), + // genericItem.getName()); + // genericItem.setState(newState); + // } else { + // logger.warn("Could not set state for {} using '{}'", genericItem, new String(payload)); + // } + } else { logger.debug("No item registry to process message"); } diff --git a/src/main/java/org/openhab/binding/openlicht/internal/ConfigurationHolder.java b/src/main/java/org/openhab/binding/openlicht/internal/ConfigurationHolder.java index d5d31dd8ba8476da228b89fbb8c2261652854d8f..0ae8f02e4e6a5919ee0aaafe2ff8d992006b4498 100644 --- a/src/main/java/org/openhab/binding/openlicht/internal/ConfigurationHolder.java +++ b/src/main/java/org/openhab/binding/openlicht/internal/ConfigurationHolder.java @@ -3,6 +3,7 @@ package org.openhab.binding.openlicht.internal; import java.util.concurrent.ScheduledExecutorService; import org.eclipse.jdt.annotation.Nullable; +import org.eclipse.smarthome.core.events.EventPublisher; import org.eclipse.smarthome.core.items.ItemRegistry; import org.eclipse.smarthome.core.thing.ThingRegistry; import org.eclipse.smarthome.io.transport.mqtt.MqttService; @@ -22,6 +23,9 @@ public interface ConfigurationHolder { @Nullable ItemRegistry getItemRegistry(); + @Nullable + EventPublisher getEventPublisher(); + Version getVersion(); } diff --git a/src/main/java/org/openhab/binding/openlicht/internal/OpenLichtHandlerFactory.java b/src/main/java/org/openhab/binding/openlicht/internal/OpenLichtHandlerFactory.java index d58fb25178517bb9dd2d1372bedc1603da756cc5..ced6638330e615f9bbf7f52dbfa87a4d5be8b243 100644 --- a/src/main/java/org/openhab/binding/openlicht/internal/OpenLichtHandlerFactory.java +++ b/src/main/java/org/openhab/binding/openlicht/internal/OpenLichtHandlerFactory.java @@ -23,6 +23,7 @@ import java.util.stream.Stream; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; +import org.eclipse.smarthome.core.events.EventPublisher; import org.eclipse.smarthome.core.items.ItemRegistry; import org.eclipse.smarthome.core.thing.Thing; import org.eclipse.smarthome.core.thing.ThingRegistry; @@ -64,6 +65,7 @@ public class OpenLichtHandlerFactory extends BaseThingHandlerFactory implements private @Nullable ThingRegistry thingRegistry; private @Nullable ItemRegistry itemRegistry; private @Nullable ScheduledExecutorService executor; + private @Nullable EventPublisher eventPublisher; @Override public boolean supportsThingType(ThingTypeUID thingTypeUID) { @@ -127,6 +129,11 @@ public class OpenLichtHandlerFactory extends BaseThingHandlerFactory implements return itemRegistry; } + @Override + public @Nullable EventPublisher getEventPublisher() { + return eventPublisher; + } + @Override public Version getVersion() { return FrameworkUtil.getBundle(getClass()).getVersion(); @@ -164,4 +171,15 @@ public class OpenLichtHandlerFactory extends BaseThingHandlerFactory implements logger.info("Deleting item registry {}", itemRegistry); this.itemRegistry = null; } + + @Reference(cardinality = ReferenceCardinality.MANDATORY, policy = ReferencePolicy.STATIC) + public void setEvemtPublisher(EventPublisher eventPublisher) { + logger.info("Setting event publisher to {}", eventPublisher); + this.eventPublisher = eventPublisher; + } + + public void unsetEventPublisher(EventPublisher eventPublisher) { + logger.info("Deleting event publisher {}", eventPublisher); + this.eventPublisher = null; + } }