openhab-scripting 2.9.1 → 2.9.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/openhab/version.rb +1 -1
- metadata +1 -61
- data/.github/workflows/workflow.yml +0 -327
- data/.gitignore +0 -17
- data/.java-version +0 -1
- data/.rspec +0 -1
- data/.yardopts +0 -1
- data/CHANGELOG.md +0 -113
- data/Gemfile +0 -28
- data/Gemfile.lock +0 -245
- data/Guardfile +0 -35
- data/LICENSE +0 -277
- data/README.md +0 -23
- data/Rakefile +0 -406
- data/bin/console +0 -15
- data/bin/setup +0 -8
- data/config/userdata/config/org/openhab/restauth.config +0 -3
- data/cucumber.yml +0 -1
- data/docs/_config.yml +0 -135
- data/docs/contributing/index.md +0 -47
- data/docs/examples/conversions.md +0 -123
- data/docs/examples/index.md +0 -61
- data/docs/index.md +0 -19
- data/docs/installation/index.md +0 -26
- data/docs/motivation/index.md +0 -27
- data/docs/usage/execution.md +0 -9
- data/docs/usage/execution/delay.md +0 -48
- data/docs/usage/execution/otherwise.md +0 -30
- data/docs/usage/execution/run.md +0 -70
- data/docs/usage/execution/triggered.md +0 -48
- data/docs/usage/guards.md +0 -51
- data/docs/usage/guards/between.md +0 -30
- data/docs/usage/guards/not_if.md +0 -41
- data/docs/usage/guards/only_if.md +0 -40
- data/docs/usage/index.md +0 -11
- data/docs/usage/items.md +0 -66
- data/docs/usage/items/contact.md +0 -84
- data/docs/usage/items/dimmer.md +0 -147
- data/docs/usage/items/groups.md +0 -76
- data/docs/usage/items/number.md +0 -225
- data/docs/usage/items/string.md +0 -49
- data/docs/usage/items/switch.md +0 -85
- data/docs/usage/misc.md +0 -7
- data/docs/usage/misc/actions.md +0 -108
- data/docs/usage/misc/duration.md +0 -21
- data/docs/usage/misc/gems.md +0 -25
- data/docs/usage/misc/logging.md +0 -21
- data/docs/usage/misc/metadata.md +0 -128
- data/docs/usage/misc/store_states.md +0 -42
- data/docs/usage/misc/time_of_day.md +0 -69
- data/docs/usage/misc/timers.md +0 -67
- data/docs/usage/rule.md +0 -43
- data/docs/usage/things.md +0 -29
- data/docs/usage/triggers.md +0 -8
- data/docs/usage/triggers/changed.md +0 -57
- data/docs/usage/triggers/channel.md +0 -54
- data/docs/usage/triggers/command.md +0 -69
- data/docs/usage/triggers/cron.md +0 -19
- data/docs/usage/triggers/every.md +0 -76
- data/docs/usage/triggers/updated.md +0 -78
- data/openhab-scripting.gemspec +0 -30
- data/openhab_rules/warmup.rb +0 -5
@@ -1,42 +0,0 @@
|
|
1
|
-
---
|
2
|
-
layout: default
|
3
|
-
title: Store States
|
4
|
-
nav_order: 6
|
5
|
-
has_children: false
|
6
|
-
parent: Misc
|
7
|
-
grand_parent: Usage
|
8
|
-
---
|
9
|
-
|
10
|
-
### store_states
|
11
|
-
|
12
|
-
store_states takes one or more items or groups and returns a map `{Item => State}` with the current state of each item. It is implemented by calling OpenHAB's [events.storeStates()](https://www.openhab.org/docs/configuration/actions.html#event-bus-actions).
|
13
|
-
|
14
|
-
```ruby
|
15
|
-
states = store_states Item1, Item2
|
16
|
-
...
|
17
|
-
states.restore
|
18
|
-
```
|
19
|
-
|
20
|
-
or in a block context:
|
21
|
-
```ruby
|
22
|
-
store_states Item1, Item2 do
|
23
|
-
...
|
24
|
-
end # the states will be restored here
|
25
|
-
```
|
26
|
-
|
27
|
-
It can take an array of items:
|
28
|
-
```ruby
|
29
|
-
items_to_store = [ Item1, Item2 ]
|
30
|
-
states = store_states items_to_store
|
31
|
-
...
|
32
|
-
states.restore_changes # restore only changed items
|
33
|
-
```
|
34
|
-
|
35
|
-
|
36
|
-
The returned states variable is a hash that supports some additional methods:
|
37
|
-
|
38
|
-
| method | description |
|
39
|
-
| --------------- | ---------------------------------------------------------------------------------------- |
|
40
|
-
| restore | Restores the states of all the stored items by calling events.restoreStates() internally |
|
41
|
-
| changed? | Returns true if any of the stored items had changed states |
|
42
|
-
| restore_changes | restores only items whose state had changed
|
@@ -1,69 +0,0 @@
|
|
1
|
-
---
|
2
|
-
layout: default
|
3
|
-
title: TimeOfDay
|
4
|
-
nav_order: 5
|
5
|
-
has_children: false
|
6
|
-
parent: Misc
|
7
|
-
grand_parent: Usage
|
8
|
-
---
|
9
|
-
|
10
|
-
# TimeOfDay
|
11
|
-
|
12
|
-
TimeOfDay class can be used in rules for time related logic. Methods:
|
13
|
-
|
14
|
-
| Method | Parameter | Description | Example |
|
15
|
-
| ----------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
16
|
-
| parse | String | Creates a TimeOfDay object with a given time string. The format is hh[:mm[:ss]][am\|pm]. When am/pm is not specified, the time should be in 24h format. | curfew_start = TimeOfDay.parse '19:30' => 19:30<br/>TimeOfDay.parse '2pm' => 14:00<br/> TimeOfDay.parse '12:30am' => 00:30<br/>TimeOfDay.parse '15' => 15:00 |
|
17
|
-
| now | | Creates a TimeOfDay object that represents the current time | TimeOfDay.now > curfew_start, or TimeOfDay.now > '19:30' |
|
18
|
-
| MIDNIGHT | | Creates a TimeOfDay object for 00:00 | TimeOfDay.MIDNIGHT |
|
19
|
-
| NOON | | Creates a TimeOfDay object for 12:00 | TimeOfDay.now < TimeOfDay.NOON |
|
20
|
-
| constructor | h, m, s | Creates a TimeOfDay with the given hour, minute, second | TimeOfDay.new(h: 17, m: 30, s: 0) |
|
21
|
-
| hour | | Returns the hour part of the object | TimeOfDay.now.hour |
|
22
|
-
| minute | | Returns the minute part of the object | TimeOfDay.now.minute |
|
23
|
-
| second | | Returns the second part of the object | TimeOfDay.now.second |
|
24
|
-
| between? | TimeOfDayRange | Returns true if it falls within the given time range | TimeOfDay.now.between? '3pm'..'7pm' |
|
25
|
-
|
26
|
-
|
27
|
-
A TimeOfDay object can be compared against another TimeOfDay object or a parseable string representation of time.
|
28
|
-
|
29
|
-
Note: the following global constants are available:
|
30
|
-
| Name | Description |
|
31
|
-
| -------- | ----------- |
|
32
|
-
| MIDNIGHT | 00:00 |
|
33
|
-
| NOON | 12:00 |
|
34
|
-
|
35
|
-
|
36
|
-
## Examples
|
37
|
-
|
38
|
-
```ruby
|
39
|
-
#Create a TimeOfDay object
|
40
|
-
break_time = NOON
|
41
|
-
|
42
|
-
if TimeOfDay.now > TimeOfDay.new(h: 17, m: 30, s: 0) # comparing two TimeOfDay objects
|
43
|
-
# do something
|
44
|
-
elsif TimeOfDay.now < '8:30' # comparison against a string
|
45
|
-
#do something
|
46
|
-
end
|
47
|
-
four_pm = TimeOfDay.parse '16:00'
|
48
|
-
```
|
49
|
-
|
50
|
-
## between
|
51
|
-
|
52
|
-
`between` creates a TimeOfDay range that can be used to check if another Time, TimeOfDay, or [TimeOfDay parsable string](#TimeOfDay) is within that range.
|
53
|
-
|
54
|
-
```ruby
|
55
|
-
logger.info("Within time range") if between('10:00'..'14:00').cover? Time.now
|
56
|
-
logger.info("Within time range") if between('10:00'..'14:00').include? TimeOfDay.now
|
57
|
-
|
58
|
-
case Time.now
|
59
|
-
|
60
|
-
when between('6:00'...'12:00')
|
61
|
-
logger.info("Morning Time")
|
62
|
-
when between('12:00'..'15:00')
|
63
|
-
logger.info("Afternoon")
|
64
|
-
else
|
65
|
-
logger.info("Not in time range")
|
66
|
-
end
|
67
|
-
```
|
68
|
-
|
69
|
-
|
data/docs/usage/misc/timers.md
DELETED
@@ -1,67 +0,0 @@
|
|
1
|
-
---
|
2
|
-
layout: default
|
3
|
-
title: Timers
|
4
|
-
nav_order: 4
|
5
|
-
has_children: false
|
6
|
-
parent: Misc
|
7
|
-
grand_parent: Usage
|
8
|
-
---
|
9
|
-
|
10
|
-
# Timers
|
11
|
-
Timers are created using the `after` method.
|
12
|
-
|
13
|
-
After method parameters
|
14
|
-
|
15
|
-
| Parameter | Description |
|
16
|
-
| --------- | ------------------------------------------------------------------ |
|
17
|
-
| duration | Duration for timer |
|
18
|
-
| block | Block to execute after duration, block will be passed timer object |
|
19
|
-
|
20
|
-
Timer Object
|
21
|
-
The timer object has all of the methods of the [OpenHAB Timer](https://www.openhab.org/docs/configuration/actions.html#timers) with a change to the reschedule method to enable it to operate Ruby context. The following methods are available to a Timer object:
|
22
|
-
|
23
|
-
| Method | Parameter | Description |
|
24
|
-
| ------------- | --------- | ------------------------------------------------------------------------------------------------ |
|
25
|
-
| `cancel` | | Cancel the scheduled timer |
|
26
|
-
| `reschedule` | duration | Optional [duration](#Duration) if unspecified original duration supplied to after method is used |
|
27
|
-
| `active?` | | An alias for `Timer::isActive()` |
|
28
|
-
| `running?` | | An alias for `Timer::isRunning()` |
|
29
|
-
| `terminated?` | | An alias for `Timer::hasTerminated()` |
|
30
|
-
|
31
|
-
```ruby
|
32
|
-
after 5.seconds do
|
33
|
-
logger.info("Timer Fired")
|
34
|
-
end
|
35
|
-
```
|
36
|
-
|
37
|
-
```ruby
|
38
|
-
# Timers delegate methods to OpenHAB timer objects
|
39
|
-
after 1.second do |timer|
|
40
|
-
logger.info("Timer is active? #{timer.is_active}")
|
41
|
-
end
|
42
|
-
```
|
43
|
-
|
44
|
-
```ruby
|
45
|
-
# Timers can be rescheduled to run again, waiting the original duration
|
46
|
-
after 3.seconds do |timer|
|
47
|
-
logger.info("Timer Fired")
|
48
|
-
timer.reschedule
|
49
|
-
end
|
50
|
-
```
|
51
|
-
|
52
|
-
```ruby
|
53
|
-
# Timers can be rescheduled for different durations
|
54
|
-
after 3.seconds do |timer|
|
55
|
-
logger.info("Timer Fired")
|
56
|
-
timer.reschedule 5.seconds
|
57
|
-
end
|
58
|
-
```
|
59
|
-
|
60
|
-
```ruby
|
61
|
-
# Timers can be manipulated through the returned object
|
62
|
-
mytimer = after 1.minute do
|
63
|
-
logger.info('It has been 1 minute')
|
64
|
-
end
|
65
|
-
|
66
|
-
mytimer.cancel
|
67
|
-
```
|
data/docs/usage/rule.md
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
---
|
2
|
-
layout: default
|
3
|
-
title: Rules
|
4
|
-
nav_order: 1
|
5
|
-
has_children: false
|
6
|
-
parent: Usage
|
7
|
-
---
|
8
|
-
|
9
|
-
|
10
|
-
## Rule Syntax
|
11
|
-
```ruby
|
12
|
-
require 'openhab'
|
13
|
-
|
14
|
-
rule 'name' do
|
15
|
-
<zero or more triggers>
|
16
|
-
<zero or more execution blocks>
|
17
|
-
<zero or more guards>
|
18
|
-
end
|
19
|
-
```
|
20
|
-
|
21
|
-
### All of the properties that are available to the rule resource are
|
22
|
-
|
23
|
-
| Property | Type | Last/Multiple | Options | Default | Description | Examples |
|
24
|
-
| ---------------- | ----------------------------------------------------------------------- | ------------- | ------------------------------------- | ------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
25
|
-
| description | String | Single | | | Set the rule description | |
|
26
|
-
| every | Symbol or Duration | Multiple | at: String or TimeOfDay | | When to execute rule | Symbol (:second, :minute, :hour, :day, :week, :month, :year, :monday, :tuesday, :wednesday, :thursday, :friday, :saturday, :sunday) or duration (5.minutes, 20.seconds, 14.hours), at: '5:15' or TimeOfDay(h:5, m:15) |
|
27
|
-
| cron | String | Multiple | | | OpenHAB Style Cron Expression | '* * * * * * ?' |
|
28
|
-
| changed | Item or Item Array[] or Group or Group.items or Thing or Thing Array [] | Multiple | from: State, to: State, for: Duration | | Execute rule on item state change | BedroomLightSwitch, from: OFF to ON |
|
29
|
-
| updated | Item or Item Array[] or Group or Group.items or Thing or Thing Array [] | Multiple | to: State | | Execute rule on item update | BedroomLightSwitch, to: ON |
|
30
|
-
| received_command | Item or Item Array[] or Group or Group.items | Multiple | command: | | Execute rule on item command | BedroomLightSwitch command: ON |
|
31
|
-
| channel | Channel | Multiple | triggered: | | Execute rule on channel trigger | `'astro:sun:home:rise#event', triggered: 'START'` |
|
32
|
-
| on_start | Boolean | Single | | false | Execute rule on system start | on_start |
|
33
|
-
| run | Block passed event | Multiple | | | Code to execute on rule trigger | |
|
34
|
-
| triggered | Block passed item | Multiple | | | Code with triggering item to execute on rule trigger | |
|
35
|
-
| delay | Duration | Multiple | | | Duration to wait between or after run blocks | delay 5.seconds |
|
36
|
-
| otherwise | Block passed event | Multiple | | | Code to execute on rule trigger if guards are not satisfied | |
|
37
|
-
| between | Range of TimeOfDay or String Objects | Single | | | Only execute rule if current time is between supplied time ranges | '6:05'..'14:05:05' (Include end) or '6:05'...'14:05:05' (Excludes end second) or TimeOfDay.new(h:6,m:5)..TimeOfDay.new(h:14,m:15,s:5) |
|
38
|
-
| only_if | Item or Item Array, or Block | Multiple | | | Only execute rule if all supplied items are "On" and/or block returns true | BedroomLightSwitch, BackyardLightSwitch or {BedroomLightSwitch.state == ON} |
|
39
|
-
| not_if | Item or Item Array, or Block | Multiple | | | Do **NOT** execute rule if any of the supplied items or blocks returns true | BedroomLightSwitch |
|
40
|
-
| enabled | Boolean | Single | | true | Enable or disable the rule from executing | |
|
41
|
-
|
42
|
-
Last means that last value for the property is used <br>
|
43
|
-
Multiple indicates that multiple entries of the same property can be used in aggregate
|
data/docs/usage/things.md
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
---
|
2
|
-
layout: default
|
3
|
-
title: Things
|
4
|
-
nav_order: 5
|
5
|
-
has_children: false
|
6
|
-
parent: Usage
|
7
|
-
has_toc: false
|
8
|
-
---
|
9
|
-
|
10
|
-
# Things
|
11
|
-
|
12
|
-
Things can be access using the `things` method and subsequent operations on that methods.
|
13
|
-
|
14
|
-
| Method | Description |
|
15
|
-
| ------------------ | ------------------------------------------------------------------- |
|
16
|
-
| things | Return all things as a Ruby Set |
|
17
|
-
| [] | Get a specific thing by name |
|
18
|
-
| enumerable methods | All methods [here](https://ruby-doc.org/core-2.5.0/Enumerable.html) |
|
19
|
-
|
20
|
-
```ruby
|
21
|
-
things.each { |thing| logger.info("Thing: #{thing.uid}")}
|
22
|
-
```
|
23
|
-
|
24
|
-
```ruby
|
25
|
-
logger.info("Thing: #{things['astro:sun:home'].uid}")
|
26
|
-
```
|
27
|
-
|
28
|
-
For thing objects now additional methods are provided, however the standard [JRuby alternate names and bean convention applies](https://github.com/jruby/jruby/wiki/CallingJavaFromJRuby#alternative-names-and-beans-convention), such that `getUID` becomes `uid`.
|
29
|
-
|
data/docs/usage/triggers.md
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
---
|
2
|
-
layout: default
|
3
|
-
title: Changed
|
4
|
-
nav_order: 3
|
5
|
-
has_children: false
|
6
|
-
parent: Triggers
|
7
|
-
grand_parent: Usage
|
8
|
-
---
|
9
|
-
|
10
|
-
|
11
|
-
# Changed
|
12
|
-
|
13
|
-
|
14
|
-
| Options | Description | Example |
|
15
|
-
| ------- | ------------------------------------------------------ | --------------- |
|
16
|
-
| from | Only execute rule if previous state matches from state | from: OFF |
|
17
|
-
| to | Only execute rule if new state matches from state | to: ON |
|
18
|
-
| for | Only execute rule if value stays changed for duration | for: 10.seconds |
|
19
|
-
|
20
|
-
Changed accepts Items, Things or Groups.
|
21
|
-
|
22
|
-
The from and to values operate exactly as they do in the DSL and Python rules with the exception of operating on Things. If changed element being used as a trigger is a thing than the to and from values will accept symbols and strings, where the symbol matches the [supported status](https://www.openhab.org/docs/concepts/things.html).
|
23
|
-
|
24
|
-
The for parameter provides a method of only executing the rule if the value is changed for a specific duration. This provides a built-in method of only executing a rule if a condition is true for a period of time without the need to create dummy objects with the expire binding or make or manage your own timers.
|
25
|
-
|
26
|
-
For example, the code in [this design pattern](https://community.openhab.org/t/design-pattern-expire-binding-based-timers/32634) becomes (with no need to create the dummy object):
|
27
|
-
```ruby
|
28
|
-
rule "Execute rule when item is changed for specified duration" do
|
29
|
-
changed Alarm_Mode, for: 20.seconds
|
30
|
-
run { logger.info("Alarm Mode Updated")}
|
31
|
-
end
|
32
|
-
```
|
33
|
-
|
34
|
-
You can optionally provide from and to states to restrict the cases in which the rule executes:
|
35
|
-
```ruby
|
36
|
-
rule 'Execute rule when item is changed to specific number, from specific number, for specified duration' do
|
37
|
-
changed Alarm_Mode, from: 8, to: 14, for: 12.seconds
|
38
|
-
run { logger.info("Alarm Mode Updated")}
|
39
|
-
end
|
40
|
-
```
|
41
|
-
|
42
|
-
Works with things as well:
|
43
|
-
```ruby
|
44
|
-
rule 'Execute rule when thing is changed' do
|
45
|
-
changed things['astro:sun:home'], :from => :online, :to => :uninitialized
|
46
|
-
run { |event| logger.info("Thing #{event.uid} status <trigger> to #{event.status}") }
|
47
|
-
end
|
48
|
-
```
|
49
|
-
|
50
|
-
|
51
|
-
Real world example:
|
52
|
-
```ruby
|
53
|
-
rule 'Log (or notify) when an exterior door is left open for more than 5 minutes' do
|
54
|
-
changed ExteriorDoors, to: OPEN, for: 5.minutes
|
55
|
-
triggered {|door| logger.info("#{door.id} has been left open!")}
|
56
|
-
end
|
57
|
-
```
|
@@ -1,54 +0,0 @@
|
|
1
|
-
---
|
2
|
-
layout: default
|
3
|
-
title: Channel
|
4
|
-
nav_order: 6
|
5
|
-
has_children: false
|
6
|
-
parent: Triggers
|
7
|
-
grand_parent: Usage
|
8
|
-
---
|
9
|
-
|
10
|
-
# channel
|
11
|
-
|
12
|
-
| Option | Description | Example |
|
13
|
-
| --------- | ----------------------------------------------------------------------------- | ------------------------------------------------------ |
|
14
|
-
| triggered | Only execute rule if the event on the channel matches this/these event/events | `triggered: 'START' ` or `triggered: ['START','STOP']` |
|
15
|
-
| thing | Thing for specified channels | `thing: 'astro:sun:home'` |
|
16
|
-
|
17
|
-
The channel trigger executes rule when a specific channel is triggered. The syntax supports one or more channels with one or more triggers. For `thing` is an optional parameter that makes it easier to set triggers on multiple channels on the same thing.
|
18
|
-
|
19
|
-
|
20
|
-
```ruby
|
21
|
-
rule 'Execute rule when channel is triggered' do
|
22
|
-
channel 'astro:sun:home:rise#event'
|
23
|
-
run { logger.info("Channel triggered") }
|
24
|
-
end
|
25
|
-
|
26
|
-
# The above is the same as the below
|
27
|
-
|
28
|
-
rule 'Execute rule when channel is triggered' do
|
29
|
-
channel 'rise#event', thing: 'astro:sun:home'
|
30
|
-
run { logger.info("Channel triggered") }
|
31
|
-
end
|
32
|
-
|
33
|
-
```
|
34
|
-
|
35
|
-
```ruby
|
36
|
-
rule 'Rule provides access to channel trigger events in run block' do
|
37
|
-
channel 'astro:sun:home:rise#event', triggered: 'START'
|
38
|
-
run { |trigger| logger.info("Channel(#{trigger.channel}) triggered event: #{trigger.event}") }
|
39
|
-
end
|
40
|
-
```
|
41
|
-
|
42
|
-
```ruby
|
43
|
-
rule 'Rules support multiple channels' do
|
44
|
-
channel ['rise#event','set#event'], thing: 'astro:sun:home'
|
45
|
-
run { logger.info("Channel triggered") }
|
46
|
-
end
|
47
|
-
```
|
48
|
-
|
49
|
-
```ruby
|
50
|
-
rule 'Rules support multiple channels and triggers' do
|
51
|
-
channel ['rise#event','set#event'], thing: 'astro:sun:home', triggered: ['START', 'STOP']
|
52
|
-
run { logger.info("Channel triggered") }
|
53
|
-
end
|
54
|
-
```
|
@@ -1,69 +0,0 @@
|
|
1
|
-
---
|
2
|
-
layout: default
|
3
|
-
title: Received Command
|
4
|
-
nav_order: 5
|
5
|
-
has_children: false
|
6
|
-
parent: Triggers
|
7
|
-
grand_parent: Usage
|
8
|
-
---
|
9
|
-
|
10
|
-
|
11
|
-
# Received_Command
|
12
|
-
|
13
|
-
|
14
|
-
| Options | Description | Example |
|
15
|
-
| -------- | -------------------------------------------------------------------- | ---------------------------------- |
|
16
|
-
| command | Only execute rule if the command matches this/these command/commands | `command: 7` or `commands: [7,14]` |
|
17
|
-
| commands | Alias of command, may be used if matching more than one command | `commands: [7,14]` |
|
18
|
-
|
19
|
-
The `command` value restricts the rule from running to only if the command matches
|
20
|
-
|
21
|
-
The examples below assume the following background:
|
22
|
-
|
23
|
-
| type | name | group | state |
|
24
|
-
| ------ | ---------------- | ---------- | ----- |
|
25
|
-
| Number | Alarm_Mode | AlarmModes | 7 |
|
26
|
-
| Number | Alarm_Mode_Other | AlarmModes | 7 |
|
27
|
-
|
28
|
-
|
29
|
-
```ruby
|
30
|
-
rule 'Execute rule when item received command' do
|
31
|
-
received_command Alarm_Mode
|
32
|
-
run { |event| logger.info("Item received command: #{event.command}" ) }
|
33
|
-
end
|
34
|
-
```
|
35
|
-
|
36
|
-
```ruby
|
37
|
-
rule 'Execute rule when item receives specific command' do
|
38
|
-
received_command Alarm_Mode, command: 7
|
39
|
-
run { |event| logger.info("Item received command: #{event.command}" ) }
|
40
|
-
end
|
41
|
-
```
|
42
|
-
|
43
|
-
```ruby
|
44
|
-
rule 'Execute rule when item receives one of many specific commands' do
|
45
|
-
received_command Alarm_Mode, commands: [7,14]
|
46
|
-
run { |event| logger.info("Item received command: #{event.command}" ) }
|
47
|
-
end
|
48
|
-
```
|
49
|
-
|
50
|
-
```ruby
|
51
|
-
rule 'Execute rule when group receives a specific command' do
|
52
|
-
received_command AlarmModes
|
53
|
-
triggered { |item| logger.info("Group #{item.id} received command")}
|
54
|
-
end
|
55
|
-
```
|
56
|
-
|
57
|
-
```ruby
|
58
|
-
rule 'Execute rule when member of group receives any command' do
|
59
|
-
received_command AlarmModes.items
|
60
|
-
triggered { |item| logger.info("Group item #{item.id} received command")}
|
61
|
-
end
|
62
|
-
```
|
63
|
-
|
64
|
-
```ruby
|
65
|
-
rule 'Execute rule when member of group is changed to one of many states' do
|
66
|
-
received_command AlarmModes.items, commands: [7,14]
|
67
|
-
triggered { |item| logger.info("Group item #{item.id} received command")}
|
68
|
-
end
|
69
|
-
```
|