openhab-scripting 2.23.1 → 2.25.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: 1af0c9d15b41ac54e58540ccab079a6c084931abf80f5add687511d332d3afa2
4
- data.tar.gz: 5e3c341ecf96ab4fb11b6ca6cefae01a27dc02b2498e9e3896ef4683baa3f6e5
3
+ metadata.gz: 7226c1329289ce5ce0f85f552c091a6c5f89cb27427b9e6419d528c77a792239
4
+ data.tar.gz: e92ad134d92584fed6ddeeef98984cabc56355cd94f4d205a5228263ac2677d1
5
5
  SHA512:
6
- metadata.gz: e0238451b9d78d45c225f98ede7b86580e26c7c3edfc7681f6942b7f5a7c4dbfb67f98c5c76ccf8a437cfa779bfa2eb9b0c8639b1c4a24206b99b8ca80a3803f
7
- data.tar.gz: 616d30281aef1da66964cba5d1c6365b24939f4fbec3070e4251551e3c8c7552191835da12e4795d5698e9671add7739a411e53e7b347de65a8b4a9c0fb249a0
6
+ metadata.gz: '0519c68cec3b2316751c36ba27c208267ee86f76230a1722dcd3369d61e19da73a96b6616ed2a71838daf68beb3f64b88e1553f82f8cb00daec4de5c859ecb87'
7
+ data.tar.gz: f688f894e8a4bde1c3ee12facc846836a922cc7a1120ffd5d89ff41a6d6be1692608467265179543aaed1262394ea37aaa92d4bd5b03ad9eb33bcdd13b06c8dc
@@ -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
  #
@@ -16,10 +16,13 @@ module OpenHAB
16
16
  #
17
17
  class DateTimeItem
18
18
  extend Forwardable
19
+ extend OpenHAB::DSL::Items::ItemDelegate
20
+ extend OpenHAB::DSL::Items::ItemCommand
19
21
  include Comparable
20
- include OpenHAB::DSL::Items::ItemDelegate
21
22
 
22
- def_delegator :@datetime_item, :to_s
23
+ def_item_delegator :@datetime_item
24
+
25
+ item_type Java::OrgOpenhabCoreLibraryItems::DateTimeItem
23
26
 
24
27
  #
25
28
  # Create a new DateTimeItem
@@ -29,8 +32,8 @@ module OpenHAB
29
32
  #
30
33
  def initialize(datetime_item)
31
34
  @datetime_item = datetime_item
32
- item_delegate { @datetime_item }
33
- item_delegate { to_dt }
35
+ item_missing_delegate { @datetime_item }
36
+ item_missing_delegate { to_dt }
34
37
  end
35
38
 
36
39
  #
@@ -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
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'java'
4
4
  require 'openhab/log/logger'
5
+ require 'forwardable'
5
6
 
6
7
  module OpenHAB
7
8
  module DSL
@@ -12,6 +13,36 @@ module OpenHAB
12
13
  module ItemDelegate
13
14
  include OpenHAB::Log
14
15
 
16
+ # @return [Array<Symbol>] Array of methods that by default will be forwarded to an OpenHAB Item.
17
+ DEFAULT_DELEGATION_METHODS = %i[to_s groups].freeze
18
+ private_constant :DEFAULT_DELEGATION_METHODS
19
+
20
+ #
21
+ # Extends calling object with DSL and helper methods
22
+ #
23
+ # @param [Object] base Object to decorate with DSL and helper methods
24
+ #
25
+ #
26
+ def self.extended(base)
27
+ base.extend Forwardable
28
+ base.include OpenHAB::DSL::Items::ItemDelegate
29
+ end
30
+
31
+ #
32
+ # Delegate a set of methods to the supplied delegator
33
+ #
34
+ # @param [Java::OrgOpenhabCoreItems::GenericItem] item to delegate methods to
35
+ # @param [Symbol] methods to delegate, if not supplied default methods are used
36
+ #
37
+ #
38
+ def def_item_delegator(item, *methods)
39
+ methods = DEFAULT_DELEGATION_METHODS if methods.size.zero?
40
+ methods.each do |method|
41
+ logger.trace("Creating delegate for (#{method}) to #{item}) for #{self.class}")
42
+ def_delegator item, method
43
+ end
44
+ end
45
+
15
46
  #
16
47
  # Delegates methods to the object returned from the supplied block if
17
48
  # they don't exist in the object this is included in. If the supplied block returns nil, no delegation occurs
@@ -22,7 +53,7 @@ module OpenHAB
22
53
  # @param [Proc] &delegate delgegate block
23
54
  #
24
55
  #
25
- def item_delegate(&delegate)
56
+ def item_missing_delegate(&delegate)
26
57
  @delegates ||= []
27
58
  @delegates << delegate
28
59
  end
@@ -16,17 +16,18 @@ module OpenHAB
16
16
  # Disabled because this class has a single responsibility, there does not appear a logical
17
17
  # way of breaking it up into multiple classes
18
18
  class NumberItem < Numeric
19
- extend Forwardable
19
+ extend OpenHAB::DSL::Items::ItemDelegate
20
+ extend OpenHAB::DSL::Items::ItemCommand
20
21
 
21
- include OpenHAB::DSL::Items::ItemDelegate
22
-
23
- def_delegator :@number_item, :to_s
22
+ def_item_delegator :@number_item
24
23
 
25
24
  java_import org.openhab.core.library.types.DecimalType
26
25
  java_import org.openhab.core.library.types.QuantityType
27
26
  java_import 'tec.uom.se.format.SimpleUnitFormat'
28
27
  java_import 'tec.uom.se.AbstractUnit'
29
28
 
29
+ item_type Java::OrgOpenhabCoreLibraryItems::NumberItem
30
+
30
31
  #
31
32
  # Create a new NumberItem
32
33
  #
@@ -34,7 +35,7 @@ module OpenHAB
34
35
  #
35
36
  def initialize(number_item)
36
37
  @number_item = number_item
37
- item_delegate { @number_item }
38
+ item_missing_delegate { @number_item }
38
39
  super()
39
40
  end
40
41
 
@@ -14,18 +14,12 @@ module OpenHAB
14
14
  class RollershutterItem < Numeric
15
15
  extend Forwardable
16
16
  extend OpenHAB::DSL::Items::ItemCommand
17
- include OpenHAB::DSL::Items::ItemDelegate
17
+ extend OpenHAB::DSL::Items::ItemDelegate
18
18
  include Comparable
19
19
 
20
- def_delegator :@rollershutter_item, :to_s
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
@@ -37,8 +31,8 @@ module OpenHAB
37
31
  logger.trace("Wrapping #{rollershutter_item}")
38
32
  @rollershutter_item = rollershutter_item
39
33
 
40
- item_delegate { @rollershutter_item }
41
- item_delegate { position }
34
+ item_missing_delegate { @rollershutter_item }
35
+ item_missing_delegate { position }
42
36
 
43
37
  super()
44
38
  end
@@ -13,15 +13,17 @@ module OpenHAB
13
13
  #
14
14
  class StringItem
15
15
  extend Forwardable
16
-
16
+ extend OpenHAB::DSL::Items::ItemCommand
17
17
  include Comparable
18
- include OpenHAB::DSL::Items::ItemDelegate
18
+ extend OpenHAB::DSL::Items::ItemDelegate
19
19
 
20
20
  # @return [Regex] Regular expression matching blank strings
21
21
  BLANK_RE = /\A[[:space:]]*\z/.freeze
22
22
  private_constant :BLANK_RE
23
23
 
24
- def_delegator :@string_item, :to_s
24
+ def_item_delegator :@string_item
25
+
26
+ item_type Java::OrgOpenhabCoreLibraryItems::StringItem
25
27
 
26
28
  #
27
29
  # Create a new StringItem
@@ -31,8 +33,8 @@ module OpenHAB
31
33
  def initialize(string_item)
32
34
  @string_item = string_item
33
35
 
34
- item_delegate { @string_item }
35
- item_delegate { @string_item.state&.to_full_string&.to_s }
36
+ item_missing_delegate { @string_item }
37
+ item_missing_delegate { @string_item.state&.to_full_string&.to_s }
36
38
 
37
39
  super()
38
40
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'openhab/dsl/monkey_patch/events/item_state'
4
+ require 'openhab/dsl/monkey_patch/events/item_event'
4
5
  require 'openhab/dsl/monkey_patch/events/item_state_changed'
5
6
  require 'openhab/dsl/monkey_patch/events/thing_status_info'
6
7
  require 'openhab/dsl/monkey_patch/events/item_command'
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'java'
4
+
5
+ module OpenHAB
6
+ module DSL
7
+ module MonkeyPatch
8
+ #
9
+ # Patches OpenHAB events
10
+ #
11
+ module Events
12
+ java_import Java::OrgOpenhabCoreItemsEvents::ItemEvent
13
+
14
+ #
15
+ # MonkeyPatch to add item
16
+ #
17
+ class ItemEvent
18
+ #
19
+ # Return a decorated item
20
+ #
21
+ def item
22
+ OpenHAB::Core::EntityLookup.lookup_item(item_name)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -15,17 +15,6 @@ module OpenHAB
15
15
  # MonkeyPatch with ruby style accessors
16
16
  #
17
17
  class ItemStateChangedEvent
18
- #
19
- # Get the item that caused the state change
20
- #
21
- # @return [Item] Item that caused state change
22
- #
23
- def item
24
- # rubocop:disable Style/GlobalVars
25
- $ir.get(item_name)
26
- # rubocop:enable Style/GlobalVars
27
- end
28
-
29
18
  alias state item_state
30
19
  alias last old_item_state
31
20
  end
@@ -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
 
@@ -115,6 +115,15 @@ module OpenHAB
115
115
  def inspect
116
116
  toString
117
117
  end
118
+
119
+ #
120
+ # Return all groups that this item is part of
121
+ #
122
+ # @return [Array<Group>] All groups that this item is part of
123
+ #
124
+ def groups
125
+ group_names.map { |name| OpenHAB::DSL::Groups.groups[name] }
126
+ end
118
127
  end
119
128
 
120
129
  java_import Java::OrgOpenhabCoreItems::GenericItem
@@ -8,7 +8,23 @@ module OpenHAB
8
8
  # Persistence extension for Items
9
9
  #
10
10
  module Persistence
11
- %w[persist last_update].each do |method|
11
+ # All persistence methods that could return a Quantity
12
+ QUANTITY_METHODS = %i[average_since
13
+ delta_since
14
+ deviation_since
15
+ sum_since
16
+ variance_since].freeze
17
+
18
+ # All persistence methods that require a timestamp
19
+ PERSISTENCE_METHODS = (QUANTITY_METHODS +
20
+ %i[changed_since
21
+ evolution_rate
22
+ historic_state
23
+ maximum_since
24
+ minimum_since
25
+ updated_since]).freeze
26
+
27
+ %i[persist last_update].each do |method|
12
28
  define_method(method) do |service = nil|
13
29
  service ||= persistence_service
14
30
  PersistenceExtensions.public_send(method, self, service&.to_s)
@@ -31,35 +47,48 @@ module OpenHAB
31
47
  PersistenceExtensions.previous_state(self, skip_equal, service&.to_s)
32
48
  end
33
49
 
34
- %w[
35
- average_since
36
- changed_since
37
- delta_since
38
- deviation_since
39
- evolution_rate
40
- historic_state
41
- maximum_since
42
- minimum_since
43
- sum_since
44
- updated_since
45
- variance_since
46
- ].each do |method|
50
+ PERSISTENCE_METHODS.each do |method|
47
51
  define_method(method) do |timestamp, service = nil|
48
52
  service ||= persistence_service
49
- if timestamp.is_a? Java::JavaTimeTemporal::TemporalAmount
50
- timestamp = Java::JavaTime::ZonedDateTime.now.minus(timestamp)
51
- end
52
- result = PersistenceExtensions.public_send(method, self, timestamp, service&.to_s)
53
- if result.is_a?(Java::OrgOpenhabCoreLibraryTypes::DecimalType) && respond_to?(:unit) && unit
54
- Quantity.new(Java::OrgOpenhabCoreLibraryTypes::QuantityType.new(result.to_big_decimal, unit))
55
- else
56
- result
57
- end
53
+ result = PersistenceExtensions.public_send(method, self, to_zdt(timestamp), service&.to_s)
54
+ QUANTITY_METHODS.include?(method) ? quantify(result) : result
58
55
  end
59
56
  end
60
57
 
61
58
  private
62
59
 
60
+ #
61
+ # Convert timestamp to ZonedDateTime if it's a TemporalAmount
62
+ #
63
+ # @param [Object] timestamp to convert
64
+ #
65
+ # @return [ZonedDateTime]
66
+ #
67
+ def to_zdt(timestamp)
68
+ if timestamp.is_a? Java::JavaTimeTemporal::TemporalAmount
69
+ logger.trace("Converting #{timestamp} (#{timestamp.class}) to ZonedDateTime")
70
+ Java::JavaTime::ZonedDateTime.now.minus(timestamp)
71
+ else
72
+ timestamp
73
+ end
74
+ end
75
+
76
+ #
77
+ # Convert value to Quantity if it is a DecimalType and a unit is defined
78
+ #
79
+ # @param [Object] value The value to convert
80
+ #
81
+ # @return [Object] Quantity or the original value
82
+ #
83
+ def quantify(value)
84
+ if value.is_a?(Java::OrgOpenhabCoreLibraryTypes::DecimalType) && respond_to?(:unit) && unit
85
+ logger.trace("Unitizing #{value} with unit #{unit}")
86
+ Quantity.new(Java::OrgOpenhabCoreLibraryTypes::QuantityType.new(value.to_big_decimal, unit))
87
+ else
88
+ value
89
+ end
90
+ end
91
+
63
92
  #
64
93
  # Get the specified persistence service from the current thread local variable
65
94
  #
@@ -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
 
@@ -243,21 +243,6 @@ module OpenHAB
243
243
  false
244
244
  end
245
245
 
246
- #
247
- # Patch event to decorate event.item with our item wrapper
248
- #
249
- # @param [OpenHAB Event] event patch
250
- #
251
- def decorate_event_item(event)
252
- return if event.nil?
253
-
254
- class << event
255
- def item
256
- OpenHAB::Core::EntityLookup.lookup_item(item_name)
257
- end
258
- end
259
- end
260
-
261
246
  #
262
247
  # Process the run queue
263
248
  #
@@ -287,7 +272,6 @@ module OpenHAB
287
272
  #
288
273
  #
289
274
  def process_otherwise_task(event, task)
290
- decorate_event_item(event)
291
275
  logger.trace { "Executing rule '#{name}' otherwise block with event(#{event})" }
292
276
  task.block.call(event)
293
277
  end
@@ -314,9 +298,10 @@ module OpenHAB
314
298
  #
315
299
  #
316
300
  def process_trigger_task(event, task)
317
- triggering_item = OpenHAB::Core::EntityLookup.lookup_item(event&.itemName)
318
- logger.trace { "Executing rule '#{name}' trigger block with item (#{triggering_item})" }
319
- task.block.call(triggering_item) if triggering_item
301
+ return unless event&.item
302
+
303
+ logger.trace { "Executing rule '#{name}' trigger block with item (#{event.item})" }
304
+ task.block.call(event.item)
320
305
  end
321
306
 
322
307
  #
@@ -327,7 +312,6 @@ module OpenHAB
327
312
  #
328
313
  #
329
314
  def process_run_task(event, task)
330
- decorate_event_item(event)
331
315
  logger.trace { "Executing rule '#{name}' run block with event(#{event})" }
332
316
  task.block.call(event)
333
317
  end
@@ -5,5 +5,5 @@
5
5
  #
6
6
  module OpenHAB
7
7
  # @return [String] Version of OpenHAB helper libraries
8
- VERSION = '2.23.1'
8
+ VERSION = '2.25.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.23.1
4
+ version: 2.25.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-20 00:00:00.000000000 Z
11
+ date: 2021-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -50,6 +50,7 @@ files:
50
50
  - lib/openhab/dsl/monkey_patch/actions/script_thing_actions.rb
51
51
  - lib/openhab/dsl/monkey_patch/events/events.rb
52
52
  - lib/openhab/dsl/monkey_patch/events/item_command.rb
53
+ - lib/openhab/dsl/monkey_patch/events/item_event.rb
53
54
  - lib/openhab/dsl/monkey_patch/events/item_state.rb
54
55
  - lib/openhab/dsl/monkey_patch/events/item_state_changed.rb
55
56
  - lib/openhab/dsl/monkey_patch/events/thing_status_info.rb