openhab-scripting 2.9.1 → 2.11.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/openhab/core/dsl/gems.rb +1 -26
- data/lib/openhab/core/dsl/rule/item.rb +1 -0
- data/lib/openhab/core/dsl/rule/rule.rb +18 -1
- data/lib/openhab/core/duration.rb +9 -0
- data/lib/openhab/version.rb +1 -1
- metadata +21 -67
- 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
data/bin/console
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'openhab/scripting'
|
6
|
-
|
7
|
-
# You can add fixtures and/or initialization code here to make experimenting
|
8
|
-
# with your gem easier. You can also use a different console, if you like.
|
9
|
-
|
10
|
-
# (If you use this, don't forget to add pry to your Gemfile!)
|
11
|
-
# require "pry"
|
12
|
-
# Pry.start
|
13
|
-
|
14
|
-
require 'irb'
|
15
|
-
IRB.start(__FILE__)
|
data/bin/setup
DELETED
data/cucumber.yml
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
default: --publish-quiet
|
data/docs/_config.yml
DELETED
@@ -1,135 +0,0 @@
|
|
1
|
-
# Welcome to Jekyll!
|
2
|
-
#
|
3
|
-
# This config file is meant for settings that affect your whole site, values
|
4
|
-
# which you are expected to set up once and rarely edit after that. If you find
|
5
|
-
# yourself editing these this file very often, consider using Jekyll's data files
|
6
|
-
# feature for the data you need to update frequently.
|
7
|
-
#
|
8
|
-
# For technical reasons, this file is *NOT* reloaded automatically when you use
|
9
|
-
# 'jekyll serve'. If you change this file, please restart the server process.
|
10
|
-
|
11
|
-
# Site settings
|
12
|
-
# These are used to personalize your new site. If you look in the HTML files,
|
13
|
-
# you will see them accessed via {{ site.title }}, {{ site.github_repo }}, and so on.
|
14
|
-
# You can create any custom variable you would like, and they will be accessible
|
15
|
-
# in the templates via {{ site.myvariable }}.
|
16
|
-
|
17
|
-
title: OpenHAB JRuby Script Library
|
18
|
-
description: JRuby Scripting Helper Library
|
19
|
-
baseurl: "/openhab-jruby/" # the subpath of your site, e.g. /blog
|
20
|
-
#url: "https://boc-tothefuture.github.io/" # the base hostname & protocol for your site, e.g. http://example.com
|
21
|
-
|
22
|
-
source: "docs/"
|
23
|
-
permalink: pretty
|
24
|
-
exclude: ["node_modules/", "*.gemspec", "*.gem", "Gemfile", "Gemfile.lock", "package.json", "package-lock.json", "script/", "LICENSE.txt", "lib/", "bin/", "README.md", "Rakefile"
|
25
|
-
, "docs/tests/"
|
26
|
-
]
|
27
|
-
|
28
|
-
# Build settings
|
29
|
-
markdown: kramdown
|
30
|
-
theme: just-the-docs
|
31
|
-
plugins:
|
32
|
-
- jekyll-feed
|
33
|
-
|
34
|
-
remote_theme: pmarsceill/just-the-docs
|
35
|
-
|
36
|
-
|
37
|
-
# Regression tests
|
38
|
-
# By default, the pages in /docs/tests are excluded when the ste is built.
|
39
|
-
# To include them, comment-out the relevant line above.
|
40
|
-
# Uncommenting the following line doesn't work - see https://github.com/jekyll/jekyll/issues/4791
|
41
|
-
# include: ["docs/tests/"]
|
42
|
-
|
43
|
-
# Set a path/url to a logo that will be displayed instead of the title
|
44
|
-
#logo: "/assets/images/just-the-docs.png"
|
45
|
-
|
46
|
-
# Enable or disable the site search
|
47
|
-
# Supports true (default) or false
|
48
|
-
search_enabled: true
|
49
|
-
search:
|
50
|
-
# Split pages into sections that can be searched individually
|
51
|
-
# Supports 1 - 6, default: 2
|
52
|
-
heading_level: 2
|
53
|
-
# Maximum amount of previews per search result
|
54
|
-
# Default: 3
|
55
|
-
previews: 2
|
56
|
-
# Maximum amount of words to display before a matched word in the preview
|
57
|
-
# Default: 5
|
58
|
-
preview_words_before: 3
|
59
|
-
# Maximum amount of words to display after a matched word in the preview
|
60
|
-
# Default: 10
|
61
|
-
preview_words_after: 3
|
62
|
-
# Set the search token separator
|
63
|
-
# Default: /[\s\-/]+/
|
64
|
-
# Example: enable support for hyphenated search words
|
65
|
-
tokenizer_separator: /[\s/]+/
|
66
|
-
# Display the relative url in search results
|
67
|
-
# Supports true (default) or false
|
68
|
-
rel_url: true
|
69
|
-
# Enable or disable the search button that appears in the bottom right corner of every page
|
70
|
-
# Supports true or false (default)
|
71
|
-
button: false
|
72
|
-
|
73
|
-
# Enable or disable heading anchors
|
74
|
-
heading_anchors: true
|
75
|
-
|
76
|
-
# Aux links for the upper right navigation
|
77
|
-
#aux_links:
|
78
|
-
# "Just the Docs on GitHub":
|
79
|
-
# - "//github.com/pmarsceill/just-the-docs"
|
80
|
-
|
81
|
-
# Makes Aux links open in a new tab. Default is false
|
82
|
-
aux_links_new_tab: false
|
83
|
-
|
84
|
-
# Sort order for navigation links
|
85
|
-
# nav_sort: case_insensitive # default, equivalent to nil
|
86
|
-
nav_sort: case_sensitive # Capital letters sorted before lowercase
|
87
|
-
|
88
|
-
# Footer content
|
89
|
-
# appears at the bottom of every page's main content
|
90
|
-
|
91
|
-
# Back to top link
|
92
|
-
back_to_top: true
|
93
|
-
back_to_top_text: "Back to top"
|
94
|
-
|
95
|
-
footer_content: "Copyright © 2017-2020 Patrick Marsceill. Distributed by an <a href=\"https://github.com/pmarsceill/just-the-docs/tree/master/LICENSE.txt\">MIT license.</a>"
|
96
|
-
|
97
|
-
# Footer last edited timestamp
|
98
|
-
last_edit_timestamp: true # show or hide edit time - page must have `last_modified_date` defined in the frontmatter
|
99
|
-
last_edit_time_format: "%b %e %Y at %I:%M %p" # uses ruby's time format: https://ruby-doc.org/stdlib-2.7.0/libdoc/time/rdoc/Time.html
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
# Footer "Edit this page on GitHub" link text
|
104
|
-
gh_edit_link: true # show or hide edit this page link
|
105
|
-
gh_edit_link_text: "Edit this page on GitHub"
|
106
|
-
gh_edit_repository: "https://github.com/pmarsceill/just-the-docs" # the github URL for your repo
|
107
|
-
gh_edit_branch: "main" # the branch that your docs is served from
|
108
|
-
# gh_edit_source: docs # the source that your files originate from
|
109
|
-
gh_edit_view_mode: "tree" # "tree" or "edit" if you want the user to jump into the editor immediately
|
110
|
-
|
111
|
-
# Color scheme currently only supports "dark", "light"/nil (default), or a custom scheme that you define
|
112
|
-
color_scheme: nil
|
113
|
-
|
114
|
-
# Google Analytics Tracking (optional)
|
115
|
-
# e.g, UA-1234567-89
|
116
|
-
ga_tracking: UA-80492189-2
|
117
|
-
ga_tracking_anonymize_ip: true # Use GDPR compliant Google Analytics settings (true/nil by default)
|
118
|
-
|
119
|
-
plugins:
|
120
|
-
- jekyll-seo-tag
|
121
|
-
|
122
|
-
kramdown:
|
123
|
-
syntax_highlighter_opts:
|
124
|
-
block:
|
125
|
-
line_numbers: false
|
126
|
-
|
127
|
-
compress_html:
|
128
|
-
clippings: all
|
129
|
-
comments: all
|
130
|
-
endings: all
|
131
|
-
startings: []
|
132
|
-
blanklines: false
|
133
|
-
profile: false
|
134
|
-
# ignore:
|
135
|
-
# envs: all
|
data/docs/contributing/index.md
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
---
|
2
|
-
layout: default
|
3
|
-
title: Contributing
|
4
|
-
nav_order: 5
|
5
|
-
has_children: false
|
6
|
-
---
|
7
|
-
|
8
|
-
|
9
|
-
# Contributions
|
10
|
-
|
11
|
-
Contributions, issues and pull requests are welcome. Please visit the [GitHub home](https://github.com/boc-tothefuture/openhab-jruby) for this project.
|
12
|
-
|
13
|
-
|
14
|
-
# License
|
15
|
-
This code is under the [eclipse v2 license](https://www.eclipse.org/legal/epl-2.0/)
|
16
|
-
|
17
|
-
|
18
|
-
# Source
|
19
|
-
JRuby Scripting OpenHAB is GitHub repo is [here](https://github.com/boc-tothefuture/openhab-jruby). Code is under the eclipse v2 license.
|
20
|
-
|
21
|
-
|
22
|
-
# Development Environment Setup
|
23
|
-
The development process has been tested on MacOS, others operating systems may work.
|
24
|
-
|
25
|
-
1. Install Ruby 2.5.8 - Recommended method is using [rbenv](https://github.com/rbenv/rbenv#installation)
|
26
|
-
2. Fork [the repo](https://github.com/boc-tothefuture/openhab-jruby) and clone it
|
27
|
-
3. Install [bundler](https://bundler.io/)
|
28
|
-
4. Run `bundler install` from inside of the repo directory
|
29
|
-
5. Run `bundle openhab:setup` from inside of the repo directory. This will download a copy of OpenHAB local in your development environment, start it and prepare it for JRuby OpenHAB Scripting Development
|
30
|
-
|
31
|
-
# Documentation
|
32
|
-
Documentation is written in [Yard](https://yardoc.org/) and the current documentation for this project is available [here](../yard).
|
33
|
-
|
34
|
-
|
35
|
-
# Development Process
|
36
|
-
1. Create a branch for your contribution
|
37
|
-
2. Write your tests the project uses [Behavior Driven Development](https://en.wikipedia.org/wiki/Behavior-driven_development) with [Cucumber](https://cucumber.io/). The features directory has many examples. Feel free ask in your PR if you need help.
|
38
|
-
3. Write your code
|
39
|
-
4. Verify your tests now pass by running `bundle exec cucumber features/<your feature file>.feature`
|
40
|
-
5. Update the documentation, run `bundle exec rake docs` to view the rendered documentation locally
|
41
|
-
6. Lint your code with `bundle exec rake lint` and ensure you have created any [Rubocop](https://github.com/rubocop-hq/rubocop) or [cuke lint](https://github.com/enkessler/cuke_linter) violations
|
42
|
-
7. Update the [Changelog.md](https://github.com/boc-tothefuture/openhab-jruby/blob/main/CHANGELOG.md) describing your change using [this format](https://keepachangelog.com/en/1.0.0/)
|
43
|
-
8. Update the version in 'lib/openhab/version.rb' with the new version number, this project uses [SemVer](https://semver.org/) for versioning
|
44
|
-
9. Submit your PR!
|
45
|
-
|
46
|
-
If you get stuck or need help along the way, please open an issue.
|
47
|
-
|
@@ -1,123 +0,0 @@
|
|
1
|
-
---
|
2
|
-
layout: default
|
3
|
-
title: Rule Conversions
|
4
|
-
nav_order: 1
|
5
|
-
has_children: false
|
6
|
-
parent: Examples
|
7
|
-
---
|
8
|
-
|
9
|
-
|
10
|
-
## Conversion Examples
|
11
|
-
|
12
|
-
DSL
|
13
|
-
|
14
|
-
```ruby
|
15
|
-
rule 'Snap Fan to preset percentages'
|
16
|
-
when Member of CeilingFans changed
|
17
|
-
then
|
18
|
-
val fan = triggeringItem
|
19
|
-
val name = String.join(" ", fan.name.replace("LoadLevelStatus","").split("(?<!^)(?=[A-Z])"))
|
20
|
-
logInfo("Fan", "Ceiling fan group rule triggered for {}, value {}", name,fan.state)
|
21
|
-
switch fan {
|
22
|
-
case fan.state >0 && fan.state < 25 : {
|
23
|
-
logInfo("Fan", "Snapping {} to 25%", name)
|
24
|
-
sendCommand(fan, 25)
|
25
|
-
}
|
26
|
-
case fan.state > 25 && fan.state < 66 : {
|
27
|
-
logInfo("Fan", "Snapping {} to 66%", name)
|
28
|
-
sendCommand(fan, 66)
|
29
|
-
}
|
30
|
-
case fan.state > 66 && fan.state < 100 : {
|
31
|
-
logInfo("Fan", "Snapping {} to 100%", name)
|
32
|
-
sendCommand(fan, 100)
|
33
|
-
}
|
34
|
-
default: {
|
35
|
-
logInfo("Fan", "{} set to snapped percentage, no action taken", name)
|
36
|
-
}
|
37
|
-
}
|
38
|
-
end
|
39
|
-
```
|
40
|
-
|
41
|
-
Ruby
|
42
|
-
```ruby
|
43
|
-
rule 'Snap Fan to preset percentages' do
|
44
|
-
changed(*CeilingFans)
|
45
|
-
triggered do |item|
|
46
|
-
snapped = case item
|
47
|
-
when 0...25 then 25
|
48
|
-
when 26...66 then 66
|
49
|
-
when 67...100 then 100
|
50
|
-
end
|
51
|
-
if snapped
|
52
|
-
logger.info("Snapping fan #{item.id} to #{snapped}")
|
53
|
-
item << snapped
|
54
|
-
else
|
55
|
-
logger.info("#{item.id} set to snapped percentage, no action taken.")
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
```
|
60
|
-
|
61
|
-
Python
|
62
|
-
```python
|
63
|
-
@rule("Use Supplemental Heat In Office")
|
64
|
-
@when("Item Office_Temperature changed")
|
65
|
-
@when("Item Thermostats_Upstairs_Temp changed")
|
66
|
-
@when("Item Office_Occupied changed")
|
67
|
-
@when("Item OfficeDoor changed")
|
68
|
-
def office_heater(event):
|
69
|
-
office_temp = ir.getItem("Office_Temperature").getStateAs(QuantityType).toUnit(ImperialUnits.FAHRENHEIT).floatValue()
|
70
|
-
hall_temp = items["Thermostats_Upstairs_Temp"].floatValue()
|
71
|
-
therm_status = items["Thermostats_Upstairs_Status"].intValue()
|
72
|
-
heat_set = items["Thermostats_Upstairs_Heat_Set"].intValue()
|
73
|
-
occupied = items["Office_Occupied"]
|
74
|
-
door = items["OfficeDoor"]
|
75
|
-
difference = hall_temp - office_temp
|
76
|
-
logging.warn("Office Temperature: {} Upstairs Hallway Temperature: {} Differnce: {}".format(office_temp,hall_temp,difference))
|
77
|
-
logging.warn("Themostat Status: {} Heat Set: {}".format(therm_status,heat_set))
|
78
|
-
logging.warn("Office Occupied: {}".format(occupied))
|
79
|
-
logging.warn("Office Door: {}".format(door))
|
80
|
-
degree_difference = 2.0
|
81
|
-
trigger = False
|
82
|
-
if heat_set > office_temp:
|
83
|
-
if difference > degree_difference:
|
84
|
-
if occupied == ON:
|
85
|
-
if True:
|
86
|
-
if therm_status == 0:
|
87
|
-
if door == CLOSED:
|
88
|
-
trigger = True
|
89
|
-
else:
|
90
|
-
logging.warn("Door Open, no action taken")
|
91
|
-
else:
|
92
|
-
logging.warn("HVAC on, no action taken")
|
93
|
-
else:
|
94
|
-
logging.warn("Office unoccupied, no action taken")
|
95
|
-
else:
|
96
|
-
logging.warn("Thermstat and office temperature difference {} is less than {} degrees, no action taken".format(difference, degree_difference))
|
97
|
-
else:
|
98
|
-
logging.warn("Heat set lower than office temp, no action taken".format(difference, degree_difference))
|
99
|
-
|
100
|
-
|
101
|
-
if trigger:
|
102
|
-
logging.warn("Turning on heater")
|
103
|
-
events.sendCommand("Lights_Office_Outlet","ON")
|
104
|
-
else:
|
105
|
-
logging.warn("Turning off heater")
|
106
|
-
events.sendCommand("Lights_Office_Outlet","OFF")
|
107
|
-
```
|
108
|
-
|
109
|
-
|
110
|
-
Ruby
|
111
|
-
```ruby
|
112
|
-
rule 'Use supplemental heat in office' do
|
113
|
-
changed Office_Temperature, Thermostats_Upstairs_Temp, Office_Occupied, OfficeDoor
|
114
|
-
run { Lights_Office_Outlet << ON }
|
115
|
-
only_if Office_Occupied
|
116
|
-
only_if { OfficeDoor == CLOSED }
|
117
|
-
only_if { Thermostate_Upstairs_Heat_Set > Office_Temperature }
|
118
|
-
only_if { unit(°F') { Thermostat_Upstairs_Temp - Office_Temperature > 2 } }
|
119
|
-
otherwise { Lights_Office_Outlet << OFF if Lights_Office_Outlet.on? }
|
120
|
-
end
|
121
|
-
```
|
122
|
-
|
123
|
-
|
data/docs/examples/index.md
DELETED
@@ -1,61 +0,0 @@
|
|
1
|
-
---
|
2
|
-
layout: default
|
3
|
-
title: Examples
|
4
|
-
nav_order: 5
|
5
|
-
has_children: true
|
6
|
-
---
|
7
|
-
|
8
|
-
## Examples
|
9
|
-
|
10
|
-
### Log "Rule *name* executed" an entry every minute
|
11
|
-
|
12
|
-
```ruby
|
13
|
-
rule 'Simple' do
|
14
|
-
every :minute
|
15
|
-
run { logger.info "Rule #{name} executed" }
|
16
|
-
end
|
17
|
-
|
18
|
-
```
|
19
|
-
|
20
|
-
### The rule definition itself is just ruby code
|
21
|
-
|
22
|
-
Meaning you can use code itself to generate your rules*
|
23
|
-
|
24
|
-
```ruby
|
25
|
-
rule 'Log whenever a Virtual Switch Changes' do
|
26
|
-
items.select { |item| item.is_a? Switch }
|
27
|
-
.select { |item| item.label&.include? 'Virtual' }
|
28
|
-
.each do |item|
|
29
|
-
changed item
|
30
|
-
end
|
31
|
-
|
32
|
-
run { |event| logger.info "#{event.item.id} changed from #{event.last} to #{event.state}" }
|
33
|
-
end
|
34
|
-
```
|
35
|
-
|
36
|
-
Which is the same as
|
37
|
-
```ruby
|
38
|
-
virtual_switches = items.select { |item| item.is_a? Switch }
|
39
|
-
.select { |item| item.label&.include? 'Virtual' }
|
40
|
-
|
41
|
-
rule 'Log whenever a Virtual Switch Changes 2' do
|
42
|
-
changed virtual_switches
|
43
|
-
run { |event| logger.info "#{event.item.id} changed from #{event.last} to #{event.state} 2" }
|
44
|
-
end
|
45
|
-
```
|
46
|
-
|
47
|
-
This will accomplish the same thing, but create a new rule for each virtual switch*
|
48
|
-
```ruby
|
49
|
-
virtual_switches = items.select { |item| item.is_a? Switch }
|
50
|
-
.select { |item| item.label&.include? 'Virtual' }
|
51
|
-
|
52
|
-
virtual_switches.each do |switch|
|
53
|
-
rule "Log whenever a #{switch.label} Changes" do
|
54
|
-
changed switch
|
55
|
-
run { |event| logger.info "#{event.item.id} changed from #{event.last} to #{event.state} 2" }
|
56
|
-
end
|
57
|
-
end
|
58
|
-
```
|
59
|
-
|
60
|
-
* Take care when doing this as the the items/groups are processed when the rules file is processed, meaning that new items/groups will not automatically generate new rules.
|
61
|
-
|
data/docs/index.md
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
---
|
2
|
-
layout: default
|
3
|
-
title: OpenHAB JRuby Scripting
|
4
|
-
nav_order: 1
|
5
|
-
has_children: false
|
6
|
-
---
|
7
|
-
|
8
|
-
|
9
|
-
# OpenHAB JRuby Scripting
|
10
|
-
|
11
|
-
The OpenHAB JRuby scripting helpers bring the power of the Ruby language to OpenHAB. Rather than being a pure pass-through to OpenHAB, they provide a Ruby-like experience when building automation rules within OpenHAB.
|
12
|
-
|
13
|
-
|
14
|
-
## Discussion
|
15
|
-
Please see [this thread](https://community.openhab.org/t/jruby-openhab-rules-system/110598) on the OpenHAB forum for further discussion. Ideas and suggestions are welcome.
|
16
|
-
|
17
|
-
|
18
|
-
## State
|
19
|
-
This is an alpha and syntax and all elements are subject to change as the library evolves.
|
data/docs/installation/index.md
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
---
|
2
|
-
layout: default
|
3
|
-
title: Installation
|
4
|
-
nav_order: 3
|
5
|
-
has_children: false
|
6
|
-
---
|
7
|
-
|
8
|
-
## Prerequisites
|
9
|
-
1. OpenHAB 3
|
10
|
-
2. The JRuby Scripting Language Addon
|
11
|
-
3. This scripting library
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
## Installation
|
16
|
-
1. Install the latest Jruby Scripting Language Addon from [here](https://github.com/boc-tothefuture/openhab-jruby/releases/) to the folder `<openhab_base_dir>/addons/`
|
17
|
-
2. Create directory for JRuby Libraries `<openhab_base_dir>/conf/automation/lib/ruby/lib`
|
18
|
-
3. Create directory for Ruby Gems `<openhab_base_dir>/conf/automation/lib/ruby/gem_home`
|
19
|
-
4. Download latest JRuby Libraries from [here](https://github.com/boc-tothefuture/openhab-jruby/releases/)
|
20
|
-
5. Install libraries in `<openhab_base_dir>/conf/automation/lib/ruby/lib`
|
21
|
-
6. Update OpenHAB start.sh with the following environment variables so that the library can be loaded and gems can be installed
|
22
|
-
```
|
23
|
-
export RUBYLIB=<openhab_base_dir>/conf/automation/lib/ruby/lib
|
24
|
-
export GEM_HOME=<openhab_base_dir>/conf/automation/lib/ruby/gem_home
|
25
|
-
```
|
26
|
-
7. Restart OpenHAB
|