openhab-jrubyscripting 5.0.0.rc2 → 5.0.0.rc3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/lib/openhab/core/items/generic_item.rb +13 -5
  3. data/lib/openhab/core/items/metadata/hash.rb +17 -34
  4. data/lib/openhab/core/items/persistence.rb +2 -0
  5. data/lib/openhab/core/items/semantics/enumerable.rb +6 -4
  6. data/lib/openhab/core/profile_factory.rb +2 -0
  7. data/lib/openhab/core/provider.rb +8 -1
  8. data/lib/openhab/core/rules/provider.rb +25 -0
  9. data/lib/openhab/core/rules/registry.rb +76 -0
  10. data/lib/openhab/core/rules/rule.rb +150 -0
  11. data/lib/openhab/core/rules.rb +25 -0
  12. data/lib/openhab/core/timer.rb +5 -7
  13. data/lib/openhab/core/types.rb +1 -1
  14. data/lib/openhab/core.rb +0 -16
  15. data/lib/openhab/core_ext/java/list.rb +436 -0
  16. data/lib/openhab/core_ext/java/map.rb +66 -0
  17. data/lib/openhab/core_ext/java/zoned_date_time.rb +1 -2
  18. data/lib/openhab/core_ext/ruby/date.rb +2 -0
  19. data/lib/openhab/core_ext/ruby/date_time.rb +53 -0
  20. data/lib/openhab/core_ext/ruby/time.rb +88 -86
  21. data/lib/openhab/dsl/events/watch_event.rb +1 -1
  22. data/lib/openhab/dsl/items/builder.rb +8 -3
  23. data/lib/openhab/dsl/items/ensure.rb +6 -2
  24. data/lib/openhab/dsl/items/timed_command.rb +10 -11
  25. data/lib/openhab/dsl/rules/automation_rule.rb +36 -13
  26. data/lib/openhab/dsl/rules/builder.rb +99 -8
  27. data/lib/openhab/dsl/rules/name_inference.rb +0 -5
  28. data/lib/openhab/dsl/rules/terse.rb +1 -2
  29. data/lib/openhab/dsl/rules/triggers/conditions/duration.rb +17 -53
  30. data/lib/openhab/dsl/rules/triggers/conditions/proc.rb +0 -3
  31. data/lib/openhab/dsl/rules/triggers/watch/watch_handler.rb +1 -1
  32. data/lib/openhab/dsl/rules.rb +0 -21
  33. data/lib/openhab/dsl/thread_local.rb +2 -2
  34. data/lib/openhab/dsl/timer_manager.rb +3 -1
  35. data/lib/openhab/dsl/version.rb +1 -1
  36. data/lib/openhab/dsl.rb +12 -105
  37. data/lib/openhab/log.rb +2 -2
  38. data/lib/openhab/rspec/example_group.rb +42 -0
  39. data/lib/openhab/rspec/helpers.rb +31 -8
  40. data/lib/openhab/rspec/hooks.rb +3 -6
  41. data/lib/openhab/rspec/karaf.rb +45 -27
  42. data/lib/openhab/rspec/mocks/synchronous_executor.rb +11 -4
  43. data/lib/openhab/rspec/mocks/timer.rb +2 -1
  44. data/lib/openhab/rspec/suspend_rules.rb +4 -2
  45. metadata +23 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0e925ebd72648fa8efb76592f6053d12f2fe9151173fa91d3f47a2d298f268fc
4
- data.tar.gz: 6d84217a8505a72e2da686188a741d6644eee645255595d5d2cf455a2840e015
3
+ metadata.gz: ce249607265a008aa969e2edbd56302edd70a67a01dfebaec9ad67b7e5f1ad27
4
+ data.tar.gz: ac0c8d25509a8be8374a3f15fecd2e575da8cb08b82268aef41414f64f7a3b38
5
5
  SHA512:
6
- metadata.gz: 5330bd233b45839cf1780815e86d170ff8a33b4093debfe85cae7e09e631d7a14c7bb2c7e84500da6a41fd0b89f81a160e4279659312323e6fb207bd0da6e632
7
- data.tar.gz: 28f42c9a625aa33ef258f4d789e9fe116a1bf36e63bc58e2574d1a884ed8bde74bac03484566abd04909462ec4c9bdef543973416a2420fa02fea274122e3889
6
+ metadata.gz: 7c082f0949b6bc55ebf48b1489eade3f6bbcf25181d6741e29697dbb5ef5221abf583c78fb8ad46596b5ea10957e9d4b5d2d5dfe35097eea004f005d06683d48
7
+ data.tar.gz: ee7e740d0dd1233462521313c31145971bed68e2830c765bad27b8762d064bdf154993a2d733fc7743240bd55aec9e0eecd8cb4f2d569dbd0c599e765140cd06
@@ -65,16 +65,23 @@ module OpenHAB
65
65
  #
66
66
  # Send a command to this item
67
67
  #
68
+ # When this method is chained after the {OpenHAB::DSL::Items::Ensure::Ensurable#ensure ensure}
69
+ # method, or issued inside an {OpenHAB::DSL.ensure_states ensure_states} block,
70
+ # the command will only be sent if the item is not already in the same state.
71
+ #
68
72
  # @param [Command] command command to send to the item
69
- # @return [self]
73
+ # @return [self, nil] nil when `ensure` is in effect and the item was already in the same state,
74
+ # otherwise the item.
70
75
  #
71
- # @see DSL::Items::TimedCommand#command
76
+ # @see DSL::Items::TimedCommand#command Timed Command
77
+ # @see OpenHAB::DSL.ensure_states ensure_states
78
+ # @see DSL::Items::Ensure::Ensurable#ensure ensure
72
79
  #
73
80
  def command(command)
74
81
  command = format_command(command)
75
82
  logger.trace "Sending Command #{command} to #{name}"
76
83
  $events.send_command(self, command)
77
- self
84
+ Proxy.new(self)
78
85
  end
79
86
 
80
87
  # not an alias to allow easier stubbing and overriding
@@ -88,13 +95,14 @@ module OpenHAB
88
95
  # Send an update to this item
89
96
  #
90
97
  # @param [State] state
91
- # @return [self]
98
+ # @return [self, nil] nil when `ensure` is in effect and the item was already in the same state,
99
+ # otherwise the item.
92
100
  #
93
101
  def update(state)
94
102
  state = format_update(state)
95
103
  logger.trace "Sending Update #{state} to #{name}"
96
104
  $events.post_update(self, state)
97
- self
105
+ Proxy.new(self)
98
106
  end
99
107
 
100
108
  #
@@ -26,7 +26,7 @@ module OpenHAB
26
26
 
27
27
  extend Forwardable
28
28
  def_delegators :@metadata, :configuration, :hash, :to_s, :uid, :value
29
- protected :configuration
29
+ private :configuration
30
30
 
31
31
  # @!method to_hash
32
32
  # Implicit conversion to {::Hash}.
@@ -37,6 +37,9 @@ module OpenHAB
37
37
  # still others (mutators) must be manually implemented below.
38
38
  def_delegators :configuration,
39
39
  :any?,
40
+ :compact,
41
+ :compare_by_identity?,
42
+ :deconstruct_keys,
40
43
  :default,
41
44
  :default_proc,
42
45
  :each,
@@ -47,6 +50,8 @@ module OpenHAB
47
50
  :filter,
48
51
  :flatten,
49
52
  :has_value?,
53
+ :invert,
54
+ :key,
50
55
  :keys,
51
56
  :length,
52
57
  :rassoc,
@@ -57,8 +62,10 @@ module OpenHAB
57
62
  :to_a,
58
63
  :to_h,
59
64
  :to_hash,
65
+ :transform_keys,
66
+ :transform_values,
67
+ :values,
60
68
  :value?
61
- def_delegators :to_h, :invert, :merge, :transform_keys, :transform_values
62
69
 
63
70
  def_delegator :uid, :namespace
64
71
 
@@ -88,7 +95,7 @@ module OpenHAB
88
95
  end
89
96
 
90
97
  # @!visibility private
91
- def initialize(metadata)
98
+ def initialize(metadata = nil)
92
99
  @metadata = metadata
93
100
  end
94
101
 
@@ -156,7 +163,7 @@ module OpenHAB
156
163
  return false unless value == other.value
157
164
  end
158
165
 
159
- to_h < other
166
+ configuration < other
160
167
  end
161
168
 
162
169
  # @!visibility private
@@ -166,7 +173,7 @@ module OpenHAB
166
173
  return false unless value == other.value
167
174
  end
168
175
 
169
- to_h <= other
176
+ configuration <= other
170
177
  end
171
178
 
172
179
  # @!visibility private
@@ -176,7 +183,7 @@ module OpenHAB
176
183
 
177
184
  return configuration == other.configuration
178
185
  elsif value.empty? && other.respond_to?(:to_hash)
179
- return configuration.to_h == other.to_hash
186
+ return configuration == other.to_hash
180
187
  end
181
188
  false
182
189
  end
@@ -188,7 +195,7 @@ module OpenHAB
188
195
  return false unless value == other.value
189
196
  end
190
197
 
191
- to_h > other
198
+ configuration > other
192
199
  end
193
200
 
194
201
  # @!visibility private
@@ -198,7 +205,7 @@ module OpenHAB
198
205
  return false unless value == other.value
199
206
  end
200
207
 
201
- to_h >= other
208
+ configuration >= other
202
209
  end
203
210
 
204
211
  # @!visibility private
@@ -226,13 +233,9 @@ module OpenHAB
226
233
  replace({})
227
234
  end
228
235
 
229
- # @!visibility private
230
- alias_method :compact, :to_h
231
-
232
236
  # @!visibility private
233
237
  def compact!
234
- # no action; impossible to have nil keys
235
- self
238
+ replace(compact)
236
239
  end
237
240
 
238
241
  # @!visibility private
@@ -240,16 +243,6 @@ module OpenHAB
240
243
  raise NotImplementedError
241
244
  end
242
245
 
243
- # @!visibility private
244
- def compare_by_identity?
245
- false
246
- end
247
-
248
- # @!visibility private
249
- def deconstruct_keys
250
- self
251
- end
252
-
253
246
  # @!visibility private
254
247
  def default=(*)
255
248
  raise NotImplementedError
@@ -304,11 +297,6 @@ module OpenHAB
304
297
  self
305
298
  end
306
299
 
307
- # @!visibility private
308
- def key(value)
309
- rassoc(value)&.first
310
- end
311
-
312
300
  # @!visibility private
313
301
  def key?(key)
314
302
  configuration.key?(key.to_s)
@@ -360,7 +348,7 @@ module OpenHAB
360
348
 
361
349
  # @!visibility private
362
350
  def slice(*keys)
363
- to_h.slice(*keys.map(&:to_s))
351
+ configuration.slice(*keys.map(&:to_s))
364
352
  end
365
353
 
366
354
  # @!visibility private
@@ -380,11 +368,6 @@ module OpenHAB
380
368
  replace(transform_values(&block))
381
369
  end
382
370
 
383
- # @!visibility private
384
- def values
385
- configuration.values.to_a
386
- end
387
-
388
371
  # @!visibility private
389
372
  def values_at(*keys)
390
373
  configuration.values_at(*keys.map(&:to_s))
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "delegate"
4
+
3
5
  require_relative "generic_item"
4
6
 
5
7
  module OpenHAB
@@ -72,15 +72,17 @@ module Enumerable
72
72
  # @!group Items State and Command Methods
73
73
 
74
74
  # Send a command to every item in the collection
75
- # @return [self]
75
+ # @return [self, nil] nil when `ensure` is in effect and all the items were already in the same state,
76
+ # otherwise self
76
77
  def command(command)
77
- each { |i| i.command(command) }
78
+ self if count { |i| i.command(command) }.positive?
78
79
  end
79
80
 
80
81
  # Update the state of every item in the collection
81
- # @return [self]
82
+ # @return [self, nil] nil when `ensure` is in effect and all the items were already in the same state,
83
+ # otherwise self
82
84
  def update(state)
83
- each { |i| i.update(state) }
85
+ self if count { |i| i.update(state) }.positive?
84
86
  end
85
87
 
86
88
  # @!method refresh
@@ -87,6 +87,8 @@ module OpenHAB
87
87
  DSL::ThreadLocal.thread_local(**@thread_locals) do
88
88
  @block.call(event, **kwargs)
89
89
  rescue Exception => e
90
+ raise if defined?(::RSpec)
91
+
90
92
  @block.binding.eval("self").logger.log_exception(e)
91
93
  end
92
94
  end
@@ -13,6 +13,7 @@ module OpenHAB
13
13
  TYPE_TO_PROVIDER_TYPE = {
14
14
  org.openhab.core.items.Item.java_class => :items,
15
15
  org.openhab.core.items.Metadata.java_class => :metadata,
16
+ org.openhab.core.automation.Rule.java_class => :rules,
16
17
  org.openhab.core.thing.Thing.java_class => :things,
17
18
  org.openhab.core.thing.link.ItemChannelLink.java_class => :links
18
19
  }.freeze
@@ -37,6 +38,7 @@ module OpenHAB
37
38
  # @abstract
38
39
  class Provider < org.openhab.core.common.registry.AbstractProvider
39
40
  include org.openhab.core.common.registry.ManagedProvider
41
+ include Enumerable
40
42
  include Singleton
41
43
  public_class_method :new
42
44
 
@@ -140,6 +142,11 @@ module OpenHAB
140
142
  end
141
143
  end
142
144
 
145
+ # @!visibility private
146
+ def each(&block)
147
+ @elements.each_value(&block)
148
+ end
149
+
143
150
  # @return [String]
144
151
  def inspect
145
152
  "#<#{self.class.name}:#{object_id}>"
@@ -192,7 +199,7 @@ module OpenHAB
192
199
  def update(element)
193
200
  old_element = @elements[element.uid]
194
201
  if old_element
195
- @elements[element.uid]
202
+ @elements[element.uid] = element
196
203
  notify_listeners_about_updated_element(old_element, element)
197
204
  end
198
205
  old_element
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenHAB
4
+ module Core
5
+ module Rules
6
+ #
7
+ # Provides rules created in Ruby to openHAB
8
+ #
9
+ class Provider < Core::Provider
10
+ include org.openhab.core.automation.RuleProvider
11
+
12
+ class << self
13
+ #
14
+ # The Rule registry
15
+ #
16
+ # @return [org.openhab.core.automation.RuleRegistry]
17
+ #
18
+ def registry
19
+ $rules
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "singleton"
4
+
5
+ module OpenHAB
6
+ module Core
7
+ module Rules
8
+ #
9
+ # Provides access to all OpenHAB {Rule rules}, and acts like an array.
10
+ #
11
+ class Registry
12
+ include LazyArray
13
+ include Singleton
14
+
15
+ #
16
+ # Gets a specific Rule
17
+ #
18
+ # @param [String] uid Rule UID
19
+ # @return [Rule, nil]
20
+ #
21
+ def [](uid)
22
+ $rules.get(uid)
23
+ end
24
+ alias_method :include?, :[]
25
+ alias_method :key?, :[]
26
+ # @deprecated
27
+ alias_method :has_key?, :[]
28
+
29
+ #
30
+ # Explicit conversion to array
31
+ #
32
+ # @return [Array<Rule>]
33
+ #
34
+ def to_a
35
+ $rules.all.to_a
36
+ end
37
+
38
+ #
39
+ # Enter the Rule Builder DSL.
40
+ # @param (see Core::Provider.current)
41
+ # @yield Block executed in the context of a {DSL::Rules::Builder}.
42
+ # @return [Object] The result of the block.
43
+ #
44
+ def build(preferred_provider = nil, &block)
45
+ DSL::Rules::Builder.new(preferred_provider).instance_eval(&block)
46
+ end
47
+
48
+ #
49
+ # Remove a Rule.
50
+ #
51
+ # The rule must be a managed thing (typically created by Ruby or in the UI).
52
+ #
53
+ # @param [String, Rule] rule_uid
54
+ # @return [Rule, nil] The removed rule, if found.
55
+ #
56
+ # @example
57
+ # my_rule = rule do
58
+ # every :day
59
+ # run { nil }
60
+ # end
61
+ #
62
+ # rules.remove(my_rule)
63
+ #
64
+ def remove(rule_uid)
65
+ rule_uid = rule_uid.uid if rule_uid.is_a?(Rule)
66
+ provider = Provider.registry.provider_for(rule_uid)
67
+ unless provider.is_a?(org.openhab.core.common.registry.ManagedProvider)
68
+ raise "Cannot remove rule #{rule_uid} from non-managed provider #{provider.inspect}"
69
+ end
70
+
71
+ provider.remove(rule_uid)
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,150 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenHAB
4
+ module Core
5
+ module Rules
6
+ # @interface
7
+ java_import org.openhab.core.automation.Rule
8
+
9
+ #
10
+ # A {Rule} is a chunk of code that can execute when certain conditions are
11
+ # met, enabling the core dynamic functionality of openHAB.
12
+ #
13
+ module Rule
14
+ #
15
+ # @!method visible?
16
+ # Check if visibility == `VISIBLE`
17
+ # @return [true,false]
18
+ #
19
+
20
+ #
21
+ # @!method hidden?
22
+ # Check if visibility == `HIDDEN`
23
+ # @return [true,false]
24
+ #
25
+
26
+ #
27
+ # @!method expert?
28
+ # Check if visibility == `EXPERT`
29
+ # @return [true,false]
30
+ #
31
+
32
+ #
33
+ # @!method initializing?
34
+ # Check if rule status == `INITIALIZING`
35
+ # @return [true,false]
36
+ #
37
+ #
38
+ # @!method idle?
39
+ # Check if rule status == `IDLE`
40
+ # @return [true,false]
41
+ #
42
+ #
43
+ # @!method running?
44
+ # Check if rule status == `RUNNING`
45
+ # @return [true,false]
46
+ #
47
+
48
+ Visibility.constants.each do |visibility|
49
+ class_eval <<~RUBY, __FILE__, __LINE__ + 1
50
+ def #{visibility.to_s.downcase}? # def visibile?
51
+ visibility == Visibility::#{visibility} # visibility == Visibility::VISIBLE
52
+ end # end
53
+ RUBY
54
+ end
55
+
56
+ RuleStatus.constants.each do |status|
57
+ next if status == :UNINITIALIZED
58
+
59
+ class_eval <<~RUBY, __FILE__, __LINE__ + 1
60
+ def #{status.to_s.downcase}? # def initializing?
61
+ status == RuleStatus::#{status} # status == RuleStatus::INITIALIZING
62
+ end # end
63
+ RUBY
64
+ end
65
+
66
+ #
67
+ # Check if rule status == `UNINITIALIZED`
68
+ #
69
+ # @return [true,false]
70
+ #
71
+ def uninitialized?
72
+ s = status
73
+ s.nil? || s == RuleStatus::UNINITIALIZED
74
+ end
75
+
76
+ #
77
+ # Enable the Rule
78
+ #
79
+ # @param [true, false] enabled
80
+ # @return [void]
81
+ #
82
+ def enable(enabled: true)
83
+ Rules.manager.set_enabled(uid, enabled)
84
+ end
85
+
86
+ #
87
+ # Disable the Rule
88
+ #
89
+ # @return [void]
90
+ #
91
+ def disable
92
+ enable(enabled: false)
93
+ end
94
+
95
+ #
96
+ # Check if the rule's status detail == `DISABLED`
97
+ #
98
+ # @return [true, false]
99
+ #
100
+ def disabled?
101
+ info = status_info
102
+ info.nil? || info.status_detail == RuleStatusDetail::DISABLED
103
+ end
104
+
105
+ #
106
+ # @!attribute [r] status
107
+ # @return [RuleStatus nil]
108
+ #
109
+ def status
110
+ Rules.manager.get_status(uid)
111
+ end
112
+
113
+ #
114
+ # @!attribute [r] status_info
115
+ # @return [RuleStatusInfo, nil]
116
+ #
117
+ def status_info
118
+ Rules.manager.get_status_info(uid)
119
+ end
120
+
121
+ # @return [String]
122
+ def inspect
123
+ r = "#<OpenHAB::Core::Rules::Rule #{uid}"
124
+ r += " #{name.inspect}" if name
125
+ r += " #{visibility}" unless visible?
126
+ r += " #{status || "<detached>"}"
127
+ r += " (#{status_info.status_detail})" if status_info && status_info.status_detail != RuleStatusDetail::NONE
128
+ r += " tags=#{tags.to_a.inspect}" unless tags.empty?
129
+ r += " configuration=#{configuration.properties.to_h}" if configuration && !configuration.properties.empty?
130
+ "#{r}>"
131
+ end
132
+
133
+ # @return [String]
134
+ def to_s
135
+ uid
136
+ end
137
+
138
+ #
139
+ # Manually trigger the rule
140
+ #
141
+ # @param [Object, nil] event The event to pass to the rule's execution blocks.
142
+ # @return [void]
143
+ #
144
+ def trigger(event = nil)
145
+ Rules.manager.run_now(uid, false, { "event" => event })
146
+ end
147
+ end
148
+ end
149
+ end
150
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenHAB
4
+ module Core
5
+ #
6
+ # Contains the core {Rule} as well as related infrastructure.
7
+ #
8
+ module Rules
9
+ java_import org.openhab.core.automation.RuleStatus,
10
+ org.openhab.core.automation.RuleStatusInfo,
11
+ org.openhab.core.automation.RuleStatusDetail,
12
+ org.openhab.core.automation.Visibility
13
+
14
+ class << self
15
+ #
16
+ # @!attribute [r] rule_manager
17
+ # @return [org.openhab.core.automation.RuleManager] The OpenHAB rule manager/engine
18
+ #
19
+ def manager
20
+ @manager ||= OSGi.service("org.openhab.core.automation.RuleManager")
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -35,7 +35,6 @@ module OpenHAB
35
35
  # @return [Object, nil]
36
36
  attr_accessor :id
37
37
 
38
- # @!visibility private
39
38
  # @!visibility private
40
39
  attr_reader :block
41
40
 
@@ -84,6 +83,7 @@ module OpenHAB
84
83
  # @return [self]
85
84
  #
86
85
  def reschedule(time = nil)
86
+ Thread.current[:openhab_rescheduled_timer] = true if Thread.current[:openhab_rescheduled_timer] == self
87
87
  DSL.timers.add(self)
88
88
  @timer.reschedule(new_execution_time(time || @time))
89
89
  self
@@ -119,12 +119,10 @@ module OpenHAB
119
119
  # @return [void]
120
120
  #
121
121
  def execute
122
- last_execution_time = execution_time
123
- DSL::ThreadLocal.thread_local(**@thread_locals) do
124
- @block.call(self)
125
- end
126
- # don't remove ourselves if we were rescheduled in the block
127
- DSL.timers.delete(self) if execution_time == last_execution_time
122
+ Thread.current[:openhab_rescheduled_timer] = self
123
+ DSL::ThreadLocal.thread_local(**@thread_locals) { @block.call(self) }
124
+ DSL.timers.delete(self) unless Thread.current[:openhab_rescheduled_timer] == true
125
+ Thread.current[:openhab_rescheduled_timer] = nil
128
126
  end
129
127
 
130
128
  #
@@ -13,7 +13,7 @@ module OpenHAB
13
13
  # Types are the specific data types that commands and states are. They can be
14
14
  # sent to items, be the current state of an item, or be the `command`, `state`,
15
15
  # and `was` field of various
16
- # {group::OpenHAB::DSL::Rules::Builder::Triggers triggers}.
16
+ # {group::OpenHAB::DSL::Rules::BuilderDSL::Triggers triggers}.
17
17
  # Some types have additional useful methods.
18
18
  #
19
19
  module Types
data/lib/openhab/core.rb CHANGED
@@ -53,22 +53,6 @@ module OpenHAB
53
53
  def automation_manager
54
54
  $scriptExtension.get("automationManager")
55
55
  end
56
-
57
- #
58
- # @!attribute [r] rule_registry
59
- # @return [org.openhab.core.automation.RuleRegistry] The OpenHAB rule registry
60
- #
61
- def rule_registry
62
- $scriptExtension.get("ruleRegistry")
63
- end
64
-
65
- #
66
- # @!attribute [r] rule_manager
67
- # @return [org.openhab.core.automation.RuleManager] The OpenHAB rule manager/engine
68
- #
69
- def rule_manager
70
- @rule_manager ||= OSGi.service("org.openhab.core.automation.RuleManager")
71
- end
72
56
  end
73
57
  end
74
58
  end