openhab-scripting 2.23.2 → 2.25.2

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: 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