openhab-scripting 2.24.0 → 2.26.1
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 +3 -1
- data/lib/openhab/dsl/items/item_command.rb +15 -0
- data/lib/openhab/dsl/items/number_item.rb +3 -0
- data/lib/openhab/dsl/items/rollershutter_item.rb +1 -7
- data/lib/openhab/dsl/items/string_item.rb +3 -1
- 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/metadata.rb +1 -2
- data/lib/openhab/dsl/monkey_patch/items/switch_item.rb +1 -2
- data/lib/openhab/dsl/rules/automation_rule.rb +30 -5
- data/lib/openhab/dsl/rules/guard.rb +1 -1
- data/lib/openhab/dsl/rules/rule.rb +12 -0
- data/lib/openhab/dsl/types/datetime.rb +12 -0
- data/lib/openhab/dsl/types/quantity.rb +4 -2
- data/lib/openhab/log/logger.rb +33 -7
- 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: e85c64c68c9d566c3c4cf1070ea994fae3e3b57dda312c0854da87bff393ae1c
|
4
|
+
data.tar.gz: 9934d415111e5a680f1a8a7630ef1b08e0ed537cc537631100ee3dd73b1ce70d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dfe0d9a8e3ec9a4e4ed2121958d508f3ce0d552db041dbfa8099168f4e2963f5c823b68931a04a796d7311f138fcd64fd8733ad81ef859b7d8b751526e52cc1c
|
7
|
+
data.tar.gz: 440dd0f36d20abf8a27cab1b87f5f73c90c7b852ed7496fdfb2abd3f6d7e76add9fbf6f6c5ecccfad125a6e56182ba85839d2d14e218037d9ad073648226afe4
|
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
|
#
|
@@ -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
|
-
|
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
|
#
|
@@ -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
|
|
@@ -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("
|
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
|
-
|
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
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
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
|
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
|
148
|
-
|
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}'")
|
data/lib/openhab/log/logger.rb
CHANGED
@@ -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[
|
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
|
-
|
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
|
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
|
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
|
-
|
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
|
-
|
182
|
+
end
|
157
183
|
|
158
184
|
#
|
159
185
|
# Add logger method to the object that includes this module
|
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.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
|
11
|
+
date: 2021-03-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|