-
Notifications
You must be signed in to change notification settings - Fork 781
Scripted Rule Support
Basic scripted rule support documentation can be found at https://www.openhab.org/docs/configuration/jsr223.html.
Further readings with much more advanced examples:
- Jython: https://github.com/smerschjohann/docker-oh2-jsr223
- Jython: https://github.com/steve-bate/openhab2-jython
- JavaScript: https://github.com/lewie/openhab2-javascript
- Install Build
- Create the directory [openHAB-folder]/conf/automation/jsr223 and copy your scripts into it.
- Run openHAB, in Paper UI go to Add-ons>MISC and install Rule Engine (Experimental)
This is how I got the scripted rule support running within the IDE.
Include the following bundles in the launch config:
org.eclipse.smarthome.automation.module.core
org.eclipse.smarthome.automation.api
org.eclipse.smarthome.automation.provider.file
org.eclipse.smarthome.automation.rest
org.eclipse.smarthome.automation.module.script.rulesupport
org.eclipse.smarthome.automation.module.timer
org.eclipse.smarthome.automation.providers
org.eclipse.smarthome.automation.parser.gson
org.eclipse.smarthome.automation.core
org.eclipse.smarthome.automation.module.script
Add this as a VM argument in the launch config: [openHAB-folder]/runtime/bin/[setenv|setenv.bat]
-Dorg.osgi.framework.bundle.parent=ext
Scripts are searched for in conf/automation/jsr223
.
The following example.js
worked for me:
'use strict';
scriptExtension.importPreset("RuleSupport");
scriptExtension.importPreset("RuleSimple");
var sRule = new SimpleRule() {
execute: function( module, input) {
print("This is a 'hello world!' from a Javascript rule.");
}
};
sRule.setTriggers([
TriggerBuilder.create()
.withId("aTimerTrigger")
.withTypeUID("timer.GenericCronTrigger")
.withConfiguration(
new Configuration({
"cronExpression": "0 * * * * ?"
})).build()
]);
automationManager.addRule(sRule);
Download jython-standalone-x.y.z.jar from http://www.jython.org/downloads.html
Add this library to the "Bootstrap entries" on the main page of the launch config by simply putting it with its full path there.
The following example.py
worked for me:
scriptExtension.importPreset("RuleSupport")
scriptExtension.importPreset("RuleSimple")
class myRule(SimpleRule):
def execute(self, module, inputs):
print "This is a 'hello world!' from Jython rule."
sRule = myRule()
sRule.setTriggers([
TriggerBuilder.create()
.withId("aTimerTrigger")
.withTypeUID("timer.GenericCronTrigger")
.withConfiguration(
Configuration({
"cronExpression": "0 * * * * ?"
})).build()
])
automationManager.addRule(sRule)
- Download https://dl.bintray.com/groovy/maven/apache-groovy-binary-2.4.12.zip
- Extract /groovy-2.4.12/lib/groovy*.jar to /runtime/lib/ext
- Start runtime and install Rule Engine (Experimental) (Paper UI -> Add-ons -> Misc)
- Add example.groovy file to /conf/automation/jsr223 with the following contents:
The following example.groovy
worked for me:
import org.eclipse.smarthome.automation.*
import org.eclipse.smarthome.automation.module.script.rulesupport.shared.simple.*
import org.eclipse.smarthome.config.core.Configuration
scriptExtension.importPreset("RuleSupport")
scriptExtension.importPreset("RuleSimple")
def sRule = new SimpleRule() {
Object execute(Action module, Map<String, ?> inputs) {
println("Hello World from Groovy")
}
}
sRule.setTriggers([
TriggerBuilder.create()
.withId("aTimerTrigger")
.withTypeUID("timer.GenericCronTrigger")
.withConfiguration(new Configuration([cronExpression: "0 * * * * ?"]))
.build()
])
automationManager.addRule(sRule)
- using nightly deb package from repo
- install openhab2 using the debian package (version 2.1+)
- Create the directory /etc/openhab2/automation/jsr223 and copy your scripts into it.
- Run openHAB, in Paper UI go to Add-ons>MISC and install Rule Engine (Experimental)
- From http://www.jython.org/downloads.html download jython-standalone-x.y.z.jar to the directory:
/usr/share/openhab2/runtime/lib/boot/
. - Restart openhab2:
service openhab2 restart