openhab-scripting 2.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/workflow.yml +327 -0
  3. data/.gitignore +17 -0
  4. data/.java-version +1 -0
  5. data/.rspec +1 -0
  6. data/.yardopts +1 -0
  7. data/CHANGELOG.md +113 -0
  8. data/Gemfile +28 -0
  9. data/Gemfile.lock +245 -0
  10. data/Guardfile +35 -0
  11. data/LICENSE +277 -0
  12. data/README.md +23 -0
  13. data/Rakefile +406 -0
  14. data/bin/console +15 -0
  15. data/bin/setup +8 -0
  16. data/config/userdata/config/org/openhab/restauth.config +3 -0
  17. data/cucumber.yml +1 -0
  18. data/docs/_config.yml +135 -0
  19. data/docs/contributing/index.md +47 -0
  20. data/docs/examples/conversions.md +123 -0
  21. data/docs/examples/index.md +61 -0
  22. data/docs/index.md +19 -0
  23. data/docs/installation/index.md +26 -0
  24. data/docs/motivation/index.md +27 -0
  25. data/docs/usage/execution.md +9 -0
  26. data/docs/usage/execution/delay.md +48 -0
  27. data/docs/usage/execution/otherwise.md +30 -0
  28. data/docs/usage/execution/run.md +70 -0
  29. data/docs/usage/execution/triggered.md +48 -0
  30. data/docs/usage/guards.md +51 -0
  31. data/docs/usage/guards/between.md +30 -0
  32. data/docs/usage/guards/not_if.md +41 -0
  33. data/docs/usage/guards/only_if.md +40 -0
  34. data/docs/usage/index.md +11 -0
  35. data/docs/usage/items.md +66 -0
  36. data/docs/usage/items/contact.md +84 -0
  37. data/docs/usage/items/dimmer.md +147 -0
  38. data/docs/usage/items/groups.md +76 -0
  39. data/docs/usage/items/number.md +225 -0
  40. data/docs/usage/items/string.md +49 -0
  41. data/docs/usage/items/switch.md +85 -0
  42. data/docs/usage/misc.md +7 -0
  43. data/docs/usage/misc/actions.md +108 -0
  44. data/docs/usage/misc/duration.md +21 -0
  45. data/docs/usage/misc/gems.md +25 -0
  46. data/docs/usage/misc/logging.md +21 -0
  47. data/docs/usage/misc/metadata.md +128 -0
  48. data/docs/usage/misc/store_states.md +42 -0
  49. data/docs/usage/misc/time_of_day.md +69 -0
  50. data/docs/usage/misc/timers.md +67 -0
  51. data/docs/usage/rule.md +43 -0
  52. data/docs/usage/things.md +29 -0
  53. data/docs/usage/triggers.md +8 -0
  54. data/docs/usage/triggers/changed.md +57 -0
  55. data/docs/usage/triggers/channel.md +54 -0
  56. data/docs/usage/triggers/command.md +69 -0
  57. data/docs/usage/triggers/cron.md +19 -0
  58. data/docs/usage/triggers/every.md +76 -0
  59. data/docs/usage/triggers/updated.md +78 -0
  60. data/lib/openhab.rb +39 -0
  61. data/lib/openhab/configuration.rb +16 -0
  62. data/lib/openhab/core/cron.rb +27 -0
  63. data/lib/openhab/core/debug.rb +34 -0
  64. data/lib/openhab/core/dsl.rb +47 -0
  65. data/lib/openhab/core/dsl/actions.rb +107 -0
  66. data/lib/openhab/core/dsl/entities.rb +103 -0
  67. data/lib/openhab/core/dsl/gems.rb +29 -0
  68. data/lib/openhab/core/dsl/group.rb +91 -0
  69. data/lib/openhab/core/dsl/items/items.rb +39 -0
  70. data/lib/openhab/core/dsl/items/number_item.rb +217 -0
  71. data/lib/openhab/core/dsl/items/string_item.rb +102 -0
  72. data/lib/openhab/core/dsl/monkey_patch/actions/actions.rb +4 -0
  73. data/lib/openhab/core/dsl/monkey_patch/actions/script_thing_actions.rb +22 -0
  74. data/lib/openhab/core/dsl/monkey_patch/events.rb +5 -0
  75. data/lib/openhab/core/dsl/monkey_patch/events/item_command.rb +13 -0
  76. data/lib/openhab/core/dsl/monkey_patch/events/item_state_changed.rb +25 -0
  77. data/lib/openhab/core/dsl/monkey_patch/events/thing_status_info.rb +26 -0
  78. data/lib/openhab/core/dsl/monkey_patch/items/contact_item.rb +54 -0
  79. data/lib/openhab/core/dsl/monkey_patch/items/dimmer_item.rb +125 -0
  80. data/lib/openhab/core/dsl/monkey_patch/items/group_item.rb +27 -0
  81. data/lib/openhab/core/dsl/monkey_patch/items/items.rb +130 -0
  82. data/lib/openhab/core/dsl/monkey_patch/items/metadata.rb +259 -0
  83. data/lib/openhab/core/dsl/monkey_patch/items/switch_item.rb +86 -0
  84. data/lib/openhab/core/dsl/monkey_patch/ruby/number.rb +69 -0
  85. data/lib/openhab/core/dsl/monkey_patch/ruby/range.rb +46 -0
  86. data/lib/openhab/core/dsl/monkey_patch/ruby/ruby.rb +5 -0
  87. data/lib/openhab/core/dsl/monkey_patch/types/decimal_type.rb +24 -0
  88. data/lib/openhab/core/dsl/monkey_patch/types/on_off_type.rb +41 -0
  89. data/lib/openhab/core/dsl/monkey_patch/types/open_closed_type.rb +25 -0
  90. data/lib/openhab/core/dsl/monkey_patch/types/percent_type.rb +23 -0
  91. data/lib/openhab/core/dsl/monkey_patch/types/types.rb +7 -0
  92. data/lib/openhab/core/dsl/property.rb +85 -0
  93. data/lib/openhab/core/dsl/rule/channel.rb +41 -0
  94. data/lib/openhab/core/dsl/rule/cron.rb +115 -0
  95. data/lib/openhab/core/dsl/rule/guard.rb +99 -0
  96. data/lib/openhab/core/dsl/rule/item.rb +207 -0
  97. data/lib/openhab/core/dsl/rule/rule.rb +374 -0
  98. data/lib/openhab/core/dsl/rule/triggers.rb +77 -0
  99. data/lib/openhab/core/dsl/states.rb +63 -0
  100. data/lib/openhab/core/dsl/things.rb +93 -0
  101. data/lib/openhab/core/dsl/time_of_day.rb +203 -0
  102. data/lib/openhab/core/dsl/timers.rb +85 -0
  103. data/lib/openhab/core/dsl/types/quantity.rb +255 -0
  104. data/lib/openhab/core/dsl/units.rb +41 -0
  105. data/lib/openhab/core/duration.rb +69 -0
  106. data/lib/openhab/core/log.rb +175 -0
  107. data/lib/openhab/core/patch_load_path.rb +7 -0
  108. data/lib/openhab/core/startup_delay.rb +22 -0
  109. data/lib/openhab/osgi.rb +52 -0
  110. data/lib/openhab/version.rb +9 -0
  111. data/openhab-scripting.gemspec +30 -0
  112. data/openhab_rules/warmup.rb +5 -0
  113. metadata +157 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: a5c554c32f29417abb195eca4ab36ebffb6a1f5dad807e71c15b5bbe2228a6c5
4
+ data.tar.gz: 9355d486f42858c69feda536b8846969d6486530a13c13b2a47dfcb813869c4d
5
+ SHA512:
6
+ metadata.gz: 8aaf8b2c5f27c638ef612ee0604818e845900dacfa548a37046116c55c804609b9f6e59194be101a909d140a734a5551029add33aec1713d0b0f907f1e0d320c
7
+ data.tar.gz: c193b11a25f445884dc88b47588697de809cbd4ea7740dcb329b89eb2137657e339e3b3ed5637df5590bf25a977b7d09db397d01bd4fa399f510dc8ffdd6cad8
@@ -0,0 +1,327 @@
1
+ name: Openhab-JRuby-Scripting
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+ branches:
7
+ - main
8
+
9
+ env:
10
+ RUBY_VERSION: 2.5
11
+ GITHUB_TOKEN: ${{ github.token }}
12
+
13
+ jobs:
14
+
15
+ rubocop:
16
+ runs-on: ubuntu-18.04
17
+ continue-on-error: true
18
+ steps:
19
+ - uses: actions/checkout@v2
20
+ - uses: actions/setup-ruby@v1
21
+ with:
22
+ ruby-version: ${{ env.RUBY_VERSION }}
23
+ - name: Install bundler
24
+ run: gem install bundler -N
25
+ - name: Gem Cache
26
+ uses: actions/cache@v2
27
+ with:
28
+ path: vendor/bundle
29
+ key: gems-${{ hashFiles('**/Gemfile.lock') }}
30
+ - name: Install gems
31
+ run: |
32
+ bundle config path vendor/bundle
33
+ bundle install --jobs 4 --retry 3
34
+ - name: Rubocop
35
+ run: bundle exec rubocop
36
+
37
+ commit-lint:
38
+ runs-on: ubuntu-latest
39
+ steps:
40
+ - uses: actions/checkout@v2
41
+ with:
42
+ fetch-depth: 0
43
+ - uses: wagoid/commitlint-github-action@v2
44
+
45
+ cucumber-lint:
46
+ runs-on: ubuntu-18.04
47
+ continue-on-error: true
48
+ steps:
49
+ - uses: actions/checkout@v2
50
+ - uses: actions/setup-ruby@v1
51
+ with:
52
+ ruby-version: ${{ env.RUBY_VERSION }}
53
+ - name: Install bundler
54
+ run: gem install bundler -N
55
+ - name: Gem Cache
56
+ uses: actions/cache@v2
57
+ with:
58
+ path: vendor/bundle
59
+ key: gems-${{ hashFiles('**/Gemfile.lock') }}
60
+ - name: Install gems
61
+ run: |
62
+ bundle config path vendor/bundle
63
+ bundle install --jobs 4 --retry 3
64
+ - name: Cucumber Lint
65
+ run: bundle exec cuke_linter
66
+
67
+ yard-coverage:
68
+ runs-on: ubuntu-18.04
69
+ steps:
70
+ - uses: actions/checkout@v2
71
+ - uses: actions/setup-ruby@v1
72
+ with:
73
+ ruby-version: ${{ env.RUBY_VERSION }}
74
+ - name: Install bundler
75
+ run: gem install bundler -N
76
+ - name: Gem Cache
77
+ uses: actions/cache@v2
78
+ with:
79
+ path: vendor/bundle
80
+ key: gems-${{ hashFiles('**/Gemfile.lock') }}
81
+ - name: Install gems
82
+ run: |
83
+ bundle config path vendor/bundle
84
+ bundle install --jobs 4 --retry 3
85
+ - name: Yard Coverage
86
+ run: |
87
+ bundle exec yard stats --list-undoc
88
+ bundle exec yard stats | grep "100.00% documented"
89
+
90
+
91
+ openhab-setup:
92
+ runs-on: ubuntu-18.04
93
+ steps:
94
+ - uses: actions/checkout@v2
95
+ - uses: actions/setup-ruby@v1
96
+ with:
97
+ ruby-version: ${{ env.RUBY_VERSION }}
98
+ - uses: actions/setup-java@v1
99
+ with:
100
+ java-version: '11.0.8'
101
+ java-package: jre
102
+ - name: Install bundler
103
+ run: gem install bundler -N
104
+ - name: Cache Gems
105
+ uses: actions/cache@v2
106
+ with:
107
+ path: vendor/bundle
108
+ key: gems-${{ hashFiles('**/Gemfile.lock') }}
109
+ - name: Install gems
110
+ run: |
111
+ bundle config path vendor/bundle
112
+ bundle install --jobs 4 --retry 3
113
+ - name: Cache OpenHAB setup
114
+ id: cache
115
+ uses: actions/cache@v2
116
+ with:
117
+ path: tmp/
118
+ key: OpenHAB-setup-${{ hashFiles('bundle/*jrubyscripting*.jar') }}
119
+ - name: Setup OpenHAB
120
+ if: steps.cache.outputs.cache-hit != 'true'
121
+ run: bundle exec rake openhab:setup
122
+
123
+ cucumber-matrix:
124
+ runs-on: ubuntu-18.04
125
+ outputs:
126
+ matrix: ${{ steps.set-matrix.outputs.matrix }}
127
+ steps:
128
+ - uses: actions/checkout@v2
129
+ - uses: actions/setup-ruby@v1
130
+ with:
131
+ ruby-version: ${{ env.RUBY_VERSION }}
132
+ - id: set-matrix
133
+ run: |
134
+ JSON=$(ruby -e '
135
+ require "json"
136
+ feature_maps = Dir["features/**/*.feature"].map { |feature| { feature: File.basename(feature,".feature"), file: feature } }
137
+ include_map = {}
138
+ include_map["include"]= feature_maps
139
+ puts include_map.to_json
140
+ ')
141
+ echo $JSON
142
+ echo "::set-output name=matrix::$( echo "$JSON" )"
143
+
144
+ cucumber:
145
+ needs: [cucumber-matrix, openhab-setup]
146
+ runs-on: ubuntu-18.04
147
+ strategy:
148
+ matrix: ${{fromJson(needs.cucumber-matrix.outputs.matrix)}}
149
+ steps:
150
+ - uses: actions/checkout@v1
151
+ - uses: actions/setup-ruby@v1
152
+ with:
153
+ ruby-version: ${{ env.RUBY_VERSION }}
154
+ - uses: actions/setup-java@v1
155
+ with:
156
+ java-version: '11.0.8'
157
+ java-package: jre
158
+ - name: Install bundler
159
+ run: gem install bundler -N
160
+ - name: Restore Gems
161
+ uses: actions/cache@v2
162
+ with:
163
+ path: vendor/bundle
164
+ key: gems-${{ hashFiles('**/Gemfile.lock') }}
165
+ - name: Install gems
166
+ run: |
167
+ bundle config path vendor/bundle
168
+ bundle install --jobs 4 --retry 3
169
+ - name: Restore OpenHAB setup
170
+ uses: actions/cache@v2
171
+ with:
172
+ path: tmp/
173
+ key: OpenHAB-setup-${{ hashFiles('bundle/*jrubyscripting*.jar') }}
174
+ - name: Cucumber
175
+ run: bundle exec rake features[${{ matrix.file }}]
176
+ - name: Generate OpenHAB Dump
177
+ run: bundle exec rake openhab:dump
178
+ if: failure()
179
+ - name: Upload OpenHAB Logs
180
+ uses: actions/upload-artifact@v2
181
+ if: failure()
182
+ with:
183
+ name: OpenHAB-logs-${{ github.workflow }}-${{ github.run_number }}-${{ matrix.feature }}
184
+ path: |
185
+ tmp/cucumber_logs
186
+ tmp/karaf.log
187
+ tmp/openhab/userdata/logs
188
+ tmp/openhab/userdata/*.zip
189
+ tmp/openhab/conf/automation/jsr223/ruby/personal/
190
+ retention-days: 2
191
+
192
+ pickles-docs:
193
+ if: github.ref == 'refs/heads/main'
194
+ runs-on: windows-latest
195
+ steps:
196
+ - uses: actions/checkout@v2
197
+ - name: Install pickles
198
+ run: choco install pickles
199
+ - name: Generate Pickles docs
200
+ shell: cmd
201
+ run: |
202
+ call refreshenv
203
+ pickles -f features -o pickles --df html || VER>NUL
204
+ - uses: actions/upload-artifact@v2
205
+ with:
206
+ name: pickles-docs
207
+ path: pickles/
208
+ if-no-files-found: error
209
+ retention-days: 1
210
+
211
+ docs:
212
+ needs: [cucumber, pickles-docs]
213
+ if: github.ref == 'refs/heads/main'
214
+ runs-on: ubuntu-18.04
215
+ steps:
216
+ - uses: actions/checkout@v2
217
+ - uses: actions/setup-ruby@v1
218
+ with:
219
+ ruby-version: ${{ env.RUBY_VERSION }}
220
+ - name: Install bundler
221
+ run: gem install bundler -N
222
+ - name: Gem Cache
223
+ uses: actions/cache@v2
224
+ with:
225
+ path: vendor/bundle
226
+ key: gems-${{ hashFiles('**/Gemfile.lock') }}
227
+ - name: Install gems
228
+ run: |
229
+ bundle config path vendor/bundle
230
+ bundle install --jobs 4 --retry 3
231
+ - name: Build yard docs
232
+ run: |
233
+ bundle exec rake yard
234
+ - name: Download pickles docs
235
+ uses: actions/download-artifact@v2
236
+ with:
237
+ name: pickles-docs
238
+ path: docs/pickles
239
+ - name: Publish docs
240
+ uses: JamesIves/github-pages-deploy-action@3.7.1
241
+ with:
242
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
243
+ BRANCH: gh-pages
244
+ FOLDER: docs
245
+ CLEAN: true
246
+ SINGLE_COMMIT: true
247
+
248
+
249
+ release:
250
+ needs: cucumber
251
+ if: github.ref == 'refs/heads/main'
252
+ runs-on: ubuntu-18.04
253
+ steps:
254
+ - uses: actions/checkout@v2
255
+ - uses: actions/setup-ruby@v1
256
+ with:
257
+ ruby-version: ${{ env.RUBY_VERSION }}
258
+ - name: Install bundler
259
+ run: gem install bundler -N
260
+ - name: Gem Cache
261
+ uses: actions/cache@v2
262
+ with:
263
+ path: vendor/bundle
264
+ key: gems-${{ hashFiles('**/Gemfile.lock') }}
265
+ - name: Install gems
266
+ run: |
267
+ bundle config path vendor/bundle
268
+ bundle install --jobs 4 --retry 3
269
+ - name: Current Version
270
+ id: current_version
271
+ run: |
272
+ bundle exec rake version
273
+ VERSION=$( bundle exec rake version )
274
+ echo "::set-output name=version::$( echo "$VERSION" )"
275
+ - name: Gets latest created release info
276
+ id: latest_release
277
+ run: |
278
+ git fetch --tags
279
+ git tag | tail -1
280
+ TAG_NAME=$(git tag | tail -1)
281
+ echo "::set-output name=tag_name::$( echo "$TAG_NAME" )"
282
+ - name: Prepare Release
283
+ if: ${{ steps.current_version.outputs.version != steps.latest_release.outputs.tag_name}}
284
+ run: |
285
+ echo "New version detected, preparing release"
286
+ echo "Released Version: ${{ steps.latest_release.outputs.tag_name }}"
287
+ echo "Current Version: ${{ steps.current_version.outputs.version }}"
288
+ bundle exec rake gh:package
289
+ - name: Get JRuby Bundle
290
+ id: jruby_bundle
291
+ if: ${{ steps.current_version.outputs.version != steps.latest_release.outputs.tag_name}}
292
+ run: |
293
+ echo "Finding JRuby Bundle"
294
+ BUNDLE=$(ls bundle/*.jar)
295
+ echo "Found: $BUNDLE"
296
+ echo "::set-output name=file::$( echo "$BUNDLE" )"
297
+ - name: Create Release
298
+ if: ${{ steps.current_version.outputs.version != steps.latest_release.outputs.tag_name}}
299
+ uses: actions/create-release@v1
300
+ id: create_release
301
+ env:
302
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
303
+ with:
304
+ prerelease: true
305
+ tag_name: ${{ steps.current_version.outputs.version }}
306
+ release_name: Release ${{ steps.current_version.outputs.version }}
307
+ body_path: CHANGELOG.md
308
+ - name: Upload OpenHAB JRuby Scripting Assets
309
+ if: ${{ steps.current_version.outputs.version != steps.latest_release.outputs.tag_name}}
310
+ uses: actions/upload-release-asset@v1
311
+ env:
312
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
313
+ with:
314
+ upload_url: ${{ steps.create_release.outputs.upload_url }}
315
+ asset_path: ./pkg/OpenHABJRuby-${{steps.current_version.outputs.version}}.zip
316
+ asset_name: OpenHABJRuby-${{steps.current_version.outputs.version}}.zip
317
+ asset_content_type: application/zip
318
+ - name: Upload OpenHAB JRuby Bundle Assets
319
+ if: ${{ steps.current_version.outputs.version != steps.latest_release.outputs.tag_name}}
320
+ uses: actions/upload-release-asset@v1
321
+ env:
322
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
323
+ with:
324
+ upload_url: ${{ steps.create_release.outputs.upload_url }}
325
+ asset_path: ${{ steps.jruby_bundle.outputs.file }}
326
+ asset_name: OpenHAB JRuby Bundle Jar
327
+ asset_content_type: application/jar
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /_site/
5
+ /docs/.jekyll-cache/
6
+ /docs/yard/
7
+ /coverage/
8
+ /doc/
9
+ /pkg/
10
+ /spec/reports/
11
+ /tmp/
12
+ /.obsidian/
13
+ openhab.code-workspace
14
+ /.idea/
15
+ .java-verison
16
+ .ruby-version
17
+ .jekyll-cache/
data/.java-version ADDED
@@ -0,0 +1 @@
1
+ 11.0.8
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --require spec_helper
data/.yardopts ADDED
@@ -0,0 +1 @@
1
+ --output-dir docs/yard
data/CHANGELOG.md ADDED
@@ -0,0 +1,113 @@
1
+ # JRuby OpenHAB Scripting change log
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ Project versioning adheres to [Semantic Versioning](http://semver.org/). <br>
6
+ Commit convention is based on [Conventional Commits](http://conventionalcommits.org). <br>
7
+ Change log format is based on [Keep a Changelog](http://keepachangelog.com/). <br>
8
+
9
+ ## 2.9.0
10
+ ### Added
11
+ - Support OpenHAB Actions
12
+
13
+ ## 2.8.1
14
+ ### Fixed
15
+ - Fixed StringItem comparison against a string
16
+
17
+ ## 2.8.0
18
+ ### Added
19
+ - Support for accessing item metadata namespace, value, and configuration
20
+
21
+ ## 2.7.0
22
+ ### Added
23
+ - SwitchItem.toggle to toggle a SwitchItem similar to SwitchItem << !SwitchItem
24
+
25
+ ## 2.6.1
26
+ ### Fixed
27
+ - Race condition with `after` block
28
+ - Unknown constant error in certain cases uses `between` blocks
29
+
30
+ ## 2.6.0
31
+ ### Added
32
+ - `TimeOfDay.between?` to check if TimeOfDay object is between supplied range
33
+ ### Fixed
34
+ - Reference in rules to TimeOfDay::ALL_DAY
35
+
36
+
37
+ ## 2.5.1
38
+ ### Fixed
39
+ - Corrected time of day parsing to be case insensitive
40
+ - Merge conflict
41
+
42
+ ## 2.5.0
43
+ ### Added
44
+ - `between` can be used throughout rules systems
45
+ #### Changed
46
+ - TimeOfDay parsing now supports AM/PM
47
+
48
+ ## 2.4.0
49
+ ### Added
50
+ - Support to allow comparison of TimeOfDay objects against strings
51
+ - Support for storing and restoring Item states
52
+
53
+ ## 2.3.0
54
+ ### Added
55
+ - Support for rule description
56
+
57
+ ## 2.2.1
58
+ ### Fixed
59
+ - `!` operator on SwitchItems now returns ON if item is UNDEF or NULL
60
+
61
+ ## 2.2.0
62
+ ### Added
63
+ - Support for thing triggers in rules
64
+
65
+ ### Changed
66
+ - Updated docs to point to OpenHAB document for script locations
67
+
68
+ ## 2.1.0
69
+ ### Added
70
+ - Timer delegate for 'active?', 'running?', 'terminated?'
71
+
72
+ ## 2.0.1
73
+ ### Fixed
74
+ - Logging of mod and/or inputs can cause an exception of they are nil
75
+ - Timers (after) now available inside of rules
76
+
77
+ ### Changed
78
+ - DSL imports now shared by OpenHAB module and Rules Module
79
+
80
+ ## 2.0.0
81
+ ### Added
82
+ - Timer delegate for `after` method that supports reschedule
83
+
84
+ ### Changed
85
+ - **Breaking:** `after` now returns a ruby Timer delegate
86
+
87
+ ## 1.1.0
88
+ ### Added
89
+ - Added support for channels triggers to rules
90
+
91
+ ### Changed
92
+ - Fixed documentation for changed/updated/receive_command options
93
+
94
+ ## 1.0.0
95
+ ### Changed
96
+ - **Breaking:** Changed commanded method for rules to received_command
97
+
98
+ ## 0.2.0
99
+ ### Added
100
+ - Ability to execute rules based on commands sent to items, groups and group members
101
+ - Ability to send updates from item objects
102
+
103
+ ### Changed
104
+ - Fixed documentation for comparing dimensioned items against strings
105
+
106
+ ## 0.1.0
107
+ ### Added
108
+ - Support for item updates within rules languages
109
+ ### Changed
110
+ - Installation instructions to specify using latest release rather than a specific version
111
+
112
+ ## 0.0.1
113
+ - Initial release