OH3RuleEngine is an pure JVM alternative to Openhab rules-dsl.
For most of the users rule-dsl would be enough, for more advanced users rule-dsl has some limits which does not exists when using OH3RuleEngine
Those limitations are:
- Pure IDE support for hand writing *.rules files
- No support for classes objects
- Limited code reuse
- Java 11
TBD
Connecting to your openhab is simple as it:
var client = new OpenhabClientImpl("http://192.168.0.132:8080", "login", "password");
new OpenhabRuleEngine(
client,
List.of(
new TestRule()
)
).start().join();
OH3RuleEngine provides you two ways of creating rules
static class TestRule extends Rule {
@Override
public String name(){
return "Test";
}
@Override
public Condition when() {
return onStartup();
}
@Override
public void run() {
System.out.println("Foobar");
}
}
rule("Test")
.when(onStartup())
.then(() -> {
System.out.println("Foobar");
})
This approach is not recommended as it can lead to mess in the code.
public class TerrariumTemperatureRule extends Rule {
private final String currentTempItem;
private final String targetTempItem;
private final String heatingItem;
public TerrariumTemperatureRule(String terrariumId) {
this.currentTempItem = terrariumId+"_Actual_Temperature";
this.targetTempItem = terrariumId+"_Target_Temperature";
this.heatingItem = terrariumId+"_Heating";
}
@Override
public Condition when() {
return or(
itemChanged(currentTempItem),
itemChanged(targetTempItem),
onStartup()
);
}
@Override
public void run() {
if(getNumber(currentTempItem) > getNumber(targetTempItem)){
setState(heatingItem, OFF);
} else {
setState(heatingItem, ON);
}
}
}
itemChanged("FOO");
itemChangedTo("FOO", "12");
itemChanged("FOO").to("12");
itemChangedTo("FOO", item("BAR"));
itemChanged("FOO").to(item("BAR"));
anyOf(itemChanged("FOO"), itemChanged("BAR"));
or(itemChanged("FOO"), itemChanged("BAR"));
itemChanged("FOO").or(itemChanged("BAR"));
allOf(itemChanged("FOO"), itemChanged("BAR"));
and(itemChanged("FOO"), itemChanged("BAR"));
itemChanged("FOO").and(itemChanged("BAR"));
cron("* * * * * *"); // execute every second
cron("0 * * * * *"); // execute every minute
- Define items via code
- Define things via code
- Code to sitemap compilator