use of org.eclipse.smarthome.core.events.Event in project smarthome by eclipse.
the class SampleExtensionService method postInstalledEvent.
private void postInstalledEvent(String extensionId) {
if (eventPublisher != null) {
Event event = ExtensionEventFactory.createExtensionInstalledEvent(extensionId);
eventPublisher.post(event);
}
}
use of org.eclipse.smarthome.core.events.Event in project smarthome by eclipse.
the class RuntimeRuleTest method ruleTriggeredByCompositeTrigger.
@Test
public void ruleTriggeredByCompositeTrigger() throws ItemNotFoundException, InterruptedException {
// //Test the creation of a rule out of
final Configuration triggerConfig = new Configuration(Stream.of(new SimpleEntry<>("itemName", "myMotionItem3")).collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue())));
final Configuration actionConfig = new Configuration(Stream.of(new SimpleEntry<>("itemName", "myLampItem3"), new SimpleEntry<>("command", "ON")).collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue())));
final Rule rule = new Rule("myRule21" + new Random().nextInt() + "_COMPOSITE");
rule.setTriggers(Arrays.asList(new Trigger[] { new Trigger("ItemStateChangeTrigger3", "core.ItemStateChangeTrigger", triggerConfig) }));
rule.setActions(Arrays.asList(new Action[] { new Action("ItemPostCommandAction3", "core.ItemCommandAction", actionConfig, null) }));
rule.setName("RuleByJAVA_API_WithCompositeTrigger");
logger.info("Rule created: {}", rule.getUID());
final RuleRegistry ruleRegistry = getService(RuleRegistry.class);
ruleRegistry.add(rule);
// Test rule
waitForAssert(() -> {
Assert.assertEquals(RuleStatus.IDLE, ruleRegistry.getStatusInfo(rule.getUID()).getStatus());
});
final Queue<Event> events = new LinkedList<>();
registerService(new EventSubscriber() {
@Override
public void receive(final Event event) {
logger.info("RuleEvent: {}", event.getTopic());
events.add(event);
}
@Override
public Set<String> getSubscribedEventTypes() {
return Collections.singleton(RuleStatusInfoEvent.TYPE);
}
@Override
public EventFilter getEventFilter() {
return null;
}
});
final EventPublisher eventPublisher = getService(EventPublisher.class);
eventPublisher.post(ItemEventFactory.createStateEvent("myPresenceItem3", OnOffType.ON));
eventPublisher.post(ItemEventFactory.createStateEvent("myMotionItem3", OnOffType.ON));
waitForAssert(() -> {
assertFalse(events.isEmpty());
RuleStatusInfoEvent event = (RuleStatusInfoEvent) events.remove();
assertEquals(RuleStatus.RUNNING, event.getStatusInfo().getStatus());
});
waitForAssert(() -> {
assertFalse(events.isEmpty());
RuleStatusInfoEvent event = (RuleStatusInfoEvent) events.remove();
assertEquals(RuleStatus.IDLE, event.getStatusInfo().getStatus());
});
}
use of org.eclipse.smarthome.core.events.Event in project smarthome by eclipse.
the class RuntimeRuleTest method itemStateUpdatedBySimpleRule.
@Test
public void itemStateUpdatedBySimpleRule() throws ItemNotFoundException, InterruptedException {
final Configuration triggerConfig = new Configuration(Stream.of(new SimpleEntry<>("eventSource", "myMotionItem2"), new SimpleEntry<>("eventTopic", "smarthome/*"), new SimpleEntry<>("eventTypes", "ItemStateEvent")).collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue())));
final Configuration actionConfig = new Configuration(Stream.of(new SimpleEntry<>("itemName", "myLampItem2"), new SimpleEntry<>("command", "ON")).collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue())));
final Rule rule = new Rule("myRule21" + new Random().nextInt());
rule.setTriggers(Arrays.asList(new Trigger[] { new Trigger("ItemStateChangeTrigger2", "core.GenericEventTrigger", triggerConfig) }));
rule.setActions(Arrays.asList(new Action[] { new Action("ItemPostCommandAction2", "core.ItemCommandAction", actionConfig, null) }));
// I would expect the factory to create the UID of the rule and the name to be in the list of parameters.
rule.setName("RuleByJAVA_API");
logger.info("Rule created: {}", rule.getUID());
final RuleRegistry ruleRegistry = getService(RuleRegistry.class);
ruleRegistry.add(rule);
ruleRegistry.setEnabled(rule.getUID(), true);
waitForAssert(() -> {
Assert.assertEquals(RuleStatus.IDLE, ruleRegistry.getStatusInfo(rule.getUID()).getStatus());
});
// Test rule
final EventPublisher eventPublisher = getService(EventPublisher.class);
Assert.assertNotNull(eventPublisher);
eventPublisher.post(ItemEventFactory.createStateEvent("myPresenceItem2", OnOffType.ON));
final Queue<Event> events = new LinkedList<>();
registerService(new EventSubscriber() {
@Override
public void receive(final Event event) {
logger.info("Event: {}", event.getTopic());
events.add(event);
}
@Override
public Set<String> getSubscribedEventTypes() {
return Collections.singleton(ItemCommandEvent.TYPE);
}
@Override
public EventFilter getEventFilter() {
return null;
}
});
eventPublisher.post(ItemEventFactory.createStateEvent("myMotionItem2", OnOffType.ON));
waitForAssert(() -> {
assertFalse(events.isEmpty());
ItemCommandEvent event = (ItemCommandEvent) events.remove();
assertEquals("smarthome/items/myLampItem2/command", event.getTopic());
assertEquals(OnOffType.ON, event.getItemCommand());
});
}
use of org.eclipse.smarthome.core.events.Event in project smarthome by eclipse.
the class RuntimeRuleTest method compareConditionWorks.
@Test
public void compareConditionWorks() {
final Configuration conditionConfig = newRightOperatorConfig("ON", "=");
final Map<String, String> inputs = Stream.of(new SimpleEntry<>("input", "someTrigger.someoutput")).collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue()));
final Condition condition = new Condition("id", "core.GenericCompareCondition", conditionConfig, inputs);
final CompareConditionHandler handler = new CompareConditionHandler(condition);
assertSatisfiedHandlerInput(handler, true, OnOffType.ON);
assertSatisfiedHandlerInput(handler, true, "ON");
assertSatisfiedHandlerInput(handler, false, OnOffType.OFF);
assertSatisfiedHandlerInput(handler, false, "OFF");
condition.setConfiguration(newRightOperatorConfig("21", "="));
assertSatisfiedHandlerInput(handler, true, 21);
assertSatisfiedHandlerInput(handler, false, 22);
condition.setConfiguration(newRightOperatorConfig("21", "<"));
assertSatisfiedHandlerInput(handler, true, 20);
assertSatisfiedHandlerInput(handler, false, 22);
assertSatisfiedHandlerInput(handler, true, 20l);
assertSatisfiedHandlerInput(handler, false, 22l);
assertSatisfiedHandlerInput(handler, true, 20.9d);
assertSatisfiedHandlerInput(handler, false, 21.1d);
condition.setConfiguration(newRightOperatorConfig("21", "<="));
assertSatisfiedHandlerInput(handler, true, 20);
assertSatisfiedHandlerInput(handler, true, 21);
assertSatisfiedHandlerInput(handler, false, 22);
assertSatisfiedHandlerInput(handler, true, 20l);
assertSatisfiedHandlerInput(handler, true, 21l);
assertSatisfiedHandlerInput(handler, false, 22l);
assertSatisfiedHandlerInput(handler, true, 20.9d);
assertSatisfiedHandlerInput(handler, true, 21.0d);
assertSatisfiedHandlerInput(handler, false, 21.1d);
condition.setConfiguration(newRightOperatorConfig("21", "<"));
assertSatisfiedHandlerInput(handler, true, 20);
assertSatisfiedHandlerInput(handler, false, 22);
assertSatisfiedHandlerInput(handler, true, 20l);
assertSatisfiedHandlerInput(handler, false, 22l);
assertSatisfiedHandlerInput(handler, true, 20.9d);
assertSatisfiedHandlerInput(handler, false, 21.1d);
condition.setConfiguration(newRightOperatorConfig("21", "<="));
assertSatisfiedHandlerInput(handler, true, 20);
assertSatisfiedHandlerInput(handler, true, 21);
assertSatisfiedHandlerInput(handler, false, 22);
assertSatisfiedHandlerInput(handler, true, 20l);
assertSatisfiedHandlerInput(handler, true, 21l);
assertSatisfiedHandlerInput(handler, false, 22l);
assertSatisfiedHandlerInput(handler, true, 20.9d);
assertSatisfiedHandlerInput(handler, true, 21.0d);
assertSatisfiedHandlerInput(handler, false, 21.1d);
condition.setConfiguration(newRightOperatorConfig(".*anything.*", "matches"));
assertSatisfiedHandlerInput(handler, false, "something matches?");
assertSatisfiedHandlerInput(handler, true, "anything matches?");
Assert.assertFalse(handler.isSatisfied(Stream.of(new SimpleEntry<>("nothing", "nothing")).collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue()))));
condition.setConfiguration(newRightOperatorConfig("ONOFF", "matches"));
assertSatisfiedHandlerInput(handler, false, OnOffType.ON);
final Event event = ItemEventFactory.createStateEvent("itemName", OnOffType.OFF, "source");
condition.setConfiguration(newRightOperatorInputPropertyConfig(".*ON.*", "matches", "itemName"));
assertSatisfiedHandlerInput(handler, false, event);
condition.setConfiguration(newRightOperatorInputPropertyConfig("itemName", "matches", "itemName"));
assertSatisfiedHandlerInput(handler, true, event);
condition.setConfiguration(newRightOperatorConfig("null", "="));
assertSatisfiedHandlerInput(handler, true, null);
condition.setConfiguration(newRightOperatorConfig("notnull", "="));
assertSatisfiedHandlerInput(handler, false, null);
condition.setConfiguration(newRightOperatorConfig("ON", "<"));
assertSatisfiedHandlerInput(handler, false, OnOffType.ON);
condition.setConfiguration(newRightOperatorInputPropertyConfig("ON", "<", "nothing"));
assertSatisfiedHandlerInput(handler, false, event);
condition.setConfiguration(newRightOperatorInputPropertyConfig("ON", "=", "nothing"));
assertSatisfiedHandlerInput(handler, true, "ON");
}
use of org.eclipse.smarthome.core.events.Event in project smarthome by eclipse.
the class EventHandler method handleEvent.
private void handleEvent(final String type, final String payload, final String topic, @Nullable final String source) {
final EventFactory eventFactory = typedEventFactories.get(type);
if (eventFactory == null) {
logger.debug("Could not find an Event Factory for the event type '{}'.", type);
return;
}
final Set<EventSubscriber> eventSubscribers = getEventSubscribers(type);
if (eventSubscribers.isEmpty()) {
return;
}
final Event eshEvent = createESHEvent(eventFactory, type, payload, topic, source);
if (eshEvent == null) {
return;
}
dispatchESHEvent(eventSubscribers, eshEvent);
}
Aggregations