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 +4 -4
- data/lib/openhab/dsl/group.rb +5 -4
- data/lib/openhab/dsl/items/datetime_item.rb +7 -4
- data/lib/openhab/dsl/items/item_command.rb +15 -0
- data/lib/openhab/dsl/items/item_delegate.rb +32 -1
- data/lib/openhab/dsl/items/number_item.rb +6 -5
- data/lib/openhab/dsl/items/rollershutter_item.rb +5 -11
- data/lib/openhab/dsl/items/string_item.rb +7 -5
- data/lib/openhab/dsl/monkey_patch/items/contact_item.rb +1 -1
- data/lib/openhab/dsl/monkey_patch/items/dimmer_item.rb +1 -2
- data/lib/openhab/dsl/monkey_patch/items/items.rb +9 -0
- data/lib/openhab/dsl/monkey_patch/items/persistence.rb +52 -23
- data/lib/openhab/dsl/monkey_patch/items/switch_item.rb +1 -2
- data/lib/openhab/dsl/types/datetime.rb +12 -0
- data/lib/openhab/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f3deb9da52443a92a787b19c30a5e540bf45ffa1f2ce69e7b47554190468e311
|
4
|
+
data.tar.gz: eae005970cf7f0c47f896fa9e2ab194c1a8c23b8901b535cde8b66efcc864e1c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5fc8e075065e222e388a0c8b83a53644ea0b6d909f7c7c1109450f4be535a91e77319fa4d73e950df6ad9023bfc8051a242dcafcf51a1ff96934c6a43a9a8b51
|
7
|
+
data.tar.gz: b869685445af147f35ce27a793c8f533fdc39af25842935cd1c3265610383d0332830fae97edb4746a49dc96fd7f351debcb7e1eb28646c174dff03cef5e1c7f
|
data/lib/openhab/dsl/group.rb
CHANGED
@@ -47,7 +47,7 @@ module OpenHAB
|
|
47
47
|
class Group < SimpleDelegator
|
48
48
|
extend Forwardable
|
49
49
|
|
50
|
-
java_import
|
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
|
-
|
60
|
-
|
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(
|
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
|
-
|
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
|
-
|
33
|
-
|
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
|
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
|
19
|
+
extend OpenHAB::DSL::Items::ItemDelegate
|
20
|
+
extend OpenHAB::DSL::Items::ItemCommand
|
20
21
|
|
21
|
-
|
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
|
-
|
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
|
-
|
17
|
+
extend OpenHAB::DSL::Items::ItemDelegate
|
18
18
|
include Comparable
|
19
19
|
|
20
|
-
|
20
|
+
def_item_delegator :@rollershutter_item
|
21
21
|
|
22
|
-
|
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
|
-
|
41
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
35
|
-
|
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
|
@@ -30,8 +30,7 @@ module OpenHAB
|
|
30
30
|
extend Forwardable
|
31
31
|
extend OpenHAB::DSL::Items::ItemCommand
|
32
32
|
|
33
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
50
|
-
|
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
|
-
|
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
|
#
|
data/lib/openhab/version.rb
CHANGED
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.
|
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-
|
11
|
+
date: 2021-02-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|