openhab-scripting 5.29.0 → 5.30.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/openhab/core/events/abstract_event.rb +9 -2
- data/lib/openhab/core/events/channel_triggered_event.rb +7 -0
- data/lib/openhab/core/events/item_command_event.rb +7 -0
- data/lib/openhab/core/events/item_state_changed_event.rb +8 -0
- data/lib/openhab/core/events/item_state_event.rb +7 -0
- data/lib/openhab/core/events/thing_status_info_event.rb +16 -0
- data/lib/openhab/core/events.rb +8 -0
- data/lib/openhab/core/items/generic_item.rb +9 -4
- data/lib/openhab/core/items/group_item.rb +3 -3
- data/lib/openhab/core/items/semantics/enumerable.rb +4 -4
- data/lib/openhab/core/items/switch_item.rb +3 -3
- data/lib/openhab/dsl/items/ensure.rb +11 -8
- data/lib/openhab/dsl/items/timed_command.rb +11 -9
- data/lib/openhab/dsl/rules/triggers/channel.rb +2 -2
- data/lib/openhab/dsl/thread_local.rb +1 -1
- data/lib/openhab/dsl/version.rb +1 -1
- data/lib/openhab/dsl.rb +1 -1
- data/lib/openhab/osgi.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 93b780d352d981919615e78e687910eb11ee024c6c567a6294db4538ddd8712a
|
4
|
+
data.tar.gz: dbdcb9b48ee07a0d626bf8aa5ef6da60273d330395c89647dd5a360b28bc3f1c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 12c20ab4f52a6fac707f62d004c5eb9268ca6a00a9d9490f96892530091a7da6bc812d5b729b3041a51c1567690269b91dd77e31325a826b15ba3e2d32f5a53a
|
7
|
+
data.tar.gz: 718e2af872273b04125d64edce10d248883654388a14ca126c12fdcdaef68ebc25032466fa0bb20963b491fccb753406c668acdb1499ec9ac1567baeb02b10ff
|
@@ -13,8 +13,8 @@ module OpenHAB
|
|
13
13
|
# @return [Hash]
|
14
14
|
attr_accessor :inputs
|
15
15
|
|
16
|
-
#
|
17
|
-
|
16
|
+
# @!attribute [r] source
|
17
|
+
# @return [String] The component that sent the event.
|
18
18
|
|
19
19
|
#
|
20
20
|
# Returns the event payload as a Hash.
|
@@ -26,6 +26,13 @@ module OpenHAB
|
|
26
26
|
require "json"
|
27
27
|
@payload ||= JSON.parse(get_payload, symbolize_names: true) unless get_payload.empty?
|
28
28
|
end
|
29
|
+
|
30
|
+
# @return [String]
|
31
|
+
def inspect
|
32
|
+
s = "#<OpenHAB::Core::Events::#{self.class.simple_name} topic=#{topic} payload=#{payload.inspect}"
|
33
|
+
s += " source=#{source.inspect}" if source
|
34
|
+
"#{s}>"
|
35
|
+
end
|
29
36
|
end
|
30
37
|
end
|
31
38
|
end
|
@@ -24,6 +24,13 @@ module OpenHAB
|
|
24
24
|
|
25
25
|
# @!attribute [r] event
|
26
26
|
# @return [String] The event data
|
27
|
+
|
28
|
+
# @return [String]
|
29
|
+
def inspect
|
30
|
+
s = "#<OpenHAB::Core::Events::ChannelTriggeredEvent channel=#{channel} event=#{event.inspect}"
|
31
|
+
s += " source=#{source.inspect}" if source
|
32
|
+
"#{s}>"
|
33
|
+
end
|
27
34
|
end
|
28
35
|
end
|
29
36
|
end
|
@@ -72,6 +72,13 @@ module OpenHAB
|
|
72
72
|
# @!method previous?
|
73
73
|
# Check if {#command} is {PREVIOUS}
|
74
74
|
# @return [true, false]
|
75
|
+
|
76
|
+
# @return [String]
|
77
|
+
def inspect
|
78
|
+
s = "#<OpenHAB::Core::Events::ItemCommandEvent item=#{itemName} command=#{command.inspect}"
|
79
|
+
s += " source=#{source.inspect}" if source
|
80
|
+
"#{s}>"
|
81
|
+
end
|
75
82
|
end
|
76
83
|
end
|
77
84
|
end
|
@@ -69,6 +69,14 @@ module OpenHAB
|
|
69
69
|
def was
|
70
70
|
old_item_state if was?
|
71
71
|
end
|
72
|
+
|
73
|
+
# @return [String]
|
74
|
+
def inspect
|
75
|
+
s = "#<OpenHAB::Core::Events::ItemStateChangedEvent item=#{item_name} " \
|
76
|
+
"state=#{item_state.inspect} was=#{old_item_state.inspect}"
|
77
|
+
s += " source=#{source.inspect}" if source
|
78
|
+
"#{s}>"
|
79
|
+
end
|
72
80
|
end
|
73
81
|
end
|
74
82
|
end
|
@@ -68,6 +68,13 @@ module OpenHAB
|
|
68
68
|
def state
|
69
69
|
item_state if state?
|
70
70
|
end
|
71
|
+
|
72
|
+
# @return [String]
|
73
|
+
def inspect
|
74
|
+
s = "#<OpenHAB::Core::Events::#{self.class.simple_name} item=#{item_name} state=#{item_state.inspect}"
|
75
|
+
s += " source=#{source.inspect}" if source
|
76
|
+
"#{s}>"
|
77
|
+
end
|
71
78
|
end
|
72
79
|
|
73
80
|
# {AbstractEvent} sent when an item's state is updated (regardless of if it changed or not).
|
@@ -27,6 +27,14 @@ module OpenHAB
|
|
27
27
|
def thing
|
28
28
|
EntityLookup.lookup_thing(uid)
|
29
29
|
end
|
30
|
+
|
31
|
+
# @return [String]
|
32
|
+
def inspect
|
33
|
+
s = "#<OpenHAB::Core::Events::ThingStatusInfoChangedEvent thing=#{uid} " \
|
34
|
+
"status=#{status.inspect} was=#{was.inspect}"
|
35
|
+
s += " source=#{source.inspect}" if source
|
36
|
+
"#{s}>"
|
37
|
+
end
|
30
38
|
end
|
31
39
|
|
32
40
|
# The {AbstractEvent} sent when a {Things::Thing}'s status is set.
|
@@ -49,6 +57,14 @@ module OpenHAB
|
|
49
57
|
def thing
|
50
58
|
EntityLookup.lookup_thing(uid)
|
51
59
|
end
|
60
|
+
|
61
|
+
# @return [String]
|
62
|
+
def inspect
|
63
|
+
s = "#<OpenHAB::Core::Events::ThingStatusInfoEvent thing=#{uid} " \
|
64
|
+
"status=#{status.inspect}"
|
65
|
+
s += " source=#{source.inspect}" if source
|
66
|
+
"#{s}>"
|
67
|
+
end
|
52
68
|
end
|
53
69
|
end
|
54
70
|
end
|
data/lib/openhab/core/events.rb
CHANGED
@@ -5,6 +5,14 @@ module OpenHAB
|
|
5
5
|
# Contains objects sent to event handlers containing context around the
|
6
6
|
# triggered event.
|
7
7
|
module Events
|
8
|
+
class << self
|
9
|
+
# @!visibility private
|
10
|
+
def publisher
|
11
|
+
@publisher ||= OSGi.service("org.openhab.core.events.EventPublisher")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
java_import org.openhab.core.items.events.ItemEventFactory
|
8
16
|
end
|
9
17
|
end
|
10
18
|
end
|
@@ -137,6 +137,7 @@ module OpenHAB
|
|
137
137
|
# @param [Command, #to_s] command command to send to the item.
|
138
138
|
# When given a {Command} argument, it will be passed directly.
|
139
139
|
# Otherwise, the result of `#to_s` will be parsed into a {Command}.
|
140
|
+
# @param [String, nil] source Optional string to identify what sent the event.
|
140
141
|
# @return [self, nil] nil when `ensure` is in effect and the item was already in the same state,
|
141
142
|
# otherwise the item.
|
142
143
|
#
|
@@ -156,10 +157,14 @@ module OpenHAB
|
|
156
157
|
# @example Sending a string to a dimensioned {NumberItem}
|
157
158
|
# SetTemperature.command("22.5 °C") # The string will be parsed and converted to a QuantityType
|
158
159
|
#
|
159
|
-
def command(command)
|
160
|
+
def command(command, source: nil)
|
160
161
|
command = format_command(command)
|
161
|
-
logger.trace "Sending Command #{command} to #{name}"
|
162
|
-
|
162
|
+
logger.trace { "Sending Command #{command} to #{name}" }
|
163
|
+
if source
|
164
|
+
Events.publisher.post(Events::ItemEventFactory.create_command_event(name, command, source.to_s))
|
165
|
+
else
|
166
|
+
$events.send_command(self, command)
|
167
|
+
end
|
163
168
|
Proxy.new(self)
|
164
169
|
end
|
165
170
|
alias_method :command!, :command
|
@@ -201,7 +206,7 @@ module OpenHAB
|
|
201
206
|
#
|
202
207
|
def update(state)
|
203
208
|
state = format_update(state)
|
204
|
-
logger.trace "Sending Update #{state} to #{name}"
|
209
|
+
logger.trace { "Sending Update #{state} to #{name}" }
|
205
210
|
$events.post_update(self, state)
|
206
211
|
Proxy.new(self)
|
207
212
|
end
|
@@ -131,10 +131,10 @@ module OpenHAB
|
|
131
131
|
|
132
132
|
# Override because we want to send them to the base item if possible
|
133
133
|
%i[command update].each do |method|
|
134
|
-
define_method(method) do |command|
|
135
|
-
return base_item.__send__(method, command) if base_item
|
134
|
+
define_method(method) do |command, **kwargs|
|
135
|
+
return base_item.__send__(method, command, **kwargs) if base_item
|
136
136
|
|
137
|
-
super(command)
|
137
|
+
super(command, **kwargs)
|
138
138
|
end
|
139
139
|
end
|
140
140
|
|
@@ -103,10 +103,10 @@ module Enumerable
|
|
103
103
|
|
104
104
|
# Send a command to every item in the collection, even when {OpenHAB::DSL.ensure_states! ensure_states!} is in effect.
|
105
105
|
# @return [self]
|
106
|
-
def command!(command)
|
106
|
+
def command!(command, **kwargs)
|
107
107
|
# We cannot alias this to #command above, otherwise it will call
|
108
108
|
# DSL::Items::Ensure::Item#command which checks for ensure_states
|
109
|
-
each { |i| i.command!(command) }
|
109
|
+
each { |i| i.command!(command, **kwargs) }
|
110
110
|
self
|
111
111
|
end
|
112
112
|
|
@@ -198,7 +198,7 @@ module Enumerable
|
|
198
198
|
# Send a toggle command to every item in the collection
|
199
199
|
# @return [self]
|
200
200
|
#
|
201
|
-
def toggle
|
202
|
-
each(
|
201
|
+
def toggle(source: nil)
|
202
|
+
each { |i| i.toggle(source: source) }
|
203
203
|
end
|
204
204
|
end
|
@@ -35,10 +35,12 @@ module OpenHAB
|
|
35
35
|
# check if this item is in the command's state before actually
|
36
36
|
# sending the command
|
37
37
|
%i[command update].each do |ensured_method|
|
38
|
-
#
|
38
|
+
# rubocop:disable Style/IfUnlessModifier
|
39
|
+
|
40
|
+
# def command(state, **kwargs)
|
39
41
|
# # immediately send the command if it's a command, but not a state (like REFRESH)
|
40
|
-
# return super(state) if state.is_a?(Command) && !state.is_a?(State)
|
41
|
-
# return super(state) unless Thread.current[:openhab_ensure_states]
|
42
|
+
# return super(state, **kwargs) if state.is_a?(Command) && !state.is_a?(State)
|
43
|
+
# return super(state, **kwargs) unless Thread.current[:openhab_ensure_states]
|
42
44
|
#
|
43
45
|
# formatted_state = format_command(state)
|
44
46
|
# logger.trace do
|
@@ -46,13 +48,13 @@ module OpenHAB
|
|
46
48
|
# end
|
47
49
|
# return if raw_state == formatted_state
|
48
50
|
#
|
49
|
-
# super(formatted_state)
|
51
|
+
# super(formatted_state, **kwargs)
|
50
52
|
# end
|
51
53
|
class_eval <<~RUBY, __FILE__, __LINE__ + 1 # rubocop:disable Style/DocumentDynamicEvalDefinition
|
52
|
-
def #{ensured_method}(state)
|
54
|
+
def #{ensured_method}(state, **kwargs)
|
53
55
|
# immediately send the command if it's a command, but not a state (like REFRESH)
|
54
|
-
#{"return super(state) if state.is_a?(Command) && !state.is_a?(State)" if ensured_method == :command}
|
55
|
-
return super(state) unless Thread.current[:openhab_ensure_states]
|
56
|
+
#{"return super(state, **kwargs) if state.is_a?(Command) && !state.is_a?(State)" if ensured_method == :command}
|
57
|
+
return super(state, **kwargs) unless Thread.current[:openhab_ensure_states]
|
56
58
|
|
57
59
|
formatted_state = format_#{ensured_method}(state)
|
58
60
|
logger.trace do
|
@@ -60,9 +62,10 @@ module OpenHAB
|
|
60
62
|
end
|
61
63
|
return if raw_state.as(formatted_state.class) == formatted_state
|
62
64
|
|
63
|
-
super(formatted_state)
|
65
|
+
super(formatted_state, **kwargs)
|
64
66
|
end
|
65
67
|
RUBY
|
68
|
+
# rubocop:enable Style/IfUnlessModifier
|
66
69
|
end
|
67
70
|
end
|
68
71
|
|
@@ -149,9 +149,9 @@ module OpenHAB
|
|
149
149
|
# end
|
150
150
|
# end
|
151
151
|
#
|
152
|
-
def command(command, for: nil, on_expire: nil, only_when_ensured: false, &block)
|
152
|
+
def command(command, for: nil, on_expire: nil, only_when_ensured: false, **kwargs, &block)
|
153
153
|
duration = binding.local_variable_get(:for)
|
154
|
-
return super(command) unless duration
|
154
|
+
return super(command, **kwargs) unless duration
|
155
155
|
|
156
156
|
on_expire = block if block
|
157
157
|
|
@@ -159,10 +159,10 @@ module OpenHAB
|
|
159
159
|
on_expire ||= default_on_expire(command)
|
160
160
|
if only_when_ensured
|
161
161
|
DSL.ensure_states do
|
162
|
-
create_timed_command(command, duration: duration, on_expire: on_expire) if super(command)
|
162
|
+
create_timed_command(command, duration: duration, on_expire: on_expire) if super(command, **kwargs)
|
163
163
|
end
|
164
164
|
else
|
165
|
-
super(command)
|
165
|
+
super(command, **kwargs)
|
166
166
|
create_timed_command(command, duration: duration, on_expire: on_expire)
|
167
167
|
end
|
168
168
|
end
|
@@ -180,12 +180,12 @@ module OpenHAB
|
|
180
180
|
create_ensured_timed_command.call
|
181
181
|
else
|
182
182
|
# timed command still pending; reset it
|
183
|
-
logger.trace "Outstanding Timed Command #{timed_command_details} encountered - rescheduling"
|
183
|
+
logger.trace { "Outstanding Timed Command #{timed_command_details} encountered - rescheduling" }
|
184
184
|
timed_command_details.on_expire = on_expire unless on_expire.nil?
|
185
185
|
timed_command_details.timer.reschedule(duration)
|
186
186
|
# disable the cancel rule while we send the new command
|
187
187
|
DSL.rules[timed_command_details.rule_uid].disable
|
188
|
-
super(command) # This returns nil when "ensured"
|
188
|
+
super(command, **kwargs) # This returns nil when "ensured"
|
189
189
|
DSL.rules[timed_command_details.rule_uid].enable
|
190
190
|
timed_command_details
|
191
191
|
end
|
@@ -209,7 +209,7 @@ module OpenHAB
|
|
209
209
|
unmanaged_rule = Core.automation_manager.add_unmanaged_rule(cancel_rule)
|
210
210
|
timed_command_details.rule_uid = unmanaged_rule.uid
|
211
211
|
Core::Rules::Provider.current.add(unmanaged_rule)
|
212
|
-
logger.trace "Created Timed Command #{timed_command_details}"
|
212
|
+
logger.trace { "Created Timed Command #{timed_command_details}" }
|
213
213
|
timed_command_details
|
214
214
|
end
|
215
215
|
|
@@ -219,12 +219,14 @@ module OpenHAB
|
|
219
219
|
def timed_command_timer(timed_command_details, duration)
|
220
220
|
DSL.after(duration) do
|
221
221
|
timed_command_details.mutex.synchronize do
|
222
|
-
logger.trace "Timed command expired - #{timed_command_details}"
|
222
|
+
logger.trace { "Timed command expired - #{timed_command_details}" }
|
223
223
|
DSL.rules[timed_command_details.rule_uid].disable
|
224
224
|
timed_command_details.resolution = :expired
|
225
225
|
case timed_command_details.on_expire
|
226
226
|
when Proc
|
227
|
-
logger.trace
|
227
|
+
logger.trace do
|
228
|
+
"Invoking block #{timed_command_details.on_expire} after timed command for #{name} expired"
|
229
|
+
end
|
228
230
|
timed_command_details.on_expire.call(timed_command_details)
|
229
231
|
when Core::Types::UnDefType
|
230
232
|
update(timed_command_details.on_expire)
|
@@ -20,7 +20,7 @@ module OpenHAB
|
|
20
20
|
# @param [Object] thing to combine with channels and iterate over
|
21
21
|
# @return [Enumerable] enumerable channel ids to trigger on
|
22
22
|
def self.channels(channels:, thing:)
|
23
|
-
logger.trace "Creating Channel/Thing Pairs for channels #{channels.inspect} and things #{thing.inspect}"
|
23
|
+
logger.trace { "Creating Channel/Thing Pairs for channels #{channels.inspect} and things #{thing.inspect}" }
|
24
24
|
channels.flatten.product([thing].flatten)
|
25
25
|
.map { |channel_thing| channel_id(*channel_thing) }
|
26
26
|
end
|
@@ -47,7 +47,7 @@ module OpenHAB
|
|
47
47
|
def trigger(channel:, trigger:, attach:)
|
48
48
|
config = { "channelUID" => channel }
|
49
49
|
config["event"] = trigger.to_s unless trigger.nil?
|
50
|
-
logger.trace "Creating Channel Trigger for channels #{channel.inspect} and config #{config.inspect}"
|
50
|
+
logger.trace { "Creating Channel Trigger for channels #{channel.inspect} and config #{config.inspect}" }
|
51
51
|
append_trigger(type: CHANNEL_EVENT, config: config, attach: attach)
|
52
52
|
end
|
53
53
|
end
|
@@ -41,7 +41,7 @@ module OpenHAB
|
|
41
41
|
def thread_local(**values)
|
42
42
|
old_values = values.to_h { |key, _value| [key, Thread.current[key]] }
|
43
43
|
values.each { |key, value| Thread.current[key] = value }
|
44
|
-
logger.trace "Executing block with thread local context: #{values} - old context: #{old_values}"
|
44
|
+
logger.trace { "Executing block with thread local context: #{values} - old context: #{old_values}" }
|
45
45
|
yield
|
46
46
|
ensure
|
47
47
|
old_values.each { |key, value| Thread.current[key] = value }
|
data/lib/openhab/dsl/version.rb
CHANGED
data/lib/openhab/dsl.rb
CHANGED
@@ -1087,4 +1087,4 @@ singleton_class.include(OpenHAB::DSL)
|
|
1087
1087
|
Object.extend(OpenHAB::CoreExt::Ruby::Object::ClassMethods)
|
1088
1088
|
OpenHAB::CoreExt::Ruby::Object.instance_variable_set(:@top_self, self)
|
1089
1089
|
|
1090
|
-
logger.debug "openHAB JRuby Scripting Library Version #{OpenHAB::DSL::VERSION} Loaded"
|
1090
|
+
logger.debug { "openHAB JRuby Scripting Library Version #{OpenHAB::DSL::VERSION} Loaded" }
|
data/lib/openhab/osgi.rb
CHANGED
@@ -24,7 +24,7 @@ module OpenHAB
|
|
24
24
|
#
|
25
25
|
def services(name, filter: nil)
|
26
26
|
(bundle_context.get_service_references(name, filter) || []).map do |reference|
|
27
|
-
logger.trace "OSGi service found for '#{name}' using OSGi Service Reference #{reference}"
|
27
|
+
logger.trace { "OSGi service found for '#{name}' using OSGi Service Reference #{reference}" }
|
28
28
|
bundle_context.get_service(reference)
|
29
29
|
end
|
30
30
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openhab-scripting
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.30.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian O'Connell
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2024-
|
13
|
+
date: 2024-10-03 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
@@ -490,7 +490,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
490
490
|
- !ruby/object:Gem::Version
|
491
491
|
version: '0'
|
492
492
|
requirements: []
|
493
|
-
rubygems_version: 3.5.
|
493
|
+
rubygems_version: 3.5.20
|
494
494
|
signing_key:
|
495
495
|
specification_version: 4
|
496
496
|
summary: JRuby Helper Libraries for openHAB Scripting
|