openhab-scripting 2.24.0 → 2.26.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4ce40856625691eb49a22ee19ac02bd030dba8cdf6e62f86736f9974cf7e2162
4
- data.tar.gz: 98e2226b8d4286f16a7f3b4ae40ef45246489df9464d1b3a6f5f7eea37ed93cb
3
+ metadata.gz: e85c64c68c9d566c3c4cf1070ea994fae3e3b57dda312c0854da87bff393ae1c
4
+ data.tar.gz: 9934d415111e5a680f1a8a7630ef1b08e0ed537cc537631100ee3dd73b1ce70d
5
5
  SHA512:
6
- metadata.gz: d3e2329d4a8b1ef612348f135a827e0011ffa0fa6b2958d2d333def5777db2ed76bd91e3cd0310c2075fe0b941b6936482a21c3ef20cca4a14283780629704b8
7
- data.tar.gz: d809054def4036f6b42faf9aa069a9f201fd0fd01120df1ebb32df91a5b7069a8073237153b1f0ac2ced5477e47a24547496fab48b317d57fbb100dc286eb59f
6
+ metadata.gz: dfe0d9a8e3ec9a4e4ed2121958d508f3ce0d552db041dbfa8099168f4e2963f5c823b68931a04a796d7311f138fcd64fd8733ad81ef859b7d8b751526e52cc1c
7
+ data.tar.gz: 440dd0f36d20abf8a27cab1b87f5f73c90c7b852ed7496fdfb2abd3f6d7e76add9fbf6f6c5ecccfad125a6e56182ba85839d2d14e218037d9ad073648226afe4
@@ -47,7 +47,7 @@ module OpenHAB
47
47
  class Group < SimpleDelegator
48
48
  extend Forwardable
49
49
 
50
- java_import org.openhab.core.items.GroupItem
50
+ java_import Java::OrgOpenhabCoreItems::GroupItem
51
51
 
52
52
  # @return [org.openhab.core.items.GroupItem] OpenHAB Java Group Item
53
53
  attr_accessor :group
@@ -56,8 +56,9 @@ module OpenHAB
56
56
  # @!method $2
57
57
  # Forwards to org.openhab.core.items.GroupItem
58
58
  # @see org::openhab::core::items::GroupItem
59
- def_delegator :@group, :name
60
- def_delegator :@group, :label
59
+ %i[name label << command].each do |method|
60
+ def_delegator :@group, method
61
+ end
61
62
 
62
63
  #
63
64
  # Gets members of this group that are themselves a group
@@ -65,7 +66,7 @@ module OpenHAB
65
66
  # @return [Set] Set of members that are of type group
66
67
  #
67
68
  def groups
68
- group.members.grep(org.openhab.core.items.GroupItem)
69
+ group.members.grep(GroupItem)
69
70
  end
70
71
 
71
72
  #
@@ -17,11 +17,13 @@ module OpenHAB
17
17
  class DateTimeItem
18
18
  extend Forwardable
19
19
  extend OpenHAB::DSL::Items::ItemDelegate
20
-
20
+ extend OpenHAB::DSL::Items::ItemCommand
21
21
  include Comparable
22
22
 
23
23
  def_item_delegator :@datetime_item
24
24
 
25
+ item_type Java::OrgOpenhabCoreLibraryItems::DateTimeItem
26
+
25
27
  #
26
28
  # Create a new DateTimeItem
27
29
  #
@@ -51,6 +51,21 @@ module OpenHAB
51
51
  end
52
52
  # rubocop:enable Style/HashEachMethods
53
53
  end
54
+
55
+ #
56
+ # Extract the accepted state and command types from the specified OpenHAB
57
+ # Item class and pass them to item_state/item_command
58
+ #
59
+ # @param [Java::JavaLang::Class] item_class a Class that implements Java::OrgOpenhabCoreItems::Item
60
+ #
61
+ def item_type(item_class)
62
+ item_class.field_reader(:ACCEPTED_DATA_TYPES)
63
+ item_class.field_reader(:ACCEPTED_COMMAND_TYPES)
64
+ item_class.ACCEPTED_DATA_TYPES.select(&:is_enum).grep_v(UnDefType).each { |type| item_state(type.ruby_class) }
65
+ item_class.ACCEPTED_COMMAND_TYPES.select(&:is_enum).grep_v(UnDefType).each do |type|
66
+ item_command(type.ruby_class)
67
+ end
68
+ end
54
69
  end
55
70
  end
56
71
  end
@@ -17,6 +17,7 @@ module OpenHAB
17
17
  # way of breaking it up into multiple classes
18
18
  class NumberItem < Numeric
19
19
  extend OpenHAB::DSL::Items::ItemDelegate
20
+ extend OpenHAB::DSL::Items::ItemCommand
20
21
 
21
22
  def_item_delegator :@number_item
22
23
 
@@ -25,6 +26,8 @@ module OpenHAB
25
26
  java_import 'tec.uom.se.format.SimpleUnitFormat'
26
27
  java_import 'tec.uom.se.AbstractUnit'
27
28
 
29
+ item_type Java::OrgOpenhabCoreLibraryItems::NumberItem
30
+
28
31
  #
29
32
  # Create a new NumberItem
30
33
  #
@@ -19,13 +19,7 @@ module OpenHAB
19
19
 
20
20
  def_item_delegator :@rollershutter_item
21
21
 
22
- java_import Java::OrgOpenhabCoreLibraryTypes::PercentType
23
- java_import Java::OrgOpenhabCoreLibraryTypes::UpDownType
24
- java_import Java::OrgOpenhabCoreLibraryTypes::StopMoveType
25
-
26
- item_command Java::OrgOpenhabCoreLibraryTypes::StopMoveType
27
- item_command Java::OrgOpenhabCoreLibraryTypes::UpDownType
28
- item_state Java::OrgOpenhabCoreLibraryTypes::UpDownType
22
+ item_type Java::OrgOpenhabCoreLibraryItems::RollershutterItem
29
23
 
30
24
  #
31
25
  # Creates a new RollershutterItem
@@ -13,7 +13,7 @@ module OpenHAB
13
13
  #
14
14
  class StringItem
15
15
  extend Forwardable
16
-
16
+ extend OpenHAB::DSL::Items::ItemCommand
17
17
  include Comparable
18
18
  extend OpenHAB::DSL::Items::ItemDelegate
19
19
 
@@ -23,6 +23,8 @@ module OpenHAB
23
23
 
24
24
  def_item_delegator :@string_item
25
25
 
26
+ item_type Java::OrgOpenhabCoreLibraryItems::StringItem
27
+
26
28
  #
27
29
  # Create a new StringItem
28
30
  #
@@ -25,7 +25,7 @@ module OpenHAB
25
25
 
26
26
  java_import Java::OrgOpenhabCoreLibraryTypes::OpenClosedType
27
27
 
28
- item_state Java::OrgOpenhabCoreLibraryTypes::OpenClosedType
28
+ item_type Java::OrgOpenhabCoreLibraryItems::ContactItem
29
29
 
30
30
  #
31
31
  # Compares contacts to OpenClosedTypes
@@ -30,8 +30,7 @@ module OpenHAB
30
30
  extend Forwardable
31
31
  extend OpenHAB::DSL::Items::ItemCommand
32
32
 
33
- item_state Java::OrgOpenhabCoreLibraryTypes::OnOffType
34
- item_command Java::OrgOpenhabCoreLibraryTypes::IncreaseDecreaseType
33
+ item_type Java::OrgOpenhabCoreLibraryItems::DimmerItem
35
34
 
36
35
  def_delegator :state, :to_s
37
36
 
@@ -103,8 +103,7 @@ module OpenHAB
103
103
  # @return [OpenHAB::DSL::MonkeyPatch::Items::MetadataItem], or nil if the namespace doesn't exist
104
104
  #
105
105
  def [](namespace)
106
- logger.trace("Namespaces (#{NamespaceAccessor.registry.getAll})")
107
- logger.trace("Namespace (#{NamespaceAccessor.registry.get(MetadataKey.new(namespace, @item_name))})")
106
+ logger.trace("Getting metadata for item: #{@item_name}, namespace '#{namespace}'")
108
107
  metadata = NamespaceAccessor.registry.get(MetadataKey.new(namespace, @item_name))
109
108
  MetadataItem.new(metadata: metadata) if metadata
110
109
  end
@@ -23,8 +23,7 @@ module OpenHAB
23
23
 
24
24
  java_import Java::OrgOpenhabCoreLibraryTypes::OnOffType
25
25
 
26
- item_command Java::OrgOpenhabCoreLibraryTypes::OnOffType
27
- item_state Java::OrgOpenhabCoreLibraryTypes::OnOffType
26
+ item_type Java::OrgOpenhabCoreLibraryItems::SwitchItem
28
27
 
29
28
  alias truthy? on?
30
29
 
@@ -255,13 +255,28 @@ module OpenHAB
255
255
  event = inputs&.dig('event')
256
256
 
257
257
  while (task = run_queue.shift)
258
- case task
259
- when RuleConfig::Run then process_run_task(event, task)
260
- when RuleConfig::Trigger then process_trigger_task(event, task)
261
- when RuleConfig::Delay then process_delay_task(inputs, mod, run_queue, task)
262
- when RuleConfig::Otherwise then process_otherwise_task(event, task)
258
+ if task.is_a? RuleConfig::Delay
259
+ process_delay_task(inputs, mod, run_queue, task)
260
+ else
261
+ process_task(event, task)
263
262
  end
264
263
  end
264
+ rescue StandardError => e
265
+ print_backtrace(e)
266
+ end
267
+
268
+ #
269
+ # Dispatch execution block tasks to different methods
270
+ #
271
+ # @param [OpenHab Event] event that triggered the rule
272
+ # @param [Task] task task containing otherwise block to execute
273
+ #
274
+ def process_task(event, task)
275
+ case task
276
+ when RuleConfig::Run then process_run_task(event, task)
277
+ when RuleConfig::Trigger then process_trigger_task(event, task)
278
+ when RuleConfig::Otherwise then process_otherwise_task(event, task)
279
+ end
265
280
  end
266
281
 
267
282
  #
@@ -316,6 +331,16 @@ module OpenHAB
316
331
  task.block.call(event)
317
332
  end
318
333
 
334
+ #
335
+ # Print error and stack trace without calls to internal classes
336
+ #
337
+ # @param [Exception] error A rescued error
338
+ #
339
+ def print_backtrace(error)
340
+ error = logger.clean_backtrace(error)
341
+ logger.error { "#{error.message} (#{error.class})\nIn rule: #{name}\n#{error.backtrace&.join("\n")}" }
342
+ end
343
+
319
344
  #
320
345
  # Create a new hash in which all elements are converted to strings
321
346
  #
@@ -79,7 +79,7 @@ module OpenHAB
79
79
  procs, items = conditions.flatten.partition { |condition| condition.is_a? Proc }
80
80
  logger.trace("Procs: #{procs} Items: #{items}")
81
81
 
82
- items.each { |item| logger.trace("#{item} truthy? #{item.truthy?}") }
82
+ items.each { |item| logger.trace { "#{item} truthy? #{item.truthy?}" } }
83
83
 
84
84
  process_check(check_type: check_type, event: event, items: items, procs: procs)
85
85
  end
@@ -27,6 +27,8 @@ module OpenHAB
27
27
  config.guard = Guard::Guard.new(only_if: config.only_if, not_if: config.not_if)
28
28
  logger.trace { config.inspect }
29
29
  process_rule_config(config)
30
+ rescue StandardError => e
31
+ re_raise_with_backtrace(e)
30
32
  end
31
33
 
32
34
  #
@@ -44,6 +46,16 @@ module OpenHAB
44
46
 
45
47
  private
46
48
 
49
+ #
50
+ # Re-raises a rescued error to OpenHAB with added rule name and stack trace
51
+ #
52
+ # @param [Exception] error A rescued error
53
+ #
54
+ def re_raise_with_backtrace(error)
55
+ error = logger.clean_backtrace(error)
56
+ raise error, "#{error.message}\nIn rule: #{@rule_name}\n#{error.backtrace.join("\n")}"
57
+ end
58
+
47
59
  #
48
60
  # Process a rule based on the supplied configuration
49
61
  #
@@ -22,11 +22,14 @@ module OpenHAB
22
22
 
23
23
  def_delegator :datetime, :to_s
24
24
  def_delegator :zoned_date_time, :month_value, :month
25
+ def_delegator :zoned_date_time, :day_of_month, :mday
26
+ def_delegator :zoned_date_time, :day_of_year, :yday
25
27
  def_delegator :zoned_date_time, :minute, :min
26
28
  def_delegator :zoned_date_time, :second, :sec
27
29
  def_delegator :zoned_date_time, :nano, :nsec
28
30
  def_delegator :zoned_date_time, :to_epoch_second, :to_i
29
31
  alias inspect to_s
32
+ alias day mday
30
33
 
31
34
  java_import Java::OrgOpenhabCoreLibraryTypes::DateTimeType
32
35
  java_import java.time.ZonedDateTime
@@ -181,6 +184,15 @@ module OpenHAB
181
184
  utc_offset.zero?
182
185
  end
183
186
 
187
+ #
188
+ # Returns an integer representing the day of the week, 0..6, with Sunday == 0.
189
+ #
190
+ # @return [Integer] The day of week
191
+ #
192
+ def wday
193
+ zoned_date_time.day_of_week.value % 7
194
+ end
195
+
184
196
  #
185
197
  # The timezone
186
198
  #
@@ -144,8 +144,10 @@ module OpenHAB
144
144
 
145
145
  OPERATIONS.each do |operation, method|
146
146
  define_method(operation) do |other|
147
- logger.trace("Executing math operation '#{operation}' on quantity #{inspect} "\
148
- "with other type #{other.class} and value #{other.inspect}")
147
+ logger.trace do
148
+ "Executing math operation '#{operation}' on quantity #{inspect} "\
149
+ "with other type #{other.class} and value #{other.inspect}"
150
+ end
149
151
 
150
152
  a, b = to_qt(coerce(other).reverse)
151
153
  logger.trace("Coerced a='#{a}' with b='#{b}'")
@@ -16,7 +16,14 @@ module OpenHAB
16
16
  java_import org.slf4j.LoggerFactory
17
17
 
18
18
  # @return [Array] Supported logging levels
19
- LEVELS = %i[TRACE DEBUG WARN INFO ERROR].freeze
19
+ LEVELS = %i[trace debug warn info error].freeze
20
+ private_constant :LEVELS
21
+
22
+ #
23
+ # Regex for matching internal calls in a stack trace
24
+ #
25
+ INTERNAL_CALL_REGEX = %r{(openhab-scripting-.*/lib)|(org/jruby/)}.freeze
26
+ private_constant :INTERNAL_CALL_REGEX
20
27
 
21
28
  #
22
29
  # Create a new logger
@@ -32,11 +39,30 @@ module OpenHAB
32
39
  # def <level>(msg=nil, &block)
33
40
  # log(severity: <level>, msg: msg, &block)
34
41
  # end
42
+ #
43
+ # Also creates methods to check if the different logging levels are enabled
44
+ #
35
45
  LEVELS.each do |level|
36
- method = level.to_s.downcase
37
- define_method(method.to_s) do |msg = nil, &block|
46
+ define_method(level) do |msg = nil, &block|
38
47
  log(severity: level, msg: msg, &block)
39
48
  end
49
+ define_method("#{level}_enabled?") { @sl4fj_logger.send("is_#{level}_enabled") }
50
+ end
51
+
52
+ #
53
+ # Cleans the backtrace of an error to remove internal calls. If logging is set
54
+ # to debug or lower, the full backtrace is kept
55
+ #
56
+ # @param [Exception] error An exception to be cleaned
57
+ #
58
+ # @return [Exception] the exception, potentially with a cleaned backtrace.
59
+ #
60
+ def clean_backtrace(error)
61
+ return error if debug_enabled?
62
+
63
+ backtrace = error.backtrace_locations.reject { |line| INTERNAL_CALL_REGEX.match? line.to_s }
64
+ error.set_backtrace(backtrace.map(&:to_s))
65
+ error
40
66
  end
41
67
 
42
68
  private
@@ -54,7 +80,7 @@ module OpenHAB
54
80
  raise ArgumentError, "Unknown Severity #{severity}" unless LEVELS.include? severity
55
81
 
56
82
  # Dynamically check enablement of underlying logger, this expands to "is_<level>_enabled"
57
- return unless @sl4fj_logger.send("is_#{severity.to_s.downcase}_enabled")
83
+ return unless send("#{severity}_enabled?")
58
84
 
59
85
  # Process block if no message provided
60
86
  msg = yield if msg.nil? && block_given?
@@ -62,7 +88,7 @@ module OpenHAB
62
88
  msg = message_to_string(msg: msg)
63
89
 
64
90
  # Dynamically invoke underlying logger, this expands to "<level>(message)"
65
- @sl4fj_logger.send(severity.to_s.downcase, msg)
91
+ @sl4fj_logger.send(severity, msg)
66
92
  end
67
93
 
68
94
  #
@@ -121,7 +147,7 @@ module OpenHAB
121
147
  configure_logger_for(classname)
122
148
  end
123
149
 
124
- private
150
+ private
125
151
 
126
152
  #
127
153
  # Configure a logger for the supplied classname
@@ -153,7 +179,7 @@ module OpenHAB
153
179
  .first
154
180
  .yield_self { |caller| File.basename(caller, '.*') }
155
181
  end
156
- end
182
+ end
157
183
 
158
184
  #
159
185
  # Add logger method to the object that includes this module
@@ -5,5 +5,5 @@
5
5
  #
6
6
  module OpenHAB
7
7
  # @return [String] Version of OpenHAB helper libraries
8
- VERSION = '2.24.0'
8
+ VERSION = '2.26.1'
9
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openhab-scripting
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.24.0
4
+ version: 2.26.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian O'Connell
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-02-23 00:00:00.000000000 Z
11
+ date: 2021-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler