openhab-scripting 2.23.2 → 2.25.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9ee0da4d4273752f4a2e7b0239c09f379f74acbc05edc3f3d10690a923c3d90a
4
- data.tar.gz: b807d26604402500b68ebbfc5b4a5afe6a4c65c963a3d1a3f625a703957239f9
3
+ metadata.gz: f3deb9da52443a92a787b19c30a5e540bf45ffa1f2ce69e7b47554190468e311
4
+ data.tar.gz: eae005970cf7f0c47f896fa9e2ab194c1a8c23b8901b535cde8b66efcc864e1c
5
5
  SHA512:
6
- metadata.gz: e9770cad933c03a36f70d320b04e43d9f9394e15da250a1be849a1669a7a863371cac83774d48f76f3dd44c97176b5ccac180f62167adf13c0b316ab431ee41e
7
- data.tar.gz: add9dc156271bbec0918744355bf1362e387f3ce4792be28470abc57c03fd0a7e83acf69798bddfb8f142841dd202fa8df65bbb6c85f222bb8f58302f1686062
6
+ metadata.gz: 5fc8e075065e222e388a0c8b83a53644ea0b6d909f7c7c1109450f4be535a91e77319fa4d73e950df6ad9023bfc8051a242dcafcf51a1ff96934c6a43a9a8b51
7
+ data.tar.gz: b869685445af147f35ce27a793c8f533fdc39af25842935cd1c3265610383d0332830fae97edb4746a49dc96fd7f351debcb7e1eb28646c174dff03cef5e1c7f
@@ -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
@@ -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
 
@@ -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
  #
@@ -5,5 +5,5 @@
5
5
  #
6
6
  module OpenHAB
7
7
  # @return [String] Version of OpenHAB helper libraries
8
- VERSION = '2.23.2'
8
+ VERSION = '2.25.2'
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.2
4
+ version: 2.25.2
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-21 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