1166 lines
61 KiB
HTML
1166 lines
61 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
|
||
|
||
|
||
|
||
<!--<link rel="shortcut icon" href="https://www.openhab.org/favicon.png"></link>-->
|
||
<title>Rules - openHAB 2 - Empowering the Smart Home</title>
|
||
|
||
<!-- CSS -->
|
||
<link type="text/css" rel="stylesheet" href="/v2.1/css/materialize.css" media="screen,projection" />
|
||
<link type="text/css" rel="stylesheet" href="/v2.1/css/pygments-jekyll-style.css" />
|
||
<link type="text/css" rel="stylesheet" href="/v2.1/css/styles.css" />
|
||
<link type="text/css" rel="stylesheet" href="/v2.1/css/openhab.css" />
|
||
<link type="text/css" rel="stylesheet" href="/v2.1/css/collapsible.css" />
|
||
|
||
<!-- Font -->
|
||
<link type="text/css" rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons" />
|
||
<link type="text/css" rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:300,400,700" />
|
||
<link rel="canonical" href="http://docs.openhab.org/configuration/rules-dsl.html" />
|
||
<script type="text/javascript">var gaProperty = 'UA-47717934-3';var disableStr = 'ga-disable-' + gaProperty;if (document.cookie.indexOf(disableStr + '=true') > -1) {window[disableStr] = true;}</script>
|
||
<script>
|
||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
|
||
ga('create', 'UA-47717934-3', 'auto');
|
||
ga('set', 'anonymizeIp', true);
|
||
ga('send', 'pageview');
|
||
</script>
|
||
</head>
|
||
|
||
|
||
<body class="documentation">
|
||
<div id="header" class="navbar-fixed">
|
||
<nav role="navigation">
|
||
<div class="container">
|
||
<div class="nav-wrapper">
|
||
<a href="/v2.1/index.html"><img id="logo" src="/images/logo.png" /></a>
|
||
<a href="#" data-activates="nav-mobile" class="button-collapse"><i class="material-icons">menu</i></a>
|
||
<ul class="right hide-on-med-and-down">
|
||
<li><a href="/tutorials/index.html">Tutorials</a></li>
|
||
<li><a href="/v2.1/introduction.html">User Manual</a></li>
|
||
<li><a href="/developers/index.html">Developer Guide</a></li>
|
||
<li><a target="_blank" href="https://community.openhab.org">Community Forum</a></li>
|
||
<li><a target="_blank" href="https://github.com/openhab">GitHub</a></li>
|
||
<li class="search"><i class="material-icons">search</i></li>
|
||
<li class="search">
|
||
<form method="GET" id="searchform" class="search-form" action="/search">
|
||
<input id="query" name="q" type="text" class="search-form-input" placeholder="search" />
|
||
</form>
|
||
</li>
|
||
</ul>
|
||
<ul id="nav-mobile" class="side-nav">
|
||
<li><a href="/v2.1/index.html">Home</a></li>
|
||
<li><a href="/tutorials/index.html">Tutorials</a></li>
|
||
<li><a href="/v2.1/introduction.html">User Manual</a></li>
|
||
<li><a href="/developers/index.html">Developer Guide</a></li>
|
||
<li><a target="_blank" href="https://community.openhab.org">Community Forum</a></li>
|
||
<li><a target="_blank" href="https://github.com/openhab">GitHub</a></li>
|
||
<li class="search">
|
||
<form method="GET" id="searchformmob" class="search-form" action="/search">
|
||
<input id="querymob" name="q" type="text" class="search-form-input" placeholder="search" />
|
||
</form>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</nav>
|
||
</div>
|
||
|
||
|
||
<section id="documentation" class="text content-wrapper">
|
||
<div class="container">
|
||
<div class="side-nav-wrapper">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<ul class="nav">
|
||
<li><a href="/v2.1/introduction.html">Introduction</a></li>
|
||
<li><a href="/v2.1/concepts/index.html">Concepts</a>
|
||
<ul>
|
||
<li><a href="/v2.1/concepts/index.html">Overview</a></li>
|
||
<hr />
|
||
<li><a href="/v2.1/concepts/things.html">Things</a></li>
|
||
<li><a href="/v2.1/concepts/items.html">Items</a></li>
|
||
<li><a href="/v2.1/concepts/discovery.html">Inbox & Discovery</a></li>
|
||
<li><a href="/v2.1/concepts/audio.html">Audio & Voice</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="/v2.1/installation/index.html">Installation</a>
|
||
<ul>
|
||
<li><a href="/v2.1/installation/index.html">Overview</a></li>
|
||
<hr />
|
||
<li><a href="/v2.1/installation/linux.html">Linux</a></li>
|
||
<li><a href="/v2.1/installation/windows.html">Windows</a></li>
|
||
<li><a href="/v2.1/installation/macosx.html">Mac OS X</a></li>
|
||
<hr />
|
||
<li><a href="/v2.1/installation/openhabian.html">openHABian</a></li>
|
||
<li><a href="/v2.1/installation/docker.html">Docker</a></li>
|
||
<hr />
|
||
<li><a href="/v2.1/installation/rasppi.html">Raspberry Pi</a></li>
|
||
<li><a href="/v2.1/installation/pine.html">Pine A64</a></li>
|
||
<li><a href="/v2.1/installation/synology.html">Synology DiskStation</a></li>
|
||
<li><a href="/v2.1/installation/qnap.html">QNAP NAS</a></li>
|
||
<hr />
|
||
<li><a href="/v2.1/installation/designer.html">SmartHome Designer</a></li>
|
||
<li><a href="/v2.1/installation/security.html">Security & Remote Access</a></li>
|
||
<li><a href="http://www.myopenhab.org">myopenHAB</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="/v2.1/configuration/index.html">Configuration</a>
|
||
<ul>
|
||
<li><a href="/v2.1/configuration/index.html">Overview</a></li>
|
||
<hr />
|
||
<li><a href="/v2.1/configuration/things.html">Things</a></li>
|
||
<li><a href="/v2.1/configuration/items.html">Items</a></li>
|
||
<li><a href="/v2.1/configuration/sitemaps.html">Sitemaps</a></li>
|
||
<li><a href="/v2.1/configuration/transform.html">Transformations</a></li>
|
||
<li><a href="/v2.1/configuration/persistence.html">Persistence</a></li>
|
||
<li><a href="/v2.1/configuration/rules-dsl.html">Rules</a></li>
|
||
<li><a href="/v2.1/configuration/services.html">Services</a></li>
|
||
<hr />
|
||
<li><a href="/v2.1/configuration/packages.html">Initial Setup Packages</a></li>
|
||
<li><a href="/v2.1/configuration/paperui.html">Paper UI</a></li>
|
||
<li><a href="/v2.1/configuration/habmin.html">HABmin</a></li>
|
||
<li><a href="/v2.1/configuration/rules-ng.html">Rules (Experimental)</a></li>
|
||
<hr />
|
||
<li><a href="/v2.1/configuration/multimedia.html">Audio & Voice</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="/v2.1/addons/index.html">Add-ons</a>
|
||
<ul>
|
||
<li><a href="/v2.1/addons/index.html">Overview</a></li>
|
||
<hr />
|
||
<li><a href="/v2.1/addons/bindings.html">Bindings</a>
|
||
<ul>
|
||
<li><a href="/v2.1/addons/bindings.html">Overview</a></li>
|
||
<hr />
|
||
|
||
<li><a href="/v2.1/addons/bindings/airquality/readme.html">Air Quality</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/akm8681/readme.html">AKM868</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/alarmdecoder1/readme.html">Alarm Decoder</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/allplay/readme.html">AllPlay</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/amazondashbutton/readme.html">Amazon Dash Button</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/anel1/readme.html">Anel NET-PwrCtrl</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/asterisk1/readme.html">Asterisk</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/astro/readme.html">Astro</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/astro1/readme.html">Astro</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/atlona/readme.html">Atlona</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/autelis/readme.html">Autelis Pool Control</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/autelis1/readme.html">Autelis</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/avmfritz/readme.html">AVM FRITZ!</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/benqprojector1/readme.html">BenQ Projector</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/bigassfan/readme.html">BigAssFan</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/bluetooth1/readme.html">Bluetooth</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/boschindego/readme.html">Bosch Indego</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/bticino1/readme.html">Bticino</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/caldav-command1/readme.html">CalDAV Command</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/caldav-personal1/readme.html">CalDAV Personal</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/chromecast/readme.html">Chromecast</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/comfoair1/readme.html">ComfoAir</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/configadmin1/readme.html">ConfigAdmin</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/coolmasternet/readme.html">CoolMasterNet</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/cups1/readme.html">CUPS</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/daikin1/readme.html">Daikin</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/davis1/readme.html">Davis</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/ddwrt1/readme.html">DD-WRT</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/denon1/readme.html">Denon</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/digitalstrom/readme.html">digitalSTROM</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/digitalstrom1/readme.html">digitalSTROM</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/diyonxbee1/readme.html">DIYOnXBee</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/dlinksmarthome/readme.html">D-Link Smart Home</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/dmx1/readme.html">DMX</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/dscalarm/readme.html">DSC Alarm</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/dscalarm1/readme.html">DSC PowerSeries Alarm System</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/dsmr1/readme.html">DSMR</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/ebus1/readme.html">eBUS</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/ecobee1/readme.html">Ecobee</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/ecotouch1/readme.html">EcoTouch</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/ekey1/readme.html">ekey</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/energenie1/readme.html">Energenie</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/enocean1/readme.html">EnOcean</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/enphaseenergy1/readme.html">Enphase Energy</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/epsonprojector1/readme.html">Epson Projector</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/exec/readme.html">Exec</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/exec1/readme.html">Exec</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/expire1/readme.html">Expire</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/fatekplc1/readme.html">Fatek PLC</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/feed/readme.html">Feed</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/fht1/readme.html">FHT</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/folding/readme.html">Folding@home</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/freebox/readme.html">Freebox</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/freebox1/readme.html">Freebox</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/freeswitch1/readme.html">FreeSWITCH</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/fritzaha1/readme.html">Fritz AHA</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/fritzbox1/readme.html">Fritz!Box</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/fritzboxtr0641/readme.html">Fritzbox (using TR064 protocol)</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/frontiersiliconradio1/readme.html">Frontier Silicon Radio</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/fs201/readme.html">FS20</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/fsinternetradio/readme.html">FS Internet Radio</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/garadget1/readme.html">Garadget</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/gardena/readme.html">Gardena</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/gc100ir1/readme.html">Global Cache IR</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/globalcache/readme.html">GlobalCache</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/gpio1/readme.html">GPIO</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/harmonyhub/readme.html">Logitech Harmony Hub</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/harmonyhub1/readme.html">Harmony Hub</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/hdanywhere/readme.html">HDanywhere</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/hdanywhere1/readme.html">HDanywhere</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/hdpowerview/readme.html">Hunter Douglas PowerView</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/heatmiser1/readme.html">Heatmiser</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/hms1/readme.html">HMS</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/homematic/readme.html">Homematic</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/homematic1/readme.html">Homematic</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/horizon1/readme.html">Horizon mediabox</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/http1/readme.html">HTTP</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/hue/readme.html">Philips Hue</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/hue1/readme.html">Hue</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/iec6205621meter1/readme.html">IEC 62056-21 Meter</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/ihc1/readme.html">IHC / ELKO</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/insteonhub1/readme.html">Insteon Hub</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/insteonplm1/readme.html">Insteon PLM</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/intertechno1/readme.html">Intertechno</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/ipp/readme.html">IPP</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/ipx8001/readme.html">IPX800</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/irtrans1/readme.html">IRTrans</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/isy1/readme.html">Description</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/jointspace1/readme.html">jointSPACE</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/k80551/readme.html">Velleman k8055 USB IO Board</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/keba/readme.html">Keba</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/km2001/readme.html">KM200</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/knx1/readme.html">KNX</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/kodi/readme.html">Kodi</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/kostalinverter/readme.html">Kostal Inverter</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/koubachi1/readme.html">Koubachi</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/lcn1/readme.html">LCN</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/lgtv1/readme.html">LG TV</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/lgtvserial/readme.html">LG TV control using serial protocol</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/lifx/readme.html">LIFX</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/lightwaverf1/readme.html">LightwaveRF</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/lutron/readme.html">Lutron</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/mailcontrol1/readme.html">MailControl</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/max/readme.html">MAX!</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/maxcube1/readme.html">MAX!Cube</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/maxcul1/readme.html">MAX!CUL</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/mcp230171/readme.html">MCP23017</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/mcp34241/readme.html">MCP3424</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/meteostick/readme.html">Meteostick</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/miele/readme.html">Miele@home</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/mihome/readme.html">Xiaomi Mi Smart Home</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/milight/readme.html">Milight/Easybulb/Limitless</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/milight1/readme.html">Milight</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/minecraft/readme.html">Minecraft</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/mios1/readme.html">MiOS Bridge</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/mochadx101/readme.html">Mochad X10</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/modbus1/readme.html">Modbus</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/mpd1/readme.html">MPD</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/mqtt1/readme.html">MQTT</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/mqttitude1/readme.html">OwnTracks (formerly MQTTitude)</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/myq1/readme.html">Chamberlain MyQ</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/mystromecopower1/readme.html">Mystrom Eco Power</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/neohub1/readme.html">NeoHub</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/nest1/readme.html">Nest</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/netatmo/readme.html">Netatmo</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/netatmo1/readme.html">Netatmo</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/network/readme.html">Network</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/networkhealth1/readme.html">Network Health</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/networkupstools1/readme.html">Network UPS Tools</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/nibeheatpump1/readme.html">Nibe Heatpump</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/nikobus1/readme.html">Nikobus</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/nikohomecontrol/readme.html">Niko Home Control</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/novelanheatpump1/readme.html">Novelan/Luxtronic Heat Pump</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/ntp/readme.html">NTP</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/ntp1/readme.html">Network Time Protocol (NTP)</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/oceanic/readme.html">Oceanic</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/omnilink1/readme.html">HAI/Leviton Omni and Lumina</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/onebusaway/readme.html">OneBusAway</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/onewire1/readme.html">OneWire</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/onkyo/readme.html">Onkyo</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/onkyo1/readme.html">Onkyo AV Receiver</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/openenergymonitor1/readme.html">Open Energy Monitor</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/openpaths1/readme.html">OpenPaths</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/opensprinkler/readme.html">OpenSprinkler</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/opensprinkler1/readme.html">OpenSprinkler</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/orvibo/readme.html">Orvibo</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/owserver1/readme.html">OWServer</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/panasonictv1/readme.html">Panasonic TV</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/panstamp1/readme.html">panStamp</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/piface1/readme.html">Piface</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/pilight1/readme.html">pilight</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/pioneeravr/readme.html">PioneerAVR Configuration</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/pioneeravr1/readme.html">Pioneer AV Receiver (1.x)</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/plcbus1/readme.html">PLCBus</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/plclogo1/readme.html">PLCLogo</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/plex1/readme.html">Plex</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/plugwise1/readme.html">Plugwise</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/powerdoglocalapi1/readme.html">PowerDog Local API</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/powermax1/readme.html">Visonic Powermax</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/primare1/readme.html">Primare</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/pulseaudio/readme.html">Pulseaudio</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/pulseaudio1/readme.html">Pulseaudio</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/rfxcom/readme.html">RFXCOM</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/rfxcom1/readme.html">RFXCOM</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/rme/readme.html">RME</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/rpircswitch1/readme.html">Raspberry Pi RC Switch</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/russound/readme.html">Russound</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/rwesmarthome1/readme.html">RWE SmartHome</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/sagercaster1/readme.html">Sager Weathercaster</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/sallegra1/readme.html">Sallegra</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/samsungac1/readme.html">Samsung Air Conditioner</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/samsungtv/readme.html">Samsung TV</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/samsungtv1/readme.html">Samsung TV</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/sapp1/readme.html">Picnet Sapp</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/satel1/readme.html">Satel Integra Alarm System</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/sensebox/readme.html">senseBox</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/serial1/readme.html">Serial</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/silvercrestwifisocket/readme.html">Silvercrest Wifi Plug</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/sleepiq/readme.html">SleepIQ</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/smaenergymeter/readme.html">SMA Energy Meter</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/smarthomatic1/readme.html">Smarthomatic</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/snmp1/readme.html">SNMP</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/sonance1/readme.html">Sonance</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/sonos/readme.html">Sonos</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/sonos1/readme.html">Sonos</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/souliss1/readme.html">Souliss</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/squeezebox/readme.html">Logitech Squeezebox</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/squeezebox1/readme.html">Squeezebox</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/stiebelheatpump1/readme.html">Stiebel Eltron LWZ</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/swegonventilation1/readme.html">Swegon Ventilation</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/synopanalyzer/readme.html">Synop Analyzer</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/systeminfo/readme.html">Systeminfo</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/systeminfo1/readme.html">System Information</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/tacmi1/readme.html">TACmi</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/tankerkoenig/readme.html">Tankerkönig</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/tcp1/readme.html">TCP & UDP</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/tellstick/readme.html">Tellstick</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/tellstick1/readme.html">Tellstick</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/tesla/readme.html">Tesla</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/tinkerforge1/readme.html">TinkerForge</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/tivo1/readme.html">TiVo</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/toon/readme.html">Toon</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/tradfri/readme.html">Trådfri</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/ucprelayboard1/readme.html">UCProjects.eu Relay Board</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/upb1/readme.html">UPB</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/urtsi/readme.html">Somfy URTSI II</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/urtsi1/readme.html">Somfy URTSI II</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/vdr1/readme.html">Video Disk Recorder (VDR)</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/vitotronic/readme.html">Vitotronic</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/wago1/readme.html">WAGO</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/weather1/readme.html">Weather</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/wemo/readme.html">Belkin Wemo</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/wemo1/readme.html">Wemo</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/wifiled/readme.html">WiFi LED</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/windcentrale/readme.html">Windcentrale</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/withings1/readme.html">Withings</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/wol1/readme.html">Wake-on-LAN</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/wr32231/readme.html">WR3223 ventilation controller</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/xbmc1/readme.html">XBMC binding (for KODI) (1.x)</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/xpl1/readme.html">xPL</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/yahooweather/readme.html">YahooWeather</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/yamahareceiver/readme.html">Yamahareceiver</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/yamahareceiver1/readme.html">Yamaha Receiver (1.x)</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/zibase1/readme.html">Zibase</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/zigbee/readme.html">ZigBee</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/zoneminder/readme.html">Zoneminder</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/zwave/readme.html">ZWave</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/zwave1/readme.html">Z-Wave</a></li>
|
||
|
||
<li><a href="/v2.1/addons/bindings/zway/readme.html">Z-Way</a></li>
|
||
|
||
</ul>
|
||
</li>
|
||
<li><a href="/v2.1/addons/uis.html">User Interfaces</a>
|
||
<ul>
|
||
<li><a href="/v2.1/addons/uis.html">Overview</a></li>
|
||
<hr />
|
||
|
||
<li><a href="/v2.1/addons/uis/basic/readme.html">Basic UI</a></li>
|
||
|
||
<li><a href="/v2.1/addons/uis/classic/readme.html">Classic UI</a></li>
|
||
|
||
<li><a href="/v2.1/addons/uis/habmin/readme.html">HABmin</a></li>
|
||
|
||
<li><a href="/v2.1/addons/uis/habpanel/readme.html">HABPanel</a></li>
|
||
|
||
<li><a href="/v2.1/addons/uis/paper/readme.html">Paper UI</a></li>
|
||
|
||
<hr />
|
||
<li><a href="/v2.1/addons/uis/apps/android.html">Android openHAB App</a></li>
|
||
<li><a href="/v2.1/addons/uis/apps/ios.html">iOS openHAB App</a></li>
|
||
<li><a href="/v2.1/addons/uis/apps/windows.html">Windows 10 openHAB App</a></li>
|
||
<hr />
|
||
<li><a href="/v2.1/addons/iconsets/classic/readme.html">Iconset (classic)</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="/v2.1/addons/persistence.html">Persistence</a>
|
||
<ul>
|
||
<li><a href="/v2.1/addons/persistence.html">Overview</a></li>
|
||
<hr />
|
||
|
||
<li><a href="/v2.1/addons/persistence/caldav/readme.html">CalDAV</a></li>
|
||
|
||
<li><a href="/v2.1/addons/persistence/cosm/readme.html">Xively (formerly Cosm)</a></li>
|
||
|
||
<li><a href="/v2.1/addons/persistence/db4o/readme.html">db4o</a></li>
|
||
|
||
<li><a href="/v2.1/addons/persistence/dynamodb/readme.html">Amazon DynamoDB</a></li>
|
||
|
||
<li><a href="/v2.1/addons/persistence/exec/readme.html">Exec</a></li>
|
||
|
||
<li><a href="/v2.1/addons/persistence/influxdb/readme.html">InfluxDB (0.9 and newer)</a></li>
|
||
|
||
<li><a href="/v2.1/addons/persistence/influxdb08/readme.html">InfluxDB (up to 0.8.x)</a></li>
|
||
|
||
<li><a href="/v2.1/addons/persistence/jdbc/readme.html">JDBC</a></li>
|
||
|
||
<li><a href="/v2.1/addons/persistence/jpa/readme.html">Java Persistence API (JPA)</a></li>
|
||
|
||
<li><a href="/v2.1/addons/persistence/mapdb/readme.html">mapdb</a></li>
|
||
|
||
<li><a href="/v2.1/addons/persistence/mongodb/readme.html">MongoDB</a></li>
|
||
|
||
<li><a href="/v2.1/addons/persistence/mqtt/readme.html">MQTT</a></li>
|
||
|
||
<li><a href="/v2.1/addons/persistence/mysql/readme.html">MySQL</a></li>
|
||
|
||
<li><a href="/v2.1/addons/persistence/rrd4j/readme.html">rrd4j</a></li>
|
||
|
||
<li><a href="/v2.1/addons/persistence/sense/readme.html">Sen.Se</a></li>
|
||
|
||
<li><a href="/v2.1/addons/persistence/sitewhere/readme.html">SiteWhere</a></li>
|
||
|
||
</ul>
|
||
</li>
|
||
<li><a href="/v2.1/addons/actions.html">Actions</a>
|
||
<ul>
|
||
<li><a href="/v2.1/addons/actions.html">Overview</a></li>
|
||
<hr />
|
||
|
||
<li><a href="/v2.1/addons/actions/astro/readme.html">Astro</a></li>
|
||
|
||
<li><a href="/v2.1/addons/actions/ciscospark/readme.html">Cisco Spark</a></li>
|
||
|
||
<li><a href="/v2.1/addons/actions/dscalarm/readme.html">DSC Alarm</a></li>
|
||
|
||
<li><a href="/v2.1/addons/actions/ecobee/readme.html">Ecobee</a></li>
|
||
|
||
<li><a href="/v2.1/addons/actions/harmonyhub/readme.html">Logitech Harmony Hub</a></li>
|
||
|
||
<li><a href="/v2.1/addons/actions/homematic/readme.html">Homematic</a></li>
|
||
|
||
<li><a href="/v2.1/addons/actions/mail/readme.html">Mail</a></li>
|
||
|
||
<li><a href="/v2.1/addons/actions/mios/readme.html">MiOS</a></li>
|
||
|
||
<li><a href="/v2.1/addons/actions/mqtt/readme.html">MQTT</a></li>
|
||
|
||
<li><a href="/v2.1/addons/actions/nma/readme.html">NotifyMyAndroid</a></li>
|
||
|
||
<li><a href="/v2.1/addons/actions/openwebif/readme.html">OpenWebIf</a></li>
|
||
|
||
<li><a href="/v2.1/addons/actions/pebble/readme.html">Pebble</a></li>
|
||
|
||
<li><a href="/v2.1/addons/actions/prowl/readme.html">Prowl</a></li>
|
||
|
||
<li><a href="/v2.1/addons/actions/pushover/readme.html">Pushover</a></li>
|
||
|
||
<li><a href="/v2.1/addons/actions/pushsafer/readme.html">Pushsafer</a></li>
|
||
|
||
<li><a href="/v2.1/addons/actions/satel/readme.html">Satel</a></li>
|
||
|
||
<li><a href="/v2.1/addons/actions/squeezebox/readme.html">Squeezebox</a></li>
|
||
|
||
<li><a href="/v2.1/addons/actions/telegram/readme.html">Telegram</a></li>
|
||
|
||
<li><a href="/v2.1/addons/actions/tinkerforge/readme.html">TinkerForge</a></li>
|
||
|
||
<li><a href="/v2.1/addons/actions/twitter/readme.html">Twitter</a></li>
|
||
|
||
<li><a href="/v2.1/addons/actions/weather/readme.html">Weather</a></li>
|
||
|
||
<li><a href="/v2.1/addons/actions/xbmc/readme.html">XBMC</a></li>
|
||
|
||
<li><a href="/v2.1/addons/actions/xmpp/readme.html">XMPP</a></li>
|
||
|
||
<li><a href="/v2.1/addons/actions/xpl/readme.html">xPL</a></li>
|
||
|
||
</ul>
|
||
</li>
|
||
<li><a href="/v2.1/addons/transformations.html">Transformations</a>
|
||
<ul>
|
||
<li><a href="/v2.1/addons/transformations.html">Overview</a></li>
|
||
<hr />
|
||
|
||
<li><a href="/v2.1/addons/transformations/exec/readme.html">Exec</a></li>
|
||
|
||
<li><a href="/v2.1/addons/transformations/javascript/readme.html">JavaScript</a></li>
|
||
|
||
<li><a href="/v2.1/addons/transformations/jsonpath/readme.html">JsonPath</a></li>
|
||
|
||
<li><a href="/v2.1/addons/transformations/map/readme.html">Map</a></li>
|
||
|
||
<li><a href="/v2.1/addons/transformations/regex/readme.html">RegEx</a></li>
|
||
|
||
<li><a href="/v2.1/addons/transformations/scale/readme.html">Scale</a></li>
|
||
|
||
<li><a href="/v2.1/addons/transformations/xpath/readme.html">XPath</a></li>
|
||
|
||
<li><a href="/v2.1/addons/transformations/xslt/readme.html">XSLT</a></li>
|
||
|
||
</ul>
|
||
</li>
|
||
<li><a href="/v2.1/addons/voice.html">Voice Services</a>
|
||
<ul>
|
||
<li><a href="/v2.1/addons/voice.html">Overview</a></li>
|
||
<hr />
|
||
|
||
<li><a href="/v2.1/addons/voice/mactts/readme.html">MacOS Text-to-Speech</a></li>
|
||
|
||
<li><a href="/v2.1/addons/voice/marytts/readme.html">Mary Text-to-Speech</a></li>
|
||
|
||
<li><a href="/v2.1/addons/voice/voicerss/readme.html">VoiceRSS Text-to-Speech</a></li>
|
||
|
||
</ul>
|
||
</li>
|
||
<hr />
|
||
<li><a href="/v2.1/addons/io.html">3rd Party Integration</a>
|
||
<ul>
|
||
<li><a href="/v2.1/addons/io.html">Overview</a></li>
|
||
<hr />
|
||
|
||
<li><a href="/v2.1/addons/io/dropbox/readme.html">Dropbox Synchronization</a></li>
|
||
|
||
<li><a href="/v2.1/addons/io/gcal/readme.html">Google Calendar Scheduler</a></li>
|
||
|
||
<li><a href="/v2.1/addons/io/homekit/readme.html">HomeKit Add-on</a></li>
|
||
|
||
<li><a href="/v2.1/addons/io/hueemulation/readme.html">openHAB Hue Emulation</a></li>
|
||
|
||
<li><a href="/v2.1/addons/io/imperihome/readme.html">ImperiHome integration service</a></li>
|
||
|
||
<li><a href="/v2.1/addons/io/openhabcloud/readme.html">openHAB Cloud Connector</a></li>
|
||
|
||
<hr />
|
||
<li><a href="/v2.1/configuration/restdocs.html">REST API</a></li>
|
||
<li><a href="http://www.myopenhab.org/" target="_blank">IFTTT</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="/v2.1/administration/index.html">Advanced Functionality</a>
|
||
<ul>
|
||
<li><a href="/v2.1/administration/index.html">Overview</a></li>
|
||
<hr />
|
||
<li><a href="/v2.1/administration/console.html">Console</a></li>
|
||
<li><a href="/v2.1/administration/runtime.html">Runtime Commands</a></li>
|
||
<li><a href="/v2.1/administration/bundles.html">Bundle Management</a></li>
|
||
<li><a href="/v2.1/administration/logging.html">Logging</a></li>
|
||
<hr />
|
||
<li><a href="/v2.1/administration/jsondb.html">JsonDB Storage</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="/v2.1/appendix/help.html">Community Guidance</a>
|
||
<ul>
|
||
<li><a href="/v2.1/appendix/help.html">Finding Help & FAQs</a></li>
|
||
<li><a href="/v2.1/appendix/contributing.html">Contributing</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
<div id="versioning" class="row valign-wrapper">
|
||
<div class="col s12 right-align">
|
||
<ul id="dropdown-versioning" class="dropdown-content">
|
||
<li><a href="/v2.1/../configuration/rules-dsl.html">latest version</a></li>
|
||
<li><a href="/v2.1/../v2.2/configuration/rules-dsl.html">v2.2</a></li>
|
||
<li><a href="/v2.1/configuration/rules-dsl.html">v2.1<i class="tiny material-icons right">lens</i></a></li>
|
||
</ul>
|
||
<a class="btn dropdown-button grey lighten-1" href="#!" data-activates="dropdown-versioning" title="Select which version of this openHAB documentation article you want to read.">
|
||
Switch Article Version<i class="material-icons right">arrow_drop_down</i>
|
||
</a>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="content">
|
||
|
||
<h1 id="textual-rules">Textual Rules</h1>
|
||
|
||
<p>“Rules” are used for automating processes: Each rule can be triggered, which invokes a script that performs any kinds of tasks, e.g. turn on lights by modifying your items, do mathematical calculations, start timers etcetera.</p>
|
||
|
||
<p>openHAB has a highly integrated, lightweight but yet powerful rule engine included.
|
||
On this page you will learn how to leverage its functionality to do <em>real</em> home automation.</p>
|
||
|
||
<ul id="markdown-toc">
|
||
<li><a href="#defining-rules" id="markdown-toc-defining-rules">Defining Rules</a> <ul>
|
||
<li><a href="#file-location" id="markdown-toc-file-location">File Location</a></li>
|
||
<li><a href="#ide-support" id="markdown-toc-ide-support">IDE Support</a></li>
|
||
<li><a href="#the-syntax" id="markdown-toc-the-syntax">The Syntax</a></li>
|
||
<li><a href="#rule-triggers" id="markdown-toc-rule-triggers">Rule Triggers</a></li>
|
||
<li><a href="#event-based-triggers" id="markdown-toc-event-based-triggers">Event-based Triggers</a></li>
|
||
<li><a href="#time-based-triggers" id="markdown-toc-time-based-triggers">Time-based Triggers</a></li>
|
||
<li><a href="#system-based-triggers" id="markdown-toc-system-based-triggers">System-based Triggers</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#scripts" id="markdown-toc-scripts">Scripts</a> <ul>
|
||
<li><a href="#implicit-variables-inside-the-execution-block" id="markdown-toc-implicit-variables-inside-the-execution-block">Implicit Variables inside the Execution Block</a></li>
|
||
<li><a href="#concurrency-guard" id="markdown-toc-concurrency-guard">Concurrency Guard</a></li>
|
||
<li><a href="#logging" id="markdown-toc-logging">Logging</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#example" id="markdown-toc-example">Example</a></li>
|
||
</ul>
|
||
|
||
<h2 id="defining-rules">Defining Rules</h2>
|
||
|
||
<h3 id="file-location">File Location</h3>
|
||
|
||
<p>Rules are placed in the folder <code class="highlighter-rouge">${openhab.home}/conf/rules</code>. The <a href="/v2.1/tutorials/demo.html">demo setup</a> already comes with a demo file called <code class="highlighter-rouge">demo.rules</code>, which has a couple of examples that can be a good starting point.</p>
|
||
|
||
<p>A rule file can contain multiple rules. All rules of a file share a common execution context, i.e. they can access and exchange variables with each other. It therefore makes sense to have different rule files for different use-cases or categories.</p>
|
||
|
||
<h3 id="ide-support">IDE Support</h3>
|
||
|
||
<p>The <a href="/v2.1/installation/designer.html">Eclipse SmartHome Designer</a> offers support for rules, which includes syntax checks and coloring, validation with error markers, content assist (Ctrl+Space) incl. templates etc. This makes the creation of rules very easy!</p>
|
||
|
||
<blockquote>
|
||
<p>Bug: Please note that there are a couple of <a href="https://github.com/eclipse/smarthome/issues?q=is%3Aopen+is%3Aissue+label%3ADesigner+label%3Abug">open bugs</a>, which result in error markers in the Designer, while the rules are executed nicely by the runtime.</p>
|
||
</blockquote>
|
||
|
||
<h3 id="the-syntax">The Syntax</h3>
|
||
|
||
<p>Note: The rule syntax is based on <a href="http://www.eclipse.org/Xtext/#xbase">Xbase</a> and as a result it is sharing many details with <a href="http://www.eclipse.org/xtend/">Xtend</a>, which is built on top of Xbase as well. As a result, we will often point to the Xtend documentation for details.</p>
|
||
|
||
<p>A rule file is a text file with the following structure:</p>
|
||
|
||
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[Imports]
|
||
|
||
[Variable Declarations]
|
||
|
||
[Rules]
|
||
</code></pre></div></div>
|
||
|
||
<p>The <strong><em>Imports</em></strong> section contains import statement just like in Java. As in Java, they make the imported types available without having to use the fully qualified name for them. For further details, please see the <a href="http://www.eclipse.org/xtend/documentation/202_xtend_classes_members.html#imports">Xtend documentation for imports</a>.</p>
|
||
|
||
<p>Example:</p>
|
||
|
||
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">java.net.URI</span>
|
||
</code></pre></div></div>
|
||
|
||
<p>A few default imports are already done, so classes from these packages do not need to be explicitly imported:</p>
|
||
|
||
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">org</span><span class="o">.</span><span class="na">eclipse</span><span class="o">.</span><span class="na">smarthome</span><span class="o">.</span><span class="na">core</span><span class="o">.</span><span class="na">items</span>
|
||
<span class="n">org</span><span class="o">.</span><span class="na">eclipse</span><span class="o">.</span><span class="na">smarthome</span><span class="o">.</span><span class="na">core</span><span class="o">.</span><span class="na">persistence</span>
|
||
<span class="n">org</span><span class="o">.</span><span class="na">eclipse</span><span class="o">.</span><span class="na">smarthome</span><span class="o">.</span><span class="na">core</span><span class="o">.</span><span class="na">library</span><span class="o">.</span><span class="na">types</span>
|
||
<span class="n">org</span><span class="o">.</span><span class="na">eclipse</span><span class="o">.</span><span class="na">smarthome</span><span class="o">.</span><span class="na">core</span><span class="o">.</span><span class="na">library</span><span class="o">.</span><span class="na">items</span>
|
||
<span class="n">org</span><span class="o">.</span><span class="na">eclipse</span><span class="o">.</span><span class="na">smarthome</span><span class="o">.</span><span class="na">model</span><span class="o">.</span><span class="na">script</span><span class="o">.</span><span class="na">actions</span>
|
||
</code></pre></div></div>
|
||
|
||
<p>The <strong><em>Variable Declarations</em></strong> section can be used to declare variables that should be accessible to all rules in this file. You can declare variables with or without initial values and modifiable or read-only. For further details, please see the <a href="http://www.eclipse.org/xtend/documentation/203_xtend_expressions.html#variable-declaration">Xtend documentation for variable declarations</a>.</p>
|
||
|
||
<p>Example:</p>
|
||
|
||
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// a variable with an initial value. Note that the variable type is automatically inferred</span>
|
||
<span class="n">var</span> <span class="n">counter</span> <span class="o">=</span> <span class="mi">0</span>
|
||
|
||
<span class="c1">// a read-only value, again the type is automatically inferred</span>
|
||
<span class="n">val</span> <span class="n">msg</span> <span class="o">=</span> <span class="s">"This is a message"</span>
|
||
|
||
<span class="c1">// an uninitialized variable where we have to provide the type (as it cannot be inferred from an initial value)</span>
|
||
<span class="n">var</span> <span class="n">Number</span> <span class="n">x</span>
|
||
</code></pre></div></div>
|
||
|
||
<blockquote>
|
||
<p>Bug: There seem to be <a href="https://github.com/eclipse/smarthome/issues/1393#issuecomment-223764080">some issues</a> with global variables that still need to be fixed.</p>
|
||
</blockquote>
|
||
|
||
<p>The <strong><em>Rules</em></strong> section contains a list of rules. Each rule has the following syntax:</p>
|
||
|
||
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">rule</span> <span class="s">"rule name"</span>
|
||
<span class="n">when</span>
|
||
<span class="o"><</span><span class="n">TRIGGER</span> <span class="n">CONDITION1</span><span class="o">></span> <span class="n">or</span>
|
||
<span class="o"><</span><span class="n">TRIGGER_CONDITION2</span><span class="o">></span> <span class="n">or</span>
|
||
<span class="o"><</span><span class="n">TRIGGER_CONDITION3</span><span class="o">></span>
|
||
<span class="o">...</span>
|
||
<span class="n">then</span>
|
||
<span class="o"><</span><span class="n">SCRIPT_BLOCK</span><span class="o">></span>
|
||
<span class="n">end</span>
|
||
</code></pre></div></div>
|
||
|
||
<p>A rule can have any number of trigger conditions, but must at least have one.
|
||
The <em>SCRIPT_BLOCK</em> contains the code that should be executed, when a trigger condition is met, see the <a href="#scripts">script</a> section for details on its syntax.</p>
|
||
|
||
<h3 id="rule-triggers">Rule Triggers</h3>
|
||
|
||
<p>Before a rule starts working, it has to be triggered.</p>
|
||
|
||
<p>There are different categories of rule triggers:</p>
|
||
|
||
<ul>
|
||
<li><strong>Item</strong>(-Event)-based triggers: They react on events on the openHAB event bus, i.e. commands and status updates for items</li>
|
||
<li><strong>Time</strong>-based triggers: They react at special times, e.g. at midnight, every hour, etc.</li>
|
||
<li><strong>System</strong>-based triggers: They react on certain system statuses.</li>
|
||
</ul>
|
||
|
||
<p>Here are the details for each category:</p>
|
||
|
||
<h3 id="event-based-triggers">Event-based Triggers</h3>
|
||
|
||
<p>You can listen to commands for a specific item, on status updates or on status changes (an update might leave the status unchanged). You can decide whether you want to catch only a specific command/status or any. Here is the syntax for all these cases (parts in square brackets are optional):</p>
|
||
|
||
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">Item</span> <span class="o"><</span><span class="n">item</span><span class="o">></span> <span class="n">received</span> <span class="n">command</span> <span class="o">[<</span><span class="n">command</span><span class="o">>]</span>
|
||
<span class="n">Item</span> <span class="o"><</span><span class="n">item</span><span class="o">></span> <span class="n">received</span> <span class="n">update</span> <span class="o">[<</span><span class="n">state</span><span class="o">>]</span>
|
||
<span class="n">Item</span> <span class="o"><</span><span class="n">item</span><span class="o">></span> <span class="n">changed</span> <span class="o">[</span><span class="n">from</span> <span class="o"><</span><span class="n">state</span><span class="o">>]</span> <span class="o">[</span><span class="n">to</span> <span class="o"><</span><span class="n">state</span><span class="o">>]</span>
|
||
</code></pre></div></div>
|
||
|
||
<blockquote>
|
||
<p>A simplistic explanation of the differences between <code class="highlighter-rouge">command</code> and <code class="highlighter-rouge">update</code> (useful if you are new to openHAB) can be found on the <a href="https://github.com/openhab/openhab/wiki/Actions#sendcommand-vs-postupdate">Actions page</a></p>
|
||
</blockquote>
|
||
|
||
<h3 id="time-based-triggers">Time-based Triggers</h3>
|
||
|
||
<p>You can either use some pre-defined expressions for timers or use a <a href="http://www.quartz-scheduler.org/documentation/quartz-2.1.x/tutorials/tutorial-lesson-06">cron expression</a> instead:</p>
|
||
|
||
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">Time</span> <span class="n">is</span> <span class="n">midnight</span>
|
||
<span class="n">Time</span> <span class="n">is</span> <span class="n">noon</span>
|
||
<span class="n">Time</span> <span class="n">cron</span> <span class="s">"<cron expression>"</span>
|
||
</code></pre></div></div>
|
||
|
||
<p>A cron expression takes the form of six or optionally seven fields:</p>
|
||
|
||
<ol>
|
||
<li>Seconds</li>
|
||
<li>Minutes</li>
|
||
<li>Hours</li>
|
||
<li>Day-of-Month</li>
|
||
<li>Month</li>
|
||
<li>Day-of-Week</li>
|
||
<li>Year (optional field)</li>
|
||
</ol>
|
||
|
||
<p>for more information see the <a href="http://www.quartz-scheduler.org/documentation/quartz-2.1.x/tutorials/tutorial-lesson-06">Quartz documentation</a>.</p>
|
||
|
||
<p>You may also use <a href="http://www.cronmaker.com/">CronMaker</a> or the generator at <a href="http://www.freeformatter.com/cron-expression-generator-quartz.html">FreeFormatter.com</a> to generate cron expressions.</p>
|
||
|
||
<h3 id="system-based-triggers">System-based Triggers</h3>
|
||
|
||
<p>Currently, you schedule rules to be executed either at system startup or shutdown. Note that newly added or modified startup rules are executed once, even if openHAB is already up and running. They are simply executed once as soon as the system is aware of them. Here’s the syntax for system triggers:</p>
|
||
|
||
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">System</span> <span class="n">started</span>
|
||
<span class="n">System</span> <span class="n">shuts</span> <span class="n">down</span>
|
||
</code></pre></div></div>
|
||
|
||
<h2 id="scripts">Scripts</h2>
|
||
|
||
<p>The expression language used within scripts is the same that is used in the Xtend language - see the <a href="http://www.eclipse.org/xtend/documentation/203_xtend_expressions.html">documentation of expressions</a> on the Xtend homepage.</p>
|
||
|
||
<p>The syntax is very similar to Java, but has many nice features that allows writing concise code. It is especially powerful in handling collections. What makes it a good match for openHAB from a technical perspective is the fact that there is no need to compile the scripts as they can be interpreted at runtime.</p>
|
||
|
||
<p>To be able to do something useful with the scripts, openHAB provides access to</p>
|
||
|
||
<ul>
|
||
<li>all defined items, so that you can easily access them by their name</li>
|
||
<li>all enumerated states/commands, e.g. <code class="highlighter-rouge">ON, OFF, DOWN, INCREASE</code> etc.</li>
|
||
<li>all <a href="https://github.com/openhab/openhab/wiki/Actions">standard actions</a> to make something happen</li>
|
||
</ul>
|
||
|
||
<p>Combining these features, you can easily write code like</p>
|
||
|
||
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code> if(Temperature.state < 20) {
|
||
sendCommand(Heating, ON)
|
||
}
|
||
</code></pre></div></div>
|
||
|
||
<h3 id="implicit-variables-inside-the-execution-block">Implicit Variables inside the Execution Block</h3>
|
||
|
||
<p>Besides the implicitly available variables for items and commands/states, rules can have additional pre-defined variables, depending on their triggers:</p>
|
||
|
||
<ul>
|
||
<li>Every rule that has at least one command event trigger, will have the variable <code class="highlighter-rouge">receivedCommand</code> available, which can be used inside the execution block.</li>
|
||
<li>Every rule that has at least one status change event trigger, will have the variable <code class="highlighter-rouge">previousState</code> available, which can be used inside the execution block.</li>
|
||
</ul>
|
||
|
||
<h3 id="concurrency-guard">Concurrency Guard</h3>
|
||
<p>If a rule triggers on UI events it may be necessary to guard against concurrency.</p>
|
||
|
||
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">java.util.concurrent.locks.ReentrantLock</span>
|
||
|
||
<span class="n">var</span> <span class="n">java</span><span class="o">.</span><span class="na">util</span><span class="o">.</span><span class="na">concurrent</span><span class="o">.</span><span class="na">locks</span><span class="o">.</span><span class="na">ReentrantLock</span> <span class="n">lock</span> <span class="o">=</span> <span class="k">new</span> <span class="n">java</span><span class="o">.</span><span class="na">util</span><span class="o">.</span><span class="na">concurrent</span><span class="o">.</span><span class="na">locks</span><span class="o">.</span><span class="na">ReentrantLock</span><span class="o">()</span>
|
||
|
||
<span class="n">rule</span> <span class="n">ConcurrentCode</span>
|
||
<span class="n">when</span>
|
||
<span class="n">Item</span> <span class="n">Dummy</span> <span class="n">received</span> <span class="n">update</span>
|
||
<span class="n">then</span>
|
||
<span class="n">lock</span><span class="o">.</span><span class="na">lock</span><span class="o">()</span>
|
||
<span class="k">try</span> <span class="o">{</span>
|
||
<span class="c1">// do stuff (e.g. create and start a timer ...)</span>
|
||
<span class="o">}</span> <span class="k">finally</span><span class="o">{</span>
|
||
<span class="n">lock</span><span class="o">.</span><span class="na">unlock</span><span class="o">()</span>
|
||
<span class="o">}</span>
|
||
<span class="n">end</span>
|
||
</code></pre></div></div>
|
||
|
||
<h3 id="logging">Logging</h3>
|
||
|
||
<p>You can emit log messages from your rules to aid debugging. There are a number of logging methods available from your rules, the java signatures are:</p>
|
||
|
||
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">logDebug</span><span class="o">(</span><span class="n">String</span> <span class="n">loggerName</span><span class="o">,</span> <span class="n">String</span> <span class="n">format</span><span class="o">,</span> <span class="n">Object</span><span class="o">...</span> <span class="n">args</span><span class="o">)</span>
|
||
<span class="n">logInfo</span><span class="o">(</span><span class="n">String</span> <span class="n">loggerName</span><span class="o">,</span> <span class="n">String</span> <span class="n">format</span><span class="o">,</span> <span class="n">Object</span><span class="o">...</span> <span class="n">args</span><span class="o">)</span>
|
||
<span class="n">logWarn</span><span class="o">(</span><span class="n">String</span> <span class="n">loggerName</span><span class="o">,</span> <span class="n">String</span> <span class="n">format</span><span class="o">,</span> <span class="n">Object</span><span class="o">...</span> <span class="n">args</span><span class="o">)</span>
|
||
<span class="n">logError</span><span class="o">(</span><span class="n">String</span> <span class="n">loggerName</span><span class="o">,</span> <span class="n">String</span> <span class="n">format</span><span class="o">,</span> <span class="n">Object</span><span class="o">...</span> <span class="n">args</span><span class="o">)</span>
|
||
</code></pre></div></div>
|
||
|
||
<p>In each case, the <code class="highlighter-rouge">loggerName</code> parameter is combined with the string <code class="highlighter-rouge">org.eclipse.smarthome.model.script.</code> to create the log4j logger name. For example, if your rules file contained the following log message:</p>
|
||
|
||
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">logDebug</span><span class="o">(</span><span class="s">"kitchen"</span><span class="o">,</span> <span class="s">"Kitchen light turned on"</span><span class="o">)</span>
|
||
</code></pre></div></div>
|
||
|
||
<p>then the logger you would have to configure to have your messages appearing in the console would be:</p>
|
||
|
||
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>log:set DEBUG org.eclipse.smarthome.model.script.kitchen
|
||
</code></pre></div></div>
|
||
|
||
<h2 id="example">Example</h2>
|
||
|
||
<p>Taking all the information together, an example rule file could look like this:</p>
|
||
|
||
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">var</span> <span class="n">Number</span> <span class="n">counter</span>
|
||
|
||
<span class="c1">// setting the counter to some initial value</span>
|
||
<span class="c1">// we could have done this in the variable declaration already</span>
|
||
<span class="n">rule</span> <span class="n">Startup</span>
|
||
<span class="n">when</span>
|
||
<span class="n">System</span> <span class="n">started</span>
|
||
<span class="n">then</span>
|
||
<span class="n">counter</span> <span class="o">=</span> <span class="mi">0</span>
|
||
<span class="n">end</span>
|
||
|
||
<span class="c1">// increase the counter at midnight</span>
|
||
<span class="n">rule</span> <span class="s">"Increase counter"</span>
|
||
<span class="n">when</span>
|
||
<span class="n">Time</span> <span class="n">cron</span> <span class="s">"0 0 0 * * ?"</span>
|
||
<span class="n">then</span>
|
||
<span class="n">counter</span> <span class="o">=</span> <span class="n">counter</span> <span class="o">+</span> <span class="mi">1</span>
|
||
<span class="n">end</span>
|
||
|
||
<span class="c1">// tell the number of days either at noon or if a button is pressed</span>
|
||
<span class="n">rule</span> <span class="s">"Announce number of days up"</span>
|
||
<span class="n">when</span>
|
||
<span class="n">Time</span> <span class="n">is</span> <span class="n">noon</span> <span class="n">or</span>
|
||
<span class="n">Item</span> <span class="n">AnnounceButton</span> <span class="n">received</span> <span class="n">command</span> <span class="n">ON</span>
|
||
<span class="n">then</span>
|
||
<span class="nf">say</span><span class="o">(</span><span class="s">"The system is up since "</span> <span class="o">+</span> <span class="n">counter</span> <span class="o">+</span> <span class="s">" days"</span><span class="o">)</span>
|
||
<span class="n">end</span>
|
||
|
||
<span class="c1">// sets the counter to the value of a received command</span>
|
||
<span class="n">rule</span> <span class="s">"Set the counter"</span>
|
||
<span class="n">when</span>
|
||
<span class="n">Item</span> <span class="n">SetCounterItem</span> <span class="n">received</span> <span class="n">command</span>
|
||
<span class="n">then</span>
|
||
<span class="n">counter</span> <span class="o">=</span> <span class="n">receivedCommand</span> <span class="n">as</span> <span class="n">DecimalType</span>
|
||
<span class="n">end</span>
|
||
</code></pre></div></div>
|
||
|
||
<p>You can find further examples in the <a href="https://github.com/openhab/openhab/wiki/Samples-Rules">openHAB 1 samples wiki</a>.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<footer>
|
||
<div class="container">
|
||
<div class="row">
|
||
<div class="col s12 m7">
|
||
Copyright © 2017 by the <a href="https://github.com/openhab">openHAB Community</a> and the <a href="http://www.openhabfoundation.org/">openHAB Foundation e.V.</a>
|
||
</div>
|
||
<div class="col s12 m5">
|
||
<ul class="list-inline right-align">
|
||
<li><a href="/imprint.html">Imprint</a></li>
|
||
<li><a href="/privacy.html">Privacy Policy</a></li>
|
||
<li><a href="http://www.openhab.org">openHAB Website</a></li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</footer>
|
||
<script src="/v2.1/js/jquery.min.js"></script>
|
||
<script src="/v2.1/js/jquery.scrollme.min.js"></script>
|
||
<script src="/v2.1/js/jquery.sticky.js"></script>
|
||
<script src="/v2.1/js/materialize.min.js"></script>
|
||
<script src="/v2.1/js/init.js"></script>
|
||
|
||
<script>
|
||
$(document).ready(function () {
|
||
|
||
$('#oh2-checkbox').change(function () {
|
||
if (this.checked) $('.since-2x').show('slow');
|
||
else $('.source-oh2').hide('slow');
|
||
});
|
||
|
||
$('#oh1-checkbox').change(function () {
|
||
if (this.checked) $('.since-1x').show('slow');
|
||
else $('.source-oh1').hide('slow');
|
||
});
|
||
|
||
$('#legacy-checkbox').change(function () {
|
||
if (this.checked) $('.install-legacy').show('slow');
|
||
else $('.install-legacy').hide('slow');
|
||
});
|
||
|
||
$('#manual-checkbox').change(function () {
|
||
if (this.checked) $('.install-manual').show('slow');
|
||
else $('.install-manual').hide('slow');
|
||
});
|
||
|
||
});
|
||
</script>
|
||
|
||
</body>
|
||
</html>
|
||
|